diff --git a/frontend/src/app/components/footer/footer.component.html b/frontend/src/app/components/footer/footer.component.html index 728fd4403..d331505d1 100644 --- a/frontend/src/app/components/footer/footer.component.html +++ b/frontend/src/app/components/footer/footer.component.html @@ -1,8 +1,20 @@ - + diff --git a/node_modules/.bin/atob b/node_modules/.bin/atob new file mode 120000 index 000000000..a68344a38 --- /dev/null +++ b/node_modules/.bin/atob @@ -0,0 +1 @@ +../atob/bin/atob.js \ No newline at end of file diff --git a/node_modules/.bin/docker b/node_modules/.bin/docker new file mode 120000 index 000000000..d60328c0e --- /dev/null +++ b/node_modules/.bin/docker @@ -0,0 +1 @@ +../docker/docker \ No newline at end of file diff --git a/node_modules/.bin/docker.js b/node_modules/.bin/docker.js new file mode 120000 index 000000000..d60328c0e --- /dev/null +++ b/node_modules/.bin/docker.js @@ -0,0 +1 @@ +../docker/docker \ No newline at end of file diff --git a/node_modules/.bin/dox b/node_modules/.bin/dox new file mode 120000 index 000000000..66e67056f --- /dev/null +++ b/node_modules/.bin/dox @@ -0,0 +1 @@ +../dox/bin/dox \ No newline at end of file diff --git a/node_modules/.bin/errno b/node_modules/.bin/errno new file mode 120000 index 000000000..5a98e539c --- /dev/null +++ b/node_modules/.bin/errno @@ -0,0 +1 @@ +../errno/cli.js \ No newline at end of file diff --git a/node_modules/.bin/image-size b/node_modules/.bin/image-size new file mode 120000 index 000000000..f575317fa --- /dev/null +++ b/node_modules/.bin/image-size @@ -0,0 +1 @@ +../image-size/bin/image-size.js \ No newline at end of file diff --git a/node_modules/.bin/lessc b/node_modules/.bin/lessc new file mode 120000 index 000000000..87a5294c1 --- /dev/null +++ b/node_modules/.bin/lessc @@ -0,0 +1 @@ +../less/bin/lessc \ No newline at end of file diff --git a/node_modules/.bin/markdown-it b/node_modules/.bin/markdown-it new file mode 120000 index 000000000..894bcdb61 --- /dev/null +++ b/node_modules/.bin/markdown-it @@ -0,0 +1 @@ +../markdown-it/bin/markdown-it.js \ No newline at end of file diff --git a/node_modules/.bin/marked b/node_modules/.bin/marked new file mode 120000 index 000000000..a8d872e9d --- /dev/null +++ b/node_modules/.bin/marked @@ -0,0 +1 @@ +../marked/bin/marked \ No newline at end of file diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 120000 index 000000000..fbb7ee0ee --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp new file mode 120000 index 000000000..017896ceb --- /dev/null +++ b/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 000000000..5aaadf42c --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/node_modules/.bin/sshpk-conv b/node_modules/.bin/sshpk-conv new file mode 120000 index 000000000..a2a295c80 --- /dev/null +++ b/node_modules/.bin/sshpk-conv @@ -0,0 +1 @@ +../sshpk/bin/sshpk-conv \ No newline at end of file diff --git a/node_modules/.bin/sshpk-sign b/node_modules/.bin/sshpk-sign new file mode 120000 index 000000000..766b9b3a7 --- /dev/null +++ b/node_modules/.bin/sshpk-sign @@ -0,0 +1 @@ +../sshpk/bin/sshpk-sign \ No newline at end of file diff --git a/node_modules/.bin/sshpk-verify b/node_modules/.bin/sshpk-verify new file mode 120000 index 000000000..bfd7e3ade --- /dev/null +++ b/node_modules/.bin/sshpk-verify @@ -0,0 +1 @@ +../sshpk/bin/sshpk-verify \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid new file mode 120000 index 000000000..b3e45bc53 --- /dev/null +++ b/node_modules/.bin/uuid @@ -0,0 +1 @@ +../uuid/bin/uuid \ No newline at end of file diff --git a/node_modules/.bin/watchr b/node_modules/.bin/watchr new file mode 120000 index 000000000..9aa6dd9e8 --- /dev/null +++ b/node_modules/.bin/watchr @@ -0,0 +1 @@ +../watchr/bin/watchr \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 000000000..50d693c0c --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,1302 @@ +{ + "name": "fasten-onprem", + "lockfileVersion": 2, + "requires": true, + "packages": { + "node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "optional": true, + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/ambi": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-3.2.0.tgz", + "integrity": "sha512-nj5sHLPFd7u2OLmHdFs4DHt3gK6edpNw35hTRIKyI/Vd2Th5e4io50rw1lhmCdUNO2Mm4/4FkHmv6shEANAWcw==", + "dependencies": { + "editions": "^2.1.0", + "typechecker": "^4.3.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "optional": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "optional": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "optional": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "optional": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "optional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "optional": true + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "optional": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "optional": true + }, + "node_modules/cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "dependencies": { + "boom": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/csextends": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/csextends/-/csextends-1.2.0.tgz", + "integrity": "sha512-S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashdash/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/docker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/docker/-/docker-1.0.0.tgz", + "integrity": "sha512-U66G/kvvsCTUh6VsZqnWgsoSG1KRu5jR473fn/64E6EU9cH65afCITx2qITmNPkr3IOehcn1wwXHmIvHYBlLgQ==", + "dependencies": { + "async": "^1.4.0", + "commander": "^2.9.0", + "css": "^2.2.1", + "dox": "^0.8.0", + "ejs": "^2.3.3", + "extend": "^3.0.0", + "highlight.js": "^9.3.0", + "less": "^2.5.1", + "markdown-it": "^6.0.1", + "mkdirp": "^0.5.1", + "repeating": "^2.0.1", + "strip-indent": "^2.0.0", + "toc": "^0.4.0", + "watchr": "^2.4.13" + }, + "bin": { + "docker": "docker", + "docker.js": "docker" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dox": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/dox/-/dox-0.8.1.tgz", + "integrity": "sha512-CJJCQS6XYJ2FQJox4ey7pUdaAjDusPLqGtfe3Jli4N+m2jBKrT9zwEsh2thV9W5d8F359AMWqkWk50CuH3r8dw==", + "dependencies": { + "commander": "~2.9.0", + "jsdoctypeparser": "^1.2.0", + "marked": "~0.3.5" + }, + "bin": { + "dox": "bin/dox" + } + }, + "node_modules/dox/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/eachr": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.3.0.tgz", + "integrity": "sha512-yKWuGwOE283CTgbEuvqXXusLH4VBXnY2nZbDkeWev+cpAXY6zCIADSPLdvfkAROc0t8S4l07U1fateCdEDuuvg==", + "dependencies": { + "editions": "^2.2.0", + "typechecker": "^4.9.0" + }, + "engines": { + "node": ">=0.10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "optional": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/editions": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz", + "integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==", + "dependencies": { + "errlop": "^2.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/errlop": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz", + "integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==", + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extendr": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/extendr/-/extendr-3.5.0.tgz", + "integrity": "sha512-7zpVbnnZy91J4k916ZGwpys56DEgJc/prTXDiqCYe/Mud5pqdVsSc9mG/U6sz3lQEvHs81i8Zi7whsFwifhZyw==", + "dependencies": { + "editions": "^2.2.0", + "typechecker": "^4.7.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + } + }, + "node_modules/extract-opts": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0.tgz", + "integrity": "sha512-M7Y+1cJDkzOWqvGH5F/V2qgkD6+uitW3NV9rQGl+pLSVuXZ4IDDQgxxMeLPKcWUyfypBWczIILiroSuhXG7Ytg==", + "dependencies": { + "eachr": "^3.2.0", + "editions": "^2.2.0", + "typechecker": "^4.9.0" + }, + "engines": { + "node": ">=0.10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/getpass/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + }, + "node_modules/har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ==", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw==", + "deprecated": "this library is no longer supported", + "optional": true, + "dependencies": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==", + "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "optional": true, + "dependencies": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "deprecated": "Support has ended for 9.x series. Upgrade to @latest", + "hasInstallScript": true, + "engines": { + "node": "*" + } + }, + "node_modules/hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==", + "optional": true, + "dependencies": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/ignorefs": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.4.1.tgz", + "integrity": "sha512-1whgvOsPWFZRNA/5OFhIk56C9Y39+/CYaRVNvsZZkLymacOSqqdSU53xk8CP3G2u5gz2PX6RLxqKPcsIpDriog==", + "dependencies": { + "editions": "^2.2.0", + "ignorepatterns": "^1.4.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ignorepatterns": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.4.0.tgz", + "integrity": "sha512-YPBIFRB25iZD0WiLxmToe80+QU+mZI+bUlEh3Ze/4gbhlXHdQFk0SwAFQtPOiBAoDv3FvhtSTDUCD9DKFsHTRA==", + "dependencies": { + "editions": "^2.2.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "optional": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "optional": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "optional": true + }, + "node_modules/jsdoctypeparser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "integrity": "sha512-osXm4Fr1o/Jc0YwUM7DHUliYtaunLQxh4ynZgtN02mTUN1VsNbMy75DFSkKRne8xE8jiGRV9NKVhYYYa8ZIHXQ==", + "dependencies": { + "lodash": "^3.7.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "optional": true + }, + "node_modules/json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "optional": true, + "dependencies": { + "jsonify": "^0.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "optional": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=0.12" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/linkify-it": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz", + "integrity": "sha512-eGHwtlABkp1NOJSiKUNqBf3SYAS5jPHtvRXPAgNaQwTqmkTahjtiLH9NtxdR5IOPhNvwNMN/diswSfZKzUkhGg==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==" + }, + "node_modules/markdown-it": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-6.1.1.tgz", + "integrity": "sha512-woFl7h/sqt9xRmiMweNuO7nu+w8Lz3SXsDlvE3TYeu1SdPqQ+VW4GZyaKP442Bq6XUN6V6IQjJTR93RDYG2mjw==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "~1.2.2", + "mdurl": "~1.0.1", + "uc.micro": "^1.0.1" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "optional": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==", + "optional": true + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "optional": true + }, + "node_modules/qs": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.1.tgz", + "integrity": "sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ==", + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "optional": true, + "dependencies": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/safefs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-4.2.0.tgz", + "integrity": "sha512-1amPBO92jw/hWS+gH/u7z7EL7YxaJ8WecBQl49tMQ6Y6EQfndxNNKwlPqDOcwpUetdmK6nKLoVdjybVScRwq5A==", + "dependencies": { + "editions": "^2.2.0", + "graceful-fs": "^4.2.3" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + } + }, + "node_modules/safeps": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/safeps/-/safeps-7.0.1.tgz", + "integrity": "sha512-aFREKZzceHZH3KZTwjhDI1oOOcyAEBcQHjImJS/Mmx+KC31EQCgwiPKfwhJLBX7R4Y5ioI2D/VEcQ6U6ya2MJw==", + "dependencies": { + "editions": "^1.3.3", + "extract-opts": "^3.3.1", + "safefs": "^4.1.0", + "taskgroup": "^5.0.0", + "typechecker": "^4.3.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/safeps/node_modules/editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "optional": true + }, + "node_modules/scandirectory": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz", + "integrity": "sha512-uT0CW8Z3YyoIQs2gXIZgR5miLkN/UNl+5IptQIq1YfD2NhFldikYlC3dkOE6MvF15OZMOxjg8yOjx5J/vIIPUA==", + "dependencies": { + "ignorefs": "^1.0.0", + "safefs": "^3.1.2", + "taskgroup": "^4.0.5" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/scandirectory/node_modules/ambi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz", + "integrity": "sha512-5nS0gYMPNgZz/UALDHMStcwO42youpIWBQVbI92vV5j0+2bMxv/iVqearrLu3/f0XaU6xVIbf3RRtDxOcHxSkw==", + "dependencies": { + "editions": "^1.1.1", + "typechecker": "^4.3.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/scandirectory/node_modules/editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/scandirectory/node_modules/safefs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz", + "integrity": "sha512-qqvuS8qslGUSgUKQbdsYIK8Qg0EAkykxlsdfy3jpBSnhtyPsee/8y4RLc5+3CD6TgazBmtT0ekoGicUTPzICdg==", + "dependencies": { + "graceful-fs": "*" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/scandirectory/node_modules/taskgroup": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz", + "integrity": "sha512-PD97E2OfwFH7SgeVRvR6K2c+NkKXZSwMMTdcM1t/3P+f70DUWbR81Qx7TF7dJj8dV631u4dhdBmhfDQjIZvGsg==", + "dependencies": { + "ambi": "^2.2.0", + "csextends": "^1.0.3" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slug": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/slug/-/slug-0.4.2.tgz", + "integrity": "sha512-HQRxdDjtXsKG1pw8rBXGRq9fdW2fS2xPaizvJ3MK89x9+V8U0Z8//meWzJUdFW52pFDGqkLfyX+Fij7lkRY6Kw==", + "dependencies": { + "unicode": ">= 0.3.1" + }, + "engines": { + "node": ">= 0.4.x" + } + }, + "node_modules/sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==", + "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "optional": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "optional": true + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/taskgroup": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-5.5.0.tgz", + "integrity": "sha512-YFkdc6HU+p3xO2lZ1MWdx7R7EbrLF/bpXv5k9635bTzdgOLNbmnsDg5alSpZost+PYMk40d6ZDAJHBHNHiiLvw==", + "dependencies": { + "ambi": "3.2.0", + "eachr": "^3.2.0", + "editions": "^2.2.0", + "extendr": "^3.5.0", + "safeps": "7.0.1", + "unbounded": "^1.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + } + }, + "node_modules/toc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/toc/-/toc-0.4.0.tgz", + "integrity": "sha512-Z4MqUbtLQrbJLQQFLKK0g5tGmke0vqB8puHrXXgRfPyLJTcsn5ACy/uxVnMrg6wSWPoS2hvVpw6wSAFYAkAEVA==", + "dependencies": { + "entities": "~0.5.0", + "lodash": "~2.4.1", + "slug": "~0.4.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/toc/node_modules/entities": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-0.5.0.tgz", + "integrity": "sha512-T5XQtlzuW+PfeSsGp3uryfYQof820zYbnUnUDEkwUVIAfgYeixIN16c4jh8gs0SqJUTGLU0XD6QsvjEPbmdwzQ==" + }, + "node_modules/toc/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "optional": true + }, + "node_modules/typechecker": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.11.0.tgz", + "integrity": "sha512-lz39Mc/d1UBcF/uQFL5P8L+oWdIn/stvkUgHf0tPRW4aEwGGErewNXo2Nb6We2WslWifn00rhcHbbRWRcTGhuw==", + "dependencies": { + "editions": "^2.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/unbounded": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/unbounded/-/unbounded-1.3.0.tgz", + "integrity": "sha512-RWVCkvcoItljlNTz0iTdBQU6bDj+slVLNaWN7d6DXgH02FfYrz8ytcJ4OPW8b0HqmCehwufJHOIzjHWrQUXBvg==", + "dependencies": { + "editions": "^2.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/unicode": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/unicode/-/unicode-14.0.0.tgz", + "integrity": "sha512-BjinxTXkbm9Jomp/YBTMGusr4fxIG67fNGShHIRAL16Ur2GJTq2xvLi+sxuiJmInCmwqqev2BCFKyvbfp/yAkg==", + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "optional": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/watchr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.6.0.tgz", + "integrity": "sha512-eHqnPA71jn+lLf/c49mjXqQzzwKLmDdLZXiB53PtgBY8X75zqUWL2PmJWjJ45Bcy8PHOMDdVUCLEud36Lk5QZQ==", + "dependencies": { + "eachr": "^3.2.0", + "extendr": "^3.2.2", + "extract-opts": "^3.3.1", + "ignorefs": "^1.1.1", + "safefs": "^4.1.0", + "scandirectory": "^2.5.0", + "taskgroup": "^5.0.1", + "typechecker": "^4.3.0" + }, + "bin": { + "watchr": "bin/watchr" + }, + "engines": { + "node": ">=0.12" + } + } + } +} diff --git a/node_modules/ajv/.tonic_example.js b/node_modules/ajv/.tonic_example.js new file mode 100644 index 000000000..0c3cc86ce --- /dev/null +++ b/node_modules/ajv/.tonic_example.js @@ -0,0 +1,20 @@ +var Ajv = require('ajv'); +var ajv = Ajv({allErrors: true}); + +var schema = { + "properties": { + "foo": { "type": "string" }, + "bar": { "type": "number", "maximum": 3 } + } +}; + +var validate = ajv.compile(schema); + +test({"foo": "abc", "bar": 2}); +test({"foo": 2, "bar": 4}); + +function test(data) { + var valid = validate(data); + if (valid) console.log('Valid!'); + else console.log('Invalid: ' + ajv.errorsText(validate.errors)); +} \ No newline at end of file diff --git a/node_modules/ajv/LICENSE b/node_modules/ajv/LICENSE new file mode 100644 index 000000000..810539685 --- /dev/null +++ b/node_modules/ajv/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Evgeny Poberezkin + +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. + diff --git a/node_modules/ajv/README.md b/node_modules/ajv/README.md new file mode 100644 index 000000000..9d4fcbb9c --- /dev/null +++ b/node_modules/ajv/README.md @@ -0,0 +1,1213 @@ +Ajv logo + +# Ajv: Another JSON Schema Validator + +The fastest JSON Schema validator for node.js and browser. Supports [v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals). + + +[![Build Status](https://travis-ci.org/epoberezkin/ajv.svg?branch=master)](https://travis-ci.org/epoberezkin/ajv) +[![npm version](https://badge.fury.io/js/ajv.svg)](https://www.npmjs.com/package/ajv) +[![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv) +[![Code Climate](https://codeclimate.com/github/epoberezkin/ajv/badges/gpa.svg)](https://codeclimate.com/github/epoberezkin/ajv) +[![Coverage Status](https://coveralls.io/repos/epoberezkin/ajv/badge.svg?branch=master&service=github)](https://coveralls.io/github/epoberezkin/ajv?branch=master) +[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv) + + +__Please note__: You can start using NEW beta version [5.0.4](https://github.com/epoberezkin/ajv/releases/tag/5.0.4-beta.3) (see [migration guide from 4.x.x](https://github.com/epoberezkin/ajv/releases/tag/5.0.1-beta.0)) with the support of JSON-Schema draft-06 (not officially published yet): `npm install ajv@^5.0.4-beta`. + +Also see [docs](https://github.com/epoberezkin/ajv/tree/5.0.4-beta.3) for 5.0.4. + + +## Contents + +- [Performance](#performance) +- [Features](#features) +- [Getting started](#getting-started) +- [Frequently Asked Questions](https://github.com/epoberezkin/ajv/blob/master/FAQ.md) +- [Using in browser](#using-in-browser) +- [Command line interface](#command-line-interface) +- Validation + - [Keywords](#validation-keywords) + - [Formats](#formats) + - [$data reference](#data-reference) + - NEW: [$merge and $patch keywords](#merge-and-patch-keywords) + - [Defining custom keywords](#defining-custom-keywords) + - [Asynchronous schema compilation](#asynchronous-compilation) + - [Asynchronous validation](#asynchronous-validation) +- Modifying data during validation + - [Filtering data](#filtering-data) + - [Assigning defaults](#assigning-defaults) + - [Coercing data types](#coercing-data-types) +- API + - [Methods](#api) + - [Options](#options) + - [Validation errors](#validation-errors) +- [Related packages](#related-packages) +- [Packages using Ajv](#some-packages-using-ajv) +- [Tests, Contributing, History, License](#tests) + + +## Performance + +Ajv generates code using [doT templates](https://github.com/olado/doT) to turn JSON schemas into super-fast validation functions that are efficient for v8 optimization. + +Currently Ajv is the fastest and the most standard compliant validator according to these benchmarks: + +- [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place +- [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster +- [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html) +- [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html) + + +Performace of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark): + +[![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=32,4,1&chs=600x416&chxl=-1:%7Cajv%7Cis-my-json-valid%7Cjsen%7Cschemasaurus%7Cthemis%7Cz-schema%7Cjsck%7Cjsonschema%7Cskeemas%7Ctv4%7Cjayschema&chd=t:100,68,61,22.8,17.6,6.6,2.7,0.9,0.7,0.4,0.1)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance) + + +## Features + +- Ajv implements full [JSON Schema draft 4](http://json-schema.org/) standard: + - all validation keywords (see [JSON-Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md)) + - full support of remote refs (remote schemas have to be added with `addSchema` or compiled to be available) + - support of circular references between schemas + - correct string lengths for strings with unicode pairs (can be turned off) + - [formats](#formats) defined by JSON Schema draft 4 standard and custom formats (can be turned off) + - [validates schemas against meta-schema](#api-validateschema) +- supports [browsers](#using-in-browser) and nodejs 0.10-6.x +- [asynchronous loading](#asynchronous-compilation) of referenced schemas during compilation +- "All errors" validation mode with [option allErrors](#options) +- [error messages with parameters](#validation-errors) describing error reasons to allow creating custom error messages +- i18n error messages support with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package +- [filtering data](#filtering-data) from additional properties +- [assigning defaults](#assigning-defaults) to missing properties and items +- [coercing data](#coercing-data-types) to the types specified in `type` keywords +- [custom keywords](#defining-custom-keywords) +- keywords `switch`, `constant`, `contains`, `patternGroups`, `patternRequired`, `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` from [JSON-schema v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) with [option v5](#options) +- [v5 meta-schema](https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#) for schemas using v5 keywords +- [v5 $data reference](#data-reference) to use values from the validated data as values for the schema keywords +- [asynchronous validation](#asynchronous-validation) of custom formats and keywords + +Currently Ajv is the only validator that passes all the tests from [JSON Schema Test Suite](https://github.com/json-schema/JSON-Schema-Test-Suite) (according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), apart from the test that requires that `1.0` is not an integer that is impossible to satisfy in JavaScript). + + +## Install + +``` +npm install ajv +``` + +To install a stable beta version [5.0.4](https://github.com/epoberezkin/ajv/releases/tag/5.0.4-beta.3) (see [migration guide from 4.x.x](https://github.com/epoberezkin/ajv/releases/tag/5.0.1-beta.0)): + +``` +npm install ajv@^5.0.4-beta +``` + + +## Getting started + +Try it in the node REPL: https://tonicdev.com/npm/ajv + + +The fastest validation call: + +```javascript +var Ajv = require('ajv'); +var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true} +var validate = ajv.compile(schema); +var valid = validate(data); +if (!valid) console.log(validate.errors); +``` + +or with less code + +```javascript +// ... +var valid = ajv.validate(schema, data); +if (!valid) console.log(ajv.errors); +// ... +``` + +or + +```javascript +// ... +ajv.addSchema(schema, 'mySchema'); +var valid = ajv.validate('mySchema', data); +if (!valid) console.log(ajv.errorsText()); +// ... +``` + +See [API](#api) and [Options](#options) for more details. + +Ajv compiles schemas to functions and caches them in all cases (using schema stringified with [json-stable-stringify](https://github.com/substack/json-stable-stringify) as a key), so that the next time the same schema is used (not necessarily the same object instance) it won't be compiled again. + +The best performance is achieved when using compiled functions returned by `compile` or `getSchema` methods (there is no additional function call). + +__Please note__: every time validation function or `ajv.validate` are called `errors` property is overwritten. You need to copy `errors` array reference to another variable if you want to use it later (e.g., in the callback). See [Validation errors](#validation-errors) + + +## Using in browser + +You can require Ajv directly from the code you browserify - in this case Ajv will be a part of your bundle. + +If you need to use Ajv in several bundles you can create a separate UMD bundle using `npm run bundle` script (thanks to [siddo420](https://github.com/siddo420)). + +Then you need to load Ajv in the browser: +```html + +``` + +This bundle can be used with different module systems or creates global `Ajv` if no module system is found. + +The browser bundle is available on [cdnjs](https://cdnjs.com/libraries/ajv). + +Ajv is tested with these browsers: + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/epoberezkin.svg)](https://saucelabs.com/u/epoberezkin) + +__Please note__: some frameworks, e.g. Dojo, may redefine global require in such way that is not compatible with CommonJS module format. In such case Ajv bundle has to be loaded before the framework and then you can use global Ajv (see issue [#234](https://github.com/epoberezkin/ajv/issues/234)). + + +## Command line interface + +CLI is available as a separate npm package [ajv-cli](https://github.com/jessedc/ajv-cli). It supports: + +- compiling JSON-schemas to test their validity +- BETA: generating standalone module exporting a validation function to be used without Ajv (using [ajv-pack](https://github.com/epoberezkin/ajv-pack)) +- validating data file(s) against JSON-schema +- testing expected validity of data against JSON-schema +- referenced schemas +- custom meta-schemas +- files in JSON and JavaScript format +- all Ajv options +- reporting changes in data after validation in [JSON-patch](https://tools.ietf.org/html/rfc6902) format + + +## Validation keywords + +Ajv supports all validation keywords from draft 4 of JSON-schema standard: + +- [type](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#type) +- [for numbers](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-numbers) - maximum, minimum, exclusiveMaximum, exclusiveMinimum, multipleOf +- [for strings](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-strings) - maxLength, minLength, pattern, format +- [for arrays](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-arrays) - maxItems, minItems, uniqueItems, items, additionalItems +- [for objects](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-objects) - maxProperties, minproperties, required, properties, patternProperties, additionalProperties, dependencies +- [compound keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-all-types) - enum, not, oneOf, anyOf, allOf + +With option `v5: true` Ajv also supports all validation keywords and [$data reference](#data-reference) from [v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) for JSON-schema standard: + +- [switch](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#switch-v5-proposal) - conditional validation with a sequence of if/then clauses +- [contains](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#contains-v5-proposal) - check that array contains a valid item +- [constant](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#constant-v5-proposal) - check that data is equal to some value +- [patternGroups](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#patterngroups-v5-proposal) - a more powerful alternative to patternProperties +- [patternRequired](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#patternrequired-v5-proposal) - like `required` but with patterns that some property should match. +- [formatMaximum, formatMinimum, formatExclusiveMaximum, formatExclusiveMinimum](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#formatmaximum--formatminimum-and-exclusiveformatmaximum--exclusiveformatminimum-v5-proposal) - setting limits for date, time, etc. + +See [JSON-Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md) for more details. + + +## Formats + +The following formats are supported for string validation with "format" keyword: + +- _date_: full-date according to [RFC3339](http://tools.ietf.org/html/rfc3339#section-5.6). +- _time_: time with optional time-zone. +- _date-time_: date-time from the same source (time-zone is mandatory). `date`, `time` and `date-time` validate ranges in `full` mode and only regexp in `fast` mode (see [options](#options)). +- _uri_: full uri with optional protocol. +- _email_: email address. +- _hostname_: host name acording to [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5). +- _ipv4_: IP address v4. +- _ipv6_: IP address v6. +- _regex_: tests whether a string is a valid regular expression by passing it to RegExp constructor. +- _uuid_: Universally Unique IDentifier according to [RFC4122](http://tools.ietf.org/html/rfc4122). +- _json-pointer_: JSON-pointer according to [RFC6901](https://tools.ietf.org/html/rfc6901). +- _relative-json-pointer_: relative JSON-pointer according to [this draft](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00). + +There are two modes of format validation: `fast` and `full`. This mode affects formats `date`, `time`, `date-time`, `uri`, `email`, and `hostname`. See [Options](#options) for details. + +You can add additional formats and replace any of the formats above using [addFormat](#api-addformat) method. + +The option `unknownFormats` allows to change the behaviour in case an unknown format is encountered - Ajv can either ignore them (default now) or fail schema compilation (will be the default in 5.0.0). + +You can find patterns used for format validation and the sources that were used in [formats.js](https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js). + + +## $data reference + +With `v5` option you can use values from the validated data as the values for the schema keywords. See [v5 proposal](https://github.com/json-schema/json-schema/wiki/$data-(v5-proposal)) for more information about how it works. + +`$data` reference is supported in the keywords: constant, enum, format, maximum/minimum, exclusiveMaximum / exclusiveMinimum, maxLength / minLength, maxItems / minItems, maxProperties / minProperties, formatMaximum / formatMinimum, formatExclusiveMaximum / formatExclusiveMinimum, multipleOf, pattern, required, uniqueItems. + +The value of "$data" should be a [JSON-pointer](https://tools.ietf.org/html/rfc6901) to the data (the root is always the top level data object, even if the $data reference is inside a referenced subschema) or a [relative JSON-pointer](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00) (it is relative to the current point in data; if the $data reference is inside a referenced subschema it cannot point to the data outside of the root level for this subschema). + +Examples. + +This schema requires that the value in property `smaller` is less or equal than the value in the property larger: + +```javascript +var schema = { + "properties": { + "smaller": { + "type": "number", + "maximum": { "$data": "1/larger" } + }, + "larger": { "type": "number" } + } +}; + +var validData = { + smaller: 5, + larger: 7 +}; +``` + +This schema requires that the properties have the same format as their field names: + +```javascript +var schema = { + "additionalProperties": { + "type": "string", + "format": { "$data": "0#" } + } +}; + +var validData = { + 'date-time': '1963-06-19T08:30:06.283185Z', + email: 'joe.bloggs@example.com' +} +``` + +`$data` reference is resolved safely - it won't throw even if some property is undefined. If `$data` resolves to `undefined` the validation succeeds (with the exclusion of `constant` keyword). If `$data` resolves to incorrect type (e.g. not "number" for maximum keyword) the validation fails. + + +## $merge and $patch keywords + +With v5 option and the package [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) you can use the keywords `$merge` and `$patch` that allow extending JSON-schemas with patches using formats [JSON Merge Patch (RFC 7396)](https://tools.ietf.org/html/rfc7396) and [JSON Patch (RFC 6902)](https://tools.ietf.org/html/rfc6902). + +To add keywords `$merge` and `$patch` to Ajv instance use this code: + +```javascript +require('ajv-merge-patch')(ajv); +``` + +Examples. + +Using `$merge`: + +```json +{ + "$merge": { + "source": { + "type": "object", + "properties": { "p": { "type": "string" } }, + "additionalProperties": false + }, + "with": { + "properties": { "q": { "type": "number" } } + } + } +} +``` + +Using `$patch`: + +```json +{ + "$patch": { + "source": { + "type": "object", + "properties": { "p": { "type": "string" } }, + "additionalProperties": false + }, + "with": [ + { "op": "add", "path": "/properties/q", "value": { "type": "number" } } + ] + } +} +``` + +The schemas above are equivalent to this schema: + +```json +{ + "type": "object", + "properties": { + "p": { "type": "string" }, + "q": { "type": "number" } + }, + "additionalProperties": false +} +``` + +The properties `source` and `with` in the keywords `$merge` and `$patch` can use absolute or relative `$ref` to point to other schemas previously added to the Ajv instance or to the fragments of the current schema. + +See the package [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) for more information. + + +## Defining custom keywords + +The advantages of using custom keywords are: + +- allow creating validation scenarios that cannot be expressed using JSON-Schema +- simplify your schemas +- help bringing a bigger part of the validation logic to your schemas +- make your schemas more expressive, less verbose and closer to your application domain +- implement custom data processors that modify your data (`modifying` option MUST be used in keyword definition) and/or create side effects while the data is being validated + +If a keyword is used only for side-effects and its validation result is pre-defined, use option `valid: true/false` in keyword definition to simplify both generated code (no error handling in case of `valid: true`) and your keyword functions (no need to return any validation result). + +The concerns you have to be aware of when extending JSON-schema standard with custom keywords are the portability and understanding of your schemas. You will have to support these custom keywords on other platforms and to properly document these keywords so that everybody can understand them in your schemas. + +You can define custom keywords with [addKeyword](#api-addkeyword) method. Keywords are defined on the `ajv` instance level - new instances will not have previously defined keywords. + +Ajv allows defining keywords with: +- validation function +- compilation function +- macro function +- inline compilation function that should return code (as string) that will be inlined in the currently compiled schema. + +Example. `range` and `exclusiveRange` keywords using compiled schema: + +```javascript +ajv.addKeyword('range', { type: 'number', compile: function (sch, parentSchema) { + var min = sch[0]; + var max = sch[1]; + + return parentSchema.exclusiveRange === true + ? function (data) { return data > min && data < max; } + : function (data) { return data >= min && data <= max; } +} }); + +var schema = { "range": [2, 4], "exclusiveRange": true }; +var validate = ajv.compile(schema); +console.log(validate(2.01)); // true +console.log(validate(3.99)); // true +console.log(validate(2)); // false +console.log(validate(4)); // false +``` + +Several custom keywords (typeof, instanceof, range and propertyNames) are defined in [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package - they can be used for your schemas and as a starting point for your own custom keywords. + +See [Defining custom keywords](https://github.com/epoberezkin/ajv/blob/master/CUSTOM.md) for more details. + + +## Asynchronous compilation + +During asynchronous compilation remote references are loaded using supplied function. See `compileAsync` method and `loadSchema` [option](#options). + +Example: + +```javascript +var ajv = new Ajv({ loadSchema: loadSchema }); + +ajv.compileAsync(schema, function (err, validate) { + if (err) return; + var valid = validate(data); +}); + +function loadSchema(uri, callback) { + request.json(uri, function(err, res, body) { + if (err || res.statusCode >= 400) + callback(err || new Error('Loading error: ' + res.statusCode)); + else + callback(null, body); + }); +} +``` + +__Please note__: [Option](#options) `missingRefs` should NOT be set to `"ignore"` or `"fail"` for asynchronous compilation to work. + + +## Asynchronous validation + +Example in node REPL: https://tonicdev.com/esp/ajv-asynchronous-validation + +You can define custom formats and keywords that perform validation asyncronously by accessing database or some service. You should add `async: true` in the keyword or format defnition (see [addFormat](#api-addformat), [addKeyword](#api-addkeyword) and [Defining custom keywords](#defining-custom-keywords)). + +If your schema uses asynchronous formats/keywords or refers to some schema that contains them it should have `"$async": true` keyword so that Ajv can compile it correctly. If asynchronous format/keyword or reference to asynchronous schema is used in the schema without `$async` keyword Ajv will throw an exception during schema compilation. + +__Please note__: all asynchronous subschemas that are referenced from the current or other schemas should have `"$async": true` keyword as well, otherwise the schema compilation will fail. + +Validation function for an asynchronous custom format/keyword should return a promise that resolves to `true` or `false` (or rejects with `new Ajv.ValidationError(errors)` if you want to return custom errors from the keyword function). Ajv compiles asynchronous schemas to either [generator function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*) (default) that can be optionally transpiled with [regenerator](https://github.com/facebook/regenerator) or to [es7 async function](http://tc39.github.io/ecmascript-asyncawait/) that can be transpiled with [nodent](https://github.com/MatAtBread/nodent) or with regenerator as well. You can also supply any other transpiler as a function. See [Options](#options). + +The compiled validation function has `$async: true` property (if the schema is asynchronous), so you can differentiate these functions if you are using both syncronous and asynchronous schemas. + +If you are using generators, the compiled validation function can be either wrapped with [co](https://github.com/tj/co) (default) or returned as generator function, that can be used directly, e.g. in [koa](http://koajs.com/) 1.0. `co` is a small library, it is included in Ajv (both as npm dependency and in the browser bundle). + +Generator functions are currently supported in Chrome, Firefox and node.js (0.11+); if you are using Ajv in other browsers or in older versions of node.js you should use one of available transpiling options. All provided async modes use global Promise class. If your platform does not have Promise you should use a polyfill that defines it. + +Validation result will be a promise that resolves to `true` or rejects with an exception `Ajv.ValidationError` that has the array of validation errors in `errors` property. + + +Example: + +```javascript +/** + * without "async" and "transpile" options (or with option {async: true}) + * Ajv will choose the first supported/installed option in this order: + * 1. native generator function wrapped with co + * 2. es7 async functions transpiled with nodent + * 3. es7 async functions transpiled with regenerator + */ + +var ajv = new Ajv; + +ajv.addKeyword('idExists', { + async: true, + type: 'number', + validate: checkIdExists +}); + + +function checkIdExists(schema, data) { + return knex(schema.table) + .select('id') + .where('id', data) + .then(function (rows) { + return !!rows.length; // true if record is found + }); +} + +var schema = { + "$async": true, + "properties": { + "userId": { + "type": "integer", + "idExists": { "table": "users" } + }, + "postId": { + "type": "integer", + "idExists": { "table": "posts" } + } + } +}; + +var validate = ajv.compile(schema); + +validate({ userId: 1, postId: 19 })) +.then(function (valid) { + // "valid" is always true here + console.log('Data is valid'); +}) +.catch(function (err) { + if (!(err instanceof Ajv.ValidationError)) throw err; + // data is invalid + console.log('Validation errors:', err.errors); +}); + +``` + +### Using transpilers with asyncronous validation functions. + +To use a transpiler you should separately install it (or load its bundle in the browser). + +Ajv npm package includes minified browser bundles of regenerator and nodent in dist folder. + + +#### Using nodent + +```javascript +var ajv = new Ajv({ /* async: 'es7', */ transpile: 'nodent' }); +var validate = ajv.compile(schema); // transpiled es7 async function +validate(data).then(successFunc).catch(errorFunc); +``` + +`npm install nodent` or use `nodent.min.js` from dist folder of npm package. + + +#### Using regenerator + +```javascript +var ajv = new Ajv({ /* async: 'es7', */ transpile: 'regenerator' }); +var validate = ajv.compile(schema); // transpiled es7 async function +validate(data).then(successFunc).catch(errorFunc); +``` + +`npm install regenerator` or use `regenerator.min.js` from dist folder of npm package. + + +#### Using other transpilers + +```javascript +var ajv = new Ajv({ async: 'es7', transpile: transpileFunc }); +var validate = ajv.compile(schema); // transpiled es7 async function +validate(data).then(successFunc).catch(errorFunc); +``` + +See [Options](#options). + + +#### Comparison of async modes + +|mode|transpile
speed*|run-time
speed*|bundle
size| +|---|:-:|:-:|:-:| +|generators
(native)|-|1.0|-| +|es7.nodent|1.35|1.1|183Kb| +|es7.regenerator|1.0|2.7|322Kb| +|regenerator|1.0|3.2|322Kb| + +\* Relative performance in node v.4, smaller is better. + +[nodent](https://github.com/MatAtBread/nodent) has several advantages: + +- much smaller browser bundle than regenerator +- almost the same performance of generated code as native generators in nodejs and the latest Chrome +- much better performace than native generators in other browsers +- works in IE 9 (regenerator does not) + +[regenerator](https://github.com/facebook/regenerator) is a more widely adopted alternative. + + +## Filtering data + +With [option `removeAdditional`](#options) (added by [andyscott](https://github.com/andyscott)) you can filter data during the validation. + +This option modifies original data. + +Example: + +```javascript +var ajv = new Ajv({ removeAdditional: true }); +var schema = { + "additionalProperties": false, + "properties": { + "foo": { "type": "number" }, + "bar": { + "additionalProperties": { "type": "number" }, + "properties": { + "baz": { "type": "string" } + } + } + } +} + +var data = { + "foo": 0, + "additional1": 1, // will be removed; `additionalProperties` == false + "bar": { + "baz": "abc", + "additional2": 2 // will NOT be removed; `additionalProperties` != false + }, +} + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": 0, "bar": { "baz": "abc", "additional2": 2 } +``` + +If `removeAdditional` option in the example above were `"all"` then both `additional1` and `additional2` properties would have been removed. + +If the option were `"failing"` then property `additional1` would have been removed regardless of its value and property `additional2` would have been removed only if its value were failing the schema in the inner `additionalProperties` (so in the example above it would have stayed because it passes the schema, but any non-number would have been removed). + +__Please note__: If you use `removeAdditional` option with `additionalProperties` keyword inside `anyOf`/`oneOf` keywords your validation can fail with this schema, for example: + +```json +{ + "type": "object", + "oneOf": [ + { + "properties": { + "foo": { "type": "string" } + }, + "required": [ "foo" ], + "additionalProperties": false + }, + { + "properties": { + "bar": { "type": "integer" } + }, + "required": [ "bar" ], + "additionalProperties": false + } + ] +} +``` + +The intention of the schema above is to allow objects with either the string property "foo" or the integer property "bar", but not with both and not with any other properties. + +With the option `removeAdditional: true` the validation will pass for the object `{ "foo": "abc"}` but will fail for the object `{"bar": 1}`. It happens because while the first subschema in `oneOf` is validated, the property `bar` is removed because it is an additional property according to the standard (because it is not included in `properties` keyword in the same schema). + +While this behaviour is unexpected (issues [#129](https://github.com/epoberezkin/ajv/issues/129), [#134](https://github.com/epoberezkin/ajv/issues/134)), it is correct. To have the expected behaviour (both objects are allowed and additional properties are removed) the schema has to be refactored in this way: + +```json +{ + "type": "object", + "properties": { + "foo": { "type": "string" }, + "bar": { "type": "integer" } + }, + "additionalProperties": false, + "oneOf": [ + { "required": [ "foo" ] }, + { "required": [ "bar" ] } + ] +} +``` + +The schema above is also more efficient - it will compile into a faster function. + + +## Assigning defaults + +With [option `useDefaults`](#options) Ajv will assign values from `default` keyword in the schemas of `properties` and `items` (when it is the array of schemas) to the missing properties and items. + +This option modifies original data. + +__Please note__: by default the default value is inserted in the generated validation code as a literal (starting from v4.0), so the value inserted in the data will be the deep clone of the default in the schema. + +If you need to insert the default value in the data by reference pass the option `useDefaults: "shared"`. + +Inserting defaults by reference can be faster (in case you have an object in `default`) and it allows to have dynamic values in defaults, e.g. timestamp, without recompiling the schema. The side effect is that modifying the default value in any validated data instance will change the default in the schema and in other validated data instances. See example 3 below. + + +Example 1 (`default` in `properties`): + +```javascript +var ajv = new Ajv({ useDefaults: true }); +var schema = { + "type": "object", + "properties": { + "foo": { "type": "number" }, + "bar": { "type": "string", "default": "baz" } + }, + "required": [ "foo", "bar" ] +}; + +var data = { "foo": 1 }; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": 1, "bar": "baz" } +``` + +Example 2 (`default` in `items`): + +```javascript +var schema = { + "type": "array", + "items": [ + { "type": "number" }, + { "type": "string", "default": "foo" } + ] +} + +var data = [ 1 ]; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // [ 1, "foo" ] +``` + +Example 3 (inserting "defaults" by reference): + +```javascript +var ajv = new Ajv({ useDefaults: 'shared' }); + +var schema = { + properties: { + foo: { + default: { bar: 1 } + } + } +} + +var validate = ajv.compile(schema); + +var data = {}; +console.log(validate(data)); // true +console.log(data); // { foo: { bar: 1 } } + +data.foo.bar = 2; + +var data2 = {}; +console.log(validate(data2)); // true +console.log(data2); // { foo: { bar: 2 } } +``` + +`default` keywords in other cases are ignored: + +- not in `properties` or `items` subschemas +- in schemas inside `anyOf`, `oneOf` and `not` (see [#42](https://github.com/epoberezkin/ajv/issues/42)) +- in `if` subschema of v5 `switch` keyword +- in schemas generated by custom macro keywords + + +## Coercing data types + +When you are validating user inputs all your data properties are usually strings. The option `coerceTypes` allows you to have your data types coerced to the types specified in your schema `type` keywords, both to pass the validation and to use the correctly typed data afterwards. + +This option modifies original data. + +__Please note__: if you pass a scalar value to the validating function its type will be coerced and it will pass the validation, but the value of the variable you pass won't be updated because scalars are passed by value. + + +Example 1: + +```javascript +var ajv = new Ajv({ coerceTypes: true }); +var schema = { + "type": "object", + "properties": { + "foo": { "type": "number" }, + "bar": { "type": "boolean" } + }, + "required": [ "foo", "bar" ] +}; + +var data = { "foo": "1", "bar": "false" }; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": 1, "bar": false } +``` + +Example 2 (array coercions): + +```javascript +var ajv = new Ajv({ coerceTypes: 'array' }); +var schema = { + "properties": { + "foo": { "type": "array", "items": { "type": "number" } }, + "bar": { "type": "boolean" } + } +}; + +var data = { "foo": "1", "bar": ["false"] }; + +var validate = ajv.compile(schema); + +console.log(validate(data)); // true +console.log(data); // { "foo": [1], "bar": false } +``` + +The coercion rules, as you can see from the example, are different from JavaScript both to validate user input as expected and to have the coercion reversible (to correctly validate cases where different types are defined in subschemas of "anyOf" and other compound keywords). + +See [Coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md) for details. + + +## API + +##### new Ajv(Object options) -> Object + +Create Ajv instance. + +All the instance methods below are bound to the instance, so they can be used without the instance. + + +##### .compile(Object schema) -> Function<Object data> + +Generate validating function and cache the compiled schema for future use. + +Validating function returns boolean and has properties `errors` with the errors from the last validation (`null` if there were no errors) and `schema` with the reference to the original schema. + +Unless the option `validateSchema` is false, the schema will be validated against meta-schema and if schema is invalid the error will be thrown. See [options](#options). + + +##### .compileAsync(Object schema, Function callback) + +Asyncronous version of `compile` method that loads missing remote schemas using asynchronous function in `options.loadSchema`. Callback will always be called with 2 parameters: error (or null) and validating function. Error will be not null in the following cases: + +- missing schema can't be loaded (`loadSchema` calls callback with error). +- the schema containing missing reference is loaded, but the reference cannot be resolved. +- schema (or some referenced schema) is invalid. + +The function compiles schema and loads the first missing schema multiple times, until all missing schemas are loaded. + +See example in [Asynchronous compilation](#asynchronous-compilation). + + +##### .validate(Object schema|String key|String ref, data) -> Boolean + +Validate data using passed schema (it will be compiled and cached). + +Instead of the schema you can use the key that was previously passed to `addSchema`, the schema id if it was present in the schema or any previously resolved reference. + +Validation errors will be available in the `errors` property of Ajv instance (`null` if there were no errors). + +__Please note__: every time this method is called the errors are overwritten so you need to copy them to another variable if you want to use them later. + +If the schema is asynchronous (has `$async` keyword on the top level) this method returns a Promise. See [Asynchronous validation](#asynchronous-validation). + + +##### .addSchema(Array<Object>|Object schema [, String key]) + +Add schema(s) to validator instance. This method does not compile schemas (but it still validates them). Because of that dependencies can be added in any order and circular dependencies are supported. It also prevents unnecessary compilation of schemas that are containers for other schemas but not used as a whole. + +Array of schemas can be passed (schemas should have ids), the second parameter will be ignored. + +Key can be passed that can be used to reference the schema and will be used as the schema id if there is no id inside the schema. If the key is not passed, the schema id will be used as the key. + + +Once the schema is added, it (and all the references inside it) can be referenced in other schemas and used to validate data. + +Although `addSchema` does not compile schemas, explicit compilation is not required - the schema will be compiled when it is used first time. + +By default the schema is validated against meta-schema before it is added, and if the schema does not pass validation the exception is thrown. This behaviour is controlled by `validateSchema` option. + + +##### .addMetaSchema(Array<Object>|Object schema [, String key]) + +Adds meta schema(s) that can be used to validate other schemas. That function should be used instead of `addSchema` because there may be instance options that would compile a meta schema incorrectly (at the moment it is `removeAdditional` option). + +There is no need to explicitly add draft 4 meta schema (http://json-schema.org/draft-04/schema and http://json-schema.org/schema) - it is added by default, unless option `meta` is set to `false`. You only need to use it if you have a changed meta-schema that you want to use to validate your schemas. See `validateSchema`. + +With option `v5: true` [meta-schema that includes v5 keywords](https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json) also added. + + +##### .validateSchema(Object schema) -> Boolean + +Validates schema. This method should be used to validate schemas rather than `validate` due to the inconsistency of `uri` format in JSON-Schema standard. + +By default this method is called automatically when the schema is added, so you rarely need to use it directly. + +If schema doesn't have `$schema` property it is validated against draft 4 meta-schema (option `meta` should not be false) or against [v5 meta-schema](https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#) if option `v5` is true. + +If schema has `$schema` property then the schema with this id (that should be previously added) is used to validate passed schema. + +Errors will be available at `ajv.errors`. + + +##### .getSchema(String key) -> Function<Object data> + +Retrieve compiled schema previously added with `addSchema` by the key passed to `addSchema` or by its full reference (id). Returned validating function has `schema` property with the reference to the original schema. + + +##### .removeSchema([Object schema|String key|String ref|RegExp pattern]) + +Remove added/cached schema. Even if schema is referenced by other schemas it can be safely removed as dependent schemas have local references. + +Schema can be removed using: +- key passed to `addSchema` +- it's full reference (id) +- RegExp that should match schema id or key (meta-schemas won't be removed) +- actual schema object that will be stable-stringified to remove schema from cache + +If no parameter is passed all schemas but meta-schemas will be removed and the cache will be cleared. + + +##### .addFormat(String name, String|RegExp|Function|Object format) + +Add custom format to validate strings. It can also be used to replace pre-defined formats for Ajv instance. + +Strings are converted to RegExp. + +Function should return validation result as `true` or `false`. + +If object is passed it should have properties `validate`, `compare` and `async`: + +- _validate_: a string, RegExp or a function as described above. +- _compare_: an optional comparison function that accepts two strings and compares them according to the format meaning. This function is used with keywords `formatMaximum`/`formatMinimum` (from [v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) - `v5` option should be used). It should return `1` if the first value is bigger than the second value, `-1` if it is smaller and `0` if it is equal. +- _async_: an optional `true` value if `validate` is an asynchronous function; in this case it should return a promise that resolves with a value `true` or `false`. + +Custom formats can be also added via `formats` option. + + +##### .addKeyword(String keyword, Object definition) + +Add custom validation keyword to Ajv instance. + +Keyword should be different from all standard JSON schema keywords and different from previously defined keywords. There is no way to redefine keywords or to remove keyword definition from the instance. + +Keyword must start with a letter, `_` or `$`, and may continue with letters, numbers, `_`, `$`, or `-`. +It is recommended to use an application-specific prefix for keywords to avoid current and future name collisions. + +Example Keywords: +- `"xyz-example"`: valid, and uses prefix for the xyz project to avoid name collisions. +- `"example"`: valid, but not recommended as it could collide with future versions of JSON schema etc. +- `"3-example"`: invalid as numbers are not allowed to be the first character in a keyword + +Keyword definition is an object with the following properties: + +- _type_: optional string or array of strings with data type(s) that the keyword applies to. If not present, the keyword will apply to all types. +- _validate_: validating function +- _compile_: compiling function +- _macro_: macro function +- _inline_: compiling function that returns code (as string) +- _schema_: an optional `false` value used with "validate" keyword to not pass schema +- _metaSchema_: an optional meta-schema for keyword schema +- _modifying_: `true` MUST be passed if keyword modifies data +- _valid_: pass `true`/`false` to pre-define validation result, the result returned from validation function will be ignored. This option cannot be used with macro keywords. +- _$data_: an optional `true` value to support [$data reference](#data-reference) as the value of custom keyword. The reference will be resolved at validation time. If the keyword has meta-schema it would be extended to allow $data and it will be used to validate the resolved value. Supporting $data reference requires that keyword has validating function (as the only option or in addition to compile, macro or inline function). +- _async_: an optional `true` value if the validation function is asynchronous (whether it is compiled or passed in _validate_ property); in this case it should return a promise that resolves with a value `true` or `false`. This option is ignored in case of "macro" and "inline" keywords. +- _errors_: an optional boolean indicating whether keyword returns errors. If this property is not set Ajv will determine if the errors were set in case of failed validation. + +_compile_, _macro_ and _inline_ are mutually exclusive, only one should be used at a time. _validate_ can be used separately or in addition to them to support $data reference. + +__Please note__: If the keyword is validating data type that is different from the type(s) in its definition, the validation function will not be called (and expanded macro will not be used), so there is no need to check for data type inside validation function or inside schema returned by macro function (unless you want to enforce a specific type and for some reason do not want to use a separate `type` keyword for that). In the same way as standard keywords work, if the keyword does not apply to the data type being validated, the validation of this keyword will succeed. + +See [Defining custom keywords](#defining-custom-keywords) for more details. + + +##### .getKeyword(String keyword) -> Object|Boolean + +Returns custom keyword definition, `true` for pre-defined keywords and `false` if the keyword is unknown. + + +##### .removeKeyword(String keyword) + +Removes custom or pre-defined keyword so you can redefine them. + +While this method can be used to extend pre-defined keywords, it can also be used to completely change their meaning - it may lead to unexpected results. + +__Please note__: schemas compiled before the keyword is removed will continue to work without changes. To recompile schemas use `removeSchema` method and compile them again. + + +##### .errorsText([Array<Object> errors [, Object options]]) -> String + +Returns the text with all errors in a String. + +Options can have properties `separator` (string used to separate errors, ", " by default) and `dataVar` (the variable name that dataPaths are prefixed with, "data" by default). + + +## Options + +Defaults: + +```javascript +{ + // validation and reporting options: + v5: false, + allErrors: false, + verbose: false, + jsonPointers: false, + uniqueItems: true, + unicode: true, + format: 'fast', + formats: {}, + unknownFormats: 'ignore', + schemas: {}, + // referenced schema options: + missingRefs: true, + extendRefs: true, + loadSchema: undefined, // function(uri, cb) { /* ... */ cb(err, schema); }, + // options to modify validated data: + removeAdditional: false, + useDefaults: false, + coerceTypes: false, + // asynchronous validation options: + async: undefined, + transpile: undefined, + // advanced options: + meta: true, + validateSchema: true, + addUsedSchema: true, + inlineRefs: true, + passContext: false, + loopRequired: Infinity, + ownProperties: false, + multipleOfPrecision: false, + errorDataPath: 'object', + sourceCode: true, + messages: true, + beautify: false, + cache: new Cache +} +``` + +##### Validation and reporting options + +- _v5_: add keywords `switch`, `constant`, `contains`, `patternGroups`, `patternRequired`, `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` from [JSON-schema v5 proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals). With this option added schemas without `$schema` property are validated against [v5 meta-schema](https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#). `false` by default. +- _allErrors_: check all rules collecting all errors. Default is to return after the first error. +- _verbose_: include the reference to the part of the schema (`schema` and `parentSchema`) and validated data in errors (false by default). +- _jsonPointers_: set `dataPath` propery of errors using [JSON Pointers](https://tools.ietf.org/html/rfc6901) instead of JavaScript property access notation. +- _uniqueItems_: validate `uniqueItems` keyword (true by default). +- _unicode_: calculate correct length of strings with unicode pairs (true by default). Pass `false` to use `.length` of strings that is faster, but gives "incorrect" lengths of strings with unicode pairs - each unicode pair is counted as two characters. +- _format_: formats validation mode ('fast' by default). Pass 'full' for more correct and slow validation or `false` not to validate formats at all. E.g., 25:00:00 and 2015/14/33 will be invalid time and date in 'full' mode but it will be valid in 'fast' mode. +- _formats_: an object with custom formats. Keys and values will be passed to `addFormat` method. +- _unknownFormats_: handling of unknown formats. Option values: + - `true` (will be default in 5.0.0) - if the unknown format is encountered the exception is thrown during schema compilation. If `format` keyword value is [v5 $data reference](#data-reference) and it is unknown the validation will fail. + - `[String]` - an array of unknown format names that will be ignored. This option can be used to allow usage of third party schemas with format(s) for which you don't have definitions, but still fail if some other unknown format is used. If `format` keyword value is [v5 $data reference](#data-reference) and it is not in this array the validation will fail. + - `"ignore"` (default now) - to log warning during schema compilation and always pass validation. This option is not recommended, as it allows to mistype format name. This behaviour is required by JSON-schema specification. +- _schemas_: an array or object of schemas that will be added to the instance. If the order is important, pass array. In this case schemas must have IDs in them. Otherwise the object can be passed - `addSchema(value, key)` will be called for each schema in this object. + + +##### Referenced schema options + +- _missingRefs_: handling of missing referenced schemas. Option values: + - `true` (default) - if the reference cannot be resolved during compilation the exception is thrown. The thrown error has properties `missingRef` (with hash fragment) and `missingSchema` (without it). Both properties are resolved relative to the current base id (usually schema id, unless it was substituted). + - `"ignore"` - to log error during compilation and always pass validation. + - `"fail"` - to log error and successfully compile schema but fail validation if this rule is checked. +- _extendRefs_: validation of other keywords when `$ref` is present in the schema. Option values: + - `true` (default) - validate all keywords in the schemas with `$ref`. + - `"ignore"` - when `$ref` is used other keywords are ignored (as per [JSON Reference](https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3) standard). A warning will be logged during the schema compilation. + - `"fail"` - if other validation keywords are used together with `$ref` the exception will be throw when the schema is compiled. +- _loadSchema_: asynchronous function that will be used to load remote schemas when the method `compileAsync` is used and some reference is missing (option `missingRefs` should NOT be 'fail' or 'ignore'). This function should accept 2 parameters: remote schema uri and node-style callback. See example in [Asynchronous compilation](#asynchronous-compilation). + + +##### Options to modify validated data + +- _removeAdditional_: remove additional properties - see example in [Filtering data](#filtering-data). This option is not used if schema is added with `addMetaSchema` method. Option values: + - `false` (default) - not to remove additional properties + - `"all"` - all additional properties are removed, regardless of `additionalProperties` keyword in schema (and no validation is made for them). + - `true` - only additional properties with `additionalProperties` keyword equal to `false` are removed. + - `"failing"` - additional properties that fail schema validation will be removed (where `additionalProperties` keyword is `false` or schema). +- _useDefaults_: replace missing properties and items with the values from corresponding `default` keywords. Default behaviour is to ignore `default` keywords. This option is not used if schema is added with `addMetaSchema` method. See examples in [Assigning defaults](#assigning-defaults). Option values: + - `false` (default) - do not use defaults + - `true` - insert defaults by value (safer and slower, object literal is used). + - `"shared"` - insert defaults by reference (faster). If the default is an object, it will be shared by all instances of validated data. If you modify the inserted default in the validated data, it will be modified in the schema as well. +- _coerceTypes_: change data type of data to match `type` keyword. See the example in [Coercing data types](#coercing-data-types) and [coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md). Option values: + - `false` (default) - no type coercion. + - `true` - coerce scalar data types. + - `"array"` - in addition to coercions between scalar types, coerce scalar data to an array with one element and vice versa (as required by the schema). + + +##### Asynchronous validation options + +- _async_: determines how Ajv compiles asynchronous schemas (see [Asynchronous validation](#asynchronous-validation)) to functions. Option values: + - `"*"` / `"co*"` - compile to generator function ("co*" - wrapped with `co.wrap`). If generators are not supported and you don't provide `transpile` option, the exception will be thrown when Ajv instance is created. + - `"es7"` - compile to es7 async function. Unless your platform supports them you need to provide `transpile` option. Currently only MS Edge 13 with flag supports es7 async functions according to [compatibility table](http://kangax.github.io/compat-table/es7/)). + - `true` - if transpile option is not passed Ajv will choose the first supported/installed async/transpile modes in this order: "co*" (native generator with co.wrap), "es7"/"nodent", "co*"/"regenerator" during the creation of the Ajv instance. If none of the options is available the exception will be thrown. + - `undefined`- Ajv will choose the first available async mode in the same way as with `true` option but when the first asynchronous schema is compiled. +- _transpile_: determines whether Ajv transpiles compiled asynchronous validation function. Option values: + - `"nodent"` - transpile with [nodent](https://github.com/MatAtBread/nodent). If nodent is not installed, the exception will be thrown. nodent can only transpile es7 async functions; it will enforce this mode. + - `"regenerator"` - transpile with [regenerator](https://github.com/facebook/regenerator). If regenerator is not installed, the exception will be thrown. + - a function - this function should accept the code of validation function as a string and return transpiled code. This option allows you to use any other transpiler you prefer. + + +##### Advanced options + +- _meta_: add [meta-schema](http://json-schema.org/documentation.html) so it can be used by other schemas (true by default). With option `v5: true` [v5 meta-schema](https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#) will be added as well. If an object is passed, it will be used as the default meta-schema for schemas that have no `$schema` keyword. This default meta-schema MUST have `$schema` keyword. +- _validateSchema_: validate added/compiled schemas against meta-schema (true by default). `$schema` property in the schema can either be http://json-schema.org/schema or http://json-schema.org/draft-04/schema or absent (draft-4 meta-schema will be used) or can be a reference to the schema previously added with `addMetaSchema` method. Option values: + - `true` (default) - if the validation fails, throw the exception. + - `"log"` - if the validation fails, log error. + - `false` - skip schema validation. +- _addUsedSchema_: by default methods `compile` and `validate` add schemas to the instance if they have `id` property that doesn't start with "#". If `id` is present and it is not unique the exception will be thrown. Set this option to `false` to skip adding schemas to the instance and the `id` uniqueness check when these methods are used. This option does not affect `addSchema` method. +- _inlineRefs_: Affects compilation of referenced schemas. Option values: + - `true` (default) - the referenced schemas that don't have refs in them are inlined, regardless of their size - that substantially improves performance at the cost of the bigger size of compiled schema functions. + - `false` - to not inline referenced schemas (they will be compiled as separate functions). + - integer number - to limit the maximum number of keywords of the schema that will be inlined. +- _passContext_: pass validation context to custom keyword functions. If this option is `true` and you pass some context to the compiled validation function with `validate.call(context, data)`, the `context` will be available as `this` in your custom keywords. By default `this` is Ajv instance. +- _loopRequired_: by default `required` keyword is compiled into a single expression (or a sequence of statements in `allErrors` mode). In case of a very large number of properties in this keyword it may result in a very big validation function. Pass integer to set the number of properties above which `required` keyword will be validated in a loop - smaller validation function size but also worse performance. +- _ownProperties_: by default ajv iterates over all enumerable object properties; when this option is `true` only own enumerable object properties (i.e. found directly on the object rather than on its prototype) are iterated. Contributed by @mbroadst. +- _multipleOfPrecision_: by default `multipleOf` keyword is validated by comparing the result of division with parseInt() of that result. It works for dividers that are bigger than 1. For small dividers such as 0.01 the result of the division is usually not integer (even when it should be integer, see issue [#84](https://github.com/epoberezkin/ajv/issues/84)). If you need to use fractional dividers set this option to some positive integer N to have `multipleOf` validated using this formula: `Math.abs(Math.round(division) - division) < 1e-N` (it is slower but allows for float arithmetics deviations). +- _errorDataPath_: set `dataPath` to point to 'object' (default) or to 'property' when validating keywords `required`, `additionalProperties` and `dependencies`. +- _sourceCode_: add `sourceCode` property to validating function (for debugging; this code can be different from the result of toString call). +- _messages_: Include human-readable messages in errors. `true` by default. `false` can be passed when custom messages are used (e.g. with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n)). +- _beautify_: format the generated function with [js-beautify](https://github.com/beautify-web/js-beautify) (the validating function is generated without line-breaks). `npm install js-beautify` to use this option. `true` or js-beautify options can be passed. +- _cache_: an optional instance of cache to store compiled schemas using stable-stringified schema as a key. For example, set-associative cache [sacjs](https://github.com/epoberezkin/sacjs) can be used. If not passed then a simple hash is used which is good enough for the common use case (a limited number of statically defined schemas). Cache should have methods `put(key, value)`, `get(key)`, `del(key)` and `clear()`. + + +## Validation errors + +In case of validation failure Ajv assigns the array of errors to `.errors` property of validation function (or to `.errors` property of Ajv instance in case `validate` or `validateSchema` methods were called). In case of [asynchronous validation](#asynchronous-validation) the returned promise is rejected with the exception of the class `Ajv.ValidationError` that has `.errors` poperty. + + +### Error objects + +Each error is an object with the following properties: + +- _keyword_: validation keyword. +- _dataPath_: the path to the part of the data that was validated. By default `dataPath` uses JavaScript property access notation (e.g., `".prop[1].subProp"`). When the option `jsonPointers` is true (see [Options](#options)) `dataPath` will be set using JSON pointer standard (e.g., `"/prop/1/subProp"`). +- _schemaPath_: the path (JSON-pointer as a URI fragment) to the schema of the keyword that failed validation. +- _params_: the object with the additional information about error that can be used to create custom error messages (e.g., using [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package). See below for parameters set by all keywords. +- _message_: the standard error message (can be excluded with option `messages` set to false). +- _schema_: the schema of the keyword (added with `verbose` option). +- _parentSchema_: the schema containing the keyword (added with `verbose` option) +- _data_: the data validated by the keyword (added with `verbose` option). + + +### Error parameters + +Properties of `params` object in errors depend on the keyword that failed validation. + +- `maxItems`, `minItems`, `maxLength`, `minLength`, `maxProperties`, `minProperties` - property `limit` (number, the schema of the keyword). +- `additionalItems` - property `limit` (the maximum number of allowed items in case when `items` keyword is an array of schemas and `additionalItems` is false). +- `additionalProperties` - property `additionalProperty` (the property not used in `properties` and `patternProperties` keywords). +- `patternGroups` (with v5 option) - properties: + - `pattern` + - `reason` ("minimum"/"maximum"), + - `limit` (max/min allowed number of properties matching number) +- `dependencies` - properties: + - `property` (dependent property), + - `missingProperty` (required missing dependency - only the first one is reported currently) + - `deps` (required dependencies, comma separated list as a string), + - `depsCount` (the number of required dependedncies). +- `format` - property `format` (the schema of the keyword). +- `maximum`, `minimum` - properties: + - `limit` (number, the schema of the keyword), + - `exclusive` (boolean, the schema of `exclusiveMaximum` or `exclusiveMinimum`), + - `comparison` (string, comparison operation to compare the data to the limit, with the data on the left and the limit on the right; can be "<", "<=", ">", ">=") +- `multipleOf` - property `multipleOf` (the schema of the keyword) +- `pattern` - property `pattern` (the schema of the keyword) +- `required` - property `missingProperty` (required property that is missing). +- `patternRequired` (with v5 option) - property `missingPattern` (required pattern that did not match any property). +- `type` - property `type` (required type(s), a string, can be a comma-separated list) +- `uniqueItems` - properties `i` and `j` (indices of duplicate items). +- `enum` - property `allowedValues` pointing to the array of values (the schema of the keyword). +- `$ref` - property `ref` with the referenced schema URI. +- custom keywords (in case keyword definition doesn't create errors) - property `keyword` (the keyword name). + + +## Related packages + +- [ajv-cli](https://github.com/epoberezkin/ajv-cli) - command line interface for Ajv +- [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) - internationalised error messages +- [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) - keywords $merge and $patch from v5 proposals. +- [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) - several custom keywords that can be used with Ajv (typeof, instanceof, range, propertyNames) + + +## Some packages using Ajv + +- [webpack](https://github.com/webpack/webpack) - a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser +- [jsonscript-js](https://github.com/JSONScript/jsonscript-js) - the interpreter for [JSONScript](http://www.jsonscript.org) - scripted processing of existing endpoints and services +- [osprey-method-handler](https://github.com/mulesoft-labs/osprey-method-handler) - Express middleware for validating requests and responses based on a RAML method object, used in [osprey](https://github.com/mulesoft/osprey) - validating API proxy generated from a RAML definition +- [har-validator](https://github.com/ahmadnassri/har-validator) - HTTP Archive (HAR) validator +- [jsoneditor](https://github.com/josdejong/jsoneditor) - a web-based tool to view, edit, format, and validate JSON http://jsoneditoronline.org +- [JSON Schema Lint](https://github.com/nickcmaynard/jsonschemalint) - a web tool to validate JSON/YAML document against a single JSON-schema http://jsonschemalint.com +- [objection](https://github.com/vincit/objection.js) - SQL-friendly ORM for node.js +- [table](https://github.com/gajus/table) - formats data into a string table +- [ripple-lib](https://github.com/ripple/ripple-lib) - a JavaScript API for interacting with [Ripple](https://ripple.com) in Node.js and the browser +- [restbase](https://github.com/wikimedia/restbase) - distributed storage with REST API & dispatcher for backend services built to provide a low-latency & high-throughput API for Wikipedia / Wikimedia content +- [hippie-swagger](https://github.com/CacheControl/hippie-swagger) - [Hippie](https://github.com/vesln/hippie) wrapper that provides end to end API testing with swagger validation +- [react-form-controlled](https://github.com/seeden/react-form-controlled) - React controlled form components with validation +- [rabbitmq-schema](https://github.com/tjmehta/rabbitmq-schema) - a schema definition module for RabbitMQ graphs and messages +- [@query/schema](https://www.npmjs.com/package/@query/schema) - stream filtering with a URI-safe query syntax parsing to JSON Schema +- [chai-ajv-json-schema](https://github.com/peon374/chai-ajv-json-schema) - chai plugin to us JSON-schema with expect in mocha tests +- [grunt-jsonschema-ajv](https://github.com/SignpostMarv/grunt-jsonschema-ajv) - Grunt plugin for validating files against JSON-Schema +- [extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin) - extract text from bundle into a file +- [electron-builder](https://github.com/electron-userland/electron-builder) - a solution to package and build a ready for distribution Electron app +- [addons-linter](https://github.com/mozilla/addons-linter) - Mozilla Add-ons Linter +- [gh-pages-generator](https://github.com/epoberezkin/gh-pages-generator) - multi-page site generator converting markdown files to GitHub pages + + +## Tests + +``` +npm install +git submodule update --init +npm test +``` + +## Contributing + +All validation functions are generated using doT templates in [dot](https://github.com/epoberezkin/ajv/tree/master/lib/dot) folder. Templates are precompiled so doT is not a run-time dependency. + +`npm run build` - compiles templates to [dotjs](https://github.com/epoberezkin/ajv/tree/master/lib/dotjs) folder. + +`npm run watch` - automatically compiles templates when files in dot folder change + +Please see [Contributing guidelines](https://github.com/epoberezkin/ajv/blob/master/CONTRIBUTING.md) + + +## Changes history + +See https://github.com/epoberezkin/ajv/releases + +__Please note__: [Changes in version 5.0.1-beta](https://github.com/epoberezkin/ajv/releases/tag/5.0.1-beta.0). + +[Changes in version 4.6.0](https://github.com/epoberezkin/ajv/releases/tag/4.6.0). + +[Changes in version 4.0.0](https://github.com/epoberezkin/ajv/releases/tag/4.0.0). + +[Changes in version 3.0.0](https://github.com/epoberezkin/ajv/releases/tag/3.0.0). + +[Changes in version 2.0.0](https://github.com/epoberezkin/ajv/releases/tag/2.0.0). + + +## License + +[MIT](https://github.com/epoberezkin/ajv/blob/master/LICENSE) diff --git a/node_modules/ajv/dist/ajv.bundle.js b/node_modules/ajv/dist/ajv.bundle.js new file mode 100644 index 000000000..b624d1367 --- /dev/null +++ b/node_modules/ajv/dist/ajv.bundle.js @@ -0,0 +1,8023 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Ajv = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 1 && month <= 12 && day >= 1 && day <= DAYS[month]; +} + + +function time(str, full) { + var matches = str.match(TIME); + if (!matches) return false; + + var hour = matches[1]; + var minute = matches[2]; + var second = matches[3]; + var timeZone = matches[5]; + return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone); +} + + +var DATE_TIME_SEPARATOR = /t|\s/i; +function date_time(str) { + // http://tools.ietf.org/html/rfc3339#section-5.6 + var dateTime = str.split(DATE_TIME_SEPARATOR); + return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); +} + + +function hostname(str) { + // https://tools.ietf.org/html/rfc1034#section-3.5 + // https://tools.ietf.org/html/rfc1123#section-2 + return str.length <= 255 && HOSTNAME.test(str); +} + + +var NOT_URI_FRAGMENT = /\/|\:/; +function uri(str) { + // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." + return NOT_URI_FRAGMENT.test(str) && URI.test(str); +} + + +function regex(str) { + try { + new RegExp(str); + return true; + } catch(e) { + return false; + } +} + + +function compareDate(d1, d2) { + if (!(d1 && d2)) return; + if (d1 > d2) return 1; + if (d1 < d2) return -1; + if (d1 === d2) return 0; +} + + +function compareTime(t1, t2) { + if (!(t1 && t2)) return; + t1 = t1.match(TIME); + t2 = t2.match(TIME); + if (!(t1 && t2)) return; + t1 = t1[1] + t1[2] + t1[3] + (t1[4]||''); + t2 = t2[1] + t2[2] + t2[3] + (t2[4]||''); + if (t1 > t2) return 1; + if (t1 < t2) return -1; + if (t1 === t2) return 0; +} + + +function compareDateTime(dt1, dt2) { + if (!(dt1 && dt2)) return; + dt1 = dt1.split(DATE_TIME_SEPARATOR); + dt2 = dt2.split(DATE_TIME_SEPARATOR); + var res = compareDate(dt1[0], dt2[0]); + if (res === undefined) return; + return res || compareTime(dt1[1], dt2[1]); +} + +},{"./util":11}],6:[function(require,module,exports){ +'use strict'; + +var resolve = require('./resolve') + , util = require('./util') + , stableStringify = require('json-stable-stringify') + , async = require('../async'); + +var beautify; + +function loadBeautify(){ + if (beautify === undefined) { + var name = 'js-beautify'; + try { beautify = require(name).js_beautify; } + catch(e) { beautify = false; } + } +} + +var validateGenerator = require('../dotjs/validate'); + +/** + * Functions below are used inside compiled validations function + */ + +var co = require('co'); +var ucs2length = util.ucs2length; +var equal = require('./equal'); + +// this error is thrown by async schemas to return validation errors via exception +var ValidationError = require('./validation_error'); + +module.exports = compile; + + +/** + * Compiles schema to validation function + * @this Ajv + * @param {Object} schema schema object + * @param {Object} root object with information about the root schema for this schema + * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution + * @param {String} baseId base ID for IDs in the schema + * @return {Function} validation function + */ +function compile(schema, root, localRefs, baseId) { + /* jshint validthis: true, evil: true */ + /* eslint no-shadow: 0 */ + var self = this + , opts = this._opts + , refVal = [ undefined ] + , refs = {} + , patterns = [] + , patternsHash = {} + , defaults = [] + , defaultsHash = {} + , customRules = [] + , keepSourceCode = opts.sourceCode !== false; + + root = root || { schema: schema, refVal: refVal, refs: refs }; + + var c = checkCompiling.call(this, schema, root, baseId); + var compilation = this._compilations[c.index]; + if (c.compiling) return (compilation.callValidate = callValidate); + + var formats = this._formats; + var RULES = this.RULES; + + try { + var v = localCompile(schema, root, localRefs, baseId); + compilation.validate = v; + var cv = compilation.callValidate; + if (cv) { + cv.schema = v.schema; + cv.errors = null; + cv.refs = v.refs; + cv.refVal = v.refVal; + cv.root = v.root; + cv.$async = v.$async; + if (keepSourceCode) cv.sourceCode = v.sourceCode; + } + return v; + } finally { + endCompiling.call(this, schema, root, baseId); + } + + function callValidate() { + var validate = compilation.validate; + var result = validate.apply(null, arguments); + callValidate.errors = validate.errors; + return result; + } + + function localCompile(_schema, _root, localRefs, baseId) { + var isRoot = !_root || (_root && _root.schema == _schema); + if (_root.schema != root.schema) + return compile.call(self, _schema, _root, localRefs, baseId); + + var $async = _schema.$async === true; + if ($async && !opts.transpile) async.setup(opts); + + var sourceCode = validateGenerator({ + isTop: true, + schema: _schema, + isRoot: isRoot, + baseId: baseId, + root: _root, + schemaPath: '', + errSchemaPath: '#', + errorPath: '""', + RULES: RULES, + validate: validateGenerator, + util: util, + resolve: resolve, + resolveRef: resolveRef, + usePattern: usePattern, + useDefault: useDefault, + useCustomRule: useCustomRule, + opts: opts, + formats: formats, + self: self + }); + + sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) + + vars(defaults, defaultCode) + vars(customRules, customRuleCode) + + sourceCode; + + if (opts.beautify) { + loadBeautify(); + /* istanbul ignore else */ + if (beautify) sourceCode = beautify(sourceCode, opts.beautify); + else console.error('"npm install js-beautify" to use beautify option'); + } + // console.log('\n\n\n *** \n', sourceCode); + var validate, validateCode + , transpile = opts._transpileFunc; + try { + validateCode = $async && transpile + ? transpile(sourceCode) + : sourceCode; + + var makeValidate = new Function( + 'self', + 'RULES', + 'formats', + 'root', + 'refVal', + 'defaults', + 'customRules', + 'co', + 'equal', + 'ucs2length', + 'ValidationError', + validateCode + ); + + validate = makeValidate( + self, + RULES, + formats, + root, + refVal, + defaults, + customRules, + co, + equal, + ucs2length, + ValidationError + ); + + refVal[0] = validate; + } catch(e) { + console.error('Error compiling schema, function code:', validateCode); + throw e; + } + + validate.schema = _schema; + validate.errors = null; + validate.refs = refs; + validate.refVal = refVal; + validate.root = isRoot ? validate : _root; + if ($async) validate.$async = true; + if (keepSourceCode) validate.sourceCode = sourceCode; + if (opts.sourceCode === true) { + validate.source = { + patterns: patterns, + defaults: defaults + }; + } + + return validate; + } + + function resolveRef(baseId, ref, isRoot) { + ref = resolve.url(baseId, ref); + var refIndex = refs[ref]; + var _refVal, refCode; + if (refIndex !== undefined) { + _refVal = refVal[refIndex]; + refCode = 'refVal[' + refIndex + ']'; + return resolvedRef(_refVal, refCode); + } + if (!isRoot && root.refs) { + var rootRefId = root.refs[ref]; + if (rootRefId !== undefined) { + _refVal = root.refVal[rootRefId]; + refCode = addLocalRef(ref, _refVal); + return resolvedRef(_refVal, refCode); + } + } + + refCode = addLocalRef(ref); + var v = resolve.call(self, localCompile, root, ref); + if (!v) { + var localSchema = localRefs && localRefs[ref]; + if (localSchema) { + v = resolve.inlineRef(localSchema, opts.inlineRefs) + ? localSchema + : compile.call(self, localSchema, root, localRefs, baseId); + } + } + + if (v) { + replaceLocalRef(ref, v); + return resolvedRef(v, refCode); + } + } + + function addLocalRef(ref, v) { + var refId = refVal.length; + refVal[refId] = v; + refs[ref] = refId; + return 'refVal' + refId; + } + + function replaceLocalRef(ref, v) { + var refId = refs[ref]; + refVal[refId] = v; + } + + function resolvedRef(refVal, code) { + return typeof refVal == 'object' + ? { code: code, schema: refVal, inline: true } + : { code: code, $async: refVal && refVal.$async }; + } + + function usePattern(regexStr) { + var index = patternsHash[regexStr]; + if (index === undefined) { + index = patternsHash[regexStr] = patterns.length; + patterns[index] = regexStr; + } + return 'pattern' + index; + } + + function useDefault(value) { + switch (typeof value) { + case 'boolean': + case 'number': + return '' + value; + case 'string': + return util.toQuotedString(value); + case 'object': + if (value === null) return 'null'; + var valueStr = stableStringify(value); + var index = defaultsHash[valueStr]; + if (index === undefined) { + index = defaultsHash[valueStr] = defaults.length; + defaults[index] = value; + } + return 'default' + index; + } + } + + function useCustomRule(rule, schema, parentSchema, it) { + var validateSchema = rule.definition.validateSchema; + if (validateSchema && self._opts.validateSchema !== false) { + var valid = validateSchema(schema); + if (!valid) { + var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); + if (self._opts.validateSchema == 'log') console.error(message); + else throw new Error(message); + } + } + + var compile = rule.definition.compile + , inline = rule.definition.inline + , macro = rule.definition.macro; + + var validate; + if (compile) { + validate = compile.call(self, schema, parentSchema, it); + } else if (macro) { + validate = macro.call(self, schema, parentSchema, it); + if (opts.validateSchema !== false) self.validateSchema(validate, true); + } else if (inline) { + validate = inline.call(self, it, rule.keyword, schema, parentSchema); + } else { + validate = rule.definition.validate; + } + + var index = customRules.length; + customRules[index] = validate; + + return { + code: 'customRule' + index, + validate: validate + }; + } +} + + +/** + * Checks if the schema is currently compiled + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) + */ +function checkCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var index = compIndex.call(this, schema, root, baseId); + if (index >= 0) return { index: index, compiling: true }; + index = this._compilations.length; + this._compilations[index] = { + schema: schema, + root: root, + baseId: baseId + }; + return { index: index, compiling: false }; +} + + +/** + * Removes the schema from the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + */ +function endCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var i = compIndex.call(this, schema, root, baseId); + if (i >= 0) this._compilations.splice(i, 1); +} + + +/** + * Index of schema compilation in the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Integer} compilation index + */ +function compIndex(schema, root, baseId) { + /* jshint validthis: true */ + for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { + // high surrogate, and there is a next character + value = str.charCodeAt(pos); + if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate + } + } + return length; +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + + +module.exports = { + copy: copy, + checkDataType: checkDataType, + checkDataTypes: checkDataTypes, + coerceToTypes: coerceToTypes, + toHash: toHash, + getProperty: getProperty, + escapeQuotes: escapeQuotes, + ucs2length: require('./ucs2length'), + varOccurences: varOccurences, + varReplace: varReplace, + cleanUpCode: cleanUpCode, + cleanUpVarErrors: cleanUpVarErrors, + schemaHasRules: schemaHasRules, + schemaHasRulesExcept: schemaHasRulesExcept, + stableStringify: require('json-stable-stringify'), + toQuotedString: toQuotedString, + getPathExpr: getPathExpr, + getPath: getPath, + getData: getData, + unescapeFragment: unescapeFragment, + escapeFragment: escapeFragment, + escapeJsonPointer: escapeJsonPointer +}; + + +function copy(o, to) { + to = to || {}; + for (var key in o) to[key] = o[key]; + return to; +} + + +function checkDataType(dataType, data, negate) { + var EQUAL = negate ? ' !== ' : ' === ' + , AND = negate ? ' || ' : ' && ' + , OK = negate ? '!' : '' + , NOT = negate ? '' : '!'; + switch (dataType) { + case 'null': return data + EQUAL + 'null'; + case 'array': return OK + 'Array.isArray(' + data + ')'; + case 'object': return '(' + OK + data + AND + + 'typeof ' + data + EQUAL + '"object"' + AND + + NOT + 'Array.isArray(' + data + '))'; + case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + + NOT + '(' + data + ' % 1)' + + AND + data + EQUAL + data + ')'; + default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; + } +} + + +function checkDataTypes(dataTypes, data) { + switch (dataTypes.length) { + case 1: return checkDataType(dataTypes[0], data, true); + default: + var code = ''; + var types = toHash(dataTypes); + if (types.array && types.object) { + code = types.null ? '(': '(!' + data + ' || '; + code += 'typeof ' + data + ' !== "object")'; + delete types.null; + delete types.array; + delete types.object; + } + if (types.number) delete types.integer; + for (var t in types) + code += (code ? ' && ' : '' ) + checkDataType(t, data, true); + + return code; + } +} + + +var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); +function coerceToTypes(optionCoerceTypes, dataTypes) { + if (Array.isArray(dataTypes)) { + var types = []; + for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); + return paths[lvl - up]; + } + + if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); + data = 'data' + ((lvl - up) || ''); + if (!jsonPointer) return data; + } + + var expr = data; + var segments = jsonPointer.split('/'); + for (var i=0; i', + $result = 'result' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if ($isDataExcl) { + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), + $exclusive = 'exclusive' + $lvl, + $opExpr = 'op' + $lvl, + $opStr = '\' + ' + $opExpr + ' + \''; + out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; + $schemaValueExcl = 'schemaExcl' + $lvl; + out += ' if (typeof ' + ($schemaValueExcl) + ' != \'boolean\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; '; + var $errorKeyword = $exclusiveKeyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_formatExclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + $closingBraces += '}'; + out += ' else { '; + } + if ($isData) { + out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'string\') ' + ($valid) + ' = false; else { '; + $closingBraces += '}'; + } + if ($isDataFormat) { + out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { '; + $closingBraces += '}'; + } + out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var ' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = ' + ($exclusive) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';'; + } else { + var $exclusive = $schemaExcl === true, + $opStr = $op; + if (!$exclusive) $opStr += '='; + var $opExpr = '\'' + $opStr + '\''; + if ($isData) { + out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'string\') ' + ($valid) + ' = false; else { '; + $closingBraces += '}'; + } + if ($isDataFormat) { + out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { '; + $closingBraces += '}'; + } + out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op); + if (!$exclusive) { + out += '='; + } + out += ' 0;'; + } + out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_formatLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , exclusive: ' + ($exclusive) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be ' + ($opStr) + ' "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '}'; + return out; +} + +},{}],14:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limit(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $isMax = $keyword == 'maximum', + $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', + $schemaExcl = it.schema[$exclusiveKeyword], + $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data, + $op = $isMax ? '<' : '>', + $notOp = $isMax ? '>' : '<'; + if ($isDataExcl) { + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), + $exclusive = 'exclusive' + $lvl, + $opExpr = 'op' + $lvl, + $opStr = '\' + ' + $opExpr + ' + \''; + out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; + $schemaValueExcl = 'schemaExcl' + $lvl; + out += ' var exclusive' + ($lvl) + '; if (typeof ' + ($schemaValueExcl) + ' != \'boolean\' && typeof ' + ($schemaValueExcl) + ' != \'undefined\') { '; + var $errorKeyword = $exclusiveKeyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else if( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ((exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ') || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';'; + } else { + var $exclusive = $schemaExcl === true, + $opStr = $op; + if (!$exclusive) $opStr += '='; + var $opExpr = '\'' + $opStr + '\''; + out += ' if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + ' ' + ($notOp); + if ($exclusive) { + out += '='; + } + out += ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') {'; + } + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be ' + ($opStr) + ' '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schema) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],15:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limitItems(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxItems' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxItems') { + out += 'more'; + } else { + out += 'less'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' items\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],16:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limitLength(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxLength' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + if (it.opts.unicode === false) { + out += ' ' + ($data) + '.length '; + } else { + out += ' ucs2length(' + ($data) + ') '; + } + out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be '; + if ($keyword == 'maxLength') { + out += 'longer'; + } else { + out += 'shorter'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' characters\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],17:[function(require,module,exports){ +'use strict'; +module.exports = function generate__limitProperties(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxProperties' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxProperties') { + out += 'more'; + } else { + out += 'less'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' properties\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],18:[function(require,module,exports){ +'use strict'; +module.exports = function generate_allOf(it, $keyword) { + var out = ' '; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $currentBaseId = $it.baseId, + $allSchemasEmpty = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $allSchemasEmpty = false; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if ($breakOnError) { + if ($allSchemasEmpty) { + out += ' if (true) { '; + } else { + out += ' ' + ($closingBraces.slice(0, -1)) + ' '; + } + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],19:[function(require,module,exports){ +'use strict'; +module.exports = function generate_anyOf(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $noEmptySchema = $schema.every(function($sch) { + return it.util.schemaHasRules($sch, it.RULES.all); + }); + if ($noEmptySchema) { + var $currentBaseId = $it.baseId; + out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; + $closingBraces += '}'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should match some schema in anyOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + out = it.util.cleanUpCode(out); + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} + +},{}],20:[function(require,module,exports){ +'use strict'; +module.exports = function generate_constant(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (!$isData) { + out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; + } + out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('constant') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should be equal to constant\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + return out; +} + +},{}],21:[function(require,module,exports){ +'use strict'; +module.exports = function generate_custom(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $rule = this, + $definition = 'definition' + $lvl, + $rDef = $rule.definition; + var $compile, $inline, $macro, $ruleValidate, $validateCode; + if ($isData && $rDef.$data) { + $validateCode = 'keywordValidate' + $lvl; + var $validateSchema = $rDef.validateSchema; + out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; + } else { + $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); + $schemaValue = 'validate.schema' + $schemaPath; + $validateCode = $ruleValidate.code; + $compile = $rDef.compile; + $inline = $rDef.inline; + $macro = $rDef.macro; + } + var $ruleErrs = $validateCode + '.errors', + $i = 'i' + $lvl, + $ruleErr = 'ruleErr' + $lvl, + $asyncKeyword = $rDef.async; + if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); + if (!($inline || $macro)) { + out += '' + ($ruleErrs) + ' = null;'; + } + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if ($validateSchema) { + out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') {'; + } + if ($inline) { + if ($rDef.statements) { + out += ' ' + ($ruleValidate.validate) + ' '; + } else { + out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; + } + } else if ($macro) { + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + $it.schema = $ruleValidate.validate; + $it.schemaPath = ''; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($code); + } else { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + out += ' ' + ($validateCode) + '.call( '; + if (it.opts.passContext) { + out += 'this'; + } else { + out += 'self'; + } + if ($compile || $rDef.schema === false) { + out += ' , ' + ($data) + ' '; + } else { + out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; + } + out += ' , (dataPath || \'\')'; + if (it.errorPath != '""') { + out += ' + ' + (it.errorPath); + } + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; + var def_callRuleValidate = out; + out = $$outStack.pop(); + if ($rDef.errors === false) { + out += ' ' + ($valid) + ' = '; + if ($asyncKeyword) { + out += '' + (it.yieldAwait); + } + out += '' + (def_callRuleValidate) + '; '; + } else { + if ($asyncKeyword) { + $ruleErrs = 'customErrors' + $lvl; + out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = ' + (it.yieldAwait) + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; + } else { + out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; + } + } + } + if ($rDef.modifying) { + out += ' ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; + } + if ($validateSchema) { + out += ' }'; + } + if ($rDef.valid) { + if ($breakOnError) { + out += ' if (true) { '; + } + } else { + out += ' if ( '; + if ($rDef.valid === undefined) { + out += ' !'; + if ($macro) { + out += '' + ($nextValid); + } else { + out += '' + ($valid); + } + } else { + out += ' ' + (!$rDef.valid) + ' '; + } + out += ') { '; + $errorKeyword = $rule.keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + var def_customError = out; + out = $$outStack.pop(); + if ($inline) { + if ($rDef.errors) { + if ($rDef.errors != 'full') { + out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' ' + ($i) + ') { '; + var $passData = $data + '[' + $i + ']'; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); + $it.dataPathArr[$dataNxt] = $i; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) { + $it.schema = $additionalItems; + $it.schemaPath = it.schemaPath + '.additionalItems'; + $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; + out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } else if (it.util.schemaHasRules($schema, it.RULES.all)) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],26:[function(require,module,exports){ +'use strict'; +module.exports = function generate_multipleOf(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + out += 'var division' + ($lvl) + ';if ('; + if ($isData) { + out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; + } + out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; + if (it.opts.multipleOfPrecision) { + out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; + } else { + out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; + } + out += ' ) '; + if ($isData) { + out += ' ) '; + } + out += ' ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be multiple of '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schema) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],27:[function(require,module,exports){ +'use strict'; +module.exports = function generate_not(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + if (it.util.schemaHasRules($schema, it.RULES.all)) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.createErrors = false; + var $allErrorsOption; + if ($it.opts.allErrors) { + $allErrorsOption = $it.opts.allErrors; + $it.opts.allErrors = false; + } + out += ' ' + (it.validate($it)) + ' '; + $it.createErrors = true; + if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' if (' + ($nextValid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + } else { + out += ' var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if ($breakOnError) { + out += ' if (false) { '; + } + } + return out; +} + +},{}],28:[function(require,module,exports){ +'use strict'; +module.exports = function generate_oneOf(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false;'; + var $currentBaseId = $it.baseId; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } else { + out += ' var ' + ($nextValid) + ' = true; '; + } + if ($i) { + out += ' if (' + ($nextValid) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { '; + $closingBraces += '}'; + } + out += ' if (' + ($nextValid) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should match exactly one schema in oneOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; + if (it.opts.allErrors) { + out += ' } '; + } + return out; +} + +},{}],29:[function(require,module,exports){ +'use strict'; +module.exports = function generate_pattern(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; + } + out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match pattern "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} + +},{}],30:[function(require,module,exports){ +'use strict'; +module.exports = function generate_patternRequired(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $key = 'key' + $lvl, + $matched = 'patternMatched' + $lvl, + $closingBraces = '', + $ownProperties = it.opts.ownProperties; + out += 'var ' + ($valid) + ' = true;'; + var arr1 = $schema; + if (arr1) { + var $pProperty, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $pProperty = arr1[i1 += 1]; + out += ' var ' + ($matched) + ' = false; for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + out += ' ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } '; + var $missingPattern = it.util.escapeQuotes($pProperty); + out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('patternRequired') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingPattern: \'' + ($missingPattern) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should have property matching pattern \\\'' + ($missingPattern) + '\\\'\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; + if ($breakOnError) { + $closingBraces += '}'; + out += ' else { '; + } + } + } + out += '' + ($closingBraces); + return out; +} + +},{}],31:[function(require,module,exports){ +'use strict'; +module.exports = function generate_properties(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $key = 'key' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt; + var $schemaKeys = Object.keys($schema || {}), + $pProperties = it.schema.patternProperties || {}, + $pPropertyKeys = Object.keys($pProperties), + $aProperties = it.schema.additionalProperties, + $someProperties = $schemaKeys.length || $pPropertyKeys.length, + $noAdditional = $aProperties === false, + $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, + $removeAdditional = it.opts.removeAdditional, + $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, + $ownProperties = it.opts.ownProperties, + $currentBaseId = it.baseId; + var $required = it.schema.required; + if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); + if (it.opts.v5) { + var $pgProperties = it.schema.patternGroups || {}, + $pgPropertyKeys = Object.keys($pgProperties); + } + out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; + if ($checkAdditional) { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + if ($someProperties) { + out += ' var isAdditional' + ($lvl) + ' = !(false '; + if ($schemaKeys.length) { + if ($schemaKeys.length > 5) { + out += ' || validate.schema' + ($schemaPath) + '[' + ($key) + '] '; + } else { + var arr1 = $schemaKeys; + if (arr1) { + var $propertyKey, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $propertyKey = arr1[i1 += 1]; + out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; + } + } + } + } + if ($pPropertyKeys.length) { + var arr2 = $pPropertyKeys; + if (arr2) { + var $pProperty, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + $pProperty = arr2[$i += 1]; + out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; + } + } + } + if (it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length) { + var arr3 = $pgPropertyKeys; + if (arr3) { + var $pgProperty, $i = -1, + l3 = arr3.length - 1; + while ($i < l3) { + $pgProperty = arr3[$i += 1]; + out += ' || ' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ') '; + } + } + } + out += ' ); if (isAdditional' + ($lvl) + ') { '; + } + if ($removeAdditional == 'all') { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + var $currentErrorPath = it.errorPath; + var $additionalProperty = '\' + ' + $key + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + } + if ($noAdditional) { + if ($removeAdditional) { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + out += ' ' + ($nextValid) + ' = false; '; + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalProperties'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have additional properties\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + out += ' break; '; + } + } + } else if ($additionalIsSchema) { + if ($removeAdditional == 'failing') { + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + } else { + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + } + } + it.errorPath = $currentErrorPath; + } + if ($someProperties) { + out += ' } '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + var $useDefaults = it.opts.useDefaults && !it.compositeRule; + if ($schemaKeys.length) { + var arr4 = $schemaKeys; + if (arr4) { + var $propertyKey, i4 = -1, + l4 = arr4.length - 1; + while (i4 < l4) { + $propertyKey = arr4[i4 += 1]; + var $sch = $schema[$propertyKey]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + var $prop = it.util.getProperty($propertyKey), + $passData = $data + $prop, + $hasDefault = $useDefaults && $sch.default !== undefined; + $it.schema = $sch; + $it.schemaPath = $schemaPath + $prop; + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); + $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); + $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + $code = it.util.varReplace($code, $nextData, $passData); + var $useData = $passData; + } else { + var $useData = $nextData; + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; + } + if ($hasDefault) { + out += ' ' + ($code) + ' '; + } else { + if ($requiredHash && $requiredHash[$propertyKey]) { + out += ' if (' + ($useData) + ' === undefined) { ' + ($nextValid) + ' = false; '; + var $currentErrorPath = it.errorPath, + $currErrSchemaPath = $errSchemaPath, + $missingProperty = it.util.escapeQuotes($propertyKey); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + $errSchemaPath = it.errSchemaPath + '/required'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + it.errorPath = $currentErrorPath; + out += ' } else { '; + } else { + if ($breakOnError) { + out += ' if (' + ($useData) + ' === undefined) { ' + ($nextValid) + ' = true; } else { '; + } else { + out += ' if (' + ($useData) + ' !== undefined) { '; + } + } + out += ' ' + ($code) + ' } '; + } + } + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + var arr5 = $pPropertyKeys; + if (arr5) { + var $pProperty, i5 = -1, + l5 = arr5.length - 1; + while (i5 < l5) { + $pProperty = arr5[i5 += 1]; + var $sch = $pProperties[$pProperty]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); + $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else ' + ($nextValid) + ' = true; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if (it.opts.v5) { + var arr6 = $pgPropertyKeys; + if (arr6) { + var $pgProperty, i6 = -1, + l6 = arr6.length - 1; + while (i6 < l6) { + $pgProperty = arr6[i6 += 1]; + var $pgSchema = $pgProperties[$pgProperty], + $sch = $pgSchema.schema; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema'; + $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema'; + out += ' var pgPropCount' + ($lvl) + ' = 0; for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + out += ' if (' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ')) { pgPropCount' + ($lvl) + '++; '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else ' + ($nextValid) + ' = true; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + var $pgMin = $pgSchema.minimum, + $pgMax = $pgSchema.maximum; + if ($pgMin !== undefined || $pgMax !== undefined) { + out += ' var ' + ($valid) + ' = true; '; + var $currErrSchemaPath = $errSchemaPath; + if ($pgMin !== undefined) { + var $limit = $pgMin, + $reason = 'minimum', + $moreOrLess = 'less'; + out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; '; + $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum'; + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($pgMax !== undefined) { + out += ' else '; + } + } + if ($pgMax !== undefined) { + var $limit = $pgMax, + $reason = 'maximum', + $moreOrLess = 'more'; + out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; '; + $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum'; + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + } + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + out += ' if (' + ($valid) + ') { '; + $closingBraces += '}'; + } + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} + +},{}],32:[function(require,module,exports){ +'use strict'; +module.exports = function generate_ref(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $async, $refCode; + if ($schema == '#' || $schema == '#/') { + if (it.isRoot) { + $async = it.async; + $refCode = 'validate'; + } else { + $async = it.root.schema.$async === true; + $refCode = 'root.refVal[0]'; + } + } else { + var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); + if ($refVal === undefined) { + var $message = 'can\'t resolve reference ' + $schema + ' from id ' + it.baseId; + if (it.opts.missingRefs == 'fail') { + console.log($message); + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' '; + } + if (it.opts.verbose) { + out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + if ($breakOnError) { + out += ' if (false) { '; + } + } else if (it.opts.missingRefs == 'ignore') { + console.log($message); + if ($breakOnError) { + out += ' if (true) { '; + } + } else { + var $error = new Error($message); + $error.missingRef = it.resolve.url(it.baseId, $schema); + $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef)); + throw $error; + } + } else if ($refVal.inline) { + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + $it.schema = $refVal.schema; + $it.schemaPath = ''; + $it.errSchemaPath = $schema; + var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); + out += ' ' + ($code) + ' '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + } + } else { + $async = $refVal.$async === true; + $refCode = $refVal.code; + } + } + if ($refCode) { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + if (it.opts.passContext) { + out += ' ' + ($refCode) + '.call(this, '; + } else { + out += ' ' + ($refCode) + '( '; + } + out += ' ' + ($data) + ', (dataPath || \'\')'; + if (it.errorPath != '""') { + out += ' + ' + (it.errorPath); + } + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) '; + var __callValidate = out; + out = $$outStack.pop(); + if ($async) { + if (!it.async) throw new Error('async schema referenced by sync schema'); + out += ' try { '; + if ($breakOnError) { + out += 'var ' + ($valid) + ' ='; + } + out += ' ' + (it.yieldAwait) + ' ' + (__callValidate) + '; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } '; + if ($breakOnError) { + out += ' if (' + ($valid) + ') { '; + } + } else { + out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } '; + if ($breakOnError) { + out += ' else { '; + } + } + } + return out; +} + +},{}],33:[function(require,module,exports){ +'use strict'; +module.exports = function generate_required(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $vSchema = 'schema' + $lvl; + if (!$isData) { + if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) { + var $required = []; + var arr1 = $schema; + if (arr1) { + var $property, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $property = arr1[i1 += 1]; + var $propertySch = it.schema.properties[$property]; + if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) { + $required[$required.length] = $property; + } + } + } + } else { + var $required = $schema; + } + } + if ($isData || $required.length) { + var $currentErrorPath = it.errorPath, + $loopRequired = $isData || $required.length >= it.opts.loopRequired; + if ($breakOnError) { + out += ' var missing' + ($lvl) + '; '; + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + out += ' var ' + ($valid) + ' = true; '; + if ($isData) { + out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined; if (!' + ($valid) + ') break; } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } else { + out += ' if ( '; + var arr2 = $required; + if (arr2) { + var _$property, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + _$property = arr2[$i += 1]; + if ($i) { + out += ' || '; + } + var $prop = it.util.getProperty(_$property); + out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) '; + } + } + out += ') { '; + var $propertyPath = 'missing' + $lvl, + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } + } else { + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + if ($isData) { + out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; + if ($isData) { + out += ' } '; + } + } else { + var arr3 = $required; + if (arr3) { + var $reqProperty, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $reqProperty = arr3[i3 += 1]; + var $prop = it.util.getProperty($reqProperty), + $missingProperty = it.util.escapeQuotes($reqProperty); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $reqProperty, it.opts.jsonPointers); + } + out += ' if (' + ($data) + ($prop) + ' === undefined) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; + } + } + } + } + it.errorPath = $currentErrorPath; + } else if ($breakOnError) { + out += ' if (true) {'; + } + return out; +} + +},{}],34:[function(require,module,exports){ +'use strict'; +module.exports = function generate_switch(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $ifPassed = 'ifPassed' + it.level, + $currentBaseId = $it.baseId, + $shouldContinue; + out += 'var ' + ($ifPassed) + ';'; + var arr1 = $schema; + if (arr1) { + var $sch, $caseIndex = -1, + l1 = arr1.length - 1; + while ($caseIndex < l1) { + $sch = arr1[$caseIndex += 1]; + if ($caseIndex && !$shouldContinue) { + out += ' if (!' + ($ifPassed) + ') { '; + $closingBraces += '}'; + } + if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) { + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.createErrors = false; + $it.schema = $sch.if; + $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + $it.createErrors = true; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($ifPassed) + ' = ' + ($nextValid) + '; if (' + ($ifPassed) + ') { '; + if (typeof $sch.then == 'boolean') { + if ($sch.then === false) { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('switch') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { caseIndex: ' + ($caseIndex) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "switch" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } + out += ' var ' + ($nextValid) + ' = ' + ($sch.then) + '; '; + } else { + $it.schema = $sch.then; + $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } '; + } else { + out += ' ' + ($ifPassed) + ' = true; '; + if (typeof $sch.then == 'boolean') { + if ($sch.then === false) { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('switch') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { caseIndex: ' + ($caseIndex) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "switch" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } + out += ' var ' + ($nextValid) + ' = ' + ($sch.then) + '; '; + } else { + $it.schema = $sch.then; + $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } + } + $shouldContinue = $sch.continue + } + } + out += '' + ($closingBraces) + 'var ' + ($valid) + ' = ' + ($nextValid) + '; '; + out = it.util.cleanUpCode(out); + return out; +} + +},{}],35:[function(require,module,exports){ +'use strict'; +module.exports = function generate_uniqueItems(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (($schema || $isData) && it.opts.uniqueItems !== false) { + if ($isData) { + out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; + } + out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} + +},{}],36:[function(require,module,exports){ +'use strict'; +module.exports = function generate_validate(it, $keyword) { + var out = ''; + var $async = it.schema.$async === true; + if (it.isTop) { + var $top = it.isTop, + $lvl = it.level = 0, + $dataLvl = it.dataLevel = 0, + $data = 'data'; + it.rootId = it.resolve.fullPath(it.root.schema.id); + it.baseId = it.baseId || it.rootId; + if ($async) { + it.async = true; + var $es7 = it.opts.async == 'es7'; + it.yieldAwait = $es7 ? 'await' : 'yield'; + } + delete it.isTop; + it.dataPathArr = [undefined]; + out += ' var validate = '; + if ($async) { + if ($es7) { + out += ' (async function '; + } else { + if (it.opts.async == 'co*') { + out += 'co.wrap'; + } + out += '(function* '; + } + } else { + out += ' (function '; + } + out += ' (data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; var vErrors = null; '; + out += ' var errors = 0; '; + out += ' if (rootData === undefined) rootData = data;'; + } else { + var $lvl = it.level, + $dataLvl = it.dataLevel, + $data = 'data' + ($dataLvl || ''); + if (it.schema.id) it.baseId = it.resolve.url(it.baseId, it.schema.id); + if ($async && !it.async) throw new Error('async schema in sync schema'); + out += ' var errs_' + ($lvl) + ' = errors;'; + } + var $valid = 'valid' + $lvl, + $breakOnError = !it.opts.allErrors, + $closingBraces1 = '', + $closingBraces2 = ''; + var $typeSchema = it.schema.type, + $typeIsArray = Array.isArray($typeSchema); + if ($typeSchema && it.opts.coerceTypes) { + var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); + if ($coerceToTypes) { + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type', + $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; + var $dataType = 'dataType' + $lvl, + $coerced = 'coerced' + $lvl; + out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; + if (it.opts.coerceTypes == 'array') { + out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; + } + out += ' var ' + ($coerced) + ' = undefined; '; + var $bracesCoercion = ''; + var arr1 = $coerceToTypes; + if (arr1) { + var $type, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $type = arr1[$i += 1]; + if ($i) { + out += ' if (' + ($coerced) + ' === undefined) { '; + $bracesCoercion += '}'; + } + if (it.opts.coerceTypes == 'array' && $type != 'array') { + out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; + } + if ($type == 'string') { + out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; + } else if ($type == 'number' || $type == 'integer') { + out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; + if ($type == 'integer') { + out += ' && !(' + ($data) + ' % 1)'; + } + out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; + } else if ($type == 'boolean') { + out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; + } else if ($type == 'null') { + out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; + } else if (it.opts.coerceTypes == 'array' && $type == 'array') { + out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; + } + } + } + out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' ' + ($data) + ' = ' + ($coerced) + '; '; + if (!$dataLvl) { + out += 'if (' + ($parentData) + ' !== undefined)'; + } + out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } } '; + } + } + var $refKeywords; + if (it.schema.$ref && ($refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'))) { + if (it.opts.extendRefs == 'fail') { + throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '"'); + } else if (it.opts.extendRefs == 'ignore') { + $refKeywords = false; + console.log('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); + } else if (it.opts.extendRefs !== true) { + console.log('$ref: all keywords used in schema at path "' + it.errSchemaPath + '". It will change in the next major version, see issue #260. Use option { extendRefs: true } to keep current behaviour'); + } + } + if (it.schema.$ref && !$refKeywords) { + out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; + if ($breakOnError) { + out += ' } if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } else { + var arr2 = it.RULES; + if (arr2) { + var $rulesGroup, i2 = -1, + l2 = arr2.length - 1; + while (i2 < l2) { + $rulesGroup = arr2[i2 += 1]; + if ($shouldUseGroup($rulesGroup)) { + if ($rulesGroup.type) { + out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; + } + if (it.opts.useDefaults && !it.compositeRule) { + if ($rulesGroup.type == 'object' && it.schema.properties) { + var $schema = it.schema.properties, + $schemaKeys = Object.keys($schema); + var arr3 = $schemaKeys; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $sch = $schema[$propertyKey]; + if ($sch.default !== undefined) { + var $passData = $data + it.util.getProperty($propertyKey); + out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { + var arr4 = it.schema.items; + if (arr4) { + var $sch, $i = -1, + l4 = arr4.length - 1; + while ($i < l4) { + $sch = arr4[$i += 1]; + if ($sch.default !== undefined) { + var $passData = $data + '[' + $i + ']'; + out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } + } + var arr5 = $rulesGroup.rules; + if (arr5) { + var $rule, i5 = -1, + l5 = arr5.length - 1; + while (i5 < l5) { + $rule = arr5[i5 += 1]; + if ($shouldUseRule($rule)) { + out += ' ' + ($rule.code(it, $rule.keyword)) + ' '; + if ($breakOnError) { + $closingBraces1 += '}'; + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces1) + ' '; + $closingBraces1 = ''; + } + if ($rulesGroup.type) { + out += ' } '; + if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { + var $typeChecked = true; + out += ' else { '; + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + } + } + if ($breakOnError) { + out += ' if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } + } + } + } + if ($typeSchema && !$typeChecked && !$coerceToTypes) { + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type', + $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + } + if ($breakOnError) { + out += ' ' + ($closingBraces2) + ' '; + } + if ($top) { + if ($async) { + out += ' if (errors === 0) return true; '; + out += ' else throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; '; + out += ' return errors === 0; '; + } + out += ' }); return validate;'; + } else { + out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; + } + out = it.util.cleanUpCode(out); + if ($top && $breakOnError) { + out = it.util.cleanUpVarErrors(out, $async); + } + + function $shouldUseGroup($rulesGroup) { + for (var i = 0; i < $rulesGroup.rules.length; i++) + if ($shouldUseRule($rulesGroup.rules[i])) return true; + } + + function $shouldUseRule($rule) { + return it.schema[$rule.keyword] !== undefined || ($rule.keyword == 'properties' && (it.schema.additionalProperties === false || typeof it.schema.additionalProperties == 'object' || (it.schema.patternProperties && Object.keys(it.schema.patternProperties).length) || (it.opts.v5 && it.schema.patternGroups && Object.keys(it.schema.patternGroups).length))); + } + return out; +} + +},{}],37:[function(require,module,exports){ +'use strict'; + +var IDENTIFIER = /^[a-z_$][a-z0-9_$\-]*$/i; +var customRuleCode = require('./dotjs/custom'); + +module.exports = { + add: addKeyword, + get: getKeyword, + remove: removeKeyword +}; + +/** + * Define custom keyword + * @this Ajv + * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). + * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. + */ +function addKeyword(keyword, definition) { + /* jshint validthis: true */ + /* eslint no-shadow: 0 */ + var RULES = this.RULES; + + if (RULES.keywords[keyword]) + throw new Error('Keyword ' + keyword + ' is already defined'); + + if (!IDENTIFIER.test(keyword)) + throw new Error('Keyword ' + keyword + ' is not a valid identifier'); + + if (definition) { + if (definition.macro && definition.valid !== undefined) + throw new Error('"valid" option cannot be used with macro keywords'); + + var dataType = definition.type; + if (Array.isArray(dataType)) { + var i, len = dataType.length; + for (i=0; i 2) res = slice.call(arguments, 1); + resolve(res); + }); + }); +} + +/** + * Convert an array of "yieldables" to a promise. + * Uses `Promise.all()` internally. + * + * @param {Array} obj + * @return {Promise} + * @api private + */ + +function arrayToPromise(obj) { + return Promise.all(obj.map(toPromise, this)); +} + +/** + * Convert an object of "yieldables" to a promise. + * Uses `Promise.all()` internally. + * + * @param {Object} obj + * @return {Promise} + * @api private + */ + +function objectToPromise(obj){ + var results = new obj.constructor(); + var keys = Object.keys(obj); + var promises = []; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var promise = toPromise.call(this, obj[key]); + if (promise && isPromise(promise)) defer(promise, key); + else results[key] = obj[key]; + } + return Promise.all(promises).then(function () { + return results; + }); + + function defer(promise, key) { + // predefine the key in the result + results[key] = undefined; + promises.push(promise.then(function (res) { + results[key] = res; + })); + } +} + +/** + * Check if `obj` is a promise. + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ + +function isPromise(obj) { + return 'function' == typeof obj.then; +} + +/** + * Check if `obj` is a generator. + * + * @param {Mixed} obj + * @return {Boolean} + * @api private + */ + +function isGenerator(obj) { + return 'function' == typeof obj.next && 'function' == typeof obj.throw; +} + +/** + * Check if `obj` is a generator function. + * + * @param {Mixed} obj + * @return {Boolean} + * @api private + */ +function isGeneratorFunction(obj) { + var constructor = obj.constructor; + if (!constructor) return false; + if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true; + return isGenerator(constructor.prototype); +} + +/** + * Check for plain object. + * + * @param {Mixed} val + * @return {Boolean} + * @api private + */ + +function isObject(val) { + return Object == val.constructor; +} + +},{}],42:[function(require,module,exports){ +var json = typeof JSON !== 'undefined' ? JSON : require('jsonify'); + +module.exports = function (obj, opts) { + if (!opts) opts = {}; + if (typeof opts === 'function') opts = { cmp: opts }; + var space = opts.space || ''; + if (typeof space === 'number') space = Array(space+1).join(' '); + var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false; + var replacer = opts.replacer || function(key, value) { return value; }; + + var cmp = opts.cmp && (function (f) { + return function (node) { + return function (a, b) { + var aobj = { key: a, value: node[a] }; + var bobj = { key: b, value: node[b] }; + return f(aobj, bobj); + }; + }; + })(opts.cmp); + + var seen = []; + return (function stringify (parent, key, node, level) { + var indent = space ? ('\n' + new Array(level + 1).join(space)) : ''; + var colonSeparator = space ? ': ' : ':'; + + if (node && node.toJSON && typeof node.toJSON === 'function') { + node = node.toJSON(); + } + + node = replacer.call(parent, key, node); + + if (node === undefined) { + return; + } + if (typeof node !== 'object' || node === null) { + return json.stringify(node); + } + if (isArray(node)) { + var out = []; + for (var i = 0; i < node.length; i++) { + var item = stringify(node, i, node[i], level+1) || json.stringify(null); + out.push(indent + space + item); + } + return '[' + out.join(',') + indent + ']'; + } + else { + if (seen.indexOf(node) !== -1) { + if (cycles) return json.stringify('__cycle__'); + throw new TypeError('Converting circular structure to JSON'); + } + else seen.push(node); + + var keys = objectKeys(node).sort(cmp && cmp(node)); + var out = []; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var value = stringify(node, key, node[key], level+1); + + if(!value) continue; + + var keyValue = json.stringify(key) + + colonSeparator + + value; + ; + out.push(indent + space + keyValue); + } + seen.splice(seen.indexOf(node), 1); + return '{' + out.join(',') + indent + '}'; + } + })({ '': obj }, '', obj, 0); +}; + +var isArray = Array.isArray || function (x) { + return {}.toString.call(x) === '[object Array]'; +}; + +var objectKeys = Object.keys || function (obj) { + var has = Object.prototype.hasOwnProperty || function () { return true }; + var keys = []; + for (var key in obj) { + if (has.call(obj, key)) keys.push(key); + } + return keys; +}; + +},{"jsonify":43}],43:[function(require,module,exports){ +exports.parse = require('./lib/parse'); +exports.stringify = require('./lib/stringify'); + +},{"./lib/parse":44,"./lib/stringify":45}],44:[function(require,module,exports){ +var at, // The index of the current character + ch, // The current character + escapee = { + '"': '"', + '\\': '\\', + '/': '/', + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' + }, + text, + + error = function (m) { + // Call error when something is wrong. + throw { + name: 'SyntaxError', + message: m, + at: at, + text: text + }; + }, + + next = function (c) { + // If a c parameter is provided, verify that it matches the current character. + if (c && c !== ch) { + error("Expected '" + c + "' instead of '" + ch + "'"); + } + + // Get the next character. When there are no more characters, + // return the empty string. + + ch = text.charAt(at); + at += 1; + return ch; + }, + + number = function () { + // Parse a number value. + var number, + string = ''; + + if (ch === '-') { + string = '-'; + next('-'); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + if (ch === '.') { + string += '.'; + while (next() && ch >= '0' && ch <= '9') { + string += ch; + } + } + if (ch === 'e' || ch === 'E') { + string += ch; + next(); + if (ch === '-' || ch === '+') { + string += ch; + next(); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + } + number = +string; + if (!isFinite(number)) { + error("Bad number"); + } else { + return number; + } + }, + + string = function () { + // Parse a string value. + var hex, + i, + string = '', + uffff; + + // When parsing for string values, we must look for " and \ characters. + if (ch === '"') { + while (next()) { + if (ch === '"') { + next(); + return string; + } else if (ch === '\\') { + next(); + if (ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = uffff * 16 + hex; + } + string += String.fromCharCode(uffff); + } else if (typeof escapee[ch] === 'string') { + string += escapee[ch]; + } else { + break; + } + } else { + string += ch; + } + } + } + error("Bad string"); + }, + + white = function () { + +// Skip whitespace. + + while (ch && ch <= ' ') { + next(); + } + }, + + word = function () { + +// true, false, or null. + + switch (ch) { + case 't': + next('t'); + next('r'); + next('u'); + next('e'); + return true; + case 'f': + next('f'); + next('a'); + next('l'); + next('s'); + next('e'); + return false; + case 'n': + next('n'); + next('u'); + next('l'); + next('l'); + return null; + } + error("Unexpected '" + ch + "'"); + }, + + value, // Place holder for the value function. + + array = function () { + +// Parse an array value. + + var array = []; + + if (ch === '[') { + next('['); + white(); + if (ch === ']') { + next(']'); + return array; // empty array + } + while (ch) { + array.push(value()); + white(); + if (ch === ']') { + next(']'); + return array; + } + next(','); + white(); + } + } + error("Bad array"); + }, + + object = function () { + +// Parse an object value. + + var key, + object = {}; + + if (ch === '{') { + next('{'); + white(); + if (ch === '}') { + next('}'); + return object; // empty object + } + while (ch) { + key = string(); + white(); + next(':'); + if (Object.hasOwnProperty.call(object, key)) { + error('Duplicate key "' + key + '"'); + } + object[key] = value(); + white(); + if (ch === '}') { + next('}'); + return object; + } + next(','); + white(); + } + } + error("Bad object"); + }; + +value = function () { + +// Parse a JSON value. It could be an object, an array, a string, a number, +// or a word. + + white(); + switch (ch) { + case '{': + return object(); + case '[': + return array(); + case '"': + return string(); + case '-': + return number(); + default: + return ch >= '0' && ch <= '9' ? number() : word(); + } +}; + +// Return the json_parse function. It will have access to all of the above +// functions and variables. + +module.exports = function (source, reviver) { + var result; + + text = source; + at = 0; + ch = ' '; + result = value(); + white(); + if (ch) { + error("Syntax error"); + } + + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + + return typeof reviver === 'function' ? (function walk(holder, key) { + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + }({'': result}, '')) : result; +}; + +},{}],45:[function(require,module,exports){ +var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + +function quote(string) { + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; +} + +function str(key, holder) { + // Produce a string from holder[key]. + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + + // If the value has a toJSON method, call it to obtain a replacement value. + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + // If we were called with a replacer function, then call the replacer to + // obtain a replacement value. + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + + // What happens next depends on the value's type. + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + // JSON numbers must be finite. Encode non-finite numbers as null. + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce 'null'. The case is included here in + // the remote chance that this gets fixed someday. + return String(value); + + case 'object': + if (!value) return 'null'; + gap += indent; + partial = []; + + // Array.isArray + if (Object.prototype.toString.apply(value) === '[object Array]') { + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + + // Join all of the elements together, separated with commas, and + // wrap them in brackets. + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be + // stringified. + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + k = rep[i]; + if (typeof k === 'string') { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + else { + // Otherwise, iterate through all of the keys in the object. + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, + // and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } +} + +module.exports = function (value, replacer, space) { + var i; + gap = ''; + indent = ''; + + // If the space parameter is a number, make an indent string containing that + // many spaces. + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + } + // If the space parameter is a string, it will be used as the indent string. + else if (typeof space === 'string') { + indent = space; + } + + // If there is a replacer, it must be a function or an array. + // Otherwise, throw an error. + rep = replacer; + if (replacer && typeof replacer !== 'function' + && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + + // Make a fake root object containing our value under the key of ''. + // Return the result of stringifying the value. + return str('', {'': value}); +}; + +},{}],46:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],47:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],48:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +},{}],49:[function(require,module,exports){ +'use strict'; + +exports.decode = exports.parse = require('./decode'); +exports.encode = exports.stringify = require('./encode'); + +},{"./decode":47,"./encode":48}],50:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +'use strict'; + +var punycode = require('punycode'); +var util = require('./util'); + +exports.parse = urlParse; +exports.resolve = urlResolve; +exports.resolveObject = urlResolveObject; +exports.format = urlFormat; + +exports.Url = Url; + +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // Special case for a simple path URL + simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }, + querystring = require('querystring'); + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && util.isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; +} + +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + if (!util.isString(url)) { + throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + } + + // Copy chrome, IE, opera backslash-handling behavior. + // Back slashes before the query string get converted to forward slashes + // See: https://code.google.com/p/chromium/issues/detail?id=25916 + var queryIndex = url.indexOf('?'), + splitter = + (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', + uSplit = url.split(splitter), + slashRegex = /\\/g; + uSplit[0] = uSplit[0].replace(slashRegex, '/'); + url = uSplit.join(splitter); + + var rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + var simplePath = simplePathPattern.exec(rest); + if (simplePath) { + this.path = rest; + this.href = rest; + this.pathname = simplePath[1]; + if (simplePath[2]) { + this.search = simplePath[2]; + if (parseQueryString) { + this.query = querystring.parse(this.search.substr(1)); + } else { + this.query = this.search.substr(1); + } + } else if (parseQueryString) { + this.search = ''; + this.query = {}; + } + return this; + } + } + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + this.protocol = lowerProto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; + } + } + + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (var i = 0; i < hostEndingChars.length; i++) { + var hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = decodeURIComponent(auth); + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (var i = 0; i < nonHostChars.length; i++) { + var hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; + + this.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + this.parseHost(); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (var i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } + + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } else { + // hostnames are always lower case. + this.hostname = this.hostname.toLowerCase(); + } + + if (!ipv6Hostname) { + // IDNA Support: Returns a punycoded representation of "domain". + // It only converts parts of the domain name that + // have non-ASCII characters, i.e. it doesn't matter if + // you call it with a domain that already is ASCII-only. + this.hostname = punycode.toASCII(this.hostname); + } + + var p = this.port ? ':' + this.port : ''; + var h = this.hostname || ''; + this.host = h + p; + this.href += this.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } + + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { + + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (var i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + if (rest.indexOf(ae) === -1) + continue; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } + + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + this.query = rest.substr(qm + 1); + if (parseQueryString) { + this.query = querystring.parse(this.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + this.search = ''; + this.query = {}; + } + if (rest) this.pathname = rest; + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = '/'; + } + + //to support http.request + if (this.pathname || this.search) { + var p = this.pathname || ''; + var s = this.search || ''; + this.path = p + s; + } + + // finally, reconstruct the href based on what has been validated. + this.href = this.format(); + return this; +}; + +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (util.isString(obj)) obj = urlParse(obj); + if (!(obj instanceof Url)) return Url.prototype.format.call(obj); + return obj.format(); +} + +Url.prototype.format = function() { + var auth = this.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } + + var protocol = this.protocol || '', + pathname = this.pathname || '', + hash = this.hash || '', + host = false, + query = ''; + + if (this.host) { + host = auth + this.host; + } else if (this.hostname) { + host = auth + (this.hostname.indexOf(':') === -1 ? + this.hostname : + '[' + this.hostname + ']'); + if (this.port) { + host += ':' + this.port; + } + } + + if (this.query && + util.isObject(this.query) && + Object.keys(this.query).length) { + query = querystring.stringify(this.query); + } + + var search = this.search || (query && ('?' + query)) || ''; + + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (this.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; + + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); + + return protocol + host + pathname + search + hash; +}; + +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} + +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; + +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} + +Url.prototype.resolveObject = function(relative) { + if (util.isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } + + var result = new Url(); + var tkeys = Object.keys(this); + for (var tk = 0; tk < tkeys.length; tk++) { + var tkey = tkeys[tk]; + result[tkey] = this[tkey]; + } + + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; + + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } + + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + var rkeys = Object.keys(relative); + for (var rk = 0; rk < rkeys.length; rk++) { + var rkey = rkeys[rk]; + if (rkey !== 'protocol') + result[rkey] = relative[rkey]; + } + + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } + + result.href = result.format(); + return result; + } + + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + var keys = Object.keys(relative); + for (var v = 0; v < keys.length; v++) { + var k = keys[v]; + result[k] = relative[k]; + } + result.href = result.format(); + return result; + } + + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + var relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } + + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + relPath = relative.pathname && relative.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; + + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } + + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!util.isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } + + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } + + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host || srcPath.length > 1) && + (last === '.' || last === '..') || last === ''); + + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last === '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } + + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } + + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } + + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); + + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + + mustEndAbs = mustEndAbs || (result.host && srcPath.length); + + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } + + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } + + //to support request.http + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; + +Url.prototype.parseHost = function() { + var host = this.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) this.hostname = host; +}; + +},{"./util":51,"punycode":46,"querystring":49}],51:[function(require,module,exports){ +'use strict'; + +module.exports = { + isString: function(arg) { + return typeof(arg) === 'string'; + }, + isObject: function(arg) { + return typeof(arg) === 'object' && arg !== null; + }, + isNull: function(arg) { + return arg === null; + }, + isNullOrUndefined: function(arg) { + return arg == null; + } +}; + +},{}],"ajv":[function(require,module,exports){ +'use strict'; + +var compileSchema = require('./compile') + , resolve = require('./compile/resolve') + , Cache = require('./cache') + , SchemaObject = require('./compile/schema_obj') + , stableStringify = require('json-stable-stringify') + , formats = require('./compile/formats') + , rules = require('./compile/rules') + , v5 = require('./v5') + , util = require('./compile/util') + , async = require('./async') + , co = require('co'); + +module.exports = Ajv; + +Ajv.prototype.compileAsync = async.compile; + +var customKeyword = require('./keyword'); +Ajv.prototype.addKeyword = customKeyword.add; +Ajv.prototype.getKeyword = customKeyword.get; +Ajv.prototype.removeKeyword = customKeyword.remove; +Ajv.ValidationError = require('./compile/validation_error'); + +var META_SCHEMA_ID = 'http://json-schema.org/draft-04/schema'; +var SCHEMA_URI_FORMAT = /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i; +function SCHEMA_URI_FORMAT_FUNC(str) { + return SCHEMA_URI_FORMAT.test(str); +} + +var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ]; + +/** + * Creates validator instance. + * Usage: `Ajv(opts)` + * @param {Object} opts optional options + * @return {Object} ajv instance + */ +function Ajv(opts) { + if (!(this instanceof Ajv)) return new Ajv(opts); + var self = this; + + opts = this._opts = util.copy(opts) || {}; + this._schemas = {}; + this._refs = {}; + this._fragments = {}; + this._formats = formats(opts.format); + this._cache = opts.cache || new Cache; + this._loadingSchemas = {}; + this._compilations = []; + this.RULES = rules(); + + // this is done on purpose, so that methods are bound to the instance + // (without using bind) so that they can be used without the instance + this.validate = validate; + this.compile = compile; + this.addSchema = addSchema; + this.addMetaSchema = addMetaSchema; + this.validateSchema = validateSchema; + this.getSchema = getSchema; + this.removeSchema = removeSchema; + this.addFormat = addFormat; + this.errorsText = errorsText; + + this._addSchema = _addSchema; + this._compile = _compile; + + opts.loopRequired = opts.loopRequired || Infinity; + if (opts.async || opts.transpile) async.setup(opts); + if (opts.beautify === true) opts.beautify = { indent_size: 2 }; + if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; + this._metaOpts = getMetaSchemaOptions(); + + if (opts.formats) addInitialFormats(); + addDraft4MetaSchema(); + if (opts.v5) v5.enable(this); + if (typeof opts.meta == 'object') addMetaSchema(opts.meta); + addInitialSchemas(); + + + /** + * Validate data using schema + * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize. + * @param {String|Object} schemaKeyRef key, ref or schema object + * @param {Any} data to be validated + * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). + */ + function validate(schemaKeyRef, data) { + var v; + if (typeof schemaKeyRef == 'string') { + v = getSchema(schemaKeyRef); + if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); + } else { + var schemaObj = _addSchema(schemaKeyRef); + v = schemaObj.validate || _compile(schemaObj); + } + + var valid = v(data); + if (v.$async === true) + return self._opts.async == '*' ? co(valid) : valid; + self.errors = v.errors; + return valid; + } + + + /** + * Create validating function for passed schema. + * @param {Object} schema schema object + * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. + * @return {Function} validating function + */ + function compile(schema, _meta) { + var schemaObj = _addSchema(schema, undefined, _meta); + return schemaObj.validate || _compile(schemaObj); + } + + + /** + * Adds schema to the instance. + * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. + * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. + * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. + */ + function addSchema(schema, key, _skipValidation, _meta) { + if (Array.isArray(schema)){ + for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. + * @param {Object} options optional options with properties `separator` and `dataVar`. + * @return {String} human readable string with all errors descriptions + */ + function errorsText(errors, options) { + errors = errors || self.errors; + if (!errors) return 'No errors'; + options = options || {}; + var separator = options.separator === undefined ? ', ' : options.separator; + var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; + + var text = ''; + for (var i=0; i=1&&t<=12&&a>=1&&a<=m[t]}function o(e,r){var t=e.match(v);if(!t)return!1;var a=t[1],s=t[2],o=t[3],i=t[5];return a<=23&&s<=59&&o<=59&&(!r||i)}function i(e){var r=e.split(b);return 2==r.length&&s(r[0])&&o(r[1],!0)}function n(e){return e.length<=255&&y.test(e)}function l(e){return w.test(e)&&g.test(e)}function c(e){try{return new RegExp(e),!0}catch(e){return!1}}function h(e,r){if(e&&r)return e>r?1:er?1:e=0?{index:a,compiling:!0}:(a=this._compilations.length,this._compilations[a]={schema:e,root:r,baseId:t},{index:a,compiling:!1})}function i(e,r,t){var a=n.call(this,e,r,t);a>=0&&this._compilations.splice(a,1)}function n(e,r,t){for(var a=0;a=55296&&r<=56319&&s=r)throw new Error("Cannot access property/index "+a+" levels up, current level is "+r);return t[r-a]}if(a>r)throw new Error("Cannot access data "+a+" levels up, current level is "+r);if(o="data"+(r-a||""),!s)return o}for(var n=o,c=s.split("/"),h=0;h",S="result"+s,$=e.opts.v5&&i&&i.$data;if($?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ",g="schema"+s):g=i,w){var x=e.util.getData(b.$data,o,e.dataPathArr),_="exclusive"+s,O="op"+s,R="' + "+O+" + '";a+=" var schemaExcl"+s+" = "+x+"; ",x="schemaExcl"+s,a+=" if (typeof "+x+" != 'boolean' && "+x+" !== undefined) { "+u+" = false; ";var t=E,I=I||[];I.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(t||"_formatExclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: '"+E+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var A=a;a=I.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+A+"]); ":" validate.errors = ["+A+"]; return false; ":" var err = "+A+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(p+="}",a+=" else { "),$&&(a+=" if ("+g+" === undefined) "+u+" = true; else if (typeof "+g+" != 'string') "+u+" = false; else { ",p+="}"),d&&(a+=" if (!"+y+") "+u+" = true; else { ",p+="}"),a+=" var "+S+" = "+y+"("+h+", ",a+=$?""+g:""+e.util.toQuotedString(i),a+=" ); if ("+S+" === undefined) "+u+" = false; var "+_+" = "+x+" === true; if ("+u+" === undefined) { "+u+" = "+_+" ? "+S+" "+j+" 0 : "+S+" "+j+"= 0; } if (!"+u+") var op"+s+" = "+_+" ? '"+j+"' : '"+j+"=';"}else{var _=!0===b,R=j;_||(R+="=");var O="'"+R+"'";$&&(a+=" if ("+g+" === undefined) "+u+" = true; else if (typeof "+g+" != 'string') "+u+" = false; else { ",p+="}"),d&&(a+=" if (!"+y+") "+u+" = true; else { ",p+="}"),a+=" var "+S+" = "+y+"("+h+", ",a+=$?""+g:""+e.util.toQuotedString(i),a+=" ); if ("+S+" === undefined) "+u+" = false; if ("+u+" === undefined) "+u+" = "+S+" "+j,_||(a+="="),a+=" 0;"}a+=p+"if (!"+u+") { ";var t=r,I=I||[];I.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(t||"_formatLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { comparison: "+O+", limit: ",a+=$?""+g:""+e.util.toQuotedString(i),a+=" , exclusive: "+_+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be "+R+' "',a+=$?"' + "+g+" + '":""+e.util.escapeQuotes(i),a+="\"' "),e.opts.verbose&&(a+=" , schema: ",a+=$?"validate.schema"+n:""+e.util.toQuotedString(i),a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var A=a;return a=I.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+A+"]); ":" validate.errors = ["+A+"]; return false; ":" var err = "+A+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="}"}},{}],14:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,h=!e.opts.allErrors,u="data"+(i||""),f=e.opts.v5&&n&&n.$data;f?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n;var d="maximum"==r,p=d?"exclusiveMaximum":"exclusiveMinimum",m=e.schema[p],v=e.opts.v5&&m&&m.$data,y=d?"<":">",g=d?">":"<";if(v){var P=e.util.getData(m.$data,i,e.dataPathArr),E="exclusive"+o,b="op"+o,w="' + "+b+" + '";s+=" var schemaExcl"+o+" = "+P+"; ",P="schemaExcl"+o,s+=" var exclusive"+o+"; if (typeof "+P+" != 'boolean' && typeof "+P+" != 'undefined') { ";var t=p,j=j||[];j.push(s),s="",!1!==e.createErrors?(s+=" { keyword: '"+(t||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(s+=" , message: '"+p+" should be boolean' "),e.opts.verbose&&(s+=" , schema: validate.schema"+l+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),s+=" } "):s+=" {} ";var S=s;s=j.pop(),s+=!e.compositeRule&&h?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } else if( ",f&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" ((exclusive"+o+" = "+P+" === true) ? "+u+" "+g+"= "+a+" : "+u+" "+g+" "+a+") || "+u+" !== "+u+") { var op"+o+" = exclusive"+o+" ? '"+y+"' : '"+y+"=';"}else{var E=!0===m,w=y;E||(w+="=");var b="'"+w+"'";s+=" if ( ",f&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" "+u+" "+g,E&&(s+="="),s+=" "+a+" || "+u+" !== "+u+") {"}var t=r,j=j||[];j.push(s),s="",!1!==e.createErrors?(s+=" { keyword: '"+(t||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { comparison: "+b+", limit: "+a+", exclusive: "+E+" } ",!1!==e.opts.messages&&(s+=" , message: 'should be "+w+" ",s+=f?"' + "+a:n+"'"),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),s+=" } "):s+=" {} ";var S=s;return s=j.pop(),s+=!e.compositeRule&&h?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } ",h&&(s+=" else { "),s}},{}],15:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,h=!e.opts.allErrors,u="data"+(i||""),f=e.opts.v5&&n&&n.$data;f?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n;var d="maxItems"==r?">":"<";s+="if ( ",f&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" "+u+".length "+d+" "+a+") { ";var t=r,p=p||[];p.push(s),s="",!1!==e.createErrors?(s+=" { keyword: '"+(t||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have ",s+="maxItems"==r?"more":"less",s+=" than ",s+=f?"' + "+a+" + '":""+n,s+=" items' "),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),s+=" } "):s+=" {} ";var m=s;return s=p.pop(),s+=!e.compositeRule&&h?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",h&&(s+=" else { "),s}},{}],16:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,h=!e.opts.allErrors,u="data"+(i||""),f=e.opts.v5&&n&&n.$data;f?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n;var d="maxLength"==r?">":"<";s+="if ( ",f&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=!1===e.opts.unicode?" "+u+".length ":" ucs2length("+u+") ",s+=" "+d+" "+a+") { ";var t=r,p=p||[];p.push(s),s="",!1!==e.createErrors?(s+=" { keyword: '"+(t||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT be ",s+="maxLength"==r?"longer":"shorter",s+=" than ",s+=f?"' + "+a+" + '":""+n,s+=" characters' "),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+l:""+n, +s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),s+=" } "):s+=" {} ";var m=s;return s=p.pop(),s+=!e.compositeRule&&h?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",h&&(s+=" else { "),s}},{}],17:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,h=!e.opts.allErrors,u="data"+(i||""),f=e.opts.v5&&n&&n.$data;f?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n;var d="maxProperties"==r?">":"<";s+="if ( ",f&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" Object.keys("+u+").length "+d+" "+a+") { ";var t=r,p=p||[];p.push(s),s="",!1!==e.createErrors?(s+=" { keyword: '"+(t||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have ",s+="maxProperties"==r?"more":"less",s+=" than ",s+=f?"' + "+a+" + '":""+n,s+=" properties' "),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),s+=" } "):s+=" {} ";var m=s;return s=p.pop(),s+=!e.compositeRule&&h?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",h&&(s+=" else { "),s}},{}],18:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.schema[r],s=e.schemaPath+e.util.getProperty(r),o=e.errSchemaPath+"/"+r,i=!e.opts.allErrors,n=e.util.copy(e),l="";n.level++;var c="valid"+n.level,h=n.baseId,u=!0,f=a;if(f)for(var d,p=-1,m=f.length-1;p "+$+") { ";var _=c+"["+$+"]";f.schema=S,f.schemaPath=i+"["+$+"]",f.errSchemaPath=n+"/"+$,f.errorPath=e.util.getPathExpr(e.errorPath,$,e.opts.jsonPointers,!0),f.dataPathArr[v]=$;var O=e.validate(f);f.baseId=g,e.util.varOccurences(O,y)<2?t+=" "+e.util.varReplace(O,y,_)+" ":t+=" var "+y+" = "+_+"; "+O+" ",t+=" } ",l&&(t+=" if ("+p+") { ",d+="}")}if("object"==typeof P&&e.util.schemaHasRules(P,e.RULES.all)){f.schema=P,f.schemaPath=e.schemaPath+".additionalItems",f.errSchemaPath=e.errSchemaPath+"/additionalItems",t+=" "+p+" = true; if ("+c+".length > "+o.length+") { for (var "+m+" = "+o.length+"; "+m+" < "+c+".length; "+m+"++) { ",f.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);var _=c+"["+m+"]";f.dataPathArr[v]=m;var O=e.validate(f);f.baseId=g,e.util.varOccurences(O,y)<2?t+=" "+e.util.varReplace(O,y,_)+" ":t+=" var "+y+" = "+_+"; "+O+" ",l&&(t+=" if (!"+p+") break; "),t+=" } } ",l&&(t+=" if ("+p+") { ",d+="}")}}else if(e.util.schemaHasRules(o,e.RULES.all)){f.schema=o,f.schemaPath=i,f.errSchemaPath=n,t+=" for (var "+m+" = 0; "+m+" < "+c+".length; "+m+"++) { ",f.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);var _=c+"["+m+"]";f.dataPathArr[v]=m;var O=e.validate(f);f.baseId=g,e.util.varOccurences(O,y)<2?t+=" "+e.util.varReplace(O,y,_)+" ":t+=" var "+y+" = "+_+"; "+O+" ",l&&(t+=" if (!"+p+") break; "),t+=" } ",l&&(t+=" if ("+p+") { ",d+="}")}return l&&(t+=" "+d+" if ("+u+" == errors) {"),t=e.util.cleanUpCode(t)}},{}],26:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i&&i.$data;u?(a+=" var schema"+s+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ",t="schema"+s):t=i,a+="var division"+s+";if (",u&&(a+=" "+t+" !== undefined && ( typeof "+t+" != 'number' || "),a+=" (division"+s+" = "+h+" / "+t+", ",a+=e.opts.multipleOfPrecision?" Math.abs(Math.round(division"+s+") - division"+s+") > 1e-"+e.opts.multipleOfPrecision+" ":" division"+s+" !== parseInt(division"+s+") ",a+=" ) ",u&&(a+=" ) "),a+=" ) { ";var f=f||[];f.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { multipleOf: "+t+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be multiple of ",a+=u?"' + "+t:i+"'"),e.opts.verbose&&(a+=" , schema: ",a+=u?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var d=a;return a=f.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+d+"]); ":" validate.errors = ["+d+"]; return false; ":" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],27:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),h="errs__"+a,u=e.util.copy(e);u.level++;var f="valid"+u.level;if(e.util.schemaHasRules(o,e.RULES.all)){u.schema=o,u.schemaPath=i,u.errSchemaPath=n,t+=" var "+h+" = errors; ";var d=e.compositeRule;e.compositeRule=u.compositeRule=!0,u.createErrors=!1;var p;u.opts.allErrors&&(p=u.opts.allErrors,u.opts.allErrors=!1),t+=" "+e.validate(u)+" ",u.createErrors=!0,p&&(u.opts.allErrors=p),e.compositeRule=u.compositeRule=d,t+=" if ("+f+") { ";var m=m||[];m.push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: {} ",!1!==e.opts.messages&&(t+=" , message: 'should NOT be valid' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var v=t;t=m.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ",e.opts.allErrors&&(t+=" } ")}else t+=" var err = ",!1!==e.createErrors?(t+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: {} ",!1!==e.opts.messages&&(t+=" , message: 'should NOT be valid' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ",t+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l&&(t+=" if (false) { ");return t}},{}],28:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),h="valid"+a,u="errs__"+a,f=e.util.copy(e),d="";f.level++;var p="valid"+f.level;t+="var "+u+" = errors;var prevValid"+a+" = false;var "+h+" = false;";var m=f.baseId,v=e.compositeRule;e.compositeRule=f.compositeRule=!0;var y=o;if(y)for(var g,P=-1,E=y.length-1;P5)t+=" || validate.schema"+i+"["+m+"] ";else{var q=g;if(q)for(var D,L=-1,Q=q.length-1;L= "+pe+"; ",n=e.errSchemaPath+"/patternGroups/minimum",t+=" if (!"+h+") { ";var G=G||[];G.push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'patternGroups' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { reason: '"+ye+"', limit: "+ve+", pattern: '"+e.util.escapeQuotes(M)+"' } ",!1!==e.opts.messages&&(t+=" , message: 'should NOT have "+ge+" than "+ve+' properties matching pattern "'+e.util.escapeQuotes(M)+"\"' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var K=t;t=G.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+K+"]); ":" validate.errors = ["+K+"]; return false; ":" var err = "+K+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } ",void 0!==me&&(t+=" else ")}if(void 0!==me){var ve=me,ye="maximum",ge="more";t+=" "+h+" = pgPropCount"+a+" <= "+me+"; ",n=e.errSchemaPath+"/patternGroups/maximum",t+=" if (!"+h+") { ";var G=G||[];G.push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'patternGroups' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { reason: '"+ye+"', limit: "+ve+", pattern: '"+e.util.escapeQuotes(M)+"' } ",!1!==e.opts.messages&&(t+=" , message: 'should NOT have "+ge+" than "+ve+' properties matching pattern "'+e.util.escapeQuotes(M)+"\"' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var K=t;t=G.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+K+"]); ":" validate.errors = ["+K+"]; return false; ":" var err = "+K+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } "}n=J,l&&(t+=" if ("+h+") { ",d+="}")}}}}return l&&(t+=" "+d+" if ("+u+" == errors) {"),t=e.util.cleanUpCode(t)}},{}],32:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(i||""),u="valid"+o;if("#"==n||"#/"==n)e.isRoot?(t=e.async,a="validate"):(t=!0===e.root.schema.$async,a="root.refVal[0]");else{var f=e.resolveRef(e.baseId,n,e.isRoot);if(void 0===f){var d="can't resolve reference "+n+" from id "+e.baseId;if("fail"==e.opts.missingRefs){console.log(d);var p=p||[];p.push(s),s="",!1!==e.createErrors?(s+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { ref: '"+e.util.escapeQuotes(n)+"' } ",!1!==e.opts.messages&&(s+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(n)+"' "),e.opts.verbose&&(s+=" , schema: "+e.util.toQuotedString(n)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var m=s;s=p.pop(),s+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(s+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs){var v=new Error(d);throw v.missingRef=e.resolve.url(e.baseId,n),v.missingSchema=e.resolve.normalizeId(e.resolve.fullPath(v.missingRef)),v}console.log(d),c&&(s+=" if (true) { ")}}else if(f.inline){var y=e.util.copy(e);y.level++;var g="valid"+y.level;y.schema=f.schema,y.schemaPath="",y.errSchemaPath=n;var P=e.validate(y).replace(/validate\.schema/g,f.code);s+=" "+P+" ",c&&(s+=" if ("+g+") { ")}else t=!0===f.$async,a=f.code}if(a){var p=p||[];p.push(s),s="",s+=e.opts.passContext?" "+a+".call(this, ":" "+a+"( ",s+=" "+h+", (dataPath || '')",'""'!=e.errorPath&&(s+=" + "+e.errorPath);s+=" , "+(i?"data"+(i-1||""):"parentData")+" , "+(i?e.dataPathArr[i]:"parentDataProperty")+", rootData) ";var E=s;if(s=p.pop(),t){if(!e.async)throw new Error("async schema referenced by sync schema");s+=" try { ",c&&(s+="var "+u+" ="),s+=" "+e.yieldAwait+" "+E+"; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ",c&&(s+=" if ("+u+") { ")}else s+=" if (!"+E+") { if (vErrors === null) vErrors = "+a+".errors; else vErrors = vErrors.concat("+a+".errors); errors = vErrors.length; } ",c&&(s+=" else { ")}return s}},{}],33:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),h="valid"+a,u=e.opts.v5&&o&&o.$data;u&&(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; ");var f="schema"+a;if(!u)if(o.length=e.opts.loopRequired;if(l)if(t+=" var missing"+a+"; ",E){u||(t+=" var "+f+" = validate.schema"+i+"; ");var b="i"+a,w="schema"+a+"["+b+"]",j="' + "+w+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(P,w,e.opts.jsonPointers)),t+=" var "+h+" = true; ",u&&(t+=" if (schema"+a+" === undefined) "+h+" = true; else if (!Array.isArray(schema"+a+")) "+h+" = false; else {"),t+=" for (var "+b+" = 0; "+b+" < "+f+".length; "+b+"++) { "+h+" = "+c+"["+f+"["+b+"]] !== undefined; if (!"+h+") break; } ",u&&(t+=" } "),t+=" if (!"+h+") { ";var S=S||[];S.push(t),t="",!1!==e.createErrors?(t+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { missingProperty: '"+j+"' } ",!1!==e.opts.messages&&(t+=" , message: '",t+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+j+"\\'",t+="' "),e.opts.verbose&&(t+=" , schema: validate.schema"+i+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var $=t;t=S.pop(),t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+$+"]); ":" validate.errors = ["+$+"]; return false; ":" var err = "+$+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+=" } else { "}else{t+=" if ( ";var x=d;if(x)for(var _,b=-1,O=x.length-1;b 1) { var i = "+h+".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal("+h+"[i], "+h+"[j])) { "+u+" = false; break outer; } } } } ",f&&(a+=" } "),a+=" if (!"+u+") { ";var d=d||[];d.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema: ",a+=f?"validate.schema"+n:""+i,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var p=a;a=d.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { ")}else c&&(a+=" if (true) { ");return a}},{}],36:[function(e,r,t){"use strict";r.exports=function(e,r){function t(r){return void 0!==e.schema[r.keyword]||"properties"==r.keyword&&(!1===e.schema.additionalProperties||"object"==typeof e.schema.additionalProperties||e.schema.patternProperties&&Object.keys(e.schema.patternProperties).length||e.opts.v5&&e.schema.patternGroups&&Object.keys(e.schema.patternGroups).length)}var a="",s=!0===e.schema.$async;if(e.isTop){var o=e.isTop,i=e.level=0,n=e.dataLevel=0,l="data";if(e.rootId=e.resolve.fullPath(e.root.schema.id),e.baseId=e.baseId||e.rootId,s){e.async=!0;var c="es7"==e.opts.async;e.yieldAwait=c?"await":"yield"}delete e.isTop,e.dataPathArr=[void 0],a+=" var validate = ",s?c?a+=" (async function ":("co*"==e.opts.async&&(a+="co.wrap"),a+="(function* "):a+=" (function ",a+=" (data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; var vErrors = null; ",a+=" var errors = 0; ",a+=" if (rootData === undefined) rootData = data;"}else{var i=e.level,n=e.dataLevel,l="data"+(n||"");if(e.schema.id&&(e.baseId=e.resolve.url(e.baseId,e.schema.id)),s&&!e.async)throw new Error("async schema in sync schema");a+=" var errs_"+i+" = errors;"}var h="valid"+i,u=!e.opts.allErrors,f="",d="",p=e.schema.type,m=Array.isArray(p);if(p&&e.opts.coerceTypes){var v=e.util.coerceToTypes(e.opts.coerceTypes,p);if(v){var y=e.schemaPath+".type",g=e.errSchemaPath+"/type",P=m?"checkDataTypes":"checkDataType";a+=" if ("+e.util[P](p,l,!0)+") { ";var E="dataType"+i,b="coerced"+i;a+=" var "+E+" = typeof "+l+"; ","array"==e.opts.coerceTypes&&(a+=" if ("+E+" == 'object' && Array.isArray("+l+")) "+E+" = 'array'; "),a+=" var "+b+" = undefined; ";var w="",j=v;if(j)for(var S,$=-1,x=j.length-1;$2&&(r=f.call(arguments,1)),t(r)})})}function i(e){return Promise.all(e.map(s,this))}function n(e){for(var r=new e.constructor,t=Object.keys(e),a=[],o=0;o="0"&&s<="9";)r+=s,c();if("."===s)for(r+=".";c()&&s>="0"&&s<="9";)r+=s;if("e"===s||"E"===s)for(r+=s,c(),"-"!==s&&"+"!==s||(r+=s,c());s>="0"&&s<="9";)r+=s,c();if(e=+r,isFinite(e))return e;l("Bad number")},u=function(){var e,r,t,a="";if('"'===s)for(;c();){if('"'===s)return c(),a;if("\\"===s)if(c(),"u"===s){for(t=0,r=0;r<4&&(e=parseInt(c(),16),isFinite(e));r+=1)t=16*t+e;a+=String.fromCharCode(t)}else{if("string"!=typeof n[s])break;a+=n[s]}else a+=s}l("Bad string")},f=function(){for(;s&&s<=" ";)c()},d=function(){switch(s){case"t":return c("t"),c("r"),c("u"),c("e"),!0;case"f":return c("f"),c("a"),c("l"),c("s"),c("e"),!1;case"n":return c("n"),c("u"),c("l"),c("l"),null}l("Unexpected '"+s+"'")},p=function(){var e=[];if("["===s){if(c("["),f(),"]"===s)return c("]"),e;for(;s;){if(e.push(i()),f(),"]"===s)return c("]"),e;c(","),f()}}l("Bad array")},m=function(){var e,r={};if("{"===s){if(c("{"),f(),"}"===s)return c("}"),r;for(;s;){if(e=u(),f(),c(":"),Object.hasOwnProperty.call(r,e)&&l('Duplicate key "'+e+'"'),r[e]=i(),f(),"}"===s)return c("}"),r;c(","),f()}}l("Bad object")};i=function(){switch(f(),s){case"{":return m();case"[":return p();case'"':return u();case"-":return h();default:return s>="0"&&s<="9"?h():d()}},r.exports=function(e,r){var t;return o=e,a=0,s=" ",t=i(),f(),s&&l("Syntax error"),"function"==typeof r?function e(t,a){var s,o,i=t[a];if(i&&"object"==typeof i)for(s in i)Object.prototype.hasOwnProperty.call(i,s)&&(o=e(i,s),void 0!==o?i[s]=o:delete i[s]);return r.call(t,a,i)}({"":t},""):t}},{}],45:[function(e,r,t){function a(e){return l.lastIndex=0,l.test(e)?'"'+e.replace(l,function(e){var r=c[e];return"string"==typeof r?r:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function s(e,r){var t,l,c,h,u,f=o,d=r[e];switch(d&&"object"==typeof d&&"function"==typeof d.toJSON&&(d=d.toJSON(e)),"function"==typeof n&&(d=n.call(r,e,d)),typeof d){case"string":return a(d);case"number":return isFinite(d)?String(d):"null";case"boolean":case"null":return String(d);case"object":if(!d)return"null";if(o+=i,u=[],"[object Array]"===Object.prototype.toString.apply(d)){for(h=d.length,t=0;t1&&(a=t[0]+"@",e=t[1]),e=e.replace(q,"."),a+i(e.split("."),r).join(".")}function l(e){for(var r,t,a=[],s=0,o=e.length;s=55296&&r<=56319&&s65535&&(e-=65536,r+=C(e>>>10&1023|55296),e=56320|1023&e),r+=C(e)}).join("")}function h(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:j}function u(e,r){return e+22+75*(e<26)-((0!=r)<<5)}function f(e,r,t){var a=0;for(e=t?Q(e/_):e>>1,e+=Q(e/r);e>L*$>>1;a+=j)e=Q(e/L);return Q(a+(L+1)*e/(e+x))}function d(e){var r,t,a,s,i,n,l,u,d,p,m=[],v=e.length,y=0,g=R,P=O;for(t=e.lastIndexOf(I),t<0&&(t=0),a=0;a=128&&o("not-basic"),m.push(e.charCodeAt(a));for(s=t>0?t+1:0;s=v&&o("invalid-input"),u=h(e.charCodeAt(s++)),(u>=j||u>Q((w-y)/n))&&o("overflow"),y+=u*n,d=l<=P?S:l>=P+$?$:l-P,!(uQ(w/p)&&o("overflow"),n*=p;r=m.length+1,P=f(y-i,r,0==i),Q(y/r)>w-g&&o("overflow"),g+=Q(y/r),y%=r,m.splice(y++,0,g)}return c(m)}function p(e){var r,t,a,s,i,n,c,h,d,p,m,v,y,g,P,E=[];for(e=l(e),v=e.length,r=R,t=0,i=O,n=0;n=r&&mQ((w-t)/y)&&o("overflow"),t+=(c-r)*y,r=c,n=0;nw&&o("overflow"),m==r){for(h=t,d=j;p=d<=i?S:d>=i+$?$:d-i,!(h= 0x80 (not a basic code point)","invalid-input":"Invalid input"},L=j-S,Q=Math.floor,C=String.fromCharCode;if(E={version:"1.4.1",ucs2:{decode:l,encode:c},decode:d,encode:p,toASCII:v,toUnicode:m},"function"==typeof e&&"object"==typeof e.amd&&e.amd)e("punycode",function(){return E});else if(y&&g)if(t.exports==y)g.exports=E;else for(b in E)E.hasOwnProperty(b)&&(y[b]=E[b]);else s.punycode=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],47:[function(e,r,t){"use strict";function a(e,r){return Object.prototype.hasOwnProperty.call(e,r)}r.exports=function(e,r,t,o){r=r||"&",t=t||"=";var i={};if("string"!=typeof e||0===e.length)return i;e=e.split(r);var n=1e3;o&&"number"==typeof o.maxKeys&&(n=o.maxKeys);var l=e.length;n>0&&l>n&&(l=n);for(var c=0;c=0?(h=p.substr(0,m),u=p.substr(m+1)):(h=p,u=""),f=decodeURIComponent(h),d=decodeURIComponent(u),a(i,f)?s(i[f])?i[f].push(d):i[f]=[i[f],d]:i[f]=d}return i};var s=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],48:[function(e,r,t){"use strict";function a(e,r){if(e.map)return e.map(r);for(var t=[],a=0;a",'"',"`"," ","\r","\n","\t"],p=["{","}","|","\\","^","`"].concat(d),m=["'"].concat(p),v=["%","/","?",";","#"].concat(m),y=["/","?","#"],g={javascript:!0,"javascript:":!0},P={javascript:!0,"javascript:":!0},E={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},b=e("querystring");a.prototype.parse=function(e,r,t){if(!c.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),s=-1!==a&&a127?A+="x":A+=I[k];if(!A.match(/^[+a-z0-9A-Z_-]{0,63}$/)){var D=O.slice(0,j),L=O.slice(j+1),Q=I.match(/^([+a-z0-9A-Z_-]{0,63})(.*)$/);Q&&(D.push(Q[1]),L.unshift(Q[2])),L.length&&(i="/"+L.join(".")+i),this.hostname=D.join(".");break}}}this.hostname=this.hostname.length>255?"":this.hostname.toLowerCase(),_||(this.hostname=l.toASCII(this.hostname));var C=this.port?":"+this.port:"";this.host=(this.hostname||"")+C,this.href+=this.host,_&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==i[0]&&(i="/"+i))}if(!g[d])for(var j=0,R=m.length;j0)&&t.host.split("@");j&&(t.auth=j.shift(),t.host=t.hostname=j.shift())}return t.search=e.search,t.query=e.query,c.isNull(t.pathname)&&c.isNull(t.search)||(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.href=t.format(),t}if(!b.length)return t.pathname=null,t.path=t.search?"/"+t.search:null,t.href=t.format(),t;for(var S=b.slice(-1)[0],$=(t.host||e.host||b.length>1)&&("."===S||".."===S)||""===S,x=0,_=b.length;_>=0;_--)S=b[_],"."===S?b.splice(_,1):".."===S?(b.splice(_,1),x++):x&&(b.splice(_,1),x--);if(!y&&!g)for(;x--;x)b.unshift("..");!y||""===b[0]||b[0]&&"/"===b[0].charAt(0)||b.unshift(""),$&&"/"!==b.join("/").substr(-1)&&b.push("");var O=""===b[0]||b[0]&&"/"===b[0].charAt(0);if(w){t.hostname=t.host=O?"":b.length?b.shift():"";var j=!!(t.host&&t.host.indexOf("@")>0)&&t.host.split("@");j&&(t.auth=j.shift(),t.host=t.hostname=j.shift())}return y=y||t.host&&b.length,y&&!O&&b.unshift(""),b.length?t.pathname=b.join("/"):(t.pathname=null,t.path=null),c.isNull(t.pathname)&&c.isNull(t.search)||(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.auth=e.auth||t.auth,t.slashes=t.slashes||e.slashes,t.href=t.format(),t},a.prototype.parseHost=function(){var e=this.host,r=u.exec(e);r&&(r=r[0],":"!==r&&(this.port=r.substr(1)),e=e.substr(0,e.length-r.length)),e&&(this.hostname=e)}},{"./util":51,punycode:46,querystring:49}],51:[function(e,r,t){"use strict";r.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],ajv:[function(e,r,t){"use strict";function a(e){return g.test(e)}function s(r){function t(e,r){var t;if("string"==typeof e){if(!(t=S(e)))throw new Error('no schema with key or ref "'+e+'"')}else{var a=R(e);t=a.validate||I(a)}var s=t(r);return!0===t.$async?"*"==D._opts.async?m(s):s:(D.errors=t.errors,s)}function v(e,r){var t=R(e,void 0,r);return t.validate||I(t)}function E(e,r,t,a){if(Array.isArray(e))for(var s=0;s=t}function i(e,t,n){var r=t.input.slice(t.start);return n&&(r=r.replace(p,"$1 $3")),e.test(r)}function s(e,t,n,r){var i=new e.constructor(e.options,e.input,t);if(n)for(var s in n)i[s]=n[s];var o=e,a=i;return["inFunction","inAsyncFunction","inAsync","inGenerator","inModule"].forEach(function(e){e in o&&(a[e]=o[e])}),r&&(i.options.preserveParens=!0),i.nextToken(),i}function o(e,t){var n=function(){};e.extend("initialContext",function(r){return function(){return this.options.ecmaVersion<7&&(n=function(t){e.raise(t.start,"async/await keywords only available when ecmaVersion>=7")}),this.reservedWords=new RegExp(this.reservedWords.toString().replace(/await|async/g,"").replace("|/","/").replace("/|","/").replace("||","|")),this.reservedWordsStrict=new RegExp(this.reservedWordsStrict.toString().replace(/await|async/g,"").replace("|/","/").replace("/|","/").replace("||","|")),this.reservedWordsStrictBind=new RegExp(this.reservedWordsStrictBind.toString().replace(/await|async/g,"").replace("|/","/").replace("/|","/").replace("||","|")),this.inAsyncFunction=t.inAsyncFunction,t.awaitAnywhere&&t.inAsyncFunction&&e.raise(node.start,"The options awaitAnywhere and inAsyncFunction are mutually exclusive"),r.apply(this,arguments)}}),e.extend("shouldParseExportStatement",function(e){return function(){return!("name"!==this.type.label||"async"!==this.value||!i(c,this))||e.apply(this,arguments)}}),e.extend("parseStatement",function(e){return function(n,r){var s=this.start,o=this.startLoc;if("name"===this.type.label)if(i(c,this,!0)){var a=this.inAsyncFunction;try{this.inAsyncFunction=!0,this.next();var l=this.parseStatement(n,r);return l.async=!0,l.start=s,l.loc&&(l.loc.start=o),l.range&&(l.range[0]=s),l}finally{this.inAsyncFunction=a}}else if("object"==typeof t&&t.asyncExits&&i(u,this)){this.next();var l=this.parseStatement(n,r);return l.async=!0,l.start=s,l.loc&&(l.loc.start=o),l.range&&(l.range[0]=s),l}return e.apply(this,arguments)}}),e.extend("parseIdent",function(e){return function(t){var n=e.apply(this,arguments);return this.inAsyncFunction&&"await"===n.name&&0===arguments.length&&this.raise(n.start,"'await' is reserved within async functions"),n}}),e.extend("parseExprAtom",function(e){return function(i){var o,u=this.start,c=this.startLoc,p=e.apply(this,arguments);if("Identifier"===p.type)if("async"!==p.name||r(this,p.end)){if("await"===p.name){var h=this.startNodeAt(p.start,p.loc&&p.loc.start);if(this.inAsyncFunction)return o=this.parseExprSubscripts(),h.operator="await",h.argument=o,h=this.finishNodeAt(h,"AwaitExpression",o.end,o.loc&&o.loc.end),n(h),h;if(this.input.slice(p.end).match(l))return t.awaitAnywhere||"module"!==this.options.sourceType?p:this.raise(p.start,"'await' is reserved within modules");if("object"==typeof t&&t.awaitAnywhere&&(u=this.start,o=s(this,u-4).parseExprSubscripts(),o.end<=u))return o=s(this,u).parseExprSubscripts(),h.operator="await",h.argument=o,h=this.finishNodeAt(h,"AwaitExpression",o.end,o.loc&&o.loc.end),this.pos=o.end,this.end=o.end,this.endLoc=o.endLoc,this.next(),n(h),h;if(!t.awaitAnywhere&&"module"===this.options.sourceType)return this.raise(p.start,"'await' is reserved within modules")}}else{var f=this.inAsyncFunction;try{this.inAsyncFunction=!0;var d=this,y=!1,m={parseFunctionBody:function(e,t){try{var n=y;return y=!0,d.parseFunctionBody.apply(this,arguments)}finally{y=n}},raise:function(){try{return d.raise.apply(this,arguments)}catch(e){throw y?e:a}}};if(o=s(this,this.start,m,!0).parseExpression(),"SequenceExpression"===o.type&&(o=o.expressions[0]),"CallExpression"===o.type&&(o=o.callee),"FunctionExpression"===o.type||"FunctionDeclaration"===o.type||"ArrowFunctionExpression"===o.type)return o=s(this,this.start,m).parseExpression(),"SequenceExpression"===o.type&&(o=o.expressions[0]),"CallExpression"===o.type&&(o=o.callee),o.async=!0,o.start=u,o.loc&&(o.loc.start=c),o.range&&(o.range[0]=u),this.pos=o.end,this.end=o.end,this.endLoc=o.endLoc,this.next(),n(o),o}catch(e){if(e!==a)throw e}finally{this.inAsyncFunction=f}}return p}}),e.extend("finishNodeAt",function(e){return function(t,n,r,i){return t.__asyncValue&&(delete t.__asyncValue,t.value.async=!0),e.apply(this,arguments)}}),e.extend("finishNode",function(e){return function(t,n){return t.__asyncValue&&(delete t.__asyncValue,t.value.async=!0),e.apply(this,arguments)}});e.extend("parsePropertyName",function(e){return function(t){var i=(t.key&&t.key.name,e.apply(this,arguments));return"Identifier"!==i.type||"async"!==i.name||r(this,i.end)||this.input.slice(i.end).match(l)||(h.test(this.input.slice(i.end))?(i=e.apply(this,arguments),t.__asyncValue=!0):(n(t),"set"===t.kind&&this.raise(i.start,"'set (value)' cannot be be async"),i=e.apply(this,arguments),"Identifier"===i.type&&"set"===i.name&&this.raise(i.start,"'set (value)' cannot be be async"),t.__asyncValue=!0)),i}}),e.extend("parseClassMethod",function(e){return function(t,n,r){var i;n.__asyncValue&&("constructor"===n.kind&&this.raise(n.start,"class constructor() cannot be be async"),i=this.inAsyncFunction,this.inAsyncFunction=!0);var s=e.apply(this,arguments);return this.inAsyncFunction=i,s}}),e.extend("parseMethod",function(e){return function(t){var n;this.__currentProperty&&this.__currentProperty.__asyncValue&&(n=this.inAsyncFunction,this.inAsyncFunction=!0);var r=e.apply(this,arguments);return this.inAsyncFunction=n,r}}),e.extend("parsePropertyValue",function(e){return function(t,n,r,i,s,o){var a=this.__currentProperty;this.__currentProperty=t;var u;t.__asyncValue&&(u=this.inAsyncFunction,this.inAsyncFunction=!0);var c=e.apply(this,arguments);return this.inAsyncFunction=u,this.__currentProperty=a,c}})}var a={},u=/^async[\t ]+(return|throw)/,c=/^async[\t ]+function/,l=/^\s*[():;]/,p=/([^\n])\/\*(\*(?!\/)|[^\n*])*\*\/([^\n])/g,h=/\s*(get|set)\s*\(/;t.exports=o},{}],3:[function(e,t,n){function r(e,t){return e.lineStart>=t}function i(e,t,n){var r=t.input.slice(t.start);return n&&(r=r.replace(c,"$1 $3")),e.test(r)}function s(e,t,n){var r=new e.constructor(e.options,e.input,t);if(n)for(var i in n)r[i]=n[i];var s=e,o=r;return["inFunction","inAsync","inGenerator","inModule"].forEach(function(e){e in s&&(o[e]=s[e])}),r.nextToken(),r}function o(e,t){t&&"object"==typeof t||(t={}),e.extend("parse",function(n){return function(){return this.inAsync=t.inAsyncFunction,t.awaitAnywhere&&t.inAsyncFunction&&e.raise(node.start,"The options awaitAnywhere and inAsyncFunction are mutually exclusive"),n.apply(this,arguments)}}),e.extend("parseStatement",function(e){return function(n,r){var s=this.start,o=this.startLoc;if("name"===this.type.label&&t.asyncExits&&i(a,this)){this.next();var u=this.parseStatement(n,r);return u.async=!0,u.start=s,u.loc&&(u.loc.start=o),u.range&&(u.range[0]=s),u}return e.apply(this,arguments)}}),e.extend("parseIdent",function(e){return function(n){return"module"===this.options.sourceType&&this.options.ecmaVersion>=8&&t.awaitAnywhere?e.call(this,!0):e.apply(this,arguments)}}),e.extend("parseExprAtom",function(e){var n={};return function(r){var i,o=this.start,a=(this.startLoc,e.apply(this,arguments));if("Identifier"===a.type&&"await"===a.name&&!this.inAsync&&t.awaitAnywhere){var u=this.startNodeAt(a.start,a.loc&&a.loc.start);o=this.start;var c={raise:function(){try{return pp.raise.apply(this,arguments)}catch(e){throw n}}};try{if(i=s(this,o-4,c).parseExprSubscripts(),i.end<=o)return i=s(this,o,c).parseExprSubscripts(),u.argument=i,u=this.finishNodeAt(u,"AwaitExpression",i.end,i.loc&&i.loc.end),this.pos=i.end,this.end=i.end,this.endLoc=i.endLoc,this.next(),u}catch(e){if(e===n)return a;throw e}}return a}});var n={undefined:!0,get:!0,set:!0,static:!0,async:!0,constructor:!0};e.extend("parsePropertyName",function(e){return function(t){var i=t.key&&t.key.name,s=e.apply(this,arguments);"get"===this.value&&(t.__maybeStaticAsyncGetter=!0);return n[this.value]?s:("Identifier"!==s.type||"async"!==s.name&&"async"!==i||r(this,s.end)||this.input.slice(s.end).match(u)?delete t.__maybeStaticAsyncGetter:"set"===t.kind||"set"===s.name?this.raise(s.start,"'set (value)' cannot be be async"):(this.__isAsyncProp=!0,s=e.apply(this,arguments),"Identifier"===s.type&&"set"===s.name&&this.raise(s.start,"'set (value)' cannot be be async")),s)}}),e.extend("parseClassMethod",function(e){return function(t,n,r){var i=e.apply(this,arguments);return n.__maybeStaticAsyncGetter&&(delete n.__maybeStaticAsyncGetter,"get"!==n.key.name&&(n.kind="get")),i}}),e.extend("parseFunctionBody",function(e){return function(t,n){var r=this.inAsync;this.__isAsyncProp&&(t.async=!0,this.inAsync=!0,delete this.__isAsyncProp);var i=e.apply(this,arguments);return this.inAsync=r,i}})}var a=/^async[\t ]+(return|throw)/,u=/^\s*[):;]/,c=/([^\n])\/\*(\*(?!\/)|[^\n*])*\*\/([^\n])/g;t.exports=o},{}],4:[function(e,t,n){"use strict";function r(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function i(e){return 3*e.length/4-r(e)}function s(e){var t,n,i,s,o,a,u=e.length;o=r(e),a=new p(3*u/4-o),i=o>0?u-4:u;var c=0;for(t=0,n=0;t>16&255,a[c++]=s>>8&255,a[c++]=255&s;return 2===o?(s=l[e.charCodeAt(t)]<<2|l[e.charCodeAt(t+1)]>>4,a[c++]=255&s):1===o&&(s=l[e.charCodeAt(t)]<<10|l[e.charCodeAt(t+1)]<<4|l[e.charCodeAt(t+2)]>>2,a[c++]=s>>8&255,a[c++]=255&s),a}function o(e){return c[e>>18&63]+c[e>>12&63]+c[e>>6&63]+c[63&e]}function a(e,t,n){for(var r,i=[],s=t;su?u:o+16383));return 1===r?(t=e[n-1],i+=c[t>>2],i+=c[t<<4&63],i+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],i+=c[t>>10],i+=c[t>>4&63],i+=c[t<<2&63],i+="="),s.push(i),s.join("")}n.byteLength=i,n.toByteArray=s,n.fromByteArray=u;for(var c=[],l=[],p="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,d=h.length;fH)throw new RangeError("Invalid typed array length");var t=new Uint8Array(e);return t.__proto__=i.prototype,t}function i(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return u(e)}return s(e,t,n)}function s(e,t,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return e instanceof ArrayBuffer?p(e,t,n):"string"==typeof e?c(e,t):h(e)}function o(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function a(e,t,n){return o(e),e<=0?r(e):void 0!==t?"string"==typeof n?r(e).fill(t,n):r(e).fill(t):r(e)}function u(e){return o(e),r(e<0?0:0|f(e))}function c(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!i.isEncoding(t))throw new TypeError('"encoding" must be a valid string encoding');var n=0|y(e,t),s=r(n),o=s.write(e,t);return o!==n&&(s=s.slice(0,o)),s}function l(e){for(var t=e.length<0?0:0|f(e.length),n=r(t),i=0;i=H)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+H.toString(16)+" bytes");return 0|e}function d(e){return+e!=e&&(e=0),i.alloc(+e)}function y(e,t){if(i.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||e instanceof ArrayBuffer)return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return z(e).length;default:if(r)return V(e).length;t=(""+t).toLowerCase(),r=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,t>>>=0,n<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return C(this,t,n);case"ascii":return P(this,t,n);case"latin1":case"binary":return N(this,t,n);case"base64":return _(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return F(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,s){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=s?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(s)return-1;n=e.length-1}else if(n<0){if(!s)return-1;n=0}if("string"==typeof t&&(t=i.from(t,r)),i.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,s);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,s);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,i){function s(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}var o=1,a=e.length,u=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,a/=2,u/=2,n/=2}var c;if(i){var l=-1;for(c=n;ca&&(n=a-u),c=n;c>=0;c--){for(var p=!0,h=0;hi&&(r=i):r=i;var s=t.length;if(s%2!=0)throw new TypeError("Invalid hex string");r>s/2&&(r=s/2);for(var o=0;o239?4:s>223?3:s>191?2:1;if(i+a<=n){var u,c,l,p;switch(a){case 1:s<128&&(o=s);break;case 2:u=e[i+1],128==(192&u)&&(p=(31&s)<<6|63&u)>127&&(o=p);break;case 3:u=e[i+1],c=e[i+2],128==(192&u)&&128==(192&c)&&(p=(15&s)<<12|(63&u)<<6|63&c)>2047&&(p<55296||p>57343)&&(o=p);break;case 4:u=e[i+1],c=e[i+2],l=e[i+3],128==(192&u)&&128==(192&c)&&128==(192&l)&&(p=(15&s)<<18|(63&u)<<12|(63&c)<<6|63&l)>65535&&p<1114112&&(o=p)}}null===o?(o=65533,a=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|1023&o),r.push(o),i+=a}return L(r)}function L(e){var t=e.length;if(t<=Z)return String.fromCharCode.apply(String,e);for(var n="",r=0;rr)&&(n=r);for(var i="",s=t;sn)throw new RangeError("Trying to access beyond buffer length")}function O(e,t,n,r,s,o){if(!i.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError("Index out of range")}function B(e,t,n,r,i,s){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function R(e,t,n,r,i){return t=+t,n>>>=0,i||B(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),Y.write(e,t,n,r,23,4),n+4}function I(e,t,n,r,i){return t=+t,n>>>=0,i||B(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),Y.write(e,t,n,r,52,8),n+8}function j(e){if(e=M(e).replace(Q,""),e.length<2)return"";for(;e.length%4!=0;)e+="=";return e}function M(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function D(e){return e<16?"0"+e.toString(16):e.toString(16)}function V(e,t){t=t||1/0;for(var n,r=e.length,i=null,s=[],o=0;o55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&s.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&s.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;s.push(n)}else if(n<2048){if((t-=2)<0)break;s.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;s.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return s}function q(e){for(var t=[],n=0;n>8,i=n%256,s.push(i),s.push(r);return s}function z(e){return J.toByteArray(j(e))}function W(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function G(e){return e!==e}var J=e("base64-js"),Y=e("ieee754");n.Buffer=i,n.SlowBuffer=d,n.INSPECT_MAX_BYTES=50;var H=2147483647;n.kMaxLength=H,i.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}(),i.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.poolSize=8192,i.from=function(e,t,n){return s(e,t,n)},i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,i.alloc=function(e,t,n){return a(e,t,n)},i.allocUnsafe=function(e){return u(e)},i.allocUnsafeSlow=function(e){return u(e)},i.isBuffer=function(e){return null!=e&&!0===e._isBuffer},i.compare=function(e,t){if(!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,s=0,o=Math.min(n,r);s0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},i.prototype.compare=function(e,t,n,r,s){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===s&&(s=this.length),t<0||n>e.length||r<0||s>this.length)throw new RangeError("out of range index");if(r>=s&&t>=n)return 0;if(r>=s)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,s>>>=0,this===e)return 0;for(var o=s-r,a=n-t,u=Math.min(o,a),c=this.slice(r,s),l=e.slice(t,n),p=0;p>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return x(this,e,t,n);case"utf8":case"utf-8":return w(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return S(this,e,t,n);case"base64":return k(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,t,n);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Z=4096;i.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||$(e,t,this.length);for(var r=this[e],i=1,s=0;++s>>=0,t>>>=0,n||$(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},i.prototype.readUInt8=function(e,t){return e>>>=0,t||$(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return e>>>=0,t||$(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return e>>>=0,t||$(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return e>>>=0,t||$(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return e>>>=0,t||$(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||$(e,t,this.length);for(var r=this[e],i=1,s=0;++s=i&&(r-=Math.pow(2,8*t)),r},i.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||$(e,t,this.length);for(var r=t,i=1,s=this[e+--r];r>0&&(i*=256);)s+=this[e+--r]*i;return i*=128,s>=i&&(s-=Math.pow(2,8*t)),s},i.prototype.readInt8=function(e,t){return e>>>=0,t||$(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){e>>>=0,t||$(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(e,t){e>>>=0,t||$(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(e,t){return e>>>=0,t||$(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return e>>>=0,t||$(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return e>>>=0,t||$(e,4,this.length),Y.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return e>>>=0,t||$(e,4,this.length),Y.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return e>>>=0,t||$(e,8,this.length),Y.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return e>>>=0,t||$(e,8,this.length),Y.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){O(this,e,t,n,Math.pow(2,8*n)-1,0)}var i=1,s=0;for(this[t]=255&e;++s>>=0,n>>>=0,!r){O(this,e,t,n,Math.pow(2,8*n)-1,0)}var i=n-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+n},i.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,1,255,0),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},i.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);O(this,e,t,n,i-1,-i)}var s=0,o=1,a=0;for(this[t]=255&e;++s>0)-a&255;return t+n},i.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);O(this,e,t,n,i-1,-i)}var s=n-1,o=1,a=0;for(this[t+s]=255&e;--s>=0&&(o*=256);)e<0&&0===a&&0!==this[t+s+1]&&(a=1),this[t+s]=(e/o>>0)-a&255;return t+n},i.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},i.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||O(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeFloatLE=function(e,t,n){return R(this,e,t,!0,n)},i.prototype.writeFloatBE=function(e,t,n){return R(this,e,t,!1,n)},i.prototype.writeDoubleLE=function(e,t,n){return I(this,e,t,!0,n)},i.prototype.writeDoubleBE=function(e,t,n){return I(this,e,t,!1,n)},i.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(s<1e3)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var o;if("number"==typeof e)for(o=t;o>1,l=-7,p=n?i-1:0,h=n?-1:1,f=e[t+p];for(p+=h,s=f&(1<<-l)-1,f>>=-l,l+=a;l>0;s=256*s+e[t+p],p+=h,l-=8);for(o=s&(1<<-l)-1,s>>=-l,l+=r;l>0;o=256*o+e[t+p],p+=h,l-=8);if(0===s)s=1-c;else{if(s===u)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,r),s-=c}return(f?-1:1)*o*Math.pow(2,s-r)},n.write=function(e,t,n,r,i,s){var o,a,u,c=8*s-i-1,l=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:s-1,d=r?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=l):(o=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-o))<1&&(o--,u*=2),t+=o+p>=1?h/u:h*Math.pow(2,1-p),t*u>=2&&(o++,u/=2),o+p>=l?(a=0,o=l):o+p>=1?(a=(t*u-1)*Math.pow(2,i),o+=p):(a=t*Math.pow(2,p-1)*Math.pow(2,i),o=0));i>=8;e[n+f]=255&a,f+=d,a/=256,i-=8);for(o=o<0;e[n+f]=255&o,f+=d,o/=256,c-=8);e[n+f-d]|=128*y}},{}],8:[function(e,t,n){"use strict";function r(e,t){if(Function.prototype.$asyncspawn||Object.defineProperty(Function.prototype,"$asyncspawn",{value:r,enumerable:!1,configurable:!0,writable:!0}),this instanceof Function){var n=this;return new e(function(e,r){function i(t,n){var o;try{if(o=t.call(s,n),o.done){if(o.value!==e){if(o.value&&o.value===o.value.then)return o.value(e,r);e&&e(o.value),e=null}return}o.value.then?o.value.then(function(e){i(s.next,e)},function(e){i(s.throw,e)}):i(s.next,o.value)}catch(e){return r&&r(e),void(r=null)}}var s=n.call(t,e,r);i(s.next)})}}var i=function(e,t){for(var n=t.toString(),r="return "+n,i=n.match(/.*\(([^)]*)\)/)[1],s=/['"]!!!([^'"]*)['"]/g,o=[];;){var a=s.exec(r);if(!a)break;o.push(a)}return o.reverse().forEach(function(t){r=r.slice(0,t.index)+e[t[1]]+r.substr(t.index+t[0].length)}),r=r.replace(/\/\*[^*]*\*\//g," ").replace(/\s+/g," "),new Function(i,r)()}({zousan:e("./zousan").toString(),thenable:e("./thenableFactory").toString()},function e(t,n){function r(){return i.apply(t,arguments)}Function.prototype.$asyncbind||Object.defineProperty(Function.prototype,"$asyncbind",{value:e,enumerable:!1,configurable:!0,writable:!0}),e.trampoline||(e.trampoline=function(e,t,n,r,i){return function s(o){for(;o;){if(o.then)return o=o.then(s,r),i?void 0:o;try{ +if(o.pop){if(o.length)return o.pop()?t.call(e):o;o=n}else o=o.call(e)}catch(e){return r(e)}}}}),e.LazyThenable||(e.LazyThenable="!!!thenable"(),e.EagerThenable=e.Thenable=(e.EagerThenableFactory="!!!zousan")());var i=this;switch(n){case!0:return new e.Thenable(r);case 0:return new e.LazyThenable(r);case void 0:return r.then=r,r;default:return function(){try{return i.apply(t,arguments)}catch(e){return n(e)}}}});i(),r(),t.exports={$asyncbind:i,$asyncspawn:r}},{"./thenableFactory":9,"./zousan":10}],9:[function(e,t,n){t.exports=function(){function e(e){return e&&e instanceof Object&&"function"==typeof e.then}function t(n,r,i){try{var s=i?i(r):r;if(n===s)return n.reject(new TypeError("Promise resolution loop"));e(s)?s.then(function(e){t(n,e)},function(e){n.reject(e)}):n.resolve(s)}catch(e){n.reject(e)}}function n(){}function r(e){}function i(e,t){this.resolve=e,this.reject=t}function s(r,i){var s=new n;try{this._resolver(function(n){return e(n)?n.then(r,i):t(s,n,r)},function(e){t(s,e,i)})}catch(e){t(s,e,i)}return s}function o(e){this._resolver=e,this.then=s}return n.prototype={resolve:r,reject:r,then:i},o.resolve=function(e){return o.isThenable(e)?e:{then:function(t){return t(e)}}},o.isThenable=e,o}},{}],10:[function(e,t,n){(function(e){"use strict";t.exports=function(t){function n(e){if(e){var t=this;e(function(e){t.resolve(e)},function(e){t.reject(e)})}}function r(e,t){if("function"==typeof e.y)try{var n=e.y.call(void 0,t);e.p.resolve(n)}catch(t){e.p.reject(t)}else e.p.resolve(t)}function i(e,t){if("function"==typeof e.n)try{var n=e.n.call(void 0,t);e.p.resolve(n)}catch(t){e.p.reject(t)}else e.p.reject(t)}t=t||"object"==typeof e&&e.nextTick||"function"==typeof setImmediate&&setImmediate||function(e){setTimeout(e,0)};var s=function(){function e(){for(;n.length-r;){try{n[r]()}catch(e){}n[r++]=void 0,r===i&&(n.splice(0,i),r=0)}}var n=[],r=0,i=1024;return function(i){n.push(i),n.length-r==1&&t(e)}}();return n.prototype={resolve:function(e){if(void 0===this.state){if(e===this)return this.reject(new TypeError("Attempt to resolve promise with self"));var t=this;if(e&&("function"==typeof e||"object"==typeof e))try{var n=0,i=e.then;if("function"==typeof i)return void i.call(e,function(e){n++||t.resolve(e)},function(e){n++||t.reject(e)})}catch(e){return void(n||this.reject(e))}this.state=r,this.v=e,t.c&&s(function(){for(var n=0,i=t.c.length;n]*>)(.*)/i,/(.*)(<\/script>)(.*)/i],o=0,a=!0;t=t.split("\n");for(var u=0;u0){if(!a)return t(e);delete e.async}return void(!a&&i?t():(e.type="ReturnStatement",e.$mapped=!0,e.argument={type:"CallExpression",callee:A(s,[n]).$error,arguments:[e.argument]}))}return"TryStatement"===e.type?(i++,t(e),void i--):o(e).isFunction?(r++,t(e),void r--):void t(e)}if(r>0){if(!o(e).isAsync)return t(e);delete e.async}return e.$mapped=!0,void(o(e.argument).isUnaryExpression&&"void"===e.argument.operator?e.argument=e.argument.argument:e.argument={type:"CallExpression",callee:A(s,[n]).$return,arguments:e.argument?[e.argument]:[]})},t)}function $(e,t){return Array.isArray(e)?e.map(function(e){return $(e,t)}):(y.treeWalker(e,function(e,t,n){if(t(),"ConditionalExpression"===e.type&&(u(e.alternate)||u(e.consequent))){h(E("condOp"));i(e,L(y.part("if ($0) return $1 ; return $2",[e.test,e.consequent,e.alternate]).body))}},t),e)}function O(e,t){return Array.isArray(e)?e.map(function(e){return O(e,t)}):(y.treeWalker(e,function(e,t,n){if(t(),"LogicalExpression"===e.type&&u(e.right)){var r,s=h(E("logical"+("&&"===e.operator?"And":"Or")));if("||"===e.operator)r="var $0; if (!($0 = $1)) {$0 = $2} return $0";else{if("&&"!==e.operator)throw new Error(v(e)+"Illegal logical operator: "+e.operator);r="var $0; if ($0 = $1) {$0 = $2} return $0"}i(e,L(y.part(r,[s,e.left,e.right]).body))}},t),e)}function B(e,t,n){if("SwitchCase"!==e.type&&o(e).isBlockStatement)for(var r=0;r { $$setMapped: while (q) { if (q.then) "+(1===s?" return void q.then($idTrampoline, $exit); ":" return q.then($idTrampoline, $exit); ")+" try { if (q.pop) if (q.length) return q.pop() ? $idContinuation.call(this) : q; else q = $idStep; else q = q.call(this) } catch (_exception) { return $exit(_exception); } } }))($idIter)":"($idTrampoline = (function (q) { $$setMapped: while (q) { if (q.then) "+(1===s?" return void q.then($idTrampoline, $exit); ":" return q.then($idTrampoline, $exit); ")+" try { if (q.pop) if (q.length) return q.pop() ? $idContinuation.call(this) : q; else q = $idStep; else q = q.call(this) } catch (_exception) { return $exit(_exception); } } }).bind(this))($idIter)",{setMapped:function(e){return e.$mapped=!0,e},idTrampoline:E,exit:$,idIter:S,idContinuation:_,idStep:k}).expr:y.part("(Function.$0.trampoline(this,$1,$2,$3,$5)($4))",[me.asyncbind,_,k,$,S,b(1===s)]).expr,l.push({type:"ReturnStatement",argument:F}),l.push({$label:e.$label,type:"FunctionDeclaration",id:S,params:[],body:{type:"BlockStatement",body:m}}),d&&l.push({type:"FunctionDeclaration",id:k,params:[],body:{type:"BlockStatement",body:[d,P]}}),!p||"VariableDeclaration"!==p.type||"let"!==p.kind&&"const"!==p.kind?(l.push(x),t[0].replace(l.map(r))):("const"===p.kind&&(p.kind="let"),t[0].replace([{type:"BlockStatement",body:l.map(r)},r(x)]))}}function Y(e,t){return y.treeWalker(e,function(e,t,s){function a(e){return{type:"ReturnStatement",argument:{type:"UnaryExpression",operator:"void",prefix:!0,argument:P(e||S)}}}function c(e,t){if("BreakStatement"===e.type)i(e,r(A(e.label&&n.generatedSymbolPrefix+"Loop_"+e.label.name+"_exit")));else if("ContinueStatement"===e.type)i(e,r(a(e.label&&n.generatedSymbolPrefix+"Loop_"+e.label.name+"_next")));else if(o(e).isFunction)return!0;t()}"ForInStatement"===e.type&&u(e)?W(e,s):"ForOfStatement"===e.type&&u(e)&&G(e,s),t();var p;if(o(e).isLoop&&u(e)){var f=e.init,d=e.test||b(!0),g=e.update,v=e.body,x=l(v);f&&(o(f).isStatement||(f={type:"ExpressionStatement",expression:f})),g=g&&{type:"ExpressionStatement",expression:g},v=o(v).isBlockStatement?r(v).body:[r(v)];var w=e.$label&&e.$label.name;w="Loop_"+(w||ye++);var E=n.generatedSymbolPrefix+(w+"_exit"),S=n.generatedSymbolPrefix+(w+"_next"),k=h(n.generatedSymbolPrefix+w),A=function(e){return{type:"ReturnStatement",argument:{type:"UnaryExpression",operator:"void",prefix:!0,argument:{type:"CallExpression",callee:h(e||E),arguments:[]}}}},_=C(S,[{type:"ReturnStatement",argument:{type:"CallExpression",callee:x?m(k):k,arguments:[h(E),me.error]}}]);g&&_.body.body.unshift(g);for(var L=0;L0&&o(e).isAsync)return delete e.async,e.argument={type:"CallExpression",callee:"ThrowStatement"===e.type?me.error:me.return,arguments:e.argument?[e.argument]:[]},void(e.type="ReturnStatement");n(e)})}function K(e,t){if(n.noRuntime)throw new Error("Nodent: 'noRuntime' option only compatible with -promise and -engine modes");return y.part("{ return (function*($return,$error){ $:body }).$asyncspawn(Promise,this) }",{return:me.return,error:me.error,asyncspawn:me.asyncspawn,body:X(e).concat(t?[{type:"ReturnStatement",argument:me.return}]:[])}).body[0]}function ee(e){e.$asyncgetwarninig||(e.$asyncgetwarninig=!0,d(v(e)+"'async get "+printNode(e)+"(){...}' is non-standard. See https://github.com/MatAtBread/nodent#differences-from-the-es7-specification"))}function te(e,t){function s(e,t){y.treeWalker(e,function(n,r,i){n!==e&&o(n).isFunction||(o(n).isAwait?t?(n.$hidden=!0,r()):(delete n.operator,n.delegate=!1,n.type="YieldExpression",r()):r())})}function a(e){var t=n.promises;n.promises=!0,_(e,!0),n.promises=t}function u(e){return"BlockStatement"!==e.body.type&&(e.body={type:"BlockStatement",body:[{type:"ReturnStatement",argument:e.body}]}),e}function c(e,n){n.$asyncexitwarninig||(n.$asyncexitwarninig=!0,d(v(e)+"'async "+{ReturnStatement:"return",ThrowStatement:"throw"}[e.type]+"' not possible in "+(t?"engine":"generator")+" mode. Using Promises for function at "+v(n)))}y.treeWalker(e,function(e,n,r){n();var l,p,h;if(o(e).isAsync&&o(e).isFunction){var f;(f=x(r[0].parent))&&o(f).isAsync&&"get"===r[0].parent.kind&&ee(r[0].parent.key),(p=H(e))?(c(p,e.body),a(e)):t?"get"!==r[0].parent.kind&&s(e,!0):(l=e,delete l.async,h=w(l),s(l,!1),l=u(l),l.body=K(l.body.body,p),h&&D(l.body.body,[ge]),l.id&&"ExpressionStatement"===r[0].parent.type?(l.type="FunctionDeclaration",r[1].replace(l)):r[0].replace(l))}else(l=x(e))&&o(l).isAsync&&((p=H(l))?(c(p,l),a(e)):t&&"get"!==e.kind||(t?a(e):(e.async=!1,h=w(l),s(l,!1),i(l,u(l)),l.body=K(l.body.body,p)),h&&D(l.body.body,[ge])))});var l=r(n);return n.engine=!1,n.generators=!1,ce(e),oe(e),M(e,l.engine),O(e),$(e),U(e,[q,J,R,I,B]),z(e,"warn"),n.engine=l.engine,n.generators=l.generators,e}function ne(e,t,n){var r=[];return y.treeWalker(e,function(i,s,a){return i===e?s():t(i,a)?void r.push([].concat(a)):void(n||o(i).isScope||s())}),r}function re(e,t){var n=[],i={};if(e=e.filter(function(e){return"ExportNamedDeclaration"!==e[0].parent.type}),e.length){var s={};e.forEach(function(e){function t(e){e in s?i[e]=o.declarations[u]:s[e]=o.declarations[u]}for(var n=e[0],o=n.self,a=(o.kind,[]),u=0;u1?{type:"SequenceExpression",expressions:a}:a[0];"For"!==n.parent.type.slice(0,3)&&(p={type:"ExpressionStatement",expression:p}),n.replace(p)}});var o=Object.keys(s);o.length&&(o=o.map(function(e){return{type:"VariableDeclarator",id:h(e),loc:s[e].loc,start:s[e].start,end:s[e].end}}),n[0]&&"VariableDeclaration"===n[0].type?n[0].declarations=n[0].declarations.concat(o):n.unshift({type:"VariableDeclaration",kind:t,declarations:o}))}return{decls:n,duplicates:i}}function ie(e){if(!e)return[];if(Array.isArray(e))return e.reduce(function(e,t){return e.concat(ie(t.id))},[]);switch(e.type){case"Identifier":return[e.name];case"AssignmentPattern":return ie(e.left);case"ArrayPattern":return e.elements.reduce(function(e,t){return e.concat(ie(t))},[]);case"ObjectPattern":return e.properties.reduce(function(e,t){return e.concat(ie(t))},[]);case"ObjectProperty":case"Property":return ie(e.value);case"RestElement":case"RestProperty":return ie(e.argument)}}function se(e){function t(e){d(v(e)+"Possible assignment to 'const "+printNode(e)+"'")}function n(e){switch(e.type){case"Identifier":"const"===r[e.name]&&t(e);break;case"ArrayPattern":e.elements.forEach(function(e){"const"===r[e.name]&&t(e)});break;case"ObjectPattern":e.properties.forEach(function(e){"const"===r[e.key.name]&&t(e)})}}var r={};y.treeWalker(e,function(e,t,i){var s=o(e).isBlockStatement;if(s){r=Object.create(r);for(var a=0;a=0){var r=n[0];return("left"!=r.field||"ForInStatement"!==r.parent.type&&"ForOfStatement"!==r.parent.type)&&("init"!=r.field||"ForStatement"!==r.parent.type||"const"!==t.kind&&"let"!==t.kind)}}}function s(e,t){return!("FunctionDeclaration"!==e.type||!e.id)&&(o(e).isAsync||!e.$continuation)}var c={TemplateLiteral:function(e){return e.expressions},NewExpression:function(e){return e.arguments},CallExpression:function(e){return e.arguments},SequenceExpression:function(e){return e.expressions},ArrayExpression:function(e){return e.elements},ObjectExpression:function(e){return e.properties.map(function(e){return e.value})}};y.treeWalker(e,function(e,n,s){var a;if(n(),e.type in c&&!e.$hoisted){var s,l=c[e.type](e),p=[];for(a=0;a0;a--)if(e.declarations[a]&&e.declarations[a].init&&u(e.declarations[a].init)){var h={type:"VariableDeclaration",kind:e.kind,declarations:e.declarations.splice(a)},f=s[0];if(!("index"in f))throw new Error("VariableDeclaration not in a block");f.parent[f.field].splice(f.index+1,0,h)}}),se(e);var l=!1;return y.treeWalker(e,function(e,t,r){var i=l;if(l=l||pe(e),o(e).isBlockStatement){if(u(e)){var a,c,p,f,y,m=!r[0].parent||o(r[0].parent).isScope;if(m){c=ne(e,n(["const"]),!1);var g={},b={};c.forEach(function(e){e[0].self.declarations.forEach(function(e){ie(e.id).forEach(function(t){g[t]||b[t]?(delete g[t],b[t]=e):g[t]=e})})}),c.forEach(function(e){for(var t=0;t=0&&"ReturnStatement"===i[1].self.type){var s=e.$thisCallName,a=r(de[s].def.body.body);de[s].$inlined=!0,o(i[1].self).isJump||a.push({type:"ReturnStatement"}),i[1].replace(a)}});var n=Object.keys(de).map(function(e){return de[e].$inlined&&de[e].def});y.treeWalker(e,function(e,t,r){t(),n.indexOf(e)>=0&&r[0].remove()})}if(!("Program"===e.type&&"module"===e.sourceType||a(e,function(e){return o(e).isES6},!0))){var i=pe(e);!function(e){y.treeWalker(e,function(e,t,n){if("Program"===e.type||"FunctionDeclaration"===e.type||"FunctionExpression"===e.type){var r=i;if(i=i||pe(e)){t();var s="Program"===e.type?e:e.body,o=ne(s,function(e,t){if("FunctionDeclaration"===e.type)return t[0].parent!==s});o=o.map(function(e){return e[0].remove()}),[].push.apply(s.body,o)}else t();i=r}else t()})}(e)}return y.treeWalker(e,function(e,t,n){t(),Object.keys(e).filter(function(e){return"$"===e[0]}).forEach(function(t){delete e[t]})}),e}var de={},ye=1,me={};Object.keys(n).filter(function(e){return"$"===e[0]}).forEach(function(e){me[e.slice(1)]=h(n[e])});var ge=y.part("var $0 = arguments",[me.arguments]).body[0];return n.engine?(e.ast=ue(e.ast,!0),e.ast=te(e.ast,n.engine),e.ast=le(e.ast),fe(e.ast)):n.generators?(e.ast=ue(e.ast),e.ast=te(e.ast),e.ast=le(e.ast),fe(e.ast)):(e.ast=ue(e.ast),_(e.ast)),n.babelTree&&y.treeWalker(e.ast,function(e,t,n){t(),"Literal"===e.type&&i(e,b(e.value))}),e}var y=e("./parser"),m=e("./output");n.printNode=function e(t){if(!t)return"";if(Array.isArray(t))return t.map(e).join("|\n");try{return m(t)}catch(e){return e.message+": "+(t&&t.type)}};var g={start:!0,end:!0,loc:!0,range:!0},v={getScope:function(){return"FunctionDeclaration"===this.node.type||"FunctionExpression"===this.node.type||"Function"===this.node.type||"ObjectMethod"===this.node.type||"ClassMethod"===this.node.type||"ArrowFunctionExpression"===this.node.type&&"BlockStatement"===this.node.body.type?this.node.body.body:"Program"===this.node.type?this.node.body:null},isScope:function(){return"FunctionDeclaration"===this.node.type||"FunctionExpression"===this.node.type||"Function"===this.node.type||"Program"===this.node.type||"ObjectMethod"===this.node.type||"ClassMethod"===this.node.type||"ArrowFunctionExpression"===this.node.type&&"BlockStatement"===this.node.body.type},isFunction:function(){return"FunctionDeclaration"===this.node.type||"FunctionExpression"===this.node.type||"Function"===this.node.type||"ObjectMethod"===this.node.type||"ClassMethod"===this.node.type||"ArrowFunctionExpression"===this.node.type},isClass:function(){return"ClassDeclaration"===this.node.type||"ClassExpression"===this.node.type},isBlockStatement:function(){return"ClassBody"===this.node.type||"Program"===this.node.type||"BlockStatement"===this.node.type?this.node.body:"SwitchCase"===this.node.type&&this.node.consequent},isExpressionStatement:function(){return"ExpressionStatement"===this.node.type},isLiteral:function(){return"Literal"===this.node.type||"BooleanLiteral"===this.node.type||"RegExpLiteral"===this.node.type||"NumericLiteral"===this.node.type||"StringLiteral"===this.node.type||"NullLiteral"===this.node.type},isDirective:function(){return"ExpressionStatement"===this.node.type&&("StringLiteral"===this.node.expression.type||"Literal"===this.node.expression.type&&"string"==typeof this.node.expression.value)},isUnaryExpression:function(){return"UnaryExpression"===this.node.type},isAwait:function(){return"AwaitExpression"===this.node.type&&!this.node.$hidden},isAsync:function(){return this.node.async},isStatement:function(){return null!==this.node.type.match(/[a-zA-Z]+Declaration/)||null!==this.node.type.match(/[a-zA-Z]+Statement/)},isExpression:function(){return null!==this.node.type.match(/[a-zA-Z]+Expression/)},isLoop:function(){return"ForStatement"===this.node.type||"WhileStatement"===this.node.type||"DoWhileStatement"===this.node.type},isJump:function(){return"ReturnStatement"===this.node.type||"ThrowStatement"===this.node.type||"BreakStatement"===this.node.type||"ContinueStatement"===this.node.type},isES6:function(){switch(this.node.type){case"ExportNamedDeclaration":case"ExportSpecifier":case"ExportDefaultDeclaration":case"ExportAllDeclaration":case"ImportDeclaration":case"ImportSpecifier":case"ImportDefaultSpecifier":case"ImportNamespaceSpecifier":case"ArrowFunctionExpression":case"ForOfStatement":case"YieldExpression":case"Super":case"RestElement":case"RestProperty":case"SpreadElement":case"TemplateLiteral":case"ClassDeclaration":case"ClassExpression":return!0;case"VariableDeclaration":return this.node.kind&&"var"!==this.node.kind;case"FunctionDeclaration":case"FunctionExpression":return!!this.node.generator}}},b={};Object.keys(v).forEach(function(e){Object.defineProperty(b,e,{get:v[e]})}),t.exports={printNode:printNode,babelLiteralNode:p,asynchronize:function(e,t,n,r){try{return d(e,t,n,r)}catch(t){if(t instanceof SyntaxError){var i=e.origCode.substr(t.pos-t.loc.column);i=i.split("\n")[0],t.message+=" (nodent)\n"+i+"\n"+i.replace(/[\S ]/g,"-").substring(0,t.loc.column)+"^",t.stack=""}throw t}}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./output":13,"./parser":14}],13:[function(e,t,n){"use strict";function r(e){var t=y[e.type]||y[e.type+e.operator]||y[e.type+e.operator+(e.prefix?"prefix":"")];return void 0!==t?t:20}function i(e,t,n){var r=this[n||e.type];r?r.call(this,e,t):t.write(e,"/*"+e.type+"?*/ "+t.sourceAt(e.start,e.end))}function s(e,t,n,i){2===i||r(n)0){this.out(e[0],t,e[0].type);for(var r=1,i=e.length;r>":13,"BinaryExpression>>>":13,"BinaryExpression<":12,"BinaryExpression<=":12,"BinaryExpression>":12,"BinaryExpression>=":12,BinaryExpressionin:12,BinaryExpressioninstanceof:12,"BinaryExpression==":11,"BinaryExpression===":11,"BinaryExpression!=":11,"BinaryExpression!==":11,"BinaryExpression&":10,"BinaryExpression^":9,"BinaryExpression|":8,"LogicalExpression&&":7,"LogicalExpression||":6,ConditionalExpression:5,AssignmentPattern:4,AssignmentExpression:4,yield:3,YieldExpression:3,SpreadElement:2,"comma-separated-list":1.5,SequenceExpression:1},m={type:"comma-separated-list"},g={out:i,expr:s,formatParameters:o,Program:function(e,t){var n,r,i=h(t.indent,t.indentLevel),s=t.lineEnd;n=e.body;for(var o=0,a=n.length;o0){t.write(null,s);for(var a=0,u=n.length;a0){this.out(n[0],t,"VariableDeclarator");for(var i=1;i0){for(var n=0;n0)for(var r=0;r ")):(this.formatParameters(e.params,t),t.write(e,"=> ")),"ObjectExpression"===e.body.type||"SequenceExpression"===e.body.type?(t.write(null,"("),this.out(e.body,t,e.body.type),t.write(null,")")):this.out(e.body,t,e.body.type)},ThisExpression:function(e,t){t.write(e,"this")},Super:function(e,t){t.write(e,"super")},RestElement:u=function(e,t){t.write(e,"..."),this.out(e.argument,t,e.argument.type)},SpreadElement:u,YieldExpression:function(e,t){t.write(e,e.delegate?"yield*":"yield"),e.argument&&(t.write(null," "),this.expr(t,e,e.argument))},AwaitExpression:function(e,t){t.write(e,"await "),this.expr(t,e,e.argument)},TemplateLiteral:function(e,t){var n,r=e.quasis,i=e.expressions;t.write(e,"`");for(var s=0,o=i.length;s0)for(var n=e.elements,r=n.length,i=0;;){var s=n[i];if(s&&this.expr(t,m,s),i+=1,(i=r)break;t.lineLength()>t.wrapColumn&&t.write(null,t.lineEnd,h(t.indent,t.indentLevel+1))}t.write(null,"]")},ArrayPattern:l,ObjectExpression:function(e,t){var n,r=h(t.indent,t.indentLevel++),i=t.lineEnd,s=r+t.indent;if(t.write(e,"{"),e.properties.length>0){t.write(null,i);for(var o=e.properties,a=o.length,u=0;n=o[u],t.write(null,s),this.out(n,t,"Property"),++ut.wrapColumn&&t.write(null,t.lineEnd,h(t.indent,t.indentLevel+1));t.write(null,i,r,"}")}else t.write(null,"}");t.indentLevel--},Property:function(e,t){e.method||"get"===e.kind||"set"===e.kind?this.MethodDefinition(e,t):(e.shorthand||(e.computed?(t.write(null,"["),this.out(e.key,t,e.key.type),t.write(null,"]")):this.out(e.key,t,e.key.type),t.write(null,": ")),this.expr(t,m,e.value))},ObjectPattern:function(e,t){if(t.write(e,"{"),e.properties.length>0)for(var n=e.properties,r=n.length,i=0;this.out(n[i],t,"Property"),++i0)for(var i=r.length,s=0;s1&&t.write(e," "),this.expr(t,e,e.argument,!0)):(this.expr(t,e,e.argument),t.write(e,e.operator))},UpdateExpression:function(e,t){e.prefix?(t.write(e,e.operator),this.out(e.argument,t,e.argument.type)):(this.out(e.argument,t,e.argument.type),t.write(e,e.operator))},BinaryExpression:c=function(e,t){var n=e.operator;"in"===n&&t.inForInit&&t.write(null,"("),this.expr(t,e,e.left),t.write(e," ",n," "),this.expr(t,e,e.right,"ArrowFunctionExpression"===e.right.type?2:0),"in"===n&&t.inForInit&&t.write(null,")")},LogicalExpression:c,AssignmentExpression:function(e,t){"ObjectPattern"===e.left.type&&t.write(null,"("),this.BinaryExpression(e,t),"ObjectPattern"===e.left.type&&t.write(null,")")},AssignmentPattern:function(e,t){this.expr(t,e,e.left),t.write(e," = "),this.expr(t,e,e.right)},ConditionalExpression:function(e,t){this.expr(t,e,e.test,!0),t.write(e," ? "),this.expr(t,e,e.consequent),t.write(null," : "),this.expr(t,e,e.alternate)},NewExpression:function(e,t){t.write(e,"new "),this.out(e,t,"CallExpression")},CallExpression:function(e,t){this.expr(t,e,e.callee,"ObjectExpression"===e.callee.type?2:0),t.write(e,"(");var n=e.arguments;if(n.length>0)for(var r=n.length,i=0;i=0&&r({self:i,parent:e,field:a[u],index:!0}):c instanceof Object&&i===c&&r({self:i,parent:e,field:a[u]})}})}return n||(n=[{self:e}],n.replace=function(e,t){n[e].replace(t)}),t(e,s,n),e}function s(t,n){var r=[],s={ecmaVersion:8,allowHashBang:!0,allowReturnOutsideFunction:!0,allowImportExportEverywhere:!0,locations:!0,onComment:r};if((!n||!n.noNodentExtensions||parseInt(a.version)<4)&&(h||(parseInt(a.version)<4&&console.warn("Nodent: Warning - noNodentExtensions option requires acorn >=v4.x. Extensions installed."),e("acorn-es7-plugin")(a),h=!0),s.plugins=s.plugins||{},s.plugins.asyncawait={asyncExits:!0,awaitAnywhere:!0}),n)for(var o in n)"noNodentExtensions"!==o&&(s[o]=n[o]);var u=a.parse(t,s);return i(u,function(e,t,n){for(t();r.length&&e.loc&&e.loc.start.line>=r[0].loc.start.line&&e.loc.end.line>=r[0].loc.end.line;)e.$comments=e.$comments||[],e.$comments.push(r.shift())}),u}function o(e,t){function n(e,r){if(Array.isArray(r)&&!Array.isArray(e))throw new Error("Can't substitute an array for a node");return r=r||{},Object.keys(e).forEach(function(i){function s(e){return"function"==typeof e&&(e=e()),r=r.concat(e)}function o(e){return"function"==typeof e&&(e=e()),r[i]=e,r}if(!(e[i]instanceof Object))return r[i]=e[i];if(Array.isArray(e[i]))return r[i]=n(e[i],[]);var a;if(a=Array.isArray(r)?s:o,"Identifier"===e[i].type&&"$"===e[i].name[0])return a(t[e[i].name.slice(1)]);if("LabeledStatement"===e[i].type&&"$"===e[i].label.name){var u=e[i].body.expression;return a(t[u.name||u.value])}return a("LabeledStatement"===e[i].type&&"$$"===e[i].label.name.slice(0,2)?t[e[i].label.name.slice(2)](n(e[i]).body):n(e[i]))}),r}f[e]||(f[e]=s(e,{noNodentExtensions:!0,locations:!1,ranges:!1,onComment:null}));var r=n(f[e]);return{body:r.body,expr:"ExpressionStatement"===r.body[0].type?r.body[0].expression:null}}var a=e("acorn"),u=e("acorn/dist/walk"),c={AwaitExpression:function(e,t,n){n(e.argument,t,"Expression")},SwitchStatement:function(e,t,n){n(e.discriminant,t,"Expression");for(var r=0;re)return!1;if((n+=t[r+1])>=e)return!0}}function n(e,n){return e<65?36===e:e<91||(e<97?95===e:e<123||(e<=65535?e>=170&&k.test(String.fromCharCode(e)):!1!==n&&t(e,_)))}function r(e,n){return e<48?36===e:e<58||!(e<65)&&(e<91||(e<97?95===e:e<123||(e<=65535?e>=170&&A.test(String.fromCharCode(e)):!1!==n&&(t(e,_)||t(e,C)))))}function i(e,t){ +return new L(e,{beforeExpr:!0,binop:t})}function s(e,t){return void 0===t&&(t={}),t.keyword=e,T[e]=new L(e,t)}function o(e){return 10===e||13===e||8232===e||8233===e}function a(e,t){return j.call(e,t)}function u(e,t){for(var n=1,r=0;;){O.lastIndex=r;var i=O.exec(e);if(!(i&&i.index=2015&&(t.ecmaVersion-=2009),null==t.allowReserved&&(t.allowReserved=t.ecmaVersion<5),D(t.onToken)){var r=t.onToken;t.onToken=function(e){return r.push(e)}}return D(t.onComment)&&(t.onComment=l(t,t.onComment)),t}function l(e,t){return function(n,r,i,s,o,a){var u={type:n?"Block":"Line",value:r,start:i,end:s};e.locations&&(u.loc=new q(this,o,a)),e.ranges&&(u.range=[i,s]),t.push(u)}}function p(e){return new RegExp("^("+e.replace(/ /g,"|")+")$")}function h(e,t,n,r){return e.type=t,e.end=n,this.options.locations&&(e.loc.end=r),this.options.ranges&&(e.range[1]=n),e}function f(e,t,n,r){try{return new RegExp(e,t)}catch(e){if(void 0!==n)throw e instanceof SyntaxError&&r.raise(n,"Error parsing regular expression: "+e.message),e}}function d(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10),56320+(1023&e)))}function y(e,t){return new W(t,e).parse()}function m(e,t,n){var r=new W(n,e,t);return r.nextToken(),r.parseExpression()}function g(e,t){return new W(t,e)}function v(t,n,r){e.parse_dammit=t,e.LooseParser=n,e.pluginsLoose=r}var b={3:"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",5:"class enum extends super const export import",6:"enum",strict:"implements interface let package private protected public static yield",strictBind:"eval arguments"},x="break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this",w={5:x,6:x+" const class extends export import super"},E="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞮꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",S="‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_",k=new RegExp("["+E+"]"),A=new RegExp("["+E+S+"]");E=S=null;var _=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,264,8,2,36,18,0,50,29,881,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,0,32,6124,20,754,9486,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541],C=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,838,7,2,7,17,9,57,21,2,13,19882,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239],L=function(e,t){void 0===t&&(t={}),this.label=e,this.keyword=t.keyword,this.beforeExpr=!!t.beforeExpr,this.startsExpr=!!t.startsExpr,this.isLoop=!!t.isLoop,this.isAssign=!!t.isAssign,this.prefix=!!t.prefix,this.postfix=!!t.postfix,this.binop=t.binop||null,this.updateContext=null},P={beforeExpr:!0},N={startsExpr:!0},T={},F={num:new L("num",N),regexp:new L("regexp",N),string:new L("string",N),name:new L("name",N),eof:new L("eof"),bracketL:new L("[",{beforeExpr:!0,startsExpr:!0}),bracketR:new L("]"),braceL:new L("{",{beforeExpr:!0,startsExpr:!0}),braceR:new L("}"),parenL:new L("(",{beforeExpr:!0,startsExpr:!0}),parenR:new L(")"),comma:new L(",",P),semi:new L(";",P),colon:new L(":",P),dot:new L("."),question:new L("?",P),arrow:new L("=>",P),template:new L("template"),ellipsis:new L("...",P),backQuote:new L("`",N),dollarBraceL:new L("${",{beforeExpr:!0,startsExpr:!0}),eq:new L("=",{beforeExpr:!0,isAssign:!0}),assign:new L("_=",{beforeExpr:!0,isAssign:!0}),incDec:new L("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new L("prefix",{beforeExpr:!0,prefix:!0,startsExpr:!0}),logicalOR:i("||",1),logicalAND:i("&&",2),bitwiseOR:i("|",3),bitwiseXOR:i("^",4),bitwiseAND:i("&",5),equality:i("==/!=",6),relational:i("",7),bitShift:i("<>",8),plusMin:new L("+/-",{beforeExpr:!0,binop:9,prefix:!0,startsExpr:!0}),modulo:i("%",10),star:i("*",10),slash:i("/",10),starstar:new L("**",{beforeExpr:!0}),_break:s("break"),_case:s("case",P),_catch:s("catch"),_continue:s("continue"),_debugger:s("debugger"),_default:s("default",P),_do:s("do",{isLoop:!0,beforeExpr:!0}),_else:s("else",P),_finally:s("finally"),_for:s("for",{isLoop:!0}),_function:s("function",N),_if:s("if"),_return:s("return",P),_switch:s("switch"),_throw:s("throw",P),_try:s("try"),_var:s("var"),_const:s("const"),_while:s("while",{isLoop:!0}),_with:s("with"),_new:s("new",{beforeExpr:!0,startsExpr:!0}),_this:s("this",N),_super:s("super",N),_class:s("class"),_extends:s("extends",P),_export:s("export"),_import:s("import"),_null:s("null",N),_true:s("true",N),_false:s("false",N),_in:s("in",{beforeExpr:!0,binop:7}),_instanceof:s("instanceof",{beforeExpr:!0,binop:7}),_typeof:s("typeof",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_void:s("void",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_delete:s("delete",{beforeExpr:!0,prefix:!0,startsExpr:!0})},$=/\r\n?|\n|\u2028|\u2029/,O=new RegExp($.source,"g"),B=/[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/,R=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g,I=Object.prototype,j=I.hasOwnProperty,M=I.toString,D=Array.isArray||function(e){return"[object Array]"===M.call(e)},V=function(e,t){this.line=e,this.column=t};V.prototype.offset=function(e){return new V(this.line,this.column+e)};var q=function(e,t,n){this.start=t,this.end=n,null!==e.sourceFile&&(this.source=e.sourceFile)},U={ecmaVersion:7,sourceType:"script",onInsertedSemicolon:null,onTrailingComma:null,allowReserved:null,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowHashBang:!1,locations:!1,onToken:null,onComment:null,ranges:!1,program:null,sourceFile:null,directSourceFile:null,preserveParens:!1,plugins:{}},z={},W=function(e,t,n){this.options=e=c(e),this.sourceFile=e.sourceFile,this.keywords=p(w[e.ecmaVersion>=6?6:5]);var r="";if(!e.allowReserved){for(var i=e.ecmaVersion;!(r=b[i]);i--);"module"==e.sourceType&&(r+=" await")}this.reservedWords=p(r);var s=(r?r+" ":"")+b.strict;this.reservedWordsStrict=p(s),this.reservedWordsStrictBind=p(s+" "+b.strictBind),this.input=String(t),this.containsEsc=!1,this.loadPlugins(e.plugins),n?(this.pos=n,this.lineStart=this.input.lastIndexOf("\n",n-1)+1,this.curLine=this.input.slice(0,this.lineStart).split($).length):(this.pos=this.lineStart=0,this.curLine=1),this.type=F.eof,this.value=null,this.start=this.end=this.pos,this.startLoc=this.endLoc=this.curPosition(),this.lastTokEndLoc=this.lastTokStartLoc=null,this.lastTokStart=this.lastTokEnd=this.pos,this.context=this.initialContext(),this.exprAllowed=!0,this.inModule="module"===e.sourceType,this.strict=this.inModule||this.strictDirective(this.pos),this.potentialArrowAt=-1,this.inFunction=this.inGenerator=this.inAsync=!1,this.yieldPos=this.awaitPos=0,this.labels=[],0===this.pos&&e.allowHashBang&&"#!"===this.input.slice(0,2)&&this.skipLineComment(2),this.scopeStack=[],this.enterFunctionScope()};W.prototype.isKeyword=function(e){return this.keywords.test(e)},W.prototype.isReservedWord=function(e){return this.reservedWords.test(e)},W.prototype.extend=function(e,t){this[e]=t(this[e])},W.prototype.loadPlugins=function(e){var t=this;for(var n in e){var r=z[n];if(!r)throw new Error("Plugin '"+n+"' not found");r(t,e[n])}},W.prototype.parse=function(){var e=this.options.program||this.startNode();return this.nextToken(),this.parseTopLevel(e)};var G=W.prototype,J=/^(?:'((?:[^']|\.)*)'|"((?:[^"]|\.)*)"|;)/;G.strictDirective=function(e){for(var t=this;;){R.lastIndex=e,e+=R.exec(t.input)[0].length;var n=J.exec(t.input.slice(e));if(!n)return!1;if("use strict"==(n[1]||n[2]))return!0;e+=n[0].length}},G.eat=function(e){return this.type===e&&(this.next(),!0)},G.isContextual=function(e){return this.type===F.name&&this.value===e},G.eatContextual=function(e){return this.value===e&&this.eat(F.name)},G.expectContextual=function(e){this.eatContextual(e)||this.unexpected()},G.canInsertSemicolon=function(){return this.type===F.eof||this.type===F.braceR||$.test(this.input.slice(this.lastTokEnd,this.start))},G.insertSemicolon=function(){if(this.canInsertSemicolon())return this.options.onInsertedSemicolon&&this.options.onInsertedSemicolon(this.lastTokEnd,this.lastTokEndLoc),!0},G.semicolon=function(){this.eat(F.semi)||this.insertSemicolon()||this.unexpected()},G.afterTrailingComma=function(e,t){if(this.type==e)return this.options.onTrailingComma&&this.options.onTrailingComma(this.lastTokStart,this.lastTokStartLoc),t||this.next(),!0},G.expect=function(e){this.eat(e)||this.unexpected()},G.unexpected=function(e){this.raise(null!=e?e:this.start,"Unexpected token")};var Y=function(){this.shorthandAssign=this.trailingComma=this.parenthesizedAssign=this.parenthesizedBind=-1};G.checkPatternErrors=function(e,t){if(e){e.trailingComma>-1&&this.raiseRecoverable(e.trailingComma,"Comma is not permitted after the rest element");var n=t?e.parenthesizedAssign:e.parenthesizedBind;n>-1&&this.raiseRecoverable(n,"Parenthesized pattern")}},G.checkExpressionErrors=function(e,t){var n=e?e.shorthandAssign:-1;if(!t)return n>=0;n>-1&&this.raise(n,"Shorthand property assignments are valid only in destructuring patterns")},G.checkYieldAwaitInDefaultParams=function(){this.yieldPos&&(!this.awaitPos||this.yieldPos=6&&(e.sourceType=this.options.sourceType),this.finishNode(e,"Program")};var Z={kind:"loop"},Q={kind:"switch"};H.isLet=function(){if(this.type!==F.name||this.options.ecmaVersion<6||"let"!=this.value)return!1;R.lastIndex=this.pos;var e=R.exec(this.input),t=this.pos+e[0].length,i=this.input.charCodeAt(t);if(91===i||123==i)return!0;if(n(i,!0)){for(var s=t+1;r(this.input.charCodeAt(s),!0);)++s;var o=this.input.slice(t,s);if(!this.isKeyword(o))return!0}return!1},H.isAsyncFunction=function(){if(this.type!==F.name||this.options.ecmaVersion<8||"async"!=this.value)return!1;R.lastIndex=this.pos;var e=R.exec(this.input),t=this.pos+e[0].length;return!($.test(this.input.slice(this.pos,t))||"function"!==this.input.slice(t,t+8)||t+8!=this.input.length&&r(this.input.charAt(t+8)))},H.parseStatement=function(e,t,n){var r,i=this.type,s=this.startNode();switch(this.isLet()&&(i=F._var,r="let"),i){case F._break:case F._continue:return this.parseBreakContinueStatement(s,i.keyword);case F._debugger:return this.parseDebuggerStatement(s);case F._do:return this.parseDoStatement(s);case F._for:return this.parseForStatement(s);case F._function:return!e&&this.options.ecmaVersion>=6&&this.unexpected(),this.parseFunctionStatement(s,!1);case F._class:return e||this.unexpected(),this.parseClass(s,!0);case F._if:return this.parseIfStatement(s);case F._return:return this.parseReturnStatement(s);case F._switch:return this.parseSwitchStatement(s);case F._throw:return this.parseThrowStatement(s);case F._try:return this.parseTryStatement(s);case F._const:case F._var:return r=r||this.value,e||"var"==r||this.unexpected(),this.parseVarStatement(s,r);case F._while:return this.parseWhileStatement(s);case F._with:return this.parseWithStatement(s);case F.braceL:return this.parseBlock();case F.semi:return this.parseEmptyStatement(s);case F._export:case F._import:return this.options.allowImportExportEverywhere||(t||this.raise(this.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.start,"'import' and 'export' may appear only with 'sourceType: module'")),i===F._import?this.parseImport(s):this.parseExport(s,n);default:if(this.isAsyncFunction()&&e)return this.next(),this.parseFunctionStatement(s,!0);var o=this.value,a=this.parseExpression();return i===F.name&&"Identifier"===a.type&&this.eat(F.colon)?this.parseLabeledStatement(s,o,a):this.parseExpressionStatement(s,a)}},H.parseBreakContinueStatement=function(e,t){var n=this,r="break"==t;this.next(),this.eat(F.semi)||this.insertSemicolon()?e.label=null:this.type!==F.name?this.unexpected():(e.label=this.parseIdent(),this.semicolon());for(var i=0;i=6?this.eat(F.semi):this.semicolon(),this.finishNode(e,"DoWhileStatement")},H.parseForStatement=function(e){if(this.next(),this.labels.push(Z),this.enterLexicalScope(),this.expect(F.parenL),this.type===F.semi)return this.parseFor(e,null);var t=this.isLet();if(this.type===F._var||this.type===F._const||t){var n=this.startNode(),r=t?"let":this.value;return this.next(),this.parseVar(n,!0,r),this.finishNode(n,"VariableDeclaration"),!(this.type===F._in||this.options.ecmaVersion>=6&&this.isContextual("of"))||1!==n.declarations.length||"var"!==r&&n.declarations[0].init?this.parseFor(e,n):this.parseForIn(e,n)}var i=new Y,s=this.parseExpression(!0,i);return this.type===F._in||this.options.ecmaVersion>=6&&this.isContextual("of")?(this.toAssignable(s),this.checkLVal(s),this.checkPatternErrors(i,!0),this.parseForIn(e,s)):(this.checkExpressionErrors(i,!0),this.parseFor(e,s))},H.parseFunctionStatement=function(e,t){return this.next(),this.parseFunction(e,!0,!1,t)},H.isFunction=function(){return this.type===F._function||this.isAsyncFunction()},H.parseIfStatement=function(e){return this.next(),e.test=this.parseParenExpression(),e.consequent=this.parseStatement(!this.strict&&this.isFunction()),e.alternate=this.eat(F._else)?this.parseStatement(!this.strict&&this.isFunction()):null,this.finishNode(e,"IfStatement")},H.parseReturnStatement=function(e){return this.inFunction||this.options.allowReturnOutsideFunction||this.raise(this.start,"'return' outside of function"),this.next(),this.eat(F.semi)||this.insertSemicolon()?e.argument=null:(e.argument=this.parseExpression(),this.semicolon()),this.finishNode(e,"ReturnStatement")},H.parseSwitchStatement=function(e){var t=this;this.next(),e.discriminant=this.parseParenExpression(),e.cases=[],this.expect(F.braceL),this.labels.push(Q),this.enterLexicalScope();for(var n,r=!1;this.type!=F.braceR;)if(t.type===F._case||t.type===F._default){var i=t.type===F._case;n&&t.finishNode(n,"SwitchCase"),e.cases.push(n=t.startNode()),n.consequent=[],t.next(),i?n.test=t.parseExpression():(r&&t.raiseRecoverable(t.lastTokStart,"Multiple default clauses"),r=!0,n.test=null),t.expect(F.colon)}else n||t.unexpected(),n.consequent.push(t.parseStatement(!0));return this.exitLexicalScope(),n&&this.finishNode(n,"SwitchCase"),this.next(),this.labels.pop(),this.finishNode(e,"SwitchStatement")},H.parseThrowStatement=function(e){return this.next(),$.test(this.input.slice(this.lastTokEnd,this.start))&&this.raise(this.lastTokEnd,"Illegal newline after throw"),e.argument=this.parseExpression(),this.semicolon(),this.finishNode(e,"ThrowStatement")};var X=[];H.parseTryStatement=function(e){if(this.next(),e.block=this.parseBlock(),e.handler=null,this.type===F._catch){var t=this.startNode();this.next(),this.expect(F.parenL),t.param=this.parseBindingAtom(),this.enterLexicalScope(),this.checkLVal(t.param,"let"),this.expect(F.parenR),t.body=this.parseBlock(!1),this.exitLexicalScope(),e.handler=this.finishNode(t,"CatchClause")}return e.finalizer=this.eat(F._finally)?this.parseBlock():null,e.handler||e.finalizer||this.raise(e.start,"Missing catch or finally clause"),this.finishNode(e,"TryStatement")},H.parseVarStatement=function(e,t){return this.next(),this.parseVar(e,!1,t),this.semicolon(),this.finishNode(e,"VariableDeclaration")},H.parseWhileStatement=function(e){return this.next(),e.test=this.parseParenExpression(),this.labels.push(Z),e.body=this.parseStatement(!1),this.labels.pop(),this.finishNode(e,"WhileStatement")},H.parseWithStatement=function(e){return this.strict&&this.raise(this.start,"'with' in strict mode"),this.next(),e.object=this.parseParenExpression(),e.body=this.parseStatement(!1),this.finishNode(e,"WithStatement")},H.parseEmptyStatement=function(e){return this.next(),this.finishNode(e,"EmptyStatement")},H.parseLabeledStatement=function(e,t,n){for(var r=this,i=0;i=0;o--){var a=r.labels[o];if(a.statementStart!=e.start)break;a.statementStart=r.start,a.kind=s}return this.labels.push({name:t,kind:s,statementStart:this.start}),e.body=this.parseStatement(!0),("ClassDeclaration"==e.body.type||"VariableDeclaration"==e.body.type&&"var"!=e.body.kind||"FunctionDeclaration"==e.body.type&&(this.strict||e.body.generator))&&this.raiseRecoverable(e.body.start,"Invalid labeled declaration"),this.labels.pop(),e.label=n,this.finishNode(e,"LabeledStatement")},H.parseExpressionStatement=function(e,t){return e.expression=t,this.semicolon(),this.finishNode(e,"ExpressionStatement")},H.parseBlock=function(e){var t=this;void 0===e&&(e=!0);var n=this.startNode();for(n.body=[],this.expect(F.braceL),e&&this.enterLexicalScope();!this.eat(F.braceR);){var r=t.parseStatement(!0);n.body.push(r)}return e&&this.exitLexicalScope(),this.finishNode(n,"BlockStatement")},H.parseFor=function(e,t){return e.init=t,this.expect(F.semi),e.test=this.type===F.semi?null:this.parseExpression(),this.expect(F.semi),e.update=this.type===F.parenR?null:this.parseExpression(),this.expect(F.parenR),this.exitLexicalScope(),e.body=this.parseStatement(!1),this.labels.pop(),this.finishNode(e,"ForStatement")},H.parseForIn=function(e,t){var n=this.type===F._in?"ForInStatement":"ForOfStatement";return this.next(),e.left=t,e.right=this.parseExpression(),this.expect(F.parenR),this.exitLexicalScope(),e.body=this.parseStatement(!1),this.labels.pop(),this.finishNode(e,n)},H.parseVar=function(e,t,n){var r=this;for(e.declarations=[],e.kind=n;;){var i=r.startNode();if(r.parseVarId(i,n),r.eat(F.eq)?i.init=r.parseMaybeAssign(t):"const"!==n||r.type===F._in||r.options.ecmaVersion>=6&&r.isContextual("of")?"Identifier"==i.id.type||t&&(r.type===F._in||r.isContextual("of"))?i.init=null:r.raise(r.lastTokEnd,"Complex binding patterns require an initialization value"):r.unexpected(),e.declarations.push(r.finishNode(i,"VariableDeclarator")),!r.eat(F.comma))break}return e},H.parseVarId=function(e,t){e.id=this.parseBindingAtom(t),this.checkLVal(e.id,t,!1)},H.parseFunction=function(e,t,n,r){this.initFunction(e),this.options.ecmaVersion>=6&&!r&&(e.generator=this.eat(F.star)),this.options.ecmaVersion>=8&&(e.async=!!r),t&&(e.id="nullableID"===t&&this.type!=F.name?null:this.parseIdent(),e.id&&this.checkLVal(e.id,"var"));var i=this.inGenerator,s=this.inAsync,o=this.yieldPos,a=this.awaitPos,u=this.inFunction;return this.inGenerator=e.generator,this.inAsync=e.async,this.yieldPos=0,this.awaitPos=0,this.inFunction=!0,this.enterFunctionScope(),t||(e.id=this.type==F.name?this.parseIdent():null),this.parseFunctionParams(e),this.parseFunctionBody(e,n),this.inGenerator=i,this.inAsync=s,this.yieldPos=o,this.awaitPos=a,this.inFunction=u,this.finishNode(e,t?"FunctionDeclaration":"FunctionExpression")},H.parseFunctionParams=function(e){this.expect(F.parenL),e.params=this.parseBindingList(F.parenR,!1,this.options.ecmaVersion>=8,!0),this.checkYieldAwaitInDefaultParams()},H.parseClass=function(e,t){var n=this;this.next(),this.parseClassId(e,t),this.parseClassSuper(e);var r=this.startNode(),i=!1;for(r.body=[],this.expect(F.braceL);!this.eat(F.braceR);)if(!n.eat(F.semi)){var s=n.startNode(),o=n.eat(F.star),a=!1,u=n.type===F.name&&"static"===n.value;n.parsePropertyName(s),s.static=u&&n.type!==F.parenL,s.static&&(o&&n.unexpected(),o=n.eat(F.star),n.parsePropertyName(s)),n.options.ecmaVersion>=8&&!o&&!s.computed&&"Identifier"===s.key.type&&"async"===s.key.name&&n.type!==F.parenL&&!n.canInsertSemicolon()&&(a=!0,n.parsePropertyName(s)),s.kind="method";var c=!1;if(!s.computed){var l=s.key;o||a||"Identifier"!==l.type||n.type===F.parenL||"get"!==l.name&&"set"!==l.name||(c=!0,s.kind=l.name,l=n.parsePropertyName(s)),!s.static&&("Identifier"===l.type&&"constructor"===l.name||"Literal"===l.type&&"constructor"===l.value)&&(i&&n.raise(l.start,"Duplicate constructor in the same class"),c&&n.raise(l.start,"Constructor can't have get/set modifier"),o&&n.raise(l.start,"Constructor can't be a generator"),a&&n.raise(l.start,"Constructor can't be an async method"),s.kind="constructor",i=!0)}if(n.parseClassMethod(r,s,o,a),c){var p="get"===s.kind?0:1;if(s.value.params.length!==p){var h=s.value.start;"get"===s.kind?n.raiseRecoverable(h,"getter should have no params"):n.raiseRecoverable(h,"setter should have exactly one param")}else"set"===s.kind&&"RestElement"===s.value.params[0].type&&n.raiseRecoverable(s.value.params[0].start,"Setter cannot use rest params")}}return e.body=this.finishNode(r,"ClassBody"),this.finishNode(e,t?"ClassDeclaration":"ClassExpression")},H.parseClassMethod=function(e,t,n,r){t.value=this.parseMethod(n,r),e.body.push(this.finishNode(t,"MethodDefinition"))},H.parseClassId=function(e,t){e.id=this.type===F.name?this.parseIdent():!0===t?this.unexpected():null},H.parseClassSuper=function(e){e.superClass=this.eat(F._extends)?this.parseExprSubscripts():null},H.parseExport=function(e,t){var n=this;if(this.next(),this.eat(F.star))return this.expectContextual("from"),e.source=this.type===F.string?this.parseExprAtom():this.unexpected(),this.semicolon(),this.finishNode(e,"ExportAllDeclaration");if(this.eat(F._default)){this.checkExport(t,"default",this.lastTokStart);var r;if(this.type===F._function||(r=this.isAsyncFunction())){var i=this.startNode();this.next(),r&&this.next(),e.declaration=this.parseFunction(i,"nullableID",!1,r)}else if(this.type===F._class){var s=this.startNode();e.declaration=this.parseClass(s,"nullableID")}else e.declaration=this.parseMaybeAssign(),this.semicolon();return this.finishNode(e,"ExportDefaultDeclaration")}if(this.shouldParseExportStatement())e.declaration=this.parseStatement(!0),"VariableDeclaration"===e.declaration.type?this.checkVariableExport(t,e.declaration.declarations):this.checkExport(t,e.declaration.id.name,e.declaration.id.start),e.specifiers=[],e.source=null;else{if(e.declaration=null,e.specifiers=this.parseExportSpecifiers(t),this.eatContextual("from"))e.source=this.type===F.string?this.parseExprAtom():this.unexpected();else{for(var o=0;o=6&&e)switch(e.type){case"Identifier":this.inAsync&&"await"===e.name&&this.raise(e.start,"Can not use 'await' as identifier inside an async function");break;case"ObjectPattern":case"ArrayPattern":break;case"ObjectExpression":e.type="ObjectPattern";for(var r=0;r=6&&(e.computed||e.method||e.shorthand))){var n,r=e.key;switch(r.type){case"Identifier":n=r.name;break;case"Literal":n=String(r.value);break;default:return}var i=e.kind;if(this.options.ecmaVersion>=6)return void("__proto__"===n&&"init"===i&&(t.proto&&this.raiseRecoverable(r.start,"Redefinition of __proto__ property"),t.proto=!0));n="$"+n;var s=t[n];if(s){var o;o="init"===i?this.strict&&s.init||s.get||s.set:s.init||s[i],o&&this.raiseRecoverable(r.start,"Redefinition of property")}else s=t[n]={init:!1,get:!1,set:!1};s[i]=!0}},ee.parseExpression=function(e,t){var n=this,r=this.start,i=this.startLoc,s=this.parseMaybeAssign(e,t);if(this.type===F.comma){var o=this.startNodeAt(r,i);for(o.expressions=[s];this.eat(F.comma);)o.expressions.push(n.parseMaybeAssign(e,t));return this.finishNode(o,"SequenceExpression")}return s},ee.parseMaybeAssign=function(e,t,n){if(this.inGenerator&&this.isContextual("yield"))return this.parseYield();var r=!1,i=-1,s=-1;t?(i=t.parenthesizedAssign,s=t.trailingComma,t.parenthesizedAssign=t.trailingComma=-1):(t=new Y,r=!0);var o=this.start,a=this.startLoc;this.type!=F.parenL&&this.type!=F.name||(this.potentialArrowAt=this.start);var u=this.parseMaybeConditional(e,t);if(n&&(u=n.call(this,u,o,a)),this.type.isAssign){this.checkPatternErrors(t,!0),r||Y.call(t);var c=this.startNodeAt(o,a);return c.operator=this.value,c.left=this.type===F.eq?this.toAssignable(u):u,t.shorthandAssign=-1,this.checkLVal(u),this.next(),c.right=this.parseMaybeAssign(e),this.finishNode(c,"AssignmentExpression")}return r&&this.checkExpressionErrors(t,!0),i>-1&&(t.parenthesizedAssign=i),s>-1&&(t.trailingComma=s),u},ee.parseMaybeConditional=function(e,t){var n=this.start,r=this.startLoc,i=this.parseExprOps(e,t);if(this.checkExpressionErrors(t))return i;if(this.eat(F.question)){var s=this.startNodeAt(n,r);return s.test=i,s.consequent=this.parseMaybeAssign(),this.expect(F.colon),s.alternate=this.parseMaybeAssign(e),this.finishNode(s,"ConditionalExpression")}return i},ee.parseExprOps=function(e,t){var n=this.start,r=this.startLoc,i=this.parseMaybeUnary(t,!1);return this.checkExpressionErrors(t)?i:i.start==n&&"ArrowFunctionExpression"===i.type?i:this.parseExprOp(i,n,r,-1,e)},ee.parseExprOp=function(e,t,n,r,i){var s=this.type.binop;if(null!=s&&(!i||this.type!==F._in)&&s>r){var o=this.type===F.logicalOR||this.type===F.logicalAND,a=this.value;this.next();var u=this.start,c=this.startLoc,l=this.parseExprOp(this.parseMaybeUnary(null,!1),u,c,s,i),p=this.buildBinary(t,n,e,l,a,o);return this.parseExprOp(p,t,n,r,i)}return e},ee.buildBinary=function(e,t,n,r,i,s){var o=this.startNodeAt(e,t);return o.left=n,o.operator=i,o.right=r,this.finishNode(o,s?"LogicalExpression":"BinaryExpression")},ee.parseMaybeUnary=function(e,t){var n,r=this,i=this.start,s=this.startLoc;if(this.inAsync&&this.isContextual("await"))n=this.parseAwait(e),t=!0;else if(this.type.prefix){var o=this.startNode(),a=this.type===F.incDec;o.operator=this.value,o.prefix=!0,this.next(),o.argument=this.parseMaybeUnary(null,!0),this.checkExpressionErrors(e,!0),a?this.checkLVal(o.argument):this.strict&&"delete"===o.operator&&"Identifier"===o.argument.type?this.raiseRecoverable(o.start,"Deleting local variable in strict mode"):t=!0,n=this.finishNode(o,a?"UpdateExpression":"UnaryExpression")}else{if(n=this.parseExprSubscripts(e),this.checkExpressionErrors(e))return n;for(;this.type.postfix&&!this.canInsertSemicolon();){var u=r.startNodeAt(i,s);u.operator=r.value,u.prefix=!1,u.argument=n,r.checkLVal(n),r.next(),n=r.finishNode(u,"UpdateExpression")}}return!t&&this.eat(F.starstar)?this.buildBinary(i,s,n,this.parseMaybeUnary(null,!1),"**",!1):n},ee.parseExprSubscripts=function(e){var t=this.start,n=this.startLoc,r=this.parseExprAtom(e),i="ArrowFunctionExpression"===r.type&&")"!==this.input.slice(this.lastTokStart,this.lastTokEnd);if(this.checkExpressionErrors(e)||i)return r;var s=this.parseSubscripts(r,t,n);return e&&"MemberExpression"===s.type&&(e.parenthesizedAssign>=s.start&&(e.parenthesizedAssign=-1),e.parenthesizedBind>=s.start&&(e.parenthesizedBind=-1)),s},ee.parseSubscripts=function(e,t,n,r){for(var i,s=this,o=this.options.ecmaVersion>=8&&"Identifier"===e.type&&"async"===e.name&&this.lastTokEnd==e.end&&!this.canInsertSemicolon();;)if((i=s.eat(F.bracketL))||s.eat(F.dot)){var a=s.startNodeAt(t,n);a.object=e,a.property=i?s.parseExpression():s.parseIdent(!0),a.computed=!!i,i&&s.expect(F.bracketR),e=s.finishNode(a,"MemberExpression")}else if(!r&&s.eat(F.parenL)){var u=new Y,c=s.yieldPos,l=s.awaitPos;s.yieldPos=0,s.awaitPos=0;var p=s.parseExprList(F.parenR,s.options.ecmaVersion>=8,!1,u);if(o&&!s.canInsertSemicolon()&&s.eat(F.arrow))return s.checkPatternErrors(u,!1),s.checkYieldAwaitInDefaultParams(),s.yieldPos=c,s.awaitPos=l,s.parseArrowExpression(s.startNodeAt(t,n),p,!0);s.checkExpressionErrors(u,!0),s.yieldPos=c||s.yieldPos,s.awaitPos=l||s.awaitPos;var h=s.startNodeAt(t,n);h.callee=e,h.arguments=p,e=s.finishNode(h,"CallExpression")}else{if(s.type!==F.backQuote)return e;var f=s.startNodeAt(t,n);f.tag=e,f.quasi=s.parseTemplate(),e=s.finishNode(f,"TaggedTemplateExpression")}},ee.parseExprAtom=function(e){var t,n=this.potentialArrowAt==this.start;switch(this.type){case F._super:this.inFunction||this.raise(this.start,"'super' outside of function or class");case F._this:var r=this.type===F._this?"ThisExpression":"Super";return t=this.startNode(),this.next(),this.finishNode(t,r);case F.name:var i=this.start,s=this.startLoc,o=this.parseIdent(this.type!==F.name);if(this.options.ecmaVersion>=8&&"async"===o.name&&!this.canInsertSemicolon()&&this.eat(F._function))return this.parseFunction(this.startNodeAt(i,s),!1,!1,!0);if(n&&!this.canInsertSemicolon()){if(this.eat(F.arrow))return this.parseArrowExpression(this.startNodeAt(i,s),[o],!1);if(this.options.ecmaVersion>=8&&"async"===o.name&&this.type===F.name)return o=this.parseIdent(),!this.canInsertSemicolon()&&this.eat(F.arrow)||this.unexpected(),this.parseArrowExpression(this.startNodeAt(i,s),[o],!0)}return o;case F.regexp:var a=this.value;return t=this.parseLiteral(a.value),t.regex={pattern:a.pattern,flags:a.flags},t;case F.num:case F.string:return this.parseLiteral(this.value);case F._null:case F._true:case F._false:return t=this.startNode(),t.value=this.type===F._null?null:this.type===F._true,t.raw=this.type.keyword,this.next(),this.finishNode(t,"Literal");case F.parenL:var u=this.start,c=this.parseParenAndDistinguishExpression(n);return e&&(e.parenthesizedAssign<0&&!this.isSimpleAssignTarget(c)&&(e.parenthesizedAssign=u),e.parenthesizedBind<0&&(e.parenthesizedBind=u)),c;case F.bracketL:return t=this.startNode(),this.next(),t.elements=this.parseExprList(F.bracketR,!0,!0,e),this.finishNode(t,"ArrayExpression");case F.braceL:return this.parseObj(!1,e);case F._function:return t=this.startNode(),this.next(),this.parseFunction(t,!1);case F._class:return this.parseClass(this.startNode(),!1);case F._new:return this.parseNew();case F.backQuote:return this.parseTemplate();default:this.unexpected()}},ee.parseLiteral=function(e){var t=this.startNode();return t.value=e,t.raw=this.input.slice(this.start,this.end),this.next(),this.finishNode(t,"Literal")},ee.parseParenExpression=function(){this.expect(F.parenL);var e=this.parseExpression();return this.expect(F.parenR),e},ee.parseParenAndDistinguishExpression=function(e){var t,n=this,r=this.start,i=this.startLoc,s=this.options.ecmaVersion>=8;if(this.options.ecmaVersion>=6){this.next();var o,a,u=this.start,c=this.startLoc,l=[],p=!0,h=!1,f=new Y,d=this.yieldPos,y=this.awaitPos;for(this.yieldPos=0,this.awaitPos=0;this.type!==F.parenR;){if(p?p=!1:n.expect(F.comma),s&&n.afterTrailingComma(F.parenR,!0)){h=!0;break}if(n.type===F.ellipsis){o=n.start,l.push(n.parseParenItem(n.parseRest())),n.type===F.comma&&n.raise(n.start,"Comma is not permitted after the rest element");break}n.type!==F.parenL||a||(a=n.start),l.push(n.parseMaybeAssign(!1,f,n.parseParenItem))}var m=this.start,g=this.startLoc;if(this.expect(F.parenR),e&&!this.canInsertSemicolon()&&this.eat(F.arrow))return this.checkPatternErrors(f,!1),this.checkYieldAwaitInDefaultParams(),a&&this.unexpected(a),this.yieldPos=d,this.awaitPos=y,this.parseParenArrowList(r,i,l);l.length&&!h||this.unexpected(this.lastTokStart),o&&this.unexpected(o),this.checkExpressionErrors(f,!0),this.yieldPos=d||this.yieldPos,this.awaitPos=y||this.awaitPos,l.length>1?(t=this.startNodeAt(u,c),t.expressions=l,this.finishNodeAt(t,"SequenceExpression",m,g)):t=l[0]}else t=this.parseParenExpression();if(this.options.preserveParens){var v=this.startNodeAt(r,i);return v.expression=t,this.finishNode(v,"ParenthesizedExpression")}return t},ee.parseParenItem=function(e){return e},ee.parseParenArrowList=function(e,t,n){return this.parseArrowExpression(this.startNodeAt(e,t),n)};var te=[];ee.parseNew=function(){var e=this.startNode(),t=this.parseIdent(!0);if(this.options.ecmaVersion>=6&&this.eat(F.dot))return e.meta=t,e.property=this.parseIdent(!0),"target"!==e.property.name&&this.raiseRecoverable(e.property.start,"The only valid meta property for new is new.target"),this.inFunction||this.raiseRecoverable(e.start,"new.target can only be used in functions"),this.finishNode(e,"MetaProperty");var n=this.start,r=this.startLoc;return e.callee=this.parseSubscripts(this.parseExprAtom(),n,r,!0),this.eat(F.parenL)?e.arguments=this.parseExprList(F.parenR,this.options.ecmaVersion>=8,!1):e.arguments=te,this.finishNode(e,"NewExpression")},ee.parseTemplateElement=function(){var e=this.startNode();return e.value={raw:this.input.slice(this.start,this.end).replace(/\r\n?/g,"\n"),cooked:this.value},this.next(),e.tail=this.type===F.backQuote,this.finishNode(e,"TemplateElement")},ee.parseTemplate=function(){var e=this,t=this.startNode();this.next(),t.expressions=[];var n=this.parseTemplateElement();for(t.quasis=[n];!n.tail;)e.expect(F.dollarBraceL),t.expressions.push(e.parseExpression()),e.expect(F.braceR),t.quasis.push(n=e.parseTemplateElement());return this.next(),this.finishNode(t,"TemplateLiteral")},ee.parseObj=function(e,t){var n=this,r=this.startNode(),i=!0,s={};for(r.properties=[],this.next();!this.eat(F.braceR);){if(i)i=!1;else if(n.expect(F.comma),n.afterTrailingComma(F.braceR))break;var o,a,u,c,l=n.startNode();n.options.ecmaVersion>=6&&(l.method=!1,l.shorthand=!1,(e||t)&&(u=n.start,c=n.startLoc),e||(o=n.eat(F.star))),n.parsePropertyName(l),e||!(n.options.ecmaVersion>=8)||o||l.computed||"Identifier"!==l.key.type||"async"!==l.key.name||n.type===F.parenL||n.type===F.colon||n.canInsertSemicolon()?a=!1:(a=!0,n.parsePropertyName(l,t)),n.parsePropertyValue(l,e,o,a,u,c,t),n.checkPropClash(l,s),r.properties.push(n.finishNode(l,"Property"))}return this.finishNode(r,e?"ObjectPattern":"ObjectExpression")},ee.parsePropertyValue=function(e,t,n,r,i,s,o){if((n||r)&&this.type===F.colon&&this.unexpected(),this.eat(F.colon))e.value=t?this.parseMaybeDefault(this.start,this.startLoc):this.parseMaybeAssign(!1,o),e.kind="init";else if(this.options.ecmaVersion>=6&&this.type===F.parenL)t&&this.unexpected(),e.kind="init",e.method=!0,e.value=this.parseMethod(n,r);else if(this.options.ecmaVersion>=5&&!e.computed&&"Identifier"===e.key.type&&("get"===e.key.name||"set"===e.key.name)&&this.type!=F.comma&&this.type!=F.braceR){(n||r||t)&&this.unexpected(),e.kind=e.key.name,this.parsePropertyName(e),e.value=this.parseMethod(!1);var a="get"===e.kind?0:1;if(e.value.params.length!==a){var u=e.value.start;"get"===e.kind?this.raiseRecoverable(u,"getter should have no params"):this.raiseRecoverable(u,"setter should have exactly one param")}else"set"===e.kind&&"RestElement"===e.value.params[0].type&&this.raiseRecoverable(e.value.params[0].start,"Setter cannot use rest params")}else this.options.ecmaVersion>=6&&!e.computed&&"Identifier"===e.key.type?((this.keywords.test(e.key.name)||(this.strict?this.reservedWordsStrict:this.reservedWords).test(e.key.name)||this.inGenerator&&"yield"==e.key.name||this.inAsync&&"await"==e.key.name)&&this.raiseRecoverable(e.key.start,"'"+e.key.name+"' can not be used as shorthand property"),e.kind="init",t?e.value=this.parseMaybeDefault(i,s,e.key):this.type===F.eq&&o?(o.shorthandAssign<0&&(o.shorthandAssign=this.start),e.value=this.parseMaybeDefault(i,s,e.key)):e.value=e.key,e.shorthand=!0):this.unexpected()},ee.parsePropertyName=function(e){if(this.options.ecmaVersion>=6){if(this.eat(F.bracketL))return e.computed=!0,e.key=this.parseMaybeAssign(),this.expect(F.bracketR),e.key;e.computed=!1}return e.key=this.type===F.num||this.type===F.string?this.parseExprAtom():this.parseIdent(!0)},ee.initFunction=function(e){e.id=null,this.options.ecmaVersion>=6&&(e.generator=!1,e.expression=!1),this.options.ecmaVersion>=8&&(e.async=!1)},ee.parseMethod=function(e,t){var n=this.startNode(),r=this.inGenerator,i=this.inAsync,s=this.yieldPos,o=this.awaitPos,a=this.inFunction;return this.initFunction(n),this.options.ecmaVersion>=6&&(n.generator=e),this.options.ecmaVersion>=8&&(n.async=!!t),this.inGenerator=n.generator,this.inAsync=n.async,this.yieldPos=0,this.awaitPos=0,this.inFunction=!0,this.enterFunctionScope(),this.expect(F.parenL),n.params=this.parseBindingList(F.parenR,!1,this.options.ecmaVersion>=8),this.checkYieldAwaitInDefaultParams(),this.parseFunctionBody(n,!1),this.inGenerator=r,this.inAsync=i,this.yieldPos=s,this.awaitPos=o,this.inFunction=a,this.finishNode(n,"FunctionExpression")},ee.parseArrowExpression=function(e,t,n){var r=this.inGenerator,i=this.inAsync,s=this.yieldPos,o=this.awaitPos,a=this.inFunction;return this.enterFunctionScope(),this.initFunction(e),this.options.ecmaVersion>=8&&(e.async=!!n),this.inGenerator=!1,this.inAsync=e.async,this.yieldPos=0,this.awaitPos=0,this.inFunction=!0,e.params=this.toAssignableList(t,!0),this.parseFunctionBody(e,!0),this.inGenerator=r,this.inAsync=i,this.yieldPos=s,this.awaitPos=o,this.inFunction=a,this.finishNode(e,"ArrowFunctionExpression")},ee.parseFunctionBody=function(e,t){var n=t&&this.type!==F.braceL,r=this.strict,i=!1;if(n)e.body=this.parseMaybeAssign(),e.expression=!0,this.checkParams(e,!1);else{var s=this.options.ecmaVersion>=7&&!this.isSimpleParamList(e.params);r&&!s||(i=this.strictDirective(this.end))&&s&&this.raiseRecoverable(e.start,"Illegal 'use strict' directive in function with non-simple parameter list");var o=this.labels;this.labels=[],i&&(this.strict=!0),this.checkParams(e,!r&&!i&&!t&&this.isSimpleParamList(e.params)),e.body=this.parseBlock(!1),e.expression=!1,this.labels=o}this.exitFunctionScope(),this.strict&&e.id&&this.checkLVal(e.id,"none"),this.strict=r},ee.isSimpleParamList=function(e){for(var t=0;t=6||-1==this.input.slice(this.start,this.end).indexOf("\\"))&&this.raiseRecoverable(this.start,"The keyword '"+this.value+"' is reserved"),this.inGenerator&&"yield"===this.value&&this.raiseRecoverable(this.start,"Can not use 'yield' as identifier inside a generator"),this.inAsync&&"await"===this.value&&this.raiseRecoverable(this.start,"Can not use 'await' as identifier inside an async function"),t.name=this.value):e&&this.type.keyword?t.name=this.type.keyword:this.unexpected(),this.next(),this.finishNode(t,"Identifier")},ee.parseYield=function(){this.yieldPos||(this.yieldPos=this.start);var e=this.startNode();return this.next(),this.type==F.semi||this.canInsertSemicolon()||this.type!=F.star&&!this.type.startsExpr?(e.delegate=!1,e.argument=null):(e.delegate=this.eat(F.star),e.argument=this.parseMaybeAssign()),this.finishNode(e,"YieldExpression")},ee.parseAwait=function(){this.awaitPos||(this.awaitPos=this.start);var e=this.startNode();return this.next(),e.argument=this.parseMaybeUnary(null,!0),this.finishNode(e,"AwaitExpression")};var ne=W.prototype;ne.raise=function(e,t){var n=u(this.input,e);t+=" ("+n.line+":"+n.column+")";var r=new SyntaxError(t);throw r.pos=e,r.loc=n,r.raisedAt=this.pos,r},ne.raiseRecoverable=ne.raise,ne.curPosition=function(){if(this.options.locations)return new V(this.curLine,this.pos-this.lineStart)};var re=W.prototype,ie=Object.assign||function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];for(var r=0;r=0;t--)if(e.context[t].generator)return!0;return!1},ce.updateContext=function(e){var t,n=this.type;n.keyword&&e==F.dot?this.exprAllowed=!1:(t=n.updateContext)?t.call(this,e):this.exprAllowed=n.beforeExpr},F.parenR.updateContext=F.braceR.updateContext=function(){if(1==this.context.length)return void(this.exprAllowed=!0);var e,t=this.context.pop();t===ue.b_stat&&(e=this.curContext())&&"function"===e.token?(this.context.pop(),this.exprAllowed=!1):t===ue.b_tmpl?this.exprAllowed=!0:this.exprAllowed=!t.isExpr},F.braceL.updateContext=function(e){this.context.push(this.braceIsBlock(e)?ue.b_stat:ue.b_expr),this.exprAllowed=!0},F.dollarBraceL.updateContext=function(){this.context.push(ue.b_tmpl),this.exprAllowed=!0},F.parenL.updateContext=function(e){var t=e===F._if||e===F._for||e===F._with||e===F._while;this.context.push(t?ue.p_stat:ue.p_expr),this.exprAllowed=!0},F.incDec.updateContext=function(){},F._function.updateContext=function(e){e.beforeExpr&&e!==F.semi&&e!==F._else&&(e!==F.colon&&e!==F.braceL||this.curContext()!==ue.b_stat)&&this.context.push(ue.f_expr),this.exprAllowed=!1},F.backQuote.updateContext=function(){this.curContext()===ue.q_tmpl?this.context.pop():this.context.push(ue.q_tmpl),this.exprAllowed=!1},F.star.updateContext=function(e){e==F._function&&(this.curContext()===ue.f_expr?this.context[this.context.length-1]=ue.f_expr_gen:this.context.push(ue.f_gen)),this.exprAllowed=!0},F.name.updateContext=function(e){var t=!1;this.options.ecmaVersion>=6&&("of"==this.value&&!this.exprAllowed||"yield"==this.value&&this.inGeneratorContext())&&(t=!0),this.exprAllowed=t};var le=function(e){this.type=e.type,this.value=e.value,this.start=e.start,this.end=e.end,e.options.locations&&(this.loc=new q(e,e.startLoc,e.endLoc)),e.options.ranges&&(this.range=[e.start,e.end])},pe=W.prototype,he="object"==typeof Packages&&"[object JavaPackage]"==Object.prototype.toString.call(Packages);pe.next=function(){this.options.onToken&&this.options.onToken(new le(this)),this.lastTokEnd=this.end,this.lastTokStart=this.start,this.lastTokEndLoc=this.endLoc,this.lastTokStartLoc=this.startLoc,this.nextToken()},pe.getToken=function(){return this.next(),new le(this)},"undefined"!=typeof Symbol&&(pe[Symbol.iterator]=function(){var e=this;return{next:function(){var t=e.getToken();return{done:t.type===F.eof,value:t}}}}),pe.curContext=function(){return this.context[this.context.length-1]},pe.nextToken=function(){var e=this.curContext();return e&&e.preserveSpace||this.skipSpace(),this.start=this.pos,this.options.locations&&(this.startLoc=this.curPosition()),this.pos>=this.input.length?this.finishToken(F.eof):e.override?e.override(this):void this.readToken(this.fullCharCodeAtPos())},pe.readToken=function(e){return n(e,this.options.ecmaVersion>=6)||92===e?this.readWord():this.getTokenFromCode(e)},pe.fullCharCodeAtPos=function(){var e=this.input.charCodeAt(this.pos);return e<=55295||e>=57344?e:(e<<10)+this.input.charCodeAt(this.pos+1)-56613888},pe.skipBlockComment=function(){var e=this,t=this.options.onComment&&this.curPosition(),n=this.pos,r=this.input.indexOf("*/",this.pos+=2);if(-1===r&&this.raise(this.pos-2,"Unterminated comment"),this.pos=r+2,this.options.locations){O.lastIndex=n;for(var i;(i=O.exec(this.input))&&i.index8&&t<14||t>=5760&&B.test(String.fromCharCode(t))))break e;++e.pos}}},pe.finishToken=function(e,t){this.end=this.pos,this.options.locations&&(this.endLoc=this.curPosition());var n=this.type;this.type=e,this.value=t,this.updateContext(n)},pe.readToken_dot=function(){var e=this.input.charCodeAt(this.pos+1);if(e>=48&&e<=57)return this.readNumber(!0);var t=this.input.charCodeAt(this.pos+2);return this.options.ecmaVersion>=6&&46===e&&46===t?(this.pos+=3,this.finishToken(F.ellipsis)):(++this.pos,this.finishToken(F.dot))},pe.readToken_slash=function(){var e=this.input.charCodeAt(this.pos+1);return this.exprAllowed?(++this.pos,this.readRegexp()):61===e?this.finishOp(F.assign,2):this.finishOp(F.slash,1)},pe.readToken_mult_modulo_exp=function(e){var t=this.input.charCodeAt(this.pos+1),n=1,r=42===e?F.star:F.modulo;return this.options.ecmaVersion>=7&&42===t&&(++n,r=F.starstar,t=this.input.charCodeAt(this.pos+2)),61===t?this.finishOp(F.assign,n+1):this.finishOp(r,n)},pe.readToken_pipe_amp=function(e){var t=this.input.charCodeAt(this.pos+1);return t===e?this.finishOp(124===e?F.logicalOR:F.logicalAND,2):61===t?this.finishOp(F.assign,2):this.finishOp(124===e?F.bitwiseOR:F.bitwiseAND,1)},pe.readToken_caret=function(){return 61===this.input.charCodeAt(this.pos+1)?this.finishOp(F.assign,2):this.finishOp(F.bitwiseXOR,1)},pe.readToken_plus_min=function(e){var t=this.input.charCodeAt(this.pos+1);return t===e?45==t&&62==this.input.charCodeAt(this.pos+2)&&$.test(this.input.slice(this.lastTokEnd,this.pos))?(this.skipLineComment(3),this.skipSpace(),this.nextToken()):this.finishOp(F.incDec,2):61===t?this.finishOp(F.assign,2):this.finishOp(F.plusMin,1)},pe.readToken_lt_gt=function(e){var t=this.input.charCodeAt(this.pos+1),n=1;return t===e?(n=62===e&&62===this.input.charCodeAt(this.pos+2)?3:2,61===this.input.charCodeAt(this.pos+n)?this.finishOp(F.assign,n+1):this.finishOp(F.bitShift,n)):33==t&&60==e&&45==this.input.charCodeAt(this.pos+2)&&45==this.input.charCodeAt(this.pos+3)?(this.inModule&&this.unexpected(),this.skipLineComment(4),this.skipSpace(),this.nextToken()):(61===t&&(n=2),this.finishOp(F.relational,n))},pe.readToken_eq_excl=function(e){var t=this.input.charCodeAt(this.pos+1);return 61===t?this.finishOp(F.equality,61===this.input.charCodeAt(this.pos+2)?3:2):61===e&&62===t&&this.options.ecmaVersion>=6?(this.pos+=2,this.finishToken(F.arrow)):this.finishOp(61===e?F.eq:F.prefix,1)},pe.getTokenFromCode=function(e){switch(e){case 46:return this.readToken_dot();case 40:return++this.pos,this.finishToken(F.parenL);case 41:return++this.pos,this.finishToken(F.parenR);case 59:return++this.pos,this.finishToken(F.semi);case 44:return++this.pos,this.finishToken(F.comma);case 91:return++this.pos,this.finishToken(F.bracketL);case 93:return++this.pos,this.finishToken(F.bracketR);case 123:return++this.pos,this.finishToken(F.braceL);case 125:return++this.pos,this.finishToken(F.braceR);case 58:return++this.pos,this.finishToken(F.colon);case 63:return++this.pos,this.finishToken(F.question);case 96:if(this.options.ecmaVersion<6)break;return++this.pos,this.finishToken(F.backQuote);case 48:var t=this.input.charCodeAt(this.pos+1);if(120===t||88===t)return this.readRadixNumber(16);if(this.options.ecmaVersion>=6){if(111===t||79===t)return this.readRadixNumber(8);if(98===t||66===t)return this.readRadixNumber(2)}case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(e);case 47:return this.readToken_slash();case 37:case 42:return this.readToken_mult_modulo_exp(e);case 124:case 38:return this.readToken_pipe_amp(e);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(e);case 60:case 62:return this.readToken_lt_gt(e);case 61:case 33:return this.readToken_eq_excl(e);case 126:return this.finishOp(F.prefix,1)}this.raise(this.pos,"Unexpected character '"+d(e)+"'")},pe.finishOp=function(e,t){var n=this.input.slice(this.pos,this.pos+t);return this.pos+=t,this.finishToken(e,n)};var fe=!!f("￿","u");pe.readRegexp=function(){for(var e,t,n=this,r=this.pos;;){n.pos>=n.input.length&&n.raise(r,"Unterminated regular expression");var i=n.input.charAt(n.pos);if($.test(i)&&n.raise(r,"Unterminated regular expression"),e)e=!1;else{if("["===i)t=!0;else if("]"===i&&t)t=!1;else if("/"===i&&!t)break;e="\\"===i}++n.pos}var s=this.input.slice(r,this.pos);++this.pos;var o=this.readWord1(),a=s,u="";if(o){var c=/^[gim]*$/;this.options.ecmaVersion>=6&&(c=/^[gimuy]*$/),c.test(o)||this.raise(r,"Invalid regular expression flag"),o.indexOf("u")>=0&&(fe?u="u":(a=a.replace(/\\u\{([0-9a-fA-F]+)\}/g,function(e,t,i){return t=Number("0x"+t),t>1114111&&n.raise(r+i+3,"Code point out of bounds"),"x"}),a=a.replace(/\\u([a-fA-F0-9]{4})|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"),u=u.replace("u","")))}var l=null;return he||(f(a,u,r,this),l=f(s,o)),this.finishToken(F.regexp,{pattern:s,flags:o,value:l})},pe.readInt=function(e,t){for(var n=this,r=this.pos,i=0,s=0,o=null==t?1/0:t;s=97?u-97+10:u>=65?u-65+10:u>=48&&u<=57?u-48:1/0)>=e)break;++n.pos,i=i*e+a}return this.pos===r||null!=t&&this.pos-r!==t?null:i},pe.readRadixNumber=function(e){this.pos+=2;var t=this.readInt(e);return null==t&&this.raise(this.start+2,"Expected number in radix "+e),n(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number"),this.finishToken(F.num,t)},pe.readNumber=function(e){var t=this.pos,r=!1,i=48===this.input.charCodeAt(this.pos);e||null!==this.readInt(10)||this.raise(t,"Invalid number"),i&&this.pos==t+1&&(i=!1);var s=this.input.charCodeAt(this.pos);46!==s||i||(++this.pos,this.readInt(10),r=!0,s=this.input.charCodeAt(this.pos)),69!==s&&101!==s||i||(s=this.input.charCodeAt(++this.pos),43!==s&&45!==s||++this.pos,null===this.readInt(10)&&this.raise(t,"Invalid number"),r=!0),n(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number");var o,a=this.input.slice(t,this.pos);return r?o=parseFloat(a):i&&1!==a.length?/[89]/.test(a)||this.strict?this.raise(t,"Invalid number"):o=parseInt(a,8):o=parseInt(a,10),this.finishToken(F.num,o)},pe.readCodePoint=function(){var e,t=this.input.charCodeAt(this.pos);if(123===t){this.options.ecmaVersion<6&&this.unexpected();var n=++this.pos;e=this.readHexChar(this.input.indexOf("}",this.pos)-this.pos),++this.pos,e>1114111&&this.raise(n,"Code point out of bounds")}else e=this.readHexChar(4);return e},pe.readString=function(e){for(var t=this,n="",r=++this.pos;;){t.pos>=t.input.length&&t.raise(t.start,"Unterminated string constant");var i=t.input.charCodeAt(t.pos);if(i===e)break;92===i?(n+=t.input.slice(r,t.pos),n+=t.readEscapedChar(!1),r=t.pos):(o(i)&&t.raise(t.start,"Unterminated string constant"),++t.pos)}return n+=this.input.slice(r,this.pos++),this.finishToken(F.string,n)},pe.readTmplToken=function(){for(var e=this,t="",n=this.pos;;){e.pos>=e.input.length&&e.raise(e.start,"Unterminated template");var r=e.input.charCodeAt(e.pos);if(96===r||36===r&&123===e.input.charCodeAt(e.pos+1))return e.pos===e.start&&e.type===F.template?36===r?(e.pos+=2,e.finishToken(F.dollarBraceL)):(++e.pos,e.finishToken(F.backQuote)):(t+=e.input.slice(n,e.pos),e.finishToken(F.template,t));if(92===r)t+=e.input.slice(n,e.pos),t+=e.readEscapedChar(!0),n=e.pos;else if(o(r)){switch(t+=e.input.slice(n,e.pos),++e.pos,r){case 13:10===e.input.charCodeAt(e.pos)&&++e.pos;case 10:t+="\n";break;default:t+=String.fromCharCode(r)}e.options.locations&&(++e.curLine,e.lineStart=e.pos),n=e.pos}else++e.pos}},pe.readEscapedChar=function(e){var t=this.input.charCodeAt(++this.pos);switch(++this.pos,t){case 110:return"\n";case 114:return"\r";case 120:return String.fromCharCode(this.readHexChar(2));case 117:return d(this.readCodePoint());case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 13:10===this.input.charCodeAt(this.pos)&&++this.pos;case 10:return this.options.locations&&(this.lineStart=this.pos,++this.curLine),"";default:if(t>=48&&t<=55){var n=this.input.substr(this.pos-1,3).match(/^[0-7]+/)[0],r=parseInt(n,8);return r>255&&(n=n.slice(0,-1),r=parseInt(n,8)),"0"!==n&&(this.strict||e)&&this.raise(this.pos-2,"Octal literal in strict mode"), +this.pos+=n.length-1,String.fromCharCode(r)}return String.fromCharCode(t)}},pe.readHexChar=function(e){var t=this.pos,n=this.readInt(16,e);return null===n&&this.raise(t,"Bad character escape sequence"),n},pe.readWord1=function(){var e=this;this.containsEsc=!1;for(var t="",i=!0,s=this.pos,o=this.options.ecmaVersion>=6;this.pos=r)&&o[u](t,i,e),(null==n||t.start==n)&&(null==r||t.end==r)&&s(u,t))throw new h(t,i)}(t,a)}catch(e){if(e instanceof h)return e;throw e}}function o(t,n,r,s,o){r=i(r),s||(s=e.base);try{!function e(t,i,o){var a=o||t.type;if(!(t.start>n||t.end=n&&r(a,t))throw new h(t,i);s[a](t,i,e)}}(t,o)}catch(e){if(e instanceof h)return e;throw e}}function u(t,n,r,s,o){r=i(r),s||(s=e.base);var a;return function e(t,i,o){if(!(t.start>n)){var u=o||t.type;t.end<=n&&(!a||a.node.end=0&&e>1;return t?-n:n}var s=e("./base64");n.encode=function(e){var t,n="",i=r(e);do{t=31&i,i>>>=5,i>0&&(t|=32),n+=s.encode(t)}while(i>0);return n},n.decode=function(e,t,n){var r,o,a=e.length,u=0,c=0;do{if(t>=a)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(o=s.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(32&o),o&=31,u+=o<0?t-u>1?r(u,t,i,s,o,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,i,s,o,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,i,s){if(0===t.length)return-1;var o=r(-1,t.length,e,t,i,s||n.GREATEST_LOWER_BOUND);if(o<0)return-1;for(;o-1>=0&&0===i(t[o],t[o-1],!0);)--o;return o}},{}],21:[function(e,t,n){function r(e,t){var n=e.generatedLine,r=t.generatedLine,i=e.generatedColumn,o=t.generatedColumn;return r>n||r==n&&o>=i||s.compareByGeneratedPositionsInflated(e,t)<=0}function i(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var s=e("./util");i.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},i.prototype.add=function(e){r(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},i.prototype.toArray=function(){return this._sorted||(this._array.sort(s.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=i},{"./util":26}],22:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function i(e,t){return Math.round(e+Math.random()*(t-e))}function s(e,t,n,o){if(n=0){var s=this._originalMappings[i];if(void 0===e.column)for(var o=s.originalLine;s&&s.originalLine===o;)r.push({line:a.getArg(s,"generatedLine",null),column:a.getArg(s,"generatedColumn",null),lastColumn:a.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++i];else for(var c=s.originalColumn;s&&s.originalLine===t&&s.originalColumn==c;)r.push({line:a.getArg(s,"generatedLine",null),column:a.getArg(s,"generatedColumn",null),lastColumn:a.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var t=Object.create(i.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var o=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],h=0,f=o.length;h1&&(n.source=y+i[1],y+=i[1],n.originalLine=f+i[2],f=n.originalLine,n.originalLine+=1,n.originalColumn=d+i[3],d=n.originalColumn,i.length>4&&(n.name=m+i[4],m+=i[4])),E.push(n),"number"==typeof n.originalLine&&w.push(n)}p(E,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=E,p(w,a.compareByOriginalPositions),this.__originalMappings=w},i.prototype._findMapping=function(e,t,n,r,i,s){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,i,s)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[n];if(i.generatedLine===t.generatedLine){var s=a.getArg(i,"source",null);null!==s&&(s=this._sources.at(s),null!=this.sourceRoot&&(s=a.join(this.sourceRoot,s)));var o=a.getArg(i,"name",null);return null!==o&&(o=this._names.at(o)),{source:s,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:o}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},i.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var s=this._originalMappings[i];if(s.source===n.source)return{line:a.getArg(s,"generatedLine",null),column:a.getArg(s,"generatedColumn",null),lastColumn:a.getArg(s,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,o.prototype=Object.create(r.prototype),o.prototype.constructor=r,o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){for(var e=[],t=0;t0&&e.column>=0)||t||n||r)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:r}))},r.prototype._serializeMappings=function(){for(var e,t,n,r,o=0,a=1,u=0,c=0,l=0,p=0,h="",f=this._mappings.toArray(),d=0,y=f.length;d0){if(!s.compareByGeneratedPositionsInflated(t,f[d-1]))continue;e+=","}e+=i.encode(t.generatedColumn-o),o=t.generatedColumn,null!=t.source&&(r=this._sources.indexOf(t.source),e+=i.encode(r-p),p=r,e+=i.encode(t.originalLine-1-c),c=t.originalLine-1,e+=i.encode(t.originalColumn-u),u=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=i.encode(n-l),l=n)),h+=e}return h},r.prototype._generateSourcesContent=function(e,t){return e.map(function(e){if(!this._sourcesContents)return null;null!=t&&(e=s.relative(t,e));var n=s.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null},this)},r.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},r.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=r},{"./array-set":17,"./base64-vlq":18,"./mapping-list":21,"./util":26}],25:[function(e,t,n){function r(e,t,n,r,i){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==n?null:n,this.name=null==i?null:i,this[o]=!0,null!=r&&this.add(r)}var i=e("./source-map-generator").SourceMapGenerator,s=e("./util"),o="$$$isSourceNode$$$";r.fromStringWithSourceMap=function(e,t,n){function i(e,t){if(null===e||void 0===e.source)o.add(t);else{var i=n?s.join(n,e.source):e.source;o.add(new r(e.originalLine,e.originalColumn,i,t,e.name))}}var o=new r,a=e.split(/(\r?\n)/),u=function(){return a.shift()+(a.shift()||"")},c=1,l=0,p=null;return t.eachMapping(function(e){if(null!==p){if(!(c0&&(p&&i(p,u()),o.add(a.join(""))),t.sources.forEach(function(e){var r=t.sourceContentFor(e);null!=r&&(null!=n&&(e=s.join(n,e)),o.setSourceContent(e,r))}),o},r.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[o]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},r.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[o]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},r.prototype.walk=function(e){for(var t,n=0,r=this.children.length;n0){for(t=[],n=0;n=0;l--)o=u[l],"."===o?u.splice(l,1):".."===o?c++:c>0&&(""===o?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),r?(r.path=t,s(r)):t}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=i(t),r=i(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),s(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,s(r);var a="/"===t.charAt(0)?t:o(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=a,s(r)):a}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return h(e)?"$"+e:e}function p(e){return h(e)?e.slice(1):e}function h(e){if(!e)return!1;var t=e.length;if(t<9)return!1 +;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function f(e,t,n){var r=e.source-t.source;return 0!==r?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)||n?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name)}function d(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)||n?r:0!==(r=e.source-t.source)?r:0!==(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name)}function y(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:0!==(n=y(e.source,t.source))?n:0!==(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,0!==n?n:y(e.name,t.name))}n.getArg=r;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=i,n.urlGenerate=s,n.normalize=o,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},n.relative=u;var b=function(){return!("__proto__"in Object.create(null))}();n.toSetString=b?c:l,n.fromSetString=b?c:p,n.compareByOriginalPositions=f,n.compareByGeneratedPositionsDeflated=d,n.compareByGeneratedPositionsInflated=m},{}],27:[function(e,t,n){n.SourceMapGenerator=e("./lib/source-map-generator").SourceMapGenerator,n.SourceMapConsumer=e("./lib/source-map-consumer").SourceMapConsumer,n.SourceNode=e("./lib/source-node").SourceNode},{"./lib/source-map-consumer":23,"./lib/source-map-generator":24,"./lib/source-node":25}],28:[function(e,t,n){t.exports={_args:[[{raw:"nodent@^3.0.17",scope:null,escapedName:"nodent",name:"nodent",rawSpec:"^3.0.17",spec:">=3.0.17 <4.0.0",type:"range"},"/Users/evgenypoberezkin/JSON/ajv-v4"]],_from:"nodent@>=3.0.17 <4.0.0",_id:"nodent@3.0.17",_inCache:!0,_location:"/nodent",_nodeVersion:"6.9.1",_npmOperationalInternal:{host:"packages-12-west.internal.npmjs.com",tmp:"tmp/nodent-3.0.17.tgz_1490780005669_0.5196401283610612"},_npmUser:{name:"matatbread",email:"npm@mailed.me.uk"},_npmVersion:"3.10.8",_phantomChildren:{},_requested:{raw:"nodent@^3.0.17",scope:null,escapedName:"nodent",name:"nodent",rawSpec:"^3.0.17",spec:">=3.0.17 <4.0.0",type:"range"},_requiredBy:["#DEV:/"],_resolved:"https://registry.npmjs.org/nodent/-/nodent-3.0.17.tgz",_shasum:"22df57d33c5346d6acc3722d9d69fa68bff518e4",_shrinkwrap:null,_spec:"nodent@^3.0.17",_where:"/Users/evgenypoberezkin/JSON/ajv-v4",author:{name:"Mat At Bread",email:"nodent@mailed.me.uk"},bin:{nodentjs:"./nodent.js"},bugs:{url:"https://github.com/MatAtBread/nodent/issues"},dependencies:{acorn:">=2.5.2","acorn-es7-plugin":">=1.1.6","nodent-runtime":">=3.0.4",resolve:"^1.2.0","source-map":"^0.5.6"},description:"NoDent - Asynchronous Javascript language extensions",devDependencies:{},directories:{},dist:{shasum:"22df57d33c5346d6acc3722d9d69fa68bff518e4",tarball:"https://registry.npmjs.org/nodent/-/nodent-3.0.17.tgz"},engines:"node >= 0.10.0",gitHead:"1a48bd0e8d0b4df69aa7b4b3cf8483c03c1cfbd5",homepage:"https://github.com/MatAtBread/nodent#readme",keywords:["Javascript","ES7","async","await","language","extensions","Node","callback","generator","Promise","asynchronous"],license:"BSD-2-Clause",main:"nodent.js",maintainers:[{name:"matatbread",email:"npm@mailed.me.uk"}],name:"nodent",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+https://github.com/MatAtBread/nodent.git"},scripts:{cover:"istanbul cover ./nodent.js tests -- --quick --syntax ; open ./coverage/lcov-report/index.html",start:"./nodent.js",test:"cd tests && npm i --prod && cd .. && node --expose-gc ./nodent.js tests --syntax --quick && node --expose-gc ./nodent.js tests --quick --notStrict","test-loader":"cd tests/loader/app && npm test && cd ../../.."},version:"3.0.17"}},{}],29:[function(e,t,n){(function(e){function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r=-1&&!i;s--){var o=s>=0?arguments[s]:e.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(n=o+"/"+n,i="/"===o.charAt(0))}return n=t(r(n.split("/"),function(e){return!!e}),!i).join("/"),(i?"/":"")+n||"."},n.normalize=function(e){var i=n.isAbsolute(e),s="/"===o(e,-1);return e=t(r(e.split("/"),function(e){return!!e}),!i).join("/"),e||i||(e="."),e&&s&&(e+="/"),(i?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(r(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function r(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var i=r(e.split("/")),s=r(t.split("/")),o=Math.min(i.length,s.length),a=o,u=0;u1)for(var n=1;n=(t[n]||0))return!0;return!1}(o))for(var a=0;a"))}return o.promises||o.es7||o.generators||o.engine?((o.promises||o.es7)&&o.generators&&(n("No valid 'use nodent' directive, assumed -es7 mode"),o=I.es7),(o.generators||o.engine)&&(o.promises=!0),o.promises&&(o.es7=!0),o):null}function y(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),"#!"===e.substring(0,2)&&(e="//"+e),e}function m(e){var t;return t=e instanceof i?e:new i(e.toString(),"binary"),t.toString("base64")}function g(e,t){return t=t||e.log,function(n,r,i){var s=y(N.readFileSync(r,"utf8")),o=e.parse(s,r,i);i=i||d(o.ast,t,r),e.asynchronize(o,void 0,i,t),e.prettyPrint(o,i),n._compile(o.code,o.filename)}}function v(e){return e=e||q,function(t,n,r){if(Array.isArray(n)){var i=n;n=function(e,t){return i.indexOf(e)>=0}}else n=n||function(e,t){return!(e.match(/Sync$/)&&e.replace(/Sync$/,"")in t)};r||(r="");var s=Object.create(t);for(var o in s)!function(){var i=o;try{"function"!=typeof t[i]||s[i+r]&&s[i+r].isAsync||!n(i,s)||(s[i+r]=function(){var n=Array.prototype.slice.call(arguments);return new e(function(e,r){var s=function(t,n){if(t)return r(t);switch(arguments.length){case 0:return e();case 2:return e(n);default:return e(Array.prototype.slice.call(arguments,1))}};n.length>t[i].length?n.push(s):n[t[i].length-1]=s;t[i].apply(t,n)})},s[i+r].isAsync=!0)}catch(e){}}();return s.super=t,s}}function b(t,n){var r=t.filename.split("/"),i=r.pop(),s=T(t.ast,n&&n.sourcemap?{map:{startLine:n.mapStartLine||0,file:i+"(original)",sourceMapRoot:r.join("/"),sourceContent:t.origCode}}:null,t.origCode);if(n&&n.sourcemap)try{var o="",a=s.map.toJSON();if(a){var u=e("source-map").SourceMapConsumer;t.sourcemap=a,P[t.filename]={map:a,smc:new u(a)},o="\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+m(JSON.stringify(a))+"\n"}t.code=s.code+o}catch(e){t.code=s}else t.code=s;return t}function x(e,t,n,r){"object"==typeof n&&void 0===r&&(r=n);var i={origCode:e.toString(),filename:t};try{return i.ast=F.parse(i.origCode,r&&r.parser),r.babelTree&&F.treeWalker(i.ast,function(e,t,n){"Literal"===e.type?n[0].replace($.babelLiteralNode(e.value)):"Property"===e.type&&("ClassBody"===n[0].parent.type?e.type="ClassProperty":e.type="ObjectProperty"),t()}),i}catch(e){if(e instanceof SyntaxError){var s=i.origCode.substr(e.pos-e.loc.column);s=s.split("\n")[0],e.message+=" "+t+" (nodent)\n"+s+"\n"+s.replace(/[\S ]/g,"-").substring(0,e.loc.column)+"^",e.stack=""}throw e}}function w(t,n){n=n||{};var r=t+"|"+Object.keys(n).sort().reduce(function(e,t){return e+t+JSON.stringify(n[t])},"");return this.covers[r]||(t.indexOf("/")>=0?this.covers[r]=e(t):this.covers[r]=e(c+"/covers/"+t)),this.covers[r](this,n)}function E(e,t,n,r){"object"==typeof n&&void 0===r&&(r=n),r=r||{};for(var i in R)i in r||(r[i]=R[i]);var s=this.parse(e,t,null,r);return this.asynchronize(s,null,r,this.log||h),this.prettyPrint(s,r),s}function S(t,n,r){var i={},s=this;n||(n=/\.njs$/),r?r.compiler||(r.compiler={}):r={compiler:{}};var o=l([B,r.compiler]);return function(a,u,c){function l(e){u.statusCode=500,u.write(e.toString()),u.end()}if(i[a.url])return u.setHeader("Content-Type",i[a.url].contentType),r.setHeaders&&r.setHeaders(u),u.write(i[a.url].output),void u.end();if(!(a.url.match(n)||r.htmlScriptRegex&&a.url.match(r.htmlScriptRegex)))return c&&c();var p=t+a.url;if(r.extensions&&!N.existsSync(p))for(var h=0;h …"+n.source+":"+n.line+":"+n.column+(e.getFunctionName()?")":"")}}return"\n at "+e}return e+t.map(n).join("")}function _(e){var t={};t[R.$asyncbind]={value:D,writable:!0,enumerable:!1,configurable:!0},t[R.$asyncspawn]={value:V,writable:!0,enumerable:!1,configurable:!0};try{Object.defineProperties(Function.prototype,t)}catch(t){e.log("Function prototypes already assigned: ",t.messsage)}R[R.$error]in r||(r[R[R.$error]]=p),e.augmentObject&&Object.defineProperties(Object.prototype,{asyncify:{value:function(e,t,n){return v(e)(this,t,n)},writable:!0,configurable:!0},isThenable:{value:function(){return q.isThenable(this)},writable:!0,configurable:!0}}),Object[R.$makeThenable]=q.resolve}function C(t){function n(e,t){e=e.split("."),t=t.split(".");for(var n=0;n<3;n++){if(e[n]t[n])return 1}return 0}function r(i,s){if(!s.match(/nodent\/nodent\.js$/)){if(s.match(/node_modules\/nodent\/.*\.js$/))return L(i,s);for(var u=0;u=3&&function(){function t(e,t){try{var n,s;if(o.fromast){if(e=JSON.parse(e),n={origCode:"",filename:i,ast:e},!(s=d(e,a.log))){var u=o.use?'"use nodent-'+o.use+'";':'"use nodent";';s=d(u,a.log),console.warn("/* "+i+": No 'use nodent*' directive, assumed "+u+" */")}}else s=d(o.use?'"use nodent-'+o.use+'";':e,a.log),s||(s=d('"use nodent";',a.log),o.dest||console.warn("/* "+i+": 'use nodent*' directive missing/ignored, assumed 'use nodent;' */")),n=a.parse(e,i,s);if(o.parseast||o.pretty||a.asynchronize(n,void 0,s,a.log),a.prettyPrint(n,s),o.out||o.pretty||o.dest){if(o.dest&&!t)throw new Error("Can't write unknown file to "+o.dest);var c="";o.runtime&&(c+="Function.prototype.$asyncbind = "+Function.prototype.$asyncbind.toString()+";\n",c+="global.$error = global.$error || "+r.$error.toString()+";\n"),c+=n.code,t&&o.dest?(N.writeFileSync(o.dest+t,c),console.log("Compiled",o.dest+t)):console.log(c)}(o.minast||o.parseast)&&console.log(JSON.stringify(n.ast,function(e,t){return"$"===e[0]||e.match(/^(start|end|loc)$/)?void 0:t},2,null)),o.ast&&console.log(JSON.stringify(n.ast,function(e,t){return"$"===e[0]?void 0:t},0)),o.exec&&new Function(n.code)()}catch(e){console.error(e)}}var i,s=e("path"),o=(n.env.NODENT_OPTS&&JSON.parse(n.env.NODENT_OPTS),function(e){for(var t=[],r=e||2;r<]/g}},{}],2:[function(e,t,r){"use strict";function n(){var e={modifiers:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},colors:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39]},bgColors:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49]}};return e.colors.grey=e.colors.gray,Object.keys(e).forEach(function(t){var r=e[t];Object.keys(r).forEach(function(t){var n=r[t];e[t]=r[t]={open:"["+n[0]+"m",close:"["+n[1]+"m"}}),Object.defineProperty(e,t,{value:r,enumerable:!1})}),e}Object.defineProperty(t,"exports",{enumerable:!0,get:n})},{}],3:[function(e,t,r){(function(r){"use strict";function n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,s=Math.min(r,n);i=0;o--)if(u[o]!==l[o])return!1;for(o=u.length-1;o>=0;o--)if(a=u[o],!f(e[a],t[a],r,n))return!1;return!0}function y(e,t,r){f(e,t,!0)&&p(e,t,r,"notDeepStrictEqual",y)}function g(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function b(e){var t;try{e()}catch(e){t=e}return t}function v(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=b(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&p(i,r,"Missing expected exception"+n);var s="string"==typeof n,a=!e&&x.isError(i),o=!e&&i&&!r;if((a&&s&&g(i,r)||o)&&p(i,r,"Got unwanted exception"+n),e&&i&&r&&!g(i,r)||!e&&i)throw i}var x=e("util/"),E=Object.prototype.hasOwnProperty,A=Array.prototype.slice,D=function(){return"foo"===function(){}.name}(),C=t.exports=h,S=/\s*function\s+([^\(\s]*)\s*/;C.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=c(this),this.generatedMessage=!0);var t=e.stackStartFunction||p;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var r=new Error;if(r.stack){var n=r.stack,i=o(t),s=n.indexOf("\n"+i);if(s>=0){var a=n.indexOf("\n",s+1);n=n.substring(a+1)}this.stack=n}}},x.inherits(C.AssertionError,Error),C.fail=p,C.ok=h,C.equal=function(e,t,r){e!=t&&p(e,t,r,"==",C.equal)},C.notEqual=function(e,t,r){e==t&&p(e,t,r,"!=",C.notEqual)},C.deepEqual=function(e,t,r){f(e,t,!1)||p(e,t,r,"deepEqual",C.deepEqual)},C.deepStrictEqual=function(e,t,r){f(e,t,!0)||p(e,t,r,"deepStrictEqual",C.deepStrictEqual)},C.notDeepEqual=function(e,t,r){f(e,t,!1)&&p(e,t,r,"notDeepEqual",C.notDeepEqual)},C.notDeepStrictEqual=y,C.strictEqual=function(e,t,r){e!==t&&p(e,t,r,"===",C.strictEqual)},C.notStrictEqual=function(e,t,r){e===t&&p(e,t,r,"!==",C.notStrictEqual)},C.throws=function(e,t,r){v(!0,e,t,r)},C.doesNotThrow=function(e,t,r){v(!1,e,t,r)},C.ifError=function(e){if(e)throw e};var _=Object.keys||function(e){var t=[];for(var r in e)E.call(e,r)&&t.push(r);return t}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"util/":601}],4:[function(e,t,r){t.exports=function(t){t.use(e("./es7"));var r=t.use(e("../lib/types")),n=t.use(e("../lib/shared")).defaults,i=r.Type.def,s=r.Type.or;i("Noop").bases("Node").build(),i("DoExpression").bases("Expression").build("body").field("body",[i("Statement")]),i("Super").bases("Expression").build(),i("BindExpression").bases("Expression").build("object","callee").field("object",s(i("Expression"),null)).field("callee",i("Expression")),i("Decorator").bases("Node").build("expression").field("expression",i("Expression")),i("Property").field("decorators",s([i("Decorator")],null),n.null),i("MethodDefinition").field("decorators",s([i("Decorator")],null),n.null),i("MetaProperty").bases("Expression").build("meta","property").field("meta",i("Identifier")).field("property",i("Identifier")),i("ParenthesizedExpression").bases("Expression").build("expression").field("expression",i("Expression")),i("ImportSpecifier").bases("ModuleSpecifier").build("imported","local").field("imported",i("Identifier")),i("ImportDefaultSpecifier").bases("ModuleSpecifier").build("local"),i("ImportNamespaceSpecifier").bases("ModuleSpecifier").build("local"),i("ExportDefaultDeclaration").bases("Declaration").build("declaration").field("declaration",s(i("Declaration"),i("Expression"))),i("ExportNamedDeclaration").bases("Declaration").build("declaration","specifiers","source").field("declaration",s(i("Declaration"),null)).field("specifiers",[i("ExportSpecifier")],n.emptyArray).field("source",s(i("Literal"),null),n.null),i("ExportSpecifier").bases("ModuleSpecifier").build("local","exported").field("exported",i("Identifier")),i("ExportNamespaceSpecifier").bases("Specifier").build("exported").field("exported",i("Identifier")),i("ExportDefaultSpecifier").bases("Specifier").build("exported").field("exported",i("Identifier")),i("ExportAllDeclaration").bases("Declaration").build("exported","source").field("exported",s(i("Identifier"),null)).field("source",i("Literal")),i("CommentBlock").bases("Comment").build("value","leading","trailing"),i("CommentLine").bases("Comment").build("value","leading","trailing")}},{"../lib/shared":20,"../lib/types":21,"./es7":9}],5:[function(e,t,r){t.exports=function(t){t.use(e("./babel")),t.use(e("./flow"));var r=t.use(e("../lib/types")),n=t.use(e("../lib/shared")).defaults,i=r.Type.def,s=r.Type.or;i("Directive").bases("Node").build("value").field("value",i("DirectiveLiteral")),i("DirectiveLiteral").bases("Node","Expression").build("value").field("value",String,n["use strict"]),i("BlockStatement").bases("Statement").build("body").field("body",[i("Statement")]).field("directives",[i("Directive")],n.emptyArray),i("Program").bases("Node").build("body").field("body",[i("Statement")]).field("directives",[i("Directive")],n.emptyArray),i("StringLiteral").bases("Literal").build("value").field("value",String),i("NumericLiteral").bases("Literal").build("value").field("value",Number),i("NullLiteral").bases("Literal").build(),i("BooleanLiteral").bases("Literal").build("value").field("value",Boolean),i("RegExpLiteral").bases("Literal").build("pattern","flags").field("pattern",String).field("flags",String);var a=s(i("Property"),i("ObjectMethod"),i("ObjectProperty"),i("SpreadProperty"));i("ObjectExpression").bases("Expression").build("properties").field("properties",[a]),i("ObjectMethod").bases("Node","Function").build("kind","key","params","body","computed").field("kind",s("method","get","set")).field("key",s(i("Literal"),i("Identifier"),i("Expression"))).field("params",[i("Pattern")]).field("body",i("BlockStatement")).field("computed",Boolean,n.false).field("generator",Boolean,n.false).field("async",Boolean,n.false).field("decorators",s([i("Decorator")],null),n.null),i("ObjectProperty").bases("Node").build("key","value").field("key",s(i("Literal"),i("Identifier"),i("Expression"))).field("value",s(i("Expression"),i("Pattern"))).field("computed",Boolean,n.false);var o=s(i("MethodDefinition"),i("VariableDeclarator"),i("ClassPropertyDefinition"),i("ClassProperty"),i("ClassMethod"));i("ClassBody").bases("Declaration").build("body").field("body",[o]),i("ClassMethod").bases("Declaration","Function").build("kind","key","params","body","computed","static").field("kind",s("get","set","method","constructor")).field("key",s(i("Literal"),i("Identifier"),i("Expression"))).field("params",[i("Pattern")]).field("body",i("BlockStatement")).field("computed",Boolean,n.false).field("static",Boolean,n.false).field("generator",Boolean,n.false).field("async",Boolean,n.false).field("decorators",s([i("Decorator")],null),n.null);var u=s(i("Property"),i("PropertyPattern"),i("SpreadPropertyPattern"),i("SpreadProperty"),i("ObjectProperty"),i("RestProperty"));i("ObjectPattern").bases("Pattern").build("properties").field("properties",[u]).field("decorators",s([i("Decorator")],null),n.null),i("SpreadProperty").bases("Node").build("argument").field("argument",i("Expression")),i("RestProperty").bases("Node").build("argument").field("argument",i("Expression")),i("ForAwaitStatement").bases("Statement").build("left","right","body").field("left",s(i("VariableDeclaration"),i("Expression"))).field("right",i("Expression")).field("body",i("Statement")),i("Import").bases("Expression").build()}},{"../lib/shared":20,"../lib/types":21,"./babel":4,"./flow":11}],6:[function(e,t,r){t.exports=function(t){var r=t.use(e("../lib/types")),n=r.Type,i=n.def,s=n.or,a=t.use(e("../lib/shared")),o=a.defaults,u=a.geq;i("Printable").field("loc",s(i("SourceLocation"),null),o.null,!0),i("Node").bases("Printable").field("type",String).field("comments",s([i("Comment")],null),o.null,!0),i("SourceLocation").build("start","end","source").field("start",i("Position")).field("end",i("Position")).field("source",s(String,null),o.null),i("Position").build("line","column").field("line",u(1)).field("column",u(0)),i("File").bases("Node").build("program","name").field("program",i("Program")).field("name",s(String,null),o.null),i("Program").bases("Node").build("body").field("body",[i("Statement")]),i("Function").bases("Node").field("id",s(i("Identifier"),null),o.null).field("params",[i("Pattern")]).field("body",i("BlockStatement")),i("Statement").bases("Node"),i("EmptyStatement").bases("Statement").build(),i("BlockStatement").bases("Statement").build("body").field("body",[i("Statement")]),i("ExpressionStatement").bases("Statement").build("expression").field("expression",i("Expression")),i("IfStatement").bases("Statement").build("test","consequent","alternate").field("test",i("Expression")).field("consequent",i("Statement")).field("alternate",s(i("Statement"),null),o.null),i("LabeledStatement").bases("Statement").build("label","body").field("label",i("Identifier")).field("body",i("Statement")),i("BreakStatement").bases("Statement").build("label").field("label",s(i("Identifier"),null),o.null),i("ContinueStatement").bases("Statement").build("label").field("label",s(i("Identifier"),null),o.null),i("WithStatement").bases("Statement").build("object","body").field("object",i("Expression")).field("body",i("Statement")),i("SwitchStatement").bases("Statement").build("discriminant","cases","lexical").field("discriminant",i("Expression")).field("cases",[i("SwitchCase")]).field("lexical",Boolean,o.false),i("ReturnStatement").bases("Statement").build("argument").field("argument",s(i("Expression"),null)),i("ThrowStatement").bases("Statement").build("argument").field("argument",i("Expression")),i("TryStatement").bases("Statement").build("block","handler","finalizer").field("block",i("BlockStatement")).field("handler",s(i("CatchClause"),null),function(){return this.handlers&&this.handlers[0]||null}).field("handlers",[i("CatchClause")],function(){return this.handler?[this.handler]:[]},!0).field("guardedHandlers",[i("CatchClause")],o.emptyArray).field("finalizer",s(i("BlockStatement"),null),o.null),i("CatchClause").bases("Node").build("param","guard","body").field("param",i("Pattern")).field("guard",s(i("Expression"),null),o.null).field("body",i("BlockStatement")),i("WhileStatement").bases("Statement").build("test","body").field("test",i("Expression")).field("body",i("Statement")),i("DoWhileStatement").bases("Statement").build("body","test").field("body",i("Statement")).field("test",i("Expression")),i("ForStatement").bases("Statement").build("init","test","update","body").field("init",s(i("VariableDeclaration"),i("Expression"),null)).field("test",s(i("Expression"),null)).field("update",s(i("Expression"),null)).field("body",i("Statement")),i("ForInStatement").bases("Statement").build("left","right","body").field("left",s(i("VariableDeclaration"),i("Expression"))).field("right",i("Expression")).field("body",i("Statement")),i("DebuggerStatement").bases("Statement").build(),i("Declaration").bases("Statement"),i("FunctionDeclaration").bases("Function","Declaration").build("id","params","body").field("id",i("Identifier")),i("FunctionExpression").bases("Function","Expression").build("id","params","body"),i("VariableDeclaration").bases("Declaration").build("kind","declarations").field("kind",s("var","let","const")).field("declarations",[i("VariableDeclarator")]),i("VariableDeclarator").bases("Node").build("id","init").field("id",i("Pattern")).field("init",s(i("Expression"),null)),i("Expression").bases("Node","Pattern"),i("ThisExpression").bases("Expression").build(),i("ArrayExpression").bases("Expression").build("elements").field("elements",[s(i("Expression"),null)]),i("ObjectExpression").bases("Expression").build("properties").field("properties",[i("Property")]),i("Property").bases("Node").build("kind","key","value").field("kind",s("init","get","set")).field("key",s(i("Literal"),i("Identifier"))).field("value",i("Expression")),i("SequenceExpression").bases("Expression").build("expressions").field("expressions",[i("Expression")]);var l=s("-","+","!","~","typeof","void","delete");i("UnaryExpression").bases("Expression").build("operator","argument","prefix").field("operator",l).field("argument",i("Expression")).field("prefix",Boolean,o.true);var c=s("==","!=","===","!==","<","<=",">",">=","<<",">>",">>>","+","-","*","/","%","&","|","^","in","instanceof","..");i("BinaryExpression").bases("Expression").build("operator","left","right").field("operator",c).field("left",i("Expression")).field("right",i("Expression"));var p=s("=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","|=","^=","&=");i("AssignmentExpression").bases("Expression").build("operator","left","right").field("operator",p).field("left",i("Pattern")).field("right",i("Expression"));var h=s("++","--");i("UpdateExpression").bases("Expression").build("operator","argument","prefix").field("operator",h).field("argument",i("Expression")).field("prefix",Boolean);var f=s("||","&&");i("LogicalExpression").bases("Expression").build("operator","left","right").field("operator",f).field("left",i("Expression")).field("right",i("Expression")),i("ConditionalExpression").bases("Expression").build("test","consequent","alternate").field("test",i("Expression")).field("consequent",i("Expression")).field("alternate",i("Expression")),i("NewExpression").bases("Expression").build("callee","arguments").field("callee",i("Expression")).field("arguments",[i("Expression")]),i("CallExpression").bases("Expression").build("callee","arguments").field("callee",i("Expression")).field("arguments",[i("Expression")]),i("MemberExpression").bases("Expression").build("object","property","computed").field("object",i("Expression")).field("property",s(i("Identifier"),i("Expression"))).field("computed",Boolean,function(){var e=this.property.type;return"Literal"===e||"MemberExpression"===e||"BinaryExpression"===e}),i("Pattern").bases("Node"),i("SwitchCase").bases("Node").build("test","consequent").field("test",s(i("Expression"),null)).field("consequent",[i("Statement")]),i("Identifier").bases("Node","Expression","Pattern").build("name").field("name",String),i("Literal").bases("Node","Expression").build("value").field("value",s(String,Boolean,null,Number,RegExp)).field("regex",s({pattern:String,flags:String},null),function(){if(this.value instanceof RegExp){var e="";return this.value.ignoreCase&&(e+="i"),this.value.multiline&&(e+="m"),this.value.global&&(e+="g"),{pattern:this.value.source,flags:e}}return null}),i("Comment").bases("Printable").field("value",String).field("leading",Boolean,o.true).field("trailing",Boolean,o.false)}},{"../lib/shared":20,"../lib/types":21}],7:[function(e,t,r){t.exports=function(t){t.use(e("./core"));var r=t.use(e("../lib/types")),n=r.Type.def,i=r.Type.or;n("XMLDefaultDeclaration").bases("Declaration").field("namespace",n("Expression")),n("XMLAnyName").bases("Expression"),n("XMLQualifiedIdentifier").bases("Expression").field("left",i(n("Identifier"),n("XMLAnyName"))).field("right",i(n("Identifier"),n("Expression"))).field("computed",Boolean),n("XMLFunctionQualifiedIdentifier").bases("Expression").field("right",i(n("Identifier"),n("Expression"))).field("computed",Boolean),n("XMLAttributeSelector").bases("Expression").field("attribute",n("Expression")),n("XMLFilterExpression").bases("Expression").field("left",n("Expression")).field("right",n("Expression")),n("XMLElement").bases("XML","Expression").field("contents",[n("XML")]),n("XMLList").bases("XML","Expression").field("contents",[n("XML")]),n("XML").bases("Node"),n("XMLEscape").bases("XML").field("expression",n("Expression")),n("XMLText").bases("XML").field("text",String),n("XMLStartTag").bases("XML").field("contents",[n("XML")]),n("XMLEndTag").bases("XML").field("contents",[n("XML")]),n("XMLPointTag").bases("XML").field("contents",[n("XML")]),n("XMLName").bases("XML").field("contents",i(String,[n("XML")])),n("XMLAttribute").bases("XML").field("value",String),n("XMLCdata").bases("XML").field("contents",String),n("XMLComment").bases("XML").field("contents",String),n("XMLProcessingInstruction").bases("XML").field("target",String).field("contents",i(String,null))}},{"../lib/types":21,"./core":6}],8:[function(e,t,r){t.exports=function(t){t.use(e("./core"));var r=t.use(e("../lib/types")),n=r.Type.def,i=r.Type.or,s=t.use(e("../lib/shared")).defaults;n("Function").field("generator",Boolean,s.false).field("expression",Boolean,s.false).field("defaults",[i(n("Expression"),null)],s.emptyArray).field("rest",i(n("Identifier"),null),s.null),n("RestElement").bases("Pattern").build("argument").field("argument",n("Pattern")),n("SpreadElementPattern").bases("Pattern").build("argument").field("argument",n("Pattern")),n("FunctionDeclaration").build("id","params","body","generator","expression"),n("FunctionExpression").build("id","params","body","generator","expression"),n("ArrowFunctionExpression").bases("Function","Expression").build("params","body","expression").field("id",null,s.null).field("body",i(n("BlockStatement"),n("Expression"))).field("generator",!1,s.false),n("YieldExpression").bases("Expression").build("argument","delegate").field("argument",i(n("Expression"),null)).field("delegate",Boolean,s.false),n("GeneratorExpression").bases("Expression").build("body","blocks","filter").field("body",n("Expression")).field("blocks",[n("ComprehensionBlock")]).field("filter",i(n("Expression"),null)),n("ComprehensionExpression").bases("Expression").build("body","blocks","filter").field("body",n("Expression")).field("blocks",[n("ComprehensionBlock")]).field("filter",i(n("Expression"),null)),n("ComprehensionBlock").bases("Node").build("left","right","each").field("left",n("Pattern")).field("right",n("Expression")).field("each",Boolean),n("Property").field("key",i(n("Literal"),n("Identifier"),n("Expression"))).field("value",i(n("Expression"),n("Pattern"))).field("method",Boolean,s.false).field("shorthand",Boolean,s.false).field("computed",Boolean,s.false),n("PropertyPattern").bases("Pattern").build("key","pattern").field("key",i(n("Literal"),n("Identifier"),n("Expression"))).field("pattern",n("Pattern")).field("computed",Boolean,s.false),n("ObjectPattern").bases("Pattern").build("properties").field("properties",[i(n("PropertyPattern"),n("Property"))]),n("ArrayPattern").bases("Pattern").build("elements").field("elements",[i(n("Pattern"),null)]),n("MethodDefinition").bases("Declaration").build("kind","key","value","static").field("kind",i("constructor","method","get","set")).field("key",i(n("Literal"),n("Identifier"),n("Expression"))).field("value",n("Function")).field("computed",Boolean,s.false).field("static",Boolean,s.false),n("SpreadElement").bases("Node").build("argument").field("argument",n("Expression")),n("ArrayExpression").field("elements",[i(n("Expression"),n("SpreadElement"),n("RestElement"),null)]),n("NewExpression").field("arguments",[i(n("Expression"),n("SpreadElement"))]),n("CallExpression").field("arguments",[i(n("Expression"),n("SpreadElement"))]),n("AssignmentPattern").bases("Pattern").build("left","right").field("left",n("Pattern")).field("right",n("Expression"));var a=i(n("MethodDefinition"),n("VariableDeclarator"),n("ClassPropertyDefinition"),n("ClassProperty"));n("ClassProperty").bases("Declaration").build("key").field("key",i(n("Literal"),n("Identifier"),n("Expression"))).field("computed",Boolean,s.false),n("ClassPropertyDefinition").bases("Declaration").build("definition").field("definition",a),n("ClassBody").bases("Declaration").build("body").field("body",[a]),n("ClassDeclaration").bases("Declaration").build("id","body","superClass").field("id",i(n("Identifier"),null)).field("body",n("ClassBody")).field("superClass",i(n("Expression"),null),s.null),n("ClassExpression").bases("Expression").build("id","body","superClass").field("id",i(n("Identifier"),null),s.null).field("body",n("ClassBody")).field("superClass",i(n("Expression"),null),s.null).field("implements",[n("ClassImplements")],s.emptyArray),n("ClassImplements").bases("Node").build("id").field("id",n("Identifier")).field("superClass",i(n("Expression"),null),s.null),n("Specifier").bases("Node"),n("ModuleSpecifier").bases("Specifier").field("local",i(n("Identifier"),null),s.null).field("id",i(n("Identifier"),null),s.null).field("name",i(n("Identifier"),null),s.null),n("TaggedTemplateExpression").bases("Expression").build("tag","quasi").field("tag",n("Expression")).field("quasi",n("TemplateLiteral")),n("TemplateLiteral").bases("Expression").build("quasis","expressions").field("quasis",[n("TemplateElement")]).field("expressions",[n("Expression")]),n("TemplateElement").bases("Node").build("value","tail").field("value",{cooked:String,raw:String}).field("tail",Boolean)}},{"../lib/shared":20,"../lib/types":21,"./core":6}],9:[function(e,t,r){t.exports=function(t){t.use(e("./es6"));var r=t.use(e("../lib/types")),n=r.Type.def,i=r.Type.or,s=(r.builtInTypes,t.use(e("../lib/shared")).defaults);n("Function").field("async",Boolean,s.false),n("SpreadProperty").bases("Node").build("argument").field("argument",n("Expression")),n("ObjectExpression").field("properties",[i(n("Property"),n("SpreadProperty"))]),n("SpreadPropertyPattern").bases("Pattern").build("argument").field("argument",n("Pattern")),n("ObjectPattern").field("properties",[i(n("Property"),n("PropertyPattern"),n("SpreadPropertyPattern"))]),n("AwaitExpression").bases("Expression").build("argument","all").field("argument",i(n("Expression"),null)).field("all",Boolean,s.false)}},{"../lib/shared":20,"../lib/types":21,"./es6":8}],10:[function(e,t,r){t.exports=function(t){t.use(e("./es7"));var r=t.use(e("../lib/types")),n=t.use(e("../lib/shared")).defaults,i=r.Type.def,s=r.Type.or;i("VariableDeclaration").field("declarations",[s(i("VariableDeclarator"),i("Identifier"))]),i("Property").field("value",s(i("Expression"),i("Pattern"))),i("ArrayPattern").field("elements",[s(i("Pattern"),i("SpreadElement"),null)]),i("ObjectPattern").field("properties",[s(i("Property"),i("PropertyPattern"),i("SpreadPropertyPattern"),i("SpreadProperty"))]),i("ExportSpecifier").bases("ModuleSpecifier").build("id","name"),i("ExportBatchSpecifier").bases("Specifier").build(),i("ImportSpecifier").bases("ModuleSpecifier").build("id","name"),i("ImportNamespaceSpecifier").bases("ModuleSpecifier").build("id"),i("ImportDefaultSpecifier").bases("ModuleSpecifier").build("id"),i("ExportDeclaration").bases("Declaration").build("default","declaration","specifiers","source").field("default",Boolean).field("declaration",s(i("Declaration"),i("Expression"),null)).field("specifiers",[s(i("ExportSpecifier"),i("ExportBatchSpecifier"))],n.emptyArray).field("source",s(i("Literal"),null),n.null),i("ImportDeclaration").bases("Declaration").build("specifiers","source","importKind").field("specifiers",[s(i("ImportSpecifier"),i("ImportNamespaceSpecifier"),i("ImportDefaultSpecifier"))],n.emptyArray).field("source",i("Literal")).field("importKind",s("value","type"),function(){return"value"}),i("Block").bases("Comment").build("value","leading","trailing"),i("Line").bases("Comment").build("value","leading","trailing")}},{"../lib/shared":20,"../lib/types":21,"./es7":9}],11:[function(e,t,r){t.exports=function(t){t.use(e("./es7"));var r=t.use(e("../lib/types")),n=r.Type.def,i=r.Type.or,s=t.use(e("../lib/shared")).defaults;n("Type").bases("Node"),n("AnyTypeAnnotation").bases("Type").build(),n("EmptyTypeAnnotation").bases("Type").build(),n("MixedTypeAnnotation").bases("Type").build(),n("VoidTypeAnnotation").bases("Type").build(),n("NumberTypeAnnotation").bases("Type").build(),n("NumberLiteralTypeAnnotation").bases("Type").build("value","raw").field("value",Number).field("raw",String),n("NumericLiteralTypeAnnotation").bases("Type").build("value","raw").field("value",Number).field("raw",String),n("StringTypeAnnotation").bases("Type").build(),n("StringLiteralTypeAnnotation").bases("Type").build("value","raw").field("value",String).field("raw",String),n("BooleanTypeAnnotation").bases("Type").build(),n("BooleanLiteralTypeAnnotation").bases("Type").build("value","raw").field("value",Boolean).field("raw",String),n("TypeAnnotation").bases("Node").build("typeAnnotation").field("typeAnnotation",n("Type")),n("NullableTypeAnnotation").bases("Type").build("typeAnnotation").field("typeAnnotation",n("Type")),n("NullLiteralTypeAnnotation").bases("Type").build(),n("NullTypeAnnotation").bases("Type").build(),n("ThisTypeAnnotation").bases("Type").build(),n("ExistsTypeAnnotation").bases("Type").build(),n("ExistentialTypeParam").bases("Type").build(),n("FunctionTypeAnnotation").bases("Type").build("params","returnType","rest","typeParameters").field("params",[n("FunctionTypeParam")]).field("returnType",n("Type")).field("rest",i(n("FunctionTypeParam"),null)).field("typeParameters",i(n("TypeParameterDeclaration"),null)),n("FunctionTypeParam").bases("Node").build("name","typeAnnotation","optional").field("name",n("Identifier")).field("typeAnnotation",n("Type")).field("optional",Boolean),n("ArrayTypeAnnotation").bases("Type").build("elementType").field("elementType",n("Type")),n("ObjectTypeAnnotation").bases("Type").build("properties","indexers","callProperties").field("properties",[n("ObjectTypeProperty")]).field("indexers",[n("ObjectTypeIndexer")],s.emptyArray).field("callProperties",[n("ObjectTypeCallProperty")],s.emptyArray).field("exact",Boolean,s.false),n("ObjectTypeProperty").bases("Node").build("key","value","optional").field("key",i(n("Literal"),n("Identifier"))).field("value",n("Type")).field("optional",Boolean).field("variance",i("plus","minus",null),s.null),n("ObjectTypeIndexer").bases("Node").build("id","key","value").field("id",n("Identifier")).field("key",n("Type")).field("value",n("Type")).field("variance",i("plus","minus",null),s.null),n("ObjectTypeCallProperty").bases("Node").build("value").field("value",n("FunctionTypeAnnotation")).field("static",Boolean,s.false),n("QualifiedTypeIdentifier").bases("Node").build("qualification","id").field("qualification",i(n("Identifier"),n("QualifiedTypeIdentifier"))).field("id",n("Identifier")),n("GenericTypeAnnotation").bases("Type").build("id","typeParameters").field("id",i(n("Identifier"),n("QualifiedTypeIdentifier"))).field("typeParameters",i(n("TypeParameterInstantiation"),null)),n("MemberTypeAnnotation").bases("Type").build("object","property").field("object",n("Identifier")).field("property",i(n("MemberTypeAnnotation"),n("GenericTypeAnnotation"))),n("UnionTypeAnnotation").bases("Type").build("types").field("types",[n("Type")]),n("IntersectionTypeAnnotation").bases("Type").build("types").field("types",[n("Type")]),n("TypeofTypeAnnotation").bases("Type").build("argument").field("argument",n("Type")),n("Identifier").field("typeAnnotation",i(n("TypeAnnotation"),null),s.null),n("TypeParameterDeclaration").bases("Node").build("params").field("params",[n("TypeParameter")]),n("TypeParameterInstantiation").bases("Node").build("params").field("params",[n("Type")]),n("TypeParameter").bases("Type").build("name","variance","bound").field("name",String).field("variance",i("plus","minus",null),s.null).field("bound",i(n("TypeAnnotation"),null),s.null),n("Function").field("returnType",i(n("TypeAnnotation"),null),s.null).field("typeParameters",i(n("TypeParameterDeclaration"),null),s.null),n("ClassProperty").build("key","value","typeAnnotation","static").field("value",i(n("Expression"),null)).field("typeAnnotation",i(n("TypeAnnotation"),null)).field("static",Boolean,s.false).field("variance",i("plus","minus",null),s.null),n("ClassImplements").field("typeParameters",i(n("TypeParameterInstantiation"),null),s.null),n("InterfaceDeclaration").bases("Declaration").build("id","body","extends").field("id",n("Identifier")).field("typeParameters",i(n("TypeParameterDeclaration"),null),s.null).field("body",n("ObjectTypeAnnotation")).field("extends",[n("InterfaceExtends")]),n("DeclareInterface").bases("InterfaceDeclaration").build("id","body","extends"),n("InterfaceExtends").bases("Node").build("id").field("id",n("Identifier")).field("typeParameters",i(n("TypeParameterInstantiation"),null)),n("TypeAlias").bases("Declaration").build("id","typeParameters","right").field("id",n("Identifier")).field("typeParameters",i(n("TypeParameterDeclaration"),null)).field("right",n("Type")),n("DeclareTypeAlias").bases("TypeAlias").build("id","typeParameters","right"), +n("TypeCastExpression").bases("Expression").build("expression","typeAnnotation").field("expression",n("Expression")).field("typeAnnotation",n("TypeAnnotation")),n("TupleTypeAnnotation").bases("Type").build("types").field("types",[n("Type")]),n("DeclareVariable").bases("Statement").build("id").field("id",n("Identifier")),n("DeclareFunction").bases("Statement").build("id").field("id",n("Identifier")),n("DeclareClass").bases("InterfaceDeclaration").build("id"),n("DeclareModule").bases("Statement").build("id","body").field("id",i(n("Identifier"),n("Literal"))).field("body",n("BlockStatement")),n("DeclareModuleExports").bases("Statement").build("typeAnnotation").field("typeAnnotation",n("Type")),n("DeclareExportDeclaration").bases("Declaration").build("default","declaration","specifiers","source").field("default",Boolean).field("declaration",i(n("DeclareVariable"),n("DeclareFunction"),n("DeclareClass"),n("Type"),null)).field("specifiers",[i(n("ExportSpecifier"),n("ExportBatchSpecifier"))],s.emptyArray).field("source",i(n("Literal"),null),s.null),n("DeclareExportAllDeclaration").bases("Declaration").build("source").field("source",i(n("Literal"),null),s.null)}},{"../lib/shared":20,"../lib/types":21,"./es7":9}],12:[function(e,t,r){t.exports=function(t){t.use(e("./es7"));var r=t.use(e("../lib/types")),n=r.Type.def,i=r.Type.or,s=t.use(e("../lib/shared")).defaults;n("JSXAttribute").bases("Node").build("name","value").field("name",i(n("JSXIdentifier"),n("JSXNamespacedName"))).field("value",i(n("Literal"),n("JSXExpressionContainer"),null),s.null),n("JSXIdentifier").bases("Identifier").build("name").field("name",String),n("JSXNamespacedName").bases("Node").build("namespace","name").field("namespace",n("JSXIdentifier")).field("name",n("JSXIdentifier")),n("JSXMemberExpression").bases("MemberExpression").build("object","property").field("object",i(n("JSXIdentifier"),n("JSXMemberExpression"))).field("property",n("JSXIdentifier")).field("computed",Boolean,s.false);var a=i(n("JSXIdentifier"),n("JSXNamespacedName"),n("JSXMemberExpression"));n("JSXSpreadAttribute").bases("Node").build("argument").field("argument",n("Expression"));var o=[i(n("JSXAttribute"),n("JSXSpreadAttribute"))];n("JSXExpressionContainer").bases("Expression").build("expression").field("expression",n("Expression")),n("JSXElement").bases("Expression").build("openingElement","closingElement","children").field("openingElement",n("JSXOpeningElement")).field("closingElement",i(n("JSXClosingElement"),null),s.null).field("children",[i(n("JSXElement"),n("JSXExpressionContainer"),n("JSXText"),n("Literal"))],s.emptyArray).field("name",a,function(){return this.openingElement.name},!0).field("selfClosing",Boolean,function(){return this.openingElement.selfClosing},!0).field("attributes",o,function(){return this.openingElement.attributes},!0),n("JSXOpeningElement").bases("Node").build("name","attributes","selfClosing").field("name",a).field("attributes",o,s.emptyArray).field("selfClosing",Boolean,s.false),n("JSXClosingElement").bases("Node").build("name").field("name",a),n("JSXText").bases("Literal").build("value").field("value",String),n("JSXEmptyExpression").bases("Expression").build()}},{"../lib/shared":20,"../lib/types":21,"./es7":9}],13:[function(e,t,r){t.exports=function(t){t.use(e("./core"));var r=t.use(e("../lib/types")),n=r.Type.def,i=r.Type.or,s=t.use(e("../lib/shared")),a=s.geq,o=s.defaults;n("Function").field("body",i(n("BlockStatement"),n("Expression"))),n("ForInStatement").build("left","right","body","each").field("each",Boolean,o.false),n("ForOfStatement").bases("Statement").build("left","right","body").field("left",i(n("VariableDeclaration"),n("Expression"))).field("right",n("Expression")).field("body",n("Statement")),n("LetStatement").bases("Statement").build("head","body").field("head",[n("VariableDeclarator")]).field("body",n("Statement")),n("LetExpression").bases("Expression").build("head","body").field("head",[n("VariableDeclarator")]).field("body",n("Expression")),n("GraphExpression").bases("Expression").build("index","expression").field("index",a(0)).field("expression",n("Literal")),n("GraphIndexExpression").bases("Expression").build("index").field("index",a(0))}},{"../lib/shared":20,"../lib/types":21,"./core":6}],14:[function(e,t,r){t.exports=function(t){function r(e){var t=n.indexOf(e);return-1===t&&(t=n.length,n.push(e),i[t]=e(s)),i[t]}var n=[],i=[],s={};s.use=r;var a=r(e("./lib/types"));t.forEach(r),a.finalize();var o={Type:a.Type,builtInTypes:a.builtInTypes,namedTypes:a.namedTypes,builders:a.builders,defineMethod:a.defineMethod,getFieldNames:a.getFieldNames,getFieldValue:a.getFieldValue,eachField:a.eachField,someField:a.someField,getSupertypeNames:a.getSupertypeNames,astNodesAreEquivalent:r(e("./lib/equiv")),finalize:a.finalize,Path:r(e("./lib/path")),NodePath:r(e("./lib/node-path")),PathVisitor:r(e("./lib/path-visitor")),use:r};return o.visit=o.PathVisitor.visit,o}},{"./lib/equiv":15,"./lib/node-path":16,"./lib/path":18,"./lib/path-visitor":17,"./lib/types":21}],15:[function(e,t,r){t.exports=function(t){function r(e,t,r){return c.check(r)?r.length=0:r=null,i(e,t,r)}function n(e){return/[_$a-z][_$a-z0-9]*/i.test(e)?"."+e:"["+JSON.stringify(e)+"]"}function i(e,t,r){return e===t||(c.check(e)?s(e,t,r):p.check(e)?a(e,t,r):h.check(e)?h.check(t)&&+e==+t:f.check(e)?f.check(t)&&e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.ignoreCase===t.ignoreCase:e==t)}function s(e,t,r){c.assert(e);var n=e.length;if(!c.check(t)||t.length!==n)return r&&r.push("length"),!1;for(var s=0;so)return!0;if(t===o&&"right"===this.name){if(n.right!==r)throw new Error("Nodes must be equal");return!0}default:return!1}case"SequenceExpression":switch(n.type){case"ForStatement":return!1;case"ExpressionStatement":return"expression"!==this.name;default:return!0}case"YieldExpression":switch(n.type){case"BinaryExpression":case"LogicalExpression":case"UnaryExpression":case"SpreadElement":case"SpreadProperty":case"CallExpression":case"MemberExpression":case"NewExpression":case"ConditionalExpression":case"YieldExpression":return!0;default:return!1}case"Literal":return"MemberExpression"===n.type&&p.check(r.value)&&"object"===this.name&&n.object===r;case"AssignmentExpression":case"ConditionalExpression":switch(n.type){case"UnaryExpression":case"SpreadElement":case"SpreadProperty":case"BinaryExpression":case"LogicalExpression":return!0;case"CallExpression":return"callee"===this.name&&n.callee===r;case"ConditionalExpression":return"test"===this.name&&n.test===r;case"MemberExpression":return"object"===this.name&&n.object===r;default:return!1}default:if("NewExpression"===n.type&&"callee"===this.name&&n.callee===r)return i(r)}return!(!0===e||this.canBeFirstInStatement()||!this.firstInStatement())};var y={};return[["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"]].forEach(function(e,t){e.forEach(function(e){y[e]=t})}),m.canBeFirstInStatement=function(){var e=this.node;return!l.FunctionExpression.check(e)&&!l.ObjectExpression.check(e)},m.firstInStatement=function(){return s(this)},r}},{"./path":18,"./scope":19,"./types":21}],17:[function(e,t,r){var n=Object.prototype.hasOwnProperty;t.exports=function(t){function r(){if(!(this instanceof r))throw new Error("PathVisitor constructor cannot be invoked without 'new'");this._reusableContextStack=[],this._methodNameTable=i(this),this._shouldVisitComments=n.call(this._methodNameTable,"Block")||n.call(this._methodNameTable,"Line"),this.Context=o(this),this._visiting=!1,this._changeReported=!1}function i(e){var t=Object.create(null);for(var r in e)/^visit[A-Z]/.test(r)&&(t[r.slice("visit".length)]=!0);for(var n=u.computeSupertypeLookupTable(t),i=Object.create(null),t=Object.keys(n),s=t.length,a=0;a=0&&(s[e.name=a]=e)}else i[e.name]=e.value,s[e.name]=e;if(i[e.name]!==e.value)throw new Error("");if(e.parentPath.get(e.name)!==e)throw new Error("");return e}var l=t.use(e("./types")),c=l.builtInTypes.array,p=l.builtInTypes.number,h=r.prototype;return h.getValueProperty=function(e){return this.value[e]},h.get=function(e){for(var t=this,r=arguments,n=r.length,s=0;s=e},a+" >= "+e)},r.defaults={null:function(){return null},emptyArray:function(){return[]},false:function(){return!1},true:function(){return!0},undefined:function(){}};var o=i.or(s.string,s.number,s.boolean,s.null,s.undefined);return r.isPrimitive=new i(function(e){if(null===e)return!0;var t=typeof e;return!("object"===t||"function"===t)},o.toString()),r}},{"../lib/types":21}],21:[function(e,t,r){var n=Array.prototype,i=n.slice,s=(n.map,n.forEach,Object.prototype),a=s.toString,o=a.call(function(){}),u=a.call(""),l=s.hasOwnProperty;t.exports=function(){function e(t,r){var n=this;if(!(n instanceof e))throw new Error("Type constructor cannot be invoked without 'new'");if(a.call(t)!==o)throw new Error(t+" is not a function");var i=a.call(r);if(i!==o&&i!==u)throw new Error(r+" is neither a function nor a string");Object.defineProperties(n,{name:{value:r},check:{value:function(e,r){var i=t.call(n,e,r);return!i&&r&&a.call(r)===o&&r(n,e),i}}})}function t(e){return _.check(e)?"{"+Object.keys(e).map(function(t){return t+": "+e[t]}).join(", ")+"}":S.check(e)?"["+e.map(t).join(", ")+"]":JSON.stringify(e)}function r(t,r){var n=a.call(t),i=new e(function(e){return a.call(e)===n},r);return A[r]=i,t&&"function"==typeof t.constructor&&(x.push(t.constructor),E.push(i)),i}function n(t,r){if(t instanceof e)return t;if(t instanceof c)return t.type;if(S.check(t))return e.fromArray(t);if(_.check(t))return e.fromObject(t);if(C.check(t)){var n=x.indexOf(t);return n>=0?E[n]:new e(t,r)}return new e(function(e){return e===t},k.check(r)?function(){return t+""}:r)}function s(e,t,r,i){var a=this;if(!(a instanceof s))throw new Error("Field constructor cannot be invoked without 'new'");D.assert(e),t=n(t);var o={name:{value:e},type:{value:t},hidden:{value:!!i}};C.check(r)&&(o.defaultFn={value:r}),Object.defineProperties(a,o)}function c(t){var r=this;if(!(r instanceof c))throw new Error("Def constructor cannot be invoked without 'new'");Object.defineProperties(r,{typeName:{value:t},baseNames:{value:[]},ownFields:{value:Object.create(null)},allSupertypes:{value:Object.create(null)},supertypeList:{value:[]},allFields:{value:Object.create(null)},fieldNames:{value:[]},type:{value:new e(function(e,t){return r.check(e,t)},t)}})}function p(e){return e.replace(/^[A-Z]+/,function(e){var t=e.length;switch(t){case 0:return"";case 1:return e.toLowerCase();default:return e.slice(0,t-1).toLowerCase()+e.charAt(t-1)}})}function h(e){return e=p(e),e.replace(/(Expression)?$/,"Statement")}function f(e){var t=c.fromValue(e);if(t)return t.fieldNames.slice(0);if("type"in e)throw new Error("did not recognize object of type "+JSON.stringify(e.type));return Object.keys(e)}function d(e,t){var r=c.fromValue(e);if(r){var n=r.allFields[t];if(n)return n.getValue(e)}return e&&e[t]}function m(e){var t=h(e);if(!B[t]){var r=B[p(e)];r&&(B[t]=function(){return B.expressionStatement(r.apply(B,arguments))})}}function y(e,t){t.length=0,t.push(e);for(var r=Object.create(null),n=0;n=0&&m(e.typeName)}},b.finalize=function(){Object.keys(T).forEach(function(e){T[e].finalize()})},b}},{}],22:[function(e,t,r){t.exports=e("./fork")([e("./def/core"),e("./def/es6"),e("./def/es7"),e("./def/mozilla"),e("./def/e4x"),e("./def/jsx"),e("./def/flow"),e("./def/esprima"),e("./def/babel"),e("./def/babel6")])},{"./def/babel":4,"./def/babel6":5,"./def/core":6,"./def/e4x":7,"./def/es6":8,"./def/es7":9,"./def/esprima":10,"./def/flow":11,"./def/jsx":12,"./def/mozilla":13,"./fork":14}],23:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return{keyword:e.cyan,capitalized:e.yellow,jsx_tag:e.yellow,punctuator:e.yellow,number:e.magenta,string:e.green,regex:e.magenta,comment:e.grey,invalid:e.white.bgRed.bold,gutter:e.grey,marker:e.red.bold}}function s(e){var t=e.slice(-2),r=t[0],n=t[1],i=(0,o.matchToToken)(e);if("name"===i.type){if(c.default.keyword.isReservedWordES6(i.value))return"keyword";if(d.test(i.value)&&("<"===n[r-1]||"3&&void 0!==arguments[3]?arguments[3]:{};r=Math.max(r,0);var s=n.highlightCode&&h.default.supportsColor||n.forceColor,o=h.default;n.forceColor&&(o=new h.default.constructor({enabled:!0}));var u=function(e,t){return s?e(t):t},l=i(o);s&&(e=a(l,e));var c=n.linesAbove||2,p=n.linesBelow||3,d=e.split(f),m=Math.max(t-(c+1),0),y=Math.min(d.length,t+p);t||r||(m=0,y=d.length);var g=String(y).length,b=d.slice(m,y).map(function(e,n){var i=m+1+n,s=(" "+i).slice(-g),a=" "+s+" | ";if(i===t){var o="";if(r){var c=e.slice(0,r-1).replace(/[^\t]/g," ");o=["\n ",u(l.gutter,a.replace(/\d/g," ")),c,u(l.marker,"^")].join("")}return[u(l.marker,">"),u(l.gutter,a),e,o].join("")}return" "+u(l.gutter,a)+e}).join("\n");return s?o.reset(b):b};var o=e("js-tokens"),u=n(o),l=e("esutils"),c=n(l),p=e("chalk"),h=n(p),f=/\r\n|[\n\r\u2028\u2029]/,d=/^[a-z][\w-]*$/i,m=/^[()\[\]{}]$/;t.exports=r.default},{chalk:185,esutils:27,"js-tokens":311}],24:[function(e,t,r){!function(){"use strict";function e(e){if(null==e)return!1;switch(e.type){case"ArrayExpression":case"AssignmentExpression":case"BinaryExpression":case"CallExpression":case"ConditionalExpression":case"FunctionExpression":case"Identifier":case"Literal":case"LogicalExpression":case"MemberExpression":case"NewExpression":case"ObjectExpression":case"SequenceExpression":case"ThisExpression":case"UnaryExpression":case"UpdateExpression":return!0}return!1}function r(e){if(null==e)return!1;switch(e.type){case"DoWhileStatement":case"ForInStatement":case"ForStatement":case"WhileStatement":return!0}return!1}function n(e){if(null==e)return!1;switch(e.type){case"BlockStatement":case"BreakStatement":case"ContinueStatement":case"DebuggerStatement":case"DoWhileStatement":case"EmptyStatement":case"ExpressionStatement":case"ForInStatement":case"ForStatement":case"IfStatement":case"LabeledStatement":case"ReturnStatement":case"SwitchStatement":case"ThrowStatement":case"TryStatement":case"VariableDeclaration":case"WhileStatement":case"WithStatement":return!0}return!1}function i(e){return n(e)||null!=e&&"FunctionDeclaration"===e.type}function s(e){switch(e.type){case"IfStatement":return null!=e.alternate?e.alternate:e.consequent;case"LabeledStatement":case"ForStatement":case"ForInStatement":case"WhileStatement":case"WithStatement":return e.body}return null}function a(e){var t;if("IfStatement"!==e.type)return!1;if(null==e.alternate)return!1;t=e.consequent;do{if("IfStatement"===t.type&&null==t.alternate)return!0;t=s(t)}while(t);return!1}t.exports={isExpression:e,isStatement:n,isIterationStatement:r,isSourceElement:i,isProblematicIfStatement:a,trailingStatement:s}}()},{}],25:[function(e,t,r){!function(){"use strict";function e(e){return 48<=e&&e<=57}function r(e){return 48<=e&&e<=57||97<=e&&e<=102||65<=e&&e<=70}function n(e){return e>=48&&e<=55}function i(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&f.indexOf(e)>=0}function s(e){return 10===e||13===e||8232===e||8233===e}function a(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(Math.floor((e-65536)/1024)+55296)+String.fromCharCode((e-65536)%1024+56320)}function o(e){return e<128?d[e]:h.NonAsciiIdentifierStart.test(a(e))}function u(e){return e<128?m[e]:h.NonAsciiIdentifierPart.test(a(e))}function l(e){return e<128?d[e]:p.NonAsciiIdentifierStart.test(a(e))}function c(e){return e<128?m[e]:p.NonAsciiIdentifierPart.test(a(e))}var p,h,f,d,m,y;for(h={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,NonAsciiIdentifierPart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/},p={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},f=[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279],d=new Array(128),y=0;y<128;++y)d[y]=y>=97&&y<=122||y>=65&&y<=90||36===y||95===y;for(m=new Array(128),y=0;y<128;++y)m[y]=y>=97&&y<=122||y>=65&&y<=90||y>=48&&y<=57||36===y||95===y;t.exports={isDecimalDigit:e,isHexDigit:r,isOctalDigit:n,isWhiteSpace:i,isLineTerminator:s,isIdentifierStartES5:o,isIdentifierPartES5:u,isIdentifierStartES6:l,isIdentifierPartES6:c}}()},{}],26:[function(e,t,r){!function(){"use strict";function r(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"let":return!0;default:return!1}}function n(e,t){return!(!t&&"yield"===e)&&i(e,t)}function i(e,t){if(t&&r(e))return!0;switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}}function s(e,t){return"null"===e||"true"===e||"false"===e||n(e,t)}function a(e,t){return"null"===e||"true"===e||"false"===e||i(e,t)}function o(e){return"eval"===e||"arguments"===e}function u(e){var t,r,n;if(0===e.length)return!1;if(n=e.charCodeAt(0),!f.isIdentifierStartES5(n))return!1 +;for(t=1,r=e.length;t=r)return!1;if(!(56320<=(i=e.charCodeAt(t))&&i<=57343))return!1;n=l(n,i)}if(!s(n))return!1;s=f.isIdentifierPartES6}return!0}function p(e,t){return u(e)&&!s(e,t)}function h(e,t){return c(e)&&!a(e,t)}var f=e("./code");t.exports={isKeywordES5:n,isKeywordES6:i,isReservedWordES5:s,isReservedWordES6:a,isRestrictedWord:o,isIdentifierNameES5:u,isIdentifierNameES6:c,isIdentifierES5:p,isIdentifierES6:h}}()},{"./code":25}],27:[function(e,t,r){!function(){"use strict";r.ast=e("./ast"),r.code=e("./code"),r.keyword=e("./keyword")}()},{"./ast":24,"./code":25,"./keyword":26}],28:[function(e,t,r){t.exports=e("./lib/api/node.js")},{"./lib/api/node.js":29}],29:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){throw new Error("The ("+e+") Babel 5 plugin is being run with Babel 6.")}function a(e,t,r){"function"==typeof t&&(r=t,t={}),t.filename=e,y.default.readFile(e,function(e,n){var i=void 0;if(!e)try{i=T(n,t)}catch(t){e=t}e?r(e):r(null,i)})}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.filename=e,T(y.default.readFileSync(e,"utf8"),t)}r.__esModule=!0,r.transformFromAst=r.transform=r.analyse=r.Pipeline=r.OptionManager=r.traverse=r.types=r.messages=r.util=r.version=r.resolvePreset=r.resolvePlugin=r.template=r.buildExternalHelpers=r.options=r.File=void 0;var u=e("../transformation/file");Object.defineProperty(r,"File",{enumerable:!0,get:function(){return i(u).default}});var l=e("../transformation/file/options/config");Object.defineProperty(r,"options",{enumerable:!0,get:function(){return i(l).default}});var c=e("../tools/build-external-helpers");Object.defineProperty(r,"buildExternalHelpers",{enumerable:!0,get:function(){return i(c).default}});var p=e("babel-template");Object.defineProperty(r,"template",{enumerable:!0,get:function(){return i(p).default}});var h=e("../helpers/resolve-plugin");Object.defineProperty(r,"resolvePlugin",{enumerable:!0,get:function(){return i(h).default}});var f=e("../helpers/resolve-preset");Object.defineProperty(r,"resolvePreset",{enumerable:!0,get:function(){return i(f).default}});var d=e("../../package");Object.defineProperty(r,"version",{enumerable:!0,get:function(){return d.version}}),r.Plugin=s,r.transformFile=a,r.transformFileSync=o;var m=e("fs"),y=i(m),g=e("../util"),b=n(g),v=e("babel-messages"),x=n(v),E=e("babel-types"),A=n(E),D=e("babel-traverse"),C=i(D),S=e("../transformation/file/options/option-manager"),_=i(S),w=e("../transformation/pipeline"),k=i(w);r.util=b,r.messages=x,r.types=A,r.traverse=C.default,r.OptionManager=_.default,r.Pipeline=k.default;var F=new k.default,T=(r.analyse=F.analyse.bind(F),r.transform=F.transform.bind(F));r.transformFromAst=F.transformFromAst.bind(F)},{"../../package":66,"../helpers/resolve-plugin":35,"../helpers/resolve-preset":36,"../tools/build-external-helpers":39,"../transformation/file":40,"../transformation/file/options/config":44,"../transformation/file/options/option-manager":46,"../transformation/pipeline":51,"../util":54,"babel-messages":103,"babel-template":132,"babel-traverse":136,"babel-types":169,fs:182}],30:[function(e,t,r){"use strict";function n(e){return["babel-plugin-"+e,e]}r.__esModule=!0,r.default=n,t.exports=r.default},{}],31:[function(e,t,r){"use strict";function n(e){var t=["babel-preset-"+e,e],r=e.match(/^(@[^\/]+)\/(.+)$/);if(r){var n=r[1],i=r[2];t.push(n+"/babel-preset-"+i)}return t}r.__esModule=!0,r.default=n,t.exports=r.default},{}],32:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/core-js/get-iterator"),s=n(i);r.default=function(e,t){if(e&&t)return(0,o.default)(e,t,function(e,t){if(t&&Array.isArray(e)){for(var r=t.slice(0),n=e,i=Array.isArray(n),a=0,n=i?n:(0,s.default)(n);;){var o;if(i){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}var u=o;r.indexOf(u)<0&&r.push(u)}return r}})};var a=e("lodash/mergeWith"),o=n(a);t.exports=r.default},{"babel-runtime/core-js/get-iterator":113,"lodash/mergeWith":516}],33:[function(e,t,r){"use strict";r.__esModule=!0,r.default=function(e,t,r){if(e){if("Program"===e.type)return i.file(e,t||[],r||[]);if("File"===e.type)return e}throw new Error("Not a valid ast?")};var n=e("babel-types"),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);t.exports=r.default},{"babel-types":169}],34:[function(e,t,r){"use strict";function n(e,t){return e.reduce(function(e,r){return e||(0,s.default)(r,t)},null)}r.__esModule=!0,r.default=n;var i=e("./resolve"),s=function(e){return e&&e.__esModule?e:{default:e}}(i);t.exports=r.default},{"./resolve":37}],35:[function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.cwd();return(0,o.default)((0,l.default)(e),t)}r.__esModule=!0,r.default=s;var a=e("./resolve-from-possible-names"),o=i(a),u=e("./get-possible-plugin-names"),l=i(u);t.exports=r.default}).call(this,e("_process"))},{"./get-possible-plugin-names":30,"./resolve-from-possible-names":34,_process:539}],36:[function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.cwd();return(0,o.default)((0,l.default)(e),t)}r.__esModule=!0,r.default=s;var a=e("./resolve-from-possible-names"),o=i(a),u=e("./get-possible-preset-names"),l=i(u);t.exports=r.default}).call(this,e("_process"))},{"./get-possible-preset-names":31,"./resolve-from-possible-names":34,_process:539}],37:[function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var s=e("babel-runtime/helpers/typeof"),a=i(s);r.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.cwd();if("object"===(void 0===u.default?"undefined":(0,a.default)(u.default)))return null;var r=p[t];if(!r){r=new u.default;var i=c.default.join(t,".babelrc");r.id=i,r.filename=i,r.paths=u.default._nodeModulePaths(t),p[t]=r}try{return u.default._resolveFilename(e,r)}catch(e){return null}};var o=e("module"),u=i(o),l=e("path"),c=i(l),p={};t.exports=r.default}).call(this,e("_process"))},{_process:539,"babel-runtime/helpers/typeof":131,module:182,path:535}],38:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/core-js/map"),s=n(i),a=e("babel-runtime/helpers/classCallCheck"),o=n(a),u=e("babel-runtime/helpers/possibleConstructorReturn"),l=n(u),c=e("babel-runtime/helpers/inherits"),p=n(c),h=function(e){function t(){(0,o.default)(this,t);var r=(0,l.default)(this,e.call(this));return r.dynamicData={},r}return(0,p.default)(t,e),t.prototype.setDynamic=function(e,t){this.dynamicData[e]=t},t.prototype.get=function(t){if(this.has(t))return e.prototype.get.call(this,t);if(Object.prototype.hasOwnProperty.call(this.dynamicData,t)){var r=this.dynamicData[t]();return this.set(t,r),r}},t}(s.default);r.default=h,t.exports=r.default},{"babel-runtime/core-js/map":115,"babel-runtime/helpers/classCallCheck":127,"babel-runtime/helpers/inherits":128,"babel-runtime/helpers/possibleConstructorReturn":130}],39:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function s(e,t){var r=[],n=b.functionExpression(null,[b.identifier("global")],b.blockStatement(r)),i=b.program([b.expressionStatement(b.callExpression(n,[c.get("selfGlobal")]))]);return r.push(b.variableDeclaration("var",[b.variableDeclarator(e,b.assignmentExpression("=",b.memberExpression(b.identifier("global"),e),b.objectExpression([])))])),t(r),i}function a(e,t){var r=[];return r.push(b.variableDeclaration("var",[b.variableDeclarator(e,b.identifier("global"))])),t(r),b.program([v({FACTORY_PARAMETERS:b.identifier("global"),BROWSER_ARGUMENTS:b.assignmentExpression("=",b.memberExpression(b.identifier("root"),e),b.objectExpression([])),COMMON_ARGUMENTS:b.identifier("exports"),AMD_ARGUMENTS:b.arrayExpression([b.stringLiteral("exports")]),FACTORY_BODY:r,UMD_ROOT:b.identifier("this")})])}function o(e,t){var r=[];return r.push(b.variableDeclaration("var",[b.variableDeclarator(e,b.objectExpression([]))])),t(r),r.push(b.expressionStatement(e)),b.program(r)}function u(e,t,r){c.list.forEach(function(n){if(!(r&&r.indexOf(n)<0)){var i=b.identifier(n);e.push(b.expressionStatement(b.assignmentExpression("=",b.memberExpression(t,i),c.get(n))))}})}r.__esModule=!0,r.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"global",r=b.identifier("babelHelpers"),n=function(t){return u(t,r,e)},i=void 0,l={global:s,umd:a,var:o}[t];if(!l)throw new Error(d.get("unsupportedOutputType",t));return i=l(r,n),(0,h.default)(i).code};var l=e("babel-helpers"),c=i(l),p=e("babel-generator"),h=n(p),f=e("babel-messages"),d=i(f),m=e("babel-template"),y=n(m),g=e("babel-types"),b=i(g),v=(0,y.default)('\n (function (root, factory) {\n if (typeof define === "function" && define.amd) {\n define(AMD_ARGUMENTS, factory);\n } else if (typeof exports === "object") {\n factory(COMMON_ARGUMENTS);\n } else {\n factory(BROWSER_ARGUMENTS);\n }\n })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n FACTORY_BODY\n });\n');t.exports=r.default},{"babel-generator":78,"babel-helpers":102,"babel-messages":103,"babel-template":132,"babel-types":169}],40:[function(e,t,r){(function(t){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0,r.File=void 0;var s=e("babel-runtime/core-js/get-iterator"),a=i(s),o=e("babel-runtime/core-js/object/create"),u=i(o),l=e("babel-runtime/core-js/object/assign"),c=i(l),p=e("babel-runtime/helpers/classCallCheck"),h=i(p),f=e("babel-runtime/helpers/possibleConstructorReturn"),d=i(f),m=e("babel-runtime/helpers/inherits"),y=i(m),g=e("babel-helpers"),b=i(g),v=e("./metadata"),x=n(v),E=e("convert-source-map"),A=i(E),D=e("./options/option-manager"),C=i(D),S=e("../plugin-pass"),_=i(S),w=e("babel-traverse"),k=i(w),F=e("source-map"),T=i(F),P=e("babel-generator"),B=i(P),O=e("babel-code-frame"),j=i(O),N=e("lodash/defaults"),I=i(N),L=e("./logger"),M=i(L),R=e("../../store"),U=i(R),V=e("babylon"),q=e("../../util"),G=n(q),X=e("path"),J=i(X),W=e("babel-types"),K=n(W),z=e("../../helpers/resolve"),Y=i(z),H=e("../internal-plugins/block-hoist"),$=i(H),Q=e("../internal-plugins/shadow-functions"),Z=i(Q),ee=/^#!.*/,te=[[$.default],[Z.default]],re={enter:function(e,t){var r=e.node.loc;r&&(t.loc=r,e.stop())}},ne=function(r){function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];(0,h.default)(this,n);var i=(0,d.default)(this,r.call(this));return i.pipeline=t,i.log=new M.default(i,e.filename||"unknown"),i.opts=i.initOptions(e),i.parserOpts={sourceType:i.opts.sourceType,sourceFileName:i.opts.filename,plugins:[]},i.pluginVisitors=[],i.pluginPasses=[],i.buildPluginsForOptions(i.opts),i.opts.passPerPreset&&(i.perPresetOpts=[],i.opts.presets.forEach(function(e){var t=(0,c.default)((0,u.default)(i.opts),e);i.perPresetOpts.push(t),i.buildPluginsForOptions(t)})),i.metadata={usedHelpers:[],marked:[],modules:{imports:[],exports:{exported:[],specifiers:[]}}},i.dynamicImportTypes={},i.dynamicImportIds={},i.dynamicImports=[],i.declarations={},i.usedHelpers={},i.path=null,i.ast={},i.code="",i.shebang="",i.hub=new w.Hub(i),i}return(0,y.default)(n,r),n.prototype.getMetadata=function(){for(var e=!1,t=this.ast.program.body,r=Array.isArray(t),n=0,t=r?t:(0,a.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(K.isModuleDeclaration(s)){e=!0;break}}e&&this.path.traverse(x,this)},n.prototype.initOptions=function(e){e=new C.default(this.log,this.pipeline).init(e),e.inputSourceMap&&(e.sourceMaps=!0),e.moduleId&&(e.moduleIds=!0),e.basename=J.default.basename(e.filename,J.default.extname(e.filename)),e.ignore=G.arrayify(e.ignore,G.regexify),e.only&&(e.only=G.arrayify(e.only,G.regexify)),(0,I.default)(e,{moduleRoot:e.sourceRoot}),(0,I.default)(e,{sourceRoot:e.moduleRoot}),(0,I.default)(e,{filenameRelative:e.filename});var t=J.default.basename(e.filenameRelative);return(0,I.default)(e,{sourceFileName:t,sourceMapTarget:t}),e},n.prototype.buildPluginsForOptions=function(e){if(Array.isArray(e.plugins)){for(var t=e.plugins.concat(te),r=[],n=[],i=t,s=Array.isArray(i),o=0,i=s?i:(0,a.default)(i);;){var u;if(s){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u,c=l[0],p=l[1];r.push(c.visitor),n.push(new _.default(this,c,p)),c.manipulateOptions&&c.manipulateOptions(e,this.parserOpts,this)}this.pluginVisitors.push(r),this.pluginPasses.push(n)}},n.prototype.getModuleName=function(){var e=this.opts;if(!e.moduleIds)return null;if(null!=e.moduleId&&!e.getModuleId)return e.moduleId;var t=e.filenameRelative,r="";if(null!=e.moduleRoot&&(r=e.moduleRoot+"/"),!e.filenameRelative)return r+e.filename.replace(/^\//,"");if(null!=e.sourceRoot){var n=new RegExp("^"+e.sourceRoot+"/?");t=t.replace(n,"")}return t=t.replace(/\.(\w*?)$/,""),r+=t,r=r.replace(/\\/g,"/"),e.getModuleId?e.getModuleId(r)||r:r},n.prototype.resolveModuleSource=function(e){var t=this.opts.resolveModuleSource;return t&&(e=t(e,this.opts.filename)),e},n.prototype.addImport=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,n=e+":"+t,i=this.dynamicImportIds[n];if(!i){e=this.resolveModuleSource(e),i=this.dynamicImportIds[n]=this.scope.generateUidIdentifier(r);var s=[];"*"===t?s.push(K.importNamespaceSpecifier(i)):"default"===t?s.push(K.importDefaultSpecifier(i)):s.push(K.importSpecifier(i,K.identifier(t)));var a=K.importDeclaration(s,K.stringLiteral(e));a._blockHoist=3,this.path.unshiftContainer("body",a)}return i},n.prototype.addHelper=function(e){var t=this.declarations[e];if(t)return t;this.usedHelpers[e]||(this.metadata.usedHelpers.push(e),this.usedHelpers[e]=!0);var r=this.get("helperGenerator"),n=this.get("helpersNamespace");if(r){var i=r(e);if(i)return i}else if(n)return K.memberExpression(n,K.identifier(e));var s=(0,b.default)(e),a=this.declarations[e]=this.scope.generateUidIdentifier(e);return K.isFunctionExpression(s)&&!s.id?(s.body._compact=!0,s._generated=!0,s.id=a,s.type="FunctionDeclaration",this.path.unshiftContainer("body",s)):(s._compact=!0,this.scope.push({id:a,init:s,unique:!0})),a},n.prototype.addTemplateObject=function(e,t,r){var n=r.elements.map(function(e){return e.value}),i=e+"_"+r.elements.length+"_"+n.join(","),s=this.declarations[i];if(s)return s;var a=this.declarations[i]=this.scope.generateUidIdentifier("templateObject"),o=this.addHelper(e),u=K.callExpression(o,[t,r]);return u._compact=!0,this.scope.push({id:a,init:u,_blockHoist:1.9}),a},n.prototype.buildCodeFrameError=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:SyntaxError,n=e&&(e.loc||e._loc),i=new r(t);return n?i.loc=n.start:((0,k.default)(e,re,this.scope,i),i.message+=" (This is an error on an internal node. Probably an internal error",i.loc&&(i.message+=". Location has been estimated."),i.message+=")"),i},n.prototype.mergeSourceMap=function(e){var t=this.opts.inputSourceMap;if(t){var r=new T.default.SourceMapConsumer(t),n=new T.default.SourceMapConsumer(e),i=new T.default.SourceMapGenerator({file:r.file,sourceRoot:r.sourceRoot}),s=n.sources[0];r.eachMapping(function(e){var t=n.generatedPositionFor({line:e.generatedLine,column:e.generatedColumn,source:s});null!=t.column&&i.addMapping({source:e.source,original:null==e.source?null:{line:e.originalLine,column:e.originalColumn},generated:t})});var a=i.toJSON();return t.mappings=a.mappings,t}return e},n.prototype.parse=function(r){var n=V.parse,i=this.opts.parserOpts;if(i&&(i=(0,c.default)({},this.parserOpts,i),i.parser)){if("string"==typeof i.parser){var s=J.default.dirname(this.opts.filename)||t.cwd(),a=(0,Y.default)(i.parser,s);if(!a)throw new Error("Couldn't find parser "+i.parser+' with "parse" method relative to directory '+s);n=e(a).parse}else n=i.parser;i.parser={parse:function(e){return(0,V.parse)(e,i)}}}this.log.debug("Parse start");var o=n(r,i||this.parserOpts);return this.log.debug("Parse stop"),o},n.prototype._addAst=function(e){this.path=w.NodePath.get({hub:this.hub,parentPath:null,parent:e,container:e,key:"program"}).setContext(),this.scope=this.path.scope,this.ast=e,this.getMetadata()},n.prototype.addAst=function(e){this.log.debug("Start set AST"),this._addAst(e),this.log.debug("End set AST")},n.prototype.transform=function(){for(var e=0;e=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var o=s,u=o.plugin,l=u[e];l&&l.call(o,this)}},n.prototype.parseInputSourceMap=function(e){var t=this.opts;if(!1!==t.inputSourceMap){var r=A.default.fromSource(e);r&&(t.inputSourceMap=r.toObject(),e=A.default.removeComments(e))}return e},n.prototype.parseShebang=function(){var e=ee.exec(this.code);e&&(this.shebang=e[0],this.code=this.code.replace(ee,""))},n.prototype.makeResult=function(e){var t=e.code,r=e.map,n=e.ast,i=e.ignored,s={metadata:null,options:this.opts,ignored:!!i,code:null,ast:null,map:r||null};return this.opts.code&&(s.code=t),this.opts.ast&&(s.ast=n),this.opts.metadata&&(s.metadata=this.metadata),s},n.prototype.generate=function(){var r=this.opts,n=this.ast,i={ast:n};if(!r.code)return this.makeResult(i);var s=B.default;if(r.generatorOpts.generator&&"string"==typeof(s=r.generatorOpts.generator)){var a=J.default.dirname(this.opts.filename)||t.cwd(),o=(0,Y.default)(s,a);if(!o)throw new Error("Couldn't find generator "+s+' with "print" method relative to directory '+a);s=e(o).print}this.log.debug("Generation start");var u=s(n,r.generatorOpts?(0,c.default)(r,r.generatorOpts):r,this.code);return i.code=u.code,i.map=u.map,this.log.debug("Generation end"),this.shebang&&(i.code=this.shebang+"\n"+i.code),i.map&&(i.map=this.mergeSourceMap(i.map)),"inline"!==r.sourceMaps&&"both"!==r.sourceMaps||(i.code+="\n"+A.default.fromObject(i.map).toComment()),"inline"===r.sourceMaps&&(i.map=null),this.makeResult(i)},n}(U.default);r.default=ne,r.File=ne}).call(this,e("_process"))},{"../../helpers/resolve":37,"../../store":38,"../../util":54,"../internal-plugins/block-hoist":49,"../internal-plugins/shadow-functions":50,"../plugin-pass":52,"./logger":41,"./metadata":42,"./options/option-manager":46,_process:539,"babel-code-frame":23,"babel-generator":78,"babel-helpers":102,"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/object/assign":117,"babel-runtime/core-js/object/create":118,"babel-runtime/helpers/classCallCheck":127,"babel-runtime/helpers/inherits":128,"babel-runtime/helpers/possibleConstructorReturn":130,"babel-traverse":136,"babel-types":169,babylon:177,"convert-source-map":187,"lodash/defaults":484,path:535,"source-map":65}],41:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/helpers/classCallCheck"),s=n(i),a=e("debug/node"),o=n(a),u=(0,o.default)("babel:verbose"),l=(0,o.default)("babel"),c=[],p=function(){function e(t,r){(0,s.default)(this,e),this.filename=r,this.file=t}return e.prototype._buildMessage=function(e){var t="[BABEL] "+this.filename;return e&&(t+=": "+e),t},e.prototype.warn=function(e){console.warn(this._buildMessage(e))},e.prototype.error=function(e){throw new(arguments.length>1&&void 0!==arguments[1]?arguments[1]:Error)(this._buildMessage(e))},e.prototype.deprecate=function(e){this.file.opts&&this.file.opts.suppressDeprecationMessages||(e=this._buildMessage(e),c.indexOf(e)>=0||(c.push(e),console.error(e)))},e.prototype.verbose=function(e){u.enabled&&u(this._buildMessage(e))},e.prototype.debug=function(e){l.enabled&&l(this._buildMessage(e))},e.prototype.deopt=function(e,t){this.debug(t)},e}();r.default=p,t.exports=r.default},{"babel-runtime/helpers/classCallCheck":127,"debug/node":295}],42:[function(e,t,r){"use strict";function n(e,t){var r=e.node,n=r.source?r.source.value:null,i=t.metadata.modules.exports,s=e.get("declaration");if(s.isStatement()){var o=s.getBindingIdentifiers();for(var l in o)i.exported.push(l),i.specifiers.push({kind:"local",local:l,exported:e.isExportDefaultDeclaration()?"default":l})}if(e.isExportNamedDeclaration()&&r.specifiers)for(var c=r.specifiers,p=Array.isArray(c),h=0,c=p?c:(0,a.default)(c);;){var f;if(p){if(h>=c.length)break;f=c[h++]}else{if(h=c.next(),h.done)break;f=h.value}var d=f,m=d.exported.name;i.exported.push(m),u.isExportDefaultSpecifier(d)&&i.specifiers.push({kind:"external",local:m,exported:m,source:n}),u.isExportNamespaceSpecifier(d)&&i.specifiers.push({kind:"external-namespace",exported:m,source:n});var y=d.local;y&&(n&&i.specifiers.push({kind:"external",local:y.name,exported:m,source:n}),n||i.specifiers.push({kind:"local",local:y.name,exported:m}))}e.isExportAllDeclaration()&&i.specifiers.push({kind:"external-all",source:n})}function i(e){e.skip()}r.__esModule=!0,r.ImportDeclaration=r.ModuleDeclaration=void 0;var s=e("babel-runtime/core-js/get-iterator"),a=function(e){return e&&e.__esModule?e:{default:e}}(s);r.ExportDeclaration=n,r.Scope=i;var o=e("babel-types"),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o);r.ModuleDeclaration={enter:function(e,t){var r=e.node;r.source&&(r.source.value=t.resolveModuleSource(r.source.value))}},r.ImportDeclaration={exit:function(e,t){var r=e.node,n=[],i=[];t.metadata.modules.imports.push({source:r.source.value,imported:i,specifiers:n});for(var s=e.get("specifiers"),o=Array.isArray(s),u=0,s=o?s:(0,a.default)(s);;){var l;if(o){if(u>=s.length)break;l=s[u++]}else{if(u=s.next(),u.done)break;l=u.value}var c=l,p=c.node.local.name;if(c.isImportDefaultSpecifier()&&(i.push("default"),n.push({kind:"named",imported:"default",local:p})),c.isImportSpecifier()){var h=c.node.imported.name;i.push(h),n.push({kind:"named",imported:h,local:p})}c.isImportNamespaceSpecifier()&&(i.push("*"),n.push({kind:"namespace",local:p}))}}}},{"babel-runtime/core-js/get-iterator":113,"babel-types":169}],43:[function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=E[e];return null==t?E[e]=x.default.existsSync(e):t}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],r=e.filename,n=new D(t);return!1!==e.babelrc&&n.findConfigs(r),n.mergeConfig({options:e,alias:"base",dirname:r&&b.default.dirname(r)}),n.configs}r.__esModule=!0;var o=e("babel-runtime/core-js/object/assign"),u=i(o),l=e("babel-runtime/helpers/classCallCheck"),c=i(l);r.default=a;var p=e("../../../helpers/resolve"),h=i(p),f=e("json5"),d=i(f),m=e("path-is-absolute"),y=i(m),g=e("path"),b=i(g),v=e("fs"),x=i(v),E={},A={},D=function(){function e(t){(0,c.default)(this,e),this.resolvedConfigs=[],this.configs=[],this.log=t}return e.prototype.findConfigs=function(e){if(e){(0,y.default)(e)||(e=b.default.join(n.cwd(),e));for(var t=!1,r=!1;e!==(e=b.default.dirname(e));){if(!t){var i=b.default.join(e,".babelrc");s(i)&&(this.addConfig(i),t=!0);var a=b.default.join(e,"package.json");!t&&s(a)&&(t=this.addConfig(a,"babel",JSON))}if(!r){var o=b.default.join(e,".babelignore");s(o)&&(this.addIgnoreConfig(o),r=!0)}if(r&&t)return}}},e.prototype.addIgnoreConfig=function(e){var t=x.default.readFileSync(e,"utf8"),r=t.split("\n");r=r.map(function(e){return e.replace(/#(.*?)$/,"").trim()}).filter(function(e){return!!e}),r.length&&this.mergeConfig({options:{ignore:r},alias:e,dirname:b.default.dirname(e)})},e.prototype.addConfig=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:d.default;if(this.resolvedConfigs.indexOf(e)>=0)return!1;this.resolvedConfigs.push(e);var n=x.default.readFileSync(e,"utf8"),i=void 0;try{i=A[n]=A[n]||r.parse(n),t&&(i=i[t])}catch(t){throw t.message=e+": Error while parsing JSON - "+t.message,t}return this.mergeConfig({options:i,alias:e,dirname:b.default.dirname(e)}),!!i},e.prototype.mergeConfig=function(e){var t=e.options,r=e.alias,i=e.loc,s=e.dirname;if(!t)return!1;if(t=(0,u.default)({},t),s=s||n.cwd(),i=i||r,t.extends){var a=(0,h.default)(t.extends,s);a?this.addConfig(a):this.log&&this.log.error("Couldn't resolve extends clause of "+t.extends+" in "+r),delete t.extends}this.configs.push({options:t,alias:r,loc:i,dirname:s});var o=void 0,l=n.env.BABEL_ENV||n.env.NODE_ENV||"development";t.env&&(o=t.env[l],delete t.env),this.mergeConfig({options:o,alias:r+".env."+l,dirname:s})},e}();t.exports=r.default}).call(this,e("_process"))},{"../../../helpers/resolve":37,_process:539,"babel-runtime/core-js/object/assign":117,"babel-runtime/helpers/classCallCheck":127,fs:182,json5:313,path:535,"path-is-absolute":536}],44:[function(e,t,r){"use strict";t.exports={filename:{type:"filename",description:"filename to use when reading from stdin - this will be used in source-maps, errors etc",default:"unknown",shorthand:"f"},filenameRelative:{hidden:!0,type:"string"},inputSourceMap:{hidden:!0},env:{hidden:!0,default:{}},mode:{description:"",hidden:!0},retainLines:{type:"boolean",default:!1,description:"retain line numbers - will result in really ugly code"},highlightCode:{description:"enable/disable ANSI syntax highlighting of code frames (on by default)",type:"boolean",default:!0},suppressDeprecationMessages:{type:"boolean",default:!1,hidden:!0},presets:{type:"list",description:"",default:[]},plugins:{type:"list",default:[],description:""},ignore:{type:"list",description:"list of glob paths to **not** compile",default:[]},only:{type:"list",description:"list of glob paths to **only** compile"},code:{hidden:!0,default:!0,type:"boolean"},metadata:{hidden:!0,default:!0,type:"boolean"},ast:{hidden:!0,default:!0,type:"boolean"},extends:{type:"string",hidden:!0},comments:{type:"boolean",default:!0,description:"write comments to generated output (true by default)"},shouldPrintComment:{hidden:!0,description:"optional callback to control whether a comment should be inserted, when this is used the comments option is ignored"},wrapPluginVisitorMethod:{hidden:!0,description:"optional callback to wrap all visitor methods"},compact:{type:"booleanString",default:"auto",description:"do not include superfluous whitespace characters and line terminators [true|false|auto]"},minified:{type:"boolean",default:!1,description:"save as much bytes when printing [true|false]"},sourceMap:{alias:"sourceMaps",hidden:!0},sourceMaps:{type:"booleanString",description:"[true|false|inline]",default:!1,shorthand:"s"},sourceMapTarget:{type:"string",description:"set `file` on returned source map"},sourceFileName:{type:"string",description:"set `sources[0]` on returned source map"},sourceRoot:{type:"filename",description:"the root from which all sources are relative"},babelrc:{description:"Whether or not to look up .babelrc and .babelignore files",type:"boolean",default:!0},sourceType:{description:"",default:"module"},auxiliaryCommentBefore:{type:"string",description:"print a comment before any injected non-user code"},auxiliaryCommentAfter:{type:"string",description:"print a comment after any injected non-user code"},resolveModuleSource:{hidden:!0},getModuleId:{hidden:!0},moduleRoot:{type:"filename",description:"optional prefix for the AMD module formatter that will be prepend to the filename on module definitions"},moduleIds:{type:"boolean",default:!1,shorthand:"M",description:"insert an explicit id for modules"},moduleId:{description:"specify a custom name for module ids",type:"string"},passPerPreset:{description:"Whether to spawn a traversal pass per a preset. By default all presets are merged.",type:"boolean",default:!1,hidden:!0},parserOpts:{description:"Options to pass into the parser, or to change parsers (parserOpts.parser)",default:!1},generatorOpts:{description:"Options to pass into the generator, or to change generators (generatorOpts.generator)",default:!1}}},{}],45:[function(e,t,r){"use strict";function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var t in e){var r=e[t];if(null!=r){var n=o.default[t];if(n&&n.alias&&(n=o.default[n.alias]),n){var i=s[n.type];i&&(r=i(r)),e[t]=r}}}return e}r.__esModule=!0,r.config=void 0,r.normaliseOptions=n;var i=e("./parsers"),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(i),a=e("./config"),o=function(e){return e&&e.__esModule?e:{default:e}}(a);r.config=o.default},{"./config":44,"./parsers":47}],46:[function(e,t,r){(function(n){"use strict";function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function s(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var a=e("babel-runtime/helpers/objectWithoutProperties"),o=s(a),u=e("babel-runtime/core-js/json/stringify"),l=s(u),c=e("babel-runtime/core-js/object/assign"),p=s(c),h=e("babel-runtime/core-js/get-iterator"),f=s(h),d=e("babel-runtime/helpers/typeof"),m=s(d),y=e("babel-runtime/helpers/classCallCheck"),g=s(y),b=e("../../../api/node"),v=i(b),x=e("../../plugin"),E=s(x),A=e("babel-messages"),D=i(A),C=e("./index"),S=e("../../../helpers/resolve-plugin"),_=s(S),w=e("../../../helpers/resolve-preset"),k=s(w),F=e("lodash/cloneDeepWith"),T=s(F),P=e("lodash/clone"),B=s(P),O=e("../../../helpers/merge"),j=s(O),N=e("./config"),I=s(N),L=e("./removed"),M=s(L),R=e("./build-config-chain"),U=s(R),V=e("path"),q=s(V),G=function(){function t(e){(0,g.default)(this,t),this.resolvedConfigs=[],this.options=t.createBareOptions(),this.log=e}return t.memoisePluginContainer=function(e,r,n,i){for(var s=t.memoisedPlugins,a=Array.isArray(s),o=0,s=a?s:(0,f.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;if(l.container===e)return l.plugin}var c=void 0;if(c="function"==typeof e?e(v):e,"object"===(void 0===c?"undefined":(0,m.default)(c))){var p=new E.default(c,i);return t.memoisedPlugins.push({container:e,plugin:p}),p}throw new TypeError(D.get("pluginNotObject",r,n,void 0===c?"undefined":(0,m.default)(c))+r+n)},t.createBareOptions=function(){var e={};for(var t in I.default){ +var r=I.default[t];e[t]=(0,B.default)(r.default)}return e},t.normalisePlugin=function(e,r,n,i){if(!((e=e.__esModule?e.default:e)instanceof E.default)){if("function"!=typeof e&&"object"!==(void 0===e?"undefined":(0,m.default)(e)))throw new TypeError(D.get("pluginNotFunction",r,n,void 0===e?"undefined":(0,m.default)(e)));e=t.memoisePluginContainer(e,r,n,i)}return e.init(r,n),e},t.normalisePlugins=function(r,n,i){return i.map(function(i,s){var a=void 0,o=void 0;if(!i)throw new TypeError("Falsy value found in plugins");Array.isArray(i)?(a=i[0],o=i[1]):a=i;var u="string"==typeof a?a:r+"$"+s;if("string"==typeof a){var l=(0,_.default)(a,n);if(!l)throw new ReferenceError(D.get("pluginUnknown",a,r,s,n));a=e(l)}return a=t.normalisePlugin(a,r,s,u),[a,o]})},t.prototype.mergeOptions=function(e){var r=this,i=e.options,s=e.extending,a=e.alias,o=e.loc,u=e.dirname;if(a=a||"foreign",i){("object"!==(void 0===i?"undefined":(0,m.default)(i))||Array.isArray(i))&&this.log.error("Invalid options type for "+a,TypeError);var l=(0,T.default)(i,function(e){if(e instanceof E.default)return e});u=u||n.cwd(),o=o||a;for(var c in l){if(!I.default[c]&&this.log)if(M.default[c])this.log.error("Using removed Babel 5 option: "+a+"."+c+" - "+M.default[c].message,ReferenceError);else{var h="Unknown option: "+a+"."+c+". Check out http://babeljs.io/docs/usage/options/ for more information about options.";this.log.error(h+"\n\nA common cause of this error is the presence of a configuration options object without the corresponding preset name. Example:\n\nInvalid:\n `{ presets: [{option: value}] }`\nValid:\n `{ presets: [['presetName', {option: value}]] }`\n\nFor more detailed information on preset configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options.",ReferenceError)}}(0,C.normaliseOptions)(l),l.plugins&&(l.plugins=t.normalisePlugins(o,u,l.plugins)),l.presets&&(l.passPerPreset?l.presets=this.resolvePresets(l.presets,u,function(e,t){r.mergeOptions({options:e,extending:e,alias:t,loc:t,dirname:u})}):(this.mergePresets(l.presets,u),delete l.presets)),i===s?(0,p.default)(s,l):(0,j.default)(s||this.options,l)}},t.prototype.mergePresets=function(e,t){var r=this;this.resolvePresets(e,t,function(e,t){r.mergeOptions({options:e,alias:t,loc:t,dirname:q.default.dirname(t||"")})})},t.prototype.resolvePresets=function(t,r,n){return t.map(function(t){var i=void 0;if(Array.isArray(t)){if(t.length>2)throw new Error("Unexpected extra options "+(0,l.default)(t.slice(2))+" passed to preset.");var s=t;t=s[0],i=s[1]}var a=void 0;try{if("string"==typeof t){if(!(a=(0,k.default)(t,r)))throw new Error("Couldn't find preset "+(0,l.default)(t)+" relative to directory "+(0,l.default)(r));t=e(a)}if("object"===(void 0===t?"undefined":(0,m.default)(t))&&t.__esModule)if(t.default)t=t.default;else{var u=t,c=(u.__esModule,(0,o.default)(u,["__esModule"]));t=c}if("object"===(void 0===t?"undefined":(0,m.default)(t))&&t.buildPreset&&(t=t.buildPreset),"function"!=typeof t&&void 0!==i)throw new Error("Options "+(0,l.default)(i)+" passed to "+(a||"a preset")+" which does not accept options.");if("function"==typeof t&&(t=t(v,i,{dirname:r})),"object"!==(void 0===t?"undefined":(0,m.default)(t)))throw new Error("Unsupported preset format: "+t+".");n&&n(t,a)}catch(e){throw a&&(e.message+=" (While processing preset: "+(0,l.default)(a)+")"),e}return t})},t.prototype.normaliseOptions=function(){var e=this.options;for(var t in I.default){var r=I.default[t],n=e[t];!n&&r.optional||(r.alias?e[r.alias]=e[r.alias]||n:e[t]=n)}},t.prototype.init=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,U.default)(e,this.log),r=Array.isArray(t),n=0,t=r?t:(0,f.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;this.mergeOptions(s)}return this.normaliseOptions(e),this.options},t}();r.default=G,G.memoisedPlugins=[],t.exports=r.default}).call(this,e("_process"))},{"../../../api/node":29,"../../../helpers/merge":32,"../../../helpers/resolve-plugin":35,"../../../helpers/resolve-preset":36,"../../plugin":53,"./build-config-chain":43,"./config":44,"./index":45,"./removed":48,_process:539,"babel-messages":103,"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/json/stringify":114,"babel-runtime/core-js/object/assign":117,"babel-runtime/helpers/classCallCheck":127,"babel-runtime/helpers/objectWithoutProperties":129,"babel-runtime/helpers/typeof":131,"lodash/clone":480,"lodash/cloneDeepWith":482,path:535}],47:[function(e,t,r){"use strict";function n(e){return!!e}function i(e){return l.booleanify(e)}function s(e){return l.list(e)}r.__esModule=!0,r.filename=void 0,r.boolean=n,r.booleanString=i,r.list=s;var a=e("slash"),o=function(e){return e&&e.__esModule?e:{default:e}}(a),u=e("../../../util"),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);r.filename=o.default},{"../../../util":54,slash:589}],48:[function(e,t,r){"use strict";t.exports={auxiliaryComment:{message:"Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`"},blacklist:{message:"Put the specific transforms you want in the `plugins` option"},breakConfig:{message:"This is not a necessary option in Babel 6"},experimental:{message:"Put the specific transforms you want in the `plugins` option"},externalHelpers:{message:"Use the `external-helpers` plugin instead. Check out http://babeljs.io/docs/plugins/external-helpers/"},extra:{message:""},jsxPragma:{message:"use the `pragma` option in the `react-jsx` plugin . Check out http://babeljs.io/docs/plugins/transform-react-jsx/"},loose:{message:"Specify the `loose` option for the relevant plugin you are using or use a preset that sets the option."},metadataUsedHelpers:{message:"Not required anymore as this is enabled by default"},modules:{message:"Use the corresponding module transform plugin in the `plugins` option. Check out http://babeljs.io/docs/plugins/#modules"},nonStandard:{message:"Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. Also check out the react preset http://babeljs.io/docs/plugins/preset-react/"},optional:{message:"Put the specific transforms you want in the `plugins` option"},sourceMapName:{message:"Use the `sourceMapTarget` option"},stage:{message:"Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets"},whitelist:{message:"Put the specific transforms you want in the `plugins` option"}}},{}],49:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("../plugin"),s=n(i),a=e("lodash/sortBy"),o=n(a);r.default=new s.default({name:"internal.blockHoist",visitor:{Block:{exit:function(e){for(var t=e.node,r=!1,n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return t.code=!1,t.mode="lint",this.transform(e,t)},e.prototype.pretransform=function(e,t){var r=new p.default(t,this);return r.wrap(e,function(){return r.addCode(e),r.parseCode(e),r})},e.prototype.transform=function(e,t){var r=new p.default(t,this);return r.wrap(e,function(){return r.addCode(e),r.parseCode(e),r.transform()})},e.prototype.analyse=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments[2];return t.code=!1,r&&(t.plugins=t.plugins||[],t.plugins.push(new l.default({visitor:r}))),this.transform(e,t).metadata},e.prototype.transformFromAst=function(e,t,r){e=(0,o.default)(e);var n=new p.default(r,this);return n.wrap(t,function(){return n.addCode(t),n.addAst(e),n.transform()})},e}();r.default=h,t.exports=r.default},{"../helpers/normalize-ast":33,"./file":40,"./plugin":53,"babel-runtime/helpers/classCallCheck":127}],52:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/helpers/classCallCheck"),s=n(i),a=e("babel-runtime/helpers/possibleConstructorReturn"),o=n(a),u=e("babel-runtime/helpers/inherits"),l=n(u),c=e("../store"),p=n(c),h=e("./file"),f=(n(h),function(e){function t(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,s.default)(this,t);var a=(0,o.default)(this,e.call(this));return a.plugin=n,a.key=n.key,a.file=r,a.opts=i,a}return(0,l.default)(t,e),t.prototype.addHelper=function(){var e;return(e=this.file).addHelper.apply(e,arguments)},t.prototype.addImport=function(){var e;return(e=this.file).addImport.apply(e,arguments)},t.prototype.getModuleName=function(){var e;return(e=this.file).getModuleName.apply(e,arguments)},t.prototype.buildCodeFrameError=function(){var e;return(e=this.file).buildCodeFrameError.apply(e,arguments)},t}(p.default));r.default=f,t.exports=r.default},{"../store":38,"./file":40,"babel-runtime/helpers/classCallCheck":127,"babel-runtime/helpers/inherits":128,"babel-runtime/helpers/possibleConstructorReturn":130}],53:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/core-js/get-iterator"),s=n(i),a=e("babel-runtime/helpers/classCallCheck"),o=n(a),u=e("babel-runtime/helpers/possibleConstructorReturn"),l=n(u),c=e("babel-runtime/helpers/inherits"),p=n(c),h=e("./file/options/option-manager"),f=n(h),d=e("babel-messages"),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(d),y=e("../store"),g=n(y),b=e("babel-traverse"),v=n(b),x=e("lodash/assign"),E=n(x),A=e("lodash/clone"),D=n(A),C=["enter","exit"],S=function(e){function t(r,n){(0,o.default)(this,t);var i=(0,l.default)(this,e.call(this));return i.initialized=!1,i.raw=(0,E.default)({},r),i.key=i.take("name")||n,i.manipulateOptions=i.take("manipulateOptions"),i.post=i.take("post"),i.pre=i.take("pre"),i.visitor=i.normaliseVisitor((0,D.default)(i.take("visitor"))||{}),i}return(0,p.default)(t,e),t.prototype.take=function(e){var t=this.raw[e];return delete this.raw[e],t},t.prototype.chain=function(e,t){if(!e[t])return this[t];if(!this[t])return e[t];var r=[e[t],this[t]];return function(){for(var e=void 0,t=arguments.length,n=Array(t),i=0;i=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;if(c){var p=c.apply(this,n);null!=p&&(e=p)}}return e}},t.prototype.maybeInherit=function(e){var t=this.take("inherits");t&&(t=f.default.normalisePlugin(t,e,"inherits"),this.manipulateOptions=this.chain(t,"manipulateOptions"),this.post=this.chain(t,"post"),this.pre=this.chain(t,"pre"),this.visitor=v.default.visitors.merge([t.visitor,this.visitor]))},t.prototype.init=function(e,t){if(!this.initialized){this.initialized=!0,this.maybeInherit(e);for(var r in this.raw)throw new Error(m.get("pluginInvalidProperty",e,t,r))}},t.prototype.normaliseVisitor=function(e){for(var t=C,r=Array.isArray(t),n=0,t=r?t:(0,s.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}if(e[i])throw new Error("Plugins aren't allowed to specify catch-all enter/exit handlers. Please target individual nodes.")}return v.default.explode(e),e},t}(g.default);r.default=S,t.exports=r.default},{"../store":38,"./file/options/option-manager":46,"babel-messages":103,"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/classCallCheck":127,"babel-runtime/helpers/inherits":128,"babel-runtime/helpers/possibleConstructorReturn":130,"babel-traverse":136,"lodash/assign":477,"lodash/clone":480}],54:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var r=t||i.EXTENSIONS,n=S.default.extname(e);return(0,E.default)(r,n)}function s(e){return e?Array.isArray(e)?e:"string"==typeof e?e.split(","):[e]:[]}function a(e){if(!e)return new RegExp(/.^/);if(Array.isArray(e)&&(e=new RegExp(e.map(m.default).join("|"),"i")),"string"==typeof e){e=(0,w.default)(e),((0,g.default)(e,"./")||(0,g.default)(e,"*/"))&&(e=e.slice(2)),(0,g.default)(e,"**/")&&(e=e.slice(3));var t=v.default.makeRe(e,{nocase:!0});return new RegExp(t.source.slice(1,-1),"i")}if((0,D.default)(e))return e;throw new TypeError("illegal type for regexify")}function o(e,t){return e?"boolean"==typeof e?o([e],t):"string"==typeof e?o(s(e),t):Array.isArray(e)?(t&&(e=e.map(t)),e):[e]:[]}function u(e){return"true"===e||1==e||!("false"===e||0==e||!e)&&e}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2];if(e=e.replace(/\\/g,"/"),r){for(var n=r,i=Array.isArray(n),s=0,n=i?n:(0,h.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}if(c(a,e))return!1}return!0}if(t.length)for(var o=t,u=Array.isArray(o),l=0,o=u?o:(0,h.default)(o);;){var p;if(u){if(l>=o.length)break;p=o[l++]}else{if(l=o.next(),l.done)break;p=l.value}var f=p;if(c(f,e))return!0}return!1}function c(e,t){return"function"==typeof e?e(t):e.test(t)}r.__esModule=!0,r.inspect=r.inherits=void 0;var p=e("babel-runtime/core-js/get-iterator"),h=n(p),f=e("util");Object.defineProperty(r,"inherits",{enumerable:!0,get:function(){return f.inherits}}),Object.defineProperty(r,"inspect",{enumerable:!0,get:function(){return f.inspect}}),r.canCompile=i,r.list=s,r.regexify=a,r.arrayify=o,r.booleanify=u,r.shouldIgnore=l;var d=e("lodash/escapeRegExp"),m=n(d),y=e("lodash/startsWith"),g=n(y),b=e("minimatch"),v=n(b),x=e("lodash/includes"),E=n(x),A=e("lodash/isRegExp"),D=n(A),C=e("path"),S=n(C),_=e("slash"),w=n(_);i.EXTENSIONS=[".js",".jsx",".es6",".es"]},{"babel-runtime/core-js/get-iterator":113,"lodash/escapeRegExp":486,"lodash/includes":496,"lodash/isRegExp":508,"lodash/startsWith":521,minimatch:531,path:535,slash:589,util:601}],55:[function(e,t,r){function n(){this._array=[],this._set=Object.create(null)}var i=e("./util"),s=Object.prototype.hasOwnProperty;n.fromArray=function(e,t){for(var r=new n,i=0,s=e.length;i=0&&e>1;return t?-r:r}var s=e("./base64");r.encode=function(e){var t,r="",i=n(e);do{t=31&i,i>>>=5,i>0&&(t|=32),r+=s.encode(t)}while(i>0);return r},r.decode=function(e,t,r){var n,a,o=e.length,u=0,l=0;do{if(t>=o)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(a=s.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));n=!!(32&a),a&=31,u+=a<0?t-u>1?n(u,t,i,s,a,o):o==r.LEAST_UPPER_BOUND?t1?n(e,u,i,s,a,o):o==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,t,i,s){if(0===t.length)return-1;var a=n(-1,t.length,e,t,i,s||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===i(t[a],t[a-1],!0);)--a;return a}},{}],59:[function(e,t,r){function n(e,t){var r=e.generatedLine,n=t.generatedLine,i=e.generatedColumn,a=t.generatedColumn;return n>r||n==r&&a>=i||s.compareByGeneratedPositionsInflated(e,t)<=0}function i(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var s=e("./util");i.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},i.prototype.add=function(e){n(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},i.prototype.toArray=function(){return this._sorted||(this._array.sort(s.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},r.MappingList=i},{"./util":64}],60:[function(e,t,r){function n(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function i(e,t){return Math.round(e+Math.random()*(t-e))}function s(e,t,r,a){if(r=0){var s=this._originalMappings[i];if(void 0===e.column)for(var a=s.originalLine;s&&s.originalLine===a;)n.push({line:o.getArg(s,"generatedLine",null),column:o.getArg(s,"generatedColumn",null),lastColumn:o.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++i];else for(var l=s.originalColumn;s&&s.originalLine===t&&s.originalColumn==l;)n.push({line:o.getArg(s,"generatedLine",null),column:o.getArg(s,"generatedColumn",null),lastColumn:o.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++i]}return n},r.SourceMapConsumer=n,i.prototype=Object.create(n.prototype),i.prototype.consumer=n,i.fromSourceMap=function(e){var t=Object.create(i.prototype),r=t._names=l.fromArray(e._names.toArray(),!0),n=t._sources=l.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],c=t.__originalMappings=[],h=0,f=a.length;h1&&(r.source=m+i[1],m+=i[1],r.originalLine=f+i[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=d+i[3],d=r.originalColumn,i.length>4&&(r.name=y+i[4],y+=i[4])),A.push(r),"number"==typeof r.originalLine&&E.push(r)}p(A,o.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,p(E,o.compareByOriginalPositions),this.__originalMappings=E},i.prototype._findMapping=function(e,t,r,n,i,s){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[n]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[n]);return u.search(e,t,i,s)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[r];if(i.generatedLine===t.generatedLine){var s=o.getArg(i,"source",null);null!==s&&(s=this._sources.at(s),null!=this.sourceRoot&&(s=o.join(this.sourceRoot,s)));var a=o.getArg(i,"name",null);return null!==a&&(a=this._names.at(a)),{source:s,line:o.getArg(i,"originalLine",null),column:o.getArg(i,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},i.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=o.urlParse(this.sourceRoot))){var n=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(n))return this.sourcesContent[this._sources.indexOf(n)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t=o.getArg(e,"source");if(null!=this.sourceRoot&&(t=o.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var r={source:t,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")},i=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",n.GREATEST_LOWER_BOUND));if(i>=0){var s=this._originalMappings[i];if(s.source===r.source)return{line:o.getArg(s,"generatedLine",null),column:o.getArg(s,"generatedColumn",null),lastColumn:o.getArg(s,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=i,a.prototype=Object.create(n.prototype),a.prototype.constructor=n,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t0&&e.column>=0)||t||r||n)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:t,name:n}))},n.prototype._serializeMappings=function(){for(var e,t,r,n,a=0,o=1,u=0,l=0,c=0,p=0,h="",f=this._mappings.toArray(),d=0,m=f.length;d0){if(!s.compareByGeneratedPositionsInflated(t,f[d-1]))continue;e+=","}e+=i.encode(t.generatedColumn-a),a=t.generatedColumn,null!=t.source&&(n=this._sources.indexOf(t.source),e+=i.encode(n-p),p=n,e+=i.encode(t.originalLine-1-l),l=t.originalLine-1,e+=i.encode(t.originalColumn-u),u=t.originalColumn,null!=t.name&&(r=this._names.indexOf(t.name),e+=i.encode(r-c),c=r)),h+=e}return h},n.prototype._generateSourcesContent=function(e,t){return e.map(function(e){if(!this._sourcesContents)return null;null!=t&&(e=s.relative(t,e));var r=s.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},n.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},n.prototype.toString=function(){return JSON.stringify(this.toJSON())},r.SourceMapGenerator=n},{"./array-set":55,"./base64-vlq":56,"./mapping-list":59,"./util":64}],63:[function(e,t,r){function n(e,t,r,n,i){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==r?null:r,this.name=null==i?null:i,this[a]=!0,null!=n&&this.add(n)}var i=e("./source-map-generator").SourceMapGenerator,s=e("./util"),a="$$$isSourceNode$$$";n.fromStringWithSourceMap=function(e,t,r){function i(e,t){if(null===e||void 0===e.source)a.add(t);else{var i=r?s.join(r,e.source):e.source;a.add(new n(e.originalLine,e.originalColumn,i,t,e.name))}}var a=new n,o=e.split(/(\r?\n)/),u=function(){return o.shift()+(o.shift()||"")},l=1,c=0,p=null;return t.eachMapping(function(e){if(null!==p){if(!(l0&&(p&&i(p,u()),a.add(o.join(""))),t.sources.forEach(function(e){var n=t.sourceContentFor(e);null!=n&&(null!=r&&(e=s.join(r,e)),a.setSourceContent(e,n))}),a},n.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[a]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},n.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[a]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},n.prototype.walk=function(e){for(var t,r=0,n=this.children.length;r0){for(t=[],r=0;r=0;c--)a=u[c],"."===a?u.splice(c,1):".."===a?l++:l>0&&(""===a?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return t=u.join("/"),""===t&&(t=o?"/":"."),n?(n.path=t,s(n)):t}function o(e,t){""===e&&(e="."),""===t&&(t=".");var r=i(t),n=i(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),s(r);if(r||t.match(b))return t;if(n&&!n.host&&!n.path)return n.host=t,s(n);var o="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=o,s(n)):o}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==t.indexOf(e+"/");){var n=e.lastIndexOf("/");if(n<0)return t;if(e=e.slice(0,n),e.match(/^([^\/]+:\/)?\/*$/))return t;++r}return Array(r+1).join("../")+t.substr(e.length+1)}function l(e){return e}function c(e){return h(e)?"$"+e:e}function p(e){return h(e)?e.slice(1):e}function h(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var r=t-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function f(e,t,r){var n=e.source-t.source;return 0!==n?n:0!==(n=e.originalLine-t.originalLine)?n:0!==(n=e.originalColumn-t.originalColumn)||r?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:(n=e.generatedLine-t.generatedLine,0!==n?n:e.name-t.name)}function d(e,t,r){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)||r?n:0!==(n=e.source-t.source)?n:0!==(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,0!==n?n:e.name-t.name)}function m(e,t){return e===t?0:e>t?1:-1}function y(e,t){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:0!==(r=m(e.source,t.source))?r:0!==(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,0!==r?r:m(e.name,t.name))}r.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,b=/^data:.+\,.+$/;r.urlParse=i,r.urlGenerate=s,r.normalize=a,r.join=o,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},r.relative=u;var v=function(){return!("__proto__"in Object.create(null))}();r.toSetString=v?l:c,r.fromSetString=v?l:p,r.compareByOriginalPositions=f,r.compareByGeneratedPositionsDeflated=d,r.compareByGeneratedPositionsInflated=y},{}],65:[function(e,t,r){r.SourceMapGenerator=e("./lib/source-map-generator").SourceMapGenerator,r.SourceMapConsumer=e("./lib/source-map-consumer").SourceMapConsumer,r.SourceNode=e("./lib/source-node").SourceNode},{"./lib/source-map-consumer":61,"./lib/source-map-generator":62,"./lib/source-node":63}],66:[function(e,t,r){t.exports={_args:[[{raw:"babel-core@^6.18.2",scope:null,escapedName:"babel-core",name:"babel-core",rawSpec:"^6.18.2",spec:">=6.18.2 <7.0.0",type:"range"},"/Users/evgenypoberezkin/JSON/ajv-v4/node_modules/regenerator"]],_from:"babel-core@>=6.18.2 <7.0.0",_id:"babel-core@6.24.0",_inCache:!0,_location:"/babel-core",_nodeVersion:"6.9.0",_npmOperationalInternal:{host:"packages-18-east.internal.npmjs.com",tmp:"tmp/babel-core-6.24.0.tgz_1489371490272_0.8722315817140043"},_npmUser:{name:"hzoo",email:"hi@henryzoo.com"},_npmVersion:"3.10.10",_phantomChildren:{},_requested:{raw:"babel-core@^6.18.2",scope:null,escapedName:"babel-core",name:"babel-core",rawSpec:"^6.18.2",spec:">=6.18.2 <7.0.0",type:"range"},_requiredBy:["/babel-register","/regenerator"],_resolved:"https://registry.npmjs.org/babel-core/-/babel-core-6.24.0.tgz",_shasum:"8f36a0a77f5c155aed6f920b844d23ba56742a02",_shrinkwrap:null,_spec:"babel-core@^6.18.2",_where:"/Users/evgenypoberezkin/JSON/ajv-v4/node_modules/regenerator",author:{name:"Sebastian McKenzie",email:"sebmck@gmail.com"},dependencies:{"babel-code-frame":"^6.22.0","babel-generator":"^6.24.0","babel-helpers":"^6.23.0","babel-messages":"^6.23.0","babel-register":"^6.24.0","babel-runtime":"^6.22.0","babel-template":"^6.23.0","babel-traverse":"^6.23.1","babel-types":"^6.23.0",babylon:"^6.11.0","convert-source-map":"^1.1.0",debug:"^2.1.1",json5:"^0.5.0",lodash:"^4.2.0",minimatch:"^3.0.2","path-is-absolute":"^1.0.0",private:"^0.1.6",slash:"^1.0.0","source-map":"^0.5.0"},description:"Babel compiler core.",devDependencies:{"babel-helper-fixtures":"^6.22.0","babel-helper-transform-fixture-test-runner":"^6.24.0","babel-polyfill":"^6.23.0"},directories:{},dist:{shasum:"8f36a0a77f5c155aed6f920b844d23ba56742a02",tarball:"https://registry.npmjs.org/babel-core/-/babel-core-6.24.0.tgz"},homepage:"https://babeljs.io/",keywords:["6to5","babel","classes","const","es6","harmony","let","modules","transpile","transpiler","var","babel-core","compiler"],license:"MIT",maintainers:[{name:"amasad",email:"amjad.masad@gmail.com"},{name:"hzoo",email:"hi@henryzoo.com"},{name:"jmm",email:"npm-public@jessemccarthy.net"},{name:"loganfsmyth",email:"loganfsmyth@gmail.com"},{name:"sebmck",email:"sebmck@gmail.com"},{name:"thejameskyle",email:"me@thejameskyle.com"}],name:"babel-core",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"https://github.com/babel/babel/tree/master/packages/babel-core"},scripts:{bench:"make bench",test:"make test"},version:"6.24.0"}},{}],67:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/helpers/classCallCheck"),s=n(i),a=e("trim-right"),o=n(a),u=/^[ \t]+$/,l=function(){function e(t){(0,s.default)(this,e),this._map=null,this._buf=[],this._last="",this._queue=[],this._position={line:1,column:0},this._sourcePosition={identifierName:null,line:null,column:null,filename:null},this._map=t}return e.prototype.get=function(){this._flush();var e=this._map,t={code:(0,o.default)(this._buf.join("")),map:null,rawMappings:e&&e.getRawMappings()};return e&&Object.defineProperty(t,"map",{configurable:!0,enumerable:!0,get:function(){return this.map=e.get()},set:function(e){Object.defineProperty(this,"map",{value:e,writable:!0})}}),t},e.prototype.append=function(e){this._flush();var t=this._sourcePosition,r=t.line,n=t.column,i=t.filename,s=t.identifierName;this._append(e,r,n,s,i)},e.prototype.queue=function(e){if("\n"===e)for(;this._queue.length>0&&u.test(this._queue[0][0]);)this._queue.shift();var t=this._sourcePosition,r=t.line,n=t.column,i=t.filename,s=t.identifierName;this._queue.unshift([e,r,n,s,i])},e.prototype._flush=function(){for(var e=void 0;e=this._queue.pop();)this._append.apply(this,e)},e.prototype._append=function(e,t,r,n,i){this._map&&"\n"!==e[0]&&this._map.mark(this._position.line,this._position.column,t,r,n,i),this._buf.push(e),this._last=e[e.length-1];for(var s=0;s0&&"\n"===this._queue[0][0]&&this._queue.shift()},e.prototype.removeLastSemicolon=function(){this._queue.length>0&&";"===this._queue[0][0]&&this._queue.shift()},e.prototype.endsWith=function(e){if(1===e.length){var t=void 0;if(this._queue.length>0){var r=this._queue[0][0];t=r[r.length-1]}else t=this._last;return t===e}var n=this._last+this._queue.reduce(function(e,t){return t[0]+e},"");return e.length<=n.length&&n.slice(-e.length)===e},e.prototype.hasContent=function(){return this._queue.length>0||!!this._last},e.prototype.source=function(e,t){if(!e||t){var r=t?t[e]:null;this._sourcePosition.identifierName=t&&t.identifierName||null,this._sourcePosition.line=r?r.line:null,this._sourcePosition.column=r?r.column:null,this._sourcePosition.filename=t&&t.filename||null}},e.prototype.withSource=function(e,t,r){if(!this._map)return r();var n=this._sourcePosition.line,i=this._sourcePosition.column,s=this._sourcePosition.filename,a=this._sourcePosition.identifierName;this.source(e,t),r(),this._sourcePosition.line=n,this._sourcePosition.column=i,this._sourcePosition.filename=s,this._sourcePosition.identifierName=a},e.prototype.getCurrentColumn=function(){var e=this._queue.reduce(function(e,t){return t[0]+e},""),t=e.lastIndexOf("\n");return-1===t?this._position.column+e.length:e.length-1-t},e.prototype.getCurrentLine=function(){for(var e=this._queue.reduce(function(e,t){return t[0]+e},""),t=0,r=0;r")),this.space(),this.print(e.returnType,e)}function g(e){this.print(e.name,e),e.optional&&this.token("?"),this.token(":"),this.space(),this.print(e.typeAnnotation,e)}function b(e){this.print(e.id,e),this.print(e.typeParameters,e)}function v(e){this.print(e.id,e),this.print(e.typeParameters,e),e.extends.length&&(this.space(),this.word("extends"),this.space(),this.printList(e.extends,e)),e.mixins&&e.mixins.length&&(this.space(),this.word("mixins"),this.space(),this.printList(e.mixins,e)),this.space(),this.print(e.body,e)}function x(e){"plus"===e.variance?this.token("+"):"minus"===e.variance&&this.token("-")}function E(e){this.word("interface"),this.space(),this._interfaceish(e)}function A(){this.space(),this.token("&"),this.space()}function D(e){this.printJoin(e.types,e,{separator:A})}function C(){this.word("mixed")}function S(){this.word("empty")}function _(e){this.token("?"),this.print(e.typeAnnotation,e)}function w(){this.word("number")}function k(){this.word("string")}function F(){this.word("this")}function T(e){this.token("["),this.printList(e.types,e),this.token("]")}function P(e){this.word("typeof"),this.space(),this.print(e.argument,e)}function B(e){this.word("type"),this.space(),this.print(e.id,e),this.print(e.typeParameters,e),this.space(),this.token("="),this.space(),this.print(e.right,e),this.semicolon()}function O(e){this.token(":"),this.space(),e.optional&&this.token("?"),this.print(e.typeAnnotation,e)}function j(e){this._variance(e),this.word(e.name),e.bound&&this.print(e.bound,e),e.default&&(this.space(),this.token("="),this.space(),this.print(e.default,e))}function N(e){this.token("<"),this.printList(e.params,e,{}),this.token(">")}function I(e){var t=this;e.exact?this.token("{|"):this.token("{");var r=e.properties.concat(e.callProperties,e.indexers);r.length&&(this.space(),this.printJoin(r,e,{addNewlines:function(e){if(e&&!r[0])return 1},indent:!0,statement:!0,iterator:function(){1!==r.length&&(t.format.flowCommaSeparator?t.token(","):t.semicolon(),t.space())}}),this.space()),e.exact?this.token("|}"):this.token("}")}function L(e){e.static&&(this.word("static"),this.space()),this.print(e.value,e)}function M(e){e.static&&(this.word("static"),this.space()),this._variance(e),this.token("["),this.print(e.id,e),this.token(":"),this.space(),this.print(e.key,e),this.token("]"),this.token(":"),this.space(),this.print(e.value,e)}function R(e){e.static&&(this.word("static"),this.space()),this._variance(e),this.print(e.key,e),e.optional&&this.token("?"),this.token(":"),this.space(),this.print(e.value,e)}function U(e){this.print(e.qualification,e),this.token("."),this.print(e.id,e)}function V(){this.space(),this.token("|"),this.space()}function q(e){this.printJoin(e.types,e,{separator:V})}function G(e){this.token("("),this.print(e.expression,e),this.print(e.typeAnnotation,e),this.token(")")}function X(){this.word("void")}r.__esModule=!0,r.AnyTypeAnnotation=n,r.ArrayTypeAnnotation=i,r.BooleanTypeAnnotation=s,r.BooleanLiteralTypeAnnotation=a,r.NullLiteralTypeAnnotation=o,r.DeclareClass=u,r.DeclareFunction=l,r.DeclareInterface=c,r.DeclareModule=p,r.DeclareModuleExports=h,r.DeclareTypeAlias=f,r.DeclareVariable=d,r.ExistentialTypeParam=m,r.FunctionTypeAnnotation=y,r.FunctionTypeParam=g,r.InterfaceExtends=b,r._interfaceish=v,r._variance=x,r.InterfaceDeclaration=E,r.IntersectionTypeAnnotation=D,r.MixedTypeAnnotation=C,r.EmptyTypeAnnotation=S,r.NullableTypeAnnotation=_;var J=e("./types");Object.defineProperty(r,"NumericLiteralTypeAnnotation",{enumerable:!0,get:function(){return J.NumericLiteral}}),Object.defineProperty(r,"StringLiteralTypeAnnotation",{enumerable:!0,get:function(){return J.StringLiteral}}),r.NumberTypeAnnotation=w,r.StringTypeAnnotation=k,r.ThisTypeAnnotation=F,r.TupleTypeAnnotation=T,r.TypeofTypeAnnotation=P,r.TypeAlias=B,r.TypeAnnotation=O,r.TypeParameter=j,r.TypeParameterInstantiation=N,r.ObjectTypeAnnotation=I,r.ObjectTypeCallProperty=L,r.ObjectTypeIndexer=M,r.ObjectTypeProperty=R,r.QualifiedTypeIdentifier=U,r.UnionTypeAnnotation=q,r.TypeCastExpression=G,r.VoidTypeAnnotation=X,r.ClassImplements=b,r.GenericTypeAnnotation=b,r.TypeParameterDeclaration=N},{"./types":77}],72:[function(e,t,r){"use strict";function n(e){this.print(e.name,e),e.value&&(this.token("="),this.print(e.value,e))}function i(e){this.word(e.name)}function s(e){this.print(e.namespace,e),this.token(":"),this.print(e.name,e)}function a(e){this.print(e.object,e),this.token("."),this.print(e.property,e)}function o(e){this.token("{"),this.token("..."),this.print(e.argument,e),this.token("}")}function u(e){this.token("{"),this.print(e.expression,e),this.token("}")}function l(e){this.token("{"),this.token("..."),this.print(e.expression,e),this.token("}")}function c(e){this.token(e.value)}function p(e){var t=e.openingElement;if(this.print(t,e),!t.selfClosing){this.indent();for(var r=e.children,n=Array.isArray(r),i=0,r=n?r:(0,g.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;this.print(a,e)}this.dedent(),this.print(e.closingElement,e)}}function h(){this.space()}function f(e){this.token("<"),this.print(e.name,e),e.attributes.length>0&&(this.space(),this.printJoin(e.attributes,e,{separator:h})),e.selfClosing?(this.space(),this.token("/>")):this.token(">")}function d(e){this.token("")}function m(){}r.__esModule=!0;var y=e("babel-runtime/core-js/get-iterator"),g=function(e){return e&&e.__esModule?e:{default:e}}(y);r.JSXAttribute=n,r.JSXIdentifier=i,r.JSXNamespacedName=s,r.JSXMemberExpression=a,r.JSXSpreadAttribute=o,r.JSXExpressionContainer=u,r.JSXSpreadChild=l,r.JSXText=c,r.JSXElement=p,r.JSXOpeningElement=f,r.JSXClosingElement=d,r.JSXEmptyExpression=m},{"babel-runtime/core-js/get-iterator":113}],73:[function(e,t,r){"use strict";function n(e){var t=this;this.print(e.typeParameters,e),this.token("("),this.printList(e.params,e,{iterator:function(e){e.optional&&t.token("?"),t.print(e.typeAnnotation,e)}}),this.token(")"),e.returnType&&this.print(e.returnType,e)}function i(e){var t=e.kind,r=e.key;"method"!==t&&"init"!==t||e.generator&&this.token("*"),"get"!==t&&"set"!==t||(this.word(t),this.space()),e.async&&(this.word("async"),this.space()),e.computed?(this.token("["),this.print(r,e),this.token("]")):this.print(r,e),this._params(e),this.space(),this.print(e.body,e)}function s(e){e.async&&(this.word("async"),this.space()),this.word("function"),e.generator&&this.token("*"),e.id?(this.space(),this.print(e.id,e)):this.space(),this._params(e),this.space(),this.print(e.body,e)}function a(e){e.async&&(this.word("async"),this.space());var t=e.params[0];1===e.params.length&&l.isIdentifier(t)&&!o(e,t)?this.print(t,e):this._params(e),this.space(),this.token("=>"),this.space(),this.print(e.body,e)}function o(e,t){return e.typeParameters||e.returnType||t.typeAnnotation||t.optional||t.trailingComments}r.__esModule=!0,r.FunctionDeclaration=void 0,r._params=n,r._method=i,r.FunctionExpression=s,r.ArrowFunctionExpression=a;var u=e("babel-types"),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);r.FunctionDeclaration=s},{"babel-types":169}],74:[function(e,t,r){"use strict";function n(e){"type"!==e.importKind&&"typeof"!==e.importKind||(this.word(e.importKind),this.space()),this.print(e.imported,e),e.local&&e.local.name!==e.imported.name&&(this.space(),this.word("as"),this.space(),this.print(e.local,e))}function i(e){this.print(e.local,e)}function s(e){this.print(e.exported,e)}function a(e){this.print(e.local,e),e.exported&&e.local.name!==e.exported.name&&(this.space(),this.word("as"),this.space(),this.print(e.exported,e))}function o(e){this.token("*"),this.space(),this.word("as"),this.space(),this.print(e.exported,e)}function u(e){this.word("export"),this.space(),this.token("*"),this.space(),this.word("from"),this.space(),this.print(e.source,e),this.semicolon()}function l(){this.word("export"),this.space(),p.apply(this,arguments)}function c(){this.word("export"),this.space(),this.word("default"),this.space(),p.apply(this,arguments)}function p(e){if(e.declaration){var t=e.declaration;this.print(t,e),m.isStatement(t)||this.semicolon()}else{"type"===e.exportKind&&(this.word("type"),this.space());for(var r=e.specifiers.slice(0),n=!1;;){var i=r[0];if(!m.isExportDefaultSpecifier(i)&&!m.isExportNamespaceSpecifier(i))break;n=!0,this.print(r.shift(),e),r.length&&(this.token(","),this.space())}(r.length||!r.length&&!n)&&(this.token("{"),r.length&&(this.space(),this.printList(r,e),this.space()),this.token("}")),e.source&&(this.space(),this.word("from"),this.space(),this.print(e.source,e)),this.semicolon()}}function h(e){this.word("import"),this.space(),"type"!==e.importKind&&"typeof"!==e.importKind||(this.word(e.importKind),this.space());var t=e.specifiers.slice(0);if(t&&t.length){for(;;){var r=t[0];if(!m.isImportDefaultSpecifier(r)&&!m.isImportNamespaceSpecifier(r))break;this.print(t.shift(),e),t.length&&(this.token(","),this.space())}t.length&&(this.token("{"),this.space(),this.printList(t,e),this.space(),this.token("}")),this.space(),this.word("from"),this.space()}this.print(e.source,e),this.semicolon()}function f(e){this.token("*"),this.space(),this.word("as"),this.space(),this.print(e.local,e)}r.__esModule=!0,r.ImportSpecifier=n,r.ImportDefaultSpecifier=i,r.ExportDefaultSpecifier=s,r.ExportSpecifier=a, +r.ExportNamespaceSpecifier=o,r.ExportAllDeclaration=u,r.ExportNamedDeclaration=l,r.ExportDefaultDeclaration=c,r.ImportDeclaration=h,r.ImportNamespaceSpecifier=f;var d=e("babel-types"),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(d)},{"babel-types":169}],75:[function(e,t,r){"use strict";function n(e){this.word("with"),this.space(),this.token("("),this.print(e.object,e),this.token(")"),this.printBlock(e)}function i(e){this.word("if"),this.space(),this.token("("),this.print(e.test,e),this.token(")"),this.space();var t=e.alternate&&D.isIfStatement(s(e.consequent));t&&(this.token("{"),this.newline(),this.indent()),this.printAndIndentOnComments(e.consequent,e),t&&(this.dedent(),this.newline(),this.token("}")),e.alternate&&(this.endsWith("}")&&this.space(),this.word("else"),this.space(),this.printAndIndentOnComments(e.alternate,e))}function s(e){return D.isStatement(e.body)?s(e.body):e}function a(e){this.word("for"),this.space(),this.token("("),this.inForStatementInitCounter++,this.print(e.init,e),this.inForStatementInitCounter--,this.token(";"),e.test&&(this.space(),this.print(e.test,e)),this.token(";"),e.update&&(this.space(),this.print(e.update,e)),this.token(")"),this.printBlock(e)}function o(e){this.word("while"),this.space(),this.token("("),this.print(e.test,e),this.token(")"),this.printBlock(e)}function u(e){this.word("do"),this.space(),this.print(e.body,e),this.space(),this.word("while"),this.space(),this.token("("),this.print(e.test,e),this.token(")"),this.semicolon()}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"label";return function(r){this.word(e);var n=r[t];if(n){this.space();var i=this.startTerminatorless();this.print(n,r),this.endTerminatorless(i)}this.semicolon()}}function c(e){this.print(e.label,e),this.token(":"),this.space(),this.print(e.body,e)}function p(e){this.word("try"),this.space(),this.print(e.block,e),this.space(),e.handlers?this.print(e.handlers[0],e):this.print(e.handler,e),e.finalizer&&(this.space(),this.word("finally"),this.space(),this.print(e.finalizer,e))}function h(e){this.word("catch"),this.space(),this.token("("),this.print(e.param,e),this.token(")"),this.space(),this.print(e.body,e)}function f(e){this.word("switch"),this.space(),this.token("("),this.print(e.discriminant,e),this.token(")"),this.space(),this.token("{"),this.printSequence(e.cases,e,{indent:!0,addNewlines:function(t,r){if(!t&&e.cases[e.cases.length-1]===r)return-1}}),this.token("}")}function d(e){e.test?(this.word("case"),this.space(),this.print(e.test,e),this.token(":")):(this.word("default"),this.token(":")),e.consequent.length&&(this.newline(),this.printSequence(e.consequent,e,{indent:!0}))}function m(){this.word("debugger"),this.semicolon()}function y(){if(this.token(","),this.newline(),this.endsWith("\n"))for(var e=0;e<4;e++)this.space(!0)}function g(){if(this.token(","),this.newline(),this.endsWith("\n"))for(var e=0;e<6;e++)this.space(!0)}function b(e,t){this.word(e.kind),this.space();var r=!1;if(!D.isFor(t))for(var n=e.declarations,i=Array.isArray(n),s=0,n=i?n:(0,E.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;o.init&&(r=!0)}var u=void 0;r&&(u="const"===e.kind?g:y),this.printList(e.declarations,e,{separator:u}),(!D.isFor(t)||t.left!==e&&t.init!==e)&&this.semicolon()}function v(e){this.print(e.id,e),this.print(e.id.typeAnnotation,e),e.init&&(this.space(),this.token("="),this.space(),this.print(e.init,e))}r.__esModule=!0,r.ThrowStatement=r.BreakStatement=r.ReturnStatement=r.ContinueStatement=r.ForAwaitStatement=r.ForOfStatement=r.ForInStatement=void 0;var x=e("babel-runtime/core-js/get-iterator"),E=function(e){return e&&e.__esModule?e:{default:e}}(x);r.WithStatement=n,r.IfStatement=i,r.ForStatement=a,r.WhileStatement=o,r.DoWhileStatement=u,r.LabeledStatement=c,r.TryStatement=p,r.CatchClause=h,r.SwitchStatement=f,r.SwitchCase=d,r.DebuggerStatement=m,r.VariableDeclaration=b,r.VariableDeclarator=v;var A=e("babel-types"),D=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(A),C=function(e){return function(t){this.word("for"),this.space(),"await"===e&&(this.word("await"),this.space()),this.token("("),this.print(t.left,t),this.space(),this.word("await"===e?"of":e),this.space(),this.print(t.right,t),this.token(")"),this.printBlock(t)}};r.ForInStatement=C("in"),r.ForOfStatement=C("of"),r.ForAwaitStatement=C("await"),r.ContinueStatement=l("continue"),r.ReturnStatement=l("return","argument"),r.BreakStatement=l("break"),r.ThrowStatement=l("throw","argument")},{"babel-runtime/core-js/get-iterator":113,"babel-types":169}],76:[function(e,t,r){"use strict";function n(e){this.print(e.tag,e),this.print(e.quasi,e)}function i(e,t){var r=t.quasis[0]===e,n=t.quasis[t.quasis.length-1]===e,i=(r?"`":"}")+e.value.raw+(n?"`":"${");this.token(i)}function s(e){for(var t=e.quasis,r=0;r0&&this.space(),this.print(i,e),n=0||e.indexOf("@preserve")>=0},"auto"===a.compact&&(a.compact=e.length>5e5,a.compact&&console.error("[BABEL] "+g.get("codeGeneratorDeopt",t.filename,"500KB"))),a.compact&&(a.indent.adjustMultilineComment=!1),a}function s(e,t){if(!e)return"double";for(var r={single:0,double:0},n=0,i=0;i=3)break}}return r.single>r.double?"single":"double"}r.__esModule=!0,r.CodeGenerator=void 0;var a=e("babel-runtime/helpers/classCallCheck"),o=n(a),u=e("babel-runtime/helpers/possibleConstructorReturn"),l=n(u),c=e("babel-runtime/helpers/inherits"),p=n(c);r.default=function(e,t,r){return new x(e,t,r).generate()};var h=e("detect-indent"),f=n(h),d=e("./source-map"),m=n(d),y=e("babel-messages"),g=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(y),b=e("./printer"),v=n(b),x=function(e){function t(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments[2];(0,o.default)(this,t);var a=r.tokens||[],u=i(s,n,a),c=n.sourceMaps?new m.default(n,s):null,p=(0,l.default)(this,e.call(this,u,c,a));return p.ast=r,p}return(0,p.default)(t,e),t.prototype.generate=function(){return e.prototype.generate.call(this,this.ast)},t}(v.default);r.CodeGenerator=function(){function e(t,r,n){(0,o.default)(this,e),this._generator=new x(t,r,n)}return e.prototype.generate=function(){return this._generator.generate()},e}()},{"./printer":82,"./source-map":83,"babel-messages":103,"babel-runtime/helpers/classCallCheck":127,"babel-runtime/helpers/inherits":128,"babel-runtime/helpers/possibleConstructorReturn":130,"detect-indent":299}],79:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){function t(e,t){var n=r[e];r[e]=n?function(e,r,i){var s=n(e,r,i);return null==s?t(e,r,i):s}:t}for(var r={},n=(0,m.default)(e),i=Array.isArray(n),s=0,n=i?n:(0,f.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a,u=E.FLIPPED_ALIAS_KEYS[o];if(u)for(var l=u,c=Array.isArray(l),p=0,l=c?l:(0,f.default)(l);;){var h;if(c){if(p>=l.length)break;h=l[p++]}else{if(p=l.next(),p.done)break;h=p.value}var d=h;t(d,e[o])}else t(o,e[o])}return r}function a(e,t,r,n){var i=e[t.type];return i?i(t,r,n):null}function o(e){return!!E.isCallExpression(e)||!!E.isMemberExpression(e)&&(o(e.object)||!e.computed&&o(e.property))}function u(e,t,r){if(!e)return 0;E.isExpressionStatement(e)&&(e=e.expression);var n=a(D,e,t);if(!n){var i=a(C,e,t);if(i)for(var s=0;ss)return!0}return!1}function u(e,t){return"in"===e.operator&&(v.isVariableDeclarator(t)||v.isFor(t))}function l(e,t){return!(v.isForStatement(t)||v.isThrowStatement(t)||v.isReturnStatement(t)||v.isIfStatement(t)&&t.test===e||v.isWhileStatement(t)&&t.test===e||v.isForInStatement(t)&&t.right===e||v.isSwitchStatement(t)&&t.discriminant===e||v.isExpressionStatement(t)&&t.expression===e)}function c(e,t){return v.isBinary(t)||v.isUnaryLike(t)||v.isCallExpression(t)||v.isMemberExpression(t)||v.isNewExpression(t)||v.isConditionalExpression(t)&&e===t.test}function p(e,t,r){return g(r,{considerDefaultExports:!0})}function h(e,t){return v.isMemberExpression(t,{object:e})||v.isCallExpression(t,{callee:e})||v.isNewExpression(t,{callee:e})}function f(e,t,r){return g(r,{considerDefaultExports:!0})}function d(e,t){return!!(v.isExportDeclaration(t)||v.isBinaryExpression(t)||v.isLogicalExpression(t)||v.isUnaryExpression(t)||v.isTaggedTemplateExpression(t))||h(e,t)}function m(e,t){return!!(v.isUnaryLike(t)||v.isBinary(t)||v.isConditionalExpression(t,{test:e})||v.isAwaitExpression(t))||h(e,t)}function y(e){return!!v.isObjectPattern(e.left)||m.apply(void 0,arguments)}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.considerArrow,n=void 0!==r&&r,i=t.considerDefaultExports,s=void 0!==i&&i,a=e.length-1,o=e[a];a--;for(var u=e[a];a>0;){if(v.isExpressionStatement(u,{expression:o})||v.isTaggedTemplateExpression(u)||s&&v.isExportDefaultDeclaration(u,{declaration:o})||n&&v.isArrowFunctionExpression(u,{body:o}))return!0;if(!(v.isCallExpression(u,{callee:o})||v.isSequenceExpression(u)&&u.expressions[0]===o||v.isMemberExpression(u,{object:o})||v.isConditional(u,{test:o})||v.isBinary(u,{left:o})||v.isAssignmentExpression(u,{left:o})))return!1;o=u,a--,u=e[a]}return!1}r.__esModule=!0,r.AwaitExpression=r.FunctionTypeAnnotation=void 0,r.NullableTypeAnnotation=n,r.UpdateExpression=i,r.ObjectExpression=s,r.DoExpression=a,r.Binary=o,r.BinaryExpression=u,r.SequenceExpression=l,r.YieldExpression=c,r.ClassExpression=p,r.UnaryLike=h,r.FunctionExpression=f,r.ArrowFunctionExpression=d,r.ConditionalExpression=m,r.AssignmentExpression=y;var b=e("babel-types"),v=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(b),x={"||":0,"&&":1,"|":2,"^":3,"&":4,"==":5,"===":5,"!=":5,"!==":5,"<":6,">":6,"<=":6,">=":6,in:6,instanceof:6,">>":7,"<<":7,">>>":7,"+":8,"-":8,"*":9,"/":9,"%":9,"**":10};r.FunctionTypeAnnotation=n,r.AwaitExpression=c},{"babel-types":169}],81:[function(e,t,r){"use strict";function n(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return l.isMemberExpression(e)?(n(e.object,t),e.computed&&n(e.property,t)):l.isBinary(e)||l.isAssignmentExpression(e)?(n(e.left,t),n(e.right,t)):l.isCallExpression(e)?(t.hasCall=!0,n(e.callee,t)):l.isFunction(e)?t.hasFunction=!0:l.isIdentifier(e)&&(t.hasHelper=t.hasHelper||i(e.callee)),t}function i(e){return l.isMemberExpression(e)?i(e.object)||i(e.property):l.isIdentifier(e)?"require"===e.name||"_"===e.name[0]:l.isCallExpression(e)?i(e.callee):!(!l.isBinary(e)&&!l.isAssignmentExpression(e))&&(l.isIdentifier(e.left)&&i(e.left)||i(e.right))}function s(e){return l.isLiteral(e)||l.isObjectExpression(e)||l.isArrayExpression(e)||l.isIdentifier(e)||l.isMemberExpression(e)}var a=e("lodash/map"),o=function(e){return e&&e.__esModule?e:{default:e}}(a),u=e("babel-types"),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);r.nodes={AssignmentExpression:function(e){var t=n(e.right);if(t.hasCall&&t.hasHelper||t.hasFunction)return{before:t.hasFunction,after:!0}},SwitchCase:function(e,t){return{before:e.consequent.length||t.cases[0]===e}},LogicalExpression:function(e){if(l.isFunction(e.left)||l.isFunction(e.right))return{after:!0}},Literal:function(e){if("use strict"===e.value)return{after:!0}},CallExpression:function(e){if(l.isFunction(e.callee)||i(e))return{before:!0,after:!0}},VariableDeclaration:function(e){for(var t=0;t0?new F.default(n):null}return e.prototype.generate=function(e){return this.print(e),this._maybeAddAuxComment(),this._buf.get()},e.prototype.indent=function(){this.format.compact||this.format.concise||this._indent++},e.prototype.dedent=function(){this.format.compact||this.format.concise||this._indent--},e.prototype.semicolon=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._maybeAddAuxComment(),this._append(";",!e)},e.prototype.rightBrace=function(){this.format.minified&&this._buf.removeLastSemicolon(),this.token("}")},e.prototype.space=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.format.compact||(this._buf.hasContent()&&!this.endsWith(" ")&&!this.endsWith("\n")||e)&&this._space()},e.prototype.word=function(e){this._endsWithWord&&this._space(),this._maybeAddAuxComment(),this._append(e),this._endsWithWord=!0},e.prototype.number=function(e){this.word(e),this._endsWithInteger=(0,E.default)(+e)&&!j.test(e)&&!B.test(e)&&!O.test(e)&&"."!==e[e.length-1]},e.prototype.token=function(e){("--"===e&&this.endsWith("!")||"+"===e[0]&&this.endsWith("+")||"-"===e[0]&&this.endsWith("-")||"."===e[0]&&this._endsWithInteger)&&this._space(),this._maybeAddAuxComment(),this._append(e)},e.prototype.newline=function(e){if(!this.format.retainLines&&!this.format.compact){if(this.format.concise)return void this.space();if(!(this.endsWith("\n\n")||("number"!=typeof e&&(e=1),e=Math.min(2,e),(this.endsWith("{\n")||this.endsWith(":\n"))&&e--,e<=0)))for(var t=0;t1&&void 0!==arguments[1]&&arguments[1];this._maybeAddParen(e),this._maybeIndent(e),t?this._buf.queue(e):this._buf.append(e),this._endsWithWord=!1,this._endsWithInteger=!1},e.prototype._maybeIndent=function(e){this._indent&&this.endsWith("\n")&&"\n"!==e[0]&&this._buf.queue(this._getIndent())},e.prototype._maybeAddParen=function(e){var t=this._parenPushNewlineState;if(t){this._parenPushNewlineState=null;var r=void 0;for(r=0;r2&&void 0!==arguments[2]?arguments[2]:{};if(e&&e.length){r.indent&&this.indent();for(var n={addNewlines:r.addNewlines},i=0;i1&&void 0!==arguments[1])||arguments[1];e.innerComments&&(t&&this.indent(),this._printComments(e.innerComments),t&&this.dedent())},e.prototype.printSequence=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.statement=!0,this.printJoin(e,t,r)},e.prototype.printList=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return null==r.separator&&(r.separator=s),this.printJoin(e,t,r)},e.prototype._printNewline=function(e,t,r,n){var i=this;if(!this.format.retainLines&&!this.format.compact){if(this.format.concise)return void this.space();var s=0;if(null!=t.start&&!t._ignoreUserWhitespace&&this._whitespace)if(e){var a=t.leadingComments,o=a&&(0,g.default)(a,function(e){return!!e.loc&&i.format.shouldPrintComment(e.value)});s=this._whitespace.getNewlinesBefore(o||t)}else{var u=t.trailingComments,l=u&&(0,v.default)(u,function(e){return!!e.loc&&i.format.shouldPrintComment(e.value)});s=this._whitespace.getNewlinesAfter(l||t)}else{e||s++,n.addNewlines&&(s+=n.addNewlines(e,t)||0);var c=w.needsWhitespaceAfter;e&&(c=w.needsWhitespaceBefore),c(t,r)&&s++,this._buf.hasContent()||(s=0)}this.newline(s)}},e.prototype._getComments=function(e,t){return t&&(e?t.leadingComments:t.trailingComments)||[]},e.prototype._printComment=function(e){var t=this;if(this.format.shouldPrintComment(e.value)&&!e.ignore&&!this._printedComments.has(e)){if(this._printedComments.add(e),null!=e.start){if(this._printedCommentStarts[e.start])return;this._printedCommentStarts[e.start]=!0}this.newline(this._whitespace?this._whitespace.getNewlinesBefore(e):0),this.endsWith("[")||this.endsWith("{")||this.space();var r="CommentLine"===e.type?"//"+e.value+"\n":"/*"+e.value+"*/";if("CommentBlock"===e.type&&this.format.indent.adjustMultilineComment){var n=e.loc&&e.loc.start.column;if(n){var i=new RegExp("\\n\\s{1,"+n+"}","g");r=r.replace(i,"\n")}var s=Math.max(this._getIndent().length,this._buf.getCurrentColumn());r=r.replace(/\n(?!$)/g,"\n"+(0,D.default)(" ",s))}this.withSource("start",e.loc,function(){t._append(r)}),this.newline((this._whitespace?this._whitespace.getNewlinesAfter(e):0)+("CommentLine"===e.type?-1:0))}},e.prototype._printComments=function(e){if(e&&e.length)for(var t=e,r=Array.isArray(t),n=0,t=r?t:(0,l.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;this._printComment(s)}},e}();r.default=N;for(var I=[e("./generators/template-literals"),e("./generators/expressions"),e("./generators/statements"),e("./generators/classes"),e("./generators/methods"),e("./generators/modules"),e("./generators/types"),e("./generators/flow"),e("./generators/base"),e("./generators/jsx")],L=0;L=0){for(;i&&e.start===n[i-1].start;)--i;t=n[i-1],r=n[i]}return this._getNewlinesBetween(t,r)},e.prototype.getNewlinesAfter=function(e){var t=void 0,r=void 0,n=this.tokens,i=this._findToken(function(t){return t.end-e.end},0,n.length);if(i>=0){for(;i&&e.end===n[i-1].end;)--i;t=n[i],r=n[i+1],","===r.type.label&&(r=n[i+2])}return r&&"eof"===r.type.label?1:this._getNewlinesBetween(t,r)},e.prototype._getNewlinesBetween=function(e,t){if(!t||!t.loc)return 0;for(var r=e?e.loc.end.line:1,n=t.loc.start.line,i=0,s=r;s=r)return-1;var n=t+r>>>1,i=e(this.tokens[n]);return i<0?this._findToken(e,n+1,r):i>0?this._findToken(e,t,n):0===i?n:-1},e}();r.default=s,t.exports=r.default},{"babel-runtime/helpers/classCallCheck":127}],85:[function(e,t,r){arguments[4][55][0].apply(r,arguments)},{"./util":94,dup:55}],86:[function(e,t,r){arguments[4][56][0].apply(r,arguments)},{"./base64":87,dup:56}],87:[function(e,t,r){arguments[4][57][0].apply(r,arguments)},{dup:57}],88:[function(e,t,r){arguments[4][58][0].apply(r,arguments)},{dup:58}],89:[function(e,t,r){arguments[4][59][0].apply(r,arguments)},{"./util":94,dup:59}],90:[function(e,t,r){arguments[4][60][0].apply(r,arguments)},{dup:60}],91:[function(e,t,r){arguments[4][61][0].apply(r,arguments)},{"./array-set":85,"./base64-vlq":86,"./binary-search":88,"./quick-sort":90,"./util":94,dup:61}],92:[function(e,t,r){arguments[4][62][0].apply(r,arguments)},{"./array-set":85,"./base64-vlq":86,"./mapping-list":89,"./util":94,dup:62}],93:[function(e,t,r){arguments[4][63][0].apply(r,arguments)},{"./source-map-generator":92,"./util":94,dup:63}],94:[function(e,t,r){arguments[4][64][0].apply(r,arguments)},{dup:64}],95:[function(e,t,r){arguments[4][65][0].apply(r,arguments)},{"./lib/source-map-consumer":91,"./lib/source-map-generator":92,"./lib/source-node":93,dup:65}],96:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return!g.isClassMethod(e)&&!g.isObjectMethod(e)||"get"!==e.kind&&"set"!==e.kind?"value":e.kind}function s(e,t,r,n,s){var a=g.toKeyAlias(t),o={};if((0,m.default)(e,a)&&(o=e[a]),e[a]=o,o._inherits=o._inherits||[],o._inherits.push(t),o._key=t.key,t.computed&&(o._computed=!0),t.decorators){var u=o.decorators=o.decorators||g.arrayExpression([]);u.elements=u.elements.concat(t.decorators.map(function(e){return e.expression}).reverse())}if(o.value||o.initializer)throw n.buildCodeFrameError(t,"Key conflict with sibling node");var l=void 0,c=void 0;(g.isObjectProperty(t)||g.isObjectMethod(t)||g.isClassMethod(t))&&(l=g.toComputedKey(t,t.key)), +g.isObjectProperty(t)||g.isClassProperty(t)?c=t.value:(g.isObjectMethod(t)||g.isClassMethod(t))&&(c=g.functionExpression(null,t.params,t.body,t.generator,t.async),c.returnType=t.returnType);var p=i(t);return r&&"value"===p||(r=p),s&&g.isStringLiteral(l)&&("value"===r||"initializer"===r)&&g.isFunctionExpression(c)&&(c=(0,f.default)({id:l,node:c,scope:s})),c&&(g.inheritsComments(c,t),o[r]=c),o}function a(e){for(var t in e)if(e[t]._computed)return!0;return!1}function o(e){for(var t=g.arrayExpression([]),r=0;r1&&void 0!==arguments[1]&&arguments[1];(0,l.default)(this,e),this.forceSuperMemoisation=t.forceSuperMemoisation,this.methodPath=t.methodPath,this.methodNode=t.methodNode,this.superRef=t.superRef,this.isStatic=t.isStatic,this.hasSuper=!1,this.inClass=r,this.isLoose=t.isLoose,this.scope=this.methodPath.scope,this.file=t.file,this.opts=t,this.bareSupers=[],this.returns=[],this.thises=[]}return e.prototype.getObjectRef=function(){return this.opts.objectRef||this.opts.getObjectRef()},e.prototype.setSuperProperty=function(e,t,r){return g.callExpression(this.file.addHelper("set"),[o(this.getObjectRef(),this.isStatic),r?e:g.stringLiteral(e.name),t,g.thisExpression()])},e.prototype.getSuperProperty=function(e,t){return g.callExpression(this.file.addHelper("get"),[o(this.getObjectRef(),this.isStatic),t?e:g.stringLiteral(e.name),g.thisExpression()])},e.prototype.replace=function(){this.methodPath.traverse(v,this)},e.prototype.getLooseSuperProperty=function(e,t){var r=this.methodNode,n=this.superRef||g.identifier("Function");return t.property===e?void 0:g.isCallExpression(t,{callee:e})?void 0:g.isMemberExpression(t)&&!r.static?g.memberExpression(n,g.identifier("prototype")):n},e.prototype.looseHandle=function(e){var t=e.node;if(e.isSuper())return this.getLooseSuperProperty(t,e.parent);if(e.isCallExpression()){var r=t.callee;if(!g.isMemberExpression(r))return;if(!g.isSuper(r.object))return;return g.appendToMemberExpression(r,g.identifier("call")),t.arguments.unshift(g.thisExpression()),!0}},e.prototype.specHandleAssignmentExpression=function(e,t,r){return"="===r.operator?this.setSuperProperty(r.left.property,r.right,r.left.computed):(e=e||t.scope.generateUidIdentifier("ref"),[g.variableDeclaration("var",[g.variableDeclarator(e,r.left)]),g.expressionStatement(g.assignmentExpression("=",r.left,g.binaryExpression(r.operator[0],e,r.right)))])},e.prototype.specHandle=function(e){var t=void 0,r=void 0,n=void 0,i=e.parent,o=e.node;if(s(o,i))throw e.buildCodeFrameError(m.get("classesIllegalBareSuper"));if(g.isCallExpression(o)){var u=o.callee;if(g.isSuper(u))return;a(u)&&(t=u.property,r=u.computed,n=o.arguments)}else if(g.isMemberExpression(o)&&g.isSuper(o.object))t=o.property,r=o.computed;else{if(g.isUpdateExpression(o)&&a(o.argument)){var l=g.binaryExpression(o.operator[0],o.argument,g.numericLiteral(1));if(o.prefix)return this.specHandleAssignmentExpression(null,e,l);var c=e.scope.generateUidIdentifier("ref");return this.specHandleAssignmentExpression(c,e,l).concat(g.expressionStatement(c))}if(g.isAssignmentExpression(o)&&a(o.left))return this.specHandleAssignmentExpression(null,e,o)}if(t){var p=this.getSuperProperty(t,r);return n?this.optimiseCall(p,n):p}},e.prototype.optimiseCall=function(e,t){var r=g.thisExpression();return r[b]=!0,(0,f.default)(e,r,t)},e}();r.default=x,t.exports=r.default},{"babel-helper-optimise-call-expression":99,"babel-messages":103,"babel-runtime/core-js/symbol":122,"babel-runtime/helpers/classCallCheck":127,"babel-types":169}],101:[function(e,t,r){"use strict";r.__esModule=!0;var n=e("babel-template"),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s={};r.default=s,s.typeof=(0,i.default)('\n (typeof Symbol === "function" && typeof Symbol.iterator === "symbol")\n ? function (obj) { return typeof obj; }\n : function (obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype\n ? "symbol"\n : typeof obj;\n };\n'),s.jsx=(0,i.default)('\n (function () {\n var REACT_ELEMENT_TYPE = (typeof Symbol === "function" && Symbol.for && Symbol.for("react.element")) || 0xeac7;\n\n return function createRawReactElement (type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n // If we\'re going to assign props.children, we create a new object now\n // to avoid mutating defaultProps.\n props = {};\n }\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : \'\' + key,\n ref: null,\n props: props,\n _owner: null,\n };\n };\n\n })()\n'),s.asyncIterator=(0,i.default)('\n (function (iterable) {\n if (typeof Symbol === "function") {\n if (Symbol.asyncIterator) {\n var method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n if (Symbol.iterator) {\n return iterable[Symbol.iterator]();\n }\n }\n throw new TypeError("Object is not async iterable");\n })\n'),s.asyncGenerator=(0,i.default)('\n (function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg)\n var value = result.value;\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(\n function (arg) { resume("next", arg); },\n function (arg) { resume("throw", arg); });\n } else {\n settle(result.done ? "return" : "normal", result.value);\n }\n } catch (err) {\n settle("throw", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case "return":\n front.resolve({ value: value, done: true });\n break;\n case "throw":\n front.reject(value);\n break;\n default:\n front.resolve({ value: value, done: false });\n break;\n }\n\n front = front.next;\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n // Hide "return" method if generator return is not supported\n if (typeof gen.return !== "function") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === "function" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; };\n }\n\n AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); };\n AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); };\n AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n\n })()\n'),s.asyncGeneratorDelegate=(0,i.default)('\n (function (inner, awaitWrap) {\n var iter = {}, waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function (resolve) { resolve(inner[key](value)); });\n return { done: false, value: awaitWrap(value) };\n };\n\n if (typeof Symbol === "function" && Symbol.iterator) {\n iter[Symbol.iterator] = function () { return this; };\n }\n\n iter.next = function (value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n return pump("next", value);\n };\n\n if (typeof inner.throw === "function") {\n iter.throw = function (value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n return pump("throw", value);\n };\n }\n\n if (typeof inner.return === "function") {\n iter.return = function (value) {\n return pump("return", value);\n };\n }\n\n return iter;\n })\n'),s.asyncToGenerator=(0,i.default)('\n (function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n step("next", value);\n }, function (err) {\n step("throw", err);\n });\n }\n }\n\n return step("next");\n });\n };\n })\n'),s.classCallCheck=(0,i.default)('\n (function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n });\n'),s.createClass=(0,i.default)('\n (function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i ++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n })()\n'),s.defineEnumerableProperties=(0,i.default)('\n (function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if ("value" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n return obj;\n })\n'),s.defaults=(0,i.default)("\n (function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n return obj;\n })\n"),s.defineProperty=(0,i.default)("\n (function (obj, key, value) {\n // Shortcircuit the slow defineProperty path when possible.\n // We are trying to avoid issues where setters defined on the\n // prototype cause side effects under the fast path of simple\n // assignment. By checking for existence of the property with\n // the in operator, we can optimize most of this overhead away.\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n });\n"),s.extends=(0,i.default)("\n Object.assign || (function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n })\n"),s.get=(0,i.default)('\n (function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if ("value" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n });\n'),s.inherits=(0,i.default)('\n (function (subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n })\n'),s.instanceof=(0,i.default)('\n (function (left, right) {\n if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n });\n'),s.interopRequireDefault=(0,i.default)("\n (function (obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n })\n"),s.interopRequireWildcard=(0,i.default)("\n (function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n newObj.default = obj;\n return newObj;\n }\n })\n"),s.newArrowCheck=(0,i.default)('\n (function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError("Cannot instantiate an arrow function");\n }\n });\n'),s.objectDestructuringEmpty=(0,i.default)('\n (function (obj) {\n if (obj == null) throw new TypeError("Cannot destructure undefined");\n });\n'),s.objectWithoutProperties=(0,i.default)("\n (function (obj, keys) {\n var target = {};\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n return target;\n })\n"),s.possibleConstructorReturn=(0,i.default)('\n (function (self, call) {\n if (!self) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n return call && (typeof call === "object" || typeof call === "function") ? call : self;\n });\n'),s.selfGlobal=(0,i.default)('\n typeof global === "undefined" ? self : global\n'),s.set=(0,i.default)('\n (function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if ("value" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n });\n'),s.slicedToArray=(0,i.default)('\n (function () {\n // Broken out into a separate function to avoid deoptimizations due to the try/catch for the\n // array iterator case.\n function sliceIterator(arr, i) {\n // this is an expanded form of `for...of` that properly supports abrupt completions of\n // iterators etc. variable names have been minimised to reduce the size of this massive\n // helper. sometimes spec compliancy is annoying :(\n //\n // _n = _iteratorNormalCompletion\n // _d = _didIteratorError\n // _e = _iteratorError\n // _i = _iterator\n // _s = _step\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i["return"]) _i["return"]();\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError("Invalid attempt to destructure non-iterable instance");\n }\n };\n })();\n'),s.slicedToArrayLoose=(0,i.default)('\n (function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n if (i && _arr.length === i) break;\n }\n return _arr;\n } else {\n throw new TypeError("Invalid attempt to destructure non-iterable instance");\n }\n });\n'),s.taggedTemplateLiteral=(0,i.default)("\n (function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: { value: Object.freeze(raw) }\n }));\n });\n"),s.taggedTemplateLiteralLoose=(0,i.default)("\n (function (strings, raw) {\n strings.raw = raw;\n return strings;\n });\n"),s.temporalRef=(0,i.default)('\n (function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + " is not defined - temporal dead zone");\n } else {\n return val;\n }\n })\n'),s.temporalUndefined=(0,i.default)("\n ({})\n"),s.toArray=(0,i.default)("\n (function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n });\n"),s.toConsumableArray=(0,i.default)("\n (function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n return arr2;\n } else {\n return Array.from(arr);\n }\n });\n"),t.exports=r.default},{"babel-template":132}],102:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=u.default[e];if(!t)throw new ReferenceError("Unknown helper "+e);return t().expression}r.__esModule=!0,r.list=void 0;var s=e("babel-runtime/core-js/object/keys"),a=n(s);r.get=i;var o=e("./helpers"),u=n(o);r.list=(0,a.default)(u.default).map(function(e){return e.replace(/^_/,"")}).filter(function(e){return"__esModule"!==e});r.default=i},{"./helpers":101,"babel-runtime/core-js/object/keys":120}],103:[function(e,t,r){"use strict";function n(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n4&&void 0!==arguments[4]&&arguments[4];if(t||(t=e.node),!v.isFor(r))for(var s=0;s0&&e.traverse(k,t),e.skip()}},g.visitor]),k=y.default.visitors.merge([{ReferencedIdentifier:function(e,t){var r=t.letReferences[e.node.name];if(r){var n=e.scope.getBindingIdentifier(e.node.name);n&&n!==r||(t.closurify=!0)}}},g.visitor]),F={enter:function(e,t){var r=e.node;e.parent;if(e.isForStatement()){if(o(r.init)){var n=t.pushDeclar(r.init);1===n.length?r.init=n[0]:r.init=v.sequenceExpression(n)}}else if(e.isFor())o(r.left)&&(t.pushDeclar(r.left),r.left=r.left.declarations[0].id);else if(o(r))e.replaceWithMultiple(t.pushDeclar(r).map(function(e){return v.expressionStatement(e)}));else if(e.isFunction())return e.skip()}},T={LabeledStatement:function(e,t){var r=e.node;t.innerLabels.push(r.label.name)}},P={enter:function(e,t){if(e.isAssignmentExpression()||e.isUpdateExpression()){var r=e.getBindingIdentifiers();for(var n in r)t.outsideReferences[n]===e.scope.getBindingIdentifier(n)&&(t.reassignments[n]=!0)}}},B={Loop:function(e,t){var r=t.ignoreLabeless;t.ignoreLabeless=!0,e.traverse(B,t),t.ignoreLabeless=r,e.skip()},Function:function(e){e.skip()},SwitchCase:function(e,t){var r=t.inSwitchCase;t.inSwitchCase=!0,e.traverse(B,t),t.inSwitchCase=r,e.skip()},"BreakStatement|ContinueStatement|ReturnStatement":function(e,t){var r=e.node,n=e.parent,i=e.scope;if(!r[this.LOOP_IGNORE]){var s=void 0,a=u(r);if(a){if(r.label){if(t.innerLabels.indexOf(r.label.name)>=0)return;a=a+"|"+r.label.name}else{if(t.ignoreLabeless)return;if(t.inSwitchCase)return;if(v.isBreakStatement(r)&&v.isSwitchCase(n))return}t.hasBreakContinue=!0,t.map[a]=r,s=v.stringLiteral(a)}e.isReturnStatement()&&(t.hasReturn=!0,s=v.objectExpression([v.objectProperty(v.identifier("v"),r.argument||i.buildUndefinedNode())])),s&&(s=v.returnStatement(s),s[this.LOOP_IGNORE]=!0,e.skip(),e.replaceWith(v.inherits(s,r)))}}},O=function(){function e(t,r,n,i,s){(0,d.default)(this,e),this.parent=n,this.scope=i,this.file=s,this.blockPath=r,this.block=r.node,this.outsideLetReferences=(0,h.default)(null),this.hasLetReferences=!1,this.letReferences=(0,h.default)(null),this.body=[],t&&(this.loopParent=t.parent,this.loopLabel=v.isLabeledStatement(this.loopParent)&&this.loopParent.label,this.loopPath=t,this.loop=t.node)}return e.prototype.run=function(){var e=this.block;if(!e._letDone){e._letDone=!0;var t=this.getLetReferences();if(v.isFunction(this.parent)||v.isProgram(this.block))return void this.updateScopeInfo();if(this.hasLetReferences)return t?this.wrapClosure():this.remap(),this.updateScopeInfo(t),this.loopLabel&&!v.isLabeledStatement(this.loopParent)?v.labeledStatement(this.loopLabel,this.loop):void 0}},e.prototype.updateScopeInfo=function(e){var t=this.scope,r=t.getFunctionParent(),n=this.letReferences;for(var i in n){var s=n[i],a=t.getBinding(s.name);a&&("let"!==a.kind&&"const"!==a.kind||(a.kind="var",e?t.removeBinding(s.name):t.moveBindingTo(s.name,r)))}},e.prototype.remap=function(){var e=this.letReferences,t=this.scope;for(var r in e){var n=e[r];(t.parentHasBinding(r)||t.hasGlobal(r))&&(t.hasOwnBinding(r)&&t.rename(n.name),this.blockPath.scope.hasOwnBinding(r)&&this.blockPath.scope.rename(n.name))}},e.prototype.wrapClosure=function(){if(this.file.opts.throwIfClosureRequired)throw this.blockPath.buildCodeFrameError("Compiling let/const in this block would add a closure (throwIfClosureRequired).");var e=this.block,t=this.outsideLetReferences;if(this.loop)for(var r in t){var n=t[r];(this.scope.hasGlobal(n.name)||this.scope.parentHasBinding(n.name))&&(delete t[n.name],delete this.letReferences[n.name],this.scope.rename(n.name),this.letReferences[n.name]=n,t[n.name]=n)}this.has=this.checkLoop(),this.hoistVarDeclarations();var i=(0,E.default)(t),s=(0,E.default)(t),a=this.blockPath.isSwitchStatement(),o=v.functionExpression(null,i,v.blockStatement(a?[e]:e.body));o.shadow=!0,this.addContinuations(o);var u=o;this.loop&&(u=this.scope.generateUidIdentifier("loop"),this.loopPath.insertBefore(v.variableDeclaration("var",[v.variableDeclarator(u,o)])));var l=v.callExpression(u,s),c=this.scope.generateUidIdentifier("ret");y.default.hasType(o.body,this.scope,"YieldExpression",v.FUNCTION_TYPES)&&(o.generator=!0,l=v.yieldExpression(l,!0)),y.default.hasType(o.body,this.scope,"AwaitExpression",v.FUNCTION_TYPES)&&(o.async=!0,l=v.awaitExpression(l)),this.buildClosure(c,l),a?this.blockPath.replaceWithMultiple(this.body):e.body=this.body},e.prototype.buildClosure=function(e,t){var r=this.has;r.hasReturn||r.hasBreakContinue?this.buildHas(e,t):this.body.push(v.expressionStatement(t))},e.prototype.addContinuations=function(e){var t={reassignments:{},outsideReferences:this.outsideLetReferences};this.scope.traverse(e,P,t);for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:"value",n=arguments[3],i=void 0;e.static?(this.hasStaticDescriptors=!0,i=this.staticMutatorMap):(this.hasInstanceDescriptors=!0,i=this.instanceMutatorMap);var s=m.push(i,e,r,this.file,n);return t&&(s.enumerable=v.booleanLiteral(!0)),s},e.prototype.constructorMeMaybe=function(){for(var e=!1,t=this.path.get("body.body"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,a.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}if(e=s.equals("kind","constructor"))break}if(!e){var o=void 0,u=void 0;if(this.isDerived){var l=x().expression;o=l.params,u=l.body}else o=[],u=v.blockStatement([]);this.path.get("body").unshiftContainer("body",v.classMethod("constructor",v.identifier("constructor"),o,u))}},e.prototype.buildBody=function(){if(this.constructorMeMaybe(),this.pushBody(),this.verifyConstructor(),this.userConstructor){var e=this.constructorBody;e.body=e.body.concat(this.userConstructor.body.body),v.inherits(this.constructor,this.userConstructor),v.inherits(e,this.userConstructor.body)}this.pushDescriptors()},e.prototype.pushBody=function(){for(var e=this.path.get("body.body"),t=e,r=Array.isArray(t),n=0,t=r?t:(0,a.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,o=s.node;if(s.isClassProperty())throw s.buildCodeFrameError("Missing class properties transform.");if(o.decorators)throw s.buildCodeFrameError("Method has decorators, put the decorator plugin before the classes one.");if(v.isClassMethod(o)){var u="constructor"===o.kind;if(u&&(s.traverse(A,this),!this.hasBareSuper&&this.isDerived))throw s.buildCodeFrameError("missing super() call in constructor");var l=new p.default({forceSuperMemoisation:u,methodPath:s,methodNode:o,objectRef:this.classRef,superRef:this.superName,isStatic:o.static,isLoose:this.isLoose,scope:this.scope,file:this.file},!0);l.replace(),u?this.pushConstructor(l,o,s):this.pushMethod(o,s)}}},e.prototype.clearDescriptors=function(){this.hasInstanceDescriptors=!1,this.hasStaticDescriptors=!1,this.instanceMutatorMap={},this.staticMutatorMap={}},e.prototype.pushDescriptors=function(){this.pushInherits();var e=this.body,t=void 0,r=void 0;if(this.hasInstanceDescriptors&&(t=m.toClassObject(this.instanceMutatorMap)),this.hasStaticDescriptors&&(r=m.toClassObject(this.staticMutatorMap)),t||r){t&&(t=m.toComputedObjectFromClass(t)),r&&(r=m.toComputedObjectFromClass(r));var n=v.nullLiteral(),i=[this.classRef,n,n,n,n];t&&(i[1]=t),r&&(i[2]=r),this.instanceInitializersId&&(i[3]=this.instanceInitializersId,e.unshift(this.buildObjectAssignment(this.instanceInitializersId))),this.staticInitializersId&&(i[4]=this.staticInitializersId,e.unshift(this.buildObjectAssignment(this.staticInitializersId)));for(var s=0,a=0;a=o.length)break;c=o[l++]}else{if(l=o.next(),l.done)break;c=l.value}var p=c;this.wrapSuperCall(p,i,s,r),n&&p.find(function(e){return e===t||(e.isLoop()||e.isConditional()?(n=!1,!0):void 0)})}for(var h=this.superThises,f=Array.isArray(h),d=0,h=f?h:(0,a.default)(h);;){var m;if(f){if(d>=h.length)break;m=h[d++]}else{if(d=h.next(),d.done)break;m=d.value}m.replaceWith(s)}var y=function(t){return v.callExpression(e.file.addHelper("possibleConstructorReturn"),[s].concat(t||[]))},g=r.get("body");g.length&&!g.pop().isReturnStatement()&&r.pushContainer("body",v.returnStatement(n?s:y()));for(var b=this.superReturns,x=Array.isArray(b),E=0,b=x?b:(0,a.default)(b);;){var A;if(x){if(E>=b.length)break;A=b[E++]}else{if(E=b.next(),E.done)break;A=E.value}var C=A;if(C.node.argument){var S=C.scope.generateDeclaredUidIdentifier("ret");C.get("argument").replaceWithMultiple([v.assignmentExpression("=",S,C.node.argument),y(S)])}else C.get("argument").replaceWith(y())}}},e.prototype.pushMethod=function(e,t){var r=t?t.scope:this.scope;"method"===e.kind&&this._processMethod(e,r)||this.pushToMap(e,!1,null,r)},e.prototype._processMethod=function(){return!1},e.prototype.pushConstructor=function(e,t,r){this.bareSupers=e.bareSupers,this.superReturns=e.returns,r.scope.hasOwnBinding(this.classRef.name)&&r.scope.rename(this.classRef.name);var n=this.constructor;this.userConstructorPath=r,this.userConstructor=t,this.hasConstructor=!0,v.inheritsComments(n,t),n._ignoreUserWhitespace=!0,n.params=t.params,v.inherits(n.body,t.body),n.body.directives=t.body.directives,this._pushConstructor()},e.prototype._pushConstructor=function(){this.pushedConstructor||(this.pushedConstructor=!0,(this.hasInstanceDescriptors||this.hasStaticDescriptors)&&this.pushDescriptors(),this.body.push(this.constructor),this.pushInherits())},e.prototype.pushInherits=function(){this.isDerived&&!this.pushedInherits&&(this.pushedInherits=!0,this.body.unshift(v.expressionStatement(v.callExpression(this.file.addHelper("inherits"),[this.classRef,this.superName]))))},e}();r.default=C,t.exports=r.default},{"babel-helper-define-map":96,"babel-helper-optimise-call-expression":99,"babel-helper-replace-supers":100,"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/classCallCheck":127,"babel-template":132,"babel-traverse":136,"babel-types":169}],112:[function(e,t,r){"use strict";r.__esModule=!0,r.default=function(e){function t(e){var t=e.node,r=e.scope,n=[],i=t.right;if(!a.isIdentifier(i)||!r.hasBinding(i.name)){var s=r.generateUidIdentifier("arr");n.push(a.variableDeclaration("var",[a.variableDeclarator(s,i)])),i=s}var u=r.generateUidIdentifier("i"),l=o({BODY:t.body,KEY:u,ARR:i});a.inherits(l,t),a.ensureBlock(l);var c=a.memberExpression(i,u,!0),p=t.left;return a.isVariableDeclaration(p)?(p.declarations[0].init=c,l.body.body.unshift(p)):l.body.body.unshift(a.expressionStatement(a.assignmentExpression("=",p,c))),e.parentPath.isLabeledStatement()&&(l=a.labeledStatement(e.parentPath.node.label,l)),n.push(l),n}function r(e,t){var r=e.node,n=e.scope,s=e.parent,o=r.left,l=void 0,c=void 0;if(a.isIdentifier(o)||a.isPattern(o)||a.isMemberExpression(o))c=o;else{if(!a.isVariableDeclaration(o))throw t.buildCodeFrameError(o,i.get("unknownForHead",o.type));c=n.generateUidIdentifier("ref"),l=a.variableDeclaration(o.kind,[a.variableDeclarator(o.declarations[0].id,c)])}var p=n.generateUidIdentifier("iterator"),h=n.generateUidIdentifier("isArray"),f=u({LOOP_OBJECT:p,IS_ARRAY:h,OBJECT:r.right,INDEX:n.generateUidIdentifier("i"),ID:c});l||f.body.body.shift();var d=a.isLabeledStatement(s),m=void 0;return d&&(m=a.labeledStatement(s.label,f)),{replaceParent:d,declar:l,node:m||f,loop:f}}function n(e,t){var r=e.node,n=e.scope,s=e.parent,o=r.left,u=void 0,c=n.generateUidIdentifier("step"),p=a.memberExpression(c,a.identifier("value"));if(a.isIdentifier(o)||a.isPattern(o)||a.isMemberExpression(o))u=a.expressionStatement(a.assignmentExpression("=",o,p));else{if(!a.isVariableDeclaration(o))throw t.buildCodeFrameError(o,i.get("unknownForHead",o.type));u=a.variableDeclaration(o.kind,[a.variableDeclarator(o.declarations[0].id,p)])}var h=n.generateUidIdentifier("iterator"),f=l({ITERATOR_HAD_ERROR_KEY:n.generateUidIdentifier("didIteratorError"),ITERATOR_COMPLETION:n.generateUidIdentifier("iteratorNormalCompletion"),ITERATOR_ERROR_KEY:n.generateUidIdentifier("iteratorError"),ITERATOR_KEY:h,STEP_KEY:c,OBJECT:r.right,BODY:null}),d=a.isLabeledStatement(s),m=f[3].block.body,y=m[0];return d&&(m[0]=a.labeledStatement(s.label,y)),{replaceParent:d,declar:u,loop:y,node:f}}var i=e.messages,s=e.template,a=e.types,o=s("\n for (var KEY = 0; KEY < ARR.length; KEY++) BODY;\n "),u=s("\n for (var LOOP_OBJECT = OBJECT,\n IS_ARRAY = Array.isArray(LOOP_OBJECT),\n INDEX = 0,\n LOOP_OBJECT = IS_ARRAY ? LOOP_OBJECT : LOOP_OBJECT[Symbol.iterator]();;) {\n var ID;\n if (IS_ARRAY) {\n if (INDEX >= LOOP_OBJECT.length) break;\n ID = LOOP_OBJECT[INDEX++];\n } else {\n INDEX = LOOP_OBJECT.next();\n if (INDEX.done) break;\n ID = INDEX.value;\n }\n }\n "),l=s("\n var ITERATOR_COMPLETION = true;\n var ITERATOR_HAD_ERROR_KEY = false;\n var ITERATOR_ERROR_KEY = undefined;\n try {\n for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(ITERATOR_COMPLETION = (STEP_KEY = ITERATOR_KEY.next()).done); ITERATOR_COMPLETION = true) {\n }\n } catch (err) {\n ITERATOR_HAD_ERROR_KEY = true;\n ITERATOR_ERROR_KEY = err;\n } finally {\n try {\n if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) {\n ITERATOR_KEY.return();\n }\n } finally {\n if (ITERATOR_HAD_ERROR_KEY) {\n throw ITERATOR_ERROR_KEY;\n }\n }\n }\n ");return{visitor:{ForOfStatement:function(e,i){if(e.get("right").isArrayExpression())return e.parentPath.isLabeledStatement()?e.parentPath.replaceWithMultiple(t(e)):e.replaceWithMultiple(t(e));var s=n;i.opts.loose&&(s=r);var o=e.node,u=s(e,i),l=u.declar,c=u.loop,p=c.body;e.ensureBlock(),l&&p.body.push(l),p.body=p.body.concat(o.body.body),a.inherits(c,o),a.inherits(c.body,o.body),u.replaceParent?(e.parentPath.replaceWithMultiple(u.node),e.remove()):e.replaceWithMultiple(u.node)}}}},t.exports=r.default},{}],113:[function(e,t,r){t.exports={default:e("core-js/library/fn/get-iterator"),__esModule:!0}},{"core-js/library/fn/get-iterator":188}],114:[function(e,t,r){t.exports={default:e("core-js/library/fn/json/stringify"),__esModule:!0}},{"core-js/library/fn/json/stringify":189}],115:[function(e,t,r){t.exports={default:e("core-js/library/fn/map"),__esModule:!0}},{"core-js/library/fn/map":190}],116:[function(e,t,r){t.exports={default:e("core-js/library/fn/number/max-safe-integer"),__esModule:!0}},{"core-js/library/fn/number/max-safe-integer":191}],117:[function(e,t,r){t.exports={default:e("core-js/library/fn/object/assign"),__esModule:!0}},{"core-js/library/fn/object/assign":192}],118:[function(e,t,r){t.exports={default:e("core-js/library/fn/object/create"),__esModule:!0}},{"core-js/library/fn/object/create":193}],119:[function(e,t,r){t.exports={default:e("core-js/library/fn/object/get-own-property-symbols"),__esModule:!0}},{"core-js/library/fn/object/get-own-property-symbols":194}],120:[function(e,t,r){t.exports={default:e("core-js/library/fn/object/keys"),__esModule:!0}},{"core-js/library/fn/object/keys":195}],121:[function(e,t,r){t.exports={default:e("core-js/library/fn/object/set-prototype-of"),__esModule:!0}},{"core-js/library/fn/object/set-prototype-of":196}],122:[function(e,t,r){t.exports={default:e("core-js/library/fn/symbol"),__esModule:!0}},{"core-js/library/fn/symbol":198}],123:[function(e,t,r){t.exports={default:e("core-js/library/fn/symbol/for"),__esModule:!0}},{"core-js/library/fn/symbol/for":197}],124:[function(e,t,r){t.exports={default:e("core-js/library/fn/symbol/iterator"),__esModule:!0}},{"core-js/library/fn/symbol/iterator":199}],125:[function(e,t,r){t.exports={default:e("core-js/library/fn/weak-map"),__esModule:!0}},{"core-js/library/fn/weak-map":200}],126:[function(e,t,r){t.exports={default:e("core-js/library/fn/weak-set"),__esModule:!0}},{"core-js/library/fn/weak-set":201}],127:[function(e,t,r){"use strict";r.__esModule=!0,r.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},{}],128:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("../core-js/object/set-prototype-of"),s=n(i),a=e("../core-js/object/create"),o=n(a),u=e("../helpers/typeof"),l=n(u);r.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,l.default)(t)));e.prototype=(0,o.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(s.default?(0,s.default)(e,t):e.__proto__=t)}},{"../core-js/object/create":118,"../core-js/object/set-prototype-of":121,"../helpers/typeof":131}],129:[function(e,t,r){"use strict";r.__esModule=!0,r.default=function(e,t){var r={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}},{}],130:[function(e,t,r){"use strict";r.__esModule=!0;var n=e("../helpers/typeof"),i=function(e){return e&&e.__esModule?e:{default:e}}(n);r.default=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,i.default)(t))&&"function"!=typeof t?e:t}},{"../helpers/typeof":131}],131:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("../core-js/symbol/iterator"),s=n(i),a=e("../core-js/symbol"),o=n(a),u="function"==typeof o.default&&"symbol"==typeof s.default?function(e){return typeof e}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":typeof e};r.default="function"==typeof o.default&&"symbol"===u(s.default)?function(e){return void 0===e?"undefined":u(e)}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":void 0===e?"undefined":u(e)}},{"../core-js/symbol":122,"../core-js/symbol/iterator":124}],132:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){e=(0,l.default)(e);var r=e,n=r.program;return t.length&&(0,m.default)(e,A,null,t),n.body.length>1?n.body:n.body[0]}r.__esModule=!0;var a=e("babel-runtime/core-js/symbol"),o=i(a);r.default=function(e,t){var r=void 0;try{throw new Error}catch(e){e.stack&&(r=e.stack.split("\n").slice(1).join("\n"))}t=(0,p.default)({allowReturnOutsideFunction:!0,allowSuperOutsideMethod:!0,preserveComments:!1},t);var n=function(){var i=void 0;try{i=g.parse(e,t),i=m.default.removeProperties(i,{preserveComments:t.preserveComments}),m.default.cheap(i,function(e){e[x]=!0})}catch(e){throw e.stack=e.stack+"from\n"+r,e}return n=function(){return i},i};return function(){for(var e=arguments.length,t=Array(e),r=0;r=n.length)break;o=n[s++]}else{if(s=n.next(),s.done)break;o=s.value}if(e[o])return!0}return!1},e.prototype.create=function(e,t,r,n){return c.default.get({parentPath:this.parentPath,parent:e,container:t,key:r,listKey:n})},e.prototype.maybeQueue=function(e,t){if(this.trap)throw new Error("Infinite cycle detected");this.queue&&(t?this.queue.push(e):this.priorityQueue.push(e))},e.prototype.visitMultiple=function(e,t,r){if(0===e.length)return!1;for(var n=[],i=0;i=n.length)break;o=n[s++]}else{if(s=n.next(),s.done)break;o=s.value}var u=o;if(u.resync(),0!==u.contexts.length&&u.contexts[u.contexts.length-1]===this||u.pushContext(this),null!==u.key&&(f&&e.length>=1e4&&(this.trap=!0),!(t.indexOf(u.node)>=0))){if(t.push(u.node),u.visit()){r=!0;break}if(this.priorityQueue.length&&(r=this.visitQueue(this.priorityQueue),this.priorityQueue=[],this.queue=e,r))break}}for(var l=e,c=Array.isArray(l),p=0,l=c?l:(0,a.default)(l);;){var h;if(c){if(p>=l.length)break;h=l[p++]}else{if(p=l.next(),p.done)break;h=p.value}h.popContext()}return this.queue=null,r},e.prototype.visit=function(e,t){var r=e[t];return!!r&&(Array.isArray(r)?this.visitMultiple(r,e,t):this.visitSingle(e,t))},e}();r.default=d,t.exports=r.default}).call(this,e("_process"))},{"./path":143,_process:539,"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/classCallCheck":127,"babel-types":169}],135:[function(e,t,r){"use strict";r.__esModule=!0;var n=e("babel-runtime/helpers/classCallCheck"),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=function e(t,r){(0,i.default)(this,e),this.file=t,this.options=r};r.default=s,t.exports=r.default},{"babel-runtime/helpers/classCallCheck":127}],136:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t,r,n,i){if(e){if(t||(t={}),!t.noScope&&!r&&"Program"!==e.type&&"File"!==e.type)throw new Error(g.get("traverseNeedsParent",e.type));m.explode(t),s.node(e,t,r,n,i)}}function a(e,t){e.node.type===t.type&&(t.has=!0,e.stop())}r.__esModule=!0,r.visitors=r.Hub=r.Scope=r.NodePath=void 0;var o=e("babel-runtime/core-js/get-iterator"),u=i(o),l=e("./path");Object.defineProperty(r,"NodePath",{enumerable:!0,get:function(){return i(l).default}});var c=e("./scope");Object.defineProperty(r,"Scope",{enumerable:!0,get:function(){return i(c).default}});var p=e("./hub");Object.defineProperty(r,"Hub",{enumerable:!0,get:function(){return i(p).default}}),r.default=s;var h=e("./context"),f=i(h),d=e("./visitors"),m=n(d),y=e("babel-messages"),g=n(y),b=e("lodash/includes"),v=i(b),x=e("babel-types"),E=n(x),A=e("./cache"),D=n(A);r.visitors=m,s.visitors=m,s.verify=m.verify,s.explode=m.explode,s.NodePath=e("./path"),s.Scope=e("./scope"),s.Hub=e("./hub"),s.cheap=function(e,t){return E.traverseFast(e,t)},s.node=function(e,t,r,n,i,s){var a=E.VISITOR_KEYS[e.type];if(a)for(var o=new f.default(r,t,n,i),l=a,c=Array.isArray(l),p=0,l=c?l:(0,u.default)(l);;){var h;if(c){if(p>=l.length)break;h=l[p++]}else{if(p=l.next(),p.done)break;h=p.value}var d=h;if((!s||!s[d])&&o.visit(e,d))return}},s.clearNode=function(e,t){E.removeProperties(e,t),D.path.delete(e)},s.removeProperties=function(e,t){return E.traverseFast(e,s.clearNode,t),e},s.hasType=function(e,t,r,n){if((0,v.default)(n,e.type))return!1;if(e.type===r)return!0;var i={has:!1,type:r};return s(e,{blacklist:n,enter:a},t,i),i.has},s.clearCache=function(){D.clear()},s.clearCache.clearPath=D.clearPath,s.clearCache.clearScope=D.clearScope,s.copyCache=function(e,t){D.path.has(e)&&D.path.set(t,D.path.get(e))}},{"./cache":133,"./context":134,"./hub":135,"./path":143,"./scope":155,"./visitors":157,"babel-messages":103,"babel-runtime/core-js/get-iterator":113,"babel-types":169,"lodash/includes":496}],137:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){for(var t=this;t=t.parentPath;)if(e(t))return t;return null}function s(e){var t=this;do{if(e(t))return t}while(t=t.parentPath);return null}function a(){return this.findParent(function(e){return e.isFunction()||e.isProgram()})}function o(){var e=this;do{if(Array.isArray(e.container))return e}while(e=e.parentPath)}function u(e){return this.getDeepestCommonAncestorFrom(e,function(e,t,r){for(var n=void 0,i=b.VISITOR_KEYS[e.type],s=r,a=Array.isArray(s),o=0,s=a?s:(0,y.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u,c=l[t+1];if(n)if(c.listKey&&n.listKey===c.listKey&&c.keyh&&(n=c)}else n=c}return n})}function l(e,t){var r=this;if(!e.length)return this;if(1===e.length)return e[0];var n=1/0,i=void 0,s=void 0,a=e.map(function(e){var t=[];do{t.unshift(e)}while((e=e.parentPath)&&e!==r);return t.length=c.length)break;f=c[h++]}else{if(h=c.next(),h.done)break;f=h.value}var d=f;if(d[u]!==l)break e}i=u,s=l}if(s)return t?t(s,i,a):s;throw new Error("Couldn't find intersection")}function c(){var e=this,t=[];do{t.push(e)}while(e=e.parentPath);return t}function p(e){return e.isDescendant(this)}function h(e){return!!this.findParent(function(t){return t===e})}function f(){for(var e=this;e;){for(var t=arguments,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(e.node.type===s)return!0}e=e.parentPath}return!1}function d(e){var t=this.isFunction()?this:this.findParent(function(e){return e.isFunction()});if(t){if(t.isFunctionExpression()||t.isFunctionDeclaration()){var r=t.node.shadow;if(r&&(!e||!1!==r[e]))return t}else if(t.isArrowFunctionExpression())return t;return null}}r.__esModule=!0;var m=e("babel-runtime/core-js/get-iterator"),y=n(m);r.findParent=i,r.find=s,r.getFunctionParent=a,r.getStatementParent=o,r.getEarliestCommonAncestorFrom=u,r.getDeepestCommonAncestorFrom=l,r.getAncestry=c,r.isAncestor=p,r.isDescendant=h,r.inType=f,r.inShadow=d;var g=e("babel-types"),b=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(g),v=e("./index");n(v)},{"./index":143,"babel-runtime/core-js/get-iterator":113,"babel-types":169}],138:[function(e,t,r){"use strict";function n(){if("string"!=typeof this.key){var e=this.node;if(e){var t=e.trailingComments,r=e.leadingComments;if(t||r){var n=this.getSibling(this.key-1),i=this.getSibling(this.key+1);n.node||(n=i),i.node||(i=n),n.addComments("trailing",r),i.addComments("leading",t)}}}}function i(e,t,r){this.addComments(e,[{type:r?"CommentLine":"CommentBlock",value:t}])}function s(e,t){if(t){var r=this.node;if(r){var n=e+"Comments";r[n]?r[n]=r[n].concat(t):r[n]=t}}}r.__esModule=!0,r.shareCommentsWithSiblings=n,r.addComment=i,r.addComments=s},{}],139:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=this.opts;return this.debug(function(){return e}),!(!this.node||!this._call(t[e]))||!!this.node&&this._call(t[this.node.type]&&t[this.node.type][e])}function s(e){if(!e)return!1;for(var t=e,r=Array.isArray(t),n=0,t=r?t:(0,S.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(s){var a=this.node;if(!a)return!0;if(s.call(this.state,this,this.state))throw new Error("Unexpected return value from visitor method "+s);if(this.node!==a)return!0;if(this.shouldStop||this.shouldSkip||this.removed)return!0}}return!1}function a(){var e=this.opts.blacklist;return e&&e.indexOf(this.node.type)>-1}function o(){return!!this.node&&(!this.isBlacklisted()&&((!this.opts.shouldSkip||!this.opts.shouldSkip(this))&&(this.call("enter")||this.shouldSkip?(this.debug(function(){return"Skip..."}),this.shouldStop):(this.debug(function(){return"Recursing into..."}),w.default.node(this.node,this.opts,this.scope,this.state,this,this.skipKeys),this.call("exit"),this.shouldStop))))}function u(){this.shouldSkip=!0}function l(e){this.skipKeys[e]=!0}function c(){this.shouldStop=!0,this.shouldSkip=!0}function p(){if(!this.opts||!this.opts.noScope){var e=this.context&&this.context.scope;if(!e)for(var t=this.parentPath;t&&!e;){if(t.opts&&t.opts.noScope)return;e=t.scope,t=t.parentPath}this.scope=this.getScope(e),this.scope&&this.scope.init()}}function h(e){return this.shouldSkip=!1,this.shouldStop=!1,this.removed=!1,this.skipKeys={},e&&(this.context=e,this.state=e.state,this.opts=e.opts),this.setScope(),this}function f(){this.removed||(this._resyncParent(),this._resyncList(),this._resyncKey())}function d(){this.parentPath&&(this.parent=this.parentPath.node)}function m(){if(this.container&&this.node!==this.container[this.key]){if(Array.isArray(this.container)){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:this;if(!e.removed)for(var t=this.contexts,r=t,n=Array.isArray(r),i=0,r=n?r:(0,S.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;a.maybeQueue(e)}}function D(){for(var e=this,t=this.contexts;!t.length;)e=e.parentPath,t=e.contexts;return t}r.__esModule=!0;var C=e("babel-runtime/core-js/get-iterator"),S=n(C);r.call=i,r._call=s,r.isBlacklisted=a,r.visit=o,r.skip=u,r.skipKey=l,r.stop=c,r.setScope=p,r.setContext=h,r.resync=f,r._resyncParent=d,r._resyncKey=m,r._resyncList=y,r._resyncRemoved=g,r.popContext=b,r.pushContext=v,r.setup=x,r.setKey=E,r.requeue=A,r._getQueueContexts=D;var _=e("../index"),w=n(_)},{"../index":136,"babel-runtime/core-js/get-iterator":113}],140:[function(e,t,r){"use strict";function n(){var e=this.node,t=void 0;if(this.isMemberExpression())t=e.property;else{if(!this.isProperty()&&!this.isMethod())throw new ReferenceError("todo");t=e.key}return e.computed||o.isIdentifier(t)&&(t=o.stringLiteral(t.name)),t}function i(){return o.ensureBlock(this.node)}function s(){if(this.isArrowFunctionExpression()){this.ensureBlock();var e=this.node;e.expression=!1,e.type="FunctionExpression",e.shadow=e.shadow||!0}}r.__esModule=!0,r.toComputedKey=n,r.ensureBlock=i,r.arrowFunctionToShadowed=s;var a=e("babel-types"),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a)},{"babel-types":169}],141:[function(e,t,r){(function(t){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(){var e=this.evaluate();if(e.confident)return!!e.value}function s(){function e(e){i&&(s=e,i=!1)}function r(t){var r=t.node;if(a.has(r)){var s=a.get(r);return s.resolved?s.value:void e(t)}var o={resolved:!1};a.set(r,o);var u=n(t);return i&&(o.resolved=!0,o.value=u),u}function n(n){if(i){var s=n.node;if(n.isSequenceExpression()){var a=n.get("expressions");return r(a[a.length-1])}if(n.isStringLiteral()||n.isNumericLiteral()||n.isBooleanLiteral())return s.value;if(n.isNullLiteral())return null;if(n.isTemplateLiteral()){for(var u="",c=0,p=n.get("expressions"),d=s.quasis,m=Array.isArray(d),y=0,d=m?d:(0,l.default)(d);;){var g;if(m){if(y>=d.length)break;g=d[y++]}else{if(y=d.next(),y.done)break;g=y.value}var b=g;if(!i)break;u+=b.value.cooked;var v=p[c++];v&&(u+=String(r(v)))}if(!i)return;return u}if(n.isConditionalExpression()){var x=r(n.get("test"));if(!i)return;return r(x?n.get("consequent"):n.get("alternate"))}if(n.isExpressionWrapper())return r(n.get("expression"));if(n.isMemberExpression()&&!n.parentPath.isCallExpression({callee:s})){var E=n.get("property"),A=n.get("object");if(A.isLiteral()&&E.isIdentifier()){var D=A.node.value,C=void 0===D?"undefined":(0,o.default)(D);if("number"===C||"string"===C)return D[E.node.name]}}if(n.isReferencedIdentifier()){var S=n.scope.getBinding(s.name);if(S&&S.constantViolations.length>0)return e(S.path);if(S&&n.node.start=P.length)break;j=P[O++]}else{if(O=P.next(),O.done)break;j=O.value}var N=j;if(N=N.evaluate(),!N.confident)return e(N);F.push(N.value)}return F}if(n.isObjectExpression()){for(var I={},L=n.get("properties"),M=L,R=Array.isArray(M),U=0,M=R?M:(0,l.default)(M);;){var V;if(R){if(U>=M.length)break;V=M[U++]}else{if(U=M.next(),U.done)break;V=U.value}var q=V;if(q.isObjectMethod()||q.isSpreadProperty())return e(q);var G=q.get("key"),X=G;if(q.node.computed){if(X=X.evaluate(),!X.confident)return e(G);X=X.value}else X=X.isIdentifier()?X.node.name:X.node.value;var J=q.get("value"),W=J.evaluate();if(!W.confident)return e(J);W=W.value,I[X]=W}return I}if(n.isLogicalExpression()){var K=i,z=r(n.get("left")),Y=i;i=K;var H=r(n.get("right")),$=i;switch(i=Y&&$,s.operator){case"||":if(z&&Y)return i=!0,z;if(!i)return;return z||H;case"&&":if((!z&&Y||!H&&$)&&(i=!0),!i)return;return z&&H}}if(n.isBinaryExpression()){var Q=r(n.get("left"));if(!i)return;var Z=r(n.get("right"));if(!i)return;switch(s.operator){case"-":return Q-Z;case"+":return Q+Z;case"/":return Q/Z;case"*":return Q*Z;case"%":return Q%Z;case"**":return Math.pow(Q,Z);case"<":return Q":return Q>Z;case"<=":return Q<=Z;case">=":return Q>=Z;case"==":return Q==Z;case"!=":return Q!=Z;case"===":return Q===Z;case"!==":return Q!==Z;case"|":return Q|Z;case"&":return Q&Z;case"^":return Q^Z;case"<<":return Q<>":return Q>>Z;case">>>":return Q>>>Z}}if(n.isCallExpression()){var ee=n.get("callee"),te=void 0,re=void 0;if(ee.isIdentifier()&&!n.scope.getBinding(ee.node.name,!0)&&h.indexOf(ee.node.name)>=0&&(re=t[s.callee.name]),ee.isMemberExpression()){var ne=ee.get("object"),ie=ee.get("property");if(ne.isIdentifier()&&ie.isIdentifier()&&h.indexOf(ne.node.name)>=0&&f.indexOf(ie.node.name)<0&&(te=t[ne.node.name],re=te[ie.node.name]),ne.isLiteral()&&ie.isIdentifier()){var se=(0,o.default)(ne.node.value);"string"!==se&&"number"!==se||(te=ne.node.value,re=te[ie.node.name])}}if(re){var ae=n.get("arguments").map(r);if(!i)return;return re.apply(te,ae)}}e(n)}}var i=!0,s=void 0,a=new p.default,u=r(this);return i||(u=void 0),{confident:i,deopt:s,value:u}}r.__esModule=!0;var a=e("babel-runtime/helpers/typeof"),o=n(a),u=e("babel-runtime/core-js/get-iterator"),l=n(u),c=e("babel-runtime/core-js/map"),p=n(c);r.evaluateTruthy=i,r.evaluate=s;var h=["String","Number","Math"],f=["random"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/map":115,"babel-runtime/helpers/typeof":131}],142:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(){var e=this;do{if(!e.parentPath||Array.isArray(e.container)&&e.isStatement())break;e=e.parentPath}while(e);if(e&&(e.isProgram()||e.isFile()))throw new Error("File/Program node, we can't possibly find a statement parent to this");return e}function s(){return"left"===this.key?this.getSibling("right"):"right"===this.key?this.getSibling("left"):void 0}function a(){var e=[],t=function(t){t&&(e=e.concat(t.getCompletionRecords()))};if(this.isIfStatement())t(this.get("consequent")),t(this.get("alternate"));else if(this.isDoExpression()||this.isFor()||this.isWhile())t(this.get("body"));else if(this.isProgram()||this.isBlockStatement())t(this.get("body").pop());else{if(this.isFunction())return this.get("body").getCompletionRecords();this.isTryStatement()?(t(this.get("block")),t(this.get("handler")),t(this.get("finalizer"))):e.push(this)}return e}function o(e){return C.default.get({parentPath:this.parentPath,parent:this.parent,container:this.container,listKey:this.listKey,key:e})}function u(){return this.getSibling(this.key-1)}function l(){return this.getSibling(this.key+1)}function c(){for(var e=this.key,t=this.getSibling(++e),r=[];t.node;)r.push(t),t=this.getSibling(++e);return r}function p(){for(var e=this.key,t=this.getSibling(--e),r=[];t.node;)r.push(t),t=this.getSibling(--e);return r}function h(e,t){!0===t&&(t=this.context);var r=e.split(".");return 1===r.length?this._getKey(e,t):this._getPattern(r,t)}function f(e,t){var r=this,n=this.node,i=n[e];return Array.isArray(i)?i.map(function(s,a){return C.default.get({listKey:e,parentPath:r,parent:n,container:i,key:a}).setContext(t)}):C.default.get({parentPath:this,parent:n,container:n,key:e}).setContext(t)}function d(e,t){for(var r=this,n=e,i=Array.isArray(n),s=0,n=i?n:(0,A.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;r="."===o?r.parentPath:Array.isArray(r)?r[o]:r.get(o,t)}return r}function m(e){return _.getBindingIdentifiers(this.node,e)}function y(e){return _.getOuterBindingIdentifiers(this.node,e)}function g(){for(var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this,n=[].concat(r),i=(0,x.default)(null);n.length;){var s=n.shift();if(s&&s.node){var a=_.getBindingIdentifiers.keys[s.node.type];if(s.isIdentifier())if(e){var o=i[s.node.name]=i[s.node.name]||[];o.push(s)}else i[s.node.name]=s;else if(s.isExportDeclaration()){var u=s.get("declaration");u.isDeclaration()&&n.push(u)}else{if(t){if(s.isFunctionDeclaration()){n.push(s.get("id"));continue}if(s.isFunctionExpression())continue}if(a)for(var l=0;l1&&void 0!==arguments[1]?arguments[1]:SyntaxError;return this.hub.file.buildCodeFrameError(this.node,e,t)},e.prototype.traverse=function(e,t){(0,y.default)(this.node,e,this.scope,t,this)},e.prototype.mark=function(e,t){this.hub.file.metadata.marked.push({type:e,message:t,loc:this.node.loc})},e.prototype.set=function(e,t){A.validate(this.node,e,t),this.node[e]=t},e.prototype.getPathLocation=function(){var e=[],t=this;do{var r=t.key;t.inList&&(r=t.listKey+"["+r+"]"),e.unshift(r)}while(t=t.parentPath);return e.join(".")},e.prototype.debug=function(e){C.enabled&&C(this.getPathLocation()+" "+this.type+": "+e())},e}();r.default=S,(0,b.default)(S.prototype,e("./ancestry")),(0,b.default)(S.prototype,e("./inference")),(0,b.default)(S.prototype,e("./replacement")),(0,b.default)(S.prototype,e("./evaluation")),(0,b.default)(S.prototype,e("./conversion")),(0,b.default)(S.prototype,e("./introspection")),(0,b.default)(S.prototype,e("./context")),(0,b.default)(S.prototype,e("./removal")),(0,b.default)(S.prototype,e("./modification")),(0,b.default)(S.prototype,e("./family")),(0,b.default)(S.prototype,e("./comments"));for(var _=A.TYPES,w=Array.isArray(_),k=0,_=w?_:(0,a.default)(_);;){var F;if("break"===function(){if(w){if(k>=_.length)return"break";F=_[k++]}else{if(k=_.next(),k.done)return"break";F=k.value}var e=F,t="is"+e;S.prototype[t]=function(e){return A[t](this.node,e)},S.prototype["assert"+e]=function(r){if(!this[t](r))throw new TypeError("Expected node path of type "+e)}}())break}for(var T in c){(function(e){if("_"===e[0])return"continue";A.TYPES.indexOf(e)<0&&A.TYPES.push(e);var t=c[e];S.prototype["is"+e]=function(e){return t.checkPath(this,e)}})(T)}t.exports=r.default},{"../cache":133,"../index":136,"../scope":155,"./ancestry":137,"./comments":138,"./context":139,"./conversion":140,"./evaluation":141,"./family":142,"./inference":144,"./introspection":147,"./lib/virtual-types":150,"./modification":151,"./removal":152,"./replacement":153,"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/classCallCheck":127,"babel-types":169,debug:296,invariant:307,"lodash/assign":477}],144:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(){if(this.typeAnnotation)return this.typeAnnotation;var e=this._getTypeAnnotation()||y.anyTypeAnnotation();return y.isTypeAnnotation(e)&&(e=e.typeAnnotation),this.typeAnnotation=e}function s(){var e=this.node;{if(e){if(e.typeAnnotation)return e.typeAnnotation;var t=d[e.type];return t?t.call(this,e):(t=d[this.parentPath.type],t&&t.validParent?this.parentPath.getTypeAnnotation():void 0)}if("init"===this.key&&this.parentPath.isVariableDeclarator()){var r=this.parentPath.parentPath,n=r.parentPath;return"left"===r.key&&n.isForInStatement()?y.stringTypeAnnotation():"left"===r.key&&n.isForOfStatement()?y.anyTypeAnnotation():y.voidTypeAnnotation()}}}function a(e,t){return o(e,this.getTypeAnnotation(),t)}function o(e,t,r){if("string"===e)return y.isStringTypeAnnotation(t);if("number"===e)return y.isNumberTypeAnnotation(t);if("boolean"===e)return y.isBooleanTypeAnnotation(t);if("any"===e)return y.isAnyTypeAnnotation(t);if("mixed"===e)return y.isMixedTypeAnnotation(t);if("empty"===e)return y.isEmptyTypeAnnotation(t);if("void"===e)return y.isVoidTypeAnnotation(t);if(r)return!1;throw new Error("Unknown base type "+e)}function u(e){var t=this.getTypeAnnotation();if(y.isAnyTypeAnnotation(t))return!0;if(y.isUnionTypeAnnotation(t)){for(var r=t.types,n=Array.isArray(r),i=0,r=n?r:(0,h.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if(y.isAnyTypeAnnotation(a)||o(e,a,!0))return!0}return!1}return o(e,t,!0)}function l(e){var t=this.getTypeAnnotation();if(e=e.getTypeAnnotation(),!y.isAnyTypeAnnotation(t)&&y.isFlowBaseAnnotation(t))return e.type===t.type}function c(e){var t=this.getTypeAnnotation();return y.isGenericTypeAnnotation(t)&&y.isIdentifier(t.id,{name:e})}r.__esModule=!0;var p=e("babel-runtime/core-js/get-iterator"),h=function(e){return e&&e.__esModule?e:{default:e}}(p);r.getTypeAnnotation=i,r._getTypeAnnotation=s,r.isBaseType=a,r.couldBeBaseType=u,r.baseTypeStrictlyMatches=l,r.isGenericType=c;var f=e("./inferers"),d=n(f),m=e("babel-types"),y=n(m)},{"./inferers":146,"babel-runtime/core-js/get-iterator":113,"babel-types":169}],145:[function(e,t,r){"use strict";function n(e,t){var r=e.scope.getBinding(t),n=[];e.typeAnnotation=p.unionTypeAnnotation(n);var s=[],a=i(r,e,s),u=o(e,t);if(u&&function(){var e=i(r,u.ifStatement);a=a.filter(function(t){return e.indexOf(t)<0}),n.push(u.typeAnnotation)}(),a.length){a=a.concat(s);for(var c=a,h=Array.isArray(c),f=0,c=h?c:(0,l.default)(c);;){var d;if(h){if(f>=c.length)break;d=c[f++]}else{if(f=c.next(),f.done)break;d=f.value}var m=d;n.push(m.getTypeAnnotation())}}if(n.length)return p.createUnionTypeAnnotation(n)}function i(e,t,r){var n=e.constantViolations.slice();return n.unshift(e.path),n.filter(function(e){e=e.resolve();var n=e._guessExecutionStatusRelativeTo(t);return r&&"function"===n&&r.push(e),"before"===n})}function s(e,t){var r=t.node.operator,n=t.get("right").resolve(),i=t.get("left").resolve(),s=void 0;if(i.isIdentifier({name:e})?s=n:n.isIdentifier({name:e})&&(s=i),s)return"==="===r?s.getTypeAnnotation():p.BOOLEAN_NUMBER_BINARY_OPERATORS.indexOf(r)>=0?p.numberTypeAnnotation():void 0;if("==="===r){var a=void 0,o=void 0;if(i.isUnaryExpression({operator:"typeof"})?(a=i,o=n):n.isUnaryExpression({operator:"typeof"})&&(a=n,o=i),(o||a)&&(o=o.resolve(),o.isLiteral())){if("string"==typeof o.node.value&&a.get("argument").isIdentifier({name:e}))return p.createTypeAnnotationBasedOnTypeof(o.node.value)}}}function a(e){for(var t=void 0;t=e.parentPath;){if(t.isIfStatement()||t.isConditionalExpression())return"test"===e.key?void 0:t;e=t}}function o(e,t){var r=a(e);if(r){var n=r.get("test"),i=[n],u=[];do{var l=i.shift().resolve();if(l.isLogicalExpression()&&(i.push(l.get("left")),i.push(l.get("right"))),l.isBinaryExpression()){var c=s(t,l);c&&u.push(c)}}while(i.length);return u.length?{typeAnnotation:p.createUnionTypeAnnotation(u),ifStatement:r}:o(r,t)}}r.__esModule=!0;var u=e("babel-runtime/core-js/get-iterator"),l=function(e){return e&&e.__esModule?e:{default:e}}(u);r.default=function(e){if(this.isReferenced()){var t=this.scope.getBinding(e.name);return t?t.identifier.typeAnnotation?t.identifier.typeAnnotation:n(this,e.name):"undefined"===e.name?p.voidTypeAnnotation():"NaN"===e.name||"Infinity"===e.name?p.numberTypeAnnotation():void e.name}};var c=e("babel-types"),p=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(c);t.exports=r.default},{"babel-runtime/core-js/get-iterator":113,"babel-types":169}],146:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(){return this.get("id").isIdentifier()?this.get("init").getTypeAnnotation():void 0}function s(e){return e.typeAnnotation}function a(e){if(this.get("callee").isIdentifier())return F.genericTypeAnnotation(e.callee)}function o(){return F.stringTypeAnnotation()}function u(e){var t=e.operator;return"void"===t?F.voidTypeAnnotation():F.NUMBER_UNARY_OPERATORS.indexOf(t)>=0?F.numberTypeAnnotation():F.STRING_UNARY_OPERATORS.indexOf(t)>=0?F.stringTypeAnnotation():F.BOOLEAN_UNARY_OPERATORS.indexOf(t)>=0?F.booleanTypeAnnotation():void 0}function l(e){var t=e.operator;if(F.NUMBER_BINARY_OPERATORS.indexOf(t)>=0)return F.numberTypeAnnotation();if(F.BOOLEAN_BINARY_OPERATORS.indexOf(t)>=0)return F.booleanTypeAnnotation();if("+"===t){var r=this.get("right"),n=this.get("left");return n.isBaseType("number")&&r.isBaseType("number")?F.numberTypeAnnotation():n.isBaseType("string")||r.isBaseType("string")?F.stringTypeAnnotation():F.unionTypeAnnotation([F.stringTypeAnnotation(),F.numberTypeAnnotation()])}}function c(){return F.createUnionTypeAnnotation([this.get("left").getTypeAnnotation(),this.get("right").getTypeAnnotation()])}function p(){return F.createUnionTypeAnnotation([this.get("consequent").getTypeAnnotation(),this.get("alternate").getTypeAnnotation()])}function h(){return this.get("expressions").pop().getTypeAnnotation()}function f(){return this.get("right").getTypeAnnotation()}function d(e){var t=e.operator;if("++"===t||"--"===t)return F.numberTypeAnnotation()}function m(){return F.stringTypeAnnotation()}function y(){return F.numberTypeAnnotation()}function g(){return F.booleanTypeAnnotation()}function b(){return F.nullLiteralTypeAnnotation()}function v(){return F.genericTypeAnnotation(F.identifier("RegExp"))}function x(){return F.genericTypeAnnotation(F.identifier("Object"))}function E(){return F.genericTypeAnnotation(F.identifier("Array"))}function A(){return E()}function D(){return F.genericTypeAnnotation(F.identifier("Function"))}function C(){return _(this.get("callee"))}function S(){return _(this.get("tag"))}function _(e){if(e=e.resolve(),e.isFunction()){if(e.is("async"))return e.is("generator")?F.genericTypeAnnotation(F.identifier("AsyncIterator")):F.genericTypeAnnotation(F.identifier("Promise"));if(e.node.returnType)return e.node.returnType}}r.__esModule=!0,r.ClassDeclaration=r.ClassExpression=r.FunctionDeclaration=r.ArrowFunctionExpression=r.FunctionExpression=r.Identifier=void 0;var w=e("./inferer-reference");Object.defineProperty(r,"Identifier",{enumerable:!0,get:function(){return n(w).default}}),r.VariableDeclarator=i, +r.TypeCastExpression=s,r.NewExpression=a,r.TemplateLiteral=o,r.UnaryExpression=u,r.BinaryExpression=l,r.LogicalExpression=c,r.ConditionalExpression=p,r.SequenceExpression=h,r.AssignmentExpression=f,r.UpdateExpression=d,r.StringLiteral=m,r.NumericLiteral=y,r.BooleanLiteral=g,r.NullLiteral=b,r.RegExpLiteral=v,r.ObjectExpression=x,r.ArrayExpression=E,r.RestElement=A,r.CallExpression=C,r.TaggedTemplateExpression=S;var k=e("babel-types"),F=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(k);s.validParent=!0,A.validParent=!0,r.FunctionExpression=D,r.ArrowFunctionExpression=D,r.FunctionDeclaration=D,r.ClassExpression=D,r.ClassDeclaration=D},{"./inferer-reference":145,"babel-types":169}],147:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){function r(e){var t=n[s];return"*"===t||e===t}if(!this.isMemberExpression())return!1;for(var n=e.split("."),i=[this.node],s=0;i.length;){var a=i.shift();if(t&&s===n.length)return!0;if(k.isIdentifier(a)){if(!r(a.name))return!1}else if(k.isLiteral(a)){if(!r(a.value))return!1}else{if(k.isMemberExpression(a)){if(a.computed&&!k.isLiteral(a.property))return!1;i.unshift(a.property),i.unshift(a.object);continue}if(!k.isThisExpression(a))return!1;if(!r("this"))return!1}if(++s>n.length)return!1}return s===n.length}function s(e){var t=this.node&&this.node[e];return t&&Array.isArray(t)?!!t.length:!!t}function a(){return this.scope.isStatic(this.node)}function o(e){return!this.has(e)}function u(e,t){return this.node[e]===t}function l(e){return k.isType(this.type,e)}function c(){return("init"===this.key||"left"===this.key)&&this.parentPath.isFor()}function p(e){return!("body"!==this.key||!this.parentPath.isArrowFunctionExpression())&&(this.isExpression()?k.isBlockStatement(e):!!this.isBlockStatement()&&k.isExpression(e))}function h(e){var t=this,r=!0;do{var n=t.container;if(t.isFunction()&&!r)return!!e;if(r=!1,Array.isArray(n)&&t.key!==n.length-1)return!1}while((t=t.parentPath)&&!t.isProgram());return!0}function f(){return!this.parentPath.isLabeledStatement()&&!k.isBlockStatement(this.container)&&(0,_.default)(k.STATEMENT_OR_BLOCK_KEYS,this.key)}function d(e,t){if(!this.isReferencedIdentifier())return!1;var r=this.scope.getBinding(this.node.name);if(!r||"module"!==r.kind)return!1;var n=r.path,i=n.parentPath;return!!i.isImportDeclaration()&&(i.node.source.value===e&&(!t||(!(!n.isImportDefaultSpecifier()||"default"!==t)||(!(!n.isImportNamespaceSpecifier()||"*"!==t)||!(!n.isImportSpecifier()||n.node.imported.name!==t)))))}function m(){var e=this.node;return e.end?this.hub.file.code.slice(e.start,e.end):""}function y(e){return"after"!==this._guessExecutionStatusRelativeTo(e)}function g(e){var t=e.scope.getFunctionParent(),r=this.scope.getFunctionParent();if(t.node!==r.node){var n=this._guessExecutionStatusRelativeToDifferentFunctions(t);if(n)return n;e=t.path}var i=e.getAncestry();if(i.indexOf(this)>=0)return"after";var s=this.getAncestry(),a=void 0,o=void 0,u=void 0;for(u=0;u=0){a=l;break}}if(!a)return"before";var c=i[o-1],p=s[u-1];return c&&p?c.listKey&&c.container===p.container?c.key>p.key?"before":"after":k.VISITOR_KEYS[c.type].indexOf(c.key)>k.VISITOR_KEYS[p.type].indexOf(p.key)?"before":"after":"before"}function b(e){var t=e.path;if(t.isFunctionDeclaration()){var r=t.scope.getBinding(t.node.id.name);if(!r.references)return"before";for(var n=r.referencePaths,i=n,s=Array.isArray(i),a=0,i=s?i:(0,C.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;if("callee"!==u.key||!u.parentPath.isCallExpression())return}for(var l=void 0,c=n,p=Array.isArray(c),h=0,c=p?c:(0,C.default)(c);;){var f;if(p){if(h>=c.length)break;f=c[h++]}else{if(h=c.next(),h.done)break;f=h.value}var d=f;if(!!!d.find(function(e){return e.node===t.node})){var m=this._guessExecutionStatusRelativeTo(d);if(l){if(l!==m)return}else l=m}}return l}}function v(e,t){return this._resolve(e,t)||this}function x(e,t){var r=this;if(!(t&&t.indexOf(this)>=0))if(t=t||[],t.push(this),this.isVariableDeclarator()){if(this.get("id").isIdentifier())return this.get("init").resolve(e,t)}else if(this.isReferencedIdentifier()){var n=this.scope.getBinding(this.node.name);if(!n)return;if(!n.constant)return;if("module"===n.kind)return;if(n.path!==this){var i=function(){var i=n.path.resolve(e,t);return r.find(function(e){return e.node===i.node})?{v:void 0}:{v:i}}();if("object"===(void 0===i?"undefined":(0,A.default)(i)))return i.v}}else{if(this.isTypeCastExpression())return this.get("expression").resolve(e,t);if(e&&this.isMemberExpression()){var s=this.toComputedKey();if(!k.isLiteral(s))return;var a=s.value,o=this.get("object").resolve(e,t);if(o.isObjectExpression())for(var u=o.get("properties"),l=u,c=Array.isArray(l),p=0,l=c?l:(0,C.default)(l);;){var h;if(c){if(p>=l.length)break;h=l[p++]}else{if(p=l.next(),p.done)break;h=p.value}var f=h;if(f.isProperty()){var d=f.get("key"),m=f.isnt("computed")&&d.isIdentifier({name:a});if(m=m||d.isLiteral({value:a}))return f.get("value").resolve(e,t)}}else if(o.isArrayExpression()&&!isNaN(+a)){var y=o.get("elements"),g=y[a];if(g)return g.resolve(e,t)}}}}r.__esModule=!0,r.is=void 0;var E=e("babel-runtime/helpers/typeof"),A=n(E),D=e("babel-runtime/core-js/get-iterator"),C=n(D);r.matchesPattern=i,r.has=s,r.isStatic=a,r.isnt=o,r.equals=u,r.isNodeType=l,r.canHaveVariableDeclarationOrExpression=c,r.canSwapBetweenExpressionAndStatement=p,r.isCompletionRecord=h,r.isStatementOrBlock=f,r.referencesImport=d,r.getSource=m,r.willIMaybeExecuteBefore=y,r._guessExecutionStatusRelativeTo=g,r._guessExecutionStatusRelativeToDifferentFunctions=b,r.resolve=v,r._resolve=x;var S=e("lodash/includes"),_=n(S),w=e("babel-types"),k=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(w);r.is=s},{"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/typeof":131,"babel-types":169,"lodash/includes":496}],148:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/core-js/get-iterator"),s=n(i),a=e("babel-runtime/helpers/classCallCheck"),o=n(a),u=e("babel-types"),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u),c={ReferencedIdentifier:function(e,t){if(!e.isJSXIdentifier()||!u.react.isCompatTag(e.node.name)||e.parentPath.isJSXMemberExpression()){if("this"===e.node.name){var r=e.scope;do{if(r.path.isFunction()&&!r.path.isArrowFunctionExpression())break}while(r=r.parent);r&&t.breakOnScopePaths.push(r.path)}var n=e.scope.getBinding(e.node.name);n&&n===t.scope.getBinding(e.node.name)&&(t.bindings[e.node.name]=n)}}},p=function(){function e(t,r){(0,o.default)(this,e),this.breakOnScopePaths=[],this.bindings={},this.scopes=[],this.scope=r,this.path=t,this.attachAfter=!1}return e.prototype.isCompatibleScope=function(e){for(var t in this.bindings){var r=this.bindings[t];if(!e.bindingIdentifierEquals(t,r.identifier))return!1}return!0},e.prototype.getCompatibleScopes=function(){var e=this.path.scope;do{if(!this.isCompatibleScope(e))break;if(this.scopes.push(e),this.breakOnScopePaths.indexOf(e.path)>=0)break}while(e=e.parent)},e.prototype.getAttachmentPath=function(){var e=this._getAttachmentPath();if(e){var t=e.scope;if(t.path===e&&(t=e.scope.parent),t.path.isProgram()||t.path.isFunction())for(var r in this.bindings)if(t.hasOwnBinding(r)){var n=this.bindings[r];if("param"!==n.kind&&this.getAttachmentParentForPath(n.path).key>e.key){this.attachAfter=!0,e=n.path;for(var i=n.constantViolations,a=Array.isArray(i),o=0,i=a?i:(0,s.default)(i);;){var u;if(a){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u;this.getAttachmentParentForPath(l).key>e.key&&(e=l)}}}return e}},e.prototype._getAttachmentPath=function(){var e=this.scopes,t=e.pop();if(t){if(t.path.isFunction()){if(this.hasOwnParamBindings(t)){if(this.scope===t)return;return t.path.get("body").get("body")[0]}return this.getNextScopeAttachmentParent()}return t.path.isProgram()?this.getNextScopeAttachmentParent():void 0}},e.prototype.getNextScopeAttachmentParent=function(){var e=this.scopes.pop();if(e)return this.getAttachmentParentForPath(e.path)},e.prototype.getAttachmentParentForPath=function(e){do{if(!e.parentPath||Array.isArray(e.container)&&e.isStatement()||e.isVariableDeclarator()&&null!==e.parentPath.node&&e.parentPath.node.declarations.length>1)return e}while(e=e.parentPath)},e.prototype.hasOwnParamBindings=function(e){for(var t in this.bindings)if(e.hasOwnBinding(t)){var r=this.bindings[t];if("param"===r.kind&&r.constant)return!0}return!1},e.prototype.run=function(){var e=this.path.node;if(!e._hoisted){e._hoisted=!0,this.path.traverse(c,this),this.getCompatibleScopes();var t=this.getAttachmentPath();if(t&&t.getFunctionParent()!==this.path.getFunctionParent()){var r=t.scope.generateUidIdentifier("ref"),n=l.variableDeclarator(r,this.path.node);t[this.attachAfter?"insertAfter":"insertBefore"]([t.isVariableDeclarator()?n:l.variableDeclaration("var",[n])]);var i=this.path.parentPath;i.isJSXElement()&&this.path.container===i.node.children&&(r=l.JSXExpressionContainer(r)),this.path.replaceWith(r)}}},e}();r.default=p,t.exports=r.default},{"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/classCallCheck":127,"babel-types":169}],149:[function(e,t,r){"use strict";r.__esModule=!0;r.hooks=[function(e,t){if("test"===e.key&&(t.isWhile()||t.isSwitchCase())||"declaration"===e.key&&t.isExportDeclaration()||"body"===e.key&&t.isLabeledStatement()||"declarations"===e.listKey&&t.isVariableDeclaration()&&1===t.node.declarations.length||"expression"===e.key&&t.isExpressionStatement())return t.remove(),!0},function(e,t){if(t.isSequenceExpression()&&1===t.node.expressions.length)return t.replaceWith(t.node.expressions[0]),!0},function(e,t){if(t.isBinary())return"left"===e.key?t.replaceWith(t.node.right):t.replaceWith(t.node.left),!0},function(e,t){if(t.isIfStatement()&&("consequent"===e.key||"alternate"===e.key)||"body"===e.key&&(t.isLoop()||t.isArrowFunctionExpression()))return e.replaceWith({type:"BlockStatement",body:[]}),!0}]},{}],150:[function(e,t,r){"use strict";r.__esModule=!0,r.Flow=r.Pure=r.Generated=r.User=r.Var=r.BlockScoped=r.Referenced=r.Scope=r.Expression=r.Statement=r.BindingIdentifier=r.ReferencedMemberExpression=r.ReferencedIdentifier=void 0;var n=e("babel-types"),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);r.ReferencedIdentifier={types:["Identifier","JSXIdentifier"],checkPath:function(e,t){var r=e.node,s=e.parent;if(!i.isIdentifier(r,t)&&!i.isJSXMemberExpression(s,t)){if(!i.isJSXIdentifier(r,t))return!1;if(n.react.isCompatTag(r.name))return!1}return i.isReferenced(r,s)}},r.ReferencedMemberExpression={types:["MemberExpression"],checkPath:function(e){var t=e.node,r=e.parent;return i.isMemberExpression(t)&&i.isReferenced(t,r)}},r.BindingIdentifier={types:["Identifier"],checkPath:function(e){var t=e.node,r=e.parent;return i.isIdentifier(t)&&i.isBinding(t,r)}},r.Statement={types:["Statement"],checkPath:function(e){var t=e.node,r=e.parent;if(i.isStatement(t)){if(i.isVariableDeclaration(t)){if(i.isForXStatement(r,{left:t}))return!1;if(i.isForStatement(r,{init:t}))return!1}return!0}return!1}},r.Expression={types:["Expression"],checkPath:function(e){return e.isIdentifier()?e.isReferencedIdentifier():i.isExpression(e.node)}},r.Scope={types:["Scopable"],checkPath:function(e){return i.isScope(e.node,e.parent)}},r.Referenced={checkPath:function(e){return i.isReferenced(e.node,e.parent)}},r.BlockScoped={checkPath:function(e){return i.isBlockScoped(e.node)}},r.Var={types:["VariableDeclaration"],checkPath:function(e){return i.isVar(e.node)}},r.User={checkPath:function(e){return e.node&&!!e.node.loc}},r.Generated={checkPath:function(e){return!e.isUser()}},r.Pure={checkPath:function(e,t){return e.scope.isPure(e.node,t)}},r.Flow={types:["Flow","ImportDeclaration","ExportDeclaration","ImportSpecifier"],checkPath:function(e){var t=e.node;return!!i.isFlow(t)||(i.isImportDeclaration(t)?"type"===t.importKind||"typeof"===t.importKind:i.isExportDeclaration(t)?"type"===t.exportKind:!!i.isImportSpecifier(t)&&("type"===t.importKind||"typeof"===t.importKind))}}},{"babel-types":169}],151:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){if(this._assertUnremoved(),e=this._verifyNodeList(e),this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement())return this.parentPath.insertBefore(e);if(this.isNodeType("Expression")||this.parentPath.isForStatement()&&"init"===this.key)this.node&&e.push(this.node),this.replaceExpressionWithStatements(e);else{if(this._maybePopFromStatements(e),Array.isArray(this.container))return this._containerInsertBefore(e);if(!this.isStatementOrBlock())throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?");this.node&&e.push(this.node),this._replaceWith(S.blockStatement(e))}return[this]}function s(e,t){this.updateSiblingKeys(e,t.length);for(var r=[],n=0;n=u.length)break;p=u[c++]}else{if(c=u.next(),c.done)break;p=c.value}var h=p;h.setScope(),h.debug(function(){return"Inserted."});for(var f=o,d=Array.isArray(f),m=0,f=d?f:(0,b.default)(f);;){var y;if(d){if(m>=f.length)break;y=f[m++]}else{if(m=f.next(),m.done)break;y=m.value}y.maybeQueue(h,!0)}}return r}function a(e){return this._containerInsert(this.key,e)}function o(e){return this._containerInsert(this.key+1,e)}function u(e){var t=e[e.length-1];(S.isIdentifier(t)||S.isExpressionStatement(t)&&S.isIdentifier(t.expression))&&!this.isCompletionRecord()&&e.pop()}function l(e){if(this._assertUnremoved(),e=this._verifyNodeList(e),this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement())return this.parentPath.insertAfter(e);if(this.isNodeType("Expression")||this.parentPath.isForStatement()&&"init"===this.key){if(this.node){var t=this.scope.generateDeclaredUidIdentifier();e.unshift(S.expressionStatement(S.assignmentExpression("=",t,this.node))),e.push(S.expressionStatement(t))}this.replaceExpressionWithStatements(e)}else{if(this._maybePopFromStatements(e),Array.isArray(this.container))return this._containerInsertAfter(e);if(!this.isStatementOrBlock())throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?");this.node&&e.unshift(this.node),this._replaceWith(S.blockStatement(e))}return[this]}function c(e,t){if(this.parent)for(var r=v.path.get(this.parent),n=0;n=e&&(i.key+=t)}}function p(e){if(!e)return[];e.constructor!==Array&&(e=[e]);for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:this.scope;return new E.default(this,e).run()}r.__esModule=!0;var m=e("babel-runtime/helpers/typeof"),y=n(m),g=e("babel-runtime/core-js/get-iterator"),b=n(g);r.insertBefore=i,r._containerInsert=s,r._containerInsertBefore=a,r._containerInsertAfter=o,r._maybePopFromStatements=u,r.insertAfter=l,r.updateSiblingKeys=c,r._verifyNodeList=p,r.unshiftContainer=h,r.pushContainer=f,r.hoist=d;var v=e("../cache"),x=e("./lib/hoister"),E=n(x),A=e("./index"),D=n(A),C=e("babel-types"),S=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(C)},{"../cache":133,"./index":143,"./lib/hoister":148,"babel-runtime/core-js/get-iterator":113,"babel-runtime/helpers/typeof":131,"babel-types":169}],152:[function(e,t,r){"use strict";function n(){if(this._assertUnremoved(),this.resync(),this._callRemovalHooks())return void this._markRemoved();this.shareCommentsWithSiblings(),this._remove(),this._markRemoved()}function i(){for(var e=c.hooks,t=Array.isArray(e),r=0,e=t?e:(0,l.default)(e);;){var n;if(t){if(r>=e.length)break;n=e[r++]}else{if(r=e.next(),r.done)break;n=r.value}if(n(this,this.parentPath))return!0}}function s(){Array.isArray(this.container)?(this.container.splice(this.key,1),this.updateSiblingKeys(this.key,-1)):this._replaceWith(null)}function a(){this.shouldSkip=!0,this.removed=!0,this.node=null}function o(){if(this.removed)throw this.buildCodeFrameError("NodePath has been removed so is read-only.")}r.__esModule=!0;var u=e("babel-runtime/core-js/get-iterator"),l=function(e){return e&&e.__esModule?e:{default:e}}(u);r.remove=n,r._callRemovalHooks=i,r._remove=s,r._markRemoved=a,r._assertUnremoved=o;var c=e("./lib/removal-hooks")},{"./lib/removal-hooks":149,"babel-runtime/core-js/get-iterator":113}],153:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){this.resync(),e=this._verifyNodeList(e),x.inheritLeadingComments(e[0],this.node),x.inheritTrailingComments(e[e.length-1],this.node),this.node=this.container[this.key]=null,this.insertAfter(e),this.node?this.requeue():this.remove()}function s(e){this.resync();try{e="("+e+")",e=(0,b.parse)(e)}catch(r){var t=r.loc;throw t&&(r.message+=" - make sure this is an expression.",r.message+="\n"+(0,f.default)(e,t.line,t.column+1)),r}return e=e.program.body[0].expression,m.default.removeProperties(e),this.replaceWith(e)}function a(e){if(this.resync(),this.removed)throw new Error("You can't replace this node, we've already removed it");if(e instanceof g.default&&(e=e.node),!e)throw new Error("You passed `path.replaceWith()` a falsy node, use `path.remove()` instead");if(this.node!==e){if(this.isProgram()&&!x.isProgram(e))throw new Error("You can only replace a Program root node with another Program node");if(Array.isArray(e))throw new Error("Don't use `path.replaceWith()` with an array of nodes, use `path.replaceWithMultiple()`");if("string"==typeof e)throw new Error("Don't use `path.replaceWith()` with a source string, use `path.replaceWithSourceString()`");if(this.isNodeType("Statement")&&x.isExpression(e)&&(this.canHaveVariableDeclarationOrExpression()||this.canSwapBetweenExpressionAndStatement(e)||(e=x.expressionStatement(e))),this.isNodeType("Expression")&&x.isStatement(e)&&!this.canHaveVariableDeclarationOrExpression()&&!this.canSwapBetweenExpressionAndStatement(e))return this.replaceExpressionWithStatements([e]);var t=this.node;t&&(x.inheritsComments(e,t),x.removeComments(t)),this._replaceWith(e),this.type=e.type,this.setScope(),this.requeue()}}function o(e){if(!this.container)throw new ReferenceError("Container is falsy");this.inList?x.validate(this.parent,this.key,[e]):x.validate(this.parent,this.key,e),this.debug(function(){return"Replace with "+(e&&e.type)}),this.node=this.container[this.key]=e}function u(e){this.resync();var t=x.toSequenceExpression(e,this.scope);if(x.isSequenceExpression(t)){var r=t.expressions;r.length>=2&&this.parentPath.isExpressionStatement()&&this._maybePopFromStatements(r),1===r.length?this.replaceWith(r[0]):this.replaceWith(t)}else{if(!t){var n=x.functionExpression(null,[],x.blockStatement(e));n.shadow=!0,this.replaceWith(x.callExpression(n,[])),this.traverse(E);for(var i=this.get("callee").getCompletionRecords(),s=i,a=Array.isArray(s),o=0,s=a?s:(0,p.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;if(l.isExpressionStatement()){var c=l.findParent(function(e){return e.isLoop()});if(c){var h=c.getData("expressionReplacementReturnUid");if(h)h=x.identifier(h.name);else{var f=this.get("callee");h=f.scope.generateDeclaredUidIdentifier("ret"),f.get("body").pushContainer("body",x.returnStatement(h)),c.setData("expressionReplacementReturnUid",h)}l.get("expression").replaceWith(x.assignmentExpression("=",h,l.node.expression))}else l.replaceWith(x.returnStatement(l.node.expression))}}return this.node}this.replaceWith(t)}}function l(e){return this.resync(),Array.isArray(e)?Array.isArray(this.container)?(e=this._verifyNodeList(e),this._containerInsertAfter(e),this.remove()):this.replaceWithMultiple(e):this.replaceWith(e)}r.__esModule=!0;var c=e("babel-runtime/core-js/get-iterator"),p=n(c);r.replaceWithMultiple=i,r.replaceWithSourceString=s,r.replaceWith=a,r._replaceWith=o,r.replaceExpressionWithStatements=u,r.replaceInline=l;var h=e("babel-code-frame"),f=n(h),d=e("../index"),m=n(d),y=e("./index"),g=n(y),b=e("babylon"),v=e("babel-types"),x=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(v),E={Function:function(e){e.skip()},VariableDeclaration:function(e){if("var"===e.node.kind){var t=e.getBindingIdentifiers();for(var r in t)e.scope.push({id:t[r]});for(var n=[],i=e.node.declarations,s=Array.isArray(i),a=0,i=s?i:(0,p.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;u.init&&n.push(x.expressionStatement(x.assignmentExpression("=",u.id,u.init)))}e.replaceWithMultiple(n)}}}},{"../index":136,"./index":143,"babel-code-frame":23,"babel-runtime/core-js/get-iterator":113,"babel-types":169,babylon:177}],154:[function(e,t,r){"use strict";r.__esModule=!0;var n=e("babel-runtime/helpers/classCallCheck"),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=function(){function e(t){var r=t.existing,n=t.identifier,s=t.scope,a=t.path,o=t.kind;(0,i.default)(this,e),this.identifier=n,this.scope=s,this.path=a,this.kind=o,this.constantViolations=[],this.constant=!0,this.referencePaths=[],this.referenced=!1,this.references=0,this.clearValue(),r&&(this.constantViolations=[].concat(r.path,r.constantViolations,this.constantViolations))}return e.prototype.deoptValue=function(){this.clearValue(),this.hasDeoptedValue=!0},e.prototype.setValue=function(e){this.hasDeoptedValue||(this.hasValue=!0,this.value=e)},e.prototype.clearValue=function(){this.hasDeoptedValue=!1,this.hasValue=!1,this.value=null},e.prototype.reassign=function(e){this.constant=!1,-1===this.constantViolations.indexOf(e)&&this.constantViolations.push(e)},e.prototype.reference=function(e){-1===this.referencePaths.indexOf(e)&&(this.referenced=!0,this.references++,this.referencePaths.push(e))},e.prototype.dereference=function(){this.references--,this.referenced=!!this.references},e}();r.default=s,t.exports=r.default},{"babel-runtime/helpers/classCallCheck":127}],155:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t,r){for(var n=N.scope.get(e.node)||[],i=n,s=Array.isArray(i),a=0,i=s?i:(0,y.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;if(u.parent===t&&u.path===e)return u}n.push(r),N.scope.has(e.node)||N.scope.set(e.node,n)}function a(e,t){if(j.isModuleDeclaration(e))if(e.source)a(e.source,t);else if(e.specifiers&&e.specifiers.length)for(var r=e.specifiers,n=Array.isArray(r),i=0,r=n?r:(0,y.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var o=s;a(o,t)}else e.declaration&&a(e.declaration,t);else if(j.isModuleSpecifier(e))a(e.local,t);else if(j.isMemberExpression(e))a(e.object,t),a(e.property,t);else if(j.isIdentifier(e))t.push(e.name);else if(j.isLiteral(e))t.push(e.value);else if(j.isCallExpression(e))a(e.callee,t);else if(j.isObjectExpression(e)||j.isObjectPattern(e))for(var u=e.properties,l=Array.isArray(u),c=0,u=l?u:(0,y.default)(u);;){var p;if(l){if(c>=u.length)break;p=u[c++]}else{if(c=u.next(),c.done)break;p=c.value}var h=p;a(h.key||h.argument,t)}}r.__esModule=!0;var o=e("babel-runtime/core-js/object/keys"),u=i(o),l=e("babel-runtime/core-js/object/create"),c=i(l),p=e("babel-runtime/core-js/map"),h=i(p),f=e("babel-runtime/helpers/classCallCheck"),d=i(f),m=e("babel-runtime/core-js/get-iterator"),y=i(m),g=e("lodash/includes"),b=i(g),v=e("lodash/repeat"),x=i(v),E=e("./lib/renamer"),A=i(E),D=e("../index"),C=i(D),S=e("lodash/defaults"),_=i(S),w=e("babel-messages"),k=n(w),F=e("./binding"),T=i(F),P=e("globals"),B=i(P),O=e("babel-types"),j=n(O),N=e("../cache"),I=0,L={For:function(e){for(var t=j.FOR_INIT_KEYS,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,a=e.get(s);a.isVar()&&e.scope.getFunctionParent().registerBinding("var",a)}},Declaration:function(e){e.isBlockScoped()||e.isExportDeclaration()&&e.get("declaration").isDeclaration()||e.scope.getFunctionParent().registerDeclaration(e)},ReferencedIdentifier:function(e,t){t.references.push(e)},ForXStatement:function(e,t){var r=e.get("left");(r.isPattern()||r.isIdentifier())&&t.constantViolations.push(r)},ExportDeclaration:{exit:function(e){var t=e.node,r=e.scope,n=t.declaration;if(j.isClassDeclaration(n)||j.isFunctionDeclaration(n)){var i=n.id;if(!i)return;var s=r.getBinding(i.name);s&&s.reference(e)}else if(j.isVariableDeclaration(n))for(var a=n.declarations,o=Array.isArray(a),u=0,a=o?a:(0,y.default)(a);;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l,p=j.getBindingIdentifiers(c);for(var h in p){var f=r.getBinding(h);f&&f.reference(e)}}}},LabeledStatement:function(e){e.scope.getProgramParent().addGlobal(e.node),e.scope.getBlockParent().registerDeclaration(e)},AssignmentExpression:function(e,t){t.assignments.push(e)},UpdateExpression:function(e,t){t.constantViolations.push(e.get("argument"))},UnaryExpression:function(e,t){"delete"===e.node.operator&&t.constantViolations.push(e.get("argument"))},BlockScoped:function(e){var t=e.scope;t.path===e&&(t=t.parent),t.getBlockParent().registerDeclaration(e)},ClassDeclaration:function(e){var t=e.node.id;if(t){var r=t.name;e.scope.bindings[r]=e.scope.getBinding(r)}},Block:function(e){for(var t=e.get("body"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,y.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;a.isFunctionDeclaration()&&e.scope.getBlockParent().registerDeclaration(a)}}},M=0,R=function(){function e(t,r){if((0,d.default)(this,e),r&&r.block===t.node)return r;var n=s(t,r,this);if(n)return n;this.uid=M++,this.parent=r,this.hub=t.hub,this.parentBlock=t.parent,this.block=t.node,this.path=t,this.labels=new h.default}return e.prototype.traverse=function(e,t,r){(0,C.default)(e,t,this,r,this.path)},e.prototype.generateDeclaredUidIdentifier=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"temp",t=this.generateUidIdentifier(e);return this.push({id:t}),t},e.prototype.generateUidIdentifier=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"temp";return j.identifier(this.generateUid(e))},e.prototype.generateUid=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"temp";e=j.toIdentifier(e).replace(/^_+/,"").replace(/[0-9]+$/g,"");var t=void 0,r=0;do{t=this._generateUid(e,r),r++}while(this.hasLabel(t)||this.hasBinding(t)||this.hasGlobal(t)||this.hasReference(t));var n=this.getProgramParent();return n.references[t]=!0,n.uids[t]=!0,t},e.prototype._generateUid=function(e,t){var r=e;return t>1&&(r+=t),"_"+r},e.prototype.generateUidIdentifierBasedOnNode=function(e,t){var r=e;j.isAssignmentExpression(e)?r=e.left:j.isVariableDeclarator(e)?r=e.id:(j.isObjectProperty(r)||j.isObjectMethod(r))&&(r=r.key);var n=[];a(r,n);var i=n.join("$");return i=i.replace(/^_/,"")||t||"ref",this.generateUidIdentifier(i.slice(0,20))},e.prototype.isStatic=function(e){if(j.isThisExpression(e)||j.isSuper(e))return!0;if(j.isIdentifier(e)){var t=this.getBinding(e.name);return t?t.constant:this.hasBinding(e.name)}return!1},e.prototype.maybeGenerateMemoised=function(e,t){if(this.isStatic(e))return null;var r=this.generateUidIdentifierBasedOnNode(e);return t||this.push({id:r}),r},e.prototype.checkBlockScopedCollisions=function(e,t,r,n){if("param"!==t&&("hoisted"!==t||"let"!==e.kind)){if("let"===t||"let"===e.kind||"const"===e.kind||"module"===e.kind||"param"===e.kind&&("let"===t||"const"===t))throw this.hub.file.buildCodeFrameError(n,k.get("scopeDuplicateDeclaration",r),TypeError)}},e.prototype.rename=function(e,t,r){var n=this.getBinding(e);if(n)return t=t||this.generateUidIdentifier(e).name,new A.default(n,e,t).rename(r)},e.prototype._renameFromMap=function(e,t,r,n){e[t]&&(e[r]=n,e[t]=null)},e.prototype.dump=function(){var e=(0,x.default)("-",60);console.log(e);var t=this;do{console.log("#",t.block.type);for(var r in t.bindings){var n=t.bindings[r];console.log(" -",r,{constant:n.constant,references:n.references,violations:n.constantViolations.length,kind:n.kind})}}while(t=t.parent);console.log(e)},e.prototype.toArray=function(e,t){var r=this.hub.file;if(j.isIdentifier(e)){var n=this.getBinding(e.name);if(n&&n.constant&&n.path.isGenericType("Array"))return e}if(j.isArrayExpression(e))return e;if(j.isIdentifier(e,{name:"arguments"}))return j.callExpression(j.memberExpression(j.memberExpression(j.memberExpression(j.identifier("Array"),j.identifier("prototype")),j.identifier("slice")),j.identifier("call")),[e]);var i="toArray",s=[e];return!0===t?i="toConsumableArray":t&&(s.push(j.numericLiteral(t)),i="slicedToArray"),j.callExpression(r.addHelper(i),s)},e.prototype.hasLabel=function(e){return!!this.getLabel(e)},e.prototype.getLabel=function(e){return this.labels.get(e)},e.prototype.registerLabel=function(e){this.labels.set(e.node.label.name,e)},e.prototype.registerDeclaration=function(e){if(e.isLabeledStatement())this.registerLabel(e);else if(e.isFunctionDeclaration())this.registerBinding("hoisted",e.get("id"),e);else if(e.isVariableDeclaration())for(var t=e.get("declarations"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,y.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;this.registerBinding(e.node.kind,a)}else if(e.isClassDeclaration())this.registerBinding("let",e);else if(e.isImportDeclaration())for(var o=e.get("specifiers"),u=o,l=Array.isArray(u),c=0,u=l?u:(0,y.default)(u);;){var p;if(l){if(c>=u.length)break;p=u[c++]}else{if(c=u.next(),c.done)break;p=c.value}var h=p;this.registerBinding("module",h)}else if(e.isExportDeclaration()){var f=e.get("declaration");(f.isClassDeclaration()||f.isFunctionDeclaration()||f.isVariableDeclaration())&&this.registerDeclaration(f)}else this.registerBinding("unknown",e)},e.prototype.buildUndefinedNode=function(){return this.hasBinding("undefined")?j.unaryExpression("void",j.numericLiteral(0),!0):j.identifier("undefined")},e.prototype.registerConstantViolation=function(e){var t=e.getBindingIdentifiers();for(var r in t){var n=this.getBinding(r) +;n&&n.reassign(e)}},e.prototype.registerBinding=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;if(!e)throw new ReferenceError("no `kind`");if(t.isVariableDeclaration())for(var n=t.get("declarations"),i=n,s=Array.isArray(i),a=0,i=s?i:(0,y.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;this.registerBinding(e,u)}else{var l=this.getProgramParent(),c=t.getBindingIdentifiers(!0);for(var p in c)for(var h=c[p],f=Array.isArray(h),d=0,h=f?h:(0,y.default)(h);;){var m;if(f){if(d>=h.length)break;m=h[d++]}else{if(d=h.next(),d.done)break;m=d.value}var g=m,b=this.getOwnBinding(p);if(b){if(b.identifier===g)continue;this.checkBlockScopedCollisions(b,e,p,g)}b&&b.path.isFlow()&&(b=null),l.references[p]=!0,this.bindings[p]=new T.default({identifier:g,existing:b,scope:this,path:r,kind:e})}}},e.prototype.addGlobal=function(e){this.globals[e.name]=e},e.prototype.hasUid=function(e){var t=this;do{if(t.uids[e])return!0}while(t=t.parent);return!1},e.prototype.hasGlobal=function(e){var t=this;do{if(t.globals[e])return!0}while(t=t.parent);return!1},e.prototype.hasReference=function(e){var t=this;do{if(t.references[e])return!0}while(t=t.parent);return!1},e.prototype.isPure=function(e,t){if(j.isIdentifier(e)){var r=this.getBinding(e.name);return!!r&&(!t||r.constant)}if(j.isClass(e))return!(e.superClass&&!this.isPure(e.superClass,t))&&this.isPure(e.body,t);if(j.isClassBody(e)){for(var n=e.body,i=Array.isArray(n),s=0,n=i?n:(0,y.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if(!this.isPure(o,t))return!1}return!0}if(j.isBinary(e))return this.isPure(e.left,t)&&this.isPure(e.right,t);if(j.isArrayExpression(e)){for(var u=e.elements,l=Array.isArray(u),c=0,u=l?u:(0,y.default)(u);;){var p;if(l){if(c>=u.length)break;p=u[c++]}else{if(c=u.next(),c.done)break;p=c.value}var h=p;if(!this.isPure(h,t))return!1}return!0}if(j.isObjectExpression(e)){for(var f=e.properties,d=Array.isArray(f),m=0,f=d?f:(0,y.default)(f);;){var g;if(d){if(m>=f.length)break;g=f[m++]}else{if(m=f.next(),m.done)break;g=m.value}var b=g;if(!this.isPure(b,t))return!1}return!0}return j.isClassMethod(e)?!(e.computed&&!this.isPure(e.key,t))&&("get"!==e.kind&&"set"!==e.kind):j.isClassProperty(e)||j.isObjectProperty(e)?!(e.computed&&!this.isPure(e.key,t))&&this.isPure(e.value,t):j.isUnaryExpression(e)?this.isPure(e.argument,t):j.isPureish(e)},e.prototype.setData=function(e,t){return this.data[e]=t},e.prototype.getData=function(e){var t=this;do{var r=t.data[e];if(null!=r)return r}while(t=t.parent)},e.prototype.removeData=function(e){var t=this;do{null!=t.data[e]&&(t.data[e]=null)}while(t=t.parent)},e.prototype.init=function(){this.references||this.crawl()},e.prototype.crawl=function(){I++,this._crawl(),I--},e.prototype._crawl=function(){var e=this.path;if(this.references=(0,c.default)(null),this.bindings=(0,c.default)(null),this.globals=(0,c.default)(null),this.uids=(0,c.default)(null),this.data=(0,c.default)(null),e.isLoop())for(var t=j.FOR_INIT_KEYS,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,a=e.get(s);a.isBlockScoped()&&this.registerBinding(a.node.kind,a)}if(e.isFunctionExpression()&&e.has("id")&&(e.get("id").node[j.NOT_LOCAL_BINDING]||this.registerBinding("local",e.get("id"),e)),e.isClassExpression()&&e.has("id")&&(e.get("id").node[j.NOT_LOCAL_BINDING]||this.registerBinding("local",e)),e.isFunction())for(var o=e.get("params"),u=o,l=Array.isArray(u),p=0,u=l?u:(0,y.default)(u);;){var h;if(l){if(p>=u.length)break;h=u[p++]}else{if(p=u.next(),p.done)break;h=p.value}var f=h;this.registerBinding("param",f)}if(e.isCatchClause()&&this.registerBinding("let",e),!this.getProgramParent().crawling){var d={references:[],constantViolations:[],assignments:[]};this.crawling=!0,e.traverse(L,d),this.crawling=!1;for(var m=d.assignments,g=Array.isArray(m),b=0,m=g?m:(0,y.default)(m);;){var v;if(g){if(b>=m.length)break;v=m[b++]}else{if(b=m.next(),b.done)break;v=b.value}var x=v,E=x.getBindingIdentifiers(),A=void 0;for(var D in E)x.scope.getBinding(D)||(A=A||x.scope.getProgramParent(),A.addGlobal(E[D]));x.scope.registerConstantViolation(x)}for(var C=d.references,S=Array.isArray(C),_=0,C=S?C:(0,y.default)(C);;){var w;if(S){if(_>=C.length)break;w=C[_++]}else{if(_=C.next(),_.done)break;w=_.value}var k=w,F=k.scope.getBinding(k.node.name);F?F.reference(k):k.scope.getProgramParent().addGlobal(k.node)}for(var T=d.constantViolations,P=Array.isArray(T),B=0,T=P?T:(0,y.default)(T);;){var O;if(P){if(B>=T.length)break;O=T[B++]}else{if(B=T.next(),B.done)break;O=B.value}var N=O;N.scope.registerConstantViolation(N)}}},e.prototype.push=function(e){var t=this.path;t.isBlockStatement()||t.isProgram()||(t=this.getBlockParent().path),t.isSwitchStatement()&&(t=this.getFunctionParent().path),(t.isLoop()||t.isCatchClause()||t.isFunction())&&(j.ensureBlock(t.node),t=t.get("body"));var r=e.unique,n=e.kind||"var",i=null==e._blockHoist?2:e._blockHoist,s="declaration:"+n+":"+i,a=!r&&t.getData(s);if(!a){var o=j.variableDeclaration(n,[]);o._generated=!0,o._blockHoist=i;a=t.unshiftContainer("body",[o])[0],r||t.setData(s,a)}var u=j.variableDeclarator(e.id,e.init);a.node.declarations.push(u),this.registerBinding(n,a.get("declarations").pop())},e.prototype.getProgramParent=function(){var e=this;do{if(e.path.isProgram())return e}while(e=e.parent);throw new Error("We couldn't find a Function or Program...")},e.prototype.getFunctionParent=function(){var e=this;do{if(e.path.isFunctionParent())return e}while(e=e.parent);throw new Error("We couldn't find a Function or Program...")},e.prototype.getBlockParent=function(){var e=this;do{if(e.path.isBlockParent())return e}while(e=e.parent);throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...")},e.prototype.getAllBindings=function(){var e=(0,c.default)(null),t=this;do{(0,_.default)(e,t.bindings),t=t.parent}while(t);return e},e.prototype.getAllBindingsOfKind=function(){for(var e=(0,c.default)(null),t=arguments,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,a=this;do{for(var o in a.bindings){var u=a.bindings[o];u.kind===s&&(e[o]=u)}a=a.parent}while(a)}return e},e.prototype.bindingIdentifierEquals=function(e,t){return this.getBindingIdentifier(e)===t},e.prototype.warnOnFlowBinding=function(e){return 0===I&&e&&e.path.isFlow()&&console.warn("\n You or one of the Babel plugins you are using are using Flow declarations as bindings.\n Support for this will be removed in version 6.8. To find out the caller, grep for this\n message and change it to a `console.trace()`.\n "),e},e.prototype.getBinding=function(e){var t=this;do{var r=t.getOwnBinding(e);if(r)return this.warnOnFlowBinding(r)}while(t=t.parent)},e.prototype.getOwnBinding=function(e){return this.warnOnFlowBinding(this.bindings[e])},e.prototype.getBindingIdentifier=function(e){var t=this.getBinding(e);return t&&t.identifier},e.prototype.getOwnBindingIdentifier=function(e){var t=this.bindings[e];return t&&t.identifier},e.prototype.hasOwnBinding=function(e){return!!this.getOwnBinding(e)},e.prototype.hasBinding=function(t,r){return!!t&&(!!this.hasOwnBinding(t)||(!!this.parentHasBinding(t,r)||(!!this.hasUid(t)||(!(r||!(0,b.default)(e.globals,t))||!(r||!(0,b.default)(e.contextVariables,t))))))},e.prototype.parentHasBinding=function(e,t){return this.parent&&this.parent.hasBinding(e,t)},e.prototype.moveBindingTo=function(e,t){var r=this.getBinding(e);r&&(r.scope.removeOwnBinding(e),r.scope=t,t.bindings[e]=r)},e.prototype.removeOwnBinding=function(e){delete this.bindings[e]},e.prototype.removeBinding=function(e){var t=this.getBinding(e);t&&t.scope.removeOwnBinding(e);var r=this;do{r.uids[e]&&(r.uids[e]=!1)}while(r=r.parent)},e}();R.globals=(0,u.default)(B.default.builtin),R.contextVariables=["arguments","undefined","Infinity","NaN"],r.default=R,t.exports=r.default},{"../cache":133,"../index":136,"./binding":154,"./lib/renamer":156,"babel-messages":103,"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/map":115,"babel-runtime/core-js/object/create":118,"babel-runtime/core-js/object/keys":120,"babel-runtime/helpers/classCallCheck":127,"babel-types":169,globals:303,"lodash/defaults":484,"lodash/includes":496,"lodash/repeat":519}],156:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.__esModule=!0;var i=e("babel-runtime/helpers/classCallCheck"),s=n(i),a=e("../binding"),o=(n(a),e("babel-types")),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o),l={ReferencedIdentifier:function(e,t){var r=e.node;r.name===t.oldName&&(r.name=t.newName)},Scope:function(e,t){e.scope.bindingIdentifierEquals(t.oldName,t.binding.identifier)||e.skip()},"AssignmentExpression|Declaration":function(e,t){var r=e.getOuterBindingIdentifiers();for(var n in r)n===t.oldName&&(r[n].name=t.newName)}},c=function(){function e(t,r,n){(0,s.default)(this,e),this.newName=n,this.oldName=r,this.binding=t}return e.prototype.maybeConvertFromExportDeclaration=function(e){var t=e.parentPath.isExportDeclaration()&&e.parentPath;if(t){var r=t.isExportDefaultDeclaration();r&&(e.isFunctionDeclaration()||e.isClassDeclaration())&&!e.node.id&&(e.node.id=e.scope.generateUidIdentifier("default"));var n=e.getOuterBindingIdentifiers(),i=[];for(var s in n){var a=s===this.oldName?this.newName:s,o=r?"default":s;i.push(u.exportSpecifier(u.identifier(a),u.identifier(o)))}if(i.length){var l=u.exportNamedDeclaration(null,i);e.isFunctionDeclaration()&&(l._blockHoist=3),t.insertAfter(l),t.replaceWith(e.node)}}},e.prototype.maybeConvertFromClassFunctionDeclaration=function(e){},e.prototype.maybeConvertFromClassFunctionExpression=function(e){},e.prototype.rename=function(e){var t=this.binding,r=this.oldName,n=this.newName,i=t.scope,s=t.path,a=s.find(function(e){return e.isDeclaration()||e.isFunctionExpression()});a&&this.maybeConvertFromExportDeclaration(a),i.traverse(e||i.block,l,this),e||(i.removeOwnBinding(r),i.bindings[n]=t,this.binding.identifier.name=n),t.type,a&&(this.maybeConvertFromClassFunctionDeclaration(a),this.maybeConvertFromClassFunctionExpression(a))},e}();r.default=c,t.exports=r.default},{"../binding":154,"babel-runtime/helpers/classCallCheck":127,"babel-types":169}],157:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){if(e._exploded)return e;e._exploded=!0;for(var t in e)if(!f(t)){var r=t.split("|");if(1!==r.length){var n=e[t];delete e[t];for(var i=r,s=Array.isArray(i),o=0,i=s?i:(0,x.default)(i);;){var u;if(s){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u;e[l]=n}}}a(e),delete e.__esModule,c(e),p(e);for(var m=(0,b.default)(e),y=Array.isArray(m),g=0,m=y?m:(0,x.default)(m);;){var v;if(y){if(g>=m.length)break;v=m[g++]}else{if(g=m.next(),g.done)break;v=g.value}var E=v;if(!f(E)){var D=A[E];if(D){var C=e[E];for(var S in C)C[S]=h(D,C[S]);if(delete e[E],D.types)for(var w=D.types,F=Array.isArray(w),T=0,w=F?w:(0,x.default)(w);;){var P;if(F){if(T>=w.length)break;P=w[T++]}else{if(T=w.next(),T.done)break;P=T.value}var B=P;e[B]?d(e[B],C):e[B]=C}else d(e,C)}}}for(var O in e)if(!f(O)){var j=e[O],N=_.FLIPPED_ALIAS_KEYS[O],I=_.DEPRECATED_KEYS[O];if(I&&(console.trace("Visitor defined for "+O+" but it has been renamed to "+I),N=[I]),N){delete e[O];for(var L=N,M=Array.isArray(L),R=0,L=M?L:(0,x.default)(L);;){var U;if(M){if(R>=L.length)break;U=L[R++]}else{if(R=L.next(),R.done)break;U=R.value}var V=U,q=e[V];q?d(q,j):e[V]=(0,k.default)(j)}}}for(var G in e)f(G)||p(e[G]);return e}function a(e){if(!e._verified){if("function"==typeof e)throw new Error(C.get("traverseVerifyRootFunction"));for(var t in e)if("enter"!==t&&"exit"!==t||o(t,e[t]),!f(t)){if(_.TYPES.indexOf(t)<0)throw new Error(C.get("traverseVerifyNodeType",t));var r=e[t];if("object"===(void 0===r?"undefined":(0,y.default)(r)))for(var n in r){if("enter"!==n&&"exit"!==n)throw new Error(C.get("traverseVerifyVisitorProperty",t,n));o(t+"."+n,r[n])}}e._verified=!0}}function o(e,t){for(var r=[].concat(t),n=r,i=Array.isArray(n),s=0,n=i?n:(0,x.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if("function"!=typeof o)throw new TypeError("Non-function found defined in "+e+" with type "+(void 0===o?"undefined":(0,y.default)(o)))}}function u(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2],n={},i=0;i","<",">=","<="]),a=r.EQUALITY_BINARY_OPERATORS=["==","===","!=","!=="],o=r.COMPARISON_BINARY_OPERATORS=[].concat(a,["in","instanceof"]),u=r.BOOLEAN_BINARY_OPERATORS=[].concat(o,s),l=r.NUMBER_BINARY_OPERATORS=["-","/","%","*","**","&","|",">>",">>>","<<","^"],c=(r.BINARY_OPERATORS=["+"].concat(l,u),r.BOOLEAN_UNARY_OPERATORS=["delete","!"]),p=r.NUMBER_UNARY_OPERATORS=["+","-","++","--","~"],h=r.STRING_UNARY_OPERATORS=["typeof"];r.UNARY_OPERATORS=["void"].concat(c,p,h),r.INHERIT_KEYS={optional:["typeAnnotation","typeParameters","returnType"],force:["start","loc","end"]},r.BLOCK_SCOPED_SYMBOL=(0,i.default)("var used to be block scoped"),r.NOT_LOCAL_BINDING=(0,i.default)("should not be considered a local binding")},{"babel-runtime/core-js/symbol/for":123}],159:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.key||e.property;return e.computed||C.isIdentifier(t)&&(t=C.stringLiteral(t.name)),t}function s(e,t){function r(e){for(var s=!1,a=[],o=e,u=Array.isArray(o),l=0,o=u?o:(0,b.default)(o);;){var c;if(u){if(l>=o.length)break;c=o[l++]}else{if(l=o.next(),l.done)break;c=l.value}var p=c;if(C.isExpression(p))a.push(p);else if(C.isExpressionStatement(p))a.push(p.expression);else{if(C.isVariableDeclaration(p)){if("var"!==p.kind)return i=!0;for(var h=p.declarations,f=Array.isArray(h),d=0,h=f?h:(0,b.default)(h);;){var m;if(f){if(d>=h.length)break;m=h[d++]}else{if(d=h.next(),d.done)break;m=d.value}var y=m,g=C.getBindingIdentifiers(y);for(var v in g)n.push({kind:p.kind,id:g[v]});y.init&&a.push(C.assignmentExpression("=",y.id,y.init))}s=!0;continue}if(C.isIfStatement(p)){var x=p.consequent?r([p.consequent]):t.buildUndefinedNode(),E=p.alternate?r([p.alternate]):t.buildUndefinedNode();if(!x||!E)return i=!0;a.push(C.conditionalExpression(p.test,x,E))}else{if(!C.isBlockStatement(p)){if(C.isEmptyStatement(p)){s=!0;continue}return i=!0}a.push(r(p.body))}}s=!1}return(s||0===a.length)&&a.push(t.buildUndefinedNode()),1===a.length?a[0]:C.sequenceExpression(a)}if(e&&e.length){var n=[],i=!1,s=r(e);if(!i){for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:e.key,r=void 0;return"method"===e.kind?a.increment()+"":(r=C.isIdentifier(t)?t.name:C.isStringLiteral(t)?(0,y.default)(t.value):(0,y.default)(C.removePropertiesDeep(C.cloneDeep(t))),e.computed&&(r="["+r+"]"),e.static&&(r="static:"+r),r)}function o(e){return e+="",e=e.replace(/[^a-zA-Z0-9$_]/g,"-"),e=e.replace(/^[-0-9]+/,""),e=e.replace(/[-\s]+(.)?/g,function(e,t){return t?t.toUpperCase():""}),C.isValidIdentifier(e)||(e="_"+e),e||"_"}function u(e){return e=o(e),"eval"!==e&&"arguments"!==e||(e="_"+e),e}function l(e,t){if(C.isStatement(e))return e;var r=!1,n=void 0;if(C.isClass(e))r=!0,n="ClassDeclaration";else if(C.isFunction(e))r=!0,n="FunctionDeclaration";else if(C.isAssignmentExpression(e))return C.expressionStatement(e);if(r&&!e.id&&(n=!1),!n){if(t)return!1;throw new Error("cannot turn "+e.type+" to a statement")}return e.type=n,e}function c(e){if(C.isExpressionStatement(e)&&(e=e.expression),C.isExpression(e))return e;if(C.isClass(e)?e.type="ClassExpression":C.isFunction(e)&&(e.type="FunctionExpression"),!C.isExpression(e))throw new Error("cannot turn "+e.type+" to an expression");return e}function p(e,t){return C.isBlockStatement(e)?e:(C.isEmptyStatement(e)&&(e=[]),Array.isArray(e)||(C.isStatement(e)||(e=C.isFunction(t)?C.returnStatement(e):C.expressionStatement(e)),e=[e]),C.blockStatement(e))}function h(e){if(void 0===e)return C.identifier("undefined");if(!0===e||!1===e)return C.booleanLiteral(e);if(null===e)return C.nullLiteral();if("string"==typeof e)return C.stringLiteral(e);if("number"==typeof e)return C.numericLiteral(e);if((0,A.default)(e)){var t=e.source,r=e.toString().match(/\/([a-z]+|)$/)[1];return C.regExpLiteral(t,r)}if(Array.isArray(e))return C.arrayExpression(e.map(C.valueToNode));if((0,x.default)(e)){var n=[];for(var i in e){var s=void 0;s=C.isValidIdentifier(i)?C.identifier(i):C.stringLiteral(i),n.push(C.objectProperty(s,C.valueToNode(e[i])))}return C.objectExpression(n)}throw new Error("don't know how to turn this value into a node")}r.__esModule=!0;var f=e("babel-runtime/core-js/number/max-safe-integer"),d=n(f),m=e("babel-runtime/core-js/json/stringify"),y=n(m),g=e("babel-runtime/core-js/get-iterator"),b=n(g);r.toComputedKey=i,r.toSequenceExpression=s,r.toKeyAlias=a,r.toIdentifier=o,r.toBindingIdentifierName=u,r.toStatement=l,r.toExpression=c,r.toBlock=p,r.valueToNode=h;var v=e("lodash/isPlainObject"),x=n(v),E=e("lodash/isRegExp"),A=n(E),D=e("./index"),C=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(D);a.uid=0,a.increment=function(){return a.uid>=d.default?a.uid=0:a.uid++}},{"./index":169,"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/json/stringify":114,"babel-runtime/core-js/number/max-safe-integer":116,"lodash/isPlainObject":507,"lodash/isRegExp":508}],160:[function(e,t,r){"use strict";var n=e("../index"),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n),s=e("../constants"),a=e("./index"),o=function(e){return e&&e.__esModule?e:{default:e}}(a);(0,o.default)("ArrayExpression",{fields:{elements:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeOrValueType)("null","Expression","SpreadElement"))),default:[]}},visitor:["elements"],aliases:["Expression"]}),(0,o.default)("AssignmentExpression",{fields:{operator:{validate:(0,a.assertValueType)("string")},left:{validate:(0,a.assertNodeType)("LVal")},right:{validate:(0,a.assertNodeType)("Expression")}},builder:["operator","left","right"],visitor:["left","right"],aliases:["Expression"]}),(0,o.default)("BinaryExpression",{builder:["operator","left","right"],fields:{operator:{validate:a.assertOneOf.apply(void 0,s.BINARY_OPERATORS)},left:{validate:(0,a.assertNodeType)("Expression")},right:{validate:(0,a.assertNodeType)("Expression")}},visitor:["left","right"],aliases:["Binary","Expression"]}),(0,o.default)("Directive",{visitor:["value"],fields:{value:{validate:(0,a.assertNodeType)("DirectiveLiteral")}}}),(0,o.default)("DirectiveLiteral",{builder:["value"],fields:{value:{validate:(0,a.assertValueType)("string")}}}),(0,o.default)("BlockStatement",{builder:["body","directives"],visitor:["directives","body"],fields:{directives:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Directive"))),default:[]},body:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Statement")))}},aliases:["Scopable","BlockParent","Block","Statement"]}),(0,o.default)("BreakStatement",{visitor:["label"],fields:{label:{validate:(0,a.assertNodeType)("Identifier"),optional:!0}},aliases:["Statement","Terminatorless","CompletionStatement"]}),(0,o.default)("CallExpression",{visitor:["callee","arguments"],fields:{callee:{validate:(0,a.assertNodeType)("Expression")},arguments:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Expression","SpreadElement")))}},aliases:["Expression"]}),(0,o.default)("CatchClause",{visitor:["param","body"],fields:{param:{validate:(0,a.assertNodeType)("Identifier")},body:{validate:(0,a.assertNodeType)("BlockStatement")}},aliases:["Scopable"]}),(0,o.default)("ConditionalExpression",{visitor:["test","consequent","alternate"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},consequent:{validate:(0,a.assertNodeType)("Expression")},alternate:{validate:(0,a.assertNodeType)("Expression")}},aliases:["Expression","Conditional"]}),(0,o.default)("ContinueStatement",{visitor:["label"],fields:{label:{validate:(0,a.assertNodeType)("Identifier"),optional:!0}},aliases:["Statement","Terminatorless","CompletionStatement"]}),(0,o.default)("DebuggerStatement",{aliases:["Statement"]}),(0,o.default)("DoWhileStatement",{visitor:["test","body"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("Statement")}},aliases:["Statement","BlockParent","Loop","While","Scopable"]}),(0,o.default)("EmptyStatement",{aliases:["Statement"]}),(0,o.default)("ExpressionStatement",{visitor:["expression"],fields:{expression:{validate:(0,a.assertNodeType)("Expression")}},aliases:["Statement","ExpressionWrapper"]}),(0,o.default)("File",{builder:["program","comments","tokens"],visitor:["program"],fields:{program:{validate:(0,a.assertNodeType)("Program")}}}),(0,o.default)("ForInStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,a.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("ForStatement",{visitor:["init","test","update","body"],aliases:["Scopable","Statement","For","BlockParent","Loop"],fields:{init:{validate:(0,a.assertNodeType)("VariableDeclaration","Expression"),optional:!0},test:{validate:(0,a.assertNodeType)("Expression"),optional:!0},update:{validate:(0,a.assertNodeType)("Expression"),optional:!0},body:{validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("FunctionDeclaration",{builder:["id","params","body","generator","async"],visitor:["id","params","body","returnType","typeParameters"],fields:{id:{validate:(0,a.assertNodeType)("Identifier")},params:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("LVal")))},body:{validate:(0,a.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,a.assertValueType)("boolean")},async:{default:!1,validate:(0,a.assertValueType)("boolean")}},aliases:["Scopable","Function","BlockParent","FunctionParent","Statement","Pureish","Declaration"]}),(0,o.default)("FunctionExpression",{inherits:"FunctionDeclaration",aliases:["Scopable","Function","BlockParent","FunctionParent","Expression","Pureish"],fields:{id:{validate:(0,a.assertNodeType)("Identifier"),optional:!0},params:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("LVal")))},body:{validate:(0,a.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,a.assertValueType)("boolean")},async:{default:!1,validate:(0,a.assertValueType)("boolean")}}}),(0,o.default)("Identifier",{builder:["name"],visitor:["typeAnnotation"],aliases:["Expression","LVal"],fields:{name:{validate:function(e,t,r){i.isValidIdentifier(r)}},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator")))}}}),(0,o.default)("IfStatement",{visitor:["test","consequent","alternate"],aliases:["Statement","Conditional"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},consequent:{validate:(0,a.assertNodeType)("Statement")},alternate:{optional:!0,validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("LabeledStatement",{visitor:["label","body"],aliases:["Statement"],fields:{label:{validate:(0,a.assertNodeType)("Identifier")},body:{validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("StringLiteral",{builder:["value"],fields:{value:{validate:(0,a.assertValueType)("string")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("NumericLiteral",{builder:["value"],deprecatedAlias:"NumberLiteral",fields:{value:{validate:(0,a.assertValueType)("number")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("NullLiteral",{aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("BooleanLiteral",{builder:["value"],fields:{value:{validate:(0,a.assertValueType)("boolean")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("RegExpLiteral",{builder:["pattern","flags"],deprecatedAlias:"RegexLiteral",aliases:["Expression","Literal"],fields:{pattern:{validate:(0,a.assertValueType)("string")},flags:{validate:(0,a.assertValueType)("string"),default:""}}}),(0,o.default)("LogicalExpression",{builder:["operator","left","right"],visitor:["left","right"],aliases:["Binary","Expression"],fields:{operator:{validate:a.assertOneOf.apply(void 0,s.LOGICAL_OPERATORS)},left:{validate:(0,a.assertNodeType)("Expression")},right:{validate:(0,a.assertNodeType)("Expression")}}}),(0,o.default)("MemberExpression",{builder:["object","property","computed"],visitor:["object","property"],aliases:["Expression","LVal"],fields:{object:{validate:(0,a.assertNodeType)("Expression")},property:{validate:function(e,t,r){var n=e.computed?"Expression":"Identifier";(0,a.assertNodeType)(n)(e,t,r)}},computed:{default:!1}}}),(0,o.default)("NewExpression",{visitor:["callee","arguments"],aliases:["Expression"],fields:{callee:{validate:(0,a.assertNodeType)("Expression")},arguments:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Expression","SpreadElement")))}}}),(0,o.default)("Program",{visitor:["directives","body"],builder:["body","directives"],fields:{directives:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Directive"))),default:[]},body:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Statement")))}},aliases:["Scopable","BlockParent","Block","FunctionParent"]}),(0,o.default)("ObjectExpression",{visitor:["properties"],aliases:["Expression"],fields:{properties:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("ObjectMethod","ObjectProperty","SpreadProperty")))}}}),(0,o.default)("ObjectMethod",{builder:["kind","key","params","body","computed"],fields:{kind:{validate:(0,a.chain)((0,a.assertValueType)("string"),(0,a.assertOneOf)("method","get","set")),default:"method"},computed:{validate:(0,a.assertValueType)("boolean"),default:!1},key:{validate:function(e,t,r){var n=e.computed?["Expression"]:["Identifier","StringLiteral","NumericLiteral"];a.assertNodeType.apply(void 0,n)(e,t,r)}},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator")))},body:{validate:(0,a.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,a.assertValueType)("boolean")},async:{default:!1,validate:(0,a.assertValueType)("boolean")}},visitor:["key","params","body","decorators","returnType","typeParameters"],aliases:["UserWhitespacable","Function","Scopable","BlockParent","FunctionParent","Method","ObjectMember"]}),(0,o.default)("ObjectProperty",{builder:["key","value","computed","shorthand","decorators"],fields:{computed:{validate:(0,a.assertValueType)("boolean"),default:!1},key:{validate:function(e,t,r){var n=e.computed?["Expression"]:["Identifier","StringLiteral","NumericLiteral"];a.assertNodeType.apply(void 0,n)(e,t,r)}},value:{validate:(0,a.assertNodeType)("Expression")},shorthand:{validate:(0,a.assertValueType)("boolean"),default:!1},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator"))),optional:!0}},visitor:["key","value","decorators"],aliases:["UserWhitespacable","Property","ObjectMember"]}),(0,o.default)("RestElement",{visitor:["argument","typeAnnotation"],aliases:["LVal"],fields:{argument:{validate:(0,a.assertNodeType)("LVal")},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator")))}}}),(0,o.default)("ReturnStatement",{visitor:["argument"],aliases:["Statement","Terminatorless","CompletionStatement"],fields:{argument:{validate:(0,a.assertNodeType)("Expression"),optional:!0}}}),(0,o.default)("SequenceExpression",{visitor:["expressions"],fields:{expressions:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Expression")))}},aliases:["Expression"]}),(0,o.default)("SwitchCase",{visitor:["test","consequent"],fields:{test:{validate:(0,a.assertNodeType)("Expression"),optional:!0},consequent:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Statement")))}}}),(0,o.default)("SwitchStatement",{visitor:["discriminant","cases"],aliases:["Statement","BlockParent","Scopable"],fields:{discriminant:{validate:(0,a.assertNodeType)("Expression")},cases:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("SwitchCase")))}}}),(0,o.default)("ThisExpression",{aliases:["Expression"]}),(0,o.default)("ThrowStatement",{visitor:["argument"],aliases:["Statement","Terminatorless","CompletionStatement"],fields:{argument:{validate:(0,a.assertNodeType)("Expression")}}}),(0,o.default)("TryStatement",{visitor:["block","handler","finalizer"],aliases:["Statement"],fields:{body:{validate:(0,a.assertNodeType)("BlockStatement")},handler:{optional:!0, +handler:(0,a.assertNodeType)("BlockStatement")},finalizer:{optional:!0,validate:(0,a.assertNodeType)("BlockStatement")}}}),(0,o.default)("UnaryExpression",{builder:["operator","argument","prefix"],fields:{prefix:{default:!0},argument:{validate:(0,a.assertNodeType)("Expression")},operator:{validate:a.assertOneOf.apply(void 0,s.UNARY_OPERATORS)}},visitor:["argument"],aliases:["UnaryLike","Expression"]}),(0,o.default)("UpdateExpression",{builder:["operator","argument","prefix"],fields:{prefix:{default:!1},argument:{validate:(0,a.assertNodeType)("Expression")},operator:{validate:a.assertOneOf.apply(void 0,s.UPDATE_OPERATORS)}},visitor:["argument"],aliases:["Expression"]}),(0,o.default)("VariableDeclaration",{builder:["kind","declarations"],visitor:["declarations"],aliases:["Statement","Declaration"],fields:{kind:{validate:(0,a.chain)((0,a.assertValueType)("string"),(0,a.assertOneOf)("var","let","const"))},declarations:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("VariableDeclarator")))}}}),(0,o.default)("VariableDeclarator",{visitor:["id","init"],fields:{id:{validate:(0,a.assertNodeType)("LVal")},init:{optional:!0,validate:(0,a.assertNodeType)("Expression")}}}),(0,o.default)("WhileStatement",{visitor:["test","body"],aliases:["Statement","BlockParent","Loop","While","Scopable"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("BlockStatement","Statement")}}}),(0,o.default)("WithStatement",{visitor:["object","body"],aliases:["Statement"],fields:{object:{object:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("BlockStatement","Statement")}}})},{"../constants":158,"../index":169,"./index":164}],161:[function(e,t,r){"use strict";var n=e("./index"),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("AssignmentPattern",{visitor:["left","right"],aliases:["Pattern","LVal"],fields:{left:{validate:(0,n.assertNodeType)("Identifier")},right:{validate:(0,n.assertNodeType)("Expression")},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ArrayPattern",{visitor:["elements","typeAnnotation"],aliases:["Pattern","LVal"],fields:{elements:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Expression")))},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ArrowFunctionExpression",{builder:["params","body","async"],visitor:["params","body","returnType","typeParameters"],aliases:["Scopable","Function","BlockParent","FunctionParent","Expression","Pureish"],fields:{params:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("LVal")))},body:{validate:(0,n.assertNodeType)("BlockStatement","Expression")},async:{validate:(0,n.assertValueType)("boolean"),default:!1}}}),(0,i.default)("ClassBody",{visitor:["body"],fields:{body:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("ClassMethod","ClassProperty")))}}}),(0,i.default)("ClassDeclaration",{builder:["id","superClass","body","decorators"],visitor:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators"],aliases:["Scopable","Class","Statement","Declaration","Pureish"],fields:{id:{validate:(0,n.assertNodeType)("Identifier")},body:{validate:(0,n.assertNodeType)("ClassBody")},superClass:{optional:!0,validate:(0,n.assertNodeType)("Expression")},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ClassExpression",{inherits:"ClassDeclaration",aliases:["Scopable","Class","Expression","Pureish"],fields:{id:{optional:!0,validate:(0,n.assertNodeType)("Identifier")},body:{validate:(0,n.assertNodeType)("ClassBody")},superClass:{optional:!0,validate:(0,n.assertNodeType)("Expression")},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ExportAllDeclaration",{visitor:["source"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{source:{validate:(0,n.assertNodeType)("StringLiteral")}}}),(0,i.default)("ExportDefaultDeclaration",{visitor:["declaration"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{declaration:{validate:(0,n.assertNodeType)("FunctionDeclaration","ClassDeclaration","Expression")}}}),(0,i.default)("ExportNamedDeclaration",{visitor:["declaration","specifiers","source"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{declaration:{validate:(0,n.assertNodeType)("Declaration"),optional:!0},specifiers:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("ExportSpecifier")))},source:{validate:(0,n.assertNodeType)("StringLiteral"),optional:!0}}}),(0,i.default)("ExportSpecifier",{visitor:["local","exported"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")},exported:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ForOfStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,n.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,n.assertNodeType)("Expression")},body:{validate:(0,n.assertNodeType)("Statement")}}}),(0,i.default)("ImportDeclaration",{visitor:["specifiers","source"],aliases:["Statement","Declaration","ModuleDeclaration"],fields:{specifiers:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier")))},source:{validate:(0,n.assertNodeType)("StringLiteral")}}}),(0,i.default)("ImportDefaultSpecifier",{visitor:["local"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ImportNamespaceSpecifier",{visitor:["local"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ImportSpecifier",{visitor:["local","imported"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")},imported:{validate:(0,n.assertNodeType)("Identifier")},importKind:{validate:(0,n.assertOneOf)(null,"type","typeof")}}}),(0,i.default)("MetaProperty",{visitor:["meta","property"],aliases:["Expression"],fields:{meta:{validate:(0,n.assertValueType)("string")},property:{validate:(0,n.assertValueType)("string")}}}),(0,i.default)("ClassMethod",{aliases:["Function","Scopable","BlockParent","FunctionParent","Method"],builder:["kind","key","params","body","computed","static"],visitor:["key","params","body","decorators","returnType","typeParameters"],fields:{kind:{validate:(0,n.chain)((0,n.assertValueType)("string"),(0,n.assertOneOf)("get","set","method","constructor")),default:"method"},computed:{default:!1,validate:(0,n.assertValueType)("boolean")},static:{default:!1,validate:(0,n.assertValueType)("boolean")},key:{validate:function(e,t,r){var i=e.computed?["Expression"]:["Identifier","StringLiteral","NumericLiteral"];n.assertNodeType.apply(void 0,i)(e,t,r)}},params:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("LVal")))},body:{validate:(0,n.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,n.assertValueType)("boolean")},async:{default:!1,validate:(0,n.assertValueType)("boolean")}}}),(0,i.default)("ObjectPattern",{visitor:["properties","typeAnnotation"],aliases:["Pattern","LVal"],fields:{properties:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("RestProperty","Property")))},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("SpreadElement",{visitor:["argument"],aliases:["UnaryLike"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("Super",{aliases:["Expression"]}),(0,i.default)("TaggedTemplateExpression",{visitor:["tag","quasi"],aliases:["Expression"],fields:{tag:{validate:(0,n.assertNodeType)("Expression")},quasi:{validate:(0,n.assertNodeType)("TemplateLiteral")}}}),(0,i.default)("TemplateElement",{builder:["value","tail"],fields:{value:{},tail:{validate:(0,n.assertValueType)("boolean"),default:!1}}}),(0,i.default)("TemplateLiteral",{visitor:["quasis","expressions"],aliases:["Expression","Literal"],fields:{quasis:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("TemplateElement")))},expressions:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Expression")))}}}),(0,i.default)("YieldExpression",{builder:["argument","delegate"],visitor:["argument"],aliases:["Expression","Terminatorless"],fields:{delegate:{validate:(0,n.assertValueType)("boolean"),default:!1},argument:{optional:!0,validate:(0,n.assertNodeType)("Expression")}}})},{"./index":164}],162:[function(e,t,r){"use strict";var n=e("./index"),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("AwaitExpression",{builder:["argument"],visitor:["argument"],aliases:["Expression","Terminatorless"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("ForAwaitStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,n.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,n.assertNodeType)("Expression")},body:{validate:(0,n.assertNodeType)("Statement")}}}),(0,i.default)("BindExpression",{visitor:["object","callee"],aliases:["Expression"],fields:{}}),(0,i.default)("Import",{aliases:["Expression"]}),(0,i.default)("Decorator",{visitor:["expression"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("DoExpression",{visitor:["body"],aliases:["Expression"],fields:{body:{validate:(0,n.assertNodeType)("BlockStatement")}}}),(0,i.default)("ExportDefaultSpecifier",{visitor:["exported"],aliases:["ModuleSpecifier"],fields:{exported:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ExportNamespaceSpecifier",{visitor:["exported"],aliases:["ModuleSpecifier"],fields:{exported:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("RestProperty",{visitor:["argument"],aliases:["UnaryLike"],fields:{argument:{validate:(0,n.assertNodeType)("LVal")}}}),(0,i.default)("SpreadProperty",{visitor:["argument"],aliases:["UnaryLike"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}})},{"./index":164}],163:[function(e,t,r){"use strict";var n=e("./index"),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("AnyTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("ArrayTypeAnnotation",{visitor:["elementType"],aliases:["Flow"],fields:{}}),(0,i.default)("BooleanTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("BooleanLiteralTypeAnnotation",{aliases:["Flow"],fields:{}}),(0,i.default)("NullLiteralTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("ClassImplements",{visitor:["id","typeParameters"],aliases:["Flow"],fields:{}}),(0,i.default)("ClassProperty",{visitor:["key","value","typeAnnotation","decorators"],builder:["key","value","typeAnnotation","decorators","computed"],aliases:["Property"],fields:{computed:{validate:(0,n.assertValueType)("boolean"),default:!1}}}),(0,i.default)("DeclareClass",{visitor:["id","typeParameters","extends","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareFunction",{visitor:["id"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareInterface",{visitor:["id","typeParameters","extends","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareModule",{visitor:["id","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareModuleExports",{visitor:["typeAnnotation"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareTypeAlias",{visitor:["id","typeParameters","right"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareVariable",{visitor:["id"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("ExistentialTypeParam",{aliases:["Flow"]}),(0,i.default)("FunctionTypeAnnotation",{visitor:["typeParameters","params","rest","returnType"],aliases:["Flow"],fields:{}}),(0,i.default)("FunctionTypeParam",{visitor:["name","typeAnnotation"],aliases:["Flow"],fields:{}}),(0,i.default)("GenericTypeAnnotation",{visitor:["id","typeParameters"],aliases:["Flow"],fields:{}}),(0,i.default)("InterfaceExtends",{visitor:["id","typeParameters"],aliases:["Flow"],fields:{}}),(0,i.default)("InterfaceDeclaration",{visitor:["id","typeParameters","extends","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("IntersectionTypeAnnotation",{visitor:["types"],aliases:["Flow"],fields:{}}),(0,i.default)("MixedTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"]}),(0,i.default)("EmptyTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"]}),(0,i.default)("NullableTypeAnnotation",{visitor:["typeAnnotation"],aliases:["Flow"],fields:{}}),(0,i.default)("NumericLiteralTypeAnnotation",{aliases:["Flow"],fields:{}}),(0,i.default)("NumberTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("StringLiteralTypeAnnotation",{aliases:["Flow"],fields:{}}),(0,i.default)("StringTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("ThisTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("TupleTypeAnnotation",{visitor:["types"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeofTypeAnnotation",{visitor:["argument"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeAlias",{visitor:["id","typeParameters","right"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("TypeAnnotation",{visitor:["typeAnnotation"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeCastExpression",{visitor:["expression","typeAnnotation"],aliases:["Flow","ExpressionWrapper","Expression"],fields:{}}),(0,i.default)("TypeParameter",{visitor:["bound"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeParameterDeclaration",{visitor:["params"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeParameterInstantiation",{visitor:["params"],aliases:["Flow"],fields:{}}),(0,i.default)("ObjectTypeAnnotation",{visitor:["properties","indexers","callProperties"],aliases:["Flow"],fields:{}}),(0,i.default)("ObjectTypeCallProperty",{visitor:["value"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("ObjectTypeIndexer",{visitor:["id","key","value"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("ObjectTypeProperty",{visitor:["key","value"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("QualifiedTypeIdentifier",{visitor:["id","qualification"],aliases:["Flow"],fields:{}}),(0,i.default)("UnionTypeAnnotation",{visitor:["types"],aliases:["Flow"],fields:{}}),(0,i.default)("VoidTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}})},{"./index":164}],164:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return Array.isArray(e)?"array":null===e?"null":void 0===e?"undefined":void 0===e?"undefined":(0,g.default)(e)}function s(e){function t(t,r,n){if(Array.isArray(n))for(var i=0;i=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;if(v.is(l,n)){i=!0;break}}if(!i)throw new TypeError("Property "+t+" of "+e.type+" expected node to be of a type "+(0,m.default)(r)+" but instead got "+(0,m.default)(n&&n.type))}for(var t=arguments.length,r=Array(t),n=0;n=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;if(i(n)===c||v.is(c,n)){s=!0;break}}if(!s)throw new TypeError("Property "+t+" of "+e.type+" expected node to be of a type "+(0,m.default)(r)+" but instead got "+(0,m.default)(n&&n.type))}for(var t=arguments.length,r=Array(t),n=0;n=e.length)break;i=e[n++]}else{if(n=e.next(),n.done)break;i=n.value}i.apply(void 0,arguments)}}for(var t=arguments.length,r=Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:{},r=t.inherits&&S[t.inherits]||{};t.fields=t.fields||r.fields||{},t.visitor=t.visitor||r.visitor||[],t.aliases=t.aliases||r.aliases||[],t.builder=t.builder||r.builder||t.visitor||[],t.deprecatedAlias&&(C[t.deprecatedAlias]=e);for(var n=t.visitor.concat(t.builder),s=Array.isArray(n),a=0,n=s?n:(0,f.default)(n);;){var o;if(s){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}var u=o;t.fields[u]=t.fields[u]||{}}for(var c in t.fields){var p=t.fields[c];-1===t.builder.indexOf(c)&&(p.optional=!0),void 0===p.default?p.default=null:p.validate||(p.validate=l(i(p.default)))}x[e]=t.visitor,D[e]=t.builder,A[e]=t.fields,E[e]=t.aliases,S[e]=t}r.__esModule=!0,r.DEPRECATED_KEYS=r.BUILDER_KEYS=r.NODE_FIELDS=r.ALIAS_KEYS=r.VISITOR_KEYS=void 0;var h=e("babel-runtime/core-js/get-iterator"),f=n(h),d=e("babel-runtime/core-js/json/stringify"),m=n(d),y=e("babel-runtime/helpers/typeof"),g=n(y);r.assertEach=s,r.assertOneOf=a,r.assertNodeType=o,r.assertNodeOrValueType=u,r.assertValueType=l,r.chain=c,r.default=p;var b=e("../index"),v=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(b),x=r.VISITOR_KEYS={},E=r.ALIAS_KEYS={},A=r.NODE_FIELDS={},D=r.BUILDER_KEYS={},C=r.DEPRECATED_KEYS={},S={}},{"../index":169,"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/json/stringify":114,"babel-runtime/helpers/typeof":131}],165:[function(e,t,r){"use strict";e("./index"),e("./core"),e("./es2015"),e("./flow"),e("./jsx"),e("./misc"),e("./experimental")},{"./core":160,"./es2015":161,"./experimental":162,"./flow":163,"./index":164,"./jsx":166,"./misc":167}],166:[function(e,t,r){"use strict";var n=e("./index"),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("JSXAttribute",{visitor:["name","value"],aliases:["JSX","Immutable"],fields:{name:{validate:(0,n.assertNodeType)("JSXIdentifier","JSXNamespacedName")},value:{optional:!0,validate:(0,n.assertNodeType)("JSXElement","StringLiteral","JSXExpressionContainer")}}}),(0,i.default)("JSXClosingElement",{visitor:["name"],aliases:["JSX","Immutable"],fields:{name:{validate:(0,n.assertNodeType)("JSXIdentifier","JSXMemberExpression")}}}),(0,i.default)("JSXElement",{builder:["openingElement","closingElement","children","selfClosing"],visitor:["openingElement","children","closingElement"],aliases:["JSX","Immutable","Expression"],fields:{openingElement:{validate:(0,n.assertNodeType)("JSXOpeningElement")},closingElement:{optional:!0,validate:(0,n.assertNodeType)("JSXClosingElement")},children:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("JSXText","JSXExpressionContainer","JSXSpreadChild","JSXElement")))}}}),(0,i.default)("JSXEmptyExpression",{aliases:["JSX","Expression"]}),(0,i.default)("JSXExpressionContainer",{visitor:["expression"],aliases:["JSX","Immutable"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("JSXSpreadChild",{visitor:["expression"],aliases:["JSX","Immutable"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("JSXIdentifier",{builder:["name"],aliases:["JSX","Expression"],fields:{name:{validate:(0,n.assertValueType)("string")}}}),(0,i.default)("JSXMemberExpression",{visitor:["object","property"],aliases:["JSX","Expression"],fields:{object:{validate:(0,n.assertNodeType)("JSXMemberExpression","JSXIdentifier")},property:{validate:(0,n.assertNodeType)("JSXIdentifier")}}}),(0,i.default)("JSXNamespacedName",{visitor:["namespace","name"],aliases:["JSX"],fields:{namespace:{validate:(0,n.assertNodeType)("JSXIdentifier")},name:{validate:(0,n.assertNodeType)("JSXIdentifier")}}}),(0,i.default)("JSXOpeningElement",{builder:["name","attributes","selfClosing"],visitor:["name","attributes"],aliases:["JSX","Immutable"],fields:{name:{validate:(0,n.assertNodeType)("JSXIdentifier","JSXMemberExpression")},selfClosing:{default:!1,validate:(0,n.assertValueType)("boolean")},attributes:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("JSXAttribute","JSXSpreadAttribute")))}}}),(0,i.default)("JSXSpreadAttribute",{visitor:["argument"],aliases:["JSX"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("JSXText",{aliases:["JSX","Immutable"],builder:["value"],fields:{value:{validate:(0,n.assertValueType)("string")}}})},{"./index":164}],167:[function(e,t,r){"use strict";var n=e("./index"),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("Noop",{visitor:[]}),(0,i.default)("ParenthesizedExpression",{visitor:["expression"],aliases:["Expression","ExpressionWrapper"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}})},{"./index":164}],168:[function(e,t,r){"use strict";function n(e){var t=i(e);return 1===t.length?t[0]:o.unionTypeAnnotation(t)}function i(e){for(var t={},r={},n=[],s=[],a=0;a=0)){if(o.isAnyTypeAnnotation(u))return[u];if(o.isFlowBaseAnnotation(u))r[u.type]=u;else if(o.isUnionTypeAnnotation(u))n.indexOf(u.types)<0&&(e=e.concat(u.types),n.push(u.types));else if(o.isGenericTypeAnnotation(u)){var l=u.id.name;if(t[l]){var c=t[l];c.typeParameters?u.typeParameters&&(c.typeParameters.params=i(c.typeParameters.params.concat(u.typeParameters.params))):c=u.typeParameters}else t[l]=u}else s.push(u)}}for(var p in r)s.push(r[p]);for(var h in t)s.push(t[h]);return s}function s(e){if("string"===e)return o.stringTypeAnnotation();if("number"===e)return o.numberTypeAnnotation();if("undefined"===e)return o.voidTypeAnnotation();if("boolean"===e)return o.booleanTypeAnnotation();if("function"===e)return o.genericTypeAnnotation(o.identifier("Function"));if("object"===e)return o.genericTypeAnnotation(o.identifier("Object"));if("symbol"===e)return o.genericTypeAnnotation(o.identifier("Symbol"));throw new Error("Invalid typeof value")}r.__esModule=!0,r.createUnionTypeAnnotation=n,r.removeTypeDuplicates=i,r.createTypeAnnotationBasedOnTypeof=s;var a=e("./index"),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a)},{"./index":169}],169:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=H["is"+e];t||(t=H["is"+e]=function(t,r){return H.is(e,t,r)}),H["assert"+e]=function(r,n){if(n=n||{},!t(r,n))throw new Error("Expected type "+(0,N.default)(e)+" with option "+(0,N.default)(n))}}function s(e,t,r){return!!t&&(!!a(t.type,e)&&(void 0===r||H.shallowEqual(t,r)))}function a(e,t){if(e===t)return!0;if(H.ALIAS_KEYS[t])return!1;var r=H.FLIPPED_ALIAS_KEYS[t];if(r){if(r[0]===e)return!0;for(var n=r,i=Array.isArray(n),s=0,n=i?n:(0,P.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}if(e===a)return!0}}return!1}function o(e,t,r){if(e){var n=H.NODE_FIELDS[e.type];if(n){var i=n[t];i&&i.validate&&(i.optional&&null==r||i.validate(e,t,r))}}}function u(e,t){for(var r=(0,O.default)(t),n=r,i=Array.isArray(n),s=0,n=i?n:(0,P.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if(e[o]!==t[o])return!1}return!0}function l(e,t,r){return e.object=H.memberExpression(e.object,e.property,e.computed),e.property=t,e.computed=!!r,e}function c(e,t){return e.object=H.memberExpression(t,e.object),e}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"body";return e[t]=H.toBlock(e[t],e)}function h(e){if(!e)return e;var t={};for(var r in e)"_"!==r[0]&&(t[r]=e[r]);return t}function f(e){var t=h(e);return delete t.loc,t}function d(e){if(!e)return e;var t={};for(var r in e)if("_"!==r[0]){var n=e[r];n&&(n.type?n=H.cloneDeep(n):Array.isArray(n)&&(n=n.map(H.cloneDeep))),t[r]=n}return t}function m(e,t){var r=e.split(".");return function(e){if(!H.isMemberExpression(e))return!1;for(var n=[e],i=0;n.length;){var s=n.shift();if(t&&i===r.length)return!0;if(H.isIdentifier(s)){if(r[i]!==s.name)return!1}else{if(!H.isStringLiteral(s)){if(H.isMemberExpression(s)){if(s.computed&&!H.isStringLiteral(s.property))return!1;n.push(s.object),n.push(s.property);continue}return!1}if(r[i]!==s.value)return!1}if(++i>r.length)return!1}return!0}}function y(e){for(var t=H.COMMENT_KEYS,r=Array.isArray(t),n=0,t=r?t:(0,P.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}delete e[i]}return e}function g(e,t){return b(e,t),v(e,t),x(e,t),e}function b(e,t){E("trailingComments",e,t)}function v(e,t){E("leadingComments",e,t)}function x(e,t){E("innerComments",e,t)}function E(e,t,r){t&&r&&(t[e]=(0,W.default)([].concat(t[e],r[e]).filter(Boolean)))}function A(e,t){if(!e||!t)return e;for(var r=H.INHERIT_KEYS.optional,n=Array.isArray(r),i=0,r=n?r:(0,P.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;null==e[a]&&(e[a]=t[a])}for(var o in t)"_"===o[0]&&(e[o]=t[o]);for(var u=H.INHERIT_KEYS.force,l=Array.isArray(u),c=0,u=l?u:(0,P.default)(u);;){var p;if(l){if(c>=u.length)break;p=u[c++]}else{if(c=u.next(),c.done)break;p=c.value}var h=p;e[h]=t[h]}return H.inheritsComments(e,t),e}function D(e){if(!C(e))throw new TypeError("Not a valid node "+(e&&e.type))}function C(e){return!(!e||!K.VISITOR_KEYS[e.type])}function S(e,t,r){if(e){var n=H.VISITOR_KEYS[e.type];if(n){r=r||{},t(e,r);for(var i=n,s=Array.isArray(i),a=0,i=s?i:(0,P.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o,l=e[u];if(Array.isArray(l))for(var c=l,p=Array.isArray(c),h=0,c=p?c:(0,P.default)(c);;){var f;if(p){if(h>=c.length)break;f=c[h++]}else{if(h=c.next(),h.done)break;f=h.value}var d=f;S(d,t,r)}else S(l,t,r)}}}}function _(e,t){t=t||{};for(var r=t.preserveComments?Z:ee,n=r,i=Array.isArray(n),s=0,n=i?n:(0,P.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;null!=e[o]&&(e[o]=void 0)}for(var u in e)"_"===u[0]&&null!=e[u]&&(e[u]=void 0);for(var l=(0,F.default)(e),c=l,p=Array.isArray(c),h=0,c=p?c:(0,P.default)(c);;){var f;if(p){if(h>=c.length)break;f=c[h++]}else{if(h=c.next(),h.done)break;f=h.value}e[f]=null}}function w(e,t){return S(e,_,t),e}r.__esModule=!0,r.createTypeAnnotationBasedOnTypeof=r.removeTypeDuplicates=r.createUnionTypeAnnotation=r.valueToNode=r.toBlock=r.toExpression=r.toStatement=r.toBindingIdentifierName=r.toIdentifier=r.toKeyAlias=r.toSequenceExpression=r.toComputedKey=r.isNodesEquivalent=r.isImmutable=r.isScope=r.isSpecifierDefault=r.isVar=r.isBlockScoped=r.isLet=r.isValidIdentifier=r.isReferenced=r.isBinding=r.getOuterBindingIdentifiers=r.getBindingIdentifiers=r.TYPES=r.react=r.DEPRECATED_KEYS=r.BUILDER_KEYS=r.NODE_FIELDS=r.ALIAS_KEYS=r.VISITOR_KEYS=r.NOT_LOCAL_BINDING=r.BLOCK_SCOPED_SYMBOL=r.INHERIT_KEYS=r.UNARY_OPERATORS=r.STRING_UNARY_OPERATORS=r.NUMBER_UNARY_OPERATORS=r.BOOLEAN_UNARY_OPERATORS=r.BINARY_OPERATORS=r.NUMBER_BINARY_OPERATORS=r.BOOLEAN_BINARY_OPERATORS=r.COMPARISON_BINARY_OPERATORS=r.EQUALITY_BINARY_OPERATORS=r.BOOLEAN_NUMBER_BINARY_OPERATORS=r.UPDATE_OPERATORS=r.LOGICAL_OPERATORS=r.COMMENT_KEYS=r.FOR_INIT_KEYS=r.FLATTENABLE_KEYS=r.STATEMENT_OR_BLOCK_KEYS=void 0;var k=e("babel-runtime/core-js/object/get-own-property-symbols"),F=n(k),T=e("babel-runtime/core-js/get-iterator"),P=n(T),B=e("babel-runtime/core-js/object/keys"),O=n(B),j=e("babel-runtime/core-js/json/stringify"),N=n(j),I=e("./constants");Object.defineProperty(r,"STATEMENT_OR_BLOCK_KEYS",{enumerable:!0,get:function(){return I.STATEMENT_OR_BLOCK_KEYS}}),Object.defineProperty(r,"FLATTENABLE_KEYS",{enumerable:!0,get:function(){return I.FLATTENABLE_KEYS}}),Object.defineProperty(r,"FOR_INIT_KEYS",{enumerable:!0,get:function(){return I.FOR_INIT_KEYS}}),Object.defineProperty(r,"COMMENT_KEYS",{enumerable:!0,get:function(){return I.COMMENT_KEYS}}),Object.defineProperty(r,"LOGICAL_OPERATORS",{enumerable:!0,get:function(){return I.LOGICAL_OPERATORS}}),Object.defineProperty(r,"UPDATE_OPERATORS",{enumerable:!0,get:function(){return I.UPDATE_OPERATORS}}),Object.defineProperty(r,"BOOLEAN_NUMBER_BINARY_OPERATORS",{enumerable:!0,get:function(){return I.BOOLEAN_NUMBER_BINARY_OPERATORS}}),Object.defineProperty(r,"EQUALITY_BINARY_OPERATORS",{enumerable:!0,get:function(){return I.EQUALITY_BINARY_OPERATORS}}),Object.defineProperty(r,"COMPARISON_BINARY_OPERATORS",{enumerable:!0,get:function(){return I.COMPARISON_BINARY_OPERATORS}}),Object.defineProperty(r,"BOOLEAN_BINARY_OPERATORS",{enumerable:!0,get:function(){return I.BOOLEAN_BINARY_OPERATORS}}),Object.defineProperty(r,"NUMBER_BINARY_OPERATORS",{enumerable:!0,get:function(){return I.NUMBER_BINARY_OPERATORS}}),Object.defineProperty(r,"BINARY_OPERATORS",{enumerable:!0,get:function(){return I.BINARY_OPERATORS}}),Object.defineProperty(r,"BOOLEAN_UNARY_OPERATORS",{enumerable:!0,get:function(){return I.BOOLEAN_UNARY_OPERATORS}}),Object.defineProperty(r,"NUMBER_UNARY_OPERATORS",{enumerable:!0,get:function(){return I.NUMBER_UNARY_OPERATORS}}),Object.defineProperty(r,"STRING_UNARY_OPERATORS",{enumerable:!0,get:function(){return I.STRING_UNARY_OPERATORS}}),Object.defineProperty(r,"UNARY_OPERATORS",{enumerable:!0,get:function(){return I.UNARY_OPERATORS}}),Object.defineProperty(r,"INHERIT_KEYS",{enumerable:!0,get:function(){return I.INHERIT_KEYS}}),Object.defineProperty(r,"BLOCK_SCOPED_SYMBOL",{enumerable:!0,get:function(){return I.BLOCK_SCOPED_SYMBOL}}),Object.defineProperty(r,"NOT_LOCAL_BINDING",{enumerable:!0,get:function(){return I.NOT_LOCAL_BINDING}}),r.is=s,r.isType=a,r.validate=o,r.shallowEqual=u,r.appendToMemberExpression=l,r.prependToMemberExpression=c,r.ensureBlock=p,r.clone=h,r.cloneWithoutLoc=f,r.cloneDeep=d,r.buildMatchMemberExpression=m,r.removeComments=y,r.inheritsComments=g,r.inheritTrailingComments=b,r.inheritLeadingComments=v,r.inheritInnerComments=x,r.inherits=A,r.assertNode=D,r.isNode=C,r.traverseFast=S,r.removeProperties=_,r.removePropertiesDeep=w;var L=e("./retrievers");Object.defineProperty(r,"getBindingIdentifiers",{enumerable:!0,get:function(){return L.getBindingIdentifiers}}),Object.defineProperty(r,"getOuterBindingIdentifiers",{enumerable:!0,get:function(){return L.getOuterBindingIdentifiers}});var M=e("./validators");Object.defineProperty(r,"isBinding",{enumerable:!0,get:function(){return M.isBinding}}),Object.defineProperty(r,"isReferenced",{enumerable:!0,get:function(){return M.isReferenced}}), +Object.defineProperty(r,"isValidIdentifier",{enumerable:!0,get:function(){return M.isValidIdentifier}}),Object.defineProperty(r,"isLet",{enumerable:!0,get:function(){return M.isLet}}),Object.defineProperty(r,"isBlockScoped",{enumerable:!0,get:function(){return M.isBlockScoped}}),Object.defineProperty(r,"isVar",{enumerable:!0,get:function(){return M.isVar}}),Object.defineProperty(r,"isSpecifierDefault",{enumerable:!0,get:function(){return M.isSpecifierDefault}}),Object.defineProperty(r,"isScope",{enumerable:!0,get:function(){return M.isScope}}),Object.defineProperty(r,"isImmutable",{enumerable:!0,get:function(){return M.isImmutable}}),Object.defineProperty(r,"isNodesEquivalent",{enumerable:!0,get:function(){return M.isNodesEquivalent}});var R=e("./converters");Object.defineProperty(r,"toComputedKey",{enumerable:!0,get:function(){return R.toComputedKey}}),Object.defineProperty(r,"toSequenceExpression",{enumerable:!0,get:function(){return R.toSequenceExpression}}),Object.defineProperty(r,"toKeyAlias",{enumerable:!0,get:function(){return R.toKeyAlias}}),Object.defineProperty(r,"toIdentifier",{enumerable:!0,get:function(){return R.toIdentifier}}),Object.defineProperty(r,"toBindingIdentifierName",{enumerable:!0,get:function(){return R.toBindingIdentifierName}}),Object.defineProperty(r,"toStatement",{enumerable:!0,get:function(){return R.toStatement}}),Object.defineProperty(r,"toExpression",{enumerable:!0,get:function(){return R.toExpression}}),Object.defineProperty(r,"toBlock",{enumerable:!0,get:function(){return R.toBlock}}),Object.defineProperty(r,"valueToNode",{enumerable:!0,get:function(){return R.valueToNode}});var U=e("./flow");Object.defineProperty(r,"createUnionTypeAnnotation",{enumerable:!0,get:function(){return U.createUnionTypeAnnotation}}),Object.defineProperty(r,"removeTypeDuplicates",{enumerable:!0,get:function(){return U.removeTypeDuplicates}}),Object.defineProperty(r,"createTypeAnnotationBasedOnTypeof",{enumerable:!0,get:function(){return U.createTypeAnnotationBasedOnTypeof}});var V=e("to-fast-properties"),q=n(V),G=e("lodash/clone"),X=n(G),J=e("lodash/uniq"),W=n(J);e("./definitions/init");var K=e("./definitions"),z=e("./react"),Y=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(z),H=r;r.VISITOR_KEYS=K.VISITOR_KEYS,r.ALIAS_KEYS=K.ALIAS_KEYS,r.NODE_FIELDS=K.NODE_FIELDS,r.BUILDER_KEYS=K.BUILDER_KEYS,r.DEPRECATED_KEYS=K.DEPRECATED_KEYS,r.react=Y;for(var $ in H.VISITOR_KEYS)i($);H.FLIPPED_ALIAS_KEYS={},(0,O.default)(H.ALIAS_KEYS).forEach(function(e){H.ALIAS_KEYS[e].forEach(function(t){(H.FLIPPED_ALIAS_KEYS[t]=H.FLIPPED_ALIAS_KEYS[t]||[]).push(e)})}),(0,O.default)(H.FLIPPED_ALIAS_KEYS).forEach(function(e){H[e.toUpperCase()+"_TYPES"]=H.FLIPPED_ALIAS_KEYS[e],i(e)});r.TYPES=(0,O.default)(H.VISITOR_KEYS).concat((0,O.default)(H.FLIPPED_ALIAS_KEYS)).concat((0,O.default)(H.DEPRECATED_KEYS));(0,O.default)(H.BUILDER_KEYS).forEach(function(e){function t(){if(arguments.length>r.length)throw new Error("t."+e+": Too many arguments passed. Received "+arguments.length+" but can receive no more than "+r.length);var t={};t.type=e;for(var n=0,i=r,s=Array.isArray(i),a=0,i=s?i:(0,P.default)(i);;){var u;if(s){if(a>=i.length)break;u=i[a++]}else{if(a=i.next(),a.done)break;u=a.value}var l=u,c=H.NODE_FIELDS[e][l],p=arguments[n++];void 0===p&&(p=(0,X.default)(c.default)),t[l]=p}for(var h in t)o(t,h,t[h]);return t}var r=H.BUILDER_KEYS[e];H[e]=t,H[e[0].toLowerCase()+e.slice(1)]=t});for(var Q in H.DEPRECATED_KEYS)!function(e){function t(t){return function(){return console.trace("The node type "+e+" has been renamed to "+r),t.apply(this,arguments)}}var r=H.DEPRECATED_KEYS[e];H[e]=H[e[0].toLowerCase()+e.slice(1)]=t(H[r]),H["is"+e]=t(H["is"+r]),H["assert"+e]=t(H["assert"+r])}(Q);(0,q.default)(H),(0,q.default)(H.VISITOR_KEYS);var Z=["tokens","start","end","loc","raw","rawValue"],ee=H.COMMENT_KEYS.concat(["comments"]).concat(Z)},{"./constants":158,"./converters":159,"./definitions":164,"./definitions/init":165,"./flow":168,"./react":170,"./retrievers":171,"./validators":172,"babel-runtime/core-js/get-iterator":113,"babel-runtime/core-js/json/stringify":114,"babel-runtime/core-js/object/get-own-property-symbols":119,"babel-runtime/core-js/object/keys":120,"lodash/clone":480,"lodash/uniq":529,"to-fast-properties":595}],170:[function(e,t,r){"use strict";function n(e){return!!e&&/^[a-z]|\-/.test(e)}function i(e,t){for(var r=e.value.split(/\r\n|\n|\r/),n=0,i=0;i=0)return!0}else if(s===e)return!0}return!1}function s(e,t){switch(t.type){case"BindExpression":return t.object===e||t.callee===e;case"MemberExpression":case"JSXMemberExpression":return!(t.property!==e||!t.computed)||t.object===e;case"MetaProperty":return!1;case"ObjectProperty":if(t.key===e)return t.computed;case"VariableDeclarator":return t.id!==e;case"ArrowFunctionExpression":case"FunctionDeclaration":case"FunctionExpression":for(var r=t.params,n=Array.isArray(r),i=0,r=n?r:(0,v.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}if(s===e)return!1}return t.id!==e;case"ExportSpecifier":return!t.source&&t.local===e;case"ExportNamespaceSpecifier":case"ExportDefaultSpecifier":return!1;case"JSXAttribute":return t.name!==e;case"ClassProperty":return t.key===e?t.computed:t.value===e;case"ImportDefaultSpecifier":case"ImportNamespaceSpecifier":case"ImportSpecifier":return!1;case"ClassDeclaration":case"ClassExpression":return t.id!==e;case"ClassMethod":case"ObjectMethod":return t.key===e&&t.computed;case"LabeledStatement":return!1;case"CatchClause":return t.param!==e;case"RestElement":return!1;case"AssignmentExpression":case"AssignmentPattern":return t.right===e;case"ObjectPattern":case"ArrayPattern":return!1}return!0}function a(e){return"string"==typeof e&&!A.default.keyword.isReservedWordES6(e,!0)&&A.default.keyword.isIdentifierNameES6(e)}function o(e){return C.isVariableDeclaration(e)&&("var"!==e.kind||e[S.BLOCK_SCOPED_SYMBOL])}function u(e){return C.isFunctionDeclaration(e)||C.isClassDeclaration(e)||C.isLet(e)}function l(e){return C.isVariableDeclaration(e,{kind:"var"})&&!e[S.BLOCK_SCOPED_SYMBOL]}function c(e){return C.isImportDefaultSpecifier(e)||C.isIdentifier(e.imported||e.exported,{name:"default"})}function p(e,t){return(!C.isBlockStatement(e)||!C.isFunction(t,{body:e}))&&C.isScopable(e)}function h(e){return!!C.isType(e.type,"Immutable")||!!C.isIdentifier(e)&&"undefined"===e.name}function f(e,t){if("object"!==(void 0===e?"undefined":(0,g.default)(e))||"object"!==(void 0===e?"undefined":(0,g.default)(e))||null==e||null==t)return e===t;if(e.type!==t.type)return!1;for(var r=(0,m.default)(C.NODE_FIELDS[e.type]||e.type),n=r,i=Array.isArray(n),s=0,n=i?n:(0,v.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if((0,g.default)(e[o])!==(0,g.default)(t[o]))return!1;if(Array.isArray(e[o])){if(!Array.isArray(t[o]))return!1;if(e[o].length!==t[o].length)return!1;for(var u=0;u=0}}function i(e,t){for(var r=65536,n=0;ne)return!1;if((r+=t[n+1])>=e)return!0}}function s(e){return e<65?36===e:e<91||(e<97?95===e:e<123||(e<=65535?e>=170&&E.test(String.fromCharCode(e)):i(e,D)))}function a(e){return e<48?36===e:e<58||!(e<65)&&(e<91||(e<97?95===e:e<123||(e<=65535?e>=170&&A.test(String.fromCharCode(e)):i(e,D)||i(e,C))))}function o(e){var t={};for(var r in S)t[r]=e&&r in e?e[r]:S[r];return t}function u(e){return 10===e||13===e||8232===e||8233===e}function l(e,t){for(var r=1,n=0;;){L.lastIndex=n;var i=L.exec(e);if(!(i&&i.index>10),56320+(e-65536&1023))}function p(e,t,r,n){return e.type=t,e.end=r,e.loc.end=n,this.processComment(e),e}function h(e){return e[e.length-1]}function f(e){return e&&"Property"===e.type&&"init"===e.kind&&!1===e.method}function d(e){return"JSXIdentifier"===e.type?e.name:"JSXNamespacedName"===e.type?e.namespace.name+":"+e.name.name:"JSXMemberExpression"===e.type?d(e.object)+"."+d(e.property):void 0}function m(e,t){return new z(t,e).parse()}function y(e,t){var r=new z(t,e);return r.options.strictMode&&(r.state.strict=!0),r.getExpression()}Object.defineProperty(r,"__esModule",{value:!0});var g={6:n("enum await"),strict:n("implements interface let package private protected public static yield"),strictBind:n("eval arguments")},b=n("break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this let const class extends export import yield super"),v="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞮꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",x="‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_",E=new RegExp("["+v+"]"),A=new RegExp("["+v+x+"]");v=x=null;var D=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,264,8,2,36,18,0,50,29,881,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,0,32,6124,20,754,9486,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541],C=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,838,7,2,7,17,9,57,21,2,13,19882,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239],S={sourceType:"script",sourceFilename:void 0,startLine:1,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowSuperOutsideMethod:!1,plugins:[],strictMode:null},_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},k=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},F=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},T=!0,P=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};w(this,e),this.label=t,this.keyword=r.keyword,this.beforeExpr=!!r.beforeExpr,this.startsExpr=!!r.startsExpr,this.rightAssociative=!!r.rightAssociative,this.isLoop=!!r.isLoop,this.isAssign=!!r.isAssign,this.prefix=!!r.prefix,this.postfix=!!r.postfix,this.binop=r.binop||null,this.updateContext=null},B=function(e){function t(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(this,t),n.keyword=r,F(this,e.call(this,r,n))}return k(t,e),t}(P),O=function(e){function t(r,n){return w(this,t),F(this,e.call(this,r,{beforeExpr:T,binop:n}))}return k(t,e),t}(P),j={num:new P("num",{startsExpr:!0}),regexp:new P("regexp",{startsExpr:!0}),string:new P("string",{startsExpr:!0}),name:new P("name",{startsExpr:!0}),eof:new P("eof"),bracketL:new P("[",{beforeExpr:T,startsExpr:!0}),bracketR:new P("]"),braceL:new P("{",{beforeExpr:T,startsExpr:!0}),braceBarL:new P("{|",{beforeExpr:T,startsExpr:!0}),braceR:new P("}"),braceBarR:new P("|}"),parenL:new P("(",{beforeExpr:T,startsExpr:!0}),parenR:new P(")"),comma:new P(",",{beforeExpr:T}),semi:new P(";",{beforeExpr:T}),colon:new P(":",{beforeExpr:T}),doubleColon:new P("::",{beforeExpr:T}),dot:new P("."),question:new P("?",{beforeExpr:T}),arrow:new P("=>",{beforeExpr:T}),template:new P("template"),ellipsis:new P("...",{beforeExpr:T}),backQuote:new P("`",{startsExpr:!0}),dollarBraceL:new P("${",{beforeExpr:T,startsExpr:!0}),at:new P("@"),eq:new P("=",{beforeExpr:T,isAssign:!0}),assign:new P("_=",{beforeExpr:T,isAssign:!0}),incDec:new P("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new P("prefix",{beforeExpr:T,prefix:!0,startsExpr:!0}),logicalOR:new O("||",1),logicalAND:new O("&&",2),bitwiseOR:new O("|",3),bitwiseXOR:new O("^",4),bitwiseAND:new O("&",5),equality:new O("==/!=",6),relational:new O("",7),bitShift:new O("<>",8),plusMin:new P("+/-",{beforeExpr:T,binop:9,prefix:!0,startsExpr:!0}),modulo:new O("%",10),star:new O("*",10),slash:new O("/",10),exponent:new P("**",{beforeExpr:T,binop:11,rightAssociative:!0})},N={break:new B("break"),case:new B("case",{beforeExpr:T}),catch:new B("catch"),continue:new B("continue"),debugger:new B("debugger"),default:new B("default",{beforeExpr:T}),do:new B("do",{isLoop:!0,beforeExpr:T}),else:new B("else",{beforeExpr:T}),finally:new B("finally"),for:new B("for",{isLoop:!0}),function:new B("function",{startsExpr:!0}),if:new B("if"),return:new B("return",{beforeExpr:T}),switch:new B("switch"),throw:new B("throw",{beforeExpr:T}),try:new B("try"),var:new B("var"),let:new B("let"),const:new B("const"),while:new B("while",{isLoop:!0}),with:new B("with"),new:new B("new",{beforeExpr:T,startsExpr:!0}),this:new B("this",{startsExpr:!0}),super:new B("super",{startsExpr:!0}),class:new B("class"),extends:new B("extends",{beforeExpr:T}),export:new B("export"),import:new B("import"),yield:new B("yield",{beforeExpr:T,startsExpr:!0}),null:new B("null",{startsExpr:!0}),true:new B("true",{startsExpr:!0}),false:new B("false",{startsExpr:!0}),in:new B("in",{beforeExpr:T,binop:7}),instanceof:new B("instanceof",{beforeExpr:T,binop:7}),typeof:new B("typeof",{beforeExpr:T,prefix:!0,startsExpr:!0}),void:new B("void",{beforeExpr:T,prefix:!0,startsExpr:!0}),delete:new B("delete",{beforeExpr:T,prefix:!0,startsExpr:!0})};Object.keys(N).forEach(function(e){j["_"+e]=N[e]});var I=/\r\n?|\n|\u2028|\u2029/,L=new RegExp(I.source,"g"),M=/[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/,R=function e(t,r,n,i){w(this,e),this.token=t,this.isExpr=!!r,this.preserveSpace=!!n,this.override=i},U={braceStatement:new R("{",!1),braceExpression:new R("{",!0),templateQuasi:new R("${",!0),parenStatement:new R("(",!1),parenExpression:new R("(",!0),template:new R("`",!0,!0,function(e){return e.readTmplToken()}),functionExpression:new R("function",!0)};j.parenR.updateContext=j.braceR.updateContext=function(){if(1===this.state.context.length)return void(this.state.exprAllowed=!0);var e=this.state.context.pop();e===U.braceStatement&&this.curContext()===U.functionExpression?(this.state.context.pop(),this.state.exprAllowed=!1):e===U.templateQuasi?this.state.exprAllowed=!0:this.state.exprAllowed=!e.isExpr},j.name.updateContext=function(e){this.state.exprAllowed=!1,e!==j._let&&e!==j._const&&e!==j._var||I.test(this.input.slice(this.state.end))&&(this.state.exprAllowed=!0)},j.braceL.updateContext=function(e){this.state.context.push(this.braceIsBlock(e)?U.braceStatement:U.braceExpression),this.state.exprAllowed=!0},j.dollarBraceL.updateContext=function(){this.state.context.push(U.templateQuasi),this.state.exprAllowed=!0},j.parenL.updateContext=function(e){var t=e===j._if||e===j._for||e===j._with||e===j._while;this.state.context.push(t?U.parenStatement:U.parenExpression),this.state.exprAllowed=!0},j.incDec.updateContext=function(){},j._function.updateContext=function(){this.curContext()!==U.braceStatement&&this.state.context.push(U.functionExpression),this.state.exprAllowed=!1},j.backQuote.updateContext=function(){this.curContext()===U.template?this.state.context.pop():this.state.context.push(U.template),this.state.exprAllowed=!1};var V=function e(t,r){w(this,e),this.line=t,this.column=r},q=function e(t,r){w(this,e),this.start=t,this.end=r},G=function(){function e(){w(this,e)}return e.prototype.init=function(e,t){return this.strict=!1!==e.strictMode&&"module"===e.sourceType,this.input=t,this.potentialArrowAt=-1,this.inMethod=this.inFunction=this.inGenerator=this.inAsync=this.inPropertyName=this.inType=this.noAnonFunctionType=!1,this.labels=[],this.decorators=[],this.tokens=[],this.comments=[],this.trailingComments=[],this.leadingComments=[],this.commentStack=[],this.pos=this.lineStart=0,this.curLine=e.startLine,this.type=j.eof,this.value=null,this.start=this.end=this.pos,this.startLoc=this.endLoc=this.curPosition(),this.lastTokEndLoc=this.lastTokStartLoc=null,this.lastTokStart=this.lastTokEnd=this.pos,this.context=[U.braceStatement],this.exprAllowed=!0,this.containsEsc=this.containsOctal=!1,this.octalPosition=null,this.exportedIdentifiers=[],this},e.prototype.curPosition=function(){return new V(this.curLine,this.pos-this.lineStart)},e.prototype.clone=function(t){var r=new e;for(var n in this){var i=this[n];t&&"context"!==n||!Array.isArray(i)||(i=i.slice()),r[n]=i}return r},e}(),X=function e(t){w(this,e),this.type=t.type,this.value=t.value,this.start=t.start,this.end=t.end,this.loc=new q(t.startLoc,t.endLoc)},J=function(){function e(t,r){w(this,e),this.state=new G,this.state.init(t,r)}return e.prototype.next=function(){this.isLookahead||this.state.tokens.push(new X(this.state)),this.state.lastTokEnd=this.state.end,this.state.lastTokStart=this.state.start,this.state.lastTokEndLoc=this.state.endLoc,this.state.lastTokStartLoc=this.state.startLoc,this.nextToken()},e.prototype.eat=function(e){return!!this.match(e)&&(this.next(),!0)},e.prototype.match=function(e){return this.state.type===e},e.prototype.isKeyword=function(e){return b(e)},e.prototype.lookahead=function(){var e=this.state;this.state=e.clone(!0),this.isLookahead=!0,this.next(),this.isLookahead=!1;var t=this.state.clone(!0);return this.state=e,t},e.prototype.setStrict=function(e){if(this.state.strict=e,this.match(j.num)||this.match(j.string)){for(this.state.pos=this.state.start;this.state.pos=this.input.length?this.finishToken(j.eof):e.override?e.override(this):this.readToken(this.fullCharCodeAtPos())},e.prototype.readToken=function(e){return s(e)||92===e?this.readWord():this.getTokenFromCode(e)},e.prototype.fullCharCodeAtPos=function(){var e=this.input.charCodeAt(this.state.pos);return e<=55295||e>=57344?e:(e<<10)+this.input.charCodeAt(this.state.pos+1)-56613888},e.prototype.pushComment=function(e,t,r,n,i,s){var a={type:e?"CommentBlock":"CommentLine",value:t,start:r,end:n,loc:new q(i,s)};this.isLookahead||(this.state.tokens.push(a),this.state.comments.push(a),this.addComment(a))},e.prototype.skipBlockComment=function(){var e=this.state.curPosition(),t=this.state.pos,r=this.input.indexOf("*/",this.state.pos+=2);-1===r&&this.raise(this.state.pos-2,"Unterminated comment"),this.state.pos=r+2,L.lastIndex=t;for(var n=void 0;(n=L.exec(this.input))&&n.index8&&e<14||e>=5760&&M.test(String.fromCharCode(e))))break e;++this.state.pos}}},e.prototype.finishToken=function(e,t){this.state.end=this.state.pos,this.state.endLoc=this.state.curPosition();var r=this.state.type;this.state.type=e,this.state.value=t,this.updateContext(r)},e.prototype.readToken_dot=function(){var e=this.input.charCodeAt(this.state.pos+1);if(e>=48&&e<=57)return this.readNumber(!0);var t=this.input.charCodeAt(this.state.pos+2);return 46===e&&46===t?(this.state.pos+=3,this.finishToken(j.ellipsis)):(++this.state.pos,this.finishToken(j.dot))},e.prototype.readToken_slash=function(){return this.state.exprAllowed?(++this.state.pos,this.readRegexp()):61===this.input.charCodeAt(this.state.pos+1)?this.finishOp(j.assign,2):this.finishOp(j.slash,1)},e.prototype.readToken_mult_modulo=function(e){var t=42===e?j.star:j.modulo,r=1,n=this.input.charCodeAt(this.state.pos+1);return 42===n&&(r++,n=this.input.charCodeAt(this.state.pos+2),t=j.exponent),61===n&&(r++,t=j.assign),this.finishOp(t,r)},e.prototype.readToken_pipe_amp=function(e){var t=this.input.charCodeAt(this.state.pos+1);return t===e?this.finishOp(124===e?j.logicalOR:j.logicalAND,2):61===t?this.finishOp(j.assign,2):124===e&&125===t&&this.hasPlugin("flow")?this.finishOp(j.braceBarR,2):this.finishOp(124===e?j.bitwiseOR:j.bitwiseAND,1)},e.prototype.readToken_caret=function(){return 61===this.input.charCodeAt(this.state.pos+1)?this.finishOp(j.assign,2):this.finishOp(j.bitwiseXOR,1)},e.prototype.readToken_plus_min=function(e){var t=this.input.charCodeAt(this.state.pos+1);return t===e?45===t&&62===this.input.charCodeAt(this.state.pos+2)&&I.test(this.input.slice(this.state.lastTokEnd,this.state.pos))?(this.skipLineComment(3),this.skipSpace(),this.nextToken()):this.finishOp(j.incDec,2):61===t?this.finishOp(j.assign,2):this.finishOp(j.plusMin,1)},e.prototype.readToken_lt_gt=function(e){var t=this.input.charCodeAt(this.state.pos+1),r=1;return t===e?(r=62===e&&62===this.input.charCodeAt(this.state.pos+2)?3:2,61===this.input.charCodeAt(this.state.pos+r)?this.finishOp(j.assign,r+1):this.finishOp(j.bitShift,r)):33===t&&60===e&&45===this.input.charCodeAt(this.state.pos+2)&&45===this.input.charCodeAt(this.state.pos+3)?(this.inModule&&this.unexpected(),this.skipLineComment(4),this.skipSpace(),this.nextToken()):(61===t&&(r=2),this.finishOp(j.relational,r))},e.prototype.readToken_eq_excl=function(e){var t=this.input.charCodeAt(this.state.pos+1);return 61===t?this.finishOp(j.equality,61===this.input.charCodeAt(this.state.pos+2)?3:2):61===e&&62===t?(this.state.pos+=2,this.finishToken(j.arrow)):this.finishOp(61===e?j.eq:j.prefix,1)},e.prototype.getTokenFromCode=function(e){switch(e){case 46:return this.readToken_dot();case 40:return++this.state.pos,this.finishToken(j.parenL);case 41:return++this.state.pos,this.finishToken(j.parenR);case 59:return++this.state.pos,this.finishToken(j.semi);case 44:return++this.state.pos,this.finishToken(j.comma);case 91:return++this.state.pos,this.finishToken(j.bracketL);case 93:return++this.state.pos,this.finishToken(j.bracketR);case 123:return this.hasPlugin("flow")&&124===this.input.charCodeAt(this.state.pos+1)?this.finishOp(j.braceBarL,2):(++this.state.pos,this.finishToken(j.braceL));case 125:return++this.state.pos,this.finishToken(j.braceR);case 58:return this.hasPlugin("functionBind")&&58===this.input.charCodeAt(this.state.pos+1)?this.finishOp(j.doubleColon,2):(++this.state.pos,this.finishToken(j.colon));case 63:return++this.state.pos,this.finishToken(j.question);case 64:return++this.state.pos,this.finishToken(j.at);case 96:return++this.state.pos,this.finishToken(j.backQuote);case 48:var t=this.input.charCodeAt(this.state.pos+1);if(120===t||88===t)return this.readRadixNumber(16);if(111===t||79===t)return this.readRadixNumber(8);if(98===t||66===t)return this.readRadixNumber(2);case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(e);case 47:return this.readToken_slash();case 37:case 42:return this.readToken_mult_modulo(e);case 124:case 38:return this.readToken_pipe_amp(e);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(e);case 60:case 62:return this.readToken_lt_gt(e);case 61:case 33:return this.readToken_eq_excl(e);case 126:return this.finishOp(j.prefix,1)}this.raise(this.state.pos,"Unexpected character '"+c(e)+"'")},e.prototype.finishOp=function(e,t){var r=this.input.slice(this.state.pos,this.state.pos+t);return this.state.pos+=t,this.finishToken(e,r)},e.prototype.readRegexp=function(){for(var e=this.state.pos,t=void 0,r=void 0;;){this.state.pos>=this.input.length&&this.raise(e,"Unterminated regular expression");var n=this.input.charAt(this.state.pos);if(I.test(n)&&this.raise(e,"Unterminated regular expression"),t)t=!1;else{if("["===n)r=!0;else if("]"===n&&r)r=!1;else if("/"===n&&!r)break;t="\\"===n}++this.state.pos}var i=this.input.slice(e,this.state.pos);++this.state.pos;var s=this.readWord1();if(s){/^[gmsiyu]*$/.test(s)||this.raise(e,"Invalid regular expression flag")}return this.finishToken(j.regexp,{pattern:i,flags:s})},e.prototype.readInt=function(e,t){for(var r=this.state.pos,n=0,i=0,s=null==t?1/0:t;i=97?a-97+10:a>=65?a-65+10:a>=48&&a<=57?a-48:1/0)>=e)break;++this.state.pos,n=n*e+o}return this.state.pos===r||null!=t&&this.state.pos-r!==t?null:n},e.prototype.readRadixNumber=function(e){this.state.pos+=2;var t=this.readInt(e) +;return null==t&&this.raise(this.state.start+2,"Expected number in radix "+e),s(this.fullCharCodeAtPos())&&this.raise(this.state.pos,"Identifier directly after number"),this.finishToken(j.num,t)},e.prototype.readNumber=function(e){var t=this.state.pos,r=48===this.input.charCodeAt(this.state.pos),n=!1;e||null!==this.readInt(10)||this.raise(t,"Invalid number");var i=this.input.charCodeAt(this.state.pos);46===i&&(++this.state.pos,this.readInt(10),n=!0,i=this.input.charCodeAt(this.state.pos)),69!==i&&101!==i||(i=this.input.charCodeAt(++this.state.pos),43!==i&&45!==i||++this.state.pos,null===this.readInt(10)&&this.raise(t,"Invalid number"),n=!0),s(this.fullCharCodeAtPos())&&this.raise(this.state.pos,"Identifier directly after number");var a=this.input.slice(t,this.state.pos),o=void 0;return n?o=parseFloat(a):r&&1!==a.length?/[89]/.test(a)||this.state.strict?this.raise(t,"Invalid number"):o=parseInt(a,8):o=parseInt(a,10),this.finishToken(j.num,o)},e.prototype.readCodePoint=function(){var e=this.input.charCodeAt(this.state.pos),t=void 0;if(123===e){var r=++this.state.pos;t=this.readHexChar(this.input.indexOf("}",this.state.pos)-this.state.pos),++this.state.pos,t>1114111&&this.raise(r,"Code point out of bounds")}else t=this.readHexChar(4);return t},e.prototype.readString=function(e){for(var t="",r=++this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated string constant");var n=this.input.charCodeAt(this.state.pos);if(n===e)break;92===n?(t+=this.input.slice(r,this.state.pos),t+=this.readEscapedChar(!1),r=this.state.pos):(u(n)&&this.raise(this.state.start,"Unterminated string constant"),++this.state.pos)}return t+=this.input.slice(r,this.state.pos++),this.finishToken(j.string,t)},e.prototype.readTmplToken=function(){for(var e="",t=this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated template");var r=this.input.charCodeAt(this.state.pos);if(96===r||36===r&&123===this.input.charCodeAt(this.state.pos+1))return this.state.pos===this.state.start&&this.match(j.template)?36===r?(this.state.pos+=2,this.finishToken(j.dollarBraceL)):(++this.state.pos,this.finishToken(j.backQuote)):(e+=this.input.slice(t,this.state.pos),this.finishToken(j.template,e));if(92===r)e+=this.input.slice(t,this.state.pos),e+=this.readEscapedChar(!0),t=this.state.pos;else if(u(r)){switch(e+=this.input.slice(t,this.state.pos),++this.state.pos,r){case 13:10===this.input.charCodeAt(this.state.pos)&&++this.state.pos;case 10:e+="\n";break;default:e+=String.fromCharCode(r)}++this.state.curLine,this.state.lineStart=this.state.pos,t=this.state.pos}else++this.state.pos}},e.prototype.readEscapedChar=function(e){var t=this.input.charCodeAt(++this.state.pos);switch(++this.state.pos,t){case 110:return"\n";case 114:return"\r";case 120:return String.fromCharCode(this.readHexChar(2));case 117:return c(this.readCodePoint());case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 13:10===this.input.charCodeAt(this.state.pos)&&++this.state.pos;case 10:return this.state.lineStart=this.state.pos,++this.state.curLine,"";default:if(t>=48&&t<=55){var r=this.input.substr(this.state.pos-1,3).match(/^[0-7]+/)[0],n=parseInt(r,8);return n>255&&(r=r.slice(0,-1),n=parseInt(r,8)),n>0&&(this.state.containsOctal||(this.state.containsOctal=!0,this.state.octalPosition=this.state.pos-2),(this.state.strict||e)&&this.raise(this.state.pos-2,"Octal literal in strict mode")),this.state.pos+=r.length-1,String.fromCharCode(n)}return String.fromCharCode(t)}},e.prototype.readHexChar=function(e){var t=this.state.pos,r=this.readInt(16,e);return null===r&&this.raise(t,"Bad character escape sequence"),r},e.prototype.readWord1=function(){this.state.containsEsc=!1;for(var e="",t=!0,r=this.state.pos;this.state.pos-1)||!!this.plugins[e]},t.prototype.extend=function(e,t){this[e]=t(this[e])},t.prototype.loadAllPlugins=function(){var e=this,t=Object.keys(W).filter(function(e){return"flow"!==e&&"estree"!==e});t.push("flow"),t.forEach(function(t){var r=W[t];r&&r(e)})},t.prototype.loadPlugins=function(e){if(e.indexOf("*")>=0)return this.loadAllPlugins(),{"*":!0};var t={};e.indexOf("flow")>=0&&(e=e.filter(function(e){return"flow"!==e}),e.push("flow")),e.indexOf("estree")>=0&&(e=e.filter(function(e){return"estree"!==e}),e.unshift("estree"));for(var r=e,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if(!t[a]){t[a]=!0;var o=W[a];o&&o(this)}}return t},t.prototype.parse=function(){var e=this.startNode(),t=this.startNode();return this.nextToken(),this.parseTopLevel(e,t)},t}(J),Y=z.prototype;Y.addExtra=function(e,t,r){if(e){(e.extra=e.extra||{})[t]=r}},Y.isRelational=function(e){return this.match(j.relational)&&this.state.value===e},Y.expectRelational=function(e){this.isRelational(e)?this.next():this.unexpected(null,j.relational)},Y.isContextual=function(e){return this.match(j.name)&&this.state.value===e},Y.eatContextual=function(e){return this.state.value===e&&this.eat(j.name)},Y.expectContextual=function(e,t){this.eatContextual(e)||this.unexpected(null,t)},Y.canInsertSemicolon=function(){return this.match(j.eof)||this.match(j.braceR)||I.test(this.input.slice(this.state.lastTokEnd,this.state.start))},Y.isLineTerminator=function(){return this.eat(j.semi)||this.canInsertSemicolon()},Y.semicolon=function(){this.isLineTerminator()||this.unexpected(null,j.semi)},Y.expect=function(e,t){return this.eat(e)||this.unexpected(t,e)},Y.unexpected=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Unexpected token";t&&"object"===(void 0===t?"undefined":_(t))&&t.label&&(t="Unexpected token, expected "+t.label),this.raise(null!=e?e:this.state.start,t)};var H=z.prototype;H.parseTopLevel=function(e,t){return t.sourceType=this.options.sourceType,this.parseBlockBody(t,!0,!0,j.eof),e.program=this.finishNode(t,"Program"),e.comments=this.state.comments,e.tokens=this.state.tokens,this.finishNode(e,"File")};var $={kind:"loop"},Q={kind:"switch"};H.stmtToDirective=function(e){var t=e.expression,r=this.startNodeAt(t.start,t.loc.start),n=this.startNodeAt(e.start,e.loc.start),i=this.input.slice(t.start,t.end),s=r.value=i.slice(1,-1);return this.addExtra(r,"raw",i),this.addExtra(r,"rawValue",s),n.value=this.finishNodeAt(r,"DirectiveLiteral",t.end,t.loc.end),this.finishNodeAt(n,"Directive",e.end,e.loc.end)},H.parseStatement=function(e,t){this.match(j.at)&&this.parseDecorators(!0);var r=this.state.type,n=this.startNode();switch(r){case j._break:case j._continue:return this.parseBreakContinueStatement(n,r.keyword);case j._debugger:return this.parseDebuggerStatement(n);case j._do:return this.parseDoStatement(n);case j._for:return this.parseForStatement(n);case j._function:return e||this.unexpected(),this.parseFunctionStatement(n);case j._class:return e||this.unexpected(),this.parseClass(n,!0);case j._if:return this.parseIfStatement(n);case j._return:return this.parseReturnStatement(n);case j._switch:return this.parseSwitchStatement(n);case j._throw:return this.parseThrowStatement(n);case j._try:return this.parseTryStatement(n);case j._let:case j._const:e||this.unexpected();case j._var:return this.parseVarStatement(n,r);case j._while:return this.parseWhileStatement(n);case j._with:return this.parseWithStatement(n);case j.braceL:return this.parseBlock();case j.semi:return this.parseEmptyStatement(n);case j._export:case j._import:if(this.hasPlugin("dynamicImport")&&this.lookahead().type===j.parenL)break;return this.options.allowImportExportEverywhere||(t||this.raise(this.state.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.state.start,"'import' and 'export' may appear only with 'sourceType: module'")),r===j._import?this.parseImport(n):this.parseExport(n);case j.name:if("async"===this.state.value){var i=this.state.clone();if(this.next(),this.match(j._function)&&!this.canInsertSemicolon())return this.expect(j._function),this.parseFunction(n,!0,!1,!0);this.state=i}}var s=this.state.value,a=this.parseExpression();return r===j.name&&"Identifier"===a.type&&this.eat(j.colon)?this.parseLabeledStatement(n,s,a):this.parseExpressionStatement(n,a)},H.takeDecorators=function(e){this.state.decorators.length&&(e.decorators=this.state.decorators,this.state.decorators=[])},H.parseDecorators=function(e){for(;this.match(j.at);){var t=this.parseDecorator();this.state.decorators.push(t)}e&&this.match(j._export)||this.match(j._class)||this.raise(this.state.start,"Leading decorators must be attached to a class declaration")},H.parseDecorator=function(){this.hasPlugin("decorators")||this.unexpected();var e=this.startNode();return this.next(),e.expression=this.parseMaybeAssign(),this.finishNode(e,"Decorator")},H.parseBreakContinueStatement=function(e,t){var r="break"===t;this.next(),this.isLineTerminator()?e.label=null:this.match(j.name)?(e.label=this.parseIdentifier(),this.semicolon()):this.unexpected();var n=void 0;for(n=0;n=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}a.name===t&&this.raise(r.start,"Label '"+t+"' is already declared")}for(var o=this.state.type.isLoop?"loop":this.match(j._switch)?"switch":null,u=this.state.labels.length-1;u>=0;u--){var l=this.state.labels[u];if(l.statementStart!==e.start)break;l.statementStart=this.state.start,l.kind=o}return this.state.labels.push({name:t,kind:o,statementStart:this.state.start}),e.body=this.parseStatement(!0),this.state.labels.pop(),e.label=r,this.finishNode(e,"LabeledStatement")},H.parseExpressionStatement=function(e,t){return e.expression=t,this.semicolon(),this.finishNode(e,"ExpressionStatement")},H.parseBlock=function(e){var t=this.startNode();return this.expect(j.braceL),this.parseBlockBody(t,e,!1,j.braceR),this.finishNode(t,"BlockStatement")},H.isValidDirective=function(e){return"ExpressionStatement"===e.type&&"StringLiteral"===e.expression.type&&!e.expression.extra.parenthesized},H.parseBlockBody=function(e,t,r,n){e.body=[],e.directives=[];for(var i=!1,s=void 0,a=void 0;!this.eat(n);){i||!this.state.containsOctal||a||(a=this.state.octalPosition);var o=this.parseStatement(!0,r);if(t&&!i&&this.isValidDirective(o)){var u=this.stmtToDirective(o);e.directives.push(u),void 0===s&&"use strict"===u.value.value&&(s=this.state.strict,this.setStrict(!0),a&&this.raise(a,"Octal literal in strict mode"))}else i=!0,e.body.push(o)}!1===s&&this.setStrict(!1)},H.parseFor=function(e,t){return e.init=t,this.expect(j.semi),e.test=this.match(j.semi)?null:this.parseExpression(),this.expect(j.semi),e.update=this.match(j.parenR)?null:this.parseExpression(),this.expect(j.parenR),e.body=this.parseStatement(!1),this.state.labels.pop(),this.finishNode(e,"ForStatement")},H.parseForIn=function(e,t,r){var n=void 0;return r?(this.eatContextual("of"),n="ForAwaitStatement"):(n=this.match(j._in)?"ForInStatement":"ForOfStatement",this.next()),e.left=t,e.right=this.parseExpression(),this.expect(j.parenR),e.body=this.parseStatement(!1),this.state.labels.pop(),this.finishNode(e,n)},H.parseVar=function(e,t,r){for(e.declarations=[],e.kind=r.keyword;;){var n=this.startNode();if(this.parseVarHead(n),this.eat(j.eq)?n.init=this.parseMaybeAssign(t):r!==j._const||this.match(j._in)||this.isContextual("of")?"Identifier"===n.id.type||t&&(this.match(j._in)||this.isContextual("of"))?n.init=null:this.raise(this.state.lastTokEnd,"Complex binding patterns require an initialization value"):this.unexpected(),e.declarations.push(this.finishNode(n,"VariableDeclarator")),!this.eat(j.comma))break}return e},H.parseVarHead=function(e){e.id=this.parseBindingAtom(),this.checkLVal(e.id,!0,void 0,"variable declaration")},H.parseFunction=function(e,t,r,n,i){var s=this.state.inMethod;return this.state.inMethod=!1,this.initFunction(e,n),this.match(j.star)&&(e.async&&!this.hasPlugin("asyncGenerators")?this.unexpected():(e.generator=!0,this.next())),!t||i||this.match(j.name)||this.match(j._yield)||this.unexpected(),(this.match(j.name)||this.match(j._yield))&&(e.id=this.parseBindingIdentifier()),this.parseFunctionParams(e),this.parseFunctionBody(e,r),this.state.inMethod=s,this.finishNode(e,t?"FunctionDeclaration":"FunctionExpression")},H.parseFunctionParams=function(e){this.expect(j.parenL),e.params=this.parseBindingList(j.parenR)},H.parseClass=function(e,t,r){return this.next(),this.takeDecorators(e),this.parseClassId(e,t,r),this.parseClassSuper(e),this.parseClassBody(e),this.finishNode(e,t?"ClassDeclaration":"ClassExpression")},H.isClassProperty=function(){return this.match(j.eq)||this.isLineTerminator()},H.isClassMutatorStarter=function(){return!1},H.parseClassBody=function(e){var t=this.state.strict;this.state.strict=!0;var r=!1,n=!1,i=[],s=this.startNode();for(s.body=[],this.expect(j.braceL);!this.eat(j.braceR);)if(this.eat(j.semi))i.length>0&&this.raise(this.state.lastTokEnd,"Decorators must not be followed by a semicolon");else if(this.match(j.at))i.push(this.parseDecorator());else{var a=this.startNode();i.length&&(a.decorators=i,i=[]);var o=!1,u=this.match(j.name)&&"static"===this.state.value,l=this.eat(j.star),c=!1,p=!1;if(this.parsePropertyName(a),a.static=u&&!this.match(j.parenL),a.static&&(l=this.eat(j.star),this.parsePropertyName(a)),!l){if(this.isClassProperty()){s.body.push(this.parseClassProperty(a));continue}"Identifier"===a.key.type&&!a.computed&&this.hasPlugin("classConstructorCall")&&"call"===a.key.name&&this.match(j.name)&&"constructor"===this.state.value&&(o=!0,this.parsePropertyName(a))}var h=!this.match(j.parenL)&&!a.computed&&"Identifier"===a.key.type&&"async"===a.key.name;if(h&&(this.hasPlugin("asyncGenerators")&&this.eat(j.star)&&(l=!0),p=!0,this.parsePropertyName(a)),a.kind="method",!a.computed){var f=a.key;p||l||this.isClassMutatorStarter()||"Identifier"!==f.type||this.match(j.parenL)||"get"!==f.name&&"set"!==f.name||(c=!0,a.kind=f.name,f=this.parsePropertyName(a));var d=!(o||a.static||"constructor"!==f.name&&"constructor"!==f.value);d&&(n&&this.raise(f.start,"Duplicate constructor in the same class"),c&&this.raise(f.start,"Constructor can't have get/set modifier"),l&&this.raise(f.start,"Constructor can't be a generator"),p&&this.raise(f.start,"Constructor can't be an async function"),a.kind="constructor",n=!0);var m=a.static&&("prototype"===f.name||"prototype"===f.value);m&&this.raise(f.start,"Classes may not have static property named prototype")}o&&(r&&this.raise(a.start,"Duplicate constructor call in the same class"),a.kind="constructorCall",r=!0),"constructor"!==a.kind&&"constructorCall"!==a.kind||!a.decorators||this.raise(a.start,"You can't attach decorators to a class constructor"),this.parseClassMethod(s,a,l,p),c&&this.checkGetterSetterParamCount(a)}i.length&&this.raise(this.state.start,"You have trailing decorators with no method"),e.body=this.finishNode(s,"ClassBody"),this.state.strict=t},H.parseClassProperty=function(e){return this.match(j.eq)?(this.hasPlugin("classProperties")||this.unexpected(),this.next(),e.value=this.parseMaybeAssign()):e.value=null,this.semicolon(),this.finishNode(e,"ClassProperty")},H.parseClassMethod=function(e,t,r,n){this.parseMethod(t,r,n),e.body.push(this.finishNode(t,"ClassMethod"))},H.parseClassId=function(e,t,r){this.match(j.name)?e.id=this.parseIdentifier():r||!t?e.id=null:this.unexpected()},H.parseClassSuper=function(e){e.superClass=this.eat(j._extends)?this.parseExprSubscripts():null},H.parseExport=function(e){if(this.next(),this.match(j.star)){var t=this.startNode();if(this.next(),!this.hasPlugin("exportExtensions")||!this.eatContextual("as"))return this.parseExportFrom(e,!0),this.finishNode(e,"ExportAllDeclaration");t.exported=this.parseIdentifier(),e.specifiers=[this.finishNode(t,"ExportNamespaceSpecifier")],this.parseExportSpecifiersMaybe(e),this.parseExportFrom(e,!0)}else if(this.hasPlugin("exportExtensions")&&this.isExportDefaultSpecifier()){var r=this.startNode();if(r.exported=this.parseIdentifier(!0),e.specifiers=[this.finishNode(r,"ExportDefaultSpecifier")],this.match(j.comma)&&this.lookahead().type===j.star){this.expect(j.comma);var n=this.startNode();this.expect(j.star),this.expectContextual("as"),n.exported=this.parseIdentifier(),e.specifiers.push(this.finishNode(n,"ExportNamespaceSpecifier"))}else this.parseExportSpecifiersMaybe(e);this.parseExportFrom(e,!0)}else{if(this.eat(j._default)){var i=this.startNode(),s=!1;return this.eat(j._function)?i=this.parseFunction(i,!0,!1,!1,!0):this.match(j._class)?i=this.parseClass(i,!0,!0):(s=!0,i=this.parseMaybeAssign()),e.declaration=i,s&&this.semicolon(),this.checkExport(e,!0,!0),this.finishNode(e,"ExportDefaultDeclaration")}this.shouldParseExportDeclaration()?(e.specifiers=[],e.source=null,e.declaration=this.parseExportDeclaration(e)):(e.declaration=null,e.specifiers=this.parseExportSpecifiers(),this.parseExportFrom(e))}return this.checkExport(e,!0),this.finishNode(e,"ExportNamedDeclaration")},H.parseExportDeclaration=function(){return this.parseStatement(!0)},H.isExportDefaultSpecifier=function(){if(this.match(j.name))return"type"!==this.state.value&&"async"!==this.state.value&&"interface"!==this.state.value;if(!this.match(j._default))return!1;var e=this.lookahead();return e.type===j.comma||e.type===j.name&&"from"===e.value},H.parseExportSpecifiersMaybe=function(e){this.eat(j.comma)&&(e.specifiers=e.specifiers.concat(this.parseExportSpecifiers()))},H.parseExportFrom=function(e,t){this.eatContextual("from")?(e.source=this.match(j.string)?this.parseExprAtom():this.unexpected(),this.checkExport(e)):t?this.unexpected():e.source=null,this.semicolon()},H.shouldParseExportDeclaration=function(){return"var"===this.state.type.keyword||"const"===this.state.type.keyword||"let"===this.state.type.keyword||"function"===this.state.type.keyword||"class"===this.state.type.keyword||this.isContextual("async")},H.checkExport=function(e,t,r){if(t)if(r)this.checkDuplicateExports(e,"default");else if(e.specifiers&&e.specifiers.length)for(var n=e.specifiers,i=Array.isArray(n),s=0,n=i?n:n[Symbol.iterator]();;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;this.checkDuplicateExports(o,o.exported.name)}else if(e.declaration)if("FunctionDeclaration"===e.declaration.type||"ClassDeclaration"===e.declaration.type)this.checkDuplicateExports(e,e.declaration.id.name);else if("VariableDeclaration"===e.declaration.type)for(var u=e.declaration.declarations,l=Array.isArray(u),c=0,u=l?u:u[Symbol.iterator]();;){var p;if(l){if(c>=u.length)break;p=u[c++]}else{if(c=u.next(),c.done)break;p=c.value}var h=p;this.checkDeclaration(h.id)}if(this.state.decorators.length){var f=e.declaration&&("ClassDeclaration"===e.declaration.type||"ClassExpression"===e.declaration.type);e.declaration&&f||this.raise(e.start,"You can only use decorators on an export when exporting a class"),this.takeDecorators(e.declaration)}},H.checkDeclaration=function(e){if("ObjectPattern"===e.type)for(var t=e.properties,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;this.checkDeclaration(s)}else if("ArrayPattern"===e.type)for(var a=e.elements,o=Array.isArray(a),u=0,a=o?a:a[Symbol.iterator]();;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;c&&this.checkDeclaration(c)}else"ObjectProperty"===e.type?this.checkDeclaration(e.value):"RestElement"===e.type||"RestProperty"===e.type?this.checkDeclaration(e.argument):"Identifier"===e.type&&this.checkDuplicateExports(e,e.name)},H.checkDuplicateExports=function(e,t){this.state.exportedIdentifiers.indexOf(t)>-1&&this.raiseDuplicateExportError(e,t),this.state.exportedIdentifiers.push(t)},H.raiseDuplicateExportError=function(e,t){this.raise(e.start,"default"===t?"Only one default export allowed per module.":"`"+t+"` has already been exported. Exported identifiers must be unique.")},H.parseExportSpecifiers=function(){var e=[],t=!0,r=void 0;for(this.expect(j.braceL);!this.eat(j.braceR);){if(t)t=!1;else if(this.expect(j.comma),this.eat(j.braceR))break;var n=this.match(j._default);n&&!r&&(r=!0);var i=this.startNode();i.local=this.parseIdentifier(n),i.exported=this.eatContextual("as")?this.parseIdentifier(!0):i.local.__clone(),e.push(this.finishNode(i,"ExportSpecifier"))}return r&&!this.isContextual("from")&&this.unexpected(),e},H.parseImport=function(e){return this.eat(j._import),this.match(j.string)?(e.specifiers=[],e.source=this.parseExprAtom()):(e.specifiers=[],this.parseImportSpecifiers(e),this.expectContextual("from"),e.source=this.match(j.string)?this.parseExprAtom():this.unexpected()),this.semicolon(),this.finishNode(e,"ImportDeclaration")},H.parseImportSpecifiers=function(e){var t=!0;if(this.match(j.name)){var r=this.state.start,n=this.state.startLoc;if(e.specifiers.push(this.parseImportSpecifierDefault(this.parseIdentifier(),r,n)),!this.eat(j.comma))return}if(this.match(j.star)){var i=this.startNode();return this.next(),this.expectContextual("as"),i.local=this.parseIdentifier(),this.checkLVal(i.local,!0,void 0,"import namespace specifier"),void e.specifiers.push(this.finishNode(i,"ImportNamespaceSpecifier"))}for(this.expect(j.braceL);!this.eat(j.braceR);){if(t)t=!1;else if(this.eat(j.colon)&&this.unexpected(null,"ES2015 named imports do not destructure. Use another statement for destructuring after the import."),this.expect(j.comma),this.eat(j.braceR))break;this.parseImportSpecifier(e)}},H.parseImportSpecifier=function(e){var t=this.startNode();t.imported=this.parseIdentifier(!0),this.eatContextual("as")?t.local=this.parseIdentifier():(this.checkReservedWord(t.imported.name,t.start,!0,!0),t.local=t.imported.__clone()),this.checkLVal(t.local,!0,void 0,"import specifier"),e.specifiers.push(this.finishNode(t,"ImportSpecifier"))},H.parseImportSpecifierDefault=function(e,t,r){var n=this.startNodeAt(t,r);return n.local=e,this.checkLVal(n.local,!0,void 0,"default import specifier"),this.finishNode(n,"ImportDefaultSpecifier")};var ee=z.prototype;ee.toAssignable=function(e,t,r){if(e)switch(e.type){case"Identifier":case"ObjectPattern":case"ArrayPattern":case"AssignmentPattern":break;case"ObjectExpression":e.type="ObjectPattern";for(var n=e.properties,i=Array.isArray(n),s=0,n=i?n:n[Symbol.iterator]();;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;"ObjectMethod"===o.type?"get"===o.kind||"set"===o.kind?this.raise(o.key.start,"Object pattern can't contain getter or setter"):this.raise(o.key.start,"Object pattern can't contain methods"):this.toAssignable(o,t,"object destructuring pattern")}break;case"ObjectProperty":this.toAssignable(e.value,t,r);break;case"SpreadProperty":e.type="RestProperty";break;case"ArrayExpression":e.type="ArrayPattern",this.toAssignableList(e.elements,t,r);break;case"AssignmentExpression":"="===e.operator?(e.type="AssignmentPattern",delete e.operator):this.raise(e.left.end,"Only '=' operator can be used for specifying default value.");break;case"MemberExpression":if(!t)break;default:var u="Invalid left-hand side"+(r?" in "+r:"expression");this.raise(e.start,u)}return e},ee.toAssignableList=function(e,t,r){var n=e.length;if(n){var i=e[n-1];if(i&&"RestElement"===i.type)--n;else if(i&&"SpreadElement"===i.type){i.type="RestElement";var s=i.argument;this.toAssignable(s,t,r),"Identifier"!==s.type&&"MemberExpression"!==s.type&&"ArrayPattern"!==s.type&&this.unexpected(s.start),--n}}for(var a=0;a=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u +;"ObjectProperty"===l.type&&(l=l.value),this.checkLVal(l,t,r,"object destructuring pattern")}break;case"ArrayPattern":for(var c=e.elements,p=Array.isArray(c),h=0,c=p?c:c[Symbol.iterator]();;){var f;if(p){if(h>=c.length)break;f=c[h++]}else{if(h=c.next(),h.done)break;f=h.value}var d=f;d&&this.checkLVal(d,t,r,"array destructuring pattern")}break;case"AssignmentPattern":this.checkLVal(e.left,t,r,"assignment pattern");break;case"RestProperty":this.checkLVal(e.argument,t,r,"rest property");break;case"RestElement":this.checkLVal(e.argument,t,r,"rest element");break;default:var m=(t?"Binding invalid":"Invalid")+" left-hand side"+(n?" in "+n:"expression");this.raise(e.start,m)}};var te=z.prototype;te.checkPropClash=function(e,t){if(!e.computed&&!e.kind){var r=e.key;"__proto__"===("Identifier"===r.type?r.name:String(r.value))&&(t.proto&&this.raise(r.start,"Redefinition of __proto__ property"),t.proto=!0)}},te.getExpression=function(){this.nextToken();var e=this.parseExpression();return this.match(j.eof)||this.unexpected(),e},te.parseExpression=function(e,t){var r=this.state.start,n=this.state.startLoc,i=this.parseMaybeAssign(e,t);if(this.match(j.comma)){var s=this.startNodeAt(r,n);for(s.expressions=[i];this.eat(j.comma);)s.expressions.push(this.parseMaybeAssign(e,t));return this.toReferencedList(s.expressions),this.finishNode(s,"SequenceExpression")}return i},te.parseMaybeAssign=function(e,t,r,n){var i=this.state.start,s=this.state.startLoc;if(this.match(j._yield)&&this.state.inGenerator){var a=this.parseYield();return r&&(a=r.call(this,a,i,s)),a}var o=void 0;t?o=!1:(t={start:0},o=!0),(this.match(j.parenL)||this.match(j.name))&&(this.state.potentialArrowAt=this.state.start);var u=this.parseMaybeConditional(e,t,n);if(r&&(u=r.call(this,u,i,s)),this.state.type.isAssign){var l=this.startNodeAt(i,s);if(l.operator=this.state.value,l.left=this.match(j.eq)?this.toAssignable(u,void 0,"assignment expression"):u,t.start=0,this.checkLVal(u,void 0,void 0,"assignment expression"),u.extra&&u.extra.parenthesized){var c=void 0;"ObjectPattern"===u.type?c="`({a}) = 0` use `({a} = 0)`":"ArrayPattern"===u.type&&(c="`([a]) = 0` use `([a] = 0)`"),c&&this.raise(u.start,"You're trying to assign to a parenthesized expression, eg. instead of "+c)}return this.next(),l.right=this.parseMaybeAssign(e),this.finishNode(l,"AssignmentExpression")}return o&&t.start&&this.unexpected(t.start),u},te.parseMaybeConditional=function(e,t,r){var n=this.state.start,i=this.state.startLoc,s=this.parseExprOps(e,t);return t&&t.start?s:this.parseConditional(s,e,n,i,r)},te.parseConditional=function(e,t,r,n){if(this.eat(j.question)){var i=this.startNodeAt(r,n);return i.test=e,i.consequent=this.parseMaybeAssign(),this.expect(j.colon),i.alternate=this.parseMaybeAssign(t),this.finishNode(i,"ConditionalExpression")}return e},te.parseExprOps=function(e,t){var r=this.state.start,n=this.state.startLoc,i=this.parseMaybeUnary(t);return t&&t.start?i:this.parseExprOp(i,r,n,-1,e)},te.parseExprOp=function(e,t,r,n,i){var s=this.state.type.binop;if(!(null==s||i&&this.match(j._in))&&s>n){var a=this.startNodeAt(t,r);a.left=e,a.operator=this.state.value,"**"!==a.operator||"UnaryExpression"!==e.type||!e.extra||e.extra.parenthesizedArgument||e.extra.parenthesized||this.raise(e.argument.start,"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.");var o=this.state.type;this.next();var u=this.state.start,l=this.state.startLoc;return a.right=this.parseExprOp(this.parseMaybeUnary(),u,l,o.rightAssociative?s-1:s,i),this.finishNode(a,o===j.logicalOR||o===j.logicalAND?"LogicalExpression":"BinaryExpression"),this.parseExprOp(a,t,r,n,i)}return e},te.parseMaybeUnary=function(e){if(this.state.type.prefix){var t=this.startNode(),r=this.match(j.incDec);t.operator=this.state.value,t.prefix=!0,this.next();var n=this.state.type;return t.argument=this.parseMaybeUnary(),this.addExtra(t,"parenthesizedArgument",!(n!==j.parenL||t.argument.extra&&t.argument.extra.parenthesized)),e&&e.start&&this.unexpected(e.start),r?this.checkLVal(t.argument,void 0,void 0,"prefix operation"):this.state.strict&&"delete"===t.operator&&"Identifier"===t.argument.type&&this.raise(t.start,"Deleting local variable in strict mode"),this.finishNode(t,r?"UpdateExpression":"UnaryExpression")}var i=this.state.start,s=this.state.startLoc,a=this.parseExprSubscripts(e);if(e&&e.start)return a;for(;this.state.type.postfix&&!this.canInsertSemicolon();){var o=this.startNodeAt(i,s);o.operator=this.state.value,o.prefix=!1,o.argument=a,this.checkLVal(a,void 0,void 0,"postfix operation"),this.next(),a=this.finishNode(o,"UpdateExpression")}return a},te.parseExprSubscripts=function(e){var t=this.state.start,r=this.state.startLoc,n=this.state.potentialArrowAt,i=this.parseExprAtom(e);return"ArrowFunctionExpression"===i.type&&i.start===n?i:e&&e.start?i:this.parseSubscripts(i,t,r)},te.parseSubscripts=function(e,t,r,n){for(;;){if(!n&&this.eat(j.doubleColon)){var i=this.startNodeAt(t,r);return i.object=e,i.callee=this.parseNoCallExpr(),this.parseSubscripts(this.finishNode(i,"BindExpression"),t,r,n)}if(this.eat(j.dot)){var s=this.startNodeAt(t,r);s.object=e,s.property=this.parseIdentifier(!0),s.computed=!1,e=this.finishNode(s,"MemberExpression")}else if(this.eat(j.bracketL)){var a=this.startNodeAt(t,r);a.object=e,a.property=this.parseExpression(),a.computed=!0,this.expect(j.bracketR),e=this.finishNode(a,"MemberExpression")}else if(!n&&this.match(j.parenL)){var o=this.state.potentialArrowAt===e.start&&"Identifier"===e.type&&"async"===e.name&&!this.canInsertSemicolon();this.next();var u=this.startNodeAt(t,r);if(u.callee=e,u.arguments=this.parseCallExpressionArguments(j.parenR,o),"Import"===u.callee.type&&1!==u.arguments.length&&this.raise(u.start,"import() requires exactly one argument"),e=this.finishNode(u,"CallExpression"),o&&this.shouldParseAsyncArrow())return this.parseAsyncArrowFromCallExpression(this.startNodeAt(t,r),u);this.toReferencedList(u.arguments)}else{if(!this.match(j.backQuote))return e;var l=this.startNodeAt(t,r);l.tag=e,l.quasi=this.parseTemplate(),e=this.finishNode(l,"TaggedTemplateExpression")}}},te.parseCallExpressionArguments=function(e,t){for(var r=[],n=void 0,i=!0;!this.eat(e);){if(i)i=!1;else if(this.expect(j.comma),this.eat(e))break;this.match(j.parenL)&&!n&&(n=this.state.start),r.push(this.parseExprListItem(!1,t?{start:0}:void 0,t?{start:0}:void 0))}return t&&n&&this.shouldParseAsyncArrow()&&this.unexpected(),r},te.shouldParseAsyncArrow=function(){return this.match(j.arrow)},te.parseAsyncArrowFromCallExpression=function(e,t){return this.expect(j.arrow),this.parseArrowExpression(e,t.arguments,!0)},te.parseNoCallExpr=function(){var e=this.state.start,t=this.state.startLoc;return this.parseSubscripts(this.parseExprAtom(),e,t,!0)},te.parseExprAtom=function(e){var t=this.state.potentialArrowAt===this.state.start,r=void 0;switch(this.state.type){case j._super:return this.state.inMethod||this.options.allowSuperOutsideMethod||this.raise(this.state.start,"'super' outside of function or class"),r=this.startNode(),this.next(),this.match(j.parenL)||this.match(j.bracketL)||this.match(j.dot)||this.unexpected(),this.match(j.parenL)&&"constructor"!==this.state.inMethod&&!this.options.allowSuperOutsideMethod&&this.raise(r.start,"super() outside of class constructor"),this.finishNode(r,"Super");case j._import:return this.hasPlugin("dynamicImport")||this.unexpected(),r=this.startNode(),this.next(),this.match(j.parenL)||this.unexpected(null,j.parenL),this.finishNode(r,"Import");case j._this:return r=this.startNode(),this.next(),this.finishNode(r,"ThisExpression");case j._yield:this.state.inGenerator&&this.unexpected();case j.name:r=this.startNode();var n="await"===this.state.value&&this.state.inAsync,i=this.shouldAllowYieldIdentifier(),s=this.parseIdentifier(n||i);if("await"===s.name){if(this.state.inAsync||this.inModule)return this.parseAwait(r)}else{if("async"===s.name&&this.match(j._function)&&!this.canInsertSemicolon())return this.next(),this.parseFunction(r,!1,!1,!0);if(t&&"async"===s.name&&this.match(j.name)){var a=[this.parseIdentifier()];return this.expect(j.arrow),this.parseArrowExpression(r,a,!0)}}return t&&!this.canInsertSemicolon()&&this.eat(j.arrow)?this.parseArrowExpression(r,[s]):s;case j._do:if(this.hasPlugin("doExpressions")){var o=this.startNode();this.next();var u=this.state.inFunction,l=this.state.labels;return this.state.labels=[],this.state.inFunction=!1,o.body=this.parseBlock(!1,!0),this.state.inFunction=u,this.state.labels=l,this.finishNode(o,"DoExpression")}case j.regexp:var c=this.state.value;return r=this.parseLiteral(c.value,"RegExpLiteral"),r.pattern=c.pattern,r.flags=c.flags,r;case j.num:return this.parseLiteral(this.state.value,"NumericLiteral");case j.string:return this.parseLiteral(this.state.value,"StringLiteral");case j._null:return r=this.startNode(),this.next(),this.finishNode(r,"NullLiteral");case j._true:case j._false:return r=this.startNode(),r.value=this.match(j._true),this.next(),this.finishNode(r,"BooleanLiteral");case j.parenL:return this.parseParenAndDistinguishExpression(null,null,t);case j.bracketL:return r=this.startNode(),this.next(),r.elements=this.parseExprList(j.bracketR,!0,e),this.toReferencedList(r.elements),this.finishNode(r,"ArrayExpression");case j.braceL:return this.parseObj(!1,e);case j._function:return this.parseFunctionExpression();case j.at:this.parseDecorators();case j._class:return r=this.startNode(),this.takeDecorators(r),this.parseClass(r,!1);case j._new:return this.parseNew();case j.backQuote:return this.parseTemplate();case j.doubleColon:r=this.startNode(),this.next(),r.object=null;var p=r.callee=this.parseNoCallExpr();if("MemberExpression"===p.type)return this.finishNode(r,"BindExpression");this.raise(p.start,"Binding should be performed on object property.");default:this.unexpected()}},te.parseFunctionExpression=function(){var e=this.startNode(),t=this.parseIdentifier(!0);return this.state.inGenerator&&this.eat(j.dot)&&this.hasPlugin("functionSent")?this.parseMetaProperty(e,t,"sent"):this.parseFunction(e,!1)},te.parseMetaProperty=function(e,t,r){return e.meta=t,e.property=this.parseIdentifier(!0),e.property.name!==r&&this.raise(e.property.start,"The only valid meta property for new is "+t.name+"."+r),this.finishNode(e,"MetaProperty")},te.parseLiteral=function(e,t,r,n){r=r||this.state.start,n=n||this.state.startLoc;var i=this.startNodeAt(r,n);return this.addExtra(i,"rawValue",e),this.addExtra(i,"raw",this.input.slice(r,this.state.end)),i.value=e,this.next(),this.finishNode(i,t)},te.parseParenExpression=function(){this.expect(j.parenL);var e=this.parseExpression();return this.expect(j.parenR),e},te.parseParenAndDistinguishExpression=function(e,t,r){e=e||this.state.start,t=t||this.state.startLoc;var n=void 0;this.expect(j.parenL);for(var i=this.state.start,s=this.state.startLoc,a=[],o={start:0},u={start:0},l=!0,c=void 0,p=void 0;!this.match(j.parenR);){if(l)l=!1;else if(this.expect(j.comma,u.start||null),this.match(j.parenR)){p=this.state.start;break}if(this.match(j.ellipsis)){var h=this.state.start,f=this.state.startLoc;c=this.state.start,a.push(this.parseParenItem(this.parseRest(),f,h));break}a.push(this.parseMaybeAssign(!1,o,this.parseParenItem,u))}var d=this.state.start,m=this.state.startLoc;this.expect(j.parenR);var y=this.startNodeAt(e,t);if(r&&this.shouldParseArrow()&&(y=this.parseArrow(y))){for(var g=a,b=Array.isArray(g),v=0,g=b?g:g[Symbol.iterator]();;){var x;if(b){if(v>=g.length)break;x=g[v++]}else{if(v=g.next(),v.done)break;x=v.value}var E=x;E.extra&&E.extra.parenthesized&&this.unexpected(E.extra.parenStart)}return this.parseArrowExpression(y,a)}return a.length||this.unexpected(this.state.lastTokStart),p&&this.unexpected(p),c&&this.unexpected(c),o.start&&this.unexpected(o.start),u.start&&this.unexpected(u.start),a.length>1?(n=this.startNodeAt(i,s),n.expressions=a,this.toReferencedList(n.expressions),this.finishNodeAt(n,"SequenceExpression",d,m)):n=a[0],this.addExtra(n,"parenthesized",!0),this.addExtra(n,"parenStart",e),n},te.shouldParseArrow=function(){return!this.canInsertSemicolon()},te.parseArrow=function(e){if(this.eat(j.arrow))return e},te.parseParenItem=function(e){return e},te.parseNew=function(){var e=this.startNode(),t=this.parseIdentifier(!0);return this.eat(j.dot)?this.parseMetaProperty(e,t,"target"):(e.callee=this.parseNoCallExpr(),this.eat(j.parenL)?(e.arguments=this.parseExprList(j.parenR),this.toReferencedList(e.arguments)):e.arguments=[],this.finishNode(e,"NewExpression"))},te.parseTemplateElement=function(){var e=this.startNode();return e.value={raw:this.input.slice(this.state.start,this.state.end).replace(/\r\n?/g,"\n"),cooked:this.state.value},this.next(),e.tail=this.match(j.backQuote),this.finishNode(e,"TemplateElement")},te.parseTemplate=function(){var e=this.startNode();this.next(),e.expressions=[];var t=this.parseTemplateElement();for(e.quasis=[t];!t.tail;)this.expect(j.dollarBraceL),e.expressions.push(this.parseExpression()),this.expect(j.braceR),e.quasis.push(t=this.parseTemplateElement());return this.next(),this.finishNode(e,"TemplateLiteral")},te.parseObj=function(e,t){var r=[],n=Object.create(null),i=!0,s=this.startNode();s.properties=[],this.next();for(var a=null;!this.eat(j.braceR);){if(i)i=!1;else if(this.expect(j.comma),this.eat(j.braceR))break;for(;this.match(j.at);)r.push(this.parseDecorator());var o=this.startNode(),u=!1,l=!1,c=void 0,p=void 0;if(r.length&&(o.decorators=r,r=[]),this.hasPlugin("objectRestSpread")&&this.match(j.ellipsis)){if(o=this.parseSpread(e?{start:0}:void 0),o.type=e?"RestProperty":"SpreadProperty",e&&this.toAssignable(o.argument,!0,"object pattern"),s.properties.push(o),!e)continue;var h=this.state.start;if(null===a){if(this.eat(j.braceR))break;if(this.match(j.comma)&&this.lookahead().type===j.braceR)continue;a=h;continue}this.unexpected(a,"Cannot have multiple rest elements when destructuring")}if(o.method=!1,o.shorthand=!1,(e||t)&&(c=this.state.start,p=this.state.startLoc),e||(u=this.eat(j.star)),!e&&this.isContextual("async")){u&&this.unexpected();var f=this.parseIdentifier();this.match(j.colon)||this.match(j.parenL)||this.match(j.braceR)||this.match(j.eq)||this.match(j.comma)?(o.key=f,o.computed=!1):(l=!0,this.hasPlugin("asyncGenerators")&&(u=this.eat(j.star)),this.parsePropertyName(o))}else this.parsePropertyName(o);this.parseObjPropValue(o,c,p,u,l,e,t),this.checkPropClash(o,n),o.shorthand&&this.addExtra(o,"shorthand",!0),s.properties.push(o)}return null!==a&&this.unexpected(a,"The rest element has to be the last element when destructuring"),r.length&&this.raise(this.state.start,"You have trailing decorators with no property"),this.finishNode(s,e?"ObjectPattern":"ObjectExpression")},te.isGetterOrSetterMethod=function(e,t){return!t&&!e.computed&&"Identifier"===e.key.type&&("get"===e.key.name||"set"===e.key.name)&&(this.match(j.string)||this.match(j.num)||this.match(j.bracketL)||this.match(j.name)||this.state.type.keyword)},te.checkGetterSetterParamCount=function(e){var t="get"===e.kind?0:1;if(e.params.length!==t){var r=e.start;"get"===e.kind?this.raise(r,"getter should have no params"):this.raise(r,"setter should have exactly one param")}},te.parseObjectMethod=function(e,t,r,n){return r||t||this.match(j.parenL)?(n&&this.unexpected(),e.kind="method",e.method=!0,this.parseMethod(e,t,r),this.finishNode(e,"ObjectMethod")):this.isGetterOrSetterMethod(e,n)?((t||r)&&this.unexpected(),e.kind=e.key.name,this.parsePropertyName(e),this.parseMethod(e),this.checkGetterSetterParamCount(e),this.finishNode(e,"ObjectMethod")):void 0},te.parseObjectProperty=function(e,t,r,n,i){return this.eat(j.colon)?(e.value=n?this.parseMaybeDefault(this.state.start,this.state.startLoc):this.parseMaybeAssign(!1,i),this.finishNode(e,"ObjectProperty")):e.computed||"Identifier"!==e.key.type?void 0:(n?(this.checkReservedWord(e.key.name,e.key.start,!0,!0),e.value=this.parseMaybeDefault(t,r,e.key.__clone())):this.match(j.eq)&&i?(i.start||(i.start=this.state.start),e.value=this.parseMaybeDefault(t,r,e.key.__clone())):e.value=e.key.__clone(),e.shorthand=!0,this.finishNode(e,"ObjectProperty"))},te.parseObjPropValue=function(e,t,r,n,i,s,a){var o=this.parseObjectMethod(e,n,i,s)||this.parseObjectProperty(e,t,r,s,a);return o||this.unexpected(),o},te.parsePropertyName=function(e){if(this.eat(j.bracketL))e.computed=!0,e.key=this.parseMaybeAssign(),this.expect(j.bracketR);else{e.computed=!1;var t=this.state.inPropertyName;this.state.inPropertyName=!0,e.key=this.match(j.num)||this.match(j.string)?this.parseExprAtom():this.parseIdentifier(!0),this.state.inPropertyName=t}return e.key},te.initFunction=function(e,t){e.id=null,e.generator=!1,e.expression=!1,e.async=!!t},te.parseMethod=function(e,t,r){var n=this.state.inMethod;return this.state.inMethod=e.kind||!0,this.initFunction(e,r),this.expect(j.parenL),e.params=this.parseBindingList(j.parenR),e.generator=!!t,this.parseFunctionBody(e),this.state.inMethod=n,e},te.parseArrowExpression=function(e,t,r){return this.initFunction(e,r),e.params=this.toAssignableList(t,!0,"arrow function parameters"),this.parseFunctionBody(e,!0),this.finishNode(e,"ArrowFunctionExpression")},te.isStrictBody=function(e,t){if(!t&&e.body.directives.length)for(var r=e.body.directives,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if("use strict"===a.value.value)return!0}return!1},te.parseFunctionBody=function(e,t){var r=t&&!this.match(j.braceL),n=this.state.inAsync;if(this.state.inAsync=e.async,r)e.body=this.parseMaybeAssign(),e.expression=!0;else{var i=this.state.inFunction,s=this.state.inGenerator,a=this.state.labels;this.state.inFunction=!0,this.state.inGenerator=e.generator,this.state.labels=[],e.body=this.parseBlock(!0),e.expression=!1,this.state.inFunction=i,this.state.inGenerator=s,this.state.labels=a}this.state.inAsync=n;var o=this.isStrictBody(e,r),u=this.state.strict||t||o;if(o&&e.id&&"Identifier"===e.id.type&&"yield"===e.id.name&&this.raise(e.id.start,"Binding yield in strict mode"),u){var l=Object.create(null),c=this.state.strict;o&&(this.state.strict=!0),e.id&&this.checkLVal(e.id,!0,void 0,"function name");for(var p=e.params,h=Array.isArray(p),f=0,p=h?p:p[Symbol.iterator]();;){var d;if(h){if(f>=p.length)break;d=p[f++]}else{if(f=p.next(),f.done)break;d=f.value}var m=d;o&&"Identifier"!==m.type&&this.raise(m.start,"Non-simple parameter in strict mode"),this.checkLVal(m,!0,l,"function parameter list")}this.state.strict=c}},te.parseExprList=function(e,t,r){for(var n=[],i=!0;!this.eat(e);){if(i)i=!1;else if(this.expect(j.comma),this.eat(e))break;n.push(this.parseExprListItem(t,r))}return n},te.parseExprListItem=function(e,t,r){return e&&this.match(j.comma)?null:this.match(j.ellipsis)?this.parseSpread(t):this.parseMaybeAssign(!1,t,this.parseParenItem,r)},te.parseIdentifier=function(e){var t=this.startNode();return e||this.checkReservedWord(this.state.value,this.state.start,!!this.state.type.keyword,!1),this.match(j.name)?t.name=this.state.value:this.state.type.keyword?t.name=this.state.type.keyword:this.unexpected(),!e&&"await"===t.name&&this.state.inAsync&&this.raise(t.start,"invalid use of await inside of an async function"),t.loc.identifierName=t.name,this.next(),this.finishNode(t,"Identifier")},te.checkReservedWord=function(e,t,r,n){(this.isReservedWord(e)||r&&this.isKeyword(e))&&this.raise(t,e+" is a reserved word"),this.state.strict&&(g.strict(e)||n&&g.strictBind(e))&&this.raise(t,e+" is a reserved word in strict mode")},te.parseAwait=function(e){return this.state.inAsync||this.unexpected(),this.match(j.star)&&this.raise(e.start,"await* has been removed from the async functions proposal. Use Promise.all() instead."),e.argument=this.parseMaybeUnary(),this.finishNode(e,"AwaitExpression")},te.parseYield=function(){var e=this.startNode();return this.next(),this.match(j.semi)||this.canInsertSemicolon()||!this.match(j.star)&&!this.state.type.startsExpr?(e.delegate=!1,e.argument=null):(e.delegate=this.eat(j.star),e.argument=this.parseMaybeAssign()),this.finishNode(e,"YieldExpression")};var re=z.prototype,ne=["leadingComments","trailingComments","innerComments"],ie=function(){function e(t,r,n){w(this,e),this.type="",this.start=t,this.end=0,this.loc=new q(r),n&&(this.loc.filename=n)}return e.prototype.__clone=function(){var t=new e;for(var r in this)ne.indexOf(r)<0&&(t[r]=this[r]);return t},e}();re.startNode=function(){return new ie(this.state.start,this.state.startLoc,this.filename)},re.startNodeAt=function(e,t){return new ie(e,t,this.filename)},re.finishNode=function(e,t){return p.call(this,e,t,this.state.lastTokEnd,this.state.lastTokEndLoc)},re.finishNodeAt=function(e,t,r,n){return p.call(this,e,t,r,n)},z.prototype.raise=function(e,t){var r=l(this.input,e);t+=" ("+r.line+":"+r.column+")";var n=new SyntaxError(t);throw n.pos=e,n.loc=r,n};var se=z.prototype;se.addComment=function(e){this.filename&&(e.loc.filename=this.filename),this.state.trailingComments.push(e),this.state.leadingComments.push(e)},se.processComment=function(e){if(!("Program"===e.type&&e.body.length>0)){var t=this.state.commentStack,r=void 0,n=void 0,i=void 0,s=void 0;if(this.state.trailingComments.length>0)this.state.trailingComments[0].start>=e.end?(n=this.state.trailingComments,this.state.trailingComments=[]):this.state.trailingComments.length=0;else{var a=h(t);t.length>0&&a.trailingComments&&a.trailingComments[0].start>=e.end&&(n=a.trailingComments,a.trailingComments=null)}for(;t.length>0&&h(t).start>=e.start;)r=t.pop();if(r){if(r.leadingComments)if(r!==e&&h(r.leadingComments).end<=e.start)e.leadingComments=r.leadingComments,r.leadingComments=null;else for(i=r.leadingComments.length-2;i>=0;--i)if(r.leadingComments[i].end<=e.start){e.leadingComments=r.leadingComments.splice(0,i+1);break}}else if(this.state.leadingComments.length>0)if(h(this.state.leadingComments).end<=e.start){if(this.state.commentPreviousNode)for(s=0;s0&&(e.leadingComments=this.state.leadingComments,this.state.leadingComments=[])}else{for(i=0;ie.start);i++);e.leadingComments=this.state.leadingComments.slice(0,i),0===e.leadingComments.length&&(e.leadingComments=null),n=this.state.leadingComments.slice(i),0===n.length&&(n=null)}this.state.commentPreviousNode=e,n&&(n.length&&n[0].start>=e.start&&h(n).end<=e.end?e.innerComments=n:e.trailingComments=n),t.push(e)}};var ae=z.prototype;ae.estreeParseRegExpLiteral=function(e){var t=e.pattern,r=e.flags,n=null;try{n=new RegExp(t,r)}catch(e){}var i=this.estreeParseLiteral(n);return i.regex={pattern:t,flags:r},i},ae.estreeParseLiteral=function(e){return this.parseLiteral(e,"Literal")},ae.directiveToStmt=function(e){var t=e.value,r=this.startNodeAt(e.start,e.loc.start),n=this.startNodeAt(t.start,t.loc.start);return n.value=t.value,n.raw=t.extra.raw,r.expression=this.finishNodeAt(n,"Literal",t.end,t.loc.end),r.directive=t.extra.raw.slice(1,-1),this.finishNodeAt(r,"ExpressionStatement",e.end,e.loc.end)};var oe=function(e){e.extend("checkDeclaration",function(e){return function(t){f(t)?this.checkDeclaration(t.value):e.call(this,t)}}),e.extend("checkGetterSetterParamCount",function(){return function(e){var t="get"===e.kind?0:1;if(e.value.params.length!==t){var r=e.start;"get"===e.kind?this.raise(r,"getter should have no params"):this.raise(r,"setter should have exactly one param")}}}),e.extend("checkLVal",function(e){return function(t,r,n){var i=this;switch(t.type){case"ObjectPattern":t.properties.forEach(function(e){i.checkLVal("Property"===e.type?e.value:e,r,n,"object destructuring pattern")});break;default:for(var s=arguments.length,a=Array(s>3?s-3:0),o=3;o0)for(var r=e.body.body,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if("ExpressionStatement"!==a.type||"Literal"!==a.expression.type)break;if("use strict"===a.expression.value)return!0}return!1}}),e.extend("isValidDirective",function(){return function(e){return!("ExpressionStatement"!==e.type||"Literal"!==e.expression.type||"string"!=typeof e.expression.value||e.expression.extra&&e.expression.extra.parenthesized)}}),e.extend("parseBlockBody",function(e){return function(t){for(var r=this,n=arguments.length,i=Array(n>1?n-1:0),s=1;s1?r-1:0),i=1;i1?n-1:0),s=1;s2?n-2:0),s=2;s=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;"get"===c.kind||"set"===c.kind?this.raise(c.key.start,"Object pattern can't contain getter or setter"):c.method?this.raise(c.key.start,"Object pattern can't contain methods"):this.toAssignable(c,r,"object destructuring pattern")}return t}return e.call.apply(e,[this,t,r].concat(i))}})},ue=["any","mixed","empty","bool","boolean","number","string","void","null"],le=z.prototype;le.flowParseTypeInitialiser=function(e){var t=this.state.inType;this.state.inType=!0,this.expect(e||j.colon);var r=this.flowParseType();return this.state.inType=t,r},le.flowParsePredicate=function(){var e=this.startNode(),t=this.state.startLoc,r=this.state.start;this.expect(j.modulo);var n=this.state.startLoc;return this.expectContextual("checks"),t.line===n.line&&t.column===n.column-1||this.raise(r,"Spaces between ´%´ and ´checks´ are not allowed here."),this.eat(j.parenL)?(e.expression=this.parseExpression(),this.expect(j.parenR),this.finishNode(e,"DeclaredPredicate")):this.finishNode(e,"InferredPredicate")},le.flowParseTypeAndPredicateInitialiser=function(){var e=this.state.inType;this.state.inType=!0,this.expect(j.colon);var t=null,r=null;return this.match(j.modulo)?(this.state.inType=e,r=this.flowParsePredicate()):(t=this.flowParseType(),this.state.inType=e,this.match(j.modulo)&&(r=this.flowParsePredicate())),[t,r]},le.flowParseDeclareClass=function(e){return this.next(),this.flowParseInterfaceish(e,!0),this.finishNode(e,"DeclareClass")},le.flowParseDeclareFunction=function(e){this.next();var t=e.id=this.parseIdentifier(),r=this.startNode(),n=this.startNode();this.isRelational("<")?r.typeParameters=this.flowParseTypeParameterDeclaration():r.typeParameters=null,this.expect(j.parenL);var i=this.flowParseFunctionTypeParams();r.params=i.params,r.rest=i.rest,this.expect(j.parenR);var s=null,a=this.flowParseTypeAndPredicateInitialiser();return r.returnType=a[0],s=a[1],n.typeAnnotation=this.finishNode(r,"FunctionTypeAnnotation"),n.predicate=s,t.typeAnnotation=this.finishNode(n,"TypeAnnotation"),this.finishNode(t,t.type),this.semicolon(),this.finishNode(e,"DeclareFunction")},le.flowParseDeclare=function(e){return this.match(j._class)?this.flowParseDeclareClass(e):this.match(j._function)?this.flowParseDeclareFunction(e):this.match(j._var)?this.flowParseDeclareVariable(e):this.isContextual("module")?this.lookahead().type===j.dot?this.flowParseDeclareModuleExports(e):this.flowParseDeclareModule(e):this.isContextual("type")?this.flowParseDeclareTypeAlias(e):this.isContextual("interface")?this.flowParseDeclareInterface(e):void this.unexpected()},le.flowParseDeclareVariable=function(e){return this.next(),e.id=this.flowParseTypeAnnotatableIdentifier(),this.semicolon(),this.finishNode(e,"DeclareVariable")},le.flowParseDeclareModule=function(e){this.next(),this.match(j.string)?e.id=this.parseExprAtom():e.id=this.parseIdentifier();var t=e.body=this.startNode(),r=t.body=[];for(this.expect(j.braceL);!this.match(j.braceR);){var n=this.startNode();if(this.match(j._import)){var i=this.lookahead();"type"!==i.value&&"typeof"!==i.value&&this.unexpected(null,"Imports within a `declare module` body must always be `import type` or `import typeof`"),this.parseImport(n)}else this.expectContextual("declare","Only declares and type imports are allowed inside declare module"),n=this.flowParseDeclare(n,!0);r.push(n)}return this.expect(j.braceR),this.finishNode(t,"BlockStatement"),this.finishNode(e,"DeclareModule")},le.flowParseDeclareModuleExports=function(e){return this.expectContextual("module"),this.expect(j.dot),this.expectContextual("exports"),e.typeAnnotation=this.flowParseTypeAnnotation(),this.semicolon(),this.finishNode(e,"DeclareModuleExports")},le.flowParseDeclareTypeAlias=function(e){return this.next(),this.flowParseTypeAlias(e),this.finishNode(e,"DeclareTypeAlias")},le.flowParseDeclareInterface=function(e){return this.next(),this.flowParseInterfaceish(e),this.finishNode(e,"DeclareInterface")},le.flowParseInterfaceish=function(e,t){if(e.id=this.parseIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.extends=[],e.mixins=[],this.eat(j._extends))do{e.extends.push(this.flowParseInterfaceExtends())}while(this.eat(j.comma));if(this.isContextual("mixins")){this.next();do{e.mixins.push(this.flowParseInterfaceExtends())}while(this.eat(j.comma))}e.body=this.flowParseObjectType(t)},le.flowParseInterfaceExtends=function(){var e=this.startNode();return e.id=this.flowParseQualifiedTypeIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterInstantiation():e.typeParameters=null,this.finishNode(e,"InterfaceExtends")},le.flowParseInterface=function(e){return this.flowParseInterfaceish(e,!1),this.finishNode(e,"InterfaceDeclaration")},le.flowParseRestrictedIdentifier=function(e){ +return ue.indexOf(this.state.value)>-1&&this.raise(this.state.start,"Cannot overwrite primitive type "+this.state.value),this.parseIdentifier(e)},le.flowParseTypeAlias=function(e){return e.id=this.flowParseRestrictedIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.right=this.flowParseTypeInitialiser(j.eq),this.semicolon(),this.finishNode(e,"TypeAlias")},le.flowParseTypeParameter=function(){var e=this.startNode(),t=this.flowParseVariance(),r=this.flowParseTypeAnnotatableIdentifier();return e.name=r.name,e.variance=t,e.bound=r.typeAnnotation,this.match(j.eq)&&(this.eat(j.eq),e.default=this.flowParseType()),this.finishNode(e,"TypeParameter")},le.flowParseTypeParameterDeclaration=function(){var e=this.state.inType,t=this.startNode();t.params=[],this.state.inType=!0,this.isRelational("<")||this.match(j.jsxTagStart)?this.next():this.unexpected();do{t.params.push(this.flowParseTypeParameter()),this.isRelational(">")||this.expect(j.comma)}while(!this.isRelational(">"));return this.expectRelational(">"),this.state.inType=e,this.finishNode(t,"TypeParameterDeclaration")},le.flowParseTypeParameterInstantiation=function(){var e=this.startNode(),t=this.state.inType;for(e.params=[],this.state.inType=!0,this.expectRelational("<");!this.isRelational(">");)e.params.push(this.flowParseType()),this.isRelational(">")||this.expect(j.comma);return this.expectRelational(">"),this.state.inType=t,this.finishNode(e,"TypeParameterInstantiation")},le.flowParseObjectPropertyKey=function(){return this.match(j.num)||this.match(j.string)?this.parseExprAtom():this.parseIdentifier(!0)},le.flowParseObjectTypeIndexer=function(e,t,r){return e.static=t,this.expect(j.bracketL),this.lookahead().type===j.colon?(e.id=this.flowParseObjectPropertyKey(),e.key=this.flowParseTypeInitialiser()):(e.id=null,e.key=this.flowParseType()),this.expect(j.bracketR),e.value=this.flowParseTypeInitialiser(),e.variance=r,this.flowObjectTypeSemicolon(),this.finishNode(e,"ObjectTypeIndexer")},le.flowParseObjectTypeMethodish=function(e){for(e.params=[],e.rest=null,e.typeParameters=null,this.isRelational("<")&&(e.typeParameters=this.flowParseTypeParameterDeclaration()),this.expect(j.parenL);this.match(j.name);)e.params.push(this.flowParseFunctionTypeParam()),this.match(j.parenR)||this.expect(j.comma);return this.eat(j.ellipsis)&&(e.rest=this.flowParseFunctionTypeParam()),this.expect(j.parenR),e.returnType=this.flowParseTypeInitialiser(),this.finishNode(e,"FunctionTypeAnnotation")},le.flowParseObjectTypeMethod=function(e,t,r,n){var i=this.startNodeAt(e,t);return i.value=this.flowParseObjectTypeMethodish(this.startNodeAt(e,t)),i.static=r,i.key=n,i.optional=!1,this.flowObjectTypeSemicolon(),this.finishNode(i,"ObjectTypeProperty")},le.flowParseObjectTypeCallProperty=function(e,t){var r=this.startNode();return e.static=t,e.value=this.flowParseObjectTypeMethodish(r),this.flowObjectTypeSemicolon(),this.finishNode(e,"ObjectTypeCallProperty")},le.flowParseObjectType=function(e,t){var r=this.state.inType;this.state.inType=!0;var n=this.startNode(),i=void 0,s=void 0,a=!1;n.callProperties=[],n.properties=[],n.indexers=[];var o=void 0,u=void 0;for(t&&this.match(j.braceBarL)?(this.expect(j.braceBarL),o=j.braceBarR,u=!0):(this.expect(j.braceL),o=j.braceR,u=!1),n.exact=u;!this.match(o);){var l=!1,c=this.state.start,p=this.state.startLoc;i=this.startNode(),e&&this.isContextual("static")&&this.lookahead().type!==j.colon&&(this.next(),a=!0);var h=this.state.start,f=this.flowParseVariance();this.match(j.bracketL)?n.indexers.push(this.flowParseObjectTypeIndexer(i,a,f)):this.match(j.parenL)||this.isRelational("<")?(f&&this.unexpected(h),n.callProperties.push(this.flowParseObjectTypeCallProperty(i,a))):(s=this.flowParseObjectPropertyKey(),this.isRelational("<")||this.match(j.parenL)?(f&&this.unexpected(h),n.properties.push(this.flowParseObjectTypeMethod(c,p,a,s))):(this.eat(j.question)&&(l=!0),i.key=s,i.value=this.flowParseTypeInitialiser(),i.optional=l,i.static=a,i.variance=f,this.flowObjectTypeSemicolon(),n.properties.push(this.finishNode(i,"ObjectTypeProperty")))),a=!1}this.expect(o);var d=this.finishNode(n,"ObjectTypeAnnotation");return this.state.inType=r,d},le.flowObjectTypeSemicolon=function(){this.eat(j.semi)||this.eat(j.comma)||this.match(j.braceR)||this.match(j.braceBarR)||this.unexpected()},le.flowParseQualifiedTypeIdentifier=function(e,t,r){e=e||this.state.start,t=t||this.state.startLoc;for(var n=r||this.parseIdentifier();this.eat(j.dot);){var i=this.startNodeAt(e,t);i.qualification=n,i.id=this.parseIdentifier(),n=this.finishNode(i,"QualifiedTypeIdentifier")}return n},le.flowParseGenericType=function(e,t,r){var n=this.startNodeAt(e,t);return n.typeParameters=null,n.id=this.flowParseQualifiedTypeIdentifier(e,t,r),this.isRelational("<")&&(n.typeParameters=this.flowParseTypeParameterInstantiation()),this.finishNode(n,"GenericTypeAnnotation")},le.flowParseTypeofType=function(){var e=this.startNode();return this.expect(j._typeof),e.argument=this.flowParsePrimaryType(),this.finishNode(e,"TypeofTypeAnnotation")},le.flowParseTupleType=function(){var e=this.startNode();for(e.types=[],this.expect(j.bracketL);this.state.pos0&&void 0!==arguments[0]?arguments[0]:[],t={params:e,rest:null};!this.match(j.parenR)&&!this.match(j.ellipsis);)t.params.push(this.flowParseFunctionTypeParam()),this.match(j.parenR)||this.expect(j.comma);return this.eat(j.ellipsis)&&(t.rest=this.flowParseFunctionTypeParam()),t},le.flowIdentToTypeAnnotation=function(e,t,r,n){switch(n.name){case"any":return this.finishNode(r,"AnyTypeAnnotation");case"void":return this.finishNode(r,"VoidTypeAnnotation");case"bool":case"boolean":return this.finishNode(r,"BooleanTypeAnnotation");case"mixed":return this.finishNode(r,"MixedTypeAnnotation");case"empty":return this.finishNode(r,"EmptyTypeAnnotation");case"number":return this.finishNode(r,"NumberTypeAnnotation");case"string":return this.finishNode(r,"StringTypeAnnotation");default:return this.flowParseGenericType(e,t,n)}},le.flowParsePrimaryType=function(){var e=this.state.start,t=this.state.startLoc,r=this.startNode(),n=void 0,i=void 0,s=!1,a=this.state.noAnonFunctionType;switch(this.state.type){case j.name:return this.flowIdentToTypeAnnotation(e,t,r,this.parseIdentifier());case j.braceL:return this.flowParseObjectType(!1,!1);case j.braceBarL:return this.flowParseObjectType(!1,!0);case j.bracketL:return this.flowParseTupleType();case j.relational:if("<"===this.state.value)return r.typeParameters=this.flowParseTypeParameterDeclaration(),this.expect(j.parenL),n=this.flowParseFunctionTypeParams(),r.params=n.params,r.rest=n.rest,this.expect(j.parenR),this.expect(j.arrow),r.returnType=this.flowParseType(),this.finishNode(r,"FunctionTypeAnnotation");break;case j.parenL:if(this.next(),!this.match(j.parenR)&&!this.match(j.ellipsis))if(this.match(j.name)){var o=this.lookahead().type;s=o!==j.question&&o!==j.colon}else s=!0;if(s){if(this.state.noAnonFunctionType=!1,i=this.flowParseType(),this.state.noAnonFunctionType=a,this.state.noAnonFunctionType||!(this.match(j.comma)||this.match(j.parenR)&&this.lookahead().type===j.arrow))return this.expect(j.parenR),i;this.eat(j.comma)}return n=i?this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(i)]):this.flowParseFunctionTypeParams(),r.params=n.params,r.rest=n.rest,this.expect(j.parenR),this.expect(j.arrow),r.returnType=this.flowParseType(),r.typeParameters=null,this.finishNode(r,"FunctionTypeAnnotation");case j.string:return this.parseLiteral(this.state.value,"StringLiteralTypeAnnotation");case j._true:case j._false:return r.value=this.match(j._true),this.next(),this.finishNode(r,"BooleanLiteralTypeAnnotation");case j.plusMin:if("-"===this.state.value)return this.next(),this.match(j.num)||this.unexpected(null,"Unexpected token, expected number"),this.parseLiteral(-this.state.value,"NumericLiteralTypeAnnotation",r.start,r.loc.start);this.unexpected();case j.num:return this.parseLiteral(this.state.value,"NumericLiteralTypeAnnotation");case j._null:return r.value=this.match(j._null),this.next(),this.finishNode(r,"NullLiteralTypeAnnotation");case j._this:return r.value=this.match(j._this),this.next(),this.finishNode(r,"ThisTypeAnnotation");case j.star:return this.next(),this.finishNode(r,"ExistentialTypeParam");default:if("typeof"===this.state.type.keyword)return this.flowParseTypeofType()}this.unexpected()},le.flowParsePostfixType=function(){for(var e=this.state.start,t=this.state.startLoc,r=this.flowParsePrimaryType();!this.canInsertSemicolon()&&this.match(j.bracketL);){var n=this.startNodeAt(e,t);n.elementType=r,this.expect(j.bracketL),this.expect(j.bracketR),r=this.finishNode(n,"ArrayTypeAnnotation")}return r},le.flowParsePrefixType=function(){var e=this.startNode();return this.eat(j.question)?(e.typeAnnotation=this.flowParsePrefixType(),this.finishNode(e,"NullableTypeAnnotation")):this.flowParsePostfixType()},le.flowParseAnonFunctionWithoutParens=function(){var e=this.flowParsePrefixType();if(!this.state.noAnonFunctionType&&this.eat(j.arrow)){var t=this.startNodeAt(e.start,e.loc);return t.params=[this.reinterpretTypeAsFunctionTypeParam(e)],t.rest=null,t.returnType=this.flowParseType(),t.typeParameters=null,this.finishNode(t,"FunctionTypeAnnotation")}return e},le.flowParseIntersectionType=function(){var e=this.startNode();this.eat(j.bitwiseAND);var t=this.flowParseAnonFunctionWithoutParens();for(e.types=[t];this.eat(j.bitwiseAND);)e.types.push(this.flowParseAnonFunctionWithoutParens());return 1===e.types.length?t:this.finishNode(e,"IntersectionTypeAnnotation")},le.flowParseUnionType=function(){var e=this.startNode();this.eat(j.bitwiseOR);var t=this.flowParseIntersectionType();for(e.types=[t];this.eat(j.bitwiseOR);)e.types.push(this.flowParseIntersectionType());return 1===e.types.length?t:this.finishNode(e,"UnionTypeAnnotation")},le.flowParseType=function(){var e=this.state.inType;this.state.inType=!0;var t=this.flowParseUnionType();return this.state.inType=e,t},le.flowParseTypeAnnotation=function(){var e=this.startNode();return e.typeAnnotation=this.flowParseTypeInitialiser(),this.finishNode(e,"TypeAnnotation")},le.flowParseTypeAndPredicateAnnotation=function(){var e=this.startNode(),t=this.flowParseTypeAndPredicateInitialiser();return e.typeAnnotation=t[0],e.predicate=t[1],this.finishNode(e,"TypeAnnotation")},le.flowParseTypeAnnotatableIdentifier=function(){var e=this.flowParseRestrictedIdentifier();return this.match(j.colon)&&(e.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(e,e.type)),e},le.typeCastToParameter=function(e){return e.expression.typeAnnotation=e.typeAnnotation,this.finishNodeAt(e.expression,e.expression.type,e.typeAnnotation.end,e.typeAnnotation.loc.end)},le.flowParseVariance=function(){var e=null;return this.match(j.plusMin)&&("+"===this.state.value?e="plus":"-"===this.state.value&&(e="minus"),this.next()),e};var ce=function(e){e.extend("parseFunctionBody",function(e){return function(t,r){return this.match(j.colon)&&!r&&(t.returnType=this.flowParseTypeAndPredicateAnnotation()),e.call(this,t,r)}}),e.extend("parseStatement",function(e){return function(t,r){if(this.state.strict&&this.match(j.name)&&"interface"===this.state.value){var n=this.startNode();return this.next(),this.flowParseInterface(n)}return e.call(this,t,r)}}),e.extend("parseExpressionStatement",function(e){return function(t,r){if("Identifier"===r.type)if("declare"===r.name){if(this.match(j._class)||this.match(j.name)||this.match(j._function)||this.match(j._var))return this.flowParseDeclare(t)}else if(this.match(j.name)){if("interface"===r.name)return this.flowParseInterface(t);if("type"===r.name)return this.flowParseTypeAlias(t)}return e.call(this,t,r)}}),e.extend("shouldParseExportDeclaration",function(e){return function(){return this.isContextual("type")||this.isContextual("interface")||e.call(this)}}),e.extend("parseConditional",function(e){return function(t,r,n,i,s){if(s&&this.match(j.question)){var a=this.state.clone();try{return e.call(this,t,r,n,i)}catch(e){if(e instanceof SyntaxError)return this.state=a,s.start=e.pos||this.state.start,t;throw e}}return e.call(this,t,r,n,i)}}),e.extend("parseParenItem",function(e){return function(t,r,n){if(t=e.call(this,t,r,n),this.eat(j.question)&&(t.optional=!0),this.match(j.colon)){var i=this.startNodeAt(r,n);return i.expression=t,i.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(i,"TypeCastExpression")}return t}}),e.extend("parseExport",function(e){return function(t){return t=e.call(this,t),"ExportNamedDeclaration"===t.type&&(t.exportKind=t.exportKind||"value"),t}}),e.extend("parseExportDeclaration",function(e){return function(t){if(this.isContextual("type")){t.exportKind="type";var r=this.startNode();return this.next(),this.match(j.braceL)?(t.specifiers=this.parseExportSpecifiers(),this.parseExportFrom(t),null):this.flowParseTypeAlias(r)}if(this.isContextual("interface")){t.exportKind="type";var n=this.startNode();return this.next(),this.flowParseInterface(n)}return e.call(this,t)}}),e.extend("parseClassId",function(e){return function(t){e.apply(this,arguments),this.isRelational("<")&&(t.typeParameters=this.flowParseTypeParameterDeclaration())}}),e.extend("isKeyword",function(e){return function(t){return(!this.state.inType||"void"!==t)&&e.call(this,t)}}),e.extend("readToken",function(e){return function(t){return!this.state.inType||62!==t&&60!==t?e.call(this,t):this.finishOp(j.relational,1)}}),e.extend("jsx_readToken",function(e){return function(){if(!this.state.inType)return e.call(this)}}),e.extend("toAssignable",function(e){return function(t,r,n){return"TypeCastExpression"===t.type?e.call(this,this.typeCastToParameter(t),r,n):e.call(this,t,r,n)}}),e.extend("toAssignableList",function(e){return function(t,r,n){for(var i=0;i2?n-2:0),s=2;s1114111||fe(a)!=a)throw RangeError("Invalid code point: "+a);a<=65535?e.push(a):(a-=65536,t=55296+(a>>10),r=a%1024+56320,e.push(t,r)),(n+1==i||e.length>16384)&&(s+=he.apply(null,e),e.length=0)}return s}}var de=pe,me={quot:'"',amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",lang:"〈",rang:"〉",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"},ye=/^[\da-fA-F]+$/,ge=/^\d+$/;U.j_oTag=new R("...",!0,!0),j.jsxName=new P("jsxName"),j.jsxText=new P("jsxText",{beforeExpr:!0}),j.jsxTagStart=new P("jsxTagStart",{startsExpr:!0}),j.jsxTagEnd=new P("jsxTagEnd"),j.jsxTagStart.updateContext=function(){this.state.context.push(U.j_expr),this.state.context.push(U.j_oTag),this.state.exprAllowed=!1},j.jsxTagEnd.updateContext=function(e){var t=this.state.context.pop();t===U.j_oTag&&e===j.slash||t===U.j_cTag?(this.state.context.pop(),this.state.exprAllowed=this.curContext()===U.j_expr):this.state.exprAllowed=!0};var be=z.prototype;be.jsxReadToken=function(){for(var e="",t=this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated JSX contents");var r=this.input.charCodeAt(this.state.pos);switch(r){case 60:case 123:return this.state.pos===this.state.start?60===r&&this.state.exprAllowed?(++this.state.pos,this.finishToken(j.jsxTagStart)):this.getTokenFromCode(r):(e+=this.input.slice(t,this.state.pos),this.finishToken(j.jsxText,e));case 38:e+=this.input.slice(t,this.state.pos),e+=this.jsxReadEntity(),t=this.state.pos;break;default:u(r)?(e+=this.input.slice(t,this.state.pos),e+=this.jsxReadNewLine(!0),t=this.state.pos):++this.state.pos}}},be.jsxReadNewLine=function(e){var t=this.input.charCodeAt(this.state.pos),r=void 0;return++this.state.pos,13===t&&10===this.input.charCodeAt(this.state.pos)?(++this.state.pos,r=e?"\n":"\r\n"):r=String.fromCharCode(t),++this.state.curLine,this.state.lineStart=this.state.pos,r},be.jsxReadString=function(e){for(var t="",r=++this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated string constant");var n=this.input.charCodeAt(this.state.pos);if(n===e)break;38===n?(t+=this.input.slice(r,this.state.pos),t+=this.jsxReadEntity(),r=this.state.pos):u(n)?(t+=this.input.slice(r,this.state.pos),t+=this.jsxReadNewLine(!1),r=this.state.pos):++this.state.pos}return t+=this.input.slice(r,this.state.pos++),this.finishToken(j.string,t)},be.jsxReadEntity=function(){for(var e="",t=0,r=void 0,n=this.input[this.state.pos],i=++this.state.pos;this.state.pos")}return r.openingElement=i,r.closingElement=s,r.children=n,this.match(j.relational)&&"<"===this.state.value&&this.raise(this.state.start,"Adjacent JSX elements must be wrapped in an enclosing tag"),this.finishNode(r,"JSXElement")},be.jsxParseElement=function(){var e=this.state.start,t=this.state.startLoc;return this.next(),this.jsxParseElementAt(e,t)};var ve=function(e){e.extend("parseExprAtom",function(e){return function(t){if(this.match(j.jsxText)){var r=this.parseLiteral(this.state.value,"JSXText");return r.extra=null,r}return this.match(j.jsxTagStart)?this.jsxParseElement():e.call(this,t)}}),e.extend("readToken",function(e){return function(t){if(this.state.inPropertyName)return e.call(this,t);var r=this.curContext();if(r===U.j_expr)return this.jsxReadToken();if(r===U.j_oTag||r===U.j_cTag){if(s(t))return this.jsxReadWord();if(62===t)return++this.state.pos,this.finishToken(j.jsxTagEnd);if((34===t||39===t)&&r===U.j_oTag)return this.jsxReadString(t)}return 60===t&&this.state.exprAllowed?(++this.state.pos,this.finishToken(j.jsxTagStart)):e.call(this,t)}}),e.extend("updateContext",function(e){return function(t){if(this.match(j.braceL)){var r=this.curContext();r===U.j_oTag?this.state.context.push(U.braceExpression):r===U.j_expr?this.state.context.push(U.templateQuasi):e.call(this,t),this.state.exprAllowed=!0}else{if(!this.match(j.slash)||t!==j.jsxTagStart)return e.call(this,t);this.state.context.length-=2,this.state.context.push(U.j_cTag),this.state.exprAllowed=!1}}})};W.estree=oe,W.flow=ce,W.jsx=ve,r.parse=m,r.parseExpression=y,r.tokTypes=j},{}],178:[function(e,t,r){function n(e,t,r){e instanceof RegExp&&(e=i(e,r)),t instanceof RegExp&&(t=i(t,r));var n=s(e,t,r);return n&&{start:n[0],end:n[1],pre:r.slice(0,n[0]),body:r.slice(n[0]+e.length,n[1]),post:r.slice(n[1]+t.length)}}function i(e,t){var r=t.match(e);return r?r[0]:null}function s(e,t,r){var n,i,s,a,o,u=r.indexOf(e),l=r.indexOf(t,u+1),c=u;if(u>=0&&l>0){for(n=[],s=r.length;c>=0&&!o;)c==u?(n.push(c), +u=r.indexOf(e,c+1)):1==n.length?o=[n.pop(),l]:(i=n.pop(),i=0?u:l;n.length&&(o=[s,a])}return o}t.exports=n,n.range=s},{}],179:[function(e,t,r){"use strict";function n(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function i(e){return 3*e.length/4-n(e)}function s(e){var t,r,i,s,a,o,u=e.length;a=n(e),o=new p(3*u/4-a),i=a>0?u-4:u;var l=0;for(t=0,r=0;t>16&255,o[l++]=s>>8&255,o[l++]=255&s;return 2===a?(s=c[e.charCodeAt(t)]<<2|c[e.charCodeAt(t+1)]>>4,o[l++]=255&s):1===a&&(s=c[e.charCodeAt(t)]<<10|c[e.charCodeAt(t+1)]<<4|c[e.charCodeAt(t+2)]>>2,o[l++]=s>>8&255,o[l++]=255&s),o}function a(e){return l[e>>18&63]+l[e>>12&63]+l[e>>6&63]+l[63&e]}function o(e,t,r){for(var n,i=[],s=t;su?u:a+16383));return 1===n?(t=e[r-1],i+=l[t>>2],i+=l[t<<4&63],i+="=="):2===n&&(t=(e[r-2]<<8)+e[r-1],i+=l[t>>10],i+=l[t>>4&63],i+=l[t<<2&63],i+="="),s.push(i),s.join("")}r.byteLength=i,r.toByteArray=s,r.fromByteArray=u;for(var l=[],c=[],p="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,d=h.length;f=t}function h(e,t){var r=[],i=d("{","}",e);if(!i||/\$$/.test(i.pre))return[e];var s=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),m=s||o,y=/^(.*,)+(.+)?$/.test(i.body);if(!m&&!y)return i.post.match(/,.*\}/)?(e=i.pre+"{"+i.body+g+i.post,h(e)):[e];var b;if(m)b=i.body.split(/\.\./);else if(b=a(i.body),1===b.length&&(b=h(b[0],!1).map(u),1===b.length)){var v=i.post.length?h(i.post,!1):[""];return v.map(function(e){return i.pre+b[0]+e})}var x,E=i.pre,v=i.post.length?h(i.post,!1):[""];if(m){var A=n(b[0]),D=n(b[1]),C=Math.max(b[0].length,b[1].length),S=3==b.length?Math.abs(n(b[2])):1,_=c;D0){var P=new Array(T+1).join("0");F=k<0?"-"+P+F.slice(1):P+F}}x.push(F)}}else x=f(b,function(e){return h(e,!1)});for(var B=0;Ba)throw new RangeError("size is too large");var n=r,s=t;void 0===s&&(n=void 0,s=0);var o=new i(e);if("string"==typeof s)for(var u=new i(s,n),l=u.length,c=-1;++ca)throw new RangeError("size is too large");return new i(e)},r.from=function(e,r,n){if("function"==typeof i.from&&(!t.Uint8Array||Uint8Array.from!==i.from))return i.from(e,r,n);if("number"==typeof e)throw new TypeError('"value" argument must not be a number');if("string"==typeof e)return new i(e,r);if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer){var s=r;if(1===arguments.length)return new i(e);void 0===s&&(s=0);var a=n;if(void 0===a&&(a=e.byteLength-s),s>=e.byteLength)throw new RangeError("'offset' is out of bounds");if(a>e.byteLength-s)throw new RangeError("'length' is out of bounds");return new i(e.slice(s,s+a))}if(i.isBuffer(e)){var o=new i(e.length);return e.copy(o,0,0,e.length),o}if(e){if(Array.isArray(e)||"undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return new i(e);if("Buffer"===e.type&&Array.isArray(e.data))return new i(e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},r.allocUnsafeSlow=function(e){if("function"==typeof i.allocUnsafeSlow)return i.allocUnsafeSlow(e);if("number"!=typeof e)throw new TypeError("size must be a number");if(e>=a)throw new RangeError("size is too large");return new s(e)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{buffer:184}],184:[function(e,t,r){"use strict";function n(e){if(e>Y)throw new RangeError("Invalid typed array length");var t=new Uint8Array(e);return t.__proto__=i.prototype,t}function i(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return u(e)}return s(e,t,r)}function s(e,t,r){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return e instanceof ArrayBuffer?p(e,t,r):"string"==typeof e?l(e,t):h(e)}function a(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function o(e,t,r){return a(e),e<=0?n(e):void 0!==t?"string"==typeof r?n(e).fill(t,r):n(e).fill(t):n(e)}function u(e){return a(e),n(e<0?0:0|f(e))}function l(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!i.isEncoding(t))throw new TypeError('"encoding" must be a valid string encoding');var r=0|m(e,t),s=n(r),a=s.write(e,t);return a!==r&&(s=s.slice(0,a)),s}function c(e){for(var t=e.length<0?0:0|f(e.length),r=n(t),i=0;i=Y)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Y.toString(16)+" bytes");return 0|e}function d(e){return+e!=e&&(e=0),i.alloc(+e)}function m(e,t){if(i.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||e instanceof ArrayBuffer)return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return X(e).length;default:if(n)return V(e).length;t=(""+t).toLowerCase(),n=!0}}function y(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,t>>>=0,r<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return P(this,t,r);case"utf8":case"utf-8":return w(this,t,r);case"ascii":return F(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return _(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function b(e,t,r,n,s){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=s?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(s)return-1;r=e.length-1}else if(r<0){if(!s)return-1;r=0}if("string"==typeof t&&(t=i.from(t,n)),i.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,s);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,s);throw new TypeError("val must be string, number or Buffer")}function v(e,t,r,n,i){function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,o=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,o/=2,u/=2,r/=2}var l;if(i){var c=-1;for(l=r;lo&&(r=o-u),l=r;l>=0;l--){for(var p=!0,h=0;hi&&(n=i):n=i;var s=t.length;if(s%2!=0)throw new TypeError("Invalid hex string");n>s/2&&(n=s/2);for(var a=0;a239?4:s>223?3:s>191?2:1;if(i+o<=r){var u,l,c,p;switch(o){case 1:s<128&&(a=s);break;case 2:u=e[i+1],128==(192&u)&&(p=(31&s)<<6|63&u)>127&&(a=p);break;case 3:u=e[i+1],l=e[i+2],128==(192&u)&&128==(192&l)&&(p=(15&s)<<12|(63&u)<<6|63&l)>2047&&(p<55296||p>57343)&&(a=p);break;case 4:u=e[i+1],l=e[i+2],c=e[i+3],128==(192&u)&&128==(192&l)&&128==(192&c)&&(p=(15&s)<<18|(63&u)<<12|(63&l)<<6|63&c)>65535&&p<1114112&&(a=p)}}null===a?(a=65533,o=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=o}return k(n)}function k(e){var t=e.length;if(t<=H)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn)&&(r=n);for(var i="",s=t;sr)throw new RangeError("Trying to access beyond buffer length")}function j(e,t,r,n,s,a){if(!i.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError("Index out of range")}function N(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function I(e,t,r,n,i){return t=+t,r>>>=0,i||N(e,t,r,4,3.4028234663852886e38,-3.4028234663852886e38),z.write(e,t,r,n,23,4),r+4}function L(e,t,r,n,i){return t=+t,r>>>=0,i||N(e,t,r,8,1.7976931348623157e308,-1.7976931348623157e308),z.write(e,t,r,n,52,8),r+8}function M(e){if(e=R(e).replace($,""),e.length<2)return"";for(;e.length%4!=0;)e+="=";return e}function R(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function U(e){return e<16?"0"+e.toString(16):e.toString(16)}function V(e,t){t=t||1/0;for(var r,n=e.length,i=null,s=[],a=0;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function q(e){for(var t=[],r=0;r>8,i=r%256,s.push(i),s.push(n);return s}function X(e){return K.toByteArray(M(e))}function J(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function W(e){return e!==e}var K=e("base64-js"),z=e("ieee754");r.Buffer=i,r.SlowBuffer=d,r.INSPECT_MAX_BYTES=50;var Y=2147483647;r.kMaxLength=Y,i.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}(),i.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.poolSize=8192,i.from=function(e,t,r){return s(e,t,r)},i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,i.alloc=function(e,t,r){return o(e,t,r)},i.allocUnsafe=function(e){return u(e)},i.allocUnsafeSlow=function(e){return u(e)},i.isBuffer=function(e){return null!=e&&!0===e._isBuffer},i.compare=function(e,t){if(!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var r=e.length,n=t.length,s=0,a=Math.min(r,n);s0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},i.prototype.compare=function(e,t,r,n,s){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===s&&(s=this.length),t<0||r>e.length||n<0||s>this.length)throw new RangeError("out of range index");if(n>=s&&t>=r)return 0;if(n>=s)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,s>>>=0,this===e)return 0;for(var a=s-n,o=r-t,u=Math.min(a,o),l=this.slice(n,s),c=e.slice(t,r),p=0;p>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return x(this,e,t,r);case"utf8":case"utf-8":return E(this,e,t,r);case"ascii":return A(this,e,t,r);case"latin1":case"binary":return D(this,e,t,r);case"base64":return C(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var H=4096;i.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,e<0?(e+=r)<0&&(e=0):e>r&&(e=r),t<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||O(e,t,this.length);for(var n=this[e],i=1,s=0;++s>>=0,t>>>=0,r||O(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},i.prototype.readUInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||O(e,t,this.length);for(var n=this[e],i=1,s=0;++s=i&&(n-=Math.pow(2,8*t)),n},i.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||O(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return i*=128,s>=i&&(s-=Math.pow(2,8*t)),s},i.prototype.readInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){e>>>=0,t||O(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt16BE=function(e,t){e>>>=0,t||O(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return e>>>=0,t||O(e,4,this.length),z.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return e>>>=0,t||O(e,4,this.length),z.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return e>>>=0,t||O(e,8,this.length),z.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return e>>>=0,t||O(e,8,this.length),z.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){j(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=1,s=0;for(this[t]=255&e;++s>>=0,r>>>=0,!n){j(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},i.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,255,0),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},i.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);j(this,e,t,r,i-1,-i)}var s=0,a=1,o=0;for(this[t]=255&e;++s>0)-o&255;return t+r},i.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);j(this,e,t,r,i-1,-i)}var s=r-1,a=1,o=0;for(this[t+s]=255&e;--s>=0&&(a*=256);)e<0&&0===o&&0!==this[t+s+1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},i.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},i.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeFloatLE=function(e,t,r){return I(this,e,t,!0,r)},i.prototype.writeFloatBE=function(e,t,r){return I(this,e,t,!1,r)},i.prototype.writeDoubleLE=function(e,t,r){return L(this,e,t,!0,r)},i.prototype.writeDoubleBE=function(e,t,r){return L(this,e,t,!1,r)},i.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(s<1e3)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var a;if("number"==typeof e)for(a=t;a1)for(var n=1;n0;i--)if(t=n[i],~t.indexOf("sourceMappingURL=data:"))return r.fromComment(t)}var u=e("fs"),l=e("path"),c=/^\s*\/(?:\/|\*)[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+;)?base64,(.*)$/gm,p=/(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^\*]+?)[ \t]*(?:\*\/){1}[ \t]*$)/gm;a.prototype.toJSON=function(e){return JSON.stringify(this.sourcemap,null,e)},a.prototype.toBase64=function(){var e=this.toJSON();return new t(e).toString("base64")},a.prototype.toComment=function(e){var t=this.toBase64(),r="sourceMappingURL=data:application/json;base64,"+t;return e&&e.multiline?"/*# "+r+" */":"//# "+r},a.prototype.toObject=function(){return JSON.parse(this.toJSON())},a.prototype.addProperty=function(e,t){if(this.sourcemap.hasOwnProperty(e))throw new Error("property %s already exists on the sourcemap, use set property instead");return this.setProperty(e,t)},a.prototype.setProperty=function(e,t){return this.sourcemap[e]=t,this},a.prototype.getProperty=function(e){return this.sourcemap[e]},r.fromObject=function(e){return new a(e)},r.fromJSON=function(e){return new a(e,{isJSON:!0})},r.fromBase64=function(e){return new a(e,{isEncoded:!0})},r.fromComment=function(e){return e=e.replace(/^\/\*/g,"//").replace(/\*\/$/g,""),new a(e,{isEncoded:!0,hasComment:!0})},r.fromMapFileComment=function(e,t){return new a(e,{commentFileDir:t,isFileComment:!0,isJSON:!0})},r.fromSource=function(e,t){if(t){var n=o(e);return n||null}var i=e.match(c);return c.lastIndex=0,i?r.fromComment(i.pop()):null},r.fromMapFileSource=function(e,t){var n=e.match(p);return p.lastIndex=0,n?r.fromMapFileComment(n.pop(),t):null},r.removeComments=function(e){return c.lastIndex=0,e.replace(c,"")},r.removeMapFileComments=function(e){return p.lastIndex=0,e.replace(p,"")},Object.defineProperty(r,"commentRegex",{get:function(){return c.lastIndex=0,c}}),Object.defineProperty(r,"mapFileCommentRegex",{get:function(){return p.lastIndex=0,p}})}).call(this,e("buffer").Buffer)},{buffer:184,fs:182,path:535}],188:[function(e,t,r){e("../modules/web.dom.iterable"),e("../modules/es6.string.iterator"),t.exports=e("../modules/core.get-iterator")},{"../modules/core.get-iterator":277,"../modules/es6.string.iterator":286,"../modules/web.dom.iterable":293}],189:[function(e,t,r){var n=e("../../modules/_core"),i=n.JSON||(n.JSON={stringify:JSON.stringify});t.exports=function(e){return i.stringify.apply(i,arguments)}},{"../../modules/_core":217}],190:[function(e,t,r){e("../modules/es6.object.to-string"),e("../modules/es6.string.iterator"),e("../modules/web.dom.iterable"),e("../modules/es6.map"),e("../modules/es7.map.to-json"),t.exports=e("../modules/_core").Map},{"../modules/_core":217,"../modules/es6.map":279,"../modules/es6.object.to-string":285,"../modules/es6.string.iterator":286,"../modules/es7.map.to-json":290,"../modules/web.dom.iterable":293}],191:[function(e,t,r){e("../../modules/es6.number.max-safe-integer"),t.exports=9007199254740991},{"../../modules/es6.number.max-safe-integer":280}],192:[function(e,t,r){e("../../modules/es6.object.assign"),t.exports=e("../../modules/_core").Object.assign},{"../../modules/_core":217,"../../modules/es6.object.assign":281}],193:[function(e,t,r){e("../../modules/es6.object.create");var n=e("../../modules/_core").Object;t.exports=function(e,t){return n.create(e,t)}},{"../../modules/_core":217,"../../modules/es6.object.create":282}],194:[function(e,t,r){e("../../modules/es6.symbol"),t.exports=e("../../modules/_core").Object.getOwnPropertySymbols},{"../../modules/_core":217,"../../modules/es6.symbol":287}],195:[function(e,t,r){e("../../modules/es6.object.keys"),t.exports=e("../../modules/_core").Object.keys},{"../../modules/_core":217,"../../modules/es6.object.keys":283}],196:[function(e,t,r){e("../../modules/es6.object.set-prototype-of"),t.exports=e("../../modules/_core").Object.setPrototypeOf},{"../../modules/_core":217,"../../modules/es6.object.set-prototype-of":284}],197:[function(e,t,r){e("../../modules/es6.symbol"),t.exports=e("../../modules/_core").Symbol.for},{"../../modules/_core":217,"../../modules/es6.symbol":287}],198:[function(e,t,r){e("../../modules/es6.symbol"),e("../../modules/es6.object.to-string"),e("../../modules/es7.symbol.async-iterator"),e("../../modules/es7.symbol.observable"),t.exports=e("../../modules/_core").Symbol},{"../../modules/_core":217,"../../modules/es6.object.to-string":285,"../../modules/es6.symbol":287,"../../modules/es7.symbol.async-iterator":291,"../../modules/es7.symbol.observable":292}],199:[function(e,t,r){e("../../modules/es6.string.iterator"),e("../../modules/web.dom.iterable"),t.exports=e("../../modules/_wks-ext").f("iterator")},{"../../modules/_wks-ext":274,"../../modules/es6.string.iterator":286,"../../modules/web.dom.iterable":293}],200:[function(e,t,r){e("../modules/es6.object.to-string"),e("../modules/web.dom.iterable"),e("../modules/es6.weak-map"),t.exports=e("../modules/_core").WeakMap},{"../modules/_core":217,"../modules/es6.object.to-string":285,"../modules/es6.weak-map":288,"../modules/web.dom.iterable":293}],201:[function(e,t,r){e("../modules/es6.object.to-string"),e("../modules/web.dom.iterable"),e("../modules/es6.weak-set"), +t.exports=e("../modules/_core").WeakSet},{"../modules/_core":217,"../modules/es6.object.to-string":285,"../modules/es6.weak-set":289,"../modules/web.dom.iterable":293}],202:[function(e,t,r){t.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},{}],203:[function(e,t,r){t.exports=function(){}},{}],204:[function(e,t,r){t.exports=function(e,t,r,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(r+": incorrect invocation!");return e}},{}],205:[function(e,t,r){var n=e("./_is-object");t.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},{"./_is-object":235}],206:[function(e,t,r){var n=e("./_for-of");t.exports=function(e,t){var r=[];return n(e,!1,r.push,r,t),r}},{"./_for-of":226}],207:[function(e,t,r){var n=e("./_to-iobject"),i=e("./_to-length"),s=e("./_to-index");t.exports=function(e){return function(t,r,a){var o,u=n(t),l=i(u.length),c=s(a,l);if(e&&r!=r){for(;l>c;)if((o=u[c++])!=o)return!0}else for(;l>c;c++)if((e||c in u)&&u[c]===r)return e||c||0;return!e&&-1}}},{"./_to-index":266,"./_to-iobject":268,"./_to-length":269}],208:[function(e,t,r){var n=e("./_ctx"),i=e("./_iobject"),s=e("./_to-object"),a=e("./_to-length"),o=e("./_array-species-create");t.exports=function(e,t){var r=1==e,u=2==e,l=3==e,c=4==e,p=6==e,h=5==e||p,f=t||o;return function(t,o,d){for(var m,y,g=s(t),b=i(g),v=n(o,d,3),x=a(b.length),E=0,A=r?f(t,x):u?f(t,0):void 0;x>E;E++)if((h||E in b)&&(m=b[E],y=v(m,E,g),e))if(r)A[E]=y;else if(y)switch(e){case 3:return!0;case 5:return m;case 6:return E;case 2:A.push(m)}else if(c)return!1;return p?-1:l||c?c:A}}},{"./_array-species-create":210,"./_ctx":218,"./_iobject":232,"./_to-length":269,"./_to-object":270}],209:[function(e,t,r){var n=e("./_is-object"),i=e("./_is-array"),s=e("./_wks")("species");t.exports=function(e){var t;return i(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!i(t.prototype)||(t=void 0),n(t)&&null===(t=t[s])&&(t=void 0)),void 0===t?Array:t}},{"./_is-array":234,"./_is-object":235,"./_wks":275}],210:[function(e,t,r){var n=e("./_array-species-constructor");t.exports=function(e,t){return new(n(e))(t)}},{"./_array-species-constructor":209}],211:[function(e,t,r){var n=e("./_cof"),i=e("./_wks")("toStringTag"),s="Arguments"==n(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};t.exports=function(e){var t,r,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=a(t=Object(e),i))?r:s?n(t):"Object"==(o=n(t))&&"function"==typeof t.callee?"Arguments":o}},{"./_cof":212,"./_wks":275}],212:[function(e,t,r){var n={}.toString;t.exports=function(e){return n.call(e).slice(8,-1)}},{}],213:[function(e,t,r){"use strict";var n=e("./_object-dp").f,i=e("./_object-create"),s=e("./_redefine-all"),a=e("./_ctx"),o=e("./_an-instance"),u=e("./_defined"),l=e("./_for-of"),c=e("./_iter-define"),p=e("./_iter-step"),h=e("./_set-species"),f=e("./_descriptors"),d=e("./_meta").fastKey,m=f?"_s":"size",y=function(e,t){var r,n=d(t);if("F"!==n)return e._i[n];for(r=e._f;r;r=r.n)if(r.k==t)return r};t.exports={getConstructor:function(e,t,r,c){var p=e(function(e,n){o(e,p,t,"_i"),e._i=i(null),e._f=void 0,e._l=void 0,e[m]=0,void 0!=n&&l(n,r,e[c],e)});return s(p.prototype,{clear:function(){for(var e=this,t=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete t[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var t=this,r=y(t,e);if(r){var n=r.n,i=r.p;delete t._i[r.i],r.r=!0,i&&(i.n=n),n&&(n.p=i),t._f==r&&(t._f=n),t._l==r&&(t._l=i),t[m]--}return!!r},forEach:function(e){o(this,p,"forEach");for(var t,r=a(e,arguments.length>1?arguments[1]:void 0,3);t=t?t.n:this._f;)for(r(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!y(this,e)}}),f&&n(p.prototype,"size",{get:function(){return u(this[m])}}),p},def:function(e,t,r){var n,i,s=y(e,t);return s?s.v=r:(e._l=s={i:i=d(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=s),n&&(n.n=s),e[m]++,"F"!==i&&(e._i[i]=s)),e},getEntry:y,setStrong:function(e,t,r){c(e,t,function(e,t){this._t=e,this._k=t,this._l=void 0},function(){for(var e=this,t=e._k,r=e._l;r&&r.r;)r=r.p;return e._t&&(e._l=r=r?r.n:e._t._f)?"keys"==t?p(0,r.k):"values"==t?p(0,r.v):p(0,[r.k,r.v]):(e._t=void 0,p(1))},r?"entries":"values",!r,!0),h(t)}}},{"./_an-instance":204,"./_ctx":218,"./_defined":219,"./_descriptors":220,"./_for-of":226,"./_iter-define":238,"./_iter-step":239,"./_meta":243,"./_object-create":245,"./_object-dp":246,"./_redefine-all":258,"./_set-species":261}],214:[function(e,t,r){var n=e("./_classof"),i=e("./_array-from-iterable");t.exports=function(e){return function(){if(n(this)!=e)throw TypeError(e+"#toJSON isn't generic");return i(this)}}},{"./_array-from-iterable":206,"./_classof":211}],215:[function(e,t,r){"use strict";var n=e("./_redefine-all"),i=e("./_meta").getWeak,s=e("./_an-object"),a=e("./_is-object"),o=e("./_an-instance"),u=e("./_for-of"),l=e("./_array-methods"),c=e("./_has"),p=l(5),h=l(6),f=0,d=function(e){return e._l||(e._l=new m)},m=function(){this.a=[]},y=function(e,t){return p(e.a,function(e){return e[0]===t})};m.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var r=y(this,e);r?r[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},t.exports={getConstructor:function(e,t,r,s){var l=e(function(e,n){o(e,l,t,"_i"),e._i=f++,e._l=void 0,void 0!=n&&u(n,r,e[s],e)});return n(l.prototype,{delete:function(e){if(!a(e))return!1;var t=i(e);return!0===t?d(this).delete(e):t&&c(t,this._i)&&delete t[this._i]},has:function(e){if(!a(e))return!1;var t=i(e);return!0===t?d(this).has(e):t&&c(t,this._i)}}),l},def:function(e,t,r){var n=i(s(t),!0);return!0===n?d(e).set(t,r):n[e._i]=r,e},ufstore:d}},{"./_an-instance":204,"./_an-object":205,"./_array-methods":208,"./_for-of":226,"./_has":228,"./_is-object":235,"./_meta":243,"./_redefine-all":258}],216:[function(e,t,r){"use strict";var n=e("./_global"),i=e("./_export"),s=e("./_meta"),a=e("./_fails"),o=e("./_hide"),u=e("./_redefine-all"),l=e("./_for-of"),c=e("./_an-instance"),p=e("./_is-object"),h=e("./_set-to-string-tag"),f=e("./_object-dp").f,d=e("./_array-methods")(0),m=e("./_descriptors");t.exports=function(e,t,r,y,g,b){var v=n[e],x=v,E=g?"set":"add",A=x&&x.prototype,D={};return m&&"function"==typeof x&&(b||A.forEach&&!a(function(){(new x).entries().next()}))?(x=t(function(t,r){c(t,x,e,"_c"),t._c=new v,void 0!=r&&l(r,g,t[E],t)}),d("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in A&&(!b||"clear"!=e)&&o(x.prototype,e,function(r,n){if(c(this,x,e),!t&&b&&!p(r))return"get"==e&&void 0;var i=this._c[e](0===r?0:r,n);return t?this:i})}),"size"in A&&f(x.prototype,"size",{get:function(){return this._c.size}})):(x=y.getConstructor(t,e,g,E),u(x.prototype,r),s.NEED=!0),h(x,e),D[e]=x,i(i.G+i.W+i.F,D),b||y.setStrong(x,e,g),x}},{"./_an-instance":204,"./_array-methods":208,"./_descriptors":220,"./_export":224,"./_fails":225,"./_for-of":226,"./_global":227,"./_hide":229,"./_is-object":235,"./_meta":243,"./_object-dp":246,"./_redefine-all":258,"./_set-to-string-tag":262}],217:[function(e,t,r){var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},{}],218:[function(e,t,r){var n=e("./_a-function");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,i){return e.call(t,r,n,i)}}return function(){return e.apply(t,arguments)}}},{"./_a-function":202}],219:[function(e,t,r){t.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},{}],220:[function(e,t,r){t.exports=!e("./_fails")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{"./_fails":225}],221:[function(e,t,r){var n=e("./_is-object"),i=e("./_global").document,s=n(i)&&n(i.createElement);t.exports=function(e){return s?i.createElement(e):{}}},{"./_global":227,"./_is-object":235}],222:[function(e,t,r){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],223:[function(e,t,r){var n=e("./_object-keys"),i=e("./_object-gops"),s=e("./_object-pie");t.exports=function(e){var t=n(e),r=i.f;if(r)for(var a,o=r(e),u=s.f,l=0;o.length>l;)u.call(e,a=o[l++])&&t.push(a);return t}},{"./_object-gops":251,"./_object-keys":254,"./_object-pie":255}],224:[function(e,t,r){var n=e("./_global"),i=e("./_core"),s=e("./_ctx"),a=e("./_hide"),o=function(e,t,r){var u,l,c,p=e&o.F,h=e&o.G,f=e&o.S,d=e&o.P,m=e&o.B,y=e&o.W,g=h?i:i[t]||(i[t]={}),b=g.prototype,v=h?n:f?n[t]:(n[t]||{}).prototype;h&&(r=t);for(u in r)(l=!p&&v&&void 0!==v[u])&&u in g||(c=l?v[u]:r[u],g[u]=h&&"function"!=typeof v[u]?r[u]:m&&l?s(c,n):y&&v[u]==c?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(c):d&&"function"==typeof c?s(Function.call,c):c,d&&((g.virtual||(g.virtual={}))[u]=c,e&o.R&&b&&!b[u]&&a(b,u,c)))};o.F=1,o.G=2,o.S=4,o.P=8,o.B=16,o.W=32,o.U=64,o.R=128,t.exports=o},{"./_core":217,"./_ctx":218,"./_global":227,"./_hide":229}],225:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],226:[function(e,t,r){var n=e("./_ctx"),i=e("./_iter-call"),s=e("./_is-array-iter"),a=e("./_an-object"),o=e("./_to-length"),u=e("./core.get-iterator-method"),l={},c={},r=t.exports=function(e,t,r,p,h){var f,d,m,y,g=h?function(){return e}:u(e),b=n(r,p,t?2:1),v=0;if("function"!=typeof g)throw TypeError(e+" is not iterable!");if(s(g)){for(f=o(e.length);f>v;v++)if((y=t?b(a(d=e[v])[0],d[1]):b(e[v]))===l||y===c)return y}else for(m=g.call(e);!(d=m.next()).done;)if((y=i(m,b,d.value,t))===l||y===c)return y};r.BREAK=l,r.RETURN=c},{"./_an-object":205,"./_ctx":218,"./_is-array-iter":233,"./_iter-call":236,"./_to-length":269,"./core.get-iterator-method":276}],227:[function(e,t,r){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},{}],228:[function(e,t,r){var n={}.hasOwnProperty;t.exports=function(e,t){return n.call(e,t)}},{}],229:[function(e,t,r){var n=e("./_object-dp"),i=e("./_property-desc");t.exports=e("./_descriptors")?function(e,t,r){return n.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},{"./_descriptors":220,"./_object-dp":246,"./_property-desc":257}],230:[function(e,t,r){t.exports=e("./_global").document&&document.documentElement},{"./_global":227}],231:[function(e,t,r){t.exports=!e("./_descriptors")&&!e("./_fails")(function(){return 7!=Object.defineProperty(e("./_dom-create")("div"),"a",{get:function(){return 7}}).a})},{"./_descriptors":220,"./_dom-create":221,"./_fails":225}],232:[function(e,t,r){var n=e("./_cof");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},{"./_cof":212}],233:[function(e,t,r){var n=e("./_iterators"),i=e("./_wks")("iterator"),s=Array.prototype;t.exports=function(e){return void 0!==e&&(n.Array===e||s[i]===e)}},{"./_iterators":240,"./_wks":275}],234:[function(e,t,r){var n=e("./_cof");t.exports=Array.isArray||function(e){return"Array"==n(e)}},{"./_cof":212}],235:[function(e,t,r){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],236:[function(e,t,r){var n=e("./_an-object");t.exports=function(e,t,r,i){try{return i?t(n(r)[0],r[1]):t(r)}catch(t){var s=e.return;throw void 0!==s&&n(s.call(e)),t}}},{"./_an-object":205}],237:[function(e,t,r){"use strict";var n=e("./_object-create"),i=e("./_property-desc"),s=e("./_set-to-string-tag"),a={};e("./_hide")(a,e("./_wks")("iterator"),function(){return this}),t.exports=function(e,t,r){e.prototype=n(a,{next:i(1,r)}),s(e,t+" Iterator")}},{"./_hide":229,"./_object-create":245,"./_property-desc":257,"./_set-to-string-tag":262,"./_wks":275}],238:[function(e,t,r){"use strict";var n=e("./_library"),i=e("./_export"),s=e("./_redefine"),a=e("./_hide"),o=e("./_has"),u=e("./_iterators"),l=e("./_iter-create"),c=e("./_set-to-string-tag"),p=e("./_object-gpo"),h=e("./_wks")("iterator"),f=!([].keys&&"next"in[].keys()),d=function(){return this};t.exports=function(e,t,r,m,y,g,b){l(r,t,m);var v,x,E,A=function(e){if(!f&&e in _)return _[e];switch(e){case"keys":case"values":return function(){return new r(this,e)}}return function(){return new r(this,e)}},D=t+" Iterator",C="values"==y,S=!1,_=e.prototype,w=_[h]||_["@@iterator"]||y&&_[y],k=w||A(y),F=y?C?A("entries"):k:void 0,T="Array"==t?_.entries||w:w;if(T&&(E=p(T.call(new e)))!==Object.prototype&&(c(E,D,!0),n||o(E,h)||a(E,h,d)),C&&w&&"values"!==w.name&&(S=!0,k=function(){return w.call(this)}),n&&!b||!f&&!S&&_[h]||a(_,h,k),u[t]=k,u[D]=d,y)if(v={values:C?k:A("values"),keys:g?k:A("keys"),entries:F},b)for(x in v)x in _||s(_,x,v[x]);else i(i.P+i.F*(f||S),t,v);return v}},{"./_export":224,"./_has":228,"./_hide":229,"./_iter-create":237,"./_iterators":240,"./_library":242,"./_object-gpo":252,"./_redefine":259,"./_set-to-string-tag":262,"./_wks":275}],239:[function(e,t,r){t.exports=function(e,t){return{value:t,done:!!e}}},{}],240:[function(e,t,r){t.exports={}},{}],241:[function(e,t,r){var n=e("./_object-keys"),i=e("./_to-iobject");t.exports=function(e,t){for(var r,s=i(e),a=n(s),o=a.length,u=0;o>u;)if(s[r=a[u++]]===t)return r}},{"./_object-keys":254,"./_to-iobject":268}],242:[function(e,t,r){t.exports=!0},{}],243:[function(e,t,r){var n=e("./_uid")("meta"),i=e("./_is-object"),s=e("./_has"),a=e("./_object-dp").f,o=0,u=Object.isExtensible||function(){return!0},l=!e("./_fails")(function(){return u(Object.preventExtensions({}))}),c=function(e){a(e,n,{value:{i:"O"+ ++o,w:{}}})},p=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,n)){if(!u(e))return"F";if(!t)return"E";c(e)}return e[n].i},h=function(e,t){if(!s(e,n)){if(!u(e))return!0;if(!t)return!1;c(e)}return e[n].w},f=function(e){return l&&d.NEED&&u(e)&&!s(e,n)&&c(e),e},d=t.exports={KEY:n,NEED:!1,fastKey:p,getWeak:h,onFreeze:f}},{"./_fails":225,"./_has":228,"./_is-object":235,"./_object-dp":246,"./_uid":272}],244:[function(e,t,r){"use strict";var n=e("./_object-keys"),i=e("./_object-gops"),s=e("./_object-pie"),a=e("./_to-object"),o=e("./_iobject"),u=Object.assign;t.exports=!u||e("./_fails")(function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach(function(e){t[e]=e}),7!=u({},e)[r]||Object.keys(u({},t)).join("")!=n})?function(e,t){for(var r=a(e),u=arguments.length,l=1,c=i.f,p=s.f;u>l;)for(var h,f=o(arguments[l++]),d=c?n(f).concat(c(f)):n(f),m=d.length,y=0;m>y;)p.call(f,h=d[y++])&&(r[h]=f[h]);return r}:u},{"./_fails":225,"./_iobject":232,"./_object-gops":251,"./_object-keys":254,"./_object-pie":255,"./_to-object":270}],245:[function(e,t,r){var n=e("./_an-object"),i=e("./_object-dps"),s=e("./_enum-bug-keys"),a=e("./_shared-key")("IE_PROTO"),o=function(){},u=function(){var t,r=e("./_dom-create")("iframe"),n=s.length;for(r.style.display="none",e("./_html").appendChild(r),r.src="javascript:",t=r.contentWindow.document,t.open(),t.write(""),t.close(),u=t.F;n--;)delete u.prototype[s[n]];return u()};t.exports=Object.create||function(e,t){var r;return null!==e?(o.prototype=n(e),r=new o,o.prototype=null,r[a]=e):r=u(),void 0===t?r:i(r,t)}},{"./_an-object":205,"./_dom-create":221,"./_enum-bug-keys":222,"./_html":230,"./_object-dps":247,"./_shared-key":263}],246:[function(e,t,r){var n=e("./_an-object"),i=e("./_ie8-dom-define"),s=e("./_to-primitive"),a=Object.defineProperty;r.f=e("./_descriptors")?Object.defineProperty:function(e,t,r){if(n(e),t=s(t,!0),n(r),i)try{return a(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},{"./_an-object":205,"./_descriptors":220,"./_ie8-dom-define":231,"./_to-primitive":271}],247:[function(e,t,r){var n=e("./_object-dp"),i=e("./_an-object"),s=e("./_object-keys");t.exports=e("./_descriptors")?Object.defineProperties:function(e,t){i(e);for(var r,a=s(t),o=a.length,u=0;o>u;)n.f(e,r=a[u++],t[r]);return e}},{"./_an-object":205,"./_descriptors":220,"./_object-dp":246,"./_object-keys":254}],248:[function(e,t,r){var n=e("./_object-pie"),i=e("./_property-desc"),s=e("./_to-iobject"),a=e("./_to-primitive"),o=e("./_has"),u=e("./_ie8-dom-define"),l=Object.getOwnPropertyDescriptor;r.f=e("./_descriptors")?l:function(e,t){if(e=s(e),t=a(t,!0),u)try{return l(e,t)}catch(e){}if(o(e,t))return i(!n.f.call(e,t),e[t])}},{"./_descriptors":220,"./_has":228,"./_ie8-dom-define":231,"./_object-pie":255,"./_property-desc":257,"./_to-iobject":268,"./_to-primitive":271}],249:[function(e,t,r){var n=e("./_to-iobject"),i=e("./_object-gopn").f,s={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],o=function(e){try{return i(e)}catch(e){return a.slice()}};t.exports.f=function(e){return a&&"[object Window]"==s.call(e)?o(e):i(n(e))}},{"./_object-gopn":250,"./_to-iobject":268}],250:[function(e,t,r){var n=e("./_object-keys-internal"),i=e("./_enum-bug-keys").concat("length","prototype");r.f=Object.getOwnPropertyNames||function(e){return n(e,i)}},{"./_enum-bug-keys":222,"./_object-keys-internal":253}],251:[function(e,t,r){r.f=Object.getOwnPropertySymbols},{}],252:[function(e,t,r){var n=e("./_has"),i=e("./_to-object"),s=e("./_shared-key")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(e){return e=i(e),n(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},{"./_has":228,"./_shared-key":263,"./_to-object":270}],253:[function(e,t,r){var n=e("./_has"),i=e("./_to-iobject"),s=e("./_array-includes")(!1),a=e("./_shared-key")("IE_PROTO");t.exports=function(e,t){var r,o=i(e),u=0,l=[];for(r in o)r!=a&&n(o,r)&&l.push(r);for(;t.length>u;)n(o,r=t[u++])&&(~s(l,r)||l.push(r));return l}},{"./_array-includes":207,"./_has":228,"./_shared-key":263,"./_to-iobject":268}],254:[function(e,t,r){var n=e("./_object-keys-internal"),i=e("./_enum-bug-keys");t.exports=Object.keys||function(e){return n(e,i)}},{"./_enum-bug-keys":222,"./_object-keys-internal":253}],255:[function(e,t,r){r.f={}.propertyIsEnumerable},{}],256:[function(e,t,r){var n=e("./_export"),i=e("./_core"),s=e("./_fails");t.exports=function(e,t){var r=(i.Object||{})[e]||Object[e],a={};a[e]=t(r),n(n.S+n.F*s(function(){r(1)}),"Object",a)}},{"./_core":217,"./_export":224,"./_fails":225}],257:[function(e,t,r){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],258:[function(e,t,r){var n=e("./_hide");t.exports=function(e,t,r){for(var i in t)r&&e[i]?e[i]=t[i]:n(e,i,t[i]);return e}},{"./_hide":229}],259:[function(e,t,r){t.exports=e("./_hide")},{"./_hide":229}],260:[function(e,t,r){var n=e("./_is-object"),i=e("./_an-object"),s=function(e,t){if(i(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,r,n){try{n=e("./_ctx")(Function.call,e("./_object-gopd").f(Object.prototype,"__proto__").set,2),n(t,[]),r=!(t instanceof Array)}catch(e){r=!0}return function(e,t){return s(e,t),r?e.__proto__=t:n(e,t),e}}({},!1):void 0),check:s}},{"./_an-object":205,"./_ctx":218,"./_is-object":235,"./_object-gopd":248}],261:[function(e,t,r){"use strict";var n=e("./_global"),i=e("./_core"),s=e("./_object-dp"),a=e("./_descriptors"),o=e("./_wks")("species");t.exports=function(e){var t="function"==typeof i[e]?i[e]:n[e];a&&t&&!t[o]&&s.f(t,o,{configurable:!0,get:function(){return this}})}},{"./_core":217,"./_descriptors":220,"./_global":227,"./_object-dp":246,"./_wks":275}],262:[function(e,t,r){var n=e("./_object-dp").f,i=e("./_has"),s=e("./_wks")("toStringTag");t.exports=function(e,t,r){e&&!i(e=r?e:e.prototype,s)&&n(e,s,{configurable:!0,value:t})}},{"./_has":228,"./_object-dp":246,"./_wks":275}],263:[function(e,t,r){var n=e("./_shared")("keys"),i=e("./_uid");t.exports=function(e){return n[e]||(n[e]=i(e))}},{"./_shared":264,"./_uid":272}],264:[function(e,t,r){var n=e("./_global"),i=n["__core-js_shared__"]||(n["__core-js_shared__"]={});t.exports=function(e){return i[e]||(i[e]={})}},{"./_global":227}],265:[function(e,t,r){var n=e("./_to-integer"),i=e("./_defined");t.exports=function(e){return function(t,r){var s,a,o=String(i(t)),u=n(r),l=o.length;return u<0||u>=l?e?"":void 0:(s=o.charCodeAt(u),s<55296||s>56319||u+1===l||(a=o.charCodeAt(u+1))<56320||a>57343?e?o.charAt(u):s:e?o.slice(u,u+2):a-56320+(s-55296<<10)+65536)}}},{"./_defined":219,"./_to-integer":267}],266:[function(e,t,r){var n=e("./_to-integer"),i=Math.max,s=Math.min;t.exports=function(e,t){return e=n(e),e<0?i(e+t,0):s(e,t)}},{"./_to-integer":267}],267:[function(e,t,r){var n=Math.ceil,i=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},{}],268:[function(e,t,r){var n=e("./_iobject"),i=e("./_defined");t.exports=function(e){return n(i(e))}},{"./_defined":219,"./_iobject":232}],269:[function(e,t,r){var n=e("./_to-integer"),i=Math.min;t.exports=function(e){return e>0?i(n(e),9007199254740991):0}},{"./_to-integer":267}],270:[function(e,t,r){var n=e("./_defined");t.exports=function(e){return Object(n(e))}},{"./_defined":219}],271:[function(e,t,r){var n=e("./_is-object");t.exports=function(e,t){if(!n(e))return e;var r,i;if(t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;if("function"==typeof(r=e.valueOf)&&!n(i=r.call(e)))return i;if(!t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},{"./_is-object":235}],272:[function(e,t,r){var n=0,i=Math.random();t.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},{}],273:[function(e,t,r){var n=e("./_global"),i=e("./_core"),s=e("./_library"),a=e("./_wks-ext"),o=e("./_object-dp").f;t.exports=function(e){var t=i.Symbol||(i.Symbol=s?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||o(t,e,{value:a.f(e)})}},{"./_core":217,"./_global":227,"./_library":242,"./_object-dp":246,"./_wks-ext":274}],274:[function(e,t,r){r.f=e("./_wks")},{"./_wks":275}],275:[function(e,t,r){var n=e("./_shared")("wks"),i=e("./_uid"),s=e("./_global").Symbol,a="function"==typeof s;(t.exports=function(e){return n[e]||(n[e]=a&&s[e]||(a?s:i)("Symbol."+e))}).store=n},{"./_global":227,"./_shared":264,"./_uid":272}],276:[function(e,t,r){var n=e("./_classof"),i=e("./_wks")("iterator"),s=e("./_iterators");t.exports=e("./_core").getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||s[n(e)]}},{"./_classof":211,"./_core":217,"./_iterators":240,"./_wks":275}],277:[function(e,t,r){var n=e("./_an-object"),i=e("./core.get-iterator-method");t.exports=e("./_core").getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return n(t.call(e))}},{"./_an-object":205,"./_core":217,"./core.get-iterator-method":276}],278:[function(e,t,r){"use strict";var n=e("./_add-to-unscopables"),i=e("./_iter-step"),s=e("./_iterators"),a=e("./_to-iobject");t.exports=e("./_iter-define")(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,r):"values"==t?i(0,e[r]):i(0,[r,e[r]])},"values"),s.Arguments=s.Array,n("keys"),n("values"),n("entries")},{"./_add-to-unscopables":203,"./_iter-define":238,"./_iter-step":239,"./_iterators":240,"./_to-iobject":268}],279:[function(e,t,r){"use strict";var n=e("./_collection-strong");t.exports=e("./_collection")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=n.getEntry(this,e);return t&&t.v},set:function(e,t){return n.def(this,0===e?0:e,t)}},n,!0)},{"./_collection":216,"./_collection-strong":213}],280:[function(e,t,r){var n=e("./_export");n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{"./_export":224}],281:[function(e,t,r){var n=e("./_export");n(n.S+n.F,"Object",{assign:e("./_object-assign")})},{"./_export":224,"./_object-assign":244}],282:[function(e,t,r){var n=e("./_export");n(n.S,"Object",{create:e("./_object-create")})},{"./_export":224,"./_object-create":245}],283:[function(e,t,r){var n=e("./_to-object"),i=e("./_object-keys");e("./_object-sap")("keys",function(){return function(e){return i(n(e))}})},{"./_object-keys":254,"./_object-sap":256,"./_to-object":270}],284:[function(e,t,r){var n=e("./_export");n(n.S,"Object",{setPrototypeOf:e("./_set-proto").set})},{"./_export":224,"./_set-proto":260}],285:[function(e,t,r){arguments[4][181][0].apply(r,arguments)},{dup:181}],286:[function(e,t,r){"use strict";var n=e("./_string-at")(!0);e("./_iter-define")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},{"./_iter-define":238,"./_string-at":265}],287:[function(e,t,r){"use strict";var n=e("./_global"),i=e("./_has"),s=e("./_descriptors"),a=e("./_export"),o=e("./_redefine"),u=e("./_meta").KEY,l=e("./_fails"),c=e("./_shared"),p=e("./_set-to-string-tag"),h=e("./_uid"),f=e("./_wks"),d=e("./_wks-ext"),m=e("./_wks-define"),y=e("./_keyof"),g=e("./_enum-keys"),b=e("./_is-array"),v=e("./_an-object"),x=e("./_to-iobject"),E=e("./_to-primitive"),A=e("./_property-desc"),D=e("./_object-create"),C=e("./_object-gopn-ext"),S=e("./_object-gopd"),_=e("./_object-dp"),w=e("./_object-keys"),k=S.f,F=_.f,T=C.f,P=n.Symbol,B=n.JSON,O=B&&B.stringify,j=f("_hidden"),N=f("toPrimitive"),I={}.propertyIsEnumerable,L=c("symbol-registry"),M=c("symbols"),R=c("op-symbols"),U=Object.prototype,V="function"==typeof P,q=n.QObject,G=!q||!q.prototype||!q.prototype.findChild,X=s&&l(function(){return 7!=D(F({},"a",{get:function(){return F(this,"a",{value:7}).a}})).a})?function(e,t,r){var n=k(U,t);n&&delete U[t],F(e,t,r),n&&e!==U&&F(U,t,n)}:F,J=function(e){var t=M[e]=D(P.prototype);return t._k=e,t},W=V&&"symbol"==typeof P.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof P},K=function(e,t,r){return e===U&&K(R,t,r),v(e),t=E(t,!0),v(r),i(M,t)?(r.enumerable?(i(e,j)&&e[j][t]&&(e[j][t]=!1),r=D(r,{enumerable:A(0,!1)})):(i(e,j)||F(e,j,A(1,{})),e[j][t]=!0),X(e,t,r)):F(e,t,r)},z=function(e,t){v(e);for(var r,n=g(t=x(t)),i=0,s=n.length;s>i;)K(e,r=n[i++],t[r]);return e},Y=function(e,t){return void 0===t?D(e):z(D(e),t)},H=function(e){var t=I.call(this,e=E(e,!0));return!(this===U&&i(M,e)&&!i(R,e))&&(!(t||!i(this,e)||!i(M,e)||i(this,j)&&this[j][e])||t)},$=function(e,t){if(e=x(e),t=E(t,!0),e!==U||!i(M,t)||i(R,t)){var r=k(e,t);return!r||!i(M,t)||i(e,j)&&e[j][t]||(r.enumerable=!0),r}},Q=function(e){for(var t,r=T(x(e)),n=[],s=0;r.length>s;)i(M,t=r[s++])||t==j||t==u||n.push(t);return n},Z=function(e){for(var t,r=e===U,n=T(r?R:x(e)),s=[],a=0;n.length>a;)!i(M,t=n[a++])||r&&!i(U,t)||s.push(M[t]);return s};V||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(r){this===U&&t.call(R,r),i(this,j)&&i(this[j],e)&&(this[j][e]=!1),X(this,e,A(1,r))};return s&&G&&X(U,e,{configurable:!0,set:t}),J(e)},o(P.prototype,"toString",function(){return this._k}),S.f=$,_.f=K,e("./_object-gopn").f=C.f=Q,e("./_object-pie").f=H,e("./_object-gops").f=Z,s&&!e("./_library")&&o(U,"propertyIsEnumerable",H,!0),d.f=function(e){return J(f(e))}),a(a.G+a.W+a.F*!V,{Symbol:P});for(var ee="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),te=0;ee.length>te;)f(ee[te++]);for(var ee=w(f.store),te=0;ee.length>te;)m(ee[te++]);a(a.S+a.F*!V,"Symbol",{for:function(e){return i(L,e+="")?L[e]:L[e]=P(e)},keyFor:function(e){if(W(e))return y(L,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){G=!0},useSimple:function(){G=!1}}),a(a.S+a.F*!V,"Object",{create:Y,defineProperty:K,defineProperties:z,getOwnPropertyDescriptor:$,getOwnPropertyNames:Q,getOwnPropertySymbols:Z}),B&&a(a.S+a.F*(!V||l(function(){var e=P();return"[null]"!=O([e])||"{}"!=O({a:e})||"{}"!=O(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!W(e)){for(var t,r,n=[e],i=1;arguments.length>i;)n.push(arguments[i++]);return t=n[1],"function"==typeof t&&(r=t),!r&&b(t)||(t=function(e,t){if(r&&(t=r.call(this,e,t)),!W(t))return t}),n[1]=t,O.apply(B,n)}}}),P.prototype[N]||e("./_hide")(P.prototype,N,P.prototype.valueOf),p(P,"Symbol"),p(Math,"Math",!0),p(n.JSON,"JSON",!0)},{"./_an-object":205,"./_descriptors":220,"./_enum-keys":223,"./_export":224,"./_fails":225,"./_global":227,"./_has":228,"./_hide":229,"./_is-array":234,"./_keyof":241,"./_library":242,"./_meta":243,"./_object-create":245,"./_object-dp":246,"./_object-gopd":248,"./_object-gopn":250,"./_object-gopn-ext":249,"./_object-gops":251,"./_object-keys":254,"./_object-pie":255,"./_property-desc":257,"./_redefine":259,"./_set-to-string-tag":262,"./_shared":264,"./_to-iobject":268,"./_to-primitive":271,"./_uid":272,"./_wks":275,"./_wks-define":273,"./_wks-ext":274}],288:[function(e,t,r){"use strict";var n,i=e("./_array-methods")(0),s=e("./_redefine"),a=e("./_meta"),o=e("./_object-assign"),u=e("./_collection-weak"),l=e("./_is-object"),c=a.getWeak,p=Object.isExtensible,h=u.ufstore,f={},d=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},m={get:function(e){if(l(e)){var t=c(e);return!0===t?h(this).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(this,e,t)}},y=t.exports=e("./_collection")("WeakMap",d,m,u,!0,!0);7!=(new y).set((Object.freeze||Object)(f),7).get(f)&&(n=u.getConstructor(d),o(n.prototype,m),a.NEED=!0,i(["delete","has","get","set"],function(e){var t=y.prototype,r=t[e];s(t,e,function(t,i){if(l(t)&&!p(t)){this._f||(this._f=new n);var s=this._f[e](t,i);return"set"==e?this:s}return r.call(this,t,i)})}))},{"./_array-methods":208,"./_collection":216,"./_collection-weak":215,"./_is-object":235,"./_meta":243,"./_object-assign":244,"./_redefine":259}],289:[function(e,t,r){"use strict";var n=e("./_collection-weak");e("./_collection")("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return n.def(this,e,!0)}},n,!1,!0)},{"./_collection":216,"./_collection-weak":215}],290:[function(e,t,r){var n=e("./_export");n(n.P+n.R,"Map",{toJSON:e("./_collection-to-json")("Map")})},{"./_collection-to-json":214,"./_export":224}],291:[function(e,t,r){e("./_wks-define")("asyncIterator")},{"./_wks-define":273}],292:[function(e,t,r){e("./_wks-define")("observable")},{"./_wks-define":273}],293:[function(e,t,r){e("./es6.array.iterator");for(var n=e("./_global"),i=e("./_hide"),s=e("./_iterators"),a=e("./_wks")("toStringTag"),o=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],u=0;u<5;u++){var l=o[u],c=n[l],p=c&&c.prototype;p&&!p[a]&&i(p,a,l),s[l]=s.Array}},{"./_global":227,"./_hide":229,"./_iterators":240,"./_wks":275,"./es6.array.iterator":278}],294:[function(e,t,r){(function(e){function t(e){return Array.isArray?Array.isArray(e):"[object Array]"===y(e)}function n(e){return"boolean"==typeof e}function i(e){return null===e}function s(e){return null==e}function a(e){return"number"==typeof e}function o(e){return"string"==typeof e}function u(e){return"symbol"==typeof e}function l(e){return void 0===e}function c(e){return"[object RegExp]"===y(e)}function p(e){return"object"==typeof e&&null!==e}function h(e){return"[object Date]"===y(e)}function f(e){return"[object Error]"===y(e)||e instanceof Error}function d(e){return"function"==typeof e}function m(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e}function y(e){return Object.prototype.toString.call(e)}r.isArray=t,r.isBoolean=n,r.isNull=i,r.isNullOrUndefined=s,r.isNumber=a,r.isString=o,r.isSymbol=u,r.isUndefined=l,r.isRegExp=c,r.isObject=p,r.isDate=h,r.isError=f,r.isFunction=d,r.isPrimitive=m, +r.isBuffer=e.isBuffer}).call(this,{isBuffer:e("../../is-buffer/index.js")})},{"../../is-buffer/index.js":308}],295:[function(e,t,r){t.exports=e("./src/node")},{"./src/node":298}],296:[function(e,t,r){(function(n){function i(){return!("undefined"==typeof window||!window||void 0===window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document&&"WebkitAppearance"in document.documentElement.style||"undefined"!=typeof window&&window&&window.console&&(console.firebug||console.exception&&console.table)||"undefined"!=typeof navigator&&navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function s(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+r.humanize(this.diff),t){var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var i=0,s=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(i++,"%c"===e&&(s=i))}),e.splice(s,0,n)}}function a(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function o(e){try{null==e?r.storage.removeItem("debug"):r.storage.debug=e}catch(e){}}function u(){var e;try{e=r.storage.debug}catch(e){}return!e&&void 0!==n&&"env"in n&&(e=n.env.DEBUG),e}r=t.exports=e("./debug"),r.log=a,r.formatArgs=s,r.save=o,r.load=u,r.useColors=i,r.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),r.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],r.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},r.enable(u())}).call(this,e("_process"))},{"./debug":297,_process:539}],297:[function(e,t,r){function n(e){var t,n=0;for(t in e)n=(n<<5)-n+e.charCodeAt(t),n|=0;return r.colors[Math.abs(n)%r.colors.length]}function i(e){function t(){if(t.enabled){var e=t,n=+new Date,i=n-(l||n);e.diff=i,e.prev=l,e.curr=n,l=n;for(var s=new Array(arguments.length),a=0;ar||a===r&&o>n)&&(r=a,n=o,t=Number(i))}return t}var i=e("repeating");t.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");var t,r,s=0,a=0,o=0,u={};e.split(/\n/g).forEach(function(e){if(e){var n,i=e.match(/^(?:( )+|\t+)/);i?(n=i[0].length,i[1]?a++:s++):n=0;var l=n-o;o=n,l?(r=l>0,t=u[r?l:-l],t?t[0]++:t=u[l]=[1,0]):t&&(t[1]+=Number(r))}});var l,c,p=n(u);return p?a>=s?(l="space",c=i(" ",p)):(l="tab",c=i("\t",p)):(l=null,c=""),{amount:p,type:l,indent:c}}},{repeating:588}],300:[function(e,t,r){"use strict";t.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}},{}],301:[function(e,t,r){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function i(e){return"function"==typeof e}function s(e){return"number"==typeof e}function a(e){return"object"==typeof e&&null!==e}function o(e){return void 0===e}t.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,r,n,s,u,l;if(this._events||(this._events={}),"error"===e&&(!this._events.error||a(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}if(r=this._events[e],o(r))return!1;if(i(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(a(r))for(s=Array.prototype.slice.call(arguments,1),l=r.slice(),n=l.length,u=0;u0&&this._events[e].length>r&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError("listener must be a function");var n=!1;return r.listener=t,this.on(e,r),this},n.prototype.removeListener=function(e,t){var r,n,s,o;if(!i(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],s=r.length,n=-1,r===t||i(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(a(r)){for(o=s;o-- >0;)if(r[o]===t||r[o].listener&&r[o].listener===t){n=o;break}if(n<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(n,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],i(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){return this._events&&this._events[e]?i(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(i(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},{}],302:[function(e,t,r){t.exports={builtin:{Array:!1,ArrayBuffer:!1,Boolean:!1,constructor:!1,DataView:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Float32Array:!1,Float64Array:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,Promise:!1,propertyIsEnumerable:!1,Proxy:!1,RangeError:!1,ReferenceError:!1,Reflect:!1,RegExp:!1,Set:!1,String:!1,Symbol:!1,SyntaxError:!1,System:!1,toLocaleString:!1,toString:!1,TypeError:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1,WeakMap:!1,WeakSet:!1},es5:{Array:!1,Boolean:!1,constructor:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,propertyIsEnumerable:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,toLocaleString:!1,toString:!1,TypeError:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1},es6:{Array:!1,ArrayBuffer:!1,Boolean:!1,constructor:!1,DataView:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Float32Array:!1,Float64Array:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,Promise:!1,propertyIsEnumerable:!1,Proxy:!1,RangeError:!1,ReferenceError:!1,Reflect:!1,RegExp:!1,Set:!1,String:!1,Symbol:!1,SyntaxError:!1,System:!1,toLocaleString:!1,toString:!1,TypeError:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1,WeakMap:!1,WeakSet:!1},browser:{addEventListener:!1,alert:!1,AnalyserNode:!1,Animation:!1,AnimationEffectReadOnly:!1,AnimationEffectTiming:!1,AnimationEffectTimingReadOnly:!1,AnimationEvent:!1,AnimationPlaybackEvent:!1,AnimationTimeline:!1,applicationCache:!1,ApplicationCache:!1,ApplicationCacheErrorEvent:!1,atob:!1,Attr:!1,Audio:!1,AudioBuffer:!1,AudioBufferSourceNode:!1,AudioContext:!1,AudioDestinationNode:!1,AudioListener:!1,AudioNode:!1,AudioParam:!1,AudioProcessingEvent:!1,AutocompleteErrorEvent:!1,BarProp:!1,BatteryManager:!1,BeforeUnloadEvent:!1,BiquadFilterNode:!1,Blob:!1,blur:!1,btoa:!1,Cache:!1,caches:!1,CacheStorage:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CDATASection:!1,ChannelMergerNode:!1,ChannelSplitterNode:!1,CharacterData:!1,clearInterval:!1,clearTimeout:!1,clientInformation:!1,ClientRect:!1,ClientRectList:!1,ClipboardEvent:!1,close:!1,closed:!1,CloseEvent:!1,Comment:!1,CompositionEvent:!1,confirm:!1,console:!1,ConvolverNode:!1,Credential:!1,CredentialsContainer:!1,crypto:!1,Crypto:!1,CryptoKey:!1,CSS:!1,CSSAnimation:!1,CSSFontFaceRule:!1,CSSImportRule:!1,CSSKeyframeRule:!1,CSSKeyframesRule:!1,CSSMediaRule:!1,CSSPageRule:!1,CSSRule:!1,CSSRuleList:!1,CSSStyleDeclaration:!1,CSSStyleRule:!1,CSSStyleSheet:!1,CSSSupportsRule:!1,CSSTransition:!1,CSSUnknownRule:!1,CSSViewportRule:!1,customElements:!1,CustomEvent:!1,DataTransfer:!1,DataTransferItem:!1,DataTransferItemList:!1,Debug:!1,defaultStatus:!1,defaultstatus:!1,DelayNode:!1,DeviceMotionEvent:!1,DeviceOrientationEvent:!1,devicePixelRatio:!1,dispatchEvent:!1,document:!1,Document:!1,DocumentFragment:!1,DocumentTimeline:!1,DocumentType:!1,DOMError:!1,DOMException:!1,DOMImplementation:!1,DOMParser:!1,DOMSettableTokenList:!1,DOMStringList:!1,DOMStringMap:!1,DOMTokenList:!1,DragEvent:!1,DynamicsCompressorNode:!1,Element:!1,ElementTimeControl:!1,ErrorEvent:!1,event:!1,Event:!1,EventSource:!1,EventTarget:!1,external:!1,FederatedCredential:!1,fetch:!1,File:!1,FileError:!1,FileList:!1,FileReader:!1,find:!1,focus:!1,FocusEvent:!1,FontFace:!1,FormData:!1,frameElement:!1,frames:!1,GainNode:!1,Gamepad:!1,GamepadButton:!1,GamepadEvent:!1,getComputedStyle:!1,getSelection:!1,HashChangeEvent:!1,Headers:!1,history:!1,History:!1,HTMLAllCollection:!1,HTMLAnchorElement:!1,HTMLAppletElement:!1,HTMLAreaElement:!1,HTMLAudioElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLContentElement:!1,HTMLDataListElement:!1,HTMLDetailsElement:!1,HTMLDialogElement:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLDocument:!1,HTMLElement:!1,HTMLEmbedElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormControlsCollection:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLKeygenElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMarqueeElement:!1,HTMLMediaElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLMeterElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLOptionsCollection:!1,HTMLOutputElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPictureElement:!1,HTMLPreElement:!1,HTMLProgressElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLShadowElement:!1,HTMLSourceElement:!1,HTMLSpanElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLTrackElement:!1,HTMLUListElement:!1,HTMLUnknownElement:!1,HTMLVideoElement:!1,IDBCursor:!1,IDBCursorWithValue:!1,IDBDatabase:!1,IDBEnvironment:!1,IDBFactory:!1,IDBIndex:!1,IDBKeyRange:!1,IDBObjectStore:!1,IDBOpenDBRequest:!1,IDBRequest:!1,IDBTransaction:!1,IDBVersionChangeEvent:!1,Image:!1,ImageBitmap:!1,ImageData:!1,indexedDB:!1,innerHeight:!1,innerWidth:!1,InputEvent:!1,InputMethodContext:!1,IntersectionObserver:!1,IntersectionObserverEntry:!1,Intl:!1,KeyboardEvent:!1,KeyframeEffect:!1,KeyframeEffectReadOnly:!1,length:!1,localStorage:!1,location:!1,Location:!1,locationbar:!1,matchMedia:!1,MediaElementAudioSourceNode:!1,MediaEncryptedEvent:!1,MediaError:!1,MediaKeyError:!1,MediaKeyEvent:!1,MediaKeyMessageEvent:!1,MediaKeys:!1,MediaKeySession:!1,MediaKeyStatusMap:!1,MediaKeySystemAccess:!1,MediaList:!1,MediaQueryList:!1,MediaQueryListEvent:!1,MediaSource:!1,MediaRecorder:!1,MediaStream:!1,MediaStreamAudioDestinationNode:!1,MediaStreamAudioSourceNode:!1,MediaStreamEvent:!1,MediaStreamTrack:!1,menubar:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MIDIAccess:!1,MIDIConnectionEvent:!1,MIDIInput:!1,MIDIInputMap:!1,MIDIMessageEvent:!1,MIDIOutput:!1,MIDIOutputMap:!1,MIDIPort:!1,MimeType:!1,MimeTypeArray:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationEvent:!1,MutationObserver:!1,MutationRecord:!1,name:!1,NamedNodeMap:!1,navigator:!1,Navigator:!1,Node:!1,NodeFilter:!1,NodeIterator:!1,NodeList:!1,Notification:!1,OfflineAudioCompletionEvent:!1,OfflineAudioContext:!1,offscreenBuffering:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,opera:!1,Option:!1,OscillatorNode:!1,outerHeight:!1,outerWidth:!1,PageTransitionEvent:!1,pageXOffset:!1,pageYOffset:!1,parent:!1,PasswordCredential:!1,Path2D:!1,performance:!1,Performance:!1,PerformanceEntry:!1,PerformanceMark:!1,PerformanceMeasure:!1,PerformanceNavigation:!1,PerformanceResourceTiming:!1,PerformanceTiming:!1,PeriodicWave:!1,Permissions:!1,PermissionStatus:!1,personalbar:!1,Plugin:!1,PluginArray:!1,PopStateEvent:!1,postMessage:!1,print:!1,ProcessingInstruction:!1,ProgressEvent:!1,PromiseRejectionEvent:!1,prompt:!1,PushManager:!1,PushSubscription:!1,RadioNodeList:!1,Range:!1,ReadableByteStream:!1,ReadableStream:!1,removeEventListener:!1,Request:!1,requestAnimationFrame:!1,requestIdleCallback:!1,resizeBy:!1,resizeTo:!1,Response:!1,RTCIceCandidate:!1,RTCSessionDescription:!1,RTCPeerConnection:!1,screen:!1,Screen:!1,screenLeft:!1,ScreenOrientation:!1,screenTop:!1,screenX:!1,screenY:!1,ScriptProcessorNode:!1,scroll:!1,scrollbars:!1,scrollBy:!1,scrollTo:!1,scrollX:!1,scrollY:!1,SecurityPolicyViolationEvent:!1,Selection:!1,self:!1,ServiceWorker:!1,ServiceWorkerContainer:!1,ServiceWorkerRegistration:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,ShadowRoot:!1,SharedKeyframeList:!1,SharedWorker:!1,showModalDialog:!1,SiteBoundCredential:!1,speechSynthesis:!1,SpeechSynthesisEvent:!1,SpeechSynthesisUtterance:!1,status:!1,statusbar:!1,stop:!1,Storage:!1,StorageEvent:!1,styleMedia:!1,StyleSheet:!1,StyleSheetList:!1,SubtleCrypto:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimationElement:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCSSRule:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDiscardElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGEvent:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEDropShadowElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGeometryElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGGraphicsElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLinearGradientElement:!1,SVGLineElement:!1,SVGLocatable:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGMPathElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSVGElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformable:!1,SVGTransformList:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGUnitTypes:!1,SVGURIReference:!1,SVGUseElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGVKernElement:!1,SVGZoomAndPan:!1,SVGZoomEvent:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TextEvent:!1,TextMetrics:!1,TextTrack:!1,TextTrackCue:!1,TextTrackCueList:!1,TextTrackList:!1,TimeEvent:!1,TimeRanges:!1,toolbar:!1,top:!1,Touch:!1,TouchEvent:!1,TouchList:!1,TrackEvent:!1,TransitionEvent:!1,TreeWalker:!1,UIEvent:!1,URL:!1,URLSearchParams:!1,ValidityState:!1,VTTCue:!1,WaveShaperNode:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,WheelEvent:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLDocument:!1,XMLHttpRequest:!1,XMLHttpRequestEventTarget:!1,XMLHttpRequestProgressEvent:!1,XMLHttpRequestUpload:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1,XSLTProcessor:!1},worker:{applicationCache:!1,atob:!1,Blob:!1,BroadcastChannel:!1,btoa:!1,Cache:!1,caches:!1,clearInterval:!1,clearTimeout:!1,close:!0,console:!1,fetch:!1,FileReaderSync:!1,FormData:!1,Headers:!1,IDBCursor:!1,IDBCursorWithValue:!1,IDBDatabase:!1,IDBFactory:!1,IDBIndex:!1,IDBKeyRange:!1,IDBObjectStore:!1,IDBOpenDBRequest:!1,IDBRequest:!1,IDBTransaction:!1,IDBVersionChangeEvent:!1,ImageData:!1,importScripts:!0,indexedDB:!1,location:!1,MessageChannel:!1,MessagePort:!1,name:!1,navigator:!1,Notification:!1,onclose:!0,onconnect:!0,onerror:!0,onlanguagechange:!0,onmessage:!0,onoffline:!0,ononline:!0,onrejectionhandled:!0,onunhandledrejection:!0,performance:!1,Performance:!1,PerformanceEntry:!1,PerformanceMark:!1,PerformanceMeasure:!1,PerformanceNavigation:!1,PerformanceResourceTiming:!1,PerformanceTiming:!1,postMessage:!0,Promise:!1,Request:!1,Response:!1,self:!0,ServiceWorkerRegistration:!1,setInterval:!1,setTimeout:!1,TextDecoder:!1,TextEncoder:!1,URL:!1,URLSearchParams:!1,WebSocket:!1,Worker:!1,XMLHttpRequest:!1},node:{__dirname:!1,__filename:!1,arguments:!1,Buffer:!1,clearImmediate:!1,clearInterval:!1,clearTimeout:!1,console:!1,exports:!0,GLOBAL:!1,global:!1,Intl:!1,module:!1,process:!1,require:!1,root:!1,setImmediate:!1,setInterval:!1,setTimeout:!1},commonjs:{exports:!0,module:!1,require:!1,global:!1},amd:{define:!1,require:!1},mocha:{after:!1,afterEach:!1,before:!1,beforeEach:!1,context:!1,describe:!1,it:!1,mocha:!1,run:!1,setup:!1,specify:!1,suite:!1,suiteSetup:!1,suiteTeardown:!1,teardown:!1,test:!1,xcontext:!1,xdescribe:!1,xit:!1,xspecify:!1},jasmine:{afterAll:!1,afterEach:!1,beforeAll:!1,beforeEach:!1,describe:!1,expect:!1,fail:!1,fdescribe:!1,fit:!1,it:!1,jasmine:!1,pending:!1,runs:!1,spyOn:!1,waits:!1,waitsFor:!1,xdescribe:!1,xit:!1},jest:{afterAll:!1,afterEach:!1,beforeAll:!1,beforeEach:!1,check:!1,describe:!1,expect:!1,gen:!1,it:!1,fdescribe:!1,fit:!1,jest:!1,pit:!1,require:!1,test:!1,xdescribe:!1,xit:!1,xtest:!1},qunit:{asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notOk:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,throws:!1},phantomjs:{console:!0,exports:!0,phantom:!0,require:!0,WebPage:!0},couch:{emit:!1,exports:!1,getRow:!1,log:!1,module:!1,provides:!1,require:!1,respond:!1,send:!1,start:!1,sum:!1},rhino:{defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},nashorn:{__DIR__:!1,__FILE__:!1,__LINE__:!1,com:!1,edu:!1,exit:!1,Java:!1,java:!1,javafx:!1,JavaImporter:!1,javax:!1,JSAdapter:!1,load:!1,loadWithNewGlobal:!1,org:!1,Packages:!1,print:!1,quit:!1},wsh:{ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WScript:!0,WSH:!0,XDomainRequest:!0},jquery:{$:!1,jQuery:!1},yui:{Y:!1,YUI:!1,YUI_config:!1},shelljs:{cat:!1,cd:!1,chmod:!1,config:!1,cp:!1,dirs:!1,echo:!1,env:!1,error:!1,exec:!1,exit:!1,find:!1,grep:!1,ls:!1,ln:!1,mkdir:!1,mv:!1,popd:!1,pushd:!1,pwd:!1,rm:!1,sed:!1,set:!1,target:!1,tempdir:!1,test:!1,touch:!1,which:!1},prototypejs:{$:!1,$$:!1,$A:!1,$break:!1,$continue:!1,$F:!1,$H:!1,$R:!1,$w:!1,Abstract:!1,Ajax:!1,Autocompleter:!1,Builder:!1,Class:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Element:!1,Enumerable:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Scriptaculous:!1,Selector:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Template:!1,Toggle:!1,Try:!1},meteor:{$:!1,_:!1,Accounts:!1,AccountsClient:!1,AccountsServer:!1,AccountsCommon:!1,App:!1,Assets:!1,Blaze:!1,check:!1,Cordova:!1,DDP:!1,DDPServer:!1,DDPRateLimiter:!1,Deps:!1,EJSON:!1,Email:!1,HTTP:!1,Log:!1,Match:!1,Meteor:!1,Mongo:!1,MongoInternals:!1,Npm:!1,Package:!1,Plugin:!1,process:!1,Random:!1,ReactiveDict:!1,ReactiveVar:!1,Router:!1,ServiceConfiguration:!1,Session:!1,share:!1,Spacebars:!1,Template:!1,Tinytest:!1,Tracker:!1,UI:!1,Utils:!1,WebApp:!1,WebAppInternals:!1},mongo:{_isWindows:!1,_rand:!1,BulkWriteResult:!1,cat:!1,cd:!1,connect:!1,db:!1,getHostName:!1,getMemInfo:!1,hostname:!1,ISODate:!1,listFiles:!1,load:!1,ls:!1,md5sumFile:!1,mkdir:!1,Mongo:!1,NumberInt:!1,NumberLong:!1,ObjectId:!1,PlanCache:!1,print:!1,printjson:!1,pwd:!1,quit:!1,removeFile:!1,rs:!1,sh:!1,UUID:!1,version:!1,WriteResult:!1},applescript:{$:!1,Application:!1,Automation:!1,console:!1,delay:!1,Library:!1,ObjC:!1,ObjectSpecifier:!1,Path:!1,Progress:!1,Ref:!1},serviceworker:{caches:!1,Cache:!1,CacheStorage:!1,Client:!1,clients:!1,Clients:!1,ExtendableEvent:!1,ExtendableMessageEvent:!1,FetchEvent:!1,importScripts:!1,registration:!1,self:!1,ServiceWorker:!1,ServiceWorkerContainer:!1,ServiceWorkerGlobalScope:!1,ServiceWorkerMessageEvent:!1,ServiceWorkerRegistration:!1,skipWaiting:!1,WindowClient:!1},atomtest:{advanceClock:!1,fakeClearInterval:!1,fakeClearTimeout:!1,fakeSetInterval:!1,fakeSetTimeout:!1,resetTimeouts:!1,waitsForPromise:!1},embertest:{andThen:!1,click:!1,currentPath:!1,currentRouteName:!1,currentURL:!1,fillIn:!1,find:!1,findWithAssert:!1,keyEvent:!1,pauseTest:!1,resumeTest:!1,triggerEvent:!1,visit:!1},protractor:{$:!1,$$:!1,browser:!1,By:!1,by:!1,DartObject:!1,element:!1,protractor:!1},"shared-node-browser":{clearInterval:!1,clearTimeout:!1,console:!1,setInterval:!1,setTimeout:!1},webextensions:{browser:!1,chrome:!1,opr:!1},greasemonkey:{GM_addStyle:!1,GM_deleteValue:!1,GM_getResourceText:!1,GM_getResourceURL:!1,GM_getValue:!1,GM_info:!1,GM_listValues:!1,GM_log:!1,GM_openInTab:!1,GM_registerMenuCommand:!1,GM_setClipboard:!1,GM_setValue:!1,GM_xmlhttpRequest:!1,unsafeWindow:!1}}},{}],303:[function(e,t,r){t.exports=e("./globals.json")},{"./globals.json":302}],304:[function(e,t,r){"use strict";var n=e("ansi-regex"),i=new RegExp(n().source);t.exports=i.test.bind(i)},{"ansi-regex":1}],305:[function(e,t,r){r.read=function(e,t,r,n,i){var s,a,o=8*i-n-1,u=(1<>1,c=-7,p=r?i-1:0,h=r?-1:1,f=e[t+p];for(p+=h,s=f&(1<<-c)-1,f>>=-c,c+=o;c>0;s=256*s+e[t+p],p+=h,c-=8);for(a=s&(1<<-c)-1,s>>=-c,c+=n;c>0;a=256*a+e[t+p],p+=h,c-=8);if(0===s)s=1-l;else{if(s===u)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,n),s-=l}return(f?-1:1)*a*Math.pow(2,s-n)},r.write=function(e,t,r,n,i,s){var a,o,u,l=8*s-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:s-1,d=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),t+=a+p>=1?h/u:h*Math.pow(2,1-p),t*u>=2&&(a++,u/=2),a+p>=c?(o=0,a=c):a+p>=1?(o=(t*u-1)*Math.pow(2,i),a+=p):(o=t*Math.pow(2,p-1)*Math.pow(2,i),a=0));i>=8;e[r+f]=255&o,f+=d,o/=256,i-=8);for(a=a<0;e[r+f]=255&a,f+=d,a/=256,l-=8);e[r+f-d]|=128*m}},{}],306:[function(e,t,r){"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],307:[function(e,t,r){"use strict";var n=function(e,t,r,n,i,s,a,o){if(void 0===t)throw new Error("invariant requires an error message argument");if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[r,n,i,s,a,o],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}};t.exports=n},{}],308:[function(e,t,r){function n(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function i(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&n(e.slice(0,0))}t.exports=function(e){return null!=e&&(n(e)||i(e)||!!e._isBuffer)}},{}],309:[function(e,t,r){"use strict";var n=e("number-is-nan");t.exports=Number.isFinite||function(e){return!("number"!=typeof e||n(e)||e===1/0||e===-1/0)}},{"number-is-nan":533}],310:[function(e,t,r){var n={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},{}],311:[function(e,t,r){Object.defineProperty(r,"__esModule",{value:!0}), +r.default=/((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyu]{1,5}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g,r.matchToToken=function(e){var t={type:"invalid",value:e[0]};return e[1]?(t.type="string",t.closed=!(!e[3]&&!e[4])):e[5]?t.type="comment":e[6]?(t.type="comment",t.closed=!!e[7]):e[8]?t.type="regex":e[9]?t.type="number":e[10]?t.type="name":e[11]?t.type="punctuator":e[12]&&(t.type="whitespace"),t}},{}],312:[function(e,t,r){(function(e){!function(n){var i="object"==typeof r&&r,s="object"==typeof t&&t&&t.exports==i&&t,a="object"==typeof e&&e;a.global!==a&&a.window!==a||(n=a);var o={},u=o.hasOwnProperty,l=function(e,t){var r;for(r in e)u.call(e,r)&&t(r,e[r])},c=function(e,t){return t?(l(t,function(t,r){e[t]=r}),e):e},p=function(e,t){for(var r=e.length,n=-1;++n=55296&&j<=56319&&R>M+1&&(N=L.charCodeAt(M+1))>=56320&&N<=57343){I=1024*(j-55296)+N-56320+65536;var V=I.toString(16);u||(V=V.toUpperCase()),i+="\\u{"+V+"}",M++}else{if(!t.escapeEverything){if(D.test(U)){i+=U;continue}if('"'==U){i+=s==U?'\\"':U;continue}if("'"==U){i+=s==U?"\\'":U;continue}}if("\0"!=U||n||A.test(L.charAt(M+1)))if(E.test(U))i+=x[U];else{var q=U.charCodeAt(0),V=q.toString(16);u||(V=V.toUpperCase());var G=V.length>2||n,X="\\"+(G?"u":"x")+("0000"+V).slice(G?-4:-2);i+=X}else i+="\\0"}}return t.wrap&&(i=s+i+s),t.escapeEtago?i.replace(/<\/(script|style)/gi,"<\\/$1"):i};C.version="1.3.0","function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return C}):i&&!i.nodeType?s?s.exports=C:i.jsesc=C:n.jsesc=C}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],313:[function(e,t,r){var n="object"==typeof r?r:{};n.parse=function(){"use strict";var e,t,r,n,i,s,a={"'":"'",'"':'"',"\\":"\\","/":"/","\n":"",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},o=[" ","\t","\r","\n","\v","\f"," ","\ufeff"],u=function(e){return""===e?"EOF":"'"+e+"'"},l=function(n){var s=new SyntaxError;throw s.message=n+" at line "+t+" column "+r+" of the JSON5 data. Still to read: "+JSON.stringify(i.substring(e-1,e+19)),s.at=e,s.lineNumber=t,s.columnNumber=r,s},c=function(s){return s&&s!==n&&l("Expected "+u(s)+" instead of "+u(n)),n=i.charAt(e),e++,r++,("\n"===n||"\r"===n&&"\n"!==p())&&(t++,r=0),n},p=function(){return i.charAt(e)},h=function(){var e=n;for("_"!==n&&"$"!==n&&(n<"a"||n>"z")&&(n<"A"||n>"Z")&&l("Bad identifier as unquoted key");c()&&("_"===n||"$"===n||n>="a"&&n<="z"||n>="A"&&n<="Z"||n>="0"&&n<="9");)e+=n;return e},f=function(){var e,t="",r="",i=10;if("-"!==n&&"+"!==n||(t=n,c(n)),"I"===n)return e=v(),("number"!=typeof e||isNaN(e))&&l("Unexpected word for number"),"-"===t?-e:e;if("N"===n)return e=v(),isNaN(e)||l("expected word to be NaN"),e;switch("0"===n&&(r+=n,c(),"x"===n||"X"===n?(r+=n,c(),i=16):n>="0"&&n<="9"&&l("Octal literal")),i){case 10:for(;n>="0"&&n<="9";)r+=n,c();if("."===n)for(r+=".";c()&&n>="0"&&n<="9";)r+=n;if("e"===n||"E"===n)for(r+=n,c(),"-"!==n&&"+"!==n||(r+=n,c());n>="0"&&n<="9";)r+=n,c();break;case 16:for(;n>="0"&&n<="9"||n>="A"&&n<="F"||n>="a"&&n<="f";)r+=n,c()}if(e="-"===t?-r:+r,isFinite(e))return e;l("Bad number")},d=function(){var e,t,r,i,s="";if('"'===n||"'"===n)for(r=n;c();){if(n===r)return c(),s;if("\\"===n)if(c(),"u"===n){for(i=0,t=0;t<4&&(e=parseInt(c(),16),isFinite(e));t+=1)i=16*i+e;s+=String.fromCharCode(i)}else if("\r"===n)"\n"===p()&&c();else{if("string"!=typeof a[n])break;s+=a[n]}else{if("\n"===n)break;s+=n}}l("Bad string")},m=function(){"/"!==n&&l("Not an inline comment");do{if(c(),"\n"===n||"\r"===n)return void c()}while(n)},y=function(){"*"!==n&&l("Not a block comment");do{for(c();"*"===n;)if(c("*"),"/"===n)return void c("/")}while(n);l("Unterminated block comment")},g=function(){"/"!==n&&l("Not a comment"),c("/"),"/"===n?m():"*"===n?y():l("Unrecognized comment")},b=function(){for(;n;)if("/"===n)g();else{if(!(o.indexOf(n)>=0))return;c()}},v=function(){switch(n){case"t":return c("t"),c("r"),c("u"),c("e"),!0;case"f":return c("f"),c("a"),c("l"),c("s"),c("e"),!1;case"n":return c("n"),c("u"),c("l"),c("l"),null;case"I":return c("I"),c("n"),c("f"),c("i"),c("n"),c("i"),c("t"),c("y"),1/0;case"N":return c("N"),c("a"),c("N"),NaN}l("Unexpected "+u(n))},x=function(){var e=[];if("["===n)for(c("["),b();n;){if("]"===n)return c("]"),e;if(","===n?l("Missing array element"):e.push(s()),b(),","!==n)return c("]"),e;c(","),b()}l("Bad array")},E=function(){var e,t={};if("{"===n)for(c("{"),b();n;){if("}"===n)return c("}"),t;if(e='"'===n||"'"===n?d():h(),b(),c(":"),t[e]=s(),b(),","!==n)return c("}"),t;c(","),b()}l("Bad object")};return s=function(){switch(b(),n){case"{":return E();case"[":return x();case'"':case"'":return d();case"-":case"+":case".":return f();default:return n>="0"&&n<="9"?f():v()}},function(a,o){var u;return i=String(a),e=0,t=1,r=1,n=" ",u=s(),b(),n&&l("Syntax error"),"function"==typeof o?function e(t,r){var n,i,s=t[r];if(s&&"object"==typeof s)for(n in s)Object.prototype.hasOwnProperty.call(s,n)&&(i=e(s,n),void 0!==i?s[n]=i:delete s[n]);return o.call(t,r,s)}({"":u},""):u}}(),n.stringify=function(e,t,r){function i(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"_"===e||"$"===e}function s(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||"_"===e||"$"===e}function a(e){if("string"!=typeof e)return!1;if(!s(e[0]))return!1;for(var t=1,r=e.length;t10&&(e=e.substring(0,10));for(var n=r?"":"\n",i=0;i=0?i:void 0:i};n.isWord=a;var d,m=[];r&&("string"==typeof r?d=r:"number"==typeof r&&r>=0&&(d=c(" ",r,!0)));var y=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,g={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},b={"":e};return void 0===e?f(b,"",!0):h(b,"",!0)}},{}],314:[function(e,t,r){var n=e("./_getNative"),i=e("./_root"),s=n(i,"DataView");t.exports=s},{"./_getNative":418,"./_root":462}],315:[function(e,t,r){function n(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1}var i=e("./_baseIndexOf");t.exports=n},{"./_baseIndexOf":357}],332:[function(e,t,r){function n(e,t,r){for(var n=-1,i=null==e?0:e.length;++n=t?e:t)),e}t.exports=n},{}],345:[function(e,t,r){function n(e,t,r,P,B,O){var j,N=t&D,I=t&C,L=t&S;if(r&&(j=B?r(e,P,B,O):r(e)),void 0!==j)return j;if(!E(e))return e;var M=v(e);if(M){if(j=y(e),!N)return c(e,j)}else{var R=m(e),U=R==w||R==k;if(x(e))return l(e,N);if(R==F||R==_||U&&!B){if(j=I||U?{}:b(e),!N)return I?h(e,u(j,e)):p(e,o(j,e))}else{if(!T[R])return B?e:{};j=g(e,R,n,N)}}O||(O=new i);var V=O.get(e);if(V)return V;O.set(e,j);var q=L?I?d:f:I?keysIn:A,G=M?void 0:q(e);return s(G||e,function(i,s){G&&(s=i,i=e[s]),a(j,s,n(i,t,r,s,e,O))}),j}var i=e("./_Stack"),s=e("./_arrayEach"),a=e("./_assignValue"),o=e("./_baseAssign"),u=e("./_baseAssignIn"),l=e("./_cloneBuffer"),c=e("./_copyArray"),p=e("./_copySymbols"),h=e("./_copySymbolsIn"),f=e("./_getAllKeys"),d=e("./_getAllKeysIn"),m=e("./_getTag"),y=e("./_initCloneArray"),g=e("./_initCloneByTag"),b=e("./_initCloneObject"),v=e("./isArray"),x=e("./isBuffer"),E=e("./isObject"),A=e("./keys"),D=1,C=2,S=4,_="[object Arguments]",w="[object Function]",k="[object GeneratorFunction]",F="[object Object]",T={};T[_]=T["[object Array]"]=T["[object ArrayBuffer]"]=T["[object DataView]"]=T["[object Boolean]"]=T["[object Date]"]=T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Map]"]=T["[object Number]"]=T[F]=T["[object RegExp]"]=T["[object Set]"]=T["[object String]"]=T["[object Symbol]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T["[object Error]"]=T[w]=T["[object WeakMap]"]=!1,t.exports=n},{"./_Stack":322,"./_arrayEach":329,"./_assignValue":339,"./_baseAssign":341,"./_baseAssignIn":342,"./_cloneBuffer":389,"./_copyArray":398,"./_copySymbols":400,"./_copySymbolsIn":401,"./_getAllKeys":414,"./_getAllKeysIn":415,"./_getTag":423,"./_initCloneArray":431,"./_initCloneByTag":432,"./_initCloneObject":433,"./isArray":498,"./isBuffer":501,"./isObject":505,"./keys":512}],346:[function(e,t,r){var n=e("./isObject"),i=Object.create,s=function(){function e(){}return function(t){if(!n(t))return{};if(i)return i(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();t.exports=s},{"./isObject":505}],347:[function(e,t,r){var n=e("./_baseForOwn"),i=e("./_createBaseEach"),s=i(n);t.exports=s},{"./_baseForOwn":351,"./_createBaseEach":404}],348:[function(e,t,r){function n(e,t,r,n){for(var i=e.length,s=r+(n?1:-1);n?s--:++s0&&r(c)?t>1?n(c,t-1,r,a,o):i(o,c):a||(o[o.length]=c)}return o}var i=e("./_arrayPush"),s=e("./_isFlattenable");t.exports=n},{"./_arrayPush":335,"./_isFlattenable":434}],350:[function(e,t,r){var n=e("./_createBaseFor"),i=n();t.exports=i},{"./_createBaseFor":405}],351:[function(e,t,r){function n(e,t){return e&&i(e,t,s)}var i=e("./_baseFor"),s=e("./keys");t.exports=n},{"./_baseFor":350,"./keys":512}],352:[function(e,t,r){function n(e,t){t=i(t,e);for(var r=0,n=t.length;null!=e&&ri)return r;do{t%2&&(r+=e),(t=s(t/2))&&(e+=e)}while(t);return r}var i=9007199254740991,s=Math.floor;t.exports=n},{}],378:[function(e,t,r){function n(e,t){return a(s(e,t,i),e+"")}var i=e("./identity"),s=e("./_overRest"),a=e("./_setToString");t.exports=n},{"./_overRest":461,"./_setToString":466,"./identity":495}],379:[function(e,t,r){var n=e("./constant"),i=e("./_defineProperty"),s=e("./identity"),a=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:n(t),writable:!0})}:s;t.exports=a},{"./_defineProperty":409,"./constant":483,"./identity":495}],380:[function(e,t,r){function n(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}t.exports=n},{}],381:[function(e,t,r){function n(e,t){for(var r=-1,n=Array(e);++r=c){var y=t?null:u(e);if(y)return l(y);f=!1,p=o,m=new i}else m=t?[]:d;e:for(;++nt||a&&o&&l&&!u&&!c||n&&o&&l||!r&&l||!s)return 1;if(!n&&!a&&!c&&e=u)return l;return l*("desc"==r[n]?-1:1)}}return e.index-t.index}var i=e("./_compareAscending");t.exports=n},{"./_compareAscending":396}],398:[function(e,t,r){function n(e,t){var r=-1,n=e.length +;for(t||(t=Array(n));++r1?r[i-1]:void 0,o=i>2?r[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,o&&s(r[0],r[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++n-1?o[u?t[l]:l]:void 0}}var i=e("./_baseIteratee"),s=e("./isArrayLike"),a=e("./keys");t.exports=n},{"./_baseIteratee":366,"./isArrayLike":499,"./keys":512}],407:[function(e,t,r){var n=e("./_Set"),i=e("./noop"),s=e("./_setToArray"),a=n&&1/s(new n([,-0]))[1]==1/0?function(e){return new n(e)}:i;t.exports=a},{"./_Set":320,"./_setToArray":465,"./noop":517}],408:[function(e,t,r){function n(e,t,r,n){return void 0===e||i(e,s[r])&&!a.call(n,r)?t:e}var i=e("./eq"),s=Object.prototype,a=s.hasOwnProperty;t.exports=n},{"./eq":485}],409:[function(e,t,r){var n=e("./_getNative"),i=function(){try{var e=n(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.exports=i},{"./_getNative":418}],410:[function(e,t,r){function n(e,t,r,n,l,c){var p=r&o,h=e.length,f=t.length;if(h!=f&&!(p&&f>h))return!1;var d=c.get(e);if(d&&c.get(t))return d==t;var m=-1,y=!0,g=r&u?new i:void 0;for(c.set(e,t),c.set(t,e);++m-1&&e%1==0&&e-1}var i=e("./_assocIndexOf");t.exports=n},{"./_assocIndexOf":340}],446:[function(e,t,r){function n(e,t){var r=this.__data__,n=i(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var i=e("./_assocIndexOf");t.exports=n},{"./_assocIndexOf":340}],447:[function(e,t,r){function n(){this.size=0,this.__data__={hash:new i,map:new(a||s),string:new i}}var i=e("./_Hash"),s=e("./_ListCache"),a=e("./_Map");t.exports=n},{"./_Hash":315,"./_ListCache":316,"./_Map":317}],448:[function(e,t,r){function n(e){var t=i(this,e).delete(e);return this.size-=t?1:0,t}var i=e("./_getMapData");t.exports=n},{"./_getMapData":416}],449:[function(e,t,r){function n(e){return i(this,e).get(e)}var i=e("./_getMapData");t.exports=n},{"./_getMapData":416}],450:[function(e,t,r){function n(e){return i(this,e).has(e)}var i=e("./_getMapData");t.exports=n},{"./_getMapData":416}],451:[function(e,t,r){function n(e,t){var r=i(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var i=e("./_getMapData");t.exports=n},{"./_getMapData":416}],452:[function(e,t,r){function n(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}t.exports=n},{}],453:[function(e,t,r){function n(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}t.exports=n},{}],454:[function(e,t,r){function n(e){var t=i(e,function(e){return r.size===s&&r.clear(),e}),r=t.cache;return t}var i=e("./memoize"),s=500;t.exports=n},{"./memoize":515}],455:[function(e,t,r){var n=e("./_getNative"),i=n(Object,"create");t.exports=i},{"./_getNative":418}],456:[function(e,t,r){var n=e("./_overArg"),i=n(Object.keys,Object);t.exports=i},{"./_overArg":460}],457:[function(e,t,r){function n(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}t.exports=n},{}],458:[function(e,t,r){var n=e("./_freeGlobal"),i="object"==typeof r&&r&&!r.nodeType&&r,s=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=s&&s.exports===i,o=a&&n.process,u=function(){try{return o&&o.binding&&o.binding("util")}catch(e){}}();t.exports=u},{"./_freeGlobal":413}],459:[function(e,t,r){function n(e){return s.call(e)}var i=Object.prototype,s=i.toString;t.exports=n},{}],460:[function(e,t,r){function n(e,t){return function(r){return e(t(r))}}t.exports=n},{}],461:[function(e,t,r){function n(e,t,r){return t=s(void 0===t?e.length-1:t,0),function(){for(var n=arguments,a=-1,o=s(n.length-t,0),u=Array(o);++a0){if(++t>=i)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var i=800,s=16,a=Date.now;t.exports=n},{}],468:[function(e,t,r){function n(){this.__data__=new i,this.size=0}var i=e("./_ListCache");t.exports=n},{"./_ListCache":316}],469:[function(e,t,r){function n(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}t.exports=n},{}],470:[function(e,t,r){function n(e){return this.__data__.get(e)}t.exports=n},{}],471:[function(e,t,r){function n(e){return this.__data__.has(e)}t.exports=n},{}],472:[function(e,t,r){function n(e,t){var r=this.__data__;if(r instanceof i){var n=r.__data__;if(!s||n.length-1:!!c&&i(e,t,r)>-1}var i=e("./_baseIndexOf"),s=e("./isArrayLike"),a=e("./isString"),o=e("./toInteger"),u=e("./values"),l=Math.max;t.exports=n},{"./_baseIndexOf":357,"./isArrayLike":499,"./isString":509,"./toInteger":525,"./values":530}],497:[function(e,t,r){var n=e("./_baseIsArguments"),i=e("./isObjectLike"),s=Object.prototype,a=s.hasOwnProperty,o=s.propertyIsEnumerable,u=n(function(){return arguments}())?n:function(e){return i(e)&&a.call(e,"callee")&&!o.call(e,"callee")};t.exports=u},{"./_baseIsArguments":358,"./isObjectLike":506}],498:[function(e,t,r){var n=Array.isArray;t.exports=n},{}],499:[function(e,t,r){function n(e){return null!=e&&s(e.length)&&!i(e)}var i=e("./isFunction"),s=e("./isLength");t.exports=n},{"./isFunction":502,"./isLength":504}],500:[function(e,t,r){function n(e){return s(e)&&i(e)}var i=e("./isArrayLike"),s=e("./isObjectLike");t.exports=n},{"./isArrayLike":499,"./isObjectLike":506}],501:[function(e,t,r){var n=e("./_root"),i=e("./stubFalse"),s="object"==typeof r&&r&&!r.nodeType&&r,a=s&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===s,u=o?n.Buffer:void 0,l=u?u.isBuffer:void 0,c=l||i;t.exports=c},{"./_root":462,"./stubFalse":523}],502:[function(e,t,r){function n(e){if(!s(e))return!1;var t=i(e);return t==o||t==u||t==a||t==l}var i=e("./_baseGetTag"),s=e("./isObject"),a="[object AsyncFunction]",o="[object Function]",u="[object GeneratorFunction]",l="[object Proxy]";t.exports=n},{"./_baseGetTag":354,"./isObject":505}],503:[function(e,t,r){function n(e){return"number"==typeof e&&e==i(e)}var i=e("./toInteger");t.exports=n},{"./toInteger":525}],504:[function(e,t,r){function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=i}var i=9007199254740991;t.exports=n},{}],505:[function(e,t,r){function n(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}t.exports=n},{}],506:[function(e,t,r){function n(e){return null!=e&&"object"==typeof e}t.exports=n},{}],507:[function(e,t,r){function n(e){if(!a(e)||i(e)!=o)return!1;var t=s(e);if(null===t)return!0;var r=p.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&c.call(r)==h}var i=e("./_baseGetTag"),s=e("./_getPrototype"),a=e("./isObjectLike"),o="[object Object]",u=Function.prototype,l=Object.prototype,c=u.toString,p=l.hasOwnProperty,h=c.call(Object);t.exports=n},{"./_baseGetTag":354,"./_getPrototype":419,"./isObjectLike":506}],508:[function(e,t,r){var n=e("./_baseIsRegExp"),i=e("./_baseUnary"),s=e("./_nodeUtil"),a=s&&s.isRegExp,o=a?i(a):n;t.exports=o},{"./_baseIsRegExp":364,"./_baseUnary":383,"./_nodeUtil":458}],509:[function(e,t,r){function n(e){return"string"==typeof e||!s(e)&&a(e)&&i(e)==o}var i=e("./_baseGetTag"),s=e("./isArray"),a=e("./isObjectLike"),o="[object String]";t.exports=n},{"./_baseGetTag":354,"./isArray":498,"./isObjectLike":506}],510:[function(e,t,r){function n(e){return"symbol"==typeof e||s(e)&&i(e)==a}var i=e("./_baseGetTag"),s=e("./isObjectLike"),a="[object Symbol]";t.exports=n},{"./_baseGetTag":354,"./isObjectLike":506}],511:[function(e,t,r){var n=e("./_baseIsTypedArray"),i=e("./_baseUnary"),s=e("./_nodeUtil"),a=s&&s.isTypedArray,o=a?i(a):n;t.exports=o},{"./_baseIsTypedArray":365,"./_baseUnary":383,"./_nodeUtil":458}],512:[function(e,t,r){function n(e){return a(e)?i(e):s(e)}var i=e("./_arrayLikeKeys"),s=e("./_baseKeys"),a=e("./isArrayLike");t.exports=n},{"./_arrayLikeKeys":333,"./_baseKeys":367,"./isArrayLike":499}],513:[function(e,t,r){function n(e){return a(e)?i(e,!0):s(e)}var i=e("./_arrayLikeKeys"),s=e("./_baseKeysIn"),a=e("./isArrayLike");t.exports=n},{"./_arrayLikeKeys":333,"./_baseKeysIn":368,"./isArrayLike":499}],514:[function(e,t,r){function n(e,t){return(o(e)?i:a)(e,s(t,3))}var i=e("./_arrayMap"),s=e("./_baseIteratee"),a=e("./_baseMap"),o=e("./isArray");t.exports=n},{"./_arrayMap":334,"./_baseIteratee":366,"./_baseMap":369,"./isArray":498}],515:[function(e,t,r){function n(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(s);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],s=r.cache;if(s.has(i))return s.get(i);var a=e.apply(this,n);return r.cache=s.set(i,a)||s,a};return r.cache=new(n.Cache||i),r}var i=e("./_MapCache"),s="Expected a function";n.Cache=i,t.exports=n},{"./_MapCache":318}],516:[function(e,t,r){var n=e("./_baseMerge"),i=e("./_createAssigner"),s=i(function(e,t,r,i){n(e,t,r,i)});t.exports=s},{"./_baseMerge":372,"./_createAssigner":403}],517:[function(e,t,r){function n(){}t.exports=n},{}],518:[function(e,t,r){function n(e){return a(e)?i(o(e)):s(e)}var i=e("./_baseProperty"),s=e("./_basePropertyDeep"),a=e("./_isKey"),o=e("./_toKey");t.exports=n},{"./_baseProperty":375,"./_basePropertyDeep":376,"./_isKey":437,"./_toKey":475}],519:[function(e,t,r){function n(e,t,r){return t=(r?s(e,t,r):void 0===t)?1:a(t),i(o(e),t)}var i=e("./_baseRepeat"),s=e("./_isIterateeCall"),a=e("./toInteger"),o=e("./toString");t.exports=n},{"./_baseRepeat":377,"./_isIterateeCall":436,"./toInteger":525,"./toString":528}],520:[function(e,t,r){var n=e("./_baseFlatten"),i=e("./_baseOrderBy"),s=e("./_baseRest"),a=e("./_isIterateeCall"),o=s(function(e,t){if(null==e)return[];var r=t.length;return r>1&&a(e,t[0],t[1])?t=[]:r>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),i(e,n(t,1),[])});t.exports=o},{"./_baseFlatten":349,"./_baseOrderBy":374,"./_baseRest":378,"./_isIterateeCall":436}],521:[function(e,t,r){function n(e,t,r){return e=o(e),r=null==r?0:i(a(r),0,e.length),t=s(t),e.slice(r,r+t.length)==t}var i=e("./_baseClamp"),s=e("./_baseToString"),a=e("./toInteger"),o=e("./toString");t.exports=n},{"./_baseClamp":344,"./_baseToString":382,"./toInteger":525,"./toString":528}],522:[function(e,t,r){function n(){return[]}t.exports=n},{}],523:[function(e,t,r){function n(){return!1}t.exports=n},{}],524:[function(e,t,r){function n(e){if(!e)return 0===e?e:0;if((e=i(e))===s||e===-s){return(e<0?-1:1)*a}return e===e?e:0}var i=e("./toNumber"),s=1/0,a=1.7976931348623157e308;t.exports=n},{"./toNumber":526}],525:[function(e,t,r){function n(e){var t=i(e),r=t%1;return t===t?r?t-r:t:0}var i=e("./toFinite");t.exports=n},{"./toFinite":524}],526:[function(e,t,r){function n(e){if("number"==typeof e)return e;if(s(e))return a;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var r=l.test(e);return r||c.test(e)?p(e.slice(2),r?2:8):u.test(e)?a:+e}var i=e("./isObject"),s=e("./isSymbol"),a=NaN,o=/^\s+|\s+$/g,u=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,p=parseInt;t.exports=n},{"./isObject":505,"./isSymbol":510}],527:[function(e,t,r){function n(e){return i(e,s(e))}var i=e("./_copyObject"),s=e("./keysIn");t.exports=n},{"./_copyObject":399,"./keysIn":513}],528:[function(e,t,r){function n(e){return null==e?"":i(e)}var i=e("./_baseToString");t.exports=n},{"./_baseToString":382}],529:[function(e,t,r){function n(e){return e&&e.length?i(e):[]}var i=e("./_baseUniq");t.exports=n},{"./_baseUniq":384}],530:[function(e,t,r){function n(e){return null==e?[]:i(e,s(e))}var i=e("./_baseValues"),s=e("./keys");t.exports=n},{"./_baseValues":385,"./keys":512}],531:[function(e,t,r){function n(e,t){return t=t||{},function(r,n,i){return s(r,e,t)}}function i(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function s(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new a(t,r).match(e))}function a(e,t){if(!(this instanceof a))return new a(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==m.sep&&(e=e.split(m.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function o(){if(!this._made){var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error),this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(C)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r}}function u(){var e=this.pattern,t=!1,r=this.options,n=0;if(!r.nonegate){for(var i=0,s=e.length;i65536)throw new TypeError("pattern is too long");var n=this.options;if(!n.noglobstar&&"**"===e)return y;if(""===e)return"";for(var i,s,a="",o=!!n.nocase,u=!1,l=[],c=[],p=!1,h=-1,d=-1,m="."===e.charAt(0)?"":n.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",g=this,E=0,A=e.length;E-1;P--){ +var B=c[P],O=a.slice(0,B.reStart),j=a.slice(B.reStart,B.reEnd-8),N=a.slice(B.reEnd-8,B.reEnd),I=a.slice(B.reEnd);N+=I;var L=O.split("(").length-1,M=I;for(E=0;E=0&&!(i=e[s]);s--);for(s=0;s>> no match, partial?",e,c,t,p),c!==a))}var f;if("string"==typeof u?(f=n.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,f)):(f=l.match(u),this.debug("pattern match",u,l,f)),!f)return!1}if(i===a&&s===o)return!0;if(i===a)return r;if(s===o){return i===a-1&&""===e[i]}throw new Error("wtf?")}},{"brace-expansion":180,path:535}],532:[function(e,t,r){function n(e){if(e=String(e),!(e.length>1e4)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return r*p;case"days":case"day":case"d":return r*c;case"hours":case"hour":case"hrs":case"hr":case"h":return r*l;case"minutes":case"minute":case"mins":case"min":case"m":return r*u;case"seconds":case"second":case"secs":case"sec":case"s":return r*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function i(e){return e>=c?Math.round(e/c)+"d":e>=l?Math.round(e/l)+"h":e>=u?Math.round(e/u)+"m":e>=o?Math.round(e/o)+"s":e+"ms"}function s(e){return a(e,c,"day")||a(e,l,"hour")||a(e,u,"minute")||a(e,o,"second")||e+" ms"}function a(e,t,r){if(!(e0)return n(e);if("number"===r&&!1===isNaN(e))return t.long?s(e):i(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],533:[function(e,t,r){"use strict";t.exports=Number.isNaN||function(e){return e!==e}},{}],534:[function(e,t,r){r.endianness=function(){return"LE"},r.hostname=function(){return"undefined"!=typeof location?location.hostname:""},r.loadavg=function(){return[]},r.uptime=function(){return 0},r.freemem=function(){return Number.MAX_VALUE},r.totalmem=function(){return Number.MAX_VALUE},r.cpus=function(){return[]},r.type=function(){return"Browser"},r.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},r.networkInterfaces=r.getNetworkInterfaces=function(){return{}},r.arch=function(){return"javascript"},r.platform=function(){return"browser"},r.tmpdir=r.tmpDir=function(){return"/tmp"},r.EOL="\n"},{}],535:[function(e,t,r){(function(e){function t(e,t){for(var r=0,n=e.length-1;n>=0;n--){var i=e[n];"."===i?e.splice(n,1):".."===i?(e.splice(n,1),r++):r&&(e.splice(n,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}function n(e,t){if(e.filter)return e.filter(t);for(var r=[],n=0;n=-1&&!i;s--){var a=s>=0?arguments[s]:e.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(r=a+"/"+r,i="/"===a.charAt(0))}return r=t(n(r.split("/"),function(e){return!!e}),!i).join("/"),(i?"/":"")+r||"."},r.normalize=function(e){var i=r.isAbsolute(e),s="/"===a(e,-1);return e=t(n(e.split("/"),function(e){return!!e}),!i).join("/"),e||i||(e="."),e&&s&&(e+="/"),(i?"/":"")+e},r.isAbsolute=function(e){return"/"===e.charAt(0)},r.join=function(){var e=Array.prototype.slice.call(arguments,0);return r.normalize(n(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},r.relative=function(e,t){function n(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=r.resolve(e).substr(1),t=r.resolve(t).substr(1);for(var i=n(e.split("/")),s=n(t.split("/")),a=Math.min(i.length,s.length),o=a,u=0;un&&(t[n]=t[r]),++n);return t.length=n,t},r.makeAccessor=l},{}],538:[function(e,t,r){(function(e){"use strict";function r(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var s,a,o=arguments.length;switch(o){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,r)});case 3:return e.nextTick(function(){t.call(null,r,n)});case 4:return e.nextTick(function(){t.call(null,r,n,i)});default:for(s=new Array(o-1),a=0;a1)for(var r=1;r0)if(t.ended&&!i){var a=new Error("stream.push() after EOF");e.emit("error",a)}else if(t.endEmitted&&i){var u=new Error("stream.unshift() after end event");e.emit("error",u)}else{var l;!t.decoder||i||n||(r=t.decoder.write(r),l=!t.objectMode&&0===r.length),i||(t.reading=!1),l||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,i?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&h(e))),d(e,t)}else i||(t.reading=!1);return o(t)}function o(e){return!e.ended&&(e.needReadable||e.length=V?e=V:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function l(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!==e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=u(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function c(e,t){var r=null;return j.isBuffer(t)||"string"==typeof t||null===t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function p(e,t){if(!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,h(e)}}function h(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(M("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?T(f,e):f(e))}function f(e){M("emit readable"),e.emit("readable"),x(e)}function d(e,t){t.readingMore||(t.readingMore=!0,T(m,e,t))}function m(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=A(e,t.buffer,t.decoder),r}function A(e,t,r){var n;return es.length?s.length:e;if(a===s.length?i+=s:i+=s.slice(0,e),0===(e-=a)){a===s.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=s.slice(a));break}++n}return t.length-=n,i}function C(e,t){var r=N.allocUnsafe(e),n=t.head,i=1;for(n.data.copy(r),e-=n.data.length;n=n.next;){var s=n.data,a=e>s.length?s.length:e;if(s.copy(r,r.length-e,0,a),0===(e-=a)){a===s.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=s.slice(a));break}++i}return t.length-=i,r}function S(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,T(_,t,e))}function _(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function w(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return M("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?S(this):h(this),null;if(0===(e=l(e,t))&&t.ended)return 0===t.length&&S(this),null;var n=t.needReadable;M("need readable",n),(0===t.length||t.length-e0?E(e,t):null,null===i?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&S(this)),null!==i&&this.emit("data",i),i},s.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},s.prototype.pipe=function(e,t){function i(e){M("onunpipe"),e===h&&a()}function s(){M("onend"),e.end()}function a(){M("cleanup"),e.removeListener("close",l),e.removeListener("finish",c),e.removeListener("drain",g),e.removeListener("error",u),e.removeListener("unpipe",i),h.removeListener("end",s),h.removeListener("end",a),h.removeListener("data",o),b=!0,!f.awaitDrain||e._writableState&&!e._writableState.needDrain||g()}function o(t){M("ondata"),v=!1,!1!==e.write(t)||v||((1===f.pipesCount&&f.pipes===e||f.pipesCount>1&&-1!==k(f.pipes,e))&&!b&&(M("false write response, pause",h._readableState.awaitDrain),h._readableState.awaitDrain++,v=!0),h.pause())}function u(t){M("onerror",t),p(),e.removeListener("error",u),0===O(e,"error")&&e.emit("error",t)}function l(){e.removeListener("finish",c),p()}function c(){M("onfinish"),e.removeListener("close",l),p()}function p(){M("unpipe"),h.unpipe(e)}var h=this,f=this._readableState;switch(f.pipesCount){case 0:f.pipes=e;break;case 1:f.pipes=[f.pipes,e];break;default:f.pipes.push(e)}f.pipesCount+=1,M("pipe count=%d opts=%j",f.pipesCount,t);var d=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr,m=d?s:a;f.endEmitted?T(m):h.once("end",m),e.on("unpipe",i);var g=y(h);e.on("drain",g);var b=!1,v=!1;return h.on("data",o),n(e,"error",u),e.once("close",l),e.once("finish",c),e.emit("pipe",h),f.flowing||(M("pipe resume"),h.resume()),e},s.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var r=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i-1?setImmediate:C;a.WritableState=s;var _=e("core-util-is");_.inherits=e("inherits");var w,k={deprecate:e("util-deprecate")};!function(){try{w=e("stream")}catch(e){}finally{w||(w=e("events").EventEmitter)}}();var F=e("buffer").Buffer,T=e("buffer-shims");_.inherits(a,w),s.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(s.prototype,"buffer",{get:k.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(e){}}();var P;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(P=Function.prototype[Symbol.hasInstance],Object.defineProperty(a,Symbol.hasInstance,{value:function(e){return!!P.call(this,e)||e&&e._writableState instanceof s}})):P=function(e){return e instanceof this},a.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},a.prototype.write=function(e,t,r){var i=this._writableState,s=!1,a=F.isBuffer(e);return"function"==typeof t&&(r=t,t=null),a?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof r&&(r=n),i.ended?o(this,r):(a||u(this,i,e,r))&&(i.pendingcb++,s=c(this,i,a,e,t,r)),s},a.prototype.cork=function(){this._writableState.corked++},a.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||g(this,e))},a.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},a.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},a.prototype._writev=null,a.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||E(this,n,r)}}).call(this,e("_process"))},{"./_stream_duplex":541,_process:539,buffer:184,"buffer-shims":183,"core-util-is":294,events:301,inherits:306,"process-nextick-args":538,"util-deprecate":598}],546:[function(e,t,r){"use strict";function n(){this.head=null,this.tail=null,this.length=0}var i=(e("buffer").Buffer,e("buffer-shims"));t.exports=n,n.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},n.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},n.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},n.prototype.clear=function(){this.head=this.tail=null,this.length=0},n.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},n.prototype.concat=function(e){if(0===this.length)return i.alloc(0) +;if(1===this.length)return this.head.data;for(var t=i.allocUnsafe(e>>>0),r=this.head,n=0;r;)r.data.copy(t,n),n+=r.data.length,r=r.next;return t}},{buffer:184,"buffer-shims":183}],547:[function(e,t,r){t.exports=e("./lib/_stream_passthrough.js")},{"./lib/_stream_passthrough.js":542}],548:[function(e,t,r){(function(n){var i=function(){try{return e("stream")}catch(e){}}();r=t.exports=e("./lib/_stream_readable.js"),r.Stream=i||r,r.Readable=r,r.Writable=e("./lib/_stream_writable.js"),r.Duplex=e("./lib/_stream_duplex.js"),r.Transform=e("./lib/_stream_transform.js"),r.PassThrough=e("./lib/_stream_passthrough.js"),!n.browser&&"disable"===n.env.READABLE_STREAM&&i&&(t.exports=i)}).call(this,e("_process"))},{"./lib/_stream_duplex.js":541,"./lib/_stream_passthrough.js":542,"./lib/_stream_readable.js":543,"./lib/_stream_transform.js":544,"./lib/_stream_writable.js":545,_process:539}],549:[function(e,t,r){t.exports=e("./lib/_stream_transform.js")},{"./lib/_stream_transform.js":544}],550:[function(e,t,r){t.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":545}],551:[function(e,t,r){function n(e,t,r){if(e){if(x.fixFaultyLocations(e,t),r){if(d.Node.check(e)&&d.SourceLocation.check(e.loc)){for(var i=r.length-1;i>=0&&!(E(r[i].loc.end,e.loc.start)<=0);--i);return void r.splice(i+1,0,e)}}else if(e[A])return e[A];var s;if(m.check(e))s=Object.keys(e);else{if(!y.check(e))return;s=f.getFieldNames(e)}r||Object.defineProperty(e,A,{value:r=[],enumerable:!1});for(var i=0,a=s.length;i>1,l=s[u];if(E(l.loc.start,t.loc.start)<=0&&E(t.loc.end,l.loc.end)<=0)return void i(t.enclosingNode=l,t,r);if(E(l.loc.end,t.loc.start)<=0){var c=l;a=u+1}else{if(!(E(t.loc.end,l.loc.start)<=0))throw new Error("Comment location overlaps with node location");var p=l;o=u}}c&&(t.precedingNode=c),p&&(t.followingNode=p)}function s(e,t){var r=e.length;if(0!==r){for(var n=e[0].precedingNode,i=e[0].followingNode,s=i.loc.start,a=r;a>0;--a){var u=e[a-1];h.strictEqual(u.precedingNode,n),h.strictEqual(u.followingNode,i);var c=t.sliceString(u.loc.end,s);if(/\S/.test(c))break;s=u.loc.start}for(;a<=r&&(u=e[a])&&("Line"===u.type||"CommentLine"===u.type)&&u.loc.start.column>i.loc.start.column;)++a;e.forEach(function(e,t){t0){var d=n[f-1];h.strictEqual(d.precedingNode===e.precedingNode,d.followingNode===e.followingNode),d.followingNode!==e.followingNode&&s(n,r)}n.push(e)}else if(a)s(n,r),l(a,e);else if(p)s(n,r),o(p,e);else{if(!c)throw new Error("AST contains no nodes at all?");s(n,r),u(c,e)}}),s(n,r),e.forEach(function(e){delete e.precedingNode,delete e.enclosingNode,delete e.followingNode})}},r.printComments=function(e,t){var r=e.getValue(),n=t(e),i=d.Node.check(r)&&f.getFieldValue(r,"comments");if(!i||0===i.length)return n;var s=[],a=[n];return e.each(function(e){var n=e.getValue(),i=f.getFieldValue(n,"leading"),o=f.getFieldValue(n,"trailing");i||o&&!d.Statement.check(r)&&"Block"!==n.type&&"CommentBlock"!==n.type?s.push(c(e,t)):o&&a.push(p(e,t))},"comments"),s.push.apply(s,a),v(s)}},{"./lines":553,"./types":559,"./util":560,assert:3,private:537}],552:[function(e,t,r){function n(e){o.ok(this instanceof n),this.stack=[e]}function i(e,t){for(var r=e.stack,n=r.length-1;n>=0;n-=2){var i=r[n];if(l.Node.check(i)&&--t<0)return i}return null}function s(e){return l.BinaryExpression.check(e)||l.LogicalExpression.check(e)}function a(e){return!!l.CallExpression.check(e)||(c.check(e)?e.some(a):!!l.Node.check(e)&&u.someField(e,function(e,t){return a(t)}))}var o=e("assert"),u=e("./types"),l=u.namedTypes,c=(l.Node,u.builtInTypes.array),p=u.builtInTypes.number,h=n.prototype;t.exports=n,n.from=function(e){if(e instanceof n)return e.copy();if(e instanceof u.NodePath){for(var t,r=Object.create(n.prototype),i=[e.value];t=e.parentPath;e=t)i.push(e.name,t.value);return r.stack=i.reverse(),r}return new n(e)},h.copy=function(){var e=Object.create(n.prototype);return e.stack=this.stack.slice(0),e},h.getName=function(){var e=this.stack,t=e.length;return t>1?e[t-2]:null},h.getValue=function(){var e=this.stack;return e[e.length-1]},h.getNode=function(e){return i(this,~~e)},h.getParentNode=function(e){return i(this,1+~~e)},h.getRootValue=function(){var e=this.stack;return e.length%2==0?e[1]:e[0]},h.call=function(e){for(var t=this.stack,r=t.length,n=t[r-1],i=arguments.length,s=1;sh)return!0;if(u===h&&"right"===r)return o.strictEqual(t.right,n),!0;default:return!1}case"SequenceExpression":switch(t.type){case"ReturnStatement":case"ForStatement":return!1;case"ExpressionStatement":return"expression"!==r;default:return!0}case"YieldExpression":switch(t.type){case"BinaryExpression":case"LogicalExpression":case"UnaryExpression":case"SpreadElement":case"SpreadProperty":case"CallExpression":case"MemberExpression":case"NewExpression":case"ConditionalExpression":case"YieldExpression":return!0;default:return!1}case"IntersectionTypeAnnotation":case"UnionTypeAnnotation":return"NullableTypeAnnotation"===t.type;case"Literal":return"MemberExpression"===t.type&&p.check(n.value)&&"object"===r&&t.object===n;case"AssignmentExpression":case"ConditionalExpression":switch(t.type){case"UnaryExpression":case"SpreadElement":case"SpreadProperty":case"BinaryExpression":case"LogicalExpression":return!0;case"CallExpression":return"callee"===r&&t.callee===n;case"ConditionalExpression":return"test"===r&&t.test===n;case"MemberExpression":return"object"===r&&t.object===n;default:return!1}case"ArrowFunctionExpression":return!(!l.CallExpression.check(t)||"callee"!==r)||(!(!l.MemberExpression.check(t)||"object"!==r)||s(t));case"ObjectExpression":if("ArrowFunctionExpression"===t.type&&"body"===r)return!0;default:if("NewExpression"===t.type&&"callee"===r&&t.callee===n)return a(n)}return!(!0===e||this.canBeFirstInStatement()||!this.firstInStatement())};var f={};[["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%","**"]].forEach(function(e,t){e.forEach(function(e){f[e]=t})}),h.canBeFirstInStatement=function(){var e=this.getNode();return!l.FunctionExpression.check(e)&&!l.ObjectExpression.check(e)},h.firstInStatement=function(){for(var e,t,r,n,i=this.stack,a=i.length-1;a>=0;a-=2)if(l.Node.check(i[a])&&(r=e,n=t,e=i[a-1],t=i[a]),t&&n){if(l.BlockStatement.check(t)&&"body"===e&&0===r)return o.strictEqual(t.body[0],n),!0;if(l.ExpressionStatement.check(t)&&"expression"===r)return o.strictEqual(t.expression,n),!0;if(l.SequenceExpression.check(t)&&"expressions"===e&&0===r)o.strictEqual(t.expressions[0],n);else if(l.CallExpression.check(t)&&"callee"===r)o.strictEqual(t.callee,n);else if(l.MemberExpression.check(t)&&"object"===r)o.strictEqual(t.object,n);else if(l.ConditionalExpression.check(t)&&"test"===r)o.strictEqual(t.test,n);else if(s(t)&&"left"===r)o.strictEqual(t.left,n);else{if(!l.UnaryExpression.check(t)||t.prefix||"argument"!==r)return!1;o.strictEqual(t.argument,n)}}return!0}},{"./types":559,assert:3}],553:[function(e,t,r){function n(e){return e[f]}function i(e,t){c.ok(this instanceof i),c.ok(e.length>0),t?m.assert(t):t=null,Object.defineProperty(this,f,{value:{infos:e,mappings:[],name:t,cachedSourceMap:null}}),t&&n(this).mappings.push(new g(this,{start:this.firstPos(),end:this.lastPos()}))}function s(e){return{line:e.line,indent:e.indent,locked:e.locked,sliceStart:e.sliceStart,sliceEnd:e.sliceEnd}}function a(e,t){for(var r=0,n=e.length,i=0;i0);var s=Math.ceil(r/t)*t;s===r?r+=t:r=s;break;case 11:case 12:case 13:case 65279:break;case 32:default:r+=1}return r}function o(e,t){if(e instanceof i)return e;e+="";var r=t&&t.tabWidth,n=e.indexOf("\t")<0,s=!(!t||!t.locked),o=!t&&n&&e.length<=E;if(c.ok(r||n,"No tab width specified but encountered tabs in string\n"+e),o&&x.call(v,e))return v[e];var u=new i(e.split(D).map(function(e){var t=A.exec(e)[0];return{line:e,indent:a(t,r),locked:s,sliceStart:t.length,sliceEnd:e.length}}),h(t).sourceFileName);return o&&(v[e]=u),u}function u(e){return!/\S/.test(e)}function l(e,t,r){var n=e.sliceStart,i=e.sliceEnd,s=Math.max(e.indent,0),a=s+i-n;return void 0===r&&(r=a),t=Math.max(t,0),r=Math.min(r,a),r=Math.max(r,t),r=0),c.ok(n<=i),c.strictEqual(a,s+i-n),e.indent===s&&e.sliceStart===n&&e.sliceEnd===i?e:{line:e.line,indent:s,locked:!1,sliceStart:n,sliceEnd:i}}var c=e("assert"),p=e("source-map"),h=e("./options").normalize,f=e("private").makeUniqueKey(),d=e("./types"),m=d.builtInTypes.string,y=e("./util").comparePos,g=e("./mapping");r.Lines=i;var b=i.prototype;Object.defineProperties(b,{length:{get:function(){return n(this).infos.length}},name:{get:function(){return n(this).name}}});var v={},x=v.hasOwnProperty,E=10;r.countSpaces=a;var A=/^\s*/,D=/\u000D\u000A|\u000D(?!\u000A)|\u000A|\u2028|\u2029/;r.fromString=o,b.toString=function(e){return this.sliceString(this.firstPos(),this.lastPos(),e)},b.getSourceMap=function(e,t){function r(r){return r=r||{},m.assert(e),r.file=e,t&&(m.assert(t),r.sourceRoot=t),r}if(!e)return null;var i=this,s=n(i);if(s.cachedSourceMap)return r(s.cachedSourceMap.toJSON());var a=new p.SourceMapGenerator(r()),o={};return s.mappings.forEach(function(e){for(var t=e.sourceLines.skipSpaces(e.sourceLoc.start)||e.sourceLines.lastPos(),r=i.skipSpaces(e.targetLoc.start)||i.lastPos();y(t,e.sourceLoc.end)<0&&y(r,e.targetLoc.end)<0;){var n=e.sourceLines.charAt(t),s=i.charAt(r);c.strictEqual(n,s);var u=e.sourceLines.name;if(a.addMapping({source:u,original:{line:t.line,column:t.column},generated:{line:r.line,column:r.column}}),!x.call(o,u)){var l=e.sourceLines.toString();a.setSourceContent(u,l),o[u]=l}i.nextPos(r,!0),e.sourceLines.nextPos(t,!0)}}),s.cachedSourceMap=a,a.toJSON()},b.bootstrapCharAt=function(e){c.strictEqual(typeof e,"object"),c.strictEqual(typeof e.line,"number"),c.strictEqual(typeof e.column,"number");var t=e.line,r=e.column,n=this.toString().split(D),i=n[t-1];return void 0===i?"":r===i.length&&t=i.length?"":i.charAt(r)},b.charAt=function(e){c.strictEqual(typeof e,"object"),c.strictEqual(typeof e.line,"number"),c.strictEqual(typeof e.column,"number");var t=e.line,r=e.column,i=n(this),s=i.infos,a=s[t-1],o=r;if(void 0===a||o<0)return"";var u=this.getIndentAt(t);return o=a.sliceEnd?"":a.line.charAt(o))},b.stripMargin=function(e,t){if(0===e)return this;if(c.ok(e>0,"negative margin: "+e),t&&1===this.length)return this;var r=n(this),a=new i(r.infos.map(function(r,n){return r.line&&(n>0||!t)&&(r=s(r),r.indent=Math.max(0,r.indent-e)),r}));if(r.mappings.length>0){var o=n(a).mappings;c.strictEqual(o.length,0),r.mappings.forEach(function(r){o.push(r.indent(e,t,!0))})}return a},b.indent=function(e){if(0===e)return this;var t=n(this),r=new i(t.infos.map(function(t){return t.line&&!t.locked&&(t=s(t),t.indent+=e),t}));if(t.mappings.length>0){var a=n(r).mappings;c.strictEqual(a.length,0),t.mappings.forEach(function(t){a.push(t.indent(e))})}return r},b.indentTail=function(e){if(0===e)return this;if(this.length<2)return this;var t=n(this),r=new i(t.infos.map(function(t,r){return r>0&&t.line&&!t.locked&&(t=s(t),t.indent+=e),t}));if(t.mappings.length>0){var a=n(r).mappings;c.strictEqual(a.length,0),t.mappings.forEach(function(t){a.push(t.indent(e,!0))})}return r},b.lockIndentTail=function(){return this.length<2?this:new i(n(this).infos.map(function(e,t){return e=s(e),e.locked=t>0,e}))},b.getIndentAt=function(e){c.ok(e>=1,"no line "+e+" (line numbers start from 1)");var t=n(this),r=t.infos[e-1];return Math.max(r.indent,0)},b.guessTabWidth=function(){var e=n(this);if(x.call(e,"cachedTabWidth"))return e.cachedTabWidth;for(var t=[],r=0,i=1,s=this.length;i<=s;++i){var a=e.infos[i-1];if(!u(a.line.slice(a.sliceStart,a.sliceEnd))){var o=Math.abs(a.indent-r);t[o]=1+~~t[o],r=a.indent}}for(var l=-1,c=2,p=1;pl&&(l=t[p],c=p);return e.cachedTabWidth=c},b.startsWithComment=function(){var e=n(this);if(0===e.infos.length)return!1;var t=e.infos[0],r=t.sliceStart,i=t.sliceEnd,s=t.line.slice(r,i).trim();return 0===s.length||"//"===s.slice(0,2)||"/*"===s.slice(0,2)},b.isOnlyWhitespace=function(){return u(this.toString())},b.isPrecededOnlyByWhitespace=function(e){var t=n(this),r=t.infos[e.line-1],i=Math.max(r.indent,0),s=e.column-i;if(s<=0)return!0;var a=r.sliceStart,o=Math.min(a+s,r.sliceEnd);return u(r.line.slice(a,o))},b.getLineLength=function(e){var t=n(this),r=t.infos[e-1];return this.getIndentAt(e)+r.sliceEnd-r.sliceStart},b.nextPos=function(e,t){var r=Math.max(e.line,0);return Math.max(e.column,0)0){var o=n(a).mappings;c.strictEqual(o.length,0),r.mappings.forEach(function(r){var n=r.slice(this,e,t);n&&o.push(n)},this)}return a},b.bootstrapSliceString=function(e,t,r){return this.slice(e,t).toString(r)},b.sliceString=function(e,t,r){if(!t){if(!e)return this;t=this.lastPos()}r=h(r);for(var i=n(this).infos,s=[],o=r.tabWidth,c=e.line;c<=t.line;++c){var p=i[c-1];c===e.line?p=c===t.line?l(p,e.column,t.column):l(p,e.column):c===t.line&&(p=l(p,0,t.column));var f=Math.max(p.indent,0),d=p.line.slice(0,p.sliceStart);if(r.reuseWhitespace&&u(d)&&a(d,r.tabWidth)===f)s.push(p.line.slice(0,p.sliceEnd));else{var m=0,y=f;r.useTabs&&(m=Math.floor(f/o),y-=m*o);var g="";m>0&&(g+=new Array(m+1).join("\t")),y>0&&(g+=new Array(y+1).join(" ")),g+=p.line.slice(p.sliceStart,p.sliceEnd),s.push(g)}}return s.join(r.lineTerminator)},b.isEmpty=function(){return this.length<2&&this.getLineLength(1)<1},b.join=function(e){function t(e){if(null!==e){if(a){var t=e.infos[0],r=new Array(t.indent+1).join(" "),n=c.length,i=Math.max(a.indent,0)+a.sliceEnd-a.sliceStart;a.line=a.line.slice(0,a.sliceEnd)+r+t.line.slice(t.sliceStart,t.sliceEnd),a.locked=a.locked||t.locked,a.sliceEnd=a.line.length,e.mappings.length>0&&e.mappings.forEach(function(e){p.push(e.add(n,i))})}else e.mappings.length>0&&p.push.apply(p,e.mappings);e.infos.forEach(function(e,t){(!a||t>0)&&(a=s(e),c.push(a))})}}function r(e,r){r>0&&t(l),t(e)}var a,u=this,l=n(u),c=[],p=[];if(e.map(function(e){var t=o(e);return t.isEmpty()?null:n(t)}).forEach(u.isEmpty()?t:r),c.length<1)return C;var h=new i(c);return n(h).mappings=p,h},r.concat=function(e){return C.join(e)},b.concat=function(e){var t=arguments,r=[this];return r.push.apply(r,t),c.strictEqual(r.length,t.length+1),C.join(r)};var C=o("")},{"./mapping":554,"./options":555,"./types":559,"./util":560,assert:3,private:537,"source-map":573}],554:[function(e,t,r){function n(e,t,r){o.ok(this instanceof n),o.ok(e instanceof h.Lines),c.assert(t),r?o.ok(l.check(r.start.line)&&l.check(r.start.column)&&l.check(r.end.line)&&l.check(r.end.column)):r=t,Object.defineProperties(this,{sourceLines:{value:e},sourceLoc:{value:t},targetLoc:{value:r}})}function i(e,t,r){return{line:e.line+t-1,column:1===e.line?e.column+r:e.column}}function s(e,t,r){return{line:e.line-t+1,column:e.line===t?e.column-r:e.column}}function a(e,t,r,n,i){o.ok(e instanceof h.Lines),o.ok(r instanceof h.Lines),p.assert(t),p.assert(n),p.assert(i);var s=f(n,i);if(0===s)return t;if(s<0){var a=e.skipSpaces(t),u=r.skipSpaces(n),l=i.line-u.line;for(a.line+=l,u.line+=l,l>0?(a.column=0,u.column=0):o.strictEqual(l,0);f(u,i)<0&&r.nextPos(u,!0);)o.ok(e.nextPos(a,!0)),o.strictEqual(e.charAt(a),r.charAt(u))}else{var a=e.skipSpaces(t,!0),u=r.skipSpaces(n,!0),l=i.line-u.line;for(a.line+=l,u.line+=l,l<0?(a.column=e.getLineLength(a.line),u.column=r.getLineLength(u.line)):o.strictEqual(l,0);f(i,u)<0&&r.prevPos(u,!0);)o.ok(e.prevPos(a,!0)),o.strictEqual(e.charAt(a),r.charAt(u))}return a}var o=e("assert"),u=e("./types"),l=(u.builtInTypes.string,u.builtInTypes.number),c=u.namedTypes.SourceLocation,p=u.namedTypes.Position,h=e("./lines"),f=e("./util").comparePos,d=n.prototype;t.exports=n,d.slice=function(e,t,r){function i(n){var i=l[n],s=c[n],p=t;return"end"===n?p=r:o.strictEqual(n,"start"),a(u,i,e,s,p)}o.ok(e instanceof h.Lines),p.assert(t),r?p.assert(r):r=e.lastPos();var u=this.sourceLines,l=this.sourceLoc,c=this.targetLoc;if(f(t,c.start)<=0)if(f(c.end,r)<=0)c={start:s(c.start,t.line,t.column),end:s(c.end,t.line,t.column)};else{if(f(r,c.start)<=0)return null;l={start:l.start,end:i("end")},c={start:s(c.start,t.line,t.column),end:s(r,t.line,t.column)}}else{if(f(c.end,t)<=0)return null;f(c.end,r)<=0?(l={start:i("start"),end:l.end},c={start:{line:1,column:0},end:s(c.end,t.line,t.column)}):(l={start:i("start"),end:i("end")},c={start:{line:1,column:0},end:s(r,t.line,t.column)})}return new n(this.sourceLines,l,c)},d.add=function(e,t){return new n(this.sourceLines,this.sourceLoc,{start:i(this.targetLoc.start,e,t),end:i(this.targetLoc.end,e,t)})},d.subtract=function(e,t){return new n(this.sourceLines,this.sourceLoc,{start:s(this.targetLoc.start,e,t),end:s(this.targetLoc.end,e,t)})},d.indent=function(e,t,r){if(0===e)return this;var i=this.targetLoc,s=i.start.line,a=i.end.line;if(t&&1===s&&1===a)return this;if(i={start:i.start,end:i.end},!t||s>1){var o=i.start.column+e;i.start={line:s,column:r?Math.max(0,o):o}}if(!t||a>1){var u=i.end.column+e;i.end={line:a,column:r?Math.max(0,u):u}}return new n(this.sourceLines,this.sourceLoc,i)}},{"./lines":553,"./types":559,"./util":560,assert:3}],555:[function(e,t,r){var n={parser:e("esprima"),tabWidth:4,useTabs:!1,reuseWhitespace:!0,lineTerminator:e("os").EOL,wrapColumn:74,sourceFileName:null,sourceMapName:null,sourceRoot:null,inputSourceMap:null,range:!1,tolerant:!0,quote:null,trailingComma:!1,arrayBracketSpacing:!1,objectCurlySpacing:!0,arrowParensAlways:!1,flowObjectCommas:!0},i=n.hasOwnProperty;r.normalize=function(e){function t(t){return i.call(e,t)?e[t]:n[t]}return e=e||n,{tabWidth:+t("tabWidth"),useTabs:!!t("useTabs"),reuseWhitespace:!!t("reuseWhitespace"),lineTerminator:t("lineTerminator"),wrapColumn:Math.max(t("wrapColumn"),0),sourceFileName:t("sourceFileName"),sourceMapName:t("sourceMapName"),sourceRoot:t("sourceRoot"),inputSourceMap:t("inputSourceMap"),parser:t("esprima")||t("parser"),range:t("range"),tolerant:t("tolerant"),quote:t("quote"),trailingComma:t("trailingComma"),arrayBracketSpacing:t("arrayBracketSpacing"),objectCurlySpacing:t("objectCurlySpacing"),arrowParensAlways:t("arrowParensAlways"),flowObjectCommas:t("flowObjectCommas")}}},{esprima:562,os:534}],556:[function(e,t,r){function n(e){i.ok(this instanceof n),this.lines=e,this.indent=0}var i=e("assert"),s=e("./types"),a=(s.namedTypes,s.builders),o=s.builtInTypes.object,u=s.builtInTypes.array,l=(s.builtInTypes.function,e("./patcher").Patcher,e("./options").normalize),c=e("./lines").fromString,p=e("./comments").attach,h=e("./util");r.parse=function(e,t){t=l(t);var r=c(e,t),i=r.toString({tabWidth:t.tabWidth,reuseWhitespace:!1,useTabs:!1}),s=[],o=t.parser.parse(i,{jsx:!0,loc:!0,locations:!0,range:t.range,comment:!0,onComment:s,tolerant:t.tolerant,ecmaVersion:6,sourceType:"module"});h.fixFaultyLocations(o,r),o.loc=o.loc||{start:r.firstPos(),end:r.lastPos()},o.loc.lines=r,o.loc.indent=0;var u=h.getTrueLoc(o,r);o.loc.start=u.start,o.loc.end=u.end,o.comments&&(s=o.comments,delete o.comments);var f=o;if("Program"===f.type){var f=a.file(o,t.sourceFileName||null);f.loc={lines:r,indent:0,start:r.firstPos(),end:r.lastPos()}}else"File"===f.type&&(o=f.program);return p(s,o.body.length?f.program:f,r),new n(r).copy(f)},n.prototype.copy=function(e){if(u.check(e))return e.map(this.copy,this);if(!o.check(e))return e;h.fixFaultyLocations(e,this.lines);var t=Object.create(Object.getPrototypeOf(e),{original:{value:e,configurable:!1,enumerable:!1,writable:!0}}),r=e.loc,n=this.indent,i=n;r&&(("Block"===e.type||"Line"===e.type||"CommentBlock"===e.type||"CommentLine"===e.type||this.lines.isPrecededOnlyByWhitespace(r.start))&&(i=this.indent=r.start.column),r.lines=this.lines,r.indent=i);for(var s=Object.keys(e),a=s.length,l=0;l0||(n(i,e.start),s.push(e.lines),i=e.end)}),n(i,t.end),y.concat(s)}}function i(e){var t=[];return e.comments&&e.comments.length>0&&e.comments.forEach(function(e){(e.leading||e.trailing)&&t.push(e)}),t}function s(e,t,r){var n=A.copyPos(t.start),i=e.prevPos(n)&&e.charAt(n),s=r.charAt(r.firstPos());return i&&k.test(i)&&s&&k.test(s)}function a(e,t,r){var n=e.charAt(t.end),i=r.lastPos(),s=r.prevPos(i)&&r.charAt(i);return s&&k.test(s)&&n&&k.test(n)}function o(e,t){var r=e.getValue();b.assert(r);var n=r.original;if(b.assert(n),m.deepEqual(t,[]),r.type!==n.type)return!1;var i=new C(n),s=d(e,i,t);return s||(t.length=0),s}function u(e,t,r){var n=e.getValue();return n===t.getValue()||(_.check(n)?l(e,t,r):!!S.check(n)&&c(e,t,r))}function l(e,t,r){var n=e.getValue(),i=t.getValue();_.assert(n);var s=n.length;if(!_.check(i)||i.length!==s)return!1;for(var a=0;aa)}var m=e("assert"),y=e("./lines"),g=e("./types"),b=(g.getFieldValue,g.namedTypes.Printable),v=g.namedTypes.Expression,x=g.namedTypes.ReturnStatement,E=g.namedTypes.SourceLocation,A=e("./util"),D=A.comparePos,C=e("./fast-path"),S=g.builtInTypes.object,_=g.builtInTypes.array,w=g.builtInTypes.string,k=/[0-9a-z_$]/i;r.Patcher=n;var F=n.prototype;F.tryToReprintComments=function(e,t,r){var n=this;if(!e.comments&&!t.comments)return!0;var s=C.from(e),a=C.from(t);s.stack.push("comments",i(e)),a.stack.push("comments",i(t));var o=[],u=l(s,a,o);return u&&o.length>0&&o.forEach(function(e){var t=e.oldPath.getValue();m.ok(t.leading||t.trailing),n.replace(t.loc,r(e.newPath).indentTail(t.loc.indent))}),u},F.deleteComments=function(e){if(e.comments){var t=this;e.comments.forEach(function(r){r.leading?t.replace({start:r.loc.start,end:e.loc.lines.skipSpaces(r.loc.end,!1,!1)},""):r.trailing&&t.replace({start:e.loc.lines.skipSpaces(r.loc.start,!0,!1),end:r.loc.end},"")})}},r.getReprinter=function(e){m.ok(e instanceof C);var t=e.getValue();if(b.check(t)){var r=t.original,i=r&&r.loc,u=i&&i.lines,l=[];if(u&&o(e,l))return function(e){var t=new n(u);return l.forEach(function(r){var n=r.newPath.getValue(),i=r.oldPath.getValue();E.assert(i.loc,!0);var o=!t.tryToReprintComments(n,i,e);o&&t.deleteComments(i);var l=e(r.newPath,o).indentTail(i.loc.indent),c=s(u,i.loc,l),p=a(u,i.loc,l);if(c||p){var h=[];c&&h.push(" "),h.push(l),p&&h.push(" "),l=y.concat(h)}t.replace(i.loc,l)}),t.get(i).indentTail(-r.loc.indent)}}};var T={line:1,column:0},P=/\S/},{"./fast-path":552,"./lines":553,"./types":559,"./util":560,assert:3}],558:[function(e,t,r){function n(e,t){D.ok(this instanceof n),B.assert(e),this.code=e,t&&(O.assert(t),this.map=t)}function i(e){function t(e){return D.ok(e instanceof j),C(e,r)}function r(e,r){if(r)return t(e);if(D.ok(e instanceof j),!c){var n=p.tabWidth,i=e.getNode().loc;if(i&&i.lines&&i.lines.guessTabWidth){p.tabWidth=i.lines.guessTabWidth();var s=o(e);return p.tabWidth=n,s}}return o(e)}function o(e){var t=F(e);return t?s(e,t(r)):u(e)}function u(e,r){return r?C(e,u):a(e,p,t)}function l(e){return a(e,p,l)}D.ok(this instanceof i);var c=e&&e.tabWidth,p=k(e);D.notStrictEqual(p,e),p.sourceFileName=null,this.print=function(e){if(!e)return M;var t=r(j.from(e),!0);return new n(t.toString(p),N.composeSourceMaps(p.inputSourceMap,t.getSourceMap(p.sourceMapName,p.sourceRoot)))},this.printGenerically=function(e){if(!e)return M;var t=j.from(e),r=p.reuseWhitespace;p.reuseWhitespace=!1;var i=new n(l(t).toString(p));return p.reuseWhitespace=r,i}}function s(e,t){return e.needsParens()?w(["(",t,")"]):t}function a(e,t,r){D.ok(e instanceof j);var n=e.getValue(),i=[],s=!1,a=o(e,t,r);return!n||a.isEmpty()?a:(n.decorators&&n.decorators.length>0&&!N.getParentExportDeclaration(e)?e.each(function(e){i.push(r(e),"\n")},"decorators"):N.isExportDeclaration(n)&&n.declaration&&n.declaration.decorators?e.each(function(e){i.push(r(e),"\n")},"declaration","decorators"):s=e.needsParens(),s&&i.unshift("("),i.push(a),s&&i.push(")"),w(i))}function o(e,t,r){var n=e.getValue();if(!n)return _("");if("string"==typeof n)return _(n,t);P.Printable.assert(n);var i=[];switch(n.type){case"File":return e.call(r,"program");case"Program":return n.directives&&e.each(function(e){i.push(r(e),";\n")},"directives"),i.push(e.call(function(e){return u(e,t,r)},"body")),w(i);case"Noop":case"EmptyStatement":return _("");case"ExpressionStatement":return w([e.call(r,"expression"),";"]);case"ParenthesizedExpression":return w(["(",e.call(r,"expression"),")"]);case"BinaryExpression":case"LogicalExpression":case"AssignmentExpression":return _(" ").join([e.call(r,"left"),n.operator,e.call(r,"right")]);case"AssignmentPattern":return w([e.call(r,"left")," = ",e.call(r,"right")]);case"MemberExpression":i.push(e.call(r,"object"));var s=e.call(r,"property");return n.computed?i.push("[",s,"]"):i.push(".",s),w(i);case"MetaProperty":return w([e.call(r,"meta"),".",e.call(r,"property")]);case"BindExpression":return n.object&&i.push(e.call(r,"object")),i.push("::",e.call(r,"callee")),w(i);case"Path":return _(".").join(n.body);case"Identifier":return w([_(n.name,t),e.call(r,"typeAnnotation")]);case"SpreadElement":case"SpreadElementPattern":case"RestProperty":case"SpreadProperty":case"SpreadPropertyPattern":case"RestElement":return w(["...",e.call(r,"argument")]);case"FunctionDeclaration":case"FunctionExpression":return n.async&&i.push("async "),i.push("function"),n.generator&&i.push("*"),n.id&&i.push(" ",e.call(r,"id"),e.call(r,"typeParameters")),i.push("(",f(e,t,r),")",e.call(r,"returnType")," ",e.call(r,"body")),w(i);case"ArrowFunctionExpression":return n.async&&i.push("async "),n.typeParameters&&i.push(e.call(r,"typeParameters")),t.arrowParensAlways||1!==n.params.length||n.rest||"Identifier"!==n.params[0].type||n.params[0].typeAnnotation||n.returnType?i.push("(",f(e,t,r),")",e.call(r,"returnType")):i.push(e.call(r,"params",0)),i.push(" => ",e.call(r,"body")),w(i);case"MethodDefinition": +return n.static&&i.push("static "),i.push(c(e,t,r)),w(i);case"YieldExpression":return i.push("yield"),n.delegate&&i.push("*"),n.argument&&i.push(" ",e.call(r,"argument")),w(i);case"AwaitExpression":return i.push("await"),n.all&&i.push("*"),n.argument&&i.push(" ",e.call(r,"argument")),w(i);case"ModuleDeclaration":return i.push("module",e.call(r,"id")),n.source?(D.ok(!n.body),i.push("from",e.call(r,"source"))):i.push(e.call(r,"body")),_(" ").join(i);case"ImportSpecifier":return n.imported?(i.push(e.call(r,"imported")),n.local&&n.local.name!==n.imported.name&&i.push(" as ",e.call(r,"local"))):n.id&&(i.push(e.call(r,"id")),n.name&&i.push(" as ",e.call(r,"name"))),w(i);case"ExportSpecifier":return n.local?(i.push(e.call(r,"local")),n.exported&&n.exported.name!==n.local.name&&i.push(" as ",e.call(r,"exported"))):n.id&&(i.push(e.call(r,"id")),n.name&&i.push(" as ",e.call(r,"name"))),w(i);case"ExportBatchSpecifier":return _("*");case"ImportNamespaceSpecifier":return i.push("* as "),n.local?i.push(e.call(r,"local")):n.id&&i.push(e.call(r,"id")),w(i);case"ImportDefaultSpecifier":return n.local?e.call(r,"local"):e.call(r,"id");case"ExportDeclaration":case"ExportDefaultDeclaration":case"ExportNamedDeclaration":return m(e,t,r);case"ExportAllDeclaration":return i.push("export *"),n.exported&&i.push(" as ",e.call(r,"exported")),i.push(" from ",e.call(r,"source")),w(i);case"ExportNamespaceSpecifier":return w(["* as ",e.call(r,"exported")]);case"ExportDefaultSpecifier":return e.call(r,"exported");case"Import":return _("import",t);case"ImportDeclaration":if(i.push("import "),n.importKind&&"value"!==n.importKind&&i.push(n.importKind+" "),n.specifiers&&n.specifiers.length>0){var a=!1;e.each(function(e){e.getName()>0&&i.push(", ");var n=e.getValue();P.ImportDefaultSpecifier.check(n)||P.ImportNamespaceSpecifier.check(n)?D.strictEqual(a,!1):(P.ImportSpecifier.assert(n),a||(a=!0,i.push(t.objectCurlySpacing?"{ ":"{"))),i.push(r(e))},"specifiers"),a&&i.push(t.objectCurlySpacing?" }":"}"),i.push(" from ")}return i.push(e.call(r,"source"),";"),w(i);case"BlockStatement":var o=e.call(function(e){return u(e,t,r)},"body");return!o.isEmpty()||n.directives&&0!==n.directives.length?(i.push("{\n"),n.directives&&e.each(function(e){i.push(r(e).indent(t.tabWidth),";",n.directives.length>1||!o.isEmpty()?"\n":"")},"directives"),i.push(o.indent(t.tabWidth)),i.push("\n}"),w(i)):_("{}");case"ReturnStatement":if(i.push("return"),n.argument){var l=e.call(r,"argument");l.startsWithComment()||l.length>1&&P.JSXElement&&P.JSXElement.check(n.argument)?i.push(" (\n",l.indent(t.tabWidth),"\n)"):i.push(" ",l)}return i.push(";"),w(i);case"CallExpression":return w([e.call(r,"callee"),h(e,t,r)]);case"ObjectExpression":case"ObjectPattern":case"ObjectTypeAnnotation":var b=!1,x="ObjectTypeAnnotation"===n.type,A=t.flowObjectCommas?",":x?";":",",C=[];x&&C.push("indexers","callProperties"),C.push("properties");var S=0;C.forEach(function(e){S+=n[e].length});var k=x&&1===S||0===S,F=n.exact?"{|":"{",T=n.exact?"|}":"}";i.push(k?F:F+"\n");var B=i.length-1,O=0;return C.forEach(function(n){e.each(function(e){var n=r(e);k||(n=n.indent(t.tabWidth));var s=!x&&n.length>1;s&&b&&i.push("\n"),i.push(n),O0&&i.push(" "):n=n.indent(t.tabWidth),i.push(n),(r1?i.push(_(",\n").join(L).indentTail(n.kind.length+1)):i.push(L[0]);var U=e.getParentNode();return P.ForStatement.check(U)||P.ForInStatement.check(U)||P.ForOfStatement&&P.ForOfStatement.check(U)||P.ForAwaitStatement&&P.ForAwaitStatement.check(U)||i.push(";"),w(i);case"VariableDeclarator":return n.init?_(" = ").join([e.call(r,"id"),e.call(r,"init")]):e.call(r,"id");case"WithStatement":return w(["with (",e.call(r,"object"),") ",e.call(r,"body")]);case"IfStatement":var V=g(e.call(r,"consequent"),t),i=["if (",e.call(r,"test"),")",V];return n.alternate&&i.push(v(V)?" else":"\nelse",g(e.call(r,"alternate"),t)),w(i);case"ForStatement":var q=e.call(r,"init"),G=q.length>1?";\n":"; ",X=_(G).join([q,e.call(r,"test"),e.call(r,"update")]).indentTail("for (".length),J=w(["for (",X,")"]),W=g(e.call(r,"body"),t),i=[J];return J.length>1&&(i.push("\n"),W=W.trimLeft()),i.push(W),w(i);case"WhileStatement":return w(["while (",e.call(r,"test"),")",g(e.call(r,"body"),t)]);case"ForInStatement":return w([n.each?"for each (":"for (",e.call(r,"left")," in ",e.call(r,"right"),")",g(e.call(r,"body"),t)]);case"ForOfStatement":return w(["for (",e.call(r,"left")," of ",e.call(r,"right"),")",g(e.call(r,"body"),t)]);case"ForAwaitStatement":return w(["for await (",e.call(r,"left")," of ",e.call(r,"right"),")",g(e.call(r,"body"),t)]);case"DoWhileStatement":var K=w(["do",g(e.call(r,"body"),t)]),i=[K];return v(K)?i.push(" while"):i.push("\nwhile"),i.push(" (",e.call(r,"test"),");"),w(i);case"DoExpression":var z=e.call(function(e){return u(e,t,r)},"body");return w(["do {\n",z.indent(t.tabWidth),"\n}"]);case"BreakStatement":return i.push("break"),n.label&&i.push(" ",e.call(r,"label")),i.push(";"),w(i);case"ContinueStatement":return i.push("continue"),n.label&&i.push(" ",e.call(r,"label")),i.push(";"),w(i);case"LabeledStatement":return w([e.call(r,"label"),":\n",e.call(r,"body")]);case"TryStatement":return i.push("try ",e.call(r,"block")),n.handler?i.push(" ",e.call(r,"handler")):n.handlers&&e.each(function(e){i.push(" ",r(e))},"handlers"),n.finalizer&&i.push(" finally ",e.call(r,"finalizer")),w(i);case"CatchClause":return i.push("catch (",e.call(r,"param")),n.guard&&i.push(" if ",e.call(r,"guard")),i.push(") ",e.call(r,"body")),w(i);case"ThrowStatement":return w(["throw ",e.call(r,"argument"),";"]);case"SwitchStatement":return w(["switch (",e.call(r,"discriminant"),") {\n",_("\n").join(e.map(r,"cases")),"\n}"]);case"SwitchCase":return n.test?i.push("case ",e.call(r,"test"),":"):i.push("default:"),n.consequent.length>0&&i.push("\n",e.call(function(e){return u(e,t,r)},"consequent").indent(t.tabWidth)),w(i);case"DebuggerStatement":return _("debugger;");case"JSXAttribute":return i.push(e.call(r,"name")),n.value&&i.push("=",e.call(r,"value")),w(i);case"JSXIdentifier":return _(n.name,t);case"JSXNamespacedName":return _(":").join([e.call(r,"namespace"),e.call(r,"name")]);case"JSXMemberExpression":return _(".").join([e.call(r,"object"),e.call(r,"property")]);case"JSXSpreadAttribute":return w(["{...",e.call(r,"argument"),"}"]);case"JSXExpressionContainer":return w(["{",e.call(r,"expression"),"}"]);case"JSXElement":var Y=e.call(r,"openingElement");if(n.openingElement.selfClosing)return D.ok(!n.closingElement),Y;var H=w(e.map(function(e){var t=e.getValue();if(P.Literal.check(t)&&"string"==typeof t.value){if(/\S/.test(t.value))return t.value.replace(/^\s+|\s+$/g,"");if(/\n/.test(t.value))return"\n"}return r(e)},"children")).indentTail(t.tabWidth),$=e.call(r,"closingElement");return w([Y,H,$]);case"JSXOpeningElement":i.push("<",e.call(r,"name"));var Q=[];e.each(function(e){Q.push(" ",r(e))},"attributes");var Z=w(Q);return(Z.length>1||Z.getLineLength(1)>t.wrapColumn)&&(Q.forEach(function(e,t){" "===e&&(D.strictEqual(t%2,0),Q[t]="\n")}),Z=w(Q).indentTail(t.tabWidth)),i.push(Z,n.selfClosing?" />":">"),w(i);case"JSXClosingElement":return w([""]);case"JSXText":return _(n.value,t);case"JSXEmptyExpression":return _("");case"TypeAnnotatedIdentifier":return w([e.call(r,"annotation")," ",e.call(r,"identifier")]);case"ClassBody":return 0===n.body.length?_("{}"):w(["{\n",e.call(function(e){return u(e,t,r)},"body").indent(t.tabWidth),"\n}"]);case"ClassPropertyDefinition":return i.push("static ",e.call(r,"definition")),P.MethodDefinition.check(n.definition)||i.push(";"),w(i);case"ClassProperty":n.static&&i.push("static ");var j=e.call(r,"key");return n.computed?j=w(["[",j,"]"]):"plus"===n.variance?j=w(["+",j]):"minus"===n.variance&&(j=w(["-",j])),i.push(j),n.typeAnnotation&&i.push(e.call(r,"typeAnnotation")),n.value&&i.push(" = ",e.call(r,"value")),i.push(";"),w(i);case"ClassDeclaration":case"ClassExpression":return i.push("class"),n.id&&i.push(" ",e.call(r,"id"),e.call(r,"typeParameters")),n.superClass&&i.push(" extends ",e.call(r,"superClass"),e.call(r,"superTypeParameters")),n.implements&&n.implements.length>0&&i.push(" implements ",_(", ").join(e.map(r,"implements"))),i.push(" ",e.call(r,"body")),w(i);case"TemplateElement":return _(n.value.raw,t).lockIndentTail();case"TemplateLiteral":var ee=e.map(r,"expressions");return i.push("`"),e.each(function(e){var t=e.getName();i.push(r(e)),t ":": ",e.call(r,"returnType")),w(i);case"FunctionTypeParam":return w([e.call(r,"name"),n.optional?"?":"",": ",e.call(r,"typeAnnotation")]);case"GenericTypeAnnotation":return w([e.call(r,"id"),e.call(r,"typeParameters")]);case"DeclareInterface":i.push("declare ");case"InterfaceDeclaration":return i.push(_("interface ",t),e.call(r,"id"),e.call(r,"typeParameters")," "),n.extends&&i.push("extends ",_(", ").join(e.map(r,"extends"))),i.push(" ",e.call(r,"body")),w(i);case"ClassImplements":case"InterfaceExtends":return w([e.call(r,"id"),e.call(r,"typeParameters")]);case"IntersectionTypeAnnotation":return _(" & ").join(e.map(r,"types"));case"NullableTypeAnnotation":return w(["?",e.call(r,"typeAnnotation")]);case"NullLiteralTypeAnnotation":return _("null",t);case"ThisTypeAnnotation":return _("this",t);case"NumberTypeAnnotation":return _("number",t);case"ObjectTypeCallProperty":return e.call(r,"value");case"ObjectTypeIndexer":var ne="plus"===n.variance?"+":"minus"===n.variance?"-":"";return w([ne,"[",e.call(r,"id"),": ",e.call(r,"key"),"]: ",e.call(r,"value")]);case"ObjectTypeProperty":var ne="plus"===n.variance?"+":"minus"===n.variance?"-":"";return w([ne,e.call(r,"key"),n.optional?"?":"",": ",e.call(r,"value")]);case"QualifiedTypeIdentifier":return w([e.call(r,"qualification"),".",e.call(r,"id")]);case"StringLiteralTypeAnnotation":return _(E(n.value,t),t);case"NumberLiteralTypeAnnotation":case"NumericLiteralTypeAnnotation":return D.strictEqual(typeof n.value,"number"),_(JSON.stringify(n.value),t);case"StringTypeAnnotation":return _("string",t);case"DeclareTypeAlias":i.push("declare ");case"TypeAlias":return w(["type ",e.call(r,"id"),e.call(r,"typeParameters")," = ",e.call(r,"right"),";"]);case"TypeCastExpression":return w(["(",e.call(r,"expression"),e.call(r,"typeAnnotation"),")"]);case"TypeParameterDeclaration":case"TypeParameterInstantiation":return w(["<",_(", ").join(e.map(r,"params")),">"]);case"TypeParameter":switch(n.variance){case"plus":i.push("+");break;case"minus":i.push("-")}return i.push(e.call(r,"name")),n.bound&&i.push(e.call(r,"bound")),n.default&&i.push("=",e.call(r,"default")),w(i);case"TypeofTypeAnnotation":return w([_("typeof ",t),e.call(r,"argument")]);case"UnionTypeAnnotation":return _(" | ").join(e.map(r,"types"));case"VoidTypeAnnotation":return _("void",t);case"NullTypeAnnotation":return _("null",t);case"ClassHeritage":case"ComprehensionBlock":case"ComprehensionExpression":case"Glob":case"GeneratorExpression":case"LetStatement":case"LetExpression":case"GraphExpression":case"GraphIndexExpression":case"XMLDefaultDeclaration":case"XMLAnyName":case"XMLQualifiedIdentifier":case"XMLFunctionQualifiedIdentifier":case"XMLAttributeSelector":case"XMLFilterExpression":case"XML":case"XMLElement":case"XMLList":case"XMLEscape":case"XMLText":case"XMLStartTag":case"XMLEndTag":case"XMLPointTag":case"XMLName":case"XMLAttribute":case"XMLCdata":case"XMLComment":case"XMLProcessingInstruction":default:throw new Error("unknown type: "+JSON.stringify(n.type))}return p}function u(e,t,r){var n=(P.ClassBody&&P.ClassBody.check(e.getParentNode()),[]),i=!1,s=!1;e.each(function(e){var t=(e.getName(),e.getValue());t&&"EmptyStatement"!==t.type&&(P.Comment.check(t)?i=!0:P.Statement.check(t)?s=!0:B.assert(t),n.push({node:t,printed:r(e)}))}),i&&D.strictEqual(s,!1,"Comments may appear as statements in otherwise empty statement lists, but may not coexist with non-Comment nodes.");var a=null,o=n.length,u=[];return n.forEach(function(e,r){var n,i,s=e.printed,c=e.node,p=s.length>1,h=r>0,f=rr.length?n:r}function c(e,t,r){var n=e.getNode(),i=n.kind,s=[];"ObjectMethod"===n.type||"ClassMethod"===n.type?n.value=n:P.FunctionExpression.assert(n.value),n.value.async&&s.push("async "),i&&"init"!==i&&"method"!==i&&"constructor"!==i?(D.ok("get"===i||"set"===i),s.push(i," ")):n.value.generator&&s.push("*");var a=e.call(r,"key");return n.computed&&(a=w(["[",a,"]"])),s.push(a,e.call(r,"value","typeParameters"),"(",e.call(function(e){return f(e,t,r)},"value"),")",e.call(r,"value","returnType")," ",e.call(r,"value","body")),w(s)}function h(e,t,r){var n=e.map(r,"arguments"),i=N.isTrailingCommaEnabled(t,"parameters"),s=_(", ").join(n);return s.getLineLength(1)>t.wrapColumn?(s=_(",\n").join(n),w(["(\n",s.indent(t.tabWidth),i?",\n)":"\n)"])):w(["(",s,")"])}function f(e,t,r){var n=e.getValue();P.Function.assert(n);var i=e.map(r,"params");n.defaults&&e.each(function(e){var t=e.getName(),n=i[t];n&&e.getValue()&&(i[t]=w([n," = ",r(e)]))},"defaults"),n.rest&&i.push(w(["...",e.call(r,"rest")]));var s=_(", ").join(i);return s.length>1||s.getLineLength(1)>t.wrapColumn?(s=_(",\n").join(i),s=w(N.isTrailingCommaEnabled(t,"parameters")&&!n.rest&&"RestElement"!==n.params[n.params.length-1].type?[s,",\n"]:[s,"\n"]),w(["\n",s.indent(t.tabWidth)])):s}function d(e,t,r){var n=e.getValue(),i=[];if(n.async&&i.push("async "),n.generator&&i.push("*"),n.method||"get"===n.kind||"set"===n.kind)return c(e,t,r);var s=e.call(r,"key");return n.computed?i.push("[",s,"]"):i.push(s),i.push("(",f(e,t,r),")",e.call(r,"returnType")," ",e.call(r,"body")),w(i)}function m(e,t,r){var n=e.getValue(),i=["export "],s=t.objectCurlySpacing;P.Declaration.assert(n),(n.default||"ExportDefaultDeclaration"===n.type)&&i.push("default "),n.declaration?i.push(e.call(r,"declaration")):n.specifiers&&n.specifiers.length>0&&(1===n.specifiers.length&&"ExportBatchSpecifier"===n.specifiers[0].type?i.push("*"):i.push(s?"{ ":"{",_(", ").join(e.map(r,"specifiers")),s?" }":"}"),n.source&&i.push(" from ",e.call(r,"source")));var a=w(i);return";"===b(a)||n.declaration&&("FunctionDeclaration"===n.declaration.type||"ClassDeclaration"===n.declaration.type)||(a=w([a,";"])),a}function y(e,t){var r=N.getParentExportDeclaration(e);return r?D.strictEqual(r.type,"DeclareExportDeclaration"):t.unshift("declare "),w(t)}function g(e,t){return w(e.length>1?[" ",e]:["\n",A(e).indent(t.tabWidth)])}function b(e){var t=e.lastPos();do{var r=e.charAt(t);if(/\S/.test(r))return r}while(e.prevPos(t))}function v(e){return"}"===b(e)}function x(e){return e.replace(/['"]/g,function(e){return'"'===e?"'":'"'})}function E(e,t){switch(B.assert(e),t.quote){case"auto":var r=JSON.stringify(e),n=x(JSON.stringify(x(e)));return r.length>n.length?n:r;case"single":return x(JSON.stringify(x(e)));case"double":default:return JSON.stringify(e)}}function A(e){var t=b(e);return!t||"\n};".indexOf(t)<0?w([e,";"]):e}var D=e("assert"),C=(e("source-map"),e("./comments").printComments),S=e("./lines"),_=S.fromString,w=S.concat,k=e("./options").normalize,F=e("./patcher").getReprinter,T=e("./types"),P=T.namedTypes,B=T.builtInTypes.string,O=T.builtInTypes.object,j=e("./fast-path"),N=e("./util"),I=n.prototype,L=!1;I.toString=function(){return L||(console.warn("Deprecation warning: recast.print now returns an object with a .code property. You appear to be treating the object as a string, which might still work but is strongly discouraged."),L=!0),this.code};var M=new n("");r.Printer=i},{"./comments":551,"./fast-path":552,"./lines":553,"./options":555,"./patcher":557,"./types":559,"./util":560,assert:3,"source-map":573}],559:[function(e,t,r){t.exports=e("ast-types")},{"ast-types":22}],560:[function(e,t,r){function n(){for(var e={},t=arguments.length,r=0;r=0;--i){var s=this.leading[i];t.end.offset>=s.start&&(r.unshift(s.comment),this.leading.splice(i,1),this.trailing.splice(i,1))}r.length&&(e.innerComments=r)}},e.prototype.findTrailingComments=function(e,t){var r=[];if(this.trailing.length>0){for(var n=this.trailing.length-1;n>=0;--n){var i=this.trailing[n];i.start>=t.end.offset&&r.unshift(i.comment)}return this.trailing.length=0,r}var s=this.stack[this.stack.length-1];if(s&&s.node.trailingComments){var a=s.node.trailingComments[0];a&&a.range[0]>=t.end.offset&&(r=s.node.trailingComments,delete s.node.trailingComments)}return r},e.prototype.findLeadingComments=function(e,t){for(var r,n=[];this.stack.length>0;){var i=this.stack[this.stack.length-1];if(!(i&&i.start>=t.start.offset))break;r=this.stack.pop().node}if(r){for(var s=r.leadingComments?r.leadingComments.length:0,a=s-1;a>=0;--a){var o=r.leadingComments[a];o.range[1]<=t.start.offset&&(n.unshift(o),r.leadingComments.splice(a,1))}return r.leadingComments&&0===r.leadingComments.length&&delete r.leadingComments,n}for(var a=this.leading.length-1;a>=0;--a){var i=this.leading[a];i.start<=t.start.offset&&(n.unshift(i.comment),this.leading.splice(a,1))}return n},e.prototype.visitNode=function(e,t){if(!(e.type===n.Syntax.Program&&e.body.length>0)){this.insertInnerComments(e,t);var r=this.findTrailingComments(e,t),i=this.findLeadingComments(e,t);i.length>0&&(e.leadingComments=i),r.length>0&&(e.trailingComments=r),this.stack.push({node:e,start:t.start.offset})}},e.prototype.visitComment=function(e,t){var r="L"===e.type[0]?"Line":"Block",n={type:r,value:e.value};if(e.range&&(n.range=e.range),e.loc&&(n.loc=e.loc),this.comments.push(n),this.attach){var i={comment:{type:r,value:e.value,range:[t.start.offset,t.end.offset]},start:t.start.offset};e.loc&&(i.comment.loc=e.loc),e.type=r,this.leading.push(i),this.trailing.push(i)}},e.prototype.visit=function(e,t){"LineComment"===e.type?this.visitComment(e,t):"BlockComment"===e.type?this.visitComment(e,t):this.attach&&this.visitNode(e,t)},e}();t.CommentHandler=i},function(e,t){"use strict";t.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(e,t,r){"use strict";var n=r(4),i=r(5),s=r(6),a=r(7),o=r(8),u=r(2),l=r(10),c=function(){function e(e,t,r){void 0===t&&(t={}),this.config={range:"boolean"==typeof t.range&&t.range,loc:"boolean"==typeof t.loc&&t.loc,source:null,tokens:"boolean"==typeof t.tokens&&t.tokens,comment:"boolean"==typeof t.comment&&t.comment,tolerant:"boolean"==typeof t.tolerant&&t.tolerant},this.config.loc&&t.source&&null!==t.source&&(this.config.source=String(t.source)),this.delegate=r,this.errorHandler=new s.ErrorHandler,this.errorHandler.tolerant=this.config.tolerant,this.scanner=new o.Scanner(e,this.errorHandler),this.scanner.trackComment=this.config.comment,this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11},this.sourceType=t&&"module"===t.sourceType?"module":"script",this.lookahead=null,this.hasLineTerminator=!1,this.context={allowIn:!0,allowYield:!0,firstCoverInitializedNameError:null,isAssignmentTarget:!1,isBindingElement:!1,inFunctionBody:!1,inIteration:!1,inSwitch:!1,labelSet:{},strict:"module"===this.sourceType},this.tokens=[],this.startMarker={index:0,lineNumber:this.scanner.lineNumber,lineStart:0},this.lastMarker={index:0,lineNumber:this.scanner.lineNumber,lineStart:0},this.nextToken(),this.lastMarker={index:this.scanner.index,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart}}return e.prototype.throwError=function(e){for(var t=[],r=1;r0&&this.delegate)for(var t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e},e.prototype.isolateCoverGrammar=function(e){var t=this.context.isBindingElement,r=this.context.isAssignmentTarget,n=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var i=e.call(this);return null!==this.context.firstCoverInitializedNameError&&this.throwUnexpectedToken(this.context.firstCoverInitializedNameError),this.context.isBindingElement=t,this.context.isAssignmentTarget=r,this.context.firstCoverInitializedNameError=n,i},e.prototype.inheritCoverGrammar=function(e){var t=this.context.isBindingElement,r=this.context.isAssignmentTarget,n=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var i=e.call(this);return this.context.isBindingElement=this.context.isBindingElement&&t,this.context.isAssignmentTarget=this.context.isAssignmentTarget&&r,this.context.firstCoverInitializedNameError=n||this.context.firstCoverInitializedNameError,i},e.prototype.consumeSemicolon=function(){this.match(";")?this.nextToken():this.hasLineTerminator||(this.lookahead.type===a.Token.EOF||this.match("}")||this.throwUnexpectedToken(this.lookahead),this.lastMarker.index=this.startMarker.index,this.lastMarker.lineNumber=this.startMarker.lineNumber,this.lastMarker.lineStart=this.startMarker.lineStart)},e.prototype.parsePrimaryExpression=function(){var e,t,r,n=this.createNode();switch(this.lookahead.type){case a.Token.Identifier:"module"===this.sourceType&&"await"===this.lookahead.value&&this.tolerateUnexpectedToken(this.lookahead),e=this.finalize(n,new l.Identifier(this.nextToken().value));break;case a.Token.NumericLiteral:case a.Token.StringLiteral:this.context.strict&&this.lookahead.octal&&this.tolerateUnexpectedToken(this.lookahead,i.Messages.StrictOctalLiteral),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),r=this.getTokenRaw(t),e=this.finalize(n,new l.Literal(t.value,r));break;case a.Token.BooleanLiteral:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),t.value="true"===t.value,r=this.getTokenRaw(t),e=this.finalize(n,new l.Literal(t.value,r));break;case a.Token.NullLiteral:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),t.value=null,r=this.getTokenRaw(t),e=this.finalize(n,new l.Literal(t.value,r));break;case a.Token.Template:e=this.parseTemplateLiteral();break;case a.Token.Punctuator:switch(this.lookahead.value){case"(":this.context.isBindingElement=!1,e=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":e=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":e=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.scanner.index=this.startMarker.index,t=this.nextRegexToken(),r=this.getTokenRaw(t),e=this.finalize(n,new l.RegexLiteral(t.value,r,t.regex));break;default:this.throwUnexpectedToken(this.nextToken())}break;case a.Token.Keyword:!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")?e=this.parseIdentifierName():!this.context.strict&&this.matchKeyword("let")?e=this.finalize(n,new l.Identifier(this.nextToken().value)):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.matchKeyword("function")?e=this.parseFunctionExpression():this.matchKeyword("this")?(this.nextToken(),e=this.finalize(n,new l.ThisExpression)):this.matchKeyword("class")?e=this.parseClassExpression():this.throwUnexpectedToken(this.nextToken()));break;default:this.throwUnexpectedToken(this.nextToken())}return e},e.prototype.parseSpreadElement=function(){var e=this.createNode();this.expect("...");var t=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(e,new l.SpreadElement(t))},e.prototype.parseArrayInitializer=function(){var e=this.createNode(),t=[];for(this.expect("[");!this.match("]");)if(this.match(","))this.nextToken(),t.push(null);else if(this.match("...")){var r=this.parseSpreadElement();this.match("]")||(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.expect(",")),t.push(r)}else t.push(this.inheritCoverGrammar(this.parseAssignmentExpression)),this.match("]")||this.expect(",");return this.expect("]"),this.finalize(e,new l.ArrayExpression(t))},e.prototype.parsePropertyMethod=function(e){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var t=this.context.strict,r=this.isolateCoverGrammar(this.parseFunctionSourceElements);return this.context.strict&&e.firstRestricted&&this.tolerateUnexpectedToken(e.firstRestricted,e.message),this.context.strict&&e.stricted&&this.tolerateUnexpectedToken(e.stricted,e.message),this.context.strict=t,r},e.prototype.parsePropertyMethodFunction=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!1;var r=this.parseFormalParameters(),n=this.parsePropertyMethod(r);return this.context.allowYield=t,this.finalize(e,new l.FunctionExpression(null,r.params,n,!1))},e.prototype.parseObjectPropertyKey=function(){var e=this.createNode(),t=this.nextToken(),r=null;switch(t.type){case a.Token.StringLiteral:case a.Token.NumericLiteral:this.context.strict&&t.octal&&this.tolerateUnexpectedToken(t,i.Messages.StrictOctalLiteral);var n=this.getTokenRaw(t);r=this.finalize(e,new l.Literal(t.value,n));break;case a.Token.Identifier:case a.Token.BooleanLiteral:case a.Token.NullLiteral:case a.Token.Keyword:r=this.finalize(e,new l.Identifier(t.value));break;case a.Token.Punctuator:"["===t.value?(r=this.isolateCoverGrammar(this.parseAssignmentExpression),this.expect("]")):this.throwUnexpectedToken(t);break;default:this.throwUnexpectedToken(t)}return r},e.prototype.isPropertyKey=function(e,t){return e.type===u.Syntax.Identifier&&e.name===t||e.type===u.Syntax.Literal&&e.value===t},e.prototype.parseObjectProperty=function(e){var t,r,n,s=this.createNode(),o=this.lookahead,u=!1,c=!1,p=!1;o.type===a.Token.Identifier?(this.nextToken(),r=this.finalize(s,new l.Identifier(o.value))):this.match("*")?this.nextToken():(u=this.match("["),r=this.parseObjectPropertyKey());var h=this.qualifiedPropertyName(this.lookahead);if(o.type===a.Token.Identifier&&"get"===o.value&&h)t="get",u=this.match("["),r=this.parseObjectPropertyKey(),this.context.allowYield=!1,n=this.parseGetterMethod();else if(o.type===a.Token.Identifier&&"set"===o.value&&h)t="set",u=this.match("["),r=this.parseObjectPropertyKey(),n=this.parseSetterMethod();else if(o.type===a.Token.Punctuator&&"*"===o.value&&h)t="init",u=this.match("["),r=this.parseObjectPropertyKey(),n=this.parseGeneratorMethod(),c=!0;else if(r||this.throwUnexpectedToken(this.lookahead),t="init",this.match(":"))!u&&this.isPropertyKey(r,"__proto__")&&(e.value&&this.tolerateError(i.Messages.DuplicateProtoProperty),e.value=!0),this.nextToken(),n=this.inheritCoverGrammar(this.parseAssignmentExpression);else if(this.match("("))n=this.parsePropertyMethodFunction(),c=!0;else if(o.type===a.Token.Identifier){var f=this.finalize(s,new l.Identifier(o.value));if(this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead,this.nextToken(),p=!0;var d=this.isolateCoverGrammar(this.parseAssignmentExpression);n=this.finalize(s,new l.AssignmentPattern(f,d))}else p=!0,n=f}else this.throwUnexpectedToken(this.nextToken());return this.finalize(s,new l.Property(t,r,u,n,c,p))},e.prototype.parseObjectInitializer=function(){var e=this.createNode();this.expect("{");for(var t=[],r={value:!1};!this.match("}");)t.push(this.parseObjectProperty(r)),this.match("}")||this.expectCommaSeparator();return this.expect("}"),this.finalize(e,new l.ObjectExpression(t))},e.prototype.parseTemplateHead=function(){n.assert(this.lookahead.head,"Template literal must start with a template head");var e=this.createNode(),t=this.nextToken(),r={raw:t.value.raw,cooked:t.value.cooked};return this.finalize(e,new l.TemplateElement(r,t.tail))},e.prototype.parseTemplateElement=function(){this.lookahead.type!==a.Token.Template&&this.throwUnexpectedToken();var e=this.createNode(),t=this.nextToken(),r={raw:t.value.raw,cooked:t.value.cooked};return this.finalize(e,new l.TemplateElement(r,t.tail))},e.prototype.parseTemplateLiteral=function(){var e=this.createNode(),t=[],r=[],n=this.parseTemplateHead();for(r.push(n);!n.tail;)t.push(this.parseExpression()),n=this.parseTemplateElement(),r.push(n);return this.finalize(e,new l.TemplateLiteral(r,t))},e.prototype.reinterpretExpressionAsPattern=function(e){switch(e.type){case u.Syntax.Identifier:case u.Syntax.MemberExpression:case u.Syntax.RestElement:case u.Syntax.AssignmentPattern:break;case u.Syntax.SpreadElement:e.type=u.Syntax.RestElement,this.reinterpretExpressionAsPattern(e.argument);break;case u.Syntax.ArrayExpression:e.type=u.Syntax.ArrayPattern;for(var t=0;t")||this.expect("=>"),e={type:"ArrowParameterPlaceHolder",params:[]};else{var t=this.lookahead,r=[];if(this.match("..."))e=this.parseRestElement(r),this.expect(")"),this.match("=>")||this.expect("=>"),e={type:"ArrowParameterPlaceHolder",params:[e]};else{var n=!1;if(this.context.isBindingElement=!0,e=this.inheritCoverGrammar(this.parseAssignmentExpression),this.match(",")){var i=[];for(this.context.isAssignmentTarget=!1,i.push(e);this.startMarker.index")||this.expect("=>"),this.context.isBindingElement=!1;for(var s=0;s")&&(e.type===u.Syntax.Identifier&&"yield"===e.name&&(n=!0,e={type:"ArrowParameterPlaceHolder",params:[e]}),!n)){if(this.context.isBindingElement||this.throwUnexpectedToken(this.lookahead),e.type===u.Syntax.SequenceExpression)for(var s=0;s0){this.nextToken(),r.prec=n,this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;for(var i=[e,this.lookahead],s=t,a=this.isolateCoverGrammar(this.parseExponentiationExpression),o=[s,r,a];;){if((n=this.binaryPrecedence(this.lookahead))<=0)break;for(;o.length>2&&n<=o[o.length-2].prec;){a=o.pop();var u=o.pop().value;s=o.pop(),i.pop();var c=this.startNode(i[i.length-1]);o.push(this.finalize(c,new l.BinaryExpression(u,s,a)))}r=this.nextToken(),r.prec=n,o.push(r),i.push(this.lookahead),o.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var p=o.length-1;for(t=o[p],i.pop();p>1;){var c=this.startNode(i.pop());t=this.finalize(c,new l.BinaryExpression(o[p-1].value,o[p-2],t)),p-=2}}return t},e.prototype.parseConditionalExpression=function(){var e=this.lookahead,t=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var r=this.context.allowIn;this.context.allowIn=!0;var n=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=r,this.expect(":");var i=this.isolateCoverGrammar(this.parseAssignmentExpression);t=this.finalize(this.startNode(e),new l.ConditionalExpression(t,n,i)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return t},e.prototype.checkPatternParam=function(e,t){switch(t.type){case u.Syntax.Identifier:this.validateParam(e,t,t.name);break;case u.Syntax.RestElement:this.checkPatternParam(e,t.argument);break;case u.Syntax.AssignmentPattern:this.checkPatternParam(e,t.left);break;case u.Syntax.ArrayPattern:for(var r=0;r")){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var n=this.reinterpretAsCoverFormalsList(e);if(n){this.hasLineTerminator&&this.tolerateUnexpectedToken(this.lookahead),this.context.firstCoverInitializedNameError=null;var s=this.context.strict,a=this.context.allowYield;this.context.allowYield=!0;var o=this.startNode(t);this.expect("=>");var c=this.match("{")?this.parseFunctionSourceElements():this.isolateCoverGrammar(this.parseAssignmentExpression),p=c.type!==u.Syntax.BlockStatement;this.context.strict&&n.firstRestricted&&this.throwUnexpectedToken(n.firstRestricted,n.message),this.context.strict&&n.stricted&&this.tolerateUnexpectedToken(n.stricted,n.message),e=this.finalize(o,new l.ArrowFunctionExpression(n.params,c,p)),this.context.strict=s,this.context.allowYield=a}}else if(this.matchAssign()){if(this.context.isAssignmentTarget||this.tolerateError(i.Messages.InvalidLHSInAssignment),this.context.strict&&e.type===u.Syntax.Identifier){var h=e;this.scanner.isRestrictedWord(h.name)&&this.tolerateUnexpectedToken(r,i.Messages.StrictLHSAssignment),this.scanner.isStrictModeReservedWord(h.name)&&this.tolerateUnexpectedToken(r,i.Messages.StrictReservedWord)}this.match("=")?this.reinterpretExpressionAsPattern(e):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1),r=this.nextToken();var f=this.isolateCoverGrammar(this.parseAssignmentExpression);e=this.finalize(this.startNode(t),new l.AssignmentExpression(r.value,e,f)),this.context.firstCoverInitializedNameError=null}}return e},e.prototype.parseExpression=function(){var e=this.lookahead,t=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var r=[];for(r.push(t);this.startMarker.index",t.TokenName[r.Identifier]="Identifier",t.TokenName[r.Keyword]="Keyword",t.TokenName[r.NullLiteral]="Null",t.TokenName[r.NumericLiteral]="Numeric",t.TokenName[r.Punctuator]="Punctuator",t.TokenName[r.StringLiteral]="String",t.TokenName[r.RegularExpression]="RegularExpression",t.TokenName[r.Template]="Template" +},function(e,t,r){"use strict";function n(e){return"0123456789abcdef".indexOf(e.toLowerCase())}function i(e){return"01234567".indexOf(e)}var s=r(4),a=r(5),o=r(9),u=r(7),l=function(){function e(e,t){this.source=e,this.errorHandler=t,this.trackComment=!1,this.length=e.length,this.index=0,this.lineNumber=e.length>0?1:0,this.lineStart=0,this.curlyStack=[]}return e.prototype.eof=function(){return this.index>=this.length},e.prototype.throwUnexpectedToken=function(e){void 0===e&&(e=a.Messages.UnexpectedTokenIllegal),this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.tolerateUnexpectedToken=function(){this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,a.Messages.UnexpectedTokenIllegal)},e.prototype.skipSingleLineComment=function(e){var t,r,n;for(this.trackComment&&(t=[],r=this.index-e,n={start:{line:this.lineNumber,column:this.index-this.lineStart-e},end:{}});!this.eof();){var i=this.source.charCodeAt(this.index);if(++this.index,o.Character.isLineTerminator(i)){if(this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart-1};var s={multiLine:!1,slice:[r+e,this.index-1],range:[r,this.index-1],loc:n};t.push(s)}return 13===i&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t}}if(this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart};var s={multiLine:!1,slice:[r+e,this.index],range:[r,this.index],loc:n};t.push(s)}return t},e.prototype.skipMultiLineComment=function(){var e,t,r;for(this.trackComment&&(e=[],t=this.index-2,r={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}});!this.eof();){var n=this.source.charCodeAt(this.index);if(o.Character.isLineTerminator(n))13===n&&10===this.source.charCodeAt(this.index+1)&&++this.index,++this.lineNumber,++this.index,this.lineStart=this.index;else if(42===n){if(47===this.source.charCodeAt(this.index+1)){if(this.index+=2,this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[t+2,this.index-2],range:[t,this.index],loc:r};e.push(i)}return e}++this.index}else++this.index}if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[t+2,this.index],range:[t,this.index],loc:r};e.push(i)}return this.tolerateUnexpectedToken(),e},e.prototype.scanComments=function(){var e;this.trackComment&&(e=[]);for(var t=0===this.index;!this.eof();){var r=this.source.charCodeAt(this.index);if(o.Character.isWhiteSpace(r))++this.index;else if(o.Character.isLineTerminator(r))++this.index,13===r&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t=!0;else if(47===r)if(47===(r=this.source.charCodeAt(this.index+1))){this.index+=2;var n=this.skipSingleLineComment(2);this.trackComment&&(e=e.concat(n)),t=!0}else{if(42!==r)break;this.index+=2;var n=this.skipMultiLineComment();this.trackComment&&(e=e.concat(n))}else if(t&&45===r){if(45!==this.source.charCodeAt(this.index+1)||62!==this.source.charCodeAt(this.index+2))break;this.index+=3;var n=this.skipSingleLineComment(3);this.trackComment&&(e=e.concat(n))}else{if(60!==r)break;if("!--"!==this.source.slice(this.index+1,this.index+4))break;this.index+=4;var n=this.skipSingleLineComment(4);this.trackComment&&(e=e.concat(n))}}return e},e.prototype.isFutureReservedWord=function(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}},e.prototype.isStrictModeReservedWord=function(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}},e.prototype.isRestrictedWord=function(e){return"eval"===e||"arguments"===e},e.prototype.isKeyword=function(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}},e.prototype.codePointAt=function(e){var t=this.source.charCodeAt(e);if(t>=55296&&t<=56319){var r=this.source.charCodeAt(e+1);if(r>=56320&&r<=57343){t=1024*(t-55296)+r-56320+65536}}return t},e.prototype.scanHexEscape=function(e){for(var t="u"===e?4:2,r=0,i=0;i1114111||"}"!==e)&&this.throwUnexpectedToken(),o.Character.fromCodePoint(t)},e.prototype.getIdentifier=function(){for(var e=this.index++;!this.eof();){var t=this.source.charCodeAt(this.index);if(92===t)return this.index=e,this.getComplexIdentifier();if(t>=55296&&t<57343)return this.index=e,this.getComplexIdentifier();if(!o.Character.isIdentifierPart(t))break;++this.index}return this.source.slice(e,this.index)},e.prototype.getComplexIdentifier=function(){var e=this.codePointAt(this.index),t=o.Character.fromCodePoint(e);this.index+=t.length;var r;for(92===e&&(117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,r=this.scanUnicodeCodePointEscape()):(r=this.scanHexEscape("u"),e=r.charCodeAt(0),r&&"\\"!==r&&o.Character.isIdentifierStart(e)||this.throwUnexpectedToken()),t=r);!this.eof()&&(e=this.codePointAt(this.index),o.Character.isIdentifierPart(e));)r=o.Character.fromCodePoint(e),t+=r,this.index+=r.length,92===e&&(t=t.substr(0,t.length-1),117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,r=this.scanUnicodeCodePointEscape()):(r=this.scanHexEscape("u"),e=r.charCodeAt(0),r&&"\\"!==r&&o.Character.isIdentifierPart(e)||this.throwUnexpectedToken()),t+=r);return t},e.prototype.octalToDecimal=function(e){var t="0"!==e,r=i(e);return!this.eof()&&o.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(t=!0,r=8*r+i(this.source[this.index++]),"0123".indexOf(e)>=0&&!this.eof()&&o.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(r=8*r+i(this.source[this.index++]))),{code:r,octal:t}},e.prototype.scanIdentifier=function(){var e,t=this.index,r=92===this.source.charCodeAt(t)?this.getComplexIdentifier():this.getIdentifier();return e=1===r.length?u.Token.Identifier:this.isKeyword(r)?u.Token.Keyword:"null"===r?u.Token.NullLiteral:"true"===r||"false"===r?u.Token.BooleanLiteral:u.Token.Identifier,{type:e,value:r,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.scanPunctuator=function(){var e={type:u.Token.Punctuator,value:"",lineNumber:this.lineNumber,lineStart:this.lineStart,start:this.index,end:this.index},t=this.source[this.index];switch(t){case"(":case"{":"{"===t&&this.curlyStack.push("{"),++this.index;break;case".":++this.index,"."===this.source[this.index]&&"."===this.source[this.index+1]&&(this.index+=2,t="...");break;case"}":++this.index,this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:t=this.source.substr(this.index,4),">>>="===t?this.index+=4:(t=t.substr(0,3),"==="===t||"!=="===t||">>>"===t||"<<="===t||">>="===t||"**="===t?this.index+=3:(t=t.substr(0,2),"&&"===t||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t||"**"===t?this.index+=2:(t=this.source[this.index],"<>=!+-*%&|^/".indexOf(t)>=0&&++this.index)))}return this.index===e.start&&this.throwUnexpectedToken(),e.end=this.index,e.value=t,e},e.prototype.scanHexLiteral=function(e){for(var t="";!this.eof()&&o.Character.isHexDigit(this.source.charCodeAt(this.index));)t+=this.source[this.index++];return 0===t.length&&this.throwUnexpectedToken(),o.Character.isIdentifierStart(this.source.charCodeAt(this.index))&&this.throwUnexpectedToken(),{type:u.Token.NumericLiteral,value:parseInt("0x"+t,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanBinaryLiteral=function(e){for(var t,r="";!this.eof()&&("0"===(t=this.source[this.index])||"1"===t);)r+=this.source[this.index++];return 0===r.length&&this.throwUnexpectedToken(),this.eof()||(t=this.source.charCodeAt(this.index),(o.Character.isIdentifierStart(t)||o.Character.isDecimalDigit(t))&&this.throwUnexpectedToken()),{type:u.Token.NumericLiteral,value:parseInt(r,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanOctalLiteral=function(e,t){var r="",n=!1;for(o.Character.isOctalDigit(e.charCodeAt(0))?(n=!0,r="0"+this.source[this.index++]):++this.index;!this.eof()&&o.Character.isOctalDigit(this.source.charCodeAt(this.index));)r+=this.source[this.index++];return n||0!==r.length||this.throwUnexpectedToken(),(o.Character.isIdentifierStart(this.source.charCodeAt(this.index))||o.Character.isDecimalDigit(this.source.charCodeAt(this.index)))&&this.throwUnexpectedToken(),{type:u.Token.NumericLiteral,value:parseInt(r,8),octal:n,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.isImplicitOctalLiteral=function(){for(var e=this.index+1;e=0&&(r=r.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function(e,t,r){var i=parseInt(t||r,16);return i>1114111&&n.throwUnexpectedToken(a.Messages.InvalidRegExp),i<=65535?String.fromCharCode(i):"￿"}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"￿"));try{RegExp(r)}catch(e){this.throwUnexpectedToken(a.Messages.InvalidRegExp)}try{return new RegExp(e,t)}catch(e){return null}},e.prototype.scanRegExpBody=function(){var e=this.source[this.index];s.assert("/"===e,"Regular expression literal must start with a slash");for(var t=this.source[this.index++],r=!1,n=!1;!this.eof();)if(e=this.source[this.index++],t+=e,"\\"===e)e=this.source[this.index++],o.Character.isLineTerminator(e.charCodeAt(0))&&this.throwUnexpectedToken(a.Messages.UnterminatedRegExp),t+=e;else if(o.Character.isLineTerminator(e.charCodeAt(0)))this.throwUnexpectedToken(a.Messages.UnterminatedRegExp);else if(r)"]"===e&&(r=!1);else{if("/"===e){n=!0;break}"["===e&&(r=!0)}return n||this.throwUnexpectedToken(a.Messages.UnterminatedRegExp),{value:t.substr(1,t.length-2),literal:t}},e.prototype.scanRegExpFlags=function(){for(var e="",t="";!this.eof();){var r=this.source[this.index];if(!o.Character.isIdentifierPart(r.charCodeAt(0)))break;if(++this.index,"\\"!==r||this.eof())t+=r,e+=r;else if("u"===(r=this.source[this.index])){++this.index;var n=this.index;if(r=this.scanHexEscape("u"))for(t+=r,e+="\\u";n=55296&&e<57343&&o.Character.isIdentifierStart(this.codePointAt(this.index))?this.scanIdentifier():this.scanPunctuator()},e}();t.Scanner=l},function(e,t){"use strict";var r={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};t.Character={fromCodePoint:function(e){return e<65536?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))},isWhiteSpace:function(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0},isLineTerminator:function(e){return 10===e||13===e||8232===e||8233===e},isIdentifierStart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&r.NonAsciiIdentifierStart.test(t.Character.fromCodePoint(e))},isIdentifierPart:function(e){ +return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&r.NonAsciiIdentifierPart.test(t.Character.fromCodePoint(e))},isDecimalDigit:function(e){return e>=48&&e<=57},isHexDigit:function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},isOctalDigit:function(e){return e>=48&&e<=55}}},function(e,t,r){"use strict";var n=r(2),i=function(){function e(e){this.type=n.Syntax.ArrayExpression,this.elements=e}return e}();t.ArrayExpression=i;var s=function(){function e(e){this.type=n.Syntax.ArrayPattern,this.elements=e}return e}();t.ArrayPattern=s;var a=function(){function e(e,t,r){this.type=n.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=r}return e}();t.ArrowFunctionExpression=a;var o=function(){function e(e,t,r){this.type=n.Syntax.AssignmentExpression,this.operator=e,this.left=t,this.right=r}return e}();t.AssignmentExpression=o;var u=function(){function e(e,t){this.type=n.Syntax.AssignmentPattern,this.left=e,this.right=t}return e}();t.AssignmentPattern=u;var l=function(){function e(e,t,r){var i="||"===e||"&&"===e;this.type=i?n.Syntax.LogicalExpression:n.Syntax.BinaryExpression,this.operator=e,this.left=t,this.right=r}return e}();t.BinaryExpression=l;var c=function(){function e(e){this.type=n.Syntax.BlockStatement,this.body=e}return e}();t.BlockStatement=c;var p=function(){function e(e){this.type=n.Syntax.BreakStatement,this.label=e}return e}();t.BreakStatement=p;var h=function(){function e(e,t){this.type=n.Syntax.CallExpression,this.callee=e,this.arguments=t}return e}();t.CallExpression=h;var f=function(){function e(e,t){this.type=n.Syntax.CatchClause,this.param=e,this.body=t}return e}();t.CatchClause=f;var d=function(){function e(e){this.type=n.Syntax.ClassBody,this.body=e}return e}();t.ClassBody=d;var m=function(){function e(e,t,r){this.type=n.Syntax.ClassDeclaration,this.id=e,this.superClass=t,this.body=r}return e}();t.ClassDeclaration=m;var y=function(){function e(e,t,r){this.type=n.Syntax.ClassExpression,this.id=e,this.superClass=t,this.body=r}return e}();t.ClassExpression=y;var g=function(){function e(e,t){this.type=n.Syntax.MemberExpression,this.computed=!0,this.object=e,this.property=t}return e}();t.ComputedMemberExpression=g;var b=function(){function e(e,t,r){this.type=n.Syntax.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=r}return e}();t.ConditionalExpression=b;var v=function(){function e(e){this.type=n.Syntax.ContinueStatement,this.label=e}return e}();t.ContinueStatement=v;var x=function(){function e(){this.type=n.Syntax.DebuggerStatement}return e}();t.DebuggerStatement=x;var E=function(){function e(e,t){this.type=n.Syntax.ExpressionStatement,this.expression=e,this.directive=t}return e}();t.Directive=E;var A=function(){function e(e,t){this.type=n.Syntax.DoWhileStatement,this.body=e,this.test=t}return e}();t.DoWhileStatement=A;var D=function(){function e(){this.type=n.Syntax.EmptyStatement}return e}();t.EmptyStatement=D;var C=function(){function e(e){this.type=n.Syntax.ExportAllDeclaration,this.source=e}return e}();t.ExportAllDeclaration=C;var S=function(){function e(e){this.type=n.Syntax.ExportDefaultDeclaration,this.declaration=e}return e}();t.ExportDefaultDeclaration=S;var _=function(){function e(e,t,r){this.type=n.Syntax.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=r}return e}();t.ExportNamedDeclaration=_;var w=function(){function e(e,t){this.type=n.Syntax.ExportSpecifier,this.exported=t,this.local=e}return e}();t.ExportSpecifier=w;var k=function(){function e(e){this.type=n.Syntax.ExpressionStatement,this.expression=e}return e}();t.ExpressionStatement=k;var F=function(){function e(e,t,r){this.type=n.Syntax.ForInStatement,this.left=e,this.right=t,this.body=r,this.each=!1}return e}();t.ForInStatement=F;var T=function(){function e(e,t,r){this.type=n.Syntax.ForOfStatement,this.left=e,this.right=t,this.body=r}return e}();t.ForOfStatement=T;var P=function(){function e(e,t,r,i){this.type=n.Syntax.ForStatement,this.init=e,this.test=t,this.update=r,this.body=i}return e}();t.ForStatement=P;var B=function(){function e(e,t,r,i){this.type=n.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=r,this.generator=i,this.expression=!1}return e}();t.FunctionDeclaration=B;var O=function(){function e(e,t,r,i){this.type=n.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=r,this.generator=i,this.expression=!1}return e}();t.FunctionExpression=O;var j=function(){function e(e){this.type=n.Syntax.Identifier,this.name=e}return e}();t.Identifier=j;var N=function(){function e(e,t,r){this.type=n.Syntax.IfStatement,this.test=e,this.consequent=t,this.alternate=r}return e}();t.IfStatement=N;var I=function(){function e(e,t){this.type=n.Syntax.ImportDeclaration,this.specifiers=e,this.source=t}return e}();t.ImportDeclaration=I;var L=function(){function e(e){this.type=n.Syntax.ImportDefaultSpecifier,this.local=e}return e}();t.ImportDefaultSpecifier=L;var M=function(){function e(e){this.type=n.Syntax.ImportNamespaceSpecifier,this.local=e}return e}();t.ImportNamespaceSpecifier=M;var R=function(){function e(e,t){this.type=n.Syntax.ImportSpecifier,this.local=e,this.imported=t}return e}();t.ImportSpecifier=R;var U=function(){function e(e,t){this.type=n.Syntax.LabeledStatement,this.label=e,this.body=t}return e}();t.LabeledStatement=U;var V=function(){function e(e,t){this.type=n.Syntax.Literal,this.value=e,this.raw=t}return e}();t.Literal=V;var q=function(){function e(e,t){this.type=n.Syntax.MetaProperty,this.meta=e,this.property=t}return e}();t.MetaProperty=q;var G=function(){function e(e,t,r,i,s){this.type=n.Syntax.MethodDefinition,this.key=e,this.computed=t,this.value=r,this.kind=i,this.static=s}return e}();t.MethodDefinition=G;var X=function(){function e(e,t){this.type=n.Syntax.NewExpression,this.callee=e,this.arguments=t}return e}();t.NewExpression=X;var J=function(){function e(e){this.type=n.Syntax.ObjectExpression,this.properties=e}return e}();t.ObjectExpression=J;var W=function(){function e(e){this.type=n.Syntax.ObjectPattern,this.properties=e}return e}();t.ObjectPattern=W;var K=function(){function e(e,t){this.type=n.Syntax.Program,this.body=e,this.sourceType=t}return e}();t.Program=K;var z=function(){function e(e,t,r,i,s,a){this.type=n.Syntax.Property,this.key=t,this.computed=r,this.value=i,this.kind=e,this.method=s,this.shorthand=a}return e}();t.Property=z;var Y=function(){function e(e,t,r){this.type=n.Syntax.Literal,this.value=e,this.raw=t,this.regex=r}return e}();t.RegexLiteral=Y;var H=function(){function e(e){this.type=n.Syntax.RestElement,this.argument=e}return e}();t.RestElement=H;var $=function(){function e(e){this.type=n.Syntax.ReturnStatement,this.argument=e}return e}();t.ReturnStatement=$;var Q=function(){function e(e){this.type=n.Syntax.SequenceExpression,this.expressions=e}return e}();t.SequenceExpression=Q;var Z=function(){function e(e){this.type=n.Syntax.SpreadElement,this.argument=e}return e}();t.SpreadElement=Z;var ee=function(){function e(e,t){this.type=n.Syntax.MemberExpression,this.computed=!1,this.object=e,this.property=t}return e}();t.StaticMemberExpression=ee;var te=function(){function e(){this.type=n.Syntax.Super}return e}();t.Super=te;var re=function(){function e(e,t){this.type=n.Syntax.SwitchCase,this.test=e,this.consequent=t}return e}();t.SwitchCase=re;var ne=function(){function e(e,t){this.type=n.Syntax.SwitchStatement,this.discriminant=e,this.cases=t}return e}();t.SwitchStatement=ne;var ie=function(){function e(e,t){this.type=n.Syntax.TaggedTemplateExpression,this.tag=e,this.quasi=t}return e}();t.TaggedTemplateExpression=ie;var se=function(){function e(e,t){this.type=n.Syntax.TemplateElement,this.value=e,this.tail=t}return e}();t.TemplateElement=se;var ae=function(){function e(e,t){this.type=n.Syntax.TemplateLiteral,this.quasis=e,this.expressions=t}return e}();t.TemplateLiteral=ae;var oe=function(){function e(){this.type=n.Syntax.ThisExpression}return e}();t.ThisExpression=oe;var ue=function(){function e(e){this.type=n.Syntax.ThrowStatement,this.argument=e}return e}();t.ThrowStatement=ue;var le=function(){function e(e,t,r){this.type=n.Syntax.TryStatement,this.block=e,this.handler=t,this.finalizer=r}return e}();t.TryStatement=le;var ce=function(){function e(e,t){this.type=n.Syntax.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0}return e}();t.UnaryExpression=ce;var pe=function(){function e(e,t,r){this.type=n.Syntax.UpdateExpression,this.operator=e,this.argument=t,this.prefix=r}return e}();t.UpdateExpression=pe;var he=function(){function e(e,t){this.type=n.Syntax.VariableDeclaration,this.declarations=e,this.kind=t}return e}();t.VariableDeclaration=he;var fe=function(){function e(e,t){this.type=n.Syntax.VariableDeclarator,this.id=e,this.init=t}return e}();t.VariableDeclarator=fe;var de=function(){function e(e,t){this.type=n.Syntax.WhileStatement,this.test=e,this.body=t}return e}();t.WhileStatement=de;var me=function(){function e(e,t){this.type=n.Syntax.WithStatement,this.object=e,this.body=t}return e}();t.WithStatement=me;var ye=function(){function e(e,t){this.type=n.Syntax.YieldExpression,this.argument=e,this.delegate=t}return e}();t.YieldExpression=ye},function(e,t,r){"use strict";function n(e){var t;switch(e.type){case c.JSXSyntax.JSXIdentifier:t=e.name;break;case c.JSXSyntax.JSXNamespacedName:var r=e;t=n(r.namespace)+":"+n(r.name);break;case c.JSXSyntax.JSXMemberExpression:var i=e;t=n(i.object)+"."+n(i.property)}return t}var i,s=this&&this.__extends||function(e,t){function r(){this.constructor=e}for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)},a=r(9),o=r(7),u=r(3),l=r(12),c=r(13),p=r(10),h=r(14);!function(e){e[e.Identifier=100]="Identifier",e[e.Text=101]="Text"}(i||(i={})),o.TokenName[i.Identifier]="JSXIdentifier",o.TokenName[i.Text]="JSXText";var f=function(e){function t(t,r,n){e.call(this,t,r,n)}return s(t,e),t.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():e.prototype.parsePrimaryExpression.call(this)},t.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.lineNumber,this.scanner.lineStart=this.startMarker.lineStart},t.prototype.finishJSX=function(){this.nextToken()},t.prototype.reenterJSX=function(){this.startJSX(),this.expectJSX("}"),this.config.tokens&&this.tokens.pop()},t.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.scanXHTMLEntity=function(e){for(var t="&",r=!0,n=!1,i=!1,s=!1;!this.scanner.eof()&&r&&!n;){var o=this.scanner.source[this.scanner.index];if(o===e)break;if(n=";"===o,t+=o,++this.scanner.index,!n)switch(t.length){case 2:i="#"===o;break;case 3:i&&(s="x"===o,r=s||a.Character.isDecimalDigit(o.charCodeAt(0)),i=i&&!s);break;default:r=r&&!(i&&!a.Character.isDecimalDigit(o.charCodeAt(0))),r=r&&!(s&&!a.Character.isHexDigit(o.charCodeAt(0)))}}if(r&&n&&t.length>2){var u=t.substr(1,t.length-2);i&&u.length>1?t=String.fromCharCode(parseInt(u.substr(1),10)):s&&u.length>2?t=String.fromCharCode(parseInt("0"+u.substr(1),16)):i||s||!l.XHTMLEntities[u]||(t=l.XHTMLEntities[u])}return t},t.prototype.lexJSX=function(){var e=this.scanner.source.charCodeAt(this.scanner.index);if(60===e||62===e||47===e||58===e||61===e||123===e||125===e){var t=this.scanner.source[this.scanner.index++];return{type:o.Token.Punctuator,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(34===e||39===e){for(var r=this.scanner.index,n=this.scanner.source[this.scanner.index++],s="";!this.scanner.eof();){var u=this.scanner.source[this.scanner.index++];if(u===n)break;s+="&"===u?this.scanXHTMLEntity(n):u}return{type:o.Token.StringLiteral,value:s,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:r,end:this.scanner.index}}if(46===e){var l=this.scanner.source.charCodeAt(this.scanner.index+1),c=this.scanner.source.charCodeAt(this.scanner.index+2),t=46===l&&46===c?"...":".",r=this.scanner.index;return this.scanner.index+=t.length,{type:o.Token.Punctuator,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:r,end:this.scanner.index}}if(96===e)return{type:o.Token.Template,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(a.Character.isIdentifierStart(e)&&92!==e){var r=this.scanner.index;for(++this.scanner.index;!this.scanner.eof();){var u=this.scanner.source.charCodeAt(this.scanner.index);if(a.Character.isIdentifierPart(u)&&92!==u)++this.scanner.index;else{if(45!==u)break;++this.scanner.index}}var p=this.scanner.source.slice(r,this.scanner.index);return{type:i.Identifier,value:p,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:r,end:this.scanner.index}}this.scanner.throwUnexpectedToken()},t.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.lineNumber=this.scanner.lineNumber,this.startMarker.lineStart=this.scanner.lineStart;var e=this.lexJSX();return this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart,this.config.tokens&&this.tokens.push(this.convertToken(e)),e},t.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.lineNumber=this.scanner.lineNumber,this.startMarker.lineStart=this.scanner.lineStart;for(var e=this.scanner.index,t="";!this.scanner.eof();){var r=this.scanner.source[this.scanner.index];if("{"===r||"<"===r)break;++this.scanner.index,t+=r,a.Character.isLineTerminator(r.charCodeAt(0))&&(++this.scanner.lineNumber,"\r"===r&&"\n"===this.scanner.source[this.scanner.index]&&++this.scanner.index,this.scanner.lineStart=this.scanner.index)}this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart;var n={type:i.Text,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:e,end:this.scanner.index};return t.length>0&&this.config.tokens&&this.tokens.push(this.convertToken(n)),n},t.prototype.peekJSXToken=function(){var e=this.scanner.index,t=this.scanner.lineNumber,r=this.scanner.lineStart;this.scanner.scanComments();var n=this.lexJSX();return this.scanner.index=e,this.scanner.lineNumber=t,this.scanner.lineStart=r,n},t.prototype.expectJSX=function(e){var t=this.nextJSXToken();t.type===o.Token.Punctuator&&t.value===e||this.throwUnexpectedToken(t)},t.prototype.matchJSX=function(e){var t=this.peekJSXToken();return t.type===o.Token.Punctuator&&t.value===e},t.prototype.parseJSXIdentifier=function(){var e=this.createJSXNode(),t=this.nextJSXToken();return t.type!==i.Identifier&&this.throwUnexpectedToken(t),this.finalize(e,new h.JSXIdentifier(t.value))},t.prototype.parseJSXElementName=function(){var e=this.createJSXNode(),t=this.parseJSXIdentifier();if(this.matchJSX(":")){var r=t;this.expectJSX(":");var n=this.parseJSXIdentifier();t=this.finalize(e,new h.JSXNamespacedName(r,n))}else if(this.matchJSX("."))for(;this.matchJSX(".");){var i=t;this.expectJSX(".");var s=this.parseJSXIdentifier();t=this.finalize(e,new h.JSXMemberExpression(i,s))}return t},t.prototype.parseJSXAttributeName=function(){var e,t=this.createJSXNode(),r=this.parseJSXIdentifier();if(this.matchJSX(":")){var n=r;this.expectJSX(":");var i=this.parseJSXIdentifier();e=this.finalize(t,new h.JSXNamespacedName(n,i))}else e=r;return e},t.prototype.parseJSXStringLiteralAttribute=function(){var e=this.createJSXNode(),t=this.nextJSXToken();t.type!==o.Token.StringLiteral&&this.throwUnexpectedToken(t);var r=this.getTokenRaw(t);return this.finalize(e,new p.Literal(t.value,r))},t.prototype.parseJSXExpressionAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.finishJSX(),this.match("}")&&this.tolerateError("JSX attributes must only be assigned a non-empty expression");var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new h.JSXExpressionContainer(t))},t.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()},t.prototype.parseJSXNameValueAttribute=function(){var e=this.createJSXNode(),t=this.parseJSXAttributeName(),r=null;return this.matchJSX("=")&&(this.expectJSX("="),r=this.parseJSXAttributeValue()),this.finalize(e,new h.JSXAttribute(t,r))},t.prototype.parseJSXSpreadAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.expectJSX("..."),this.finishJSX();var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new h.JSXSpreadAttribute(t))},t.prototype.parseJSXAttributes=function(){for(var e=[];!this.matchJSX("/")&&!this.matchJSX(">");){var t=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();e.push(t)}return e},t.prototype.parseJSXOpeningElement=function(){var e=this.createJSXNode();this.expectJSX("<");var t=this.parseJSXElementName(),r=this.parseJSXAttributes(),n=this.matchJSX("/");return n&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new h.JSXOpeningElement(t,n,r))},t.prototype.parseJSXBoundaryElement=function(){var e=this.createJSXNode();if(this.expectJSX("<"),this.matchJSX("/")){this.expectJSX("/");var t=this.parseJSXElementName();return this.expectJSX(">"),this.finalize(e,new h.JSXClosingElement(t))}var r=this.parseJSXElementName(),n=this.parseJSXAttributes(),i=this.matchJSX("/");return i&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new h.JSXOpeningElement(r,i,n))},t.prototype.parseJSXEmptyExpression=function(){var e=this.createJSXChildNode();return this.collectComments(),this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart,this.finalize(e,new h.JSXEmptyExpression)},t.prototype.parseJSXExpressionContainer=function(){var e=this.createJSXNode();this.expectJSX("{");var t;return this.matchJSX("}")?(t=this.parseJSXEmptyExpression(),this.expectJSX("}")):(this.finishJSX(),t=this.parseAssignmentExpression(),this.reenterJSX()),this.finalize(e,new h.JSXExpressionContainer(t))},t.prototype.parseJSXChildren=function(){for(var e=[];!this.scanner.eof();){var t=this.createJSXChildNode(),r=this.nextJSXText();if(r.start0))break;var a=this.finalize(e.node,new h.JSXElement(e.opening,e.children,e.closing));e=t.pop(),e.children.push(a)}}return e},t.prototype.parseJSXElement=function(){var e=this.createJSXNode(),t=this.parseJSXOpeningElement(),r=[],n=null;if(!t.selfClosing){var i=this.parseComplexJSXElement({node:e,opening:t,closing:n,children:r});r=i.children,n=i.closing}return this.finalize(e,new h.JSXElement(t,r,n))},t.prototype.parseJSXRoot=function(){this.config.tokens&&this.tokens.pop(),this.startJSX();var e=this.parseJSXElement();return this.finishJSX(),e},t}(u.Parser);t.JSXParser=f},function(e,t){"use strict";t.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦",lang:"⟨",rang:"⟩"}},function(e,t){"use strict";t.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(e,t,r){"use strict";var n=r(13),i=function(){function e(e){this.type=n.JSXSyntax.JSXClosingElement,this.name=e}return e}();t.JSXClosingElement=i;var s=function(){function e(e,t,r){this.type=n.JSXSyntax.JSXElement,this.openingElement=e,this.children=t,this.closingElement=r}return e}();t.JSXElement=s;var a=function(){function e(){this.type=n.JSXSyntax.JSXEmptyExpression}return e}();t.JSXEmptyExpression=a;var o=function(){function e(e){this.type=n.JSXSyntax.JSXExpressionContainer,this.expression=e}return e}();t.JSXExpressionContainer=o;var u=function(){function e(e){this.type=n.JSXSyntax.JSXIdentifier,this.name=e}return e}();t.JSXIdentifier=u;var l=function(){function e(e,t){this.type=n.JSXSyntax.JSXMemberExpression,this.object=e,this.property=t}return e}();t.JSXMemberExpression=l;var c=function(){function e(e,t){this.type=n.JSXSyntax.JSXAttribute,this.name=e,this.value=t}return e}();t.JSXAttribute=c;var p=function(){function e(e,t){this.type=n.JSXSyntax.JSXNamespacedName,this.namespace=e,this.name=t}return e}();t.JSXNamespacedName=p;var h=function(){function e(e,t,r){this.type=n.JSXSyntax.JSXOpeningElement,this.name=e,this.selfClosing=t,this.attributes=r}return e}();t.JSXOpeningElement=h;var f=function(){function e(e){this.type=n.JSXSyntax.JSXSpreadAttribute,this.argument=e}return e}();t.JSXSpreadAttribute=f;var d=function(){function e(e,t){this.type=n.JSXSyntax.JSXText,this.value=e,this.raw=t}return e}();t.JSXText=d},function(e,t,r){"use strict";var n=r(8),i=r(6),s=r(7),a=function(){function e(){this.values=[],this.curly=this.paren=-1}return e.prototype.beforeFunctionExpression=function(e){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(e)>=0},e.prototype.isRegexStart=function(){var e=this.values[this.values.length-1],t=null!==e;switch(e){case"this":case"]":t=!1;break;case")":var r=this.values[this.paren-1];t="if"===r||"while"===r||"for"===r||"with"===r;break;case"}":if(t=!1,"function"===this.values[this.curly-3]){var n=this.values[this.curly-4];t=!!n&&!this.beforeFunctionExpression(n)}else if("function"===this.values[this.curly-4]){var i=this.values[this.curly-5];t=!i||!this.beforeFunctionExpression(i)}}return t},e.prototype.push=function(e){e.type===s.Token.Punctuator||e.type===s.Token.Keyword?("{"===e.value?this.curly=this.values.length:"("===e.value&&(this.paren=this.values.length),this.values.push(e.value)):this.values.push(null)},e}(),o=function(){function e(e,t){this.errorHandler=new i.ErrorHandler,this.errorHandler.tolerant=!!t&&("boolean"==typeof t.tolerant&&t.tolerant),this.scanner=new n.Scanner(e,this.errorHandler),this.scanner.trackComment=!!t&&("boolean"==typeof t.comment&&t.comment),this.trackRange=!!t&&("boolean"==typeof t.range&&t.range),this.trackLoc=!!t&&("boolean"==typeof t.loc&&t.loc),this.buffer=[],this.reader=new a}return e.prototype.errors=function(){return this.errorHandler.errors},e.prototype.getNextToken=function(){if(0===this.buffer.length){var e=this.scanner.scanComments();if(this.scanner.trackComment)for(var t=0;t=0,s=i&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,t.exports=e("./runtime"),i)n.regeneratorRuntime=s;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./runtime":577}],577:[function(e,t,r){(function(e,r){!function(r){"use strict";function n(e,t,r,n){var i=t&&t.prototype instanceof s?t:s,a=Object.create(i.prototype),o=new d(n||[]);return a._invoke=c(e,r,o),a}function i(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}function s(){}function a(){}function o(){}function u(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function l(t){function r(e,n,s,a){var o=i(t[e],t,n);if("throw"!==o.type){var u=o.arg,l=u.value;return l&&"object"==typeof l&&v.call(l,"__await")?Promise.resolve(l.__await).then(function(e){r("next",e,s,a)},function(e){r("throw",e,s,a)}):Promise.resolve(l).then(function(e){u.value=e,s(u)},a)}a(o.arg)}function n(e,t){function n(){return new Promise(function(n,i){r(e,t,n,i)})}return s=s?s.then(n,n):n()}"object"==typeof e&&e.domain&&(r=e.domain.bind(r));var s;this._invoke=n}function c(e,t,r){var n=S;return function(s,a){if(n===w)throw new Error("Generator is already running");if(n===k){if("throw"===s)throw a;return y()}for(r.method=s,r.arg=a;;){var o=r.delegate;if(o){var u=p(o,r);if(u){if(u===F)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===S)throw n=k,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=w;var l=i(e,t,r);if("normal"===l.type){if(n=r.done?k:_,l.arg===F)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(n=k,r.method="throw",r.arg=l.arg)}}}function p(e,t){var r=e.iterator[t.method];if(r===g){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=g,p(e,t),"throw"===t.method))return F;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return F}var n=i(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,F;var s=n.arg;return s?s.done?(t[e.resultName]=s.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=g),t.delegate=null,F):s:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,F)}function h(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function f(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function d(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(h,this),this.reset(!0)}function m(e){if(e){var t=e[E];if(t)return t.call(e);if("function"==typeof e.next)return e +;if(!isNaN(e.length)){var r=-1,n=function t(){for(;++r=0;--n){var i=this.tryEntries[n],s=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var a=v.call(i,"catchLoc"),o=v.call(i,"finallyLoc");if(a&&o){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&v.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),F}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;f(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:m(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=g),F}}}("object"==typeof r?r:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:539}],578:[function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){h.default.ok(this instanceof s),d.assertIdentifier(e),this.nextTempId=0,this.contextId=e,this.listing=[],this.marked=[!0],this.finalLoc=a(),this.tryEntries=[],this.leapManager=new y.LeapManager(this)}function a(){return d.numericLiteral(-1)}function o(e){return new Error("all declarations should have been transformed into assignments before the Exploder began its work: "+(0,c.default)(e))}function u(e){var t=e.type;return"normal"===t?!E.call(e,"target"):"break"===t||"continue"===t?!E.call(e,"value")&&d.isLiteral(e.target):("return"===t||"throw"===t)&&(E.call(e,"value")&&!E.call(e,"target"))}var l=e("babel-runtime/core-js/json/stringify"),c=i(l),p=e("assert"),h=i(p),f=e("babel-types"),d=n(f),m=e("./leap"),y=n(m),g=e("./meta"),b=n(g),v=e("./util"),x=n(v),E=Object.prototype.hasOwnProperty,A=s.prototype;r.Emitter=s,A.mark=function(e){d.assertLiteral(e);var t=this.listing.length;return-1===e.value?e.value=t:h.default.strictEqual(e.value,t),this.marked[t]=!0,e},A.emit=function(e){d.isExpression(e)&&(e=d.expressionStatement(e)),d.assertStatement(e),this.listing.push(e)},A.emitAssign=function(e,t){return this.emit(this.assign(e,t)),e},A.assign=function(e,t){return d.expressionStatement(d.assignmentExpression("=",e,t))},A.contextProperty=function(e,t){return d.memberExpression(this.contextId,t?d.stringLiteral(e):d.identifier(e),!!t)},A.stop=function(e){e&&this.setReturnValue(e),this.jump(this.finalLoc)},A.setReturnValue=function(e){d.assertExpression(e.value),this.emitAssign(this.contextProperty("rval"),this.explodeExpression(e))},A.clearPendingException=function(e,t){d.assertLiteral(e);var r=d.callExpression(this.contextProperty("catch",!0),[e]);t?this.emitAssign(t,r):this.emit(r)},A.jump=function(e){this.emitAssign(this.contextProperty("next"),e),this.emit(d.breakStatement())},A.jumpIf=function(e,t){d.assertExpression(e),d.assertLiteral(t),this.emit(d.ifStatement(e,d.blockStatement([this.assign(this.contextProperty("next"),t),d.breakStatement()])))},A.jumpIfNot=function(e,t){d.assertExpression(e),d.assertLiteral(t);var r=void 0;r=d.isUnaryExpression(e)&&"!"===e.operator?e.argument:d.unaryExpression("!",e),this.emit(d.ifStatement(r,d.blockStatement([this.assign(this.contextProperty("next"),t),d.breakStatement()])))},A.makeTempVar=function(){return this.contextProperty("t"+this.nextTempId++)},A.getContextFunction=function(e){return d.functionExpression(e||null,[this.contextId],d.blockStatement([this.getDispatchLoop()]),!1,!1)},A.getDispatchLoop=function(){var e=this,t=[],r=void 0,n=!1;return e.listing.forEach(function(i,s){e.marked.hasOwnProperty(s)&&(t.push(d.switchCase(d.numericLiteral(s),r=[])),n=!1),n||(r.push(i),d.isCompletionStatement(i)&&(n=!0))}),this.finalLoc.value=this.listing.length,t.push(d.switchCase(this.finalLoc,[]),d.switchCase(d.stringLiteral("end"),[d.returnStatement(d.callExpression(this.contextProperty("stop"),[]))])),d.whileStatement(d.numericLiteral(1),d.switchStatement(d.assignmentExpression("=",this.contextProperty("prev"),this.contextProperty("next")),t))},A.getTryLocsList=function(){if(0===this.tryEntries.length)return null;var e=0;return d.arrayExpression(this.tryEntries.map(function(t){var r=t.firstLoc.value;h.default.ok(r>=e,"try entries out of order"),e=r;var n=t.catchEntry,i=t.finallyEntry,s=[t.firstLoc,n?n.firstLoc:null];return i&&(s[2]=i.firstLoc,s[3]=i.afterLoc),d.arrayExpression(s)}))},A.explode=function(e,t){var r=e.node,n=this;if(d.assertNode(r),d.isDeclaration(r))throw o(r);if(d.isStatement(r))return n.explodeStatement(e);if(d.isExpression(r))return n.explodeExpression(e,t);switch(r.type){case"Program":return e.get("body").map(n.explodeStatement,n);case"VariableDeclarator":throw o(r);case"Property":case"SwitchCase":case"CatchClause":throw new Error(r.type+" nodes should be handled by their parents");default:throw new Error("unknown Node of type "+(0,c.default)(r.type))}},A.explodeStatement=function(e,t){var r=e.node,n=this,i=void 0,s=void 0,o=void 0;if(d.assertStatement(r),t?d.assertIdentifier(t):t=null,d.isBlockStatement(r))return void e.get("body").forEach(function(e){n.explodeStatement(e)});if(!b.containsLeap(r))return void n.emit(r);switch(r.type){case"ExpressionStatement":n.explodeExpression(e.get("expression"),!0);break;case"LabeledStatement":s=a(),n.leapManager.withEntry(new y.LabeledEntry(s,r.label),function(){n.explodeStatement(e.get("body"),r.label)}),n.mark(s);break;case"WhileStatement":i=a(),s=a(),n.mark(i),n.jumpIfNot(n.explodeExpression(e.get("test")),s),n.leapManager.withEntry(new y.LoopEntry(s,i,t),function(){n.explodeStatement(e.get("body"))}),n.jump(i),n.mark(s);break;case"DoWhileStatement":var u=a(),l=a();s=a(),n.mark(u),n.leapManager.withEntry(new y.LoopEntry(s,l,t),function(){n.explode(e.get("body"))}),n.mark(l),n.jumpIf(n.explodeExpression(e.get("test")),u),n.mark(s);break;case"ForStatement":o=a();var p=a();s=a(),r.init&&n.explode(e.get("init"),!0),n.mark(o),r.test&&n.jumpIfNot(n.explodeExpression(e.get("test")),s),n.leapManager.withEntry(new y.LoopEntry(s,p,t),function(){n.explodeStatement(e.get("body"))}),n.mark(p),r.update&&n.explode(e.get("update"),!0),n.jump(o),n.mark(s);break;case"TypeCastExpression":return n.explodeExpression(e.get("expression"));case"ForInStatement":o=a(),s=a();var f=n.makeTempVar();n.emitAssign(f,d.callExpression(x.runtimeProperty("keys"),[n.explodeExpression(e.get("right"))])),n.mark(o);var m=n.makeTempVar();n.jumpIf(d.memberExpression(d.assignmentExpression("=",m,d.callExpression(f,[])),d.identifier("done"),!1),s),n.emitAssign(r.left,d.memberExpression(m,d.identifier("value"),!1)),n.leapManager.withEntry(new y.LoopEntry(s,o,t),function(){n.explodeStatement(e.get("body"))}),n.jump(o),n.mark(s);break;case"BreakStatement":n.emitAbruptCompletion({type:"break",target:n.leapManager.getBreakLoc(r.label)});break;case"ContinueStatement":n.emitAbruptCompletion({type:"continue",target:n.leapManager.getContinueLoc(r.label)});break;case"SwitchStatement":var g=n.emitAssign(n.makeTempVar(),n.explodeExpression(e.get("discriminant")));s=a();for(var v=a(),E=v,A=[],C=r.cases||[],S=C.length-1;S>=0;--S){var _=C[S];d.assertSwitchCase(_),_.test?E=d.conditionalExpression(d.binaryExpression("===",g,_.test),A[S]=a(),E):A[S]=v}var w=e.get("discriminant");w.replaceWith(E),n.jump(n.explodeExpression(w)),n.leapManager.withEntry(new y.SwitchEntry(s),function(){e.get("cases").forEach(function(e){var t=e.key;n.mark(A[t]),e.get("consequent").forEach(function(e){n.explodeStatement(e)})})}),n.mark(s),-1===v.value&&(n.mark(v),h.default.strictEqual(s.value,v.value));break;case"IfStatement":var k=r.alternate&&a();s=a(),n.jumpIfNot(n.explodeExpression(e.get("test")),k||s),n.explodeStatement(e.get("consequent")),k&&(n.jump(s),n.mark(k),n.explodeStatement(e.get("alternate"))),n.mark(s);break;case"ReturnStatement":n.emitAbruptCompletion({type:"return",value:n.explodeExpression(e.get("argument"))});break;case"WithStatement":throw new Error("WithStatement not supported in generator functions.");case"TryStatement":s=a();var F=r.handler,T=F&&a(),P=T&&new y.CatchEntry(T,F.param),B=r.finalizer&&a(),O=B&&new y.FinallyEntry(B,s),j=new y.TryEntry(n.getUnmarkedCurrentLoc(),P,O);n.tryEntries.push(j),n.updateContextPrevLoc(j.firstLoc),n.leapManager.withEntry(j,function(){if(n.explodeStatement(e.get("block")),T){B?n.jump(B):n.jump(s),n.updateContextPrevLoc(n.mark(T));var t=e.get("handler.body"),r=n.makeTempVar();n.clearPendingException(j.firstLoc,r),t.traverse(D,{safeParam:r,catchParamName:F.param.name}),n.leapManager.withEntry(P,function(){n.explodeStatement(t)})}B&&(n.updateContextPrevLoc(n.mark(B)),n.leapManager.withEntry(O,function(){n.explodeStatement(e.get("finalizer"))}),n.emit(d.returnStatement(d.callExpression(n.contextProperty("finish"),[O.firstLoc]))))}),n.mark(s);break;case"ThrowStatement":n.emit(d.throwStatement(n.explodeExpression(e.get("argument"))));break;default:throw new Error("unknown Statement of type "+(0,c.default)(r.type))}};var D={Identifier:function(e,t){e.node.name===t.catchParamName&&x.isReference(e)&&e.replaceWith(t.safeParam)},Scope:function(e,t){e.scope.hasOwnBinding(t.catchParamName)&&e.skip()}};A.emitAbruptCompletion=function(e){u(e)||h.default.ok(!1,"invalid completion record: "+(0,c.default)(e)),h.default.notStrictEqual(e.type,"normal","normal completions are not abrupt");var t=[d.stringLiteral(e.type)];"break"===e.type||"continue"===e.type?(d.assertLiteral(e.target),t[1]=e.target):"return"!==e.type&&"throw"!==e.type||e.value&&(d.assertExpression(e.value),t[1]=e.value),this.emit(d.returnStatement(d.callExpression(this.contextProperty("abrupt"),t)))},A.getUnmarkedCurrentLoc=function(){return d.numericLiteral(this.listing.length)},A.updateContextPrevLoc=function(e){e?(d.assertLiteral(e),-1===e.value?e.value=this.listing.length:h.default.strictEqual(e.value,this.listing.length)):e=this.getUnmarkedCurrentLoc(),this.emitAssign(this.contextProperty("prev"),e)},A.explodeExpression=function(e,t){function r(e){if(d.assertExpression(e),!t)return e;s.emit(e)}function n(e,t,r){h.default.ok(!r||!e,"Ignoring the result of a child expression but forcing it to be assigned to a temporary variable?");var n=s.explodeExpression(t,r);return r||(e||l&&!d.isLiteral(n))&&(n=s.emitAssign(e||s.makeTempVar(),n)),n}var i=e.node;if(!i)return i;d.assertExpression(i);var s=this,o=void 0,u=void 0;if(!b.containsLeap(i))return r(i);var l=b.containsLeap.onlyChildren(i);switch(i.type){case"MemberExpression":return r(d.memberExpression(s.explodeExpression(e.get("object")),i.computed?n(null,e.get("property")):i.property,i.computed));case"CallExpression":var p=e.get("callee"),f=e.get("arguments"),m=void 0,y=[],g=!1;if(f.forEach(function(e){g=g||b.containsLeap(e.node)}),d.isMemberExpression(p.node))if(g){var v=n(s.makeTempVar(),p.get("object")),x=p.node.computed?n(null,p.get("property")):p.node.property;y.unshift(v),m=d.memberExpression(d.memberExpression(v,x,p.node.computed),d.identifier("call"),!1)}else m=s.explodeExpression(p);else m=n(null,p),d.isMemberExpression(m)&&(m=d.sequenceExpression([d.numericLiteral(0),m]));return f.forEach(function(e){y.push(n(null,e))}),r(d.callExpression(m,y));case"NewExpression":return r(d.newExpression(n(null,e.get("callee")),e.get("arguments").map(function(e){return n(null,e)})));case"ObjectExpression":return r(d.objectExpression(e.get("properties").map(function(e){return e.isObjectProperty()?d.objectProperty(e.node.key,n(null,e.get("value")),e.node.computed):e.node})));case"ArrayExpression":return r(d.arrayExpression(e.get("elements").map(function(e){return n(null,e)})));case"SequenceExpression":var E=i.expressions.length-1;return e.get("expressions").forEach(function(e){e.key===E?o=s.explodeExpression(e,t):s.explodeExpression(e,!0)}),o;case"LogicalExpression":u=a(),t||(o=s.makeTempVar());var A=n(o,e.get("left"));return"&&"===i.operator?s.jumpIfNot(A,u):(h.default.strictEqual(i.operator,"||"),s.jumpIf(A,u)),n(o,e.get("right"),t),s.mark(u),o;case"ConditionalExpression":var D=a();u=a();var C=s.explodeExpression(e.get("test"));return s.jumpIfNot(C,D),t||(o=s.makeTempVar()),n(o,e.get("consequent"),t),s.jump(u),s.mark(D),n(o,e.get("alternate"),t),s.mark(u),o;case"UnaryExpression":return r(d.unaryExpression(i.operator,s.explodeExpression(e.get("argument")),!!i.prefix));case"BinaryExpression":return r(d.binaryExpression(i.operator,n(null,e.get("left")),n(null,e.get("right"))));case"AssignmentExpression":return r(d.assignmentExpression(i.operator,s.explodeExpression(e.get("left")),s.explodeExpression(e.get("right"))));case"UpdateExpression":return r(d.updateExpression(i.operator,s.explodeExpression(e.get("argument")),i.prefix));case"YieldExpression":u=a();var S=i.argument&&s.explodeExpression(e.get("argument"));if(S&&i.delegate){var _=s.makeTempVar();return s.emit(d.returnStatement(d.callExpression(s.contextProperty("delegateYield"),[S,d.stringLiteral(_.property.name),u]))),s.mark(u),_}return s.emitAssign(s.contextProperty("next"),u),s.emit(d.returnStatement(S||null)),s.mark(u),s.contextProperty("sent");default:throw new Error("unknown Expression of type "+(0,c.default)(i.type))}}},{"./leap":581,"./meta":582,"./util":584,assert:3,"babel-runtime/core-js/json/stringify":114,"babel-types":169}],579:[function(e,t,r){"use strict";var n=e("babel-runtime/core-js/object/keys"),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=e("babel-types"),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s),o=Object.prototype.hasOwnProperty;r.hoist=function(e){function t(e,t){a.assertVariableDeclaration(e);var n=[];return e.declarations.forEach(function(e){r[e.id.name]=a.identifier(e.id.name),e.init?n.push(a.assignmentExpression("=",e.id,e.init)):t&&n.push(e.id)}),0===n.length?null:1===n.length?n[0]:a.sequenceExpression(n)}a.assertFunction(e.node);var r={};e.get("body").traverse({VariableDeclaration:{exit:function(e){var r=t(e.node,!1);null===r?e.remove():e.replaceWith(a.expressionStatement(r)),e.skip()}},ForStatement:function(e){var r=e.node.init;a.isVariableDeclaration(r)&&e.get("init").replaceWith(t(r,!1))},ForXStatement:function(e){var r=e.get("left");r.isVariableDeclaration()&&r.replaceWith(t(r.node,!0))},FunctionDeclaration:function(e){var t=e.node;r[t.id.name]=t.id;var n=a.expressionStatement(a.assignmentExpression("=",t.id,a.functionExpression(t.id,t.params,t.body,t.generator,t.expression)));e.parentPath.isBlockStatement()?(e.parentPath.unshiftContainer("body",n),e.remove()):e.replaceWith(n),e.skip()},FunctionExpression:function(e){e.skip()}});var n={};e.get("params").forEach(function(e){var t=e.node;a.isIdentifier(t)&&(n[t.name]=t)});var s=[];return(0,i.default)(r).forEach(function(e){o.call(n,e)||s.push(a.variableDeclarator(r[e],null))}),0===s.length?null:a.variableDeclaration("var",s)}},{"babel-runtime/core-js/object/keys":120,"babel-types":169}],580:[function(e,t,r){"use strict";r.__esModule=!0,r.default=function(){return e("./visit")}},{"./visit":585}],581:[function(e,t,r){"use strict";function n(){f.default.ok(this instanceof n)}function i(e){n.call(this),m.assertLiteral(e),this.returnLoc=e}function s(e,t,r){n.call(this),m.assertLiteral(e),m.assertLiteral(t),r?m.assertIdentifier(r):r=null,this.breakLoc=e,this.continueLoc=t,this.label=r}function a(e){n.call(this),m.assertLiteral(e),this.breakLoc=e}function o(e,t,r){n.call(this),m.assertLiteral(e),t?f.default.ok(t instanceof u):t=null,r?f.default.ok(r instanceof l):r=null,f.default.ok(t||r),this.firstLoc=e,this.catchEntry=t,this.finallyEntry=r}function u(e,t){n.call(this),m.assertLiteral(e),m.assertIdentifier(t),this.firstLoc=e,this.paramId=t}function l(e,t){n.call(this),m.assertLiteral(e),m.assertLiteral(t),this.firstLoc=e,this.afterLoc=t}function c(e,t){n.call(this),m.assertLiteral(e),m.assertIdentifier(t),this.breakLoc=e,this.label=t}function p(t){f.default.ok(this instanceof p);var r=e("./emit").Emitter;f.default.ok(t instanceof r),this.emitter=t,this.entryStack=[new i(t.finalLoc)]}var h=e("assert"),f=function(e){return e&&e.__esModule?e:{default:e}}(h),d=e("babel-types"),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(d),y=e("util");(0,y.inherits)(i,n),r.FunctionEntry=i,(0,y.inherits)(s,n),r.LoopEntry=s,(0,y.inherits)(a,n),r.SwitchEntry=a,(0,y.inherits)(o,n),r.TryEntry=o,(0,y.inherits)(u,n),r.CatchEntry=u,(0,y.inherits)(l,n),r.FinallyEntry=l,(0,y.inherits)(c,n),r.LabeledEntry=c;var g=p.prototype;r.LeapManager=p,g.withEntry=function(e,t){f.default.ok(e instanceof n),this.entryStack.push(e);try{t.call(this.emitter)}finally{var r=this.entryStack.pop();f.default.strictEqual(r,e)}},g._findLeapLocation=function(e,t){for(var r=this.entryStack.length-1;r>=0;--r){var n=this.entryStack[r],i=n[e];if(i)if(t){if(n.label&&n.label.name===t.name)return i}else if(!(n instanceof c))return i}return null},g.getBreakLoc=function(e){return this._findLeapLocation("breakLoc",e)},g.getContinueLoc=function(e){return this._findLeapLocation("continueLoc",e)}},{"./emit":578,assert:3,"babel-types":169,util:601}],582:[function(e,t,r){"use strict";function n(e,t){function r(e){function t(e){return r||(Array.isArray(e)?e.some(t):o.isNode(e)&&(s.default.strictEqual(r,!1),r=n(e))),r}o.assertNode(e);var r=!1,i=o.VISITOR_KEYS[e.type];if(i)for(var a=0;a0&&(a.node.body=l);var c=s(e);p.assertIdentifier(r.id);var d=p.identifier(r.id.name+"$"),y=(0,h.hoist)(e);if(o(e,i)){y=y||p.variableDeclaration("var",[]);var b=p.identifier("arguments");b._shadowedFunctionLiteral=e,y.declarations.push(p.variableDeclarator(i,b))}var v=new f.Emitter(n);v.explode(e.get("body")),y&&y.declarations.length>0&&u.push(y);var A=[v.getContextFunction(d),r.generator?c:p.nullLiteral(),p.thisExpression()],D=v.getTryLocsList();D&&A.push(D);var C=p.callExpression(g.runtimeProperty(r.async?"async":"wrap"),A);u.push(p.returnStatement(C)),r.body=p.blockStatement(u);var S=a.node.directives;S&&(r.body.directives=S);var _=r.generator;_&&(r.generator=!1),r.async&&(r.async=!1),_&&p.isExpression(r)&&e.replaceWith(p.callExpression(g.runtimeProperty("mark"),[r])),e.requeue()}}};var v={"FunctionExpression|FunctionDeclaration":function(e){e.skip()},Identifier:function(e,t){"arguments"===e.node.name&&g.isReference(e)&&(e.replaceWith(t.argsId),t.didRenameArguments=!0)}},x={MetaProperty:function(e){var t=e.node;"function"===t.meta.name&&"sent"===t.property.name&&e.replaceWith(p.memberExpression(this.context,p.identifier("_sent")))}},E={Function:function(e){e.skip()},AwaitExpression:function(e){var t=e.node.argument;e.replaceWith(p.yieldExpression(p.callExpression(g.runtimeProperty("awrap"),[t]),!1))}}},{"./emit":578,"./hoist":579,"./replaceShorthandObjectMethod":583,"./util":584,assert:3,"babel-types":169,private:537}],586:[function(e,t,r){var n=(e("assert"),e("recast").types),i=n.namedTypes,s=n.builders,a=Object.prototype.hasOwnProperty;r.defaults=function(e){for(var t,r=arguments.length,n=1;n>=1);return r}},{"is-finite":309}],589:[function(e,t,r){"use strict";t.exports=function(e){var t=/^\\\\\?\\/.test(e),r=/[^\x00-\x80]+/.test(e);return t||r?e:e.replace(/\\/g,"/")}},{}],590:[function(e,t,r){function n(){i.call(this)}t.exports=n;var i=e("events").EventEmitter;e("inherits")(n,i),n.Readable=e("readable-stream/readable.js"),n.Writable=e("readable-stream/writable.js"),n.Duplex=e("readable-stream/duplex.js"),n.Transform=e("readable-stream/transform.js"),n.PassThrough=e("readable-stream/passthrough.js"),n.Stream=n,n.prototype.pipe=function(e,t){function r(t){e.writable&&!1===e.write(t)&&l.pause&&l.pause()}function n(){l.readable&&l.resume&&l.resume()}function s(){c||(c=!0,e.end())}function a(){c||(c=!0,"function"==typeof e.destroy&&e.destroy())}function o(e){if(u(),0===i.listenerCount(this,"error"))throw e}function u(){l.removeListener("data",r),e.removeListener("drain",n),l.removeListener("end",s),l.removeListener("close",a),l.removeListener("error",o),e.removeListener("error",o),l.removeListener("end",u),l.removeListener("close",u),e.removeListener("close",u)}var l=this;l.on("data",r),e.on("drain",n),e._isStdio||t&&!1===t.end||(l.on("end",s),l.on("close",a));var c=!1;return l.on("error",o),e.on("error",o),l.on("end",u),l.on("close",u),e.on("close",u),e.emit("pipe",l),e}},{events:301,inherits:306,"readable-stream/duplex.js":540,"readable-stream/passthrough.js":547,"readable-stream/readable.js":548,"readable-stream/transform.js":549,"readable-stream/writable.js":550}],591:[function(e,t,r){function n(e){if(e&&!u(e))throw new Error("Unknown encoding: "+e)}function i(e){return e.toString(this.encoding)}function s(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function a(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}var o=e("buffer").Buffer,u=o.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},l=r.StringDecoder=function(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),n(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=s;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=a;break;default:return void(this.write=i)}this.charBuffer=new o(6),this.charReceived=0,this.charLength=0};l.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var i=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived),t+=e.toString(this.encoding,0,i);var i=t.length-1,n=t.charCodeAt(i);if(n>=55296&&n<=56319){var s=this.surrogateSize;return this.charLength+=s,this.charReceived+=s,this.charBuffer.copy(this.charBuffer,s,0,s),e.copy(this.charBuffer,0,0,s),t.substring(0,i)}return t},l.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},l.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;t+=n.slice(0,r).toString(i)}return t}},{buffer:184}],592:[function(e,t,r){"use strict";var n=e("ansi-regex")();t.exports=function(e){return"string"==typeof e?e.replace(n,""):e}},{"ansi-regex":1}], +593:[function(e,t,r){(function(e){"use strict";var r=e.argv,n=r.indexOf("--"),i=function(e){e="--"+e;var t=r.indexOf(e);return-1!==t&&(-1===n||t=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),m(t)?n.showHidden=t:t&&r._extend(n,t),E(n.showHidden)&&(n.showHidden=!1),E(n.depth)&&(n.depth=2),E(n.colors)&&(n.colors=!1),E(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=s),u(n,e,n.depth)}function s(e,t){var r=i.styles[t];return r?"["+i.colors[r][0]+"m"+e+"["+i.colors[r][1]+"m":e}function a(e,t){return e}function o(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}function u(e,t,n){if(e.customInspect&&t&&_(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return v(i)||(i=u(e,i,n)),i}var s=l(e,t);if(s)return s;var a=Object.keys(t),m=o(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(t)),S(t)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return c(t);if(0===a.length){if(_(t)){var y=t.name?": "+t.name:"";return e.stylize("[Function"+y+"]","special")}if(A(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(C(t))return e.stylize(Date.prototype.toString.call(t),"date");if(S(t))return c(t)}var g="",b=!1,x=["{","}"];if(d(t)&&(b=!0,x=["[","]"]),_(t)){g=" [Function"+(t.name?": "+t.name:"")+"]"}if(A(t)&&(g=" "+RegExp.prototype.toString.call(t)),C(t)&&(g=" "+Date.prototype.toUTCString.call(t)),S(t)&&(g=" "+c(t)),0===a.length&&(!b||0==t.length))return x[0]+g+x[1];if(n<0)return A(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special");e.seen.push(t);var E;return E=b?p(e,t,n,m,a):a.map(function(r){return h(e,t,n,m,r,b)}),e.seen.pop(),f(E,g,x)}function l(e,t){if(E(t))return e.stylize("undefined","undefined");if(v(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return b(t)?e.stylize(""+t,"number"):m(t)?e.stylize(""+t,"boolean"):y(t)?e.stylize("null","null"):void 0}function c(e){return"["+Error.prototype.toString.call(e)+"]"}function p(e,t,r,n,i){for(var s=[],a=0,o=t.length;a-1&&(o=s?o.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+o.split("\n").map(function(e){return" "+e}).join("\n"))):o=e.stylize("[Circular]","special")),E(a)){if(s&&i.match(/^\d+$/))return o;a=JSON.stringify(""+i),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function f(e,t,r){var n=0;return e.reduce(function(e,t){return n++,t.indexOf("\n")>=0&&n++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}function d(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function y(e){return null===e}function g(e){return null==e}function b(e){return"number"==typeof e}function v(e){return"string"==typeof e}function x(e){return"symbol"==typeof e}function E(e){return void 0===e}function A(e){return D(e)&&"[object RegExp]"===k(e)}function D(e){return"object"==typeof e&&null!==e}function C(e){return D(e)&&"[object Date]"===k(e)}function S(e){return D(e)&&("[object Error]"===k(e)||e instanceof Error)}function _(e){return"function"==typeof e}function w(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e}function k(e){return Object.prototype.toString.call(e)}function F(e){return e<10?"0"+e.toString(10):e.toString(10)}function T(){var e=new Date,t=[F(e.getHours()),F(e.getMinutes()),F(e.getSeconds())].join(":");return[e.getDate(),j[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.format=function(e){if(!v(e)){for(var t=[],r=0;r=s)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),o=n[r];r any): void; + /** + * Adds schema to the instance. + * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. + * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + */ + addSchema(schema: Array | Object, key?: string): void; + /** + * Add schema that will be used to validate other schemas + * options in META_IGNORE_OPTIONS are alway set to false + * @param {Object} schema schema object + * @param {String} key optional schema key + */ + addMetaSchema(schema: Object, key?: string): void; + /** + * Validate schema + * @param {Object} schema schema to validate + * @return {Boolean} true if schema is valid + */ + validateSchema(schema: Object): boolean; + /** + * Get compiled schema from the instance by `key` or `ref`. + * @param {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). + * @return {Function} schema validating function (with property `schema`). + */ + getSchema(keyRef: string): ValidateFunction; + /** + * Remove cached schema(s). + * If no parameter is passed all schemas but meta-schemas are removed. + * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. + * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. + * @param {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object + */ + removeSchema(schemaKeyRef?: Object | string | RegExp): void; + /** + * Add custom format + * @param {String} name format name + * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) + */ + addFormat(name: string, format: FormatValidator | FormatDefinition): void; + /** + * Define custom keyword + * @this Ajv + * @param {String} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords. + * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. + */ + addKeyword(keyword: string, definition: KeywordDefinition): void; + /** + * Get keyword definition + * @this Ajv + * @param {String} keyword pre-defined or custom keyword. + * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. + */ + getKeyword(keyword: string): Object | boolean; + /** + * Remove keyword + * @this Ajv + * @param {String} keyword pre-defined or custom keyword. + */ + removeKeyword(keyword: string): void; + /** + * Convert array of error message objects to string + * @param {Array} errors optional array of validation errors, if not passed errors from the instance are used. + * @param {Object} options optional options with properties `separator` and `dataVar`. + * @return {String} human readable string with all errors descriptions + */ + errorsText(errors?: Array, options?: ErrorsTextOptions): string; + errors?: Array; + } + + interface Thenable { + then (onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => U | Thenable): Thenable; + } + + interface ValidateFunction { + ( + data: any, + dataPath?: string, + parentData?: Object | Array, + parentDataProperty?: string | number, + rootData?: Object | Array + ): boolean | Thenable; + errors?: Array; + schema?: Object; + } + + interface Options { + v5?: boolean; + allErrors?: boolean; + verbose?: boolean; + jsonPointers?: boolean; + uniqueItems?: boolean; + unicode?: boolean; + format?: string; + formats?: Object; + unknownFormats?: boolean | string | Array; + schemas?: Array | Object; + ownProperties?: boolean; + missingRefs?: boolean | string; + extendRefs?: boolean | string; + loadSchema?: (uri: string, cb: (err: Error, schema: Object) => any) => any; + removeAdditional?: boolean | string; + useDefaults?: boolean | string; + coerceTypes?: boolean | string; + async?: boolean | string; + transpile?: string | ((code: string) => string); + meta?: boolean | Object; + validateSchema?: boolean | string; + addUsedSchema?: boolean; + inlineRefs?: boolean | number; + passContext?: boolean; + loopRequired?: number; + multipleOfPrecision?: number; + errorDataPath?: string; + messages?: boolean; + sourceCode?: boolean; + beautify?: boolean | Object; + cache?: Object; + } + + type FormatValidator = string | RegExp | ((data: string) => boolean); + + interface FormatDefinition { + validate: FormatValidator; + compare: (data1: string, data2: string) => number; + async?: boolean; + } + + interface KeywordDefinition { + type?: string | Array; + async?: boolean; + errors?: boolean | string; + // schema: false makes validate not to expect schema (ValidateFunction) + schema?: boolean; + modifying?: boolean; + valid?: boolean; + // one and only one of the following properties should be present + validate?: ValidateFunction | SchemaValidateFunction; + compile?: (schema: Object, parentSchema: Object) => ValidateFunction; + macro?: (schema: Object, parentSchema: Object) => Object; + inline?: (it: Object, keyword: string, schema: Object, parentSchema: Object) => string; + } + + interface SchemaValidateFunction { + ( + schema: Object, + data: any, + parentSchema?: Object, + dataPath?: string, + parentData?: Object | Array, + parentDataProperty?: string | number + ): boolean | Thenable; + errors?: Array; + } + + interface ErrorsTextOptions { + separator?: string; + dataVar?: string; + } + + interface ErrorObject { + keyword: string; + dataPath: string; + schemaPath: string; + params: ErrorParameters; + // Excluded if messages set to false. + message?: string; + // These are added with the `verbose` option. + schema?: Object; + parentSchema?: Object; + data?: any; + } + + type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams | + DependenciesParams | FormatParams | ComparisonParams | + MultipleOfParams | PatternParams | RequiredParams | + TypeParams | UniqueItemsParams | CustomParams | + PatternGroupsParams | PatternRequiredParams | + SwitchParams | NoParams | EnumParams; + + interface RefParams { + ref: string; + } + + interface LimitParams { + limit: number; + } + + interface AdditionalPropertiesParams { + additionalProperty: string; + } + + interface DependenciesParams { + property: string; + missingProperty: string; + depsCount: number; + deps: string; + } + + interface FormatParams { + format: string + } + + interface ComparisonParams { + comparison: string; + limit: number | string; + exclusive: boolean; + } + + interface MultipleOfParams { + multipleOf: number; + } + + interface PatternParams { + pattern: string; + } + + interface RequiredParams { + missingProperty: string; + } + + interface TypeParams { + type: string; + } + + interface UniqueItemsParams { + i: number; + j: number; + } + + interface CustomParams { + keyword: string; + } + + interface PatternGroupsParams { + reason: string; + limit: number; + pattern: string; + } + + interface PatternRequiredParams { + missingPattern: string; + } + + interface SwitchParams { + caseIndex: number; + } + + interface NoParams {} + + interface EnumParams { + allowedValues: Array; + } +} + +export = ajv; diff --git a/node_modules/ajv/lib/ajv.js b/node_modules/ajv/lib/ajv.js new file mode 100644 index 000000000..0502c1fd3 --- /dev/null +++ b/node_modules/ajv/lib/ajv.js @@ -0,0 +1,420 @@ +'use strict'; + +var compileSchema = require('./compile') + , resolve = require('./compile/resolve') + , Cache = require('./cache') + , SchemaObject = require('./compile/schema_obj') + , stableStringify = require('json-stable-stringify') + , formats = require('./compile/formats') + , rules = require('./compile/rules') + , v5 = require('./v5') + , util = require('./compile/util') + , async = require('./async') + , co = require('co'); + +module.exports = Ajv; + +Ajv.prototype.compileAsync = async.compile; + +var customKeyword = require('./keyword'); +Ajv.prototype.addKeyword = customKeyword.add; +Ajv.prototype.getKeyword = customKeyword.get; +Ajv.prototype.removeKeyword = customKeyword.remove; +Ajv.ValidationError = require('./compile/validation_error'); + +var META_SCHEMA_ID = 'http://json-schema.org/draft-04/schema'; +var SCHEMA_URI_FORMAT = /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i; +function SCHEMA_URI_FORMAT_FUNC(str) { + return SCHEMA_URI_FORMAT.test(str); +} + +var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ]; + +/** + * Creates validator instance. + * Usage: `Ajv(opts)` + * @param {Object} opts optional options + * @return {Object} ajv instance + */ +function Ajv(opts) { + if (!(this instanceof Ajv)) return new Ajv(opts); + var self = this; + + opts = this._opts = util.copy(opts) || {}; + this._schemas = {}; + this._refs = {}; + this._fragments = {}; + this._formats = formats(opts.format); + this._cache = opts.cache || new Cache; + this._loadingSchemas = {}; + this._compilations = []; + this.RULES = rules(); + + // this is done on purpose, so that methods are bound to the instance + // (without using bind) so that they can be used without the instance + this.validate = validate; + this.compile = compile; + this.addSchema = addSchema; + this.addMetaSchema = addMetaSchema; + this.validateSchema = validateSchema; + this.getSchema = getSchema; + this.removeSchema = removeSchema; + this.addFormat = addFormat; + this.errorsText = errorsText; + + this._addSchema = _addSchema; + this._compile = _compile; + + opts.loopRequired = opts.loopRequired || Infinity; + if (opts.async || opts.transpile) async.setup(opts); + if (opts.beautify === true) opts.beautify = { indent_size: 2 }; + if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; + this._metaOpts = getMetaSchemaOptions(); + + if (opts.formats) addInitialFormats(); + addDraft4MetaSchema(); + if (opts.v5) v5.enable(this); + if (typeof opts.meta == 'object') addMetaSchema(opts.meta); + addInitialSchemas(); + + + /** + * Validate data using schema + * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize. + * @param {String|Object} schemaKeyRef key, ref or schema object + * @param {Any} data to be validated + * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). + */ + function validate(schemaKeyRef, data) { + var v; + if (typeof schemaKeyRef == 'string') { + v = getSchema(schemaKeyRef); + if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); + } else { + var schemaObj = _addSchema(schemaKeyRef); + v = schemaObj.validate || _compile(schemaObj); + } + + var valid = v(data); + if (v.$async === true) + return self._opts.async == '*' ? co(valid) : valid; + self.errors = v.errors; + return valid; + } + + + /** + * Create validating function for passed schema. + * @param {Object} schema schema object + * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. + * @return {Function} validating function + */ + function compile(schema, _meta) { + var schemaObj = _addSchema(schema, undefined, _meta); + return schemaObj.validate || _compile(schemaObj); + } + + + /** + * Adds schema to the instance. + * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. + * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. + * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. + * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. + */ + function addSchema(schema, key, _skipValidation, _meta) { + if (Array.isArray(schema)){ + for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. + * @param {Object} options optional options with properties `separator` and `dataVar`. + * @return {String} human readable string with all errors descriptions + */ + function errorsText(errors, options) { + errors = errors || self.errors; + if (!errors) return 'No errors'; + options = options || {}; + var separator = options.separator === undefined ? ', ' : options.separator; + var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; + + var text = ''; + for (var i=0; i= 1 && month <= 12 && day >= 1 && day <= DAYS[month]; +} + + +function time(str, full) { + var matches = str.match(TIME); + if (!matches) return false; + + var hour = matches[1]; + var minute = matches[2]; + var second = matches[3]; + var timeZone = matches[5]; + return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone); +} + + +var DATE_TIME_SEPARATOR = /t|\s/i; +function date_time(str) { + // http://tools.ietf.org/html/rfc3339#section-5.6 + var dateTime = str.split(DATE_TIME_SEPARATOR); + return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); +} + + +function hostname(str) { + // https://tools.ietf.org/html/rfc1034#section-3.5 + // https://tools.ietf.org/html/rfc1123#section-2 + return str.length <= 255 && HOSTNAME.test(str); +} + + +var NOT_URI_FRAGMENT = /\/|\:/; +function uri(str) { + // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." + return NOT_URI_FRAGMENT.test(str) && URI.test(str); +} + + +function regex(str) { + try { + new RegExp(str); + return true; + } catch(e) { + return false; + } +} + + +function compareDate(d1, d2) { + if (!(d1 && d2)) return; + if (d1 > d2) return 1; + if (d1 < d2) return -1; + if (d1 === d2) return 0; +} + + +function compareTime(t1, t2) { + if (!(t1 && t2)) return; + t1 = t1.match(TIME); + t2 = t2.match(TIME); + if (!(t1 && t2)) return; + t1 = t1[1] + t1[2] + t1[3] + (t1[4]||''); + t2 = t2[1] + t2[2] + t2[3] + (t2[4]||''); + if (t1 > t2) return 1; + if (t1 < t2) return -1; + if (t1 === t2) return 0; +} + + +function compareDateTime(dt1, dt2) { + if (!(dt1 && dt2)) return; + dt1 = dt1.split(DATE_TIME_SEPARATOR); + dt2 = dt2.split(DATE_TIME_SEPARATOR); + var res = compareDate(dt1[0], dt2[0]); + if (res === undefined) return; + return res || compareTime(dt1[1], dt2[1]); +} diff --git a/node_modules/ajv/lib/compile/index.js b/node_modules/ajv/lib/compile/index.js new file mode 100644 index 000000000..c9c6730f8 --- /dev/null +++ b/node_modules/ajv/lib/compile/index.js @@ -0,0 +1,390 @@ +'use strict'; + +var resolve = require('./resolve') + , util = require('./util') + , stableStringify = require('json-stable-stringify') + , async = require('../async'); + +var beautify; + +function loadBeautify(){ + if (beautify === undefined) { + var name = 'js-beautify'; + try { beautify = require(name).js_beautify; } + catch(e) { beautify = false; } + } +} + +var validateGenerator = require('../dotjs/validate'); + +/** + * Functions below are used inside compiled validations function + */ + +var co = require('co'); +var ucs2length = util.ucs2length; +var equal = require('./equal'); + +// this error is thrown by async schemas to return validation errors via exception +var ValidationError = require('./validation_error'); + +module.exports = compile; + + +/** + * Compiles schema to validation function + * @this Ajv + * @param {Object} schema schema object + * @param {Object} root object with information about the root schema for this schema + * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution + * @param {String} baseId base ID for IDs in the schema + * @return {Function} validation function + */ +function compile(schema, root, localRefs, baseId) { + /* jshint validthis: true, evil: true */ + /* eslint no-shadow: 0 */ + var self = this + , opts = this._opts + , refVal = [ undefined ] + , refs = {} + , patterns = [] + , patternsHash = {} + , defaults = [] + , defaultsHash = {} + , customRules = [] + , keepSourceCode = opts.sourceCode !== false; + + root = root || { schema: schema, refVal: refVal, refs: refs }; + + var c = checkCompiling.call(this, schema, root, baseId); + var compilation = this._compilations[c.index]; + if (c.compiling) return (compilation.callValidate = callValidate); + + var formats = this._formats; + var RULES = this.RULES; + + try { + var v = localCompile(schema, root, localRefs, baseId); + compilation.validate = v; + var cv = compilation.callValidate; + if (cv) { + cv.schema = v.schema; + cv.errors = null; + cv.refs = v.refs; + cv.refVal = v.refVal; + cv.root = v.root; + cv.$async = v.$async; + if (keepSourceCode) cv.sourceCode = v.sourceCode; + } + return v; + } finally { + endCompiling.call(this, schema, root, baseId); + } + + function callValidate() { + var validate = compilation.validate; + var result = validate.apply(null, arguments); + callValidate.errors = validate.errors; + return result; + } + + function localCompile(_schema, _root, localRefs, baseId) { + var isRoot = !_root || (_root && _root.schema == _schema); + if (_root.schema != root.schema) + return compile.call(self, _schema, _root, localRefs, baseId); + + var $async = _schema.$async === true; + if ($async && !opts.transpile) async.setup(opts); + + var sourceCode = validateGenerator({ + isTop: true, + schema: _schema, + isRoot: isRoot, + baseId: baseId, + root: _root, + schemaPath: '', + errSchemaPath: '#', + errorPath: '""', + RULES: RULES, + validate: validateGenerator, + util: util, + resolve: resolve, + resolveRef: resolveRef, + usePattern: usePattern, + useDefault: useDefault, + useCustomRule: useCustomRule, + opts: opts, + formats: formats, + self: self + }); + + sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) + + vars(defaults, defaultCode) + vars(customRules, customRuleCode) + + sourceCode; + + if (opts.beautify) { + loadBeautify(); + /* istanbul ignore else */ + if (beautify) sourceCode = beautify(sourceCode, opts.beautify); + else console.error('"npm install js-beautify" to use beautify option'); + } + // console.log('\n\n\n *** \n', sourceCode); + var validate, validateCode + , transpile = opts._transpileFunc; + try { + validateCode = $async && transpile + ? transpile(sourceCode) + : sourceCode; + + var makeValidate = new Function( + 'self', + 'RULES', + 'formats', + 'root', + 'refVal', + 'defaults', + 'customRules', + 'co', + 'equal', + 'ucs2length', + 'ValidationError', + validateCode + ); + + validate = makeValidate( + self, + RULES, + formats, + root, + refVal, + defaults, + customRules, + co, + equal, + ucs2length, + ValidationError + ); + + refVal[0] = validate; + } catch(e) { + console.error('Error compiling schema, function code:', validateCode); + throw e; + } + + validate.schema = _schema; + validate.errors = null; + validate.refs = refs; + validate.refVal = refVal; + validate.root = isRoot ? validate : _root; + if ($async) validate.$async = true; + if (keepSourceCode) validate.sourceCode = sourceCode; + if (opts.sourceCode === true) { + validate.source = { + patterns: patterns, + defaults: defaults + }; + } + + return validate; + } + + function resolveRef(baseId, ref, isRoot) { + ref = resolve.url(baseId, ref); + var refIndex = refs[ref]; + var _refVal, refCode; + if (refIndex !== undefined) { + _refVal = refVal[refIndex]; + refCode = 'refVal[' + refIndex + ']'; + return resolvedRef(_refVal, refCode); + } + if (!isRoot && root.refs) { + var rootRefId = root.refs[ref]; + if (rootRefId !== undefined) { + _refVal = root.refVal[rootRefId]; + refCode = addLocalRef(ref, _refVal); + return resolvedRef(_refVal, refCode); + } + } + + refCode = addLocalRef(ref); + var v = resolve.call(self, localCompile, root, ref); + if (!v) { + var localSchema = localRefs && localRefs[ref]; + if (localSchema) { + v = resolve.inlineRef(localSchema, opts.inlineRefs) + ? localSchema + : compile.call(self, localSchema, root, localRefs, baseId); + } + } + + if (v) { + replaceLocalRef(ref, v); + return resolvedRef(v, refCode); + } + } + + function addLocalRef(ref, v) { + var refId = refVal.length; + refVal[refId] = v; + refs[ref] = refId; + return 'refVal' + refId; + } + + function replaceLocalRef(ref, v) { + var refId = refs[ref]; + refVal[refId] = v; + } + + function resolvedRef(refVal, code) { + return typeof refVal == 'object' + ? { code: code, schema: refVal, inline: true } + : { code: code, $async: refVal && refVal.$async }; + } + + function usePattern(regexStr) { + var index = patternsHash[regexStr]; + if (index === undefined) { + index = patternsHash[regexStr] = patterns.length; + patterns[index] = regexStr; + } + return 'pattern' + index; + } + + function useDefault(value) { + switch (typeof value) { + case 'boolean': + case 'number': + return '' + value; + case 'string': + return util.toQuotedString(value); + case 'object': + if (value === null) return 'null'; + var valueStr = stableStringify(value); + var index = defaultsHash[valueStr]; + if (index === undefined) { + index = defaultsHash[valueStr] = defaults.length; + defaults[index] = value; + } + return 'default' + index; + } + } + + function useCustomRule(rule, schema, parentSchema, it) { + var validateSchema = rule.definition.validateSchema; + if (validateSchema && self._opts.validateSchema !== false) { + var valid = validateSchema(schema); + if (!valid) { + var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); + if (self._opts.validateSchema == 'log') console.error(message); + else throw new Error(message); + } + } + + var compile = rule.definition.compile + , inline = rule.definition.inline + , macro = rule.definition.macro; + + var validate; + if (compile) { + validate = compile.call(self, schema, parentSchema, it); + } else if (macro) { + validate = macro.call(self, schema, parentSchema, it); + if (opts.validateSchema !== false) self.validateSchema(validate, true); + } else if (inline) { + validate = inline.call(self, it, rule.keyword, schema, parentSchema); + } else { + validate = rule.definition.validate; + } + + var index = customRules.length; + customRules[index] = validate; + + return { + code: 'customRule' + index, + validate: validate + }; + } +} + + +/** + * Checks if the schema is currently compiled + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) + */ +function checkCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var index = compIndex.call(this, schema, root, baseId); + if (index >= 0) return { index: index, compiling: true }; + index = this._compilations.length; + this._compilations[index] = { + schema: schema, + root: root, + baseId: baseId + }; + return { index: index, compiling: false }; +} + + +/** + * Removes the schema from the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + */ +function endCompiling(schema, root, baseId) { + /* jshint validthis: true */ + var i = compIndex.call(this, schema, root, baseId); + if (i >= 0) this._compilations.splice(i, 1); +} + + +/** + * Index of schema compilation in the currently compiled list + * @this Ajv + * @param {Object} schema schema to compile + * @param {Object} root root object + * @param {String} baseId base schema ID + * @return {Integer} compilation index + */ +function compIndex(schema, root, baseId) { + /* jshint validthis: true */ + for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { + // high surrogate, and there is a next character + value = str.charCodeAt(pos); + if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate + } + } + return length; +}; diff --git a/node_modules/ajv/lib/compile/util.js b/node_modules/ajv/lib/compile/util.js new file mode 100644 index 000000000..8451f83ae --- /dev/null +++ b/node_modules/ajv/lib/compile/util.js @@ -0,0 +1,257 @@ +'use strict'; + + +module.exports = { + copy: copy, + checkDataType: checkDataType, + checkDataTypes: checkDataTypes, + coerceToTypes: coerceToTypes, + toHash: toHash, + getProperty: getProperty, + escapeQuotes: escapeQuotes, + ucs2length: require('./ucs2length'), + varOccurences: varOccurences, + varReplace: varReplace, + cleanUpCode: cleanUpCode, + cleanUpVarErrors: cleanUpVarErrors, + schemaHasRules: schemaHasRules, + schemaHasRulesExcept: schemaHasRulesExcept, + stableStringify: require('json-stable-stringify'), + toQuotedString: toQuotedString, + getPathExpr: getPathExpr, + getPath: getPath, + getData: getData, + unescapeFragment: unescapeFragment, + escapeFragment: escapeFragment, + escapeJsonPointer: escapeJsonPointer +}; + + +function copy(o, to) { + to = to || {}; + for (var key in o) to[key] = o[key]; + return to; +} + + +function checkDataType(dataType, data, negate) { + var EQUAL = negate ? ' !== ' : ' === ' + , AND = negate ? ' || ' : ' && ' + , OK = negate ? '!' : '' + , NOT = negate ? '' : '!'; + switch (dataType) { + case 'null': return data + EQUAL + 'null'; + case 'array': return OK + 'Array.isArray(' + data + ')'; + case 'object': return '(' + OK + data + AND + + 'typeof ' + data + EQUAL + '"object"' + AND + + NOT + 'Array.isArray(' + data + '))'; + case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + + NOT + '(' + data + ' % 1)' + + AND + data + EQUAL + data + ')'; + default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; + } +} + + +function checkDataTypes(dataTypes, data) { + switch (dataTypes.length) { + case 1: return checkDataType(dataTypes[0], data, true); + default: + var code = ''; + var types = toHash(dataTypes); + if (types.array && types.object) { + code = types.null ? '(': '(!' + data + ' || '; + code += 'typeof ' + data + ' !== "object")'; + delete types.null; + delete types.array; + delete types.object; + } + if (types.number) delete types.integer; + for (var t in types) + code += (code ? ' && ' : '' ) + checkDataType(t, data, true); + + return code; + } +} + + +var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); +function coerceToTypes(optionCoerceTypes, dataTypes) { + if (Array.isArray(dataTypes)) { + var types = []; + for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); + return paths[lvl - up]; + } + + if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); + data = 'data' + ((lvl - up) || ''); + if (!jsonPointer) return data; + } + + var expr = data; + var segments = jsonPointer.split('/'); + for (var i=0; i' + , $notOp = $isMax ? '>' : '<'; +}} + +{{? $isDataExcl }} + {{ + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) + , $exclusive = 'exclusive' + $lvl + , $opExpr = 'op' + $lvl + , $opStr = '\' + ' + $opExpr + ' + \''; + }} + var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; + {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} + + var exclusive{{=$lvl}}; + if (typeof {{=$schemaValueExcl}} != 'boolean' && typeof {{=$schemaValueExcl}} != 'undefined') { + {{ var $errorKeyword = $exclusiveKeyword; }} + {{# def.error:'_exclusiveLimit' }} + } else if({{# def.$dataNotType:'number' }} + ((exclusive{{=$lvl}} = {{=$schemaValueExcl}} === true) + ? {{=$data}} {{=$notOp}}= {{=$schemaValue}} + : {{=$data}} {{=$notOp}} {{=$schemaValue}}) + || {{=$data}} !== {{=$data}}) { + var op{{=$lvl}} = exclusive{{=$lvl}} ? '{{=$op}}' : '{{=$op}}='; +{{??}} + {{ + var $exclusive = $schemaExcl === true + , $opStr = $op; /*used in error*/ + if (!$exclusive) $opStr += '='; + var $opExpr = '\'' + $opStr + '\''; /*used in error*/ + }} + + if ({{# def.$dataNotType:'number' }} + {{=$data}} {{=$notOp}}{{?$exclusive}}={{?}} {{=$schemaValue}} + || {{=$data}} !== {{=$data}}) { +{{?}} + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limit' }} + } {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/_limitItems.jst b/node_modules/ajv/lib/dot/_limitItems.jst new file mode 100644 index 000000000..a3e078e51 --- /dev/null +++ b/node_modules/ajv/lib/dot/_limitItems.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $op = $keyword == 'maxItems' ? '>' : '<'; }} +if ({{# def.$dataNotType:'number' }} {{=$data}}.length {{=$op}} {{=$schemaValue}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limitItems' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/_limitLength.jst b/node_modules/ajv/lib/dot/_limitLength.jst new file mode 100644 index 000000000..cfc8dbb01 --- /dev/null +++ b/node_modules/ajv/lib/dot/_limitLength.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $op = $keyword == 'maxLength' ? '>' : '<'; }} +if ({{# def.$dataNotType:'number' }} {{# def.strLength }} {{=$op}} {{=$schemaValue}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limitLength' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/_limitProperties.jst b/node_modules/ajv/lib/dot/_limitProperties.jst new file mode 100644 index 000000000..da7ea776f --- /dev/null +++ b/node_modules/ajv/lib/dot/_limitProperties.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $op = $keyword == 'maxProperties' ? '>' : '<'; }} +if ({{# def.$dataNotType:'number' }} Object.keys({{=$data}}).length {{=$op}} {{=$schemaValue}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_limitProperties' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/allOf.jst b/node_modules/ajv/lib/dot/allOf.jst new file mode 100644 index 000000000..4c2836311 --- /dev/null +++ b/node_modules/ajv/lib/dot/allOf.jst @@ -0,0 +1,34 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{ + var $currentBaseId = $it.baseId + , $allSchemasEmpty = true; +}} + +{{~ $schema:$sch:$i }} + {{? {{# def.nonEmptySchema:$sch }} }} + {{ + $allSchemasEmpty = false; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + }} + + {{# def.insertSubschemaCode }} + + {{# def.ifResultValid }} + {{?}} +{{~}} + +{{? $breakOnError }} + {{? $allSchemasEmpty }} + if (true) { + {{??}} + {{= $closingBraces.slice(0,-1) }} + {{?}} +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/anyOf.jst b/node_modules/ajv/lib/dot/anyOf.jst new file mode 100644 index 000000000..93c3cd828 --- /dev/null +++ b/node_modules/ajv/lib/dot/anyOf.jst @@ -0,0 +1,48 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{ + var $noEmptySchema = $schema.every(function($sch) { + return {{# def.nonEmptySchema:$sch }}; + }); +}} +{{? $noEmptySchema }} + {{ var $currentBaseId = $it.baseId; }} + var {{=$errs}} = errors; + var {{=$valid}} = false; + + {{# def.setCompositeRule }} + + {{~ $schema:$sch:$i }} + {{ + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + }} + + {{# def.insertSubschemaCode }} + + {{=$valid}} = {{=$valid}} || {{=$nextValid}}; + + if (!{{=$valid}}) { + {{ $closingBraces += '}'; }} + {{~}} + + {{# def.resetCompositeRule }} + + {{= $closingBraces }} + + if (!{{=$valid}}) { + {{# def.addError:'anyOf' }} + } else { + {{# def.resetErrors }} + {{? it.opts.allErrors }} } {{?}} + + {{# def.cleanUp }} +{{??}} + {{? $breakOnError }} + if (true) { + {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/coerce.def b/node_modules/ajv/lib/dot/coerce.def new file mode 100644 index 000000000..86e0e18af --- /dev/null +++ b/node_modules/ajv/lib/dot/coerce.def @@ -0,0 +1,61 @@ +{{## def.coerceType: + {{ + var $dataType = 'dataType' + $lvl + , $coerced = 'coerced' + $lvl; + }} + var {{=$dataType}} = typeof {{=$data}}; + {{? it.opts.coerceTypes == 'array'}} + if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array'; + {{?}} + + var {{=$coerced}} = undefined; + + {{ var $bracesCoercion = ''; }} + {{~ $coerceToTypes:$type:$i }} + {{? $i }} + if ({{=$coerced}} === undefined) { + {{ $bracesCoercion += '}'; }} + {{?}} + + {{? it.opts.coerceTypes == 'array' && $type != 'array' }} + if ({{=$dataType}} == 'array' && {{=$data}}.length == 1) { + {{=$coerced}} = {{=$data}} = {{=$data}}[0]; + {{=$dataType}} = typeof {{=$data}}; + /*if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array';*/ + } + {{?}} + + {{? $type == 'string' }} + if ({{=$dataType}} == 'number' || {{=$dataType}} == 'boolean') + {{=$coerced}} = '' + {{=$data}}; + else if ({{=$data}} === null) {{=$coerced}} = ''; + {{?? $type == 'number' || $type == 'integer' }} + if ({{=$dataType}} == 'boolean' || {{=$data}} === null + || ({{=$dataType}} == 'string' && {{=$data}} && {{=$data}} == +{{=$data}} + {{? $type == 'integer' }} && !({{=$data}} % 1){{?}})) + {{=$coerced}} = +{{=$data}}; + {{?? $type == 'boolean' }} + if ({{=$data}} === 'false' || {{=$data}} === 0 || {{=$data}} === null) + {{=$coerced}} = false; + else if ({{=$data}} === 'true' || {{=$data}} === 1) + {{=$coerced}} = true; + {{?? $type == 'null' }} + if ({{=$data}} === '' || {{=$data}} === 0 || {{=$data}} === false) + {{=$coerced}} = null; + {{?? it.opts.coerceTypes == 'array' && $type == 'array' }} + if ({{=$dataType}} == 'string' || {{=$dataType}} == 'number' || {{=$dataType}} == 'boolean' || {{=$data}} == null) + {{=$coerced}} = [{{=$data}}]; + {{?}} + {{~}} + + {{= $bracesCoercion }} + + if ({{=$coerced}} === undefined) { + {{# def.error:'type' }} + } else { + {{# def.setParentData }} + {{=$data}} = {{=$coerced}}; + {{? !$dataLvl }}if ({{=$parentData}} !== undefined){{?}} + {{=$parentData}}[{{=$parentDataProperty}}] = {{=$coerced}}; + } +#}} diff --git a/node_modules/ajv/lib/dot/custom.jst b/node_modules/ajv/lib/dot/custom.jst new file mode 100644 index 000000000..e91c50e6f --- /dev/null +++ b/node_modules/ajv/lib/dot/custom.jst @@ -0,0 +1,184 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ + var $rule = this + , $definition = 'definition' + $lvl + , $rDef = $rule.definition; + var $validate = $rDef.validate; + var $compile, $inline, $macro, $ruleValidate, $validateCode; +}} + +{{? $isData && $rDef.$data }} + {{ + $validateCode = 'keywordValidate' + $lvl; + var $validateSchema = $rDef.validateSchema; + }} + var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition; + var {{=$validateCode}} = {{=$definition}}.validate; +{{??}} + {{ + $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); + $schemaValue = 'validate.schema' + $schemaPath; + $validateCode = $ruleValidate.code; + $compile = $rDef.compile; + $inline = $rDef.inline; + $macro = $rDef.macro; + }} +{{?}} + +{{ + var $ruleErrs = $validateCode + '.errors' + , $i = 'i' + $lvl + , $ruleErr = 'ruleErr' + $lvl + , $asyncKeyword = $rDef.async; + + if ($asyncKeyword && !it.async) + throw new Error('async keyword in sync schema'); +}} + + +{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}} +var {{=$errs}} = errors; +var {{=$valid}}; + +{{## def.callRuleValidate: + {{=$validateCode}}.call( + {{? it.opts.passContext }}this{{??}}self{{?}} + {{? $compile || $rDef.schema === false }} + , {{=$data}} + {{??}} + , {{=$schemaValue}} + , {{=$data}} + , validate.schema{{=it.schemaPath}} + {{?}} + , {{# def.dataPath }} + {{# def.passParentData }} + , rootData + ) +#}} + +{{## def.extendErrors:_inline: + for (var {{=$i}}={{=$errs}}; {{=$i}} {{=$i}}) { + {{ + var $passData = $data + '[' + $i + ']'; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); + $it.dataPathArr[$dataNxt] = $i; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + } + + {{# def.ifResultValid }} + {{?}} + {{~}} + + {{? typeof $additionalItems == 'object' && {{# def.nonEmptySchema:$additionalItems }} }} + {{ + $it.schema = $additionalItems; + $it.schemaPath = it.schemaPath + '.additionalItems'; + $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; + }} + {{=$nextValid}} = true; + + if ({{=$data}}.length > {{= $schema.length }}) { + {{# def.validateItems: $schema.length }} + } + + {{# def.ifResultValid }} + {{?}} + +{{?? {{# def.nonEmptySchema:$schema }} }} + {{ /* 'items' is a single schema */}} + {{ + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + {{# def.validateItems: 0 }} + {{# def.ifResultValid }} +{{?}} + +{{? $breakOnError }} + {{= $closingBraces }} + if ({{=$errs}} == errors) { +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/missing.def b/node_modules/ajv/lib/dot/missing.def new file mode 100644 index 000000000..23ad04cf4 --- /dev/null +++ b/node_modules/ajv/lib/dot/missing.def @@ -0,0 +1,34 @@ +{{## def.checkMissingProperty:_properties: + {{~ _properties:_$property:$i }} + {{?$i}} || {{?}} + {{ var $prop = it.util.getProperty(_$property); }} + ( {{=$data}}{{=$prop}} === undefined && (missing{{=$lvl}} = {{= it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop) }}) ) + {{~}} +#}} + + +{{## def.errorMissingProperty:_error: + {{ + var $propertyPath = 'missing' + $lvl + , $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.opts.jsonPointers + ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) + : $currentErrorPath + ' + ' + $propertyPath; + } + }} + {{# def.error:_error }} +#}} + +{{## def.allErrorsMissingProperty:_error: + {{ + var $prop = it.util.getProperty($reqProperty) + , $missingProperty = it.util.escapeQuotes($reqProperty); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $reqProperty, it.opts.jsonPointers); + } + }} + if ({{=$data}}{{=$prop}} === undefined) { + {{# def.addError:_error }} + } +#}} diff --git a/node_modules/ajv/lib/dot/multipleOf.jst b/node_modules/ajv/lib/dot/multipleOf.jst new file mode 100644 index 000000000..5f8dd33b5 --- /dev/null +++ b/node_modules/ajv/lib/dot/multipleOf.jst @@ -0,0 +1,20 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +var division{{=$lvl}}; +if ({{?$isData}} + {{=$schemaValue}} !== undefined && ( + typeof {{=$schemaValue}} != 'number' || + {{?}} + (division{{=$lvl}} = {{=$data}} / {{=$schemaValue}}, + {{? it.opts.multipleOfPrecision }} + Math.abs(Math.round(division{{=$lvl}}) - division{{=$lvl}}) > 1e-{{=it.opts.multipleOfPrecision}} + {{??}} + division{{=$lvl}} !== parseInt(division{{=$lvl}}) + {{?}} + ) + {{?$isData}} ) {{?}} ) { + {{# def.error:'multipleOf' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/not.jst b/node_modules/ajv/lib/dot/not.jst new file mode 100644 index 000000000..e03185ae8 --- /dev/null +++ b/node_modules/ajv/lib/dot/not.jst @@ -0,0 +1,43 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +{{? {{# def.nonEmptySchema:$schema }} }} + {{ + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + }} + + var {{=$errs}} = errors; + + {{# def.setCompositeRule }} + + {{ + $it.createErrors = false; + var $allErrorsOption; + if ($it.opts.allErrors) { + $allErrorsOption = $it.opts.allErrors; + $it.opts.allErrors = false; + } + }} + {{= it.validate($it) }} + {{ + $it.createErrors = true; + if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; + }} + + {{# def.resetCompositeRule }} + + if ({{=$nextValid}}) { + {{# def.error:'not' }} + } else { + {{# def.resetErrors }} + {{? it.opts.allErrors }} } {{?}} +{{??}} + {{# def.addError:'not' }} + {{? $breakOnError}} + if (false) { + {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/oneOf.jst b/node_modules/ajv/lib/dot/oneOf.jst new file mode 100644 index 000000000..b7f7bff07 --- /dev/null +++ b/node_modules/ajv/lib/dot/oneOf.jst @@ -0,0 +1,44 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + +var {{=$errs}} = errors; +var prevValid{{=$lvl}} = false; +var {{=$valid}} = false; + +{{ var $currentBaseId = $it.baseId; }} +{{# def.setCompositeRule }} + +{{~ $schema:$sch:$i }} + {{? {{# def.nonEmptySchema:$sch }} }} + {{ + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + }} + + {{# def.insertSubschemaCode }} + {{??}} + var {{=$nextValid}} = true; + {{?}} + + {{? $i }} + if ({{=$nextValid}} && prevValid{{=$lvl}}) + {{=$valid}} = false; + else { + {{ $closingBraces += '}'; }} + {{?}} + + if ({{=$nextValid}}) {{=$valid}} = prevValid{{=$lvl}} = true; +{{~}} + +{{# def.resetCompositeRule }} + +{{= $closingBraces }} + +if (!{{=$valid}}) { + {{# def.error:'oneOf' }} +} else { + {{# def.resetErrors }} +{{? it.opts.allErrors }} } {{?}} diff --git a/node_modules/ajv/lib/dot/pattern.jst b/node_modules/ajv/lib/dot/pattern.jst new file mode 100644 index 000000000..3a37ef6cb --- /dev/null +++ b/node_modules/ajv/lib/dot/pattern.jst @@ -0,0 +1,14 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ + var $regexp = $isData + ? '(new RegExp(' + $schemaValue + '))' + : it.usePattern($schema); +}} + +if ({{# def.$dataNotType:'string' }} !{{=$regexp}}.test({{=$data}}) ) { + {{# def.error:'pattern' }} +} {{? $breakOnError }} else { {{?}} diff --git a/node_modules/ajv/lib/dot/properties.jst b/node_modules/ajv/lib/dot/properties.jst new file mode 100644 index 000000000..3a4b966ff --- /dev/null +++ b/node_modules/ajv/lib/dot/properties.jst @@ -0,0 +1,319 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{## def.validateAdditional: + {{ /* additionalProperties is schema */ + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty + ? it.errorPath + : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} +#}} + + +{{ + var $key = 'key' + $lvl + , $dataNxt = $it.dataLevel = it.dataLevel + 1 + , $nextData = 'data' + $dataNxt; + + var $schemaKeys = Object.keys($schema || {}) + , $pProperties = it.schema.patternProperties || {} + , $pPropertyKeys = Object.keys($pProperties) + , $aProperties = it.schema.additionalProperties + , $someProperties = $schemaKeys.length || $pPropertyKeys.length + , $noAdditional = $aProperties === false + , $additionalIsSchema = typeof $aProperties == 'object' + && Object.keys($aProperties).length + , $removeAdditional = it.opts.removeAdditional + , $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional + , $ownProperties = it.opts.ownProperties + , $currentBaseId = it.baseId; + + var $required = it.schema.required; + if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) + var $requiredHash = it.util.toHash($required); + + if (it.opts.v5) { + var $pgProperties = it.schema.patternGroups || {} + , $pgPropertyKeys = Object.keys($pgProperties); + } +}} + + +var {{=$errs}} = errors; +var {{=$nextValid}} = true; + +{{? $checkAdditional }} + for (var {{=$key}} in {{=$data}}) { + {{# def.checkOwnProperty }} + {{? $someProperties }} + var isAdditional{{=$lvl}} = !(false + {{? $schemaKeys.length }} + {{? $schemaKeys.length > 5 }} + || validate.schema{{=$schemaPath}}[{{=$key}}] + {{??}} + {{~ $schemaKeys:$propertyKey }} + || {{=$key}} == {{= it.util.toQuotedString($propertyKey) }} + {{~}} + {{?}} + {{?}} + {{? $pPropertyKeys.length }} + {{~ $pPropertyKeys:$pProperty:$i }} + || {{= it.usePattern($pProperty) }}.test({{=$key}}) + {{~}} + {{?}} + {{? it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length }} + {{~ $pgPropertyKeys:$pgProperty:$i }} + || {{= it.usePattern($pgProperty) }}.test({{=$key}}) + {{~}} + {{?}} + ); + + if (isAdditional{{=$lvl}}) { + {{?}} + {{? $removeAdditional == 'all' }} + delete {{=$data}}[{{=$key}}]; + {{??}} + {{ + var $currentErrorPath = it.errorPath; + var $additionalProperty = '\' + ' + $key + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + } + }} + {{? $noAdditional }} + {{? $removeAdditional }} + delete {{=$data}}[{{=$key}}]; + {{??}} + {{=$nextValid}} = false; + {{ + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalProperties'; + }} + {{# def.error:'additionalProperties' }} + {{ $errSchemaPath = $currErrSchemaPath; }} + {{? $breakOnError }} break; {{?}} + {{?}} + {{?? $additionalIsSchema }} + {{? $removeAdditional == 'failing' }} + var {{=$errs}} = errors; + {{# def.setCompositeRule }} + + {{# def.validateAdditional }} + + if (!{{=$nextValid}}) { + errors = {{=$errs}}; + if (validate.errors !== null) { + if (errors) validate.errors.length = errors; + else validate.errors = null; + } + delete {{=$data}}[{{=$key}}]; + } + + {{# def.resetCompositeRule }} + {{??}} + {{# def.validateAdditional }} + {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} + {{?}} + {{?}} + {{ it.errorPath = $currentErrorPath; }} + {{?}} + {{? $someProperties }} + } + {{?}} + } + + {{# def.ifResultValid }} +{{?}} + +{{ var $useDefaults = it.opts.useDefaults && !it.compositeRule; }} + +{{? $schemaKeys.length }} + {{~ $schemaKeys:$propertyKey }} + {{ var $sch = $schema[$propertyKey]; }} + + {{? {{# def.nonEmptySchema:$sch}} }} + {{ + var $prop = it.util.getProperty($propertyKey) + , $passData = $data + $prop + , $hasDefault = $useDefaults && $sch.default !== undefined; + $it.schema = $sch; + $it.schemaPath = $schemaPath + $prop; + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); + $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); + $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); + }} + + {{# def.generateSubschemaCode }} + + {{? {{# def.willOptimize }} }} + {{ + $code = {{# def._optimizeValidate }}; + var $useData = $passData; + }} + {{??}} + {{ var $useData = $nextData; }} + var {{=$nextData}} = {{=$passData}}; + {{?}} + + {{? $hasDefault }} + {{= $code }} + {{??}} + {{? $requiredHash && $requiredHash[$propertyKey] }} + if ({{=$useData}} === undefined) { + {{=$nextValid}} = false; + {{ + var $currentErrorPath = it.errorPath + , $currErrSchemaPath = $errSchemaPath + , $missingProperty = it.util.escapeQuotes($propertyKey); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + $errSchemaPath = it.errSchemaPath + '/required'; + }} + {{# def.error:'required' }} + {{ $errSchemaPath = $currErrSchemaPath; }} + {{ it.errorPath = $currentErrorPath; }} + } else { + {{??}} + {{? $breakOnError }} + if ({{=$useData}} === undefined) { + {{=$nextValid}} = true; + } else { + {{??}} + if ({{=$useData}} !== undefined) { + {{?}} + {{?}} + + {{= $code }} + } + {{?}} {{ /* $hasDefault */ }} + {{?}} {{ /* def.nonEmptySchema */ }} + + {{# def.ifResultValid }} + {{~}} +{{?}} + +{{~ $pPropertyKeys:$pProperty }} + {{ var $sch = $pProperties[$pProperty]; }} + + {{? {{# def.nonEmptySchema:$sch}} }} + {{ + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); + $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + + it.util.escapeFragment($pProperty); + }} + + for (var {{=$key}} in {{=$data}}) { + {{# def.checkOwnProperty }} + if ({{= it.usePattern($pProperty) }}.test({{=$key}})) { + {{ + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + + {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} + } + {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} + } + + {{# def.ifResultValid }} + {{?}} {{ /* def.nonEmptySchema */ }} +{{~}} + + +{{? it.opts.v5 }} + {{~ $pgPropertyKeys:$pgProperty }} + {{ + var $pgSchema = $pgProperties[$pgProperty] + , $sch = $pgSchema.schema; + }} + + {{? {{# def.nonEmptySchema:$sch}} }} + {{ + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema'; + $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + + it.util.escapeFragment($pgProperty) + + '/schema'; + }} + + var pgPropCount{{=$lvl}} = 0; + + for (var {{=$key}} in {{=$data}}) { + {{# def.checkOwnProperty }} + if ({{= it.usePattern($pgProperty) }}.test({{=$key}})) { + pgPropCount{{=$lvl}}++; + + {{ + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + }} + + {{# def.generateSubschemaCode }} + {{# def.optimizeValidate }} + + {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} + } + {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} + } + + {{# def.ifResultValid }} + + {{ + var $pgMin = $pgSchema.minimum + , $pgMax = $pgSchema.maximum; + }} + {{? $pgMin !== undefined || $pgMax !== undefined }} + var {{=$valid}} = true; + + {{ var $currErrSchemaPath = $errSchemaPath; }} + + {{? $pgMin !== undefined }} + {{ var $limit = $pgMin, $reason = 'minimum', $moreOrLess = 'less'; }} + {{=$valid}} = pgPropCount{{=$lvl}} >= {{=$pgMin}}; + {{ $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum'; }} + {{# def.checkError:'patternGroups' }} + {{? $pgMax !== undefined }} + else + {{?}} + {{?}} + + {{? $pgMax !== undefined }} + {{ var $limit = $pgMax, $reason = 'maximum', $moreOrLess = 'more'; }} + {{=$valid}} = pgPropCount{{=$lvl}} <= {{=$pgMax}}; + {{ $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum'; }} + {{# def.checkError:'patternGroups' }} + {{?}} + + {{ $errSchemaPath = $currErrSchemaPath; }} + + {{# def.ifValid }} + {{?}} + {{?}} {{ /* def.nonEmptySchema */ }} + {{~}} +{{?}} + + +{{? $breakOnError }} + {{= $closingBraces }} + if ({{=$errs}} == errors) { +{{?}} + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/ref.jst b/node_modules/ajv/lib/dot/ref.jst new file mode 100644 index 000000000..e8cdc4435 --- /dev/null +++ b/node_modules/ajv/lib/dot/ref.jst @@ -0,0 +1,86 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} + +{{## def._validateRef:_v: + {{? it.opts.passContext }} + {{=_v}}.call(this, + {{??}} + {{=_v}}( + {{?}} + {{=$data}}, {{# def.dataPath }}{{# def.passParentData }}, rootData) +#}} + +{{ var $async, $refCode; }} +{{? $schema == '#' || $schema == '#/' }} + {{ + if (it.isRoot) { + $async = it.async; + $refCode = 'validate'; + } else { + $async = it.root.schema.$async === true; + $refCode = 'root.refVal[0]'; + } + }} +{{??}} + {{ var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); }} + {{? $refVal === undefined }} + {{ var $message = 'can\'t resolve reference ' + $schema + ' from id ' + it.baseId; }} + {{? it.opts.missingRefs == 'fail' }} + {{ console.log($message); }} + {{# def.error:'$ref' }} + {{? $breakOnError }} if (false) { {{?}} + {{?? it.opts.missingRefs == 'ignore' }} + {{ console.log($message); }} + {{? $breakOnError }} if (true) { {{?}} + {{??}} + {{ + var $error = new Error($message); + $error.missingRef = it.resolve.url(it.baseId, $schema); + $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef)); + throw $error; + }} + {{?}} + {{?? $refVal.inline }} + {{# def.setupNextLevel }} + {{ + $it.schema = $refVal.schema; + $it.schemaPath = ''; + $it.errSchemaPath = $schema; + }} + {{ var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); }} + {{= $code }} + {{? $breakOnError}} + if ({{=$nextValid}}) { + {{?}} + {{??}} + {{ + $async = $refVal.$async === true; + $refCode = $refVal.code; + }} + {{?}} +{{?}} + +{{? $refCode }} + {{# def.beginDefOut}} + {{# def._validateRef:$refCode }} + {{# def.storeDefOut:__callValidate }} + + {{? $async }} + {{ if (!it.async) throw new Error('async schema referenced by sync schema'); }} + try { {{? $breakOnError }}var {{=$valid}} ={{?}} {{=it.yieldAwait}} {{=__callValidate}}; } + catch (e) { + if (!(e instanceof ValidationError)) throw e; + if (vErrors === null) vErrors = e.errors; + else vErrors = vErrors.concat(e.errors); + errors = vErrors.length; + } + {{? $breakOnError }} if ({{=$valid}}) { {{?}} + {{??}} + if (!{{=__callValidate}}) { + if (vErrors === null) vErrors = {{=$refCode}}.errors; + else vErrors = vErrors.concat({{=$refCode}}.errors); + errors = vErrors.length; + } {{? $breakOnError }} else { {{?}} + {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/required.jst b/node_modules/ajv/lib/dot/required.jst new file mode 100644 index 000000000..e109568f3 --- /dev/null +++ b/node_modules/ajv/lib/dot/required.jst @@ -0,0 +1,96 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.missing }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{ var $vSchema = 'schema' + $lvl; }} + +{{## def.setupLoop: + {{? !$isData }} + var {{=$vSchema}} = validate.schema{{=$schemaPath}}; + {{?}} + + {{ + var $i = 'i' + $lvl + , $propertyPath = 'schema' + $lvl + '[' + $i + ']' + , $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + }} +#}} + + +{{? !$isData }} + {{? $schema.length < it.opts.loopRequired && + it.schema.properties && Object.keys(it.schema.properties).length }} + {{ var $required = []; }} + {{~ $schema:$property }} + {{ var $propertySch = it.schema.properties[$property]; }} + {{? !($propertySch && {{# def.nonEmptySchema:$propertySch}}) }} + {{ $required[$required.length] = $property; }} + {{?}} + {{~}} + {{??}} + {{ var $required = $schema; }} + {{?}} +{{?}} + + +{{? $isData || $required.length }} + {{ + var $currentErrorPath = it.errorPath + , $loopRequired = $isData || $required.length >= it.opts.loopRequired; + }} + + {{? $breakOnError }} + var missing{{=$lvl}}; + {{? $loopRequired }} + {{# def.setupLoop }} + var {{=$valid}} = true; + + {{?$isData}}{{# def.check$dataIsArray }}{{?}} + + for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { + {{=$valid}} = {{=$data}}[{{=$vSchema}}[{{=$i}}]] !== undefined; + if (!{{=$valid}}) break; + } + + {{? $isData }} } {{?}} + + {{# def.checkError:'required' }} + else { + {{??}} + if ({{# def.checkMissingProperty:$required }}) { + {{# def.errorMissingProperty:'required' }} + } else { + {{?}} + {{??}} + {{? $loopRequired }} + {{# def.setupLoop }} + {{? $isData }} + if ({{=$vSchema}} && !Array.isArray({{=$vSchema}})) { + {{# def.addError:'required' }} + } else if ({{=$vSchema}} !== undefined) { + {{?}} + + for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { + if ({{=$data}}[{{=$vSchema}}[{{=$i}}]] === undefined) { + {{# def.addError:'required' }} + } + } + + {{? $isData }} } {{?}} + {{??}} + {{~ $required:$reqProperty }} + {{# def.allErrorsMissingProperty:'required' }} + {{~}} + {{?}} + {{?}} + + {{ it.errorPath = $currentErrorPath; }} + +{{?? $breakOnError }} + if (true) { +{{?}} diff --git a/node_modules/ajv/lib/dot/uniqueItems.jst b/node_modules/ajv/lib/dot/uniqueItems.jst new file mode 100644 index 000000000..dfc42b03b --- /dev/null +++ b/node_modules/ajv/lib/dot/uniqueItems.jst @@ -0,0 +1,38 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + + +{{? ($schema || $isData) && it.opts.uniqueItems !== false }} + {{? $isData }} + var {{=$valid}}; + if ({{=$schemaValue}} === false || {{=$schemaValue}} === undefined) + {{=$valid}} = true; + else if (typeof {{=$schemaValue}} != 'boolean') + {{=$valid}} = false; + else { + {{?}} + + var {{=$valid}} = true; + if ({{=$data}}.length > 1) { + var i = {{=$data}}.length, j; + outer: + for (;i--;) { + for (j = i; j--;) { + if (equal({{=$data}}[i], {{=$data}}[j])) { + {{=$valid}} = false; + break outer; + } + } + } + } + + {{? $isData }} } {{?}} + + if (!{{=$valid}}) { + {{# def.error:'uniqueItems' }} + } {{? $breakOnError }} else { {{?}} +{{??}} + {{? $breakOnError }} if (true) { {{?}} +{{?}} diff --git a/node_modules/ajv/lib/dot/v5/_formatLimit.jst b/node_modules/ajv/lib/dot/v5/_formatLimit.jst new file mode 100644 index 000000000..af16b88d8 --- /dev/null +++ b/node_modules/ajv/lib/dot/v5/_formatLimit.jst @@ -0,0 +1,116 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} + +var {{=$valid}} = undefined; + +{{## def.skipFormatLimit: + {{=$valid}} = true; + {{ return out; }} +#}} + +{{## def.compareFormat: + {{? $isData }} + if ({{=$schemaValue}} === undefined) {{=$valid}} = true; + else if (typeof {{=$schemaValue}} != 'string') {{=$valid}} = false; + else { + {{ $closingBraces += '}'; }} + {{?}} + + {{? $isDataFormat }} + if (!{{=$compare}}) {{=$valid}} = true; + else { + {{ $closingBraces += '}'; }} + {{?}} + + var {{=$result}} = {{=$compare}}({{=$data}}, {{# def.schemaValueQS }}); + + if ({{=$result}} === undefined) {{=$valid}} = false; +#}} + + +{{? it.opts.format === false }}{{# def.skipFormatLimit }}{{?}} + +{{ + var $schemaFormat = it.schema.format + , $isDataFormat = it.opts.v5 && $schemaFormat.$data + , $closingBraces = ''; +}} + +{{? $isDataFormat }} + {{ + var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr) + , $format = 'format' + $lvl + , $compare = 'compare' + $lvl; + }} + + var {{=$format}} = formats[{{=$schemaValueFormat}}] + , {{=$compare}} = {{=$format}} && {{=$format}}.compare; +{{??}} + {{ var $format = it.formats[$schemaFormat]; }} + {{? !($format && $format.compare) }} + {{# def.skipFormatLimit }} + {{?}} + {{ var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare'; }} +{{?}} + +{{ + var $isMax = $keyword == 'formatMaximum' + , $exclusiveKeyword = 'formatExclusive' + ($isMax ? 'Maximum' : 'Minimum') + , $schemaExcl = it.schema[$exclusiveKeyword] + , $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data + , $op = $isMax ? '<' : '>' + , $result = 'result' + $lvl; +}} + +{{# def.$data }} + + +{{? $isDataExcl }} + {{ + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) + , $exclusive = 'exclusive' + $lvl + , $opExpr = 'op' + $lvl + , $opStr = '\' + ' + $opExpr + ' + \''; + }} + var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; + {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} + + if (typeof {{=$schemaValueExcl}} != 'boolean' && {{=$schemaValueExcl}} !== undefined) { + {{=$valid}} = false; + {{ var $errorKeyword = $exclusiveKeyword; }} + {{# def.error:'_formatExclusiveLimit' }} + } + + {{# def.elseIfValid }} + + {{# def.compareFormat }} + var {{=$exclusive}} = {{=$schemaValueExcl}} === true; + + if ({{=$valid}} === undefined) { + {{=$valid}} = {{=$exclusive}} + ? {{=$result}} {{=$op}} 0 + : {{=$result}} {{=$op}}= 0; + } + + if (!{{=$valid}}) var op{{=$lvl}} = {{=$exclusive}} ? '{{=$op}}' : '{{=$op}}='; +{{??}} + {{ + var $exclusive = $schemaExcl === true + , $opStr = $op; /*used in error*/ + if (!$exclusive) $opStr += '='; + var $opExpr = '\'' + $opStr + '\''; /*used in error*/ + }} + + {{# def.compareFormat }} + + if ({{=$valid}} === undefined) + {{=$valid}} = {{=$result}} {{=$op}}{{?!$exclusive}}={{?}} 0; +{{?}} + +{{= $closingBraces }} + +if (!{{=$valid}}) { + {{ var $errorKeyword = $keyword; }} + {{# def.error:'_formatLimit' }} +} diff --git a/node_modules/ajv/lib/dot/v5/constant.jst b/node_modules/ajv/lib/dot/v5/constant.jst new file mode 100644 index 000000000..67969c1b9 --- /dev/null +++ b/node_modules/ajv/lib/dot/v5/constant.jst @@ -0,0 +1,10 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.$data }} + +{{? !$isData }} + var schema{{=$lvl}} = validate.schema{{=$schemaPath}}; +{{?}} +var {{=$valid}} = equal({{=$data}}, schema{{=$lvl}}); +{{# def.checkError:'constant' }} diff --git a/node_modules/ajv/lib/dot/v5/patternRequired.jst b/node_modules/ajv/lib/dot/v5/patternRequired.jst new file mode 100644 index 000000000..9af2cdc9d --- /dev/null +++ b/node_modules/ajv/lib/dot/v5/patternRequired.jst @@ -0,0 +1,28 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} + +{{ + var $key = 'key' + $lvl + , $matched = 'patternMatched' + $lvl + , $closingBraces = '' + , $ownProperties = it.opts.ownProperties; +}} + +var {{=$valid}} = true; +{{~ $schema:$pProperty }} + var {{=$matched}} = false; + for (var {{=$key}} in {{=$data}}) { + {{# def.checkOwnProperty }} + {{=$matched}} = {{= it.usePattern($pProperty) }}.test({{=$key}}); + if ({{=$matched}}) break; + } + + {{ var $missingPattern = it.util.escapeQuotes($pProperty); }} + if (!{{=$matched}}) { + {{=$valid}} = false; + {{# def.addError:'patternRequired' }} + } {{# def.elseIfValid }} +{{~}} + +{{= $closingBraces }} diff --git a/node_modules/ajv/lib/dot/v5/switch.jst b/node_modules/ajv/lib/dot/v5/switch.jst new file mode 100644 index 000000000..389678e34 --- /dev/null +++ b/node_modules/ajv/lib/dot/v5/switch.jst @@ -0,0 +1,73 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.setupKeyword }} +{{# def.setupNextLevel }} + + +{{## def.validateIf: + {{# def.setCompositeRule }} + {{ $it.createErrors = false; }} + {{# def._validateSwitchRule:if }} + {{ $it.createErrors = true; }} + {{# def.resetCompositeRule }} + {{=$ifPassed}} = {{=$nextValid}}; +#}} + +{{## def.validateThen: + {{? typeof $sch.then == 'boolean' }} + {{? $sch.then === false }} + {{# def.error:'switch' }} + {{?}} + var {{=$nextValid}} = {{= $sch.then }}; + {{??}} + {{# def._validateSwitchRule:then }} + {{?}} +#}} + +{{## def._validateSwitchRule:_clause: + {{ + $it.schema = $sch._clause; + $it.schemaPath = $schemaPath + '[' + $caseIndex + ']._clause'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/_clause'; + }} + {{# def.insertSubschemaCode }} +#}} + +{{## def.switchCase: + {{? $sch.if && {{# def.nonEmptySchema:$sch.if }} }} + var {{=$errs}} = errors; + {{# def.validateIf }} + if ({{=$ifPassed}}) { + {{# def.validateThen }} + } else { + {{# def.resetErrors }} + } + {{??}} + {{=$ifPassed}} = true; + {{# def.validateThen }} + {{?}} +#}} + + +{{ + var $ifPassed = 'ifPassed' + it.level + , $currentBaseId = $it.baseId + , $shouldContinue; +}} +var {{=$ifPassed}}; + +{{~ $schema:$sch:$caseIndex }} + {{? $caseIndex && !$shouldContinue }} + if (!{{=$ifPassed}}) { + {{ $closingBraces+= '}'; }} + {{?}} + + {{# def.switchCase }} + {{ $shouldContinue = $sch.continue }} +{{~}} + +{{= $closingBraces }} + +var {{=$valid}} = {{=$nextValid}}; + +{{# def.cleanUp }} diff --git a/node_modules/ajv/lib/dot/validate.jst b/node_modules/ajv/lib/dot/validate.jst new file mode 100644 index 000000000..896e0860a --- /dev/null +++ b/node_modules/ajv/lib/dot/validate.jst @@ -0,0 +1,210 @@ +{{# def.definitions }} +{{# def.errors }} +{{# def.defaults }} +{{# def.coerce }} + +{{ /** + * schema compilation (render) time: + * it = { schema, RULES, _validate, opts } + * it.validate - this template function, + * it is used recursively to generate code for subschemas + * + * runtime: + * "validate" is a variable name to which this function will be assigned + * validateRef etc. are defined in the parent scope in index.js + */ }} + +{{ var $async = it.schema.$async === true; }} + +{{? it.isTop}} + {{ + var $top = it.isTop + , $lvl = it.level = 0 + , $dataLvl = it.dataLevel = 0 + , $data = 'data'; + it.rootId = it.resolve.fullPath(it.root.schema.id); + it.baseId = it.baseId || it.rootId; + if ($async) { + it.async = true; + var $es7 = it.opts.async == 'es7'; + it.yieldAwait = $es7 ? 'await' : 'yield'; + } + delete it.isTop; + + it.dataPathArr = [undefined]; + }} + + var validate = + {{? $async }} + {{? $es7 }} + (async function + {{??}} + {{? it.opts.async == 'co*'}}co.wrap{{?}}(function* + {{?}} + {{??}} + (function + {{?}} + (data, dataPath, parentData, parentDataProperty, rootData) { + 'use strict'; + var vErrors = null; {{ /* don't edit, used in replace */ }} + var errors = 0; {{ /* don't edit, used in replace */ }} + if (rootData === undefined) rootData = data; +{{??}} + {{ + var $lvl = it.level + , $dataLvl = it.dataLevel + , $data = 'data' + ($dataLvl || ''); + + if (it.schema.id) it.baseId = it.resolve.url(it.baseId, it.schema.id); + + if ($async && !it.async) throw new Error('async schema in sync schema'); + }} + + var errs_{{=$lvl}} = errors; +{{?}} + +{{ + var $valid = 'valid' + $lvl + , $breakOnError = !it.opts.allErrors + , $closingBraces1 = '' + , $closingBraces2 = ''; + + var $errorKeyword; + var $typeSchema = it.schema.type + , $typeIsArray = Array.isArray($typeSchema); +}} + +{{## def.checkType: + {{ + var $schemaPath = it.schemaPath + '.type' + , $errSchemaPath = it.errSchemaPath + '/type' + , $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + }} + + if ({{= it.util[$method]($typeSchema, $data, true) }}) { +#}} + +{{? $typeSchema && it.opts.coerceTypes }} + {{ var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); }} + {{? $coerceToTypes }} + {{# def.checkType }} + {{# def.coerceType }} + } + {{?}} +{{?}} + +{{ var $refKeywords; }} +{{? it.schema.$ref && ($refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref')) }} + {{? it.opts.extendRefs == 'fail' }} + {{ throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '"'); }} + {{?? it.opts.extendRefs == 'ignore' }} + {{ + $refKeywords = false; + console.log('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); + }} + {{?? it.opts.extendRefs !== true }} + {{ console.log('$ref: all keywords used in schema at path "' + it.errSchemaPath + '". It will change in the next major version, see issue #260. Use option { extendRefs: true } to keep current behaviour'); }} + {{?}} +{{?}} + +{{? it.schema.$ref && !$refKeywords }} + {{= it.RULES.all.$ref.code(it, '$ref') }} + {{? $breakOnError }} + } + if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { + {{ $closingBraces2 += '}'; }} + {{?}} +{{??}} + {{~ it.RULES:$rulesGroup }} + {{? $shouldUseGroup($rulesGroup) }} + {{? $rulesGroup.type }} + if ({{= it.util.checkDataType($rulesGroup.type, $data) }}) { + {{?}} + {{? it.opts.useDefaults && !it.compositeRule }} + {{? $rulesGroup.type == 'object' && it.schema.properties }} + {{# def.defaultProperties }} + {{?? $rulesGroup.type == 'array' && Array.isArray(it.schema.items) }} + {{# def.defaultItems }} + {{?}} + {{?}} + {{~ $rulesGroup.rules:$rule }} + {{? $shouldUseRule($rule) }} + {{= $rule.code(it, $rule.keyword) }} + {{? $breakOnError }} + {{ $closingBraces1 += '}'; }} + {{?}} + {{?}} + {{~}} + {{? $breakOnError }} + {{= $closingBraces1 }} + {{ $closingBraces1 = ''; }} + {{?}} + {{? $rulesGroup.type }} + } + {{? $typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes }} + {{ var $typeChecked = true; }} + else { + {{ + var $schemaPath = it.schemaPath + '.type' + , $errSchemaPath = it.errSchemaPath + '/type'; + }} + {{# def.error:'type' }} + } + {{?}} + {{?}} + + {{? $breakOnError }} + if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { + {{ $closingBraces2 += '}'; }} + {{?}} + {{?}} + {{~}} +{{?}} + +{{? $typeSchema && !$typeChecked && !$coerceToTypes }} + {{# def.checkType }} + {{# def.error:'type' }} + } +{{?}} + +{{? $breakOnError }} {{= $closingBraces2 }} {{?}} + +{{? $top }} + {{? $async }} + if (errors === 0) return true; {{ /* don't edit, used in replace */ }} + else throw new ValidationError(vErrors); {{ /* don't edit, used in replace */ }} + {{??}} + validate.errors = vErrors; {{ /* don't edit, used in replace */ }} + return errors === 0; {{ /* don't edit, used in replace */ }} + {{?}} + }); + + return validate; +{{??}} + var {{=$valid}} = errors === errs_{{=$lvl}}; +{{?}} + +{{# def.cleanUp }} + +{{? $top && $breakOnError }} + {{# def.cleanUpVarErrors }} +{{?}} + +{{ + function $shouldUseGroup($rulesGroup) { + for (var i=0; i < $rulesGroup.rules.length; i++) + if ($shouldUseRule($rulesGroup.rules[i])) + return true; + } + + function $shouldUseRule($rule) { + return it.schema[$rule.keyword] !== undefined || + ( $rule.keyword == 'properties' && + ( it.schema.additionalProperties === false || + typeof it.schema.additionalProperties == 'object' + || ( it.schema.patternProperties && + Object.keys(it.schema.patternProperties).length ) + || ( it.opts.v5 && it.schema.patternGroups && + Object.keys(it.schema.patternGroups).length ))); + } +}} diff --git a/node_modules/ajv/lib/dotjs/README.md b/node_modules/ajv/lib/dotjs/README.md new file mode 100644 index 000000000..4d994846c --- /dev/null +++ b/node_modules/ajv/lib/dotjs/README.md @@ -0,0 +1,3 @@ +These files are compiled dot templates from dot folder. + +Do NOT edit them directly, edit the templates and run `npm run build` from main ajv folder. diff --git a/node_modules/ajv/lib/dotjs/_formatLimit.js b/node_modules/ajv/lib/dotjs/_formatLimit.js new file mode 100644 index 000000000..996e1f2c2 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_formatLimit.js @@ -0,0 +1,176 @@ +'use strict'; +module.exports = function generate__formatLimit(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + out += 'var ' + ($valid) + ' = undefined;'; + if (it.opts.format === false) { + out += ' ' + ($valid) + ' = true; '; + return out; + } + var $schemaFormat = it.schema.format, + $isDataFormat = it.opts.v5 && $schemaFormat.$data, + $closingBraces = ''; + if ($isDataFormat) { + var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr), + $format = 'format' + $lvl, + $compare = 'compare' + $lvl; + out += ' var ' + ($format) + ' = formats[' + ($schemaValueFormat) + '] , ' + ($compare) + ' = ' + ($format) + ' && ' + ($format) + '.compare;'; + } else { + var $format = it.formats[$schemaFormat]; + if (!($format && $format.compare)) { + out += ' ' + ($valid) + ' = true; '; + return out; + } + var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare'; + } + var $isMax = $keyword == 'formatMaximum', + $exclusiveKeyword = 'formatExclusive' + ($isMax ? 'Maximum' : 'Minimum'), + $schemaExcl = it.schema[$exclusiveKeyword], + $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data, + $op = $isMax ? '<' : '>', + $result = 'result' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if ($isDataExcl) { + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), + $exclusive = 'exclusive' + $lvl, + $opExpr = 'op' + $lvl, + $opStr = '\' + ' + $opExpr + ' + \''; + out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; + $schemaValueExcl = 'schemaExcl' + $lvl; + out += ' if (typeof ' + ($schemaValueExcl) + ' != \'boolean\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; '; + var $errorKeyword = $exclusiveKeyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_formatExclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + $closingBraces += '}'; + out += ' else { '; + } + if ($isData) { + out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'string\') ' + ($valid) + ' = false; else { '; + $closingBraces += '}'; + } + if ($isDataFormat) { + out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { '; + $closingBraces += '}'; + } + out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var ' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = ' + ($exclusive) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';'; + } else { + var $exclusive = $schemaExcl === true, + $opStr = $op; + if (!$exclusive) $opStr += '='; + var $opExpr = '\'' + $opStr + '\''; + if ($isData) { + out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'string\') ' + ($valid) + ' = false; else { '; + $closingBraces += '}'; + } + if ($isDataFormat) { + out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { '; + $closingBraces += '}'; + } + out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op); + if (!$exclusive) { + out += '='; + } + out += ' 0;'; + } + out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_formatLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , exclusive: ' + ($exclusive) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be ' + ($opStr) + ' "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '}'; + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limit.js b/node_modules/ajv/lib/dotjs/_limit.js new file mode 100644 index 000000000..4d92024af --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limit.js @@ -0,0 +1,124 @@ +'use strict'; +module.exports = function generate__limit(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $isMax = $keyword == 'maximum', + $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', + $schemaExcl = it.schema[$exclusiveKeyword], + $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data, + $op = $isMax ? '<' : '>', + $notOp = $isMax ? '>' : '<'; + if ($isDataExcl) { + var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), + $exclusive = 'exclusive' + $lvl, + $opExpr = 'op' + $lvl, + $opStr = '\' + ' + $opExpr + ' + \''; + out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; + $schemaValueExcl = 'schemaExcl' + $lvl; + out += ' var exclusive' + ($lvl) + '; if (typeof ' + ($schemaValueExcl) + ' != \'boolean\' && typeof ' + ($schemaValueExcl) + ' != \'undefined\') { '; + var $errorKeyword = $exclusiveKeyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else if( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ((exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ') || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\';'; + } else { + var $exclusive = $schemaExcl === true, + $opStr = $op; + if (!$exclusive) $opStr += '='; + var $opExpr = '\'' + $opStr + '\''; + out += ' if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + ' ' + ($notOp); + if ($exclusive) { + out += '='; + } + out += ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') {'; + } + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be ' + ($opStr) + ' '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schema) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limitItems.js b/node_modules/ajv/lib/dotjs/_limitItems.js new file mode 100644 index 000000000..6a843627b --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limitItems.js @@ -0,0 +1,76 @@ +'use strict'; +module.exports = function generate__limitItems(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxItems' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxItems') { + out += 'more'; + } else { + out += 'less'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' items\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limitLength.js b/node_modules/ajv/lib/dotjs/_limitLength.js new file mode 100644 index 000000000..e378104df --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limitLength.js @@ -0,0 +1,81 @@ +'use strict'; +module.exports = function generate__limitLength(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxLength' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + if (it.opts.unicode === false) { + out += ' ' + ($data) + '.length '; + } else { + out += ' ucs2length(' + ($data) + ') '; + } + out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be '; + if ($keyword == 'maxLength') { + out += 'longer'; + } else { + out += 'shorter'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' characters\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/_limitProperties.js b/node_modules/ajv/lib/dotjs/_limitProperties.js new file mode 100644 index 000000000..74c085184 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/_limitProperties.js @@ -0,0 +1,76 @@ +'use strict'; +module.exports = function generate__limitProperties(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $op = $keyword == 'maxProperties' ? '>' : '<'; + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; + } + out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; + var $errorKeyword = $keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have '; + if ($keyword == 'maxProperties') { + out += 'more'; + } else { + out += 'less'; + } + out += ' than '; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + ($schema); + } + out += ' properties\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/allOf.js b/node_modules/ajv/lib/dotjs/allOf.js new file mode 100644 index 000000000..0063ecf1a --- /dev/null +++ b/node_modules/ajv/lib/dotjs/allOf.js @@ -0,0 +1,43 @@ +'use strict'; +module.exports = function generate_allOf(it, $keyword) { + var out = ' '; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $currentBaseId = $it.baseId, + $allSchemasEmpty = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $allSchemasEmpty = false; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if ($breakOnError) { + if ($allSchemasEmpty) { + out += ' if (true) { '; + } else { + out += ' ' + ($closingBraces.slice(0, -1)) + ' '; + } + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/anyOf.js b/node_modules/ajv/lib/dotjs/anyOf.js new file mode 100644 index 000000000..c95f8ff9a --- /dev/null +++ b/node_modules/ajv/lib/dotjs/anyOf.js @@ -0,0 +1,65 @@ +'use strict'; +module.exports = function generate_anyOf(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $noEmptySchema = $schema.every(function($sch) { + return it.util.schemaHasRules($sch, it.RULES.all); + }); + if ($noEmptySchema) { + var $currentBaseId = $it.baseId; + out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; + $closingBraces += '}'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should match some schema in anyOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + out = it.util.cleanUpCode(out); + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/constant.js b/node_modules/ajv/lib/dotjs/constant.js new file mode 100644 index 000000000..2a3e147ff --- /dev/null +++ b/node_modules/ajv/lib/dotjs/constant.js @@ -0,0 +1,52 @@ +'use strict'; +module.exports = function generate_constant(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (!$isData) { + out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; + } + out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('constant') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should be equal to constant\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + return out; +} diff --git a/node_modules/ajv/lib/dotjs/custom.js b/node_modules/ajv/lib/dotjs/custom.js new file mode 100644 index 000000000..cbd481ccf --- /dev/null +++ b/node_modules/ajv/lib/dotjs/custom.js @@ -0,0 +1,220 @@ +'use strict'; +module.exports = function generate_custom(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $errorKeyword; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $rule = this, + $definition = 'definition' + $lvl, + $rDef = $rule.definition; + var $compile, $inline, $macro, $ruleValidate, $validateCode; + if ($isData && $rDef.$data) { + $validateCode = 'keywordValidate' + $lvl; + var $validateSchema = $rDef.validateSchema; + out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; + } else { + $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); + $schemaValue = 'validate.schema' + $schemaPath; + $validateCode = $ruleValidate.code; + $compile = $rDef.compile; + $inline = $rDef.inline; + $macro = $rDef.macro; + } + var $ruleErrs = $validateCode + '.errors', + $i = 'i' + $lvl, + $ruleErr = 'ruleErr' + $lvl, + $asyncKeyword = $rDef.async; + if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); + if (!($inline || $macro)) { + out += '' + ($ruleErrs) + ' = null;'; + } + out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; + if ($validateSchema) { + out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') {'; + } + if ($inline) { + if ($rDef.statements) { + out += ' ' + ($ruleValidate.validate) + ' '; + } else { + out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; + } + } else if ($macro) { + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + $it.schema = $ruleValidate.validate; + $it.schemaPath = ''; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($code); + } else { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + out += ' ' + ($validateCode) + '.call( '; + if (it.opts.passContext) { + out += 'this'; + } else { + out += 'self'; + } + if ($compile || $rDef.schema === false) { + out += ' , ' + ($data) + ' '; + } else { + out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; + } + out += ' , (dataPath || \'\')'; + if (it.errorPath != '""') { + out += ' + ' + (it.errorPath); + } + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; + var def_callRuleValidate = out; + out = $$outStack.pop(); + if ($rDef.errors === false) { + out += ' ' + ($valid) + ' = '; + if ($asyncKeyword) { + out += '' + (it.yieldAwait); + } + out += '' + (def_callRuleValidate) + '; '; + } else { + if ($asyncKeyword) { + $ruleErrs = 'customErrors' + $lvl; + out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = ' + (it.yieldAwait) + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; + } else { + out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; + } + } + } + if ($rDef.modifying) { + out += ' ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; + } + if ($validateSchema) { + out += ' }'; + } + if ($rDef.valid) { + if ($breakOnError) { + out += ' if (true) { '; + } + } else { + out += ' if ( '; + if ($rDef.valid === undefined) { + out += ' !'; + if ($macro) { + out += '' + ($nextValid); + } else { + out += '' + ($valid); + } + } else { + out += ' ' + (!$rDef.valid) + ' '; + } + out += ') { '; + $errorKeyword = $rule.keyword; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + var def_customError = out; + out = $$outStack.pop(); + if ($inline) { + if ($rDef.errors) { + if ($rDef.errors != 'full') { + out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' ' + ($i) + ') { '; + var $passData = $data + '[' + $i + ']'; + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); + $it.dataPathArr[$dataNxt] = $i; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) { + $it.schema = $additionalItems; + $it.schemaPath = it.schemaPath + '.additionalItems'; + $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; + out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } else if (it.util.schemaHasRules($schema, it.RULES.all)) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); + var $passData = $data + '[' + $idx + ']'; + $it.dataPathArr[$dataNxt] = $idx; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/multipleOf.js b/node_modules/ajv/lib/dotjs/multipleOf.js new file mode 100644 index 000000000..d0e43daa3 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/multipleOf.js @@ -0,0 +1,76 @@ +'use strict'; +module.exports = function generate_multipleOf(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + out += 'var division' + ($lvl) + ';if ('; + if ($isData) { + out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; + } + out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; + if (it.opts.multipleOfPrecision) { + out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; + } else { + out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; + } + out += ' ) '; + if ($isData) { + out += ' ) '; + } + out += ' ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be multiple of '; + if ($isData) { + out += '\' + ' + ($schemaValue); + } else { + out += '' + ($schema) + '\''; + } + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/not.js b/node_modules/ajv/lib/dotjs/not.js new file mode 100644 index 000000000..2cb2a4765 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/not.js @@ -0,0 +1,83 @@ +'use strict'; +module.exports = function generate_not(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + if (it.util.schemaHasRules($schema, it.RULES.all)) { + $it.schema = $schema; + $it.schemaPath = $schemaPath; + $it.errSchemaPath = $errSchemaPath; + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.createErrors = false; + var $allErrorsOption; + if ($it.opts.allErrors) { + $allErrorsOption = $it.opts.allErrors; + $it.opts.allErrors = false; + } + out += ' ' + (it.validate($it)) + ' '; + $it.createErrors = true; + if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' if (' + ($nextValid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; + if (it.opts.allErrors) { + out += ' } '; + } + } else { + out += ' var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT be valid\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + if ($breakOnError) { + out += ' if (false) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/oneOf.js b/node_modules/ajv/lib/dotjs/oneOf.js new file mode 100644 index 000000000..39f60e620 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/oneOf.js @@ -0,0 +1,76 @@ +'use strict'; +module.exports = function generate_oneOf(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false;'; + var $currentBaseId = $it.baseId; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + var arr1 = $schema; + if (arr1) { + var $sch, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $sch = arr1[$i += 1]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $it.schema = $sch; + $it.schemaPath = $schemaPath + '[' + $i + ']'; + $it.errSchemaPath = $errSchemaPath + '/' + $i; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } else { + out += ' var ' + ($nextValid) + ' = true; '; + } + if ($i) { + out += ' if (' + ($nextValid) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { '; + $closingBraces += '}'; + } + out += ' if (' + ($nextValid) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;'; + } + } + it.compositeRule = $it.compositeRule = $wasComposite; + out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; + if (it.opts.messages !== false) { + out += ' , message: \'should match exactly one schema in oneOf\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; + if (it.opts.allErrors) { + out += ' } '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/pattern.js b/node_modules/ajv/lib/dotjs/pattern.js new file mode 100644 index 000000000..5518152a8 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/pattern.js @@ -0,0 +1,74 @@ +'use strict'; +module.exports = function generate_pattern(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); + out += 'if ( '; + if ($isData) { + out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; + } + out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; + if ($isData) { + out += '' + ($schemaValue); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should match pattern "'; + if ($isData) { + out += '\' + ' + ($schemaValue) + ' + \''; + } else { + out += '' + (it.util.escapeQuotes($schema)); + } + out += '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + (it.util.toQuotedString($schema)); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += '} '; + if ($breakOnError) { + out += ' else { '; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/patternRequired.js b/node_modules/ajv/lib/dotjs/patternRequired.js new file mode 100644 index 000000000..07bf31d29 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/patternRequired.js @@ -0,0 +1,51 @@ +'use strict'; +module.exports = function generate_patternRequired(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $key = 'key' + $lvl, + $matched = 'patternMatched' + $lvl, + $closingBraces = '', + $ownProperties = it.opts.ownProperties; + out += 'var ' + ($valid) + ' = true;'; + var arr1 = $schema; + if (arr1) { + var $pProperty, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $pProperty = arr1[i1 += 1]; + out += ' var ' + ($matched) + ' = false; for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + out += ' ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } '; + var $missingPattern = it.util.escapeQuotes($pProperty); + out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('patternRequired') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingPattern: \'' + ($missingPattern) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should have property matching pattern \\\'' + ($missingPattern) + '\\\'\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; + if ($breakOnError) { + $closingBraces += '}'; + out += ' else { '; + } + } + } + out += '' + ($closingBraces); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/properties.js b/node_modules/ajv/lib/dotjs/properties.js new file mode 100644 index 000000000..32eafce6a --- /dev/null +++ b/node_modules/ajv/lib/dotjs/properties.js @@ -0,0 +1,445 @@ +'use strict'; +module.exports = function generate_properties(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $key = 'key' + $lvl, + $dataNxt = $it.dataLevel = it.dataLevel + 1, + $nextData = 'data' + $dataNxt; + var $schemaKeys = Object.keys($schema || {}), + $pProperties = it.schema.patternProperties || {}, + $pPropertyKeys = Object.keys($pProperties), + $aProperties = it.schema.additionalProperties, + $someProperties = $schemaKeys.length || $pPropertyKeys.length, + $noAdditional = $aProperties === false, + $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, + $removeAdditional = it.opts.removeAdditional, + $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, + $ownProperties = it.opts.ownProperties, + $currentBaseId = it.baseId; + var $required = it.schema.required; + if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); + if (it.opts.v5) { + var $pgProperties = it.schema.patternGroups || {}, + $pgPropertyKeys = Object.keys($pgProperties); + } + out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; + if ($checkAdditional) { + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + if ($someProperties) { + out += ' var isAdditional' + ($lvl) + ' = !(false '; + if ($schemaKeys.length) { + if ($schemaKeys.length > 5) { + out += ' || validate.schema' + ($schemaPath) + '[' + ($key) + '] '; + } else { + var arr1 = $schemaKeys; + if (arr1) { + var $propertyKey, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $propertyKey = arr1[i1 += 1]; + out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; + } + } + } + } + if ($pPropertyKeys.length) { + var arr2 = $pPropertyKeys; + if (arr2) { + var $pProperty, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + $pProperty = arr2[$i += 1]; + out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; + } + } + } + if (it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length) { + var arr3 = $pgPropertyKeys; + if (arr3) { + var $pgProperty, $i = -1, + l3 = arr3.length - 1; + while ($i < l3) { + $pgProperty = arr3[$i += 1]; + out += ' || ' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ') '; + } + } + } + out += ' ); if (isAdditional' + ($lvl) + ') { '; + } + if ($removeAdditional == 'all') { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + var $currentErrorPath = it.errorPath; + var $additionalProperty = '\' + ' + $key + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + } + if ($noAdditional) { + if ($removeAdditional) { + out += ' delete ' + ($data) + '[' + ($key) + ']; '; + } else { + out += ' ' + ($nextValid) + ' = false; '; + var $currErrSchemaPath = $errSchemaPath; + $errSchemaPath = it.errSchemaPath + '/additionalProperties'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have additional properties\' '; + } + if (it.opts.verbose) { + out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + out += ' break; '; + } + } + } else if ($additionalIsSchema) { + if ($removeAdditional == 'failing') { + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; + it.compositeRule = $it.compositeRule = $wasComposite; + } else { + $it.schema = $aProperties; + $it.schemaPath = it.schemaPath + '.additionalProperties'; + $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; + $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + } + } + it.errorPath = $currentErrorPath; + } + if ($someProperties) { + out += ' } '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + var $useDefaults = it.opts.useDefaults && !it.compositeRule; + if ($schemaKeys.length) { + var arr4 = $schemaKeys; + if (arr4) { + var $propertyKey, i4 = -1, + l4 = arr4.length - 1; + while (i4 < l4) { + $propertyKey = arr4[i4 += 1]; + var $sch = $schema[$propertyKey]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + var $prop = it.util.getProperty($propertyKey), + $passData = $data + $prop, + $hasDefault = $useDefaults && $sch.default !== undefined; + $it.schema = $sch; + $it.schemaPath = $schemaPath + $prop; + $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); + $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); + $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + $code = it.util.varReplace($code, $nextData, $passData); + var $useData = $passData; + } else { + var $useData = $nextData; + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; + } + if ($hasDefault) { + out += ' ' + ($code) + ' '; + } else { + if ($requiredHash && $requiredHash[$propertyKey]) { + out += ' if (' + ($useData) + ' === undefined) { ' + ($nextValid) + ' = false; '; + var $currentErrorPath = it.errorPath, + $currErrSchemaPath = $errSchemaPath, + $missingProperty = it.util.escapeQuotes($propertyKey); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); + } + $errSchemaPath = it.errSchemaPath + '/required'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + $errSchemaPath = $currErrSchemaPath; + it.errorPath = $currentErrorPath; + out += ' } else { '; + } else { + if ($breakOnError) { + out += ' if (' + ($useData) + ' === undefined) { ' + ($nextValid) + ' = true; } else { '; + } else { + out += ' if (' + ($useData) + ' !== undefined) { '; + } + } + out += ' ' + ($code) + ' } '; + } + } + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + var arr5 = $pPropertyKeys; + if (arr5) { + var $pProperty, i5 = -1, + l5 = arr5.length - 1; + while (i5 < l5) { + $pProperty = arr5[i5 += 1]; + var $sch = $pProperties[$pProperty]; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); + $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); + out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else ' + ($nextValid) + ' = true; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + } + } + } + if (it.opts.v5) { + var arr6 = $pgPropertyKeys; + if (arr6) { + var $pgProperty, i6 = -1, + l6 = arr6.length - 1; + while (i6 < l6) { + $pgProperty = arr6[i6 += 1]; + var $pgSchema = $pgProperties[$pgProperty], + $sch = $pgSchema.schema; + if (it.util.schemaHasRules($sch, it.RULES.all)) { + $it.schema = $sch; + $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema'; + $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema'; + out += ' var pgPropCount' + ($lvl) + ' = 0; for (var ' + ($key) + ' in ' + ($data) + ') { '; + if ($ownProperties) { + out += ' if (!Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($key) + ')) continue; '; + } + out += ' if (' + (it.usePattern($pgProperty)) + '.test(' + ($key) + ')) { pgPropCount' + ($lvl) + '++; '; + $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); + var $passData = $data + '[' + $key + ']'; + $it.dataPathArr[$dataNxt] = $key; + var $code = it.validate($it); + $it.baseId = $currentBaseId; + if (it.util.varOccurences($code, $nextData) < 2) { + out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; + } else { + out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; + } + if ($breakOnError) { + out += ' if (!' + ($nextValid) + ') break; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else ' + ($nextValid) + ' = true; '; + } + out += ' } '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + $closingBraces += '}'; + } + var $pgMin = $pgSchema.minimum, + $pgMax = $pgSchema.maximum; + if ($pgMin !== undefined || $pgMax !== undefined) { + out += ' var ' + ($valid) + ' = true; '; + var $currErrSchemaPath = $errSchemaPath; + if ($pgMin !== undefined) { + var $limit = $pgMin, + $reason = 'minimum', + $moreOrLess = 'less'; + out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; '; + $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum'; + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($pgMax !== undefined) { + out += ' else '; + } + } + if ($pgMax !== undefined) { + var $limit = $pgMax, + $reason = 'maximum', + $moreOrLess = 'more'; + out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; '; + $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum'; + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('patternGroups') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { reason: \'' + ($reason) + '\', limit: ' + ($limit) + ', pattern: \'' + (it.util.escapeQuotes($pgProperty)) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern "' + (it.util.escapeQuotes($pgProperty)) + '"\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + } + $errSchemaPath = $currErrSchemaPath; + if ($breakOnError) { + out += ' if (' + ($valid) + ') { '; + $closingBraces += '}'; + } + } + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; + } + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/ref.js b/node_modules/ajv/lib/dotjs/ref.js new file mode 100644 index 000000000..e07c70c3b --- /dev/null +++ b/node_modules/ajv/lib/dotjs/ref.js @@ -0,0 +1,119 @@ +'use strict'; +module.exports = function generate_ref(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $async, $refCode; + if ($schema == '#' || $schema == '#/') { + if (it.isRoot) { + $async = it.async; + $refCode = 'validate'; + } else { + $async = it.root.schema.$async === true; + $refCode = 'root.refVal[0]'; + } + } else { + var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); + if ($refVal === undefined) { + var $message = 'can\'t resolve reference ' + $schema + ' from id ' + it.baseId; + if (it.opts.missingRefs == 'fail') { + console.log($message); + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' '; + } + if (it.opts.verbose) { + out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + if ($breakOnError) { + out += ' if (false) { '; + } + } else if (it.opts.missingRefs == 'ignore') { + console.log($message); + if ($breakOnError) { + out += ' if (true) { '; + } + } else { + var $error = new Error($message); + $error.missingRef = it.resolve.url(it.baseId, $schema); + $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef)); + throw $error; + } + } else if ($refVal.inline) { + var $it = it.util.copy(it); + $it.level++; + var $nextValid = 'valid' + $it.level; + $it.schema = $refVal.schema; + $it.schemaPath = ''; + $it.errSchemaPath = $schema; + var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); + out += ' ' + ($code) + ' '; + if ($breakOnError) { + out += ' if (' + ($nextValid) + ') { '; + } + } else { + $async = $refVal.$async === true; + $refCode = $refVal.code; + } + } + if ($refCode) { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; + if (it.opts.passContext) { + out += ' ' + ($refCode) + '.call(this, '; + } else { + out += ' ' + ($refCode) + '( '; + } + out += ' ' + ($data) + ', (dataPath || \'\')'; + if (it.errorPath != '""') { + out += ' + ' + (it.errorPath); + } + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData) '; + var __callValidate = out; + out = $$outStack.pop(); + if ($async) { + if (!it.async) throw new Error('async schema referenced by sync schema'); + out += ' try { '; + if ($breakOnError) { + out += 'var ' + ($valid) + ' ='; + } + out += ' ' + (it.yieldAwait) + ' ' + (__callValidate) + '; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } '; + if ($breakOnError) { + out += ' if (' + ($valid) + ') { '; + } + } else { + out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } '; + if ($breakOnError) { + out += ' else { '; + } + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/required.js b/node_modules/ajv/lib/dotjs/required.js new file mode 100644 index 000000000..eb32aeae5 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/required.js @@ -0,0 +1,249 @@ +'use strict'; +module.exports = function generate_required(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + var $vSchema = 'schema' + $lvl; + if (!$isData) { + if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) { + var $required = []; + var arr1 = $schema; + if (arr1) { + var $property, i1 = -1, + l1 = arr1.length - 1; + while (i1 < l1) { + $property = arr1[i1 += 1]; + var $propertySch = it.schema.properties[$property]; + if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) { + $required[$required.length] = $property; + } + } + } + } else { + var $required = $schema; + } + } + if ($isData || $required.length) { + var $currentErrorPath = it.errorPath, + $loopRequired = $isData || $required.length >= it.opts.loopRequired; + if ($breakOnError) { + out += ' var missing' + ($lvl) + '; '; + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + out += ' var ' + ($valid) + ' = true; '; + if ($isData) { + out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined; if (!' + ($valid) + ') break; } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } else { + out += ' if ( '; + var arr2 = $required; + if (arr2) { + var _$property, $i = -1, + l2 = arr2.length - 1; + while ($i < l2) { + _$property = arr2[$i += 1]; + if ($i) { + out += ' || '; + } + var $prop = it.util.getProperty(_$property); + out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) '; + } + } + out += ') { '; + var $propertyPath = 'missing' + $lvl, + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; + } + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + } + } else { + if ($loopRequired) { + if (!$isData) { + out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; + } + var $i = 'i' + $lvl, + $propertyPath = 'schema' + $lvl + '[' + $i + ']', + $missingProperty = '\' + ' + $propertyPath + ' + \''; + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); + } + if ($isData) { + out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; + } + out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; + if ($isData) { + out += ' } '; + } + } else { + var arr3 = $required; + if (arr3) { + var $reqProperty, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $reqProperty = arr3[i3 += 1]; + var $prop = it.util.getProperty($reqProperty), + $missingProperty = it.util.escapeQuotes($reqProperty); + if (it.opts._errorDataPathProperty) { + it.errorPath = it.util.getPath($currentErrorPath, $reqProperty, it.opts.jsonPointers); + } + out += ' if (' + ($data) + ($prop) + ' === undefined) { var err = '; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \''; + if (it.opts._errorDataPathProperty) { + out += 'is a required property'; + } else { + out += 'should have required property \\\'' + ($missingProperty) + '\\\''; + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; + } + } + } + } + it.errorPath = $currentErrorPath; + } else if ($breakOnError) { + out += ' if (true) {'; + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/switch.js b/node_modules/ajv/lib/dotjs/switch.js new file mode 100644 index 000000000..18f17e487 --- /dev/null +++ b/node_modules/ajv/lib/dotjs/switch.js @@ -0,0 +1,128 @@ +'use strict'; +module.exports = function generate_switch(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $errs = 'errs__' + $lvl; + var $it = it.util.copy(it); + var $closingBraces = ''; + $it.level++; + var $nextValid = 'valid' + $it.level; + var $ifPassed = 'ifPassed' + it.level, + $currentBaseId = $it.baseId, + $shouldContinue; + out += 'var ' + ($ifPassed) + ';'; + var arr1 = $schema; + if (arr1) { + var $sch, $caseIndex = -1, + l1 = arr1.length - 1; + while ($caseIndex < l1) { + $sch = arr1[$caseIndex += 1]; + if ($caseIndex && !$shouldContinue) { + out += ' if (!' + ($ifPassed) + ') { '; + $closingBraces += '}'; + } + if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) { + out += ' var ' + ($errs) + ' = errors; '; + var $wasComposite = it.compositeRule; + it.compositeRule = $it.compositeRule = true; + $it.createErrors = false; + $it.schema = $sch.if; + $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + $it.createErrors = true; + it.compositeRule = $it.compositeRule = $wasComposite; + out += ' ' + ($ifPassed) + ' = ' + ($nextValid) + '; if (' + ($ifPassed) + ') { '; + if (typeof $sch.then == 'boolean') { + if ($sch.then === false) { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('switch') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { caseIndex: ' + ($caseIndex) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "switch" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } + out += ' var ' + ($nextValid) + ' = ' + ($sch.then) + '; '; + } else { + $it.schema = $sch.then; + $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } + out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } '; + } else { + out += ' ' + ($ifPassed) + ' = true; '; + if (typeof $sch.then == 'boolean') { + if ($sch.then === false) { + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('switch') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { caseIndex: ' + ($caseIndex) + ' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should pass "switch" keyword validation\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + } + out += ' var ' + ($nextValid) + ' = ' + ($sch.then) + '; '; + } else { + $it.schema = $sch.then; + $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then'; + $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then'; + out += ' ' + (it.validate($it)) + ' '; + $it.baseId = $currentBaseId; + } + } + $shouldContinue = $sch.continue + } + } + out += '' + ($closingBraces) + 'var ' + ($valid) + ' = ' + ($nextValid) + '; '; + out = it.util.cleanUpCode(out); + return out; +} diff --git a/node_modules/ajv/lib/dotjs/uniqueItems.js b/node_modules/ajv/lib/dotjs/uniqueItems.js new file mode 100644 index 000000000..2f27b0eea --- /dev/null +++ b/node_modules/ajv/lib/dotjs/uniqueItems.js @@ -0,0 +1,71 @@ +'use strict'; +module.exports = function generate_uniqueItems(it, $keyword) { + var out = ' '; + var $lvl = it.level; + var $dataLvl = it.dataLevel; + var $schema = it.schema[$keyword]; + var $schemaPath = it.schemaPath + it.util.getProperty($keyword); + var $errSchemaPath = it.errSchemaPath + '/' + $keyword; + var $breakOnError = !it.opts.allErrors; + var $data = 'data' + ($dataLvl || ''); + var $valid = 'valid' + $lvl; + var $isData = it.opts.v5 && $schema && $schema.$data, + $schemaValue; + if ($isData) { + out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; + $schemaValue = 'schema' + $lvl; + } else { + $schemaValue = $schema; + } + if (($schema || $isData) && it.opts.uniqueItems !== false) { + if ($isData) { + out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; + } + out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } '; + if ($isData) { + out += ' } '; + } + out += ' if (!' + ($valid) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; + if (it.opts.messages !== false) { + out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; + } + if (it.opts.verbose) { + out += ' , schema: '; + if ($isData) { + out += 'validate.schema' + ($schemaPath); + } else { + out += '' + ($schema); + } + out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + if ($breakOnError) { + out += ' else { '; + } + } else { + if ($breakOnError) { + out += ' if (true) { '; + } + } + return out; +} diff --git a/node_modules/ajv/lib/dotjs/validate.js b/node_modules/ajv/lib/dotjs/validate.js new file mode 100644 index 000000000..0c4112e1d --- /dev/null +++ b/node_modules/ajv/lib/dotjs/validate.js @@ -0,0 +1,375 @@ +'use strict'; +module.exports = function generate_validate(it, $keyword) { + var out = ''; + var $async = it.schema.$async === true; + if (it.isTop) { + var $top = it.isTop, + $lvl = it.level = 0, + $dataLvl = it.dataLevel = 0, + $data = 'data'; + it.rootId = it.resolve.fullPath(it.root.schema.id); + it.baseId = it.baseId || it.rootId; + if ($async) { + it.async = true; + var $es7 = it.opts.async == 'es7'; + it.yieldAwait = $es7 ? 'await' : 'yield'; + } + delete it.isTop; + it.dataPathArr = [undefined]; + out += ' var validate = '; + if ($async) { + if ($es7) { + out += ' (async function '; + } else { + if (it.opts.async == 'co*') { + out += 'co.wrap'; + } + out += '(function* '; + } + } else { + out += ' (function '; + } + out += ' (data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; var vErrors = null; '; + out += ' var errors = 0; '; + out += ' if (rootData === undefined) rootData = data;'; + } else { + var $lvl = it.level, + $dataLvl = it.dataLevel, + $data = 'data' + ($dataLvl || ''); + if (it.schema.id) it.baseId = it.resolve.url(it.baseId, it.schema.id); + if ($async && !it.async) throw new Error('async schema in sync schema'); + out += ' var errs_' + ($lvl) + ' = errors;'; + } + var $valid = 'valid' + $lvl, + $breakOnError = !it.opts.allErrors, + $closingBraces1 = '', + $closingBraces2 = ''; + var $typeSchema = it.schema.type, + $typeIsArray = Array.isArray($typeSchema); + if ($typeSchema && it.opts.coerceTypes) { + var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); + if ($coerceToTypes) { + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type', + $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; + var $dataType = 'dataType' + $lvl, + $coerced = 'coerced' + $lvl; + out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; + if (it.opts.coerceTypes == 'array') { + out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; + } + out += ' var ' + ($coerced) + ' = undefined; '; + var $bracesCoercion = ''; + var arr1 = $coerceToTypes; + if (arr1) { + var $type, $i = -1, + l1 = arr1.length - 1; + while ($i < l1) { + $type = arr1[$i += 1]; + if ($i) { + out += ' if (' + ($coerced) + ' === undefined) { '; + $bracesCoercion += '}'; + } + if (it.opts.coerceTypes == 'array' && $type != 'array') { + out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; + } + if ($type == 'string') { + out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; + } else if ($type == 'number' || $type == 'integer') { + out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; + if ($type == 'integer') { + out += ' && !(' + ($data) + ' % 1)'; + } + out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; + } else if ($type == 'boolean') { + out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; + } else if ($type == 'null') { + out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; + } else if (it.opts.coerceTypes == 'array' && $type == 'array') { + out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; + } + } + } + out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } else { '; + var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', + $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; + out += ' ' + ($data) + ' = ' + ($coerced) + '; '; + if (!$dataLvl) { + out += 'if (' + ($parentData) + ' !== undefined)'; + } + out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } } '; + } + } + var $refKeywords; + if (it.schema.$ref && ($refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'))) { + if (it.opts.extendRefs == 'fail') { + throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '"'); + } else if (it.opts.extendRefs == 'ignore') { + $refKeywords = false; + console.log('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); + } else if (it.opts.extendRefs !== true) { + console.log('$ref: all keywords used in schema at path "' + it.errSchemaPath + '". It will change in the next major version, see issue #260. Use option { extendRefs: true } to keep current behaviour'); + } + } + if (it.schema.$ref && !$refKeywords) { + out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; + if ($breakOnError) { + out += ' } if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } else { + var arr2 = it.RULES; + if (arr2) { + var $rulesGroup, i2 = -1, + l2 = arr2.length - 1; + while (i2 < l2) { + $rulesGroup = arr2[i2 += 1]; + if ($shouldUseGroup($rulesGroup)) { + if ($rulesGroup.type) { + out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; + } + if (it.opts.useDefaults && !it.compositeRule) { + if ($rulesGroup.type == 'object' && it.schema.properties) { + var $schema = it.schema.properties, + $schemaKeys = Object.keys($schema); + var arr3 = $schemaKeys; + if (arr3) { + var $propertyKey, i3 = -1, + l3 = arr3.length - 1; + while (i3 < l3) { + $propertyKey = arr3[i3 += 1]; + var $sch = $schema[$propertyKey]; + if ($sch.default !== undefined) { + var $passData = $data + it.util.getProperty($propertyKey); + out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { + var arr4 = it.schema.items; + if (arr4) { + var $sch, $i = -1, + l4 = arr4.length - 1; + while ($i < l4) { + $sch = arr4[$i += 1]; + if ($sch.default !== undefined) { + var $passData = $data + '[' + $i + ']'; + out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; + if (it.opts.useDefaults == 'shared') { + out += ' ' + (it.useDefault($sch.default)) + ' '; + } else { + out += ' ' + (JSON.stringify($sch.default)) + ' '; + } + out += '; '; + } + } + } + } + } + var arr5 = $rulesGroup.rules; + if (arr5) { + var $rule, i5 = -1, + l5 = arr5.length - 1; + while (i5 < l5) { + $rule = arr5[i5 += 1]; + if ($shouldUseRule($rule)) { + out += ' ' + ($rule.code(it, $rule.keyword)) + ' '; + if ($breakOnError) { + $closingBraces1 += '}'; + } + } + } + } + if ($breakOnError) { + out += ' ' + ($closingBraces1) + ' '; + $closingBraces1 = ''; + } + if ($rulesGroup.type) { + out += ' } '; + if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { + var $typeChecked = true; + out += ' else { '; + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type'; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' } '; + } + } + if ($breakOnError) { + out += ' if (errors === '; + if ($top) { + out += '0'; + } else { + out += 'errs_' + ($lvl); + } + out += ') { '; + $closingBraces2 += '}'; + } + } + } + } + } + if ($typeSchema && !$typeChecked && !$coerceToTypes) { + var $schemaPath = it.schemaPath + '.type', + $errSchemaPath = it.errSchemaPath + '/type', + $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; + out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; + var $$outStack = $$outStack || []; + $$outStack.push(out); + out = ''; /* istanbul ignore else */ + if (it.createErrors !== false) { + out += ' { keyword: \'' + ('type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' } '; + if (it.opts.messages !== false) { + out += ' , message: \'should be '; + if ($typeIsArray) { + out += '' + ($typeSchema.join(",")); + } else { + out += '' + ($typeSchema); + } + out += '\' '; + } + if (it.opts.verbose) { + out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; + } + out += ' } '; + } else { + out += ' {} '; + } + var __err = out; + out = $$outStack.pop(); + if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ + if (it.async) { + out += ' throw new ValidationError([' + (__err) + ']); '; + } else { + out += ' validate.errors = [' + (__err) + ']; return false; '; + } + } else { + out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; + } + out += ' }'; + } + if ($breakOnError) { + out += ' ' + ($closingBraces2) + ' '; + } + if ($top) { + if ($async) { + out += ' if (errors === 0) return true; '; + out += ' else throw new ValidationError(vErrors); '; + } else { + out += ' validate.errors = vErrors; '; + out += ' return errors === 0; '; + } + out += ' }); return validate;'; + } else { + out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; + } + out = it.util.cleanUpCode(out); + if ($top && $breakOnError) { + out = it.util.cleanUpVarErrors(out, $async); + } + + function $shouldUseGroup($rulesGroup) { + for (var i = 0; i < $rulesGroup.rules.length; i++) + if ($shouldUseRule($rulesGroup.rules[i])) return true; + } + + function $shouldUseRule($rule) { + return it.schema[$rule.keyword] !== undefined || ($rule.keyword == 'properties' && (it.schema.additionalProperties === false || typeof it.schema.additionalProperties == 'object' || (it.schema.patternProperties && Object.keys(it.schema.patternProperties).length) || (it.opts.v5 && it.schema.patternGroups && Object.keys(it.schema.patternGroups).length))); + } + return out; +} diff --git a/node_modules/ajv/lib/keyword.js b/node_modules/ajv/lib/keyword.js new file mode 100644 index 000000000..1c9cccfe6 --- /dev/null +++ b/node_modules/ajv/lib/keyword.js @@ -0,0 +1,129 @@ +'use strict'; + +var IDENTIFIER = /^[a-z_$][a-z0-9_$\-]*$/i; +var customRuleCode = require('./dotjs/custom'); + +module.exports = { + add: addKeyword, + get: getKeyword, + remove: removeKeyword +}; + +/** + * Define custom keyword + * @this Ajv + * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). + * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. + */ +function addKeyword(keyword, definition) { + /* jshint validthis: true */ + /* eslint no-shadow: 0 */ + var RULES = this.RULES; + + if (RULES.keywords[keyword]) + throw new Error('Keyword ' + keyword + ' is already defined'); + + if (!IDENTIFIER.test(keyword)) + throw new Error('Keyword ' + keyword + ' is not a valid identifier'); + + if (definition) { + if (definition.macro && definition.valid !== undefined) + throw new Error('"valid" option cannot be used with macro keywords'); + + var dataType = definition.type; + if (Array.isArray(dataType)) { + var i, len = dataType.length; + for (i=0; i=4\" eslint lib/*.js lib/compile/*.js spec scripts", + "test-spec": "mocha spec/*.spec.js -R spec", + "test-fast": "AJV_FAST_TEST=true npm run test-spec", + "test-debug": "mocha spec/*.spec.js --debug-brk -R spec", + "test-cov": "nyc npm run test-spec", + "test-ts": "tsc --target ES5 --noImplicitAny lib/ajv.d.ts", + "bundle": "node ./scripts/bundle.js . Ajv pure_getters", + "bundle-regenerator": "node ./scripts/bundle.js regenerator", + "bundle-nodent": "node ./scripts/bundle.js nodent", + "bundle-all": "del-cli dist && npm run bundle && npm run bundle-regenerator && npm run bundle-nodent", + "bundle-beautify": "node ./scripts/bundle.js js-beautify", + "build": "del-cli lib/dotjs/*.js && node scripts/compile-dots.js", + "test-karma": "karma start --single-run --browsers PhantomJS", + "test-browser": "del-cli .browser && npm run bundle-all && scripts/prepare-tests && npm run test-karma", + "test": "npm run jshint && npm run eslint && npm run test-ts && npm run build && npm run test-cov && if-node-version 4 npm run test-browser", + "prepublish": "npm run build && npm run bundle-all", + "watch": "watch 'npm run build' ./lib/dot" + }, + "nyc": { + "exclude": [ + "**/spec/**", + "node_modules" + ], + "reporter": [ + "lcov", + "text-summary" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/epoberezkin/ajv.git" + }, + "keywords": [ + "JSON", + "schema", + "validator", + "validation", + "jsonschema", + "json-schema", + "json-schema-validator", + "json-schema-validation" + ], + "author": "Evgeny Poberezkin", + "license": "MIT", + "bugs": { + "url": "https://github.com/epoberezkin/ajv/issues" + }, + "homepage": "https://github.com/epoberezkin/ajv", + "tonicExampleFilename": ".tonic_example.js", + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + }, + "devDependencies": { + "bluebird": "^3.1.5", + "brfs": "^1.4.3", + "browserify": "^14.1.0", + "chai": "^3.5.0", + "coveralls": "^2.11.4", + "del-cli": "^0.2.1", + "dot": "^1.0.3", + "eslint": "^3.2.2", + "gh-pages-generator": "^0.2.0", + "glob": "^7.0.0", + "if-node-version": "^1.0.0", + "js-beautify": "^1.5.6", + "jshint": "^2.8.0", + "json-schema-test": "^1.1.1", + "karma": "^1.0.0", + "karma-chrome-launcher": "^2.0.0", + "karma-mocha": "^1.1.1", + "karma-phantomjs-launcher": "^1.0.0", + "karma-sauce-launcher": "^1.1.0", + "mocha": "^3.0.0", + "nodent": "^3.0.17", + "nyc": "^10.0.0", + "phantomjs-prebuilt": "^2.1.4", + "pre-commit": "^1.1.1", + "regenerator": "0.9.7", + "require-globify": "^1.3.0", + "typescript": "^2.0.3", + "uglify-js": "^2.6.1", + "watch": "^1.0.0" + } +} diff --git a/node_modules/ajv/scripts/.eslintrc.yml b/node_modules/ajv/scripts/.eslintrc.yml new file mode 100644 index 000000000..493d7d312 --- /dev/null +++ b/node_modules/ajv/scripts/.eslintrc.yml @@ -0,0 +1,3 @@ +rules: + no-console: 0 + no-empty: [2, allowEmptyCatch: true] diff --git a/node_modules/ajv/scripts/bundle.js b/node_modules/ajv/scripts/bundle.js new file mode 100644 index 000000000..b3a9890c5 --- /dev/null +++ b/node_modules/ajv/scripts/bundle.js @@ -0,0 +1,54 @@ +'use strict'; + +var fs = require('fs') + , path = require('path') + , browserify = require('browserify') + , uglify = require('uglify-js'); + +var pkg = process.argv[2] + , standalone = process.argv[3] + , compress = process.argv[4]; + +var packageDir = path.join(__dirname, '..'); +if (pkg != '.') packageDir = path.join(packageDir, 'node_modules', pkg); + +var json = require(path.join(packageDir, 'package.json')); + +var distDir = path.join(__dirname, '..', 'dist'); +if (!fs.existsSync(distDir)) fs.mkdirSync(distDir); + +var bOpts = {}; +if (standalone) bOpts.standalone = standalone; + +browserify(bOpts) +.require(path.join(packageDir, json.main), {expose: json.name}) +.bundle(function (err, buf) { + if (err) { + console.error('browserify error:', err); + process.exit(1); + } + + var outputFile = path.join(distDir, json.name); + var outputBundle = outputFile + '.bundle.js'; + fs.writeFileSync(outputBundle, buf); + var uglifyOpts = { + warnings: true, + compress: {}, + output: { + preamble: '/* ' + json.name + ' ' + json.version + ': ' + json.description + ' */' + } + }; + if (compress) { + var compressOpts = compress.split(','); + for (var i=0; i]+ajv_logo[^>]+>//" index.md + git config user.email "$GIT_USER_EMAIL" + git config user.name "$GIT_USER_NAME" + git add . + git commit -am "updated by travis build #$TRAVIS_BUILD_NUMBER" + git push --quiet origin gh-pages > /dev/null 2>&1 + } +fi diff --git a/node_modules/ambi/HISTORY.md b/node_modules/ambi/HISTORY.md new file mode 100755 index 000000000..c87cc04f8 --- /dev/null +++ b/node_modules/ambi/HISTORY.md @@ -0,0 +1,78 @@ +# History + +## v3.2.0 2018 December 7 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.1.1 2018 September 3 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.1.0 2018 August 16 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.0.0 2018 July 13 + +- Removed `[fireMethod, instrospectionMethod]` for support of [unbounded](https://github.com/bevry/unbounded) +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v2.5.0 2016 May 14 + +- No code changes in this release, just updated packaging +- Now uses [Editions](https://editions.bevry.me) instead of [ESNextGuardian](https://github.com/bevry/esnextguardian) +- Update dependencies + +## v2.4.0 2015 December 9 + +- Dropped Node 0.10 support, minimum node version supported is now 0.12 +- Updated dependencies + +## v2.3.0 2015 September 5 + +- Moved from CoffeeScript to ES6+ +- Removed `cyclic.js` as it should no longer be needed + +## v2.2.0 2013 May 7 + +- We no longer send the completion callback to functions executing synchronously +- We now support optional arguments for functions executing asynchronously + +## v2.1.6 2013 November 1 + +- Dropped component.io and bower support, just use ender or browserify + +## v2.1.5 2013 October 27 + +- Re-packaged + +## v2.1.4 2013 September 18 + +- Fixed cyclic dependency problem on windows (since v2.1.3) +- Added bower support + +## v2.1.3 2013 September 18 + +- Attempt at fixing circular dependency infinite loop (since v2.1.2) + +## v2.1.2 2013 September 18 + +- Added component.io support + +## v2.1.1 2013 August 19 + +- Republish with older verson of joe dev dependency to try and stop cyclic errors + +## v2.1.0 2013 August 19 + +- will now always return `null` for consistency +- as return values are only possible with synchronous methods +- will now ignore returned errors on asynchronous functions +- asynchronous errors must now give the error via the completion callback +- this is to avoid the possibility of the completion callback being called twice (once for the returned error via ambi, once via your application) +- will now ignore thown errors +- this was determined to be outside the scope of ambi, if you want this functionality use the more full featured [taskgroup package](http://npmjs.org/package/taskgroup) + +## v2.0.0 2013 March 27 + +- Split away from [bal-util](https://github.com/balupton/bal-util) diff --git a/node_modules/ambi/LICENSE.md b/node_modules/ambi/LICENSE.md new file mode 100644 index 000000000..f616c0a06 --- /dev/null +++ b/node_modules/ambi/LICENSE.md @@ -0,0 +1,24 @@ + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + +

MIT License

+ +
+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.
+
+ + diff --git a/node_modules/ambi/README.md b/node_modules/ambi/README.md new file mode 100755 index 000000000..050693303 --- /dev/null +++ b/node_modules/ambi/README.md @@ -0,0 +1,183 @@ + + +

ambi

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+Patreon donate button +Flattr donate button +Liberapay donate button +Thanks App donate button +Boost Lab donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Execute a function ambidextrously (normalizes the differences between synchronous and asynchronous functions). Useful for treating synchronous functions as asynchronous functions (like supporting both synchronous and asynchronous event definitions automatically). + + + + + + +

Install

+ +

NPM

    +
  • Install: npm install --save ambi
  • +
  • Module: require('ambi')
+ +

Browserify

    +
  • Install: npm install --save ambi
  • +
  • Module: require('ambi')
  • +
  • CDN URL: //wzrd.in/bundle/ambi@3.2.0
+ +

Ender

    +
  • Install: ender add ambi
  • +
  • Module: require('ambi')
+ +

Editions

+ +

This package is published with the following editions:

+ +
  • ambi aliases ambi/index.js which uses Editions to automatically select the correct edition for the consumers environment
  • +
  • ambi/source/index.js is esnext source code with require for modules
  • +
  • ambi/edition-browsers/index.js is esnext compiled for browsers with require for modules
  • +
  • ambi/edition-node-0.8/index.js is esnext compiled for node.js 0.8 with require for modules
+ + + + +## Usage + +### Example + +``` javascript +// Import +const ambi = require('ambi') +let result = null + +// Sample methods +function syncMethod (x, y) { + return x * y +} +function asyncMethod (x, y, next) { + return setTimeout(function () { + next(null, x * y) + }, 0) +} + +// Call the synchronous function asynchronously +// ambi adds support for this asynchronous callback automatically +result = ambi(syncMethod, 5, 2, function (err, result) { + console.log(err, result) // null, 10 +}) +console.log(result) // 10 - just like normal + +// Call the asynchronous function asynchronously +// ambi doesn't do anything special here +result = ambi(asyncMethod, 5, 2, function (err, result) { + console.log(err, result) // null, 10 +}) +console.log(result) // setTimeout - just like normal +``` + + + +### Notes + +- Ambi accepts the arguments `(method, ...args)` + - `method` is the function to execute + - `...args` is the arguments to send to the method + - the last argument is expected to be the completion callback + - the completion callback is optional, but if defined, is expected to have the signature of `(err, ...results)` +- If the method has equal or more arguments than ambi received, then we assume it is an asynchronous method and let it handle calling of the completion callback itself +- If the method has less arguments than ambi received, then we assume it is a synchronous method and we'll call the completion callback ourselves + - If the synchronous method throws an error or returns an error, we'll try to call the completion callback with a single `err` argument + - If the synchronous method executes without error, we'll try to call the completion callback with a `err` argument equal to null, and a `result` argument equal to the returned result of the synchronous method + + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Contribute

+ +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Thanks App donate button +Boost Lab donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/ambi/edition-browsers/index.js b/node_modules/ambi/edition-browsers/index.js new file mode 100755 index 000000000..e7da7f8df --- /dev/null +++ b/node_modules/ambi/edition-browsers/index.js @@ -0,0 +1,102 @@ +'use strict'; // Import + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +var typeChecker = require('typechecker'); // Define + + +module.exports = function ambi(method) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // Extract the preceeding arguments and the completion callback + var simpleArguments = args.slice(0, -1); + var completionCallback = args.slice(-1)[0]; // Check the completion callback is actually a function + + if (!typeChecker.isFunction(completionCallback)) { + throw new Error('ambi was called without a completion callback'); + } + /* + Different ways functions can be called: + ambi(function(a,next){return next()}, a, next) + > VALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (a, next) + ambi(function(a,next){return next()}, next) + > VALID: execute asynchronously + > given arguments are LESS than the accepted arguments + > method will be fired with (undefined, next) + ambi(function(a){}, a, next) + > VALID: execute synchronously + > given arguments are MORE than expected arguments + > method will be fired with (a) + ambi(function(a){}, next) + > INVALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (next) + > if they want to use optional args, the function must accept a completion callback + */ + + + var givenArgumentsLength = args.length; // https://github.com/bevry/unbounded + + var acceptedArgumentsLength = (method.unbounded || method).length; + var argumentsDifferenceLength = null; + var executeAsynchronously = null; // Given arguments are SAME as the expected arguments + // This will execute asynchronously + // Don't have to do anything with the arguments + + if (givenArgumentsLength === acceptedArgumentsLength) { + executeAsynchronously = true; + } // Given arguments are LESS than the expected arguments + // This will execute asynchronously + // We will need to supplement any missing expected arguments with undefined + // to ensure the compeltion callback is in the right place in the arguments listing + else if (givenArgumentsLength < acceptedArgumentsLength) { + executeAsynchronously = true; + argumentsDifferenceLength = acceptedArgumentsLength - givenArgumentsLength; + args = simpleArguments.slice().concat(new Array(argumentsDifferenceLength)).concat([completionCallback]); + } // Given arguments are MORE than the expected arguments + // This will execute synchronously + // We should to trim off the completion callback from the arguments + // as the synchronous function won't care for it + // while this isn't essential + // it will provide some expectation for the user as to which mode their function was executed in + else { + executeAsynchronously = false; + args = simpleArguments.slice(); + } // Execute with the exceptation that the method will fire the completion callback itself + + + if (executeAsynchronously) { + // Fire the method + method.apply(void 0, _toConsumableArray(args)); + } // Execute with the expectation that we will need to fire the completion callback ourselves + // Always call the completion callback ourselves as the fire method does not make use of it + else { + // Fire the method and check for returned errors + var result = method.apply(void 0, _toConsumableArray(args)); // Check the result for a returned error + + if (typeChecker.isError(result)) { + // An error was returned so fire the completion callback with the error + var err = result; + completionCallback(err); + } else { + // Everything worked, so fire the completion callback without an error and with the result + completionCallback(null, result); + } + } // Return nothing as we expect ambi to deal with synchronous and asynchronous methods + // so returning something will only work for synchronous methods + // and not asynchronous ones + // so returning anything would be inconsistent + + + return null; +}; \ No newline at end of file diff --git a/node_modules/ambi/edition-node-0.8/index.js b/node_modules/ambi/edition-node-0.8/index.js new file mode 100755 index 000000000..e7da7f8df --- /dev/null +++ b/node_modules/ambi/edition-node-0.8/index.js @@ -0,0 +1,102 @@ +'use strict'; // Import + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +var typeChecker = require('typechecker'); // Define + + +module.exports = function ambi(method) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // Extract the preceeding arguments and the completion callback + var simpleArguments = args.slice(0, -1); + var completionCallback = args.slice(-1)[0]; // Check the completion callback is actually a function + + if (!typeChecker.isFunction(completionCallback)) { + throw new Error('ambi was called without a completion callback'); + } + /* + Different ways functions can be called: + ambi(function(a,next){return next()}, a, next) + > VALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (a, next) + ambi(function(a,next){return next()}, next) + > VALID: execute asynchronously + > given arguments are LESS than the accepted arguments + > method will be fired with (undefined, next) + ambi(function(a){}, a, next) + > VALID: execute synchronously + > given arguments are MORE than expected arguments + > method will be fired with (a) + ambi(function(a){}, next) + > INVALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (next) + > if they want to use optional args, the function must accept a completion callback + */ + + + var givenArgumentsLength = args.length; // https://github.com/bevry/unbounded + + var acceptedArgumentsLength = (method.unbounded || method).length; + var argumentsDifferenceLength = null; + var executeAsynchronously = null; // Given arguments are SAME as the expected arguments + // This will execute asynchronously + // Don't have to do anything with the arguments + + if (givenArgumentsLength === acceptedArgumentsLength) { + executeAsynchronously = true; + } // Given arguments are LESS than the expected arguments + // This will execute asynchronously + // We will need to supplement any missing expected arguments with undefined + // to ensure the compeltion callback is in the right place in the arguments listing + else if (givenArgumentsLength < acceptedArgumentsLength) { + executeAsynchronously = true; + argumentsDifferenceLength = acceptedArgumentsLength - givenArgumentsLength; + args = simpleArguments.slice().concat(new Array(argumentsDifferenceLength)).concat([completionCallback]); + } // Given arguments are MORE than the expected arguments + // This will execute synchronously + // We should to trim off the completion callback from the arguments + // as the synchronous function won't care for it + // while this isn't essential + // it will provide some expectation for the user as to which mode their function was executed in + else { + executeAsynchronously = false; + args = simpleArguments.slice(); + } // Execute with the exceptation that the method will fire the completion callback itself + + + if (executeAsynchronously) { + // Fire the method + method.apply(void 0, _toConsumableArray(args)); + } // Execute with the expectation that we will need to fire the completion callback ourselves + // Always call the completion callback ourselves as the fire method does not make use of it + else { + // Fire the method and check for returned errors + var result = method.apply(void 0, _toConsumableArray(args)); // Check the result for a returned error + + if (typeChecker.isError(result)) { + // An error was returned so fire the completion callback with the error + var err = result; + completionCallback(err); + } else { + // Everything worked, so fire the completion callback without an error and with the result + completionCallback(null, result); + } + } // Return nothing as we expect ambi to deal with synchronous and asynchronous methods + // so returning something will only work for synchronous methods + // and not asynchronous ones + // so returning anything would be inconsistent + + + return null; +}; \ No newline at end of file diff --git a/node_modules/ambi/index.js b/node_modules/ambi/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/ambi/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/ambi/package.json b/node_modules/ambi/package.json new file mode 100644 index 000000000..66b27f7bc --- /dev/null +++ b/node_modules/ambi/package.json @@ -0,0 +1,193 @@ +{ + "name": "ambi", + "version": "3.2.0", + "description": "Execute a function ambidextrously (normalizes the differences between synchronous and asynchronous functions). Useful for treating synchronous functions as asynchronous functions (like supporting both synchronous and asynchronous event definitions automatically).", + "homepage": "https://github.com/bevry/ambi", + "license": "MIT", + "keywords": [ + "sync", + "async", + "fire", + "exec", + "execute", + "ambidextrous", + "flow" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "thanksapp", + "boostlab", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist" + } + }, + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Sean Fridman (http://seanfridman.com)" + ], + "bugs": { + "url": "https://github.com/bevry/ambi/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/ambi.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 11", + "browsers": false + } + }, + { + "description": "esnext compiled for browsers with require for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "esnext compiled for node.js 0.8 with require for modules", + "directory": "edition-node-0.8", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.8 || 0.10 || 0.12 || 4 || 6 || 8 || 10 || 11", + "browsers": false + } + } + ], + "main": "index.js", + "browser": "edition-browsers/index.js", + "dependencies": { + "editions": "^2.1.0", + "typechecker": "^4.3.0" + }, + "devDependencies": { + "@babel/cli": "^7.2.0", + "@babel/core": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/preset-env": "^7.2.0", + "assert-helpers": "^4.5.1", + "eslint": "^5.9.0", + "eslint-config-bevry": "^1.0.2", + "eslint-config-prettier": "^3.3.0", + "eslint-plugin-prettier": "^3.0.0", + "joe-reporter-console": "^2.0.2", + "kava": "^3.1.0", + "prettier": "^1.15.3", + "projectz": "^1.5.3", + "valid-directory": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.8", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.8": "env BABEL_ENV=edition-node-0.8 babel --out-dir ./edition-node-0.8 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:projectz", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:npm", + "our:setup:npm": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' './source/**/*.*'", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "browsers": "defaults" + } + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + }, + "edition-node-0.8": { + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.8" + } + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/ambi/source/index.js b/node_modules/ambi/source/index.js new file mode 100755 index 000000000..f150047de --- /dev/null +++ b/node_modules/ambi/source/index.js @@ -0,0 +1,102 @@ +'use strict' + +// Import +const typeChecker = require('typechecker') + +// Define +module.exports = function ambi(method, ...args) { + // Extract the preceeding arguments and the completion callback + const simpleArguments = args.slice(0, -1) + const completionCallback = args.slice(-1)[0] + + // Check the completion callback is actually a function + if (!typeChecker.isFunction(completionCallback)) { + throw new Error('ambi was called without a completion callback') + } + + /* + Different ways functions can be called: + ambi(function(a,next){return next()}, a, next) + > VALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (a, next) + ambi(function(a,next){return next()}, next) + > VALID: execute asynchronously + > given arguments are LESS than the accepted arguments + > method will be fired with (undefined, next) + ambi(function(a){}, a, next) + > VALID: execute synchronously + > given arguments are MORE than expected arguments + > method will be fired with (a) + ambi(function(a){}, next) + > INVALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (next) + > if they want to use optional args, the function must accept a completion callback + */ + const givenArgumentsLength = args.length + // https://github.com/bevry/unbounded + const acceptedArgumentsLength = (method.unbounded || method).length + let argumentsDifferenceLength = null + let executeAsynchronously = null + + // Given arguments are SAME as the expected arguments + // This will execute asynchronously + // Don't have to do anything with the arguments + if (givenArgumentsLength === acceptedArgumentsLength) { + executeAsynchronously = true + } + + // Given arguments are LESS than the expected arguments + // This will execute asynchronously + // We will need to supplement any missing expected arguments with undefined + // to ensure the compeltion callback is in the right place in the arguments listing + else if (givenArgumentsLength < acceptedArgumentsLength) { + executeAsynchronously = true + argumentsDifferenceLength = acceptedArgumentsLength - givenArgumentsLength + args = simpleArguments + .slice() + .concat(new Array(argumentsDifferenceLength)) + .concat([completionCallback]) + } + + // Given arguments are MORE than the expected arguments + // This will execute synchronously + // We should to trim off the completion callback from the arguments + // as the synchronous function won't care for it + // while this isn't essential + // it will provide some expectation for the user as to which mode their function was executed in + else { + executeAsynchronously = false + args = simpleArguments.slice() + } + + // Execute with the exceptation that the method will fire the completion callback itself + if (executeAsynchronously) { + // Fire the method + method(...args) + } + + // Execute with the expectation that we will need to fire the completion callback ourselves + // Always call the completion callback ourselves as the fire method does not make use of it + else { + // Fire the method and check for returned errors + const result = method(...args) + + // Check the result for a returned error + if (typeChecker.isError(result)) { + // An error was returned so fire the completion callback with the error + const err = result + completionCallback(err) + } else { + // Everything worked, so fire the completion callback without an error and with the result + completionCallback(null, result) + } + } + + // Return nothing as we expect ambi to deal with synchronous and asynchronous methods + // so returning something will only work for synchronous methods + // and not asynchronous ones + // so returning anything would be inconsistent + return null +} diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md new file mode 100644 index 000000000..a43c628cc --- /dev/null +++ b/node_modules/argparse/CHANGELOG.md @@ -0,0 +1,185 @@ +1.0.10 / 2018-02-15 +------------------ + +- Use .concat instead of + for arrays, #122. + + +1.0.9 / 2016-09-29 +------------------ + +- Rerelease after 1.0.8 - deps cleanup. + + +1.0.8 / 2016-09-29 +------------------ + +- Maintenance (deps bump, fix node 6.5+ tests, coverage report). + + +1.0.7 / 2016-03-17 +------------------ + +- Teach `addArgument` to accept string arg names. #97, @tomxtobin. + + +1.0.6 / 2016-02-06 +------------------ + +- Maintenance: moved to eslint & updated CS. + + +1.0.5 / 2016-02-05 +------------------ + +- Removed lodash dependency to significantly reduce install size. + Thanks to @mourner. + + +1.0.4 / 2016-01-17 +------------------ + +- Maintenance: lodash update to 4.0.0. + + +1.0.3 / 2015-10-27 +------------------ + +- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. + + +1.0.2 / 2015-03-22 +------------------ + +- Relaxed lodash version dependency. + + +1.0.1 / 2015-02-20 +------------------ + +- Changed dependencies to be compatible with ancient nodejs. + + +1.0.0 / 2015-02-19 +------------------ + +- Maintenance release. +- Replaced `underscore` with `lodash`. +- Bumped version to 1.0.0 to better reflect semver meaning. +- HISTORY.md -> CHANGELOG.md + + +0.1.16 / 2013-12-01 +------------------- + +- Maintenance release. Updated dependencies and docs. + + +0.1.15 / 2013-05-13 +------------------- + +- Fixed #55, @trebor89 + + +0.1.14 / 2013-05-12 +------------------- + +- Fixed #62, @maxtaco + + +0.1.13 / 2013-04-08 +------------------- + +- Added `.npmignore` to reduce package size + + +0.1.12 / 2013-02-10 +------------------- + +- Fixed conflictHandler (#46), @hpaulj + + +0.1.11 / 2013-02-07 +------------------- + +- Multiple bugfixes, @hpaulj +- Added 70+ tests (ported from python), @hpaulj +- Added conflictHandler, @applepicke +- Added fromfilePrefixChar, @hpaulj + + +0.1.10 / 2012-12-30 +------------------- + +- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) + support, thanks to @hpaulj +- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj + + +0.1.9 / 2012-12-27 +------------------ + +- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj +- Fixed default value behavior with `*` positionals, thanks to @hpaulj +- Improve `getDefault()` behavior, thanks to @hpaulj +- Imrove negative argument parsing, thanks to @hpaulj + + +0.1.8 / 2012-12-01 +------------------ + +- Fixed parser parents (issue #19), thanks to @hpaulj +- Fixed negative argument parse (issue #20), thanks to @hpaulj + + +0.1.7 / 2012-10-14 +------------------ + +- Fixed 'choices' argument parse (issue #16) +- Fixed stderr output (issue #15) + + +0.1.6 / 2012-09-09 +------------------ + +- Fixed check for conflict of options (thanks to @tomxtobin) + + +0.1.5 / 2012-09-03 +------------------ + +- Fix parser #setDefaults method (thanks to @tomxtobin) + + +0.1.4 / 2012-07-30 +------------------ + +- Fixed pseudo-argument support (thanks to @CGamesPlay) +- Fixed addHelp default (should be true), if not set (thanks to @benblank) + + +0.1.3 / 2012-06-27 +------------------ + +- Fixed formatter api name: Formatter -> HelpFormatter + + +0.1.2 / 2012-05-29 +------------------ + +- Added basic tests +- Removed excess whitespace in help +- Fixed error reporting, when parcer with subcommands + called with empty arguments + + +0.1.1 / 2012-05-23 +------------------ + +- Fixed line wrapping in help formatter +- Added better error reporting on invalid arguments + + +0.1.0 / 2012-05-16 +------------------ + +- First release. diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE new file mode 100644 index 000000000..1afdae558 --- /dev/null +++ b/node_modules/argparse/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2012 by Vitaly Puzrin + +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. diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md new file mode 100644 index 000000000..7fa6c4050 --- /dev/null +++ b/node_modules/argparse/README.md @@ -0,0 +1,257 @@ +argparse +======== + +[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) +[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) + +CLI arguments parser for node.js. Javascript port of python's +[argparse](http://docs.python.org/dev/library/argparse.html) module +(original version 3.2). That's a full port, except some very rare options, +recorded in issue tracker. + +**NB. Difference with original.** + +- Method names changed to camelCase. See [generated docs](http://nodeca.github.com/argparse/). +- Use `defaultValue` instead of `default`. +- Use `argparse.Const.REMAINDER` instead of `argparse.REMAINDER`, and + similarly for constant values `OPTIONAL`, `ZERO_OR_MORE`, and `ONE_OR_MORE` + (aliases for `nargs` values `'?'`, `'*'`, `'+'`, respectively), and + `SUPPRESS`. + + +Example +======= + +test.js file: + +```javascript +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp:true, + description: 'Argparse example' +}); +parser.addArgument( + [ '-f', '--foo' ], + { + help: 'foo bar' + } +); +parser.addArgument( + [ '-b', '--bar' ], + { + help: 'bar foo' + } +); +parser.addArgument( + '--baz', + { + help: 'baz bar' + } +); +var args = parser.parseArgs(); +console.dir(args); +``` + +Display help: + +``` +$ ./test.js -h +usage: example.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] + +Argparse example + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -f FOO, --foo FOO foo bar + -b BAR, --bar BAR bar foo + --baz BAZ baz bar +``` + +Parse arguments: + +``` +$ ./test.js -f=3 --bar=4 --baz 5 +{ foo: '3', bar: '4', baz: '5' } +``` + +More [examples](https://github.com/nodeca/argparse/tree/master/examples). + + +ArgumentParser objects +====================== + +``` +new ArgumentParser({parameters hash}); +``` + +Creates a new ArgumentParser object. + +**Supported params:** + +- ```description``` - Text to display before the argument help. +- ```epilog``` - Text to display after the argument help. +- ```addHelp``` - Add a -h/–help option to the parser. (default: true) +- ```argumentDefault``` - Set the global default value for arguments. (default: null) +- ```parents``` - A list of ArgumentParser objects whose arguments should also be included. +- ```prefixChars``` - The set of characters that prefix optional arguments. (default: ‘-‘) +- ```formatterClass``` - A class for customizing the help output. +- ```prog``` - The name of the program (default: `path.basename(process.argv[1])`) +- ```usage``` - The string describing the program usage (default: generated) +- ```conflictHandler``` - Usually unnecessary, defines strategy for resolving conflicting optionals. + +**Not supported yet** + +- ```fromfilePrefixChars``` - The set of characters that prefix files from which additional arguments should be read. + + +Details in [original ArgumentParser guide](http://docs.python.org/dev/library/argparse.html#argumentparser-objects) + + +addArgument() method +==================== + +``` +ArgumentParser.addArgument(name or flag or [name] or [flags...], {options}) +``` + +Defines how a single command-line argument should be parsed. + +- ```name or flag or [name] or [flags...]``` - Either a positional name + (e.g., `'foo'`), a single option (e.g., `'-f'` or `'--foo'`), an array + of a single positional name (e.g., `['foo']`), or an array of options + (e.g., `['-f', '--foo']`). + +Options: + +- ```action``` - The basic type of action to be taken when this argument is encountered at the command line. +- ```nargs```- The number of command-line arguments that should be consumed. +- ```constant``` - A constant value required by some action and nargs selections. +- ```defaultValue``` - The value produced if the argument is absent from the command line. +- ```type``` - The type to which the command-line argument should be converted. +- ```choices``` - A container of the allowable values for the argument. +- ```required``` - Whether or not the command-line option may be omitted (optionals only). +- ```help``` - A brief description of what the argument does. +- ```metavar``` - A name for the argument in usage messages. +- ```dest``` - The name of the attribute to be added to the object returned by parseArgs(). + +Details in [original add_argument guide](http://docs.python.org/dev/library/argparse.html#the-add-argument-method) + + +Action (some details) +================ + +ArgumentParser objects associate command-line arguments with actions. +These actions can do just about anything with the command-line arguments associated +with them, though most actions simply add an attribute to the object returned by +parseArgs(). The action keyword argument specifies how the command-line arguments +should be handled. The supported actions are: + +- ```store``` - Just stores the argument’s value. This is the default action. +- ```storeConst``` - Stores value, specified by the const keyword argument. + (Note that the const keyword argument defaults to the rather unhelpful None.) + The 'storeConst' action is most commonly used with optional arguments, that + specify some sort of flag. +- ```storeTrue``` and ```storeFalse``` - Stores values True and False + respectively. These are special cases of 'storeConst'. +- ```append``` - Stores a list, and appends each argument value to the list. + This is useful to allow an option to be specified multiple times. +- ```appendConst``` - Stores a list, and appends value, specified by the + const keyword argument to the list. (Note, that the const keyword argument defaults + is None.) The 'appendConst' action is typically used when multiple arguments need + to store constants to the same list. +- ```count``` - Counts the number of times a keyword argument occurs. For example, + used for increasing verbosity levels. +- ```help``` - Prints a complete help message for all the options in the current + parser and then exits. By default a help action is automatically added to the parser. + See ArgumentParser for details of how the output is created. +- ```version``` - Prints version information and exit. Expects a `version=` + keyword argument in the addArgument() call. + +Details in [original action guide](http://docs.python.org/dev/library/argparse.html#action) + + +Sub-commands +============ + +ArgumentParser.addSubparsers() + +Many programs split their functionality into a number of sub-commands, for +example, the svn program can invoke sub-commands like `svn checkout`, `svn update`, +and `svn commit`. Splitting up functionality this way can be a particularly good +idea when a program performs several different functions which require different +kinds of command-line arguments. `ArgumentParser` supports creation of such +sub-commands with `addSubparsers()` method. The `addSubparsers()` method is +normally called with no arguments and returns an special action object. +This object has a single method `addParser()`, which takes a command name and +any `ArgumentParser` constructor arguments, and returns an `ArgumentParser` object +that can be modified as usual. + +Example: + +sub_commands.js +```javascript +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp:true, + description: 'Argparse examples: sub-commands', +}); + +var subparsers = parser.addSubparsers({ + title:'subcommands', + dest:"subcommand_name" +}); + +var bar = subparsers.addParser('c1', {addHelp:true}); +bar.addArgument( + [ '-f', '--foo' ], + { + action: 'store', + help: 'foo3 bar3' + } +); +var bar = subparsers.addParser( + 'c2', + {aliases:['co'], addHelp:true} +); +bar.addArgument( + [ '-b', '--bar' ], + { + action: 'store', + type: 'int', + help: 'foo3 bar3' + } +); + +var args = parser.parseArgs(); +console.dir(args); + +``` + +Details in [original sub-commands guide](http://docs.python.org/dev/library/argparse.html#sub-commands) + + +Contributors +============ + +- [Eugene Shkuropat](https://github.com/shkuropat) +- [Paul Jacobson](https://github.com/hpaulj) + +[others](https://github.com/nodeca/argparse/graphs/contributors) + +License +======= + +Copyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin). +Released under the MIT license. See +[LICENSE](https://github.com/nodeca/argparse/blob/master/LICENSE) for details. + + diff --git a/node_modules/argparse/index.js b/node_modules/argparse/index.js new file mode 100644 index 000000000..3bbc14320 --- /dev/null +++ b/node_modules/argparse/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/argparse'); diff --git a/node_modules/argparse/lib/action.js b/node_modules/argparse/lib/action.js new file mode 100644 index 000000000..1483c79ff --- /dev/null +++ b/node_modules/argparse/lib/action.js @@ -0,0 +1,146 @@ +/** + * class Action + * + * Base class for all actions + * Do not call in your code, use this class only for inherits your own action + * + * Information about how to convert command line strings to Javascript objects. + * Action objects are used by an ArgumentParser to represent the information + * needed to parse a single argument from one or more strings from the command + * line. The keyword arguments to the Action constructor are also all attributes + * of Action instances. + * + * ##### Allowed keywords: + * + * - `store` + * - `storeConstant` + * - `storeTrue` + * - `storeFalse` + * - `append` + * - `appendConstant` + * - `count` + * - `help` + * - `version` + * + * Information about action options see [[Action.new]] + * + * See also [original guide](http://docs.python.org/dev/library/argparse.html#action) + * + **/ + +'use strict'; + + +// Constants +var c = require('./const'); + + +/** + * new Action(options) + * + * Base class for all actions. Used only for inherits + * + * + * ##### Options: + * + * - `optionStrings` A list of command-line option strings for the action. + * - `dest` Attribute to hold the created object(s) + * - `nargs` The number of command-line arguments that should be consumed. + * By default, one argument will be consumed and a single value will be + * produced. + * - `constant` Default value for an action with no value. + * - `defaultValue` The value to be produced if the option is not specified. + * - `type` Cast to 'string'|'int'|'float'|'complex'|function (string). If + * None, 'string'. + * - `choices` The choices available. + * - `required` True if the action must always be specified at the command + * line. + * - `help` The help describing the argument. + * - `metavar` The name to be used for the option's argument with the help + * string. If None, the 'dest' value will be used as the name. + * + * ##### nargs supported values: + * + * - `N` (an integer) consumes N arguments (and produces a list) + * - `?` consumes zero or one arguments + * - `*` consumes zero or more arguments (and produces a list) + * - `+` consumes one or more arguments (and produces a list) + * + * Note: that the difference between the default and nargs=1 is that with the + * default, a single value will be produced, while with nargs=1, a list + * containing a single value will be produced. + **/ +var Action = module.exports = function Action(options) { + options = options || {}; + this.optionStrings = options.optionStrings || []; + this.dest = options.dest; + this.nargs = typeof options.nargs !== 'undefined' ? options.nargs : null; + this.constant = typeof options.constant !== 'undefined' ? options.constant : null; + this.defaultValue = options.defaultValue; + this.type = typeof options.type !== 'undefined' ? options.type : null; + this.choices = typeof options.choices !== 'undefined' ? options.choices : null; + this.required = typeof options.required !== 'undefined' ? options.required : false; + this.help = typeof options.help !== 'undefined' ? options.help : null; + this.metavar = typeof options.metavar !== 'undefined' ? options.metavar : null; + + if (!(this.optionStrings instanceof Array)) { + throw new Error('optionStrings should be an array'); + } + if (typeof this.required !== 'undefined' && typeof this.required !== 'boolean') { + throw new Error('required should be a boolean'); + } +}; + +/** + * Action#getName -> String + * + * Tells action name + **/ +Action.prototype.getName = function () { + if (this.optionStrings.length > 0) { + return this.optionStrings.join('/'); + } else if (this.metavar !== null && this.metavar !== c.SUPPRESS) { + return this.metavar; + } else if (typeof this.dest !== 'undefined' && this.dest !== c.SUPPRESS) { + return this.dest; + } + return null; +}; + +/** + * Action#isOptional -> Boolean + * + * Return true if optional + **/ +Action.prototype.isOptional = function () { + return !this.isPositional(); +}; + +/** + * Action#isPositional -> Boolean + * + * Return true if positional + **/ +Action.prototype.isPositional = function () { + return (this.optionStrings.length === 0); +}; + +/** + * Action#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Should be implemented in inherited classes + * + * ##### Example + * + * ActionCount.prototype.call = function (parser, namespace, values, optionString) { + * namespace.set(this.dest, (namespace[this.dest] || 0) + 1); + * }; + * + **/ +Action.prototype.call = function () { + throw new Error('.call() not defined');// Not Implemented error +}; diff --git a/node_modules/argparse/lib/action/append.js b/node_modules/argparse/lib/action/append.js new file mode 100644 index 000000000..b5da0de23 --- /dev/null +++ b/node_modules/argparse/lib/action/append.js @@ -0,0 +1,53 @@ +/*:nodoc:* + * class ActionAppend + * + * This action stores a list, and appends each argument value to the list. + * This is useful to allow an option to be specified multiple times. + * This class inherided from [[Action]] + * + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +/*:nodoc:* + * new ActionAppend(options) + * - options (object): options hash see [[Action.new]] + * + * Note: options.nargs should be optional for constants + * and more then zero for other + **/ +var ActionAppend = module.exports = function ActionAppend(options) { + options = options || {}; + if (this.nargs <= 0) { + throw new Error('nargs for append actions must be > 0; if arg ' + + 'strings are not supplying the value to append, ' + + 'the append const action may be more appropriate'); + } + if (!!this.constant && this.nargs !== c.OPTIONAL) { + throw new Error('nargs must be OPTIONAL to supply const'); + } + Action.call(this, options); +}; +util.inherits(ActionAppend, Action); + +/*:nodoc:* + * ActionAppend#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppend.prototype.call = function (parser, namespace, values) { + var items = (namespace[this.dest] || []).slice(); + items.push(values); + namespace.set(this.dest, items); +}; diff --git a/node_modules/argparse/lib/action/append/constant.js b/node_modules/argparse/lib/action/append/constant.js new file mode 100644 index 000000000..313f5d2ef --- /dev/null +++ b/node_modules/argparse/lib/action/append/constant.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionAppendConstant + * + * This stores a list, and appends the value specified by + * the const keyword argument to the list. + * (Note that the const keyword argument defaults to null.) + * The 'appendConst' action is typically useful when multiple + * arguments need to store constants to the same list. + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionAppendConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionAppendConstant = module.exports = function ActionAppendConstant(options) { + options = options || {}; + options.nargs = 0; + if (typeof options.constant === 'undefined') { + throw new Error('constant option is required for appendAction'); + } + Action.call(this, options); +}; +util.inherits(ActionAppendConstant, Action); + +/*:nodoc:* + * ActionAppendConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppendConstant.prototype.call = function (parser, namespace) { + var items = [].concat(namespace[this.dest] || []); + items.push(this.constant); + namespace.set(this.dest, items); +}; diff --git a/node_modules/argparse/lib/action/count.js b/node_modules/argparse/lib/action/count.js new file mode 100644 index 000000000..d6a5899d0 --- /dev/null +++ b/node_modules/argparse/lib/action/count.js @@ -0,0 +1,40 @@ +/*:nodoc:* + * class ActionCount + * + * This counts the number of times a keyword argument occurs. + * For example, this is useful for increasing verbosity levels + * + * This class inherided from [[Action]] + * + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +/*:nodoc:* + * new ActionCount(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionCount = module.exports = function ActionCount(options) { + options = options || {}; + options.nargs = 0; + + Action.call(this, options); +}; +util.inherits(ActionCount, Action); + +/*:nodoc:* + * ActionCount#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionCount.prototype.call = function (parser, namespace) { + namespace.set(this.dest, (namespace[this.dest] || 0) + 1); +}; diff --git a/node_modules/argparse/lib/action/help.js b/node_modules/argparse/lib/action/help.js new file mode 100644 index 000000000..b40e05a6f --- /dev/null +++ b/node_modules/argparse/lib/action/help.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionHelp + * + * Support action for printing help + * This class inherided from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +/*:nodoc:* + * new ActionHelp(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionHelp = module.exports = function ActionHelp(options) { + options = options || {}; + if (options.defaultValue !== null) { + options.defaultValue = options.defaultValue; + } else { + options.defaultValue = c.SUPPRESS; + } + options.dest = (options.dest !== null ? options.dest : c.SUPPRESS); + options.nargs = 0; + Action.call(this, options); + +}; +util.inherits(ActionHelp, Action); + +/*:nodoc:* + * ActionHelp#call(parser, namespace, values, optionString) + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print help and exit + **/ +ActionHelp.prototype.call = function (parser) { + parser.printHelp(); + parser.exit(); +}; diff --git a/node_modules/argparse/lib/action/store.js b/node_modules/argparse/lib/action/store.js new file mode 100644 index 000000000..283b86092 --- /dev/null +++ b/node_modules/argparse/lib/action/store.js @@ -0,0 +1,50 @@ +/*:nodoc:* + * class ActionStore + * + * This action just stores the argument’s value. This is the default action. + * + * This class inherited from [[Action]] + * + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + + +/*:nodoc:* + * new ActionStore(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStore = module.exports = function ActionStore(options) { + options = options || {}; + if (this.nargs <= 0) { + throw new Error('nargs for store actions must be > 0; if you ' + + 'have nothing to store, actions such as store ' + + 'true or store const may be more appropriate'); + + } + if (typeof this.constant !== 'undefined' && this.nargs !== c.OPTIONAL) { + throw new Error('nargs must be OPTIONAL to supply const'); + } + Action.call(this, options); +}; +util.inherits(ActionStore, Action); + +/*:nodoc:* + * ActionStore#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStore.prototype.call = function (parser, namespace, values) { + namespace.set(this.dest, values); +}; diff --git a/node_modules/argparse/lib/action/store/constant.js b/node_modules/argparse/lib/action/store/constant.js new file mode 100644 index 000000000..23caa897b --- /dev/null +++ b/node_modules/argparse/lib/action/store/constant.js @@ -0,0 +1,43 @@ +/*:nodoc:* + * class ActionStoreConstant + * + * This action stores the value specified by the const keyword argument. + * (Note that the const keyword argument defaults to the rather unhelpful null.) + * The 'store_const' action is most commonly used with optional + * arguments that specify some sort of flag. + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionStoreConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreConstant = module.exports = function ActionStoreConstant(options) { + options = options || {}; + options.nargs = 0; + if (typeof options.constant === 'undefined') { + throw new Error('constant option is required for storeAction'); + } + Action.call(this, options); +}; +util.inherits(ActionStoreConstant, Action); + +/*:nodoc:* + * ActionStoreConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStoreConstant.prototype.call = function (parser, namespace) { + namespace.set(this.dest, this.constant); +}; diff --git a/node_modules/argparse/lib/action/store/false.js b/node_modules/argparse/lib/action/store/false.js new file mode 100644 index 000000000..9924f461d --- /dev/null +++ b/node_modules/argparse/lib/action/store/false.js @@ -0,0 +1,27 @@ +/*:nodoc:* + * class ActionStoreFalse + * + * This action store the values False respectively. + * This is special cases of 'storeConst' + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var ActionStoreConstant = require('./constant'); + +/*:nodoc:* + * new ActionStoreFalse(options) + * - options (object): hash of options see [[Action.new]] + * + **/ +var ActionStoreFalse = module.exports = function ActionStoreFalse(options) { + options = options || {}; + options.constant = false; + options.defaultValue = options.defaultValue !== null ? options.defaultValue : true; + ActionStoreConstant.call(this, options); +}; +util.inherits(ActionStoreFalse, ActionStoreConstant); diff --git a/node_modules/argparse/lib/action/store/true.js b/node_modules/argparse/lib/action/store/true.js new file mode 100644 index 000000000..9e22f7d44 --- /dev/null +++ b/node_modules/argparse/lib/action/store/true.js @@ -0,0 +1,26 @@ +/*:nodoc:* + * class ActionStoreTrue + * + * This action store the values True respectively. + * This isspecial cases of 'storeConst' + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var ActionStoreConstant = require('./constant'); + +/*:nodoc:* + * new ActionStoreTrue(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreTrue = module.exports = function ActionStoreTrue(options) { + options = options || {}; + options.constant = true; + options.defaultValue = options.defaultValue !== null ? options.defaultValue : false; + ActionStoreConstant.call(this, options); +}; +util.inherits(ActionStoreTrue, ActionStoreConstant); diff --git a/node_modules/argparse/lib/action/subparsers.js b/node_modules/argparse/lib/action/subparsers.js new file mode 100644 index 000000000..99dfedd0f --- /dev/null +++ b/node_modules/argparse/lib/action/subparsers.js @@ -0,0 +1,149 @@ +/** internal + * class ActionSubparsers + * + * Support the creation of such sub-commands with the addSubparsers() + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; + + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +// Errors +var argumentErrorHelper = require('../argument/error'); + + +/*:nodoc:* + * new ChoicesPseudoAction(name, help) + * + * Create pseudo action for correct help text + * + **/ +function ChoicesPseudoAction(name, help) { + var options = { + optionStrings: [], + dest: name, + help: help + }; + + Action.call(this, options); +} + +util.inherits(ChoicesPseudoAction, Action); + +/** + * new ActionSubparsers(options) + * - options (object): options hash see [[Action.new]] + * + **/ +function ActionSubparsers(options) { + options = options || {}; + options.dest = options.dest || c.SUPPRESS; + options.nargs = c.PARSER; + + this.debug = (options.debug === true); + + this._progPrefix = options.prog; + this._parserClass = options.parserClass; + this._nameParserMap = {}; + this._choicesActions = []; + + options.choices = this._nameParserMap; + Action.call(this, options); +} + +util.inherits(ActionSubparsers, Action); + +/*:nodoc:* + * ActionSubparsers#addParser(name, options) -> ArgumentParser + * - name (string): sub-command name + * - options (object): see [[ArgumentParser.new]] + * + * Note: + * addParser supports an additional aliases option, + * which allows multiple strings to refer to the same subparser. + * This example, like svn, aliases co as a shorthand for checkout + * + **/ +ActionSubparsers.prototype.addParser = function (name, options) { + var parser; + + var self = this; + + options = options || {}; + + options.debug = (this.debug === true); + + // set program from the existing prefix + if (!options.prog) { + options.prog = this._progPrefix + ' ' + name; + } + + var aliases = options.aliases || []; + + // create a pseudo-action to hold the choice help + if (!!options.help || typeof options.help === 'string') { + var help = options.help; + delete options.help; + + var choiceAction = new ChoicesPseudoAction(name, help); + this._choicesActions.push(choiceAction); + } + + // create the parser and add it to the map + parser = new this._parserClass(options); + this._nameParserMap[name] = parser; + + // make parser available under aliases also + aliases.forEach(function (alias) { + self._nameParserMap[alias] = parser; + }); + + return parser; +}; + +ActionSubparsers.prototype._getSubactions = function () { + return this._choicesActions; +}; + +/*:nodoc:* + * ActionSubparsers#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Parse input aguments + **/ +ActionSubparsers.prototype.call = function (parser, namespace, values) { + var parserName = values[0]; + var argStrings = values.slice(1); + + // set the parser name if requested + if (this.dest !== c.SUPPRESS) { + namespace[this.dest] = parserName; + } + + // select the parser + if (this._nameParserMap[parserName]) { + parser = this._nameParserMap[parserName]; + } else { + throw argumentErrorHelper(format( + 'Unknown parser "%s" (choices: [%s]).', + parserName, + Object.keys(this._nameParserMap).join(', ') + )); + } + + // parse all the remaining options into the namespace + parser.parseArgs(argStrings, namespace); +}; + +module.exports = ActionSubparsers; diff --git a/node_modules/argparse/lib/action/version.js b/node_modules/argparse/lib/action/version.js new file mode 100644 index 000000000..8053328cd --- /dev/null +++ b/node_modules/argparse/lib/action/version.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionVersion + * + * Support action for printing program version + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// +// Constants +// +var c = require('../const'); + +/*:nodoc:* + * new ActionVersion(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionVersion = module.exports = function ActionVersion(options) { + options = options || {}; + options.defaultValue = (options.defaultValue ? options.defaultValue : c.SUPPRESS); + options.dest = (options.dest || c.SUPPRESS); + options.nargs = 0; + this.version = options.version; + Action.call(this, options); +}; +util.inherits(ActionVersion, Action); + +/*:nodoc:* + * ActionVersion#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print version and exit + **/ +ActionVersion.prototype.call = function (parser) { + var version = this.version || parser.version; + var formatter = parser._getFormatter(); + formatter.addText(version); + parser.exit(0, formatter.formatHelp()); +}; diff --git a/node_modules/argparse/lib/action_container.js b/node_modules/argparse/lib/action_container.js new file mode 100644 index 000000000..6f1237bea --- /dev/null +++ b/node_modules/argparse/lib/action_container.js @@ -0,0 +1,482 @@ +/** internal + * class ActionContainer + * + * Action container. Parent for [[ArgumentParser]] and [[ArgumentGroup]] + **/ + +'use strict'; + +var format = require('util').format; + +// Constants +var c = require('./const'); + +var $$ = require('./utils'); + +//Actions +var ActionHelp = require('./action/help'); +var ActionAppend = require('./action/append'); +var ActionAppendConstant = require('./action/append/constant'); +var ActionCount = require('./action/count'); +var ActionStore = require('./action/store'); +var ActionStoreConstant = require('./action/store/constant'); +var ActionStoreTrue = require('./action/store/true'); +var ActionStoreFalse = require('./action/store/false'); +var ActionVersion = require('./action/version'); +var ActionSubparsers = require('./action/subparsers'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + +/** + * new ActionContainer(options) + * + * Action container. Parent for [[ArgumentParser]] and [[ArgumentGroup]] + * + * ##### Options: + * + * - `description` -- A description of what the program does + * - `prefixChars` -- Characters that prefix optional arguments + * - `argumentDefault` -- The default value for all arguments + * - `conflictHandler` -- The conflict handler to use for duplicate arguments + **/ +var ActionContainer = module.exports = function ActionContainer(options) { + options = options || {}; + + this.description = options.description; + this.argumentDefault = options.argumentDefault; + this.prefixChars = options.prefixChars || ''; + this.conflictHandler = options.conflictHandler; + + // set up registries + this._registries = {}; + + // register actions + this.register('action', null, ActionStore); + this.register('action', 'store', ActionStore); + this.register('action', 'storeConst', ActionStoreConstant); + this.register('action', 'storeTrue', ActionStoreTrue); + this.register('action', 'storeFalse', ActionStoreFalse); + this.register('action', 'append', ActionAppend); + this.register('action', 'appendConst', ActionAppendConstant); + this.register('action', 'count', ActionCount); + this.register('action', 'help', ActionHelp); + this.register('action', 'version', ActionVersion); + this.register('action', 'parsers', ActionSubparsers); + + // raise an exception if the conflict handler is invalid + this._getHandler(); + + // action storage + this._actions = []; + this._optionStringActions = {}; + + // groups + this._actionGroups = []; + this._mutuallyExclusiveGroups = []; + + // defaults storage + this._defaults = {}; + + // determines whether an "option" looks like a negative number + // -1, -1.5 -5e+4 + this._regexpNegativeNumber = new RegExp('^[-]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$'); + + // whether or not there are any optionals that look like negative + // numbers -- uses a list so it can be shared and edited + this._hasNegativeNumberOptionals = []; +}; + +// Groups must be required, then ActionContainer already defined +var ArgumentGroup = require('./argument/group'); +var MutuallyExclusiveGroup = require('./argument/exclusive'); + +// +// Registration methods +// + +/** + * ActionContainer#register(registryName, value, object) -> Void + * - registryName (String) : object type action|type + * - value (string) : keyword + * - object (Object|Function) : handler + * + * Register handlers + **/ +ActionContainer.prototype.register = function (registryName, value, object) { + this._registries[registryName] = this._registries[registryName] || {}; + this._registries[registryName][value] = object; +}; + +ActionContainer.prototype._registryGet = function (registryName, value, defaultValue) { + if (arguments.length < 3) { + defaultValue = null; + } + return this._registries[registryName][value] || defaultValue; +}; + +// +// Namespace default accessor methods +// + +/** + * ActionContainer#setDefaults(options) -> Void + * - options (object):hash of options see [[Action.new]] + * + * Set defaults + **/ +ActionContainer.prototype.setDefaults = function (options) { + options = options || {}; + for (var property in options) { + if ($$.has(options, property)) { + this._defaults[property] = options[property]; + } + } + + // if these defaults match any existing arguments, replace the previous + // default on the object with the new one + this._actions.forEach(function (action) { + if ($$.has(options, action.dest)) { + action.defaultValue = options[action.dest]; + } + }); +}; + +/** + * ActionContainer#getDefault(dest) -> Mixed + * - dest (string): action destination + * + * Return action default value + **/ +ActionContainer.prototype.getDefault = function (dest) { + var result = $$.has(this._defaults, dest) ? this._defaults[dest] : null; + + this._actions.forEach(function (action) { + if (action.dest === dest && $$.has(action, 'defaultValue')) { + result = action.defaultValue; + } + }); + + return result; +}; +// +// Adding argument actions +// + +/** + * ActionContainer#addArgument(args, options) -> Object + * - args (String|Array): argument key, or array of argument keys + * - options (Object): action objects see [[Action.new]] + * + * #### Examples + * - addArgument([ '-f', '--foo' ], { action: 'store', defaultValue: 1, ... }) + * - addArgument([ 'bar' ], { action: 'store', nargs: 1, ... }) + * - addArgument('--baz', { action: 'store', nargs: 1, ... }) + **/ +ActionContainer.prototype.addArgument = function (args, options) { + args = args; + options = options || {}; + + if (typeof args === 'string') { + args = [ args ]; + } + if (!Array.isArray(args)) { + throw new TypeError('addArgument first argument should be a string or an array'); + } + if (typeof options !== 'object' || Array.isArray(options)) { + throw new TypeError('addArgument second argument should be a hash'); + } + + // if no positional args are supplied or only one is supplied and + // it doesn't look like an option string, parse a positional argument + if (!args || args.length === 1 && this.prefixChars.indexOf(args[0][0]) < 0) { + if (args && !!options.dest) { + throw new Error('dest supplied twice for positional argument'); + } + options = this._getPositional(args, options); + + // otherwise, we're adding an optional argument + } else { + options = this._getOptional(args, options); + } + + // if no default was supplied, use the parser-level default + if (typeof options.defaultValue === 'undefined') { + var dest = options.dest; + if ($$.has(this._defaults, dest)) { + options.defaultValue = this._defaults[dest]; + } else if (typeof this.argumentDefault !== 'undefined') { + options.defaultValue = this.argumentDefault; + } + } + + // create the action object, and add it to the parser + var ActionClass = this._popActionClass(options); + if (typeof ActionClass !== 'function') { + throw new Error(format('Unknown action "%s".', ActionClass)); + } + var action = new ActionClass(options); + + // throw an error if the action type is not callable + var typeFunction = this._registryGet('type', action.type, action.type); + if (typeof typeFunction !== 'function') { + throw new Error(format('"%s" is not callable', typeFunction)); + } + + return this._addAction(action); +}; + +/** + * ActionContainer#addArgumentGroup(options) -> ArgumentGroup + * - options (Object): hash of options see [[ArgumentGroup.new]] + * + * Create new arguments groups + **/ +ActionContainer.prototype.addArgumentGroup = function (options) { + var group = new ArgumentGroup(this, options); + this._actionGroups.push(group); + return group; +}; + +/** + * ActionContainer#addMutuallyExclusiveGroup(options) -> ArgumentGroup + * - options (Object): {required: false} + * + * Create new mutual exclusive groups + **/ +ActionContainer.prototype.addMutuallyExclusiveGroup = function (options) { + var group = new MutuallyExclusiveGroup(this, options); + this._mutuallyExclusiveGroups.push(group); + return group; +}; + +ActionContainer.prototype._addAction = function (action) { + var self = this; + + // resolve any conflicts + this._checkConflict(action); + + // add to actions list + this._actions.push(action); + action.container = this; + + // index the action by any option strings it has + action.optionStrings.forEach(function (optionString) { + self._optionStringActions[optionString] = action; + }); + + // set the flag if any option strings look like negative numbers + action.optionStrings.forEach(function (optionString) { + if (optionString.match(self._regexpNegativeNumber)) { + if (!self._hasNegativeNumberOptionals.some(Boolean)) { + self._hasNegativeNumberOptionals.push(true); + } + } + }); + + // return the created action + return action; +}; + +ActionContainer.prototype._removeAction = function (action) { + var actionIndex = this._actions.indexOf(action); + if (actionIndex >= 0) { + this._actions.splice(actionIndex, 1); + } +}; + +ActionContainer.prototype._addContainerActions = function (container) { + // collect groups by titles + var titleGroupMap = {}; + this._actionGroups.forEach(function (group) { + if (titleGroupMap[group.title]) { + throw new Error(format('Cannot merge actions - two groups are named "%s".', group.title)); + } + titleGroupMap[group.title] = group; + }); + + // map each action to its group + var groupMap = {}; + function actionHash(action) { + // unique (hopefully?) string suitable as dictionary key + return action.getName(); + } + container._actionGroups.forEach(function (group) { + // if a group with the title exists, use that, otherwise + // create a new group matching the container's group + if (!titleGroupMap[group.title]) { + titleGroupMap[group.title] = this.addArgumentGroup({ + title: group.title, + description: group.description + }); + } + + // map the actions to their new group + group._groupActions.forEach(function (action) { + groupMap[actionHash(action)] = titleGroupMap[group.title]; + }); + }, this); + + // add container's mutually exclusive groups + // NOTE: if add_mutually_exclusive_group ever gains title= and + // description= then this code will need to be expanded as above + var mutexGroup; + container._mutuallyExclusiveGroups.forEach(function (group) { + mutexGroup = this.addMutuallyExclusiveGroup({ + required: group.required + }); + // map the actions to their new mutex group + group._groupActions.forEach(function (action) { + groupMap[actionHash(action)] = mutexGroup; + }); + }, this); // forEach takes a 'this' argument + + // add all actions to this container or their group + container._actions.forEach(function (action) { + var key = actionHash(action); + if (groupMap[key]) { + groupMap[key]._addAction(action); + } else { + this._addAction(action); + } + }); +}; + +ActionContainer.prototype._getPositional = function (dest, options) { + if (Array.isArray(dest)) { + dest = dest[0]; + } + // make sure required is not specified + if (options.required) { + throw new Error('"required" is an invalid argument for positionals.'); + } + + // mark positional arguments as required if at least one is + // always required + if (options.nargs !== c.OPTIONAL && options.nargs !== c.ZERO_OR_MORE) { + options.required = true; + } + if (options.nargs === c.ZERO_OR_MORE && typeof options.defaultValue === 'undefined') { + options.required = true; + } + + // return the keyword arguments with no option strings + options.dest = dest; + options.optionStrings = []; + return options; +}; + +ActionContainer.prototype._getOptional = function (args, options) { + var prefixChars = this.prefixChars; + var optionStrings = []; + var optionStringsLong = []; + + // determine short and long option strings + args.forEach(function (optionString) { + // error on strings that don't start with an appropriate prefix + if (prefixChars.indexOf(optionString[0]) < 0) { + throw new Error(format('Invalid option string "%s": must start with a "%s".', + optionString, + prefixChars + )); + } + + // strings starting with two prefix characters are long options + optionStrings.push(optionString); + if (optionString.length > 1 && prefixChars.indexOf(optionString[1]) >= 0) { + optionStringsLong.push(optionString); + } + }); + + // infer dest, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + var dest = options.dest || null; + delete options.dest; + + if (!dest) { + var optionStringDest = optionStringsLong.length ? optionStringsLong[0] : optionStrings[0]; + dest = $$.trimChars(optionStringDest, this.prefixChars); + + if (dest.length === 0) { + throw new Error( + format('dest= is required for options like "%s"', optionStrings.join(', ')) + ); + } + dest = dest.replace(/-/g, '_'); + } + + // return the updated keyword arguments + options.dest = dest; + options.optionStrings = optionStrings; + + return options; +}; + +ActionContainer.prototype._popActionClass = function (options, defaultValue) { + defaultValue = defaultValue || null; + + var action = (options.action || defaultValue); + delete options.action; + + var actionClass = this._registryGet('action', action, action); + return actionClass; +}; + +ActionContainer.prototype._getHandler = function () { + var handlerString = this.conflictHandler; + var handlerFuncName = '_handleConflict' + $$.capitalize(handlerString); + var func = this[handlerFuncName]; + if (typeof func === 'undefined') { + var msg = 'invalid conflict resolution value: ' + handlerString; + throw new Error(msg); + } else { + return func; + } +}; + +ActionContainer.prototype._checkConflict = function (action) { + var optionStringActions = this._optionStringActions; + var conflictOptionals = []; + + // find all options that conflict with this option + // collect pairs, the string, and an existing action that it conflicts with + action.optionStrings.forEach(function (optionString) { + var conflOptional = optionStringActions[optionString]; + if (typeof conflOptional !== 'undefined') { + conflictOptionals.push([ optionString, conflOptional ]); + } + }); + + if (conflictOptionals.length > 0) { + var conflictHandler = this._getHandler(); + conflictHandler.call(this, action, conflictOptionals); + } +}; + +ActionContainer.prototype._handleConflictError = function (action, conflOptionals) { + var conflicts = conflOptionals.map(function (pair) { return pair[0]; }); + conflicts = conflicts.join(', '); + throw argumentErrorHelper( + action, + format('Conflicting option string(s): %s', conflicts) + ); +}; + +ActionContainer.prototype._handleConflictResolve = function (action, conflOptionals) { + // remove all conflicting options + var self = this; + conflOptionals.forEach(function (pair) { + var optionString = pair[0]; + var conflictingAction = pair[1]; + // remove the conflicting option string + var i = conflictingAction.optionStrings.indexOf(optionString); + if (i >= 0) { + conflictingAction.optionStrings.splice(i, 1); + } + delete self._optionStringActions[optionString]; + // if the option now has no option string, remove it from the + // container holding it + if (conflictingAction.optionStrings.length === 0) { + conflictingAction.container._removeAction(conflictingAction); + } + }); +}; diff --git a/node_modules/argparse/lib/argparse.js b/node_modules/argparse/lib/argparse.js new file mode 100644 index 000000000..f2a2c51d9 --- /dev/null +++ b/node_modules/argparse/lib/argparse.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports.ArgumentParser = require('./argument_parser.js'); +module.exports.Namespace = require('./namespace'); +module.exports.Action = require('./action'); +module.exports.HelpFormatter = require('./help/formatter.js'); +module.exports.Const = require('./const.js'); + +module.exports.ArgumentDefaultsHelpFormatter = + require('./help/added_formatters.js').ArgumentDefaultsHelpFormatter; +module.exports.RawDescriptionHelpFormatter = + require('./help/added_formatters.js').RawDescriptionHelpFormatter; +module.exports.RawTextHelpFormatter = + require('./help/added_formatters.js').RawTextHelpFormatter; diff --git a/node_modules/argparse/lib/argument/error.js b/node_modules/argparse/lib/argument/error.js new file mode 100644 index 000000000..c8a02a08b --- /dev/null +++ b/node_modules/argparse/lib/argument/error.js @@ -0,0 +1,50 @@ +'use strict'; + + +var format = require('util').format; + + +var ERR_CODE = 'ARGError'; + +/*:nodoc:* + * argumentError(argument, message) -> TypeError + * - argument (Object): action with broken argument + * - message (String): error message + * + * Error format helper. An error from creating or using an argument + * (optional or positional). The string value of this exception + * is the message, augmented with information + * about the argument that caused it. + * + * #####Example + * + * var argumentErrorHelper = require('./argument/error'); + * if (conflictOptionals.length > 0) { + * throw argumentErrorHelper( + * action, + * format('Conflicting option string(s): %s', conflictOptionals.join(', ')) + * ); + * } + * + **/ +module.exports = function (argument, message) { + var argumentName = null; + var errMessage; + var err; + + if (argument.getName) { + argumentName = argument.getName(); + } else { + argumentName = '' + argument; + } + + if (!argumentName) { + errMessage = message; + } else { + errMessage = format('argument "%s": %s', argumentName, message); + } + + err = new TypeError(errMessage); + err.code = ERR_CODE; + return err; +}; diff --git a/node_modules/argparse/lib/argument/exclusive.js b/node_modules/argparse/lib/argument/exclusive.js new file mode 100644 index 000000000..8287e00d0 --- /dev/null +++ b/node_modules/argparse/lib/argument/exclusive.js @@ -0,0 +1,54 @@ +/** internal + * class MutuallyExclusiveGroup + * + * Group arguments. + * By default, ArgumentParser groups command-line arguments + * into “positional arguments” and “optional arguments” + * when displaying help messages. When there is a better + * conceptual grouping of arguments than this default one, + * appropriate groups can be created using the addArgumentGroup() method + * + * This class inherited from [[ArgumentContainer]] + **/ +'use strict'; + +var util = require('util'); + +var ArgumentGroup = require('./group'); + +/** + * new MutuallyExclusiveGroup(container, options) + * - container (object): main container + * - options (object): options.required -> true/false + * + * `required` could be an argument itself, but making it a property of + * the options argument is more consistent with the JS adaptation of the Python) + **/ +var MutuallyExclusiveGroup = module.exports = function MutuallyExclusiveGroup(container, options) { + var required; + options = options || {}; + required = options.required || false; + ArgumentGroup.call(this, container); + this.required = required; + +}; +util.inherits(MutuallyExclusiveGroup, ArgumentGroup); + + +MutuallyExclusiveGroup.prototype._addAction = function (action) { + var msg; + if (action.required) { + msg = 'mutually exclusive arguments must be optional'; + throw new Error(msg); + } + action = this._container._addAction(action); + this._groupActions.push(action); + return action; +}; + + +MutuallyExclusiveGroup.prototype._removeAction = function (action) { + this._container._removeAction(action); + this._groupActions.remove(action); +}; + diff --git a/node_modules/argparse/lib/argument/group.js b/node_modules/argparse/lib/argument/group.js new file mode 100644 index 000000000..58b271f2f --- /dev/null +++ b/node_modules/argparse/lib/argument/group.js @@ -0,0 +1,75 @@ +/** internal + * class ArgumentGroup + * + * Group arguments. + * By default, ArgumentParser groups command-line arguments + * into “positional arguments” and “optional arguments” + * when displaying help messages. When there is a better + * conceptual grouping of arguments than this default one, + * appropriate groups can be created using the addArgumentGroup() method + * + * This class inherited from [[ArgumentContainer]] + **/ +'use strict'; + +var util = require('util'); + +var ActionContainer = require('../action_container'); + + +/** + * new ArgumentGroup(container, options) + * - container (object): main container + * - options (object): hash of group options + * + * #### options + * - **prefixChars** group name prefix + * - **argumentDefault** default argument value + * - **title** group title + * - **description** group description + * + **/ +var ArgumentGroup = module.exports = function ArgumentGroup(container, options) { + + options = options || {}; + + // add any missing keyword arguments by checking the container + options.conflictHandler = (options.conflictHandler || container.conflictHandler); + options.prefixChars = (options.prefixChars || container.prefixChars); + options.argumentDefault = (options.argumentDefault || container.argumentDefault); + + ActionContainer.call(this, options); + + // group attributes + this.title = options.title; + this._groupActions = []; + + // share most attributes with the container + this._container = container; + this._registries = container._registries; + this._actions = container._actions; + this._optionStringActions = container._optionStringActions; + this._defaults = container._defaults; + this._hasNegativeNumberOptionals = container._hasNegativeNumberOptionals; + this._mutuallyExclusiveGroups = container._mutuallyExclusiveGroups; +}; +util.inherits(ArgumentGroup, ActionContainer); + + +ArgumentGroup.prototype._addAction = function (action) { + // Parent add action + action = ActionContainer.prototype._addAction.call(this, action); + this._groupActions.push(action); + return action; +}; + + +ArgumentGroup.prototype._removeAction = function (action) { + // Parent remove action + ActionContainer.prototype._removeAction.call(this, action); + var actionIndex = this._groupActions.indexOf(action); + if (actionIndex >= 0) { + this._groupActions.splice(actionIndex, 1); + } +}; + diff --git a/node_modules/argparse/lib/argument_parser.js b/node_modules/argparse/lib/argument_parser.js new file mode 100644 index 000000000..bd9a59a45 --- /dev/null +++ b/node_modules/argparse/lib/argument_parser.js @@ -0,0 +1,1161 @@ +/** + * class ArgumentParser + * + * Object for parsing command line strings into js objects. + * + * Inherited from [[ActionContainer]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; +var Path = require('path'); +var sprintf = require('sprintf-js').sprintf; + +// Constants +var c = require('./const'); + +var $$ = require('./utils'); + +var ActionContainer = require('./action_container'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + +var HelpFormatter = require('./help/formatter'); + +var Namespace = require('./namespace'); + + +/** + * new ArgumentParser(options) + * + * Create a new ArgumentParser object. + * + * ##### Options: + * - `prog` The name of the program (default: Path.basename(process.argv[1])) + * - `usage` A usage message (default: auto-generated from arguments) + * - `description` A description of what the program does + * - `epilog` Text following the argument descriptions + * - `parents` Parsers whose arguments should be copied into this one + * - `formatterClass` HelpFormatter class for printing help messages + * - `prefixChars` Characters that prefix optional arguments + * - `fromfilePrefixChars` Characters that prefix files containing additional arguments + * - `argumentDefault` The default value for all arguments + * - `addHelp` Add a -h/-help option + * - `conflictHandler` Specifies how to handle conflicting argument names + * - `debug` Enable debug mode. Argument errors throw exception in + * debug mode and process.exit in normal. Used for development and + * testing (default: false) + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#argumentparser-objects + **/ +function ArgumentParser(options) { + if (!(this instanceof ArgumentParser)) { + return new ArgumentParser(options); + } + var self = this; + options = options || {}; + + options.description = (options.description || null); + options.argumentDefault = (options.argumentDefault || null); + options.prefixChars = (options.prefixChars || '-'); + options.conflictHandler = (options.conflictHandler || 'error'); + ActionContainer.call(this, options); + + options.addHelp = typeof options.addHelp === 'undefined' || !!options.addHelp; + options.parents = options.parents || []; + // default program name + options.prog = (options.prog || Path.basename(process.argv[1])); + this.prog = options.prog; + this.usage = options.usage; + this.epilog = options.epilog; + this.version = options.version; + + this.debug = (options.debug === true); + + this.formatterClass = (options.formatterClass || HelpFormatter); + this.fromfilePrefixChars = options.fromfilePrefixChars || null; + this._positionals = this.addArgumentGroup({ title: 'Positional arguments' }); + this._optionals = this.addArgumentGroup({ title: 'Optional arguments' }); + this._subparsers = null; + + // register types + function FUNCTION_IDENTITY(o) { + return o; + } + this.register('type', 'auto', FUNCTION_IDENTITY); + this.register('type', null, FUNCTION_IDENTITY); + this.register('type', 'int', function (x) { + var result = parseInt(x, 10); + if (isNaN(result)) { + throw new Error(x + ' is not a valid integer.'); + } + return result; + }); + this.register('type', 'float', function (x) { + var result = parseFloat(x); + if (isNaN(result)) { + throw new Error(x + ' is not a valid float.'); + } + return result; + }); + this.register('type', 'string', function (x) { + return '' + x; + }); + + // add help and version arguments if necessary + var defaultPrefix = (this.prefixChars.indexOf('-') > -1) ? '-' : this.prefixChars[0]; + if (options.addHelp) { + this.addArgument( + [ defaultPrefix + 'h', defaultPrefix + defaultPrefix + 'help' ], + { + action: 'help', + defaultValue: c.SUPPRESS, + help: 'Show this help message and exit.' + } + ); + } + if (typeof this.version !== 'undefined') { + this.addArgument( + [ defaultPrefix + 'v', defaultPrefix + defaultPrefix + 'version' ], + { + action: 'version', + version: this.version, + defaultValue: c.SUPPRESS, + help: "Show program's version number and exit." + } + ); + } + + // add parent arguments and defaults + options.parents.forEach(function (parent) { + self._addContainerActions(parent); + if (typeof parent._defaults !== 'undefined') { + for (var defaultKey in parent._defaults) { + if (parent._defaults.hasOwnProperty(defaultKey)) { + self._defaults[defaultKey] = parent._defaults[defaultKey]; + } + } + } + }); +} + +util.inherits(ArgumentParser, ActionContainer); + +/** + * ArgumentParser#addSubparsers(options) -> [[ActionSubparsers]] + * - options (object): hash of options see [[ActionSubparsers.new]] + * + * See also [subcommands][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#sub-commands + **/ +ArgumentParser.prototype.addSubparsers = function (options) { + if (this._subparsers) { + this.error('Cannot have multiple subparser arguments.'); + } + + options = options || {}; + options.debug = (this.debug === true); + options.optionStrings = []; + options.parserClass = (options.parserClass || ArgumentParser); + + + if (!!options.title || !!options.description) { + + this._subparsers = this.addArgumentGroup({ + title: (options.title || 'subcommands'), + description: options.description + }); + delete options.title; + delete options.description; + + } else { + this._subparsers = this._positionals; + } + + // prog defaults to the usage message of this parser, skipping + // optional arguments and with no "usage:" prefix + if (!options.prog) { + var formatter = this._getFormatter(); + var positionals = this._getPositionalActions(); + var groups = this._mutuallyExclusiveGroups; + formatter.addUsage(this.usage, positionals, groups, ''); + options.prog = formatter.formatHelp().trim(); + } + + // create the parsers action and add it to the positionals list + var ParsersClass = this._popActionClass(options, 'parsers'); + var action = new ParsersClass(options); + this._subparsers._addAction(action); + + // return the created parsers action + return action; +}; + +ArgumentParser.prototype._addAction = function (action) { + if (action.isOptional()) { + this._optionals._addAction(action); + } else { + this._positionals._addAction(action); + } + return action; +}; + +ArgumentParser.prototype._getOptionalActions = function () { + return this._actions.filter(function (action) { + return action.isOptional(); + }); +}; + +ArgumentParser.prototype._getPositionalActions = function () { + return this._actions.filter(function (action) { + return action.isPositional(); + }); +}; + + +/** + * ArgumentParser#parseArgs(args, namespace) -> Namespace|Object + * - args (array): input elements + * - namespace (Namespace|Object): result object + * + * Parsed args and throws error if some arguments are not recognized + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-parse-args-method + **/ +ArgumentParser.prototype.parseArgs = function (args, namespace) { + var argv; + var result = this.parseKnownArgs(args, namespace); + + args = result[0]; + argv = result[1]; + if (argv && argv.length > 0) { + this.error( + format('Unrecognized arguments: %s.', argv.join(' ')) + ); + } + return args; +}; + +/** + * ArgumentParser#parseKnownArgs(args, namespace) -> array + * - args (array): input options + * - namespace (Namespace|Object): result object + * + * Parse known arguments and return tuple of result object + * and unknown args + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#partial-parsing + **/ +ArgumentParser.prototype.parseKnownArgs = function (args, namespace) { + var self = this; + + // args default to the system args + args = args || process.argv.slice(2); + + // default Namespace built from parser defaults + namespace = namespace || new Namespace(); + + self._actions.forEach(function (action) { + if (action.dest !== c.SUPPRESS) { + if (!$$.has(namespace, action.dest)) { + if (action.defaultValue !== c.SUPPRESS) { + var defaultValue = action.defaultValue; + if (typeof action.defaultValue === 'string') { + defaultValue = self._getValue(action, defaultValue); + } + namespace[action.dest] = defaultValue; + } + } + } + }); + + Object.keys(self._defaults).forEach(function (dest) { + namespace[dest] = self._defaults[dest]; + }); + + // parse the arguments and exit if there are any errors + try { + var res = this._parseKnownArgs(args, namespace); + + namespace = res[0]; + args = res[1]; + if ($$.has(namespace, c._UNRECOGNIZED_ARGS_ATTR)) { + args = $$.arrayUnion(args, namespace[c._UNRECOGNIZED_ARGS_ATTR]); + delete namespace[c._UNRECOGNIZED_ARGS_ATTR]; + } + return [ namespace, args ]; + } catch (e) { + this.error(e); + } +}; + +ArgumentParser.prototype._parseKnownArgs = function (argStrings, namespace) { + var self = this; + + var extras = []; + + // replace arg strings that are file references + if (this.fromfilePrefixChars !== null) { + argStrings = this._readArgsFromFiles(argStrings); + } + // map all mutually exclusive arguments to the other arguments + // they can't occur with + // Python has 'conflicts = action_conflicts.setdefault(mutex_action, [])' + // though I can't conceive of a way in which an action could be a member + // of two different mutually exclusive groups. + + function actionHash(action) { + // some sort of hashable key for this action + // action itself cannot be a key in actionConflicts + // I think getName() (join of optionStrings) is unique enough + return action.getName(); + } + + var conflicts, key; + var actionConflicts = {}; + + this._mutuallyExclusiveGroups.forEach(function (mutexGroup) { + mutexGroup._groupActions.forEach(function (mutexAction, i, groupActions) { + key = actionHash(mutexAction); + if (!$$.has(actionConflicts, key)) { + actionConflicts[key] = []; + } + conflicts = actionConflicts[key]; + conflicts.push.apply(conflicts, groupActions.slice(0, i)); + conflicts.push.apply(conflicts, groupActions.slice(i + 1)); + }); + }); + + // find all option indices, and determine the arg_string_pattern + // which has an 'O' if there is an option at an index, + // an 'A' if there is an argument, or a '-' if there is a '--' + var optionStringIndices = {}; + + var argStringPatternParts = []; + + argStrings.forEach(function (argString, argStringIndex) { + if (argString === '--') { + argStringPatternParts.push('-'); + while (argStringIndex < argStrings.length) { + argStringPatternParts.push('A'); + argStringIndex++; + } + } else { + // otherwise, add the arg to the arg strings + // and note the index if it was an option + var pattern; + var optionTuple = self._parseOptional(argString); + if (!optionTuple) { + pattern = 'A'; + } else { + optionStringIndices[argStringIndex] = optionTuple; + pattern = 'O'; + } + argStringPatternParts.push(pattern); + } + }); + var argStringsPattern = argStringPatternParts.join(''); + + var seenActions = []; + var seenNonDefaultActions = []; + + + function takeAction(action, argumentStrings, optionString) { + seenActions.push(action); + var argumentValues = self._getValues(action, argumentStrings); + + // error if this argument is not allowed with other previously + // seen arguments, assuming that actions that use the default + // value don't really count as "present" + if (argumentValues !== action.defaultValue) { + seenNonDefaultActions.push(action); + if (actionConflicts[actionHash(action)]) { + actionConflicts[actionHash(action)].forEach(function (actionConflict) { + if (seenNonDefaultActions.indexOf(actionConflict) >= 0) { + throw argumentErrorHelper( + action, + format('Not allowed with argument "%s".', actionConflict.getName()) + ); + } + }); + } + } + + if (argumentValues !== c.SUPPRESS) { + action.call(self, namespace, argumentValues, optionString); + } + } + + function consumeOptional(startIndex) { + // get the optional identified at this index + var optionTuple = optionStringIndices[startIndex]; + var action = optionTuple[0]; + var optionString = optionTuple[1]; + var explicitArg = optionTuple[2]; + + // identify additional optionals in the same arg string + // (e.g. -xyz is the same as -x -y -z if no args are required) + var actionTuples = []; + + var args, argCount, start, stop; + + for (;;) { + if (!action) { + extras.push(argStrings[startIndex]); + return startIndex + 1; + } + if (explicitArg) { + argCount = self._matchArgument(action, 'A'); + + // if the action is a single-dash option and takes no + // arguments, try to parse more single-dash options out + // of the tail of the option string + var chars = self.prefixChars; + if (argCount === 0 && chars.indexOf(optionString[1]) < 0) { + actionTuples.push([ action, [], optionString ]); + optionString = optionString[0] + explicitArg[0]; + var newExplicitArg = explicitArg.slice(1) || null; + var optionalsMap = self._optionStringActions; + + if (Object.keys(optionalsMap).indexOf(optionString) >= 0) { + action = optionalsMap[optionString]; + explicitArg = newExplicitArg; + } else { + throw argumentErrorHelper(action, sprintf('ignored explicit argument %r', explicitArg)); + } + } else if (argCount === 1) { + // if the action expect exactly one argument, we've + // successfully matched the option; exit the loop + stop = startIndex + 1; + args = [ explicitArg ]; + actionTuples.push([ action, args, optionString ]); + break; + } else { + // error if a double-dash option did not use the + // explicit argument + throw argumentErrorHelper(action, sprintf('ignored explicit argument %r', explicitArg)); + } + } else { + // if there is no explicit argument, try to match the + // optional's string arguments with the following strings + // if successful, exit the loop + + start = startIndex + 1; + var selectedPatterns = argStringsPattern.substr(start); + + argCount = self._matchArgument(action, selectedPatterns); + stop = start + argCount; + + + args = argStrings.slice(start, stop); + + actionTuples.push([ action, args, optionString ]); + break; + } + + } + + // add the Optional to the list and return the index at which + // the Optional's string args stopped + if (actionTuples.length < 1) { + throw new Error('length should be > 0'); + } + for (var i = 0; i < actionTuples.length; i++) { + takeAction.apply(self, actionTuples[i]); + } + return stop; + } + + // the list of Positionals left to be parsed; this is modified + // by consume_positionals() + var positionals = self._getPositionalActions(); + + function consumePositionals(startIndex) { + // match as many Positionals as possible + var selectedPattern = argStringsPattern.substr(startIndex); + var argCounts = self._matchArgumentsPartial(positionals, selectedPattern); + + // slice off the appropriate arg strings for each Positional + // and add the Positional and its args to the list + for (var i = 0; i < positionals.length; i++) { + var action = positionals[i]; + var argCount = argCounts[i]; + if (typeof argCount === 'undefined') { + continue; + } + var args = argStrings.slice(startIndex, startIndex + argCount); + + startIndex += argCount; + takeAction(action, args); + } + + // slice off the Positionals that we just parsed and return the + // index at which the Positionals' string args stopped + positionals = positionals.slice(argCounts.length); + return startIndex; + } + + // consume Positionals and Optionals alternately, until we have + // passed the last option string + var startIndex = 0; + var position; + + var maxOptionStringIndex = -1; + + Object.keys(optionStringIndices).forEach(function (position) { + maxOptionStringIndex = Math.max(maxOptionStringIndex, parseInt(position, 10)); + }); + + var positionalsEndIndex, nextOptionStringIndex; + + while (startIndex <= maxOptionStringIndex) { + // consume any Positionals preceding the next option + nextOptionStringIndex = null; + for (position in optionStringIndices) { + if (!optionStringIndices.hasOwnProperty(position)) { continue; } + + position = parseInt(position, 10); + if (position >= startIndex) { + if (nextOptionStringIndex !== null) { + nextOptionStringIndex = Math.min(nextOptionStringIndex, position); + } else { + nextOptionStringIndex = position; + } + } + } + + if (startIndex !== nextOptionStringIndex) { + positionalsEndIndex = consumePositionals(startIndex); + // only try to parse the next optional if we didn't consume + // the option string during the positionals parsing + if (positionalsEndIndex > startIndex) { + startIndex = positionalsEndIndex; + continue; + } else { + startIndex = positionalsEndIndex; + } + } + + // if we consumed all the positionals we could and we're not + // at the index of an option string, there were extra arguments + if (!optionStringIndices[startIndex]) { + var strings = argStrings.slice(startIndex, nextOptionStringIndex); + extras = extras.concat(strings); + startIndex = nextOptionStringIndex; + } + // consume the next optional and any arguments for it + startIndex = consumeOptional(startIndex); + } + + // consume any positionals following the last Optional + var stopIndex = consumePositionals(startIndex); + + // if we didn't consume all the argument strings, there were extras + extras = extras.concat(argStrings.slice(stopIndex)); + + // if we didn't use all the Positional objects, there were too few + // arg strings supplied. + if (positionals.length > 0) { + self.error('too few arguments'); + } + + // make sure all required actions were present + self._actions.forEach(function (action) { + if (action.required) { + if (seenActions.indexOf(action) < 0) { + self.error(format('Argument "%s" is required', action.getName())); + } + } + }); + + // make sure all required groups have one option present + var actionUsed = false; + self._mutuallyExclusiveGroups.forEach(function (group) { + if (group.required) { + actionUsed = group._groupActions.some(function (action) { + return seenNonDefaultActions.indexOf(action) !== -1; + }); + + // if no actions were used, report the error + if (!actionUsed) { + var names = []; + group._groupActions.forEach(function (action) { + if (action.help !== c.SUPPRESS) { + names.push(action.getName()); + } + }); + names = names.join(' '); + var msg = 'one of the arguments ' + names + ' is required'; + self.error(msg); + } + } + }); + + // return the updated namespace and the extra arguments + return [ namespace, extras ]; +}; + +ArgumentParser.prototype._readArgsFromFiles = function (argStrings) { + // expand arguments referencing files + var self = this; + var fs = require('fs'); + var newArgStrings = []; + argStrings.forEach(function (argString) { + if (self.fromfilePrefixChars.indexOf(argString[0]) < 0) { + // for regular arguments, just add them back into the list + newArgStrings.push(argString); + } else { + // replace arguments referencing files with the file content + try { + var argstrs = []; + var filename = argString.slice(1); + var content = fs.readFileSync(filename, 'utf8'); + content = content.trim().split('\n'); + content.forEach(function (argLine) { + self.convertArgLineToArgs(argLine).forEach(function (arg) { + argstrs.push(arg); + }); + argstrs = self._readArgsFromFiles(argstrs); + }); + newArgStrings.push.apply(newArgStrings, argstrs); + } catch (error) { + return self.error(error.message); + } + } + }); + return newArgStrings; +}; + +ArgumentParser.prototype.convertArgLineToArgs = function (argLine) { + return [ argLine ]; +}; + +ArgumentParser.prototype._matchArgument = function (action, regexpArgStrings) { + + // match the pattern for this action to the arg strings + var regexpNargs = new RegExp('^' + this._getNargsPattern(action)); + var matches = regexpArgStrings.match(regexpNargs); + var message; + + // throw an exception if we weren't able to find a match + if (!matches) { + switch (action.nargs) { + /*eslint-disable no-undefined*/ + case undefined: + case null: + message = 'Expected one argument.'; + break; + case c.OPTIONAL: + message = 'Expected at most one argument.'; + break; + case c.ONE_OR_MORE: + message = 'Expected at least one argument.'; + break; + default: + message = 'Expected %s argument(s)'; + } + + throw argumentErrorHelper( + action, + format(message, action.nargs) + ); + } + // return the number of arguments matched + return matches[1].length; +}; + +ArgumentParser.prototype._matchArgumentsPartial = function (actions, regexpArgStrings) { + // progressively shorten the actions list by slicing off the + // final actions until we find a match + var self = this; + var result = []; + var actionSlice, pattern, matches; + var i, j; + + function getLength(string) { + return string.length; + } + + for (i = actions.length; i > 0; i--) { + pattern = ''; + actionSlice = actions.slice(0, i); + for (j = 0; j < actionSlice.length; j++) { + pattern += self._getNargsPattern(actionSlice[j]); + } + + pattern = new RegExp('^' + pattern); + matches = regexpArgStrings.match(pattern); + + if (matches && matches.length > 0) { + // need only groups + matches = matches.splice(1); + result = result.concat(matches.map(getLength)); + break; + } + } + + // return the list of arg string counts + return result; +}; + +ArgumentParser.prototype._parseOptional = function (argString) { + var action, optionString, argExplicit, optionTuples; + + // if it's an empty string, it was meant to be a positional + if (!argString) { + return null; + } + + // if it doesn't start with a prefix, it was meant to be positional + if (this.prefixChars.indexOf(argString[0]) < 0) { + return null; + } + + // if the option string is present in the parser, return the action + if (this._optionStringActions[argString]) { + return [ this._optionStringActions[argString], argString, null ]; + } + + // if it's just a single character, it was meant to be positional + if (argString.length === 1) { + return null; + } + + // if the option string before the "=" is present, return the action + if (argString.indexOf('=') >= 0) { + optionString = argString.split('=', 1)[0]; + argExplicit = argString.slice(optionString.length + 1); + + if (this._optionStringActions[optionString]) { + action = this._optionStringActions[optionString]; + return [ action, optionString, argExplicit ]; + } + } + + // search through all possible prefixes of the option string + // and all actions in the parser for possible interpretations + optionTuples = this._getOptionTuples(argString); + + // if multiple actions match, the option string was ambiguous + if (optionTuples.length > 1) { + var optionStrings = optionTuples.map(function (optionTuple) { + return optionTuple[1]; + }); + this.error(format( + 'Ambiguous option: "%s" could match %s.', + argString, optionStrings.join(', ') + )); + // if exactly one action matched, this segmentation is good, + // so return the parsed action + } else if (optionTuples.length === 1) { + return optionTuples[0]; + } + + // if it was not found as an option, but it looks like a negative + // number, it was meant to be positional + // unless there are negative-number-like options + if (argString.match(this._regexpNegativeNumber)) { + if (!this._hasNegativeNumberOptionals.some(Boolean)) { + return null; + } + } + // if it contains a space, it was meant to be a positional + if (argString.search(' ') >= 0) { + return null; + } + + // it was meant to be an optional but there is no such option + // in this parser (though it might be a valid option in a subparser) + return [ null, argString, null ]; +}; + +ArgumentParser.prototype._getOptionTuples = function (optionString) { + var result = []; + var chars = this.prefixChars; + var optionPrefix; + var argExplicit; + var action; + var actionOptionString; + + // option strings starting with two prefix characters are only split at + // the '=' + if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) >= 0) { + if (optionString.indexOf('=') >= 0) { + var optionStringSplit = optionString.split('=', 1); + + optionPrefix = optionStringSplit[0]; + argExplicit = optionStringSplit[1]; + } else { + optionPrefix = optionString; + argExplicit = null; + } + + for (actionOptionString in this._optionStringActions) { + if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + action = this._optionStringActions[actionOptionString]; + result.push([ action, actionOptionString, argExplicit ]); + } + } + + // single character options can be concatenated with their arguments + // but multiple character options always have to have their argument + // separate + } else if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) < 0) { + optionPrefix = optionString; + argExplicit = null; + var optionPrefixShort = optionString.substr(0, 2); + var argExplicitShort = optionString.substr(2); + + for (actionOptionString in this._optionStringActions) { + if (!$$.has(this._optionStringActions, actionOptionString)) continue; + + action = this._optionStringActions[actionOptionString]; + if (actionOptionString === optionPrefixShort) { + result.push([ action, actionOptionString, argExplicitShort ]); + } else if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + result.push([ action, actionOptionString, argExplicit ]); + } + } + + // shouldn't ever get here + } else { + throw new Error(format('Unexpected option string: %s.', optionString)); + } + // return the collected option tuples + return result; +}; + +ArgumentParser.prototype._getNargsPattern = function (action) { + // in all examples below, we have to allow for '--' args + // which are represented as '-' in the pattern + var regexpNargs; + + switch (action.nargs) { + // the default (null) is assumed to be a single argument + case undefined: + case null: + regexpNargs = '(-*A-*)'; + break; + // allow zero or more arguments + case c.OPTIONAL: + regexpNargs = '(-*A?-*)'; + break; + // allow zero or more arguments + case c.ZERO_OR_MORE: + regexpNargs = '(-*[A-]*)'; + break; + // allow one or more arguments + case c.ONE_OR_MORE: + regexpNargs = '(-*A[A-]*)'; + break; + // allow any number of options or arguments + case c.REMAINDER: + regexpNargs = '([-AO]*)'; + break; + // allow one argument followed by any number of options or arguments + case c.PARSER: + regexpNargs = '(-*A[-AO]*)'; + break; + // all others should be integers + default: + regexpNargs = '(-*' + $$.repeat('-*A', action.nargs) + '-*)'; + } + + // if this is an optional action, -- is not allowed + if (action.isOptional()) { + regexpNargs = regexpNargs.replace(/-\*/g, ''); + regexpNargs = regexpNargs.replace(/-/g, ''); + } + + // return the pattern + return regexpNargs; +}; + +// +// Value conversion methods +// + +ArgumentParser.prototype._getValues = function (action, argStrings) { + var self = this; + + // for everything but PARSER args, strip out '--' + if (action.nargs !== c.PARSER && action.nargs !== c.REMAINDER) { + argStrings = argStrings.filter(function (arrayElement) { + return arrayElement !== '--'; + }); + } + + var value, argString; + + // optional argument produces a default when not present + if (argStrings.length === 0 && action.nargs === c.OPTIONAL) { + + value = (action.isOptional()) ? action.constant : action.defaultValue; + + if (typeof (value) === 'string') { + value = this._getValue(action, value); + this._checkValue(action, value); + } + + // when nargs='*' on a positional, if there were no command-line + // args, use the default if it is anything other than None + } else if (argStrings.length === 0 && action.nargs === c.ZERO_OR_MORE && + action.optionStrings.length === 0) { + + value = (action.defaultValue || argStrings); + this._checkValue(action, value); + + // single argument or optional argument produces a single value + } else if (argStrings.length === 1 && + (!action.nargs || action.nargs === c.OPTIONAL)) { + + argString = argStrings[0]; + value = this._getValue(action, argString); + this._checkValue(action, value); + + // REMAINDER arguments convert all values, checking none + } else if (action.nargs === c.REMAINDER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + + // PARSER arguments convert all values, but check only the first + } else if (action.nargs === c.PARSER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + this._checkValue(action, value[0]); + + // all other types of nargs produce a list + } else { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + value.forEach(function (v) { + self._checkValue(action, v); + }); + } + + // return the converted value + return value; +}; + +ArgumentParser.prototype._getValue = function (action, argString) { + var result; + + var typeFunction = this._registryGet('type', action.type, action.type); + if (typeof typeFunction !== 'function') { + var message = format('%s is not callable', typeFunction); + throw argumentErrorHelper(action, message); + } + + // convert the value to the appropriate type + try { + result = typeFunction(argString); + + // ArgumentTypeErrors indicate errors + // If action.type is not a registered string, it is a function + // Try to deduce its name for inclusion in the error message + // Failing that, include the error message it raised. + } catch (e) { + var name = null; + if (typeof action.type === 'string') { + name = action.type; + } else { + name = action.type.name || action.type.displayName || ''; + } + var msg = format('Invalid %s value: %s', name, argString); + if (name === '') { msg += '\n' + e.message; } + throw argumentErrorHelper(action, msg); + } + // return the converted value + return result; +}; + +ArgumentParser.prototype._checkValue = function (action, value) { + // converted value must be one of the choices (if specified) + var choices = action.choices; + if (choices) { + // choise for argument can by array or string + if ((typeof choices === 'string' || Array.isArray(choices)) && + choices.indexOf(value) !== -1) { + return; + } + // choise for subparsers can by only hash + if (typeof choices === 'object' && !Array.isArray(choices) && choices[value]) { + return; + } + + if (typeof choices === 'string') { + choices = choices.split('').join(', '); + } else if (Array.isArray(choices)) { + choices = choices.join(', '); + } else { + choices = Object.keys(choices).join(', '); + } + var message = format('Invalid choice: %s (choose from [%s])', value, choices); + throw argumentErrorHelper(action, message); + } +}; + +// +// Help formatting methods +// + +/** + * ArgumentParser#formatUsage -> string + * + * Return usage string + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatUsage = function () { + var formatter = this._getFormatter(); + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + return formatter.formatHelp(); +}; + +/** + * ArgumentParser#formatHelp -> string + * + * Return help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatHelp = function () { + var formatter = this._getFormatter(); + + // usage + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + + // description + formatter.addText(this.description); + + // positionals, optionals and user-defined groups + this._actionGroups.forEach(function (actionGroup) { + formatter.startSection(actionGroup.title); + formatter.addText(actionGroup.description); + formatter.addArguments(actionGroup._groupActions); + formatter.endSection(); + }); + + // epilog + formatter.addText(this.epilog); + + // determine help from format above + return formatter.formatHelp(); +}; + +ArgumentParser.prototype._getFormatter = function () { + var FormatterClass = this.formatterClass; + var formatter = new FormatterClass({ prog: this.prog }); + return formatter; +}; + +// +// Print functions +// + +/** + * ArgumentParser#printUsage() -> Void + * + * Print usage + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printUsage = function () { + this._printMessage(this.formatUsage()); +}; + +/** + * ArgumentParser#printHelp() -> Void + * + * Print help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printHelp = function () { + this._printMessage(this.formatHelp()); +}; + +ArgumentParser.prototype._printMessage = function (message, stream) { + if (!stream) { + stream = process.stdout; + } + if (message) { + stream.write('' + message); + } +}; + +// +// Exit functions +// + +/** + * ArgumentParser#exit(status=0, message) -> Void + * - status (int): exit status + * - message (string): message + * + * Print message in stderr/stdout and exit program + **/ +ArgumentParser.prototype.exit = function (status, message) { + if (message) { + if (status === 0) { + this._printMessage(message); + } else { + this._printMessage(message, process.stderr); + } + } + + process.exit(status); +}; + +/** + * ArgumentParser#error(message) -> Void + * - err (Error|string): message + * + * Error method Prints a usage message incorporating the message to stderr and + * exits. If you override this in a subclass, + * it should not return -- it should + * either exit or throw an exception. + * + **/ +ArgumentParser.prototype.error = function (err) { + var message; + if (err instanceof Error) { + if (this.debug === true) { + throw err; + } + message = err.message; + } else { + message = err; + } + var msg = format('%s: error: %s', this.prog, message) + c.EOL; + + if (this.debug === true) { + throw new Error(msg); + } + + this.printUsage(process.stderr); + + return this.exit(2, msg); +}; + +module.exports = ArgumentParser; diff --git a/node_modules/argparse/lib/const.js b/node_modules/argparse/lib/const.js new file mode 100644 index 000000000..b1fd4ced4 --- /dev/null +++ b/node_modules/argparse/lib/const.js @@ -0,0 +1,21 @@ +// +// Constants +// + +'use strict'; + +module.exports.EOL = '\n'; + +module.exports.SUPPRESS = '==SUPPRESS=='; + +module.exports.OPTIONAL = '?'; + +module.exports.ZERO_OR_MORE = '*'; + +module.exports.ONE_OR_MORE = '+'; + +module.exports.PARSER = 'A...'; + +module.exports.REMAINDER = '...'; + +module.exports._UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'; diff --git a/node_modules/argparse/lib/help/added_formatters.js b/node_modules/argparse/lib/help/added_formatters.js new file mode 100644 index 000000000..f8e42998e --- /dev/null +++ b/node_modules/argparse/lib/help/added_formatters.js @@ -0,0 +1,87 @@ +'use strict'; + +var util = require('util'); + +// Constants +var c = require('../const'); + +var $$ = require('../utils'); +var HelpFormatter = require('./formatter.js'); + +/** + * new RawDescriptionHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawDescriptionHelpFormatter, ...}) + * + * Help message formatter which adds default values to argument help. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +function ArgumentDefaultsHelpFormatter(options) { + HelpFormatter.call(this, options); +} + +util.inherits(ArgumentDefaultsHelpFormatter, HelpFormatter); + +ArgumentDefaultsHelpFormatter.prototype._getHelpString = function (action) { + var help = action.help; + if (action.help.indexOf('%(defaultValue)s') === -1) { + if (action.defaultValue !== c.SUPPRESS) { + var defaulting_nargs = [ c.OPTIONAL, c.ZERO_OR_MORE ]; + if (action.isOptional() || (defaulting_nargs.indexOf(action.nargs) >= 0)) { + help += ' (default: %(defaultValue)s)'; + } + } + } + return help; +}; + +module.exports.ArgumentDefaultsHelpFormatter = ArgumentDefaultsHelpFormatter; + +/** + * new RawDescriptionHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawDescriptionHelpFormatter, ...}) + * + * Help message formatter which retains any formatting in descriptions. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +function RawDescriptionHelpFormatter(options) { + HelpFormatter.call(this, options); +} + +util.inherits(RawDescriptionHelpFormatter, HelpFormatter); + +RawDescriptionHelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = text.split('\n'); + lines = lines.map(function (line) { + return $$.trimEnd(indent + line); + }); + return lines.join('\n'); +}; +module.exports.RawDescriptionHelpFormatter = RawDescriptionHelpFormatter; + +/** + * new RawTextHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawTextHelpFormatter, ...}) + * + * Help message formatter which retains formatting of all help text. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +function RawTextHelpFormatter(options) { + RawDescriptionHelpFormatter.call(this, options); +} + +util.inherits(RawTextHelpFormatter, RawDescriptionHelpFormatter); + +RawTextHelpFormatter.prototype._splitLines = function (text) { + return text.split('\n'); +}; + +module.exports.RawTextHelpFormatter = RawTextHelpFormatter; diff --git a/node_modules/argparse/lib/help/formatter.js b/node_modules/argparse/lib/help/formatter.js new file mode 100644 index 000000000..29036c14b --- /dev/null +++ b/node_modules/argparse/lib/help/formatter.js @@ -0,0 +1,795 @@ +/** + * class HelpFormatter + * + * Formatter for generating usage messages and argument help strings. Only the + * name of this class is considered a public API. All the methods provided by + * the class are considered an implementation detail. + * + * Do not call in your code, use this class only for inherits your own forvatter + * + * ToDo add [additonal formatters][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#formatter-class + **/ +'use strict'; + +var sprintf = require('sprintf-js').sprintf; + +// Constants +var c = require('../const'); + +var $$ = require('../utils'); + + +/*:nodoc:* internal + * new Support(parent, heding) + * - parent (object): parent section + * - heading (string): header string + * + **/ +function Section(parent, heading) { + this._parent = parent; + this._heading = heading; + this._items = []; +} + +/*:nodoc:* internal + * Section#addItem(callback) -> Void + * - callback (array): tuple with function and args + * + * Add function for single element + **/ +Section.prototype.addItem = function (callback) { + this._items.push(callback); +}; + +/*:nodoc:* internal + * Section#formatHelp(formatter) -> string + * - formatter (HelpFormatter): current formatter + * + * Form help section string + * + **/ +Section.prototype.formatHelp = function (formatter) { + var itemHelp, heading; + + // format the indented section + if (this._parent) { + formatter._indent(); + } + + itemHelp = this._items.map(function (item) { + var obj, func, args; + + obj = formatter; + func = item[0]; + args = item[1]; + return func.apply(obj, args); + }); + itemHelp = formatter._joinParts(itemHelp); + + if (this._parent) { + formatter._dedent(); + } + + // return nothing if the section was empty + if (!itemHelp) { + return ''; + } + + // add the heading if the section was non-empty + heading = ''; + if (this._heading && this._heading !== c.SUPPRESS) { + var currentIndent = formatter.currentIndent; + heading = $$.repeat(' ', currentIndent) + this._heading + ':' + c.EOL; + } + + // join the section-initialize newline, the heading and the help + return formatter._joinParts([ c.EOL, heading, itemHelp, c.EOL ]); +}; + +/** + * new HelpFormatter(options) + * + * #### Options: + * - `prog`: program name + * - `indentIncriment`: indent step, default value 2 + * - `maxHelpPosition`: max help position, default value = 24 + * - `width`: line width + * + **/ +var HelpFormatter = module.exports = function HelpFormatter(options) { + options = options || {}; + + this._prog = options.prog; + + this._maxHelpPosition = options.maxHelpPosition || 24; + this._width = (options.width || ((process.env.COLUMNS || 80) - 2)); + + this._currentIndent = 0; + this._indentIncriment = options.indentIncriment || 2; + this._level = 0; + this._actionMaxLength = 0; + + this._rootSection = new Section(null); + this._currentSection = this._rootSection; + + this._whitespaceMatcher = new RegExp('\\s+', 'g'); + this._longBreakMatcher = new RegExp(c.EOL + c.EOL + c.EOL + '+', 'g'); +}; + +HelpFormatter.prototype._indent = function () { + this._currentIndent += this._indentIncriment; + this._level += 1; +}; + +HelpFormatter.prototype._dedent = function () { + this._currentIndent -= this._indentIncriment; + this._level -= 1; + if (this._currentIndent < 0) { + throw new Error('Indent decreased below 0.'); + } +}; + +HelpFormatter.prototype._addItem = function (func, args) { + this._currentSection.addItem([ func, args ]); +}; + +// +// Message building methods +// + +/** + * HelpFormatter#startSection(heading) -> Void + * - heading (string): header string + * + * Start new help section + * + * See alse [code example][1] + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.startSection = function (heading) { + this._indent(); + var section = new Section(this._currentSection, heading); + var func = section.formatHelp.bind(section); + this._addItem(func, [ this ]); + this._currentSection = section; +}; + +/** + * HelpFormatter#endSection -> Void + * + * End help section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + **/ +HelpFormatter.prototype.endSection = function () { + this._currentSection = this._currentSection._parent; + this._dedent(); +}; + +/** + * HelpFormatter#addText(text) -> Void + * - text (string): plain text + * + * Add plain text into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addText = function (text) { + if (text && text !== c.SUPPRESS) { + this._addItem(this._formatText, [ text ]); + } +}; + +/** + * HelpFormatter#addUsage(usage, actions, groups, prefix) -> Void + * - usage (string): usage text + * - actions (array): actions list + * - groups (array): groups list + * - prefix (string): usage prefix + * + * Add usage data into current section + * + * ##### Example + * + * formatter.addUsage(this.usage, this._actions, []); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.addUsage = function (usage, actions, groups, prefix) { + if (usage !== c.SUPPRESS) { + this._addItem(this._formatUsage, [ usage, actions, groups, prefix ]); + } +}; + +/** + * HelpFormatter#addArgument(action) -> Void + * - action (object): action + * + * Add argument into current section + * + * Single variant of [[HelpFormatter#addArguments]] + **/ +HelpFormatter.prototype.addArgument = function (action) { + if (action.help !== c.SUPPRESS) { + var self = this; + + // find all invocations + var invocations = [ this._formatActionInvocation(action) ]; + var invocationLength = invocations[0].length; + + var actionLength; + + if (action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + + var invocationNew = self._formatActionInvocation(subaction); + invocations.push(invocationNew); + invocationLength = Math.max(invocationLength, invocationNew.length); + + }); + this._dedent(); + } + + // update the maximum item length + actionLength = invocationLength + this._currentIndent; + this._actionMaxLength = Math.max(this._actionMaxLength, actionLength); + + // add the item to the list + this._addItem(this._formatAction, [ action ]); + } +}; + +/** + * HelpFormatter#addArguments(actions) -> Void + * - actions (array): actions list + * + * Mass add arguments into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addArguments = function (actions) { + var self = this; + actions.forEach(function (action) { + self.addArgument(action); + }); +}; + +// +// Help-formatting methods +// + +/** + * HelpFormatter#formatHelp -> string + * + * Format help + * + * ##### Example + * + * formatter.addText(this.epilog); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.formatHelp = function () { + var help = this._rootSection.formatHelp(this); + if (help) { + help = help.replace(this._longBreakMatcher, c.EOL + c.EOL); + help = $$.trimChars(help, c.EOL) + c.EOL; + } + return help; +}; + +HelpFormatter.prototype._joinParts = function (partStrings) { + return partStrings.filter(function (part) { + return (part && part !== c.SUPPRESS); + }).join(''); +}; + +HelpFormatter.prototype._formatUsage = function (usage, actions, groups, prefix) { + if (!prefix && typeof prefix !== 'string') { + prefix = 'usage: '; + } + + actions = actions || []; + groups = groups || []; + + + // if usage is specified, use that + if (usage) { + usage = sprintf(usage, { prog: this._prog }); + + // if no optionals or positionals are available, usage is just prog + } else if (!usage && actions.length === 0) { + usage = this._prog; + + // if optionals and positionals are available, calculate usage + } else if (!usage) { + var prog = this._prog; + var optionals = []; + var positionals = []; + var actionUsage; + var textWidth; + + // split optionals from positionals + actions.forEach(function (action) { + if (action.isOptional()) { + optionals.push(action); + } else { + positionals.push(action); + } + }); + + // build full usage string + actionUsage = this._formatActionsUsage([].concat(optionals, positionals), groups); + usage = [ prog, actionUsage ].join(' '); + + // wrap the usage parts if it's too long + textWidth = this._width - this._currentIndent; + if ((prefix.length + usage.length) > textWidth) { + + // break usage into wrappable parts + var regexpPart = new RegExp('\\(.*?\\)+|\\[.*?\\]+|\\S+', 'g'); + var optionalUsage = this._formatActionsUsage(optionals, groups); + var positionalUsage = this._formatActionsUsage(positionals, groups); + + + var optionalParts = optionalUsage.match(regexpPart); + var positionalParts = positionalUsage.match(regexpPart) || []; + + if (optionalParts.join(' ') !== optionalUsage) { + throw new Error('assert "optionalParts.join(\' \') === optionalUsage"'); + } + if (positionalParts.join(' ') !== positionalUsage) { + throw new Error('assert "positionalParts.join(\' \') === positionalUsage"'); + } + + // helper for wrapping lines + /*eslint-disable func-style*/ // node 0.10 compat + var _getLines = function (parts, indent, prefix) { + var lines = []; + var line = []; + + var lineLength = prefix ? prefix.length - 1 : indent.length - 1; + + parts.forEach(function (part) { + if (lineLength + 1 + part.length > textWidth) { + lines.push(indent + line.join(' ')); + line = []; + lineLength = indent.length - 1; + } + line.push(part); + lineLength += part.length + 1; + }); + + if (line) { + lines.push(indent + line.join(' ')); + } + if (prefix) { + lines[0] = lines[0].substr(indent.length); + } + return lines; + }; + + var lines, indent, parts; + // if prog is short, follow it with optionals or positionals + if (prefix.length + prog.length <= 0.75 * textWidth) { + indent = $$.repeat(' ', (prefix.length + prog.length + 1)); + if (optionalParts) { + lines = [].concat( + _getLines([ prog ].concat(optionalParts), indent, prefix), + _getLines(positionalParts, indent) + ); + } else if (positionalParts) { + lines = _getLines([ prog ].concat(positionalParts), indent, prefix); + } else { + lines = [ prog ]; + } + + // if prog is long, put it on its own line + } else { + indent = $$.repeat(' ', prefix.length); + parts = optionalParts.concat(positionalParts); + lines = _getLines(parts, indent); + if (lines.length > 1) { + lines = [].concat( + _getLines(optionalParts, indent), + _getLines(positionalParts, indent) + ); + } + lines = [ prog ].concat(lines); + } + // join lines into usage + usage = lines.join(c.EOL); + } + } + + // prefix with 'usage:' + return prefix + usage + c.EOL + c.EOL; +}; + +HelpFormatter.prototype._formatActionsUsage = function (actions, groups) { + // find group indices and identify actions in groups + var groupActions = []; + var inserts = []; + var self = this; + + groups.forEach(function (group) { + var end; + var i; + + var start = actions.indexOf(group._groupActions[0]); + if (start >= 0) { + end = start + group._groupActions.length; + + //if (actions.slice(start, end) === group._groupActions) { + if ($$.arrayEqual(actions.slice(start, end), group._groupActions)) { + group._groupActions.forEach(function (action) { + groupActions.push(action); + }); + + if (!group.required) { + if (inserts[start]) { + inserts[start] += ' ['; + } else { + inserts[start] = '['; + } + inserts[end] = ']'; + } else { + if (inserts[start]) { + inserts[start] += ' ('; + } else { + inserts[start] = '('; + } + inserts[end] = ')'; + } + for (i = start + 1; i < end; i += 1) { + inserts[i] = '|'; + } + } + } + }); + + // collect all actions format strings + var parts = []; + + actions.forEach(function (action, actionIndex) { + var part; + var optionString; + var argsDefault; + var argsString; + + // suppressed arguments are marked with None + // remove | separators for suppressed arguments + if (action.help === c.SUPPRESS) { + parts.push(null); + if (inserts[actionIndex] === '|') { + inserts.splice(actionIndex, actionIndex); + } else if (inserts[actionIndex + 1] === '|') { + inserts.splice(actionIndex + 1, actionIndex + 1); + } + + // produce all arg strings + } else if (!action.isOptional()) { + part = self._formatArgs(action, action.dest); + + // if it's in a group, strip the outer [] + if (groupActions.indexOf(action) >= 0) { + if (part[0] === '[' && part[part.length - 1] === ']') { + part = part.slice(1, -1); + } + } + // add the action string to the list + parts.push(part); + + // produce the first way to invoke the option in brackets + } else { + optionString = action.optionStrings[0]; + + // if the Optional doesn't take a value, format is: -s or --long + if (action.nargs === 0) { + part = '' + optionString; + + // if the Optional takes a value, format is: -s ARGS or --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = self._formatArgs(action, argsDefault); + part = optionString + ' ' + argsString; + } + // make it look optional if it's not required or in a group + if (!action.required && groupActions.indexOf(action) < 0) { + part = '[' + part + ']'; + } + // add the action string to the list + parts.push(part); + } + }); + + // insert things at the necessary indices + for (var i = inserts.length - 1; i >= 0; --i) { + if (inserts[i] !== null) { + parts.splice(i, 0, inserts[i]); + } + } + + // join all the action items with spaces + var text = parts.filter(function (part) { + return !!part; + }).join(' '); + + // clean up separators for mutually exclusive groups + text = text.replace(/([\[(]) /g, '$1'); // remove spaces + text = text.replace(/ ([\])])/g, '$1'); + text = text.replace(/\[ *\]/g, ''); // remove empty groups + text = text.replace(/\( *\)/g, ''); + text = text.replace(/\(([^|]*)\)/g, '$1'); // remove () from single action groups + + text = text.trim(); + + // return the text + return text; +}; + +HelpFormatter.prototype._formatText = function (text) { + text = sprintf(text, { prog: this._prog }); + var textWidth = this._width - this._currentIndent; + var indentIncriment = $$.repeat(' ', this._currentIndent); + return this._fillText(text, textWidth, indentIncriment) + c.EOL + c.EOL; +}; + +HelpFormatter.prototype._formatAction = function (action) { + var self = this; + + var helpText; + var helpLines; + var parts; + var indentFirst; + + // determine the required width and the entry label + var helpPosition = Math.min(this._actionMaxLength + 2, this._maxHelpPosition); + var helpWidth = this._width - helpPosition; + var actionWidth = helpPosition - this._currentIndent - 2; + var actionHeader = this._formatActionInvocation(action); + + // no help; start on same line and add a final newline + if (!action.help) { + actionHeader = $$.repeat(' ', this._currentIndent) + actionHeader + c.EOL; + + // short action name; start on the same line and pad two spaces + } else if (actionHeader.length <= actionWidth) { + actionHeader = $$.repeat(' ', this._currentIndent) + + actionHeader + + ' ' + + $$.repeat(' ', actionWidth - actionHeader.length); + indentFirst = 0; + + // long action name; start on the next line + } else { + actionHeader = $$.repeat(' ', this._currentIndent) + actionHeader + c.EOL; + indentFirst = helpPosition; + } + + // collect the pieces of the action help + parts = [ actionHeader ]; + + // if there was help for the action, add lines of help text + if (action.help) { + helpText = this._expandHelp(action); + helpLines = this._splitLines(helpText, helpWidth); + parts.push($$.repeat(' ', indentFirst) + helpLines[0] + c.EOL); + helpLines.slice(1).forEach(function (line) { + parts.push($$.repeat(' ', helpPosition) + line + c.EOL); + }); + + // or add a newline if the description doesn't end with one + } else if (actionHeader.charAt(actionHeader.length - 1) !== c.EOL) { + parts.push(c.EOL); + } + // if there are any sub-actions, add their help as well + if (action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + parts.push(self._formatAction(subaction)); + }); + this._dedent(); + } + // return a single string + return this._joinParts(parts); +}; + +HelpFormatter.prototype._formatActionInvocation = function (action) { + if (!action.isOptional()) { + var format_func = this._metavarFormatter(action, action.dest); + var metavars = format_func(1); + return metavars[0]; + } + + var parts = []; + var argsDefault; + var argsString; + + // if the Optional doesn't take a value, format is: -s, --long + if (action.nargs === 0) { + parts = parts.concat(action.optionStrings); + + // if the Optional takes a value, format is: -s ARGS, --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = this._formatArgs(action, argsDefault); + action.optionStrings.forEach(function (optionString) { + parts.push(optionString + ' ' + argsString); + }); + } + return parts.join(', '); +}; + +HelpFormatter.prototype._metavarFormatter = function (action, metavarDefault) { + var result; + + if (action.metavar || action.metavar === '') { + result = action.metavar; + } else if (action.choices) { + var choices = action.choices; + + if (typeof choices === 'string') { + choices = choices.split('').join(', '); + } else if (Array.isArray(choices)) { + choices = choices.join(','); + } else { + choices = Object.keys(choices).join(','); + } + result = '{' + choices + '}'; + } else { + result = metavarDefault; + } + + return function (size) { + if (Array.isArray(result)) { + return result; + } + + var metavars = []; + for (var i = 0; i < size; i += 1) { + metavars.push(result); + } + return metavars; + }; +}; + +HelpFormatter.prototype._formatArgs = function (action, metavarDefault) { + var result; + var metavars; + + var buildMetavar = this._metavarFormatter(action, metavarDefault); + + switch (action.nargs) { + /*eslint-disable no-undefined*/ + case undefined: + case null: + metavars = buildMetavar(1); + result = '' + metavars[0]; + break; + case c.OPTIONAL: + metavars = buildMetavar(1); + result = '[' + metavars[0] + ']'; + break; + case c.ZERO_OR_MORE: + metavars = buildMetavar(2); + result = '[' + metavars[0] + ' [' + metavars[1] + ' ...]]'; + break; + case c.ONE_OR_MORE: + metavars = buildMetavar(2); + result = '' + metavars[0] + ' [' + metavars[1] + ' ...]'; + break; + case c.REMAINDER: + result = '...'; + break; + case c.PARSER: + metavars = buildMetavar(1); + result = metavars[0] + ' ...'; + break; + default: + metavars = buildMetavar(action.nargs); + result = metavars.join(' '); + } + return result; +}; + +HelpFormatter.prototype._expandHelp = function (action) { + var params = { prog: this._prog }; + + Object.keys(action).forEach(function (actionProperty) { + var actionValue = action[actionProperty]; + + if (actionValue !== c.SUPPRESS) { + params[actionProperty] = actionValue; + } + }); + + if (params.choices) { + if (typeof params.choices === 'string') { + params.choices = params.choices.split('').join(', '); + } else if (Array.isArray(params.choices)) { + params.choices = params.choices.join(', '); + } else { + params.choices = Object.keys(params.choices).join(', '); + } + } + + return sprintf(this._getHelpString(action), params); +}; + +HelpFormatter.prototype._splitLines = function (text, width) { + var lines = []; + var delimiters = [ ' ', '.', ',', '!', '?' ]; + var re = new RegExp('[' + delimiters.join('') + '][^' + delimiters.join('') + ']*$'); + + text = text.replace(/[\n\|\t]/g, ' '); + + text = text.trim(); + text = text.replace(this._whitespaceMatcher, ' '); + + // Wraps the single paragraph in text (a string) so every line + // is at most width characters long. + text.split(c.EOL).forEach(function (line) { + if (width >= line.length) { + lines.push(line); + return; + } + + var wrapStart = 0; + var wrapEnd = width; + var delimiterIndex = 0; + while (wrapEnd <= line.length) { + if (wrapEnd !== line.length && delimiters.indexOf(line[wrapEnd] < -1)) { + delimiterIndex = (re.exec(line.substring(wrapStart, wrapEnd)) || {}).index; + wrapEnd = wrapStart + delimiterIndex + 1; + } + lines.push(line.substring(wrapStart, wrapEnd)); + wrapStart = wrapEnd; + wrapEnd += width; + } + if (wrapStart < line.length) { + lines.push(line.substring(wrapStart, wrapEnd)); + } + }); + + return lines; +}; + +HelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = this._splitLines(text, width); + lines = lines.map(function (line) { + return indent + line; + }); + return lines.join(c.EOL); +}; + +HelpFormatter.prototype._getHelpString = function (action) { + return action.help; +}; diff --git a/node_modules/argparse/lib/namespace.js b/node_modules/argparse/lib/namespace.js new file mode 100644 index 000000000..a860de9ec --- /dev/null +++ b/node_modules/argparse/lib/namespace.js @@ -0,0 +1,76 @@ +/** + * class Namespace + * + * Simple object for storing attributes. Implements equality by attribute names + * and values, and provides a simple string representation. + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-namespace-object + **/ +'use strict'; + +var $$ = require('./utils'); + +/** + * new Namespace(options) + * - options(object): predefined propertis for result object + * + **/ +var Namespace = module.exports = function Namespace(options) { + $$.extend(this, options); +}; + +/** + * Namespace#isset(key) -> Boolean + * - key (string|number): property name + * + * Tells whenever `namespace` contains given `key` or not. + **/ +Namespace.prototype.isset = function (key) { + return $$.has(this, key); +}; + +/** + * Namespace#set(key, value) -> self + * -key (string|number|object): propery name + * -value (mixed): new property value + * + * Set the property named key with value. + * If key object then set all key properties to namespace object + **/ +Namespace.prototype.set = function (key, value) { + if (typeof (key) === 'object') { + $$.extend(this, key); + } else { + this[key] = value; + } + return this; +}; + +/** + * Namespace#get(key, defaultValue) -> mixed + * - key (string|number): property name + * - defaultValue (mixed): default value + * + * Return the property key or defaulValue if not set + **/ +Namespace.prototype.get = function (key, defaultValue) { + return !this[key] ? defaultValue : this[key]; +}; + +/** + * Namespace#unset(key, defaultValue) -> mixed + * - key (string|number): property name + * - defaultValue (mixed): default value + * + * Return data[key](and delete it) or defaultValue + **/ +Namespace.prototype.unset = function (key, defaultValue) { + var value = this[key]; + if (value !== null) { + delete this[key]; + return value; + } + return defaultValue; +}; diff --git a/node_modules/argparse/lib/utils.js b/node_modules/argparse/lib/utils.js new file mode 100644 index 000000000..4a9cf3edb --- /dev/null +++ b/node_modules/argparse/lib/utils.js @@ -0,0 +1,57 @@ +'use strict'; + +exports.repeat = function (str, num) { + var result = ''; + for (var i = 0; i < num; i++) { result += str; } + return result; +}; + +exports.arrayEqual = function (a, b) { + if (a.length !== b.length) { return false; } + for (var i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { return false; } + } + return true; +}; + +exports.trimChars = function (str, chars) { + var start = 0; + var end = str.length - 1; + while (chars.indexOf(str.charAt(start)) >= 0) { start++; } + while (chars.indexOf(str.charAt(end)) >= 0) { end--; } + return str.slice(start, end + 1); +}; + +exports.capitalize = function (str) { + return str.charAt(0).toUpperCase() + str.slice(1); +}; + +exports.arrayUnion = function () { + var result = []; + for (var i = 0, values = {}; i < arguments.length; i++) { + var arr = arguments[i]; + for (var j = 0; j < arr.length; j++) { + if (!values[arr[j]]) { + values[arr[j]] = true; + result.push(arr[j]); + } + } + } + return result; +}; + +function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +exports.has = has; + +exports.extend = function (dest, src) { + for (var i in src) { + if (has(src, i)) { dest[i] = src[i]; } + } +}; + +exports.trimEnd = function (str) { + return str.replace(/\s+$/g, ''); +}; diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json new file mode 100644 index 000000000..62fba0a9f --- /dev/null +++ b/node_modules/argparse/package.json @@ -0,0 +1,34 @@ +{ + "name": "argparse", + "description": "Very powerful CLI arguments parser. Native port of argparse - python's options parsing library", + "version": "1.0.10", + "keywords": [ + "cli", + "parser", + "argparse", + "option", + "args" + ], + "contributors": [ + "Eugene Shkuropat", + "Paul Jacobson" + ], + "files": [ + "index.js", + "lib/" + ], + "license": "MIT", + "repository": "nodeca/argparse", + "scripts": { + "test": "make test" + }, + "dependencies": { + "sprintf-js": "~1.0.2" + }, + "devDependencies": { + "eslint": "^2.13.1", + "istanbul": "^0.4.5", + "mocha": "^3.1.0", + "ndoc": "^5.0.1" + } +} diff --git a/node_modules/asap/CHANGES.md b/node_modules/asap/CHANGES.md new file mode 100644 index 000000000..f105b9195 --- /dev/null +++ b/node_modules/asap/CHANGES.md @@ -0,0 +1,70 @@ + +## 2.0.6 + +Version 2.0.4 adds support for React Native by clarifying in package.json that +the browser environment does not support Node.js domains. +Why this is necessary, we leave as an exercise for the user. + +## 2.0.3 + +Version 2.0.3 fixes a bug when adjusting the capacity of the task queue. + +## 2.0.1-2.02 + +Version 2.0.1 fixes a bug in the way redirects were expressed that affected the +function of Browserify, but which Mr would tolerate. + +## 2.0.0 + +Version 2 of ASAP is a full rewrite with a few salient changes. +First, the ASAP source is CommonJS only and designed with [Browserify][] and +[Browserify-compatible][Mr] module loaders in mind. + +[Browserify]: https://github.com/substack/node-browserify +[Mr]: https://github.com/montagejs/mr + +The new version has been refactored in two dimensions. +Support for Node.js and browsers have been separated, using Browserify +redirects and ASAP has been divided into two modules. +The "raw" layer depends on the tasks to catch thrown exceptions and unravel +Node.js domains. + +The full implementation of ASAP is loadable as `require("asap")` in both Node.js +and browsers. + +The raw layer that lacks exception handling overhead is loadable as +`require("asap/raw")`. +The interface is the same for both layers. + +Tasks are no longer required to be functions, but can rather be any object that +implements `task.call()`. +With this feature you can recycle task objects to avoid garbage collector churn +and avoid closures in general. + +The implementation has been rigorously documented so that our successors can +understand the scope of the problem that this module solves and all of its +nuances, ensuring that the next generation of implementations know what details +are essential. + +- [asap.js](https://github.com/kriskowal/asap/blob/master/asap.js) +- [raw.js](https://github.com/kriskowal/asap/blob/master/raw.js) +- [browser-asap.js](https://github.com/kriskowal/asap/blob/master/browser-asap.js) +- [browser-raw.js](https://github.com/kriskowal/asap/blob/master/browser-raw.js) + +The new version has also been rigorously tested across a broad spectrum of +browsers, in both the window and worker context. +The following charts capture the browser test results for the most recent +release. +The first chart shows test results for ASAP running in the main window context. +The second chart shows test results for ASAP running in a web worker context. +Test results are inconclusive (grey) on browsers that do not support web +workers. +These data are captured automatically by [Continuous +Integration][]. + +![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg) + +![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg) + +[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md + diff --git a/node_modules/asap/LICENSE.md b/node_modules/asap/LICENSE.md new file mode 100644 index 000000000..ba18c6139 --- /dev/null +++ b/node_modules/asap/LICENSE.md @@ -0,0 +1,21 @@ + +Copyright 2009–2014 Contributors. All rights reserved. + +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. + diff --git a/node_modules/asap/README.md b/node_modules/asap/README.md new file mode 100644 index 000000000..452fd8c20 --- /dev/null +++ b/node_modules/asap/README.md @@ -0,0 +1,237 @@ +# ASAP + +[![Build Status](https://travis-ci.org/kriskowal/asap.png?branch=master)](https://travis-ci.org/kriskowal/asap) + +Promise and asynchronous observer libraries, as well as hand-rolled callback +programs and libraries, often need a mechanism to postpone the execution of a +callback until the next available event. +(See [Designing API’s for Asynchrony][Zalgo].) +The `asap` function executes a task **as soon as possible** but not before it +returns, waiting only for the completion of the current event and previously +scheduled tasks. + +```javascript +asap(function () { + // ... +}); +``` + +[Zalgo]: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony + +This CommonJS package provides an `asap` module that exports a function that +executes a task function *as soon as possible*. + +ASAP strives to schedule events to occur before yielding for IO, reflow, +or redrawing. +Each event receives an independent stack, with only platform code in parent +frames and the events run in the order they are scheduled. + +ASAP provides a fast event queue that will execute tasks until it is +empty before yielding to the JavaScript engine's underlying event-loop. +When a task gets added to a previously empty event queue, ASAP schedules a flush +event, preferring for that event to occur before the JavaScript engine has an +opportunity to perform IO tasks or rendering, thus making the first task and +subsequent tasks semantically indistinguishable. +ASAP uses a variety of techniques to preserve this invariant on different +versions of browsers and Node.js. + +By design, ASAP prevents input events from being handled until the task +queue is empty. +If the process is busy enough, this may cause incoming connection requests to be +dropped, and may cause existing connections to inform the sender to reduce the +transmission rate or stall. +ASAP allows this on the theory that, if there is enough work to do, there is no +sense in looking for trouble. +As a consequence, ASAP can interfere with smooth animation. +If your task should be tied to the rendering loop, consider using +`requestAnimationFrame` instead. +A long sequence of tasks can also effect the long running script dialog. +If this is a problem, you may be able to use ASAP’s cousin `setImmediate` to +break long processes into shorter intervals and periodically allow the browser +to breathe. +`setImmediate` will yield for IO, reflow, and repaint events. +It also returns a handler and can be canceled. +For a `setImmediate` shim, consider [YuzuJS setImmediate][setImmediate]. + +[setImmediate]: https://github.com/YuzuJS/setImmediate + +Take care. +ASAP can sustain infinite recursive calls without warning. +It will not halt from a stack overflow, and it will not consume unbounded +memory. +This is behaviorally equivalent to an infinite loop. +Just as with infinite loops, you can monitor a Node.js process for this behavior +with a heart-beat signal. +As with infinite loops, a very small amount of caution goes a long way to +avoiding problems. + +```javascript +function loop() { + asap(loop); +} +loop(); +``` + +In browsers, if a task throws an exception, it will not interrupt the flushing +of high-priority tasks. +The exception will be postponed to a later, low-priority event to avoid +slow-downs. +In Node.js, if a task throws an exception, ASAP will resume flushing only if—and +only after—the error is handled by `domain.on("error")` or +`process.on("uncaughtException")`. + +## Raw ASAP + +Checking for exceptions comes at a cost. +The package also provides an `asap/raw` module that exports the underlying +implementation which is faster but stalls if a task throws an exception. +This internal version of the ASAP function does not check for errors. +If a task does throw an error, it will stall the event queue unless you manually +call `rawAsap.requestFlush()` before throwing the error, or any time after. + +In Node.js, `asap/raw` also runs all tasks outside any domain. +If you need a task to be bound to your domain, you will have to do it manually. + +```js +if (process.domain) { + task = process.domain.bind(task); +} +rawAsap(task); +``` + +## Tasks + +A task may be any object that implements `call()`. +A function will suffice, but closures tend not to be reusable and can cause +garbage collector churn. +Both `asap` and `rawAsap` accept task objects to give you the option of +recycling task objects or using higher callable object abstractions. +See the `asap` source for an illustration. + + +## Compatibility + +ASAP is tested on Node.js v0.10 and in a broad spectrum of web browsers. +The following charts capture the browser test results for the most recent +release. +The first chart shows test results for ASAP running in the main window context. +The second chart shows test results for ASAP running in a web worker context. +Test results are inconclusive (grey) on browsers that do not support web +workers. +These data are captured automatically by [Continuous +Integration][]. + +[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md + +![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg) + +![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg) + +## Caveats + +When a task is added to an empty event queue, it is not always possible to +guarantee that the task queue will begin flushing immediately after the current +event. +However, once the task queue begins flushing, it will not yield until the queue +is empty, even if the queue grows while executing tasks. + +The following browsers allow the use of [DOM mutation observers][] to access +the HTML [microtask queue][], and thus begin flushing ASAP's task queue +immediately at the end of the current event loop turn, before any rendering or +IO: + +[microtask queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#microtask-queue +[DOM mutation observers]: http://dom.spec.whatwg.org/#mutation-observers + +- Android 4–4.3 +- Chrome 26–34 +- Firefox 14–29 +- Internet Explorer 11 +- iPad Safari 6–7.1 +- iPhone Safari 7–7.1 +- Safari 6–7 + +In the absense of mutation observers, there are a few browsers, and situations +like web workers in some of the above browsers, where [message channels][] +would be a useful way to avoid falling back to timers. +Message channels give direct access to the HTML [task queue][], so the ASAP +task queue would flush after any already queued rendering and IO tasks, but +without having the minimum delay imposed by timers. +However, among these browsers, Internet Explorer 10 and Safari do not reliably +dispatch messages, so they are not worth the trouble to implement. + +[message channels]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels +[task queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#concept-task + +- Internet Explorer 10 +- Safair 5.0-1 +- Opera 11-12 + +In the absense of mutation observers, these browsers and the following browsers +all fall back to using `setTimeout` and `setInterval` to ensure that a `flush` +occurs. +The implementation uses both and cancels whatever handler loses the race, since +`setTimeout` tends to occasionally skip tasks in unisolated circumstances. +Timers generally delay the flushing of ASAP's task queue for four milliseconds. + +- Firefox 3–13 +- Internet Explorer 6–10 +- iPad Safari 4.3 +- Lynx 2.8.7 + + +## Heritage + +ASAP has been factored out of the [Q][] asynchronous promise library. +It originally had a naïve implementation in terms of `setTimeout`, but +[Malte Ubl][NonBlocking] provided an insight that `postMessage` might be +useful for creating a high-priority, no-delay event dispatch hack. +Since then, Internet Explorer proposed and implemented `setImmediate`. +Robert Katić began contributing to Q by measuring the performance of +the internal implementation of `asap`, paying particular attention to +error recovery. +Domenic, Robert, and Kris Kowal collectively settled on the current strategy of +unrolling the high-priority event queue internally regardless of what strategy +we used to dispatch the potentially lower-priority flush event. +Domenic went on to make ASAP cooperate with Node.js domains. + +[Q]: https://github.com/kriskowal/q +[NonBlocking]: http://www.nonblocking.io/2011/06/windownexttick.html + +For further reading, Nicholas Zakas provided a thorough article on [The +Case for setImmediate][NCZ]. + +[NCZ]: http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/ + +Ember’s RSVP promise implementation later [adopted][RSVP ASAP] the name ASAP but +further developed the implentation. +Particularly, The `MessagePort` implementation was abandoned due to interaction +[problems with Mobile Internet Explorer][IE Problems] in favor of an +implementation backed on the newer and more reliable DOM `MutationObserver` +interface. +These changes were back-ported into this library. + +[IE Problems]: https://github.com/cujojs/when/issues/197 +[RSVP ASAP]: https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js + +In addition, ASAP factored into `asap` and `asap/raw`, such that `asap` remained +exception-safe, but `asap/raw` provided a tight kernel that could be used for +tasks that guaranteed that they would not throw exceptions. +This core is useful for promise implementations that capture thrown errors in +rejected promises and do not need a second safety net. +At the same time, the exception handling in `asap` was factored into separate +implementations for Node.js and browsers, using the the [Browserify][Browser +Config] `browser` property in `package.json` to instruct browser module loaders +and bundlers, including [Browserify][], [Mr][], and [Mop][], to use the +browser-only implementation. + +[Browser Config]: https://gist.github.com/defunctzombie/4339901 +[Browserify]: https://github.com/substack/node-browserify +[Mr]: https://github.com/montagejs/mr +[Mop]: https://github.com/montagejs/mop + +## License + +Copyright 2009-2014 by Contributors +MIT License (enclosed) + diff --git a/node_modules/asap/asap.js b/node_modules/asap/asap.js new file mode 100644 index 000000000..f04fcd58f --- /dev/null +++ b/node_modules/asap/asap.js @@ -0,0 +1,65 @@ +"use strict"; + +var rawAsap = require("./raw"); +var freeTasks = []; + +/** + * Calls a task as soon as possible after returning, in its own event, with + * priority over IO events. An exception thrown in a task can be handled by + * `process.on("uncaughtException") or `domain.on("error")`, but will otherwise + * crash the process. If the error is handled, all subsequent tasks will + * resume. + * + * @param {{call}} task A callable object, typically a function that takes no + * arguments. + */ +module.exports = asap; +function asap(task) { + var rawTask; + if (freeTasks.length) { + rawTask = freeTasks.pop(); + } else { + rawTask = new RawTask(); + } + rawTask.task = task; + rawTask.domain = process.domain; + rawAsap(rawTask); +} + +function RawTask() { + this.task = null; + this.domain = null; +} + +RawTask.prototype.call = function () { + if (this.domain) { + this.domain.enter(); + } + var threw = true; + try { + this.task.call(); + threw = false; + // If the task throws an exception (presumably) Node.js restores the + // domain stack for the next event. + if (this.domain) { + this.domain.exit(); + } + } finally { + // We use try/finally and a threw flag to avoid messing up stack traces + // when we catch and release errors. + if (threw) { + // In Node.js, uncaught exceptions are considered fatal errors. + // Re-throw them to interrupt flushing! + // Ensure that flushing continues if an uncaught exception is + // suppressed listening process.on("uncaughtException") or + // domain.on("error"). + rawAsap.requestFlush(); + } + // If the task threw an error, we do not want to exit the domain here. + // Exiting the domain would prevent the domain from catching the error. + this.task = null; + this.domain = null; + freeTasks.push(this); + } +}; + diff --git a/node_modules/asap/browser-asap.js b/node_modules/asap/browser-asap.js new file mode 100644 index 000000000..805c98246 --- /dev/null +++ b/node_modules/asap/browser-asap.js @@ -0,0 +1,66 @@ +"use strict"; + +// rawAsap provides everything we need except exception management. +var rawAsap = require("./raw"); +// RawTasks are recycled to reduce GC churn. +var freeTasks = []; +// We queue errors to ensure they are thrown in right order (FIFO). +// Array-as-queue is good enough here, since we are just dealing with exceptions. +var pendingErrors = []; +var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); + +function throwFirstError() { + if (pendingErrors.length) { + throw pendingErrors.shift(); + } +} + +/** + * Calls a task as soon as possible after returning, in its own event, with priority + * over other events like animation, reflow, and repaint. An error thrown from an + * event will not interrupt, nor even substantially slow down the processing of + * other events, but will be rather postponed to a lower priority event. + * @param {{call}} task A callable object, typically a function that takes no + * arguments. + */ +module.exports = asap; +function asap(task) { + var rawTask; + if (freeTasks.length) { + rawTask = freeTasks.pop(); + } else { + rawTask = new RawTask(); + } + rawTask.task = task; + rawAsap(rawTask); +} + +// We wrap tasks with recyclable task objects. A task object implements +// `call`, just like a function. +function RawTask() { + this.task = null; +} + +// The sole purpose of wrapping the task is to catch the exception and recycle +// the task object after its single use. +RawTask.prototype.call = function () { + try { + this.task.call(); + } catch (error) { + if (asap.onerror) { + // This hook exists purely for testing purposes. + // Its name will be periodically randomized to break any code that + // depends on its existence. + asap.onerror(error); + } else { + // In a web browser, exceptions are not fatal. However, to avoid + // slowing down the queue of pending tasks, we rethrow the error in a + // lower priority turn. + pendingErrors.push(error); + requestErrorThrow(); + } + } finally { + this.task = null; + freeTasks[freeTasks.length] = this; + } +}; diff --git a/node_modules/asap/browser-raw.js b/node_modules/asap/browser-raw.js new file mode 100644 index 000000000..9cee7e32e --- /dev/null +++ b/node_modules/asap/browser-raw.js @@ -0,0 +1,223 @@ +"use strict"; + +// Use the fastest means possible to execute a task in its own turn, with +// priority over other events including IO, animation, reflow, and redraw +// events in browsers. +// +// An exception thrown by a task will permanently interrupt the processing of +// subsequent tasks. The higher level `asap` function ensures that if an +// exception is thrown by a task, that the task queue will continue flushing as +// soon as possible, but if you use `rawAsap` directly, you are responsible to +// either ensure that no exceptions are thrown from your task, or to manually +// call `rawAsap.requestFlush` if an exception is thrown. +module.exports = rawAsap; +function rawAsap(task) { + if (!queue.length) { + requestFlush(); + flushing = true; + } + // Equivalent to push, but avoids a function call. + queue[queue.length] = task; +} + +var queue = []; +// Once a flush has been requested, no further calls to `requestFlush` are +// necessary until the next `flush` completes. +var flushing = false; +// `requestFlush` is an implementation-specific method that attempts to kick +// off a `flush` event as quickly as possible. `flush` will attempt to exhaust +// the event queue before yielding to the browser's own event loop. +var requestFlush; +// The position of the next task to execute in the task queue. This is +// preserved between calls to `flush` so that it can be resumed if +// a task throws an exception. +var index = 0; +// If a task schedules additional tasks recursively, the task queue can grow +// unbounded. To prevent memory exhaustion, the task queue will periodically +// truncate already-completed tasks. +var capacity = 1024; + +// The flush function processes all tasks that have been scheduled with +// `rawAsap` unless and until one of those tasks throws an exception. +// If a task throws an exception, `flush` ensures that its state will remain +// consistent and will resume where it left off when called again. +// However, `flush` does not make any arrangements to be called again if an +// exception is thrown. +function flush() { + while (index < queue.length) { + var currentIndex = index; + // Advance the index before calling the task. This ensures that we will + // begin flushing on the next task the task throws an error. + index = index + 1; + queue[currentIndex].call(); + // Prevent leaking memory for long chains of recursive calls to `asap`. + // If we call `asap` within tasks scheduled by `asap`, the queue will + // grow, but to avoid an O(n) walk for every task we execute, we don't + // shift tasks off the queue after they have been executed. + // Instead, we periodically shift 1024 tasks off the queue. + if (index > capacity) { + // Manually shift all values starting at the index back to the + // beginning of the queue. + for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { + queue[scan] = queue[scan + index]; + } + queue.length -= index; + index = 0; + } + } + queue.length = 0; + index = 0; + flushing = false; +} + +// `requestFlush` is implemented using a strategy based on data collected from +// every available SauceLabs Selenium web driver worker at time of writing. +// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 + +// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that +// have WebKitMutationObserver but not un-prefixed MutationObserver. +// Must use `global` or `self` instead of `window` to work in both frames and web +// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. + +/* globals self */ +var scope = typeof global !== "undefined" ? global : self; +var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; + +// MutationObservers are desirable because they have high priority and work +// reliably everywhere they are implemented. +// They are implemented in all modern browsers. +// +// - Android 4-4.3 +// - Chrome 26-34 +// - Firefox 14-29 +// - Internet Explorer 11 +// - iPad Safari 6-7.1 +// - iPhone Safari 7-7.1 +// - Safari 6-7 +if (typeof BrowserMutationObserver === "function") { + requestFlush = makeRequestCallFromMutationObserver(flush); + +// MessageChannels are desirable because they give direct access to the HTML +// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera +// 11-12, and in web workers in many engines. +// Although message channels yield to any queued rendering and IO tasks, they +// would be better than imposing the 4ms delay of timers. +// However, they do not work reliably in Internet Explorer or Safari. + +// Internet Explorer 10 is the only browser that has setImmediate but does +// not have MutationObservers. +// Although setImmediate yields to the browser's renderer, it would be +// preferrable to falling back to setTimeout since it does not have +// the minimum 4ms penalty. +// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and +// Desktop to a lesser extent) that renders both setImmediate and +// MessageChannel useless for the purposes of ASAP. +// https://github.com/kriskowal/q/issues/396 + +// Timers are implemented universally. +// We fall back to timers in workers in most engines, and in foreground +// contexts in the following browsers. +// However, note that even this simple case requires nuances to operate in a +// broad spectrum of browsers. +// +// - Firefox 3-13 +// - Internet Explorer 6-9 +// - iPad Safari 4.3 +// - Lynx 2.8.7 +} else { + requestFlush = makeRequestCallFromTimer(flush); +} + +// `requestFlush` requests that the high priority event queue be flushed as +// soon as possible. +// This is useful to prevent an error thrown in a task from stalling the event +// queue if the exception handled by Node.js’s +// `process.on("uncaughtException")` or by a domain. +rawAsap.requestFlush = requestFlush; + +// To request a high priority event, we induce a mutation observer by toggling +// the text of a text node between "1" and "-1". +function makeRequestCallFromMutationObserver(callback) { + var toggle = 1; + var observer = new BrowserMutationObserver(callback); + var node = document.createTextNode(""); + observer.observe(node, {characterData: true}); + return function requestCall() { + toggle = -toggle; + node.data = toggle; + }; +} + +// The message channel technique was discovered by Malte Ubl and was the +// original foundation for this library. +// http://www.nonblocking.io/2011/06/windownexttick.html + +// Safari 6.0.5 (at least) intermittently fails to create message ports on a +// page's first load. Thankfully, this version of Safari supports +// MutationObservers, so we don't need to fall back in that case. + +// function makeRequestCallFromMessageChannel(callback) { +// var channel = new MessageChannel(); +// channel.port1.onmessage = callback; +// return function requestCall() { +// channel.port2.postMessage(0); +// }; +// } + +// For reasons explained above, we are also unable to use `setImmediate` +// under any circumstances. +// Even if we were, there is another bug in Internet Explorer 10. +// It is not sufficient to assign `setImmediate` to `requestFlush` because +// `setImmediate` must be called *by name* and therefore must be wrapped in a +// closure. +// Never forget. + +// function makeRequestCallFromSetImmediate(callback) { +// return function requestCall() { +// setImmediate(callback); +// }; +// } + +// Safari 6.0 has a problem where timers will get lost while the user is +// scrolling. This problem does not impact ASAP because Safari 6.0 supports +// mutation observers, so that implementation is used instead. +// However, if we ever elect to use timers in Safari, the prevalent work-around +// is to add a scroll event listener that calls for a flush. + +// `setTimeout` does not call the passed callback if the delay is less than +// approximately 7 in web workers in Firefox 8 through 18, and sometimes not +// even then. + +function makeRequestCallFromTimer(callback) { + return function requestCall() { + // We dispatch a timeout with a specified delay of 0 for engines that + // can reliably accommodate that request. This will usually be snapped + // to a 4 milisecond delay, but once we're flushing, there's no delay + // between events. + var timeoutHandle = setTimeout(handleTimer, 0); + // However, since this timer gets frequently dropped in Firefox + // workers, we enlist an interval handle that will try to fire + // an event 20 times per second until it succeeds. + var intervalHandle = setInterval(handleTimer, 50); + + function handleTimer() { + // Whichever timer succeeds will cancel both timers and + // execute the callback. + clearTimeout(timeoutHandle); + clearInterval(intervalHandle); + callback(); + } + }; +} + +// This is for `asap.js` only. +// Its name will be periodically randomized to break any code that depends on +// its existence. +rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; + +// ASAP was originally a nextTick shim included in Q. This was factored out +// into this ASAP package. It was later adapted to RSVP which made further +// amendments. These decisions, particularly to marginalize MessageChannel and +// to capture the MutationObserver implementation in a closure, were integrated +// back into ASAP proper. +// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js diff --git a/node_modules/asap/package.json b/node_modules/asap/package.json new file mode 100644 index 000000000..ae9f303bc --- /dev/null +++ b/node_modules/asap/package.json @@ -0,0 +1,58 @@ +{ + "name": "asap", + "version": "2.0.6", + "description": "High-priority task queue for Node.js and browsers", + "keywords": [ + "event", + "task", + "queue" + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/kriskowal/asap.git" + }, + "main": "./asap.js", + "browser": { + "./asap": "./browser-asap.js", + "./asap.js": "./browser-asap.js", + "./raw": "./browser-raw.js", + "./raw.js": "./browser-raw.js", + "./test/domain.js": "./test/browser-domain.js" + }, + "react-native": { + "domain": false + }, + "files": [ + "raw.js", + "asap.js", + "browser-raw.js", + "browser-asap.js" + ], + "scripts": { + "test": "npm run lint && npm run test-node", + "test-travis": "npm run lint && npm run test-node && npm run test-saucelabs && npm run test-saucelabs-worker", + "test-node": "node test/asap-test.js", + "test-publish": "node scripts/publish-bundle.js test/asap-test.js | pbcopy", + "test-browser": "node scripts/publish-bundle.js test/asap-test.js | xargs opener", + "test-saucelabs": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-spot-configurations.json", + "test-saucelabs-all": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-all-configurations.json", + "test-saucelabs-worker": "node scripts/saucelabs-worker-test.js scripts/saucelabs-spot-configurations.json", + "test-saucelabs-worker-all": "node scripts/saucelabs-worker-test.js scripts/saucelabs-all-configurations.json", + "lint": "jshint raw.js asap.js browser-raw.js browser-asap.js $(find scripts -name '*.js' | grep -v gauntlet)", + "benchmarks": "node benchmarks" + }, + "devDependencies": { + "events": "^1.0.1", + "jshint": "^2.5.1", + "knox": "^0.8.10", + "mr": "^2.0.5", + "opener": "^1.3.0", + "q": "^2.0.3", + "q-io": "^2.0.3", + "saucelabs": "^0.1.1", + "wd": "^0.2.21", + "weak-map": "^1.0.5", + "benchmark": "^1.0.0" + } +} diff --git a/node_modules/asap/raw.js b/node_modules/asap/raw.js new file mode 100644 index 000000000..ae3b89231 --- /dev/null +++ b/node_modules/asap/raw.js @@ -0,0 +1,101 @@ +"use strict"; + +var domain; // The domain module is executed on demand +var hasSetImmediate = typeof setImmediate === "function"; + +// Use the fastest means possible to execute a task in its own turn, with +// priority over other events including network IO events in Node.js. +// +// An exception thrown by a task will permanently interrupt the processing of +// subsequent tasks. The higher level `asap` function ensures that if an +// exception is thrown by a task, that the task queue will continue flushing as +// soon as possible, but if you use `rawAsap` directly, you are responsible to +// either ensure that no exceptions are thrown from your task, or to manually +// call `rawAsap.requestFlush` if an exception is thrown. +module.exports = rawAsap; +function rawAsap(task) { + if (!queue.length) { + requestFlush(); + flushing = true; + } + // Avoids a function call + queue[queue.length] = task; +} + +var queue = []; +// Once a flush has been requested, no further calls to `requestFlush` are +// necessary until the next `flush` completes. +var flushing = false; +// The position of the next task to execute in the task queue. This is +// preserved between calls to `flush` so that it can be resumed if +// a task throws an exception. +var index = 0; +// If a task schedules additional tasks recursively, the task queue can grow +// unbounded. To prevent memory excaustion, the task queue will periodically +// truncate already-completed tasks. +var capacity = 1024; + +// The flush function processes all tasks that have been scheduled with +// `rawAsap` unless and until one of those tasks throws an exception. +// If a task throws an exception, `flush` ensures that its state will remain +// consistent and will resume where it left off when called again. +// However, `flush` does not make any arrangements to be called again if an +// exception is thrown. +function flush() { + while (index < queue.length) { + var currentIndex = index; + // Advance the index before calling the task. This ensures that we will + // begin flushing on the next task the task throws an error. + index = index + 1; + queue[currentIndex].call(); + // Prevent leaking memory for long chains of recursive calls to `asap`. + // If we call `asap` within tasks scheduled by `asap`, the queue will + // grow, but to avoid an O(n) walk for every task we execute, we don't + // shift tasks off the queue after they have been executed. + // Instead, we periodically shift 1024 tasks off the queue. + if (index > capacity) { + // Manually shift all values starting at the index back to the + // beginning of the queue. + for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { + queue[scan] = queue[scan + index]; + } + queue.length -= index; + index = 0; + } + } + queue.length = 0; + index = 0; + flushing = false; +} + +rawAsap.requestFlush = requestFlush; +function requestFlush() { + // Ensure flushing is not bound to any domain. + // It is not sufficient to exit the domain, because domains exist on a stack. + // To execute code outside of any domain, the following dance is necessary. + var parentDomain = process.domain; + if (parentDomain) { + if (!domain) { + // Lazy execute the domain module. + // Only employed if the user elects to use domains. + domain = require("domain"); + } + domain.active = process.domain = null; + } + + // `setImmediate` is slower that `process.nextTick`, but `process.nextTick` + // cannot handle recursion. + // `requestFlush` will only be called recursively from `asap.js`, to resume + // flushing after an error is thrown into a domain. + // Conveniently, `setImmediate` was introduced in the same version + // `process.nextTick` started throwing recursion errors. + if (flushing && hasSetImmediate) { + setImmediate(flush); + } else { + process.nextTick(flush); + } + + if (parentDomain) { + domain.active = process.domain = parentDomain; + } +} diff --git a/node_modules/asn1/Jenkinsfile b/node_modules/asn1/Jenkinsfile new file mode 100644 index 000000000..d1b459375 --- /dev/null +++ b/node_modules/asn1/Jenkinsfile @@ -0,0 +1,65 @@ +@Library('jenkins-joylib@v1.0.8') _ + +pipeline { + + agent none + + options { + buildDiscarder(logRotator(numToKeepStr: '45')) + timestamps() + } + + stages { + stage('top') { + parallel { + stage('v4-zone') { + agent { + label joyCommonLabels(image_ver: '15.4.1') + } + tools { + nodejs 'sdcnode-v4-zone' + } + stages { + stage('check') { + steps{ + sh('make check') + } + } + stage('test') { + steps{ + sh('make test') + } + } + } + } + + stage('v6-zone64') { + agent { + label joyCommonLabels(image_ver: '18.4.0') + } + tools { + nodejs 'sdcnode-v6-zone64' + } + stages { + stage('check') { + steps{ + sh('make check') + } + } + stage('test') { + steps{ + sh('make test') + } + } + } + } + } + } + } + + post { + always { + joySlackNotifications() + } + } +} diff --git a/node_modules/asn1/LICENSE b/node_modules/asn1/LICENSE new file mode 100644 index 000000000..9b5dcdb7f --- /dev/null +++ b/node_modules/asn1/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Mark Cavage, All rights reserved. + +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 diff --git a/node_modules/asn1/README.md b/node_modules/asn1/README.md new file mode 100644 index 000000000..2208210a3 --- /dev/null +++ b/node_modules/asn1/README.md @@ -0,0 +1,50 @@ +node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. +Currently BER encoding is supported; at some point I'll likely have to do DER. + +## Usage + +Mostly, if you're *actually* needing to read and write ASN.1, you probably don't +need this readme to explain what and why. If you have no idea what ASN.1 is, +see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +The source is pretty much self-explanatory, and has read/write methods for the +common types out there. + +### Decoding + +The following reads an ASN.1 sequence with a boolean. + + var Ber = require('asn1').Ber; + + var reader = new Ber.Reader(Buffer.from([0x30, 0x03, 0x01, 0x01, 0xff])); + + reader.readSequence(); + console.log('Sequence len: ' + reader.length); + if (reader.peek() === Ber.Boolean) + console.log(reader.readBoolean()); + +### Encoding + +The following generates the same payload as above. + + var Ber = require('asn1').Ber; + + var writer = new Ber.Writer(); + + writer.startSequence(); + writer.writeBoolean(true); + writer.endSequence(); + + console.log(writer.buffer); + +## Installation + + npm install asn1 + +## License + +MIT. + +## Bugs + +See . diff --git a/node_modules/asn1/lib/ber/errors.js b/node_modules/asn1/lib/ber/errors.js new file mode 100644 index 000000000..4557b8aea --- /dev/null +++ b/node_modules/asn1/lib/ber/errors.js @@ -0,0 +1,13 @@ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + + newInvalidAsn1Error: function (msg) { + var e = new Error(); + e.name = 'InvalidAsn1Error'; + e.message = msg || ''; + return e; + } + +}; diff --git a/node_modules/asn1/lib/ber/index.js b/node_modules/asn1/lib/ber/index.js new file mode 100644 index 000000000..387d1326f --- /dev/null +++ b/node_modules/asn1/lib/ber/index.js @@ -0,0 +1,27 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var errors = require('./errors'); +var types = require('./types'); + +var Reader = require('./reader'); +var Writer = require('./writer'); + + +// --- Exports + +module.exports = { + + Reader: Reader, + + Writer: Writer + +}; + +for (var t in types) { + if (types.hasOwnProperty(t)) + module.exports[t] = types[t]; +} +for (var e in errors) { + if (errors.hasOwnProperty(e)) + module.exports[e] = errors[e]; +} diff --git a/node_modules/asn1/lib/ber/reader.js b/node_modules/asn1/lib/ber/reader.js new file mode 100644 index 000000000..8a7e4ca01 --- /dev/null +++ b/node_modules/asn1/lib/ber/reader.js @@ -0,0 +1,262 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; + +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + + + +// --- API + +function Reader(data) { + if (!data || !Buffer.isBuffer(data)) + throw new TypeError('data must be a node Buffer'); + + this._buf = data; + this._size = data.length; + + // These hold the "current" state + this._len = 0; + this._offset = 0; +} + +Object.defineProperty(Reader.prototype, 'length', { + enumerable: true, + get: function () { return (this._len); } +}); + +Object.defineProperty(Reader.prototype, 'offset', { + enumerable: true, + get: function () { return (this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'remain', { + get: function () { return (this._size - this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'buffer', { + get: function () { return (this._buf.slice(this._offset)); } +}); + + +/** + * Reads a single byte and advances offset; you can pass in `true` to make this + * a "peek" operation (i.e., get the byte, but don't advance the offset). + * + * @param {Boolean} peek true means don't move offset. + * @return {Number} the next byte, null if not enough data. + */ +Reader.prototype.readByte = function (peek) { + if (this._size - this._offset < 1) + return null; + + var b = this._buf[this._offset] & 0xff; + + if (!peek) + this._offset += 1; + + return b; +}; + + +Reader.prototype.peek = function () { + return this.readByte(true); +}; + + +/** + * Reads a (potentially) variable length off the BER buffer. This call is + * not really meant to be called directly, as callers have to manipulate + * the internal buffer afterwards. + * + * As a result of this call, you can call `Reader.length`, until the + * next thing called that does a readLength. + * + * @return {Number} the amount of offset to advance the buffer. + * @throws {InvalidAsn1Error} on bad ASN.1 + */ +Reader.prototype.readLength = function (offset) { + if (offset === undefined) + offset = this._offset; + + if (offset >= this._size) + return null; + + var lenB = this._buf[offset++] & 0xff; + if (lenB === null) + return null; + + if ((lenB & 0x80) === 0x80) { + lenB &= 0x7f; + + if (lenB === 0) + throw newInvalidAsn1Error('Indefinite length not supported'); + + if (lenB > 4) + throw newInvalidAsn1Error('encoding too long'); + + if (this._size - offset < lenB) + return null; + + this._len = 0; + for (var i = 0; i < lenB; i++) + this._len = (this._len << 8) + (this._buf[offset++] & 0xff); + + } else { + // Wasn't a variable length + this._len = lenB; + } + + return offset; +}; + + +/** + * Parses the next sequence in this BER buffer. + * + * To get the length of the sequence, call `Reader.length`. + * + * @return {Number} the sequence's tag. + */ +Reader.prototype.readSequence = function (tag) { + var seq = this.peek(); + if (seq === null) + return null; + if (tag !== undefined && tag !== seq) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + seq.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + this._offset = o; + return seq; +}; + + +Reader.prototype.readInt = function () { + return this._readTag(ASN1.Integer); +}; + + +Reader.prototype.readBoolean = function () { + return (this._readTag(ASN1.Boolean) === 0 ? false : true); +}; + + +Reader.prototype.readEnumeration = function () { + return this._readTag(ASN1.Enumeration); +}; + + +Reader.prototype.readString = function (tag, retbuf) { + if (!tag) + tag = ASN1.OctetString; + + var b = this.peek(); + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + + if (o === null) + return null; + + if (this.length > this._size - o) + return null; + + this._offset = o; + + if (this.length === 0) + return retbuf ? Buffer.alloc(0) : ''; + + var str = this._buf.slice(this._offset, this._offset + this.length); + this._offset += this.length; + + return retbuf ? str : str.toString('utf8'); +}; + +Reader.prototype.readOID = function (tag) { + if (!tag) + tag = ASN1.OID; + + var b = this.readString(tag, true); + if (b === null) + return null; + + var values = []; + var value = 0; + + for (var i = 0; i < b.length; i++) { + var byte = b[i] & 0xff; + + value <<= 7; + value += byte & 0x7f; + if ((byte & 0x80) === 0) { + values.push(value); + value = 0; + } + } + + value = values.shift(); + values.unshift(value % 40); + values.unshift((value / 40) >> 0); + + return values.join('.'); +}; + + +Reader.prototype._readTag = function (tag) { + assert.ok(tag !== undefined); + + var b = this.peek(); + + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + if (this.length > 4) + throw newInvalidAsn1Error('Integer too long: ' + this.length); + + if (this.length > this._size - o) + return null; + this._offset = o; + + var fb = this._buf[this._offset]; + var value = 0; + + for (var i = 0; i < this.length; i++) { + value <<= 8; + value |= (this._buf[this._offset++] & 0xff); + } + + if ((fb & 0x80) === 0x80 && i !== 4) + value -= (1 << (i * 8)); + + return value >> 0; +}; + + + +// --- Exported API + +module.exports = Reader; diff --git a/node_modules/asn1/lib/ber/types.js b/node_modules/asn1/lib/ber/types.js new file mode 100644 index 000000000..8aea00013 --- /dev/null +++ b/node_modules/asn1/lib/ber/types.js @@ -0,0 +1,36 @@ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + EOC: 0, + Boolean: 1, + Integer: 2, + BitString: 3, + OctetString: 4, + Null: 5, + OID: 6, + ObjectDescriptor: 7, + External: 8, + Real: 9, // float + Enumeration: 10, + PDV: 11, + Utf8String: 12, + RelativeOID: 13, + Sequence: 16, + Set: 17, + NumericString: 18, + PrintableString: 19, + T61String: 20, + VideotexString: 21, + IA5String: 22, + UTCTime: 23, + GeneralizedTime: 24, + GraphicString: 25, + VisibleString: 26, + GeneralString: 28, + UniversalString: 29, + CharacterString: 30, + BMPString: 31, + Constructor: 32, + Context: 128 +}; diff --git a/node_modules/asn1/lib/ber/writer.js b/node_modules/asn1/lib/ber/writer.js new file mode 100644 index 000000000..3515acf79 --- /dev/null +++ b/node_modules/asn1/lib/ber/writer.js @@ -0,0 +1,317 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + +var DEFAULT_OPTS = { + size: 1024, + growthFactor: 8 +}; + + +// --- Helpers + +function merge(from, to) { + assert.ok(from); + assert.equal(typeof (from), 'object'); + assert.ok(to); + assert.equal(typeof (to), 'object'); + + var keys = Object.getOwnPropertyNames(from); + keys.forEach(function (key) { + if (to[key]) + return; + + var value = Object.getOwnPropertyDescriptor(from, key); + Object.defineProperty(to, key, value); + }); + + return to; +} + + + +// --- API + +function Writer(options) { + options = merge(DEFAULT_OPTS, options || {}); + + this._buf = Buffer.alloc(options.size || 1024); + this._size = this._buf.length; + this._offset = 0; + this._options = options; + + // A list of offsets in the buffer where we need to insert + // sequence tag/len pairs. + this._seq = []; +} + +Object.defineProperty(Writer.prototype, 'buffer', { + get: function () { + if (this._seq.length) + throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)'); + + return (this._buf.slice(0, this._offset)); + } +}); + +Writer.prototype.writeByte = function (b) { + if (typeof (b) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(1); + this._buf[this._offset++] = b; +}; + + +Writer.prototype.writeInt = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Integer; + + var sz = 4; + + while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) && + (sz > 1)) { + sz--; + i <<= 8; + } + + if (sz > 4) + throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff'); + + this._ensure(2 + sz); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = sz; + + while (sz-- > 0) { + this._buf[this._offset++] = ((i & 0xff000000) >>> 24); + i <<= 8; + } + +}; + + +Writer.prototype.writeNull = function () { + this.writeByte(ASN1.Null); + this.writeByte(0x00); +}; + + +Writer.prototype.writeEnumeration = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Enumeration; + + return this.writeInt(i, tag); +}; + + +Writer.prototype.writeBoolean = function (b, tag) { + if (typeof (b) !== 'boolean') + throw new TypeError('argument must be a Boolean'); + if (typeof (tag) !== 'number') + tag = ASN1.Boolean; + + this._ensure(3); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = 0x01; + this._buf[this._offset++] = b ? 0xff : 0x00; +}; + + +Writer.prototype.writeString = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string (was: ' + typeof (s) + ')'); + if (typeof (tag) !== 'number') + tag = ASN1.OctetString; + + var len = Buffer.byteLength(s); + this.writeByte(tag); + this.writeLength(len); + if (len) { + this._ensure(len); + this._buf.write(s, this._offset); + this._offset += len; + } +}; + + +Writer.prototype.writeBuffer = function (buf, tag) { + if (typeof (tag) !== 'number') + throw new TypeError('tag must be a number'); + if (!Buffer.isBuffer(buf)) + throw new TypeError('argument must be a buffer'); + + this.writeByte(tag); + this.writeLength(buf.length); + this._ensure(buf.length); + buf.copy(this._buf, this._offset, 0, buf.length); + this._offset += buf.length; +}; + + +Writer.prototype.writeStringArray = function (strings) { + if ((!strings instanceof Array)) + throw new TypeError('argument must be an Array[String]'); + + var self = this; + strings.forEach(function (s) { + self.writeString(s); + }); +}; + +// This is really to solve DER cases, but whatever for now +Writer.prototype.writeOID = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string'); + if (typeof (tag) !== 'number') + tag = ASN1.OID; + + if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) + throw new Error('argument is not a valid OID string'); + + function encodeOctet(bytes, octet) { + if (octet < 128) { + bytes.push(octet); + } else if (octet < 16384) { + bytes.push((octet >>> 7) | 0x80); + bytes.push(octet & 0x7F); + } else if (octet < 2097152) { + bytes.push((octet >>> 14) | 0x80); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else if (octet < 268435456) { + bytes.push((octet >>> 21) | 0x80); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else { + bytes.push(((octet >>> 28) | 0x80) & 0xFF); + bytes.push(((octet >>> 21) | 0x80) & 0xFF); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } + } + + var tmp = s.split('.'); + var bytes = []; + bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); + tmp.slice(2).forEach(function (b) { + encodeOctet(bytes, parseInt(b, 10)); + }); + + var self = this; + this._ensure(2 + bytes.length); + this.writeByte(tag); + this.writeLength(bytes.length); + bytes.forEach(function (b) { + self.writeByte(b); + }); +}; + + +Writer.prototype.writeLength = function (len) { + if (typeof (len) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(4); + + if (len <= 0x7f) { + this._buf[this._offset++] = len; + } else if (len <= 0xff) { + this._buf[this._offset++] = 0x81; + this._buf[this._offset++] = len; + } else if (len <= 0xffff) { + this._buf[this._offset++] = 0x82; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else if (len <= 0xffffff) { + this._buf[this._offset++] = 0x83; + this._buf[this._offset++] = len >> 16; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else { + throw newInvalidAsn1Error('Length too long (> 4 bytes)'); + } +}; + +Writer.prototype.startSequence = function (tag) { + if (typeof (tag) !== 'number') + tag = ASN1.Sequence | ASN1.Constructor; + + this.writeByte(tag); + this._seq.push(this._offset); + this._ensure(3); + this._offset += 3; +}; + + +Writer.prototype.endSequence = function () { + var seq = this._seq.pop(); + var start = seq + 3; + var len = this._offset - start; + + if (len <= 0x7f) { + this._shift(start, len, -2); + this._buf[seq] = len; + } else if (len <= 0xff) { + this._shift(start, len, -1); + this._buf[seq] = 0x81; + this._buf[seq + 1] = len; + } else if (len <= 0xffff) { + this._buf[seq] = 0x82; + this._buf[seq + 1] = len >> 8; + this._buf[seq + 2] = len; + } else if (len <= 0xffffff) { + this._shift(start, len, 1); + this._buf[seq] = 0x83; + this._buf[seq + 1] = len >> 16; + this._buf[seq + 2] = len >> 8; + this._buf[seq + 3] = len; + } else { + throw newInvalidAsn1Error('Sequence too long'); + } +}; + + +Writer.prototype._shift = function (start, len, shift) { + assert.ok(start !== undefined); + assert.ok(len !== undefined); + assert.ok(shift); + + this._buf.copy(this._buf, start + shift, start, start + len); + this._offset += shift; +}; + +Writer.prototype._ensure = function (len) { + assert.ok(len); + + if (this._size - this._offset < len) { + var sz = this._size * this._options.growthFactor; + if (sz - this._offset < len) + sz += len; + + var buf = Buffer.alloc(sz); + + this._buf.copy(buf, 0, 0, this._offset); + this._buf = buf; + this._size = sz; + } +}; + + + +// --- Exported API + +module.exports = Writer; diff --git a/node_modules/asn1/lib/index.js b/node_modules/asn1/lib/index.js new file mode 100644 index 000000000..ede3ab232 --- /dev/null +++ b/node_modules/asn1/lib/index.js @@ -0,0 +1,20 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +// If you have no idea what ASN.1 or BER is, see this: +// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +var Ber = require('./ber/index'); + + + +// --- Exported API + +module.exports = { + + Ber: Ber, + + BerReader: Ber.Reader, + + BerWriter: Ber.Writer + +}; diff --git a/node_modules/asn1/package.json b/node_modules/asn1/package.json new file mode 100644 index 000000000..e31cce5ea --- /dev/null +++ b/node_modules/asn1/package.json @@ -0,0 +1,31 @@ +{ + "author": "Joyent (joyent.com)", + "contributors": [ + "Mark Cavage ", + "David Gwynne ", + "Yunong Xiao ", + "Alex Wilson " + ], + "name": "asn1", + "description": "Contains parsers and serializers for ASN.1 (currently BER only)", + "version": "0.2.6", + "repository": { + "type": "git", + "url": "https://github.com/joyent/node-asn1.git" + }, + "main": "lib/index.js", + "dependencies": { + "safer-buffer": "~2.1.0" + }, + "devDependencies": { + "istanbul": "^0.3.6", + "faucet": "0.0.1", + "tape": "^3.5.0", + "eslint": "2.13.1", + "eslint-plugin-joyent": "~1.3.0" + }, + "scripts": { + "test": "./node_modules/.bin/tape ./test/ber/*.test.js" + }, + "license": "MIT" +} diff --git a/node_modules/assert-plus/AUTHORS b/node_modules/assert-plus/AUTHORS new file mode 100644 index 000000000..1923524fe --- /dev/null +++ b/node_modules/assert-plus/AUTHORS @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/node_modules/assert-plus/CHANGES.md b/node_modules/assert-plus/CHANGES.md new file mode 100644 index 000000000..d249d9b2a --- /dev/null +++ b/node_modules/assert-plus/CHANGES.md @@ -0,0 +1,8 @@ +# assert-plus Changelog + +## 0.2.0 + +- Fix `assert.object(null)` so it throws +- Fix optional/arrayOf exports for non-type-of asserts +- Add optiona/arrayOf exports for Stream/Date/Regex/uuid +- Add basic unit test coverage diff --git a/node_modules/assert-plus/README.md b/node_modules/assert-plus/README.md new file mode 100644 index 000000000..0b39593ce --- /dev/null +++ b/node_modules/assert-plus/README.md @@ -0,0 +1,155 @@ +# assert-plus + +This library is a super small wrapper over node's assert module that has two +things: (1) the ability to disable assertions with the environment variable +NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like +`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks +like this: + +```javascript + var assert = require('assert-plus'); + + function fooAccount(options, callback) { + assert.object(options, 'options'); + assert.number(options.id, 'options.id'); + assert.bool(options.isManager, 'options.isManager'); + assert.string(options.name, 'options.name'); + assert.arrayOfString(options.email, 'options.email'); + assert.func(callback, 'callback'); + + // Do stuff + callback(null, {}); + } +``` + +# API + +All methods that *aren't* part of node's core assert API are simply assumed to +take an argument, and then a string 'name' that's not a message; `AssertionError` +will be thrown if the assertion fails with a message like: + + AssertionError: foo (string) is required + at test (/home/mark/work/foo/foo.js:3:9) + at Object. (/home/mark/work/foo/foo.js:15:1) + at Module._compile (module.js:446:26) + at Object..js (module.js:464:10) + at Module.load (module.js:353:31) + at Function._load (module.js:311:12) + at Array.0 (module.js:484:10) + at EventEmitter._tickCallback (node.js:190:38) + +from: + +```javascript + function test(foo) { + assert.string(foo, 'foo'); + } +``` + +There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: + +```javascript + function test(foo) { + assert.arrayOfString(foo, 'foo'); + } +``` + +You can assert IFF an argument is not `undefined` (i.e., an optional arg): + +```javascript + assert.optionalString(foo, 'foo'); +``` + +Lastly, you can opt-out of assertion checking altogether by setting the +environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have +lots of assertions, and don't want to pay `typeof ()` taxes to v8 in +production. Be advised: The standard functions re-exported from `assert` are +also disabled in assert-plus if NDEBUG is specified. Using them directly from +the `assert` module avoids this behavior. + +The complete list of APIs is: + +* assert.array +* assert.bool +* assert.buffer +* assert.func +* assert.number +* assert.object +* assert.string +* assert.stream +* assert.date +* assert.regex +* assert.uuid +* assert.arrayOfArray +* assert.arrayOfBool +* assert.arrayOfBuffer +* assert.arrayOfFunc +* assert.arrayOfNumber +* assert.arrayOfObject +* assert.arrayOfString +* assert.arrayOfStream +* assert.arrayOfDate +* assert.arrayOfUuid +* assert.optionalArray +* assert.optionalBool +* assert.optionalBuffer +* assert.optionalFunc +* assert.optionalNumber +* assert.optionalObject +* assert.optionalString +* assert.optionalStream +* assert.optionalDate +* assert.optionalUuid +* assert.optionalArrayOfArray +* assert.optionalArrayOfBool +* assert.optionalArrayOfBuffer +* assert.optionalArrayOfFunc +* assert.optionalArrayOfNumber +* assert.optionalArrayOfObject +* assert.optionalArrayOfString +* assert.optionalArrayOfStream +* assert.optionalArrayOfDate +* assert.optionalArrayOfUuid +* assert.AssertionError +* assert.fail +* assert.ok +* assert.equal +* assert.notEqual +* assert.deepEqual +* assert.notDeepEqual +* assert.strictEqual +* assert.notStrictEqual +* assert.throws +* assert.doesNotThrow +* assert.ifError + +# Installation + + npm install assert-plus + +## License + +The MIT License (MIT) +Copyright (c) 2012 Mark Cavage + +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. + +## Bugs + +See . diff --git a/node_modules/assert-plus/assert.js b/node_modules/assert-plus/assert.js new file mode 100644 index 000000000..6bce4d8c6 --- /dev/null +++ b/node_modules/assert-plus/assert.js @@ -0,0 +1,206 @@ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/assert-plus/package.json b/node_modules/assert-plus/package.json new file mode 100644 index 000000000..7654fa9a0 --- /dev/null +++ b/node_modules/assert-plus/package.json @@ -0,0 +1,23 @@ +{ + "author": "Mark Cavage ", + "name": "assert-plus", + "description": "Extra assertions on top of node's assert module", + "version": "0.2.0", + "license": "MIT", + "main": "./assert.js", + "devDependencies": { + "tape": "4.2.2", + "faucet": "0.0.1" + }, + "optionalDependencies": {}, + "scripts": { + "test": "./node_modules/.bin/tape tests/*.js | ./node_modules/.bin/faucet" + }, + "repository": { + "type": "git", + "url": "https://github.com/mcavage/node-assert-plus.git" + }, + "engines": { + "node": ">=0.8" + } +} diff --git a/node_modules/async/CHANGELOG.md b/node_modules/async/CHANGELOG.md new file mode 100644 index 000000000..f15e08121 --- /dev/null +++ b/node_modules/async/CHANGELOG.md @@ -0,0 +1,125 @@ +# v1.5.2 +- Allow using `"consructor"` as an argument in `memoize` (#998) +- Give a better error messsage when `auto` dependency checking fails (#994) +- Various doc updates (#936, #956, #979, #1002) + +# v1.5.1 +- Fix issue with `pause` in `queue` with concurrency enabled (#946) +- `while` and `until` now pass the final result to callback (#963) +- `auto` will properly handle concurrency when there is no callback (#966) +- `auto` will now properly stop execution when an error occurs (#988, #993) +- Various doc fixes (#971, #980) + +# v1.5.0 + +- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) (#892) +- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. (#873) +- `auto` now accepts an optional `concurrency` argument to limit the number of running tasks (#637) +- Added `queue#workersList()`, to retrieve the list of currently running tasks. (#891) +- Various code simplifications (#896, #904) +- Various doc fixes :scroll: (#890, #894, #903, #905, #912) + +# v1.4.2 + +- Ensure coverage files don't get published on npm (#879) + +# v1.4.1 + +- Add in overlooked `detectLimit` method (#866) +- Removed unnecessary files from npm releases (#861) +- Removed usage of a reserved word to prevent :boom: in older environments (#870) + +# v1.4.0 + +- `asyncify` now supports promises (#840) +- Added `Limit` versions of `filter` and `reject` (#836) +- Add `Limit` versions of `detect`, `some` and `every` (#828, #829) +- `some`, `every` and `detect` now short circuit early (#828, #829) +- Improve detection of the global object (#804), enabling use in WebWorkers +- `whilst` now called with arguments from iterator (#823) +- `during` now gets called with arguments from iterator (#824) +- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0)) + + +# v1.3.0 + +New Features: +- Added `constant` +- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. (#671, #806) +- Added `during` and `doDuring`, which are like `whilst` with an async truth test. (#800) +- `retry` now accepts an `interval` parameter to specify a delay between retries. (#793) +- `async` should work better in Web Workers due to better `root` detection (#804) +- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` (#642) +- Various internal updates (#786, #801, #802, #803) +- Various doc fixes (#790, #794) + +Bug Fixes: +- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. (#740, #744, #783) + + +# v1.2.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782) + + +# v1.2.0 + +New Features: + +- Added `timesLimit` (#743) +- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. (#747, #772) + +Bug Fixes: + +- Fixed a regression in `each` and family with empty arrays that have additional properties. (#775, #777) + + +# v1.1.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782) + + +# v1.1.0 + +New Features: + +- `cargo` now supports all of the same methods and event callbacks as `queue`. +- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. (#769) +- Optimized `map`, `eachOf`, and `waterfall` families of functions +- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array (#667). +- The callback is now optional for the composed results of `compose` and `seq`. (#618) +- Reduced file size by 4kb, (minified version by 1kb) +- Added code coverage through `nyc` and `coveralls` (#768) + +Bug Fixes: + +- `forever` will no longer stack overflow with a synchronous iterator (#622) +- `eachLimit` and other limit functions will stop iterating once an error occurs (#754) +- Always pass `null` in callbacks when there is no error (#439) +- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue (#668) +- `each` and family will properly handle an empty array (#578) +- `eachSeries` and family will finish if the underlying array is modified during execution (#557) +- `queue` will throw if a non-function is passed to `q.push()` (#593) +- Doc fixes (#629, #766) + + +# v1.0.0 + +No known breaking changes, we are simply complying with semver from here on out. + +Changes: + +- Start using a changelog! +- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) (#168 #704 #321) +- Detect deadlocks in `auto` (#663) +- Better support for require.js (#527) +- Throw if queue created with concurrency `0` (#714) +- Fix unneeded iteration in `queue.resume()` (#758) +- Guard against timer mocking overriding `setImmediate` (#609 #611) +- Miscellaneous doc fixes (#542 #596 #615 #628 #631 #690 #729) +- Use single noop function internally (#546) +- Optimize internal `_each`, `_map` and `_keys` functions. diff --git a/node_modules/async/LICENSE b/node_modules/async/LICENSE new file mode 100644 index 000000000..8f2969858 --- /dev/null +++ b/node_modules/async/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2014 Caolan McMahon + +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. diff --git a/node_modules/async/README.md b/node_modules/async/README.md new file mode 100644 index 000000000..316c40505 --- /dev/null +++ b/node_modules/async/README.md @@ -0,0 +1,1877 @@ +# Async.js + +[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) +[![NPM version](http://img.shields.io/npm/v/async.svg)](https://www.npmjs.org/package/async) +[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) +[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + + +Async is a utility module which provides straight-forward, powerful functions +for working with asynchronous JavaScript. Although originally designed for +use with [Node.js](http://nodejs.org) and installable via `npm install async`, +it can also be used directly in the browser. + +Async is also installable via: + +- [bower](http://bower.io/): `bower install async` +- [component](https://github.com/component/component): `component install + caolan/async` +- [jam](http://jamjs.org/): `jam install async` +- [spm](http://spmjs.io/): `spm install async` + +Async provides around 20 functions that include the usual 'functional' +suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns +for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these +functions assume you follow the Node.js convention of providing a single +callback as the last argument of your `async` function. + + +## Quick Examples + +```javascript +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); + +async.filter(['file1','file2','file3'], fs.exists, function(results){ + // results now equals an array of the existing files +}); + +async.parallel([ + function(){ ... }, + function(){ ... } +], callback); + +async.series([ + function(){ ... }, + function(){ ... } +]); +``` + +There are many more functions available so take a look at the docs below for a +full list. This module aims to be comprehensive, so if you feel anything is +missing please create a GitHub issue for it. + +## Common Pitfalls [(StackOverflow)](http://stackoverflow.com/questions/tagged/async.js) +### Synchronous iteration functions + +If you get an error like `RangeError: Maximum call stack size exceeded.` or other stack overflow issues when using async, you are likely using a synchronous iterator. By *synchronous* we mean a function that calls its callback on the same tick in the javascript event loop, without doing any I/O or using any timers. Calling many callbacks iteratively will quickly overflow the stack. If you run into this issue, just defer your callback with `async.setImmediate` to start a new call stack on the next tick of the event loop. + +This can also arise by accident if you callback early in certain cases: + +```js +async.eachSeries(hugeArray, function iterator(item, callback) { + if (inCache(item)) { + callback(null, cache[item]); // if many items are cached, you'll overflow + } else { + doSomeIO(item, callback); + } +}, function done() { + //... +}); +``` + +Just change it to: + +```js +async.eachSeries(hugeArray, function iterator(item, callback) { + if (inCache(item)) { + async.setImmediate(function () { + callback(null, cache[item]); + }); + } else { + doSomeIO(item, callback); + //... +``` + +Async guards against synchronous functions in some, but not all, cases. If you are still running into stack overflows, you can defer as suggested above, or wrap functions with [`async.ensureAsync`](#ensureAsync) Functions that are asynchronous by their nature do not have this problem and don't need the extra callback deferral. + +If JavaScript's event loop is still a bit nebulous, check out [this article](http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/) or [this talk](http://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html) for more detailed information about how it works. + + +### Multiple callbacks + +Make sure to always `return` when calling a callback early, otherwise you will cause multiple callbacks and unpredictable behavior in many cases. + +```js +async.waterfall([ + function (callback) { + getSomething(options, function (err, result) { + if (err) { + callback(new Error("failed getting something:" + err.message)); + // we should return here + } + // since we did not return, this callback still will be called and + // `processData` will be called twice + callback(null, result); + }); + }, + processData +], done) +``` + +It is always good practice to `return callback(err, result)` whenever a callback call is not the last statement of a function. + + +### Binding a context to an iterator + +This section is really about `bind`, not about `async`. If you are wondering how to +make `async` execute your iterators in a given context, or are confused as to why +a method of another library isn't working as an iterator, study this example: + +```js +// Here is a simple object with an (unnecessarily roundabout) squaring method +var AsyncSquaringLibrary = { + squareExponent: 2, + square: function(number, callback){ + var result = Math.pow(number, this.squareExponent); + setTimeout(function(){ + callback(null, result); + }, 200); + } +}; + +async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ + // result is [NaN, NaN, NaN] + // This fails because the `this.squareExponent` expression in the square + // function is not evaluated in the context of AsyncSquaringLibrary, and is + // therefore undefined. +}); + +async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ + // result is [1, 4, 9] + // With the help of bind we can attach a context to the iterator before + // passing it to async. Now the square function will be executed in its + // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` + // will be as expected. +}); +``` + +## Download + +The source is available for download from +[GitHub](https://github.com/caolan/async/blob/master/lib/async.js). +Alternatively, you can install using Node Package Manager (`npm`): + + npm install async + +As well as using Bower: + + bower install async + +__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed + +## In the Browser + +So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. + +Usage: + +```html + + +``` + +## Documentation + +Some functions are also available in the following forms: +* `Series` - the same as `` but runs only a single async operation at a time +* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time + +### Collections + +* [`each`](#each), `eachSeries`, `eachLimit` +* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit` +* [`map`](#map), `mapSeries`, `mapLimit` +* [`filter`](#filter), `filterSeries`, `filterLimit` +* [`reject`](#reject), `rejectSeries`, `rejectLimit` +* [`reduce`](#reduce), [`reduceRight`](#reduceRight) +* [`detect`](#detect), `detectSeries`, `detectLimit` +* [`sortBy`](#sortBy) +* [`some`](#some), `someLimit` +* [`every`](#every), `everyLimit` +* [`concat`](#concat), `concatSeries` + +### Control Flow + +* [`series`](#seriestasks-callback) +* [`parallel`](#parallel), `parallelLimit` +* [`whilst`](#whilst), [`doWhilst`](#doWhilst) +* [`until`](#until), [`doUntil`](#doUntil) +* [`during`](#during), [`doDuring`](#doDuring) +* [`forever`](#forever) +* [`waterfall`](#waterfall) +* [`compose`](#compose) +* [`seq`](#seq) +* [`applyEach`](#applyEach), `applyEachSeries` +* [`queue`](#queue), [`priorityQueue`](#priorityQueue) +* [`cargo`](#cargo) +* [`auto`](#auto) +* [`retry`](#retry) +* [`iterator`](#iterator) +* [`times`](#times), `timesSeries`, `timesLimit` + +### Utils + +* [`apply`](#apply) +* [`nextTick`](#nextTick) +* [`memoize`](#memoize) +* [`unmemoize`](#unmemoize) +* [`ensureAsync`](#ensureAsync) +* [`constant`](#constant) +* [`asyncify`](#asyncify) +* [`wrapSync`](#wrapSync) +* [`log`](#log) +* [`dir`](#dir) +* [`noConflict`](#noConflict) + +## Collections + + + +### each(arr, iterator, [callback]) + +Applies the function `iterator` to each item in `arr`, in parallel. +The `iterator` is called with an item from the list, and a callback for when it +has finished. If the `iterator` passes an error to its `callback`, the main +`callback` (for the `each` function) is immediately called with the error. + +Note, that since this function applies `iterator` to each item in parallel, +there is no guarantee that the iterator functions will complete in order. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err)` which must be called once it has + completed. If no error has occurred, the `callback` should be run without + arguments or with an explicit `null` argument. The array index is not passed + to the iterator. If you need the index, use [`forEachOf`](#forEachOf). +* `callback(err)` - *Optional* A callback which is called when all `iterator` functions + have finished, or an error occurs. + +__Examples__ + + +```js +// assuming openFiles is an array of file names and saveFile is a function +// to save the modified contents of that file: + +async.each(openFiles, saveFile, function(err){ + // if any of the saves produced an error, err would equal that error +}); +``` + +```js +// assuming openFiles is an array of file names + +async.each(openFiles, function(file, callback) { + + // Perform operation on file here. + console.log('Processing file ' + file); + + if( file.length > 32 ) { + console.log('This file name is too long'); + callback('File name too long'); + } else { + // Do work to process file here + console.log('File processed'); + callback(); + } +}, function(err){ + // if any of the file processing produced an error, err would equal that error + if( err ) { + // One of the iterations produced an error. + // All processing will now stop. + console.log('A file failed to process'); + } else { + console.log('All files have been processed successfully'); + } +}); +``` + +__Related__ + +* eachSeries(arr, iterator, [callback]) +* eachLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + + + +### forEachOf(obj, iterator, [callback]) + +Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator. + +__Arguments__ + +* `obj` - An object or array to iterate over. +* `iterator(item, key, callback)` - A function to apply to each item in `obj`. +The `key` is the item's key, or index in the case of an array. The iterator is +passed a `callback(err)` which must be called once it has completed. If no +error has occurred, the callback should be run without arguments or with an +explicit `null` argument. +* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs. + +__Example__ + +```js +var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; +var configs = {}; + +async.forEachOf(obj, function (value, key, callback) { + fs.readFile(__dirname + value, "utf8", function (err, data) { + if (err) return callback(err); + try { + configs[key] = JSON.parse(data); + } catch (e) { + return callback(e); + } + callback(); + }) +}, function (err) { + if (err) console.error(err.message); + // configs is now a map of JSON data + doSomethingWith(configs); +}) +``` + +__Related__ + +* forEachOfSeries(obj, iterator, [callback]) +* forEachOfLimit(obj, limit, iterator, [callback]) + +--------------------------------------- + + +### map(arr, iterator, [callback]) + +Produces a new array of values by mapping each value in `arr` through +the `iterator` function. The `iterator` is called with an item from `arr` and a +callback for when it has finished processing. Each of these callback takes 2 arguments: +an `error`, and the transformed item from `arr`. If `iterator` passes an error to its +callback, the main `callback` (for the `map` function) is immediately called with the error. + +Note, that since this function applies the `iterator` to each item in parallel, +there is no guarantee that the `iterator` functions will complete in order. +However, the results array will be in the same order as the original `arr`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, transformed)` which must be called once + it has completed with an error (which can be `null`) and a transformed item. +* `callback(err, results)` - *Optional* A callback which is called when all `iterator` + functions have finished, or an error occurs. Results is an array of the + transformed items from the `arr`. + +__Example__ + +```js +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); +``` + +__Related__ +* mapSeries(arr, iterator, [callback]) +* mapLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + + +### filter(arr, iterator, [callback]) + +__Alias:__ `select` + +Returns a new array of all the values in `arr` which pass an async truth test. +_The callback for each `iterator` call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. This operation is +performed in parallel, but the results array will be in the same order as the +original. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in `arr`. + The `iterator` is passed a `callback(truthValue)`, which must be called with a + boolean argument once it has completed. +* `callback(results)` - *Optional* A callback which is called after all the `iterator` + functions have finished. + +__Example__ + +```js +async.filter(['file1','file2','file3'], fs.exists, function(results){ + // results now equals an array of the existing files +}); +``` + +__Related__ + +* filterSeries(arr, iterator, [callback]) +* filterLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + +### reject(arr, iterator, [callback]) + +The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. + +__Related__ + +* rejectSeries(arr, iterator, [callback]) +* rejectLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + +### reduce(arr, memo, iterator, [callback]) + +__Aliases:__ `inject`, `foldl` + +Reduces `arr` into a single value using an async `iterator` to return +each successive step. `memo` is the initial state of the reduction. +This function only operates in series. + +For performance reasons, it may make sense to split a call to this function into +a parallel map, and then use the normal `Array.prototype.reduce` on the results. +This function is for situations where each step in the reduction needs to be async; +if you can get the data before reducing it, then it's probably a good idea to do so. + +__Arguments__ + +* `arr` - An array to iterate over. +* `memo` - The initial state of the reduction. +* `iterator(memo, item, callback)` - A function applied to each item in the + array to produce the next step in the reduction. The `iterator` is passed a + `callback(err, reduction)` which accepts an optional error as its first + argument, and the state of the reduction as the second. If an error is + passed to the callback, the reduction is stopped and the main `callback` is + immediately called with the error. +* `callback(err, result)` - *Optional* A callback which is called after all the `iterator` + functions have finished. Result is the reduced value. + +__Example__ + +```js +async.reduce([1,2,3], 0, function(memo, item, callback){ + // pointless async: + process.nextTick(function(){ + callback(null, memo + item) + }); +}, function(err, result){ + // result is now equal to the last value of memo, which is 6 +}); +``` + +--------------------------------------- + + +### reduceRight(arr, memo, iterator, [callback]) + +__Alias:__ `foldr` + +Same as [`reduce`](#reduce), only operates on `arr` in reverse order. + + +--------------------------------------- + + +### detect(arr, iterator, [callback]) + +Returns the first value in `arr` that passes an async truth test. The +`iterator` is applied in parallel, meaning the first iterator to return `true` will +fire the detect `callback` with that result. That means the result might not be +the first item in the original `arr` (in terms of order) that passes the test. + +If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in `arr`. + The iterator is passed a `callback(truthValue)` which must be called with a + boolean argument once it has completed. **Note: this callback does not take an error as its first argument.** +* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns + `true`, or after all the `iterator` functions have finished. Result will be + the first item in the array that passes the truth test (iterator) or the + value `undefined` if none passed. **Note: this callback does not take an error as its first argument.** + +__Example__ + +```js +async.detect(['file1','file2','file3'], fs.exists, function(result){ + // result now equals the first file in the list that exists +}); +``` + +__Related__ + +* detectSeries(arr, iterator, [callback]) +* detectLimit(arr, limit, iterator, [callback]) + +--------------------------------------- + + +### sortBy(arr, iterator, [callback]) + +Sorts a list by the results of running each `arr` value through an async `iterator`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, sortValue)` which must be called once it + has completed with an error (which can be `null`) and a value to use as the sort + criteria. +* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` + functions have finished, or an error occurs. Results is the items from + the original `arr` sorted by the values returned by the `iterator` calls. + +__Example__ + +```js +async.sortBy(['file1','file2','file3'], function(file, callback){ + fs.stat(file, function(err, stats){ + callback(err, stats.mtime); + }); +}, function(err, results){ + // results is now the original array of files sorted by + // modified date +}); +``` + +__Sort Order__ + +By modifying the callback parameter the sorting order can be influenced: + +```js +//ascending order +async.sortBy([1,9,3,5], function(x, callback){ + callback(null, x); +}, function(err,result){ + //result callback +} ); + +//descending order +async.sortBy([1,9,3,5], function(x, callback){ + callback(null, x*-1); //<- x*-1 instead of x, turns the order around +}, function(err,result){ + //result callback +} ); +``` + +--------------------------------------- + + +### some(arr, iterator, [callback]) + +__Alias:__ `any` + +Returns `true` if at least one element in the `arr` satisfies an async test. +_The callback for each iterator call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. Once any iterator +call returns `true`, the main `callback` is immediately called. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in the array + in parallel. The iterator is passed a `callback(truthValue)`` which must be + called with a boolean argument once it has completed. +* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns + `true`, or after all the iterator functions have finished. Result will be + either `true` or `false` depending on the values of the async tests. + + **Note: the callbacks do not take an error as their first argument.** +__Example__ + +```js +async.some(['file1','file2','file3'], fs.exists, function(result){ + // if result is true then at least one of the files exists +}); +``` + +__Related__ + +* someLimit(arr, limit, iterator, callback) + +--------------------------------------- + + +### every(arr, iterator, [callback]) + +__Alias:__ `all` + +Returns `true` if every element in `arr` satisfies an async test. +_The callback for each `iterator` call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in the array + in parallel. The iterator is passed a `callback(truthValue)` which must be + called with a boolean argument once it has completed. +* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns + `false`, or after all the iterator functions have finished. Result will be + either `true` or `false` depending on the values of the async tests. + + **Note: the callbacks do not take an error as their first argument.** + +__Example__ + +```js +async.every(['file1','file2','file3'], fs.exists, function(result){ + // if result is true then every file exists +}); +``` + +__Related__ + +* everyLimit(arr, limit, iterator, callback) + +--------------------------------------- + + +### concat(arr, iterator, [callback]) + +Applies `iterator` to each item in `arr`, concatenating the results. Returns the +concatenated list. The `iterator`s are called in parallel, and the results are +concatenated as they return. There is no guarantee that the results array will +be returned in the original order of `arr` passed to the `iterator` function. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, results)` which must be called once it + has completed with an error (which can be `null`) and an array of results. +* `callback(err, results)` - *Optional* A callback which is called after all the `iterator` + functions have finished, or an error occurs. Results is an array containing + the concatenated results of the `iterator` function. + +__Example__ + +```js +async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ + // files is now a list of filenames that exist in the 3 directories +}); +``` + +__Related__ + +* concatSeries(arr, iterator, [callback]) + + +## Control Flow + + +### series(tasks, [callback]) + +Run the functions in the `tasks` array in series, each one running once the previous +function has completed. If any functions in the series pass an error to its +callback, no more functions are run, and `callback` is immediately called with the value of the error. +Otherwise, `callback` receives an array of results when `tasks` have completed. + +It is also possible to use an object instead of an array. Each property will be +run as a function, and the results will be passed to the final `callback` as an object +instead of an array. This can be a more readable way of handling results from +[`series`](#series). + +**Note** that while many implementations preserve the order of object properties, the +[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) +explicitly states that + +> The mechanics and order of enumerating the properties is not specified. + +So if you rely on the order in which your series of functions are executed, and want +this to work on all platforms, consider using an array. + +__Arguments__ + +* `tasks` - An array or object containing functions to run, each function is passed + a `callback(err, result)` it must call on completion with an error `err` (which can + be `null`) and an optional `result` value. +* `callback(err, results)` - An optional callback to run once all the functions + have completed. This function gets a results array (or object) containing all + the result arguments passed to the `task` callbacks. + +__Example__ + +```js +async.series([ + function(callback){ + // do some stuff ... + callback(null, 'one'); + }, + function(callback){ + // do some more stuff ... + callback(null, 'two'); + } +], +// optional callback +function(err, results){ + // results is now equal to ['one', 'two'] +}); + + +// an example using an object instead of an array +async.series({ + one: function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + two: function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +}, +function(err, results) { + // results is now equal to: {one: 1, two: 2} +}); +``` + +--------------------------------------- + + +### parallel(tasks, [callback]) + +Run the `tasks` array of functions in parallel, without waiting until the previous +function has completed. If any of the functions pass an error to its +callback, the main `callback` is immediately called with the value of the error. +Once the `tasks` have completed, the results are passed to the final `callback` as an +array. + +**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded. + +It is also possible to use an object instead of an array. Each property will be +run as a function and the results will be passed to the final `callback` as an object +instead of an array. This can be a more readable way of handling results from +[`parallel`](#parallel). + + +__Arguments__ + +* `tasks` - An array or object containing functions to run. Each function is passed + a `callback(err, result)` which it must call on completion with an error `err` + (which can be `null`) and an optional `result` value. +* `callback(err, results)` - An optional callback to run once all the functions + have completed successfully. This function gets a results array (or object) containing all + the result arguments passed to the task callbacks. + +__Example__ + +```js +async.parallel([ + function(callback){ + setTimeout(function(){ + callback(null, 'one'); + }, 200); + }, + function(callback){ + setTimeout(function(){ + callback(null, 'two'); + }, 100); + } +], +// optional callback +function(err, results){ + // the results array will equal ['one','two'] even though + // the second function had a shorter timeout. +}); + + +// an example using an object instead of an array +async.parallel({ + one: function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + two: function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +}, +function(err, results) { + // results is now equals to: {one: 1, two: 2} +}); +``` + +__Related__ + +* parallelLimit(tasks, limit, [callback]) + +--------------------------------------- + + +### whilst(test, fn, callback) + +Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, +or an error occurs. + +__Arguments__ + +* `test()` - synchronous truth test to perform before each execution of `fn`. +* `fn(callback)` - A function which is called each time `test` passes. The function is + passed a `callback(err)`, which must be called once it has completed with an + optional `err` argument. +* `callback(err, [results])` - A callback which is called after the test + function has failed and repeated execution of `fn` has stopped. `callback` + will be passed an error and any arguments passed to the final `fn`'s callback. + +__Example__ + +```js +var count = 0; + +async.whilst( + function () { return count < 5; }, + function (callback) { + count++; + setTimeout(function () { + callback(null, count); + }, 1000); + }, + function (err, n) { + // 5 seconds have passed, n = 5 + } +); +``` + +--------------------------------------- + + +### doWhilst(fn, test, callback) + +The post-check version of [`whilst`](#whilst). To reflect the difference in +the order of operations, the arguments `test` and `fn` are switched. + +`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + +--------------------------------------- + + +### until(test, fn, callback) + +Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, +or an error occurs. `callback` will be passed an error and any arguments passed +to the final `fn`'s callback. + +The inverse of [`whilst`](#whilst). + +--------------------------------------- + + +### doUntil(fn, test, callback) + +Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. + +--------------------------------------- + + +### during(test, fn, callback) + +Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error. + +__Example__ + +```js +var count = 0; + +async.during( + function (callback) { + return callback(null, count < 5); + }, + function (callback) { + count++; + setTimeout(callback, 1000); + }, + function (err) { + // 5 seconds have passed + } +); +``` + +--------------------------------------- + + +### doDuring(fn, test, callback) + +The post-check version of [`during`](#during). To reflect the difference in +the order of operations, the arguments `test` and `fn` are switched. + +Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function. + +--------------------------------------- + + +### forever(fn, [errback]) + +Calls the asynchronous function `fn` with a callback parameter that allows it to +call itself again, in series, indefinitely. + +If an error is passed to the callback then `errback` is called with the +error, and execution stops, otherwise it will never be called. + +```js +async.forever( + function(next) { + // next is suitable for passing to things that need a callback(err [, whatever]); + // it will result in this function being called again. + }, + function(err) { + // if next is called with a value in its first parameter, it will appear + // in here as 'err', and execution will stop. + } +); +``` + +--------------------------------------- + + +### waterfall(tasks, [callback]) + +Runs the `tasks` array of functions in series, each passing their results to the next in +the array. However, if any of the `tasks` pass an error to their own callback, the +next function is not executed, and the main `callback` is immediately called with +the error. + +__Arguments__ + +* `tasks` - An array of functions to run, each function is passed a + `callback(err, result1, result2, ...)` it must call on completion. The first + argument is an error (which can be `null`) and any further arguments will be + passed as arguments in order to the next task. +* `callback(err, [results])` - An optional callback to run once all the functions + have completed. This will be passed the results of the last task's callback. + + + +__Example__ + +```js +async.waterfall([ + function(callback) { + callback(null, 'one', 'two'); + }, + function(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); + }, + function(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); + } +], function (err, result) { + // result now equals 'done' +}); +``` +Or, with named functions: + +```js +async.waterfall([ + myFirstFunction, + mySecondFunction, + myLastFunction, +], function (err, result) { + // result now equals 'done' +}); +function myFirstFunction(callback) { + callback(null, 'one', 'two'); +} +function mySecondFunction(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); +} +function myLastFunction(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); +} +``` + +Or, if you need to pass any argument to the first function: + +```js +async.waterfall([ + async.apply(myFirstFunction, 'zero'), + mySecondFunction, + myLastFunction, +], function (err, result) { + // result now equals 'done' +}); +function myFirstFunction(arg1, callback) { + // arg1 now equals 'zero' + callback(null, 'one', 'two'); +} +function mySecondFunction(arg1, arg2, callback) { + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); +} +function myLastFunction(arg1, callback) { + // arg1 now equals 'three' + callback(null, 'done'); +} +``` + +--------------------------------------- + +### compose(fn1, fn2...) + +Creates a function which is a composition of the passed asynchronous +functions. Each function consumes the return value of the function that +follows. Composing functions `f()`, `g()`, and `h()` would produce the result of +`f(g(h()))`, only this version uses callbacks to obtain the return values. + +Each function is executed with the `this` binding of the composed function. + +__Arguments__ + +* `functions...` - the asynchronous functions to compose + + +__Example__ + +```js +function add1(n, callback) { + setTimeout(function () { + callback(null, n + 1); + }, 10); +} + +function mul3(n, callback) { + setTimeout(function () { + callback(null, n * 3); + }, 10); +} + +var add1mul3 = async.compose(mul3, add1); + +add1mul3(4, function (err, result) { + // result now equals 15 +}); +``` + +--------------------------------------- + +### seq(fn1, fn2...) + +Version of the compose function that is more natural to read. +Each function consumes the return value of the previous function. +It is the equivalent of [`compose`](#compose) with the arguments reversed. + +Each function is executed with the `this` binding of the composed function. + +__Arguments__ + +* `functions...` - the asynchronous functions to compose + + +__Example__ + +```js +// Requires lodash (or underscore), express3 and dresende's orm2. +// Part of an app, that fetches cats of the logged user. +// This example uses `seq` function to avoid overnesting and error +// handling clutter. +app.get('/cats', function(request, response) { + var User = request.models.User; + async.seq( + _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) + function(user, fn) { + user.getCats(fn); // 'getCats' has signature (callback(err, data)) + } + )(req.session.user_id, function (err, cats) { + if (err) { + console.error(err); + response.json({ status: 'error', message: err.message }); + } else { + response.json({ status: 'ok', message: 'Cats found', data: cats }); + } + }); +}); +``` + +--------------------------------------- + +### applyEach(fns, args..., callback) + +Applies the provided arguments to each function in the array, calling +`callback` after all functions have completed. If you only provide the first +argument, then it will return a function which lets you pass in the +arguments as if it were a single function call. + +__Arguments__ + +* `fns` - the asynchronous functions to all call with the same arguments +* `args...` - any number of separate arguments to pass to the function +* `callback` - the final argument should be the callback, called when all + functions have completed processing + + +__Example__ + +```js +async.applyEach([enableSearch, updateSchema], 'bucket', callback); + +// partial application example: +async.each( + buckets, + async.applyEach([enableSearch, updateSchema]), + callback +); +``` + +__Related__ + +* applyEachSeries(tasks, args..., [callback]) + +--------------------------------------- + + +### queue(worker, [concurrency]) + +Creates a `queue` object with the specified `concurrency`. Tasks added to the +`queue` are processed in parallel (up to the `concurrency` limit). If all +`worker`s are in progress, the task is queued until one becomes available. +Once a `worker` completes a `task`, that `task`'s callback is called. + +__Arguments__ + +* `worker(task, callback)` - An asynchronous function for processing a queued + task, which must call its `callback(err)` argument when finished, with an + optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`. +* `concurrency` - An `integer` for determining how many `worker` functions should be + run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown. + +__Queue objects__ + +The `queue` object returned by this function has the following properties and +methods: + +* `length()` - a function returning the number of items waiting to be processed. +* `started` - a function returning whether or not any items have been pushed and processed by the queue +* `running()` - a function returning the number of items currently being processed. +* `workersList()` - a function returning the array of items currently being processed. +* `idle()` - a function returning false if there are items waiting or being processed, or true if not. +* `concurrency` - an integer for determining how many `worker` functions should be + run in parallel. This property can be changed after a `queue` is created to + alter the concurrency on-the-fly. +* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once + the `worker` has finished processing the task. Instead of a single task, a `tasks` array + can be submitted. The respective callback is used for every task in the list. +* `unshift(task, [callback])` - add a new task to the front of the `queue`. +* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, + and further tasks will be queued. +* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. +* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. +* `paused` - a boolean for determining whether the queue is in a paused state +* `pause()` - a function that pauses the processing of tasks until `resume()` is called. +* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. +* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle. + +__Example__ + +```js +// create a queue object with concurrency 2 + +var q = async.queue(function (task, callback) { + console.log('hello ' + task.name); + callback(); +}, 2); + + +// assign a callback +q.drain = function() { + console.log('all items have been processed'); +} + +// add some items to the queue + +q.push({name: 'foo'}, function (err) { + console.log('finished processing foo'); +}); +q.push({name: 'bar'}, function (err) { + console.log('finished processing bar'); +}); + +// add some items to the queue (batch-wise) + +q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { + console.log('finished processing item'); +}); + +// add some items to the front of the queue + +q.unshift({name: 'bar'}, function (err) { + console.log('finished processing bar'); +}); +``` + + +--------------------------------------- + + +### priorityQueue(worker, concurrency) + +The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: + +* `push(task, priority, [callback])` - `priority` should be a number. If an array of + `tasks` is given, all tasks will be assigned the same priority. +* The `unshift` method was removed. + +--------------------------------------- + + +### cargo(worker, [payload]) + +Creates a `cargo` object with the specified payload. Tasks added to the +cargo will be processed altogether (up to the `payload` limit). If the +`worker` is in progress, the task is queued until it becomes available. Once +the `worker` has completed some tasks, each callback of those tasks is called. +Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work. + +While [queue](#queue) passes only one task to one of a group of workers +at a time, cargo passes an array of tasks to a single worker, repeating +when the worker is finished. + +__Arguments__ + +* `worker(tasks, callback)` - An asynchronous function for processing an array of + queued tasks, which must call its `callback(err)` argument when finished, with + an optional `err` argument. +* `payload` - An optional `integer` for determining how many tasks should be + processed per round; if omitted, the default is unlimited. + +__Cargo objects__ + +The `cargo` object returned by this function has the following properties and +methods: + +* `length()` - A function returning the number of items waiting to be processed. +* `payload` - An `integer` for determining how many tasks should be + process per round. This property can be changed after a `cargo` is created to + alter the payload on-the-fly. +* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called + once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` + can be submitted. The respective callback is used for every task in the list. +* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. +* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. +* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. +* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue) + +__Example__ + +```js +// create a cargo object with payload 2 + +var cargo = async.cargo(function (tasks, callback) { + for(var i=0; i +### auto(tasks, [concurrency], [callback]) + +Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied. + +If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far. + +Note, all functions are called with a `results` object as a second argument, +so it is unsafe to pass functions in the `tasks` object which cannot handle the +extra argument. + +For example, this snippet of code: + +```js +async.auto({ + readData: async.apply(fs.readFile, 'data.txt', 'utf-8') +}, callback); +``` + +will have the effect of calling `readFile` with the results object as the last +argument, which will fail: + +```js +fs.readFile('data.txt', 'utf-8', cb, {}); +``` + +Instead, wrap the call to `readFile` in a function which does not forward the +`results` object: + +```js +async.auto({ + readData: function(cb, results){ + fs.readFile('data.txt', 'utf-8', cb); + } +}, callback); +``` + +__Arguments__ + +* `tasks` - An object. Each of its properties is either a function or an array of + requirements, with the function itself the last item in the array. The object's key + of a property serves as the name of the task defined by that property, + i.e. can be used when specifying requirements for other tasks. + The function receives two arguments: (1) a `callback(err, result)` which must be + called when finished, passing an `error` (which can be `null`) and the result of + the function's execution, and (2) a `results` object, containing the results of + the previously executed functions. +* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible. +* `callback(err, results)` - An optional callback which is called when all the + tasks have been completed. It receives the `err` argument if any `tasks` + pass an error to their callback. Results are always returned; however, if + an error occurs, no further `tasks` will be performed, and the results + object will only contain partial results. + + +__Example__ + +```js +async.auto({ + get_data: function(callback){ + console.log('in get_data'); + // async code to get some data + callback(null, 'data', 'converted to array'); + }, + make_folder: function(callback){ + console.log('in make_folder'); + // async code to create a directory to store a file in + // this is run at the same time as getting the data + callback(null, 'folder'); + }, + write_file: ['get_data', 'make_folder', function(callback, results){ + console.log('in write_file', JSON.stringify(results)); + // once there is some data and the directory exists, + // write the data to a file in the directory + callback(null, 'filename'); + }], + email_link: ['write_file', function(callback, results){ + console.log('in email_link', JSON.stringify(results)); + // once the file is written let's email a link to it... + // results.write_file contains the filename returned by write_file. + callback(null, {'file':results.write_file, 'email':'user@example.com'}); + }] +}, function(err, results) { + console.log('err = ', err); + console.log('results = ', results); +}); +``` + +This is a fairly trivial example, but to do this using the basic parallel and +series functions would look like this: + +```js +async.parallel([ + function(callback){ + console.log('in get_data'); + // async code to get some data + callback(null, 'data', 'converted to array'); + }, + function(callback){ + console.log('in make_folder'); + // async code to create a directory to store a file in + // this is run at the same time as getting the data + callback(null, 'folder'); + } +], +function(err, results){ + async.series([ + function(callback){ + console.log('in write_file', JSON.stringify(results)); + // once there is some data and the directory exists, + // write the data to a file in the directory + results.push('filename'); + callback(null); + }, + function(callback){ + console.log('in email_link', JSON.stringify(results)); + // once the file is written let's email a link to it... + callback(null, {'file':results.pop(), 'email':'user@example.com'}); + } + ]); +}); +``` + +For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding +new tasks much easier (and the code more readable). + + +--------------------------------------- + + +### retry([opts = {times: 5, interval: 0}| 5], task, [callback]) + +Attempts to get a successful response from `task` no more than `times` times before +returning an error. If the task is successful, the `callback` will be passed the result +of the successful task. If all attempts fail, the callback will be passed the error and +result (if any) of the final attempt. + +__Arguments__ + +* `opts` - Can be either an object with `times` and `interval` or a number. + * `times` - The number of attempts to make before giving up. The default is `5`. + * `interval` - The time to wait between retries, in milliseconds. The default is `0`. + * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. +* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` + which must be called when finished, passing `err` (which can be `null`) and the `result` of + the function's execution, and (2) a `results` object, containing the results of + the previously executed functions (if nested inside another control flow). +* `callback(err, results)` - An optional callback which is called when the + task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. + +The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below: + +```js +// try calling apiMethod 3 times +async.retry(3, apiMethod, function(err, result) { + // do something with the result +}); +``` + +```js +// try calling apiMethod 3 times, waiting 200 ms between each retry +async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + // do something with the result +}); +``` + +```js +// try calling apiMethod the default 5 times no delay between each retry +async.retry(apiMethod, function(err, result) { + // do something with the result +}); +``` + +It can also be embedded within other control flow functions to retry individual methods +that are not as reliable, like this: + +```js +async.auto({ + users: api.getUsers.bind(api), + payments: async.retry(3, api.getPayments.bind(api)) +}, function(err, results) { + // do something with the results +}); +``` + + +--------------------------------------- + + +### iterator(tasks) + +Creates an iterator function which calls the next function in the `tasks` array, +returning a continuation to call the next one after that. It's also possible to +“peek” at the next iterator with `iterator.next()`. + +This function is used internally by the `async` module, but can be useful when +you want to manually control the flow of functions in series. + +__Arguments__ + +* `tasks` - An array of functions to run. + +__Example__ + +```js +var iterator = async.iterator([ + function(){ sys.p('one'); }, + function(){ sys.p('two'); }, + function(){ sys.p('three'); } +]); + +node> var iterator2 = iterator(); +'one' +node> var iterator3 = iterator2(); +'two' +node> iterator3(); +'three' +node> var nextfn = iterator2.next(); +node> nextfn(); +'three' +``` + +--------------------------------------- + + +### apply(function, arguments..) + +Creates a continuation function with some arguments already applied. + +Useful as a shorthand when combined with other control flow functions. Any arguments +passed to the returned function are added to the arguments originally passed +to apply. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to automatically apply when the + continuation is called. + +__Example__ + +```js +// using apply + +async.parallel([ + async.apply(fs.writeFile, 'testfile1', 'test1'), + async.apply(fs.writeFile, 'testfile2', 'test2'), +]); + + +// the same process without using apply + +async.parallel([ + function(callback){ + fs.writeFile('testfile1', 'test1', callback); + }, + function(callback){ + fs.writeFile('testfile2', 'test2', callback); + } +]); +``` + +It's possible to pass any number of additional arguments when calling the +continuation: + +```js +node> var fn = async.apply(sys.puts, 'one'); +node> fn('two', 'three'); +one +two +three +``` + +--------------------------------------- + + +### nextTick(callback), setImmediate(callback) + +Calls `callback` on a later loop around the event loop. In Node.js this just +calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` +if available, otherwise `setTimeout(callback, 0)`, which means other higher priority +events may precede the execution of `callback`. + +This is used internally for browser-compatibility purposes. + +__Arguments__ + +* `callback` - The function to call on a later loop around the event loop. + +__Example__ + +```js +var call_order = []; +async.nextTick(function(){ + call_order.push('two'); + // call_order now equals ['one','two'] +}); +call_order.push('one') +``` + + +### times(n, iterator, [callback]) + +Calls the `iterator` function `n` times, and accumulates results in the same manner +you would use with [`map`](#map). + +__Arguments__ + +* `n` - The number of times to run the function. +* `iterator` - The function to call `n` times. +* `callback` - see [`map`](#map) + +__Example__ + +```js +// Pretend this is some complicated async factory +var createUser = function(id, callback) { + callback(null, { + id: 'user' + id + }) +} +// generate 5 users +async.times(5, function(n, next){ + createUser(n, function(err, user) { + next(err, user) + }) +}, function(err, users) { + // we should now have 5 users +}); +``` + +__Related__ + +* timesSeries(n, iterator, [callback]) +* timesLimit(n, limit, iterator, [callback]) + + +## Utils + + +### memoize(fn, [hasher]) + +Caches the results of an `async` function. When creating a hash to store function +results against, the callback is omitted from the hash and an optional hash +function can be used. + +If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function. + +The cache of results is exposed as the `memo` property of the function returned +by `memoize`. + +__Arguments__ + +* `fn` - The function to proxy and cache results from. +* `hasher` - An optional function for generating a custom hash for storing + results. It has all the arguments applied to it apart from the callback, and + must be synchronous. + +__Example__ + +```js +var slow_fn = function (name, callback) { + // do something + callback(null, result); +}; +var fn = async.memoize(slow_fn); + +// fn can now be used as if it were slow_fn +fn('some name', function () { + // callback +}); +``` + + +### unmemoize(fn) + +Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized +form. Handy for testing. + +__Arguments__ + +* `fn` - the memoized function + +--------------------------------------- + + +### ensureAsync(fn) + +Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained. + +__Arguments__ + +* `fn` - an async function, one that expects a node-style callback as its last argument + +Returns a wrapped function with the exact same call signature as the function passed in. + +__Example__ + +```js +function sometimesAsync(arg, callback) { + if (cache[arg]) { + return callback(null, cache[arg]); // this would be synchronous!! + } else { + doSomeIO(arg, callback); // this IO would be asynchronous + } +} + +// this has a risk of stack overflows if many results are cached in a row +async.mapSeries(args, sometimesAsync, done); + +// this will defer sometimesAsync's callback if necessary, +// preventing stack overflows +async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + +``` + +--------------------------------------- + + +### constant(values...) + +Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`. + +__Example__ + +```js +async.waterfall([ + async.constant(42), + function (value, next) { + // value === 42 + }, + //... +], callback); + +async.waterfall([ + async.constant(filename, "utf8"), + fs.readFile, + function (fileData, next) { + //... + } + //... +], callback); + +async.auto({ + hostname: async.constant("https://server.net/"), + port: findFreePort, + launchServer: ["hostname", "port", function (cb, options) { + startServer(options, cb); + }], + //... +}, callback); + +``` + +--------------------------------------- + + + +### asyncify(func) + +__Alias:__ `wrapSync` + +Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback. + +__Example__ + +```js +async.waterfall([ + async.apply(fs.readFile, filename, "utf8"), + async.asyncify(JSON.parse), + function (data, next) { + // data is the result of parsing the text. + // If there was a parsing error, it would have been caught. + } +], callback) +``` + +If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example: + +```js +async.waterfall([ + async.apply(fs.readFile, filename, "utf8"), + async.asyncify(function (contents) { + return db.model.create(contents); + }), + function (model, next) { + // `model` is the instantiated model object. + // If there was an error, this function would be skipped. + } +], callback) +``` + +This also means you can asyncify ES2016 `async` functions. + +```js +var q = async.queue(async.asyncify(async function (file) { + var intermediateStep = await processFile(file); + return await somePromise(intermediateStep) +})); + +q.push(files); +``` + +--------------------------------------- + + +### log(function, arguments) + +Logs the result of an `async` function to the `console`. Only works in Node.js or +in browsers that support `console.log` and `console.error` (such as FF and Chrome). +If multiple arguments are returned from the async function, `console.log` is +called on each argument in order. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to apply to the function. + +__Example__ + +```js +var hello = function(name, callback){ + setTimeout(function(){ + callback(null, 'hello ' + name); + }, 1000); +}; +``` +```js +node> async.log(hello, 'world'); +'hello world' +``` + +--------------------------------------- + + +### dir(function, arguments) + +Logs the result of an `async` function to the `console` using `console.dir` to +display the properties of the resulting object. Only works in Node.js or +in browsers that support `console.dir` and `console.error` (such as FF and Chrome). +If multiple arguments are returned from the async function, `console.dir` is +called on each argument in order. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to apply to the function. + +__Example__ + +```js +var hello = function(name, callback){ + setTimeout(function(){ + callback(null, {hello: name}); + }, 1000); +}; +``` +```js +node> async.dir(hello, 'world'); +{hello: 'world'} +``` + +--------------------------------------- + + +### noConflict() + +Changes the value of `async` back to its original value, returning a reference to the +`async` object. diff --git a/node_modules/async/dist/async.js b/node_modules/async/dist/async.js new file mode 100644 index 000000000..31e7620fb --- /dev/null +++ b/node_modules/async/dist/async.js @@ -0,0 +1,1265 @@ +/*! + * async + * https://github.com/caolan/async + * + * Copyright 2010-2014 Caolan McMahon + * Released under the MIT license + */ +(function () { + + var async = {}; + function noop() {} + function identity(v) { + return v; + } + function toBool(v) { + return !!v; + } + function notId(v) { + return !v; + } + + // global on the server, window in the browser + var previous_async; + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self === 'object' && self.self === self && self || + typeof global === 'object' && global.global === global && global || + this; + + if (root != null) { + previous_async = root.async; + } + + async.noConflict = function () { + root.async = previous_async; + return async; + }; + + function only_once(fn) { + return function() { + if (fn === null) throw new Error("Callback was already called."); + fn.apply(this, arguments); + fn = null; + }; + } + + function _once(fn) { + return function() { + if (fn === null) return; + fn.apply(this, arguments); + fn = null; + }; + } + + //// cross-browser compatiblity functions //// + + var _toString = Object.prototype.toString; + + var _isArray = Array.isArray || function (obj) { + return _toString.call(obj) === '[object Array]'; + }; + + // Ported from underscore.js isObject + var _isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + function _isArrayLike(arr) { + return _isArray(arr) || ( + // has a positive integer length property + typeof arr.length === "number" && + arr.length >= 0 && + arr.length % 1 === 0 + ); + } + + function _arrayEach(arr, iterator) { + var index = -1, + length = arr.length; + + while (++index < length) { + iterator(arr[index], index, arr); + } + } + + function _map(arr, iterator) { + var index = -1, + length = arr.length, + result = Array(length); + + while (++index < length) { + result[index] = iterator(arr[index], index, arr); + } + return result; + } + + function _range(count) { + return _map(Array(count), function (v, i) { return i; }); + } + + function _reduce(arr, iterator, memo) { + _arrayEach(arr, function (x, i, a) { + memo = iterator(memo, x, i, a); + }); + return memo; + } + + function _forEachOf(object, iterator) { + _arrayEach(_keys(object), function (key) { + iterator(object[key], key); + }); + } + + function _indexOf(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] === item) return i; + } + return -1; + } + + var _keys = Object.keys || function (obj) { + var keys = []; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + keys.push(k); + } + } + return keys; + }; + + function _keyIterator(coll) { + var i = -1; + var len; + var keys; + if (_isArrayLike(coll)) { + len = coll.length; + return function next() { + i++; + return i < len ? i : null; + }; + } else { + keys = _keys(coll); + len = keys.length; + return function next() { + i++; + return i < len ? keys[i] : null; + }; + } + } + + // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html) + // This accumulates the arguments passed into an array, after a given index. + // From underscore.js (https://github.com/jashkenas/underscore/pull/2140). + function _restParam(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0); + var rest = Array(length); + for (var index = 0; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + } + // Currently unused but handle cases outside of the switch statement: + // var args = Array(startIndex + 1); + // for (index = 0; index < startIndex; index++) { + // args[index] = arguments[index]; + // } + // args[startIndex] = rest; + // return func.apply(this, args); + }; + } + + function _withoutIndex(iterator) { + return function (value, index, callback) { + return iterator(value, callback); + }; + } + + //// exported async module functions //// + + //// nextTick implementation with browser-compatible fallback //// + + // capture the global reference to guard against fakeTimer mocks + var _setImmediate = typeof setImmediate === 'function' && setImmediate; + + var _delay = _setImmediate ? function(fn) { + // not a direct alias for IE10 compatibility + _setImmediate(fn); + } : function(fn) { + setTimeout(fn, 0); + }; + + if (typeof process === 'object' && typeof process.nextTick === 'function') { + async.nextTick = process.nextTick; + } else { + async.nextTick = _delay; + } + async.setImmediate = _setImmediate ? _delay : async.nextTick; + + + async.forEach = + async.each = function (arr, iterator, callback) { + return async.eachOf(arr, _withoutIndex(iterator), callback); + }; + + async.forEachSeries = + async.eachSeries = function (arr, iterator, callback) { + return async.eachOfSeries(arr, _withoutIndex(iterator), callback); + }; + + + async.forEachLimit = + async.eachLimit = function (arr, limit, iterator, callback) { + return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback); + }; + + async.forEachOf = + async.eachOf = function (object, iterator, callback) { + callback = _once(callback || noop); + object = object || []; + + var iter = _keyIterator(object); + var key, completed = 0; + + while ((key = iter()) != null) { + completed += 1; + iterator(object[key], key, only_once(done)); + } + + if (completed === 0) callback(null); + + function done(err) { + completed--; + if (err) { + callback(err); + } + // Check key is null in case iterator isn't exhausted + // and done resolved synchronously. + else if (key === null && completed <= 0) { + callback(null); + } + } + }; + + async.forEachOfSeries = + async.eachOfSeries = function (obj, iterator, callback) { + callback = _once(callback || noop); + obj = obj || []; + var nextKey = _keyIterator(obj); + var key = nextKey(); + function iterate() { + var sync = true; + if (key === null) { + return callback(null); + } + iterator(obj[key], key, only_once(function (err) { + if (err) { + callback(err); + } + else { + key = nextKey(); + if (key === null) { + return callback(null); + } else { + if (sync) { + async.setImmediate(iterate); + } else { + iterate(); + } + } + } + })); + sync = false; + } + iterate(); + }; + + + + async.forEachOfLimit = + async.eachOfLimit = function (obj, limit, iterator, callback) { + _eachOfLimit(limit)(obj, iterator, callback); + }; + + function _eachOfLimit(limit) { + + return function (obj, iterator, callback) { + callback = _once(callback || noop); + obj = obj || []; + var nextKey = _keyIterator(obj); + if (limit <= 0) { + return callback(null); + } + var done = false; + var running = 0; + var errored = false; + + (function replenish () { + if (done && running <= 0) { + return callback(null); + } + + while (running < limit && !errored) { + var key = nextKey(); + if (key === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iterator(obj[key], key, only_once(function (err) { + running -= 1; + if (err) { + callback(err); + errored = true; + } + else { + replenish(); + } + })); + } + })(); + }; + } + + + function doParallel(fn) { + return function (obj, iterator, callback) { + return fn(async.eachOf, obj, iterator, callback); + }; + } + function doParallelLimit(fn) { + return function (obj, limit, iterator, callback) { + return fn(_eachOfLimit(limit), obj, iterator, callback); + }; + } + function doSeries(fn) { + return function (obj, iterator, callback) { + return fn(async.eachOfSeries, obj, iterator, callback); + }; + } + + function _asyncMap(eachfn, arr, iterator, callback) { + callback = _once(callback || noop); + arr = arr || []; + var results = _isArrayLike(arr) ? [] : {}; + eachfn(arr, function (value, index, callback) { + iterator(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); + } + + async.map = doParallel(_asyncMap); + async.mapSeries = doSeries(_asyncMap); + async.mapLimit = doParallelLimit(_asyncMap); + + // reduce only has a series version, as doing reduce in parallel won't + // work in many situations. + async.inject = + async.foldl = + async.reduce = function (arr, memo, iterator, callback) { + async.eachOfSeries(arr, function (x, i, callback) { + iterator(memo, x, function (err, v) { + memo = v; + callback(err); + }); + }, function (err) { + callback(err, memo); + }); + }; + + async.foldr = + async.reduceRight = function (arr, memo, iterator, callback) { + var reversed = _map(arr, identity).reverse(); + async.reduce(reversed, memo, iterator, callback); + }; + + async.transform = function (arr, memo, iterator, callback) { + if (arguments.length === 3) { + callback = iterator; + iterator = memo; + memo = _isArray(arr) ? [] : {}; + } + + async.eachOf(arr, function(v, k, cb) { + iterator(memo, v, k, cb); + }, function(err) { + callback(err, memo); + }); + }; + + function _filter(eachfn, arr, iterator, callback) { + var results = []; + eachfn(arr, function (x, index, callback) { + iterator(x, function (v) { + if (v) { + results.push({index: index, value: x}); + } + callback(); + }); + }, function () { + callback(_map(results.sort(function (a, b) { + return a.index - b.index; + }), function (x) { + return x.value; + })); + }); + } + + async.select = + async.filter = doParallel(_filter); + + async.selectLimit = + async.filterLimit = doParallelLimit(_filter); + + async.selectSeries = + async.filterSeries = doSeries(_filter); + + function _reject(eachfn, arr, iterator, callback) { + _filter(eachfn, arr, function(value, cb) { + iterator(value, function(v) { + cb(!v); + }); + }, callback); + } + async.reject = doParallel(_reject); + async.rejectLimit = doParallelLimit(_reject); + async.rejectSeries = doSeries(_reject); + + function _createTester(eachfn, check, getResult) { + return function(arr, limit, iterator, cb) { + function done() { + if (cb) cb(getResult(false, void 0)); + } + function iteratee(x, _, callback) { + if (!cb) return callback(); + iterator(x, function (v) { + if (cb && check(v)) { + cb(getResult(true, x)); + cb = iterator = false; + } + callback(); + }); + } + if (arguments.length > 3) { + eachfn(arr, limit, iteratee, done); + } else { + cb = iterator; + iterator = limit; + eachfn(arr, iteratee, done); + } + }; + } + + async.any = + async.some = _createTester(async.eachOf, toBool, identity); + + async.someLimit = _createTester(async.eachOfLimit, toBool, identity); + + async.all = + async.every = _createTester(async.eachOf, notId, notId); + + async.everyLimit = _createTester(async.eachOfLimit, notId, notId); + + function _findGetResult(v, x) { + return x; + } + async.detect = _createTester(async.eachOf, identity, _findGetResult); + async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); + async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult); + + async.sortBy = function (arr, iterator, callback) { + async.map(arr, function (x, callback) { + iterator(x, function (err, criteria) { + if (err) { + callback(err); + } + else { + callback(null, {value: x, criteria: criteria}); + } + }); + }, function (err, results) { + if (err) { + return callback(err); + } + else { + callback(null, _map(results.sort(comparator), function (x) { + return x.value; + })); + } + + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } + }; + + async.auto = function (tasks, concurrency, callback) { + if (typeof arguments[1] === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = _once(callback || noop); + var keys = _keys(tasks); + var remainingTasks = keys.length; + if (!remainingTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = remainingTasks; + } + + var results = {}; + var runningTasks = 0; + + var hasError = false; + + var listeners = []; + function addListener(fn) { + listeners.unshift(fn); + } + function removeListener(fn) { + var idx = _indexOf(listeners, fn); + if (idx >= 0) listeners.splice(idx, 1); + } + function taskComplete() { + remainingTasks--; + _arrayEach(listeners.slice(0), function (fn) { + fn(); + }); + } + + addListener(function () { + if (!remainingTasks) { + callback(null, results); + } + }); + + _arrayEach(keys, function (k) { + if (hasError) return; + var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; + var taskCallback = _restParam(function(err, args) { + runningTasks--; + if (args.length <= 1) { + args = args[0]; + } + if (err) { + var safeResults = {}; + _forEachOf(results, function(val, rkey) { + safeResults[rkey] = val; + }); + safeResults[k] = args; + hasError = true; + + callback(err, safeResults); + } + else { + results[k] = args; + async.setImmediate(taskComplete); + } + }); + var requires = task.slice(0, task.length - 1); + // prevent dead-locks + var len = requires.length; + var dep; + while (len--) { + if (!(dep = tasks[requires[len]])) { + throw new Error('Has nonexistent dependency in ' + requires.join(', ')); + } + if (_isArray(dep) && _indexOf(dep, k) >= 0) { + throw new Error('Has cyclic dependencies'); + } + } + function ready() { + return runningTasks < concurrency && _reduce(requires, function (a, x) { + return (a && results.hasOwnProperty(x)); + }, true) && !results.hasOwnProperty(k); + } + if (ready()) { + runningTasks++; + task[task.length - 1](taskCallback, results); + } + else { + addListener(listener); + } + function listener() { + if (ready()) { + runningTasks++; + removeListener(listener); + task[task.length - 1](taskCallback, results); + } + } + }); + }; + + + + async.retry = function(times, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var attempts = []; + + var opts = { + times: DEFAULT_TIMES, + interval: DEFAULT_INTERVAL + }; + + function parseTimes(acc, t){ + if(typeof t === 'number'){ + acc.times = parseInt(t, 10) || DEFAULT_TIMES; + } else if(typeof t === 'object'){ + acc.times = parseInt(t.times, 10) || DEFAULT_TIMES; + acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL; + } else { + throw new Error('Unsupported argument type for \'times\': ' + typeof t); + } + } + + var length = arguments.length; + if (length < 1 || length > 3) { + throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)'); + } else if (length <= 2 && typeof times === 'function') { + callback = task; + task = times; + } + if (typeof times !== 'function') { + parseTimes(opts, times); + } + opts.callback = callback; + opts.task = task; + + function wrappedTask(wrappedCallback, wrappedResults) { + function retryAttempt(task, finalAttempt) { + return function(seriesCallback) { + task(function(err, result){ + seriesCallback(!err || finalAttempt, {err: err, result: result}); + }, wrappedResults); + }; + } + + function retryInterval(interval){ + return function(seriesCallback){ + setTimeout(function(){ + seriesCallback(null); + }, interval); + }; + } + + while (opts.times) { + + var finalAttempt = !(opts.times-=1); + attempts.push(retryAttempt(opts.task, finalAttempt)); + if(!finalAttempt && opts.interval > 0){ + attempts.push(retryInterval(opts.interval)); + } + } + + async.series(attempts, function(done, data){ + data = data[data.length - 1]; + (wrappedCallback || opts.callback)(data.err, data.result); + }); + } + + // If a callback is passed, run this as a controll flow + return opts.callback ? wrappedTask() : wrappedTask; + }; + + async.waterfall = function (tasks, callback) { + callback = _once(callback || noop); + if (!_isArray(tasks)) { + var err = new Error('First argument to waterfall must be an array of functions'); + return callback(err); + } + if (!tasks.length) { + return callback(); + } + function wrapIterator(iterator) { + return _restParam(function (err, args) { + if (err) { + callback.apply(null, [err].concat(args)); + } + else { + var next = iterator.next(); + if (next) { + args.push(wrapIterator(next)); + } + else { + args.push(callback); + } + ensureAsync(iterator).apply(null, args); + } + }); + } + wrapIterator(async.iterator(tasks))(); + }; + + function _parallel(eachfn, tasks, callback) { + callback = callback || noop; + var results = _isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + task(_restParam(function (err, args) { + if (args.length <= 1) { + args = args[0]; + } + results[key] = args; + callback(err); + })); + }, function (err) { + callback(err, results); + }); + } + + async.parallel = function (tasks, callback) { + _parallel(async.eachOf, tasks, callback); + }; + + async.parallelLimit = function(tasks, limit, callback) { + _parallel(_eachOfLimit(limit), tasks, callback); + }; + + async.series = function(tasks, callback) { + _parallel(async.eachOfSeries, tasks, callback); + }; + + async.iterator = function (tasks) { + function makeCallback(index) { + function fn() { + if (tasks.length) { + tasks[index].apply(null, arguments); + } + return fn.next(); + } + fn.next = function () { + return (index < tasks.length - 1) ? makeCallback(index + 1): null; + }; + return fn; + } + return makeCallback(0); + }; + + async.apply = _restParam(function (fn, args) { + return _restParam(function (callArgs) { + return fn.apply( + null, args.concat(callArgs) + ); + }); + }); + + function _concat(eachfn, arr, fn, callback) { + var result = []; + eachfn(arr, function (x, index, cb) { + fn(x, function (err, y) { + result = result.concat(y || []); + cb(err); + }); + }, function (err) { + callback(err, result); + }); + } + async.concat = doParallel(_concat); + async.concatSeries = doSeries(_concat); + + async.whilst = function (test, iterator, callback) { + callback = callback || noop; + if (test()) { + var next = _restParam(function(err, args) { + if (err) { + callback(err); + } else if (test.apply(this, args)) { + iterator(next); + } else { + callback.apply(null, [null].concat(args)); + } + }); + iterator(next); + } else { + callback(null); + } + }; + + async.doWhilst = function (iterator, test, callback) { + var calls = 0; + return async.whilst(function() { + return ++calls <= 1 || test.apply(this, arguments); + }, iterator, callback); + }; + + async.until = function (test, iterator, callback) { + return async.whilst(function() { + return !test.apply(this, arguments); + }, iterator, callback); + }; + + async.doUntil = function (iterator, test, callback) { + return async.doWhilst(iterator, function() { + return !test.apply(this, arguments); + }, callback); + }; + + async.during = function (test, iterator, callback) { + callback = callback || noop; + + var next = _restParam(function(err, args) { + if (err) { + callback(err); + } else { + args.push(check); + test.apply(this, args); + } + }); + + var check = function(err, truth) { + if (err) { + callback(err); + } else if (truth) { + iterator(next); + } else { + callback(null); + } + }; + + test(check); + }; + + async.doDuring = function (iterator, test, callback) { + var calls = 0; + async.during(function(next) { + if (calls++ < 1) { + next(null, true); + } else { + test.apply(this, arguments); + } + }, iterator, callback); + }; + + function _queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + function _insert(q, data, pos, callback) { + if (callback != null && typeof callback !== "function") { + throw new Error("task callback must be a function"); + } + q.started = true; + if (!_isArray(data)) { + data = [data]; + } + if(data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return async.setImmediate(function() { + q.drain(); + }); + } + _arrayEach(data, function(task) { + var item = { + data: task, + callback: callback || noop + }; + + if (pos) { + q.tasks.unshift(item); + } else { + q.tasks.push(item); + } + + if (q.tasks.length === q.concurrency) { + q.saturated(); + } + }); + async.setImmediate(q.process); + } + function _next(q, tasks) { + return function(){ + workers -= 1; + + var removed = false; + var args = arguments; + _arrayEach(tasks, function (task) { + _arrayEach(workersList, function (worker, index) { + if (worker === task && !removed) { + workersList.splice(index, 1); + removed = true; + } + }); + + task.callback.apply(task, args); + }); + if (q.tasks.length + workers === 0) { + q.drain(); + } + q.process(); + }; + } + + var workers = 0; + var workersList = []; + var q = { + tasks: [], + concurrency: concurrency, + payload: payload, + saturated: noop, + empty: noop, + drain: noop, + started: false, + paused: false, + push: function (data, callback) { + _insert(q, data, false, callback); + }, + kill: function () { + q.drain = noop; + q.tasks = []; + }, + unshift: function (data, callback) { + _insert(q, data, true, callback); + }, + process: function () { + while(!q.paused && workers < q.concurrency && q.tasks.length){ + + var tasks = q.payload ? + q.tasks.splice(0, q.payload) : + q.tasks.splice(0, q.tasks.length); + + var data = _map(tasks, function (task) { + return task.data; + }); + + if (q.tasks.length === 0) { + q.empty(); + } + workers += 1; + workersList.push(tasks[0]); + var cb = only_once(_next(q, tasks)); + worker(data, cb); + } + }, + length: function () { + return q.tasks.length; + }, + running: function () { + return workers; + }, + workersList: function () { + return workersList; + }, + idle: function() { + return q.tasks.length + workers === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { return; } + q.paused = false; + var resumeCount = Math.min(q.concurrency, q.tasks.length); + // Need to call q.process once per concurrent + // worker to preserve full concurrency after pause + for (var w = 1; w <= resumeCount; w++) { + async.setImmediate(q.process); + } + } + }; + return q; + } + + async.queue = function (worker, concurrency) { + var q = _queue(function (items, cb) { + worker(items[0], cb); + }, concurrency, 1); + + return q; + }; + + async.priorityQueue = function (worker, concurrency) { + + function _compareTasks(a, b){ + return a.priority - b.priority; + } + + function _binarySearch(sequence, item, compare) { + var beg = -1, + end = sequence.length - 1; + while (beg < end) { + var mid = beg + ((end - beg + 1) >>> 1); + if (compare(item, sequence[mid]) >= 0) { + beg = mid; + } else { + end = mid - 1; + } + } + return beg; + } + + function _insert(q, data, priority, callback) { + if (callback != null && typeof callback !== "function") { + throw new Error("task callback must be a function"); + } + q.started = true; + if (!_isArray(data)) { + data = [data]; + } + if(data.length === 0) { + // call drain immediately if there are no tasks + return async.setImmediate(function() { + q.drain(); + }); + } + _arrayEach(data, function(task) { + var item = { + data: task, + priority: priority, + callback: typeof callback === 'function' ? callback : noop + }; + + q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); + + if (q.tasks.length === q.concurrency) { + q.saturated(); + } + async.setImmediate(q.process); + }); + } + + // Start with a normal queue + var q = async.queue(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function (data, priority, callback) { + _insert(q, data, priority, callback); + }; + + // Remove unshift function + delete q.unshift; + + return q; + }; + + async.cargo = function (worker, payload) { + return _queue(worker, 1, payload); + }; + + function _console_fn(name) { + return _restParam(function (fn, args) { + fn.apply(null, args.concat([_restParam(function (err, args) { + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } + else if (console[name]) { + _arrayEach(args, function (x) { + console[name](x); + }); + } + } + })])); + }); + } + async.log = _console_fn('log'); + async.dir = _console_fn('dir'); + /*async.info = _console_fn('info'); + async.warn = _console_fn('warn'); + async.error = _console_fn('error');*/ + + async.memoize = function (fn, hasher) { + var memo = {}; + var queues = {}; + var has = Object.prototype.hasOwnProperty; + hasher = hasher || identity; + var memoized = _restParam(function memoized(args) { + var callback = args.pop(); + var key = hasher.apply(null, args); + if (has.call(memo, key)) { + async.setImmediate(function () { + callback.apply(null, memo[key]); + }); + } + else if (has.call(queues, key)) { + queues[key].push(callback); + } + else { + queues[key] = [callback]; + fn.apply(null, args.concat([_restParam(function (args) { + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })])); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; + }; + + async.unmemoize = function (fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; + }; + + function _times(mapper) { + return function (count, iterator, callback) { + mapper(_range(count), iterator, callback); + }; + } + + async.times = _times(async.map); + async.timesSeries = _times(async.mapSeries); + async.timesLimit = function (count, limit, iterator, callback) { + return async.mapLimit(_range(count), limit, iterator, callback); + }; + + async.seq = function (/* functions... */) { + var fns = arguments; + return _restParam(function (args) { + var that = this; + + var callback = args[args.length - 1]; + if (typeof callback == 'function') { + args.pop(); + } else { + callback = noop; + } + + async.reduce(fns, args, function (newargs, fn, cb) { + fn.apply(that, newargs.concat([_restParam(function (err, nextargs) { + cb(err, nextargs); + })])); + }, + function (err, results) { + callback.apply(that, [err].concat(results)); + }); + }); + }; + + async.compose = function (/* functions... */) { + return async.seq.apply(null, Array.prototype.reverse.call(arguments)); + }; + + + function _applyEach(eachfn) { + return _restParam(function(fns, args) { + var go = _restParam(function(args) { + var that = this; + var callback = args.pop(); + return eachfn(fns, function (fn, _, cb) { + fn.apply(that, args.concat([cb])); + }, + callback); + }); + if (args.length) { + return go.apply(this, args); + } + else { + return go; + } + }); + } + + async.applyEach = _applyEach(async.eachOf); + async.applyEachSeries = _applyEach(async.eachOfSeries); + + + async.forever = function (fn, callback) { + var done = only_once(callback || noop); + var task = ensureAsync(fn); + function next(err) { + if (err) { + return done(err); + } + task(next); + } + next(); + }; + + function ensureAsync(fn) { + return _restParam(function (args) { + var callback = args.pop(); + args.push(function () { + var innerArgs = arguments; + if (sync) { + async.setImmediate(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + var sync = true; + fn.apply(this, args); + sync = false; + }); + } + + async.ensureAsync = ensureAsync; + + async.constant = _restParam(function(values) { + var args = [null].concat(values); + return function (callback) { + return callback.apply(this, args); + }; + }); + + async.wrapSync = + async.asyncify = function asyncify(func) { + return _restParam(function (args) { + var callback = args.pop(); + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (_isObject(result) && typeof result.then === "function") { + result.then(function(value) { + callback(null, value); + })["catch"](function(err) { + callback(err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); + }; + + // Node.js + if (typeof module === 'object' && module.exports) { + module.exports = async; + } + // AMD / RequireJS + else if (typeof define === 'function' && define.amd) { + define([], function () { + return async; + }); + } + // included directly via + + +<% js.forEach(function(j){ %> + +<% }); + + css.forEach(function(c){ %> + +<% }); %> + +> + + +
+ <%- content %> +
+ + diff --git a/node_modules/docker/src/docker.js b/node_modules/docker/src/docker.js new file mode 100644 index 000000000..0ada75b13 --- /dev/null +++ b/node_modules/docker/src/docker.js @@ -0,0 +1,894 @@ +// # docker.js +// ### _A simple documentation generator based on [docco](http://jashkenas.github.com/docco/)_ +// **Docker** is a really simple documentation generator, which originally started out as a +// pure-javascript port of **docco**, but which eventually gained many extra little features +// which somewhat break docco's philosophy of being a quick-and-dirty thing. +// +// Docker source-code can be found on [GitHub](https://github.com/jbt/docker) +// +// Take a look at the [original docco project](http://jashkenas.github.com/docco/) to get a feel +// for the sort of functionality this provides. In short: **Markdown**-based displaying of code comments +// next to syntax-highlighted code. This page is the result of running docker against itself. +// +// The command-line usage of docker is somewhat more useful than that of docco. To use, simply run +// +// ```sh +// ./docker -i path/to/code -o path/to/docs [a_file.js a_dir] +// ``` +// +// Docker will then recurse into the code root directory (or alternatively just the files +// and directories you specify) and document-ize all the files it can. +// The folder structure will be preserved in the document root. +// +// More detailed usage instructions and examples can be found in the [README](../README.md) +// +// ## Differences from docco +// The main differences from docco are: +// +// - **jsDoc support**: support for **jsDoc**-style code comments, via [Dox](https://github.com/visionmedia/dox). You can see some examples of +// the sort of output you get below. +// +// - **Folder Tree** and **Heading Navigation**: collapsible sidebar with folder tree and jump-to +// heading links for easy navigation between many files and within long files. +// +// - **Markdown File Support**: support for plain markdown files, like the [README](../README.md) for this project. +// +// - **Colour Schemes**: support for multiple output colour schemes +// +// +// So let's get started! + +// ## Node Modules +// Include lots of node modules +var stripIndent = require('strip-indent'); +var MarkdownIt = require('markdown-it'); +var highlight = require('highlight.js'); +var repeating = require('repeating'); +var mkdirp = require('mkdirp'); +var extend = require('extend'); +var watchr = require('watchr'); +var async = require('async'); +var path = require('path'); +var less = require('less'); +var dox = require('dox'); +var ejs = require('ejs'); +var toc = require('toc'); +var fs = require('fs'); + +// Language details exist in [languages.js](./languages.js) +var languages = require('./languages'); + + +// Create an instance of markdown-it, which we'll use for prettyifying all the comments +var md = new MarkdownIt({ + html: true, + langPrefix: '', + highlight: function(str, lang) { + if (lang && highlight.getLanguage(lang)) { + try { + return highlight.highlight(lang, str).value; + } catch (__) {} + } + + return ''; + } +}); + + +// ## Markdown Link Overriding +// +// Relative links to files need to be remapped to their rendered file name, +// so that they can be written without `.html` everywhere else without breaking +md.renderer.rules.link_open = function(tokens, idx, options, env, self) { + var hrefIndex = tokens[idx].attrIndex('href'); + + // If the link a relative link, then put '.html' on the end. + if (hrefIndex >= 0 && !/\/\//.test(tokens[idx].attrs[hrefIndex][1])) { + tokens[idx].attrs[hrefIndex][1] += '.html'; + } + + return self.renderToken.apply(self, arguments); +}; + + +/** + * ## Docker Constructor + * + * Creates a new docker instance. All methods are called on one instance of this object. + * + * Input is an `opts` containing all the options as specified below. + */ +var Docker = module.exports = function(opts) { + // Initialise all opts with default values + opts = this.options = extend({ + inDir: path.resolve('.'), + outDir: path.resolve('doc'), + onlyUpdated: false, + colourScheme: 'default', + ignoreHidden: false, + sidebarState: true, + exclude: false, + lineNums: false, + multiLineOnly: false, + js: [], + css: [], + extras: [] + }, opts); + + // Generate an exclude regex for the given pattern + if (typeof opts.exclude === 'string') { + this.excludePattern = new RegExp('^(' + + opts.exclude.replace(/\./g, '\\.') + .replace(/\*/g, '.*') + .replace(/,/g, '|') + + ')(/|$)'); + } else { + this.excludePattern = false; + } + + // Initialise an object which'll store all our directory structure + this.tree = {}; + + // Load bundled extras + var extrasRoot = path.resolve(__dirname, '..', 'extras'); + + opts.extras.forEach(function(e) { + opts.js.push(path.join(extrasRoot, e, e + '.js')); + opts.css.push(path.join(extrasRoot, e, e + '.css')); + }); +}; + + +/** + * ## Docker.prototype.doc + * + * Generate documentation for a bunch of files + * + * @this Docker + * @param {Array} files Array of file paths relative to the `inDir` to generate documentation for. + */ +Docker.prototype.doc = function(files) { + this.files = files.concat(); + + // Start processing, unless we already are + if (!this.running) this.run(); +}; + + +/** + * ## Docker.prototype.watch + * + * Watches the input directory for file changes and updates docs whenever a file is updated + * + * @param {Array} files Array of file paths relative to the `inDir` to generate documentation for. + */ +Docker.prototype.watch = function(files) { + this.watching = true; + this.watchFiles = files; + + // Function to call when a file is changed. We put this on a timeout to account + // for several file changes happening in quick succession. + var uto = false, self = this; + function update() { + if (self.running) return (uto = setTimeout(update, 250)); + self.doc(self.watchFiles); + uto = false; + } + + // Create a watchr instance to watch all changes in the input directory + watchr.watch({ + path: this.options.inDir, + listener: function() { + if (!uto) uto = setTimeout(update, 250); + } + }); + + // Aaaaand, go! + this.doc(files); +}; + + +/** + * ## Docker.prototype.run + * + * Loops through all the queued file and processes them individually + */ +Docker.prototype.run = function() { + var self = this; + + this.running = true; + + // While we stil have any files to process, take the first one and process it + async.whilst( + function() { + return self.files.length > 0; + }, + function(cb) { + self.process(self.files.shift(), cb); + }, + function() { + // Once we're done, say we're no longer running and copy over all the static stuff + self.running = false; + self.copySharedResources(); + } + ); +}; + + +/** + * ## Docker.prototype.addFileToFree + * + * Adds a file to the file tree to show in the sidebar. + * + * @param {string} filename Name of file to add to the tree + */ +Docker.prototype.addFileToTree = function(filename) { + // Split the file's path into the individual directories + filename = filename.replace(new RegExp('^' + path.sep.replace(/([\/\\])/g, '\\$1')), ''); + var bits = filename.split(path.sep); + + // Loop through all the directories and process the folder structure into `this.tree`. + // + // `this.tree` takes the format: + // ```js + // { + // dirs: { + // 'child_dir_name': { /* same format as tree */ }, + // 'other_child_name': // etc... + // }, + // files: [ + // 'filename.js', + // 'filename2.js', + // // etc... + // ] + // } + // ``` + var currDir = this.tree; + var lastBit = bits.pop(); + + bits.forEach(function(bit) { + if (!currDir.dirs) currDir.dirs = {}; + if (!currDir.dirs[bit]) currDir.dirs[bit] = {}; + currDir = currDir.dirs[bit]; + }); + if (!currDir.files) currDir.files = []; + + if (currDir.files.indexOf(lastBit) === -1) currDir.files.push(lastBit); +}; + + +/** + * ## Docker.prototype.process + * + * Process the given file. If it's a directory, list all the children and queue those. + * If it's a file, add it to the queue. + * + * @param {string} file Path to the file to process + * @param {function} cb Callback to call when done + */ +Docker.prototype.process = function(file, cb) { + // If we should be ignoring this file, do nothing and immediately callback. + if (this.excludePattern && this.excludePattern.test(file)) { + cb(); + return; + } + + var self = this; + + var resolved = path.resolve(this.options.inDir, file); + fs.lstat(resolved, function lstatCb(err, stat) { + if (err) { + // Something unexpected happened on the filesystem. + // Nothing really that we can do about it, so throw it and be done with it + return cb(err); + } + + if (stat && stat.isSymbolicLink()) { + fs.readlink(resolved, function(err, link) { + if (err) { + // Something unexpected happened on the filesystem. + // Nothing really that we can do about it, so throw it and be done with it + return cb(err); + } + + resolved = path.resolve(path.dirname(resolved), link); + + fs.exists(resolved, function(exists) { + if (!exists) { + console.error('Unable to follow symlink to ' + resolved + ': file does not exist'); + cb(null); + } else { + fs.lstat(resolved, lstatCb); + } + }); + }); + } else if (stat && stat.isDirectory()) { + // Find all children of the directory and queue those + fs.readdir(resolved, function(err, list) { + if (err) { + // Something unexpected happened on the filesystem. + // Nothing really that we can do about it, so throw it and be done with it + return cb(err); + } + + list.forEach(function(f) { + // For everything in the directory, queue it unless it looks hiden and we've + // been told to ignore hidden files. + if (self.options.ignoreHidden && f.charAt(0).match(/[\._]/)) return; + self.files.push(path.join(file, f)); + }); + cb(); + }); + } else { + // Wahey, we have a normal file. Go ahead and process it then. + self.processFile(file, cb); + } + }); +}; + + +/** + * ## Docker.prototype.processFile + * + * Processes a given file. At this point we know the file exists and + * isn't any kind of directory or symlink. + * + * @param {string} file Path to the file to process + * @param {function} cb Callback to call when done + */ +Docker.prototype.processFile = function(file, cb) { + var resolved = path.resolve(this.options.inDir, file); + var self = this; + + // First, check to see whether we actually should be processing this file and bail if not + this.decideWhetherToProcess(resolved, function(shouldProcess) { + if (!shouldProcess) return cb(); + + fs.readFile(resolved, 'utf-8', function(err, data) { + if (err) return cb(err); + + // Grab the language details for the file and bail if we don't understand it. + var lang = self.detectLanguage(resolved, data); + if (lang === false) return cb(); + + self.addFileToTree(file); + + switch (lang.type) { + case 'markdown': + self.renderMarkdownFile(data, resolved, cb); + break; + default: + case 'code': + var sections = self.parseSections(data, lang); + self.highlight(sections, lang); + self.renderCodeFile(sections, lang, resolved, cb); + break; + } + }); + }); +}; + + +/** + * ## Docker.prototype.decideWhetherToProcess + * + * Decide whether or not a file should be processed. If the `onlyUpdated` + * flag was set on initialization, only allow processing of files that + * are newer than their counterpart generated doc file. + * + * Fires a callback function with either true or false depending on whether + * or not the file should be processed + * + * @param {string} filename The name of the file to check + * @param {function} callback Callback function + */ +Docker.prototype.decideWhetherToProcess = function(filename, callback) { + // If we should be processing all files, then yes, we should process this one + if (!this.options.onlyUpdated) return callback(true); + + // Find the doc this file would be compiled to + var outFile = this.outFile(filename); + + // See whether the file is newer than the output + this.fileIsNewer(filename, outFile, callback); +}; + + +/** + * ## Docker.prototype.fileIsNewer + * + * Sees whether one file is newer than another + * + * @param {string} file File to check + * @param {string} otherFile File to compare to + * @param {function} callback Callback to fire with true if file is newer than otherFile + */ +Docker.prototype.fileIsNewer = function(file, otherFile, callback) { + fs.stat(otherFile, function(err, outStat) { + // If the output file doesn't exist, then definitely process this file + if (err && err.code == 'ENOENT') return callback(true); + + fs.stat(file, function(err, inStat) { + // Process the file if the input is newer than the output + callback(+inStat.mtime > +outStat.mtime); + }); + }); +}; + + +/** + * ## Docker.prototype.parseSections + * + * Parse the content of a file into individual sections. + * A section is defined to be one block of code with an accompanying comment + * + * Returns an array of section objects, which take the form + * ```js + * { + * doc_text: 'foo', // String containing comment content + * code_text: 'bar' // Accompanying code + * } + * ``` + * @param {string} data The contents of the script file + * @param {object} lang The language data for the script file + * @return {Array} array of section objects + */ +Docker.prototype.parseSections = function(data, lang) { + var lines = data.split('\n'); + + var section = { + docs: '', + code: '' + }; + + var sections = []; + + var inMultiLineComment = false; + var multiLine = ''; + var jsDocData; + + var commentRegex = new RegExp('^\\s*' + lang.comment + '\\s?'); + + var self = this; + + + function mark(a, stripParas) { + var h = md.render(a.replace(/(^\s*|\s*$)/, '')); + return stripParas ? h.replace(/<\/?p>/g, '') : h; + } + + lines.forEach(function(line, i) { + // Only match against parts of the line that don't appear in strings + var matchable = line.replace(/(["'])((?:[^\\\1]|(?:\\\\)*?\\[^\\])*?)\1/g, '$1$1'); + if (lang.literals) { + lang.literals.forEach(function(replace) { + matchable = matchable.replace(replace[0], replace[1]); + }); + } + + if (lang.multiLine) { + // If we are currently in a multiline comment, behave differently + if (inMultiLineComment) { + // End-multiline comments should match regardless of whether they're 'quoted' + if (line.match(lang.multiLine[1])) { + // Once we have reached the end of the multiline, take the whole content + // of the multiline comment, and parse it as jsDoc. + inMultiLineComment = false; + + multiLine += line; + + // Replace block comment delimiters with whitespace of the same length + // This way we can safely outdent without breaking too many things if the + // comment has been deliberately indented. For example, the lines in the + // followinc comment should all be outdented equally: + // + // ```c + // /* A big long multiline + // comment that should get + // outdented properly */ + // ``` + multiLine = multiLine + .replace(lang.multiLine[0], function(a) { return repeating(' ', a.length); }) + .replace(lang.multiLine[1], function(a) { return repeating(' ', a.length); }); + + multiLine = stripIndent(multiLine); + + if (lang.jsDoc) { + // Strip off leading * characters. + multiLine = multiLine.replace(/^[ \t]*\*? ?/gm, ''); + + jsDocData = dox.parseComment(multiLine, { raw: true }); + + // Put markdown parser on the data so it can be accessed in the template + jsDocData.md = mark; + section.docs += self.renderTemplate('jsDoc', jsDocData); + } else { + section.docs += '\n' + multiLine + '\n'; + } + multiLine = ''; + } else { + multiLine += line + '\n'; + } + return; + } else if ( + // We want to match the start of a multiline comment only if the line doesn't also match the + // end of the same comment, or if a single-line comment is started before the multiline + // So for example the following would not be treated as a multiline starter: + // ```js + // alert('foo'); // Alert some foo /* Random open comment thing + // ``` + matchable.match(lang.multiLine[0]) && + !matchable.replace(lang.multiLine[0], '').match(lang.multiLine[1]) && + (!lang.comment || !matchable.split(lang.multiLine[0])[0].match(commentRegex)) + ) { + // Here we start parsing a multiline comment. Store away the current section and start a new one + if (section.code) { + if (!section.code.match(/^\s*$/) || !section.docs.match(/^\s*$/)) sections.push(section); + section = { docs: '', code: '' }; + } + inMultiLineComment = true; + multiLine = line + '\n'; + return; + } + } + if ( + !self.options.multiLineOnly && + lang.comment && + matchable.match(commentRegex) && + (!lang.commentsIgnore || !matchable.match(lang.commentsIgnore)) && + !matchable.match(/#!/) + ) { + // This is for single-line comments. Again, store away the last section and start a new one + if (section.code) { + if (!section.code.match(/^\s*$/) || !section.docs.match(/^\s*$/)) sections.push(section); + section = { docs: '', code: '' }; + } + section.docs += line.replace(commentRegex, '') + '\n'; + } else if (!lang.commentsIgnore || !line.match(lang.commentsIgnore)) { + // If this is the first line of active code, store it in the section + // so we can grab it for line numbers later + if (!section.firstCodeLine) { + section.firstCodeLine = i + 1; + } + section.code += line + '\n'; + } + }); + + sections.push(section); + return sections; +}; + + +/** + * ## Docker.prototype.detectLanguage + * + * Provides language-specific params for a given file name. + * + * @param {string} filename The name of the file to test + * @param {string} contents The contents of the file (to check for shebang) + * @return {object} Object containing all of the language-specific params + */ +Docker.prototype.detectLanguage = function(filename, contents) { + // First try to detect the language from the file extension + var ext = path.extname(filename); + ext = ext.replace(/^\./, ''); + + // Bit of a hacky way of incorporating .C for C++ + if (ext === '.C') return languages.cpp; + ext = ext.toLowerCase(); + + var base = path.basename(filename); + base = base.toLowerCase(); + + for (var i in languages) { + if (!languages.hasOwnProperty(i)) continue; + if (languages[i].extensions && + languages[i].extensions.indexOf(ext) !== -1) return languages[i]; + if (languages[i].names && + languages[i].names.indexOf(base) !== -1) return languages[i]; + } + + // If that doesn't work, see if we can grab a shebang + + var shebangRegex = /^#!\s*(?:\/usr\/bin\/env)?\s*(?:[^\n]*\/)*([^\/\n]+)(?:\n|$)/; + var match = shebangRegex.exec(contents); + if (match) { + for (var j in languages) { + if (!languages.hasOwnProperty(j)) continue; + if (languages[j].executables && languages[j].executables.indexOf(match[1]) !== -1) return languages[j]; + } + } + + // If we still can't figure it out, give up and return false. + return false; +}; + + +/** + * ## Docker.prototype.highlight + * + * Highlights all the sections of a file using **highlightjs** + * Given an array of section objects, loop through them, and for each + * section generate pretty html for the comments and the code, and put them in + * `docHtml` and `codeHtml` respectively + * + * @param {Array} sections Array of section objects + * @param {string} language Language ith which to highlight the file + */ +Docker.prototype.highlight = function(sections, lang) { + sections.forEach(function(section) { + section.codeHtml = highlight.highlight(lang.highlightLanguage || lang.language, section.code).value; + section.docHtml = md.render(section.docs); + }); +}; + + +/** + * ## Docker.prototype.addAnchors + * + * Automatically assign an id to each section based on any headings using **toc** helpers + * + * @param {object} section The section object to look at + * @param {number} idx The index of the section in the whole array. + * @param {Object} headings Object in which to keep track of headings for avoiding clashes + */ +Docker.prototype.addAnchors = function(docHtml, idx, headings) { + var headingRegex = /]*)>([\s\S]+?)<\/h\1>/gi; // toc.defaults.headers + + if (docHtml.match(headingRegex)) { + // If there is a heading tag, pick out the first one (likely the most important), sanitize + // the name a bit to make it more friendly for IDs, then use that + docHtml = docHtml.replace(headingRegex, function(a, level, attrs, content) { + var id = toc.unique(headings.ids, toc.anchor(content)); + + headings.list.push({ id: id, text: toc.untag(content), level: level }); + return [ + '
', + ' ', + ' ', + content, + ' ', + '
' + ].join('\n'); + }); + } else { + // If however we can't find a heading, then just use the section index instead. + docHtml = [ + '
', + ' ', + '
', + docHtml + ].join('\n'); + } + + return docHtml; +}; + + +/** + * ## Docker.prototype.addLineNumbers + * + * Adds line numbers to rendered code HTML + * + * @param {string} html The code HTML + * @param {number} first Line number of the first code line + */ +Docker.prototype.addLineNumbers = function(html, first) { + var lines = html.split('\n'); + + lines = lines.map(function(line, i) { + var n = first + i; + return ' ' + line; + }); + + return lines.join('\n'); +}; + + +/** + * ## Docker.prototype.renderCodeFile + * + * Given an array of sections, render them all out to a nice HTML file + * + * @param {Array} sections Array of sections containing parsed data + * @param {Object} language The language data for the file in question + * @param {string} filename Name of the file being processed + * @param {function} cb Callback function to fire when we're done + */ +Docker.prototype.renderCodeFile = function(sections, language, filename, cb) { + var self = this; + + var headings = { ids: {}, list: [] }; + + sections.forEach(function(section, i) { + // Add anchors to all headings in all sections + section.docHtml = self.addAnchors(section.docHtml, i, headings); + + // Add line numbers of we need them + if (self.options.lineNums) { + section.codeHtml = self.addLineNumbers(section.codeHtml, section.firstCodeLine); + } + }); + + var content = this.renderTemplate('code', { + title: path.basename(filename), + sections: sections, + language: language.language + }); + + this.makeOutputFile(filename, content, headings, cb); +}; + + +/** + * ## Docker.prototype.renderMarkdownFile + * + * Renders the output for a Markdown file into HTML + * + * @param {string} data The markdown file content + * @param {string} filename Name of the file being processed + * @param {function} cb Callback function to fire when we're done + */ +Docker.prototype.renderMarkdownFile = function(data, filename, cb) { + var content = md.render(data); + + var headings = { ids: {}, list: [] }; + + // Add anchors to all headings + content = this.addAnchors(content, 0, headings); + + // Wrap up with necessary classes + content = '
' + content + '
'; + + this.makeOutputFile(filename, content, headings, cb); +}; + + +/** + * ## Docker.prototype.makeOutputFile + * + * Shared code for generating an output file with the given content. + * Renders the given content in a template along with its headings and + * writes it to the output file. + * + * @param {string} filename Path to the input file + * @param {string} content The string content to render into the template + * @param {Object} headings List of headings + ids + * @param {function} cb Callback to call when done + */ +Docker.prototype.makeOutputFile = function(filename, content, headings, cb) { + // Decide which path to store the output on. + var outFile = this.outFile(filename); + + // Calculate the location of the input root relative to the output file. + // This is necessary so we can link to the stylesheet in the output HTML using + // a relative href rather than an absolute one + var outDir = path.dirname(outFile); + var relativeOut = path.resolve(outDir) + .replace(path.resolve(this.options.outDir), '') + .replace(/^[\/\\]/, ''); + var levels = relativeOut == '' ? 0 : relativeOut.split(path.sep).length; + var relDir = repeating('../', levels); + + // Render the html file using our template + var html = this.renderTemplate('tmpl', { + title: path.basename(filename), + relativeDir: relDir, + content: content, + headings: headings, + sidebar: this.options.sidebarState, + filename: filename.replace(this.options.inDir, '').replace(/^[\\\/]/, ''), + js: this.options.js.map(function(f) { return path.basename(f); }), + css: this.options.css.map(function(f) { return path.basename(f); }) + }); + + // Recursively create the output directory, clean out any old version of the + // output file, then save our new file. + this.writeFile(outFile, html, 'Generated: ' + outFile.replace(this.options.outDir, ''), cb); +}; + + +/** + * ## Docker.prototype.copySharedResources + * + * Copies the shared CSS and JS files to the output directories + */ +Docker.prototype.copySharedResources = function() { + var self = this; + self.writeFile( + path.join(self.options.outDir, 'doc-filelist.js'), + 'var tree=' + JSON.stringify(self.tree) + ';', + 'Saved file tree to doc-filelist.js' + ); + + // Generate the CSS file using LESS. First, load the less file. + fs.readFile(path.join(__dirname, '..', 'res', 'style.less'), function(err, file) { + // Now try to grab the colours out of whichever highlight theme was used + var hlpath = require.resolve('highlight.js'); + var cspath = path.resolve(path.dirname(hlpath), '..', 'styles'); + var colours = require('./getColourScheme')(self.options.colourScheme); + + // Now compile the LESS to CSS + less.render(file.toString().replace('COLOURSCHEME', self.options.colourScheme), { + paths: [ cspath ], + globalVars: colours + }, function(err, out) { + // Now we've got the rendered CSS, write it out. + self.writeFile( + path.join(self.options.outDir, 'doc-style.css'), + out.css, + 'Compiled CSS to doc-style.css' + ); + }); + }); + + fs.readFile(path.join(__dirname, '..', 'res', 'script.js'), function(err, file) { + self.writeFile( + path.join(self.options.outDir, 'doc-script.js'), + file, + 'Copied JS to doc-script.js' + ); + }); + + this.options.js.concat(this.options.css).forEach(function(ext) { + var fn = path.basename(ext); + fs.readFile(path.resolve(ext), function(err, file) { + self.writeFile(path.join(self.options.outDir, fn), file, 'Copied ' + fn); + }); + }); +}; + + +/** + * ## Docker.prototype.outFile + * + * Generates the output path for a given input file + * + * @param {string} filename Name of the input file + * @return {string} Name to use for the generated doc file + */ +Docker.prototype.outFile = function(filename) { + return path.normalize(filename.replace(path.resolve(this.options.inDir), this.options.outDir) + '.html'); +}; + + +/** + * ## Docker.prototype.renderTemplate + * + * Renders an EJS template with the given data + * + * @param {string} templateName The name of the template to use + * @param {object} obj Object containing parameters for the template + * @return {string} Rendered output + */ +Docker.prototype.renderTemplate = function(templateName, obj) { + // If we haven't already loaded the template, load it now. + // It's a bit messy to be using readFileSync I know, but this + // is the easiest way for now. + if (!this._templates) this._templates = {}; + if (!this._templates[templateName]) { + var tmplFile = path.join(__dirname, '..', 'res', templateName + '.ejs'); + this._templates[templateName] = ejs.compile(fs.readFileSync(tmplFile).toString()); + } + return this._templates[templateName](obj); +}; + + +/** + * ## Docker.prototype.writeFile + * + * Saves a file, making sure the directory already exists and overwriting any existing file + * + * @param {string} filename The name of the file to save + * @param {string} fileContent Content to save to the file + * @param {string} doneLog String to console.log when done + * @param {function} doneCallback Callback to fire when done + */ +Docker.prototype.writeFile = function(filename, fileContent, doneLog, doneCallback) { + mkdirp(path.dirname(filename), function() { + fs.writeFile(filename, fileContent, function() { + if (doneLog) console.log(doneLog); + if (doneCallback) doneCallback(); + }); + }); +}; diff --git a/node_modules/docker/src/getColourScheme.js b/node_modules/docker/src/getColourScheme.js new file mode 100644 index 000000000..6e1ebadcf --- /dev/null +++ b/node_modules/docker/src/getColourScheme.js @@ -0,0 +1,64 @@ +// # getColourScheme.js +// +// This is a helper to grab the colours out of a given highlight.js theme. +// It's a bit messy, but oh well. + + +// Require all node modules +var path = require('path'); +var css = require('css'); +var fs = require('fs'); + +// Figure out where the colour schemes are stored +var hlpath = require.resolve('highlight.js'); +var cspath = path.resolve(path.dirname(hlpath), '..', 'styles'); + + +/** + * ## flattenRules + * + * Flattens out all the rules in a CSS file so we can easily grab + * rules for a particular selector. + * + * @param {Array} rules Array of rules parsed by **css** + * @return {Object} Selctor -> property/value list + */ +function flattenRules(rules) { + var out = {}; + + rules.forEach(function(rule) { + // Ignore anything that doesn't look like a CSS rule + if (rule.type !== 'rule') return; + rule.selectors.forEach(function(sel) { + if (!out[sel]) out[sel] = {}; + + rule.declarations.forEach(function(decl) { + out[sel][decl.property] = decl.value; + }); + }); + }); + + return out; +} + +module.exports = function(cs) { + // Load and parse the colour scheme file + var file = path.join(cspath, cs + '.css'); + var ast = css.parse(fs.readFileSync(file).toString()); + + // Flatten out all the rules so we can grab individual properties by selector + var rules = flattenRules(ast.stylesheet.rules); + + var base = rules['.hljs']; + + var fg = base.color || 'black'; + var bg = base.background || '#fff'; + + var comment = rules['.hljs-comment'] || {}; + var commentColour = comment.color || '#888'; + + var number = rules['.hljs-number'] || rules['.javascript .hljs-number'] || {}; + var numberCol = number.color || '#261a3b'; + + return { fg: fg, bg: bg, comment: commentColour, link: numberCol }; +}; diff --git a/node_modules/docker/src/languages.js b/node_modules/docker/src/languages.js new file mode 100644 index 000000000..5b831b279 --- /dev/null +++ b/node_modules/docker/src/languages.js @@ -0,0 +1,164 @@ +// # Languages +// +// All the languages Docker can parse are in here. +// A language can have the following properties: +// +// * `extensions`: All possible file extensions for the language +// * `executables`: Executables for the language that might be in a shebang +// * `comment`: Delimiter for single-line comments +// * `multiLine`: Start and end delimiters for multi-line comments +// * `commentsIgnore`: Regex for comments that shouldn't be interpreted as descriptive +// * `jsDoc`: whether to try and extract jsDoc-style comment data +// * `literals`: Quoted strings are ignored when looking for comment delimiters. Any extra literals go here +// * `highlightLanguage`: override for language to use with highlight.js + +var langs = module.exports = { + javascript: { + extensions: [ 'js' ], + executables: [ 'node' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], commentsIgnore: /^\s*\/\/=/, jsDoc: true, + literals: [ + [ /\/(?![\*\/])((?:[^\\\/]|(?:\\\\)*?\\[^\\])*?)\//g, '/./' ] + ] + }, + coffeescript: { + extensions: [ 'coffee' ], + names: [ 'cakefile' ], + executables: [ 'coffee' ], + comment: '#', multiLine: [ /^\s*#{3}\s*$/m, /^\s*#{3}\s*$/m ], jsDoc: true, + literals: [ + [ /\/(?![\*\/])((?:[^\\\/]|(?:\\\\)*?\\[^\\])*?)\//g, '/./' ] + ] + }, + livescript: { + extensions: [ 'ls' ], + executables: [ 'lsc' ], + comment: '#', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + ruby: { + extensions: [ 'rb', 'rbw', 'rake', 'gemspec' ], + executables: [ 'ruby' ], + names: [ 'rakefile' ], + comment: '#', multiLine: [ /\=begin/, /\=end/ ] + }, + python: { + extensions: [ 'py' ], + executables: [ 'python' ], + comment: '#' // Python has no block commments :-( + }, + perl: { + extensions: [ 'pl', 'pm' ], + executables: [ 'perl' ], + comment: '#' // Nor (really) does perl. + }, + c: { + extensions: [ 'c', 'h' ], + executables: [ 'gcc' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + cpp: { + extensions: [ 'cc', 'cpp' ], + executables: [ 'g++' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + vbnet: { + extensions: [ 'vb', 'vbs', 'bas' ], + comment: "'" // No multiline + }, + 'aspx-vb': { + extensions: [ 'asp', 'aspx', 'asax', 'ascx', 'ashx', 'asmx', 'axd' ], + comment: "'" // No multiline + }, + csharp: { + extensions: [ 'cs' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + 'aspx-cs': { + extensions: [ 'aspx', 'asax', 'ascx', 'ashx', 'asmx', 'axd' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + java: { + extensions: [ 'java' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + php: { + extensions: [ 'php', 'php3', 'php4', 'php5' ], + executables: [ 'php' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + actionscript: { + extensions: [ 'as' ], + comment: '//', multiLine: [ /\/\*/, /\*\// ] + }, + sh: { + extensions: [ 'sh', 'kst', 'bash' ], + names: [ '.bashrc', 'bashrc' ], + executables: [ 'bash', 'sh', 'zsh' ], + comment: '#' + }, + yaml: { + extensions: [ 'yaml', 'yml' ], + comment: '#' + }, + markdown: { + extensions: [ 'md', 'mkd', 'markdown' ], + type: 'markdown' + }, + // sass: { + // extensions: [ 'sass' ], + // comment: '//' //, multiLine: [ /\/\*/, /\*\// ] + // }, + scss: { + extensions: [ 'scss' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + makefile: { + names: [ 'makefile' ], + comment: '#' + }, + apache: { + names: [ '.htaccess', 'apache.conf', 'apache2.conf' ], + comment: '#' + }, + jade: { + extensions: [ 'jade' ], + comment: '//-?', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + groovy: { + extensions: [ 'groovy' ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ], jsDoc: true + }, + gsp: { + extensions: [ 'gsp' ], + //comment: '//', gsp only supports multiline comments. + multiLine: [ /<%--/, /--%>/ ], + highlightLanguage: 'html' + }, + stylus: { + extensions: [ 'styl' ], + comment: '//', multiLine: [ /\/\*/, /\*\// ] + }, + css: { + extensions: [ 'css' ], + multiLine: [ /\/\*/, /\*\// ], // for when we detect multi-line comments + commentStart: '/*', commentEnd: '*/' // for when we add multi-line comments + }, + less: { + extensions: [ 'less' ], + comment: '//', multiLine: [ /\/\*/, /\*\// ] + }, + html: { + extensions: [ 'html', 'htm' ], + multiLine: [ // ], + commentStart: '' + }, + json: { + extensions: [ 'json' ], + names: [ '.eslintrc', '.jshintrc' /* various other .rc's */ ], + comment: '//', multiLine: [ /\/\*\*?/, /\*\// ] + } +}; + +Object.keys(langs).forEach(function(l) { + langs[l].language = l; +}); diff --git a/node_modules/dox/.gitmodules b/node_modules/dox/.gitmodules new file mode 100644 index 000000000..34ccd71bc --- /dev/null +++ b/node_modules/dox/.gitmodules @@ -0,0 +1,6 @@ +[submodule "support/should"] + path = support/should + url = git://github.com/visionmedia/should.js.git +[submodule "support/expresso"] + path = support/expresso + url = git://github.com/visionmedia/expresso.git diff --git a/node_modules/dox/.jscsrc b/node_modules/dox/.jscsrc new file mode 100644 index 000000000..bba7a8a33 --- /dev/null +++ b/node_modules/dox/.jscsrc @@ -0,0 +1,84 @@ +{ + "requireCurlyBraces": [ + "for", + "while", + "do", + "try", + "catch" + ], + "requireSpaceAfterKeywords": [ + "if", + "else", + "for", + "while", + "do", + "switch", + "return", + "try", + "catch" + ], + "requireSpacesInFunctionExpression": { + "beforeOpeningRoundBrace": true, + "beforeOpeningCurlyBrace": true + }, + "requireCommaBeforeLineBreak": false, + "requireOperatorBeforeLineBreak": [ + "?", + "+", + "-", + "/", + "*", + "=", + "==", + "===", + "!=", + "!==", + ">", + ">=", + "<", + "<=" + ], + "disallowLeftStickedOperators": [ + "?", + "+", + + "/", + "*", + "=", + "==", + "===", + "!=", + "!==", + ">", + ">=", + "<", + "<=" + ], + "disallowRightStickedOperators": [ + "?", + "+", + "/", + "*", + ":", + "=", + "==", + "===", + "!=", + "!==", + ">", + ">=", + "<", + "<=" + ], + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "validateIndentation": "\t", + "disallowMixedSpacesAndTabs": "smart", + "disallowTrailingWhitespace": true, + "requireLineFeedAtFileEnd": true, + "safeContextKeyword": [ "self" ], + "requireDotNotation": true, + "disallowYodaConditions": true, + "validateJSDoc": false, + "excludeFiles": ["node_modules/**", "vendor/**"] +} \ No newline at end of file diff --git a/node_modules/dox/.jshintrc b/node_modules/dox/.jshintrc new file mode 100644 index 000000000..c06ea9b48 --- /dev/null +++ b/node_modules/dox/.jshintrc @@ -0,0 +1,34 @@ +{ + "asi": false, + "bitwise": false, + "boss": true, + "browser": true, + "camelcase": false, + "curly": false, + "eqeqeq": false, + "esnext": true, + "forin": false, + "immed": true, + "indent": false, + "jquery": true, + "latedef": false, + "loopfunc": true, + "laxbreak": true, + "laxcomma": true, + "newcap": false, + "noarg": true, + "node": true, + "noempty": false, + "proto": true, + "quotmark": false, + "regexp": true, + "smarttabs": true, + "strict": false, + "supernew": true, + "trailing": true, + "undef": true, + "unused": true, + "globals": { + + } +} diff --git a/node_modules/dox/.npmignore b/node_modules/dox/.npmignore new file mode 100644 index 000000000..def85caea --- /dev/null +++ b/node_modules/dox/.npmignore @@ -0,0 +1,4 @@ +node_modules +docs +support +test diff --git a/node_modules/dox/.settings/launch.json b/node_modules/dox/.settings/launch.json new file mode 100644 index 000000000..c3be66674 --- /dev/null +++ b/node_modules/dox/.settings/launch.json @@ -0,0 +1,33 @@ +{ + "version": "0.1.0", + // List of configurations. Add new configurations or edit existing ones. + // ONLY "node" and "mono" are supported, change "type" to switch. + "configurations": [ + { + // Name of configuration; appears in the launch configuration drop down menu. + "name": "Run Tests", + // Type of configuration. Possible values: "node", "mono". + "type": "node", + // Workspace relative or absolute path to the program. + "program": "/usr/local/bin/_mocha", + // Automatically stop program after launch. + "stopOnEntry": false, + // Command line arguments passed to the program. + "args": ["--ui exports", "--reporter dot", "test/*.test.js"], + // Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace. + "cwd": ".", + // Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH. + "runtimeExecutable": null, + // Environment variables passed to the program. + "env": { } + }, + { + "name": "Attach", + "type": "node", + // TCP/IP address. Default is "localhost". + "address": "localhost", + // Port to attach to. + "port": 5858 + } + ] +} diff --git a/node_modules/dox/.travis.yml b/node_modules/dox/.travis.yml new file mode 100644 index 000000000..b135a9c26 --- /dev/null +++ b/node_modules/dox/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "0.10" + - "0.11" + - "0.12" + - iojs diff --git a/node_modules/dox/History.md b/node_modules/dox/History.md new file mode 100644 index 000000000..fe3c66e66 --- /dev/null +++ b/node_modules/dox/History.md @@ -0,0 +1,202 @@ +0.8.1 / 2016-03-29 +================== + +* Fix: Dox will no longer falsely enter or exit string blocks when encountering an escaped quote or double-quote +* Deps: commander@2.9.0 +* Deps: marked@0.3.5 + +0.8.0 / 2015-05-27 +================== + +* Fix: Tags with whitespace between the tag start and the previous line ending are now parsed correctly. +* Deps: commander@2.8.1 +* Deps: jsdoctypeparser@1.2.0 + - Better compatibility for type declarations, but may result in changes to output with invalid types. + +0.7.1 / 2015-04-03 +================== + +Context parsing has been re-factored into an array of functions that are iterated over until a match is found. This array is exposed as `dox.contextPatternMatchers`, allowing for extension with new contexts without needing to edit the dox source. + +* Fix: ES6 classes extended from sub-properties (such as Backbone.View) are now properly matched + +0.7.0 / 2015-03-24 +================== + +* Add context parsing for some ES6 syntax: + - classes + - class constructors + - class methods + - assignments via `let` or `const` +* Add support for @description tag +* Add context match for returned closure +* Add: Tags without descriptions now have an `html` property containing a markdown parse of the tag's contents +* Fix: more agnostic to code style when parsing contexts (eg, no longer ignores functions without spaces between function name and parenthesis) +* Fix: No longer incorrectly tries to parse strings inside comments, causing large chunks of a file to be ignored. +* Fix: No longer parses double slash in a string literal as being a comment start. +* Deps: commander@2.7.1 + +0.6.1 / 2014-11-27 +================== + +* Tag descriptions now contain markdown and obey raw option + +0.6.0 / 2014-11-27 +================== + +* Add complex jsdoc annotations +* Add support for more tags +* Add typesDescription field +* Fix "skipPrefixes incorrectly assumes option.raw=false" +* Fix "White spaces in the tag type string break the parsing of tags" + +0.5.3 / 2014-10-06 +================== + +* Add `--skipSingleStar` option to ignore `/* ... */` comments +* Merge #106: make the other context regex like the general method one + +0.5.2 / 2014-10-05 +================== + +* Support event tags, add `isEvent` parameter to comment object +* Removed obsolete make rules + +0.5.1 / 2014-09-07 +================== + +* Fixed: `*/*` breaks parsing + +0.5.0 / 2014-09-04 +================== + +* Marked options can be set via `dox.setMarkedOptions` +* Comment blocks include `line` and `codeStart` to mark the first line of the comment block and the first line of the code context. +* Ignores jshint, jslint and eslint directives. This can be overridden or added to via the `skipPrefixes` option and the `--skipPrefixes` command line flag, which takes a comma separated list of prefixes. +* The code field trims extra indentation based on the indentation of the first line of code. +* Set the `isConstructor` property when a `@constructor` tag is present and change `ctx.type` to constructor. +* Recognizes the following code contexts: + - `Foo.prototype.bar;` (property) + - `Foo.prototype = {` (prototype) + - `foo: function () {` (method) + - `foo: bar` (property) + - `get foo () {` (property) + - `set foo () {` (property) +* When a comment is present to identify the definition of an object literal, comments for the object's members will include a `ctx.constructor` property identifying the parent object. +* Fixed: Multi-line comments with no space following the star are parsed correctly. + - Example: `/*comment*/` +* Fixed: A code context of `Foo.prototype.bar = null;` is parsed correctly. +* `@param` tags include an `optional` attribute +* `@returns` is recognized as an alias for `@return` +* Support comments without descriptions (ex: `/** @name Foo **/`) +* Fixed: Crash with the `--api` flag when no headers are generated. +* Fixed: `--api` output includes aliases. + +0.4.6 / 2014-07-09 +================== + + * do not wrap @example contents with markdown + +0.4.5 / 2014-07-09 +================== + + * use marked for markdown rendering + * multiline tags support (@example) + * support for @template, @property, @define, @public, @private, @protected, + @lends, @extends, @implements, @enum, @typedef + +0.4.4 / 2013-07-28 +================== + + * add support for variable names containing "$". fix #102 + +0.4.3 / 2013-03-18 +================== + + * fix dox(1) --version. Closes #91 + * fix ctx.string on properties of a prototype + * add support tab-indented comments + +0.4.2 / 2013-01-18 +================== + + * Prevent error when using --api & comments have no example code. + +0.4.1 / 2012-11-11 +================== + + * change # to . in --api + +0.4.0 / 2012-11-09 +================== + + * add TOC to --api. Closes #72 + * add gfm code blocks. Closes #71 + * remove implicit titles. Closes #70 + +0.3.3 / 2012-10-16 +================== + + * fix --api .receiver + +0.3.2 / 2012-10-01 +================== + + * add dox --api + +0.3.1 / 2012-04-25 +================== + + * Fixed annoying title bug + +0.3.0 / 2012-03-27 +================== + + * Added __@memberOf__ [olivernn] + * Added __@arguments__ [olivernn] + * Added __@borrows__ [olivernn] + +0.2.0 / 2012-02-23 +================== + + * Added `-r, --raw` support. Closes #48 + +0.1.3 / 2011-12-08 +================== + + * Added: allow arbitrary tags [logicalparadox] + * Fixed function whitespace [TooTallNate] + +0.1.2 / 2011-10-22 +================== + + * remove html escaping for now + +0.1.1 / 2011-10-10 +================== + + * Fixed: colons in comment lines not intended as headers [Evan Owen] + +0.0.5 / 2011-03-02 +================== + + * Adding "main" to package descriptor since "directories" are no longer supported. + +0.0.4 / 2011-01-20 +================== + + * Added `--intro` support for including an intro file written in markdown [Alex Young] + +0.0.3 / 2010-07-15 +================== + + * Linked h2s + +0.0.2 / 2010-07-15 +================== + + * Collapsing files, click to open. Closes #19 + * Fixed ribbon position instead of absolute + * Removed menu + * Removed node-discount dependency, using markdown-js + diff --git a/node_modules/dox/Makefile b/node_modules/dox/Makefile new file mode 100644 index 000000000..bf14f6792 --- /dev/null +++ b/node_modules/dox/Makefile @@ -0,0 +1,11 @@ + +TESTS = test/*.test.js +REPORTER = dot + +test: + @NODE_ENV=test ./node_modules/.bin/mocha \ + --ui exports \ + --reporter $(REPORTER) \ + $(TESTS) + +.PHONY: test docs diff --git a/node_modules/dox/Readme.md b/node_modules/dox/Readme.md new file mode 100644 index 000000000..9dfedb2c3 --- /dev/null +++ b/node_modules/dox/Readme.md @@ -0,0 +1,476 @@ +# Dox +[![Build Status](https://travis-ci.org/tj/dox.svg?branch=master)](https://travis-ci.org/tj/dox) + + Dox is a JavaScript documentation generator written with [node](http://nodejs.org). Dox no longer generates an opinionated structure or style for your docs, it simply gives you a JSON representation, allowing you to use _markdown_ and _JSDoc_-style tags. + +## Installation + +Install from npm: + + $ npm install -g dox + +## Usage Examples + +`dox(1)` operates over stdio: + + $ dox < utils.js + ...JSON... + + to inspect the generated data you can use the `--debug` flag, which is easier to read than the JSON output: + + $ dox --debug < utils.js + +utils.js: + +```js +/** + * Escape the given `html`. + * + * @example + * utils.escape('') + * // => '<script></script>' + * + * @param {String} html string to be escaped + * @return {String} escaped html + * @api public + */ + +exports.escape = function(html){ + return String(html) + .replace(/&(?!\w+;)/g, '&') + .replace(//g, '>'); +}; +``` + +output: + +```json +[ + { + "tags": [ + { + "type": "example", + "string": " utils.escape('')\n // => '<script></script>'", + "html": "
utils.escape('<script></script>')\n// => '&lt;script&gt;&lt;/script&gt;'\n
" + }, + { + "type": "param", + "string": "{String} html string to be escaped", + "types": [ + "String" + ], + "name": "html", + "description": "string to be escaped" + }, + { + "type": "return", + "string": "{String} escaped html", + "types": [ + "String" + ], + "description": "escaped html" + }, + { + "type": "api", + "string": "public", + "visibility": "public" + } + ], + "description": { + "full": "

Escape the given html.

", + "summary": "

Escape the given html.

", + "body": "" + }, + "isPrivate": false, + "ignore": false, + "code": "exports.escape = function(html){\n return String(html)\n .replace(/&(?!\\w+;)/g, '&')\n .replace(//g, '>');\n};", + "ctx": { + "type": "method", + "receiver": "exports", + "name": "escape", + "string": "exports.escape()" + } + } +] +``` + +This output can then be passed to a template for rendering. Look below at the "Properties" section for details. + +## Usage + +``` + +Usage: dox [options] + + Options: + + -h, --help output usage information + -V, --version output the version number + -r, --raw output "raw" comments, leaving the markdown intact + -a, --api output markdown readme documentation + -s, --skipPrefixes [prefixes] skip comments prefixed with these prefixes, separated by commas + -d, --debug output parsed comments for debugging + -S, --skipSingleStar set to false to ignore `/* ... */` comments + + Examples: + + # stdin + $ dox > myfile.json + + # operates over stdio + $ dox < myfile.js > myfile.json + +``` + +### Programmatic Usage + +``` javascript + +var dox = require('dox'), + code = "..."; + +var obj = dox.parseComments(code); + +// [{ tags:[ ... ], description, ... }, { ... }, ...] + +``` + +## Properties + + A "comment" is comprised of the following detailed properties: + + - tags + - description + - isPrivate + - isEvent + - isConstructor + - line + - ignore + - code + - ctx + +### Description + + A dox description is comprised of three parts, the "full" description, + the "summary", and the "body". The following example has only a "summary", + as it consists of a single paragraph only, therefore the "full" property has + only this value as well. + +```js +/** + * Output the given `str` to _stdout_. + */ + +exports.write = function(str) { + process.stdout.write(str); +}; +``` +yields: + +```js +description: + { full: '

Output the given str to stdout.

', + summary: '

Output the given str to stdout.

', + body: '' }, +``` + + Large descriptions might look something like the following, where the "summary" is still the first paragraph, the remaining description becomes the "body". Keep in mind this _is_ markdown, so you can indent code, use lists, links, etc. Dox also augments markdown, allowing "Some Title:\n" to form a header. + +```js +/** + * Output the given `str` to _stdout_ + * or the stream specified by `options`. + * + * Options: + * + * - `stream` defaulting to _stdout_ + * + * Examples: + * + * mymodule.write('foo') + * mymodule.write('foo', { stream: process.stderr }) + * + */ + +exports.write = function(str, options) { + options = options || {}; + (options.stream || process.stdout).write(str); +}; +``` + +yields: + +```js +description: + { full: '

Output the given str to stdout
or the stream specified by options.

\n\n

Options

\n\n
    \n
  • stream defaulting to stdout
  • \n
\n\n

Examples

\n\n
mymodule.write(\'foo\')\nmymodule.write(\'foo\', { stream: process.stderr })\n
', + summary: '

Output the given str to stdout
or the stream specified by options.

', + body: '

Options

\n\n
    \n
  • stream defaulting to stdout
  • \n
\n\n

Examples

\n\n
mymodule.write(\'foo\')\nmymodule.write(\'foo\', { stream: process.stderr })\n
' } +``` + +### Tags + + Dox also supports JSdoc-style tags. Currently only __@api__ is special-cased, providing the `comment.isPrivate` boolean so you may omit "private" utilities etc. + +```js + +/** + * Output the given `str` to _stdout_ + * or the stream specified by `options`. + * + * @param {String} str + * @param {{stream: Writable}} options + * @return {Object} exports for chaining + */ + +exports.write = function(str, options) { + options = options || {}; + (options.stream || process.stdout).write(str); + return this; +}; +``` + +yields: + +```js +tags: + [ { type: 'param', + string: '{String} str', + types: [ 'String' ], + name: 'str', + description: '' }, + { type: 'param', + string: '{{stream: Writable}} options', + types: [ { stream: ['Writable'] } ], + name: 'options', + description: '' }, + { type: 'return', + string: '{Object} exports for chaining', + types: [ 'Object' ], + description: 'exports for chaining' }, + { type: 'api', + visibility: 'public' } ] +``` + +#### Complex jsdoc tags + +dox supports all jsdoc type strings specified in the [jsdoc documentation](http://usejsdoc.org/tags-type.html). You can +specify complex object types including optional flag `=`, nullable `?`, non-nullable `!` and variable arguments `...`. + +Additionally you can use `typesDescription` which contains formatted HTML for displaying complex types. + +```js + +/** + * Generates a person information string based on input. + * + * @param {string | {name: string, age: number | date}} name Name or person object + * @param {{separator: string} =} options An options object + * @return {string} The constructed information string + */ + +exports.generatePersonInfo = function(name, options) { + var str = ''; + var separator = options && options.separator ? options.separator : ' '; + + if(typeof name === 'object') { + str = [name.name, '(', name.age, ')'].join(separator); + } else { + str = name; + } +}; +``` + +yields: + +```js +tags: +[ + { + "tags": [ + { + "type": "param", + "string": "{string | {name: string, age: number | date}} name Name or person object", + "name": "name", + "description": "Name or person object", + "types": [ + "string", + { + "name": [ + "string" + ], + "age": [ + "number", + "date" + ] + } + ], + "typesDescription": "string|{ name: string, age: number|date }", + "optional": false, + "nullable": false, + "nonNullable": false, + "variable": false + }, + { + "type": "param", + "string": "{{separator: string} =} options An options object", + "name": "options", + "description": "An options object", + "types": [ + { + "separator": [ + "string" + ] + } + ], + "typesDescription": "{ separator: string }|undefined", + "optional": true, + "nullable": false, + "nonNullable": false, + "variable": false + }, + { + "type": "return", + "string": "{string} The constructed information string", + "types": [ + "string" + ], + "typesDescription": "string", + "optional": false, + "nullable": false, + "nonNullable": false, + "variable": false, + "description": "The constructed information string" + } + ] +``` + +### Code + + The `.code` property is the code following the comment block, in our previous examples: + +```js +exports.write = function(str, options) { + options = options || {}; + (options.stream || process.stdout).write(str); + return this; +}; +``` + +### Ctx + + The `.ctx` object indicates the context of the code block, is it a method, a function, a variable etc. Below are some examples: + +```js +exports.write = function(str, options) { +}; +``` + +yields: + +```js +ctx: + { type: 'method', + receiver: 'exports', + name: 'write', + string: 'exports.write()' } } +``` + +```js +var foo = 'bar'; +``` + +yields: + +```js +ctx: + { type: 'declaration', + name: 'foo', + value: '\'bar\'', + string: 'foo' } +``` + +```js +function User() { + +} +``` + +yields: + +```js +ctx: + { type: 'function', + name: 'User', + string: 'User()' } } +``` + +### Extending Context Matching + +Context matching in dox is done by performing pattern matching against the code following a +comment block. `dox.contextPatternMatchers` is an array of all pattern matching functions, +which dox will iterate over until one of them returns a result. If none return a result, +then the comment block does not receive a `ctx` value. + +This array is exposed to allow for extension of unsupported context patterns by adding more +functions. Each function is passed the code following the comment block and (if detected) +the parent context if the block. + +```js +dox.contextPatternMatchers.push(function (str, parentContext) { + // return a context object if found + // return false otherwise +}); +``` + +### Ignore + +Comments and their associated bodies of code may be flagged with "!" to be considered worth ignoring, these are typically things like file comments containing copyright etc, however you of course can output them in your templates if you want. + +``` +/** + * Not ignored. + */ +``` + +vs + +``` +/*! + * Ignored. + */ +``` + +You may use `-S`, `--skipSingleStar` or `{skipSingleStar: true}` to ignore `/* ... */` comments. + +### Running tests + + Install dev dependencies and execute `make test`: + + $ npm install -d + $ make test + +## License + +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> + +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. diff --git a/node_modules/dox/bin/dox b/node_modules/dox/bin/dox new file mode 100755 index 000000000..91b9920e6 --- /dev/null +++ b/node_modules/dox/bin/dox @@ -0,0 +1,53 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander') + , pkg = require('../package') + , util = require('util') + , dox = require('..'); + +// options + +program + .version(pkg.version) + .option('-r, --raw', 'output "raw" comments, leaving the markdown intact') + .option('-a, --api', 'output markdown readme documentation') + .option('-s, --skipPrefixes [prefixes]', 'skip comments prefixed with these prefixes, separated by commas') + .option('-d, --debug', 'output parsed comments for debugging') + .option('-S, --skipSingleStar', 'set to false to ignore `/* ... */` comments'); + +// examples + +program.on('--help', function(){ + console.log(' Examples:'); + console.log(''); + console.log(' # stdin'); + console.log(' $ dox > myfile.json'); + console.log(''); + console.log(' # operates over stdio'); + console.log(' $ dox < myfile.js > myfile.json'); + console.log(''); +}); + +// parse argv + +program.parse(process.argv); + +// process stdin + +var buf = ''; +process.stdin.setEncoding('utf8'); +process.stdin.on('data', function(chunk){ buf += chunk; }); +process.stdin.on('end', function(){ + var obj = dox.parseComments(buf, { raw: program.raw || program.api, skipPrefixes: program.skipPrefix && program.skipPrefix.split(','), skipSingleStar: !!program.skipSingleStar }); + if (program.debug) { + process.stdout.write(util.inspect(obj, false, Infinity, true) + '\n'); + } else if (program.api) { + process.stdout.write(dox.api(obj)); + } else { + process.stdout.write(JSON.stringify(obj, null, 2)); + } +}).resume(); diff --git a/node_modules/dox/index.js b/node_modules/dox/index.js new file mode 100644 index 000000000..1ff173ac3 --- /dev/null +++ b/node_modules/dox/index.js @@ -0,0 +1,2 @@ + +module.exports = require('./lib/dox'); \ No newline at end of file diff --git a/node_modules/dox/lib/api.js b/node_modules/dox/lib/api.js new file mode 100644 index 000000000..fe6d2e4fb --- /dev/null +++ b/node_modules/dox/lib/api.js @@ -0,0 +1,80 @@ + +module.exports = function(comments){ + var buf = []; + + comments.forEach(function(comment){ + if (comment.isPrivate) return; + if (comment.ignore) return; + var ctx = comment.ctx; + var desc = comment.description; + if (!ctx) return; + if (~desc.full.indexOf('Module dependencies')) return; + if (!ctx.string.indexOf('module.exports')) return; + buf.push('### ' + context(comment)); + buf.push(''); + buf.push(desc.full.trim().replace(/^/gm, ' ')); + buf.push(''); + }); + + buf = buf + .join('\n') + .replace(/^ *#/gm, '') + + var code = buf.match(/^( {4}[^\n]+\n*)+/gm) || []; + + code.forEach(function(block){ + var code = block.replace(/^ {4}/gm, ''); + buf = buf.replace(block, '```js\n' + code.trimRight() + '\n```\n\n'); + }); + + return toc(buf) + '\n\n' + buf; +}; + +function toc(str) { + return headings(str).map(function(h){ + var clean = h.title.replace(/\(.*?\)/, '()'); + return ' - [' + clean + '](#' + slug(h.title) + ')'; + }).join('\n'); +} + +function slug(str) { + return str.replace(/\W+/g, '').toLowerCase(); +} + +function headings(str) { + return (str.match(/^#+ *([^\n]+)/gm) || []).map(function(str){ + str = str.replace(/^(#+) */, ''); + return { + title: str, + level: RegExp.$1.length + } + }); +} + +function context(comment) { + var ctx = comment.ctx; + var tags = comment.tags; + + var alias = tags.map(function(tag) { + return tag.type === 'alias' && tag.string + }).filter(Boolean); + + switch (ctx.type) { + case 'function': + var name = alias.pop() || ctx.name; + return name + '(' + params(tags) + ')' + case 'method': + var name = alias.pop() || (ctx.cons || ctx.receiver) + '.' + ctx.name; + return name + '(' + params(tags) + ')'; + default: + return alias.pop() || ctx.string; + } +} + +function params(tags) { + return tags.filter(function(tag){ + return tag.type == 'param'; + }).map(function(param){ + return param.name + ':' + param.types.join('|'); + }).join(', '); +} diff --git a/node_modules/dox/lib/dox.js b/node_modules/dox/lib/dox.js new file mode 100644 index 000000000..4b731f4fd --- /dev/null +++ b/node_modules/dox/lib/dox.js @@ -0,0 +1,734 @@ +/*! + * Module dependencies. + */ + +var markdown = require('marked'); + +var renderer = new markdown.Renderer(); + +renderer.heading = function (text, level) { + return '' + text + '\n'; +}; + +renderer.paragraph = function (text) { + return '

' + text + '

'; +}; + +renderer.br = function () { + return '
'; +}; + +var markedOptions = { + renderer: renderer +, gfm: true +, tables: true +, breaks: true +, pedantic: false +, sanitize: false +, smartLists: true +, smartypants: false +}; + +markdown.setOptions(markedOptions); + +/** + * Expose api. + */ + +exports.api = require('./api'); + +/** + * Parse comments in the given string of `js`. + * + * @param {String} js + * @param {Object} options + * @return {Array} + * @see exports.parseComment + * @api public + */ + +exports.parseComments = function(js, options){ + options = options || {}; + js = js.replace(/\r\n/gm, '\n'); + + var comments = [] + , skipSingleStar = options.skipSingleStar + , comment + , buf = '' + , ignore + , withinMultiline = false + , withinSingle = false + , withinString = false + , code + , linterPrefixes = options.skipPrefixes || ['jslint', 'jshint', 'eshint'] + , skipPattern = new RegExp('^' + (options.raw ? '' : '

') + '('+ linterPrefixes.join('|') + ')') + , lineNum = 1 + , lineNumStarting = 1 + , parentContext + , withinEscapeChar + , currentStringQuoteChar; + + + for (var i = 0, len = js.length; i < len; ++i) { + withinEscapeChar = withinString && !withinEscapeChar && js[i - 1] == '\\'; + + // start comment + if (!withinMultiline && !withinSingle && !withinString && + '/' == js[i] && '*' == js[i+1] && (!skipSingleStar || js[i+2] == '*')) { + lineNumStarting = lineNum; + // code following the last comment + if (buf.trim().length) { + comment = comments[comments.length - 1]; + if(comment) { + // Adjust codeStart for any vertical space between comment and code + comment.codeStart += buf.match(/^(\s*)/)[0].split('\n').length - 1; + comment.code = code = exports.trimIndentation(buf).trim(); + comment.ctx = exports.parseCodeContext(code, parentContext); + + if (comment.isConstructor && comment.ctx){ + comment.ctx.type = "constructor"; + } + + // starting a new namespace + if (comment.ctx && (comment.ctx.type === 'prototype' || comment.ctx.type === 'class')){ + parentContext = comment.ctx; + } + // reasons to clear the namespace + // new property/method in a different constructor + else if (!parentContext || !comment.ctx || !comment.ctx.constructor || !parentContext.constructor || parentContext.constructor !== comment.ctx.constructor){ + parentContext = null; + } + } + buf = ''; + } + i += 2; + withinMultiline = true; + ignore = '!' == js[i]; + + // if the current character isn't whitespace and isn't an ignored comment, + // back up one character so we don't clip the contents + if (' ' !== js[i] && '\n' !== js[i] && '\t' !== js[i] && '!' !== js[i]) i--; + + // end comment + } else if (withinMultiline && !withinSingle && '*' == js[i] && '/' == js[i+1]) { + i += 2; + buf = buf.replace(/^[ \t]*\* ?/gm, ''); + comment = exports.parseComment(buf, options); + comment.ignore = ignore; + comment.line = lineNumStarting; + comment.codeStart = lineNum + 1; + if (!comment.description.full.match(skipPattern)) { + comments.push(comment); + } + withinMultiline = ignore = false; + buf = ''; + } else if (!withinSingle && !withinMultiline && !withinString && '/' == js[i] && '/' == js[i+1]) { + withinSingle = true; + buf += js[i]; + } else if (withinSingle && !withinMultiline && '\n' == js[i]) { + withinSingle = false; + buf += js[i]; + } else if (!withinSingle && !withinMultiline && !withinEscapeChar && ('\'' == js[i] || '"' == js[i])) { + if(withinString) { + if(js[i] == currentStringQuoteChar) { + withinString = false; + } + } else { + withinString = true; + currentStringQuoteChar = js[i]; + } + + buf += js[i]; + } else { + buf += js[i]; + } + + if('\n' == js[i]) { + lineNum++; + } + + } + + if (comments.length === 0) { + comments.push({ + tags: [], + description: {full: '', summary: '', body: ''}, + isPrivate: false, + isConstructor: false, + line: lineNumStarting + }); + } + + // trailing code + if (buf.trim().length) { + comment = comments[comments.length - 1]; + // Adjust codeStart for any vertical space between comment and code + comment.codeStart += buf.match(/^(\s*)/)[0].split('\n').length - 1; + comment.code = code = exports.trimIndentation(buf).trim(); + comment.ctx = exports.parseCodeContext(code, parentContext); + } + + return comments; +}; + +/** + * Removes excess indentation from string of code. + * + * @param {String} str + * @return {String} + * @api public + */ + +exports.trimIndentation = function (str) { + // Find indentation from first line of code. + var indent = str.match(/(?:^|\n)([ \t]*)[^\s]/); + if (indent) { + // Replace indentation on all lines. + str = str.replace(new RegExp('(^|\n)' + indent[1], 'g'), '$1'); + } + return str; +}; + +/** + * Parse the given comment `str`. + * + * The comment object returned contains the following + * + * - `tags` array of tag objects + * - `description` the first line of the comment + * - `body` lines following the description + * - `content` both the description and the body + * - `isPrivate` true when "@api private" is used + * + * @param {String} str + * @param {Object} options + * @return {Object} + * @see exports.parseTag + * @api public + */ + +exports.parseComment = function(str, options) { + str = str.trim(); + options = options || {}; + + var comment = { tags: [] } + , raw = options.raw + , description = {} + , tags = str.split(/\n\s*@/); + + // A comment has no description + if (tags[0].charAt(0) === '@') { + tags.unshift(''); + } + + // parse comment body + description.full = tags[0]; + description.summary = description.full.split('\n\n')[0]; + description.body = description.full.split('\n\n').slice(1).join('\n\n'); + comment.description = description; + + // parse tags + if (tags.length) { + comment.tags = tags.slice(1).map(exports.parseTag); + comment.isPrivate = comment.tags.some(function(tag){ + return 'private' == tag.visibility; + }); + comment.isConstructor = comment.tags.some(function(tag){ + return 'constructor' == tag.type || 'augments' == tag.type; + }); + comment.isClass = comment.tags.some(function(tag){ + return 'class' == tag.type; + }); + comment.isEvent = comment.tags.some(function(tag){ + return 'event' == tag.type; + }); + + if (!description.full || !description.full.trim()) { + comment.tags.some(function(tag){ + if ('description' == tag.type) { + description.full = tag.full; + description.summary = tag.summary; + description.body = tag.body; + return true; + } + }); + } + } + + // markdown + if (!raw) { + description.full = markdown(description.full); + description.summary = markdown(description.summary); + description.body = markdown(description.body); + comment.tags.forEach(function (tag) { + if (tag.description) tag.description = markdown(tag.description); + else tag.html = markdown(tag.string); + }); + } + + return comment; +}; + +//TODO: Find a smarter way to do this +/** + * Extracts different parts of a tag by splitting string into pieces separated by whitespace. If the white spaces are + * somewhere between curly braces (which is used to indicate param/return type in JSDoc) they will not be used to split + * the string. This allows to specify jsdoc tags without the need to eliminate all white spaces i.e. {number | string} + * + * @param str The tag line as a string that needs to be split into parts + * @returns {Array.} An array of strings containing the parts + */ + +exports.extractTagParts = function(str) { + var level = 0, + extract = '', + split = []; + + str.split('').forEach(function(c) { + if(c.match(/\s/) && level === 0) { + split.push(extract); + extract = ''; + } else { + if(c === '{') { + level++; + } else if (c === '}') { + level--; + } + + extract += c; + } + }); + + split.push(extract); + return split.filter(function(str) { + return str.length > 0; + }); +}; + + +/** + * Parse tag string "@param {Array} name description" etc. + * + * @param {String} + * @return {Object} + * @api public + */ + +exports.parseTag = function(str) { + var tag = {} + , lines = str.split('\n') + , parts = exports.extractTagParts(lines[0]) + , type = tag.type = parts.shift().replace('@', '') + , matchType = new RegExp('^@?' + type + ' *') + , matchTypeStr = /^\{.+\}$/; + + tag.string = str.replace(matchType, ''); + + if (lines.length > 1) { + parts.push(lines.slice(1).join('\n')); + } + + switch (type) { + case 'property': + case 'template': + case 'param': + var typeString = matchTypeStr.test(parts[0]) ? parts.shift() : ""; + tag.name = parts.shift() || ''; + tag.description = parts.join(' '); + exports.parseTagTypes(typeString, tag); + break; + case 'define': + case 'return': + case 'returns': + var typeString = matchTypeStr.test(parts[0]) ? parts.shift() : ""; + exports.parseTagTypes(typeString, tag); + tag.description = parts.join(' '); + break; + case 'see': + if (~str.indexOf('http')) { + tag.title = parts.length > 1 + ? parts.shift() + : ''; + tag.url = parts.join(' '); + } else { + tag.local = parts.join(' '); + } + break; + case 'api': + tag.visibility = parts.shift(); + break; + case 'public': + case 'private': + case 'protected': + tag.visibility = type; + break; + case 'enum': + case 'typedef': + case 'type': + exports.parseTagTypes(parts.shift(), tag); + break; + case 'lends': + case 'memberOf': + tag.parent = parts.shift(); + break; + case 'extends': + case 'implements': + case 'augments': + tag.otherClass = parts.shift(); + break; + case 'borrows': + tag.otherMemberName = parts.join(' ').split(' as ')[0]; + tag.thisMemberName = parts.join(' ').split(' as ')[1]; + break; + case 'throws': + var typeString = matchTypeStr.test(parts[0]) ? parts.shift() : ""; + tag.types = exports.parseTagTypes(typeString); + tag.description = parts.join(' '); + break; + case 'description': + tag.full = parts.join(' ').trim(); + tag.summary = tag.full.split('\n\n')[0]; + tag.body = tag.full.split('\n\n').slice(1).join('\n\n'); + break; + default: + tag.string = parts.join(' ').replace(/\s+$/, ''); + break; + } + + return tag; +}; + +/** + * Parse tag type string "{Array|Object}" etc. + * This function also supports complex type descriptors like in jsDoc or even the enhanced syntax used by the + * [google closure compiler](https://developers.google.com/closure/compiler/docs/js-for-compiler#types) + * + * The resulting array from the type descriptor `{number|string|{name:string,age:number|date}}` would look like this: + * + * [ + * 'number', + * 'string', + * { + * age: ['number', 'date'], + * name: ['string'] + * } + * ] + * + * @param {String} str + * @return {Array} + * @api public + */ + +exports.parseTagTypes = function(str, tag) { + if (!str) { + if(tag) { + tag.types = []; + tag.typesDescription = ""; + tag.optional = tag.nullable = tag.nonNullable = tag.variable = false; + } + return []; + } + var Parser = require('jsdoctypeparser').Parser; + var Builder = require('jsdoctypeparser').Builder; + var result = new Parser().parse(str.substr(1, str.length - 2)); + + var types = (function transform(type) { + if(type instanceof Builder.TypeUnion) { + return type.types.map(transform); + } else if(type instanceof Builder.TypeName) { + return type.name; + } else if(type instanceof Builder.RecordType) { + return type.entries.reduce(function(obj, entry) { + obj[entry.name] = transform(entry.typeUnion); + return obj; + }, {}); + } else { + return type.toString(); + } + }(result)); + + if(tag) { + tag.types = types; + tag.typesDescription = result.toHtml(); + tag.optional = (tag.name && tag.name.slice(0,1) === '[') || result.optional; + tag.nullable = result.nullable; + tag.nonNullable = result.nonNullable; + tag.variable = result.variable; + } + + return types; +}; + +/** + * Determine if a parameter is optional. + * + * Examples: + * JSDoc: {Type} [name] + * Google: {Type=} name + * TypeScript: {Type?} name + * + * @param {Object} tag + * @return {Boolean} + * @api public + */ + +exports.parseParamOptional = function(tag) { + var lastTypeChar = tag.types.slice(-1)[0].slice(-1); + return tag.name.slice(0,1) === '[' || lastTypeChar === '=' || lastTypeChar === '?'; +}; + +/** + * Parse the context from the given `str` of js. + * + * This method attempts to discover the context + * for the comment based on it's code. Currently + * supports: + * + * - classes + * - class constructors + * - class methods + * - function statements + * - function expressions + * - prototype methods + * - prototype properties + * - methods + * - properties + * - declarations + * + * @param {String} str + * @param {Object=} parentContext An indication if we are already in something. Like a namespace or an inline declaration. + * @return {Object} + * @api public + */ + +exports.parseCodeContext = function(str, parentContext) { + parentContext = parentContext || {}; + + var ctx; + + // loop through all context matchers, returning the first successful match + return exports.contextPatternMatchers.some(function (matcher) { + return ctx = matcher(str, parentContext); + }) && ctx; +}; + +exports.contextPatternMatchers = [ + + function (str) { + // class, possibly exported by name or as a default + if (/^\s*(export(\s+default)?\s+)?class\s+([\w$]+)(\s+extends\s+([\w$.]+(?:\(.*\))?))?\s*{/.exec(str)) { + return { + type: 'class' + , constructor: RegExp.$3 + , cons: RegExp.$3 + , name: RegExp.$3 + , extends: RegExp.$5 + , string: 'new ' + RegExp.$3 + '()' + }; + } + }, + + function (str, parentContext) { + // class constructor + if (/^\s*constructor\s*\(/.exec(str)) { + return { + type: 'constructor' + , constructor: parentContext.name + , cons: parentContext.name + , name: 'constructor' + , string: (parentContext && parentContext.name && parentContext.name + '.prototype.' || '') + 'constructor()' + }; + // class method + } + }, + + function (str, parentContext) { + if (/^\s*(static)?\s*(\*)?\s*([\w$]+|\[.*\])\s*\(/.exec(str)) { + return { + type: 'method' + , constructor: parentContext.name + , cons: parentContext.name + , name: RegExp.$2 + RegExp.$3 + , string: (parentContext && parentContext.name && parentContext.name + (RegExp.$1 ? '.' : '.prototype.') || '') + RegExp.$2 + RegExp.$3 + '()' + }; + // named function statement, possibly exported by name or as a default + } + }, + + function (str) { + if (/^\s*(export(\s+default)?\s+)?function\s+([\w$]+)\s*\(/.exec(str)) { + return { + type: 'function' + , name: RegExp.$3 + , string: RegExp.$3 + '()' + }; + } + }, + + function (str) { + // anonymous function expression exported as a default + if (/^\s*export\s+default\s+function\s*\(/.exec(str)) { + return { + type: 'function' + , name: RegExp.$1 // undefined + , string: RegExp.$1 + '()' + }; + } + }, + + function (str) { + // function expression + if (/^return\s+function(?:\s+([\w$]+))?\s*\(/.exec(str)) { + return { + type: 'function' + , name: RegExp.$1 + , string: RegExp.$1 + '()' + }; + } + }, + + function (str) { + // function expression + if (/^\s*(?:const|let|var)\s+([\w$]+)\s*=\s*function/.exec(str)) { + return { + type: 'function' + , name: RegExp.$1 + , string: RegExp.$1 + '()' + }; + } + }, + + function (str, parentContext) { + // prototype method + if (/^\s*([\w$.]+)\s*\.\s*prototype\s*\.\s*([\w$]+)\s*=\s*function/.exec(str)) { + return { + type: 'method' + , constructor: RegExp.$1 + , cons: RegExp.$1 + , name: RegExp.$2 + , string: RegExp.$1 + '.prototype.' + RegExp.$2 + '()' + }; + } + }, + + function (str) { + // prototype property + if (/^\s*([\w$.]+)\s*\.\s*prototype\s*\.\s*([\w$]+)\s*=\s*([^\n;]+)/.exec(str)) { + return { + type: 'property' + , constructor: RegExp.$1 + , cons: RegExp.$1 + , name: RegExp.$2 + , value: RegExp.$3.trim() + , string: RegExp.$1 + '.prototype.' + RegExp.$2 + }; + } + }, + + function (str) { + // prototype property without assignment + if (/^\s*([\w$]+)\s*\.\s*prototype\s*\.\s*([\w$]+)\s*/.exec(str)) { + return { + type: 'property' + , constructor: RegExp.$1 + , cons: RegExp.$1 + , name: RegExp.$2 + , string: RegExp.$1 + '.prototype.' + RegExp.$2 + }; + } + }, + + function (str) { + // inline prototype + if (/^\s*([\w$.]+)\s*\.\s*prototype\s*=\s*{/.exec(str)) { + return { + type: 'prototype' + , constructor: RegExp.$1 + , cons: RegExp.$1 + , name: RegExp.$1 + , string: RegExp.$1 + '.prototype' + }; + } + }, + + function (str, parentContext) { + // inline method + if (/^\s*([\w$.]+)\s*:\s*function/.exec(str)) { + return { + type: 'method' + , constructor: parentContext.name + , cons: parentContext.name + , name: RegExp.$1 + , string: (parentContext && parentContext.name && parentContext.name + '.prototype.' || '') + RegExp.$1 + '()' + }; + } + }, + + function (str, parentContext) { + // inline property + if (/^\s*([\w$.]+)\s*:\s*([^\n;]+)/.exec(str)) { + return { + type: 'property' + , constructor: parentContext.name + , cons: parentContext.name + , name: RegExp.$1 + , value: RegExp.$2.trim() + , string: (parentContext && parentContext.name && parentContext.name + '.' || '') + RegExp.$1 + }; + } + }, + + function (str, parentContext) { + // inline getter/setter + if (/^\s*(get|set)\s*([\w$.]+)\s*\(/.exec(str)) { + return { + type: 'property' + , constructor: parentContext.name + , cons: parentContext.name + , name: RegExp.$2 + , string: (parentContext && parentContext.name && parentContext.name + '.prototype.' || '') + RegExp.$2 + }; + } + }, + + function (str) { + // method + if (/^\s*([\w$.]+)\s*\.\s*([\w$]+)\s*=\s*function/.exec(str)) { + return { + type: 'method' + , receiver: RegExp.$1 + , name: RegExp.$2 + , string: RegExp.$1 + '.' + RegExp.$2 + '()' + }; + } + }, + + function (str) { + // property + if (/^\s*([\w$.]+)\s*\.\s*([\w$]+)\s*=\s*([^\n;]+)/.exec(str)) { + return { + type: 'property' + , receiver: RegExp.$1 + , name: RegExp.$2 + , value: RegExp.$3.trim() + , string: RegExp.$1 + '.' + RegExp.$2 + }; + } + }, + + function (str) { + // declaration + if (/^\s*(?:const|let|var)\s+([\w$]+)\s*=\s*([^\n;]+)/.exec(str)) { + return { + type: 'declaration' + , name: RegExp.$1 + , value: RegExp.$2.trim() + , string: RegExp.$1 + }; + } + } +]; + +exports.setMarkedOptions = function(opts) { + markdown.setOptions(opts); +}; diff --git a/node_modules/dox/lib/utils.js b/node_modules/dox/lib/utils.js new file mode 100644 index 000000000..84d767ecf --- /dev/null +++ b/node_modules/dox/lib/utils.js @@ -0,0 +1,15 @@ + +/** + * Escape the given `html`. + * + * @param {String} html + * @return {String} + * @api private + */ + +exports.escape = function(html){ + return String(html) + .replace(/&(?!\w+;)/g, '&') + .replace(//g, '>'); +}; \ No newline at end of file diff --git a/node_modules/dox/node_modules/commander/History.md b/node_modules/dox/node_modules/commander/History.md new file mode 100644 index 000000000..1b47439cb --- /dev/null +++ b/node_modules/dox/node_modules/commander/History.md @@ -0,0 +1,261 @@ + +2.9.0 / 2015-10-13 +================== + + * Add option `isDefault` to set default subcommand #415 @Qix- + * Add callback to allow filtering or post-processing of help text #434 @djulien + * Fix `undefined` text in help information close #414 #416 @zhiyelee + +2.8.1 / 2015-04-22 +================== + + * Back out `support multiline description` Close #396 #397 + +2.8.0 / 2015-04-07 +================== + + * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee + * Fix bug in Git-style sub-commands #372 @zhiyelee + * Allow commands to be hidden from help #383 @tonylukasavage + * When git-style sub-commands are in use, yet none are called, display help #382 @claylo + * Add ability to specify arguments syntax for top-level command #258 @rrthomas + * Support multiline descriptions #208 @zxqfox + +2.7.1 / 2015-03-11 +================== + + * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367. + +2.7.0 / 2015-03-09 +================== + + * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee + * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage + * Add support for camelCase on `opts()`. Close #353 @nkzawa + * Add node.js 0.12 and io.js to travis.yml + * Allow RegEx options. #337 @palanik + * Fixes exit code when sub-command failing. Close #260 #332 @pirelenito + * git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee + +2.6.0 / 2014-12-30 +================== + + * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee + * Add application description to the help msg. Close #112 @dalssoft + +2.5.1 / 2014-12-15 +================== + + * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee + +2.5.0 / 2014-10-24 +================== + + * add support for variadic arguments. Closes #277 @whitlockjc + +2.4.0 / 2014-10-17 +================== + + * fixed a bug on executing the coercion function of subcommands option. Closes #270 + * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage + * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage + * fixed a bug on subcommand name. Closes #248 @jonathandelgado + * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr + +2.3.0 / 2014-07-16 +================== + + * add command alias'. Closes PR #210 + * fix: Typos. Closes #99 + * fix: Unused fs module. Closes #217 + +2.2.0 / 2014-03-29 +================== + + * add passing of previous option value + * fix: support subcommands on windows. Closes #142 + * Now the defaultValue passed as the second argument of the coercion function. + +2.1.0 / 2013-11-21 +================== + + * add: allow cflag style option params, unit test, fixes #174 + +2.0.0 / 2013-07-18 +================== + + * remove input methods (.prompt, .confirm, etc) + +1.3.2 / 2013-07-18 +================== + + * add support for sub-commands to co-exist with the original command + +1.3.1 / 2013-07-18 +================== + + * add quick .runningCommand hack so you can opt-out of other logic when running a sub command + +1.3.0 / 2013-07-09 +================== + + * add EACCES error handling + * fix sub-command --help + +1.2.0 / 2013-06-13 +================== + + * allow "-" hyphen as an option argument + * support for RegExp coercion + +1.1.1 / 2012-11-20 +================== + + * add more sub-command padding + * fix .usage() when args are present. Closes #106 + +1.1.0 / 2012-11-16 +================== + + * add git-style executable subcommand support. Closes #94 + +1.0.5 / 2012-10-09 +================== + + * fix `--name` clobbering. Closes #92 + * fix examples/help. Closes #89 + +1.0.4 / 2012-09-03 +================== + + * add `outputHelp()` method. + +1.0.3 / 2012-08-30 +================== + + * remove invalid .version() defaulting + +1.0.2 / 2012-08-24 +================== + + * add `--foo=bar` support [arv] + * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] + +1.0.1 / 2012-08-03 +================== + + * fix issue #56 + * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) + +1.0.0 / 2012-07-05 +================== + + * add support for optional option descriptions + * add defaulting of `.version()` to package.json's version + +0.6.1 / 2012-06-01 +================== + + * Added: append (yes or no) on confirmation + * Added: allow node.js v0.7.x + +0.6.0 / 2012-04-10 +================== + + * Added `.prompt(obj, callback)` support. Closes #49 + * Added default support to .choose(). Closes #41 + * Fixed the choice example + +0.5.1 / 2011-12-20 +================== + + * Fixed `password()` for recent nodes. Closes #36 + +0.5.0 / 2011-12-04 +================== + + * Added sub-command option support [itay] + +0.4.3 / 2011-12-04 +================== + + * Fixed custom help ordering. Closes #32 + +0.4.2 / 2011-11-24 +================== + + * Added travis support + * Fixed: line-buffered input automatically trimmed. Closes #31 + +0.4.1 / 2011-11-18 +================== + + * Removed listening for "close" on --help + +0.4.0 / 2011-11-15 +================== + + * Added support for `--`. Closes #24 + +0.3.3 / 2011-11-14 +================== + + * Fixed: wait for close event when writing help info [Jerry Hamlet] + +0.3.2 / 2011-11-01 +================== + + * Fixed long flag definitions with values [felixge] + +0.3.1 / 2011-10-31 +================== + + * Changed `--version` short flag to `-V` from `-v` + * Changed `.version()` so it's configurable [felixge] + +0.3.0 / 2011-10-31 +================== + + * Added support for long flags only. Closes #18 + +0.2.1 / 2011-10-24 +================== + + * "node": ">= 0.4.x < 0.7.0". Closes #20 + +0.2.0 / 2011-09-26 +================== + + * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] + +0.1.0 / 2011-08-24 +================== + + * Added support for custom `--help` output + +0.0.5 / 2011-08-18 +================== + + * Changed: when the user enters nothing prompt for password again + * Fixed issue with passwords beginning with numbers [NuckChorris] + +0.0.4 / 2011-08-15 +================== + + * Fixed `Commander#args` + +0.0.3 / 2011-08-15 +================== + + * Added default option value support + +0.0.2 / 2011-08-15 +================== + + * Added mask support to `Command#password(str[, mask], fn)` + * Added `Command#password(str, fn)` + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/dox/node_modules/commander/LICENSE b/node_modules/dox/node_modules/commander/LICENSE new file mode 100644 index 000000000..10f997ab1 --- /dev/null +++ b/node_modules/dox/node_modules/commander/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +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. diff --git a/node_modules/dox/node_modules/commander/Readme.md b/node_modules/dox/node_modules/commander/Readme.md new file mode 100644 index 000000000..08b9e4cb9 --- /dev/null +++ b/node_modules/dox/node_modules/commander/Readme.md @@ -0,0 +1,351 @@ +# Commander.js + + +[![Build Status](https://api.travis-ci.org/tj/commander.js.svg)](http://travis-ci.org/tj/commander.js) +[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) +[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://www.npmjs.org/package/commander) +[![Join the chat at https://gitter.im/tj/commander.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + + The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/tj/commander). + [API documentation](http://tj.github.com/commander.js/) + + +## Installation + + $ npm install commander + +## Option parsing + + Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .version('0.0.1') + .option('-p, --peppers', 'Add peppers') + .option('-P, --pineapple', 'Add pineapple') + .option('-b, --bbq-sauce', 'Add bbq sauce') + .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') + .parse(process.argv); + +console.log('you ordered a pizza with:'); +if (program.peppers) console.log(' - peppers'); +if (program.pineapple) console.log(' - pineapple'); +if (program.bbqSauce) console.log(' - bbq'); +console.log(' - %s cheese', program.cheese); +``` + + Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. + + +## Coercion + +```js +function range(val) { + return val.split('..').map(Number); +} + +function list(val) { + return val.split(','); +} + +function collect(val, memo) { + memo.push(val); + return memo; +} + +function increaseVerbosity(v, total) { + return total + 1; +} + +program + .version('0.0.1') + .usage('[options] ') + .option('-i, --integer ', 'An integer argument', parseInt) + .option('-f, --float ', 'A float argument', parseFloat) + .option('-r, --range ..', 'A range', range) + .option('-l, --list ', 'A list', list) + .option('-o, --optional [value]', 'An optional value') + .option('-c, --collect [value]', 'A repeatable value', collect, []) + .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0) + .parse(process.argv); + +console.log(' int: %j', program.integer); +console.log(' float: %j', program.float); +console.log(' optional: %j', program.optional); +program.range = program.range || []; +console.log(' range: %j..%j', program.range[0], program.range[1]); +console.log(' list: %j', program.list); +console.log(' collect: %j', program.collect); +console.log(' verbosity: %j', program.verbose); +console.log(' args: %j', program.args); +``` + +## Regular Expression +```js +program + .version('0.0.1') + .option('-s --size ', 'Pizza size', /^(large|medium|small)$/i, 'medium') + .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i) + .parse(process.argv); + +console.log(' size: %j', program.size); +console.log(' drink: %j', program.drink); +``` + +## Variadic arguments + + The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to + append `...` to the argument name. Here is an example: + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .version('0.0.1') + .command('rmdir

[otherDirs...]') + .action(function (dir, otherDirs) { + console.log('rmdir %s', dir); + if (otherDirs) { + otherDirs.forEach(function (oDir) { + console.log('rmdir %s', oDir); + }); + } + }); + +program.parse(process.argv); +``` + + An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed + to your action as demonstrated above. + +## Specify the argument syntax + +```js +#!/usr/bin/env node + +var program = require('../'); + +program + .version('0.0.1') + .arguments(' [env]') + .action(function (cmd, env) { + cmdValue = cmd; + envValue = env; + }); + +program.parse(process.argv); + +if (typeof cmdValue === 'undefined') { + console.error('no command given!'); + process.exit(1); +} +console.log('command:', cmdValue); +console.log('environment:', envValue || "no environment given"); +``` + +## Git-style sub-commands + +```js +// file: ./examples/pm +var program = require('..'); + +program + .version('0.0.1') + .command('install [name]', 'install one or more packages') + .command('search [query]', 'search with optional query') + .command('list', 'list packages installed', {isDefault: true}) + .parse(process.argv); +``` + +When `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools. +The commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`. + +Options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the option from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified. + +If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. + +### `--harmony` + +You can enable `--harmony` option in two ways: +* Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern. +* Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process. + +## Automated --help + + The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: + +``` + $ ./examples/pizza --help + + Usage: pizza [options] + + An application for pizzas ordering + + Options: + + -h, --help output usage information + -V, --version output the version number + -p, --peppers Add peppers + -P, --pineapple Add pineapple + -b, --bbq Add bbq sauce + -c, --cheese Add the specified type of cheese [marble] + -C, --no-cheese You do not want any cheese + +``` + +## Custom help + + You can display arbitrary `-h, --help` information + by listening for "--help". Commander will automatically + exit once you are done so that the remainder of your program + does not execute causing undesired behaviours, for example + in the following executable "stuff" will not output when + `--help` is used. + +```js +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var program = require('commander'); + +program + .version('0.0.1') + .option('-f, --foo', 'enable some foo') + .option('-b, --bar', 'enable some bar') + .option('-B, --baz', 'enable some baz'); + +// must be before .parse() since +// node's emit() is immediate + +program.on('--help', function(){ + console.log(' Examples:'); + console.log(''); + console.log(' $ custom-help --help'); + console.log(' $ custom-help -h'); + console.log(''); +}); + +program.parse(process.argv); + +console.log('stuff'); +``` + +Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run: + +``` + +Usage: custom-help [options] + +Options: + + -h, --help output usage information + -V, --version output the version number + -f, --foo enable some foo + -b, --bar enable some bar + -B, --baz enable some baz + +Examples: + + $ custom-help --help + $ custom-help -h + +``` + +## .outputHelp(cb) + +Output help information without exiting. +Optional callback cb allows post-processing of help text before it is displayed. + +If you want to display help by default (e.g. if no command was provided), you can use something like: + +```js +var program = require('commander'); +var colors = require('colors'); + +program + .version('0.0.1') + .command('getstream [url]', 'get stream URL') + .parse(process.argv); + + if (!process.argv.slice(2).length) { + program.outputHelp(make_red); + } + +function make_red(txt) { + return colors.red(txt); //display the help text in red on the console +} +``` + +## .help(cb) + + Output help information and exit immediately. + Optional callback cb allows post-processing of help text before it is displayed. + +## Examples + +```js +var program = require('commander'); + +program + .version('0.0.1') + .option('-C, --chdir ', 'change the working directory') + .option('-c, --config ', 'set config path. defaults to ./deploy.conf') + .option('-T, --no-tests', 'ignore test hook') + +program + .command('setup [env]') + .description('run setup commands for all envs') + .option("-s, --setup_mode [mode]", "Which setup mode to use") + .action(function(env, options){ + var mode = options.setup_mode || "normal"; + env = env || 'all'; + console.log('setup for %s env(s) with %s mode', env, mode); + }); + +program + .command('exec ') + .alias('ex') + .description('execute the given remote cmd') + .option("-e, --exec_mode ", "Which exec mode to use") + .action(function(cmd, options){ + console.log('exec "%s" using %s mode', cmd, options.exec_mode); + }).on('--help', function() { + console.log(' Examples:'); + console.log(); + console.log(' $ deploy exec sequential'); + console.log(' $ deploy exec async'); + console.log(); + }); + +program + .command('*') + .action(function(env){ + console.log('deploying "%s"', env); + }); + +program.parse(process.argv); +``` + +More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. + +## License + +MIT + diff --git a/node_modules/dox/node_modules/commander/index.js b/node_modules/dox/node_modules/commander/index.js new file mode 100644 index 000000000..a19c05d2e --- /dev/null +++ b/node_modules/dox/node_modules/commander/index.js @@ -0,0 +1,1110 @@ +/** + * Module dependencies. + */ + +var EventEmitter = require('events').EventEmitter; +var spawn = require('child_process').spawn; +var readlink = require('graceful-readlink').readlinkSync; +var path = require('path'); +var dirname = path.dirname; +var basename = path.basename; +var fs = require('fs'); + +/** + * Expose the root command. + */ + +exports = module.exports = new Command(); + +/** + * Expose `Command`. + */ + +exports.Command = Command; + +/** + * Expose `Option`. + */ + +exports.Option = Option; + +/** + * Initialize a new `Option` with the given `flags` and `description`. + * + * @param {String} flags + * @param {String} description + * @api public + */ + +function Option(flags, description) { + this.flags = flags; + this.required = ~flags.indexOf('<'); + this.optional = ~flags.indexOf('['); + this.bool = !~flags.indexOf('-no-'); + flags = flags.split(/[ ,|]+/); + if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); + this.long = flags.shift(); + this.description = description || ''; +} + +/** + * Return option name. + * + * @return {String} + * @api private + */ + +Option.prototype.name = function() { + return this.long + .replace('--', '') + .replace('no-', ''); +}; + +/** + * Check if `arg` matches the short or long flag. + * + * @param {String} arg + * @return {Boolean} + * @api private + */ + +Option.prototype.is = function(arg) { + return arg == this.short || arg == this.long; +}; + +/** + * Initialize a new `Command`. + * + * @param {String} name + * @api public + */ + +function Command(name) { + this.commands = []; + this.options = []; + this._execs = {}; + this._allowUnknownOption = false; + this._args = []; + this._name = name || ''; +} + +/** + * Inherit from `EventEmitter.prototype`. + */ + +Command.prototype.__proto__ = EventEmitter.prototype; + +/** + * Add command `name`. + * + * The `.action()` callback is invoked when the + * command `name` is specified via __ARGV__, + * and the remaining arguments are applied to the + * function for access. + * + * When the `name` is "*" an un-matched command + * will be passed as the first arg, followed by + * the rest of __ARGV__ remaining. + * + * Examples: + * + * program + * .version('0.0.1') + * .option('-C, --chdir ', 'change the working directory') + * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') + * .option('-T, --no-tests', 'ignore test hook') + * + * program + * .command('setup') + * .description('run remote setup commands') + * .action(function() { + * console.log('setup'); + * }); + * + * program + * .command('exec ') + * .description('run the given remote command') + * .action(function(cmd) { + * console.log('exec "%s"', cmd); + * }); + * + * program + * .command('teardown [otherDirs...]') + * .description('run teardown commands') + * .action(function(dir, otherDirs) { + * console.log('dir "%s"', dir); + * if (otherDirs) { + * otherDirs.forEach(function (oDir) { + * console.log('dir "%s"', oDir); + * }); + * } + * }); + * + * program + * .command('*') + * .description('deploy the given env') + * .action(function(env) { + * console.log('deploying "%s"', env); + * }); + * + * program.parse(process.argv); + * + * @param {String} name + * @param {String} [desc] for git-style sub-commands + * @return {Command} the new command + * @api public + */ + +Command.prototype.command = function(name, desc, opts) { + opts = opts || {}; + var args = name.split(/ +/); + var cmd = new Command(args.shift()); + + if (desc) { + cmd.description(desc); + this.executables = true; + this._execs[cmd._name] = true; + if (opts.isDefault) this.defaultExecutable = cmd._name; + } + + cmd._noHelp = !!opts.noHelp; + this.commands.push(cmd); + cmd.parseExpectedArgs(args); + cmd.parent = this; + + if (desc) return this; + return cmd; +}; + +/** + * Define argument syntax for the top-level command. + * + * @api public + */ + +Command.prototype.arguments = function (desc) { + return this.parseExpectedArgs(desc.split(/ +/)); +}; + +/** + * Add an implicit `help [cmd]` subcommand + * which invokes `--help` for the given command. + * + * @api private + */ + +Command.prototype.addImplicitHelpCommand = function() { + this.command('help [cmd]', 'display help for [cmd]'); +}; + +/** + * Parse expected `args`. + * + * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. + * + * @param {Array} args + * @return {Command} for chaining + * @api public + */ + +Command.prototype.parseExpectedArgs = function(args) { + if (!args.length) return; + var self = this; + args.forEach(function(arg) { + var argDetails = { + required: false, + name: '', + variadic: false + }; + + switch (arg[0]) { + case '<': + argDetails.required = true; + argDetails.name = arg.slice(1, -1); + break; + case '[': + argDetails.name = arg.slice(1, -1); + break; + } + + if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { + argDetails.variadic = true; + argDetails.name = argDetails.name.slice(0, -3); + } + if (argDetails.name) { + self._args.push(argDetails); + } + }); + return this; +}; + +/** + * Register callback `fn` for the command. + * + * Examples: + * + * program + * .command('help') + * .description('display verbose help') + * .action(function() { + * // output help here + * }); + * + * @param {Function} fn + * @return {Command} for chaining + * @api public + */ + +Command.prototype.action = function(fn) { + var self = this; + var listener = function(args, unknown) { + // Parse any so-far unknown options + args = args || []; + unknown = unknown || []; + + var parsed = self.parseOptions(unknown); + + // Output help if necessary + outputHelpIfNecessary(self, parsed.unknown); + + // If there are still any unknown options, then we simply + // die, unless someone asked for help, in which case we give it + // to them, and then we die. + if (parsed.unknown.length > 0) { + self.unknownOption(parsed.unknown[0]); + } + + // Leftover arguments need to be pushed back. Fixes issue #56 + if (parsed.args.length) args = parsed.args.concat(args); + + self._args.forEach(function(arg, i) { + if (arg.required && null == args[i]) { + self.missingArgument(arg.name); + } else if (arg.variadic) { + if (i !== self._args.length - 1) { + self.variadicArgNotLast(arg.name); + } + + args[i] = args.splice(i); + } + }); + + // Always append ourselves to the end of the arguments, + // to make sure we match the number of arguments the user + // expects + if (self._args.length) { + args[self._args.length] = self; + } else { + args.push(self); + } + + fn.apply(self, args); + }; + var parent = this.parent || this; + var name = parent === this ? '*' : this._name; + parent.on(name, listener); + if (this._alias) parent.on(this._alias, listener); + return this; +}; + +/** + * Define option with `flags`, `description` and optional + * coercion `fn`. + * + * The `flags` string should contain both the short and long flags, + * separated by comma, a pipe or space. The following are all valid + * all will output this way when `--help` is used. + * + * "-p, --pepper" + * "-p|--pepper" + * "-p --pepper" + * + * Examples: + * + * // simple boolean defaulting to false + * program.option('-p, --pepper', 'add pepper'); + * + * --pepper + * program.pepper + * // => Boolean + * + * // simple boolean defaulting to true + * program.option('-C, --no-cheese', 'remove cheese'); + * + * program.cheese + * // => true + * + * --no-cheese + * program.cheese + * // => false + * + * // required argument + * program.option('-C, --chdir ', 'change the working directory'); + * + * --chdir /tmp + * program.chdir + * // => "/tmp" + * + * // optional argument + * program.option('-c, --cheese [type]', 'add cheese [marble]'); + * + * @param {String} flags + * @param {String} description + * @param {Function|Mixed} fn or default + * @param {Mixed} defaultValue + * @return {Command} for chaining + * @api public + */ + +Command.prototype.option = function(flags, description, fn, defaultValue) { + var self = this + , option = new Option(flags, description) + , oname = option.name() + , name = camelcase(oname); + + // default as 3rd arg + if (typeof fn != 'function') { + if (fn instanceof RegExp) { + var regex = fn; + fn = function(val, def) { + var m = regex.exec(val); + return m ? m[0] : def; + } + } + else { + defaultValue = fn; + fn = null; + } + } + + // preassign default value only for --no-*, [optional], or + if (false == option.bool || option.optional || option.required) { + // when --no-* we make sure default is true + if (false == option.bool) defaultValue = true; + // preassign only if we have a default + if (undefined !== defaultValue) self[name] = defaultValue; + } + + // register the option + this.options.push(option); + + // when it's passed assign the value + // and conditionally invoke the callback + this.on(oname, function(val) { + // coercion + if (null !== val && fn) val = fn(val, undefined === self[name] + ? defaultValue + : self[name]); + + // unassigned or bool + if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { + // if no value, bool true, and we have a default, then use it! + if (null == val) { + self[name] = option.bool + ? defaultValue || true + : false; + } else { + self[name] = val; + } + } else if (null !== val) { + // reassign + self[name] = val; + } + }); + + return this; +}; + +/** + * Allow unknown options on the command line. + * + * @param {Boolean} arg if `true` or omitted, no error will be thrown + * for unknown options. + * @api public + */ +Command.prototype.allowUnknownOption = function(arg) { + this._allowUnknownOption = arguments.length === 0 || arg; + return this; +}; + +/** + * Parse `argv`, settings options and invoking commands when defined. + * + * @param {Array} argv + * @return {Command} for chaining + * @api public + */ + +Command.prototype.parse = function(argv) { + // implicit help + if (this.executables) this.addImplicitHelpCommand(); + + // store raw args + this.rawArgs = argv; + + // guess name + this._name = this._name || basename(argv[1], '.js'); + + // github-style sub-commands with no sub-command + if (this.executables && argv.length < 3 && !this.defaultExecutable) { + // this user needs help + argv.push('--help'); + } + + // process argv + var parsed = this.parseOptions(this.normalize(argv.slice(2))); + var args = this.args = parsed.args; + + var result = this.parseArgs(this.args, parsed.unknown); + + // executable sub-commands + var name = result.args[0]; + if (this._execs[name] && typeof this._execs[name] != "function") { + return this.executeSubCommand(argv, args, parsed.unknown); + } else if (this.defaultExecutable) { + // use the default subcommand + args.unshift(name = this.defaultExecutable); + return this.executeSubCommand(argv, args, parsed.unknown); + } + + return result; +}; + +/** + * Execute a sub-command executable. + * + * @param {Array} argv + * @param {Array} args + * @param {Array} unknown + * @api private + */ + +Command.prototype.executeSubCommand = function(argv, args, unknown) { + args = args.concat(unknown); + + if (!args.length) this.help(); + if ('help' == args[0] && 1 == args.length) this.help(); + + // --help + if ('help' == args[0]) { + args[0] = args[1]; + args[1] = '--help'; + } + + // executable + var f = argv[1]; + // name of the subcommand, link `pm-install` + var bin = basename(f, '.js') + '-' + args[0]; + + + // In case of globally installed, get the base dir where executable + // subcommand file should be located at + var baseDir + , link = readlink(f); + + // when symbolink is relative path + if (link !== f && link.charAt(0) !== '/') { + link = path.join(dirname(f), link) + } + baseDir = dirname(link); + + // prefer local `./` to bin in the $PATH + var localBin = path.join(baseDir, bin); + + // whether bin file is a js script with explicit `.js` extension + var isExplicitJS = false; + if (exists(localBin + '.js')) { + bin = localBin + '.js'; + isExplicitJS = true; + } else if (exists(localBin)) { + bin = localBin; + } + + args = args.slice(1); + + var proc; + if (process.platform !== 'win32') { + if (isExplicitJS) { + args.unshift(localBin); + // add executable arguments to spawn + args = (process.execArgv || []).concat(args); + + proc = spawn('node', args, { stdio: 'inherit', customFds: [0, 1, 2] }); + } else { + proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] }); + } + } else { + args.unshift(localBin); + proc = spawn(process.execPath, args, { stdio: 'inherit'}); + } + + proc.on('close', process.exit.bind(process)); + proc.on('error', function(err) { + if (err.code == "ENOENT") { + console.error('\n %s(1) does not exist, try --help\n', bin); + } else if (err.code == "EACCES") { + console.error('\n %s(1) not executable. try chmod or run with root\n', bin); + } + process.exit(1); + }); + + // Store the reference to the child process + this.runningCommand = proc; +}; + +/** + * Normalize `args`, splitting joined short flags. For example + * the arg "-abc" is equivalent to "-a -b -c". + * This also normalizes equal sign and splits "--abc=def" into "--abc def". + * + * @param {Array} args + * @return {Array} + * @api private + */ + +Command.prototype.normalize = function(args) { + var ret = [] + , arg + , lastOpt + , index; + + for (var i = 0, len = args.length; i < len; ++i) { + arg = args[i]; + if (i > 0) { + lastOpt = this.optionFor(args[i-1]); + } + + if (arg === '--') { + // Honor option terminator + ret = ret.concat(args.slice(i)); + break; + } else if (lastOpt && lastOpt.required) { + ret.push(arg); + } else if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { + arg.slice(1).split('').forEach(function(c) { + ret.push('-' + c); + }); + } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { + ret.push(arg.slice(0, index), arg.slice(index + 1)); + } else { + ret.push(arg); + } + } + + return ret; +}; + +/** + * Parse command `args`. + * + * When listener(s) are available those + * callbacks are invoked, otherwise the "*" + * event is emitted and those actions are invoked. + * + * @param {Array} args + * @return {Command} for chaining + * @api private + */ + +Command.prototype.parseArgs = function(args, unknown) { + var name; + + if (args.length) { + name = args[0]; + if (this.listeners(name).length) { + this.emit(args.shift(), args, unknown); + } else { + this.emit('*', args); + } + } else { + outputHelpIfNecessary(this, unknown); + + // If there were no args and we have unknown options, + // then they are extraneous and we need to error. + if (unknown.length > 0) { + this.unknownOption(unknown[0]); + } + } + + return this; +}; + +/** + * Return an option matching `arg` if any. + * + * @param {String} arg + * @return {Option} + * @api private + */ + +Command.prototype.optionFor = function(arg) { + for (var i = 0, len = this.options.length; i < len; ++i) { + if (this.options[i].is(arg)) { + return this.options[i]; + } + } +}; + +/** + * Parse options from `argv` returning `argv` + * void of these options. + * + * @param {Array} argv + * @return {Array} + * @api public + */ + +Command.prototype.parseOptions = function(argv) { + var args = [] + , len = argv.length + , literal + , option + , arg; + + var unknownOptions = []; + + // parse options + for (var i = 0; i < len; ++i) { + arg = argv[i]; + + // literal args after -- + if ('--' == arg) { + literal = true; + continue; + } + + if (literal) { + args.push(arg); + continue; + } + + // find matching Option + option = this.optionFor(arg); + + // option is defined + if (option) { + // requires arg + if (option.required) { + arg = argv[++i]; + if (null == arg) return this.optionMissingArgument(option); + this.emit(option.name(), arg); + // optional arg + } else if (option.optional) { + arg = argv[i+1]; + if (null == arg || ('-' == arg[0] && '-' != arg)) { + arg = null; + } else { + ++i; + } + this.emit(option.name(), arg); + // bool + } else { + this.emit(option.name()); + } + continue; + } + + // looks like an option + if (arg.length > 1 && '-' == arg[0]) { + unknownOptions.push(arg); + + // If the next argument looks like it might be + // an argument for this option, we pass it on. + // If it isn't, then it'll simply be ignored + if (argv[i+1] && '-' != argv[i+1][0]) { + unknownOptions.push(argv[++i]); + } + continue; + } + + // arg + args.push(arg); + } + + return { args: args, unknown: unknownOptions }; +}; + +/** + * Return an object containing options as key-value pairs + * + * @return {Object} + * @api public + */ +Command.prototype.opts = function() { + var result = {} + , len = this.options.length; + + for (var i = 0 ; i < len; i++) { + var key = camelcase(this.options[i].name()); + result[key] = key === 'version' ? this._version : this[key]; + } + return result; +}; + +/** + * Argument `name` is missing. + * + * @param {String} name + * @api private + */ + +Command.prototype.missingArgument = function(name) { + console.error(); + console.error(" error: missing required argument `%s'", name); + console.error(); + process.exit(1); +}; + +/** + * `Option` is missing an argument, but received `flag` or nothing. + * + * @param {String} option + * @param {String} flag + * @api private + */ + +Command.prototype.optionMissingArgument = function(option, flag) { + console.error(); + if (flag) { + console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); + } else { + console.error(" error: option `%s' argument missing", option.flags); + } + console.error(); + process.exit(1); +}; + +/** + * Unknown option `flag`. + * + * @param {String} flag + * @api private + */ + +Command.prototype.unknownOption = function(flag) { + if (this._allowUnknownOption) return; + console.error(); + console.error(" error: unknown option `%s'", flag); + console.error(); + process.exit(1); +}; + +/** + * Variadic argument with `name` is not the last argument as required. + * + * @param {String} name + * @api private + */ + +Command.prototype.variadicArgNotLast = function(name) { + console.error(); + console.error(" error: variadic arguments must be last `%s'", name); + console.error(); + process.exit(1); +}; + +/** + * Set the program version to `str`. + * + * This method auto-registers the "-V, --version" flag + * which will print the version number when passed. + * + * @param {String} str + * @param {String} flags + * @return {Command} for chaining + * @api public + */ + +Command.prototype.version = function(str, flags) { + if (0 == arguments.length) return this._version; + this._version = str; + flags = flags || '-V, --version'; + this.option(flags, 'output the version number'); + this.on('version', function() { + process.stdout.write(str + '\n'); + process.exit(0); + }); + return this; +}; + +/** + * Set the description to `str`. + * + * @param {String} str + * @return {String|Command} + * @api public + */ + +Command.prototype.description = function(str) { + if (0 === arguments.length) return this._description; + this._description = str; + return this; +}; + +/** + * Set an alias for the command + * + * @param {String} alias + * @return {String|Command} + * @api public + */ + +Command.prototype.alias = function(alias) { + if (0 == arguments.length) return this._alias; + this._alias = alias; + return this; +}; + +/** + * Set / get the command usage `str`. + * + * @param {String} str + * @return {String|Command} + * @api public + */ + +Command.prototype.usage = function(str) { + var args = this._args.map(function(arg) { + return humanReadableArgName(arg); + }); + + var usage = '[options]' + + (this.commands.length ? ' [command]' : '') + + (this._args.length ? ' ' + args.join(' ') : ''); + + if (0 == arguments.length) return this._usage || usage; + this._usage = str; + + return this; +}; + +/** + * Get the name of the command + * + * @param {String} name + * @return {String|Command} + * @api public + */ + +Command.prototype.name = function() { + return this._name; +}; + +/** + * Return the largest option length. + * + * @return {Number} + * @api private + */ + +Command.prototype.largestOptionLength = function() { + return this.options.reduce(function(max, option) { + return Math.max(max, option.flags.length); + }, 0); +}; + +/** + * Return help for options. + * + * @return {String} + * @api private + */ + +Command.prototype.optionHelp = function() { + var width = this.largestOptionLength(); + + // Prepend the help information + return [pad('-h, --help', width) + ' ' + 'output usage information'] + .concat(this.options.map(function(option) { + return pad(option.flags, width) + ' ' + option.description; + })) + .join('\n'); +}; + +/** + * Return command help documentation. + * + * @return {String} + * @api private + */ + +Command.prototype.commandHelp = function() { + if (!this.commands.length) return ''; + + var commands = this.commands.filter(function(cmd) { + return !cmd._noHelp; + }).map(function(cmd) { + var args = cmd._args.map(function(arg) { + return humanReadableArgName(arg); + }).join(' '); + + return [ + cmd._name + + (cmd._alias ? '|' + cmd._alias : '') + + (cmd.options.length ? ' [options]' : '') + + ' ' + args + , cmd.description() + ]; + }); + + var width = commands.reduce(function(max, command) { + return Math.max(max, command[0].length); + }, 0); + + return [ + '' + , ' Commands:' + , '' + , commands.map(function(cmd) { + var desc = cmd[1] ? ' ' + cmd[1] : ''; + return pad(cmd[0], width) + desc; + }).join('\n').replace(/^/gm, ' ') + , '' + ].join('\n'); +}; + +/** + * Return program help documentation. + * + * @return {String} + * @api private + */ + +Command.prototype.helpInformation = function() { + var desc = []; + if (this._description) { + desc = [ + ' ' + this._description + , '' + ]; + } + + var cmdName = this._name; + if (this._alias) { + cmdName = cmdName + '|' + this._alias; + } + var usage = [ + '' + ,' Usage: ' + cmdName + ' ' + this.usage() + , '' + ]; + + var cmds = []; + var commandHelp = this.commandHelp(); + if (commandHelp) cmds = [commandHelp]; + + var options = [ + ' Options:' + , '' + , '' + this.optionHelp().replace(/^/gm, ' ') + , '' + , '' + ]; + + return usage + .concat(cmds) + .concat(desc) + .concat(options) + .join('\n'); +}; + +/** + * Output help information for this command + * + * @api public + */ + +Command.prototype.outputHelp = function(cb) { + if (!cb) { + cb = function(passthru) { + return passthru; + } + } + process.stdout.write(cb(this.helpInformation())); + this.emit('--help'); +}; + +/** + * Output help information and exit. + * + * @api public + */ + +Command.prototype.help = function(cb) { + this.outputHelp(cb); + process.exit(); +}; + +/** + * Camel-case the given `flag` + * + * @param {String} flag + * @return {String} + * @api private + */ + +function camelcase(flag) { + return flag.split('-').reduce(function(str, word) { + return str + word[0].toUpperCase() + word.slice(1); + }); +} + +/** + * Pad `str` to `width`. + * + * @param {String} str + * @param {Number} width + * @return {String} + * @api private + */ + +function pad(str, width) { + var len = Math.max(0, width - str.length); + return str + Array(len + 1).join(' '); +} + +/** + * Output help information if necessary + * + * @param {Command} command to output help for + * @param {Array} array of options to search for -h or --help + * @api private + */ + +function outputHelpIfNecessary(cmd, options) { + options = options || []; + for (var i = 0; i < options.length; i++) { + if (options[i] == '--help' || options[i] == '-h') { + cmd.outputHelp(); + process.exit(0); + } + } +} + +/** + * Takes an argument an returns its human readable equivalent for help usage. + * + * @param {Object} arg + * @return {String} + * @api private + */ + +function humanReadableArgName(arg) { + var nameOutput = arg.name + (arg.variadic === true ? '...' : ''); + + return arg.required + ? '<' + nameOutput + '>' + : '[' + nameOutput + ']' +} + +// for versions before node v0.8 when there weren't `fs.existsSync` +function exists(file) { + try { + if (fs.statSync(file).isFile()) { + return true; + } + } catch (e) { + return false; + } +} + diff --git a/node_modules/dox/node_modules/commander/package.json b/node_modules/dox/node_modules/commander/package.json new file mode 100644 index 000000000..77311492d --- /dev/null +++ b/node_modules/dox/node_modules/commander/package.json @@ -0,0 +1,33 @@ +{ + "name": "commander", + "version": "2.9.0", + "description": "the complete solution for node.js command-line programs", + "keywords": [ + "command", + "option", + "parser" + ], + "author": "TJ Holowaychuk ", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tj/commander.js.git" + }, + "devDependencies": { + "should": ">= 0.0.1", + "sinon": ">=1.17.1" + }, + "scripts": { + "test": "make test" + }, + "main": "index", + "engines": { + "node": ">= 0.6.x" + }, + "files": [ + "index.js" + ], + "dependencies": { + "graceful-readlink": ">= 1.0.0" + } +} diff --git a/node_modules/dox/package.json b/node_modules/dox/package.json new file mode 100644 index 000000000..b2b10693b --- /dev/null +++ b/node_modules/dox/package.json @@ -0,0 +1,43 @@ +{ + "name": "dox", + "description": "Markdown / JSdoc documentation generator", + "version": "0.8.1", + "author": "TJ Holowaychuk ", + "contributors": [ + "Jarvis Badgley ", + "Arseny Zarechnev ", + "Thomas Parisot ", + "Stephen Mathieson ", + "Vladimir Tsvang ", + "Nathan Rajlich ", + "Gion Kunz ", + "ForbesLindesay" + ], + "homepage": "https://github.com/tj/dox", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/dox.git" + }, + "keywords": [ + "documentation", + "docs", + "markdown", + "jsdoc" + ], + "bin": { + "dox": "./bin/dox" + }, + "dependencies": { + "commander": "~2.9.0", + "jsdoctypeparser": "^1.2.0", + "marked": "~0.3.5" + }, + "devDependencies": { + "mocha": "~2.4.5", + "should": "~6.0.3" + }, + "license": "MIT", + "scripts": { + "test": "make test" + } +} diff --git a/node_modules/eachr/.dependabot/config.yml b/node_modules/eachr/.dependabot/config.yml new file mode 100644 index 000000000..69a808b79 --- /dev/null +++ b/node_modules/eachr/.dependabot/config.yml @@ -0,0 +1,9 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: daily + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/eachr/.github/FUNDING.yml b/node_modules/eachr/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/eachr/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/eachr/HISTORY.md b/node_modules/eachr/HISTORY.md new file mode 100755 index 000000000..a234b5aab --- /dev/null +++ b/node_modules/eachr/HISTORY.md @@ -0,0 +1,45 @@ +# History + +## v3.3.0 2019 November 13 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.2.0 2016 May 27 + +- Updated internal conventions + - Moved from [ESNextGuardian](https://github.com/bevry/esnextguardian) to [Editions](https://github.com/bevry/editions) + +## v3.1.1 2016 January 15 + +- Minimum supported node version changed from 0.12 to 0.10 - Although node 0.10 has broken Maps, so iterating Maps is not support for node 0.10 +- Minor performance improvement for iterating arrays + +## v3.1.0 2015 December 9 + +- Updated internal conventions + +## v3.0.0 2015 September 21 + +- Added support for maps +- Specifically only support arrays, plain objects, and maps +- Converted from CoffeeScript to ES6+ + +## v2.0.4 2015 March 11 + +- Updated dependencies + +## v2.0.3 2014 February 8th + +- Updated dependencies + +## v2.0.2 2013 March 29 + +- Added missing `typechecker` dependency + +## v2.0.1 2013 March 29 + +- Returns the subject instead of `this` + +## v2.0.0 2013 March 29 + +- Split from [bal-util](https://github.com/balupton/bal-util) diff --git a/node_modules/eachr/LICENSE.md b/node_modules/eachr/LICENSE.md new file mode 100644 index 000000000..d06cb72f8 --- /dev/null +++ b/node_modules/eachr/LICENSE.md @@ -0,0 +1,23 @@ + + +

License

+ +Unless stated otherwise all works are: + +
+ +and licensed under: + + + +

MIT License

+ +
+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 (including the next paragraph) 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.
+
+ + diff --git a/node_modules/eachr/README.md b/node_modules/eachr/README.md new file mode 100755 index 000000000..13a1f8ce0 --- /dev/null +++ b/node_modules/eachr/README.md @@ -0,0 +1,170 @@ + + +

eachr

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Give eachr an item to iterate (array, object or map) and an iterator, then in return eachr gives iterator the value and key of each item, and will stop if the iterator returned false. + + + + + + +

Install

+ +

npm

+
    +
  • Install: npm install --save eachr
  • +
  • Require: require('eachr')
  • +
+ +

jspm

+ +``` html + +``` + +

Editions

+ +

This package is published with the following editions:

+ +
  • eachr aliases eachr/index.js which uses Editions to automatically select the correct edition for the consumers environment
  • +
  • eachr/source/index.js is esnext source code with require for modules
  • +
  • eachr/edition-browsers/index.js is esnext compiled for browsers with require for modules
  • +
  • eachr/edition-node-0.10/index.js is esnext compiled for node.js 0.10 with require for modules
+ + + + +## Usage + +Eachr accepts an array, object, or map. The iterator is bound to the list, and receives three arguments: the value, key, and list. + +``` javascript +// Prepare +const eachr = require('eachr') +const arr = ['first', 'second', 'third'] +const obj = {a: 'first', b: 'second', c: 'third'} +const map = new Map([['a', 'first'], ['b', 'second'], ['c', 'third']]) +function iterator (value, key) { + console.log({value: value, key: key}) + if ( value === 'second' ) { + console.log('break') + return false + } +} + +// Cycle Array +eachr(arr, iterator) +// {'value': 'first', 'key': 0} +// {'value': 'second', 'key': 1} +// break + +// Cycle Object +eachr(obj, iterator) +// {'value': 'first', 'key': 'a'} +// {'value': 'second', 'key': 'b'} +// break + +// Cycle Map +eachr(map, iterator) +// {'value': 'first', 'key': 'a'} +// {'value': 'second', 'key': 'b'} +// break + +``` + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Contribute

+ +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/eachr/edition-browsers/index.js b/node_modules/eachr/edition-browsers/index.js new file mode 100755 index 000000000..88a3bfc05 --- /dev/null +++ b/node_modules/eachr/edition-browsers/index.js @@ -0,0 +1,57 @@ +/* eslint no-cond-assign:0 */ +'use strict'; // Import + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } + +function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +var typeChecker = require('typechecker'); // Eachr + + +module.exports = function eachr(subject, callback) { + // Handle + if (typeChecker.isArray(subject)) { + for (var key = 0; key < subject.length; ++key) { + var value = subject[key]; + + if (callback.call(subject, value, key, subject) === false) { + break; + } + } + } else if (typeChecker.isPlainObject(subject)) { + for (var _key in subject) { + if (subject.hasOwnProperty(_key)) { + var _value = subject[_key]; + + if (callback.call(subject, _value, _key, subject) === false) { + break; + } + } + } + } else if (typeChecker.isMap(subject)) { + var entries = subject.entries(); + var entry; + + while (entry = entries.next().value) { + var _entry = entry, + _entry2 = _slicedToArray(_entry, 2), + _key2 = _entry2[0], + _value2 = _entry2[1]; // destructuring + + + if (callback.call(subject, _value2, _key2, subject) === false) { + break; + } + } + } else { + // Perhaps falling back to a `for of` loop here would be sensible + throw new Error('eachr does not know how to iterate what was passed to it'); + } // Return + + + return subject; +}; \ No newline at end of file diff --git a/node_modules/eachr/edition-node-0.10/index.js b/node_modules/eachr/edition-node-0.10/index.js new file mode 100755 index 000000000..88a3bfc05 --- /dev/null +++ b/node_modules/eachr/edition-node-0.10/index.js @@ -0,0 +1,57 @@ +/* eslint no-cond-assign:0 */ +'use strict'; // Import + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } + +function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +var typeChecker = require('typechecker'); // Eachr + + +module.exports = function eachr(subject, callback) { + // Handle + if (typeChecker.isArray(subject)) { + for (var key = 0; key < subject.length; ++key) { + var value = subject[key]; + + if (callback.call(subject, value, key, subject) === false) { + break; + } + } + } else if (typeChecker.isPlainObject(subject)) { + for (var _key in subject) { + if (subject.hasOwnProperty(_key)) { + var _value = subject[_key]; + + if (callback.call(subject, _value, _key, subject) === false) { + break; + } + } + } + } else if (typeChecker.isMap(subject)) { + var entries = subject.entries(); + var entry; + + while (entry = entries.next().value) { + var _entry = entry, + _entry2 = _slicedToArray(_entry, 2), + _key2 = _entry2[0], + _value2 = _entry2[1]; // destructuring + + + if (callback.call(subject, _value2, _key2, subject) === false) { + break; + } + } + } else { + // Perhaps falling back to a `for of` loop here would be sensible + throw new Error('eachr does not know how to iterate what was passed to it'); + } // Return + + + return subject; +}; \ No newline at end of file diff --git a/node_modules/eachr/index.js b/node_modules/eachr/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/eachr/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/eachr/package.json b/node_modules/eachr/package.json new file mode 100644 index 000000000..219f6a8df --- /dev/null +++ b/node_modules/eachr/package.json @@ -0,0 +1,199 @@ +{ + "name": "eachr", + "version": "3.3.0", + "description": "Give eachr an item to iterate (array, object or map) and an iterator, then in return eachr gives iterator the value and key of each item, and will stop if the iterator returned false.", + "homepage": "https://github.com/bevry/eachr", + "license": "MIT", + "keywords": [ + "flow", + "each", + "cycle", + "forEach", + "map", + "object", + "array" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": "https://bevry.me/fund", + "author": "2011+ Bevry Pty Ltd (http://bevry.me)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Sean Fridman (www.seanfridman.com)", + "Rob Loach (http://robloach.net)", + "Sean Fridman (http://seanfridman.com)" + ], + "bugs": { + "url": "https://github.com/bevry/eachr/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/eachr.git" + }, + "engines": { + "node": ">=0.10" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "esnext compiled for browsers with require for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "esnext compiled for node.js 0.10 with require for modules", + "directory": "edition-node-0.10", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "main": "index.js", + "browser": "edition-browsers/index.js", + "dependencies": { + "editions": "^2.2.0", + "typechecker": "^4.9.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "assert-helpers": "4.10.0", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.2.1", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-babel": "^5.3.0", + "eslint-plugin-prettier": "^3.1.1", + "kava": "^3.2.0", + "prettier": "^1.19.1", + "projectz": "^1.9.0", + "semver": "^6.3.0", + "valid-directory": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.10", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.10": "env BABEL_ENV=edition-node-0.10 babel --out-dir ./edition-node-0.10 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:projectz", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": "defaults", + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + }, + "edition-node-0.10": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.10" + }, + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/eachr/source/index.js b/node_modules/eachr/source/index.js new file mode 100755 index 000000000..7bcef208e --- /dev/null +++ b/node_modules/eachr/source/index.js @@ -0,0 +1,42 @@ +/* eslint no-cond-assign:0 */ +'use strict' + +// Import +const typeChecker = require('typechecker') + +// Eachr +module.exports = function eachr(subject, callback) { + // Handle + if (typeChecker.isArray(subject)) { + for (let key = 0; key < subject.length; ++key) { + const value = subject[key] + if (callback.call(subject, value, key, subject) === false) { + break + } + } + } else if (typeChecker.isPlainObject(subject)) { + for (const key in subject) { + if (subject.hasOwnProperty(key)) { + const value = subject[key] + if (callback.call(subject, value, key, subject) === false) { + break + } + } + } + } else if (typeChecker.isMap(subject)) { + const entries = subject.entries() + let entry + while ((entry = entries.next().value)) { + const [key, value] = entry // destructuring + if (callback.call(subject, value, key, subject) === false) { + break + } + } + } else { + // Perhaps falling back to a `for of` loop here would be sensible + throw new Error('eachr does not know how to iterate what was passed to it') + } + + // Return + return subject +} diff --git a/node_modules/ecc-jsbn/LICENSE b/node_modules/ecc-jsbn/LICENSE new file mode 100755 index 000000000..f668fefc6 --- /dev/null +++ b/node_modules/ecc-jsbn/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Jeremie Miller + +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/node_modules/ecc-jsbn/README.md b/node_modules/ecc-jsbn/README.md new file mode 100755 index 000000000..b5d0b9de9 --- /dev/null +++ b/node_modules/ecc-jsbn/README.md @@ -0,0 +1,8 @@ +ecc-jsbn +======== + +ECC package based on [jsbn](https://github.com/andyperlitch/jsbn) from [Tom Wu](http://www-cs-students.stanford.edu/~tjw/). + +This is a subset of the same interface as the [node compiled module](https://github.com/quartzjer/ecc), but works in the browser too. + +Also uses point compression now from [https://github.com/kaielvin](https://github.com/kaielvin/jsbn-ec-point-compression). diff --git a/node_modules/ecc-jsbn/index.js b/node_modules/ecc-jsbn/index.js new file mode 100755 index 000000000..fb19a1d6f --- /dev/null +++ b/node_modules/ecc-jsbn/index.js @@ -0,0 +1,58 @@ +var crypto = require("crypto"); +var BigInteger = require("jsbn").BigInteger; +var ECPointFp = require("./lib/ec.js").ECPointFp; +var Buffer = require("safer-buffer").Buffer; +exports.ECCurves = require("./lib/sec.js"); + +// zero prepad +function unstupid(hex,len) +{ + return (hex.length >= len) ? hex : unstupid("0"+hex,len); +} + +exports.ECKey = function(curve, key, isPublic) +{ + var priv; + var c = curve(); + var n = c.getN(); + var bytes = Math.floor(n.bitLength()/8); + + if(key) + { + if(isPublic) + { + var curve = c.getCurve(); +// var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format +// var y = key.slice(bytes+1); +// this.P = new ECPointFp(curve, +// curve.fromBigInteger(new BigInteger(x.toString("hex"), 16)), +// curve.fromBigInteger(new BigInteger(y.toString("hex"), 16))); + this.P = curve.decodePointHex(key.toString("hex")); + }else{ + if(key.length != bytes) return false; + priv = new BigInteger(key.toString("hex"), 16); + } + }else{ + var n1 = n.subtract(BigInteger.ONE); + var r = new BigInteger(crypto.randomBytes(n.bitLength())); + priv = r.mod(n1).add(BigInteger.ONE); + this.P = c.getG().multiply(priv); + } + if(this.P) + { +// var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2); +// this.PublicKey = Buffer.from("04"+pubhex,"hex"); + this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),"hex"); + } + if(priv) + { + this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),"hex"); + this.deriveSharedSecret = function(key) + { + if(!key || !key.P) return false; + var S = key.P.multiply(priv); + return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),"hex"); + } + } +} + diff --git a/node_modules/ecc-jsbn/lib/LICENSE-jsbn b/node_modules/ecc-jsbn/lib/LICENSE-jsbn new file mode 100755 index 000000000..24502a9cf --- /dev/null +++ b/node_modules/ecc-jsbn/lib/LICENSE-jsbn @@ -0,0 +1,40 @@ +Licensing +--------- + +This software is covered under the following copyright: + +/* + * Copyright (c) 2003-2005 Tom Wu + * All Rights Reserved. + * + * 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" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF + * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * In addition, the following condition applies: + * + * All redistributions must retain an intact copy of this copyright notice + * and disclaimer. + */ + +Address all questions regarding this license to: + + Tom Wu + tjw@cs.Stanford.EDU diff --git a/node_modules/ecc-jsbn/lib/ec.js b/node_modules/ecc-jsbn/lib/ec.js new file mode 100755 index 000000000..3852671ec --- /dev/null +++ b/node_modules/ecc-jsbn/lib/ec.js @@ -0,0 +1,561 @@ +// Basic Javascript Elliptic Curve implementation +// Ported loosely from BouncyCastle's Java EC code +// Only Fp curves implemented for now + +// Requires jsbn.js and jsbn2.js +var BigInteger = require('jsbn').BigInteger +var Barrett = BigInteger.prototype.Barrett + +// ---------------- +// ECFieldElementFp + +// constructor +function ECFieldElementFp(q,x) { + this.x = x; + // TODO if(x.compareTo(q) >= 0) error + this.q = q; +} + +function feFpEquals(other) { + if(other == this) return true; + return (this.q.equals(other.q) && this.x.equals(other.x)); +} + +function feFpToBigInteger() { + return this.x; +} + +function feFpNegate() { + return new ECFieldElementFp(this.q, this.x.negate().mod(this.q)); +} + +function feFpAdd(b) { + return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q)); +} + +function feFpSubtract(b) { + return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q)); +} + +function feFpMultiply(b) { + return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q)); +} + +function feFpSquare() { + return new ECFieldElementFp(this.q, this.x.square().mod(this.q)); +} + +function feFpDivide(b) { + return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q)); +} + +ECFieldElementFp.prototype.equals = feFpEquals; +ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger; +ECFieldElementFp.prototype.negate = feFpNegate; +ECFieldElementFp.prototype.add = feFpAdd; +ECFieldElementFp.prototype.subtract = feFpSubtract; +ECFieldElementFp.prototype.multiply = feFpMultiply; +ECFieldElementFp.prototype.square = feFpSquare; +ECFieldElementFp.prototype.divide = feFpDivide; + +// ---------------- +// ECPointFp + +// constructor +function ECPointFp(curve,x,y,z) { + this.curve = curve; + this.x = x; + this.y = y; + // Projective coordinates: either zinv == null or z * zinv == 1 + // z and zinv are just BigIntegers, not fieldElements + if(z == null) { + this.z = BigInteger.ONE; + } + else { + this.z = z; + } + this.zinv = null; + //TODO: compression flag +} + +function pointFpGetX() { + if(this.zinv == null) { + this.zinv = this.z.modInverse(this.curve.q); + } + var r = this.x.toBigInteger().multiply(this.zinv); + this.curve.reduce(r); + return this.curve.fromBigInteger(r); +} + +function pointFpGetY() { + if(this.zinv == null) { + this.zinv = this.z.modInverse(this.curve.q); + } + var r = this.y.toBigInteger().multiply(this.zinv); + this.curve.reduce(r); + return this.curve.fromBigInteger(r); +} + +function pointFpEquals(other) { + if(other == this) return true; + if(this.isInfinity()) return other.isInfinity(); + if(other.isInfinity()) return this.isInfinity(); + var u, v; + // u = Y2 * Z1 - Y1 * Z2 + u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q); + if(!u.equals(BigInteger.ZERO)) return false; + // v = X2 * Z1 - X1 * Z2 + v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q); + return v.equals(BigInteger.ZERO); +} + +function pointFpIsInfinity() { + if((this.x == null) && (this.y == null)) return true; + return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO); +} + +function pointFpNegate() { + return new ECPointFp(this.curve, this.x, this.y.negate(), this.z); +} + +function pointFpAdd(b) { + if(this.isInfinity()) return b; + if(b.isInfinity()) return this; + + // u = Y2 * Z1 - Y1 * Z2 + var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q); + // v = X2 * Z1 - X1 * Z2 + var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q); + + if(BigInteger.ZERO.equals(v)) { + if(BigInteger.ZERO.equals(u)) { + return this.twice(); // this == b, so double + } + return this.curve.getInfinity(); // this = -b, so infinity + } + + var THREE = new BigInteger("3"); + var x1 = this.x.toBigInteger(); + var y1 = this.y.toBigInteger(); + var x2 = b.x.toBigInteger(); + var y2 = b.y.toBigInteger(); + + var v2 = v.square(); + var v3 = v2.multiply(v); + var x1v2 = x1.multiply(v2); + var zu2 = u.square().multiply(this.z); + + // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3) + var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q); + // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3 + var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q); + // z3 = v^3 * z1 * z2 + var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q); + + return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); +} + +function pointFpTwice() { + if(this.isInfinity()) return this; + if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity(); + + // TODO: optimized handling of constants + var THREE = new BigInteger("3"); + var x1 = this.x.toBigInteger(); + var y1 = this.y.toBigInteger(); + + var y1z1 = y1.multiply(this.z); + var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q); + var a = this.curve.a.toBigInteger(); + + // w = 3 * x1^2 + a * z1^2 + var w = x1.square().multiply(THREE); + if(!BigInteger.ZERO.equals(a)) { + w = w.add(this.z.square().multiply(a)); + } + w = w.mod(this.curve.q); + //this.curve.reduce(w); + // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1) + var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q); + // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3 + var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q); + // z3 = 8 * (y1 * z1)^3 + var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q); + + return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); +} + +// Simple NAF (Non-Adjacent Form) multiplication algorithm +// TODO: modularize the multiplication algorithm +function pointFpMultiply(k) { + if(this.isInfinity()) return this; + if(k.signum() == 0) return this.curve.getInfinity(); + + var e = k; + var h = e.multiply(new BigInteger("3")); + + var neg = this.negate(); + var R = this; + + var i; + for(i = h.bitLength() - 2; i > 0; --i) { + R = R.twice(); + + var hBit = h.testBit(i); + var eBit = e.testBit(i); + + if (hBit != eBit) { + R = R.add(hBit ? this : neg); + } + } + + return R; +} + +// Compute this*j + x*k (simultaneous multiplication) +function pointFpMultiplyTwo(j,x,k) { + var i; + if(j.bitLength() > k.bitLength()) + i = j.bitLength() - 1; + else + i = k.bitLength() - 1; + + var R = this.curve.getInfinity(); + var both = this.add(x); + while(i >= 0) { + R = R.twice(); + if(j.testBit(i)) { + if(k.testBit(i)) { + R = R.add(both); + } + else { + R = R.add(this); + } + } + else { + if(k.testBit(i)) { + R = R.add(x); + } + } + --i; + } + + return R; +} + +ECPointFp.prototype.getX = pointFpGetX; +ECPointFp.prototype.getY = pointFpGetY; +ECPointFp.prototype.equals = pointFpEquals; +ECPointFp.prototype.isInfinity = pointFpIsInfinity; +ECPointFp.prototype.negate = pointFpNegate; +ECPointFp.prototype.add = pointFpAdd; +ECPointFp.prototype.twice = pointFpTwice; +ECPointFp.prototype.multiply = pointFpMultiply; +ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo; + +// ---------------- +// ECCurveFp + +// constructor +function ECCurveFp(q,a,b) { + this.q = q; + this.a = this.fromBigInteger(a); + this.b = this.fromBigInteger(b); + this.infinity = new ECPointFp(this, null, null); + this.reducer = new Barrett(this.q); +} + +function curveFpGetQ() { + return this.q; +} + +function curveFpGetA() { + return this.a; +} + +function curveFpGetB() { + return this.b; +} + +function curveFpEquals(other) { + if(other == this) return true; + return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b)); +} + +function curveFpGetInfinity() { + return this.infinity; +} + +function curveFpFromBigInteger(x) { + return new ECFieldElementFp(this.q, x); +} + +function curveReduce(x) { + this.reducer.reduce(x); +} + +// for now, work with hex strings because they're easier in JS +function curveFpDecodePointHex(s) { + switch(parseInt(s.substr(0,2), 16)) { // first byte + case 0: + return this.infinity; + case 2: + case 3: + // point compression not supported yet + return null; + case 4: + case 6: + case 7: + var len = (s.length - 2) / 2; + var xHex = s.substr(2, len); + var yHex = s.substr(len+2, len); + + return new ECPointFp(this, + this.fromBigInteger(new BigInteger(xHex, 16)), + this.fromBigInteger(new BigInteger(yHex, 16))); + + default: // unsupported + return null; + } +} + +function curveFpEncodePointHex(p) { + if (p.isInfinity()) return "00"; + var xHex = p.getX().toBigInteger().toString(16); + var yHex = p.getY().toBigInteger().toString(16); + var oLen = this.getQ().toString(16).length; + if ((oLen % 2) != 0) oLen++; + while (xHex.length < oLen) { + xHex = "0" + xHex; + } + while (yHex.length < oLen) { + yHex = "0" + yHex; + } + return "04" + xHex + yHex; +} + +ECCurveFp.prototype.getQ = curveFpGetQ; +ECCurveFp.prototype.getA = curveFpGetA; +ECCurveFp.prototype.getB = curveFpGetB; +ECCurveFp.prototype.equals = curveFpEquals; +ECCurveFp.prototype.getInfinity = curveFpGetInfinity; +ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger; +ECCurveFp.prototype.reduce = curveReduce; +//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex; +ECCurveFp.prototype.encodePointHex = curveFpEncodePointHex; + +// from: https://github.com/kaielvin/jsbn-ec-point-compression +ECCurveFp.prototype.decodePointHex = function(s) +{ + var yIsEven; + switch(parseInt(s.substr(0,2), 16)) { // first byte + case 0: + return this.infinity; + case 2: + yIsEven = false; + case 3: + if(yIsEven == undefined) yIsEven = true; + var len = s.length - 2; + var xHex = s.substr(2, len); + var x = this.fromBigInteger(new BigInteger(xHex,16)); + var alpha = x.multiply(x.square().add(this.getA())).add(this.getB()); + var beta = alpha.sqrt(); + + if (beta == null) throw "Invalid point compression"; + + var betaValue = beta.toBigInteger(); + if (betaValue.testBit(0) != yIsEven) + { + // Use the other root + beta = this.fromBigInteger(this.getQ().subtract(betaValue)); + } + return new ECPointFp(this,x,beta); + case 4: + case 6: + case 7: + var len = (s.length - 2) / 2; + var xHex = s.substr(2, len); + var yHex = s.substr(len+2, len); + + return new ECPointFp(this, + this.fromBigInteger(new BigInteger(xHex, 16)), + this.fromBigInteger(new BigInteger(yHex, 16))); + + default: // unsupported + return null; + } +} +ECCurveFp.prototype.encodeCompressedPointHex = function(p) +{ + if (p.isInfinity()) return "00"; + var xHex = p.getX().toBigInteger().toString(16); + var oLen = this.getQ().toString(16).length; + if ((oLen % 2) != 0) oLen++; + while (xHex.length < oLen) + xHex = "0" + xHex; + var yPrefix; + if(p.getY().toBigInteger().isEven()) yPrefix = "02"; + else yPrefix = "03"; + + return yPrefix + xHex; +} + + +ECFieldElementFp.prototype.getR = function() +{ + if(this.r != undefined) return this.r; + + this.r = null; + var bitLength = this.q.bitLength(); + if (bitLength > 128) + { + var firstWord = this.q.shiftRight(bitLength - 64); + if (firstWord.intValue() == -1) + { + this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q); + } + } + return this.r; +} +ECFieldElementFp.prototype.modMult = function(x1,x2) +{ + return this.modReduce(x1.multiply(x2)); +} +ECFieldElementFp.prototype.modReduce = function(x) +{ + if (this.getR() != null) + { + var qLen = q.bitLength(); + while (x.bitLength() > (qLen + 1)) + { + var u = x.shiftRight(qLen); + var v = x.subtract(u.shiftLeft(qLen)); + if (!this.getR().equals(BigInteger.ONE)) + { + u = u.multiply(this.getR()); + } + x = u.add(v); + } + while (x.compareTo(q) >= 0) + { + x = x.subtract(q); + } + } + else + { + x = x.mod(q); + } + return x; +} +ECFieldElementFp.prototype.sqrt = function() +{ + if (!this.q.testBit(0)) throw "unsupported"; + + // p mod 4 == 3 + if (this.q.testBit(1)) + { + var z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q)); + return z.square().equals(this) ? z : null; + } + + // p mod 4 == 1 + var qMinusOne = this.q.subtract(BigInteger.ONE); + + var legendreExponent = qMinusOne.shiftRight(1); + if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE))) + { + return null; + } + + var u = qMinusOne.shiftRight(2); + var k = u.shiftLeft(1).add(BigInteger.ONE); + + var Q = this.x; + var fourQ = modDouble(modDouble(Q)); + + var U, V; + do + { + var P; + do + { + P = new BigInteger(this.q.bitLength(), new SecureRandom()); + } + while (P.compareTo(this.q) >= 0 + || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne))); + + var result = this.lucasSequence(P, Q, k); + U = result[0]; + V = result[1]; + + if (this.modMult(V, V).equals(fourQ)) + { + // Integer division by 2, mod q + if (V.testBit(0)) + { + V = V.add(q); + } + + V = V.shiftRight(1); + + return new ECFieldElementFp(q,V); + } + } + while (U.equals(BigInteger.ONE) || U.equals(qMinusOne)); + + return null; +} +ECFieldElementFp.prototype.lucasSequence = function(P,Q,k) +{ + var n = k.bitLength(); + var s = k.getLowestSetBit(); + + var Uh = BigInteger.ONE; + var Vl = BigInteger.TWO; + var Vh = P; + var Ql = BigInteger.ONE; + var Qh = BigInteger.ONE; + + for (var j = n - 1; j >= s + 1; --j) + { + Ql = this.modMult(Ql, Qh); + + if (k.testBit(j)) + { + Qh = this.modMult(Ql, Q); + Uh = this.modMult(Uh, Vh); + Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); + Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1))); + } + else + { + Qh = Ql; + Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql)); + Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); + Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1))); + } + } + + Ql = this.modMult(Ql, Qh); + Qh = this.modMult(Ql, Q); + Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql)); + Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); + Ql = this.modMult(Ql, Qh); + + for (var j = 1; j <= s; ++j) + { + Uh = this.modMult(Uh, Vl); + Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1))); + Ql = this.modMult(Ql, Ql); + } + + return [ Uh, Vl ]; +} + +var exports = { + ECCurveFp: ECCurveFp, + ECPointFp: ECPointFp, + ECFieldElementFp: ECFieldElementFp +} + +module.exports = exports diff --git a/node_modules/ecc-jsbn/lib/sec.js b/node_modules/ecc-jsbn/lib/sec.js new file mode 100755 index 000000000..5eec8179f --- /dev/null +++ b/node_modules/ecc-jsbn/lib/sec.js @@ -0,0 +1,170 @@ +// Named EC curves + +// Requires ec.js, jsbn.js, and jsbn2.js +var BigInteger = require('jsbn').BigInteger +var ECCurveFp = require('./ec.js').ECCurveFp + + +// ---------------- +// X9ECParameters + +// constructor +function X9ECParameters(curve,g,n,h) { + this.curve = curve; + this.g = g; + this.n = n; + this.h = h; +} + +function x9getCurve() { + return this.curve; +} + +function x9getG() { + return this.g; +} + +function x9getN() { + return this.n; +} + +function x9getH() { + return this.h; +} + +X9ECParameters.prototype.getCurve = x9getCurve; +X9ECParameters.prototype.getG = x9getG; +X9ECParameters.prototype.getN = x9getN; +X9ECParameters.prototype.getH = x9getH; + +// ---------------- +// SECNamedCurves + +function fromHex(s) { return new BigInteger(s, 16); } + +function secp128r1() { + // p = 2^128 - 2^97 - 1 + var p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); + var a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"); + var b = fromHex("E87579C11079F43DD824993C2CEE5ED3"); + //byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679"); + var n = fromHex("FFFFFFFE0000000075A30D1B9038A115"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "161FF7528B899B2D0C28607CA52C5B86" + + "CF5AC8395BAFEB13C02DA292DDED7A83"); + return new X9ECParameters(curve, G, n, h); +} + +function secp160k1() { + // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); + var a = BigInteger.ZERO; + var b = fromHex("7"); + //byte[] S = null; + var n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB" + + "938CF935318FDCED6BC28286531733C3F03C4FEE"); + return new X9ECParameters(curve, G, n, h); +} + +function secp160r1() { + // p = 2^160 - 2^31 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"); + var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"); + var b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"); + //byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345"); + var n = fromHex("0100000000000000000001F4C8F927AED3CA752257"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "4A96B5688EF573284664698968C38BB913CBFC82" + + "23A628553168947D59DCC912042351377AC5FB32"); + return new X9ECParameters(curve, G, n, h); +} + +function secp192k1() { + // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"); + var a = BigInteger.ZERO; + var b = fromHex("3"); + //byte[] S = null; + var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D" + + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"); + return new X9ECParameters(curve, G, n, h); +} + +function secp192r1() { + // p = 2^192 - 2^64 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"); + var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"); + var b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"); + //byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5"); + var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012" + + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811"); + return new X9ECParameters(curve, G, n, h); +} + +function secp224r1() { + // p = 2^224 - 2^96 + 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); + var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"); + var b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"); + //byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); + var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" + + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"); + return new X9ECParameters(curve, G, n, h); +} + +function secp256r1() { + // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1 + var p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"); + var a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"); + var b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); + //byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90"); + var n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" + + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"); + return new X9ECParameters(curve, G, n, h); +} + +// TODO: make this into a proper hashtable +function getSECCurveByName(name) { + if(name == "secp128r1") return secp128r1(); + if(name == "secp160k1") return secp160k1(); + if(name == "secp160r1") return secp160r1(); + if(name == "secp192k1") return secp192k1(); + if(name == "secp192r1") return secp192r1(); + if(name == "secp224r1") return secp224r1(); + if(name == "secp256r1") return secp256r1(); + return null; +} + +module.exports = { + "secp128r1":secp128r1, + "secp160k1":secp160k1, + "secp160r1":secp160r1, + "secp192k1":secp192k1, + "secp192r1":secp192r1, + "secp224r1":secp224r1, + "secp256r1":secp256r1 +} diff --git a/node_modules/ecc-jsbn/package.json b/node_modules/ecc-jsbn/package.json new file mode 100755 index 000000000..3612fcf1d --- /dev/null +++ b/node_modules/ecc-jsbn/package.json @@ -0,0 +1,40 @@ +{ + "name": "ecc-jsbn", + "version": "0.1.2", + "description": "ECC JS code based on JSBN", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/quartzjer/ecc-jsbn.git" + }, + "keywords": [ + "jsbn", + "ecc", + "browserify" + ], + "author": { + "name": "Jeremie Miller", + "email": "jeremie@jabber.org", + "url": "http://jeremie.com/" + }, + "maintainers": [ + { + "name": "Jeremie Miller", + "email": "jeremie@jabber.org", + "url": "http://jeremie.com/" + }, + { + "name": "Ryan Bennett", + "url": "https://github.com/rynomad" + } + ], + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/quartzjer/ecc-jsbn/issues" + }, + "homepage": "https://github.com/quartzjer/ecc-jsbn" +} diff --git a/node_modules/ecc-jsbn/test.js b/node_modules/ecc-jsbn/test.js new file mode 100755 index 000000000..bd52abfd9 --- /dev/null +++ b/node_modules/ecc-jsbn/test.js @@ -0,0 +1,14 @@ +var ecc = require("./index.js"); +var key1 = new ecc.ECKey(ecc.ECCurves.secp160r1); +var key2 = new ecc.ECKey(ecc.ECCurves.secp160r1); +console.log(key1.deriveSharedSecret(key2)); +var key3 = new ecc.ECKey(ecc.ECCurves.secp160r1,key1.PrivateKey); +var key4 = new ecc.ECKey(ecc.ECCurves.secp160r1,key2.PublicKey,true); +console.log(key3.deriveSharedSecret(key4)); + +var key1 = new ecc.ECKey(ecc.ECCurves.secp256r1); +var key2 = new ecc.ECKey(ecc.ECCurves.secp256r1); +console.log(key1.deriveSharedSecret(key2)); +var key3 = new ecc.ECKey(ecc.ECCurves.secp256r1,key1.PrivateKey); +var key4 = new ecc.ECKey(ecc.ECCurves.secp256r1,key2.PublicKey,true); +console.log(key3.deriveSharedSecret(key4)); diff --git a/node_modules/editions/.dependabot/config.yml b/node_modules/editions/.dependabot/config.yml new file mode 100644 index 000000000..ffaab2e86 --- /dev/null +++ b/node_modules/editions/.dependabot/config.yml @@ -0,0 +1,12 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: weekly + allowed_updates: + - match: + update_type: security + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/editions/HISTORY.md b/node_modules/editions/HISTORY.md new file mode 100644 index 000000000..a614c327c --- /dev/null +++ b/node_modules/editions/HISTORY.md @@ -0,0 +1,147 @@ +# History + +## v2.3.1 2020 May 21 + +- Cherry-pick the types compilation from v3 to hopefully fix the consumption error: + + ``` + node_modules/editions/source/index.ts:6:20 - error TS7016: Could not find a declaration file for module 'semver'. '/Users/balupton/Projects/active/envfile/node_modules/semver/semver.js' implicitly has an 'any' type. + Try `npm install @types/semver` if it exists or add a new declaration (.d.ts) file containing `declare module 'semver';` + 6 import semver from 'semver' + ``` + +## v2.3.0 2019 December 11 + +- Rewrote in TypeScript +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v2.2.0 2019 September 11 + +- Removed the `browser` edition introduced in v2.0.1 as the Editions Autloader has no use in the web browser +- Updated dependencies + +## v2.1.3 2018 December 29 + +- Updated `errlop` dependency, should function to fix [issue #2](https://github.com/bevry/errlop/issues/2) + +## v2.1.2 2018 December 29 + +Iternal change of not assuming the error `code` property exists, as on certain node versions its existance is denied. This should fix the following error: + +``` + +./node_modules/editions/edition-node-0.8/index.js:310 +if (editionError.code.indexOf('unsupported-edition-engines-node-version') === 0) { +^ + +TypeError: Cannot read property 'indexOf' of undefined + +``` + +## v2.1.1 2018 December 29 + +Internal change of requiring a specific [Errlop](https://github.com/bevry/errlop) edition, which should function as a workaround for [errlop#2](https://github.com/bevry/errlop/issues/2) to fix the following error: + +``` + +./node_modules/errlop/index.js:4 +module.exports = require('editions').requirePackage(\_\_dirname, require) +^ + +TypeError: require(...).requirePackage is not a function + +``` + +## v2.1.0 2018 November 15 + +- If none of the editions for a package match the current node version, editions will try to find a compatible package by converting strict version ranges likes `4 || 6 || 8 || 10` to looser ones like `>=4`, and if that fails, then it will attempt to load the last edition for the environment. + - This brings editions handling of engines closer in line with how node handles it, which is as a warning/recomendation, rather than a requirement/enforcement. + - This has the benefit that edition authors can specify ranges as the specific versions that they have tested the edition against that pass, rather than having to omit that information for runtime compatibility. + - As such editions will now automatically select the edition with guaranteed support for the environment, and if there are none with guaranteed support, then editions will select the one is most likely supported, and if there are none that are likely supported, then it will try the last edition, which should be the most compatible edition. + - This is timely, as node v11 is now the version most developers use, yet if edition authors specified only LTS releases, then the editions autoloader would reject loading on v11, despite compatibility being likely with the most upper edition. + - This behaviour is dictated by the new `strict` option, which omission of a value enables the above behaviour. +- Change `syntaxes` to `tags`, with backwards compatibility. This applies to edition specifications, as well as for the blacklist environment variable which is now named `EDITIONS_TAG_BLACKLIST`. +- Added codes to the different types of errors we may produce. +- Upgraded babel from v6 to v7 +- Documentation has swapped from Documentation.js to JSDoc with the Minami theme. + +## v2.0.2 2018 September 3 + +- Fixed `Error: Cannot find module 'editions'` on Windows (caused by edition directories containing `:` which is unsupported on Windows) + - Regression in v2.0.0 + - Closes + - [ungit issue #1130](https://github.com/FredrikNoren/ungit/issues/1130) + - [getmac issue #39](https://github.com/bevry/getmac/issues/39) + - [docpad issue #1088](https://github.com/docpad/docpad/issues/1088) + - [bevry thread #240](https://discuss.bevry.me/t/error-cannot-find-module-editions/240) + +## v2.0.1 2018 August 24 + +- Fixed potential `Error: Cannot find module 'editions'` (causes by `main` pointing to a legacy location + - Regression in v2.0.0 +- Added an edition for browsers + +## v2.0.0 2018 July 27 + +- Edition entries must now make use of the fields: `description`, `directory`, `entry`, and the new `engines` field (which follows the [`package.json:engines` spec](https://docs.npmjs.com/files/package.json#engines)). +- In version 1, if an edition failed to load, its syntax combination would be blacklisted. This functionality has been removed. The `engines` field is a better replacement. The `syntaxes` field remains optional, as it is still useful for user configured blacklisting and ecosystem tooling. +- Errors reported by the autoloader have improved readability thanks to [Errlop](https://github.com/bevry/errlop) +- Updated base files + +## v1.3.4 2018 January 31 + +- Updated base files + +## v1.3.3 2016 November 4 + +- Properly add node 0.8 support + +## v1.3.2 2016 November 4 + +- Added node 0.8 support + +## v1.3.1 2016 October 11 + +- Fixed failure to load editions that had the edition directory within the edition entry + - Thanks to [Jordan Harband](https://github.com/ljharb) for [issue #20](https://github.com/bevry/editions/issues/20) + +## v1.3.0 2016 October 11 + +- Added support for `EDITIONS_SYNTAX_BLACKLIST` environment variable + - Thanks to [Damon Maria](https://github.com/damonmaria) for [issue #10](https://github.com/bevry/editions/issues/10) +- Dropped need for `DEBUG_BEVRY_EDITIONS` as failures will not output all the necessary debugging information + +## v1.2.1 2016 October 10 + +- Change `esnext` skip from v8 engines < 4 to node engines < 0.12 + +## v1.2.0 2016 October 10 + +- Skip syntaxes that require preprocessors +- Skip `import` syntax, as the `module` field inside `package.json` skips the autoloader if supported +- Skip `esnext` syntax on v8 engines < 4 + +## v1.1.2 2016 June 16 + +- Parent errors are now displayed in a more sensible way + +## v1.1.1 2016 March 20 + +- Errors and debug messages are now more useful + - Closes https://github.com/bevry/editions/issues/5 + +## v1.1.0 2016 March 20 + +- Added support for custom entry point overrides +- Debugging goes to `console.error` (stderr) rather than `console.log` (stdout) + - Closes https://github.com/bevry/editions/issues/2 +- Added tests + - Closes https://github.com/bevry/editions/issues/4 + +## v1.0.1 2016 March 9 + +- Initial release + +``` + +``` diff --git a/node_modules/editions/LICENSE.md b/node_modules/editions/LICENSE.md new file mode 100644 index 000000000..79d46a68d --- /dev/null +++ b/node_modules/editions/LICENSE.md @@ -0,0 +1,23 @@ + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + +

MIT License

+ +
+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 (including the next paragraph) 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.
+
+ + diff --git a/node_modules/editions/README.md b/node_modules/editions/README.md new file mode 100644 index 000000000..43d1ffe37 --- /dev/null +++ b/node_modules/editions/README.md @@ -0,0 +1,111 @@ + + +

editions

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+GitHub Sponsors donate button +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Publish multiple editions for your JavaScript packages consistently and easily (e.g. source edition, esnext edition, es2015 edition) + + + + +## Discover + +[Watch the talk.](https://youtu.be/IAB8_UlcNWI) + +[Read the Documentation.](https://editions.bevry.me) + +[View the Editions Autoloader API documentation.](http://master.editions.bevry.surge.sh/docs/) + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Contribute

+ +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +GitHub Sponsors donate button +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/editions/compiled-types/index.d.ts b/node_modules/editions/compiled-types/index.d.ts new file mode 100644 index 000000000..e7c7e940c --- /dev/null +++ b/node_modules/editions/compiled-types/index.d.ts @@ -0,0 +1,95 @@ +/// +/** Edition entries must conform to the following specification. */ +export interface Edition { + /** + * Use this property to decribe the edition in human readable terms. Such as what it does and who it is for. It is used to reference the edition in user facing reporting, such as error messages. + * @example "esnext source code with require for modules" + */ + description: String; + /** + * The location to where this directory is located. It should be a relative path from the `package.json` file. + * @example "source" + */ + directory: string; + /** + * The default entry location for this edition, relative to the edition's directory. + * @example "index.js" + */ + entry?: string; + /** + * Any keywords you wish to associate to the edition. Useful for various ecosystem tooling, such as automatic ESNext lint configuration if the `esnext` tag is present in the source edition tags. Consumers also make use of this via {@link EDITIONS_TAG_BLACKLIST} for preventing loading editions that contain a blacklisted tag. Previously this field was named `syntaxes`. + * @example ["javascript", "esnext", "require"] + */ + tags?: string[]; + /** @alias tags */ + syntaxes?: Edition['tags']; + /** + * This field is used to specific which Node.js and Browser environments this edition supports. If `false` this edition does not support either. If `node` is a string, it should be a semver range of node.js versions that the edition targets. If `browsers` is a string, it should be a [browserlist](https://github.com/browserslist/browserslist) value of the specific browser values the edition targets. If `node` or `browsers` is true, it indicates that this edition is compatible with those environments. + * @example + * { + * "description": "esnext source code with require for modules", + * "directory": "source", + * "entry": "index.js", + * "tags": [ + * "javascript", + * "esnext", + * "require" + * ], + * "engines": { + * "node": ">=6", + * "browsers": "defaults" + * } + * } + */ + engines?: false | { + [engine: string]: string | boolean; + }; +} +/** These are the various options that you can use to customise the behaviour of certain methods. */ +export interface EditionOptions { + /** The require method of the calling module, used to ensure require paths remain correct. */ + require: Function; + /** If provided, this is used for debugging. */ + packagePath?: string; + /** If provided, any error loading an edition will be logged. By default, errors are only logged if all editions failed. If not provided, process.env.EDITIONS_VERBOSE is used. */ + verbose?: boolean; + /** If `true`, then only exact version matches will be loaded. If `false`, then likely matches using {@link simplifyRange} will be evaluated, with a fallback to the last. If missing, then `true` is attempted first and if no result, then `false` is attempted. */ + strict?: boolean; + /** If provided, this will be the cwd for entries. */ + cwd?: string; + /** If provided, should be a relative path to the entry point of the edition. */ + entry?: string; + /** If provided, should be the name of the package that we are loading the editions for. */ + package?: string; + /** If not provided, will use process.stderr instead. It is the stream that verbose errors are logged to. */ + stderr?: NodeJS.WritableStream; +} +/** + * Attempt to load a specific {@link Edition}. + * @returns The result of the loaded edition. + * @throws An error if the edition failed to load. + */ +export declare function loadEdition(edition: Edition, opts: EditionOptions): any; +/** + * Attempt to require an {@link Edition}, based on its compatibility with the current environment, such as {@link NODE_VERSION} and {@link EDITIONS_TAG_BLACKLIST} compatibility. + * If compatibility is established with the environment, it will load the edition using {@link loadEdition}. + * @returns The result of the loaded edition + * @throws An error if the edition failed to load + */ +export declare function requireEdition(edition: Edition, opts: EditionOptions): any; +/** + * Cycles through a list of editions, returning the require result of the first suitable {@link Edition} that it was able to load. + * Editions should be ordered from most preferable first, to least desirable last. + * Providing the editions configuration is valid, individual edition handling is forwarded to {@link requireEdition}. + * @returns The result of the loaded edition. + * @throws An error if a suitable edition was unable to be resolved. + */ +export declare function requireEditions(editions: Edition[], opts: EditionOptions): any; +/** + * Cycle through the editions for a package and require the correct one. + * Providing the package configuration is valid, editions handling is forwarded to {@link requireEditions}. + * @returns The result of the loaded edition. + * @throws An error if a suitable edition was unable to be resolved. + */ +export declare function requirePackage(cwd: EditionOptions['cwd'], require: EditionOptions['require'], entry: EditionOptions['entry']): any; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/editions/compiled-types/index.d.ts.map b/node_modules/editions/compiled-types/index.d.ts.map new file mode 100644 index 000000000..b2d1204aa --- /dev/null +++ b/node_modules/editions/compiled-types/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAkEA,mEAAmE;AACnE,MAAM,WAAW,OAAO;IACvB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,kBAAkB;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CACxD;AAED,oGAAoG;AACpG,MAAM,WAAW,cAAc;IAC9B,6FAA6F;IAC7F,OAAO,EAAE,QAAQ,CAAA;IACjB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kLAAkL;IAClL,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qQAAqQ;IACrQ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4GAA4G;IAC5G,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B;AAoBD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,GAAG,CAwBvE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,GAAG,CA0F1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,cAAc,GAClB,GAAG,CAsGL;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAC1B,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,EAClC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,GAC5B,GAAG,CAML"} \ No newline at end of file diff --git a/node_modules/editions/compiled-types/util.d.ts b/node_modules/editions/compiled-types/util.d.ts new file mode 100644 index 000000000..b0b0f22db --- /dev/null +++ b/node_modules/editions/compiled-types/util.d.ts @@ -0,0 +1,19 @@ +import Errlop from 'errlop'; +interface ErrtionOptions { + message: string; + code: string | number; + level?: string | number; +} +interface Errtion extends Errlop, ErrtionOptions { +} +/** + * Allow code and level inputs on Errlop. + * We do this instead of a class extension, as class extensions do not interop well on node 0.8, which is our target. + */ +export declare function errtion(this: void, opts: ErrtionOptions, parent?: Errlop | Error): Errtion; +/** Converts anything to a string, by returning strings and serialising objects. */ +export declare function stringify(value: any): string; +/** Converts a version range like `4 || 6` to `>=4` */ +export declare function simplifyRange(range: string): string; +export {}; +//# sourceMappingURL=util.d.ts.map \ No newline at end of file diff --git a/node_modules/editions/compiled-types/util.d.ts.map b/node_modules/editions/compiled-types/util.d.ts.map new file mode 100644 index 000000000..371f061c0 --- /dev/null +++ b/node_modules/editions/compiled-types/util.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../source/util.ts"],"names":[],"mappings":"AAKA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,UAAU,cAAc;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,UAAU,OAAQ,SAAQ,MAAM,EAAE,cAAc;CAAG;AAEnD;;;GAGG;AACH,wBAAgB,OAAO,CACtB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GACrB,OAAO,CAMT;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAE5C;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD"} \ No newline at end of file diff --git a/node_modules/editions/edition-es5/index.js b/node_modules/editions/edition-es5/index.js new file mode 100644 index 000000000..148d5fbca --- /dev/null +++ b/node_modules/editions/edition-es5/index.js @@ -0,0 +1,286 @@ +/* eslint no-console:0 */ +'use strict'; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", { value: true }); +// Imports +var path_1 = __importDefault(require("path")); +var semver_1 = __importDefault(require("semver")); +var util_js_1 = require("./util.js"); +// As Errlop uses Editions, we should use a specific Errlop edition +// As otherwise, the circular reference may fail on some machines +// https://github.com/bevry/errlop/issues/2 +var errlop_1 = __importDefault(require("errlop")); +/** + * The current node version that we are operating within. + * It is compared in {@link requireEdition} against {@link Edition.engines}. + */ +var NODE_VERSION = process.versions.node; +/** + * Whether or not {@link EDITIONS_VERBOSE} is enabled. + * @type {bollean} + * @private + */ +var VERBOSE = process.env.EDITIONS_VERBOSE === true || + process.env.EDITIONS_VERBOSE === 'yes' || + process.env.EDITIONS_VERBOSE === 'true' || + false; +/** + * A list of the blacklisted tags. + * Data imported from {@link EDITIONS_TAG_BLACKLIST}. + */ +var BLACKLIST = ((_a = process.env.EDITIONS_TAG_BLACKLIST) === null || _a === void 0 ? void 0 : _a.split(/[, ]+/g)) || ((_b = process.env.EDITIONS_SYNTAX_BLACKLIST) === null || _b === void 0 ? void 0 : _b.split(/[, ]+/g)); +/** + * A mapping of blacklisted tags to their reasons. + * Keys are the tags. + * Values are the error instances that contain the reasoning for why/how that tag is/became blacklisted. + * Data imported from {@link EDITIONS_TAG_BLACKLIST}. + */ +var blacklist = {}; +// Create the mapping of blacklisted tags and their reasonings +if (BLACKLIST) { + for (var i = 0; i < BLACKLIST.length; ++i) { + var tag = BLACKLIST[i].trim().toLowerCase(); + blacklist[tag] = util_js_1.errtion({ + message: "The EDITIONS_TAG_BLACKLIST (aka EDITIONS_SYNTAX_BLACKLIST) environment variable blacklisted the tag [" + tag + "]", + code: 'blacklisted-tag' + }); + } +} +// Blacklist the tag 'esnext' if our node version is below 0.12 +if (semver_1.default.satisfies(NODE_VERSION, '<0.12')) { + blacklist.esnext = new Error('The esnext tag is skipped on early node versions as attempting to use esnext features will output debugging information on these node versions'); +} +/** + * Attempt to load a specific {@link Edition}. + * @returns The result of the loaded edition. + * @throws An error if the edition failed to load. + */ +function loadEdition(edition, opts) { + var entry = path_1.default.resolve(opts.cwd || '', edition.directory, opts.entry || edition.entry || ''); + if (opts.require == null) { + throw util_js_1.errtion({ + message: "Skipped edition [" + edition.description + "] as opts.require was not provided, this is probably due to a testing misconfiguration.", + code: 'unsupported-edition-require' + }); + } + try { + return opts.require(entry); + } + catch (loadError) { + // Note the error with more details + throw util_js_1.errtion({ + message: "Skipped edition [" + edition.description + "] at entry [" + entry + "] because it failed to load", + code: 'unsupported-edition-tried' + }, loadError); + } +} +exports.loadEdition = loadEdition; +/** + * Attempt to require an {@link Edition}, based on its compatibility with the current environment, such as {@link NODE_VERSION} and {@link EDITIONS_TAG_BLACKLIST} compatibility. + * If compatibility is established with the environment, it will load the edition using {@link loadEdition}. + * @returns The result of the loaded edition + * @throws An error if the edition failed to load + */ +function requireEdition(edition, opts) { + // Verify the edition is valid + if (!edition.description || + !edition.directory || + !edition.entry || + edition.engines == null) { + throw util_js_1.errtion({ + message: "Each edition must have its [description, directory, entry, engines] fields defined, yet all it had was [" + Object.keys(edition).join(', ') + "]", + code: 'unsupported-edition-malformed', + level: 'fatal' + }); + } + // Handle strict omission + if (opts.strict == null) { + try { + return requireEdition(edition, __assign(__assign({}, opts), { strict: true })); + } + catch (err) { + return requireEdition(edition, __assign(__assign({}, opts), { strict: false })); + } + } + // Verify tag support + // Convert tags into a sorted lowercase string + var tags = (edition.tags || edition.syntaxes || []) + .map(function (i) { return i.toLowerCase(); }) + .sort(); + for (var index = 0; index < tags.length; index++) { + var tag = tags[index]; + var blacklisted = blacklist[tag]; + if (blacklisted) { + throw util_js_1.errtion({ + message: "Skipping edition [" + edition.description + "] because it contained a blacklisted tag [" + tag + "]", + code: 'unsupported-edition-backlisted-tag' + }, blacklisted); + } + } + // Verify engine support + if (edition.engines === false) { + throw util_js_1.errtion({ + message: "Skipping edition [" + edition.description + "] because its engines field was false", + code: 'unsupported-edition-engine' + }); + } + if (!edition.engines.node) { + throw util_js_1.errtion({ + message: "Skipping edition [" + edition.description + "] because its .engines.node field was falsey", + code: 'unsupported-edition-engines-node' + }); + } + if (opts.strict) { + if (edition.engines.node === true) { + throw util_js_1.errtion({ + message: "Skipping edition [" + edition.description + "] because its .engines.node field was true yet we are in strict mode", + code: 'unsupported-edition-engines-node-version-true' + }); + } + else if (semver_1.default.satisfies(NODE_VERSION, edition.engines.node) === false) { + throw util_js_1.errtion({ + message: "Skipping edition [" + edition.description + "] because our current node version [" + NODE_VERSION + "] is not supported by its specific range [" + util_js_1.stringify(edition.engines.node) + "]", + code: 'unsupported-edition-engines-node-version-specific' + }); + } + } + else if (edition.engines.node !== true) { + var simplifiedRange = util_js_1.simplifyRange(edition.engines.node); + if (semver_1.default.satisfies(NODE_VERSION, simplifiedRange) === false) { + throw util_js_1.errtion({ + message: "Skipping edition [" + edition.description + "] because our current node version [" + NODE_VERSION + "] is not supported by its simplified range [" + util_js_1.stringify(simplifiedRange) + "]", + code: 'unsupported-edition-engines-node-version-simplified' + }); + } + } + // Load the edition + return loadEdition(edition, opts); +} +exports.requireEdition = requireEdition; +/** + * Cycles through a list of editions, returning the require result of the first suitable {@link Edition} that it was able to load. + * Editions should be ordered from most preferable first, to least desirable last. + * Providing the editions configuration is valid, individual edition handling is forwarded to {@link requireEdition}. + * @returns The result of the loaded edition. + * @throws An error if a suitable edition was unable to be resolved. + */ +function requireEditions(editions, opts) { + // Check + if (!editions || editions.length === 0) { + if (opts.packagePath) { + throw util_js_1.errtion({ + message: "There were no editions specified for package [" + opts.packagePath + "]", + code: 'unsupported-editions-missing' + }); + } + else { + throw util_js_1.errtion({ + message: 'There were no editions specified', + code: 'unsupported-editions-missing' + }); + } + } + // Handle strict omission + if (opts.strict == null) { + try { + return requireEditions(editions, __assign(__assign({}, opts), { strict: true })); + } + catch (err) { + return requireEditions(editions, __assign(__assign({}, opts), { strict: false })); + } + } + // Whether or not we should be verbose + var verbose = opts.verbose == null ? VERBOSE : opts.verbose; + // Capture the load result, the last error, and the fallback option + var result, loaded = false, editionsError = null, fallbackEdition = null; + // Cycle through the editions determing the above + for (var i = 0; i < editions.length; ++i) { + var edition = editions[i]; + try { + result = requireEdition(edition, opts); + loaded = true; + break; + } + catch (editionError) { + if (editionError.level === 'fatal') { + editionsError = editionError; + break; + } + else if (editionsError) { + editionsError = util_js_1.errtion(editionsError, editionError); + } + else { + editionsError = editionError; + } + // make the fallback edition one that we don't bother loading due to its engines + // also: don't assume that .code is accessible, as it may not be, even if it should be, due to the way different environments behave + if (String(editionError.code || '').indexOf('unsupported-edition-engines-node-version') === 0) { + fallbackEdition = edition; + } + } + } + // if no edition was suitable for our environment, then try the fallback if it exists + // that is to say, ignore its engines.node + if (opts.strict === false && loaded === false && fallbackEdition) { + try { + result = loadEdition(fallbackEdition, opts); + loaded = true; + } + catch (editionError) { + editionsError = new errlop_1.default(editionError, editionsError); + } + } + // if we were able to load something, then provide it + if (loaded) { + // make note of any errors if desired + if (editionsError && verbose) { + var stderr = opts.stderr || process.stderr; + stderr.write(editionsError.stack + '\n'); + } + return result; + } + // otherwise, provide the error + else if (editionsError) { + if (opts.packagePath) { + throw util_js_1.errtion({ + message: "There were no suitable editions for package [" + opts.packagePath + "]", + code: 'unsupported-editions-tried' + }, editionsError); + } + else { + throw util_js_1.errtion({ + message: 'There were no suitable editions', + code: 'unsupported-editions-tried' + }, editionsError); + } + } +} +exports.requireEditions = requireEditions; +/** + * Cycle through the editions for a package and require the correct one. + * Providing the package configuration is valid, editions handling is forwarded to {@link requireEditions}. + * @returns The result of the loaded edition. + * @throws An error if a suitable edition was unable to be resolved. + */ +function requirePackage(cwd, require, entry) { + // Load the package.json file to fetch `name` for debugging and `editions` for loading + var packagePath = path_1.default.resolve(cwd || '', 'package.json'); + var editions = require(packagePath).editions; + var opts = { packagePath: packagePath, cwd: cwd, require: require, entry: entry }; + return requireEditions(editions, opts); +} +exports.requirePackage = requirePackage; diff --git a/node_modules/editions/edition-es5/util.js b/node_modules/editions/edition-es5/util.js new file mode 100644 index 000000000..a119cb844 --- /dev/null +++ b/node_modules/editions/edition-es5/util.js @@ -0,0 +1,33 @@ +'use strict'; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// As Errlop uses Editions, we should use a specific Errlop edition +// As otherwise, the circular reference may fail on some machines +// https://github.com/bevry/errlop/issues/2 +var errlop_1 = __importDefault(require("errlop")); +/** + * Allow code and level inputs on Errlop. + * We do this instead of a class extension, as class extensions do not interop well on node 0.8, which is our target. + */ +function errtion(opts, parent) { + var message = opts.message, code = opts.code, level = opts.level; + var error = new errlop_1.default(message, parent); + if (code) + error.code = code; + if (level) + error.level = level; + return error; +} +exports.errtion = errtion; +/** Converts anything to a string, by returning strings and serialising objects. */ +function stringify(value) { + return typeof value === 'string' ? value : JSON.stringify(value); +} +exports.stringify = stringify; +/** Converts a version range like `4 || 6` to `>=4` */ +function simplifyRange(range) { + return range.replace(/^([.\-\w]+)(\s.+)?$/, '>=$1'); +} +exports.simplifyRange = simplifyRange; diff --git a/node_modules/editions/package.json b/node_modules/editions/package.json new file mode 100644 index 000000000..d645e45a9 --- /dev/null +++ b/node_modules/editions/package.json @@ -0,0 +1,161 @@ +{ + "name": "editions", + "version": "2.3.1", + "description": "Publish multiple editions for your JavaScript packages consistently and easily (e.g. source edition, esnext edition, es2015 edition)", + "homepage": "https://github.com/bevry/editions", + "license": "MIT", + "keywords": [ + "editions", + "edition", + "versions", + "syntaxes", + "esnext", + "jsnext", + "es2015", + "es6", + "es6+" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "githubsponsors", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "githubSponsorsUsername": "balupton", + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": "https://bevry.me/fund", + "author": "2016+ Bevry Pty Ltd (http://bevry.me)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Zlatan Vasović (http://zdroid.github.io)", + "dependabot[bot] (http://github.com/apps/dependabot)" + ], + "bugs": { + "url": "https://github.com/bevry/editions/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/editions.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "typescript source code with import for modules", + "directory": "source", + "entry": "index.ts", + "tags": [ + "typescript", + "import" + ], + "engines": false + }, + { + "description": "typescript compiled against ES5 for Node.js with require for modules", + "directory": "edition-es5", + "entry": "index.js", + "tags": [ + "javascript", + "es5", + "require" + ], + "engines": { + "node": "0.8 || 0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13 || 14" + } + } + ], + "types": "./compiled-types/", + "type": "commonjs", + "main": "edition-es5/index.js", + "dependencies": { + "errlop": "^2.0.0", + "semver": "^6.3.0" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^2.11.0", + "@typescript-eslint/parser": "^2.11.0", + "assert-helpers": "4.10.0", + "eslint": "^6.7.2", + "eslint-config-bevry": "^2.3.0", + "eslint-config-prettier": "^6.7.0", + "eslint-plugin-prettier": "^3.1.1", + "kava": "3.2.0", + "prettier": "^1.19.1", + "projectz": "^1.16.0", + "surge": "^0.21.3", + "typedoc": "^0.15.4", + "typescript": "^3.7.3", + "valid-directory": "^1.6.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-es5 && npm run our:compile:types", + "our:compile:edition-es5": "tsc --module commonjs --target ES5 --outDir ./edition-es5 --project tsconfig.json && test -d edition-es5/source && ( mv edition-es5/source edition-temp && rm -Rf edition-es5 && mv edition-temp edition-es5 ) || true", + "our:compile:types": "tsc --project tsconfig.json --emitDeclarationOnly --declaration --declarationDir ./compiled-types/ --declarationMap", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:docs": "npm run our:meta:docs:typedoc", + "our:meta:docs:typedoc": "rm -Rf ./docs && typedoc --mode file --exclude '**/+(*test*|node_modules)' --excludeExternals --name \"$npm_package_name\" --readme ./README.md --out ./docs ./source", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier && npm run our:verify:typescript", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "our:verify:typescript": "tsc --noEmit --project tsconfig.json", + "test": "node ./edition-es5/test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "boundation": { + "minimumSupportNodeVersion": "0.8", + "minimumTestNodeVersion": "0.8", + "browser": false, + "compiler": "typescript", + "targets": [ + "ES5" + ] + } +} diff --git a/node_modules/editions/source/index.ts b/node_modules/editions/source/index.ts new file mode 100644 index 000000000..620d7e916 --- /dev/null +++ b/node_modules/editions/source/index.ts @@ -0,0 +1,409 @@ +/* eslint no-console:0 */ +'use strict' + +// Imports +import pathUtil from 'path' +import semver from 'semver' +import { errtion, stringify, simplifyRange } from './util.js' + +// As Errlop uses Editions, we should use a specific Errlop edition +// As otherwise, the circular reference may fail on some machines +// https://github.com/bevry/errlop/issues/2 +import Errlop from 'errlop' + +/** + * The current node version that we are operating within. + * It is compared in {@link requireEdition} against {@link Edition.engines}. + */ +const NODE_VERSION: string = process.versions.node + +/** + * Set the environment variable `EDITIONS_VERBOSE` to output debugging information to stderr on how editions selected the edition it did. + * Values of `yes` and `true` are supported. + * @example env EDITIONS_VERBOSE=true node mypackage/index.js + */ +type EDITIONS_VERBOSE = string | boolean | undefined + +/** + * Whether or not {@link EDITIONS_VERBOSE} is enabled. + * @type {bollean} + * @private + */ +const VERBOSE: boolean = + (process.env.EDITIONS_VERBOSE as EDITIONS_VERBOSE) === true || + (process.env.EDITIONS_VERBOSE as EDITIONS_VERBOSE) === 'yes' || + (process.env.EDITIONS_VERBOSE as EDITIONS_VERBOSE) === 'true' || + false + +/** + * Set the environment variable `EDITIONS_TAG_BLACKLIST` to the tags you wish to blacklist, and editions will skip editions that contain them. + * For backwards compatibility `EDITIONS_SYNTAX_BLACKLIST` is also supported. + * It is compared in {@link requireEdition} against {@link Edition.tags}. + * The value of this is stored locally in the {@link BLACKLIST} cache. + * @example env EDITIONS_TAG_BLACKLIST=esnext,typescript,coffeescript node mypackage/index.js + */ +type EDITIONS_TAG_BLACKLIST = string + +/** + * A list of the blacklisted tags. + * Data imported from {@link EDITIONS_TAG_BLACKLIST}. + */ +const BLACKLIST: string[] = + (process.env.EDITIONS_TAG_BLACKLIST as EDITIONS_TAG_BLACKLIST)?.split( + /[, ]+/g + ) || + (process.env.EDITIONS_SYNTAX_BLACKLIST as EDITIONS_TAG_BLACKLIST)?.split( + /[, ]+/g + ) + +/** + * A mapping of blacklisted tags to their reasons. + * Keys are the tags. + * Values are the error instances that contain the reasoning for why/how that tag is/became blacklisted. + * Data imported from {@link EDITIONS_TAG_BLACKLIST}. + */ +const blacklist: { [tag: string]: Error } = {} + +/** Edition entries must conform to the following specification. */ +export interface Edition { + /** + * Use this property to decribe the edition in human readable terms. Such as what it does and who it is for. It is used to reference the edition in user facing reporting, such as error messages. + * @example "esnext source code with require for modules" + */ + description: String + /** + * The location to where this directory is located. It should be a relative path from the `package.json` file. + * @example "source" + */ + directory: string + /** + * The default entry location for this edition, relative to the edition's directory. + * @example "index.js" + */ + entry?: string + /** + * Any keywords you wish to associate to the edition. Useful for various ecosystem tooling, such as automatic ESNext lint configuration if the `esnext` tag is present in the source edition tags. Consumers also make use of this via {@link EDITIONS_TAG_BLACKLIST} for preventing loading editions that contain a blacklisted tag. Previously this field was named `syntaxes`. + * @example ["javascript", "esnext", "require"] + */ + tags?: string[] + /** @alias tags */ + syntaxes?: Edition['tags'] + /** + * This field is used to specific which Node.js and Browser environments this edition supports. If `false` this edition does not support either. If `node` is a string, it should be a semver range of node.js versions that the edition targets. If `browsers` is a string, it should be a [browserlist](https://github.com/browserslist/browserslist) value of the specific browser values the edition targets. If `node` or `browsers` is true, it indicates that this edition is compatible with those environments. + * @example + * { + * "description": "esnext source code with require for modules", + * "directory": "source", + * "entry": "index.js", + * "tags": [ + * "javascript", + * "esnext", + * "require" + * ], + * "engines": { + * "node": ">=6", + * "browsers": "defaults" + * } + * } + */ + engines?: false | { [engine: string]: string | boolean } +} + +/** These are the various options that you can use to customise the behaviour of certain methods. */ +export interface EditionOptions { + /** The require method of the calling module, used to ensure require paths remain correct. */ + require: Function + /** If provided, this is used for debugging. */ + packagePath?: string + /** If provided, any error loading an edition will be logged. By default, errors are only logged if all editions failed. If not provided, process.env.EDITIONS_VERBOSE is used. */ + verbose?: boolean + /** If `true`, then only exact version matches will be loaded. If `false`, then likely matches using {@link simplifyRange} will be evaluated, with a fallback to the last. If missing, then `true` is attempted first and if no result, then `false` is attempted. */ + strict?: boolean + /** If provided, this will be the cwd for entries. */ + cwd?: string + /** If provided, should be a relative path to the entry point of the edition. */ + entry?: string + /** If provided, should be the name of the package that we are loading the editions for. */ + package?: string + /** If not provided, will use process.stderr instead. It is the stream that verbose errors are logged to. */ + stderr?: NodeJS.WritableStream +} + +// Create the mapping of blacklisted tags and their reasonings +if (BLACKLIST) { + for (let i = 0; i < BLACKLIST.length; ++i) { + const tag = BLACKLIST[i].trim().toLowerCase() + blacklist[tag] = errtion({ + message: `The EDITIONS_TAG_BLACKLIST (aka EDITIONS_SYNTAX_BLACKLIST) environment variable blacklisted the tag [${tag}]`, + code: 'blacklisted-tag' + }) + } +} + +// Blacklist the tag 'esnext' if our node version is below 0.12 +if (semver.satisfies(NODE_VERSION, '<0.12')) { + blacklist.esnext = new Error( + 'The esnext tag is skipped on early node versions as attempting to use esnext features will output debugging information on these node versions' + ) +} + +/** + * Attempt to load a specific {@link Edition}. + * @returns The result of the loaded edition. + * @throws An error if the edition failed to load. + */ +export function loadEdition(edition: Edition, opts: EditionOptions): any { + const entry = pathUtil.resolve( + opts.cwd || '', + edition.directory, + opts.entry || edition.entry || '' + ) + if (opts.require == null) { + throw errtion({ + message: `Skipped edition [${edition.description}] as opts.require was not provided, this is probably due to a testing misconfiguration.`, + code: 'unsupported-edition-require' + }) + } + try { + return opts.require(entry) + } catch (loadError) { + // Note the error with more details + throw errtion( + { + message: `Skipped edition [${edition.description}] at entry [${entry}] because it failed to load`, + code: 'unsupported-edition-tried' + }, + loadError + ) + } +} + +/** + * Attempt to require an {@link Edition}, based on its compatibility with the current environment, such as {@link NODE_VERSION} and {@link EDITIONS_TAG_BLACKLIST} compatibility. + * If compatibility is established with the environment, it will load the edition using {@link loadEdition}. + * @returns The result of the loaded edition + * @throws An error if the edition failed to load + */ +export function requireEdition(edition: Edition, opts: EditionOptions): any { + // Verify the edition is valid + if ( + !edition.description || + !edition.directory || + !edition.entry || + edition.engines == null + ) { + throw errtion({ + message: `Each edition must have its [description, directory, entry, engines] fields defined, yet all it had was [${Object.keys( + edition + ).join(', ')}]`, + code: 'unsupported-edition-malformed', + level: 'fatal' + }) + } + + // Handle strict omission + if (opts.strict == null) { + try { + return requireEdition(edition, { ...opts, strict: true }) + } catch (err) { + return requireEdition(edition, { ...opts, strict: false }) + } + } + + // Verify tag support + // Convert tags into a sorted lowercase string + const tags = (edition.tags || edition.syntaxes || []) + .map(i => i.toLowerCase()) + .sort() + for (let index = 0; index < tags.length; index++) { + const tag = tags[index] + const blacklisted = blacklist[tag] + if (blacklisted) { + throw errtion( + { + message: `Skipping edition [${edition.description}] because it contained a blacklisted tag [${tag}]`, + code: 'unsupported-edition-backlisted-tag' + }, + blacklisted + ) + } + } + + // Verify engine support + if (edition.engines === false) { + throw errtion({ + message: `Skipping edition [${edition.description}] because its engines field was false`, + code: 'unsupported-edition-engine' + }) + } + if (!edition.engines.node) { + throw errtion({ + message: `Skipping edition [${edition.description}] because its .engines.node field was falsey`, + code: 'unsupported-edition-engines-node' + }) + } + if (opts.strict) { + if (edition.engines.node === true) { + throw errtion({ + message: `Skipping edition [${edition.description}] because its .engines.node field was true yet we are in strict mode`, + code: 'unsupported-edition-engines-node-version-true' + }) + } else if (semver.satisfies(NODE_VERSION, edition.engines.node) === false) { + throw errtion({ + message: `Skipping edition [${ + edition.description + }] because our current node version [${NODE_VERSION}] is not supported by its specific range [${stringify( + edition.engines.node + )}]`, + code: 'unsupported-edition-engines-node-version-specific' + }) + } + } else if (edition.engines.node !== true) { + const simplifiedRange = simplifyRange(edition.engines.node) + if (semver.satisfies(NODE_VERSION, simplifiedRange) === false) { + throw errtion({ + message: `Skipping edition [${ + edition.description + }] because our current node version [${NODE_VERSION}] is not supported by its simplified range [${stringify( + simplifiedRange + )}]`, + code: 'unsupported-edition-engines-node-version-simplified' + }) + } + } + + // Load the edition + return loadEdition(edition, opts) +} + +/** + * Cycles through a list of editions, returning the require result of the first suitable {@link Edition} that it was able to load. + * Editions should be ordered from most preferable first, to least desirable last. + * Providing the editions configuration is valid, individual edition handling is forwarded to {@link requireEdition}. + * @returns The result of the loaded edition. + * @throws An error if a suitable edition was unable to be resolved. + */ +export function requireEditions( + editions: Edition[], + opts: EditionOptions +): any { + // Check + if (!editions || editions.length === 0) { + if (opts.packagePath) { + throw errtion({ + message: `There were no editions specified for package [${opts.packagePath}]`, + code: 'unsupported-editions-missing' + }) + } else { + throw errtion({ + message: 'There were no editions specified', + code: 'unsupported-editions-missing' + }) + } + } + + // Handle strict omission + if (opts.strict == null) { + try { + return requireEditions(editions, { ...opts, strict: true }) + } catch (err) { + return requireEditions(editions, { ...opts, strict: false }) + } + } + + // Whether or not we should be verbose + const verbose = opts.verbose == null ? VERBOSE : opts.verbose + + // Capture the load result, the last error, and the fallback option + let result, + loaded = false, + editionsError = null, + fallbackEdition = null + + // Cycle through the editions determing the above + for (let i = 0; i < editions.length; ++i) { + const edition = editions[i] + try { + result = requireEdition(edition, opts) + loaded = true + break + } catch (editionError) { + if (editionError.level === 'fatal') { + editionsError = editionError + break + } else if (editionsError) { + editionsError = errtion(editionsError, editionError) + } else { + editionsError = editionError + } + // make the fallback edition one that we don't bother loading due to its engines + // also: don't assume that .code is accessible, as it may not be, even if it should be, due to the way different environments behave + if ( + String(editionError.code || '').indexOf( + 'unsupported-edition-engines-node-version' + ) === 0 + ) { + fallbackEdition = edition + } + } + } + + // if no edition was suitable for our environment, then try the fallback if it exists + // that is to say, ignore its engines.node + if (opts.strict === false && loaded === false && fallbackEdition) { + try { + result = loadEdition(fallbackEdition, opts) + loaded = true + } catch (editionError) { + editionsError = new Errlop(editionError, editionsError) + } + } + + // if we were able to load something, then provide it + if (loaded) { + // make note of any errors if desired + if (editionsError && verbose) { + const stderr = opts.stderr || process.stderr + stderr.write(editionsError.stack + '\n') + } + return result + } + // otherwise, provide the error + else if (editionsError) { + if (opts.packagePath) { + throw errtion( + { + message: `There were no suitable editions for package [${opts.packagePath}]`, + code: 'unsupported-editions-tried' + }, + editionsError + ) + } else { + throw errtion( + { + message: 'There were no suitable editions', + code: 'unsupported-editions-tried' + }, + editionsError + ) + } + } +} + +/** + * Cycle through the editions for a package and require the correct one. + * Providing the package configuration is valid, editions handling is forwarded to {@link requireEditions}. + * @returns The result of the loaded edition. + * @throws An error if a suitable edition was unable to be resolved. + */ +export function requirePackage( + cwd: EditionOptions['cwd'], + require: EditionOptions['require'], + entry: EditionOptions['entry'] +): any { + // Load the package.json file to fetch `name` for debugging and `editions` for loading + const packagePath = pathUtil.resolve(cwd || '', 'package.json') + const { editions } = require(packagePath) + const opts = { packagePath, cwd, require, entry } + return requireEditions(editions, opts) +} diff --git a/node_modules/editions/source/util.ts b/node_modules/editions/source/util.ts new file mode 100644 index 000000000..d2b623f21 --- /dev/null +++ b/node_modules/editions/source/util.ts @@ -0,0 +1,40 @@ +'use strict' + +// As Errlop uses Editions, we should use a specific Errlop edition +// As otherwise, the circular reference may fail on some machines +// https://github.com/bevry/errlop/issues/2 +import Errlop from 'errlop' + +interface ErrtionOptions { + message: string + code: string | number + level?: string | number +} + +interface Errtion extends Errlop, ErrtionOptions {} + +/** + * Allow code and level inputs on Errlop. + * We do this instead of a class extension, as class extensions do not interop well on node 0.8, which is our target. + */ +export function errtion( + this: void, + opts: ErrtionOptions, + parent?: Errlop | Error +): Errtion { + const { message, code, level } = opts + const error = new Errlop(message, parent) as Errtion + if (code) error.code = code + if (level) error.level = level + return error +} + +/** Converts anything to a string, by returning strings and serialising objects. */ +export function stringify(value: any): string { + return typeof value === 'string' ? value : JSON.stringify(value) +} + +/** Converts a version range like `4 || 6` to `>=4` */ +export function simplifyRange(range: string): string { + return range.replace(/^([.\-\w]+)(\s.+)?$/, '>=$1') +} diff --git a/node_modules/editions/tsconfig.json b/node_modules/editions/tsconfig.json new file mode 100644 index 000000000..4b771ec96 --- /dev/null +++ b/node_modules/editions/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "allowJs": true, + "esModuleInterop": true, + "isolatedModules": true, + "maxNodeModuleJsDepth": 5, + "moduleResolution": "node", + "strict": true, + "target": "esnext" + }, + "include": [ + "source" + ] +} diff --git a/node_modules/ejs/LICENSE b/node_modules/ejs/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/node_modules/ejs/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/ejs/README.md b/node_modules/ejs/README.md new file mode 100644 index 000000000..8471a6033 --- /dev/null +++ b/node_modules/ejs/README.md @@ -0,0 +1,273 @@ +# EJS + +Embedded JavaScript templates + +[![Build Status](https://img.shields.io/travis/mde/ejs/master.svg?style=flat)](https://travis-ci.org/mde/ejs) +[![Developing Dependencies](https://img.shields.io/david/dev/mde/ejs.svg?style=flat)](https://david-dm.org/mde/ejs?type=dev) +[![Known Vulnerabilities](https://snyk.io/test/npm/ejs/badge.svg?style=flat)](https://snyk.io/test/npm/ejs) + +## Installation + +```bash +$ npm install ejs +``` + +## Features + + * Control flow with `<% %>` + * Escaped output with `<%= %>` (escape function configurable) + * Unescaped raw output with `<%- %>` + * Newline-trim mode ('newline slurping') with `-%>` ending tag + * Whitespace-trim mode (slurp all whitespace) for control flow with `<%_ _%>` + * Custom delimiters (e.g., use `` instead of `<% %>`) + * Includes + * Client-side support + * Static caching of intermediate JavaScript + * Static caching of templates + * Complies with the [Express](http://expressjs.com) view system + +## Example + +```ejs +<% if (user) { %> +

<%= user.name %>

+<% } %> +``` + +Try EJS online at: https://ionicabizau.github.io/ejs-playground/. + +## Usage + +```javascript +let template = ejs.compile(str, options); +template(data); +// => Rendered HTML string + +ejs.render(str, data, options); +// => Rendered HTML string + +ejs.renderFile(filename, data, options, function(err, str){ + // str => Rendered HTML string +}); +``` + +It is also possible to use `ejs.render(dataAndOptions);` where you pass +everything in a single object. In that case, you'll end up with local variables +for all the passed options. However, be aware that your code could break if we +add an option with the same name as one of your data object's properties. +Therefore, we do not recommend using this shortcut. + +## Options + + - `cache` Compiled functions are cached, requires `filename` + - `filename` The name of the file being rendered. Not required if you + are using `renderFile()`. Used by `cache` to key caches, and for includes. + - `root` Set project root for includes with an absolute path (/file.ejs). + - `context` Function execution context + - `compileDebug` When `false` no debug instrumentation is compiled + - `client` When `true`, compiles a function that can be rendered + in the browser without needing to load the EJS Runtime + ([ejs.min.js](https://github.com/mde/ejs/releases/latest)). + - `delimiter` Character to use with angle brackets for open/close + - `debug` Output generated function body + - `strict` When set to `true`, generated function is in strict mode + - `_with` Whether or not to use `with() {}` constructs. If `false` + then the locals will be stored in the `locals` object. Set to `false` in strict mode. + - `destructuredLocals` An array of local variables that are always destructured from + the locals object, available even in strict mode. + - `localsName` Name to use for the object storing local variables when not using + `with` Defaults to `locals` + - `rmWhitespace` Remove all safe-to-remove whitespace, including leading + and trailing whitespace. It also enables a safer version of `-%>` line + slurping for all scriptlet tags (it does not strip new lines of tags in + the middle of a line). + - `escape` The escaping function used with `<%=` construct. It is + used in rendering and is `.toString()`ed in the generation of client functions. + (By default escapes XML). + - `outputFunctionName` Set to a string (e.g., 'echo' or 'print') for a function to print + output inside scriptlet tags. + - `async` When `true`, EJS will use an async function for rendering. (Depends + on async/await support in the JS runtime. + +This project uses [JSDoc](http://usejsdoc.org/). For the full public API +documentation, clone the repository and run `npm run doc`. This will run JSDoc +with the proper options and output the documentation to `out/`. If you want +the both the public & private API docs, run `npm run devdoc` instead. + +## Tags + + - `<%` 'Scriptlet' tag, for control-flow, no output + - `<%_` 'Whitespace Slurping' Scriptlet tag, strips all whitespace before it + - `<%=` Outputs the value into the template (escaped) + - `<%-` Outputs the unescaped value into the template + - `<%#` Comment tag, no execution, no output + - `<%%` Outputs a literal '<%' + - `%%>` Outputs a literal '%>' + - `%>` Plain ending tag + - `-%>` Trim-mode ('newline slurp') tag, trims following newline + - `_%>` 'Whitespace Slurping' ending tag, removes all whitespace after it + +For the full syntax documentation, please see [docs/syntax.md](https://github.com/mde/ejs/blob/master/docs/syntax.md). + +## Includes + +Includes either have to be an absolute path, or, if not, are assumed as +relative to the template with the `include` call. For example if you are +including `./views/user/show.ejs` from `./views/users.ejs` you would +use `<%- include('user/show') %>`. + +You must specify the `filename` option for the template with the `include` +call unless you are using `renderFile()`. + +You'll likely want to use the raw output tag (`<%-`) with your include to avoid +double-escaping the HTML output. + +```ejs +
    + <% users.forEach(function(user){ %> + <%- include('user/show', {user: user}) %> + <% }); %> +
+``` + +Includes are inserted at runtime, so you can use variables for the path in the +`include` call (for example `<%- include(somePath) %>`). Variables in your +top-level data object are available to all your includes, but local variables +need to be passed down. + +NOTE: Include preprocessor directives (`<% include user/show %>`) are +still supported. + +## Custom delimiters + +Custom delimiters can be applied on a per-template basis, or globally: + +```javascript +let ejs = require('ejs'), + users = ['geddy', 'neil', 'alex']; + +// Just one template +ejs.render('', {users: users}, {delimiter: '?'}); +// => 'geddy | neil | alex' + +// Or globally +ejs.delimiter = '$'; +ejs.render('<$= users.join(" | "); $>', {users: users}); +// => 'geddy | neil | alex' +``` + +## Caching + +EJS ships with a basic in-process cache for caching the intermediate JavaScript +functions used to render templates. It's easy to plug in LRU caching using +Node's `lru-cache` library: + +```javascript +let ejs = require('ejs'), + LRU = require('lru-cache'); +ejs.cache = LRU(100); // LRU cache with 100-item limit +``` + +If you want to clear the EJS cache, call `ejs.clearCache`. If you're using the +LRU cache and need a different limit, simple reset `ejs.cache` to a new instance +of the LRU. + +## Custom file loader + +The default file loader is `fs.readFileSync`, if you want to customize it, you can set ejs.fileLoader. + +```javascript +let ejs = require('ejs'); +let myFileLoad = function (filePath) { + return 'myFileLoad: ' + fs.readFileSync(filePath); +}; + +ejs.fileLoader = myFileLoad; +``` + +With this feature, you can preprocess the template before reading it. + +## Layouts + +EJS does not specifically support blocks, but layouts can be implemented by +including headers and footers, like so: + + +```ejs +<%- include('header') -%> +

+ Title +

+

+ My page +

+<%- include('footer') -%> +``` + +## Client-side support + +Go to the [Latest Release](https://github.com/mde/ejs/releases/latest), download +`./ejs.js` or `./ejs.min.js`. Alternately, you can compile it yourself by cloning +the repository and running `jake build` (or `$(npm bin)/jake build` if jake is +not installed globally). + +Include one of these files on your page, and `ejs` should be available globally. + +### Example + +```html +
+ + +``` + +### Caveats + +Most of EJS will work as expected; however, there are a few things to note: + +1. Obviously, since you do not have access to the filesystem, `ejs.renderFile()` won't work. +2. For the same reason, `include`s do not work unless you use an `include callback`. Here is an example: + ```javascript + let str = "Hello <%= include('file', {person: 'John'}); %>", + fn = ejs.compile(str, {client: true}); + + fn(data, null, function(path, d){ // include callback + // path -> 'file' + // d -> {person: 'John'} + // Put your code here + // Return the contents of file as a string + }); // returns rendered string + ``` + +See the [examples folder](https://github.com/mde/ejs/tree/master/examples) for more details. + +### IDE Integration with Syntax Highlighting + +VSCode:Javascript EJS by *DigitalBrainstem* + +## Related projects + +There are a number of implementations of EJS: + + * TJ's implementation, the v1 of this library: https://github.com/tj/ejs + * Jupiter Consulting's EJS: http://www.embeddedjs.com/ + * EJS Embedded JavaScript Framework on Google Code: https://code.google.com/p/embeddedjavascript/ + * Sam Stephenson's Ruby implementation: https://rubygems.org/gems/ejs + * Erubis, an ERB implementation which also runs JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript + * DigitalBrainstem EJS Language support: https://github.com/Digitalbrainstem/ejs-grammar + +## License + +Licensed under the Apache License, Version 2.0 +() + +- - - +EJS Embedded JavaScript templates copyright 2112 +mde@fleegix.org. diff --git a/node_modules/ejs/ejs.js b/node_modules/ejs/ejs.js new file mode 100644 index 000000000..1a408f5b9 --- /dev/null +++ b/node_modules/ejs/ejs.js @@ -0,0 +1,1686 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ejs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i + * @author Tiancheng "Timothy" Gu + * @project EJS + * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0} + */ + +/** + * EJS internal functions. + * + * Technically this "module" lies in the same file as {@link module:ejs}, for + * the sake of organization all the private functions re grouped into this + * module. + * + * @module ejs-internal + * @private + */ + +/** + * Embedded JavaScript templating engine. + * + * @module ejs + * @public + */ + +var fs = require('fs'); +var path = require('path'); +var utils = require('./utils'); + +var scopeOptionWarned = false; +var _VERSION_STRING = require('../package.json').version; +var _DEFAULT_OPEN_DELIMITER = '<'; +var _DEFAULT_CLOSE_DELIMITER = '>'; +var _DEFAULT_DELIMITER = '%'; +var _DEFAULT_LOCALS_NAME = 'locals'; +var _NAME = 'ejs'; +var _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'; +var _OPTS_PASSABLE_WITH_DATA = ['delimiter', 'scope', 'context', 'debug', 'compileDebug', + 'client', '_with', 'rmWhitespace', 'strict', 'filename', 'async']; +// We don't allow 'cache' option to be passed in the data obj for +// the normal `render` call, but this is where Express 2 & 3 put it +// so we make an exception for `renderFile` +var _OPTS_PASSABLE_WITH_DATA_EXPRESS = _OPTS_PASSABLE_WITH_DATA.concat('cache'); +var _BOM = /^\uFEFF/; + +/** + * EJS template function cache. This can be a LRU object from lru-cache NPM + * module. By default, it is {@link module:utils.cache}, a simple in-process + * cache that grows continuously. + * + * @type {Cache} + */ + +exports.cache = utils.cache; + +/** + * Custom file loader. Useful for template preprocessing or restricting access + * to a certain part of the filesystem. + * + * @type {fileLoader} + */ + +exports.fileLoader = fs.readFileSync; + +/** + * Name of the object containing the locals. + * + * This variable is overridden by {@link Options}`.localsName` if it is not + * `undefined`. + * + * @type {String} + * @public + */ + +exports.localsName = _DEFAULT_LOCALS_NAME; + +/** + * Promise implementation -- defaults to the native implementation if available + * This is mostly just for testability + * + * @type {Function} + * @public + */ + +exports.promiseImpl = (new Function('return this;'))().Promise; + +/** + * Get the path to the included file from the parent file path and the + * specified path. + * + * @param {String} name specified path + * @param {String} filename parent file path + * @param {Boolean} isDir parent file path whether is directory + * @return {String} + */ +exports.resolveInclude = function(name, filename, isDir) { + var dirname = path.dirname; + var extname = path.extname; + var resolve = path.resolve; + var includePath = resolve(isDir ? filename : dirname(filename), name); + var ext = extname(name); + if (!ext) { + includePath += '.ejs'; + } + return includePath; +}; + +/** + * Get the path to the included file by Options + * + * @param {String} path specified path + * @param {Options} options compilation options + * @return {String} + */ +function getIncludePath(path, options) { + var includePath; + var filePath; + var views = options.views; + var match = /^[A-Za-z]+:\\|^\//.exec(path); + + // Abs path + if (match && match.length) { + includePath = exports.resolveInclude(path.replace(/^\/*/,''), options.root || '/', true); + } + // Relative paths + else { + // Look relative to a passed filename first + if (options.filename) { + filePath = exports.resolveInclude(path, options.filename); + if (fs.existsSync(filePath)) { + includePath = filePath; + } + } + // Then look in any views directories + if (!includePath) { + if (Array.isArray(views) && views.some(function (v) { + filePath = exports.resolveInclude(path, v, true); + return fs.existsSync(filePath); + })) { + includePath = filePath; + } + } + if (!includePath) { + throw new Error('Could not find the include file "' + + options.escapeFunction(path) + '"'); + } + } + return includePath; +} + +/** + * Get the template from a string or a file, either compiled on-the-fly or + * read from cache (if enabled), and cache the template if needed. + * + * If `template` is not set, the file specified in `options.filename` will be + * read. + * + * If `options.cache` is true, this function reads the file from + * `options.filename` so it must be set prior to calling this function. + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {String} [template] template source + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned. + * @static + */ + +function handleCache(options, template) { + var func; + var filename = options.filename; + var hasTemplate = arguments.length > 1; + + if (options.cache) { + if (!filename) { + throw new Error('cache option requires a filename'); + } + func = exports.cache.get(filename); + if (func) { + return func; + } + if (!hasTemplate) { + template = fileLoader(filename).toString().replace(_BOM, ''); + } + } + else if (!hasTemplate) { + // istanbul ignore if: should not happen at all + if (!filename) { + throw new Error('Internal EJS error: no file name or template ' + + 'provided'); + } + template = fileLoader(filename).toString().replace(_BOM, ''); + } + func = exports.compile(template, options); + if (options.cache) { + exports.cache.set(filename, func); + } + return func; +} + +/** + * Try calling handleCache with the given options and data and call the + * callback with the result. If an error occurs, call the callback with + * the error. Used by renderFile(). + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {Object} data template data + * @param {RenderFileCallback} cb callback + * @static + */ + +function tryHandleCache(options, data, cb) { + var result; + if (!cb) { + if (typeof exports.promiseImpl == 'function') { + return new exports.promiseImpl(function (resolve, reject) { + try { + result = handleCache(options)(data); + resolve(result); + } + catch (err) { + reject(err); + } + }); + } + else { + throw new Error('Please provide a callback function'); + } + } + else { + try { + result = handleCache(options)(data); + } + catch (err) { + return cb(err); + } + + cb(null, result); + } +} + +/** + * fileLoader is independent + * + * @param {String} filePath ejs file path. + * @return {String} The contents of the specified file. + * @static + */ + +function fileLoader(filePath){ + return exports.fileLoader(filePath); +} + +/** + * Get the template function. + * + * If `options.cache` is `true`, then the template is cached. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned + * @static + */ + +function includeFile(path, options) { + var opts = utils.shallowCopy({}, options); + opts.filename = getIncludePath(path, opts); + return handleCache(opts); +} + +/** + * Get the JavaScript source of an included file. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {Object} + * @static + */ + +function includeSource(path, options) { + var opts = utils.shallowCopy({}, options); + var includePath; + var template; + includePath = getIncludePath(path, opts); + template = fileLoader(includePath).toString().replace(_BOM, ''); + opts.filename = includePath; + var templ = new Template(template, opts); + templ.generateSource(); + return { + source: templ.source, + filename: includePath, + template: template + }; +} + +/** + * Re-throw the given `err` in context to the `str` of ejs, `filename`, and + * `lineno`. + * + * @implements RethrowCallback + * @memberof module:ejs-internal + * @param {Error} err Error object + * @param {String} str EJS source + * @param {String} filename file name of the EJS file + * @param {String} lineno line number of the error + * @static + */ + +function rethrow(err, str, flnm, lineno, esc){ + var lines = str.split('\n'); + var start = Math.max(lineno - 3, 0); + var end = Math.min(lines.length, lineno + 3); + var filename = esc(flnm); // eslint-disable-line + // Error context + var context = lines.slice(start, end).map(function (line, i){ + var curr = i + start + 1; + return (curr == lineno ? ' >> ' : ' ') + + curr + + '| ' + + line; + }).join('\n'); + + // Alter exception message + err.path = filename; + err.message = (filename || 'ejs') + ':' + + lineno + '\n' + + context + '\n\n' + + err.message; + + throw err; +} + +function stripSemi(str){ + return str.replace(/;(\s*$)/, '$1'); +} + +/** + * Compile the given `str` of ejs into a template function. + * + * @param {String} template EJS template + * + * @param {Options} opts compilation options + * + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `opts.client`, either type might be returned. + * Note that the return type of the function also depends on the value of `opts.async`. + * @public + */ + +exports.compile = function compile(template, opts) { + var templ; + + // v1 compat + // 'scope' is 'context' + // FIXME: Remove this in a future version + if (opts && opts.scope) { + if (!scopeOptionWarned){ + console.warn('`scope` option is deprecated and will be removed in EJS 3'); + scopeOptionWarned = true; + } + if (!opts.context) { + opts.context = opts.scope; + } + delete opts.scope; + } + templ = new Template(template, opts); + return templ.compile(); +}; + +/** + * Render the given `template` of ejs. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} template EJS template + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @return {(String|Promise)} + * Return value type depends on `opts.async`. + * @public + */ + +exports.render = function (template, d, o) { + var data = d || {}; + var opts = o || {}; + + // No options object -- if there are optiony names + // in the data, copy them to options + if (arguments.length == 2) { + utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA); + } + + return handleCache(opts, template)(data); +}; + +/** + * Render an EJS file at the given `path` and callback `cb(err, str)`. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} path path to the EJS file + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @param {RenderFileCallback} cb callback + * @public + */ + +exports.renderFile = function () { + var args = Array.prototype.slice.call(arguments); + var filename = args.shift(); + var cb; + var opts = {filename: filename}; + var data; + var viewOpts; + + // Do we have a callback? + if (typeof arguments[arguments.length - 1] == 'function') { + cb = args.pop(); + } + // Do we have data/opts? + if (args.length) { + // Should always have data obj + data = args.shift(); + // Normal passed opts (data obj + opts obj) + if (args.length) { + // Use shallowCopy so we don't pollute passed in opts obj with new vals + utils.shallowCopy(opts, args.pop()); + } + // Special casing for Express (settings + opts-in-data) + else { + // Express 3 and 4 + if (data.settings) { + // Pull a few things from known locations + if (data.settings.views) { + opts.views = data.settings.views; + } + if (data.settings['view cache']) { + opts.cache = true; + } + // Undocumented after Express 2, but still usable, esp. for + // items that are unsafe to be passed along with data, like `root` + viewOpts = data.settings['view options']; + if (viewOpts) { + utils.shallowCopy(opts, viewOpts); + } + } + // Express 2 and lower, values set in app.locals, or people who just + // want to pass options in their data. NOTE: These values will override + // anything previously set in settings or settings['view options'] + utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA_EXPRESS); + } + opts.filename = filename; + } + else { + data = {}; + } + + return tryHandleCache(opts, data, cb); +}; + +/** + * Clear intermediate JavaScript cache. Calls {@link Cache#reset}. + * @public + */ + +/** + * EJS template class + * @public + */ +exports.Template = Template; + +exports.clearCache = function () { + exports.cache.reset(); +}; + +function Template(text, opts) { + opts = opts || {}; + var options = {}; + this.templateText = text; + this.mode = null; + this.truncate = false; + this.currentLine = 1; + this.source = ''; + this.dependencies = []; + options.client = opts.client || false; + options.escapeFunction = opts.escape || opts.escapeFunction || utils.escapeXML; + options.compileDebug = opts.compileDebug !== false; + options.debug = !!opts.debug; + options.filename = opts.filename; + options.openDelimiter = opts.openDelimiter || exports.openDelimiter || _DEFAULT_OPEN_DELIMITER; + options.closeDelimiter = opts.closeDelimiter || exports.closeDelimiter || _DEFAULT_CLOSE_DELIMITER; + options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER; + options.strict = opts.strict || false; + options.context = opts.context; + options.cache = opts.cache || false; + options.rmWhitespace = opts.rmWhitespace; + options.root = opts.root; + options.outputFunctionName = opts.outputFunctionName; + options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME; + options.views = opts.views; + options.async = opts.async; + options.destructuredLocals = opts.destructuredLocals; + options.legacyInclude = typeof opts.legacyInclude != 'undefined' ? !!opts.legacyInclude : true; + + if (options.strict) { + options._with = false; + } + else { + options._with = typeof opts._with != 'undefined' ? opts._with : true; + } + + this.opts = options; + + this.regex = this.createRegex(); +} + +Template.modes = { + EVAL: 'eval', + ESCAPED: 'escaped', + RAW: 'raw', + COMMENT: 'comment', + LITERAL: 'literal' +}; + +Template.prototype = { + createRegex: function () { + var str = _REGEX_STRING; + var delim = utils.escapeRegExpChars(this.opts.delimiter); + var open = utils.escapeRegExpChars(this.opts.openDelimiter); + var close = utils.escapeRegExpChars(this.opts.closeDelimiter); + str = str.replace(/%/g, delim) + .replace(//g, close); + return new RegExp(str); + }, + + compile: function () { + var src; + var fn; + var opts = this.opts; + var prepended = ''; + var appended = ''; + var escapeFn = opts.escapeFunction; + var ctor; + + if (!this.source) { + this.generateSource(); + prepended += + ' var __output = "";\n' + + ' function __append(s) { if (s !== undefined && s !== null) __output += s }\n'; + if (opts.outputFunctionName) { + prepended += ' var ' + opts.outputFunctionName + ' = __append;' + '\n'; + } + if (opts.destructuredLocals && opts.destructuredLocals.length) { + var destructuring = ' var __locals = (' + opts.localsName + ' || {}),\n'; + for (var i = 0; i < opts.destructuredLocals.length; i++) { + var name = opts.destructuredLocals[i]; + if (i > 0) { + destructuring += ',\n '; + } + destructuring += name + ' = __locals.' + name; + } + prepended += destructuring + ';\n'; + } + if (opts._with !== false) { + prepended += ' with (' + opts.localsName + ' || {}) {' + '\n'; + appended += ' }' + '\n'; + } + appended += ' return __output;' + '\n'; + this.source = prepended + this.source + appended; + } + + if (opts.compileDebug) { + src = 'var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(this.templateText) + '\n' + + ' , __filename = ' + (opts.filename ? + JSON.stringify(opts.filename) : 'undefined') + ';' + '\n' + + 'try {' + '\n' + + this.source + + '} catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n' + + '}' + '\n'; + } + else { + src = this.source; + } + + if (opts.client) { + src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\n' + src; + if (opts.compileDebug) { + src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\n' + src; + } + } + + if (opts.strict) { + src = '"use strict";\n' + src; + } + if (opts.debug) { + console.log(src); + } + if (opts.compileDebug && opts.filename) { + src = src + '\n' + + '//# sourceURL=' + opts.filename + '\n'; + } + + try { + if (opts.async) { + // Have to use generated function for this, since in envs without support, + // it breaks in parsing + try { + ctor = (new Function('return (async function(){}).constructor;'))(); + } + catch(e) { + if (e instanceof SyntaxError) { + throw new Error('This environment does not support async/await'); + } + else { + throw e; + } + } + } + else { + ctor = Function; + } + fn = new ctor(opts.localsName + ', escapeFn, include, rethrow', src); + } + catch(e) { + // istanbul ignore else + if (e instanceof SyntaxError) { + if (opts.filename) { + e.message += ' in ' + opts.filename; + } + e.message += ' while compiling ejs\n\n'; + e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\n'; + e.message += 'https://github.com/RyanZim/EJS-Lint'; + if (!opts.async) { + e.message += '\n'; + e.message += 'Or, if you meant to create an async function, pass `async: true` as an option.'; + } + } + throw e; + } + + // Return a callable function which will execute the function + // created by the source-code, with the passed data as locals + // Adds a local `include` function which allows full recursive include + var returnedFn = opts.client ? fn : function anonymous(data) { + var include = function (path, includeData) { + var d = utils.shallowCopy({}, data); + if (includeData) { + d = utils.shallowCopy(d, includeData); + } + return includeFile(path, opts)(d); + }; + return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]); + }; + returnedFn.dependencies = this.dependencies; + if (opts.filename && typeof Object.defineProperty === 'function') { + var filename = opts.filename; + var basename = path.basename(filename, path.extname(filename)); + try { + Object.defineProperty(returnedFn, 'name', { + value: basename, + writable: false, + enumerable: false, + configurable: true + }); + } catch (e) {/* ignore */} + } + return returnedFn; + }, + + generateSource: function () { + var opts = this.opts; + + if (opts.rmWhitespace) { + // Have to use two separate replace here as `^` and `$` operators don't + // work well with `\r` and empty lines don't work well with the `m` flag. + this.templateText = + this.templateText.replace(/[\r\n]+/g, '\n').replace(/^\s+|\s+$/gm, ''); + } + + // Slurp spaces and tabs before <%_ and after _%> + this.templateText = + this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>'); + + var self = this; + var matches = this.parseTemplateText(); + var d = this.opts.delimiter; + var o = this.opts.openDelimiter; + var c = this.opts.closeDelimiter; + + if (matches && matches.length) { + matches.forEach(function (line, index) { + var opening; + var closing; + var include; + var includeOpts; + var includeObj; + var includeSrc; + // If this is an opening tag, check for closing tags + // FIXME: May end up with some false positives here + // Better to store modes as k/v with openDelimiter + delimiter as key + // Then this can simply check against the map + if ( line.indexOf(o + d) === 0 // If it is a tag + && line.indexOf(o + d + d) !== 0) { // and is not escaped + closing = matches[index + 2]; + if (!(closing == d + c || closing == '-' + d + c || closing == '_' + d + c)) { + throw new Error('Could not find matching close tag for "' + line + '".'); + } + } + // HACK: backward-compat `include` preprocessor directives + if (opts.legacyInclude && (include = line.match(/^\s*include\s+(\S+)/))) { + opening = matches[index - 1]; + // Must be in EVAL or RAW mode + if (opening && (opening == o + d || opening == o + d + '-' || opening == o + d + '_')) { + includeOpts = utils.shallowCopy({}, self.opts); + includeObj = includeSource(include[1], includeOpts); + if (self.opts.compileDebug) { + includeSrc = + ' ; (function(){' + '\n' + + ' var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(includeObj.template) + '\n' + + ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n' + + ' try {' + '\n' + + includeObj.source + + ' } catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n' + + ' }' + '\n' + + ' ; }).call(this)' + '\n'; + }else{ + includeSrc = ' ; (function(){' + '\n' + includeObj.source + + ' ; }).call(this)' + '\n'; + } + self.source += includeSrc; + self.dependencies.push(exports.resolveInclude(include[1], + includeOpts.filename)); + return; + } + } + self.scanLine(line); + }); + } + + }, + + parseTemplateText: function () { + var str = this.templateText; + var pat = this.regex; + var result = pat.exec(str); + var arr = []; + var firstPos; + + while (result) { + firstPos = result.index; + + if (firstPos !== 0) { + arr.push(str.substring(0, firstPos)); + str = str.slice(firstPos); + } + + arr.push(result[0]); + str = str.slice(result[0].length); + result = pat.exec(str); + } + + if (str) { + arr.push(str); + } + + return arr; + }, + + _addOutput: function (line) { + if (this.truncate) { + // Only replace single leading linebreak in the line after + // -%> tag -- this is the single, trailing linebreak + // after the tag that the truncation mode replaces + // Handle Win / Unix / old Mac linebreaks -- do the \r\n + // combo first in the regex-or + line = line.replace(/^(?:\r\n|\r|\n)/, ''); + this.truncate = false; + } + if (!line) { + return line; + } + + // Preserve literal slashes + line = line.replace(/\\/g, '\\\\'); + + // Convert linebreaks + line = line.replace(/\n/g, '\\n'); + line = line.replace(/\r/g, '\\r'); + + // Escape double-quotes + // - this will be the delimiter during execution + line = line.replace(/"/g, '\\"'); + this.source += ' ; __append("' + line + '")' + '\n'; + }, + + scanLine: function (line) { + var self = this; + var d = this.opts.delimiter; + var o = this.opts.openDelimiter; + var c = this.opts.closeDelimiter; + var newLineCount = 0; + + newLineCount = (line.split('\n').length - 1); + + switch (line) { + case o + d: + case o + d + '_': + this.mode = Template.modes.EVAL; + break; + case o + d + '=': + this.mode = Template.modes.ESCAPED; + break; + case o + d + '-': + this.mode = Template.modes.RAW; + break; + case o + d + '#': + this.mode = Template.modes.COMMENT; + break; + case o + d + d: + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace(o + d + d, o + d) + '")' + '\n'; + break; + case d + d + c: + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace(d + d + c, d + c) + '")' + '\n'; + break; + case d + c: + case '-' + d + c: + case '_' + d + c: + if (this.mode == Template.modes.LITERAL) { + this._addOutput(line); + } + + this.mode = null; + this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0; + break; + default: + // In script mode, depends on type of tag + if (this.mode) { + // If '//' is found without a line break, add a line break. + switch (this.mode) { + case Template.modes.EVAL: + case Template.modes.ESCAPED: + case Template.modes.RAW: + if (line.lastIndexOf('//') > line.lastIndexOf('\n')) { + line += '\n'; + } + } + switch (this.mode) { + // Just executing code + case Template.modes.EVAL: + this.source += ' ; ' + line + '\n'; + break; + // Exec, esc, and output + case Template.modes.ESCAPED: + this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\n'; + break; + // Exec and output + case Template.modes.RAW: + this.source += ' ; __append(' + stripSemi(line) + ')' + '\n'; + break; + case Template.modes.COMMENT: + // Do nothing + break; + // Literal <%% mode, append as raw output + case Template.modes.LITERAL: + this._addOutput(line); + break; + } + } + // In string mode, just add the output + else { + this._addOutput(line); + } + } + + if (self.opts.compileDebug && newLineCount) { + this.currentLine += newLineCount; + this.source += ' ; __line = ' + this.currentLine + '\n'; + } + } +}; + +/** + * Escape characters reserved in XML. + * + * This is simply an export of {@link module:utils.escapeXML}. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @param {String} markup Input string + * @return {String} Escaped string + * @public + * @func + * */ +exports.escapeXML = utils.escapeXML; + +/** + * Express.js support. + * + * This is an alias for {@link module:ejs.renderFile}, in order to support + * Express.js out-of-the-box. + * + * @func + */ + +exports.__express = exports.renderFile; + +// Add require support +/* istanbul ignore else */ +if (require.extensions) { + require.extensions['.ejs'] = function (module, flnm) { + console.log('Deprecated: this API will go away in EJS v2.8'); + var filename = flnm || /* istanbul ignore next */ module.filename; + var options = { + filename: filename, + client: true + }; + var template = fileLoader(filename).toString(); + var fn = exports.compile(template, options); + module._compile('module.exports = ' + fn.toString() + ';', filename); + }; +} + +/** + * Version of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.VERSION = _VERSION_STRING; + +/** + * Name for detection of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.name = _NAME; + +/* istanbul ignore if */ +if (typeof window != 'undefined') { + window.ejs = exports; +} + +},{"../package.json":6,"./utils":2,"fs":3,"path":4}],2:[function(require,module,exports){ +/* + * EJS Embedded JavaScript templates + * Copyright 2112 Matthew Eernisse (mde@fleegix.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +/** + * Private utility functions + * @module utils + * @private + */ + +'use strict'; + +var regExpChars = /[|\\{}()[\]^$+*?.]/g; + +/** + * Escape characters reserved in regular expressions. + * + * If `string` is `undefined` or `null`, the empty string is returned. + * + * @param {String} string Input string + * @return {String} Escaped string + * @static + * @private + */ +exports.escapeRegExpChars = function (string) { + // istanbul ignore if + if (!string) { + return ''; + } + return String(string).replace(regExpChars, '\\$&'); +}; + +var _ENCODE_HTML_RULES = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +var _MATCH_HTML = /[&<>'"]/g; + +function encode_char(c) { + return _ENCODE_HTML_RULES[c] || c; +} + +/** + * Stringified version of constants used by {@link module:utils.escapeXML}. + * + * It is used in the process of generating {@link ClientFunction}s. + * + * @readonly + * @type {String} + */ + +var escapeFuncStr = + 'var _ENCODE_HTML_RULES = {\n' ++ ' "&": "&"\n' ++ ' , "<": "<"\n' ++ ' , ">": ">"\n' ++ ' , \'"\': """\n' ++ ' , "\'": "'"\n' ++ ' }\n' ++ ' , _MATCH_HTML = /[&<>\'"]/g;\n' ++ 'function encode_char(c) {\n' ++ ' return _ENCODE_HTML_RULES[c] || c;\n' ++ '};\n'; + +/** + * Escape characters reserved in XML. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @implements {EscapeCallback} + * @param {String} markup Input string + * @return {String} Escaped string + * @static + * @private + */ + +exports.escapeXML = function (markup) { + return markup == undefined + ? '' + : String(markup) + .replace(_MATCH_HTML, encode_char); +}; +exports.escapeXML.toString = function () { + return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr; +}; + +/** + * Naive copy of properties from one object to another. + * Does not recurse into non-scalar properties + * Does not check to see if the property has a value before copying + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopy = function (to, from) { + from = from || {}; + for (var p in from) { + to[p] = from[p]; + } + return to; +}; + +/** + * Naive copy of a list of key names, from one object to another. + * Only copies property if it is actually defined + * Does not recurse into non-scalar properties + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @param {Array} list List of properties to copy + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopyFromList = function (to, from, list) { + for (var i = 0; i < list.length; i++) { + var p = list[i]; + if (typeof from[p] != 'undefined') { + to[p] = from[p]; + } + } + return to; +}; + +/** + * Simple in-process cache implementation. Does not implement limits of any + * sort. + * + * @implements Cache + * @static + * @private + */ +exports.cache = { + _data: {}, + set: function (key, val) { + this._data[key] = val; + }, + get: function (key) { + return this._data[key]; + }, + remove: function (key) { + delete this._data[key]; + }, + reset: function () { + this._data = {}; + } +}; + +},{}],3:[function(require,module,exports){ + +},{}],4:[function(require,module,exports){ +(function (process){ +// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, +// backported and transplited with Babel, with backwards-compat fixes + +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function (path) { + if (typeof path !== 'string') path = path + ''; + if (path.length === 0) return '.'; + var code = path.charCodeAt(0); + var hasRoot = code === 47 /*/*/; + var end = -1; + var matchedSlash = true; + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + if (code === 47 /*/*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) return hasRoot ? '/' : '.'; + if (hasRoot && end === 1) { + // return '//'; + // Backwards-compat fix: + return '/'; + } + return path.slice(0, end); +}; + +function basename(path) { + if (typeof path !== 'string') path = path + ''; + + var start = 0; + var end = -1; + var matchedSlash = true; + var i; + + for (i = path.length - 1; i >= 0; --i) { + if (path.charCodeAt(i) === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // path component + matchedSlash = false; + end = i + 1; + } + } + + if (end === -1) return ''; + return path.slice(start, end); +} + +// Uses a mixed approach for backwards-compatibility, as ext behavior changed +// in new Node.js versions, so only basename() above is backported here +exports.basename = function (path, ext) { + var f = basename(path); + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + +exports.extname = function (path) { + if (typeof path !== 'string') path = path + ''; + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + var preDotState = 0; + for (var i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === 46 /*.*/) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) + startDot = i; + else if (preDotState !== 1) + preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if (startDot === -1 || end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ''; + } + return path.slice(startDot, end); +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":5}],5:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],6:[function(require,module,exports){ +module.exports={ + "name": "ejs", + "description": "Embedded JavaScript templates", + "keywords": [ + "template", + "engine", + "ejs" + ], + "version": "2.7.4", + "author": "Matthew Eernisse (http://fleegix.org)", + "license": "Apache-2.0", + "main": "./lib/ejs.js", + "repository": { + "type": "git", + "url": "git://github.com/mde/ejs.git" + }, + "bugs": "https://github.com/mde/ejs/issues", + "homepage": "https://github.com/mde/ejs", + "dependencies": {}, + "devDependencies": { + "browserify": "^13.1.1", + "eslint": "^4.14.0", + "git-directory-deploy": "^1.5.1", + "jake": "^10.3.1", + "jsdoc": "^3.4.0", + "lru-cache": "^4.0.1", + "mocha": "^5.0.5", + "uglify-js": "^3.3.16" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "postinstall": "node ./postinstall.js" + } +} + +},{}]},{},[1])(1) +}); diff --git a/node_modules/ejs/ejs.min.js b/node_modules/ejs/ejs.min.js new file mode 100644 index 000000000..4b4a52e21 --- /dev/null +++ b/node_modules/ejs/ejs.min.js @@ -0,0 +1 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ejs=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i1;if(options.cache){if(!filename){throw new Error("cache option requires a filename")}func=exports.cache.get(filename);if(func){return func}if(!hasTemplate){template=fileLoader(filename).toString().replace(_BOM,"")}}else if(!hasTemplate){if(!filename){throw new Error("Internal EJS error: no file name or template "+"provided")}template=fileLoader(filename).toString().replace(_BOM,"")}func=exports.compile(template,options);if(options.cache){exports.cache.set(filename,func)}return func}function tryHandleCache(options,data,cb){var result;if(!cb){if(typeof exports.promiseImpl=="function"){return new exports.promiseImpl(function(resolve,reject){try{result=handleCache(options)(data);resolve(result)}catch(err){reject(err)}})}else{throw new Error("Please provide a callback function")}}else{try{result=handleCache(options)(data)}catch(err){return cb(err)}cb(null,result)}}function fileLoader(filePath){return exports.fileLoader(filePath)}function includeFile(path,options){var opts=utils.shallowCopy({},options);opts.filename=getIncludePath(path,opts);return handleCache(opts)}function includeSource(path,options){var opts=utils.shallowCopy({},options);var includePath;var template;includePath=getIncludePath(path,opts);template=fileLoader(includePath).toString().replace(_BOM,"");opts.filename=includePath;var templ=new Template(template,opts);templ.generateSource();return{source:templ.source,filename:includePath,template:template}}function rethrow(err,str,flnm,lineno,esc){var lines=str.split("\n");var start=Math.max(lineno-3,0);var end=Math.min(lines.length,lineno+3);var filename=esc(flnm);var context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" >> ":" ")+curr+"| "+line}).join("\n");err.path=filename;err.message=(filename||"ejs")+":"+lineno+"\n"+context+"\n\n"+err.message;throw err}function stripSemi(str){return str.replace(/;(\s*$)/,"$1")}exports.compile=function compile(template,opts){var templ;if(opts&&opts.scope){if(!scopeOptionWarned){console.warn("`scope` option is deprecated and will be removed in EJS 3");scopeOptionWarned=true}if(!opts.context){opts.context=opts.scope}delete opts.scope}templ=new Template(template,opts);return templ.compile()};exports.render=function(template,d,o){var data=d||{};var opts=o||{};if(arguments.length==2){utils.shallowCopyFromList(opts,data,_OPTS_PASSABLE_WITH_DATA)}return handleCache(opts,template)(data)};exports.renderFile=function(){var args=Array.prototype.slice.call(arguments);var filename=args.shift();var cb;var opts={filename:filename};var data;var viewOpts;if(typeof arguments[arguments.length-1]=="function"){cb=args.pop()}if(args.length){data=args.shift();if(args.length){utils.shallowCopy(opts,args.pop())}else{if(data.settings){if(data.settings.views){opts.views=data.settings.views}if(data.settings["view cache"]){opts.cache=true}viewOpts=data.settings["view options"];if(viewOpts){utils.shallowCopy(opts,viewOpts)}}utils.shallowCopyFromList(opts,data,_OPTS_PASSABLE_WITH_DATA_EXPRESS)}opts.filename=filename}else{data={}}return tryHandleCache(opts,data,cb)};exports.Template=Template;exports.clearCache=function(){exports.cache.reset()};function Template(text,opts){opts=opts||{};var options={};this.templateText=text;this.mode=null;this.truncate=false;this.currentLine=1;this.source="";this.dependencies=[];options.client=opts.client||false;options.escapeFunction=opts.escape||opts.escapeFunction||utils.escapeXML;options.compileDebug=opts.compileDebug!==false;options.debug=!!opts.debug;options.filename=opts.filename;options.openDelimiter=opts.openDelimiter||exports.openDelimiter||_DEFAULT_OPEN_DELIMITER;options.closeDelimiter=opts.closeDelimiter||exports.closeDelimiter||_DEFAULT_CLOSE_DELIMITER;options.delimiter=opts.delimiter||exports.delimiter||_DEFAULT_DELIMITER;options.strict=opts.strict||false;options.context=opts.context;options.cache=opts.cache||false;options.rmWhitespace=opts.rmWhitespace;options.root=opts.root;options.outputFunctionName=opts.outputFunctionName;options.localsName=opts.localsName||exports.localsName||_DEFAULT_LOCALS_NAME;options.views=opts.views;options.async=opts.async;options.destructuredLocals=opts.destructuredLocals;options.legacyInclude=typeof opts.legacyInclude!="undefined"?!!opts.legacyInclude:true;if(options.strict){options._with=false}else{options._with=typeof opts._with!="undefined"?opts._with:true}this.opts=options;this.regex=this.createRegex()}Template.modes={EVAL:"eval",ESCAPED:"escaped",RAW:"raw",COMMENT:"comment",LITERAL:"literal"};Template.prototype={createRegex:function(){var str=_REGEX_STRING;var delim=utils.escapeRegExpChars(this.opts.delimiter);var open=utils.escapeRegExpChars(this.opts.openDelimiter);var close=utils.escapeRegExpChars(this.opts.closeDelimiter);str=str.replace(/%/g,delim).replace(//g,close);return new RegExp(str)},compile:function(){var src;var fn;var opts=this.opts;var prepended="";var appended="";var escapeFn=opts.escapeFunction;var ctor;if(!this.source){this.generateSource();prepended+=' var __output = "";\n'+" function __append(s) { if (s !== undefined && s !== null) __output += s }\n";if(opts.outputFunctionName){prepended+=" var "+opts.outputFunctionName+" = __append;"+"\n"}if(opts.destructuredLocals&&opts.destructuredLocals.length){var destructuring=" var __locals = ("+opts.localsName+" || {}),\n";for(var i=0;i0){destructuring+=",\n "}destructuring+=name+" = __locals."+name}prepended+=destructuring+";\n"}if(opts._with!==false){prepended+=" with ("+opts.localsName+" || {}) {"+"\n";appended+=" }"+"\n"}appended+=" return __output;"+"\n";this.source=prepended+this.source+appended}if(opts.compileDebug){src="var __line = 1"+"\n"+" , __lines = "+JSON.stringify(this.templateText)+"\n"+" , __filename = "+(opts.filename?JSON.stringify(opts.filename):"undefined")+";"+"\n"+"try {"+"\n"+this.source+"} catch (e) {"+"\n"+" rethrow(e, __lines, __filename, __line, escapeFn);"+"\n"+"}"+"\n"}else{src=this.source}if(opts.client){src="escapeFn = escapeFn || "+escapeFn.toString()+";"+"\n"+src;if(opts.compileDebug){src="rethrow = rethrow || "+rethrow.toString()+";"+"\n"+src}}if(opts.strict){src='"use strict";\n'+src}if(opts.debug){console.log(src)}if(opts.compileDebug&&opts.filename){src=src+"\n"+"//# sourceURL="+opts.filename+"\n"}try{if(opts.async){try{ctor=new Function("return (async function(){}).constructor;")()}catch(e){if(e instanceof SyntaxError){throw new Error("This environment does not support async/await")}else{throw e}}}else{ctor=Function}fn=new ctor(opts.localsName+", escapeFn, include, rethrow",src)}catch(e){if(e instanceof SyntaxError){if(opts.filename){e.message+=" in "+opts.filename}e.message+=" while compiling ejs\n\n";e.message+="If the above error is not helpful, you may want to try EJS-Lint:\n";e.message+="https://github.com/RyanZim/EJS-Lint";if(!opts.async){e.message+="\n";e.message+="Or, if you meant to create an async function, pass `async: true` as an option."}}throw e}var returnedFn=opts.client?fn:function anonymous(data){var include=function(path,includeData){var d=utils.shallowCopy({},data);if(includeData){d=utils.shallowCopy(d,includeData)}return includeFile(path,opts)(d)};return fn.apply(opts.context,[data||{},escapeFn,include,rethrow])};returnedFn.dependencies=this.dependencies;if(opts.filename&&typeof Object.defineProperty==="function"){var filename=opts.filename;var basename=path.basename(filename,path.extname(filename));try{Object.defineProperty(returnedFn,"name",{value:basename,writable:false,enumerable:false,configurable:true})}catch(e){}}return returnedFn},generateSource:function(){var opts=this.opts;if(opts.rmWhitespace){this.templateText=this.templateText.replace(/[\r\n]+/g,"\n").replace(/^\s+|\s+$/gm,"")}this.templateText=this.templateText.replace(/[ \t]*<%_/gm,"<%_").replace(/_%>[ \t]*/gm,"_%>");var self=this;var matches=this.parseTemplateText();var d=this.opts.delimiter;var o=this.opts.openDelimiter;var c=this.opts.closeDelimiter;if(matches&&matches.length){matches.forEach(function(line,index){var opening;var closing;var include;var includeOpts;var includeObj;var includeSrc;if(line.indexOf(o+d)===0&&line.indexOf(o+d+d)!==0){closing=matches[index+2];if(!(closing==d+c||closing=="-"+d+c||closing=="_"+d+c)){throw new Error('Could not find matching close tag for "'+line+'".')}}if(opts.legacyInclude&&(include=line.match(/^\s*include\s+(\S+)/))){opening=matches[index-1];if(opening&&(opening==o+d||opening==o+d+"-"||opening==o+d+"_")){includeOpts=utils.shallowCopy({},self.opts);includeObj=includeSource(include[1],includeOpts);if(self.opts.compileDebug){includeSrc=" ; (function(){"+"\n"+" var __line = 1"+"\n"+" , __lines = "+JSON.stringify(includeObj.template)+"\n"+" , __filename = "+JSON.stringify(includeObj.filename)+";"+"\n"+" try {"+"\n"+includeObj.source+" } catch (e) {"+"\n"+" rethrow(e, __lines, __filename, __line, escapeFn);"+"\n"+" }"+"\n"+" ; }).call(this)"+"\n"}else{includeSrc=" ; (function(){"+"\n"+includeObj.source+" ; }).call(this)"+"\n"}self.source+=includeSrc;self.dependencies.push(exports.resolveInclude(include[1],includeOpts.filename));return}}self.scanLine(line)})}},parseTemplateText:function(){var str=this.templateText;var pat=this.regex;var result=pat.exec(str);var arr=[];var firstPos;while(result){firstPos=result.index;if(firstPos!==0){arr.push(str.substring(0,firstPos));str=str.slice(firstPos)}arr.push(result[0]);str=str.slice(result[0].length);result=pat.exec(str)}if(str){arr.push(str)}return arr},_addOutput:function(line){if(this.truncate){line=line.replace(/^(?:\r\n|\r|\n)/,"");this.truncate=false}if(!line){return line}line=line.replace(/\\/g,"\\\\");line=line.replace(/\n/g,"\\n");line=line.replace(/\r/g,"\\r");line=line.replace(/"/g,'\\"');this.source+=' ; __append("'+line+'")'+"\n"},scanLine:function(line){var self=this;var d=this.opts.delimiter;var o=this.opts.openDelimiter;var c=this.opts.closeDelimiter;var newLineCount=0;newLineCount=line.split("\n").length-1;switch(line){case o+d:case o+d+"_":this.mode=Template.modes.EVAL;break;case o+d+"=":this.mode=Template.modes.ESCAPED;break;case o+d+"-":this.mode=Template.modes.RAW;break;case o+d+"#":this.mode=Template.modes.COMMENT;break;case o+d+d:this.mode=Template.modes.LITERAL;this.source+=' ; __append("'+line.replace(o+d+d,o+d)+'")'+"\n";break;case d+d+c:this.mode=Template.modes.LITERAL;this.source+=' ; __append("'+line.replace(d+d+c,d+c)+'")'+"\n";break;case d+c:case"-"+d+c:case"_"+d+c:if(this.mode==Template.modes.LITERAL){this._addOutput(line)}this.mode=null;this.truncate=line.indexOf("-")===0||line.indexOf("_")===0;break;default:if(this.mode){switch(this.mode){case Template.modes.EVAL:case Template.modes.ESCAPED:case Template.modes.RAW:if(line.lastIndexOf("//")>line.lastIndexOf("\n")){line+="\n"}}switch(this.mode){case Template.modes.EVAL:this.source+=" ; "+line+"\n";break;case Template.modes.ESCAPED:this.source+=" ; __append(escapeFn("+stripSemi(line)+"))"+"\n";break;case Template.modes.RAW:this.source+=" ; __append("+stripSemi(line)+")"+"\n";break;case Template.modes.COMMENT:break;case Template.modes.LITERAL:this._addOutput(line);break}}else{this._addOutput(line)}}if(self.opts.compileDebug&&newLineCount){this.currentLine+=newLineCount;this.source+=" ; __line = "+this.currentLine+"\n"}}};exports.escapeXML=utils.escapeXML;exports.__express=exports.renderFile;if(require.extensions){require.extensions[".ejs"]=function(module,flnm){console.log("Deprecated: this API will go away in EJS v2.8");var filename=flnm||module.filename;var options={filename:filename,client:true};var template=fileLoader(filename).toString();var fn=exports.compile(template,options);module._compile("module.exports = "+fn.toString()+";",filename)}}exports.VERSION=_VERSION_STRING;exports.name=_NAME;if(typeof window!="undefined"){window.ejs=exports}},{"../package.json":6,"./utils":2,fs:3,path:4}],2:[function(require,module,exports){"use strict";var regExpChars=/[|\\{}()[\]^$+*?.]/g;exports.escapeRegExpChars=function(string){if(!string){return""}return String(string).replace(regExpChars,"\\$&")};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"};var _MATCH_HTML=/[&<>'"]/g;function encode_char(c){return _ENCODE_HTML_RULES[c]||c}var escapeFuncStr="var _ENCODE_HTML_RULES = {\n"+' "&": "&"\n'+' , "<": "<"\n'+' , ">": ">"\n'+' , \'"\': """\n'+' , "\'": "'"\n'+" }\n"+" , _MATCH_HTML = /[&<>'\"]/g;\n"+"function encode_char(c) {\n"+" return _ENCODE_HTML_RULES[c] || c;\n"+"};\n";exports.escapeXML=function(markup){return markup==undefined?"":String(markup).replace(_MATCH_HTML,encode_char)};exports.escapeXML.toString=function(){return Function.prototype.toString.call(this)+";\n"+escapeFuncStr};exports.shallowCopy=function(to,from){from=from||{};for(var p in from){to[p]=from[p]}return to};exports.shallowCopyFromList=function(to,from,list){for(var i=0;i=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i=1;--i){code=path.charCodeAt(i);if(code===47){if(!matchedSlash){end=i;break}}else{matchedSlash=false}}if(end===-1)return hasRoot?"/":".";if(hasRoot&&end===1){return"/"}return path.slice(0,end)};function basename(path){if(typeof path!=="string")path=path+"";var start=0;var end=-1;var matchedSlash=true;var i;for(i=path.length-1;i>=0;--i){if(path.charCodeAt(i)===47){if(!matchedSlash){start=i+1;break}}else if(end===-1){matchedSlash=false;end=i+1}}if(end===-1)return"";return path.slice(start,end)}exports.basename=function(path,ext){var f=basename(path);if(ext&&f.substr(-1*ext.length)===ext){f=f.substr(0,f.length-ext.length)}return f};exports.extname=function(path){if(typeof path!=="string")path=path+"";var startDot=-1;var startPart=0;var end=-1;var matchedSlash=true;var preDotState=0;for(var i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1){matchedSlash=false;end=i+1}if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1){preDotState=-1}}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1){return""}return path.slice(startDot,end)};function filter(xs,f){if(xs.filter)return xs.filter(f);var res=[];for(var i=0;i1){for(var i=1;i (http://fleegix.org)",license:"Apache-2.0",main:"./lib/ejs.js",repository:{type:"git",url:"git://github.com/mde/ejs.git"},bugs:"https://github.com/mde/ejs/issues",homepage:"https://github.com/mde/ejs",dependencies:{},devDependencies:{browserify:"^13.1.1",eslint:"^4.14.0","git-directory-deploy":"^1.5.1",jake:"^10.3.1",jsdoc:"^3.4.0","lru-cache":"^4.0.1",mocha:"^5.0.5","uglify-js":"^3.3.16"},engines:{node:">=0.10.0"},scripts:{test:"mocha",postinstall:"node ./postinstall.js"}}},{}]},{},[1])(1)}); diff --git a/node_modules/ejs/jakefile.js b/node_modules/ejs/jakefile.js new file mode 100644 index 000000000..7b9e50fce --- /dev/null +++ b/node_modules/ejs/jakefile.js @@ -0,0 +1,74 @@ +var fs = require('fs'); +var execSync = require('child_process').execSync; +var exec = function (cmd) { + execSync(cmd, {stdio: 'inherit'}); +}; + +/* global jake, task, desc, publishTask */ + +task('build', ['lint', 'clean', 'browserify', 'minify'], function () { + console.log('Build completed.'); +}); + +desc('Cleans browerified/minified files and package files'); +task('clean', ['clobber'], function () { + jake.rmRf('./ejs.js'); + jake.rmRf('./ejs.min.js'); + console.log('Cleaned up compiled files.'); +}); + +desc('Lints the source code'); +task('lint', ['clean'], function () { + exec('./node_modules/.bin/eslint "**/*.js"'); + console.log('Linting completed.'); +}); + +task('browserify', function () { + exec('./node_modules/browserify/bin/cmd.js --standalone ejs lib/ejs.js > ejs.js'); + console.log('Browserification completed.'); +}); + +task('minify', function () { + exec('./node_modules/uglify-js/bin/uglifyjs ejs.js > ejs.min.js'); + console.log('Minification completed.'); +}); + +desc('Generates the EJS API docs'); +task('doc', function (dev) { + jake.rmRf('out'); + var p = dev ? '-p' : ''; + exec('./node_modules/.bin/jsdoc ' + p + ' -c jsdoc.json lib/* docs/jsdoc/*'); + console.log('Documentation generated.'); +}); + +desc('Publishes the EJS API docs'); +task('docPublish', ['doc'], function () { + fs.writeFileSync('out/CNAME', 'api.ejs.co'); + console.log('Pushing docs to gh-pages...'); + exec('./node_modules/.bin/git-directory-deploy --directory out/'); + console.log('Docs published to gh-pages.'); +}); + +desc('Runs the EJS test suite'); +task('test', ['lint'], function () { + exec('./node_modules/.bin/mocha'); +}); + +publishTask('ejs', ['build'], function () { + this.packageFiles.include([ + 'jakefile.js', + 'README.md', + 'LICENSE', + 'package.json', + 'postinstall.js', + 'ejs.js', + 'ejs.min.js', + 'lib/**' + ]); +}); + +jake.Task.publish.on('complete', function () { + console.log('Updating hosted docs...'); + console.log('If this fails, run jake docPublish to re-try.'); + jake.Task.docPublish.invoke(); +}); diff --git a/node_modules/ejs/lib/ejs.js b/node_modules/ejs/lib/ejs.js new file mode 100755 index 000000000..51b202e63 --- /dev/null +++ b/node_modules/ejs/lib/ejs.js @@ -0,0 +1,980 @@ +/* + * EJS Embedded JavaScript templates + * Copyright 2112 Matthew Eernisse (mde@fleegix.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +'use strict'; + +/** + * @file Embedded JavaScript templating engine. {@link http://ejs.co} + * @author Matthew Eernisse + * @author Tiancheng "Timothy" Gu + * @project EJS + * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0} + */ + +/** + * EJS internal functions. + * + * Technically this "module" lies in the same file as {@link module:ejs}, for + * the sake of organization all the private functions re grouped into this + * module. + * + * @module ejs-internal + * @private + */ + +/** + * Embedded JavaScript templating engine. + * + * @module ejs + * @public + */ + +var fs = require('fs'); +var path = require('path'); +var utils = require('./utils'); + +var scopeOptionWarned = false; +var _VERSION_STRING = require('../package.json').version; +var _DEFAULT_OPEN_DELIMITER = '<'; +var _DEFAULT_CLOSE_DELIMITER = '>'; +var _DEFAULT_DELIMITER = '%'; +var _DEFAULT_LOCALS_NAME = 'locals'; +var _NAME = 'ejs'; +var _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'; +var _OPTS_PASSABLE_WITH_DATA = ['delimiter', 'scope', 'context', 'debug', 'compileDebug', + 'client', '_with', 'rmWhitespace', 'strict', 'filename', 'async']; +// We don't allow 'cache' option to be passed in the data obj for +// the normal `render` call, but this is where Express 2 & 3 put it +// so we make an exception for `renderFile` +var _OPTS_PASSABLE_WITH_DATA_EXPRESS = _OPTS_PASSABLE_WITH_DATA.concat('cache'); +var _BOM = /^\uFEFF/; + +/** + * EJS template function cache. This can be a LRU object from lru-cache NPM + * module. By default, it is {@link module:utils.cache}, a simple in-process + * cache that grows continuously. + * + * @type {Cache} + */ + +exports.cache = utils.cache; + +/** + * Custom file loader. Useful for template preprocessing or restricting access + * to a certain part of the filesystem. + * + * @type {fileLoader} + */ + +exports.fileLoader = fs.readFileSync; + +/** + * Name of the object containing the locals. + * + * This variable is overridden by {@link Options}`.localsName` if it is not + * `undefined`. + * + * @type {String} + * @public + */ + +exports.localsName = _DEFAULT_LOCALS_NAME; + +/** + * Promise implementation -- defaults to the native implementation if available + * This is mostly just for testability + * + * @type {Function} + * @public + */ + +exports.promiseImpl = (new Function('return this;'))().Promise; + +/** + * Get the path to the included file from the parent file path and the + * specified path. + * + * @param {String} name specified path + * @param {String} filename parent file path + * @param {Boolean} isDir parent file path whether is directory + * @return {String} + */ +exports.resolveInclude = function(name, filename, isDir) { + var dirname = path.dirname; + var extname = path.extname; + var resolve = path.resolve; + var includePath = resolve(isDir ? filename : dirname(filename), name); + var ext = extname(name); + if (!ext) { + includePath += '.ejs'; + } + return includePath; +}; + +/** + * Get the path to the included file by Options + * + * @param {String} path specified path + * @param {Options} options compilation options + * @return {String} + */ +function getIncludePath(path, options) { + var includePath; + var filePath; + var views = options.views; + var match = /^[A-Za-z]+:\\|^\//.exec(path); + + // Abs path + if (match && match.length) { + includePath = exports.resolveInclude(path.replace(/^\/*/,''), options.root || '/', true); + } + // Relative paths + else { + // Look relative to a passed filename first + if (options.filename) { + filePath = exports.resolveInclude(path, options.filename); + if (fs.existsSync(filePath)) { + includePath = filePath; + } + } + // Then look in any views directories + if (!includePath) { + if (Array.isArray(views) && views.some(function (v) { + filePath = exports.resolveInclude(path, v, true); + return fs.existsSync(filePath); + })) { + includePath = filePath; + } + } + if (!includePath) { + throw new Error('Could not find the include file "' + + options.escapeFunction(path) + '"'); + } + } + return includePath; +} + +/** + * Get the template from a string or a file, either compiled on-the-fly or + * read from cache (if enabled), and cache the template if needed. + * + * If `template` is not set, the file specified in `options.filename` will be + * read. + * + * If `options.cache` is true, this function reads the file from + * `options.filename` so it must be set prior to calling this function. + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {String} [template] template source + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned. + * @static + */ + +function handleCache(options, template) { + var func; + var filename = options.filename; + var hasTemplate = arguments.length > 1; + + if (options.cache) { + if (!filename) { + throw new Error('cache option requires a filename'); + } + func = exports.cache.get(filename); + if (func) { + return func; + } + if (!hasTemplate) { + template = fileLoader(filename).toString().replace(_BOM, ''); + } + } + else if (!hasTemplate) { + // istanbul ignore if: should not happen at all + if (!filename) { + throw new Error('Internal EJS error: no file name or template ' + + 'provided'); + } + template = fileLoader(filename).toString().replace(_BOM, ''); + } + func = exports.compile(template, options); + if (options.cache) { + exports.cache.set(filename, func); + } + return func; +} + +/** + * Try calling handleCache with the given options and data and call the + * callback with the result. If an error occurs, call the callback with + * the error. Used by renderFile(). + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {Object} data template data + * @param {RenderFileCallback} cb callback + * @static + */ + +function tryHandleCache(options, data, cb) { + var result; + if (!cb) { + if (typeof exports.promiseImpl == 'function') { + return new exports.promiseImpl(function (resolve, reject) { + try { + result = handleCache(options)(data); + resolve(result); + } + catch (err) { + reject(err); + } + }); + } + else { + throw new Error('Please provide a callback function'); + } + } + else { + try { + result = handleCache(options)(data); + } + catch (err) { + return cb(err); + } + + cb(null, result); + } +} + +/** + * fileLoader is independent + * + * @param {String} filePath ejs file path. + * @return {String} The contents of the specified file. + * @static + */ + +function fileLoader(filePath){ + return exports.fileLoader(filePath); +} + +/** + * Get the template function. + * + * If `options.cache` is `true`, then the template is cached. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned + * @static + */ + +function includeFile(path, options) { + var opts = utils.shallowCopy({}, options); + opts.filename = getIncludePath(path, opts); + return handleCache(opts); +} + +/** + * Get the JavaScript source of an included file. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {Object} + * @static + */ + +function includeSource(path, options) { + var opts = utils.shallowCopy({}, options); + var includePath; + var template; + includePath = getIncludePath(path, opts); + template = fileLoader(includePath).toString().replace(_BOM, ''); + opts.filename = includePath; + var templ = new Template(template, opts); + templ.generateSource(); + return { + source: templ.source, + filename: includePath, + template: template + }; +} + +/** + * Re-throw the given `err` in context to the `str` of ejs, `filename`, and + * `lineno`. + * + * @implements RethrowCallback + * @memberof module:ejs-internal + * @param {Error} err Error object + * @param {String} str EJS source + * @param {String} filename file name of the EJS file + * @param {String} lineno line number of the error + * @static + */ + +function rethrow(err, str, flnm, lineno, esc){ + var lines = str.split('\n'); + var start = Math.max(lineno - 3, 0); + var end = Math.min(lines.length, lineno + 3); + var filename = esc(flnm); // eslint-disable-line + // Error context + var context = lines.slice(start, end).map(function (line, i){ + var curr = i + start + 1; + return (curr == lineno ? ' >> ' : ' ') + + curr + + '| ' + + line; + }).join('\n'); + + // Alter exception message + err.path = filename; + err.message = (filename || 'ejs') + ':' + + lineno + '\n' + + context + '\n\n' + + err.message; + + throw err; +} + +function stripSemi(str){ + return str.replace(/;(\s*$)/, '$1'); +} + +/** + * Compile the given `str` of ejs into a template function. + * + * @param {String} template EJS template + * + * @param {Options} opts compilation options + * + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `opts.client`, either type might be returned. + * Note that the return type of the function also depends on the value of `opts.async`. + * @public + */ + +exports.compile = function compile(template, opts) { + var templ; + + // v1 compat + // 'scope' is 'context' + // FIXME: Remove this in a future version + if (opts && opts.scope) { + if (!scopeOptionWarned){ + console.warn('`scope` option is deprecated and will be removed in EJS 3'); + scopeOptionWarned = true; + } + if (!opts.context) { + opts.context = opts.scope; + } + delete opts.scope; + } + templ = new Template(template, opts); + return templ.compile(); +}; + +/** + * Render the given `template` of ejs. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} template EJS template + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @return {(String|Promise)} + * Return value type depends on `opts.async`. + * @public + */ + +exports.render = function (template, d, o) { + var data = d || {}; + var opts = o || {}; + + // No options object -- if there are optiony names + // in the data, copy them to options + if (arguments.length == 2) { + utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA); + } + + return handleCache(opts, template)(data); +}; + +/** + * Render an EJS file at the given `path` and callback `cb(err, str)`. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} path path to the EJS file + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @param {RenderFileCallback} cb callback + * @public + */ + +exports.renderFile = function () { + var args = Array.prototype.slice.call(arguments); + var filename = args.shift(); + var cb; + var opts = {filename: filename}; + var data; + var viewOpts; + + // Do we have a callback? + if (typeof arguments[arguments.length - 1] == 'function') { + cb = args.pop(); + } + // Do we have data/opts? + if (args.length) { + // Should always have data obj + data = args.shift(); + // Normal passed opts (data obj + opts obj) + if (args.length) { + // Use shallowCopy so we don't pollute passed in opts obj with new vals + utils.shallowCopy(opts, args.pop()); + } + // Special casing for Express (settings + opts-in-data) + else { + // Express 3 and 4 + if (data.settings) { + // Pull a few things from known locations + if (data.settings.views) { + opts.views = data.settings.views; + } + if (data.settings['view cache']) { + opts.cache = true; + } + // Undocumented after Express 2, but still usable, esp. for + // items that are unsafe to be passed along with data, like `root` + viewOpts = data.settings['view options']; + if (viewOpts) { + utils.shallowCopy(opts, viewOpts); + } + } + // Express 2 and lower, values set in app.locals, or people who just + // want to pass options in their data. NOTE: These values will override + // anything previously set in settings or settings['view options'] + utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA_EXPRESS); + } + opts.filename = filename; + } + else { + data = {}; + } + + return tryHandleCache(opts, data, cb); +}; + +/** + * Clear intermediate JavaScript cache. Calls {@link Cache#reset}. + * @public + */ + +/** + * EJS template class + * @public + */ +exports.Template = Template; + +exports.clearCache = function () { + exports.cache.reset(); +}; + +function Template(text, opts) { + opts = opts || {}; + var options = {}; + this.templateText = text; + this.mode = null; + this.truncate = false; + this.currentLine = 1; + this.source = ''; + this.dependencies = []; + options.client = opts.client || false; + options.escapeFunction = opts.escape || opts.escapeFunction || utils.escapeXML; + options.compileDebug = opts.compileDebug !== false; + options.debug = !!opts.debug; + options.filename = opts.filename; + options.openDelimiter = opts.openDelimiter || exports.openDelimiter || _DEFAULT_OPEN_DELIMITER; + options.closeDelimiter = opts.closeDelimiter || exports.closeDelimiter || _DEFAULT_CLOSE_DELIMITER; + options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER; + options.strict = opts.strict || false; + options.context = opts.context; + options.cache = opts.cache || false; + options.rmWhitespace = opts.rmWhitespace; + options.root = opts.root; + options.outputFunctionName = opts.outputFunctionName; + options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME; + options.views = opts.views; + options.async = opts.async; + options.destructuredLocals = opts.destructuredLocals; + options.legacyInclude = typeof opts.legacyInclude != 'undefined' ? !!opts.legacyInclude : true; + + if (options.strict) { + options._with = false; + } + else { + options._with = typeof opts._with != 'undefined' ? opts._with : true; + } + + this.opts = options; + + this.regex = this.createRegex(); +} + +Template.modes = { + EVAL: 'eval', + ESCAPED: 'escaped', + RAW: 'raw', + COMMENT: 'comment', + LITERAL: 'literal' +}; + +Template.prototype = { + createRegex: function () { + var str = _REGEX_STRING; + var delim = utils.escapeRegExpChars(this.opts.delimiter); + var open = utils.escapeRegExpChars(this.opts.openDelimiter); + var close = utils.escapeRegExpChars(this.opts.closeDelimiter); + str = str.replace(/%/g, delim) + .replace(//g, close); + return new RegExp(str); + }, + + compile: function () { + var src; + var fn; + var opts = this.opts; + var prepended = ''; + var appended = ''; + var escapeFn = opts.escapeFunction; + var ctor; + + if (!this.source) { + this.generateSource(); + prepended += + ' var __output = "";\n' + + ' function __append(s) { if (s !== undefined && s !== null) __output += s }\n'; + if (opts.outputFunctionName) { + prepended += ' var ' + opts.outputFunctionName + ' = __append;' + '\n'; + } + if (opts.destructuredLocals && opts.destructuredLocals.length) { + var destructuring = ' var __locals = (' + opts.localsName + ' || {}),\n'; + for (var i = 0; i < opts.destructuredLocals.length; i++) { + var name = opts.destructuredLocals[i]; + if (i > 0) { + destructuring += ',\n '; + } + destructuring += name + ' = __locals.' + name; + } + prepended += destructuring + ';\n'; + } + if (opts._with !== false) { + prepended += ' with (' + opts.localsName + ' || {}) {' + '\n'; + appended += ' }' + '\n'; + } + appended += ' return __output;' + '\n'; + this.source = prepended + this.source + appended; + } + + if (opts.compileDebug) { + src = 'var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(this.templateText) + '\n' + + ' , __filename = ' + (opts.filename ? + JSON.stringify(opts.filename) : 'undefined') + ';' + '\n' + + 'try {' + '\n' + + this.source + + '} catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n' + + '}' + '\n'; + } + else { + src = this.source; + } + + if (opts.client) { + src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\n' + src; + if (opts.compileDebug) { + src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\n' + src; + } + } + + if (opts.strict) { + src = '"use strict";\n' + src; + } + if (opts.debug) { + console.log(src); + } + if (opts.compileDebug && opts.filename) { + src = src + '\n' + + '//# sourceURL=' + opts.filename + '\n'; + } + + try { + if (opts.async) { + // Have to use generated function for this, since in envs without support, + // it breaks in parsing + try { + ctor = (new Function('return (async function(){}).constructor;'))(); + } + catch(e) { + if (e instanceof SyntaxError) { + throw new Error('This environment does not support async/await'); + } + else { + throw e; + } + } + } + else { + ctor = Function; + } + fn = new ctor(opts.localsName + ', escapeFn, include, rethrow', src); + } + catch(e) { + // istanbul ignore else + if (e instanceof SyntaxError) { + if (opts.filename) { + e.message += ' in ' + opts.filename; + } + e.message += ' while compiling ejs\n\n'; + e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\n'; + e.message += 'https://github.com/RyanZim/EJS-Lint'; + if (!opts.async) { + e.message += '\n'; + e.message += 'Or, if you meant to create an async function, pass `async: true` as an option.'; + } + } + throw e; + } + + // Return a callable function which will execute the function + // created by the source-code, with the passed data as locals + // Adds a local `include` function which allows full recursive include + var returnedFn = opts.client ? fn : function anonymous(data) { + var include = function (path, includeData) { + var d = utils.shallowCopy({}, data); + if (includeData) { + d = utils.shallowCopy(d, includeData); + } + return includeFile(path, opts)(d); + }; + return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]); + }; + returnedFn.dependencies = this.dependencies; + if (opts.filename && typeof Object.defineProperty === 'function') { + var filename = opts.filename; + var basename = path.basename(filename, path.extname(filename)); + try { + Object.defineProperty(returnedFn, 'name', { + value: basename, + writable: false, + enumerable: false, + configurable: true + }); + } catch (e) {/* ignore */} + } + return returnedFn; + }, + + generateSource: function () { + var opts = this.opts; + + if (opts.rmWhitespace) { + // Have to use two separate replace here as `^` and `$` operators don't + // work well with `\r` and empty lines don't work well with the `m` flag. + this.templateText = + this.templateText.replace(/[\r\n]+/g, '\n').replace(/^\s+|\s+$/gm, ''); + } + + // Slurp spaces and tabs before <%_ and after _%> + this.templateText = + this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>'); + + var self = this; + var matches = this.parseTemplateText(); + var d = this.opts.delimiter; + var o = this.opts.openDelimiter; + var c = this.opts.closeDelimiter; + + if (matches && matches.length) { + matches.forEach(function (line, index) { + var opening; + var closing; + var include; + var includeOpts; + var includeObj; + var includeSrc; + // If this is an opening tag, check for closing tags + // FIXME: May end up with some false positives here + // Better to store modes as k/v with openDelimiter + delimiter as key + // Then this can simply check against the map + if ( line.indexOf(o + d) === 0 // If it is a tag + && line.indexOf(o + d + d) !== 0) { // and is not escaped + closing = matches[index + 2]; + if (!(closing == d + c || closing == '-' + d + c || closing == '_' + d + c)) { + throw new Error('Could not find matching close tag for "' + line + '".'); + } + } + // HACK: backward-compat `include` preprocessor directives + if (opts.legacyInclude && (include = line.match(/^\s*include\s+(\S+)/))) { + opening = matches[index - 1]; + // Must be in EVAL or RAW mode + if (opening && (opening == o + d || opening == o + d + '-' || opening == o + d + '_')) { + includeOpts = utils.shallowCopy({}, self.opts); + includeObj = includeSource(include[1], includeOpts); + if (self.opts.compileDebug) { + includeSrc = + ' ; (function(){' + '\n' + + ' var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(includeObj.template) + '\n' + + ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n' + + ' try {' + '\n' + + includeObj.source + + ' } catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n' + + ' }' + '\n' + + ' ; }).call(this)' + '\n'; + }else{ + includeSrc = ' ; (function(){' + '\n' + includeObj.source + + ' ; }).call(this)' + '\n'; + } + self.source += includeSrc; + self.dependencies.push(exports.resolveInclude(include[1], + includeOpts.filename)); + return; + } + } + self.scanLine(line); + }); + } + + }, + + parseTemplateText: function () { + var str = this.templateText; + var pat = this.regex; + var result = pat.exec(str); + var arr = []; + var firstPos; + + while (result) { + firstPos = result.index; + + if (firstPos !== 0) { + arr.push(str.substring(0, firstPos)); + str = str.slice(firstPos); + } + + arr.push(result[0]); + str = str.slice(result[0].length); + result = pat.exec(str); + } + + if (str) { + arr.push(str); + } + + return arr; + }, + + _addOutput: function (line) { + if (this.truncate) { + // Only replace single leading linebreak in the line after + // -%> tag -- this is the single, trailing linebreak + // after the tag that the truncation mode replaces + // Handle Win / Unix / old Mac linebreaks -- do the \r\n + // combo first in the regex-or + line = line.replace(/^(?:\r\n|\r|\n)/, ''); + this.truncate = false; + } + if (!line) { + return line; + } + + // Preserve literal slashes + line = line.replace(/\\/g, '\\\\'); + + // Convert linebreaks + line = line.replace(/\n/g, '\\n'); + line = line.replace(/\r/g, '\\r'); + + // Escape double-quotes + // - this will be the delimiter during execution + line = line.replace(/"/g, '\\"'); + this.source += ' ; __append("' + line + '")' + '\n'; + }, + + scanLine: function (line) { + var self = this; + var d = this.opts.delimiter; + var o = this.opts.openDelimiter; + var c = this.opts.closeDelimiter; + var newLineCount = 0; + + newLineCount = (line.split('\n').length - 1); + + switch (line) { + case o + d: + case o + d + '_': + this.mode = Template.modes.EVAL; + break; + case o + d + '=': + this.mode = Template.modes.ESCAPED; + break; + case o + d + '-': + this.mode = Template.modes.RAW; + break; + case o + d + '#': + this.mode = Template.modes.COMMENT; + break; + case o + d + d: + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace(o + d + d, o + d) + '")' + '\n'; + break; + case d + d + c: + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace(d + d + c, d + c) + '")' + '\n'; + break; + case d + c: + case '-' + d + c: + case '_' + d + c: + if (this.mode == Template.modes.LITERAL) { + this._addOutput(line); + } + + this.mode = null; + this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0; + break; + default: + // In script mode, depends on type of tag + if (this.mode) { + // If '//' is found without a line break, add a line break. + switch (this.mode) { + case Template.modes.EVAL: + case Template.modes.ESCAPED: + case Template.modes.RAW: + if (line.lastIndexOf('//') > line.lastIndexOf('\n')) { + line += '\n'; + } + } + switch (this.mode) { + // Just executing code + case Template.modes.EVAL: + this.source += ' ; ' + line + '\n'; + break; + // Exec, esc, and output + case Template.modes.ESCAPED: + this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\n'; + break; + // Exec and output + case Template.modes.RAW: + this.source += ' ; __append(' + stripSemi(line) + ')' + '\n'; + break; + case Template.modes.COMMENT: + // Do nothing + break; + // Literal <%% mode, append as raw output + case Template.modes.LITERAL: + this._addOutput(line); + break; + } + } + // In string mode, just add the output + else { + this._addOutput(line); + } + } + + if (self.opts.compileDebug && newLineCount) { + this.currentLine += newLineCount; + this.source += ' ; __line = ' + this.currentLine + '\n'; + } + } +}; + +/** + * Escape characters reserved in XML. + * + * This is simply an export of {@link module:utils.escapeXML}. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @param {String} markup Input string + * @return {String} Escaped string + * @public + * @func + * */ +exports.escapeXML = utils.escapeXML; + +/** + * Express.js support. + * + * This is an alias for {@link module:ejs.renderFile}, in order to support + * Express.js out-of-the-box. + * + * @func + */ + +exports.__express = exports.renderFile; + +// Add require support +/* istanbul ignore else */ +if (require.extensions) { + require.extensions['.ejs'] = function (module, flnm) { + console.log('Deprecated: this API will go away in EJS v2.8'); + var filename = flnm || /* istanbul ignore next */ module.filename; + var options = { + filename: filename, + client: true + }; + var template = fileLoader(filename).toString(); + var fn = exports.compile(template, options); + module._compile('module.exports = ' + fn.toString() + ';', filename); + }; +} + +/** + * Version of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.VERSION = _VERSION_STRING; + +/** + * Name for detection of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.name = _NAME; + +/* istanbul ignore if */ +if (typeof window != 'undefined') { + window.ejs = exports; +} diff --git a/node_modules/ejs/lib/utils.js b/node_modules/ejs/lib/utils.js new file mode 100644 index 000000000..b73e80787 --- /dev/null +++ b/node_modules/ejs/lib/utils.js @@ -0,0 +1,167 @@ +/* + * EJS Embedded JavaScript templates + * Copyright 2112 Matthew Eernisse (mde@fleegix.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +/** + * Private utility functions + * @module utils + * @private + */ + +'use strict'; + +var regExpChars = /[|\\{}()[\]^$+*?.]/g; + +/** + * Escape characters reserved in regular expressions. + * + * If `string` is `undefined` or `null`, the empty string is returned. + * + * @param {String} string Input string + * @return {String} Escaped string + * @static + * @private + */ +exports.escapeRegExpChars = function (string) { + // istanbul ignore if + if (!string) { + return ''; + } + return String(string).replace(regExpChars, '\\$&'); +}; + +var _ENCODE_HTML_RULES = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +var _MATCH_HTML = /[&<>'"]/g; + +function encode_char(c) { + return _ENCODE_HTML_RULES[c] || c; +} + +/** + * Stringified version of constants used by {@link module:utils.escapeXML}. + * + * It is used in the process of generating {@link ClientFunction}s. + * + * @readonly + * @type {String} + */ + +var escapeFuncStr = + 'var _ENCODE_HTML_RULES = {\n' ++ ' "&": "&"\n' ++ ' , "<": "<"\n' ++ ' , ">": ">"\n' ++ ' , \'"\': """\n' ++ ' , "\'": "'"\n' ++ ' }\n' ++ ' , _MATCH_HTML = /[&<>\'"]/g;\n' ++ 'function encode_char(c) {\n' ++ ' return _ENCODE_HTML_RULES[c] || c;\n' ++ '};\n'; + +/** + * Escape characters reserved in XML. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @implements {EscapeCallback} + * @param {String} markup Input string + * @return {String} Escaped string + * @static + * @private + */ + +exports.escapeXML = function (markup) { + return markup == undefined + ? '' + : String(markup) + .replace(_MATCH_HTML, encode_char); +}; +exports.escapeXML.toString = function () { + return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr; +}; + +/** + * Naive copy of properties from one object to another. + * Does not recurse into non-scalar properties + * Does not check to see if the property has a value before copying + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopy = function (to, from) { + from = from || {}; + for (var p in from) { + to[p] = from[p]; + } + return to; +}; + +/** + * Naive copy of a list of key names, from one object to another. + * Only copies property if it is actually defined + * Does not recurse into non-scalar properties + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @param {Array} list List of properties to copy + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopyFromList = function (to, from, list) { + for (var i = 0; i < list.length; i++) { + var p = list[i]; + if (typeof from[p] != 'undefined') { + to[p] = from[p]; + } + } + return to; +}; + +/** + * Simple in-process cache implementation. Does not implement limits of any + * sort. + * + * @implements Cache + * @static + * @private + */ +exports.cache = { + _data: {}, + set: function (key, val) { + this._data[key] = val; + }, + get: function (key) { + return this._data[key]; + }, + remove: function (key) { + delete this._data[key]; + }, + reset: function () { + this._data = {}; + } +}; diff --git a/node_modules/ejs/package.json b/node_modules/ejs/package.json new file mode 100644 index 000000000..33d17d034 --- /dev/null +++ b/node_modules/ejs/package.json @@ -0,0 +1,37 @@ +{ + "name": "ejs", + "description": "Embedded JavaScript templates", + "keywords": [ + "template", + "engine", + "ejs" + ], + "version": "2.7.4", + "author": "Matthew Eernisse (http://fleegix.org)", + "license": "Apache-2.0", + "main": "./lib/ejs.js", + "repository": { + "type": "git", + "url": "git://github.com/mde/ejs.git" + }, + "bugs": "https://github.com/mde/ejs/issues", + "homepage": "https://github.com/mde/ejs", + "dependencies": {}, + "devDependencies": { + "browserify": "^13.1.1", + "eslint": "^4.14.0", + "git-directory-deploy": "^1.5.1", + "jake": "^10.3.1", + "jsdoc": "^3.4.0", + "lru-cache": "^4.0.1", + "mocha": "^5.0.5", + "uglify-js": "^3.3.16" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "postinstall": "node ./postinstall.js" + } +} diff --git a/node_modules/ejs/postinstall.js b/node_modules/ejs/postinstall.js new file mode 100755 index 000000000..7737f220c --- /dev/null +++ b/node_modules/ejs/postinstall.js @@ -0,0 +1,17 @@ +#!/usr/bin/env node + +'use strict'; + +function isTrue(value) { + return !!value && value !== '0' && value !== 'false'; +} + +let envDisable = isTrue(process.env.DISABLE_OPENCOLLECTIVE) || isTrue(process.env.CI); +let logLevel = process.env.npm_config_loglevel; +let logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel) > -1; + +if (!envDisable && !logLevelDisplay) { + console.log('Thank you for installing \u001b[35mEJS\u001b[0m: built with the \u001b[32mJake\u001b[0m JavaScript build tool (\u001b[32mhttps://jakejs.com/\u001b[0m)\n'); +} + + diff --git a/node_modules/entities/.travis.yml b/node_modules/entities/.travis.yml new file mode 100644 index 000000000..0ce2af6c5 --- /dev/null +++ b/node_modules/entities/.travis.yml @@ -0,0 +1,5 @@ +sudo: true +language: node_js +node_js: + - 8 +script: npm run coveralls diff --git a/node_modules/entities/LICENSE b/node_modules/entities/LICENSE new file mode 100644 index 000000000..c464f863e --- /dev/null +++ b/node_modules/entities/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +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. + +THIS 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 HOLDER 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, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/entities/index.js b/node_modules/entities/index.js new file mode 100644 index 000000000..91bf84505 --- /dev/null +++ b/node_modules/entities/index.js @@ -0,0 +1,26 @@ +var encode = require("./lib/encode.js"), + decode = require("./lib/decode.js"); + +exports.decode = function(data, level) { + return (!level || level <= 0 ? decode.XML : decode.HTML)(data); +}; + +exports.decodeStrict = function(data, level) { + return (!level || level <= 0 ? decode.XML : decode.HTMLStrict)(data); +}; + +exports.encode = function(data, level) { + return (!level || level <= 0 ? encode.XML : encode.HTML)(data); +}; + +exports.encodeXML = encode.XML; + +exports.encodeHTML4 = exports.encodeHTML5 = exports.encodeHTML = encode.HTML; + +exports.decodeXML = exports.decodeXMLStrict = decode.XML; + +exports.decodeHTML4 = exports.decodeHTML5 = exports.decodeHTML = decode.HTML; + +exports.decodeHTML4Strict = exports.decodeHTML5Strict = exports.decodeHTMLStrict = decode.HTMLStrict; + +exports.escape = encode.escape; diff --git a/node_modules/entities/lib/decode.js b/node_modules/entities/lib/decode.js new file mode 100644 index 000000000..1ca99ad63 --- /dev/null +++ b/node_modules/entities/lib/decode.js @@ -0,0 +1,70 @@ +var entityMap = require("../maps/entities.json"), + legacyMap = require("../maps/legacy.json"), + xmlMap = require("../maps/xml.json"), + decodeCodePoint = require("./decode_codepoint.js"); + +var decodeXMLStrict = getStrictDecoder(xmlMap), + decodeHTMLStrict = getStrictDecoder(entityMap); + +function getStrictDecoder(map) { + var keys = Object.keys(map).join("|"), + replace = getReplacer(map); + + keys += "|#[xX][\\da-fA-F]+|#\\d+"; + + var re = new RegExp("&(?:" + keys + ");", "g"); + + return function(str) { + return String(str).replace(re, replace); + }; +} + +var decodeHTML = (function() { + var legacy = Object.keys(legacyMap).sort(sorter); + + var keys = Object.keys(entityMap).sort(sorter); + + for (var i = 0, j = 0; i < keys.length; i++) { + if (legacy[j] === keys[i]) { + keys[i] += ";?"; + j++; + } else { + keys[i] += ";"; + } + } + + var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g"), + replace = getReplacer(entityMap); + + function replacer(str) { + if (str.substr(-1) !== ";") str += ";"; + return replace(str); + } + + //TODO consider creating a merged map + return function(str) { + return String(str).replace(re, replacer); + }; +})(); + +function sorter(a, b) { + return a < b ? 1 : -1; +} + +function getReplacer(map) { + return function replace(str) { + if (str.charAt(1) === "#") { + if (str.charAt(2) === "X" || str.charAt(2) === "x") { + return decodeCodePoint(parseInt(str.substr(3), 16)); + } + return decodeCodePoint(parseInt(str.substr(2), 10)); + } + return map[str.slice(1, -1)]; + }; +} + +module.exports = { + XML: decodeXMLStrict, + HTML: decodeHTML, + HTMLStrict: decodeHTMLStrict +}; diff --git a/node_modules/entities/lib/decode_codepoint.js b/node_modules/entities/lib/decode_codepoint.js new file mode 100644 index 000000000..2eadbe4e1 --- /dev/null +++ b/node_modules/entities/lib/decode_codepoint.js @@ -0,0 +1,25 @@ +var decodeMap = require("../maps/decode.json"); + +module.exports = decodeCodePoint; + +// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119 +function decodeCodePoint(codePoint) { + if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { + return "\uFFFD"; + } + + if (codePoint in decodeMap) { + codePoint = decodeMap[codePoint]; + } + + var output = ""; + + if (codePoint > 0xffff) { + codePoint -= 0x10000; + output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); + codePoint = 0xdc00 | (codePoint & 0x3ff); + } + + output += String.fromCharCode(codePoint); + return output; +} diff --git a/node_modules/entities/lib/encode.js b/node_modules/entities/lib/encode.js new file mode 100644 index 000000000..791c405ce --- /dev/null +++ b/node_modules/entities/lib/encode.js @@ -0,0 +1,82 @@ +var inverseXML = getInverseObj(require("../maps/xml.json")), + xmlReplacer = getInverseReplacer(inverseXML); + +exports.XML = getInverse(inverseXML, xmlReplacer); + +var inverseHTML = getInverseObj(require("../maps/entities.json")), + htmlReplacer = getInverseReplacer(inverseHTML); + +exports.HTML = getInverse(inverseHTML, htmlReplacer); + +function getInverseObj(obj) { + return Object.keys(obj) + .sort() + .reduce(function(inverse, name) { + inverse[obj[name]] = "&" + name + ";"; + return inverse; + }, {}); +} + +function getInverseReplacer(inverse) { + var single = [], + multiple = []; + + Object.keys(inverse).forEach(function(k) { + if (k.length === 1) { + single.push("\\" + k); + } else { + multiple.push(k); + } + }); + + //TODO add ranges + multiple.unshift("[" + single.join("") + "]"); + + return new RegExp(multiple.join("|"), "g"); +} + +var re_nonASCII = /[^\0-\x7F]/g, + re_astralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + +function singleCharReplacer(c) { + return ( + "&#x" + + c + .charCodeAt(0) + .toString(16) + .toUpperCase() + + ";" + ); +} + +function astralReplacer(c) { + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = c.charCodeAt(0); + var low = c.charCodeAt(1); + var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000; + return "&#x" + codePoint.toString(16).toUpperCase() + ";"; +} + +function getInverse(inverse, re) { + function func(name) { + return inverse[name]; + } + + return function(data) { + return data + .replace(re, func) + .replace(re_astralSymbols, astralReplacer) + .replace(re_nonASCII, singleCharReplacer); + }; +} + +var re_xmlChars = getInverseReplacer(inverseXML); + +function escapeXML(data) { + return data + .replace(re_xmlChars, singleCharReplacer) + .replace(re_astralSymbols, astralReplacer) + .replace(re_nonASCII, singleCharReplacer); +} + +exports.escape = escapeXML; diff --git a/node_modules/entities/maps/decode.json b/node_modules/entities/maps/decode.json new file mode 100644 index 000000000..44e5d0bb4 --- /dev/null +++ b/node_modules/entities/maps/decode.json @@ -0,0 +1 @@ +{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376} \ No newline at end of file diff --git a/node_modules/entities/maps/entities.json b/node_modules/entities/maps/entities.json new file mode 100644 index 000000000..7ccfcd8bb --- /dev/null +++ b/node_modules/entities/maps/entities.json @@ -0,0 +1 @@ +{"Aacute":"\u00C1","aacute":"\u00E1","Abreve":"\u0102","abreve":"\u0103","ac":"\u223E","acd":"\u223F","acE":"\u223E\u0333","Acirc":"\u00C2","acirc":"\u00E2","acute":"\u00B4","Acy":"\u0410","acy":"\u0430","AElig":"\u00C6","aelig":"\u00E6","af":"\u2061","Afr":"\uD835\uDD04","afr":"\uD835\uDD1E","Agrave":"\u00C0","agrave":"\u00E0","alefsym":"\u2135","aleph":"\u2135","Alpha":"\u0391","alpha":"\u03B1","Amacr":"\u0100","amacr":"\u0101","amalg":"\u2A3F","amp":"&","AMP":"&","andand":"\u2A55","And":"\u2A53","and":"\u2227","andd":"\u2A5C","andslope":"\u2A58","andv":"\u2A5A","ang":"\u2220","ange":"\u29A4","angle":"\u2220","angmsdaa":"\u29A8","angmsdab":"\u29A9","angmsdac":"\u29AA","angmsdad":"\u29AB","angmsdae":"\u29AC","angmsdaf":"\u29AD","angmsdag":"\u29AE","angmsdah":"\u29AF","angmsd":"\u2221","angrt":"\u221F","angrtvb":"\u22BE","angrtvbd":"\u299D","angsph":"\u2222","angst":"\u00C5","angzarr":"\u237C","Aogon":"\u0104","aogon":"\u0105","Aopf":"\uD835\uDD38","aopf":"\uD835\uDD52","apacir":"\u2A6F","ap":"\u2248","apE":"\u2A70","ape":"\u224A","apid":"\u224B","apos":"'","ApplyFunction":"\u2061","approx":"\u2248","approxeq":"\u224A","Aring":"\u00C5","aring":"\u00E5","Ascr":"\uD835\uDC9C","ascr":"\uD835\uDCB6","Assign":"\u2254","ast":"*","asymp":"\u2248","asympeq":"\u224D","Atilde":"\u00C3","atilde":"\u00E3","Auml":"\u00C4","auml":"\u00E4","awconint":"\u2233","awint":"\u2A11","backcong":"\u224C","backepsilon":"\u03F6","backprime":"\u2035","backsim":"\u223D","backsimeq":"\u22CD","Backslash":"\u2216","Barv":"\u2AE7","barvee":"\u22BD","barwed":"\u2305","Barwed":"\u2306","barwedge":"\u2305","bbrk":"\u23B5","bbrktbrk":"\u23B6","bcong":"\u224C","Bcy":"\u0411","bcy":"\u0431","bdquo":"\u201E","becaus":"\u2235","because":"\u2235","Because":"\u2235","bemptyv":"\u29B0","bepsi":"\u03F6","bernou":"\u212C","Bernoullis":"\u212C","Beta":"\u0392","beta":"\u03B2","beth":"\u2136","between":"\u226C","Bfr":"\uD835\uDD05","bfr":"\uD835\uDD1F","bigcap":"\u22C2","bigcirc":"\u25EF","bigcup":"\u22C3","bigodot":"\u2A00","bigoplus":"\u2A01","bigotimes":"\u2A02","bigsqcup":"\u2A06","bigstar":"\u2605","bigtriangledown":"\u25BD","bigtriangleup":"\u25B3","biguplus":"\u2A04","bigvee":"\u22C1","bigwedge":"\u22C0","bkarow":"\u290D","blacklozenge":"\u29EB","blacksquare":"\u25AA","blacktriangle":"\u25B4","blacktriangledown":"\u25BE","blacktriangleleft":"\u25C2","blacktriangleright":"\u25B8","blank":"\u2423","blk12":"\u2592","blk14":"\u2591","blk34":"\u2593","block":"\u2588","bne":"=\u20E5","bnequiv":"\u2261\u20E5","bNot":"\u2AED","bnot":"\u2310","Bopf":"\uD835\uDD39","bopf":"\uD835\uDD53","bot":"\u22A5","bottom":"\u22A5","bowtie":"\u22C8","boxbox":"\u29C9","boxdl":"\u2510","boxdL":"\u2555","boxDl":"\u2556","boxDL":"\u2557","boxdr":"\u250C","boxdR":"\u2552","boxDr":"\u2553","boxDR":"\u2554","boxh":"\u2500","boxH":"\u2550","boxhd":"\u252C","boxHd":"\u2564","boxhD":"\u2565","boxHD":"\u2566","boxhu":"\u2534","boxHu":"\u2567","boxhU":"\u2568","boxHU":"\u2569","boxminus":"\u229F","boxplus":"\u229E","boxtimes":"\u22A0","boxul":"\u2518","boxuL":"\u255B","boxUl":"\u255C","boxUL":"\u255D","boxur":"\u2514","boxuR":"\u2558","boxUr":"\u2559","boxUR":"\u255A","boxv":"\u2502","boxV":"\u2551","boxvh":"\u253C","boxvH":"\u256A","boxVh":"\u256B","boxVH":"\u256C","boxvl":"\u2524","boxvL":"\u2561","boxVl":"\u2562","boxVL":"\u2563","boxvr":"\u251C","boxvR":"\u255E","boxVr":"\u255F","boxVR":"\u2560","bprime":"\u2035","breve":"\u02D8","Breve":"\u02D8","brvbar":"\u00A6","bscr":"\uD835\uDCB7","Bscr":"\u212C","bsemi":"\u204F","bsim":"\u223D","bsime":"\u22CD","bsolb":"\u29C5","bsol":"\\","bsolhsub":"\u27C8","bull":"\u2022","bullet":"\u2022","bump":"\u224E","bumpE":"\u2AAE","bumpe":"\u224F","Bumpeq":"\u224E","bumpeq":"\u224F","Cacute":"\u0106","cacute":"\u0107","capand":"\u2A44","capbrcup":"\u2A49","capcap":"\u2A4B","cap":"\u2229","Cap":"\u22D2","capcup":"\u2A47","capdot":"\u2A40","CapitalDifferentialD":"\u2145","caps":"\u2229\uFE00","caret":"\u2041","caron":"\u02C7","Cayleys":"\u212D","ccaps":"\u2A4D","Ccaron":"\u010C","ccaron":"\u010D","Ccedil":"\u00C7","ccedil":"\u00E7","Ccirc":"\u0108","ccirc":"\u0109","Cconint":"\u2230","ccups":"\u2A4C","ccupssm":"\u2A50","Cdot":"\u010A","cdot":"\u010B","cedil":"\u00B8","Cedilla":"\u00B8","cemptyv":"\u29B2","cent":"\u00A2","centerdot":"\u00B7","CenterDot":"\u00B7","cfr":"\uD835\uDD20","Cfr":"\u212D","CHcy":"\u0427","chcy":"\u0447","check":"\u2713","checkmark":"\u2713","Chi":"\u03A7","chi":"\u03C7","circ":"\u02C6","circeq":"\u2257","circlearrowleft":"\u21BA","circlearrowright":"\u21BB","circledast":"\u229B","circledcirc":"\u229A","circleddash":"\u229D","CircleDot":"\u2299","circledR":"\u00AE","circledS":"\u24C8","CircleMinus":"\u2296","CirclePlus":"\u2295","CircleTimes":"\u2297","cir":"\u25CB","cirE":"\u29C3","cire":"\u2257","cirfnint":"\u2A10","cirmid":"\u2AEF","cirscir":"\u29C2","ClockwiseContourIntegral":"\u2232","CloseCurlyDoubleQuote":"\u201D","CloseCurlyQuote":"\u2019","clubs":"\u2663","clubsuit":"\u2663","colon":":","Colon":"\u2237","Colone":"\u2A74","colone":"\u2254","coloneq":"\u2254","comma":",","commat":"@","comp":"\u2201","compfn":"\u2218","complement":"\u2201","complexes":"\u2102","cong":"\u2245","congdot":"\u2A6D","Congruent":"\u2261","conint":"\u222E","Conint":"\u222F","ContourIntegral":"\u222E","copf":"\uD835\uDD54","Copf":"\u2102","coprod":"\u2210","Coproduct":"\u2210","copy":"\u00A9","COPY":"\u00A9","copysr":"\u2117","CounterClockwiseContourIntegral":"\u2233","crarr":"\u21B5","cross":"\u2717","Cross":"\u2A2F","Cscr":"\uD835\uDC9E","cscr":"\uD835\uDCB8","csub":"\u2ACF","csube":"\u2AD1","csup":"\u2AD0","csupe":"\u2AD2","ctdot":"\u22EF","cudarrl":"\u2938","cudarrr":"\u2935","cuepr":"\u22DE","cuesc":"\u22DF","cularr":"\u21B6","cularrp":"\u293D","cupbrcap":"\u2A48","cupcap":"\u2A46","CupCap":"\u224D","cup":"\u222A","Cup":"\u22D3","cupcup":"\u2A4A","cupdot":"\u228D","cupor":"\u2A45","cups":"\u222A\uFE00","curarr":"\u21B7","curarrm":"\u293C","curlyeqprec":"\u22DE","curlyeqsucc":"\u22DF","curlyvee":"\u22CE","curlywedge":"\u22CF","curren":"\u00A4","curvearrowleft":"\u21B6","curvearrowright":"\u21B7","cuvee":"\u22CE","cuwed":"\u22CF","cwconint":"\u2232","cwint":"\u2231","cylcty":"\u232D","dagger":"\u2020","Dagger":"\u2021","daleth":"\u2138","darr":"\u2193","Darr":"\u21A1","dArr":"\u21D3","dash":"\u2010","Dashv":"\u2AE4","dashv":"\u22A3","dbkarow":"\u290F","dblac":"\u02DD","Dcaron":"\u010E","dcaron":"\u010F","Dcy":"\u0414","dcy":"\u0434","ddagger":"\u2021","ddarr":"\u21CA","DD":"\u2145","dd":"\u2146","DDotrahd":"\u2911","ddotseq":"\u2A77","deg":"\u00B0","Del":"\u2207","Delta":"\u0394","delta":"\u03B4","demptyv":"\u29B1","dfisht":"\u297F","Dfr":"\uD835\uDD07","dfr":"\uD835\uDD21","dHar":"\u2965","dharl":"\u21C3","dharr":"\u21C2","DiacriticalAcute":"\u00B4","DiacriticalDot":"\u02D9","DiacriticalDoubleAcute":"\u02DD","DiacriticalGrave":"`","DiacriticalTilde":"\u02DC","diam":"\u22C4","diamond":"\u22C4","Diamond":"\u22C4","diamondsuit":"\u2666","diams":"\u2666","die":"\u00A8","DifferentialD":"\u2146","digamma":"\u03DD","disin":"\u22F2","div":"\u00F7","divide":"\u00F7","divideontimes":"\u22C7","divonx":"\u22C7","DJcy":"\u0402","djcy":"\u0452","dlcorn":"\u231E","dlcrop":"\u230D","dollar":"$","Dopf":"\uD835\uDD3B","dopf":"\uD835\uDD55","Dot":"\u00A8","dot":"\u02D9","DotDot":"\u20DC","doteq":"\u2250","doteqdot":"\u2251","DotEqual":"\u2250","dotminus":"\u2238","dotplus":"\u2214","dotsquare":"\u22A1","doublebarwedge":"\u2306","DoubleContourIntegral":"\u222F","DoubleDot":"\u00A8","DoubleDownArrow":"\u21D3","DoubleLeftArrow":"\u21D0","DoubleLeftRightArrow":"\u21D4","DoubleLeftTee":"\u2AE4","DoubleLongLeftArrow":"\u27F8","DoubleLongLeftRightArrow":"\u27FA","DoubleLongRightArrow":"\u27F9","DoubleRightArrow":"\u21D2","DoubleRightTee":"\u22A8","DoubleUpArrow":"\u21D1","DoubleUpDownArrow":"\u21D5","DoubleVerticalBar":"\u2225","DownArrowBar":"\u2913","downarrow":"\u2193","DownArrow":"\u2193","Downarrow":"\u21D3","DownArrowUpArrow":"\u21F5","DownBreve":"\u0311","downdownarrows":"\u21CA","downharpoonleft":"\u21C3","downharpoonright":"\u21C2","DownLeftRightVector":"\u2950","DownLeftTeeVector":"\u295E","DownLeftVectorBar":"\u2956","DownLeftVector":"\u21BD","DownRightTeeVector":"\u295F","DownRightVectorBar":"\u2957","DownRightVector":"\u21C1","DownTeeArrow":"\u21A7","DownTee":"\u22A4","drbkarow":"\u2910","drcorn":"\u231F","drcrop":"\u230C","Dscr":"\uD835\uDC9F","dscr":"\uD835\uDCB9","DScy":"\u0405","dscy":"\u0455","dsol":"\u29F6","Dstrok":"\u0110","dstrok":"\u0111","dtdot":"\u22F1","dtri":"\u25BF","dtrif":"\u25BE","duarr":"\u21F5","duhar":"\u296F","dwangle":"\u29A6","DZcy":"\u040F","dzcy":"\u045F","dzigrarr":"\u27FF","Eacute":"\u00C9","eacute":"\u00E9","easter":"\u2A6E","Ecaron":"\u011A","ecaron":"\u011B","Ecirc":"\u00CA","ecirc":"\u00EA","ecir":"\u2256","ecolon":"\u2255","Ecy":"\u042D","ecy":"\u044D","eDDot":"\u2A77","Edot":"\u0116","edot":"\u0117","eDot":"\u2251","ee":"\u2147","efDot":"\u2252","Efr":"\uD835\uDD08","efr":"\uD835\uDD22","eg":"\u2A9A","Egrave":"\u00C8","egrave":"\u00E8","egs":"\u2A96","egsdot":"\u2A98","el":"\u2A99","Element":"\u2208","elinters":"\u23E7","ell":"\u2113","els":"\u2A95","elsdot":"\u2A97","Emacr":"\u0112","emacr":"\u0113","empty":"\u2205","emptyset":"\u2205","EmptySmallSquare":"\u25FB","emptyv":"\u2205","EmptyVerySmallSquare":"\u25AB","emsp13":"\u2004","emsp14":"\u2005","emsp":"\u2003","ENG":"\u014A","eng":"\u014B","ensp":"\u2002","Eogon":"\u0118","eogon":"\u0119","Eopf":"\uD835\uDD3C","eopf":"\uD835\uDD56","epar":"\u22D5","eparsl":"\u29E3","eplus":"\u2A71","epsi":"\u03B5","Epsilon":"\u0395","epsilon":"\u03B5","epsiv":"\u03F5","eqcirc":"\u2256","eqcolon":"\u2255","eqsim":"\u2242","eqslantgtr":"\u2A96","eqslantless":"\u2A95","Equal":"\u2A75","equals":"=","EqualTilde":"\u2242","equest":"\u225F","Equilibrium":"\u21CC","equiv":"\u2261","equivDD":"\u2A78","eqvparsl":"\u29E5","erarr":"\u2971","erDot":"\u2253","escr":"\u212F","Escr":"\u2130","esdot":"\u2250","Esim":"\u2A73","esim":"\u2242","Eta":"\u0397","eta":"\u03B7","ETH":"\u00D0","eth":"\u00F0","Euml":"\u00CB","euml":"\u00EB","euro":"\u20AC","excl":"!","exist":"\u2203","Exists":"\u2203","expectation":"\u2130","exponentiale":"\u2147","ExponentialE":"\u2147","fallingdotseq":"\u2252","Fcy":"\u0424","fcy":"\u0444","female":"\u2640","ffilig":"\uFB03","fflig":"\uFB00","ffllig":"\uFB04","Ffr":"\uD835\uDD09","ffr":"\uD835\uDD23","filig":"\uFB01","FilledSmallSquare":"\u25FC","FilledVerySmallSquare":"\u25AA","fjlig":"fj","flat":"\u266D","fllig":"\uFB02","fltns":"\u25B1","fnof":"\u0192","Fopf":"\uD835\uDD3D","fopf":"\uD835\uDD57","forall":"\u2200","ForAll":"\u2200","fork":"\u22D4","forkv":"\u2AD9","Fouriertrf":"\u2131","fpartint":"\u2A0D","frac12":"\u00BD","frac13":"\u2153","frac14":"\u00BC","frac15":"\u2155","frac16":"\u2159","frac18":"\u215B","frac23":"\u2154","frac25":"\u2156","frac34":"\u00BE","frac35":"\u2157","frac38":"\u215C","frac45":"\u2158","frac56":"\u215A","frac58":"\u215D","frac78":"\u215E","frasl":"\u2044","frown":"\u2322","fscr":"\uD835\uDCBB","Fscr":"\u2131","gacute":"\u01F5","Gamma":"\u0393","gamma":"\u03B3","Gammad":"\u03DC","gammad":"\u03DD","gap":"\u2A86","Gbreve":"\u011E","gbreve":"\u011F","Gcedil":"\u0122","Gcirc":"\u011C","gcirc":"\u011D","Gcy":"\u0413","gcy":"\u0433","Gdot":"\u0120","gdot":"\u0121","ge":"\u2265","gE":"\u2267","gEl":"\u2A8C","gel":"\u22DB","geq":"\u2265","geqq":"\u2267","geqslant":"\u2A7E","gescc":"\u2AA9","ges":"\u2A7E","gesdot":"\u2A80","gesdoto":"\u2A82","gesdotol":"\u2A84","gesl":"\u22DB\uFE00","gesles":"\u2A94","Gfr":"\uD835\uDD0A","gfr":"\uD835\uDD24","gg":"\u226B","Gg":"\u22D9","ggg":"\u22D9","gimel":"\u2137","GJcy":"\u0403","gjcy":"\u0453","gla":"\u2AA5","gl":"\u2277","glE":"\u2A92","glj":"\u2AA4","gnap":"\u2A8A","gnapprox":"\u2A8A","gne":"\u2A88","gnE":"\u2269","gneq":"\u2A88","gneqq":"\u2269","gnsim":"\u22E7","Gopf":"\uD835\uDD3E","gopf":"\uD835\uDD58","grave":"`","GreaterEqual":"\u2265","GreaterEqualLess":"\u22DB","GreaterFullEqual":"\u2267","GreaterGreater":"\u2AA2","GreaterLess":"\u2277","GreaterSlantEqual":"\u2A7E","GreaterTilde":"\u2273","Gscr":"\uD835\uDCA2","gscr":"\u210A","gsim":"\u2273","gsime":"\u2A8E","gsiml":"\u2A90","gtcc":"\u2AA7","gtcir":"\u2A7A","gt":">","GT":">","Gt":"\u226B","gtdot":"\u22D7","gtlPar":"\u2995","gtquest":"\u2A7C","gtrapprox":"\u2A86","gtrarr":"\u2978","gtrdot":"\u22D7","gtreqless":"\u22DB","gtreqqless":"\u2A8C","gtrless":"\u2277","gtrsim":"\u2273","gvertneqq":"\u2269\uFE00","gvnE":"\u2269\uFE00","Hacek":"\u02C7","hairsp":"\u200A","half":"\u00BD","hamilt":"\u210B","HARDcy":"\u042A","hardcy":"\u044A","harrcir":"\u2948","harr":"\u2194","hArr":"\u21D4","harrw":"\u21AD","Hat":"^","hbar":"\u210F","Hcirc":"\u0124","hcirc":"\u0125","hearts":"\u2665","heartsuit":"\u2665","hellip":"\u2026","hercon":"\u22B9","hfr":"\uD835\uDD25","Hfr":"\u210C","HilbertSpace":"\u210B","hksearow":"\u2925","hkswarow":"\u2926","hoarr":"\u21FF","homtht":"\u223B","hookleftarrow":"\u21A9","hookrightarrow":"\u21AA","hopf":"\uD835\uDD59","Hopf":"\u210D","horbar":"\u2015","HorizontalLine":"\u2500","hscr":"\uD835\uDCBD","Hscr":"\u210B","hslash":"\u210F","Hstrok":"\u0126","hstrok":"\u0127","HumpDownHump":"\u224E","HumpEqual":"\u224F","hybull":"\u2043","hyphen":"\u2010","Iacute":"\u00CD","iacute":"\u00ED","ic":"\u2063","Icirc":"\u00CE","icirc":"\u00EE","Icy":"\u0418","icy":"\u0438","Idot":"\u0130","IEcy":"\u0415","iecy":"\u0435","iexcl":"\u00A1","iff":"\u21D4","ifr":"\uD835\uDD26","Ifr":"\u2111","Igrave":"\u00CC","igrave":"\u00EC","ii":"\u2148","iiiint":"\u2A0C","iiint":"\u222D","iinfin":"\u29DC","iiota":"\u2129","IJlig":"\u0132","ijlig":"\u0133","Imacr":"\u012A","imacr":"\u012B","image":"\u2111","ImaginaryI":"\u2148","imagline":"\u2110","imagpart":"\u2111","imath":"\u0131","Im":"\u2111","imof":"\u22B7","imped":"\u01B5","Implies":"\u21D2","incare":"\u2105","in":"\u2208","infin":"\u221E","infintie":"\u29DD","inodot":"\u0131","intcal":"\u22BA","int":"\u222B","Int":"\u222C","integers":"\u2124","Integral":"\u222B","intercal":"\u22BA","Intersection":"\u22C2","intlarhk":"\u2A17","intprod":"\u2A3C","InvisibleComma":"\u2063","InvisibleTimes":"\u2062","IOcy":"\u0401","iocy":"\u0451","Iogon":"\u012E","iogon":"\u012F","Iopf":"\uD835\uDD40","iopf":"\uD835\uDD5A","Iota":"\u0399","iota":"\u03B9","iprod":"\u2A3C","iquest":"\u00BF","iscr":"\uD835\uDCBE","Iscr":"\u2110","isin":"\u2208","isindot":"\u22F5","isinE":"\u22F9","isins":"\u22F4","isinsv":"\u22F3","isinv":"\u2208","it":"\u2062","Itilde":"\u0128","itilde":"\u0129","Iukcy":"\u0406","iukcy":"\u0456","Iuml":"\u00CF","iuml":"\u00EF","Jcirc":"\u0134","jcirc":"\u0135","Jcy":"\u0419","jcy":"\u0439","Jfr":"\uD835\uDD0D","jfr":"\uD835\uDD27","jmath":"\u0237","Jopf":"\uD835\uDD41","jopf":"\uD835\uDD5B","Jscr":"\uD835\uDCA5","jscr":"\uD835\uDCBF","Jsercy":"\u0408","jsercy":"\u0458","Jukcy":"\u0404","jukcy":"\u0454","Kappa":"\u039A","kappa":"\u03BA","kappav":"\u03F0","Kcedil":"\u0136","kcedil":"\u0137","Kcy":"\u041A","kcy":"\u043A","Kfr":"\uD835\uDD0E","kfr":"\uD835\uDD28","kgreen":"\u0138","KHcy":"\u0425","khcy":"\u0445","KJcy":"\u040C","kjcy":"\u045C","Kopf":"\uD835\uDD42","kopf":"\uD835\uDD5C","Kscr":"\uD835\uDCA6","kscr":"\uD835\uDCC0","lAarr":"\u21DA","Lacute":"\u0139","lacute":"\u013A","laemptyv":"\u29B4","lagran":"\u2112","Lambda":"\u039B","lambda":"\u03BB","lang":"\u27E8","Lang":"\u27EA","langd":"\u2991","langle":"\u27E8","lap":"\u2A85","Laplacetrf":"\u2112","laquo":"\u00AB","larrb":"\u21E4","larrbfs":"\u291F","larr":"\u2190","Larr":"\u219E","lArr":"\u21D0","larrfs":"\u291D","larrhk":"\u21A9","larrlp":"\u21AB","larrpl":"\u2939","larrsim":"\u2973","larrtl":"\u21A2","latail":"\u2919","lAtail":"\u291B","lat":"\u2AAB","late":"\u2AAD","lates":"\u2AAD\uFE00","lbarr":"\u290C","lBarr":"\u290E","lbbrk":"\u2772","lbrace":"{","lbrack":"[","lbrke":"\u298B","lbrksld":"\u298F","lbrkslu":"\u298D","Lcaron":"\u013D","lcaron":"\u013E","Lcedil":"\u013B","lcedil":"\u013C","lceil":"\u2308","lcub":"{","Lcy":"\u041B","lcy":"\u043B","ldca":"\u2936","ldquo":"\u201C","ldquor":"\u201E","ldrdhar":"\u2967","ldrushar":"\u294B","ldsh":"\u21B2","le":"\u2264","lE":"\u2266","LeftAngleBracket":"\u27E8","LeftArrowBar":"\u21E4","leftarrow":"\u2190","LeftArrow":"\u2190","Leftarrow":"\u21D0","LeftArrowRightArrow":"\u21C6","leftarrowtail":"\u21A2","LeftCeiling":"\u2308","LeftDoubleBracket":"\u27E6","LeftDownTeeVector":"\u2961","LeftDownVectorBar":"\u2959","LeftDownVector":"\u21C3","LeftFloor":"\u230A","leftharpoondown":"\u21BD","leftharpoonup":"\u21BC","leftleftarrows":"\u21C7","leftrightarrow":"\u2194","LeftRightArrow":"\u2194","Leftrightarrow":"\u21D4","leftrightarrows":"\u21C6","leftrightharpoons":"\u21CB","leftrightsquigarrow":"\u21AD","LeftRightVector":"\u294E","LeftTeeArrow":"\u21A4","LeftTee":"\u22A3","LeftTeeVector":"\u295A","leftthreetimes":"\u22CB","LeftTriangleBar":"\u29CF","LeftTriangle":"\u22B2","LeftTriangleEqual":"\u22B4","LeftUpDownVector":"\u2951","LeftUpTeeVector":"\u2960","LeftUpVectorBar":"\u2958","LeftUpVector":"\u21BF","LeftVectorBar":"\u2952","LeftVector":"\u21BC","lEg":"\u2A8B","leg":"\u22DA","leq":"\u2264","leqq":"\u2266","leqslant":"\u2A7D","lescc":"\u2AA8","les":"\u2A7D","lesdot":"\u2A7F","lesdoto":"\u2A81","lesdotor":"\u2A83","lesg":"\u22DA\uFE00","lesges":"\u2A93","lessapprox":"\u2A85","lessdot":"\u22D6","lesseqgtr":"\u22DA","lesseqqgtr":"\u2A8B","LessEqualGreater":"\u22DA","LessFullEqual":"\u2266","LessGreater":"\u2276","lessgtr":"\u2276","LessLess":"\u2AA1","lesssim":"\u2272","LessSlantEqual":"\u2A7D","LessTilde":"\u2272","lfisht":"\u297C","lfloor":"\u230A","Lfr":"\uD835\uDD0F","lfr":"\uD835\uDD29","lg":"\u2276","lgE":"\u2A91","lHar":"\u2962","lhard":"\u21BD","lharu":"\u21BC","lharul":"\u296A","lhblk":"\u2584","LJcy":"\u0409","ljcy":"\u0459","llarr":"\u21C7","ll":"\u226A","Ll":"\u22D8","llcorner":"\u231E","Lleftarrow":"\u21DA","llhard":"\u296B","lltri":"\u25FA","Lmidot":"\u013F","lmidot":"\u0140","lmoustache":"\u23B0","lmoust":"\u23B0","lnap":"\u2A89","lnapprox":"\u2A89","lne":"\u2A87","lnE":"\u2268","lneq":"\u2A87","lneqq":"\u2268","lnsim":"\u22E6","loang":"\u27EC","loarr":"\u21FD","lobrk":"\u27E6","longleftarrow":"\u27F5","LongLeftArrow":"\u27F5","Longleftarrow":"\u27F8","longleftrightarrow":"\u27F7","LongLeftRightArrow":"\u27F7","Longleftrightarrow":"\u27FA","longmapsto":"\u27FC","longrightarrow":"\u27F6","LongRightArrow":"\u27F6","Longrightarrow":"\u27F9","looparrowleft":"\u21AB","looparrowright":"\u21AC","lopar":"\u2985","Lopf":"\uD835\uDD43","lopf":"\uD835\uDD5D","loplus":"\u2A2D","lotimes":"\u2A34","lowast":"\u2217","lowbar":"_","LowerLeftArrow":"\u2199","LowerRightArrow":"\u2198","loz":"\u25CA","lozenge":"\u25CA","lozf":"\u29EB","lpar":"(","lparlt":"\u2993","lrarr":"\u21C6","lrcorner":"\u231F","lrhar":"\u21CB","lrhard":"\u296D","lrm":"\u200E","lrtri":"\u22BF","lsaquo":"\u2039","lscr":"\uD835\uDCC1","Lscr":"\u2112","lsh":"\u21B0","Lsh":"\u21B0","lsim":"\u2272","lsime":"\u2A8D","lsimg":"\u2A8F","lsqb":"[","lsquo":"\u2018","lsquor":"\u201A","Lstrok":"\u0141","lstrok":"\u0142","ltcc":"\u2AA6","ltcir":"\u2A79","lt":"<","LT":"<","Lt":"\u226A","ltdot":"\u22D6","lthree":"\u22CB","ltimes":"\u22C9","ltlarr":"\u2976","ltquest":"\u2A7B","ltri":"\u25C3","ltrie":"\u22B4","ltrif":"\u25C2","ltrPar":"\u2996","lurdshar":"\u294A","luruhar":"\u2966","lvertneqq":"\u2268\uFE00","lvnE":"\u2268\uFE00","macr":"\u00AF","male":"\u2642","malt":"\u2720","maltese":"\u2720","Map":"\u2905","map":"\u21A6","mapsto":"\u21A6","mapstodown":"\u21A7","mapstoleft":"\u21A4","mapstoup":"\u21A5","marker":"\u25AE","mcomma":"\u2A29","Mcy":"\u041C","mcy":"\u043C","mdash":"\u2014","mDDot":"\u223A","measuredangle":"\u2221","MediumSpace":"\u205F","Mellintrf":"\u2133","Mfr":"\uD835\uDD10","mfr":"\uD835\uDD2A","mho":"\u2127","micro":"\u00B5","midast":"*","midcir":"\u2AF0","mid":"\u2223","middot":"\u00B7","minusb":"\u229F","minus":"\u2212","minusd":"\u2238","minusdu":"\u2A2A","MinusPlus":"\u2213","mlcp":"\u2ADB","mldr":"\u2026","mnplus":"\u2213","models":"\u22A7","Mopf":"\uD835\uDD44","mopf":"\uD835\uDD5E","mp":"\u2213","mscr":"\uD835\uDCC2","Mscr":"\u2133","mstpos":"\u223E","Mu":"\u039C","mu":"\u03BC","multimap":"\u22B8","mumap":"\u22B8","nabla":"\u2207","Nacute":"\u0143","nacute":"\u0144","nang":"\u2220\u20D2","nap":"\u2249","napE":"\u2A70\u0338","napid":"\u224B\u0338","napos":"\u0149","napprox":"\u2249","natural":"\u266E","naturals":"\u2115","natur":"\u266E","nbsp":"\u00A0","nbump":"\u224E\u0338","nbumpe":"\u224F\u0338","ncap":"\u2A43","Ncaron":"\u0147","ncaron":"\u0148","Ncedil":"\u0145","ncedil":"\u0146","ncong":"\u2247","ncongdot":"\u2A6D\u0338","ncup":"\u2A42","Ncy":"\u041D","ncy":"\u043D","ndash":"\u2013","nearhk":"\u2924","nearr":"\u2197","neArr":"\u21D7","nearrow":"\u2197","ne":"\u2260","nedot":"\u2250\u0338","NegativeMediumSpace":"\u200B","NegativeThickSpace":"\u200B","NegativeThinSpace":"\u200B","NegativeVeryThinSpace":"\u200B","nequiv":"\u2262","nesear":"\u2928","nesim":"\u2242\u0338","NestedGreaterGreater":"\u226B","NestedLessLess":"\u226A","NewLine":"\n","nexist":"\u2204","nexists":"\u2204","Nfr":"\uD835\uDD11","nfr":"\uD835\uDD2B","ngE":"\u2267\u0338","nge":"\u2271","ngeq":"\u2271","ngeqq":"\u2267\u0338","ngeqslant":"\u2A7E\u0338","nges":"\u2A7E\u0338","nGg":"\u22D9\u0338","ngsim":"\u2275","nGt":"\u226B\u20D2","ngt":"\u226F","ngtr":"\u226F","nGtv":"\u226B\u0338","nharr":"\u21AE","nhArr":"\u21CE","nhpar":"\u2AF2","ni":"\u220B","nis":"\u22FC","nisd":"\u22FA","niv":"\u220B","NJcy":"\u040A","njcy":"\u045A","nlarr":"\u219A","nlArr":"\u21CD","nldr":"\u2025","nlE":"\u2266\u0338","nle":"\u2270","nleftarrow":"\u219A","nLeftarrow":"\u21CD","nleftrightarrow":"\u21AE","nLeftrightarrow":"\u21CE","nleq":"\u2270","nleqq":"\u2266\u0338","nleqslant":"\u2A7D\u0338","nles":"\u2A7D\u0338","nless":"\u226E","nLl":"\u22D8\u0338","nlsim":"\u2274","nLt":"\u226A\u20D2","nlt":"\u226E","nltri":"\u22EA","nltrie":"\u22EC","nLtv":"\u226A\u0338","nmid":"\u2224","NoBreak":"\u2060","NonBreakingSpace":"\u00A0","nopf":"\uD835\uDD5F","Nopf":"\u2115","Not":"\u2AEC","not":"\u00AC","NotCongruent":"\u2262","NotCupCap":"\u226D","NotDoubleVerticalBar":"\u2226","NotElement":"\u2209","NotEqual":"\u2260","NotEqualTilde":"\u2242\u0338","NotExists":"\u2204","NotGreater":"\u226F","NotGreaterEqual":"\u2271","NotGreaterFullEqual":"\u2267\u0338","NotGreaterGreater":"\u226B\u0338","NotGreaterLess":"\u2279","NotGreaterSlantEqual":"\u2A7E\u0338","NotGreaterTilde":"\u2275","NotHumpDownHump":"\u224E\u0338","NotHumpEqual":"\u224F\u0338","notin":"\u2209","notindot":"\u22F5\u0338","notinE":"\u22F9\u0338","notinva":"\u2209","notinvb":"\u22F7","notinvc":"\u22F6","NotLeftTriangleBar":"\u29CF\u0338","NotLeftTriangle":"\u22EA","NotLeftTriangleEqual":"\u22EC","NotLess":"\u226E","NotLessEqual":"\u2270","NotLessGreater":"\u2278","NotLessLess":"\u226A\u0338","NotLessSlantEqual":"\u2A7D\u0338","NotLessTilde":"\u2274","NotNestedGreaterGreater":"\u2AA2\u0338","NotNestedLessLess":"\u2AA1\u0338","notni":"\u220C","notniva":"\u220C","notnivb":"\u22FE","notnivc":"\u22FD","NotPrecedes":"\u2280","NotPrecedesEqual":"\u2AAF\u0338","NotPrecedesSlantEqual":"\u22E0","NotReverseElement":"\u220C","NotRightTriangleBar":"\u29D0\u0338","NotRightTriangle":"\u22EB","NotRightTriangleEqual":"\u22ED","NotSquareSubset":"\u228F\u0338","NotSquareSubsetEqual":"\u22E2","NotSquareSuperset":"\u2290\u0338","NotSquareSupersetEqual":"\u22E3","NotSubset":"\u2282\u20D2","NotSubsetEqual":"\u2288","NotSucceeds":"\u2281","NotSucceedsEqual":"\u2AB0\u0338","NotSucceedsSlantEqual":"\u22E1","NotSucceedsTilde":"\u227F\u0338","NotSuperset":"\u2283\u20D2","NotSupersetEqual":"\u2289","NotTilde":"\u2241","NotTildeEqual":"\u2244","NotTildeFullEqual":"\u2247","NotTildeTilde":"\u2249","NotVerticalBar":"\u2224","nparallel":"\u2226","npar":"\u2226","nparsl":"\u2AFD\u20E5","npart":"\u2202\u0338","npolint":"\u2A14","npr":"\u2280","nprcue":"\u22E0","nprec":"\u2280","npreceq":"\u2AAF\u0338","npre":"\u2AAF\u0338","nrarrc":"\u2933\u0338","nrarr":"\u219B","nrArr":"\u21CF","nrarrw":"\u219D\u0338","nrightarrow":"\u219B","nRightarrow":"\u21CF","nrtri":"\u22EB","nrtrie":"\u22ED","nsc":"\u2281","nsccue":"\u22E1","nsce":"\u2AB0\u0338","Nscr":"\uD835\uDCA9","nscr":"\uD835\uDCC3","nshortmid":"\u2224","nshortparallel":"\u2226","nsim":"\u2241","nsime":"\u2244","nsimeq":"\u2244","nsmid":"\u2224","nspar":"\u2226","nsqsube":"\u22E2","nsqsupe":"\u22E3","nsub":"\u2284","nsubE":"\u2AC5\u0338","nsube":"\u2288","nsubset":"\u2282\u20D2","nsubseteq":"\u2288","nsubseteqq":"\u2AC5\u0338","nsucc":"\u2281","nsucceq":"\u2AB0\u0338","nsup":"\u2285","nsupE":"\u2AC6\u0338","nsupe":"\u2289","nsupset":"\u2283\u20D2","nsupseteq":"\u2289","nsupseteqq":"\u2AC6\u0338","ntgl":"\u2279","Ntilde":"\u00D1","ntilde":"\u00F1","ntlg":"\u2278","ntriangleleft":"\u22EA","ntrianglelefteq":"\u22EC","ntriangleright":"\u22EB","ntrianglerighteq":"\u22ED","Nu":"\u039D","nu":"\u03BD","num":"#","numero":"\u2116","numsp":"\u2007","nvap":"\u224D\u20D2","nvdash":"\u22AC","nvDash":"\u22AD","nVdash":"\u22AE","nVDash":"\u22AF","nvge":"\u2265\u20D2","nvgt":">\u20D2","nvHarr":"\u2904","nvinfin":"\u29DE","nvlArr":"\u2902","nvle":"\u2264\u20D2","nvlt":"<\u20D2","nvltrie":"\u22B4\u20D2","nvrArr":"\u2903","nvrtrie":"\u22B5\u20D2","nvsim":"\u223C\u20D2","nwarhk":"\u2923","nwarr":"\u2196","nwArr":"\u21D6","nwarrow":"\u2196","nwnear":"\u2927","Oacute":"\u00D3","oacute":"\u00F3","oast":"\u229B","Ocirc":"\u00D4","ocirc":"\u00F4","ocir":"\u229A","Ocy":"\u041E","ocy":"\u043E","odash":"\u229D","Odblac":"\u0150","odblac":"\u0151","odiv":"\u2A38","odot":"\u2299","odsold":"\u29BC","OElig":"\u0152","oelig":"\u0153","ofcir":"\u29BF","Ofr":"\uD835\uDD12","ofr":"\uD835\uDD2C","ogon":"\u02DB","Ograve":"\u00D2","ograve":"\u00F2","ogt":"\u29C1","ohbar":"\u29B5","ohm":"\u03A9","oint":"\u222E","olarr":"\u21BA","olcir":"\u29BE","olcross":"\u29BB","oline":"\u203E","olt":"\u29C0","Omacr":"\u014C","omacr":"\u014D","Omega":"\u03A9","omega":"\u03C9","Omicron":"\u039F","omicron":"\u03BF","omid":"\u29B6","ominus":"\u2296","Oopf":"\uD835\uDD46","oopf":"\uD835\uDD60","opar":"\u29B7","OpenCurlyDoubleQuote":"\u201C","OpenCurlyQuote":"\u2018","operp":"\u29B9","oplus":"\u2295","orarr":"\u21BB","Or":"\u2A54","or":"\u2228","ord":"\u2A5D","order":"\u2134","orderof":"\u2134","ordf":"\u00AA","ordm":"\u00BA","origof":"\u22B6","oror":"\u2A56","orslope":"\u2A57","orv":"\u2A5B","oS":"\u24C8","Oscr":"\uD835\uDCAA","oscr":"\u2134","Oslash":"\u00D8","oslash":"\u00F8","osol":"\u2298","Otilde":"\u00D5","otilde":"\u00F5","otimesas":"\u2A36","Otimes":"\u2A37","otimes":"\u2297","Ouml":"\u00D6","ouml":"\u00F6","ovbar":"\u233D","OverBar":"\u203E","OverBrace":"\u23DE","OverBracket":"\u23B4","OverParenthesis":"\u23DC","para":"\u00B6","parallel":"\u2225","par":"\u2225","parsim":"\u2AF3","parsl":"\u2AFD","part":"\u2202","PartialD":"\u2202","Pcy":"\u041F","pcy":"\u043F","percnt":"%","period":".","permil":"\u2030","perp":"\u22A5","pertenk":"\u2031","Pfr":"\uD835\uDD13","pfr":"\uD835\uDD2D","Phi":"\u03A6","phi":"\u03C6","phiv":"\u03D5","phmmat":"\u2133","phone":"\u260E","Pi":"\u03A0","pi":"\u03C0","pitchfork":"\u22D4","piv":"\u03D6","planck":"\u210F","planckh":"\u210E","plankv":"\u210F","plusacir":"\u2A23","plusb":"\u229E","pluscir":"\u2A22","plus":"+","plusdo":"\u2214","plusdu":"\u2A25","pluse":"\u2A72","PlusMinus":"\u00B1","plusmn":"\u00B1","plussim":"\u2A26","plustwo":"\u2A27","pm":"\u00B1","Poincareplane":"\u210C","pointint":"\u2A15","popf":"\uD835\uDD61","Popf":"\u2119","pound":"\u00A3","prap":"\u2AB7","Pr":"\u2ABB","pr":"\u227A","prcue":"\u227C","precapprox":"\u2AB7","prec":"\u227A","preccurlyeq":"\u227C","Precedes":"\u227A","PrecedesEqual":"\u2AAF","PrecedesSlantEqual":"\u227C","PrecedesTilde":"\u227E","preceq":"\u2AAF","precnapprox":"\u2AB9","precneqq":"\u2AB5","precnsim":"\u22E8","pre":"\u2AAF","prE":"\u2AB3","precsim":"\u227E","prime":"\u2032","Prime":"\u2033","primes":"\u2119","prnap":"\u2AB9","prnE":"\u2AB5","prnsim":"\u22E8","prod":"\u220F","Product":"\u220F","profalar":"\u232E","profline":"\u2312","profsurf":"\u2313","prop":"\u221D","Proportional":"\u221D","Proportion":"\u2237","propto":"\u221D","prsim":"\u227E","prurel":"\u22B0","Pscr":"\uD835\uDCAB","pscr":"\uD835\uDCC5","Psi":"\u03A8","psi":"\u03C8","puncsp":"\u2008","Qfr":"\uD835\uDD14","qfr":"\uD835\uDD2E","qint":"\u2A0C","qopf":"\uD835\uDD62","Qopf":"\u211A","qprime":"\u2057","Qscr":"\uD835\uDCAC","qscr":"\uD835\uDCC6","quaternions":"\u210D","quatint":"\u2A16","quest":"?","questeq":"\u225F","quot":"\"","QUOT":"\"","rAarr":"\u21DB","race":"\u223D\u0331","Racute":"\u0154","racute":"\u0155","radic":"\u221A","raemptyv":"\u29B3","rang":"\u27E9","Rang":"\u27EB","rangd":"\u2992","range":"\u29A5","rangle":"\u27E9","raquo":"\u00BB","rarrap":"\u2975","rarrb":"\u21E5","rarrbfs":"\u2920","rarrc":"\u2933","rarr":"\u2192","Rarr":"\u21A0","rArr":"\u21D2","rarrfs":"\u291E","rarrhk":"\u21AA","rarrlp":"\u21AC","rarrpl":"\u2945","rarrsim":"\u2974","Rarrtl":"\u2916","rarrtl":"\u21A3","rarrw":"\u219D","ratail":"\u291A","rAtail":"\u291C","ratio":"\u2236","rationals":"\u211A","rbarr":"\u290D","rBarr":"\u290F","RBarr":"\u2910","rbbrk":"\u2773","rbrace":"}","rbrack":"]","rbrke":"\u298C","rbrksld":"\u298E","rbrkslu":"\u2990","Rcaron":"\u0158","rcaron":"\u0159","Rcedil":"\u0156","rcedil":"\u0157","rceil":"\u2309","rcub":"}","Rcy":"\u0420","rcy":"\u0440","rdca":"\u2937","rdldhar":"\u2969","rdquo":"\u201D","rdquor":"\u201D","rdsh":"\u21B3","real":"\u211C","realine":"\u211B","realpart":"\u211C","reals":"\u211D","Re":"\u211C","rect":"\u25AD","reg":"\u00AE","REG":"\u00AE","ReverseElement":"\u220B","ReverseEquilibrium":"\u21CB","ReverseUpEquilibrium":"\u296F","rfisht":"\u297D","rfloor":"\u230B","rfr":"\uD835\uDD2F","Rfr":"\u211C","rHar":"\u2964","rhard":"\u21C1","rharu":"\u21C0","rharul":"\u296C","Rho":"\u03A1","rho":"\u03C1","rhov":"\u03F1","RightAngleBracket":"\u27E9","RightArrowBar":"\u21E5","rightarrow":"\u2192","RightArrow":"\u2192","Rightarrow":"\u21D2","RightArrowLeftArrow":"\u21C4","rightarrowtail":"\u21A3","RightCeiling":"\u2309","RightDoubleBracket":"\u27E7","RightDownTeeVector":"\u295D","RightDownVectorBar":"\u2955","RightDownVector":"\u21C2","RightFloor":"\u230B","rightharpoondown":"\u21C1","rightharpoonup":"\u21C0","rightleftarrows":"\u21C4","rightleftharpoons":"\u21CC","rightrightarrows":"\u21C9","rightsquigarrow":"\u219D","RightTeeArrow":"\u21A6","RightTee":"\u22A2","RightTeeVector":"\u295B","rightthreetimes":"\u22CC","RightTriangleBar":"\u29D0","RightTriangle":"\u22B3","RightTriangleEqual":"\u22B5","RightUpDownVector":"\u294F","RightUpTeeVector":"\u295C","RightUpVectorBar":"\u2954","RightUpVector":"\u21BE","RightVectorBar":"\u2953","RightVector":"\u21C0","ring":"\u02DA","risingdotseq":"\u2253","rlarr":"\u21C4","rlhar":"\u21CC","rlm":"\u200F","rmoustache":"\u23B1","rmoust":"\u23B1","rnmid":"\u2AEE","roang":"\u27ED","roarr":"\u21FE","robrk":"\u27E7","ropar":"\u2986","ropf":"\uD835\uDD63","Ropf":"\u211D","roplus":"\u2A2E","rotimes":"\u2A35","RoundImplies":"\u2970","rpar":")","rpargt":"\u2994","rppolint":"\u2A12","rrarr":"\u21C9","Rrightarrow":"\u21DB","rsaquo":"\u203A","rscr":"\uD835\uDCC7","Rscr":"\u211B","rsh":"\u21B1","Rsh":"\u21B1","rsqb":"]","rsquo":"\u2019","rsquor":"\u2019","rthree":"\u22CC","rtimes":"\u22CA","rtri":"\u25B9","rtrie":"\u22B5","rtrif":"\u25B8","rtriltri":"\u29CE","RuleDelayed":"\u29F4","ruluhar":"\u2968","rx":"\u211E","Sacute":"\u015A","sacute":"\u015B","sbquo":"\u201A","scap":"\u2AB8","Scaron":"\u0160","scaron":"\u0161","Sc":"\u2ABC","sc":"\u227B","sccue":"\u227D","sce":"\u2AB0","scE":"\u2AB4","Scedil":"\u015E","scedil":"\u015F","Scirc":"\u015C","scirc":"\u015D","scnap":"\u2ABA","scnE":"\u2AB6","scnsim":"\u22E9","scpolint":"\u2A13","scsim":"\u227F","Scy":"\u0421","scy":"\u0441","sdotb":"\u22A1","sdot":"\u22C5","sdote":"\u2A66","searhk":"\u2925","searr":"\u2198","seArr":"\u21D8","searrow":"\u2198","sect":"\u00A7","semi":";","seswar":"\u2929","setminus":"\u2216","setmn":"\u2216","sext":"\u2736","Sfr":"\uD835\uDD16","sfr":"\uD835\uDD30","sfrown":"\u2322","sharp":"\u266F","SHCHcy":"\u0429","shchcy":"\u0449","SHcy":"\u0428","shcy":"\u0448","ShortDownArrow":"\u2193","ShortLeftArrow":"\u2190","shortmid":"\u2223","shortparallel":"\u2225","ShortRightArrow":"\u2192","ShortUpArrow":"\u2191","shy":"\u00AD","Sigma":"\u03A3","sigma":"\u03C3","sigmaf":"\u03C2","sigmav":"\u03C2","sim":"\u223C","simdot":"\u2A6A","sime":"\u2243","simeq":"\u2243","simg":"\u2A9E","simgE":"\u2AA0","siml":"\u2A9D","simlE":"\u2A9F","simne":"\u2246","simplus":"\u2A24","simrarr":"\u2972","slarr":"\u2190","SmallCircle":"\u2218","smallsetminus":"\u2216","smashp":"\u2A33","smeparsl":"\u29E4","smid":"\u2223","smile":"\u2323","smt":"\u2AAA","smte":"\u2AAC","smtes":"\u2AAC\uFE00","SOFTcy":"\u042C","softcy":"\u044C","solbar":"\u233F","solb":"\u29C4","sol":"/","Sopf":"\uD835\uDD4A","sopf":"\uD835\uDD64","spades":"\u2660","spadesuit":"\u2660","spar":"\u2225","sqcap":"\u2293","sqcaps":"\u2293\uFE00","sqcup":"\u2294","sqcups":"\u2294\uFE00","Sqrt":"\u221A","sqsub":"\u228F","sqsube":"\u2291","sqsubset":"\u228F","sqsubseteq":"\u2291","sqsup":"\u2290","sqsupe":"\u2292","sqsupset":"\u2290","sqsupseteq":"\u2292","square":"\u25A1","Square":"\u25A1","SquareIntersection":"\u2293","SquareSubset":"\u228F","SquareSubsetEqual":"\u2291","SquareSuperset":"\u2290","SquareSupersetEqual":"\u2292","SquareUnion":"\u2294","squarf":"\u25AA","squ":"\u25A1","squf":"\u25AA","srarr":"\u2192","Sscr":"\uD835\uDCAE","sscr":"\uD835\uDCC8","ssetmn":"\u2216","ssmile":"\u2323","sstarf":"\u22C6","Star":"\u22C6","star":"\u2606","starf":"\u2605","straightepsilon":"\u03F5","straightphi":"\u03D5","strns":"\u00AF","sub":"\u2282","Sub":"\u22D0","subdot":"\u2ABD","subE":"\u2AC5","sube":"\u2286","subedot":"\u2AC3","submult":"\u2AC1","subnE":"\u2ACB","subne":"\u228A","subplus":"\u2ABF","subrarr":"\u2979","subset":"\u2282","Subset":"\u22D0","subseteq":"\u2286","subseteqq":"\u2AC5","SubsetEqual":"\u2286","subsetneq":"\u228A","subsetneqq":"\u2ACB","subsim":"\u2AC7","subsub":"\u2AD5","subsup":"\u2AD3","succapprox":"\u2AB8","succ":"\u227B","succcurlyeq":"\u227D","Succeeds":"\u227B","SucceedsEqual":"\u2AB0","SucceedsSlantEqual":"\u227D","SucceedsTilde":"\u227F","succeq":"\u2AB0","succnapprox":"\u2ABA","succneqq":"\u2AB6","succnsim":"\u22E9","succsim":"\u227F","SuchThat":"\u220B","sum":"\u2211","Sum":"\u2211","sung":"\u266A","sup1":"\u00B9","sup2":"\u00B2","sup3":"\u00B3","sup":"\u2283","Sup":"\u22D1","supdot":"\u2ABE","supdsub":"\u2AD8","supE":"\u2AC6","supe":"\u2287","supedot":"\u2AC4","Superset":"\u2283","SupersetEqual":"\u2287","suphsol":"\u27C9","suphsub":"\u2AD7","suplarr":"\u297B","supmult":"\u2AC2","supnE":"\u2ACC","supne":"\u228B","supplus":"\u2AC0","supset":"\u2283","Supset":"\u22D1","supseteq":"\u2287","supseteqq":"\u2AC6","supsetneq":"\u228B","supsetneqq":"\u2ACC","supsim":"\u2AC8","supsub":"\u2AD4","supsup":"\u2AD6","swarhk":"\u2926","swarr":"\u2199","swArr":"\u21D9","swarrow":"\u2199","swnwar":"\u292A","szlig":"\u00DF","Tab":"\t","target":"\u2316","Tau":"\u03A4","tau":"\u03C4","tbrk":"\u23B4","Tcaron":"\u0164","tcaron":"\u0165","Tcedil":"\u0162","tcedil":"\u0163","Tcy":"\u0422","tcy":"\u0442","tdot":"\u20DB","telrec":"\u2315","Tfr":"\uD835\uDD17","tfr":"\uD835\uDD31","there4":"\u2234","therefore":"\u2234","Therefore":"\u2234","Theta":"\u0398","theta":"\u03B8","thetasym":"\u03D1","thetav":"\u03D1","thickapprox":"\u2248","thicksim":"\u223C","ThickSpace":"\u205F\u200A","ThinSpace":"\u2009","thinsp":"\u2009","thkap":"\u2248","thksim":"\u223C","THORN":"\u00DE","thorn":"\u00FE","tilde":"\u02DC","Tilde":"\u223C","TildeEqual":"\u2243","TildeFullEqual":"\u2245","TildeTilde":"\u2248","timesbar":"\u2A31","timesb":"\u22A0","times":"\u00D7","timesd":"\u2A30","tint":"\u222D","toea":"\u2928","topbot":"\u2336","topcir":"\u2AF1","top":"\u22A4","Topf":"\uD835\uDD4B","topf":"\uD835\uDD65","topfork":"\u2ADA","tosa":"\u2929","tprime":"\u2034","trade":"\u2122","TRADE":"\u2122","triangle":"\u25B5","triangledown":"\u25BF","triangleleft":"\u25C3","trianglelefteq":"\u22B4","triangleq":"\u225C","triangleright":"\u25B9","trianglerighteq":"\u22B5","tridot":"\u25EC","trie":"\u225C","triminus":"\u2A3A","TripleDot":"\u20DB","triplus":"\u2A39","trisb":"\u29CD","tritime":"\u2A3B","trpezium":"\u23E2","Tscr":"\uD835\uDCAF","tscr":"\uD835\uDCC9","TScy":"\u0426","tscy":"\u0446","TSHcy":"\u040B","tshcy":"\u045B","Tstrok":"\u0166","tstrok":"\u0167","twixt":"\u226C","twoheadleftarrow":"\u219E","twoheadrightarrow":"\u21A0","Uacute":"\u00DA","uacute":"\u00FA","uarr":"\u2191","Uarr":"\u219F","uArr":"\u21D1","Uarrocir":"\u2949","Ubrcy":"\u040E","ubrcy":"\u045E","Ubreve":"\u016C","ubreve":"\u016D","Ucirc":"\u00DB","ucirc":"\u00FB","Ucy":"\u0423","ucy":"\u0443","udarr":"\u21C5","Udblac":"\u0170","udblac":"\u0171","udhar":"\u296E","ufisht":"\u297E","Ufr":"\uD835\uDD18","ufr":"\uD835\uDD32","Ugrave":"\u00D9","ugrave":"\u00F9","uHar":"\u2963","uharl":"\u21BF","uharr":"\u21BE","uhblk":"\u2580","ulcorn":"\u231C","ulcorner":"\u231C","ulcrop":"\u230F","ultri":"\u25F8","Umacr":"\u016A","umacr":"\u016B","uml":"\u00A8","UnderBar":"_","UnderBrace":"\u23DF","UnderBracket":"\u23B5","UnderParenthesis":"\u23DD","Union":"\u22C3","UnionPlus":"\u228E","Uogon":"\u0172","uogon":"\u0173","Uopf":"\uD835\uDD4C","uopf":"\uD835\uDD66","UpArrowBar":"\u2912","uparrow":"\u2191","UpArrow":"\u2191","Uparrow":"\u21D1","UpArrowDownArrow":"\u21C5","updownarrow":"\u2195","UpDownArrow":"\u2195","Updownarrow":"\u21D5","UpEquilibrium":"\u296E","upharpoonleft":"\u21BF","upharpoonright":"\u21BE","uplus":"\u228E","UpperLeftArrow":"\u2196","UpperRightArrow":"\u2197","upsi":"\u03C5","Upsi":"\u03D2","upsih":"\u03D2","Upsilon":"\u03A5","upsilon":"\u03C5","UpTeeArrow":"\u21A5","UpTee":"\u22A5","upuparrows":"\u21C8","urcorn":"\u231D","urcorner":"\u231D","urcrop":"\u230E","Uring":"\u016E","uring":"\u016F","urtri":"\u25F9","Uscr":"\uD835\uDCB0","uscr":"\uD835\uDCCA","utdot":"\u22F0","Utilde":"\u0168","utilde":"\u0169","utri":"\u25B5","utrif":"\u25B4","uuarr":"\u21C8","Uuml":"\u00DC","uuml":"\u00FC","uwangle":"\u29A7","vangrt":"\u299C","varepsilon":"\u03F5","varkappa":"\u03F0","varnothing":"\u2205","varphi":"\u03D5","varpi":"\u03D6","varpropto":"\u221D","varr":"\u2195","vArr":"\u21D5","varrho":"\u03F1","varsigma":"\u03C2","varsubsetneq":"\u228A\uFE00","varsubsetneqq":"\u2ACB\uFE00","varsupsetneq":"\u228B\uFE00","varsupsetneqq":"\u2ACC\uFE00","vartheta":"\u03D1","vartriangleleft":"\u22B2","vartriangleright":"\u22B3","vBar":"\u2AE8","Vbar":"\u2AEB","vBarv":"\u2AE9","Vcy":"\u0412","vcy":"\u0432","vdash":"\u22A2","vDash":"\u22A8","Vdash":"\u22A9","VDash":"\u22AB","Vdashl":"\u2AE6","veebar":"\u22BB","vee":"\u2228","Vee":"\u22C1","veeeq":"\u225A","vellip":"\u22EE","verbar":"|","Verbar":"\u2016","vert":"|","Vert":"\u2016","VerticalBar":"\u2223","VerticalLine":"|","VerticalSeparator":"\u2758","VerticalTilde":"\u2240","VeryThinSpace":"\u200A","Vfr":"\uD835\uDD19","vfr":"\uD835\uDD33","vltri":"\u22B2","vnsub":"\u2282\u20D2","vnsup":"\u2283\u20D2","Vopf":"\uD835\uDD4D","vopf":"\uD835\uDD67","vprop":"\u221D","vrtri":"\u22B3","Vscr":"\uD835\uDCB1","vscr":"\uD835\uDCCB","vsubnE":"\u2ACB\uFE00","vsubne":"\u228A\uFE00","vsupnE":"\u2ACC\uFE00","vsupne":"\u228B\uFE00","Vvdash":"\u22AA","vzigzag":"\u299A","Wcirc":"\u0174","wcirc":"\u0175","wedbar":"\u2A5F","wedge":"\u2227","Wedge":"\u22C0","wedgeq":"\u2259","weierp":"\u2118","Wfr":"\uD835\uDD1A","wfr":"\uD835\uDD34","Wopf":"\uD835\uDD4E","wopf":"\uD835\uDD68","wp":"\u2118","wr":"\u2240","wreath":"\u2240","Wscr":"\uD835\uDCB2","wscr":"\uD835\uDCCC","xcap":"\u22C2","xcirc":"\u25EF","xcup":"\u22C3","xdtri":"\u25BD","Xfr":"\uD835\uDD1B","xfr":"\uD835\uDD35","xharr":"\u27F7","xhArr":"\u27FA","Xi":"\u039E","xi":"\u03BE","xlarr":"\u27F5","xlArr":"\u27F8","xmap":"\u27FC","xnis":"\u22FB","xodot":"\u2A00","Xopf":"\uD835\uDD4F","xopf":"\uD835\uDD69","xoplus":"\u2A01","xotime":"\u2A02","xrarr":"\u27F6","xrArr":"\u27F9","Xscr":"\uD835\uDCB3","xscr":"\uD835\uDCCD","xsqcup":"\u2A06","xuplus":"\u2A04","xutri":"\u25B3","xvee":"\u22C1","xwedge":"\u22C0","Yacute":"\u00DD","yacute":"\u00FD","YAcy":"\u042F","yacy":"\u044F","Ycirc":"\u0176","ycirc":"\u0177","Ycy":"\u042B","ycy":"\u044B","yen":"\u00A5","Yfr":"\uD835\uDD1C","yfr":"\uD835\uDD36","YIcy":"\u0407","yicy":"\u0457","Yopf":"\uD835\uDD50","yopf":"\uD835\uDD6A","Yscr":"\uD835\uDCB4","yscr":"\uD835\uDCCE","YUcy":"\u042E","yucy":"\u044E","yuml":"\u00FF","Yuml":"\u0178","Zacute":"\u0179","zacute":"\u017A","Zcaron":"\u017D","zcaron":"\u017E","Zcy":"\u0417","zcy":"\u0437","Zdot":"\u017B","zdot":"\u017C","zeetrf":"\u2128","ZeroWidthSpace":"\u200B","Zeta":"\u0396","zeta":"\u03B6","zfr":"\uD835\uDD37","Zfr":"\u2128","ZHcy":"\u0416","zhcy":"\u0436","zigrarr":"\u21DD","zopf":"\uD835\uDD6B","Zopf":"\u2124","Zscr":"\uD835\uDCB5","zscr":"\uD835\uDCCF","zwj":"\u200D","zwnj":"\u200C"} \ No newline at end of file diff --git a/node_modules/entities/maps/legacy.json b/node_modules/entities/maps/legacy.json new file mode 100644 index 000000000..f0e82a478 --- /dev/null +++ b/node_modules/entities/maps/legacy.json @@ -0,0 +1 @@ +{"Aacute":"\u00C1","aacute":"\u00E1","Acirc":"\u00C2","acirc":"\u00E2","acute":"\u00B4","AElig":"\u00C6","aelig":"\u00E6","Agrave":"\u00C0","agrave":"\u00E0","amp":"&","AMP":"&","Aring":"\u00C5","aring":"\u00E5","Atilde":"\u00C3","atilde":"\u00E3","Auml":"\u00C4","auml":"\u00E4","brvbar":"\u00A6","Ccedil":"\u00C7","ccedil":"\u00E7","cedil":"\u00B8","cent":"\u00A2","copy":"\u00A9","COPY":"\u00A9","curren":"\u00A4","deg":"\u00B0","divide":"\u00F7","Eacute":"\u00C9","eacute":"\u00E9","Ecirc":"\u00CA","ecirc":"\u00EA","Egrave":"\u00C8","egrave":"\u00E8","ETH":"\u00D0","eth":"\u00F0","Euml":"\u00CB","euml":"\u00EB","frac12":"\u00BD","frac14":"\u00BC","frac34":"\u00BE","gt":">","GT":">","Iacute":"\u00CD","iacute":"\u00ED","Icirc":"\u00CE","icirc":"\u00EE","iexcl":"\u00A1","Igrave":"\u00CC","igrave":"\u00EC","iquest":"\u00BF","Iuml":"\u00CF","iuml":"\u00EF","laquo":"\u00AB","lt":"<","LT":"<","macr":"\u00AF","micro":"\u00B5","middot":"\u00B7","nbsp":"\u00A0","not":"\u00AC","Ntilde":"\u00D1","ntilde":"\u00F1","Oacute":"\u00D3","oacute":"\u00F3","Ocirc":"\u00D4","ocirc":"\u00F4","Ograve":"\u00D2","ograve":"\u00F2","ordf":"\u00AA","ordm":"\u00BA","Oslash":"\u00D8","oslash":"\u00F8","Otilde":"\u00D5","otilde":"\u00F5","Ouml":"\u00D6","ouml":"\u00F6","para":"\u00B6","plusmn":"\u00B1","pound":"\u00A3","quot":"\"","QUOT":"\"","raquo":"\u00BB","reg":"\u00AE","REG":"\u00AE","sect":"\u00A7","shy":"\u00AD","sup1":"\u00B9","sup2":"\u00B2","sup3":"\u00B3","szlig":"\u00DF","THORN":"\u00DE","thorn":"\u00FE","times":"\u00D7","Uacute":"\u00DA","uacute":"\u00FA","Ucirc":"\u00DB","ucirc":"\u00FB","Ugrave":"\u00D9","ugrave":"\u00F9","uml":"\u00A8","Uuml":"\u00DC","uuml":"\u00FC","Yacute":"\u00DD","yacute":"\u00FD","yen":"\u00A5","yuml":"\u00FF"} \ No newline at end of file diff --git a/node_modules/entities/maps/xml.json b/node_modules/entities/maps/xml.json new file mode 100644 index 000000000..de8db10d0 --- /dev/null +++ b/node_modules/entities/maps/xml.json @@ -0,0 +1 @@ +{"amp":"&","apos":"'","gt":">","lt":"<","quot":"\""} diff --git a/node_modules/entities/package.json b/node_modules/entities/package.json new file mode 100644 index 000000000..6a1729678 --- /dev/null +++ b/node_modules/entities/package.json @@ -0,0 +1,57 @@ +{ + "name": "entities", + "version": "1.1.2", + "description": "Encode & decode XML/HTML entities with ease", + "author": "Felix Boehm ", + "keywords": [ + "html", + "xml", + "entity", + "decoding", + "encoding" + ], + "main": "./index.js", + "directories": { + "test": "test" + }, + "devDependencies": { + "mocha": "^5.0.1", + "mocha-lcov-reporter": "*", + "coveralls": "*", + "istanbul": "*", + "jshint": "2" + }, + "scripts": { + "test": "mocha && npm run lint", + "lint": "jshint index.js lib/*.js test/*.js", + "lcov": "istanbul cover _mocha --report lcovonly -- -R spec", + "coveralls": "npm run lint && npm run lcov && (cat coverage/lcov.info | coveralls || exit 0)" + }, + "repository": { + "type": "git", + "url": "git://github.com/fb55/entities.git" + }, + "license": "BSD-2-Clause", + "jshintConfig": { + "eqeqeq": true, + "freeze": true, + "latedef": "nofunc", + "noarg": true, + "nonbsp": true, + "quotmark": "double", + "undef": true, + "unused": true, + "trailing": true, + "eqnull": true, + "proto": true, + "smarttabs": true, + "node": true, + "globals": { + "describe": true, + "it": true + } + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/entities/readme.md b/node_modules/entities/readme.md new file mode 100644 index 000000000..d1d9eec9f --- /dev/null +++ b/node_modules/entities/readme.md @@ -0,0 +1,27 @@ +# entities [![NPM version](http://img.shields.io/npm/v/entities.svg)](https://npmjs.org/package/entities) [![Downloads](https://img.shields.io/npm/dm/entities.svg)](https://npmjs.org/package/entities) [![Build Status](http://img.shields.io/travis/fb55/entities.svg)](http://travis-ci.org/fb55/entities) [![Coverage](http://img.shields.io/coveralls/fb55/entities.svg)](https://coveralls.io/r/fb55/entities) + +En- & decoder for XML/HTML entities. + +## How to… + +### …install `entities` + + npm i entities + +### …use `entities` + +```javascript +var entities = require("entities"); +//encoding +entities.encodeXML("&"); // "&#38;" +entities.encodeHTML("&"); // "&#38;" +//decoding +entities.decodeXML("asdf & ÿ ü '"); // "asdf & ÿ ü '" +entities.decodeHTML("asdf & ÿ ü '"); // "asdf & ÿ ü '" +``` + + + +--- + +License: BSD-2-Clause diff --git a/node_modules/entities/test/mocha.opts b/node_modules/entities/test/mocha.opts new file mode 100644 index 000000000..af53e2422 --- /dev/null +++ b/node_modules/entities/test/mocha.opts @@ -0,0 +1,2 @@ +--check-leaks +--reporter spec diff --git a/node_modules/entities/test/test.js b/node_modules/entities/test/test.js new file mode 100644 index 000000000..cb309f307 --- /dev/null +++ b/node_modules/entities/test/test.js @@ -0,0 +1,170 @@ +var assert = require("assert"), + path = require("path"), + entities = require("../"); + +describe("Encode->decode test", function() { + var testcases = [ + { + input: "asdf & ÿ ü '", + xml: "asdf & ÿ ü '", + html: "asdf & ÿ ü '" + }, + { + input: "&", + xml: "&#38;", + html: "&#38;" + } + ]; + testcases.forEach(function(tc) { + var encodedXML = entities.encodeXML(tc.input); + it("should XML encode " + tc.input, function() { + assert.equal(encodedXML, tc.xml); + }); + it("should default to XML encode " + tc.input, function() { + assert.equal(entities.encode(tc.input), tc.xml); + }); + it("should XML decode " + encodedXML, function() { + assert.equal(entities.decodeXML(encodedXML), tc.input); + }); + it("should default to XML encode " + encodedXML, function() { + assert.equal(entities.decode(encodedXML), tc.input); + }); + it("should default strict to XML encode " + encodedXML, function() { + assert.equal(entities.decodeStrict(encodedXML), tc.input); + }); + + var encodedHTML5 = entities.encodeHTML5(tc.input); + it("should HTML5 encode " + tc.input, function() { + assert.equal(encodedHTML5, tc.html); + }); + it("should HTML5 decode " + encodedHTML5, function() { + assert.equal(entities.decodeHTML(encodedHTML5), tc.input); + }); + }); + + it("should encode data URIs (issue 16)", function() { + var data = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAALAAABAAEAAAIBRAA7"; + assert.equal(entities.decode(entities.encode(data)), data); + }); +}); + +describe("Decode test", function() { + var testcases = [ + { input: "&amp;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: "&#x26;", output: "&" }, + { input: "&#X26;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: ":", output: ":" }, + { input: ":", output: ":" }, + { input: ":", output: ":" }, + { input: ":", output: ":" } + ]; + testcases.forEach(function(tc) { + it("should XML decode " + tc.input, function() { + assert.equal(entities.decodeXML(tc.input), tc.output); + }); + it("should HTML4 decode " + tc.input, function() { + assert.equal(entities.decodeHTML(tc.input), tc.output); + }); + it("should HTML5 decode " + tc.input, function() { + assert.equal(entities.decodeHTML(tc.input), tc.output); + }); + }); +}); + +var levels = ["xml", "entities"]; + +describe("Documents", function() { + levels + .map(function(n) { + return path.join("..", "maps", n); + }) + .map(require) + .forEach(function(doc, i) { + describe("Decode", function() { + it(levels[i], function() { + Object.keys(doc).forEach(function(e) { + for (var l = i; l < levels.length; l++) { + assert.equal(entities.decode("&" + e + ";", l), doc[e]); + } + }); + }); + }); + + describe("Decode strict", function() { + it(levels[i], function() { + Object.keys(doc).forEach(function(e) { + for (var l = i; l < levels.length; l++) { + assert.equal(entities.decodeStrict("&" + e + ";", l), doc[e]); + } + }); + }); + }); + + describe("Encode", function() { + it(levels[i], function() { + Object.keys(doc).forEach(function(e) { + for (var l = i; l < levels.length; l++) { + assert.equal(entities.decode(entities.encode(doc[e], l), l), doc[e]); + } + }); + }); + }); + }); + + var legacy = require("../maps/legacy.json"); + + describe("Legacy", function() { + it("should decode", runLegacy); + }); + + function runLegacy() { + Object.keys(legacy).forEach(function(e) { + assert.equal(entities.decodeHTML("&" + e), legacy[e]); + }); + } +}); + +var astral = { + "1D306": "\uD834\uDF06", + "1D11E": "\uD834\uDD1E" +}; + +var astralSpecial = { + "80": "\u20AC", + "110000": "\uFFFD" +}; + +describe("Astral entities", function() { + Object.keys(astral).forEach(function(c) { + it("should decode " + astral[c], function() { + assert.equal(entities.decode("&#x" + c + ";"), astral[c]); + }); + + it("should encode " + astral[c], function() { + assert.equal(entities.encode(astral[c]), "&#x" + c + ";"); + }); + + it("should escape " + astral[c], function() { + assert.equal(entities.escape(astral[c]), "&#x" + c + ";"); + }); + }); + + Object.keys(astralSpecial).forEach(function(c) { + it("special should decode \\u" + c, function() { + assert.equal(entities.decode("&#x" + c + ";"), astralSpecial[c]); + }); + }); +}); + +describe("Escape", function() { + it("should always decode ASCII chars", function() { + for (var i = 0; i < 0x7f; i++) { + var c = String.fromCharCode(i); + assert.equal(entities.decodeXML(entities.escape(c)), c); + } + }); +}); diff --git a/node_modules/errlop/.dependabot/config.yml b/node_modules/errlop/.dependabot/config.yml new file mode 100644 index 000000000..ffaab2e86 --- /dev/null +++ b/node_modules/errlop/.dependabot/config.yml @@ -0,0 +1,12 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: weekly + allowed_updates: + - match: + update_type: security + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/errlop/HISTORY.md b/node_modules/errlop/HISTORY.md new file mode 100644 index 000000000..b4aa79ea9 --- /dev/null +++ b/node_modules/errlop/HISTORY.md @@ -0,0 +1,70 @@ +# History + +## v2.2.0 2020 May 4 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v2.1.0 2020 March 26 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v2.0.0 2019 December 11 + +- Errlop is now written in TypeScript +- Errlop's browser edition now makes use of ECMAScript modules +- Errlop now only includes one Node.js edition that runs on all Node.js environments +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.7.0 2019 December 9 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.6.0 2019 December 1 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.5.0 2019 December 1 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.4.0 2019 December 1 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.3.0 2019 November 18 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.2.0 2019 November 13 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.1.2 2019 September 10 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.1.1 2018 December 28 + +- Updated `editions` dependency, should function to fix [issue #2](https://github.com/bevry/errlop/issues/2) + +## v1.1.0 2018 December 28 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.0.3 2018 August 19 + +- Add duck typing for node version 4 and under +- Prevent additional crashes on node version 4 + +## v1.0.2 2018 July 27 + +- More effecient node version 4 crash prevention + +## v1.0.1 2018 July 27 + +- Support node version 0.8 +- Prevent a peculiar crash on node version 4 + +## v1.0.0 2018 July 21 + +- Initial working release diff --git a/node_modules/errlop/LICENSE.md b/node_modules/errlop/LICENSE.md new file mode 100644 index 000000000..33e54b456 --- /dev/null +++ b/node_modules/errlop/LICENSE.md @@ -0,0 +1,23 @@ + + +

License

+ +Unless stated otherwise all works are: + +
  • Copyright © 2018+ Benjamin Lupton
+ +and licensed under: + + + +

MIT License

+ +
+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 (including the next paragraph) 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.
+
+ + diff --git a/node_modules/errlop/README.md b/node_modules/errlop/README.md new file mode 100644 index 000000000..533ee16fb --- /dev/null +++ b/node_modules/errlop/README.md @@ -0,0 +1,208 @@ + + +

errlop

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+GitHub Sponsors donate button +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +An extended Error class that envelops a parent error, such that the stack trace contains the causation + + + + +## Usage + +[Complete API Documentation.](http://master.errlop.bevry.surge.sh/docs/globals.html) + +```javascript +// const Errlop = require('errlop').default +import Errlop from 'errlop' +const a = new Errlop('AError') +const b = new Errlop('BError', a) +const c = Errlop.create('CError', b) +console.log(c.stack) +/* +Error: CError + at Function.create (/Users/balupton/Projects/active/errlop/source/index.js:92:10) + at Object. (/Users/balupton/Projects/active/errlop/example.js:6:18) + at Module._compile (internal/modules/cjs/loader.js:689:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) + at Module.load (internal/modules/cjs/loader.js:599:32) + at tryModuleLoad (internal/modules/cjs/loader.js:538:12) + at Function.Module._load (internal/modules/cjs/loader.js:530:3) + at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) + at startup (internal/bootstrap/node.js:266:19) + at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3) +↳ Error: BError + at Object. (/Users/balupton/Projects/active/errlop/example.js:5:11) + at Module._compile (internal/modules/cjs/loader.js:689:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) + at Module.load (internal/modules/cjs/loader.js:599:32) + at tryModuleLoad (internal/modules/cjs/loader.js:538:12) + at Function.Module._load (internal/modules/cjs/loader.js:530:3) + at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) + at startup (internal/bootstrap/node.js:266:19) + at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3) +↳ Error: AError + at Object. (/Users/balupton/Projects/active/errlop/example.js:4:11) + at Module._compile (internal/modules/cjs/loader.js:689:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) + at Module.load (internal/modules/cjs/loader.js:599:32) + at tryModuleLoad (internal/modules/cjs/loader.js:538:12) + at Function.Module._load (internal/modules/cjs/loader.js:530:3) + at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) + at startup (internal/bootstrap/node.js:266:19) +*/ +console.log(c.orphanStack) +/* +Error: CError + at Function.create (/Users/balupton/Projects/active/errlop/source/index.js:92:10) + at Object. (/Users/balupton/Projects/active/errlop/example.js:6:18) + at Module._compile (internal/modules/cjs/loader.js:689:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) + at Module.load (internal/modules/cjs/loader.js:599:32) + at tryModuleLoad (internal/modules/cjs/loader.js:538:12) + at Function.Module._load (internal/modules/cjs/loader.js:530:3) + at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) + at startup (internal/bootstrap/node.js:266:19) + at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3) +*/ +``` + + + +

Install

+ +

npm

+
    +
  • Install: npm install --save errlop
  • +
  • Import: import pkg from ('errlop')
  • +
  • Require: const pkg = require('errlop').default
  • +
+ +

pika

+ +``` html + +``` + +

unpkg

+ +``` html + +``` + +

jspm

+ +``` html + +``` + +

Editions

+ +

This package is published with the following editions:

+ +
  • errlop/source/index.ts is TypeScript source code with Import for modules
  • +
  • errlop/edition-browsers/index.js is TypeScript compiled against ES2019 for web browsers with Import for modules
  • +
  • errlop aliases errlop/edition-es5/index.js
  • +
  • errlop/edition-es5/index.js is TypeScript compiled against ES5 for Node.js with Require for modules
+ + + + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Contribute

+ +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +GitHub Sponsors donate button +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + +
  • Copyright © 2018+ Benjamin Lupton
+ +and licensed under: + + + + diff --git a/node_modules/errlop/edition-browsers/index.js b/node_modules/errlop/edition-browsers/index.js new file mode 100644 index 000000000..c8065b5fc --- /dev/null +++ b/node_modules/errlop/edition-browsers/index.js @@ -0,0 +1,78 @@ +'use strict' +/** Only accept codes that are numbers, otherwise discard them */ +function parseCode(code) { + const number = Number(code) + if (isNaN(number)) return null + return number +} +/** Fetch the code from the value */ +function fetchCode(value) { + return ( + value && + (parseCode(value.exitCode) || + parseCode(value.errno) || + parseCode(value.code)) + ) +} +/** Prevent [a weird error on node version 4](https://github.com/bevry/errlop/issues/1) and below. */ +function isValid(value) { + /* eslint no-use-before-define:0 */ + return value instanceof Error || Errlop.isErrlop(value) +} +export default class Errlop extends Error { + /** + * Create an instance of an error, using a message, as well as an optional parent. + * If the parent is provided, then the `fullStack` property will include its stack too + */ + constructor(input, parent) { + if (!input) throw new Error('Attempted to create an Errlop without a input') + // Instantiate with the above + super(input.message || input) + // Apply + this.klass = Errlop + this.parent = parent || input.parent + this.ancestors = [] + let ancestor = this.parent + while (ancestor) { + this.ancestors.push(ancestor) + ancestor = ancestor.parent + } + // this code must support node 0.8, as well as prevent a weird bug in node v4 + // https://travis-ci.org/bevry/editions/jobs/408828147 + let exitCode = fetchCode(input) + if (exitCode == null) exitCode = fetchCode(this) + for ( + let index = 0; + index < this.ancestors.length && exitCode == null; + ++index + ) { + const error = this.ancestors[index] + if (isValid(error)) exitCode = fetchCode(error) + } + // Apply + if (exitCode != null) { + this.exitCode = exitCode + } + this.orphanStack = (input.stack || this.stack).toString() + this.stack = this.ancestors.reduce( + (accumulator, error) => + `${accumulator}\n↳ ${error.orphanStack || error.stack || error}`, + this.orphanStack + ) + } + /** + * Syntatic sugar for Errlop class creation. + * Enables `Errlop.create(...args)` to achieve `new Errlop(...args)` + */ + static create(input, parent) { + return new this(input, parent) + } + /** Check whether or not the value is an Errlop instance */ + static isErrlop(value) { + return value && (value instanceof this || value.klass === this) + } + /** Ensure that the value is an Errlop instance */ + static ensure(value) { + return this.isErrlop(value) ? value : this.create(value) + } +} diff --git a/node_modules/errlop/edition-es5/index.js b/node_modules/errlop/edition-es5/index.js new file mode 100644 index 000000000..7661d6b13 --- /dev/null +++ b/node_modules/errlop/edition-es5/index.js @@ -0,0 +1,108 @@ +'use strict' +var __extends = + (this && this.__extends) || + (function () { + var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (d, b) { + d.__proto__ = b + }) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p] + } + return extendStatics(d, b) + } + return function (d, b) { + extendStatics(d, b) + function __() { + this.constructor = d + } + d.prototype = + b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) + } + })() +Object.defineProperty(exports, '__esModule', { value: true }) +/** Only accept codes that are numbers, otherwise discard them */ +function parseCode(code) { + var number = Number(code) + if (isNaN(number)) return null + return number +} +/** Fetch the code from the value */ +function fetchCode(value) { + return ( + value && + (parseCode(value.exitCode) || + parseCode(value.errno) || + parseCode(value.code)) + ) +} +/** Prevent [a weird error on node version 4](https://github.com/bevry/errlop/issues/1) and below. */ +function isValid(value) { + /* eslint no-use-before-define:0 */ + return value instanceof Error || Errlop.isErrlop(value) +} +var Errlop = /** @class */ (function (_super) { + __extends(Errlop, _super) + /** + * Create an instance of an error, using a message, as well as an optional parent. + * If the parent is provided, then the `fullStack` property will include its stack too + */ + function Errlop(input, parent) { + var _this = this + if (!input) throw new Error('Attempted to create an Errlop without a input') + // Instantiate with the above + _this = _super.call(this, input.message || input) || this + // Apply + _this.klass = Errlop + _this.parent = parent || input.parent + _this.ancestors = [] + var ancestor = _this.parent + while (ancestor) { + _this.ancestors.push(ancestor) + ancestor = ancestor.parent + } + // this code must support node 0.8, as well as prevent a weird bug in node v4 + // https://travis-ci.org/bevry/editions/jobs/408828147 + var exitCode = fetchCode(input) + if (exitCode == null) exitCode = fetchCode(_this) + for ( + var index = 0; + index < _this.ancestors.length && exitCode == null; + ++index + ) { + var error = _this.ancestors[index] + if (isValid(error)) exitCode = fetchCode(error) + } + // Apply + if (exitCode != null) { + _this.exitCode = exitCode + } + _this.orphanStack = (input.stack || _this.stack).toString() + _this.stack = _this.ancestors.reduce(function (accumulator, error) { + return ( + accumulator + '\n\u21B3 ' + (error.orphanStack || error.stack || error) + ) + }, _this.orphanStack) + return _this + } + /** + * Syntatic sugar for Errlop class creation. + * Enables `Errlop.create(...args)` to achieve `new Errlop(...args)` + */ + Errlop.create = function (input, parent) { + return new this(input, parent) + } + /** Check whether or not the value is an Errlop instance */ + Errlop.isErrlop = function (value) { + return value && (value instanceof this || value.klass === this) + } + /** Ensure that the value is an Errlop instance */ + Errlop.ensure = function (value) { + return this.isErrlop(value) ? value : this.create(value) + } + return Errlop +})(Error) +exports.default = Errlop diff --git a/node_modules/errlop/package.json b/node_modules/errlop/package.json new file mode 100644 index 000000000..d0a7dd54b --- /dev/null +++ b/node_modules/errlop/package.json @@ -0,0 +1,181 @@ +{ + "name": "errlop", + "version": "2.2.0", + "description": "An extended Error class that envelops a parent error, such that the stack trace contains the causation", + "homepage": "https://github.com/bevry/errlop", + "license": "MIT", + "keywords": [ + "browser", + "dom", + "error", + "export-default", + "module", + "nerror", + "nested", + "nested-error", + "node", + "ono", + "simple", + "typed", + "types", + "typescript", + "verror" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "githubsponsors", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "githubSponsorsUsername": "balupton", + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": "https://bevry.me/fund", + "author": "2018+ Benjamin Lupton ", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)" + ], + "bugs": { + "url": "https://github.com/bevry/errlop/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/errlop.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "TypeScript source code with Import for modules", + "directory": "source", + "entry": "index.ts", + "tags": [ + "typescript", + "import" + ], + "engines": false + }, + { + "description": "TypeScript compiled against ES2019 for web browsers with Import for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "import" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "TypeScript compiled against ES5 for Node.js with Require for modules", + "directory": "edition-es5", + "entry": "index.js", + "tags": [ + "javascript", + "es5", + "require" + ], + "engines": { + "node": "0.8 || 0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13 || 14", + "browsers": false + } + } + ], + "types": "source/index.ts", + "type": "commonjs", + "main": "edition-es5/index.js", + "browser": "edition-browsers/index.js", + "module": "edition-browsers/index.js", + "devDependencies": { + "@bevry/update-contributors": "^1.0.1", + "@typescript-eslint/eslint-plugin": "^2.30.0", + "@typescript-eslint/parser": "^2.30.0", + "assert-helpers": "4.10.0", + "eslint": "^6.8.0", + "eslint-config-bevry": "^3.3.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-prettier": "^3.1.3", + "kava": "3.2.0", + "prettier": "^2.0.5", + "projectz": "^1.19.1", + "surge": "^0.21.3", + "typedoc": "^0.17.6", + "typescript": "^3.8.3", + "valid-directory": "^1.6.0", + "valid-module": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-es5", + "our:compile:edition-browsers": "tsc --module ESNext --target ES2019 --outDir ./edition-browsers --project tsconfig.json && test -d edition-browsers/source && ( mv edition-browsers/source edition-temp && rm -Rf edition-browsers && mv edition-temp edition-browsers ) || true", + "our:compile:edition-es5": "tsc --module commonjs --target ES5 --outDir ./edition-es5 --project tsconfig.json && test -d edition-es5/source && ( mv edition-es5/source edition-temp && rm -Rf edition-es5 && mv edition-temp edition-es5 ) || true", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:contributors && npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:contributors": "npx @bevry/update-contributors", + "our:meta:docs": "npm run our:meta:docs:typedoc", + "our:meta:docs:typedoc": "rm -Rf ./docs && npx typedoc --mode file --exclude '**/+(*test*|node_modules)' --excludeExternals --name \"$npm_package_name\" --readme ./README.md --out ./docs ./source", + "our:meta:projectz": "npx projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:module && npm run our:verify:prettier && npm run our:verify:typescript", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "npx eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:module": "npx valid-module", + "our:verify:prettier": "prettier --write .", + "our:verify:typescript": "tsc --noEmit --project tsconfig.json", + "test": "node ./edition-es5/test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "boundation": { + "minimumSupportNodeVersion": "0.8", + "minimumTestNodeVersion": "0.8", + "compiler": "typescript", + "targets": [ + "browser", + "ES5" + ] + } +} diff --git a/node_modules/errlop/source/index.ts b/node_modules/errlop/source/index.ts new file mode 100644 index 000000000..8e42061e1 --- /dev/null +++ b/node_modules/errlop/source/index.ts @@ -0,0 +1,128 @@ +'use strict' + +type PotentialError = Errlop | Error | ErrorCodeHolder | string +interface ErrorCodeHolder { + exitCode?: string | number + errno?: string | number + code?: string | number +} + +/** Only accept codes that are numbers, otherwise discard them */ +function parseCode(code: any): number | null { + const number = Number(code) + if (isNaN(number)) return null + return number +} + +/** Fetch the code from the value */ +function fetchCode(value: any): string | number | null { + return ( + value && + (parseCode(value.exitCode) || + parseCode(value.errno) || + parseCode(value.code)) + ) +} + +/** Prevent [a weird error on node version 4](https://github.com/bevry/errlop/issues/1) and below. */ +function isValid(value: any): boolean { + /* eslint no-use-before-define:0 */ + return value instanceof Error || Errlop.isErrlop(value) +} + +export default class Errlop extends Error { + /** Duck typing as node 4 and intanceof does not work for error extensions */ + public klass: typeof Errlop + + /** + * The parent error if it was provided. + * If a parent was provided, then use that, otherwise use the input's parent, if it exists. + */ + public parent?: Errlop | Error + + /** An array of all the ancestors. From parent, to grand parent, and so on. */ + public ancestors: Array + + /** + * A numeric code to use for the exit status if desired by the consumer. + * It cycles through [input, this, ...ancestors] until it finds the first [exitCode, errno, code] that is valid. + */ + public exitCode?: string | number + + /** + * The stack for our instance alone, without any parents. + * If the input contained a stack, then use that. + */ + public orphanStack: string + + /** + * The stack which now contains the accumalated stacks of its ancestors. + * This is used instead of an alias like `fullStack` or the like, to ensure existing code that uses `err.stack` doesn't need to be changed to remain functional. + */ + public stack: string + + /** + * Syntatic sugar for Errlop class creation. + * Enables `Errlop.create(...args)` to achieve `new Errlop(...args)` + */ + static create(input: PotentialError, parent?: Errlop | Error): Errlop { + return new this(input, parent) + } + + /** + * Create an instance of an error, using a message, as well as an optional parent. + * If the parent is provided, then the `fullStack` property will include its stack too + */ + constructor(input: PotentialError, parent?: Errlop | Error) { + if (!input) throw new Error('Attempted to create an Errlop without a input') + + // Instantiate with the above + super((input as any).message || input) + + // Apply + this.klass = Errlop + this.parent = parent || (input as Errlop).parent + this.ancestors = [] + let ancestor = this.parent + while (ancestor) { + this.ancestors.push(ancestor) + ancestor = (ancestor as Errlop).parent + } + + // this code must support node 0.8, as well as prevent a weird bug in node v4 + // https://travis-ci.org/bevry/editions/jobs/408828147 + let exitCode = fetchCode(input) + if (exitCode == null) exitCode = fetchCode(this) + for ( + let index = 0; + index < this.ancestors.length && exitCode == null; + ++index + ) { + const error = this.ancestors[index] + if (isValid(error)) exitCode = fetchCode(error) + } + + // Apply + if (exitCode != null) { + this.exitCode = exitCode + } + this.orphanStack = ((input as any).stack || (this as any).stack).toString() + this.stack = this.ancestors.reduce( + (accumulator, error) => + `${accumulator}\n↳ ${ + (error as Errlop).orphanStack || (error as Error).stack || error + }`, + this.orphanStack + ) + } + + /** Check whether or not the value is an Errlop instance */ + static isErrlop(value: any): boolean { + return value && (value instanceof this || value.klass === this) + } + + /** Ensure that the value is an Errlop instance */ + static ensure(value: any): Errlop { + return this.isErrlop(value) ? value : this.create(value) + } +} diff --git a/node_modules/errlop/tsconfig.json b/node_modules/errlop/tsconfig.json new file mode 100644 index 000000000..bf98f4239 --- /dev/null +++ b/node_modules/errlop/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "allowJs": true, + "esModuleInterop": true, + "isolatedModules": true, + "maxNodeModuleJsDepth": 5, + "moduleResolution": "Node", + "strict": true, + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable"] + }, + "include": ["source"] +} diff --git a/node_modules/errno/.jshintrc b/node_modules/errno/.jshintrc new file mode 100644 index 000000000..c8ef3ca40 --- /dev/null +++ b/node_modules/errno/.jshintrc @@ -0,0 +1,59 @@ +{ + "predef": [ ] + , "bitwise": false + , "camelcase": false + , "curly": false + , "eqeqeq": false + , "forin": false + , "immed": false + , "latedef": false + , "noarg": true + , "noempty": true + , "nonew": true + , "plusplus": false + , "quotmark": true + , "regexp": false + , "undef": true + , "unused": true + , "strict": false + , "trailing": true + , "maxlen": 120 + , "asi": true + , "boss": true + , "debug": true + , "eqnull": true + , "esnext": true + , "evil": true + , "expr": true + , "funcscope": false + , "globalstrict": false + , "iterator": false + , "lastsemic": true + , "laxbreak": true + , "laxcomma": true + , "loopfunc": true + , "multistr": false + , "onecase": false + , "proto": false + , "regexdash": false + , "scripturl": true + , "smarttabs": false + , "shadow": false + , "sub": true + , "supernew": false + , "validthis": true + , "browser": true + , "couch": false + , "devel": false + , "dojo": false + , "mootools": false + , "node": true + , "nonstandard": true + , "prototypejs": false + , "rhino": false + , "worker": true + , "wsh": false + , "nomen": false + , "onevar": false + , "passfail": false +} \ No newline at end of file diff --git a/node_modules/errno/.travis.yml b/node_modules/errno/.travis.yml new file mode 100644 index 000000000..9c068879d --- /dev/null +++ b/node_modules/errno/.travis.yml @@ -0,0 +1,19 @@ +sudo: false + +language: node_js + +node_js: + - 14 + - 12 + - 10 + - 9 + - 8 + - 7 + - 6 + - 5 + - 4 + +arch: + - amd64 + - ppc64le + diff --git a/node_modules/errno/README.md b/node_modules/errno/README.md new file mode 100644 index 000000000..a4d0fb542 --- /dev/null +++ b/node_modules/errno/README.md @@ -0,0 +1,145 @@ +# node-errno + +> Better [libuv](https://github.com/libuv/libuv)/[Node.js](https://nodejs.org)/[io.js](https://iojs.org) error handling & reporting. Available in npm as *errno*. + +[![npm](https://img.shields.io/npm/v/errno.svg)](https://www.npmjs.com/package/errno) +[![Build Status](https://secure.travis-ci.org/rvagg/node-errno.png)](http://travis-ci.org/rvagg/node-errno) +[![npm](https://img.shields.io/npm/dm/errno.svg)](https://www.npmjs.com/package/errno) + +* [errno exposed](#errnoexposed) +* [Custom errors](#customerrors) + + +## errno exposed + +Ever find yourself needing more details about Node.js errors? Me too, so *node-errno* contains the errno mappings direct from libuv so you can use them in your code. + +**By errno:** + +```js +require('errno').errno[3] +// → { +// "errno": 3, +// "code": "EACCES", +// "description": "permission denied" +// } +``` + +**By code:** + +```js +require('errno').code.ENOTEMPTY +// → { +// "errno": 53, +// "code": "ENOTEMPTY", +// "description": "directory not empty" +// } +``` + +**Make your errors more descriptive:** + +```js +var errno = require('errno') + +function errmsg(err) { + var str = 'Error: ' + // if it's a libuv error then get the description from errno + if (errno.errno[err.errno]) + str += errno.errno[err.errno].description + else + str += err.message + + // if it's a `fs` error then it'll have a 'path' property + if (err.path) + str += ' [' + err.path + ']' + + return str +} + +var fs = require('fs') + +fs.readFile('thisisnotarealfile.txt', function (err, data) { + if (err) + console.log(errmsg(err)) +}) +``` + +**Use as a command line tool:** + +``` +~ $ errno 53 +{ + "errno": 53, + "code": "ENOTEMPTY", + "description": "directory not empty" +} +~ $ errno EROFS +{ + "errno": 56, + "code": "EROFS", + "description": "read-only file system" +} +~ $ errno foo +No such errno/code: "foo" +``` + +Supply no arguments for the full list. Error codes are processed case-insensitive. + +You will need to install with `npm install errno -g` if you want the `errno` command to be available without supplying a full path to the node_modules installation. + + +## Custom errors + +Use `errno.custom.createError()` to create custom `Error` objects to throw around in your Node.js library. Create error hierarchies so `instanceof` becomes a useful tool in tracking errors. Call-stack is correctly captured at the time you create an instance of the error object, plus a `cause` property will make available the original error object if you pass one in to the constructor. + +```js +var create = require('errno').custom.createError +var MyError = create('MyError') // inherits from Error +var SpecificError = create('SpecificError', MyError) // inherits from MyError +var OtherError = create('OtherError', MyError) + +// use them! +if (condition) throw new SpecificError('Eeek! Something bad happened') + +if (err) return callback(new OtherError(err)) +``` + +Also available is a `errno.custom.FilesystemError` with in-built access to errno properties: + +```js +fs.readFile('foo', function (err, data) { + if (err) return callback(new errno.custom.FilesystemError(err)) + // do something else +}) +``` + +The resulting error object passed through the callback will have the following properties: `code`, `errno`, `path` and `message` will contain a descriptive human-readable message. + +## Contributors + +* [bahamas10](https://github.com/bahamas10) (Dave Eddy) - Added CLI +* [ralphtheninja](https://github.com/ralphtheninja) (Lars-Magnus Skog) + +## Copyright & Licence + +*Copyright (c) 2012-2015 [Rod Vagg](https://github.com/rvagg) ([@rvagg](https://twitter.com/rvagg))* + +Made available under the MIT licence: + +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. diff --git a/node_modules/errno/build.js b/node_modules/errno/build.js new file mode 100755 index 000000000..fce89260c --- /dev/null +++ b/node_modules/errno/build.js @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +var request = require('request') + , fs = require('fs') + + , uvheadloc = 'https://raw.github.com/joyent/libuv/master/include/uv.h' + , defreg = /^\s*XX\(\s*([\-\d]+),\s*([A-Z]+),\s*"([^"]*)"\s*\)\s*\\?$/ + + +request(uvheadloc, function (err, response) { + if (err) + throw err + + var data, out + + data = response.body + .split('\n') + .map(function (line) { return line.match(defreg) }) + .filter(function (match) { return match }) + .map(function (match) { return { + errno: parseInt(match[1], 10) + , code: match[2] + , description: match[3] + }}) + + out = 'var all = module.exports.all = ' + JSON.stringify(data, 0, 1) + '\n\n' + + out += '\nmodule.exports.errno = {\n ' + + data.map(function (e, i) { + return '\'' + e.errno + '\': all[' + i + ']' + }).join('\n , ') + + '\n}\n\n' + + out += '\nmodule.exports.code = {\n ' + + data.map(function (e, i) { + return '\'' + e.code + '\': all[' + i + ']' + }).join('\n , ') + + '\n}\n\n' + + out += '\nmodule.exports.custom = require("./custom")(module.exports)\n' + + fs.writeFile('errno.js', out) +}) \ No newline at end of file diff --git a/node_modules/errno/cli.js b/node_modules/errno/cli.js new file mode 100755 index 000000000..61d179bbe --- /dev/null +++ b/node_modules/errno/cli.js @@ -0,0 +1,22 @@ +#!/usr/bin/env node + +var errno = require('./') + , arg = process.argv[2] + , data, code + +if (arg === undefined) { + console.log(JSON.stringify(errno.code, null, 2)) + process.exit(0) +} + +if ((code = +arg) == arg) + data = errno.errno[code] +else + data = errno.code[arg] || errno.code[arg.toUpperCase()] + +if (data) + console.log(JSON.stringify(data, null, 2)) +else { + console.error('No such errno/code: "' + arg + '"') + process.exit(1) +} diff --git a/node_modules/errno/custom.js b/node_modules/errno/custom.js new file mode 100644 index 000000000..ca8c1d8dc --- /dev/null +++ b/node_modules/errno/custom.js @@ -0,0 +1,57 @@ +var prr = require('prr') + +function init (type, message, cause) { + if (!!message && typeof message != 'string') { + message = message.message || message.name + } + prr(this, { + type : type + , name : type + // can be passed just a 'cause' + , cause : typeof message != 'string' ? message : cause + , message : message + }, 'ewr') +} + +// generic prototype, not intended to be actually used - helpful for `instanceof` +function CustomError (message, cause) { + Error.call(this) + if (Error.captureStackTrace) + Error.captureStackTrace(this, this.constructor) + init.call(this, 'CustomError', message, cause) +} + +CustomError.prototype = new Error() + +function createError (errno, type, proto) { + var err = function (message, cause) { + init.call(this, type, message, cause) + //TODO: the specificity here is stupid, errno should be available everywhere + if (type == 'FilesystemError') { + this.code = this.cause.code + this.path = this.cause.path + this.errno = this.cause.errno + this.message = + (errno.errno[this.cause.errno] + ? errno.errno[this.cause.errno].description + : this.cause.message) + + (this.cause.path ? ' [' + this.cause.path + ']' : '') + } + Error.call(this) + if (Error.captureStackTrace) + Error.captureStackTrace(this, err) + } + err.prototype = !!proto ? new proto() : new CustomError() + return err +} + +module.exports = function (errno) { + var ce = function (type, proto) { + return createError(errno, type, proto) + } + return { + CustomError : CustomError + , FilesystemError : ce('FilesystemError') + , createError : ce + } +} diff --git a/node_modules/errno/errno.js b/node_modules/errno/errno.js new file mode 100644 index 000000000..efb79d41b --- /dev/null +++ b/node_modules/errno/errno.js @@ -0,0 +1,313 @@ +var all = module.exports.all = [ + { + errno: -2, + code: 'ENOENT', + description: 'no such file or directory' + }, + { + errno: -1, + code: 'UNKNOWN', + description: 'unknown error' + }, + { + errno: 0, + code: 'OK', + description: 'success' + }, + { + errno: 1, + code: 'EOF', + description: 'end of file' + }, + { + errno: 2, + code: 'EADDRINFO', + description: 'getaddrinfo error' + }, + { + errno: 3, + code: 'EACCES', + description: 'permission denied' + }, + { + errno: 4, + code: 'EAGAIN', + description: 'resource temporarily unavailable' + }, + { + errno: 5, + code: 'EADDRINUSE', + description: 'address already in use' + }, + { + errno: 6, + code: 'EADDRNOTAVAIL', + description: 'address not available' + }, + { + errno: 7, + code: 'EAFNOSUPPORT', + description: 'address family not supported' + }, + { + errno: 8, + code: 'EALREADY', + description: 'connection already in progress' + }, + { + errno: 9, + code: 'EBADF', + description: 'bad file descriptor' + }, + { + errno: 10, + code: 'EBUSY', + description: 'resource busy or locked' + }, + { + errno: 11, + code: 'ECONNABORTED', + description: 'software caused connection abort' + }, + { + errno: 12, + code: 'ECONNREFUSED', + description: 'connection refused' + }, + { + errno: 13, + code: 'ECONNRESET', + description: 'connection reset by peer' + }, + { + errno: 14, + code: 'EDESTADDRREQ', + description: 'destination address required' + }, + { + errno: 15, + code: 'EFAULT', + description: 'bad address in system call argument' + }, + { + errno: 16, + code: 'EHOSTUNREACH', + description: 'host is unreachable' + }, + { + errno: 17, + code: 'EINTR', + description: 'interrupted system call' + }, + { + errno: 18, + code: 'EINVAL', + description: 'invalid argument' + }, + { + errno: 19, + code: 'EISCONN', + description: 'socket is already connected' + }, + { + errno: 20, + code: 'EMFILE', + description: 'too many open files' + }, + { + errno: 21, + code: 'EMSGSIZE', + description: 'message too long' + }, + { + errno: 22, + code: 'ENETDOWN', + description: 'network is down' + }, + { + errno: 23, + code: 'ENETUNREACH', + description: 'network is unreachable' + }, + { + errno: 24, + code: 'ENFILE', + description: 'file table overflow' + }, + { + errno: 25, + code: 'ENOBUFS', + description: 'no buffer space available' + }, + { + errno: 26, + code: 'ENOMEM', + description: 'not enough memory' + }, + { + errno: 27, + code: 'ENOTDIR', + description: 'not a directory' + }, + { + errno: 28, + code: 'EISDIR', + description: 'illegal operation on a directory' + }, + { + errno: 29, + code: 'ENONET', + description: 'machine is not on the network' + }, + { + errno: 31, + code: 'ENOTCONN', + description: 'socket is not connected' + }, + { + errno: 32, + code: 'ENOTSOCK', + description: 'socket operation on non-socket' + }, + { + errno: 33, + code: 'ENOTSUP', + description: 'operation not supported on socket' + }, + { + errno: 34, + code: 'ENOENT', + description: 'no such file or directory' + }, + { + errno: 35, + code: 'ENOSYS', + description: 'function not implemented' + }, + { + errno: 36, + code: 'EPIPE', + description: 'broken pipe' + }, + { + errno: 37, + code: 'EPROTO', + description: 'protocol error' + }, + { + errno: 38, + code: 'EPROTONOSUPPORT', + description: 'protocol not supported' + }, + { + errno: 39, + code: 'EPROTOTYPE', + description: 'protocol wrong type for socket' + }, + { + errno: 40, + code: 'ETIMEDOUT', + description: 'connection timed out' + }, + { + errno: 41, + code: 'ECHARSET', + description: 'invalid Unicode character' + }, + { + errno: 42, + code: 'EAIFAMNOSUPPORT', + description: 'address family for hostname not supported' + }, + { + errno: 44, + code: 'EAISERVICE', + description: 'servname not supported for ai_socktype' + }, + { + errno: 45, + code: 'EAISOCKTYPE', + description: 'ai_socktype not supported' + }, + { + errno: 46, + code: 'ESHUTDOWN', + description: 'cannot send after transport endpoint shutdown' + }, + { + errno: 47, + code: 'EEXIST', + description: 'file already exists' + }, + { + errno: 48, + code: 'ESRCH', + description: 'no such process' + }, + { + errno: 49, + code: 'ENAMETOOLONG', + description: 'name too long' + }, + { + errno: 50, + code: 'EPERM', + description: 'operation not permitted' + }, + { + errno: 51, + code: 'ELOOP', + description: 'too many symbolic links encountered' + }, + { + errno: 52, + code: 'EXDEV', + description: 'cross-device link not permitted' + }, + { + errno: 53, + code: 'ENOTEMPTY', + description: 'directory not empty' + }, + { + errno: 54, + code: 'ENOSPC', + description: 'no space left on device' + }, + { + errno: 55, + code: 'EIO', + description: 'i/o error' + }, + { + errno: 56, + code: 'EROFS', + description: 'read-only file system' + }, + { + errno: 57, + code: 'ENODEV', + description: 'no such device' + }, + { + errno: 58, + code: 'ESPIPE', + description: 'invalid seek' + }, + { + errno: 59, + code: 'ECANCELED', + description: 'operation canceled' + } +] + +module.exports.errno = {} +module.exports.code = {} + +all.forEach(function (error) { + module.exports.errno[error.errno] = error + module.exports.code[error.code] = error +}) + +module.exports.custom = require('./custom')(module.exports) +module.exports.create = module.exports.custom.createError diff --git a/node_modules/errno/package.json b/node_modules/errno/package.json new file mode 100644 index 000000000..eee3e559d --- /dev/null +++ b/node_modules/errno/package.json @@ -0,0 +1,33 @@ +{ + "name": "errno", + "authors": [ + "Rod Vagg @rvagg (https://github.com/rvagg)" + ], + "description": "libuv errno details exposed", + "keywords": [ + "errors", + "errno", + "libuv" + ], + "version": "0.1.8", + "main": "errno.js", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "./cli.js" + }, + "devDependencies": { + "error-stack-parser": "^2.0.1", + "inherits": "^2.0.3", + "tape": "~4.8.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/rvagg/node-errno.git" + }, + "license": "MIT", + "scripts": { + "test": "node --use_strict test.js" + } +} diff --git a/node_modules/errno/test.js b/node_modules/errno/test.js new file mode 100644 index 000000000..1c046357b --- /dev/null +++ b/node_modules/errno/test.js @@ -0,0 +1,88 @@ +var test = require('tape') + , inherits = require('inherits') + , ErrorStackParser = require('error-stack-parser') + , errno = require('./') + +test('sanity checks', function (t) { + t.ok(errno.all, 'errno.all not found') + t.ok(errno.errno, 'errno.errno not found') + t.ok(errno.code, 'errno.code not found') + + t.equal(errno.all.length, 60, 'found ' + errno.all.length + ', expected 60') + t.equal(errno.errno['-1'], errno.all[1], 'errno -1 not second element') + + t.equal(errno.code['UNKNOWN'], errno.all[1], 'code UNKNOWN not second element') + + t.equal(errno.errno[1], errno.all[3], 'errno 1 not fourth element') + + t.equal(errno.code['EOF'], errno.all[3], 'code EOF not fourth element') + t.end() +}) + +test('custom errors', function (t) { + const Cust = errno.create('FooNotBarError') + const cust = new Cust('foo is not bar') + + t.equal(cust.name, 'FooNotBarError', 'correct custom name') + t.equal(cust.type, 'FooNotBarError', 'correct custom type') + t.equal(cust.message, 'foo is not bar', 'correct custom message') + t.notOk(cust.cause, 'no cause') + t.end() +}) + +test('callstack', function (t) { + const MyError = errno.create('MyError') + + function lastFunction (ErrorType, cb) { + process.nextTick(cb, new ErrorType('oh noes!')) + } + + function secondLastFunction (ErrorType, cb) { + lastFunction(ErrorType, cb) + } + + function testFrames (t) { + return function (err) { + const stack = ErrorStackParser.parse(err) + t.same(stack[0].functionName, 'lastFunction', 'last stack frame ok') + t.same(stack[1].functionName, 'secondLastFunction', 'second last stack frame ok') + t.end() + } + } + + t.test('custom error, default prototype', function (t) { + secondLastFunction(MyError, testFrames(t)) + }) + + t.test('custom error, custom prototype', function (t) { + const MyError2 = errno.create('MyError2', MyError) + secondLastFunction(MyError2, testFrames(t)) + }) + + t.test('custom error, using inheritance', function (t) { + const CustomError = errno.custom.CustomError + + function MyError3 (message, cause) { + CustomError.call(this, message, cause) + } + + inherits(MyError3, CustomError) + + secondLastFunction(MyError3, testFrames(t)) + }) +}) + +test('error without message', function (t) { + const Cust = errno.create('WriteError') + const cust = new Cust({ + code: 22, + message: '', + name: 'QuotaExceededError' + }) + + t.equal(cust.name, 'WriteError', 'correct custom name') + t.equal(cust.type, 'WriteError', 'correct custom type') + t.equal(cust.message, 'QuotaExceededError', 'message is the name') + t.notOk(cust.cause, 'no cause') + t.end() +}) diff --git a/node_modules/extend/.editorconfig b/node_modules/extend/.editorconfig new file mode 100644 index 000000000..bc228f826 --- /dev/null +++ b/node_modules/extend/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 150 + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off diff --git a/node_modules/extend/.eslintrc b/node_modules/extend/.eslintrc new file mode 100644 index 000000000..a34cf2831 --- /dev/null +++ b/node_modules/extend/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": [2, 20], + "eqeqeq": [2, "allow-null"], + "func-name-matching": [1], + "max-depth": [1, 4], + "max-statements": [2, 26], + "no-extra-parens": [1], + "no-magic-numbers": [0], + "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], + "sort-keys": [0], + } +} diff --git a/node_modules/extend/.jscs.json b/node_modules/extend/.jscs.json new file mode 100644 index 000000000..3cce01d78 --- /dev/null +++ b/node_modules/extend/.jscs.json @@ -0,0 +1,175 @@ +{ + "es3": true, + + "additionalRules": [], + + "requireSemicolons": true, + + "disallowMultipleSpaces": true, + + "disallowIdentifierNames": [], + + "requireCurlyBraces": { + "allExcept": [], + "keywords": ["if", "else", "for", "while", "do", "try", "catch"] + }, + + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], + + "disallowSpaceAfterKeywords": [], + + "disallowSpaceBeforeComma": true, + "disallowSpaceAfterComma": false, + "disallowSpaceBeforeSemicolon": true, + + "disallowNodeTypes": [ + "DebuggerStatement", + "LabeledStatement", + "SwitchCase", + "SwitchStatement", + "WithStatement" + ], + + "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, + + "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, + "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, + "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, + "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, + "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, + + "requireSpaceBetweenArguments": true, + + "disallowSpacesInsideParentheses": true, + + "disallowSpacesInsideArrayBrackets": true, + + "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, + + "disallowSpaceAfterObjectKeys": true, + + "requireCommaBeforeLineBreak": true, + + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "requireSpaceAfterPrefixUnaryOperators": [], + + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "requireSpaceBeforePostfixUnaryOperators": [], + + "disallowSpaceBeforeBinaryOperators": [], + "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], + + "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], + "disallowSpaceAfterBinaryOperators": [], + + "disallowImplicitTypeConversion": ["binary", "string"], + + "disallowKeywords": ["with", "eval"], + + "requireKeywordsOnNewLine": [], + "disallowKeywordsOnNewLine": ["else"], + + "requireLineFeedAtFileEnd": true, + + "disallowTrailingWhitespace": true, + + "disallowTrailingComma": true, + + "excludeFiles": ["node_modules/**", "vendor/**"], + + "disallowMultipleLineStrings": true, + + "requireDotNotation": { "allExcept": ["keywords"] }, + + "requireParenthesesAroundIIFE": true, + + "validateLineBreaks": "LF", + + "validateQuoteMarks": { + "escape": true, + "mark": "'" + }, + + "disallowOperatorBeforeLineBreak": [], + + "requireSpaceBeforeKeywords": [ + "do", + "for", + "if", + "else", + "switch", + "case", + "try", + "catch", + "finally", + "while", + "with", + "return" + ], + + "validateAlignedFunctionParameters": { + "lineBreakAfterOpeningBraces": true, + "lineBreakBeforeClosingBraces": true + }, + + "requirePaddingNewLinesBeforeExport": true, + + "validateNewlineAfterArrayElements": { + "maximum": 6 + }, + + "requirePaddingNewLinesAfterUseStrict": true, + + "disallowArrowFunctions": true, + + "disallowMultiLineTernary": true, + + "validateOrderInObjectKeys": false, + + "disallowIdenticalDestructuringNames": true, + + "disallowNestedTernaries": { "maxLevel": 1 }, + + "requireSpaceAfterComma": { "allExcept": ["trailing"] }, + "requireAlignedMultilineParams": false, + + "requireSpacesInGenerator": { + "afterStar": true + }, + + "disallowSpacesInGenerator": { + "beforeStar": true + }, + + "disallowVar": false, + + "requireArrayDestructuring": false, + + "requireEnhancedObjectLiterals": false, + + "requireObjectDestructuring": false, + + "requireEarlyReturn": false, + + "requireCapitalizedConstructorsNew": { + "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] + }, + + "requireImportAlphabetized": false, + + "requireSpaceBeforeObjectValues": true, + "requireSpaceBeforeDestructuredValues": true, + + "disallowSpacesInsideTemplateStringPlaceholders": true, + + "disallowArrayDestructuringReturn": false, + + "requireNewlineBeforeSingleStatementsInIf": false, + + "disallowUnusedVariables": true, + + "requireSpacesInsideImportedObjectBraces": true, + + "requireUseStrict": true +} + diff --git a/node_modules/extend/.travis.yml b/node_modules/extend/.travis.yml new file mode 100644 index 000000000..5ccdfc494 --- /dev/null +++ b/node_modules/extend/.travis.yml @@ -0,0 +1,230 @@ +language: node_js +os: + - linux +node_js: + - "10.7" + - "9.11" + - "8.11" + - "7.10" + - "6.14" + - "5.12" + - "4.9" + - "iojs-v3.3" + - "iojs-v2.5" + - "iojs-v1.8" + - "0.12" + - "0.10" + - "0.8" +before_install: + - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' + - 'nvm install-latest-npm' +install: + - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' +script: + - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' + - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' + - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' + - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' +sudo: false +env: + - TEST=true +matrix: + fast_finish: true + include: + - node_js: "lts/*" + env: PRETEST=true + - node_js: "lts/*" + env: POSTTEST=true + - node_js: "4" + env: COVERAGE=true + - node_js: "10.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.13" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.12" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.11" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.11" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v3.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v3.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v3.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.11" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.4" + env: TEST=true ALLOW_FAILURE=true + allow_failures: + - os: osx + - env: TEST=true ALLOW_FAILURE=true diff --git a/node_modules/extend/CHANGELOG.md b/node_modules/extend/CHANGELOG.md new file mode 100644 index 000000000..2cf7de6fb --- /dev/null +++ b/node_modules/extend/CHANGELOG.md @@ -0,0 +1,83 @@ +3.0.2 / 2018-07-19 +================== + * [Fix] Prevent merging `__proto__` property (#48) + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` + * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` + +3.0.1 / 2017-04-27 +================== + * [Fix] deep extending should work with a non-object (#46) + * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` + * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix + * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. + * [Docs] Add example to readme (#34) + +3.0.0 / 2015-07-01 +================== + * [Possible breaking change] Use global "strict" directive (#32) + * [Tests] `int` is an ES3 reserved word + * [Tests] Test up to `io.js` `v2.3` + * [Tests] Add `npm run eslint` + * [Dev Deps] Update `covert`, `jscs` + +2.0.1 / 2015-04-25 +================== + * Use an inline `isArray` check, for ES3 browsers. (#27) + * Some old browsers fail when an identifier is `toString` + * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds + * Add license info to package.json (#25) + * Update `tape`, `jscs` + * Adding a CHANGELOG + +2.0.0 / 2014-10-01 +================== + * Increase code coverage to 100%; run code coverage as part of tests + * Add `npm run lint`; Run linter as part of tests + * Remove nodeType and setInterval checks in isPlainObject + * Updating `tape`, `jscs`, `covert` + * General style and README cleanup + +1.3.0 / 2014-06-20 +================== + * Add component.json for browser support (#18) + * Use SVG for badges in README (#16) + * Updating `tape`, `covert` + * Updating travis-ci to work with multiple node versions + * Fix `deep === false` bug (returning target as {}) (#14) + * Fixing constructor checks in isPlainObject + * Adding additional test coverage + * Adding `npm run coverage` + * Add LICENSE (#13) + * Adding a warning about `false`, per #11 + * General style and whitespace cleanup + +1.2.1 / 2013-09-14 +================== + * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8 + * Updating `tape` + +1.2.0 / 2013-09-02 +================== + * Updating the README: add badges + * Adding a missing variable reference. + * Using `tape` instead of `buster` for tests; add more tests (#7) + * Adding node 0.10 to Travis CI (#6) + * Enabling "npm test" and cleaning up package.json (#5) + * Add Travis CI. + +1.1.3 / 2012-12-06 +================== + * Added unit tests. + * Ensure extend function is named. (Looks nicer in a stack trace.) + * README cleanup. + +1.1.1 / 2012-11-07 +================== + * README cleanup. + * Added installation instructions. + * Added a missing semicolon + +1.0.0 / 2012-04-08 +================== + * Initial commit + diff --git a/node_modules/extend/LICENSE b/node_modules/extend/LICENSE new file mode 100644 index 000000000..e16d6a56c --- /dev/null +++ b/node_modules/extend/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) 2014 Stefan Thomas + +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. + diff --git a/node_modules/extend/README.md b/node_modules/extend/README.md new file mode 100644 index 000000000..5b8249aa9 --- /dev/null +++ b/node_modules/extend/README.md @@ -0,0 +1,81 @@ +[![Build Status][travis-svg]][travis-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] + +# extend() for Node.js [![Version Badge][npm-version-png]][npm-url] + +`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. + +Notes: + +* Since Node.js >= 4, + [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + now offers the same functionality natively (but without the "deep copy" option). + See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6). +* Some native implementations of `Object.assign` in both Node.js and many + browsers (since NPM modules are for the browser too) may not be fully + spec-compliant. + Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for + a compliant candidate. + +## Installation + +This package is available on [npm][npm-url] as: `extend` + +``` sh +npm install extend +``` + +## Usage + +**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)** + +*Extend one object with one or more others, returning the modified object.* + +**Example:** + +``` js +var extend = require('extend'); +extend(targetObject, object1, object2); +``` + +Keep in mind that the target object will be modified, and will be returned from extend(). + +If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). +Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. +Warning: passing `false` as the first argument is not supported. + +### Arguments + +* `deep` *Boolean* (optional) +If set, the merge becomes recursive (i.e. deep copy). +* `target` *Object* +The object to extend. +* `object1` *Object* +The object that will be merged into the first. +* `objectN` *Object* (Optional) +More objects to merge into the first. + +## License + +`node-extend` is licensed under the [MIT License][mit-license-url]. + +## Acknowledgements + +All credit to the jQuery authors for perfecting this amazing utility. + +Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb]. + +[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg +[travis-url]: https://travis-ci.org/justmoon/node-extend +[npm-url]: https://npmjs.org/package/extend +[mit-license-url]: http://opensource.org/licenses/MIT +[github-justmoon]: https://github.com/justmoon +[github-insin]: https://github.com/insin +[github-ljharb]: https://github.com/ljharb +[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg +[deps-svg]: https://david-dm.org/justmoon/node-extend.svg +[deps-url]: https://david-dm.org/justmoon/node-extend +[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg +[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies + diff --git a/node_modules/extend/component.json b/node_modules/extend/component.json new file mode 100644 index 000000000..1500a2f37 --- /dev/null +++ b/node_modules/extend/component.json @@ -0,0 +1,32 @@ +{ + "name": "extend", + "author": "Stefan Thomas (http://www.justmoon.net)", + "version": "3.0.0", + "description": "Port of jQuery.extend for node.js and the browser.", + "scripts": [ + "index.js" + ], + "contributors": [ + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "keywords": [ + "extend", + "clone", + "merge" + ], + "repository" : { + "type": "git", + "url": "https://github.com/justmoon/node-extend.git" + }, + "dependencies": { + }, + "devDependencies": { + "tape" : "~3.0.0", + "covert": "~0.4.0", + "jscs": "~1.6.2" + } +} + diff --git a/node_modules/extend/index.js b/node_modules/extend/index.js new file mode 100644 index 000000000..2aa3faae6 --- /dev/null +++ b/node_modules/extend/index.js @@ -0,0 +1,117 @@ +'use strict'; + +var hasOwn = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var defineProperty = Object.defineProperty; +var gOPD = Object.getOwnPropertyDescriptor; + +var isArray = function isArray(arr) { + if (typeof Array.isArray === 'function') { + return Array.isArray(arr); + } + + return toStr.call(arr) === '[object Array]'; +}; + +var isPlainObject = function isPlainObject(obj) { + if (!obj || toStr.call(obj) !== '[object Object]') { + return false; + } + + var hasOwnConstructor = hasOwn.call(obj, 'constructor'); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); + // Not own constructor property must be Object + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + var key; + for (key in obj) { /**/ } + + return typeof key === 'undefined' || hasOwn.call(obj, key); +}; + +// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target +var setProperty = function setProperty(target, options) { + if (defineProperty && options.name === '__proto__') { + defineProperty(target, options.name, { + enumerable: true, + configurable: true, + value: options.newValue, + writable: true + }); + } else { + target[options.name] = options.newValue; + } +}; + +// Return undefined instead of __proto__ if '__proto__' is not an own property +var getProperty = function getProperty(obj, name) { + if (name === '__proto__') { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + // In early versions of node, obj['__proto__'] is buggy when obj has + // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. + return gOPD(obj, name).value; + } + } + + return obj[name]; +}; + +module.exports = function extend() { + var options, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + + // Handle a deep copy situation + if (typeof target === 'boolean') { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { + target = {}; + } + + for (; i < length; ++i) { + options = arguments[i]; + // Only deal with non-null/undefined values + if (options != null) { + // Extend the base object + for (name in options) { + src = getProperty(target, name); + copy = getProperty(options, name); + + // Prevent never-ending loop + if (target !== copy) { + // Recurse if we're merging plain objects or arrays + if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); + + // Don't bring in undefined values + } else if (typeof copy !== 'undefined') { + setProperty(target, { name: name, newValue: copy }); + } + } + } + } + } + + // Return the modified object + return target; +}; diff --git a/node_modules/extend/package.json b/node_modules/extend/package.json new file mode 100644 index 000000000..85279f780 --- /dev/null +++ b/node_modules/extend/package.json @@ -0,0 +1,42 @@ +{ + "name": "extend", + "author": "Stefan Thomas (http://www.justmoon.net)", + "version": "3.0.2", + "description": "Port of jQuery.extend for node.js and the browser", + "main": "index", + "scripts": { + "pretest": "npm run lint", + "test": "npm run tests-only", + "posttest": "npm run coverage-quiet", + "tests-only": "node test", + "coverage": "covert test/index.js", + "coverage-quiet": "covert test/index.js --quiet", + "lint": "npm run jscs && npm run eslint", + "jscs": "jscs *.js */*.js", + "eslint": "eslint *.js */*.js" + }, + "contributors": [ + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "keywords": [ + "extend", + "clone", + "merge" + ], + "repository": { + "type": "git", + "url": "https://github.com/justmoon/node-extend.git" + }, + "dependencies": {}, + "devDependencies": { + "@ljharb/eslint-config": "^12.2.1", + "covert": "^1.1.0", + "eslint": "^4.19.1", + "jscs": "^3.0.7", + "tape": "^4.9.1" + }, + "license": "MIT" +} diff --git a/node_modules/extendr/.github/FUNDING.yml b/node_modules/extendr/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/extendr/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/extendr/HISTORY.md b/node_modules/extendr/HISTORY.md new file mode 100755 index 000000000..20b59e77e --- /dev/null +++ b/node_modules/extendr/HISTORY.md @@ -0,0 +1,71 @@ +# History + +## v3.5.0 2019 November 8 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.4.1 2018 December 8 + +- [Fixed documentation link.](http://master.extendr.bevry.surge.sh/docs/) + +## v3.4.0 2018 December 8 + +- [Added JSDoc Documentation.](http://master.extendr.bevry.surge.sh/docs/) +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.3.1 2018 January 26 + +- Only support `dereference` on RegExp, on environments that support it + +## v3.3.0 2018 January 26 + +- Added `dereference` as an alternative for `dereferenceJSON` +- Updated base files + +## v3.2.2 2016 June 19 + +- Re-added node 0.10 compatibility (regression since v3.0.0) + - Albeit implicit/untested compat as dev deps require node >=0.12 + +## v3.2.1 2016 June 16 + +- Re-added missing engines property (regression since v3.2.0) +- Removed unused editions syntax + +## v3.2.0 2016 May 27 + +- **UNPUBLISHED:** due to missing engines field, replacement is v3.2.1 +- Updated internal conventions + - Moved from [ESNextGuardian](https://github.com/bevry/esnextguardian) to [Editions](https://github.com/bevry/editions) + +## v3.1.0 2015 December 9 + +- Updated internal conventions + +## v3.0.1 2015 September 21 + +- Updated dependencies + +## v3.0.0 2015 September 11 + +- Moved from CoffeeScript to ES6+ +- Rewrote to ensure reference consistency + - `clone` has been "removed", as `deepClone` is now `clone`, as a shallow clone doesn't make sense + - `deepExtend` is now `deep` + - `shallowExtendPlainObjects` is now `extend` + - `safeShallowExtendPlainObjects` is now `defaults` + - `deepExtendPlainObjects` is now `deep` + - `safeDeepExtendPlainObjects` is now `deepDefaults` + - `dereference` is now `dereferenceJSON` + +## v2.1.0 2013 June 29 + +- Arrays now correctly deep extend + +## v2.0.1 2013 March 28 + +- Added `deepExtend` alias for `deepExtendPlainObjects` + +## v2.0.0 2013 March 28 + +- Split away from [bal-util](https://github.com/balupton/bal-util) diff --git a/node_modules/extendr/LICENSE.md b/node_modules/extendr/LICENSE.md new file mode 100755 index 000000000..c69ffc0e0 --- /dev/null +++ b/node_modules/extendr/LICENSE.md @@ -0,0 +1,24 @@ + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + +

MIT License

+ +
+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 (including the next paragraph) 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.
+
+ + diff --git a/node_modules/extendr/README.md b/node_modules/extendr/README.md new file mode 100755 index 000000000..98ca1c368 --- /dev/null +++ b/node_modules/extendr/README.md @@ -0,0 +1,147 @@ + + +

extendr

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Utilities for cloning, extending, and de-referencing objects in shallow, deep, and safe ways + + + + + + +

Install

+ +

npm

+
    +
  • Install: npm install --save extendr
  • +
  • Require: require('extendr')
  • +
+ +

jspm

+ +``` html + +``` + +

Editions

+ +

This package is published with the following editions:

+ +
  • extendr aliases extendr/index.js which uses Editions to automatically select the correct edition for the consumers environment
  • +
  • extendr/source/index.js is esnext source code with require for modules
  • +
  • extendr/edition-browsers/index.js is esnext compiled for browsers with require for modules
  • +
  • extendr/edition-node-0.12/index.js is esnext compiled for node.js 0.12 with require for modules
+ +

TypeScript

+ +This project provides its type information via inline JSDoc Comments. To make use of this in TypeScript, set your maxNodeModuleJsDepth compiler option to `5` or thereabouts. You can accomlish this via your `tsconfig.json` file like so: + +``` json +{ + "compilerOptions": { + "maxNodeModuleJsDepth": 5 + } +} +``` + + + + +## Usage + +[Complete API Documentation.](http://master.extendr.bevry.surge.sh/docs/) + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Contribute

+ +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/extendr/edition-browsers/index.js b/node_modules/extendr/edition-browsers/index.js new file mode 100755 index 000000000..4c417fb9d --- /dev/null +++ b/node_modules/extendr/edition-browsers/index.js @@ -0,0 +1,259 @@ +'use strict'; // Import + +var typeChecker = require('typechecker'); +/** + * The options that are available to customise the behaviour of {@link custom}. + * @typedef {object} Options + * @property {boolean} [defaults=false] Only extend with a source value, if the target value is null or undefined. + * @property {boolean} [traverse=false] If false, a shallow extend will be performed, if a true a deep/nested extend will be performed. + */ + +/** + * Extend target with the objects, with customisations. + * + * Target and sources can only be plain objects, any other type will throw, this is intentional to guarantee consistency of references. + * Source values that are injected, will be dereferenced if they are plain objects or arrays. + * + * Plain Objects and Arrays will be dereferenced. All other types will keep their reference. + * + * @private + * @param {Options} options + * @param {object} target + * @param {...object} sources + * @returns {object} target + * @throws {Error} Throws in the case that the target or a source was not a plain object. + */ + + +function custom(options, target) { + var _options$defaults = options.defaults, + defaults = _options$defaults === void 0 ? false : _options$defaults, + _options$traverse = options.traverse, + traverse = _options$traverse === void 0 ? false : _options$traverse; + + if (!typeChecker.isPlainObject(target)) { + throw new Error('extendr only supports extending plain objects, target was not a plain object'); + } + + for (var objIndex = 0; objIndex < (arguments.length <= 2 ? 0 : arguments.length - 2); ++objIndex) { + var obj = objIndex + 2 < 2 || arguments.length <= objIndex + 2 ? undefined : arguments[objIndex + 2]; + + if (!typeChecker.isPlainObject(obj)) { + throw new Error('extendr only supports extending plain objects, an input was not a plain object'); + } + + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + // if not defaults only, always overwrite + // if defaults only, overwrite if current value is empty + var defaultSkip = defaults && target[key] != null; // get the new value + + var newValue = obj[key]; // ensure everything is new + + if (typeChecker.isPlainObject(newValue)) { + if (traverse && typeChecker.isPlainObject(target[key])) { + // replace current value with + // dereferenced merged new object + target[key] = custom({ + traverse: traverse, + defaults: defaults + }, {}, target[key], newValue); + } else if (!defaultSkip) { + // replace current value with + // dereferenced new object + target[key] = custom({ + defaults: defaults + }, {}, newValue); + } + } else if (!defaultSkip) { + if (typeChecker.isArray(newValue)) { + // replace current value with + // dereferenced new array + target[key] = newValue.slice(); + } else { + // replace current value with + // possibly referenced: function, class, etc + // possibly unreferenced: string + // new value + target[key] = newValue; + } + } + } + } + } + + return target; +} +/** + * Shallow extend the properties from the sources into the target. + * Performs {@link custom} with default options. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function extend(target) { + for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + return custom.apply(void 0, [{}, target].concat(sources)); +} +/** + * Deep extend the properties from the sources into the target. + * Performs {@link custom} with +traverse. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function deep(target) { + for (var _len2 = arguments.length, sources = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + sources[_key2 - 1] = arguments[_key2]; + } + + return custom.apply(void 0, [{ + traverse: true + }, target].concat(sources)); +} +/** + * Shallow extend the properties from the sources into the target, where the target's value is `undefined` or `null`. + * Performs {@link custom} with +defaults. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function defaults(target) { + for (var _len3 = arguments.length, sources = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + sources[_key3 - 1] = arguments[_key3]; + } + + return custom.apply(void 0, [{ + defaults: true + }, target].concat(sources)); +} +/** + * Deep extend the properties from the sources into the target, where the target's value is `undefined` or `null`. + * Performs {@link custom} with +traverse +defaults. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function deepDefaults(target) { + for (var _len4 = arguments.length, sources = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + sources[_key4 - 1] = arguments[_key4]; + } + + return custom.apply(void 0, [{ + traverse: true, + defaults: true + }, target].concat(sources)); +} +/** + * Deep extends the properties from the sources into a new object. + * Performs {@link custom} with +traverse. + * @param {...object} sources + * @returns {object} target + */ + + +function clone() { + for (var _len5 = arguments.length, sources = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + sources[_key5] = arguments[_key5]; + } + + return custom.apply(void 0, [{ + traverse: true + }, {}].concat(sources)); +} +/** + * Clones the object by stringifying it, then parsing the result, to ensure all references are destroyed. + * Only serialisable values are kept, this means: + * - Objects that are neither a Plain Object nor an Array will be lost. + * - Class Instances, Functions and Regular Expressions will be discarded. + * @param {object} source + * @returns {object} dereferenced source + */ + + +function dereferenceJSON(source) { + return JSON.parse(JSON.stringify(source)); +} +/** + * Clones the object by traversing through it and setting up new instances of anything that can be referenced. + * Dereferences most things, including Regular Expressions. + * Will not dereference functions and classes, they will throw. + * @param {object} source + * @returns {object} dereferenced source + * @throws {Error} Throws in the case it encounters something it cannot dereference. + */ + + +function dereference(source) { + if (typeChecker.isString(source)) { + return source.toString(); + } + + if (typeChecker.isUndefined(source)) { + return; + } + + if (typeChecker.isNull(source)) { + return null; + } + + if (typeChecker.isNumber(source) || typeChecker.isBoolean(source)) { + return dereferenceJSON(source); + } + + if (typeChecker.isPlainObject(source)) { + var result = {}; + + for (var key in source) { + if (source.hasOwnProperty(key)) { + var value = source[key]; + result[key] = dereference(value); + } + } + + return result; + } + + if (typeChecker.isArray(source)) { + return source.map(function (item) { + return dereference(item); + }); + } + + if (typeChecker.isDate(source)) { + return new Date(source.toISOString()); + } + + if (typeChecker.isRegExp(source)) { + if (source.flags == null) { + throw new Error('extendr cannot derefence RegExps on this older version of node'); + } else { + return new RegExp(source.source, source.flags); + } + } + + throw new Error('extendr was passed an object type that it does not know how to derefence'); +} // Export + + +module.exports = { + custom: custom, + extend: extend, + deep: deep, + defaults: defaults, + deepDefaults: deepDefaults, + clone: clone, + dereference: dereference, + dereferenceJSON: dereferenceJSON +}; \ No newline at end of file diff --git a/node_modules/extendr/edition-node-0.12/index.js b/node_modules/extendr/edition-node-0.12/index.js new file mode 100755 index 000000000..4c417fb9d --- /dev/null +++ b/node_modules/extendr/edition-node-0.12/index.js @@ -0,0 +1,259 @@ +'use strict'; // Import + +var typeChecker = require('typechecker'); +/** + * The options that are available to customise the behaviour of {@link custom}. + * @typedef {object} Options + * @property {boolean} [defaults=false] Only extend with a source value, if the target value is null or undefined. + * @property {boolean} [traverse=false] If false, a shallow extend will be performed, if a true a deep/nested extend will be performed. + */ + +/** + * Extend target with the objects, with customisations. + * + * Target and sources can only be plain objects, any other type will throw, this is intentional to guarantee consistency of references. + * Source values that are injected, will be dereferenced if they are plain objects or arrays. + * + * Plain Objects and Arrays will be dereferenced. All other types will keep their reference. + * + * @private + * @param {Options} options + * @param {object} target + * @param {...object} sources + * @returns {object} target + * @throws {Error} Throws in the case that the target or a source was not a plain object. + */ + + +function custom(options, target) { + var _options$defaults = options.defaults, + defaults = _options$defaults === void 0 ? false : _options$defaults, + _options$traverse = options.traverse, + traverse = _options$traverse === void 0 ? false : _options$traverse; + + if (!typeChecker.isPlainObject(target)) { + throw new Error('extendr only supports extending plain objects, target was not a plain object'); + } + + for (var objIndex = 0; objIndex < (arguments.length <= 2 ? 0 : arguments.length - 2); ++objIndex) { + var obj = objIndex + 2 < 2 || arguments.length <= objIndex + 2 ? undefined : arguments[objIndex + 2]; + + if (!typeChecker.isPlainObject(obj)) { + throw new Error('extendr only supports extending plain objects, an input was not a plain object'); + } + + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + // if not defaults only, always overwrite + // if defaults only, overwrite if current value is empty + var defaultSkip = defaults && target[key] != null; // get the new value + + var newValue = obj[key]; // ensure everything is new + + if (typeChecker.isPlainObject(newValue)) { + if (traverse && typeChecker.isPlainObject(target[key])) { + // replace current value with + // dereferenced merged new object + target[key] = custom({ + traverse: traverse, + defaults: defaults + }, {}, target[key], newValue); + } else if (!defaultSkip) { + // replace current value with + // dereferenced new object + target[key] = custom({ + defaults: defaults + }, {}, newValue); + } + } else if (!defaultSkip) { + if (typeChecker.isArray(newValue)) { + // replace current value with + // dereferenced new array + target[key] = newValue.slice(); + } else { + // replace current value with + // possibly referenced: function, class, etc + // possibly unreferenced: string + // new value + target[key] = newValue; + } + } + } + } + } + + return target; +} +/** + * Shallow extend the properties from the sources into the target. + * Performs {@link custom} with default options. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function extend(target) { + for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + return custom.apply(void 0, [{}, target].concat(sources)); +} +/** + * Deep extend the properties from the sources into the target. + * Performs {@link custom} with +traverse. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function deep(target) { + for (var _len2 = arguments.length, sources = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + sources[_key2 - 1] = arguments[_key2]; + } + + return custom.apply(void 0, [{ + traverse: true + }, target].concat(sources)); +} +/** + * Shallow extend the properties from the sources into the target, where the target's value is `undefined` or `null`. + * Performs {@link custom} with +defaults. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function defaults(target) { + for (var _len3 = arguments.length, sources = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + sources[_key3 - 1] = arguments[_key3]; + } + + return custom.apply(void 0, [{ + defaults: true + }, target].concat(sources)); +} +/** + * Deep extend the properties from the sources into the target, where the target's value is `undefined` or `null`. + * Performs {@link custom} with +traverse +defaults. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ + + +function deepDefaults(target) { + for (var _len4 = arguments.length, sources = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + sources[_key4 - 1] = arguments[_key4]; + } + + return custom.apply(void 0, [{ + traverse: true, + defaults: true + }, target].concat(sources)); +} +/** + * Deep extends the properties from the sources into a new object. + * Performs {@link custom} with +traverse. + * @param {...object} sources + * @returns {object} target + */ + + +function clone() { + for (var _len5 = arguments.length, sources = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + sources[_key5] = arguments[_key5]; + } + + return custom.apply(void 0, [{ + traverse: true + }, {}].concat(sources)); +} +/** + * Clones the object by stringifying it, then parsing the result, to ensure all references are destroyed. + * Only serialisable values are kept, this means: + * - Objects that are neither a Plain Object nor an Array will be lost. + * - Class Instances, Functions and Regular Expressions will be discarded. + * @param {object} source + * @returns {object} dereferenced source + */ + + +function dereferenceJSON(source) { + return JSON.parse(JSON.stringify(source)); +} +/** + * Clones the object by traversing through it and setting up new instances of anything that can be referenced. + * Dereferences most things, including Regular Expressions. + * Will not dereference functions and classes, they will throw. + * @param {object} source + * @returns {object} dereferenced source + * @throws {Error} Throws in the case it encounters something it cannot dereference. + */ + + +function dereference(source) { + if (typeChecker.isString(source)) { + return source.toString(); + } + + if (typeChecker.isUndefined(source)) { + return; + } + + if (typeChecker.isNull(source)) { + return null; + } + + if (typeChecker.isNumber(source) || typeChecker.isBoolean(source)) { + return dereferenceJSON(source); + } + + if (typeChecker.isPlainObject(source)) { + var result = {}; + + for (var key in source) { + if (source.hasOwnProperty(key)) { + var value = source[key]; + result[key] = dereference(value); + } + } + + return result; + } + + if (typeChecker.isArray(source)) { + return source.map(function (item) { + return dereference(item); + }); + } + + if (typeChecker.isDate(source)) { + return new Date(source.toISOString()); + } + + if (typeChecker.isRegExp(source)) { + if (source.flags == null) { + throw new Error('extendr cannot derefence RegExps on this older version of node'); + } else { + return new RegExp(source.source, source.flags); + } + } + + throw new Error('extendr was passed an object type that it does not know how to derefence'); +} // Export + + +module.exports = { + custom: custom, + extend: extend, + deep: deep, + defaults: defaults, + deepDefaults: deepDefaults, + clone: clone, + dereference: dereference, + dereferenceJSON: dereferenceJSON +}; \ No newline at end of file diff --git a/node_modules/extendr/index.js b/node_modules/extendr/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/extendr/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/extendr/package.json b/node_modules/extendr/package.json new file mode 100644 index 000000000..c99b36567 --- /dev/null +++ b/node_modules/extendr/package.json @@ -0,0 +1,202 @@ +{ + "name": "extendr", + "version": "3.5.0", + "description": "Utilities for cloning, extending, and de-referencing objects in shallow, deep, and safe ways", + "homepage": "https://github.com/bevry/extendr", + "license": "MIT", + "keywords": [ + "extend", + "deepExtend", + "shallowExtend", + "safeExtend", + "clone", + "deepClone", + "dereference" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist" + } + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + }, + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Sean Fridman (http://seanfridman.com)" + ], + "bugs": { + "url": "https://github.com/bevry/extendr/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/extendr.git" + }, + "engines": { + "node": ">=0.12" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "esnext compiled for browsers with require for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "esnext compiled for node.js 0.12 with require for modules", + "directory": "edition-node-0.12", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "main": "index.js", + "browser": "edition-browsers/index.js", + "dependencies": { + "editions": "^2.2.0", + "typechecker": "^4.7.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "assert-helpers": "^4.9.7", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.2.1", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-prettier": "^3.1.1", + "jsdoc": "^3.6.3", + "kava": "^3.1.0", + "minami": "^1.2.3", + "prettier": "^1.18.2", + "projectz": "^1.7.5", + "surge": "^0.21.3", + "valid-directory": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.12", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.12": "env BABEL_ENV=edition-node-0.12 babel --out-dir ./edition-node-0.12 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:docs": "npm run our:meta:docs:jsdoc", + "our:meta:docs:jsdoc": "rm -Rf ./docs && jsdoc --recurse --pedantic --access all --destination ./docs --package ./package.json --readme ./README.md --template ./node_modules/minami ./source && mv ./docs/$npm_package_name/$npm_package_version/* ./docs/ && rm -Rf ./docs/$npm_package_name/$npm_package_version", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": "defaults", + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + }, + "edition-node-0.12": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.12" + }, + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/extendr/source/index.js b/node_modules/extendr/source/index.js new file mode 100755 index 000000000..95d9ba6d3 --- /dev/null +++ b/node_modules/extendr/source/index.js @@ -0,0 +1,223 @@ +'use strict' + +// Import +const typeChecker = require('typechecker') + +/** + * The options that are available to customise the behaviour of {@link custom}. + * @typedef {object} Options + * @property {boolean} [defaults=false] Only extend with a source value, if the target value is null or undefined. + * @property {boolean} [traverse=false] If false, a shallow extend will be performed, if a true a deep/nested extend will be performed. + */ + +/** + * Extend target with the objects, with customisations. + * + * Target and sources can only be plain objects, any other type will throw, this is intentional to guarantee consistency of references. + * Source values that are injected, will be dereferenced if they are plain objects or arrays. + * + * Plain Objects and Arrays will be dereferenced. All other types will keep their reference. + * + * @private + * @param {Options} options + * @param {object} target + * @param {...object} sources + * @returns {object} target + * @throws {Error} Throws in the case that the target or a source was not a plain object. + */ +function custom(options, target, ...sources) { + const { defaults = false, traverse = false } = options + if (!typeChecker.isPlainObject(target)) { + throw new Error( + 'extendr only supports extending plain objects, target was not a plain object' + ) + } + for (let objIndex = 0; objIndex < sources.length; ++objIndex) { + const obj = sources[objIndex] + if (!typeChecker.isPlainObject(obj)) { + throw new Error( + 'extendr only supports extending plain objects, an input was not a plain object' + ) + } + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + // if not defaults only, always overwrite + // if defaults only, overwrite if current value is empty + const defaultSkip = defaults && target[key] != null + + // get the new value + const newValue = obj[key] + + // ensure everything is new + if (typeChecker.isPlainObject(newValue)) { + if (traverse && typeChecker.isPlainObject(target[key])) { + // replace current value with + // dereferenced merged new object + target[key] = custom( + { traverse, defaults }, + {}, + target[key], + newValue + ) + } else if (!defaultSkip) { + // replace current value with + // dereferenced new object + target[key] = custom({ defaults }, {}, newValue) + } + } else if (!defaultSkip) { + if (typeChecker.isArray(newValue)) { + // replace current value with + // dereferenced new array + target[key] = newValue.slice() + } else { + // replace current value with + // possibly referenced: function, class, etc + // possibly unreferenced: string + // new value + target[key] = newValue + } + } + } + } + } + return target +} + +/** + * Shallow extend the properties from the sources into the target. + * Performs {@link custom} with default options. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ +function extend(target, ...sources) { + return custom({}, target, ...sources) +} + +/** + * Deep extend the properties from the sources into the target. + * Performs {@link custom} with +traverse. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ +function deep(target, ...sources) { + return custom({ traverse: true }, target, ...sources) +} + +/** + * Shallow extend the properties from the sources into the target, where the target's value is `undefined` or `null`. + * Performs {@link custom} with +defaults. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ +function defaults(target, ...sources) { + return custom({ defaults: true }, target, ...sources) +} + +/** + * Deep extend the properties from the sources into the target, where the target's value is `undefined` or `null`. + * Performs {@link custom} with +traverse +defaults. + * @param {object} target + * @param {...object} sources + * @returns {object} target + */ +function deepDefaults(target, ...sources) { + return custom({ traverse: true, defaults: true }, target, ...sources) +} + +/** + * Deep extends the properties from the sources into a new object. + * Performs {@link custom} with +traverse. + * @param {...object} sources + * @returns {object} target + */ +function clone(...sources) { + return custom({ traverse: true }, {}, ...sources) +} + +/** + * Clones the object by stringifying it, then parsing the result, to ensure all references are destroyed. + * Only serialisable values are kept, this means: + * - Objects that are neither a Plain Object nor an Array will be lost. + * - Class Instances, Functions and Regular Expressions will be discarded. + * @param {object} source + * @returns {object} dereferenced source + */ +function dereferenceJSON(source) { + return JSON.parse(JSON.stringify(source)) +} + +/** + * Clones the object by traversing through it and setting up new instances of anything that can be referenced. + * Dereferences most things, including Regular Expressions. + * Will not dereference functions and classes, they will throw. + * @param {object} source + * @returns {object} dereferenced source + * @throws {Error} Throws in the case it encounters something it cannot dereference. + */ +function dereference(source) { + if (typeChecker.isString(source)) { + return source.toString() + } + + if (typeChecker.isUndefined(source)) { + return + } + + if (typeChecker.isNull(source)) { + return null + } + + if (typeChecker.isNumber(source) || typeChecker.isBoolean(source)) { + return dereferenceJSON(source) + } + + if (typeChecker.isPlainObject(source)) { + const result = {} + for (const key in source) { + if (source.hasOwnProperty(key)) { + const value = source[key] + result[key] = dereference(value) + } + } + return result + } + + if (typeChecker.isArray(source)) { + return source.map(function(item) { + return dereference(item) + }) + } + + if (typeChecker.isDate(source)) { + return new Date(source.toISOString()) + } + + if (typeChecker.isRegExp(source)) { + if (source.flags == null) { + throw new Error( + 'extendr cannot derefence RegExps on this older version of node' + ) + } else { + return new RegExp(source.source, source.flags) + } + } + + throw new Error( + 'extendr was passed an object type that it does not know how to derefence' + ) +} + +// Export +module.exports = { + custom, + extend, + deep, + defaults, + deepDefaults, + clone, + dereference, + dereferenceJSON +} diff --git a/node_modules/extract-opts/.dependabot/config.yml b/node_modules/extract-opts/.dependabot/config.yml new file mode 100644 index 000000000..69a808b79 --- /dev/null +++ b/node_modules/extract-opts/.dependabot/config.yml @@ -0,0 +1,9 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: daily + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/extract-opts/.github/FUNDING.yml b/node_modules/extract-opts/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/extract-opts/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/extract-opts/HISTORY.md b/node_modules/extract-opts/HISTORY.md new file mode 100644 index 000000000..af57ce346 --- /dev/null +++ b/node_modules/extract-opts/HISTORY.md @@ -0,0 +1,39 @@ +# History + +## v3.4.0 2019 November 13 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v3.3.1 2016 May 27 + +- Updated internal conventions + - Corrected edition syntaxes + +## v3.3.0 2016 May 27 + +- Updated internal conventions + - Moved from [ESNextGuardian](https://github.com/bevry/esnextguardian) to [Editions](https://github.com/bevry/editions) + +## v3.2.0 2016 January 15 + +- Minimum supported node version has gone from 0.12 to node 0.10 + +## v3.1.0 2016 January 14 + +- Converted from CoffeeScript to ESNext +- Updated internal conventions +- Updated minimum supported node version from 0.4 to 0.12 +- [This release was live coded. You can watch it here.](https://plus.google.com/u/0/b/100631142988286661025/events/c9k1pidfui89hfa39cr5831dmi8) + +## v3.0.1 2015 March 13 + +- Republished + +## v3.0.0 2015 March 13 + +- Simplified export +- Updated dependencies + +## v2.2.0 2013 June 24 + +- Split from [bal-util](http://npmjs.com/package/bal-util) diff --git a/node_modules/extract-opts/LICENSE.md b/node_modules/extract-opts/LICENSE.md new file mode 100644 index 000000000..22b27b666 --- /dev/null +++ b/node_modules/extract-opts/LICENSE.md @@ -0,0 +1,24 @@ + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + +

MIT License

+ +
+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 (including the next paragraph) 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.
+
+ + diff --git a/node_modules/extract-opts/README.md b/node_modules/extract-opts/README.md new file mode 100644 index 000000000..08db0b6c7 --- /dev/null +++ b/node_modules/extract-opts/README.md @@ -0,0 +1,179 @@ + + +

Extract Options & Callback

+ + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
+Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Extract the options and callback from a function's arguments easily + + + + + + +

Install

+ +

npm

+
    +
  • Install: npm install --save extract-opts
  • +
  • Require: require('extract-opts')
  • +
+ +

jspm

+ +``` html + +``` + +

Editions

+ +

This package is published with the following editions:

+ +
  • extract-opts aliases extract-opts/index.js which uses Editions to automatically select the correct edition for the consumers environment
  • +
  • extract-opts/source/index.js is esnext source code with require for modules
  • +
  • extract-opts/edition-browsers/index.js is esnext compiled for browsers with require for modules
  • +
  • extract-opts/edition-node-0.10/index.js is esnext compiled for node.js 0.10 with require for modules
+ + + + +## Usage + +``` javascript +var log = console.log.bind(console) +var extractOptsAndCallback = require('extract-opts') + +// fs.readFile(filename, [options], callback) +function readFile (filename, opts, next) { + // Extract options and callback + var args = extractOptsAndCallback(opts, next) + opts = args[0] + next = args[1] + + // Forward for simplicities sake + require('fs').readFile(filename, opts, next) +} + +// Test it +readFile('package.json', log) // works with no options +readFile('package.json', null, log) // works with null options +readFile('package.json', {next: log}) // works with just options +``` + +### Customisation + +Extract Options and Callback also supports a third argument. +You can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`. +This is useful if your completion callback has other names besides `next`. +Allowing you to do the following: + +``` javascript +var log = console.log.bind(console) +function extractOptsAndCallback (opts, next, config) { + if ( config == null ) config = {} + if ( config.completionCallbackNames == null ) config.completionCallbackNames = ['next', 'complete', 'done'] + return require('extract-opts')(opts, next, config) +} + +# The readFile method as before + +# Test it +readFile('package.json', {next: log}) # works the standard completion callback name +readFile('package.json', {complete: log}) # works with our custom completion callback name +readFile('package.json', {done: log}) # works with our custom completion callback name +``` + + + + +

History

+ +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

Contribute

+ +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

Backers

+ +

Maintainers

+ +These amazing people are maintaining this project: + + + +

Sponsors

+ +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

Contributors

+ +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

License

+ +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/extract-opts/edition-browsers/index.js b/node_modules/extract-opts/edition-browsers/index.js new file mode 100644 index 000000000..51356c53e --- /dev/null +++ b/node_modules/extract-opts/edition-browsers/index.js @@ -0,0 +1,46 @@ +'use strict'; // Import + +var typeChecker = require('typechecker'); + +var eachr = require('eachr'); // Define + + +module.exports = function (opts, next) { + var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // Empty, set default + if (config.completionCallbackNames == null) { + config.completionCallbackNames = ['next']; + } // Not array, make array + else if (typeChecker.isArray(config.completionCallbackNames) === false) { + config.completionCallbackNames = [config.completionCallbackNames]; + } // Arguments + + + if (typeChecker.isFunction(opts) && next == null) { + next = opts; + opts = {}; + } else if (!opts) { + opts = {}; + } // Completion callback + + + if (!next) { + // Cycle the completionCallbackNames to check if the completion callback name exists in opts + // if it does, then use it as the next and delete it's value + eachr(config.completionCallbackNames, function (completionCallbackName) { + if (typeof opts[completionCallbackName] !== 'undefined') { + next = opts[completionCallbackName]; + delete opts[completionCallbackName]; + return false; // break + // ^ why this only does the first, and not all, using the last, I don't know ... + // can be changed in a future major update + } + }); + } // Ensure + + + if (!next) next = null; // Return + + return [opts, next]; +}; \ No newline at end of file diff --git a/node_modules/extract-opts/edition-node-0.10/index.js b/node_modules/extract-opts/edition-node-0.10/index.js new file mode 100644 index 000000000..51356c53e --- /dev/null +++ b/node_modules/extract-opts/edition-node-0.10/index.js @@ -0,0 +1,46 @@ +'use strict'; // Import + +var typeChecker = require('typechecker'); + +var eachr = require('eachr'); // Define + + +module.exports = function (opts, next) { + var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // Empty, set default + if (config.completionCallbackNames == null) { + config.completionCallbackNames = ['next']; + } // Not array, make array + else if (typeChecker.isArray(config.completionCallbackNames) === false) { + config.completionCallbackNames = [config.completionCallbackNames]; + } // Arguments + + + if (typeChecker.isFunction(opts) && next == null) { + next = opts; + opts = {}; + } else if (!opts) { + opts = {}; + } // Completion callback + + + if (!next) { + // Cycle the completionCallbackNames to check if the completion callback name exists in opts + // if it does, then use it as the next and delete it's value + eachr(config.completionCallbackNames, function (completionCallbackName) { + if (typeof opts[completionCallbackName] !== 'undefined') { + next = opts[completionCallbackName]; + delete opts[completionCallbackName]; + return false; // break + // ^ why this only does the first, and not all, using the last, I don't know ... + // can be changed in a future major update + } + }); + } // Ensure + + + if (!next) next = null; // Return + + return [opts, next]; +}; \ No newline at end of file diff --git a/node_modules/extract-opts/index.js b/node_modules/extract-opts/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/extract-opts/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/extract-opts/package.json b/node_modules/extract-opts/package.json new file mode 100644 index 000000000..7c68f6ccf --- /dev/null +++ b/node_modules/extract-opts/package.json @@ -0,0 +1,203 @@ +{ + "title": "Extract Options & Callback", + "name": "extract-opts", + "version": "3.4.0", + "description": "Extract the options and callback from a function's arguments easily", + "homepage": "https://github.com/bevry/extract-opts", + "license": "MIT", + "keywords": [ + "opts", + "options", + "cb", + "callback", + "next", + "flow", + "args", + "optional", + "arguments", + "extract" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": "https://bevry.me/fund", + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011+ Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Sean Fridman (http://seanfridman.com)", + "Matt Bierner (http://mattbierner.com)" + ], + "bugs": { + "url": "https://github.com/bevry/extract-opts/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/extract-opts.git" + }, + "engines": { + "node": ">=0.10" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "esnext compiled for browsers with require for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "esnext compiled for node.js 0.10 with require for modules", + "directory": "edition-node-0.10", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "main": "index.js", + "browser": "edition-browsers/index.js", + "dependencies": { + "eachr": "^3.2.0", + "editions": "^2.2.0", + "typechecker": "^4.9.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "assert-helpers": "4.10.0", + "eachr": "^3.2.0", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.2.1", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-babel": "^5.3.0", + "eslint-plugin-prettier": "^3.1.1", + "kava": "^3.2.0", + "prettier": "^1.19.1", + "projectz": "^1.9.0", + "valid-directory": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.10", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.10": "env BABEL_ENV=edition-node-0.10 babel --out-dir ./edition-node-0.10 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:projectz", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": "defaults", + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + }, + "edition-node-0.10": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.10" + }, + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/extract-opts/source/index.js b/node_modules/extract-opts/source/index.js new file mode 100644 index 000000000..d75399ab1 --- /dev/null +++ b/node_modules/extract-opts/source/index.js @@ -0,0 +1,47 @@ +'use strict' + +// Import +const typeChecker = require('typechecker') +const eachr = require('eachr') + +// Define +module.exports = function(opts, next, config = {}) { + // Empty, set default + if (config.completionCallbackNames == null) { + config.completionCallbackNames = ['next'] + } + + // Not array, make array + else if (typeChecker.isArray(config.completionCallbackNames) === false) { + config.completionCallbackNames = [config.completionCallbackNames] + } + + // Arguments + if (typeChecker.isFunction(opts) && next == null) { + next = opts + opts = {} + } else if (!opts) { + opts = {} + } + + // Completion callback + if (!next) { + // Cycle the completionCallbackNames to check if the completion callback name exists in opts + // if it does, then use it as the next and delete it's value + eachr(config.completionCallbackNames, function(completionCallbackName) { + if (typeof opts[completionCallbackName] !== 'undefined') { + next = opts[completionCallbackName] + delete opts[completionCallbackName] + return false // break + // ^ why this only does the first, and not all, using the last, I don't know ... + // can be changed in a future major update + } + }) + } + + // Ensure + if (!next) next = null + + // Return + return [opts, next] +} diff --git a/node_modules/extsprintf/.gitmodules b/node_modules/extsprintf/.gitmodules new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/extsprintf/.npmignore b/node_modules/extsprintf/.npmignore new file mode 100644 index 000000000..6ed1ae975 --- /dev/null +++ b/node_modules/extsprintf/.npmignore @@ -0,0 +1,2 @@ +/deps +/examples diff --git a/node_modules/extsprintf/LICENSE b/node_modules/extsprintf/LICENSE new file mode 100644 index 000000000..cbc0bb3ba --- /dev/null +++ b/node_modules/extsprintf/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012, Joyent, Inc. All rights reserved. + +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 diff --git a/node_modules/extsprintf/Makefile b/node_modules/extsprintf/Makefile new file mode 100644 index 000000000..db845189a --- /dev/null +++ b/node_modules/extsprintf/Makefile @@ -0,0 +1,24 @@ +# +# Copyright (c) 2012, Joyent, Inc. All rights reserved. +# +# Makefile: top-level Makefile +# +# This Makefile contains only repo-specific logic and uses included makefiles +# to supply common targets (javascriptlint, jsstyle, restdown, etc.), which are +# used by other repos as well. +# + +# +# Files +# +JSL = jsl +JSSTYLE = jsstyle +JS_FILES := $(shell find examples lib -name '*.js') +JSL_FILES_NODE = $(JS_FILES) +JSSTYLE_FILES = $(JS_FILES) +JSL_CONF_NODE = jsl.node.conf + +# Default target is "check" +check: + +include ./Makefile.targ diff --git a/node_modules/extsprintf/Makefile.targ b/node_modules/extsprintf/Makefile.targ new file mode 100644 index 000000000..2a64fe7e9 --- /dev/null +++ b/node_modules/extsprintf/Makefile.targ @@ -0,0 +1,285 @@ +# -*- mode: makefile -*- +# +# Copyright (c) 2012, Joyent, Inc. All rights reserved. +# +# Makefile.targ: common targets. +# +# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped +# into other repos as-is without requiring any modifications. If you find +# yourself changing this file, you should instead update the original copy in +# eng.git and then update your repo to use the new version. +# +# This Makefile defines several useful targets and rules. You can use it by +# including it from a Makefile that specifies some of the variables below. +# +# Targets defined in this Makefile: +# +# check Checks JavaScript files for lint and style +# Checks bash scripts for syntax +# Checks SMF manifests for validity against the SMF DTD +# +# clean Removes built files +# +# docs Builds restdown documentation in docs/ +# +# prepush Depends on "check" and "test" +# +# test Does nothing (you should override this) +# +# xref Generates cscope (source cross-reference index) +# +# For details on what these targets are supposed to do, see the Joyent +# Engineering Guide. +# +# To make use of these targets, you'll need to set some of these variables. Any +# variables left unset will simply not be used. +# +# BASH_FILES Bash scripts to check for syntax +# (paths relative to top-level Makefile) +# +# CLEAN_FILES Files to remove as part of the "clean" target. Note +# that files generated by targets in this Makefile are +# automatically included in CLEAN_FILES. These include +# restdown-generated HTML and JSON files. +# +# DOC_FILES Restdown (documentation source) files. These are +# assumed to be contained in "docs/", and must NOT +# contain the "docs/" prefix. +# +# JSL_CONF_NODE Specify JavaScriptLint configuration files +# JSL_CONF_WEB (paths relative to top-level Makefile) +# +# Node.js and Web configuration files are separate +# because you'll usually want different global variable +# configurations. If no file is specified, none is given +# to jsl, which causes it to use a default configuration, +# which probably isn't what you want. +# +# JSL_FILES_NODE JavaScript files to check with Node config file. +# JSL_FILES_WEB JavaScript files to check with Web config file. +# +# You can also override these variables: +# +# BASH Path to bash (default: bash) +# +# CSCOPE_DIRS Directories to search for source files for the cscope +# index. (default: ".") +# +# JSL Path to JavaScriptLint (default: "jsl") +# +# JSL_FLAGS_NODE Additional flags to pass through to JSL +# JSL_FLAGS_WEB +# JSL_FLAGS +# +# JSSTYLE Path to jsstyle (default: jsstyle) +# +# JSSTYLE_FLAGS Additional flags to pass through to jsstyle +# + +# +# Defaults for the various tools we use. +# +BASH ?= bash +BASHSTYLE ?= tools/bashstyle +CP ?= cp +CSCOPE ?= cscope +CSCOPE_DIRS ?= . +JSL ?= jsl +JSSTYLE ?= jsstyle +MKDIR ?= mkdir -p +MV ?= mv +RESTDOWN_FLAGS ?= +RMTREE ?= rm -rf +JSL_FLAGS ?= --nologo --nosummary + +ifeq ($(shell uname -s),SunOS) + TAR ?= gtar +else + TAR ?= tar +endif + + +# +# Defaults for other fixed values. +# +BUILD = build +DISTCLEAN_FILES += $(BUILD) +DOC_BUILD = $(BUILD)/docs/public + +# +# Configure JSL_FLAGS_{NODE,WEB} based on JSL_CONF_{NODE,WEB}. +# +ifneq ($(origin JSL_CONF_NODE), undefined) + JSL_FLAGS_NODE += --conf=$(JSL_CONF_NODE) +endif + +ifneq ($(origin JSL_CONF_WEB), undefined) + JSL_FLAGS_WEB += --conf=$(JSL_CONF_WEB) +endif + +# +# Targets. For descriptions on what these are supposed to do, see the +# Joyent Engineering Guide. +# + +# +# Instruct make to keep around temporary files. We have rules below that +# automatically update git submodules as needed, but they employ a deps/*/.git +# temporary file. Without this directive, make tries to remove these .git +# directories after the build has completed. +# +.SECONDARY: $($(wildcard deps/*):%=%/.git) + +# +# This rule enables other rules that use files from a git submodule to have +# those files depend on deps/module/.git and have "make" automatically check +# out the submodule as needed. +# +deps/%/.git: + git submodule update --init deps/$* + +# +# These recipes make heavy use of dynamically-created phony targets. The parent +# Makefile defines a list of input files like BASH_FILES. We then say that each +# of these files depends on a fake target called filename.bashchk, and then we +# define a pattern rule for those targets that runs bash in check-syntax-only +# mode. This mechanism has the nice properties that if you specify zero files, +# the rule becomes a noop (unlike a single rule to check all bash files, which +# would invoke bash with zero files), and you can check individual files from +# the command line with "make filename.bashchk". +# +.PHONY: check-bash +check-bash: $(BASH_FILES:%=%.bashchk) $(BASH_FILES:%=%.bashstyle) + +%.bashchk: % + $(BASH) -n $^ + +%.bashstyle: % + $(BASHSTYLE) $^ + +.PHONY: check-jsl check-jsl-node check-jsl-web +check-jsl: check-jsl-node check-jsl-web + +check-jsl-node: $(JSL_FILES_NODE:%=%.jslnodechk) + +check-jsl-web: $(JSL_FILES_WEB:%=%.jslwebchk) + +%.jslnodechk: % $(JSL_EXEC) + $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_NODE) $< + +%.jslwebchk: % $(JSL_EXEC) + $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_WEB) $< + +.PHONY: check-jsstyle +check-jsstyle: $(JSSTYLE_FILES:%=%.jsstylechk) + +%.jsstylechk: % $(JSSTYLE_EXEC) + $(JSSTYLE) $(JSSTYLE_FLAGS) $< + +.PHONY: check +check: check-jsl check-jsstyle check-bash + @echo check ok + +.PHONY: clean +clean:: + -$(RMTREE) $(CLEAN_FILES) + +.PHONY: distclean +distclean:: clean + -$(RMTREE) $(DISTCLEAN_FILES) + +CSCOPE_FILES = cscope.in.out cscope.out cscope.po.out +CLEAN_FILES += $(CSCOPE_FILES) + +.PHONY: xref +xref: cscope.files + $(CSCOPE) -bqR + +.PHONY: cscope.files +cscope.files: + find $(CSCOPE_DIRS) -name '*.c' -o -name '*.h' -o -name '*.cc' \ + -o -name '*.js' -o -name '*.s' -o -name '*.cpp' > $@ + +# +# The "docs" target is complicated because we do several things here: +# +# (1) Use restdown to build HTML and JSON files from each of DOC_FILES. +# +# (2) Copy these files into $(DOC_BUILD) (build/docs/public), which +# functions as a complete copy of the documentation that could be +# mirrored or served over HTTP. +# +# (3) Then copy any directories and media from docs/media into +# $(DOC_BUILD)/media. This allows projects to include their own media, +# including files that will override same-named files provided by +# restdown. +# +# Step (3) is the surprisingly complex part: in order to do this, we need to +# identify the subdirectories in docs/media, recreate them in +# $(DOC_BUILD)/media, then do the same with the files. +# +DOC_MEDIA_DIRS := $(shell find docs/media -type d 2>/dev/null | grep -v "^docs/media$$") +DOC_MEDIA_DIRS := $(DOC_MEDIA_DIRS:docs/media/%=%) +DOC_MEDIA_DIRS_BUILD := $(DOC_MEDIA_DIRS:%=$(DOC_BUILD)/media/%) + +DOC_MEDIA_FILES := $(shell find docs/media -type f 2>/dev/null) +DOC_MEDIA_FILES := $(DOC_MEDIA_FILES:docs/media/%=%) +DOC_MEDIA_FILES_BUILD := $(DOC_MEDIA_FILES:%=$(DOC_BUILD)/media/%) + +# +# Like the other targets, "docs" just depends on the final files we want to +# create in $(DOC_BUILD), leveraging other targets and recipes to define how +# to get there. +# +.PHONY: docs +docs: \ + $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.html) \ + $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.json) \ + $(DOC_MEDIA_FILES_BUILD) + +# +# We keep the intermediate files so that the next build can see whether the +# files in DOC_BUILD are up to date. +# +.PRECIOUS: \ + $(DOC_FILES:%.restdown=docs/%.html) \ + $(DOC_FILES:%.restdown=docs/%json) + +# +# We do clean those intermediate files, as well as all of DOC_BUILD. +# +CLEAN_FILES += \ + $(DOC_BUILD) \ + $(DOC_FILES:%.restdown=docs/%.html) \ + $(DOC_FILES:%.restdown=docs/%.json) + +# +# Before installing the files, we must make sure the directories exist. The | +# syntax tells make that the dependency need only exist, not be up to date. +# Otherwise, it might try to rebuild spuriously because the directory itself +# appears out of date. +# +$(DOC_MEDIA_FILES_BUILD): | $(DOC_MEDIA_DIRS_BUILD) + +$(DOC_BUILD)/%: docs/% | $(DOC_BUILD) + $(CP) $< $@ + +docs/%.json docs/%.html: docs/%.restdown | $(DOC_BUILD) $(RESTDOWN_EXEC) + $(RESTDOWN) $(RESTDOWN_FLAGS) -m $(DOC_BUILD) $< + +$(DOC_BUILD): + $(MKDIR) $@ + +$(DOC_MEDIA_DIRS_BUILD): + $(MKDIR) $@ + +# +# The default "test" target does nothing. This should usually be overridden by +# the parent Makefile. It's included here so we can define "prepush" without +# requiring the repo to define "test". +# +.PHONY: test +test: + +.PHONY: prepush +prepush: check test diff --git a/node_modules/extsprintf/README.md b/node_modules/extsprintf/README.md new file mode 100644 index 000000000..b22998d63 --- /dev/null +++ b/node_modules/extsprintf/README.md @@ -0,0 +1,46 @@ +# extsprintf: extended POSIX-style sprintf + +Stripped down version of s[n]printf(3c). We make a best effort to throw an +exception when given a format string we don't understand, rather than ignoring +it, so that we won't break existing programs if/when we go implement the rest +of this. + +This implementation currently supports specifying + +* field alignment ('-' flag), +* zero-pad ('0' flag) +* always show numeric sign ('+' flag), +* field width +* conversions for strings, decimal integers, and floats (numbers). +* argument size specifiers. These are all accepted but ignored, since + Javascript has no notion of the physical size of an argument. + +Everything else is currently unsupported, most notably: precision, unsigned +numbers, non-decimal numbers, and characters. + +Besides the usual POSIX conversions, this implementation supports: + +* `%j`: pretty-print a JSON object (using node's "inspect") +* `%r`: pretty-print an Error object + +# Example + +First, install it: + + # npm install extsprintf + +Now, use it: + + var mod_extsprintf = require('extsprintf'); + console.log(mod_extsprintf.sprintf('hello %25s', 'world')); + +outputs: + + hello world + +# Also supported + +**printf**: same args as sprintf, but prints the result to stdout + +**fprintf**: same args as sprintf, preceded by a Node stream. Prints the result +to the given stream. diff --git a/node_modules/extsprintf/jsl.node.conf b/node_modules/extsprintf/jsl.node.conf new file mode 100644 index 000000000..03f787ffb --- /dev/null +++ b/node_modules/extsprintf/jsl.node.conf @@ -0,0 +1,137 @@ +# +# Configuration File for JavaScript Lint +# +# This configuration file can be used to lint a collection of scripts, or to enable +# or disable warnings for scripts that are linted via the command line. +# + +### Warnings +# Enable or disable warnings based on requirements. +# Use "+WarningName" to display or "-WarningName" to suppress. +# ++ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent ++ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity ++ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement ++anon_no_return_value # anonymous function does not always return value ++assign_to_function_call # assignment to a function call +-block_without_braces # block statement without curly braces ++comma_separated_stmts # multiple statements separated by commas (use semicolons?) ++comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) ++default_not_at_end # the default case is not at the end of the switch statement ++dup_option_explicit # duplicate "option explicit" control comment ++duplicate_case_in_switch # duplicate case in switch statement ++duplicate_formal # duplicate formal argument {name} ++empty_statement # empty statement or extra semicolon ++identifier_hides_another # identifer {name} hides an identifier in a parent scope +-inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement ++incorrect_version # Expected /*jsl:content-type*/ control comment. The script was parsed with the wrong version. ++invalid_fallthru # unexpected "fallthru" control comment ++invalid_pass # unexpected "pass" control comment ++jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax ++leading_decimal_point # leading decimal point may indicate a number or an object member ++legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax ++meaningless_block # meaningless block; curly braces have no impact ++mismatch_ctrl_comments # mismatched control comment; "ignore" and "end" control comments must have a one-to-one correspondence ++misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma ++missing_break # missing break statement ++missing_break_for_last_case # missing break statement for last case in switch ++missing_default_case # missing default case in switch statement ++missing_option_explicit # the "option explicit" control comment is missing ++missing_semicolon # missing semicolon ++missing_semicolon_for_lambda # missing semicolon for lambda assignment ++multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs ++nested_comment # nested comment ++no_return_value # function {name} does not always return a value ++octal_number # leading zeros make an octal number ++parseint_missing_radix # parseInt missing radix parameter ++partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag ++redeclared_var # redeclaration of {name} ++trailing_comma_in_array # extra comma is not recommended in array initializers ++trailing_decimal_point # trailing decimal point may indicate a number or an object member ++undeclared_identifier # undeclared identifier: {name} ++unreachable_code # unreachable code +-unreferenced_argument # argument declared but never referenced: {name} +-unreferenced_function # function is declared but never referenced: {name} ++unreferenced_variable # variable is declared but never referenced: {name} ++unsupported_version # JavaScript {version} is not supported ++use_of_label # use of label ++useless_assign # useless assignment ++useless_comparison # useless comparison; comparing identical expressions +-useless_quotes # the quotation marks are unnecessary ++useless_void # use of the void type may be unnecessary (void is always undefined) ++var_hides_arg # variable {name} hides argument ++want_assign_or_call # expected an assignment or function call ++with_statement # with statement hides undeclared variables; use temporary variable instead + + +### Output format +# Customize the format of the error message. +# __FILE__ indicates current file path +# __FILENAME__ indicates current file name +# __LINE__ indicates current line +# __COL__ indicates current column +# __ERROR__ indicates error message (__ERROR_PREFIX__: __ERROR_MSG__) +# __ERROR_NAME__ indicates error name (used in configuration file) +# __ERROR_PREFIX__ indicates error prefix +# __ERROR_MSG__ indicates error message +# +# For machine-friendly output, the output format can be prefixed with +# "encode:". If specified, all items will be encoded with C-slashes. +# +# Visual Studio syntax (default): ++output-format __FILE__(__LINE__): __ERROR__ +# Alternative syntax: +#+output-format __FILE__:__LINE__: __ERROR__ + + +### Context +# Show the in-line position of the error. +# Use "+context" to display or "-context" to suppress. +# ++context + + +### Control Comments +# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for +# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is +# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, +# although legacy control comments are enabled by default for backward compatibility. +# +-legacy_control_comments + + +### Defining identifiers +# By default, "option explicit" is enabled on a per-file basis. +# To enable this for all files, use "+always_use_option_explicit" +-always_use_option_explicit + +# Define certain identifiers of which the lint is not aware. +# (Use this in conjunction with the "undeclared identifier" warning.) +# +# Common uses for webpages might be: ++define __dirname ++define clearInterval ++define clearTimeout ++define console ++define exports ++define global ++define process ++define require ++define setInterval ++define setTimeout ++define Buffer ++define JSON ++define Math + +### JavaScript Version +# To change the default JavaScript version: +#+default-type text/javascript;version=1.5 +#+default-type text/javascript;e4x=1 + +### Files +# Specify which files to lint +# Use "+recurse" to enable recursion (disabled by default). +# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", +# or "+process Folder\Path\*.htm". +# + diff --git a/node_modules/extsprintf/lib/extsprintf.js b/node_modules/extsprintf/lib/extsprintf.js new file mode 100644 index 000000000..ed883d32b --- /dev/null +++ b/node_modules/extsprintf/lib/extsprintf.js @@ -0,0 +1,183 @@ +/* + * extsprintf.js: extended POSIX-style sprintf + */ + +var mod_assert = require('assert'); +var mod_util = require('util'); + +/* + * Public interface + */ +exports.sprintf = jsSprintf; +exports.printf = jsPrintf; +exports.fprintf = jsFprintf; + +/* + * Stripped down version of s[n]printf(3c). We make a best effort to throw an + * exception when given a format string we don't understand, rather than + * ignoring it, so that we won't break existing programs if/when we go implement + * the rest of this. + * + * This implementation currently supports specifying + * - field alignment ('-' flag), + * - zero-pad ('0' flag) + * - always show numeric sign ('+' flag), + * - field width + * - conversions for strings, decimal integers, and floats (numbers). + * - argument size specifiers. These are all accepted but ignored, since + * Javascript has no notion of the physical size of an argument. + * + * Everything else is currently unsupported, most notably precision, unsigned + * numbers, non-decimal numbers, and characters. + */ +function jsSprintf(fmt) +{ + var regex = [ + '([^%]*)', /* normal text */ + '%', /* start of format */ + '([\'\\-+ #0]*?)', /* flags (optional) */ + '([1-9]\\d*)?', /* width (optional) */ + '(\\.([1-9]\\d*))?', /* precision (optional) */ + '[lhjztL]*?', /* length mods (ignored) */ + '([diouxXfFeEgGaAcCsSp%jr])' /* conversion */ + ].join(''); + + var re = new RegExp(regex); + var args = Array.prototype.slice.call(arguments, 1); + var flags, width, precision, conversion; + var left, pad, sign, arg, match; + var ret = ''; + var argn = 1; + + mod_assert.equal('string', typeof (fmt)); + + while ((match = re.exec(fmt)) !== null) { + ret += match[1]; + fmt = fmt.substring(match[0].length); + + flags = match[2] || ''; + width = match[3] || 0; + precision = match[4] || ''; + conversion = match[6]; + left = false; + sign = false; + pad = ' '; + + if (conversion == '%') { + ret += '%'; + continue; + } + + if (args.length === 0) + throw (new Error('too few args to sprintf')); + + arg = args.shift(); + argn++; + + if (flags.match(/[\' #]/)) + throw (new Error( + 'unsupported flags: ' + flags)); + + if (precision.length > 0) + throw (new Error( + 'non-zero precision not supported')); + + if (flags.match(/-/)) + left = true; + + if (flags.match(/0/)) + pad = '0'; + + if (flags.match(/\+/)) + sign = true; + + switch (conversion) { + case 's': + if (arg === undefined || arg === null) + throw (new Error('argument ' + argn + + ': attempted to print undefined or null ' + + 'as a string')); + ret += doPad(pad, width, left, arg.toString()); + break; + + case 'd': + arg = Math.floor(arg); + /*jsl:fallthru*/ + case 'f': + sign = sign && arg > 0 ? '+' : ''; + ret += sign + doPad(pad, width, left, + arg.toString()); + break; + + case 'x': + ret += doPad(pad, width, left, arg.toString(16)); + break; + + case 'j': /* non-standard */ + if (width === 0) + width = 10; + ret += mod_util.inspect(arg, false, width); + break; + + case 'r': /* non-standard */ + ret += dumpException(arg); + break; + + default: + throw (new Error('unsupported conversion: ' + + conversion)); + } + } + + ret += fmt; + return (ret); +} + +function jsPrintf() { + var args = Array.prototype.slice.call(arguments); + args.unshift(process.stdout); + jsFprintf.apply(null, args); +} + +function jsFprintf(stream) { + var args = Array.prototype.slice.call(arguments, 1); + return (stream.write(jsSprintf.apply(this, args))); +} + +function doPad(chr, width, left, str) +{ + var ret = str; + + while (ret.length < width) { + if (left) + ret += chr; + else + ret = chr + ret; + } + + return (ret); +} + +/* + * This function dumps long stack traces for exceptions having a cause() method. + * See node-verror for an example. + */ +function dumpException(ex) +{ + var ret; + + if (!(ex instanceof Error)) + throw (new Error(jsSprintf('invalid type for %%r: %j', ex))); + + /* Note that V8 prepends "ex.stack" with ex.toString(). */ + ret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack; + + if (ex.cause && typeof (ex.cause) === 'function') { + var cex = ex.cause(); + if (cex) { + ret += '\nCaused by: ' + dumpException(cex); + } + } + + return (ret); +} diff --git a/node_modules/extsprintf/package.json b/node_modules/extsprintf/package.json new file mode 100644 index 000000000..b788895cd --- /dev/null +++ b/node_modules/extsprintf/package.json @@ -0,0 +1,14 @@ +{ + "name": "extsprintf", + "version": "1.3.0", + "description": "extended POSIX-style sprintf", + "main": "./lib/extsprintf.js", + "repository": { + "type": "git", + "url": "git://github.com/davepacheco/node-extsprintf.git" + }, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" +} diff --git a/node_modules/forever-agent/LICENSE b/node_modules/forever-agent/LICENSE new file mode 100644 index 000000000..a4a9aee0c --- /dev/null +++ b/node_modules/forever-agent/LICENSE @@ -0,0 +1,55 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/forever-agent/README.md b/node_modules/forever-agent/README.md new file mode 100644 index 000000000..9d5b66343 --- /dev/null +++ b/node_modules/forever-agent/README.md @@ -0,0 +1,4 @@ +forever-agent +============= + +HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module. diff --git a/node_modules/forever-agent/index.js b/node_modules/forever-agent/index.js new file mode 100644 index 000000000..416c7abd7 --- /dev/null +++ b/node_modules/forever-agent/index.js @@ -0,0 +1,138 @@ +module.exports = ForeverAgent +ForeverAgent.SSL = ForeverAgentSSL + +var util = require('util') + , Agent = require('http').Agent + , net = require('net') + , tls = require('tls') + , AgentSSL = require('https').Agent + +function getConnectionName(host, port) { + var name = '' + if (typeof host === 'string') { + name = host + ':' + port + } else { + // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name. + name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':') + } + return name +} + +function ForeverAgent(options) { + var self = this + self.options = options || {} + self.requests = {} + self.sockets = {} + self.freeSockets = {} + self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets + self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets + self.on('free', function(socket, host, port) { + var name = getConnectionName(host, port) + + if (self.requests[name] && self.requests[name].length) { + self.requests[name].shift().onSocket(socket) + } else if (self.sockets[name].length < self.minSockets) { + if (!self.freeSockets[name]) self.freeSockets[name] = [] + self.freeSockets[name].push(socket) + + // if an error happens while we don't use the socket anyway, meh, throw the socket away + var onIdleError = function() { + socket.destroy() + } + socket._onIdleError = onIdleError + socket.on('error', onIdleError) + } else { + // If there are no pending requests just destroy the + // socket and it will get removed from the pool. This + // gets us out of timeout issues and allows us to + // default to Connection:keep-alive. + socket.destroy() + } + }) + +} +util.inherits(ForeverAgent, Agent) + +ForeverAgent.defaultMinSockets = 5 + + +ForeverAgent.prototype.createConnection = net.createConnection +ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest +ForeverAgent.prototype.addRequest = function(req, host, port) { + var name = getConnectionName(host, port) + + if (typeof host !== 'string') { + var options = host + port = options.port + host = options.host + } + + if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { + var idleSocket = this.freeSockets[name].pop() + idleSocket.removeListener('error', idleSocket._onIdleError) + delete idleSocket._onIdleError + req._reusedSocket = true + req.onSocket(idleSocket) + } else { + this.addRequestNoreuse(req, host, port) + } +} + +ForeverAgent.prototype.removeSocket = function(s, name, host, port) { + if (this.sockets[name]) { + var index = this.sockets[name].indexOf(s) + if (index !== -1) { + this.sockets[name].splice(index, 1) + } + } else if (this.sockets[name] && this.sockets[name].length === 0) { + // don't leak + delete this.sockets[name] + delete this.requests[name] + } + + if (this.freeSockets[name]) { + var index = this.freeSockets[name].indexOf(s) + if (index !== -1) { + this.freeSockets[name].splice(index, 1) + if (this.freeSockets[name].length === 0) { + delete this.freeSockets[name] + } + } + } + + if (this.requests[name] && this.requests[name].length) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createSocket(name, host, port).emit('free') + } +} + +function ForeverAgentSSL (options) { + ForeverAgent.call(this, options) +} +util.inherits(ForeverAgentSSL, ForeverAgent) + +ForeverAgentSSL.prototype.createConnection = createConnectionSSL +ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest + +function createConnectionSSL (port, host, options) { + if (typeof port === 'object') { + options = port; + } else if (typeof host === 'object') { + options = host; + } else if (typeof options === 'object') { + options = options; + } else { + options = {}; + } + + if (typeof port === 'number') { + options.port = port; + } + + if (typeof host === 'string') { + options.host = host; + } + + return tls.connect(options); +} diff --git a/node_modules/forever-agent/package.json b/node_modules/forever-agent/package.json new file mode 100644 index 000000000..f76062980 --- /dev/null +++ b/node_modules/forever-agent/package.json @@ -0,0 +1,17 @@ +{ + "author": "Mikeal Rogers (http://www.futurealoof.com)", + "name": "forever-agent", + "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", + "version": "0.6.1", + "license": "Apache-2.0", + "repository": { + "url": "https://github.com/mikeal/forever-agent" + }, + "main": "index.js", + "dependencies": {}, + "devDependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + } +} diff --git a/node_modules/form-data/License b/node_modules/form-data/License new file mode 100644 index 000000000..c7ff12a2f --- /dev/null +++ b/node_modules/form-data/License @@ -0,0 +1,19 @@ +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + + 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. diff --git a/node_modules/form-data/README.md b/node_modules/form-data/README.md new file mode 100644 index 000000000..78ef315ff --- /dev/null +++ b/node_modules/form-data/README.md @@ -0,0 +1,217 @@ +# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) + +A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. + +The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface + +[![Linux Build](https://img.shields.io/travis/form-data/form-data/v2.1.4.svg?label=linux:0.12-6.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v2.1.4.svg?label=macos:0.12-6.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/form-data/v2.1.4.svg?label=windows:0.12-6.x)](https://ci.appveyor.com/project/alexindigo/form-data) + +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v2.1.4.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) +[![bitHound Overall Score](https://www.bithound.io/github/form-data/form-data/badges/score.svg)](https://www.bithound.io/github/form-data/form-data) + +## Install + +``` +npm install --save form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +var FormData = require('form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +Also you can use http-response stream: + +``` javascript +var FormData = require('form-data'); +var http = require('http'); + +var form = new FormData(); + +http.request('http://nodejs.org/images/logo.png', function(response) { + form.append('my_field', 'my value'); + form.append('my_buffer', new Buffer(10)); + form.append('my_logo', response); +}); +``` + +Or @mikeal's [request](https://github.com/request/request) stream: + +``` javascript +var FormData = require('form-data'); +var request = require('request'); + +var form = new FormData(); + +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_logo', request('http://nodejs.org/images/logo.png')); +``` + +In order to submit this form to a web application, call ```submit(url, [callback])``` method: + +``` javascript +form.submit('http://example.org/', function(err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +}); + +``` + +For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. + +### Alternative submission methods + +You can use node's http client interface: + +``` javascript +var http = require('http'); + +var request = http.request({ + method: 'post', + host: 'example.org', + path: '/upload', + headers: form.getHeaders() +}); + +form.pipe(request); + +request.on('response', function(res) { + console.log(res.statusCode); +}); +``` + +Or if you would prefer the `'Content-Length'` header to be set for you: + +``` javascript +form.submit('example.org/upload', function(err, res) { + console.log(res.statusCode); +}); +``` + +To use custom headers and pre-known length in parts: + +``` javascript +var CRLF = '\r\n'; +var form = new FormData(); + +var options = { + header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, + knownLength: 1 +}; + +form.append('my_buffer', buffer, options); + +form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); +}); +``` + +Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: + +``` javascript +someModule.stream(function(err, stdout, stderr) { + if (err) throw err; + + var form = new FormData(); + + form.append('file', stdout, { + filename: 'unicycle.jpg', + contentType: 'image/jpg', + knownLength: 19806 + }); + + form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); + }); +}); +``` + +For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: + +``` javascript +form.submit({ + host: 'example.com', + path: '/probably.php?extra=params', + auth: 'username:password' +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: + +``` javascript +form.submit({ + host: 'example.com', + path: '/surelynot.php', + headers: {'x-test-header': 'test-header-value'} +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +### Integration with other libraries + +#### Request + +Form submission using [request](https://github.com/request/request): + +```javascript +var formData = { + my_field: 'my_value', + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), +}; + +request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). + +#### node-fetch + +You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function(res) { + return res.json(); + }).then(function(json) { + console.log(json); + }); +``` + +## Notes + +- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- Starting version `2.x` FormData has dropped support for `node@0.10.x`. + +## License + +Form-Data is released under the [MIT](License) license. diff --git a/node_modules/form-data/lib/browser.js b/node_modules/form-data/lib/browser.js new file mode 100644 index 000000000..09e7c70e6 --- /dev/null +++ b/node_modules/form-data/lib/browser.js @@ -0,0 +1,2 @@ +/* eslint-env browser */ +module.exports = typeof self == 'object' ? self.FormData : window.FormData; diff --git a/node_modules/form-data/lib/form_data.js b/node_modules/form-data/lib/form_data.js new file mode 100644 index 000000000..79aa0f9f5 --- /dev/null +++ b/node_modules/form-data/lib/form_data.js @@ -0,0 +1,444 @@ +var CombinedStream = require('combined-stream'); +var util = require('util'); +var path = require('path'); +var http = require('http'); +var https = require('https'); +var parseUrl = require('url').parse; +var fs = require('fs'); +var mime = require('mime-types'); +var asynckit = require('asynckit'); +var populate = require('./populate.js'); + +// Public API +module.exports = FormData; + +// make it a Stream +util.inherits(FormData, CombinedStream); + +/** + * Create readable "multipart/form-data" streams. + * Can be used to submit forms + * and file uploads to other web applications. + * + * @constructor + */ +function FormData() { + if (!(this instanceof FormData)) { + return new FormData(); + } + + this._overheadLength = 0; + this._valueLength = 0; + this._valuesToMeasure = []; + + CombinedStream.call(this); +} + +FormData.LINE_BREAK = '\r\n'; +FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; + +FormData.prototype.append = function(field, value, options) { + + options = options || {}; + + // allow filename as single option + if (typeof options == 'string') { + options = {filename: options}; + } + + var append = CombinedStream.prototype.append.bind(this); + + // all that streamy business can't handle numbers + if (typeof value == 'number') { + value = '' + value; + } + + // https://github.com/felixge/node-form-data/issues/38 + if (util.isArray(value)) { + // Please convert your array into string + // the way web server expects it + this._error(new Error('Arrays are not supported.')); + return; + } + + var header = this._multiPartHeader(field, value, options); + var footer = this._multiPartFooter(); + + append(header); + append(value); + append(footer); + + // pass along options.knownLength + this._trackLength(header, value, options); +}; + +FormData.prototype._trackLength = function(header, value, options) { + var valueLength = 0; + + // used w/ getLengthSync(), when length is known. + // e.g. for streaming directly from a remote server, + // w/ a known file a size, and not wanting to wait for + // incoming file to finish to get its size. + if (options.knownLength != null) { + valueLength += +options.knownLength; + } else if (Buffer.isBuffer(value)) { + valueLength = value.length; + } else if (typeof value === 'string') { + valueLength = Buffer.byteLength(value); + } + + this._valueLength += valueLength; + + // @check why add CRLF? does this account for custom/multiple CRLFs? + this._overheadLength += + Buffer.byteLength(header) + + FormData.LINE_BREAK.length; + + // empty or either doesn't have path or not an http response + if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { + return; + } + + // no need to bother with the length + if (!options.knownLength) { + this._valuesToMeasure.push(value); + } +}; + +FormData.prototype._lengthRetriever = function(value, callback) { + + if (value.hasOwnProperty('fd')) { + + // take read range into a account + // `end` = Infinity –> read file till the end + // + // TODO: Looks like there is bug in Node fs.createReadStream + // it doesn't respect `end` options without `start` options + // Fix it when node fixes it. + // https://github.com/joyent/node/issues/7819 + if (value.end != undefined && value.end != Infinity && value.start != undefined) { + + // when end specified + // no need to calculate range + // inclusive, starts with 0 + callback(null, value.end + 1 - (value.start ? value.start : 0)); + + // not that fast snoopy + } else { + // still need to fetch file size from fs + fs.stat(value.path, function(err, stat) { + + var fileSize; + + if (err) { + callback(err); + return; + } + + // update final size based on the range options + fileSize = stat.size - (value.start ? value.start : 0); + callback(null, fileSize); + }); + } + + // or http response + } else if (value.hasOwnProperty('httpVersion')) { + callback(null, +value.headers['content-length']); + + // or request stream http://github.com/mikeal/request + } else if (value.hasOwnProperty('httpModule')) { + // wait till response come back + value.on('response', function(response) { + value.pause(); + callback(null, +response.headers['content-length']); + }); + value.resume(); + + // something else + } else { + callback('Unknown stream'); + } +}; + +FormData.prototype._multiPartHeader = function(field, value, options) { + // custom header specified (as string)? + // it becomes responsible for boundary + // (e.g. to handle extra CRLFs on .NET servers) + if (typeof options.header == 'string') { + return options.header; + } + + var contentDisposition = this._getContentDisposition(value, options); + var contentType = this._getContentType(value, options); + + var contents = ''; + var headers = { + // add custom disposition as third element or keep it two elements if not + 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), + // if no content type. allow it to be empty array + 'Content-Type': [].concat(contentType || []) + }; + + // allow custom headers. + if (typeof options.header == 'object') { + populate(headers, options.header); + } + + var header; + for (var prop in headers) { + header = headers[prop]; + + // skip nullish headers. + if (header == null) { + continue; + } + + // convert all headers to arrays. + if (!Array.isArray(header)) { + header = [header]; + } + + // add non-empty headers. + if (header.length) { + contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; + } + } + + return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; +}; + +FormData.prototype._getContentDisposition = function(value, options) { + + var contentDisposition; + + // custom filename takes precedence + // fs- and request- streams have path property + // formidable and the browser add a name property. + var filename = options.filename || value.name || value.path; + + // or try http response + if (!filename && value.readable && value.hasOwnProperty('httpVersion')) { + filename = value.client._httpMessage.path; + } + + if (filename) { + contentDisposition = 'filename="' + path.basename(filename) + '"'; + } + + return contentDisposition; +}; + +FormData.prototype._getContentType = function(value, options) { + + // use custom content-type above all + var contentType = options.contentType; + + // or try `name` from formidable, browser + if (!contentType && value.name) { + contentType = mime.lookup(value.name); + } + + // or try `path` from fs-, request- streams + if (!contentType && value.path) { + contentType = mime.lookup(value.path); + } + + // or if it's http-reponse + if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { + contentType = value.headers['content-type']; + } + + // or guess it from the filename + if (!contentType && options.filename) { + contentType = mime.lookup(options.filename); + } + + // fallback to the default content type if `value` is not simple value + if (!contentType && typeof value == 'object') { + contentType = FormData.DEFAULT_CONTENT_TYPE; + } + + return contentType; +}; + +FormData.prototype._multiPartFooter = function() { + return function(next) { + var footer = FormData.LINE_BREAK; + + var lastPart = (this._streams.length === 0); + if (lastPart) { + footer += this._lastBoundary(); + } + + next(footer); + }.bind(this); +}; + +FormData.prototype._lastBoundary = function() { + return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; +}; + +FormData.prototype.getHeaders = function(userHeaders) { + var header; + var formHeaders = { + 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + }; + + for (header in userHeaders) { + if (userHeaders.hasOwnProperty(header)) { + formHeaders[header.toLowerCase()] = userHeaders[header]; + } + } + + return formHeaders; +}; + +FormData.prototype.getBoundary = function() { + if (!this._boundary) { + this._generateBoundary(); + } + + return this._boundary; +}; + +FormData.prototype._generateBoundary = function() { + // This generates a 50 character boundary similar to those used by Firefox. + // They are optimized for boyer-moore parsing. + var boundary = '--------------------------'; + for (var i = 0; i < 24; i++) { + boundary += Math.floor(Math.random() * 10).toString(16); + } + + this._boundary = boundary; +}; + +// Note: getLengthSync DOESN'T calculate streams length +// As workaround one can calculate file size manually +// and add it as knownLength option +FormData.prototype.getLengthSync = function() { + var knownLength = this._overheadLength + this._valueLength; + + // Don't get confused, there are 3 "internal" streams for each keyval pair + // so it basically checks if there is any value added to the form + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + // https://github.com/form-data/form-data/issues/40 + if (!this.hasKnownLength()) { + // Some async length retrievers are present + // therefore synchronous length calculation is false. + // Please use getLength(callback) to get proper length + this._error(new Error('Cannot calculate proper length in synchronous way.')); + } + + return knownLength; +}; + +// Public API to check if length of added values is known +// https://github.com/form-data/form-data/issues/196 +// https://github.com/form-data/form-data/issues/262 +FormData.prototype.hasKnownLength = function() { + var hasKnownLength = true; + + if (this._valuesToMeasure.length) { + hasKnownLength = false; + } + + return hasKnownLength; +}; + +FormData.prototype.getLength = function(cb) { + var knownLength = this._overheadLength + this._valueLength; + + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + if (!this._valuesToMeasure.length) { + process.nextTick(cb.bind(this, null, knownLength)); + return; + } + + asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { + if (err) { + cb(err); + return; + } + + values.forEach(function(length) { + knownLength += length; + }); + + cb(null, knownLength); + }); +}; + +FormData.prototype.submit = function(params, cb) { + var request + , options + , defaults = {method: 'post'} + ; + + // parse provided url if it's string + // or treat it as options object + if (typeof params == 'string') { + + params = parseUrl(params); + options = populate({ + port: params.port, + path: params.pathname, + host: params.hostname + }, defaults); + + // use custom params + } else { + + options = populate(params, defaults); + // if no port provided use default one + if (!options.port) { + options.port = options.protocol == 'https:' ? 443 : 80; + } + } + + // put that good code in getHeaders to some use + options.headers = this.getHeaders(params.headers); + + // https if specified, fallback to http in any other case + if (options.protocol == 'https:') { + request = https.request(options); + } else { + request = http.request(options); + } + + // get content length and fire away + this.getLength(function(err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + this.pipe(request); + if (cb) { + request.on('error', cb); + request.on('response', cb.bind(this, null)); + } + }.bind(this)); + + return request; +}; + +FormData.prototype._error = function(err) { + if (!this.error) { + this.error = err; + this.pause(); + this.emit('error', err); + } +}; + +FormData.prototype.toString = function () { + return '[object FormData]'; +}; diff --git a/node_modules/form-data/lib/populate.js b/node_modules/form-data/lib/populate.js new file mode 100644 index 000000000..4d35738dd --- /dev/null +++ b/node_modules/form-data/lib/populate.js @@ -0,0 +1,10 @@ +// populates missing values +module.exports = function(dst, src) { + + Object.keys(src).forEach(function(prop) + { + dst[prop] = dst[prop] || src[prop]; + }); + + return dst; +}; diff --git a/node_modules/form-data/package.json b/node_modules/form-data/package.json new file mode 100644 index 000000000..7ee3cfd64 --- /dev/null +++ b/node_modules/form-data/package.json @@ -0,0 +1,65 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "form-data", + "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", + "version": "2.1.4", + "repository": { + "type": "git", + "url": "git://github.com/form-data/form-data.git" + }, + "main": "./lib/form_data", + "browser": "./lib/browser", + "scripts": { + "pretest": "rimraf coverage test/tmp", + "test": "istanbul cover test/run.js", + "posttest": "istanbul report lcov text", + "lint": "eslint lib/*.js test/*.js test/integration/*.js", + "report": "istanbul report lcov text", + "ci-lint": "is-node-modern 6 && npm run lint || is-node-not-modern 6", + "ci-test": "npm run test && npm run browser && npm run report", + "predebug": "rimraf coverage test/tmp", + "debug": "verbose=1 ./test/run.js", + "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", + "check": "istanbul check-coverage coverage/coverage*.json", + "files": "pkgfiles --sort=name", + "get-version": "node -e \"console.log(require('./package.json').version)\"", + "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md", + "restore-readme": "mv README.md.bak README.md", + "prepublish": "in-publish && npm run update-readme || not-in-publish", + "postpublish": "npm run restore-readme" + }, + "pre-commit": [ + "lint", + "ci-test", + "check" + ], + "engines": { + "node": ">= 0.12" + }, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "devDependencies": { + "browserify": "^13.1.1", + "browserify-istanbul": "^2.0.0", + "coveralls": "^2.11.14", + "cross-spawn": "^4.0.2", + "eslint": "^3.9.1", + "fake": "^0.2.2", + "far": "^0.0.7", + "formidable": "^1.0.17", + "in-publish": "^2.0.0", + "is-node-modern": "^1.0.0", + "istanbul": "^0.4.5", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.13", + "pkgfiles": "^2.3.0", + "pre-commit": "^1.1.3", + "request": "2.76.0", + "rimraf": "^2.5.4", + "tape": "^4.6.2" + }, + "license": "MIT" +} diff --git a/node_modules/getpass/.npmignore b/node_modules/getpass/.npmignore new file mode 100644 index 000000000..a4261fc06 --- /dev/null +++ b/node_modules/getpass/.npmignore @@ -0,0 +1,8 @@ +.gitmodules +deps +docs +Makefile +node_modules +test +tools +coverage diff --git a/node_modules/getpass/.travis.yml b/node_modules/getpass/.travis.yml new file mode 100644 index 000000000..d8b5833a7 --- /dev/null +++ b/node_modules/getpass/.travis.yml @@ -0,0 +1,9 @@ +language: node_js +node_js: + - "5.10" + - "4.4" + - "4.1" + - "0.12" + - "0.10" +before_install: + - "make check" diff --git a/node_modules/getpass/LICENSE b/node_modules/getpass/LICENSE new file mode 100644 index 000000000..f6d947d2f --- /dev/null +++ b/node_modules/getpass/LICENSE @@ -0,0 +1,18 @@ +Copyright Joyent, Inc. All rights reserved. +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. diff --git a/node_modules/getpass/README.md b/node_modules/getpass/README.md new file mode 100644 index 000000000..6e4a50f63 --- /dev/null +++ b/node_modules/getpass/README.md @@ -0,0 +1,32 @@ +## getpass + +Get a password from the terminal. Sounds simple? Sounds like the `readline` +module should be able to do it? NOPE. + +## Install and use it + +```bash +npm install --save getpass +``` + +```javascript +const mod_getpass = require('getpass'); +``` + +## API + +### `mod_getpass.getPass([options, ]callback)` + +Gets a password from the terminal. If available, this uses `/dev/tty` to avoid +interfering with any data being piped in or out of stdio. + +This function prints a prompt (by default `Password:`) and then accepts input +without echoing. + +Parameters: + + * `options`, an Object, with properties: + * `prompt`, an optional String + * `callback`, a `Func(error, password)`, with arguments: + * `error`, either `null` (no error) or an `Error` instance + * `password`, a String diff --git a/node_modules/getpass/lib/index.js b/node_modules/getpass/lib/index.js new file mode 100644 index 000000000..55a7718c0 --- /dev/null +++ b/node_modules/getpass/lib/index.js @@ -0,0 +1,123 @@ +/* + * Copyright 2016, Joyent, Inc. All rights reserved. + * Author: Alex Wilson + * + * 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. +*/ + +module.exports = { + getPass: getPass +}; + +const mod_tty = require('tty'); +const mod_fs = require('fs'); +const mod_assert = require('assert-plus'); + +var BACKSPACE = String.fromCharCode(127); +var CTRLC = '\u0003'; +var CTRLD = '\u0004'; + +function getPass(opts, cb) { + if (typeof (opts) === 'function' && cb === undefined) { + cb = opts; + opts = {}; + } + mod_assert.object(opts, 'options'); + mod_assert.func(cb, 'callback'); + + mod_assert.optionalString(opts.prompt, 'options.prompt'); + if (opts.prompt === undefined) + opts.prompt = 'Password'; + + openTTY(function (err, rfd, wfd, rtty, wtty) { + if (err) { + cb(err); + return; + } + + wtty.write(opts.prompt + ':'); + rtty.resume(); + rtty.setRawMode(true); + rtty.resume(); + rtty.setEncoding('utf8'); + + var pw = ''; + rtty.on('data', onData); + + function onData(data) { + var str = data.toString('utf8'); + for (var i = 0; i < str.length; ++i) { + var ch = str[i]; + switch (ch) { + case '\r': + case '\n': + case CTRLD: + cleanup(); + cb(null, pw); + return; + case CTRLC: + cleanup(); + cb(new Error('Aborted')); + return; + case BACKSPACE: + pw = pw.slice(0, pw.length - 1); + break; + default: + pw += ch; + break; + } + } + } + + function cleanup() { + wtty.write('\r\n'); + rtty.setRawMode(false); + rtty.pause(); + rtty.removeListener('data', onData); + if (wfd !== undefined && wfd !== rfd) { + wtty.end(); + mod_fs.closeSync(wfd); + } + if (rfd !== undefined) { + rtty.end(); + mod_fs.closeSync(rfd); + } + } + }); +} + +function openTTY(cb) { + mod_fs.open('/dev/tty', 'r+', function (err, rttyfd) { + if ((err && (err.code === 'ENOENT' || err.code === 'EACCES')) || + (process.version.match(/^v0[.][0-8][.]/))) { + cb(null, undefined, undefined, process.stdin, + process.stdout); + return; + } + var rtty = new mod_tty.ReadStream(rttyfd); + mod_fs.open('/dev/tty', 'w+', function (err3, wttyfd) { + var wtty = new mod_tty.WriteStream(wttyfd); + if (err3) { + cb(err3); + return; + } + cb(null, rttyfd, wttyfd, rtty, wtty); + }); + }); +} diff --git a/node_modules/getpass/node_modules/assert-plus/AUTHORS b/node_modules/getpass/node_modules/assert-plus/AUTHORS new file mode 100644 index 000000000..1923524fe --- /dev/null +++ b/node_modules/getpass/node_modules/assert-plus/AUTHORS @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/node_modules/getpass/node_modules/assert-plus/CHANGES.md b/node_modules/getpass/node_modules/assert-plus/CHANGES.md new file mode 100644 index 000000000..57d92bfdb --- /dev/null +++ b/node_modules/getpass/node_modules/assert-plus/CHANGES.md @@ -0,0 +1,14 @@ +# assert-plus Changelog + +## 1.0.0 + +- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input +- Add assert.finite check. Previous assert.number callers should use this if + they expect Infinity inputs to throw. + +## 0.2.0 + +- Fix `assert.object(null)` so it throws +- Fix optional/arrayOf exports for non-type-of asserts +- Add optiona/arrayOf exports for Stream/Date/Regex/uuid +- Add basic unit test coverage diff --git a/node_modules/getpass/node_modules/assert-plus/README.md b/node_modules/getpass/node_modules/assert-plus/README.md new file mode 100644 index 000000000..ec200d161 --- /dev/null +++ b/node_modules/getpass/node_modules/assert-plus/README.md @@ -0,0 +1,162 @@ +# assert-plus + +This library is a super small wrapper over node's assert module that has two +things: (1) the ability to disable assertions with the environment variable +NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like +`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks +like this: + +```javascript + var assert = require('assert-plus'); + + function fooAccount(options, callback) { + assert.object(options, 'options'); + assert.number(options.id, 'options.id'); + assert.bool(options.isManager, 'options.isManager'); + assert.string(options.name, 'options.name'); + assert.arrayOfString(options.email, 'options.email'); + assert.func(callback, 'callback'); + + // Do stuff + callback(null, {}); + } +``` + +# API + +All methods that *aren't* part of node's core assert API are simply assumed to +take an argument, and then a string 'name' that's not a message; `AssertionError` +will be thrown if the assertion fails with a message like: + + AssertionError: foo (string) is required + at test (/home/mark/work/foo/foo.js:3:9) + at Object. (/home/mark/work/foo/foo.js:15:1) + at Module._compile (module.js:446:26) + at Object..js (module.js:464:10) + at Module.load (module.js:353:31) + at Function._load (module.js:311:12) + at Array.0 (module.js:484:10) + at EventEmitter._tickCallback (node.js:190:38) + +from: + +```javascript + function test(foo) { + assert.string(foo, 'foo'); + } +``` + +There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: + +```javascript + function test(foo) { + assert.arrayOfString(foo, 'foo'); + } +``` + +You can assert IFF an argument is not `undefined` (i.e., an optional arg): + +```javascript + assert.optionalString(foo, 'foo'); +``` + +Lastly, you can opt-out of assertion checking altogether by setting the +environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have +lots of assertions, and don't want to pay `typeof ()` taxes to v8 in +production. Be advised: The standard functions re-exported from `assert` are +also disabled in assert-plus if NDEBUG is specified. Using them directly from +the `assert` module avoids this behavior. + +The complete list of APIs is: + +* assert.array +* assert.bool +* assert.buffer +* assert.func +* assert.number +* assert.finite +* assert.object +* assert.string +* assert.stream +* assert.date +* assert.regexp +* assert.uuid +* assert.arrayOfArray +* assert.arrayOfBool +* assert.arrayOfBuffer +* assert.arrayOfFunc +* assert.arrayOfNumber +* assert.arrayOfFinite +* assert.arrayOfObject +* assert.arrayOfString +* assert.arrayOfStream +* assert.arrayOfDate +* assert.arrayOfRegexp +* assert.arrayOfUuid +* assert.optionalArray +* assert.optionalBool +* assert.optionalBuffer +* assert.optionalFunc +* assert.optionalNumber +* assert.optionalFinite +* assert.optionalObject +* assert.optionalString +* assert.optionalStream +* assert.optionalDate +* assert.optionalRegexp +* assert.optionalUuid +* assert.optionalArrayOfArray +* assert.optionalArrayOfBool +* assert.optionalArrayOfBuffer +* assert.optionalArrayOfFunc +* assert.optionalArrayOfNumber +* assert.optionalArrayOfFinite +* assert.optionalArrayOfObject +* assert.optionalArrayOfString +* assert.optionalArrayOfStream +* assert.optionalArrayOfDate +* assert.optionalArrayOfRegexp +* assert.optionalArrayOfUuid +* assert.AssertionError +* assert.fail +* assert.ok +* assert.equal +* assert.notEqual +* assert.deepEqual +* assert.notDeepEqual +* assert.strictEqual +* assert.notStrictEqual +* assert.throws +* assert.doesNotThrow +* assert.ifError + +# Installation + + npm install assert-plus + +## License + +The MIT License (MIT) +Copyright (c) 2012 Mark Cavage + +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. + +## Bugs + +See . diff --git a/node_modules/getpass/node_modules/assert-plus/assert.js b/node_modules/getpass/node_modules/assert-plus/assert.js new file mode 100644 index 000000000..26f944eec --- /dev/null +++ b/node_modules/getpass/node_modules/assert-plus/assert.js @@ -0,0 +1,211 @@ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg); + } + }, + finite: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/getpass/node_modules/assert-plus/package.json b/node_modules/getpass/node_modules/assert-plus/package.json new file mode 100644 index 000000000..40d6a5cd8 --- /dev/null +++ b/node_modules/getpass/node_modules/assert-plus/package.json @@ -0,0 +1,23 @@ +{ + "author": "Mark Cavage ", + "name": "assert-plus", + "description": "Extra assertions on top of node's assert module", + "version": "1.0.0", + "license": "MIT", + "main": "./assert.js", + "devDependencies": { + "tape": "4.2.2", + "faucet": "0.0.1" + }, + "optionalDependencies": {}, + "scripts": { + "test": "./node_modules/.bin/tape tests/*.js | ./node_modules/.bin/faucet" + }, + "repository": { + "type": "git", + "url": "https://github.com/mcavage/node-assert-plus.git" + }, + "engines": { + "node": ">=0.8" + } +} diff --git a/node_modules/getpass/package.json b/node_modules/getpass/package.json new file mode 100644 index 000000000..f1638eb3c --- /dev/null +++ b/node_modules/getpass/package.json @@ -0,0 +1,18 @@ +{ + "name": "getpass", + "version": "0.1.7", + "description": "getpass for node.js", + "main": "lib/index.js", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/arekinath/node-getpass.git" + }, + "scripts": { + "test": "tape test/*.test.js" + }, + "author": "Alex Wilson ", + "license": "MIT" +} diff --git a/node_modules/graceful-fs/LICENSE b/node_modules/graceful-fs/LICENSE new file mode 100644 index 000000000..e906a25ac --- /dev/null +++ b/node_modules/graceful-fs/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/graceful-fs/README.md b/node_modules/graceful-fs/README.md new file mode 100644 index 000000000..82d6e4daf --- /dev/null +++ b/node_modules/graceful-fs/README.md @@ -0,0 +1,143 @@ +# graceful-fs + +graceful-fs functions as a drop-in replacement for the fs module, +making various improvements. + +The improvements are meant to normalize behavior across different +platforms and environments, and to make filesystem access more +resilient to errors. + +## Improvements over [fs module](https://nodejs.org/api/fs.html) + +* Queues up `open` and `readdir` calls, and retries them once + something closes if there is an EMFILE error from too many file + descriptors. +* fixes `lchmod` for Node versions prior to 0.6.2. +* implements `fs.lutimes` if possible. Otherwise it becomes a noop. +* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or + `lchown` if the user isn't root. +* makes `lchmod` and `lchown` become noops, if not available. +* retries reading a file if `read` results in EAGAIN error. + +On Windows, it retries renaming a file for up to one second if `EACCESS` +or `EPERM` error occurs, likely because antivirus software has locked +the directory. + +## USAGE + +```javascript +// use just like fs +var fs = require('graceful-fs') + +// now go and do stuff with it... +fs.readFile('some-file-or-whatever', (err, data) => { + // Do stuff here. +}) +``` + +## Sync methods + +This module cannot intercept or handle `EMFILE` or `ENFILE` errors from sync +methods. If you use sync methods which open file descriptors then you are +responsible for dealing with any errors. + +This is a known limitation, not a bug. + +## Global Patching + +If you want to patch the global fs module (or any other fs-like +module) you can do this: + +```javascript +// Make sure to read the caveat below. +var realFs = require('fs') +var gracefulFs = require('graceful-fs') +gracefulFs.gracefulify(realFs) +``` + +This should only ever be done at the top-level application layer, in +order to delay on EMFILE errors from any fs-using dependencies. You +should **not** do this in a library, because it can cause unexpected +delays in other parts of the program. + +## Changes + +This module is fairly stable at this point, and used by a lot of +things. That being said, because it implements a subtle behavior +change in a core part of the node API, even modest changes can be +extremely breaking, and the versioning is thus biased towards +bumping the major when in doubt. + +The main change between major versions has been switching between +providing a fully-patched `fs` module vs monkey-patching the node core +builtin, and the approach by which a non-monkey-patched `fs` was +created. + +The goal is to trade `EMFILE` errors for slower fs operations. So, if +you try to open a zillion files, rather than crashing, `open` +operations will be queued up and wait for something else to `close`. + +There are advantages to each approach. Monkey-patching the fs means +that no `EMFILE` errors can possibly occur anywhere in your +application, because everything is using the same core `fs` module, +which is patched. However, it can also obviously cause undesirable +side-effects, especially if the module is loaded multiple times. + +Implementing a separate-but-identical patched `fs` module is more +surgical (and doesn't run the risk of patching multiple times), but +also imposes the challenge of keeping in sync with the core module. + +The current approach loads the `fs` module, and then creates a +lookalike object that has all the same methods, except a few that are +patched. It is safe to use in all versions of Node from 0.8 through +7.0. + +### v4 + +* Do not monkey-patch the fs module. This module may now be used as a + drop-in dep, and users can opt into monkey-patching the fs builtin + if their app requires it. + +### v3 + +* Monkey-patch fs, because the eval approach no longer works on recent + node. +* fixed possible type-error throw if rename fails on windows +* verify that we *never* get EMFILE errors +* Ignore ENOSYS from chmod/chown +* clarify that graceful-fs must be used as a drop-in + +### v2.1.0 + +* Use eval rather than monkey-patching fs. +* readdir: Always sort the results +* win32: requeue a file if error has an OK status + +### v2.0 + +* A return to monkey patching +* wrap process.cwd + +### v1.1 + +* wrap readFile +* Wrap fs.writeFile. +* readdir protection +* Don't clobber the fs builtin +* Handle fs.read EAGAIN errors by trying again +* Expose the curOpen counter +* No-op lchown/lchmod if not implemented +* fs.rename patch only for win32 +* Patch fs.rename to handle AV software on Windows +* Close #4 Chown should not fail on einval or eperm if non-root +* Fix isaacs/fstream#1 Only wrap fs one time +* Fix #3 Start at 1024 max files, then back off on EMFILE +* lutimes that doens't blow up on Linux +* A full on-rewrite using a queue instead of just swallowing the EMFILE error +* Wrap Read/Write streams as well + +### 1.0 + +* Update engines for node 0.6 +* Be lstat-graceful on Windows +* first diff --git a/node_modules/graceful-fs/clone.js b/node_modules/graceful-fs/clone.js new file mode 100644 index 000000000..dff3cc8c5 --- /dev/null +++ b/node_modules/graceful-fs/clone.js @@ -0,0 +1,23 @@ +'use strict' + +module.exports = clone + +var getPrototypeOf = Object.getPrototypeOf || function (obj) { + return obj.__proto__ +} + +function clone (obj) { + if (obj === null || typeof obj !== 'object') + return obj + + if (obj instanceof Object) + var copy = { __proto__: getPrototypeOf(obj) } + else + var copy = Object.create(null) + + Object.getOwnPropertyNames(obj).forEach(function (key) { + Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)) + }) + + return copy +} diff --git a/node_modules/graceful-fs/graceful-fs.js b/node_modules/graceful-fs/graceful-fs.js new file mode 100644 index 000000000..8d5b89e4f --- /dev/null +++ b/node_modules/graceful-fs/graceful-fs.js @@ -0,0 +1,448 @@ +var fs = require('fs') +var polyfills = require('./polyfills.js') +var legacy = require('./legacy-streams.js') +var clone = require('./clone.js') + +var util = require('util') + +/* istanbul ignore next - node 0.x polyfill */ +var gracefulQueue +var previousSymbol + +/* istanbul ignore else - node 0.x polyfill */ +if (typeof Symbol === 'function' && typeof Symbol.for === 'function') { + gracefulQueue = Symbol.for('graceful-fs.queue') + // This is used in testing by future versions + previousSymbol = Symbol.for('graceful-fs.previous') +} else { + gracefulQueue = '___graceful-fs.queue' + previousSymbol = '___graceful-fs.previous' +} + +function noop () {} + +function publishQueue(context, queue) { + Object.defineProperty(context, gracefulQueue, { + get: function() { + return queue + } + }) +} + +var debug = noop +if (util.debuglog) + debug = util.debuglog('gfs4') +else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) + debug = function() { + var m = util.format.apply(util, arguments) + m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ') + console.error(m) + } + +// Once time initialization +if (!fs[gracefulQueue]) { + // This queue can be shared by multiple loaded instances + var queue = global[gracefulQueue] || [] + publishQueue(fs, queue) + + // Patch fs.close/closeSync to shared queue version, because we need + // to retry() whenever a close happens *anywhere* in the program. + // This is essential when multiple graceful-fs instances are + // in play at the same time. + fs.close = (function (fs$close) { + function close (fd, cb) { + return fs$close.call(fs, fd, function (err) { + // This function uses the graceful-fs shared queue + if (!err) { + resetQueue() + } + + if (typeof cb === 'function') + cb.apply(this, arguments) + }) + } + + Object.defineProperty(close, previousSymbol, { + value: fs$close + }) + return close + })(fs.close) + + fs.closeSync = (function (fs$closeSync) { + function closeSync (fd) { + // This function uses the graceful-fs shared queue + fs$closeSync.apply(fs, arguments) + resetQueue() + } + + Object.defineProperty(closeSync, previousSymbol, { + value: fs$closeSync + }) + return closeSync + })(fs.closeSync) + + if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { + process.on('exit', function() { + debug(fs[gracefulQueue]) + require('assert').equal(fs[gracefulQueue].length, 0) + }) + } +} + +if (!global[gracefulQueue]) { + publishQueue(global, fs[gracefulQueue]); +} + +module.exports = patch(clone(fs)) +if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) { + module.exports = patch(fs) + fs.__patched = true; +} + +function patch (fs) { + // Everything that references the open() function needs to be in here + polyfills(fs) + fs.gracefulify = patch + + fs.createReadStream = createReadStream + fs.createWriteStream = createWriteStream + var fs$readFile = fs.readFile + fs.readFile = readFile + function readFile (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$readFile(path, options, cb) + + function go$readFile (path, options, cb, startTime) { + return fs$readFile(path, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$writeFile = fs.writeFile + fs.writeFile = writeFile + function writeFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$writeFile(path, data, options, cb) + + function go$writeFile (path, data, options, cb, startTime) { + return fs$writeFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$appendFile = fs.appendFile + if (fs$appendFile) + fs.appendFile = appendFile + function appendFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$appendFile(path, data, options, cb) + + function go$appendFile (path, data, options, cb, startTime) { + return fs$appendFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$copyFile = fs.copyFile + if (fs$copyFile) + fs.copyFile = copyFile + function copyFile (src, dest, flags, cb) { + if (typeof flags === 'function') { + cb = flags + flags = 0 + } + return go$copyFile(src, dest, flags, cb) + + function go$copyFile (src, dest, flags, cb, startTime) { + return fs$copyFile(src, dest, flags, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$readdir = fs.readdir + fs.readdir = readdir + var noReaddirOptionVersions = /^v[0-5]\./ + function readdir (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + var go$readdir = noReaddirOptionVersions.test(process.version) + ? function go$readdir (path, options, cb, startTime) { + return fs$readdir(path, fs$readdirCallback( + path, options, cb, startTime + )) + } + : function go$readdir (path, options, cb, startTime) { + return fs$readdir(path, options, fs$readdirCallback( + path, options, cb, startTime + )) + } + + return go$readdir(path, options, cb) + + function fs$readdirCallback (path, options, cb, startTime) { + return function (err, files) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([ + go$readdir, + [path, options, cb], + err, + startTime || Date.now(), + Date.now() + ]) + else { + if (files && files.sort) + files.sort() + + if (typeof cb === 'function') + cb.call(this, err, files) + } + } + } + } + + if (process.version.substr(0, 4) === 'v0.8') { + var legStreams = legacy(fs) + ReadStream = legStreams.ReadStream + WriteStream = legStreams.WriteStream + } + + var fs$ReadStream = fs.ReadStream + if (fs$ReadStream) { + ReadStream.prototype = Object.create(fs$ReadStream.prototype) + ReadStream.prototype.open = ReadStream$open + } + + var fs$WriteStream = fs.WriteStream + if (fs$WriteStream) { + WriteStream.prototype = Object.create(fs$WriteStream.prototype) + WriteStream.prototype.open = WriteStream$open + } + + Object.defineProperty(fs, 'ReadStream', { + get: function () { + return ReadStream + }, + set: function (val) { + ReadStream = val + }, + enumerable: true, + configurable: true + }) + Object.defineProperty(fs, 'WriteStream', { + get: function () { + return WriteStream + }, + set: function (val) { + WriteStream = val + }, + enumerable: true, + configurable: true + }) + + // legacy names + var FileReadStream = ReadStream + Object.defineProperty(fs, 'FileReadStream', { + get: function () { + return FileReadStream + }, + set: function (val) { + FileReadStream = val + }, + enumerable: true, + configurable: true + }) + var FileWriteStream = WriteStream + Object.defineProperty(fs, 'FileWriteStream', { + get: function () { + return FileWriteStream + }, + set: function (val) { + FileWriteStream = val + }, + enumerable: true, + configurable: true + }) + + function ReadStream (path, options) { + if (this instanceof ReadStream) + return fs$ReadStream.apply(this, arguments), this + else + return ReadStream.apply(Object.create(ReadStream.prototype), arguments) + } + + function ReadStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + if (that.autoClose) + that.destroy() + + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + that.read() + } + }) + } + + function WriteStream (path, options) { + if (this instanceof WriteStream) + return fs$WriteStream.apply(this, arguments), this + else + return WriteStream.apply(Object.create(WriteStream.prototype), arguments) + } + + function WriteStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + that.destroy() + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + } + }) + } + + function createReadStream (path, options) { + return new fs.ReadStream(path, options) + } + + function createWriteStream (path, options) { + return new fs.WriteStream(path, options) + } + + var fs$open = fs.open + fs.open = open + function open (path, flags, mode, cb) { + if (typeof mode === 'function') + cb = mode, mode = null + + return go$open(path, flags, mode, cb) + + function go$open (path, flags, mode, cb, startTime) { + return fs$open(path, flags, mode, function (err, fd) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + return fs +} + +function enqueue (elem) { + debug('ENQUEUE', elem[0].name, elem[1]) + fs[gracefulQueue].push(elem) + retry() +} + +// keep track of the timeout between retry() calls +var retryTimer + +// reset the startTime and lastTime to now +// this resets the start of the 60 second overall timeout as well as the +// delay between attempts so that we'll retry these jobs sooner +function resetQueue () { + var now = Date.now() + for (var i = 0; i < fs[gracefulQueue].length; ++i) { + // entries that are only a length of 2 are from an older version, don't + // bother modifying those since they'll be retried anyway. + if (fs[gracefulQueue][i].length > 2) { + fs[gracefulQueue][i][3] = now // startTime + fs[gracefulQueue][i][4] = now // lastTime + } + } + // call retry to make sure we're actively processing the queue + retry() +} + +function retry () { + // clear the timer and remove it to help prevent unintended concurrency + clearTimeout(retryTimer) + retryTimer = undefined + + if (fs[gracefulQueue].length === 0) + return + + var elem = fs[gracefulQueue].shift() + var fn = elem[0] + var args = elem[1] + // these items may be unset if they were added by an older graceful-fs + var err = elem[2] + var startTime = elem[3] + var lastTime = elem[4] + + // if we don't have a startTime we have no way of knowing if we've waited + // long enough, so go ahead and retry this item now + if (startTime === undefined) { + debug('RETRY', fn.name, args) + fn.apply(null, args) + } else if (Date.now() - startTime >= 60000) { + // it's been more than 60 seconds total, bail now + debug('TIMEOUT', fn.name, args) + var cb = args.pop() + if (typeof cb === 'function') + cb.call(null, err) + } else { + // the amount of time between the last attempt and right now + var sinceAttempt = Date.now() - lastTime + // the amount of time between when we first tried, and when we last tried + // rounded up to at least 1 + var sinceStart = Math.max(lastTime - startTime, 1) + // backoff. wait longer than the total time we've been retrying, but only + // up to a maximum of 100ms + var desiredDelay = Math.min(sinceStart * 1.2, 100) + // it's been long enough since the last retry, do it again + if (sinceAttempt >= desiredDelay) { + debug('RETRY', fn.name, args) + fn.apply(null, args.concat([startTime])) + } else { + // if we can't do this job yet, push it to the end of the queue + // and let the next iteration check again + fs[gracefulQueue].push(elem) + } + } + + // schedule our next run if one isn't already scheduled + if (retryTimer === undefined) { + retryTimer = setTimeout(retry, 0) + } +} diff --git a/node_modules/graceful-fs/legacy-streams.js b/node_modules/graceful-fs/legacy-streams.js new file mode 100644 index 000000000..d617b50fc --- /dev/null +++ b/node_modules/graceful-fs/legacy-streams.js @@ -0,0 +1,118 @@ +var Stream = require('stream').Stream + +module.exports = legacy + +function legacy (fs) { + return { + ReadStream: ReadStream, + WriteStream: WriteStream + } + + function ReadStream (path, options) { + if (!(this instanceof ReadStream)) return new ReadStream(path, options); + + Stream.call(this); + + var self = this; + + this.path = path; + this.fd = null; + this.readable = true; + this.paused = false; + + this.flags = 'r'; + this.mode = 438; /*=0666*/ + this.bufferSize = 64 * 1024; + + options = options || {}; + + // Mixin options into this + var keys = Object.keys(options); + for (var index = 0, length = keys.length; index < length; index++) { + var key = keys[index]; + this[key] = options[key]; + } + + if (this.encoding) this.setEncoding(this.encoding); + + if (this.start !== undefined) { + if ('number' !== typeof this.start) { + throw TypeError('start must be a Number'); + } + if (this.end === undefined) { + this.end = Infinity; + } else if ('number' !== typeof this.end) { + throw TypeError('end must be a Number'); + } + + if (this.start > this.end) { + throw new Error('start must be <= end'); + } + + this.pos = this.start; + } + + if (this.fd !== null) { + process.nextTick(function() { + self._read(); + }); + return; + } + + fs.open(this.path, this.flags, this.mode, function (err, fd) { + if (err) { + self.emit('error', err); + self.readable = false; + return; + } + + self.fd = fd; + self.emit('open', fd); + self._read(); + }) + } + + function WriteStream (path, options) { + if (!(this instanceof WriteStream)) return new WriteStream(path, options); + + Stream.call(this); + + this.path = path; + this.fd = null; + this.writable = true; + + this.flags = 'w'; + this.encoding = 'binary'; + this.mode = 438; /*=0666*/ + this.bytesWritten = 0; + + options = options || {}; + + // Mixin options into this + var keys = Object.keys(options); + for (var index = 0, length = keys.length; index < length; index++) { + var key = keys[index]; + this[key] = options[key]; + } + + if (this.start !== undefined) { + if ('number' !== typeof this.start) { + throw TypeError('start must be a Number'); + } + if (this.start < 0) { + throw new Error('start must be >= zero'); + } + + this.pos = this.start; + } + + this.busy = false; + this._queue = []; + + if (this.fd === null) { + this._open = fs.open; + this._queue.push([this._open, this.path, this.flags, this.mode, undefined]); + this.flush(); + } + } +} diff --git a/node_modules/graceful-fs/package.json b/node_modules/graceful-fs/package.json new file mode 100644 index 000000000..87babf024 --- /dev/null +++ b/node_modules/graceful-fs/package.json @@ -0,0 +1,53 @@ +{ + "name": "graceful-fs", + "description": "A drop-in replacement for fs, making various improvements.", + "version": "4.2.11", + "repository": { + "type": "git", + "url": "https://github.com/isaacs/node-graceful-fs" + }, + "main": "graceful-fs.js", + "directories": { + "test": "test" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags", + "test": "nyc --silent node test.js | tap -c -", + "posttest": "nyc report" + }, + "keywords": [ + "fs", + "module", + "reading", + "retry", + "retries", + "queue", + "error", + "errors", + "handling", + "EMFILE", + "EAGAIN", + "EINVAL", + "EPERM", + "EACCESS" + ], + "license": "ISC", + "devDependencies": { + "import-fresh": "^2.0.0", + "mkdirp": "^0.5.0", + "rimraf": "^2.2.8", + "tap": "^16.3.4" + }, + "files": [ + "fs.js", + "graceful-fs.js", + "legacy-streams.js", + "polyfills.js", + "clone.js" + ], + "tap": { + "reporter": "classic" + } +} diff --git a/node_modules/graceful-fs/polyfills.js b/node_modules/graceful-fs/polyfills.js new file mode 100644 index 000000000..453f1a9e7 --- /dev/null +++ b/node_modules/graceful-fs/polyfills.js @@ -0,0 +1,355 @@ +var constants = require('constants') + +var origCwd = process.cwd +var cwd = null + +var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform + +process.cwd = function() { + if (!cwd) + cwd = origCwd.call(process) + return cwd +} +try { + process.cwd() +} catch (er) {} + +// This check is needed until node.js 12 is required +if (typeof process.chdir === 'function') { + var chdir = process.chdir + process.chdir = function (d) { + cwd = null + chdir.call(process, d) + } + if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir) +} + +module.exports = patch + +function patch (fs) { + // (re-)implement some things that are known busted or missing. + + // lchmod, broken prior to 0.6.2 + // back-port the fix here. + if (constants.hasOwnProperty('O_SYMLINK') && + process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { + patchLchmod(fs) + } + + // lutimes implementation, or no-op + if (!fs.lutimes) { + patchLutimes(fs) + } + + // https://github.com/isaacs/node-graceful-fs/issues/4 + // Chown should not fail on einval or eperm if non-root. + // It should not fail on enosys ever, as this just indicates + // that a fs doesn't support the intended operation. + + fs.chown = chownFix(fs.chown) + fs.fchown = chownFix(fs.fchown) + fs.lchown = chownFix(fs.lchown) + + fs.chmod = chmodFix(fs.chmod) + fs.fchmod = chmodFix(fs.fchmod) + fs.lchmod = chmodFix(fs.lchmod) + + fs.chownSync = chownFixSync(fs.chownSync) + fs.fchownSync = chownFixSync(fs.fchownSync) + fs.lchownSync = chownFixSync(fs.lchownSync) + + fs.chmodSync = chmodFixSync(fs.chmodSync) + fs.fchmodSync = chmodFixSync(fs.fchmodSync) + fs.lchmodSync = chmodFixSync(fs.lchmodSync) + + fs.stat = statFix(fs.stat) + fs.fstat = statFix(fs.fstat) + fs.lstat = statFix(fs.lstat) + + fs.statSync = statFixSync(fs.statSync) + fs.fstatSync = statFixSync(fs.fstatSync) + fs.lstatSync = statFixSync(fs.lstatSync) + + // if lchmod/lchown do not exist, then make them no-ops + if (fs.chmod && !fs.lchmod) { + fs.lchmod = function (path, mode, cb) { + if (cb) process.nextTick(cb) + } + fs.lchmodSync = function () {} + } + if (fs.chown && !fs.lchown) { + fs.lchown = function (path, uid, gid, cb) { + if (cb) process.nextTick(cb) + } + fs.lchownSync = function () {} + } + + // on Windows, A/V software can lock the directory, causing this + // to fail with an EACCES or EPERM if the directory contains newly + // created files. Try again on failure, for up to 60 seconds. + + // Set the timeout this long because some Windows Anti-Virus, such as Parity + // bit9, may lock files for up to a minute, causing npm package install + // failures. Also, take care to yield the scheduler. Windows scheduling gives + // CPU to a busy looping process, which can cause the program causing the lock + // contention to be starved of CPU by node, so the contention doesn't resolve. + if (platform === "win32") { + fs.rename = typeof fs.rename !== 'function' ? fs.rename + : (function (fs$rename) { + function rename (from, to, cb) { + var start = Date.now() + var backoff = 0; + fs$rename(from, to, function CB (er) { + if (er + && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY") + && Date.now() - start < 60000) { + setTimeout(function() { + fs.stat(to, function (stater, st) { + if (stater && stater.code === "ENOENT") + fs$rename(from, to, CB); + else + cb(er) + }) + }, backoff) + if (backoff < 100) + backoff += 10; + return; + } + if (cb) cb(er) + }) + } + if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename) + return rename + })(fs.rename) + } + + // if read() returns EAGAIN, then just try it again. + fs.read = typeof fs.read !== 'function' ? fs.read + : (function (fs$read) { + function read (fd, buffer, offset, length, position, callback_) { + var callback + if (callback_ && typeof callback_ === 'function') { + var eagCounter = 0 + callback = function (er, _, __) { + if (er && er.code === 'EAGAIN' && eagCounter < 10) { + eagCounter ++ + return fs$read.call(fs, fd, buffer, offset, length, position, callback) + } + callback_.apply(this, arguments) + } + } + return fs$read.call(fs, fd, buffer, offset, length, position, callback) + } + + // This ensures `util.promisify` works as it does for native `fs.read`. + if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read) + return read + })(fs.read) + + fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync + : (function (fs$readSync) { return function (fd, buffer, offset, length, position) { + var eagCounter = 0 + while (true) { + try { + return fs$readSync.call(fs, fd, buffer, offset, length, position) + } catch (er) { + if (er.code === 'EAGAIN' && eagCounter < 10) { + eagCounter ++ + continue + } + throw er + } + } + }})(fs.readSync) + + function patchLchmod (fs) { + fs.lchmod = function (path, mode, callback) { + fs.open( path + , constants.O_WRONLY | constants.O_SYMLINK + , mode + , function (err, fd) { + if (err) { + if (callback) callback(err) + return + } + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + fs.fchmod(fd, mode, function (err) { + fs.close(fd, function(err2) { + if (callback) callback(err || err2) + }) + }) + }) + } + + fs.lchmodSync = function (path, mode) { + var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) + + // prefer to return the chmod error, if one occurs, + // but still try to close, and report closing errors if they occur. + var threw = true + var ret + try { + ret = fs.fchmodSync(fd, mode) + threw = false + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } else { + fs.closeSync(fd) + } + } + return ret + } + } + + function patchLutimes (fs) { + if (constants.hasOwnProperty("O_SYMLINK") && fs.futimes) { + fs.lutimes = function (path, at, mt, cb) { + fs.open(path, constants.O_SYMLINK, function (er, fd) { + if (er) { + if (cb) cb(er) + return + } + fs.futimes(fd, at, mt, function (er) { + fs.close(fd, function (er2) { + if (cb) cb(er || er2) + }) + }) + }) + } + + fs.lutimesSync = function (path, at, mt) { + var fd = fs.openSync(path, constants.O_SYMLINK) + var ret + var threw = true + try { + ret = fs.futimesSync(fd, at, mt) + threw = false + } finally { + if (threw) { + try { + fs.closeSync(fd) + } catch (er) {} + } else { + fs.closeSync(fd) + } + } + return ret + } + + } else if (fs.futimes) { + fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) } + fs.lutimesSync = function () {} + } + } + + function chmodFix (orig) { + if (!orig) return orig + return function (target, mode, cb) { + return orig.call(fs, target, mode, function (er) { + if (chownErOk(er)) er = null + if (cb) cb.apply(this, arguments) + }) + } + } + + function chmodFixSync (orig) { + if (!orig) return orig + return function (target, mode) { + try { + return orig.call(fs, target, mode) + } catch (er) { + if (!chownErOk(er)) throw er + } + } + } + + + function chownFix (orig) { + if (!orig) return orig + return function (target, uid, gid, cb) { + return orig.call(fs, target, uid, gid, function (er) { + if (chownErOk(er)) er = null + if (cb) cb.apply(this, arguments) + }) + } + } + + function chownFixSync (orig) { + if (!orig) return orig + return function (target, uid, gid) { + try { + return orig.call(fs, target, uid, gid) + } catch (er) { + if (!chownErOk(er)) throw er + } + } + } + + function statFix (orig) { + if (!orig) return orig + // Older versions of Node erroneously returned signed integers for + // uid + gid. + return function (target, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + function callback (er, stats) { + if (stats) { + if (stats.uid < 0) stats.uid += 0x100000000 + if (stats.gid < 0) stats.gid += 0x100000000 + } + if (cb) cb.apply(this, arguments) + } + return options ? orig.call(fs, target, options, callback) + : orig.call(fs, target, callback) + } + } + + function statFixSync (orig) { + if (!orig) return orig + // Older versions of Node erroneously returned signed integers for + // uid + gid. + return function (target, options) { + var stats = options ? orig.call(fs, target, options) + : orig.call(fs, target) + if (stats) { + if (stats.uid < 0) stats.uid += 0x100000000 + if (stats.gid < 0) stats.gid += 0x100000000 + } + return stats; + } + } + + // ENOSYS means that the fs doesn't support the op. Just ignore + // that, because it doesn't matter. + // + // if there's no getuid, or if getuid() is something other + // than 0, and the error is EINVAL or EPERM, then just ignore + // it. + // + // This specific case is a silent failure in cp, install, tar, + // and most other unix tools that manage permissions. + // + // When running as root, or if other types of errors are + // encountered, then it's strict. + function chownErOk (er) { + if (!er) + return true + + if (er.code === "ENOSYS") + return true + + var nonroot = !process.getuid || process.getuid() !== 0 + if (nonroot) { + if (er.code === "EINVAL" || er.code === "EPERM") + return true + } + + return false + } +} diff --git a/node_modules/graceful-readlink/.npmignore b/node_modules/graceful-readlink/.npmignore new file mode 100644 index 000000000..3ac7d16c6 --- /dev/null +++ b/node_modules/graceful-readlink/.npmignore @@ -0,0 +1,3 @@ +.idea/ +.DS_Store +node_modules/ diff --git a/node_modules/graceful-readlink/.travis.yml b/node_modules/graceful-readlink/.travis.yml new file mode 100644 index 000000000..baf9be7f6 --- /dev/null +++ b/node_modules/graceful-readlink/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.10" + - "0.12" + - "io.js" diff --git a/node_modules/graceful-readlink/LICENSE b/node_modules/graceful-readlink/LICENSE new file mode 100644 index 000000000..d1f842f0b --- /dev/null +++ b/node_modules/graceful-readlink/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Zhiye Li + +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. + diff --git a/node_modules/graceful-readlink/README.md b/node_modules/graceful-readlink/README.md new file mode 100644 index 000000000..fc63b505a --- /dev/null +++ b/node_modules/graceful-readlink/README.md @@ -0,0 +1,17 @@ +# graceful-readlink +[![NPM Version](http://img.shields.io/npm/v/graceful-readlink.svg?style=flat)](https://www.npmjs.org/package/graceful-readlink) +[![NPM Downloads](https://img.shields.io/npm/dm/graceful-readlink.svg?style=flat)](https://www.npmjs.org/package/graceful-readlink) + + +## Usage + +```js +var readlinkSync = require('graceful-readlink').readlinkSync; +console.log(readlinkSync(f)); +// output +// the file pointed to when `f` is a symbolic link +// the `f` itself when `f` is not a symbolic link +``` +## Licence + +MIT License diff --git a/node_modules/graceful-readlink/index.js b/node_modules/graceful-readlink/index.js new file mode 100644 index 000000000..7e9fc70f0 --- /dev/null +++ b/node_modules/graceful-readlink/index.js @@ -0,0 +1,12 @@ +var fs = require('fs') + , lstat = fs.lstatSync; + +exports.readlinkSync = function (p) { + if (lstat(p).isSymbolicLink()) { + return fs.readlinkSync(p); + } else { + return p; + } +}; + + diff --git a/node_modules/graceful-readlink/package.json b/node_modules/graceful-readlink/package.json new file mode 100644 index 000000000..ac86c1f51 --- /dev/null +++ b/node_modules/graceful-readlink/package.json @@ -0,0 +1,18 @@ +{ + "name": "graceful-readlink", + "version": "1.0.1", + "description": "graceful fs.readlink", + "main": "index.js", + "repository": "git://github.com/zhiyelee/graceful-readlink.git", + "homepage": "https://github.com/zhiyelee/graceful-readlink", + "bugs": "https://github.com/zhiyelee/graceful-readlink/issues", + "keywords": [ + "fs.readlink", + "readlink" + ], + "author": "zhiyelee", + "license": "MIT", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + } +} diff --git a/node_modules/har-schema/LICENSE b/node_modules/har-schema/LICENSE new file mode 100644 index 000000000..ca55c91af --- /dev/null +++ b/node_modules/har-schema/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015, Ahmad Nassri + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/har-schema/README.md b/node_modules/har-schema/README.md new file mode 100644 index 000000000..cd0a28e1a --- /dev/null +++ b/node_modules/har-schema/README.md @@ -0,0 +1,49 @@ +# HAR Schema [![version][npm-version]][npm-url] [![License][npm-license]][license-url] + +> JSON Schema for HTTP Archive ([HAR][spec]). + +[![Build Status][travis-image]][travis-url] +[![Downloads][npm-downloads]][npm-url] +[![Code Climate][codeclimate-quality]][codeclimate-url] +[![Coverage Status][codeclimate-coverage]][codeclimate-url] +[![Dependency Status][dependencyci-image]][dependencyci-url] +[![Dependencies][david-image]][david-url] + +## Install + +```bash +npm install --only=production --save har-schema +``` + +## Usage + +Compatible with any [JSON Schema validation tool][validator]. + +---- +> :copyright: [ahmadnassri.com](https://www.ahmadnassri.com/)  ·  +> License: [ISC][license-url]  ·  +> Github: [@ahmadnassri](https://github.com/ahmadnassri)  ·  +> Twitter: [@ahmadnassri](https://twitter.com/ahmadnassri) + +[license-url]: http://choosealicense.com/licenses/isc/ + +[travis-url]: https://travis-ci.org/ahmadnassri/har-schema +[travis-image]: https://img.shields.io/travis/ahmadnassri/har-schema.svg?style=flat-square + +[npm-url]: https://www.npmjs.com/package/har-schema +[npm-license]: https://img.shields.io/npm/l/har-schema.svg?style=flat-square +[npm-version]: https://img.shields.io/npm/v/har-schema.svg?style=flat-square +[npm-downloads]: https://img.shields.io/npm/dm/har-schema.svg?style=flat-square + +[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/har-schema +[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/har-schema.svg?style=flat-square +[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/har-schema.svg?style=flat-square + +[david-url]: https://david-dm.org/ahmadnassri/har-schema +[david-image]: https://img.shields.io/david/ahmadnassri/har-schema.svg?style=flat-square + +[dependencyci-url]: https://dependencyci.com/github/ahmadnassri/har-schema +[dependencyci-image]: https://dependencyci.com/github/ahmadnassri/har-schema/badge?style=flat-square + +[spec]: https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md +[validator]: https://github.com/ahmadnassri/har-validator diff --git a/node_modules/har-schema/lib/afterRequest.json b/node_modules/har-schema/lib/afterRequest.json new file mode 100644 index 000000000..0ae5a69d9 --- /dev/null +++ b/node_modules/har-schema/lib/afterRequest.json @@ -0,0 +1,29 @@ +{ + "id": "afterRequest.json#", + "type": "object", + "optional": true, + "required": [ + "lastAccess", + "eTag", + "hitCount" + ], + "properties": { + "expires": { + "type": "string", + "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" + }, + "lastAccess": { + "type": "string", + "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" + }, + "eTag": { + "type": "string" + }, + "hitCount": { + "type": "integer" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/beforeRequest.json b/node_modules/har-schema/lib/beforeRequest.json new file mode 100644 index 000000000..20f2ca117 --- /dev/null +++ b/node_modules/har-schema/lib/beforeRequest.json @@ -0,0 +1,29 @@ +{ + "id": "beforeRequest.json#", + "type": "object", + "optional": true, + "required": [ + "lastAccess", + "eTag", + "hitCount" + ], + "properties": { + "expires": { + "type": "string", + "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" + }, + "lastAccess": { + "type": "string", + "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" + }, + "eTag": { + "type": "string" + }, + "hitCount": { + "type": "integer" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/browser.json b/node_modules/har-schema/lib/browser.json new file mode 100644 index 000000000..dd8bff4f4 --- /dev/null +++ b/node_modules/har-schema/lib/browser.json @@ -0,0 +1,19 @@ +{ + "id": "browser.json#", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/cache.json b/node_modules/har-schema/lib/cache.json new file mode 100644 index 000000000..d95e46145 --- /dev/null +++ b/node_modules/har-schema/lib/cache.json @@ -0,0 +1,20 @@ +{ + "id": "cache.json#", + "properties": { + "beforeRequest": { + "oneOf": [ + { "type": "null" }, + { "$ref": "beforeRequest.json#" } + ] + }, + "afterRequest": { + "oneOf": [ + { "type": "null" }, + { "$ref": "afterRequest.json#" } + ] + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/content.json b/node_modules/har-schema/lib/content.json new file mode 100644 index 000000000..7aece620d --- /dev/null +++ b/node_modules/har-schema/lib/content.json @@ -0,0 +1,28 @@ +{ + "id": "content.json#", + "type": "object", + "required": [ + "size", + "mimeType" + ], + "properties": { + "size": { + "type": "integer" + }, + "compression": { + "type": "integer" + }, + "mimeType": { + "type": "string" + }, + "text": { + "type": "string" + }, + "encoding": { + "type": "string" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/cookie.json b/node_modules/har-schema/lib/cookie.json new file mode 100644 index 000000000..ec1dcf175 --- /dev/null +++ b/node_modules/har-schema/lib/cookie.json @@ -0,0 +1,35 @@ +{ + "id": "cookie.json#", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "path": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "expires": { + "type": ["string", "null"], + "format": "date-time" + }, + "httpOnly": { + "type": "boolean" + }, + "secure": { + "type": "boolean" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/creator.json b/node_modules/har-schema/lib/creator.json new file mode 100644 index 000000000..003a06aee --- /dev/null +++ b/node_modules/har-schema/lib/creator.json @@ -0,0 +1,19 @@ +{ + "id": "creator.json#", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/entry.json b/node_modules/har-schema/lib/entry.json new file mode 100644 index 000000000..d97a8f224 --- /dev/null +++ b/node_modules/har-schema/lib/entry.json @@ -0,0 +1,52 @@ +{ + "id": "entry.json#", + "type": "object", + "optional": true, + "required": [ + "startedDateTime", + "time", + "request", + "response", + "cache", + "timings" + ], + "properties": { + "pageref": { + "type": "string" + }, + "startedDateTime": { + "type": "string", + "format": "date-time", + "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))" + }, + "time": { + "type": "number", + "min": 0 + }, + "request": { + "$ref": "request.json#" + }, + "response": { + "$ref": "response.json#" + }, + "cache": { + "$ref": "cache.json#" + }, + "timings": { + "$ref": "timings.json#" + }, + "serverIPAddress": { + "type": "string", + "oneOf": [ + { "format": "ipv4" }, + { "format": "ipv6" } + ] + }, + "connection": { + "type": "string" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/har.json b/node_modules/har-schema/lib/har.json new file mode 100644 index 000000000..faeadede2 --- /dev/null +++ b/node_modules/har-schema/lib/har.json @@ -0,0 +1,12 @@ +{ + "id": "har.json#", + "type": "object", + "required": [ + "log" + ], + "properties": { + "log": { + "$ref": "log.json#" + } + } +} diff --git a/node_modules/har-schema/lib/header.json b/node_modules/har-schema/lib/header.json new file mode 100644 index 000000000..2b1704075 --- /dev/null +++ b/node_modules/har-schema/lib/header.json @@ -0,0 +1,19 @@ +{ + "id": "header.json#", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/index.js b/node_modules/har-schema/lib/index.js new file mode 100644 index 000000000..244c08e04 --- /dev/null +++ b/node_modules/har-schema/lib/index.js @@ -0,0 +1,22 @@ +'use strict' + +module.exports = { + afterRequest: require('./afterRequest.json'), + beforeRequest: require('./beforeRequest.json'), + browser: require('./browser.json'), + cache: require('./cache.json'), + content: require('./content.json'), + cookie: require('./cookie.json'), + creator: require('./creator.json'), + entry: require('./entry.json'), + har: require('./har.json'), + header: require('./header.json'), + log: require('./log.json'), + page: require('./page.json'), + pageTimings: require('./pageTimings.json'), + postData: require('./postData.json'), + query: require('./query.json'), + request: require('./request.json'), + response: require('./response.json'), + timings: require('./timings.json') +} diff --git a/node_modules/har-schema/lib/log.json b/node_modules/har-schema/lib/log.json new file mode 100644 index 000000000..402e9b459 --- /dev/null +++ b/node_modules/har-schema/lib/log.json @@ -0,0 +1,35 @@ +{ + "id": "log.json#", + "type": "object", + "required": [ + "version", + "creator", + "entries" + ], + "properties": { + "version": { + "type": "string" + }, + "creator": { + "$ref": "creator.json#" + }, + "browser": { + "$ref": "browser.json#" + }, + "pages": { + "type": "array", + "items": { + "$ref": "page.json#" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "entry.json#" + } + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/page.json b/node_modules/har-schema/lib/page.json new file mode 100644 index 000000000..0a9ddb0c1 --- /dev/null +++ b/node_modules/har-schema/lib/page.json @@ -0,0 +1,31 @@ +{ + "id": "page.json#", + "type": "object", + "optional": true, + "required": [ + "startedDateTime", + "id", + "title", + "pageTimings" + ], + "properties": { + "startedDateTime": { + "type": "string", + "format": "date-time", + "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))" + }, + "id": { + "type": "string", + "unique": true + }, + "title": { + "type": "string" + }, + "pageTimings": { + "$ref": "pageTimings.json#" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/pageTimings.json b/node_modules/har-schema/lib/pageTimings.json new file mode 100644 index 000000000..5fd6cb39e --- /dev/null +++ b/node_modules/har-schema/lib/pageTimings.json @@ -0,0 +1,17 @@ +{ + "id": "pageTimings.json#", + "type": "object", + "properties": { + "onContentLoad": { + "type": "number", + "min": -1 + }, + "onLoad": { + "type": "number", + "min": -1 + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/postData.json b/node_modules/har-schema/lib/postData.json new file mode 100644 index 000000000..9f86a7210 --- /dev/null +++ b/node_modules/har-schema/lib/postData.json @@ -0,0 +1,42 @@ +{ + "id": "postData.json#", + "type": "object", + "optional": true, + "required": [ + "mimeType" + ], + "properties": { + "mimeType": { + "type": "string" + }, + "text": { + "type": "string" + }, + "params": { + "type": "array", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "contentType": { + "type": "string" + }, + "comment": { + "type": "string" + } + } + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/query.json b/node_modules/har-schema/lib/query.json new file mode 100644 index 000000000..fa1b8af4b --- /dev/null +++ b/node_modules/har-schema/lib/query.json @@ -0,0 +1,19 @@ +{ + "id": "query.json#", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/request.json b/node_modules/har-schema/lib/request.json new file mode 100644 index 000000000..06435d380 --- /dev/null +++ b/node_modules/har-schema/lib/request.json @@ -0,0 +1,56 @@ +{ + "id": "request.json#", + "type": "object", + "required": [ + "method", + "url", + "httpVersion", + "cookies", + "headers", + "queryString", + "headersSize", + "bodySize" + ], + "properties": { + "method": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "httpVersion": { + "type": "string" + }, + "cookies": { + "type": "array", + "items": { + "$ref": "cookie.json#" + } + }, + "headers": { + "type": "array", + "items": { + "$ref": "header.json#" + } + }, + "queryString": { + "type": "array", + "items": { + "$ref": "query.json#" + } + }, + "postData": { + "$ref": "postData.json#" + }, + "headersSize": { + "type": "integer" + }, + "bodySize": { + "type": "integer" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/response.json b/node_modules/har-schema/lib/response.json new file mode 100644 index 000000000..f27c397d7 --- /dev/null +++ b/node_modules/har-schema/lib/response.json @@ -0,0 +1,53 @@ +{ + "id": "response.json#", + "type": "object", + "required": [ + "status", + "statusText", + "httpVersion", + "cookies", + "headers", + "content", + "redirectURL", + "headersSize", + "bodySize" + ], + "properties": { + "status": { + "type": "integer" + }, + "statusText": { + "type": "string" + }, + "httpVersion": { + "type": "string" + }, + "cookies": { + "type": "array", + "items": { + "$ref": "cookie.json#" + } + }, + "headers": { + "type": "array", + "items": { + "$ref": "header.json#" + } + }, + "content": { + "$ref": "content.json#" + }, + "redirectURL": { + "type": "string" + }, + "headersSize": { + "type": "integer" + }, + "bodySize": { + "type": "integer" + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/lib/timings.json b/node_modules/har-schema/lib/timings.json new file mode 100644 index 000000000..2055d09e8 --- /dev/null +++ b/node_modules/har-schema/lib/timings.json @@ -0,0 +1,41 @@ +{ + "id": "timings.json#", + "required": [ + "send", + "wait", + "receive" + ], + "properties": { + "dns": { + "type": "number", + "min": -1 + }, + "connect": { + "type": "number", + "min": -1 + }, + "blocked": { + "type": "number", + "min": -1 + }, + "send": { + "type": "number", + "min": -1 + }, + "wait": { + "type": "number", + "min": -1 + }, + "receive": { + "type": "number", + "min": -1 + }, + "ssl": { + "type": "number", + "min": -1 + }, + "comment": { + "type": "string" + } + } +} diff --git a/node_modules/har-schema/package.json b/node_modules/har-schema/package.json new file mode 100644 index 000000000..385cf9849 --- /dev/null +++ b/node_modules/har-schema/package.json @@ -0,0 +1,54 @@ +{ + "version": "1.0.5", + "name": "har-schema", + "description": "JSON Schema for HTTP Archive (HAR)", + "author": "Ahmad Nassri (https://www.ahmadnassri.com/)", + "contributors": [ + "Evgeny Poberezkin " + ], + "homepage": "https://github.com/ahmadnassri/har-schema", + "repository": { + "type": "git", + "url": "https://github.com/ahmadnassri/har-schema.git" + }, + "license": "ISC", + "main": "lib/index.js", + "keywords": [ + "har", + "http", + "archive", + "JSON", + "schema", + "JSON-schema" + ], + "engines": { + "node": ">=4" + }, + "files": [ + "lib" + ], + "bugs": { + "url": "https://github.com/ahmadnassri/har-schema/issues" + }, + "scripts": { + "test": "tap test --reporter spec", + "pretest": "snazzy && echint", + "coverage": "tap test --reporter silent --coverage", + "codeclimate": "tap --coverage-report=text-lcov | codeclimate-test-reporter", + "semantic-release": "semantic-release pre && npm publish && semantic-release post" + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "devDependencies": { + "ajv": "^4.9.1", + "codeclimate-test-reporter": "^0.4.0", + "cz-conventional-changelog": "^1.2.0", + "echint": "^2.1.0", + "semantic-release": "^6.3.2", + "snazzy": "^5.0.0", + "tap": "^8.0.1" + } +} \ No newline at end of file diff --git a/node_modules/har-validator/LICENSE b/node_modules/har-validator/LICENSE new file mode 100644 index 000000000..ca55c91af --- /dev/null +++ b/node_modules/har-validator/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015, Ahmad Nassri + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/har-validator/README.md b/node_modules/har-validator/README.md new file mode 100644 index 000000000..77ff93501 --- /dev/null +++ b/node_modules/har-validator/README.md @@ -0,0 +1,75 @@ +# HAR Validator [![version][npm-version]][npm-url] [![License][npm-license]][license-url] + +> Extremely fast HTTP Archive ([HAR](https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md)) validator using JSON Schema. + +[![Build Status][travis-image]][travis-url] +[![Downloads][npm-downloads]][npm-url] +[![Code Climate][codeclimate-quality]][codeclimate-url] +[![Coverage Status][codeclimate-coverage]][codeclimate-url] +[![Dependency Status][dependencyci-image]][dependencyci-url] +[![Dependencies][david-image]][david-url] + +## Install + +```bash +npm install --only=production --save har-validator +``` + +## Usage + +I recommend using an optimized build matching your Node.js environment version, otherwise, the standard `require` would work just fine with any version of Node `>= v4.0` . + +```js +/* + * Node 7 + */ +const validate = require('har-validator/lib/node7') + +/* + * Node 6 + */ +const validate = require('har-validator/lib/node6') + +/* + * Node 4 (Default) + */ +var validate = require('har-validator') +``` + +## CLI Usage + +Please refer to [`har-cli`](https://github.com/ahmadnassri/har-cli) for more info. + +## API + +**Note**: as of [`v2.0.0`](https://github.com/ahmadnassri/har-validator/releases/tag/v2.0.0) this module defaults to Promise based API. *For backward comptability with `v1.x` an [async/callback API](docs/async.md) is also provided* + +- [async API](docs/async.md) +- [callback API](docs/async.md) +- [Promise API](docs/promise.md) *(default)* + +---- +> :copyright: [ahmadnassri.com](https://www.ahmadnassri.com/)  ·  +> License: [ISC][license-url]  ·  +> Github: [@ahmadnassri](https://github.com/ahmadnassri)  ·  +> Twitter: [@ahmadnassri](https://twitter.com/ahmadnassri) + +[license-url]: http://choosealicense.com/licenses/isc/ + +[travis-url]: https://travis-ci.org/ahmadnassri/har-validator +[travis-image]: https://img.shields.io/travis/ahmadnassri/har-validator.svg?style=flat-square + +[npm-url]: https://www.npmjs.com/package/har-validator +[npm-license]: https://img.shields.io/npm/l/har-validator.svg?style=flat-square +[npm-version]: https://img.shields.io/npm/v/har-validator.svg?style=flat-square +[npm-downloads]: https://img.shields.io/npm/dm/har-validator.svg?style=flat-square + +[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/har-validator +[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/har-validator.svg?style=flat-square +[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/har-validator.svg?style=flat-square + +[david-url]: https://david-dm.org/ahmadnassri/har-validator +[david-image]: https://img.shields.io/david/ahmadnassri/har-validator.svg?style=flat-square + +[dependencyci-url]: https://dependencyci.com/github/ahmadnassri/har-validator +[dependencyci-image]: https://dependencyci.com/github/ahmadnassri/har-validator/badge?style=flat-square diff --git a/node_modules/har-validator/lib/browser/async.js b/node_modules/har-validator/lib/browser/async.js new file mode 100644 index 000000000..676356aaf --- /dev/null +++ b/node_modules/har-validator/lib/browser/async.js @@ -0,0 +1,96 @@ +import * as schemas from 'har-schema'; +import Ajv from 'ajv'; +import HARError from './error'; + +let ajv; + +export function validate(name, data = {}, next) { + // validator config + ajv = ajv || new Ajv({ + allErrors: true, + schemas: schemas + }); + + let validate = ajv.getSchema(name + '.json'); + + let valid = validate(data); + + // callback? + if (typeof next === 'function') { + return next(!valid ? new HARError(validate.errors) : null, valid); + } + + return valid; +} + +export function afterRequest(data, next) { + return validate('afterRequest', data, next); +} + +export function beforeRequest(data, next) { + return validate('beforeRequest', data, next); +} + +export function browser(data, next) { + return validate('browser', data, next); +} + +export function cache(data, next) { + return validate('cache', data, next); +} + +export function content(data, next) { + return validate('content', data, next); +} + +export function cookie(data, next) { + return validate('cookie', data, next); +} + +export function creator(data, next) { + return validate('creator', data, next); +} + +export function entry(data, next) { + return validate('entry', data, next); +} + +export function har(data, next) { + return validate('har', data, next); +} + +export function header(data, next) { + return validate('header', data, next); +} + +export function log(data, next) { + return validate('log', data, next); +} + +export function page(data, next) { + return validate('page', data, next); +} + +export function pageTimings(data, next) { + return validate('pageTimings', data, next); +} + +export function postData(data, next) { + return validate('postData', data, next); +} + +export function query(data, next) { + return validate('query', data, next); +} + +export function request(data, next) { + return validate('request', data, next); +} + +export function response(data, next) { + return validate('response', data, next); +} + +export function timings(data, next) { + return validate('timings', data, next); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/browser/error.js b/node_modules/har-validator/lib/browser/error.js new file mode 100644 index 000000000..f49fcf231 --- /dev/null +++ b/node_modules/har-validator/lib/browser/error.js @@ -0,0 +1,15 @@ +export default function HARError(errors) { + let message = 'validation failed'; + + this.name = 'HARError'; + this.message = message; + this.errors = errors; + + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error(message).stack; + } +} + +HARError.prototype = Error.prototype; \ No newline at end of file diff --git a/node_modules/har-validator/lib/browser/promise.js b/node_modules/har-validator/lib/browser/promise.js new file mode 100644 index 000000000..bc1b18c3f --- /dev/null +++ b/node_modules/har-validator/lib/browser/promise.js @@ -0,0 +1,93 @@ +import * as schemas from 'har-schema'; +import Ajv from 'ajv'; +import HARError from './error'; + +let ajv; + +export function validate(name, data = {}) { + // validator config + ajv = ajv || new Ajv({ + allErrors: true, + schemas: schemas + }); + + let validate = ajv.getSchema(name + '.json'); + + return new Promise((resolve, reject) => { + let valid = validate(data); + + !valid ? reject(new HARError(validate.errors)) : resolve(data); + }); +} + +export function afterRequest(data) { + return validate('afterRequest', data); +} + +export function beforeRequest(data) { + return validate('beforeRequest', data); +} + +export function browser(data) { + return validate('browser', data); +} + +export function cache(data) { + return validate('cache', data); +} + +export function content(data) { + return validate('content', data); +} + +export function cookie(data) { + return validate('cookie', data); +} + +export function creator(data) { + return validate('creator', data); +} + +export function entry(data) { + return validate('entry', data); +} + +export function har(data) { + return validate('har', data); +} + +export function header(data) { + return validate('header', data); +} + +export function log(data) { + return validate('log', data); +} + +export function page(data) { + return validate('page', data); +} + +export function pageTimings(data) { + return validate('pageTimings', data); +} + +export function postData(data) { + return validate('postData', data); +} + +export function query(data) { + return validate('query', data); +} + +export function request(data) { + return validate('request', data); +} + +export function response(data) { + return validate('response', data); +} + +export function timings(data) { + return validate('timings', data); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/node4/async.js b/node_modules/har-validator/lib/node4/async.js new file mode 100644 index 000000000..e9c485430 --- /dev/null +++ b/node_modules/har-validator/lib/node4/async.js @@ -0,0 +1,136 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validate = validate; +exports.afterRequest = afterRequest; +exports.beforeRequest = beforeRequest; +exports.browser = browser; +exports.cache = cache; +exports.content = content; +exports.cookie = cookie; +exports.creator = creator; +exports.entry = entry; +exports.har = har; +exports.header = header; +exports.log = log; +exports.page = page; +exports.pageTimings = pageTimings; +exports.postData = postData; +exports.query = query; +exports.request = request; +exports.response = response; +exports.timings = timings; + +var _harSchema = require('har-schema'); + +var schemas = _interopRequireWildcard(_harSchema); + +var _ajv = require('ajv'); + +var _ajv2 = _interopRequireDefault(_ajv); + +var _error = require('./error'); + +var _error2 = _interopRequireDefault(_error); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var ajv = void 0; + +function validate(name) { + var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var next = arguments[2]; + + // validator config + ajv = ajv || new _ajv2.default({ + allErrors: true, + schemas: schemas + }); + + var validate = ajv.getSchema(name + '.json'); + + var valid = validate(data); + + // callback? + if (typeof next === 'function') { + return next(!valid ? new _error2.default(validate.errors) : null, valid); + } + + return valid; +} + +function afterRequest(data, next) { + return validate('afterRequest', data, next); +} + +function beforeRequest(data, next) { + return validate('beforeRequest', data, next); +} + +function browser(data, next) { + return validate('browser', data, next); +} + +function cache(data, next) { + return validate('cache', data, next); +} + +function content(data, next) { + return validate('content', data, next); +} + +function cookie(data, next) { + return validate('cookie', data, next); +} + +function creator(data, next) { + return validate('creator', data, next); +} + +function entry(data, next) { + return validate('entry', data, next); +} + +function har(data, next) { + return validate('har', data, next); +} + +function header(data, next) { + return validate('header', data, next); +} + +function log(data, next) { + return validate('log', data, next); +} + +function page(data, next) { + return validate('page', data, next); +} + +function pageTimings(data, next) { + return validate('pageTimings', data, next); +} + +function postData(data, next) { + return validate('postData', data, next); +} + +function query(data, next) { + return validate('query', data, next); +} + +function request(data, next) { + return validate('request', data, next); +} + +function response(data, next) { + return validate('response', data, next); +} + +function timings(data, next) { + return validate('timings', data, next); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/node4/error.js b/node_modules/har-validator/lib/node4/error.js new file mode 100644 index 000000000..0ae01bd18 --- /dev/null +++ b/node_modules/har-validator/lib/node4/error.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = HARError; +function HARError(errors) { + var message = 'validation failed'; + + this.name = 'HARError'; + this.message = message; + this.errors = errors; + + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error(message).stack; + } +} + +HARError.prototype = Error.prototype; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/har-validator/lib/node4/promise.js b/node_modules/har-validator/lib/node4/promise.js new file mode 100644 index 000000000..d37ca52ad --- /dev/null +++ b/node_modules/har-validator/lib/node4/promise.js @@ -0,0 +1,132 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validate = validate; +exports.afterRequest = afterRequest; +exports.beforeRequest = beforeRequest; +exports.browser = browser; +exports.cache = cache; +exports.content = content; +exports.cookie = cookie; +exports.creator = creator; +exports.entry = entry; +exports.har = har; +exports.header = header; +exports.log = log; +exports.page = page; +exports.pageTimings = pageTimings; +exports.postData = postData; +exports.query = query; +exports.request = request; +exports.response = response; +exports.timings = timings; + +var _harSchema = require('har-schema'); + +var schemas = _interopRequireWildcard(_harSchema); + +var _ajv = require('ajv'); + +var _ajv2 = _interopRequireDefault(_ajv); + +var _error = require('./error'); + +var _error2 = _interopRequireDefault(_error); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var ajv = void 0; + +function validate(name) { + var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + // validator config + ajv = ajv || new _ajv2.default({ + allErrors: true, + schemas: schemas + }); + + var validate = ajv.getSchema(name + '.json'); + + return new Promise(function (resolve, reject) { + var valid = validate(data); + + !valid ? reject(new _error2.default(validate.errors)) : resolve(data); + }); +} + +function afterRequest(data) { + return validate('afterRequest', data); +} + +function beforeRequest(data) { + return validate('beforeRequest', data); +} + +function browser(data) { + return validate('browser', data); +} + +function cache(data) { + return validate('cache', data); +} + +function content(data) { + return validate('content', data); +} + +function cookie(data) { + return validate('cookie', data); +} + +function creator(data) { + return validate('creator', data); +} + +function entry(data) { + return validate('entry', data); +} + +function har(data) { + return validate('har', data); +} + +function header(data) { + return validate('header', data); +} + +function log(data) { + return validate('log', data); +} + +function page(data) { + return validate('page', data); +} + +function pageTimings(data) { + return validate('pageTimings', data); +} + +function postData(data) { + return validate('postData', data); +} + +function query(data) { + return validate('query', data); +} + +function request(data) { + return validate('request', data); +} + +function response(data) { + return validate('response', data); +} + +function timings(data) { + return validate('timings', data); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/node6/async.js b/node_modules/har-validator/lib/node6/async.js new file mode 100644 index 000000000..e707043ad --- /dev/null +++ b/node_modules/har-validator/lib/node6/async.js @@ -0,0 +1,133 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validate = validate; +exports.afterRequest = afterRequest; +exports.beforeRequest = beforeRequest; +exports.browser = browser; +exports.cache = cache; +exports.content = content; +exports.cookie = cookie; +exports.creator = creator; +exports.entry = entry; +exports.har = har; +exports.header = header; +exports.log = log; +exports.page = page; +exports.pageTimings = pageTimings; +exports.postData = postData; +exports.query = query; +exports.request = request; +exports.response = response; +exports.timings = timings; + +var _harSchema = require('har-schema'); + +var schemas = _interopRequireWildcard(_harSchema); + +var _ajv = require('ajv'); + +var _ajv2 = _interopRequireDefault(_ajv); + +var _error = require('./error'); + +var _error2 = _interopRequireDefault(_error); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +let ajv; + +function validate(name, data = {}, next) { + // validator config + ajv = ajv || new _ajv2.default({ + allErrors: true, + schemas: schemas + }); + + let validate = ajv.getSchema(name + '.json'); + + let valid = validate(data); + + // callback? + if (typeof next === 'function') { + return next(!valid ? new _error2.default(validate.errors) : null, valid); + } + + return valid; +} + +function afterRequest(data, next) { + return validate('afterRequest', data, next); +} + +function beforeRequest(data, next) { + return validate('beforeRequest', data, next); +} + +function browser(data, next) { + return validate('browser', data, next); +} + +function cache(data, next) { + return validate('cache', data, next); +} + +function content(data, next) { + return validate('content', data, next); +} + +function cookie(data, next) { + return validate('cookie', data, next); +} + +function creator(data, next) { + return validate('creator', data, next); +} + +function entry(data, next) { + return validate('entry', data, next); +} + +function har(data, next) { + return validate('har', data, next); +} + +function header(data, next) { + return validate('header', data, next); +} + +function log(data, next) { + return validate('log', data, next); +} + +function page(data, next) { + return validate('page', data, next); +} + +function pageTimings(data, next) { + return validate('pageTimings', data, next); +} + +function postData(data, next) { + return validate('postData', data, next); +} + +function query(data, next) { + return validate('query', data, next); +} + +function request(data, next) { + return validate('request', data, next); +} + +function response(data, next) { + return validate('response', data, next); +} + +function timings(data, next) { + return validate('timings', data, next); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/node6/error.js b/node_modules/har-validator/lib/node6/error.js new file mode 100644 index 000000000..4149ed737 --- /dev/null +++ b/node_modules/har-validator/lib/node6/error.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = HARError; +function HARError(errors) { + let message = 'validation failed'; + + this.name = 'HARError'; + this.message = message; + this.errors = errors; + + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error(message).stack; + } +} + +HARError.prototype = Error.prototype; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/har-validator/lib/node6/promise.js b/node_modules/har-validator/lib/node6/promise.js new file mode 100644 index 000000000..be7017ae0 --- /dev/null +++ b/node_modules/har-validator/lib/node6/promise.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validate = validate; +exports.afterRequest = afterRequest; +exports.beforeRequest = beforeRequest; +exports.browser = browser; +exports.cache = cache; +exports.content = content; +exports.cookie = cookie; +exports.creator = creator; +exports.entry = entry; +exports.har = har; +exports.header = header; +exports.log = log; +exports.page = page; +exports.pageTimings = pageTimings; +exports.postData = postData; +exports.query = query; +exports.request = request; +exports.response = response; +exports.timings = timings; + +var _harSchema = require('har-schema'); + +var schemas = _interopRequireWildcard(_harSchema); + +var _ajv = require('ajv'); + +var _ajv2 = _interopRequireDefault(_ajv); + +var _error = require('./error'); + +var _error2 = _interopRequireDefault(_error); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +let ajv; + +function validate(name, data = {}) { + // validator config + ajv = ajv || new _ajv2.default({ + allErrors: true, + schemas: schemas + }); + + let validate = ajv.getSchema(name + '.json'); + + return new Promise((resolve, reject) => { + let valid = validate(data); + + !valid ? reject(new _error2.default(validate.errors)) : resolve(data); + }); +} + +function afterRequest(data) { + return validate('afterRequest', data); +} + +function beforeRequest(data) { + return validate('beforeRequest', data); +} + +function browser(data) { + return validate('browser', data); +} + +function cache(data) { + return validate('cache', data); +} + +function content(data) { + return validate('content', data); +} + +function cookie(data) { + return validate('cookie', data); +} + +function creator(data) { + return validate('creator', data); +} + +function entry(data) { + return validate('entry', data); +} + +function har(data) { + return validate('har', data); +} + +function header(data) { + return validate('header', data); +} + +function log(data) { + return validate('log', data); +} + +function page(data) { + return validate('page', data); +} + +function pageTimings(data) { + return validate('pageTimings', data); +} + +function postData(data) { + return validate('postData', data); +} + +function query(data) { + return validate('query', data); +} + +function request(data) { + return validate('request', data); +} + +function response(data) { + return validate('response', data); +} + +function timings(data) { + return validate('timings', data); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/node7/async.js b/node_modules/har-validator/lib/node7/async.js new file mode 100644 index 000000000..e707043ad --- /dev/null +++ b/node_modules/har-validator/lib/node7/async.js @@ -0,0 +1,133 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validate = validate; +exports.afterRequest = afterRequest; +exports.beforeRequest = beforeRequest; +exports.browser = browser; +exports.cache = cache; +exports.content = content; +exports.cookie = cookie; +exports.creator = creator; +exports.entry = entry; +exports.har = har; +exports.header = header; +exports.log = log; +exports.page = page; +exports.pageTimings = pageTimings; +exports.postData = postData; +exports.query = query; +exports.request = request; +exports.response = response; +exports.timings = timings; + +var _harSchema = require('har-schema'); + +var schemas = _interopRequireWildcard(_harSchema); + +var _ajv = require('ajv'); + +var _ajv2 = _interopRequireDefault(_ajv); + +var _error = require('./error'); + +var _error2 = _interopRequireDefault(_error); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +let ajv; + +function validate(name, data = {}, next) { + // validator config + ajv = ajv || new _ajv2.default({ + allErrors: true, + schemas: schemas + }); + + let validate = ajv.getSchema(name + '.json'); + + let valid = validate(data); + + // callback? + if (typeof next === 'function') { + return next(!valid ? new _error2.default(validate.errors) : null, valid); + } + + return valid; +} + +function afterRequest(data, next) { + return validate('afterRequest', data, next); +} + +function beforeRequest(data, next) { + return validate('beforeRequest', data, next); +} + +function browser(data, next) { + return validate('browser', data, next); +} + +function cache(data, next) { + return validate('cache', data, next); +} + +function content(data, next) { + return validate('content', data, next); +} + +function cookie(data, next) { + return validate('cookie', data, next); +} + +function creator(data, next) { + return validate('creator', data, next); +} + +function entry(data, next) { + return validate('entry', data, next); +} + +function har(data, next) { + return validate('har', data, next); +} + +function header(data, next) { + return validate('header', data, next); +} + +function log(data, next) { + return validate('log', data, next); +} + +function page(data, next) { + return validate('page', data, next); +} + +function pageTimings(data, next) { + return validate('pageTimings', data, next); +} + +function postData(data, next) { + return validate('postData', data, next); +} + +function query(data, next) { + return validate('query', data, next); +} + +function request(data, next) { + return validate('request', data, next); +} + +function response(data, next) { + return validate('response', data, next); +} + +function timings(data, next) { + return validate('timings', data, next); +} \ No newline at end of file diff --git a/node_modules/har-validator/lib/node7/error.js b/node_modules/har-validator/lib/node7/error.js new file mode 100644 index 000000000..4149ed737 --- /dev/null +++ b/node_modules/har-validator/lib/node7/error.js @@ -0,0 +1,22 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = HARError; +function HARError(errors) { + let message = 'validation failed'; + + this.name = 'HARError'; + this.message = message; + this.errors = errors; + + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error(message).stack; + } +} + +HARError.prototype = Error.prototype; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/har-validator/lib/node7/promise.js b/node_modules/har-validator/lib/node7/promise.js new file mode 100644 index 000000000..be7017ae0 --- /dev/null +++ b/node_modules/har-validator/lib/node7/promise.js @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.validate = validate; +exports.afterRequest = afterRequest; +exports.beforeRequest = beforeRequest; +exports.browser = browser; +exports.cache = cache; +exports.content = content; +exports.cookie = cookie; +exports.creator = creator; +exports.entry = entry; +exports.har = har; +exports.header = header; +exports.log = log; +exports.page = page; +exports.pageTimings = pageTimings; +exports.postData = postData; +exports.query = query; +exports.request = request; +exports.response = response; +exports.timings = timings; + +var _harSchema = require('har-schema'); + +var schemas = _interopRequireWildcard(_harSchema); + +var _ajv = require('ajv'); + +var _ajv2 = _interopRequireDefault(_ajv); + +var _error = require('./error'); + +var _error2 = _interopRequireDefault(_error); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +let ajv; + +function validate(name, data = {}) { + // validator config + ajv = ajv || new _ajv2.default({ + allErrors: true, + schemas: schemas + }); + + let validate = ajv.getSchema(name + '.json'); + + return new Promise((resolve, reject) => { + let valid = validate(data); + + !valid ? reject(new _error2.default(validate.errors)) : resolve(data); + }); +} + +function afterRequest(data) { + return validate('afterRequest', data); +} + +function beforeRequest(data) { + return validate('beforeRequest', data); +} + +function browser(data) { + return validate('browser', data); +} + +function cache(data) { + return validate('cache', data); +} + +function content(data) { + return validate('content', data); +} + +function cookie(data) { + return validate('cookie', data); +} + +function creator(data) { + return validate('creator', data); +} + +function entry(data) { + return validate('entry', data); +} + +function har(data) { + return validate('har', data); +} + +function header(data) { + return validate('header', data); +} + +function log(data) { + return validate('log', data); +} + +function page(data) { + return validate('page', data); +} + +function pageTimings(data) { + return validate('pageTimings', data); +} + +function postData(data) { + return validate('postData', data); +} + +function query(data) { + return validate('query', data); +} + +function request(data) { + return validate('request', data); +} + +function response(data) { + return validate('response', data); +} + +function timings(data) { + return validate('timings', data); +} \ No newline at end of file diff --git a/node_modules/har-validator/package.json b/node_modules/har-validator/package.json new file mode 100644 index 000000000..254a968d0 --- /dev/null +++ b/node_modules/har-validator/package.json @@ -0,0 +1,72 @@ +{ + "version": "4.2.1", + "name": "har-validator", + "description": "Extremely fast HTTP Archive (HAR) validator using JSON Schema", + "author": "Ahmad Nassri (https://www.ahmadnassri.com/)", + "homepage": "https://github.com/ahmadnassri/har-validator", + "repository": { + "type": "git", + "url": "https://github.com/ahmadnassri/har-validator.git" + }, + "license": "ISC", + "main": "lib/node4/promise.js", + "keywords": [ + "har", + "cli", + "ajv", + "http", + "archive", + "validate", + "validator" + ], + "engines": { + "node": ">=4" + }, + "files": [ + "lib", + "src" + ], + "bugs": { + "url": "https://github.com/ahmadnassri/har-validator/issues" + }, + "scripts": { + "compile": "babel -q src", + "test": "BABEL_ENV=test tap test --reporter spec --node-arg=--require --node-arg=babel-register", + "test-one": "BABEL_ENV=test tap --reporter spec --node-arg=--require --node-arg=babel-register", + "pretest": "snazzy && echint", + "coverage": "BABEL_ENV=test tap test --reporter silent --coverage --nyc-arg=--require --nyc-arg=babel-register", + "codeclimate": "BABEL_ENV=test tap --coverage-report=text-lcov | codeclimate-test-reporter", + "semantic-release": "semantic-release pre && npm publish && semantic-release post" + }, + "standard": { + "ignore": [ + "lib/**" + ] + }, + "echint": { + "ignore": [ + "lib/**" + ] + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "devDependencies": { + "babel-cli": "^6.18.0", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-preset-env": "1.1.10", + "babel-register": "^6.18.0", + "codeclimate-test-reporter": "^0.4.0", + "cz-conventional-changelog": "^1.2.0", + "echint": "^4.0.1", + "semantic-release": "^6.3.2", + "snazzy": "^6.0.0", + "tap": "^10.0.0" + }, + "dependencies": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } +} \ No newline at end of file diff --git a/node_modules/har-validator/src/async.js b/node_modules/har-validator/src/async.js new file mode 100644 index 000000000..5b9874111 --- /dev/null +++ b/node_modules/har-validator/src/async.js @@ -0,0 +1,96 @@ +import * as schemas from 'har-schema' +import Ajv from 'ajv' +import HARError from './error' + +let ajv + +export function validate (name, data = {}, next) { + // validator config + ajv = ajv || new Ajv({ + allErrors: true, + schemas: schemas + }) + + let validate = ajv.getSchema(name + '.json') + + let valid = validate(data) + + // callback? + if (typeof next === 'function') { + return next(!valid ? new HARError(validate.errors) : null, valid) + } + + return valid +} + +export function afterRequest (data, next) { + return validate('afterRequest', data, next) +} + +export function beforeRequest (data, next) { + return validate('beforeRequest', data, next) +} + +export function browser (data, next) { + return validate('browser', data, next) +} + +export function cache (data, next) { + return validate('cache', data, next) +} + +export function content (data, next) { + return validate('content', data, next) +} + +export function cookie (data, next) { + return validate('cookie', data, next) +} + +export function creator (data, next) { + return validate('creator', data, next) +} + +export function entry (data, next) { + return validate('entry', data, next) +} + +export function har (data, next) { + return validate('har', data, next) +} + +export function header (data, next) { + return validate('header', data, next) +} + +export function log (data, next) { + return validate('log', data, next) +} + +export function page (data, next) { + return validate('page', data, next) +} + +export function pageTimings (data, next) { + return validate('pageTimings', data, next) +} + +export function postData (data, next) { + return validate('postData', data, next) +} + +export function query (data, next) { + return validate('query', data, next) +} + +export function request (data, next) { + return validate('request', data, next) +} + +export function response (data, next) { + return validate('response', data, next) +} + +export function timings (data, next) { + return validate('timings', data, next) +} diff --git a/node_modules/har-validator/src/error.js b/node_modules/har-validator/src/error.js new file mode 100644 index 000000000..f0707eb35 --- /dev/null +++ b/node_modules/har-validator/src/error.js @@ -0,0 +1,15 @@ +export default function HARError (errors) { + let message = 'validation failed' + + this.name = 'HARError' + this.message = message + this.errors = errors + + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor) + } else { + this.stack = (new Error(message)).stack + } +} + +HARError.prototype = Error.prototype diff --git a/node_modules/har-validator/src/promise.js b/node_modules/har-validator/src/promise.js new file mode 100644 index 000000000..57b067997 --- /dev/null +++ b/node_modules/har-validator/src/promise.js @@ -0,0 +1,93 @@ +import * as schemas from 'har-schema' +import Ajv from 'ajv' +import HARError from './error' + +let ajv + +export function validate (name, data = {}) { + // validator config + ajv = ajv || new Ajv({ + allErrors: true, + schemas: schemas + }) + + let validate = ajv.getSchema(name + '.json') + + return new Promise((resolve, reject) => { + let valid = validate(data) + + !valid ? reject(new HARError(validate.errors)) : resolve(data) + }) +} + +export function afterRequest (data) { + return validate('afterRequest', data) +} + +export function beforeRequest (data) { + return validate('beforeRequest', data) +} + +export function browser (data) { + return validate('browser', data) +} + +export function cache (data) { + return validate('cache', data) +} + +export function content (data) { + return validate('content', data) +} + +export function cookie (data) { + return validate('cookie', data) +} + +export function creator (data) { + return validate('creator', data) +} + +export function entry (data) { + return validate('entry', data) +} + +export function har (data) { + return validate('har', data) +} + +export function header (data) { + return validate('header', data) +} + +export function log (data) { + return validate('log', data) +} + +export function page (data) { + return validate('page', data) +} + +export function pageTimings (data) { + return validate('pageTimings', data) +} + +export function postData (data) { + return validate('postData', data) +} + +export function query (data) { + return validate('query', data) +} + +export function request (data) { + return validate('request', data) +} + +export function response (data) { + return validate('response', data) +} + +export function timings (data) { + return validate('timings', data) +} diff --git a/node_modules/hawk/.npmignore b/node_modules/hawk/.npmignore new file mode 100644 index 000000000..96ed0910b --- /dev/null +++ b/node_modules/hawk/.npmignore @@ -0,0 +1,20 @@ +.idea +*.iml +npm-debug.log +dump.rdb +node_modules +components +build +results.tap +results.xml +npm-shrinkwrap.json +config.json +.DS_Store +*/.DS_Store +*/*/.DS_Store +._* +*/._* +*/*/._* +coverage.* +lib-cov + diff --git a/node_modules/hawk/.travis.yml b/node_modules/hawk/.travis.yml new file mode 100755 index 000000000..40ca59eee --- /dev/null +++ b/node_modules/hawk/.travis.yml @@ -0,0 +1,5 @@ +language: node_js + +node_js: + - 0.10 + diff --git a/node_modules/hawk/LICENSE b/node_modules/hawk/LICENSE new file mode 100755 index 000000000..788093684 --- /dev/null +++ b/node_modules/hawk/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012-2014, Eran Hammer and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + * The names of any 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 HOLDERS AND 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. + + * * * + +The complete list of contributors can be found at: https://github.com/hueniverse/hawk/graphs/contributors diff --git a/node_modules/hawk/README.md b/node_modules/hawk/README.md new file mode 100755 index 000000000..b92cd7c43 --- /dev/null +++ b/node_modules/hawk/README.md @@ -0,0 +1,634 @@ +![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png) + + **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial +HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz). + +Current version: **3.x** + +Note: 3.x and 2.x are the same exact protocol as 1.1. The version increments reflect changes in the node API. + +[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk) + +# Table of Content + +- [**Introduction**](#introduction) + - [Replay Protection](#replay-protection) + - [Usage Example](#usage-example) + - [Protocol Example](#protocol-example) + - [Payload Validation](#payload-validation) + - [Response Payload Validation](#response-payload-validation) + - [Browser Support and Considerations](#browser-support-and-considerations) +

+- [**Single URI Authorization**](#single-uri-authorization) + - [Usage Example](#bewit-usage-example) +

+- [**Security Considerations**](#security-considerations) + - [MAC Keys Transmission](#mac-keys-transmission) + - [Confidentiality of Requests](#confidentiality-of-requests) + - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers) + - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials) + - [Entropy of Keys](#entropy-of-keys) + - [Coverage Limitations](#coverage-limitations) + - [Future Time Manipulation](#future-time-manipulation) + - [Client Clock Poisoning](#client-clock-poisoning) + - [Bewit Limitations](#bewit-limitations) + - [Host Header Forgery](#host-header-forgery) +

+- [**Frequently Asked Questions**](#frequently-asked-questions) +

+- [**Implementations**](#implementations) +- [**Acknowledgements**](#acknowledgements) + +# Introduction + +**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with +partial cryptographic verification of the request and response, covering the HTTP method, request URI, host, +and optionally the request payload. + +Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of +client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme, +the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is +included in its place. + +However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of +replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less +"chattiness" (interaction with the server). + +Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because +the client and server must both have access to the key material in the clear. + +The primary design goals of this scheme are to: +* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources, +* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where + to send an authenticated request), and +* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client + failure to validate the server's identity as part of its TLS handshake. + +In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using +a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk). + +The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server, +which is beyond the scope of this module. Typically, the shared credentials are established via an initial +TLS-protected phase or derived from some other shared confidential information available to both the client +and the server. + + +## Replay Protection + +Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more +than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when +making requests. This gives the server enough information to prevent replay attacks. + +The nonce is generated by the client, and is a string unique across all requests with the same timestamp and +key identifier combination. + +The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards +are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks. +By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in +practice translates to a maximum of 2 minutes as the skew can be positive or negative). + +Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client +clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types +(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response +to a bad timestamp. + +There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a +potential attack vector). Instead, the client only uses the server's time to calculate an offset used only +for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing +the number of round trips required to authenticate the first request. + + +## Usage Example + +Server code: + +```javascript +var Http = require('http'); +var Hawk = require('hawk'); + + +// Credentials lookup function + +var credentialsFunc = function (id, callback) { + + var credentials = { + key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', + algorithm: 'sha256', + user: 'Steve' + }; + + return callback(null, credentials); +}; + +// Create HTTP server + +var handler = function (req, res) { + + // Authenticate incoming request + + Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { + + // Prepare response + + var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); + var headers = { 'Content-Type': 'text/plain' }; + + // Generate Server-Authorization response header + + var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] }); + headers['Server-Authorization'] = header; + + // Send the response back + + res.writeHead(!err ? 200 : 401, headers); + res.end(payload); + }); +}; + +// Start server + +Http.createServer(handler).listen(8000, 'example.com'); +``` + +Client code: + +```javascript +var Request = require('request'); +var Hawk = require('hawk'); + + +// Client credentials + +var credentials = { + id: 'dh37fgj492je', + key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', + algorithm: 'sha256' +} + +// Request options + +var requestOptions = { + uri: 'http://example.com:8000/resource/1?b=1&a=2', + method: 'GET', + headers: {} +}; + +// Generate Authorization request header + +var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' }); +requestOptions.headers.Authorization = header.field; + +// Send authenticated request + +Request(requestOptions, function (error, response, body) { + + // Authenticate the server's response + + var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); + + // Output results + + console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); +}); +``` + +**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local +machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method. + +```javascript +Hawk.sntp.start(); +``` + + +## Protocol Example + +The client attempts to access a protected resource without authentication, sending the following HTTP request to +the resource server: + +``` +GET /resource/1?b=1&a=2 HTTP/1.1 +Host: example.com:8000 +``` + +The resource server returns an authentication challenge. + +``` +HTTP/1.1 401 Unauthorized +WWW-Authenticate: Hawk +``` + +The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/" +server. The **Hawk** credentials issued to the client include the following attributes: + +* Key identifier: dh37fgj492je +* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn +* Algorithm: sha256 + +The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1, +1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline +character): + +``` +hawk.1.header +1353832234 +j4h3g2 +GET +/resource/1?b=1&a=2 +example.com +8000 + +some-app-ext-data + +``` + +The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string. +The result is base64-encoded to produce the request MAC: + +``` +6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE= +``` + +The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using +the HTTP `Authorization` request header field: + +``` +GET /resource/1?b=1&a=2 HTTP/1.1 +Host: example.com:8000 +Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=" +``` + +The server validates the request by calculating the request MAC again based on the request received and verifies the validity +and scope of the **Hawk** credentials. If valid, the server responds with the requested resource. + + +### Payload Validation + +**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash +using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character): +* `hawk.1.payload` +* the content-type in lowercase, without any parameters (e.g. `application/json`) +* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability) + +For example: + +* Payload: `Thank you for flying Hawk` +* Content Type: `text/plain` +* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=` + +Results in the following input to the payload hash function (newline terminated values): + +``` +hawk.1.payload +text/plain +Thank you for flying Hawk + +``` + +Which produces the following hash value: + +``` +Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= +``` + +The client constructs the normalized request string (newline terminated values): + +``` +hawk.1.header +1353832234 +j4h3g2 +POST +/resource/1?a=1&b=2 +example.com +8000 +Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= +some-app-ext-data + +``` + +Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data, +and request MAC, with the request using the HTTP `Authorization` request header field: + +``` +POST /resource/1?a=1&b=2 HTTP/1.1 +Host: example.com:8000 +Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=" +``` + +It is up to the server if and when it validates the payload for any given request, based solely on it's security policy +and the nature of the data included. + +If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct +the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value +with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash. + +However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed +at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value +provided by the client after validating the MAC. + +It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value +included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided +by the client, the payload may be modified by an attacker. + + +## Response Payload Validation + +**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the +client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header +as a response header using the exact same syntax as the `Authorization` request header field. + +The header is contructed using the same process as the client's request header. The server uses the same credentials and other +artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with +new values based on the server response. The rest as identical to those used by the client. + +The result MAC digest is included with the optional `hash` and `ext` values: + +``` +Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific" +``` + + +## Browser Support and Considerations + +A browser script is provided for including using a ` + +``` + +This will find and highlight code inside of `
` tags; it tries
+to detect the language automatically. If automatic detection doesn’t
+work for you, you can specify the language in the `class` attribute:
+
+```html
+
...
+``` + +Classes may also be prefixed with either `language-` or `lang-`. + +```html +
...
+``` + +### Plaintext and Disabling Highlighting + +To style arbitrary text like code, but without any highlighting, use the +`plaintext` class: + +```html +
...
+``` + +To disable highlighting of a tag completely, use the `nohighlight` class: + +```html +
...
+``` + +### Supported Languages + +The table below shows the full list of supported languages (and corresponding classes) that are bundled with the library. Note: Which languages are available may depend on how you've built or included the library in your app. See [Getting the Library](#getting-the-library) below. + +
+Reveal the full list of languages... + +| Language | Classes | Package | +| :-----------------------| :--------------------- | :------ | +| 1C | 1c | | +| ABNF | abnf | | +| Access logs | accesslog | | +| Ada | ada | | +| ARM assembler | armasm, arm | | +| AVR assembler | avrasm | | +| ActionScript | actionscript, as | | +| Alan | alan, i | [highlightjs-alan](https://github.com/highlightjs/highlightjs-alan) | +| AngelScript | angelscript, asc | | +| Apache | apache, apacheconf | | +| AppleScript | applescript, osascript | | +| Arcade | arcade | | +| AsciiDoc | asciidoc, adoc | | +| AspectJ | aspectj | | +| AutoHotkey | autohotkey | | +| AutoIt | autoit | | +| Awk | awk, mawk, nawk, gawk | | +| Axapta | axapta | | +| Bash | bash, sh, zsh | | +| Basic | basic | | +| BNF | bnf | | +| Brainfuck | brainfuck, bf | | +| C# | cs, csharp | | +| C++ | cpp, c, cc, h, c++, h++, hpp | | +| C/AL | cal | | +| Cache Object Script | cos, cls | | +| CMake | cmake, cmake.in | | +| Coq | coq | | +| CSP | csp | | +| CSS | css | | +| Cap’n Proto | capnproto, capnp | | +| Clojure | clojure, clj | | +| CoffeeScript | coffeescript, coffee, cson, iced | | +| Crmsh | crmsh, crm, pcmk | | +| Crystal | crystal, cr | | +| Cypher (Neo4j) | cypher | [highlightjs-cypher](https://github.com/highlightjs/highlightjs-cypher) | +| D | d | | +| DNS Zone file | dns, zone, bind | | +| DOS | dos, bat, cmd | | +| Dart | dart | | +| Delphi | delphi, dpr, dfm, pas, pascal, freepascal, lazarus, lpr, lfm | | +| Diff | diff, patch | | +| Django | django, jinja | | +| Dockerfile | dockerfile, docker | | +| dsconfig | dsconfig | | +| DTS (Device Tree) | dts | | +| Dust | dust, dst | | +| Dylan | dylan | [highlight-dylan](https://github.com/highlightjs/highlight-dylan) | +| EBNF | ebnf | | +| Elixir | elixir | | +| Elm | elm | | +| Erlang | erlang, erl | | +| Excel | excel, xls, xlsx | | +| Extempore | extempore, xtlang, xtm | [highlightjs-xtlang](https://github.com/highlightjs/highlightjs-xtlang) | +| F# | fsharp, fs | | +| FIX | fix | | +| Fortran | fortran, f90, f95 | | +| G-Code | gcode, nc | | +| Gams | gams, gms | | +| GAUSS | gauss, gss | | +| GDScript | godot, gdscript | [highlightjs-gdscript](https://github.com/highlightjs/highlightjs-gdscript) | +| Gherkin | gherkin | | +| GN for Ninja | gn, gni | [highlightjs-GN](https://github.com/highlightjs/highlightjs-GN/blob/master/gn.js) | +| Go | go, golang | | +| Grammatical Framework | gf | [highlightjs-gf](https://github.com/johnjcamilleri/highlightjs-gf) | +| Golo | golo, gololang | | +| Gradle | gradle | | +| Groovy | groovy | | +| HTML, XML | xml, html, xhtml, rss, atom, xjb, xsd, xsl, plist, svg | | +| HTTP | http, https | | +| Haml | haml | | +| Handlebars | handlebars, hbs, html.hbs, html.handlebars | | +| Haskell | haskell, hs | | +| Haxe | haxe, hx | | +| Hy | hy, hylang | | +| Ini, TOML | ini, toml | | +| Inform7 | inform7, i7 | | +| IRPF90 | irpf90 | | +| JSON | json | | +| Java | java, jsp | | +| JavaScript | javascript, js, jsx | | +| Kotlin | kotlin, kt | | +| Leaf | leaf | | +| Lasso | lasso, ls, lassoscript | | +| Less | less | | +| LDIF | ldif | | +| Lisp | lisp | | +| LiveCode Server | livecodeserver | | +| LiveScript | livescript, ls | | +| Lua | lua | | +| Makefile | makefile, mk, mak | | +| Markdown | markdown, md, mkdown, mkd | | +| Mathematica | mathematica, mma, wl | | +| Matlab | matlab | | +| Maxima | maxima | | +| Maya Embedded Language | mel | | +| Mercury | mercury | | +| mIRC Scripting Language | mirc, mrc | [highlightjs-mirc](https://github.com/highlightjs/highlightjs-mirc) | +| Mizar | mizar | | +| Mojolicious | mojolicious | | +| Monkey | monkey | | +| Moonscript | moonscript, moon | | +| N1QL | n1ql | | +| NSIS | nsis | | +| Nginx | nginx, nginxconf | | +| Nimrod | nimrod, nim | | +| Nix | nix | | +| OCaml | ocaml, ml | | +| Objective C | objectivec, mm, objc, obj-c | | +| OpenGL Shading Language | glsl | | +| OpenSCAD | openscad, scad | | +| Oracle Rules Language | ruleslanguage | | +| Oxygene | oxygene | | +| PF | pf, pf.conf | | +| PHP | php, php3, php4, php5, php6, php7 | | +| Parser3 | parser3 | | +| Perl | perl, pl, pm | | +| Plaintext: no highlight | plaintext | | +| Pony | pony | | +| PostgreSQL & PL/pgSQL | pgsql, postgres, postgresql | | +| PowerShell | powershell, ps, ps1 | | +| Processing | processing | | +| Prolog | prolog | | +| Properties | properties | | +| Protocol Buffers | protobuf | | +| Puppet | puppet, pp | | +| Python | python, py, gyp | | +| Python profiler results | profile | | +| Q | k, kdb | | +| QML | qml | | +| R | r | | +| Razor CSHTML | cshtml, razor, razor-cshtml | [highlightjs-cshtml-razor](https://github.com/highlightjs/highlightjs-cshtml-razor) | +| ReasonML | reasonml, re | | +| RenderMan RIB | rib | | +| RenderMan RSL | rsl | | +| Roboconf | graph, instances | | +| Robot Framework | robot, rf | [highlightjs-robot](https://github.com/highlightjs/highlightjs-robot) | +| RPM spec files | rpm-specfile, rpm, spec, rpm-spec, specfile | [highlightjs-rpm-specfile](https://github.com/highlightjs/highlightjs-rpm-specfile) | +| Ruby | ruby, rb, gemspec, podspec, thor, irb | | +| Rust | rust, rs | | +| SAS | SAS, sas | | +| SCSS | scss | | +| SQL | sql | | +| STEP Part 21 | p21, step, stp | | +| Scala | scala | | +| Scheme | scheme | | +| Scilab | scilab, sci | | +| Shape Expressions | shexc | [highlightjs-shexc](https://github.com/highlightjs/highlightjs-shexc) | +| Shell | shell, console | | +| Smali | smali | | +| Smalltalk | smalltalk, st | | +| Solidity | solidity, sol | [highlightjs-solidity](https://github.com/highlightjs/highlightjs-solidity) | +| Stan | stan, stanfuncs | | +| Stata | stata | | +| Structured Text | iecst, scl, stl, structured-text | [highlightjs-structured-text](https://github.com/highlightjs/highlightjs-structured-text) | +| Stylus | stylus, styl | | +| SubUnit | subunit | | +| Supercollider | supercollider, sc | [highlightjs-supercollider](https://github.com/highlightjs/highlightjs-supercollider) | +| Swift | swift | | +| Tcl | tcl, tk | | +| Terraform (HCL) | terraform, tf, hcl | [highlightjs-terraform](https://github.com/highlightjs/highlightjs-terraform) | +| Test Anything Protocol | tap | | +| TeX | tex | | +| Thrift | thrift | | +| TP | tp | | +| Twig | twig, craftcms | | +| TypeScript | typescript, ts | | +| VB.Net | vbnet, vb | | +| VBScript | vbscript, vbs | | +| VHDL | vhdl | | +| Vala | vala | | +| Verilog | verilog, v | | +| Vim Script | vim | | +| x86 Assembly | x86asm | | +| XL | xl, tao | | +| XQuery | xquery, xpath, xq | | +| YAML | yml, yaml | | +| Zephir | zephir, zep | | + +Languages with the specified package name are defined in separate repositories +and not included in `highlight.pack.js`. +
+ + +## Custom Initialization + +When you need a bit more control over the initialization of +highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4] +functions. This allows you to control *what* to highlight and *when*. + +Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using +vanilla JS: + +```js +document.addEventListener('DOMContentLoaded', (event) => { + document.querySelectorAll('pre code').forEach((block) => { + hljs.highlightBlock(block); + }); +}); +``` + +You can use any tags instead of `
` to mark up your code. If
+you don't use a container that preserves line breaks you will need to
+configure highlight.js to use the `
` tag: + +```js +hljs.configure({useBR: true}); + +document.querySelectorAll('div.code').forEach((block) => { + hljs.highlightBlock(block); +}); +``` + +For other options refer to the documentation for [`configure`][4]. + + +## Web Workers + +You can run highlighting inside a web worker to avoid freezing the browser +window while dealing with very big chunks of code. + +In your main script: + +```js +addEventListener('load', () => { + const code = document.querySelector('#code'); + const worker = new Worker('worker.js'); + worker.onmessage = (event) => { code.innerHTML = event.data; } + worker.postMessage(code.textContent); +}); +``` + +In worker.js: + +```js +onmessage = (event) => { + importScripts('/highlight.pack.js'); + const result = self.hljs.highlightAuto(event.data); + postMessage(result.value); +}; +``` + +## Node.js + +You can use highlight.js with node to highlight content before sending it to the browser. +Make sure to use the `.value` property to get the formatted html. +For more info about the returned object refer to the api docs https://highlightjs.readthedocs.io/en/latest/api.html + + +```js +// require the highlight.js library including all languages +const hljs = require('./highlight.js'); +const highlightedCode = hljs.highlightAuto('Hello World!').value +``` + +```js +// require the highlight.js library without languages +const hljs = require("highlight.js/lib/highlight.js"); +// separately require languages +hljs.registerLanguage('html', require('highlight.js/lib/languages/html')); +hljs.registerLanguage('sql', require('highlight.js/lib/languages/sql')); +// highlight with providing the language +const highlightedCode = hljs.highlight('html', 'Hello World!').value +``` + +## Getting the Library + +You can get highlight.js as a hosted, or custom-build, browser script or +as a server module. Right out of the box the browser script supports +both AMD and CommonJS, so if you wish you can use RequireJS or +Browserify without having to build from source. The server module also +works perfectly fine with Browserify, but there is the option to use a +build specific to browsers rather than something meant for a server. +Head over to the [download page][5] for all the options. + +**Don't link to GitHub directly.** The library is not supposed to work straight +from the source, it requires building. If none of the pre-packaged options +work for you refer to the [building documentation][6]. + +**The CDN-hosted package doesn't have all the languages.** Otherwise it'd be +too big. If you don't see the language you need in the ["Common" section][5], +it can be added manually: + +```html + +``` + +**On Almond.** You need to use the optimizer to give the module a name. For +example: + +```bash +r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js +``` + + +### CommonJS + +You can import Highlight.js as a CommonJS-module: + +```bash +npm install highlight.js --save +``` + +In your application: + +```js +import hljs from 'highlight.js'; +``` + +The default import imports all languages! Therefore it is likely to be more efficient to import only the library and the languages you need: + +```js +import hljs from 'highlight.js/lib/highlight'; +import javascript from 'highlight.js/lib/languages/javascript'; +hljs.registerLanguage('javascript', javascript); +``` + +To set the syntax highlighting style, if your build tool processes CSS from your JavaScript entry point, you can import the stylesheet directly into your CommonJS-module: + +```js +import hljs from 'highlight.js/lib/highlight'; +import 'highlight.js/styles/github.css'; +``` + +## License + +Highlight.js is released under the BSD License. See [LICENSE][7] file +for details. + +## Links + +The official site for the library is at . + +Further in-depth documentation for the API and other topics is at +. + +Authors and contributors are listed in the [AUTHORS.txt][8] file. + +[1]: http://highlightjs.readthedocs.io/en/latest/api.html#inithighlightingonload +[2]: http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html +[3]: http://highlightjs.readthedocs.io/en/latest/api.html#highlightblock-block +[4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options +[5]: https://highlightjs.org/download/ +[6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html +[7]: https://github.com/highlightjs/highlight.js/blob/master/LICENSE +[8]: https://github.com/highlightjs/highlight.js/blob/master/AUTHORS.txt diff --git a/node_modules/highlight.js/deprecated.js b/node_modules/highlight.js/deprecated.js new file mode 100644 index 000000000..7746087b1 --- /dev/null +++ b/node_modules/highlight.js/deprecated.js @@ -0,0 +1,26 @@ +Reset = "\x1b[0m" +FgRed = "\x1b[31m" +FgWhite = "\x1b[37m" +FgWhite = "\x1b[37m" +Bright = "\x1b[1m" +FgBlue = "\x1b[34m" +BgRed = "\x1b[41m" + +DEPRECATION = `${BgRed + FgWhite}-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*${Reset} +${Bright}${FgWhite} + Verion 9 of Highlight.js has reached EOL. It will no longer + be supported or receive security updates in the future. + Please upgrade to version 10 or encourage your indirect + dependencies to do so. + + For more info: + ${FgBlue} + https://github.com/highlightjs/highlight.js/issues/2877 + https://github.com/highlightjs/highlight.js/blob/master/VERSION_10_UPGRADE.md + ${BgRed + FgWhite} +-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*${Reset} +`.trim() + +if (!process.env["HLJS_HIDE_UPGRADE_WARNING"]) { + console.log(DEPRECATION) +} diff --git a/node_modules/highlight.js/docs/api.rst b/node_modules/highlight.js/docs/api.rst new file mode 100644 index 000000000..aaa0588b9 --- /dev/null +++ b/node_modules/highlight.js/docs/api.rst @@ -0,0 +1,151 @@ +Library API +=========== + +Highlight.js exports a few functions as methods of the ``hljs`` object. + + +``highlight(languageName, code, ignore_illegals, continuation)`` +--------------------------------------------------------- + +Core highlighting function. +Accepts a language name, or an alias, and a string with the code to highlight. +The ``ignore_illegals`` parameter, when present and evaluates to a true value, +forces highlighting to finish even in case of detecting illegal syntax for the +language instead of throwing an exception. +The ``continuation`` is an optional mode stack representing unfinished parsing. +When present, the function will restart parsing from this state instead of +initializing a new one. This is used internally for `sublanguage` support. + +Note: `continuation` is NOT intended to support line-by-line highlighting +because there is no requirement that a grammar handle linebreaks in any special +way. It's quite possible for a grammar to have a single mode/regex that matches +MANY lines at once. This is not discouraged and entirely up to the grammar. + +Returns an object with the following properties: + +* ``language``: language name, same as the name passed in ``languageName``, returned for consistency with ``highlightAuto`` +* ``relevance``: integer value representing the relevance score +* ``value``: HTML string with highlighting markup +* ``top``: top of the current mode stack +* ``illegal``: boolean representing whether any illegal matches were found + + +``highlightAuto(code, languageSubset)`` +---------------------------------------- + +Highlighting with language detection. +Accepts a string with the code to highlight and an optional array of language names and aliases restricting detection to only those languages. The subset can also be set with ``configure``, but the local parameter overrides the option if set. + +Returns an object with the following properties: + +* ``language``: detected language +* ``relevance``: integer value representing the relevance score +* ``value``: HTML string with highlighting markup +* ``second_best``: object with the same structure for second-best heuristically detected language (may be absent) + + +``fixMarkup(value)`` +-------------------- + +Post-processing of the highlighted markup. Currently consists of replacing indentation TAB characters and using ``
`` tags instead of new-line characters. Options are set globally with ``configure``. + +Accepts a string with the highlighted markup. + + +``highlightBlock(block)`` +------------------------- + +Applies highlighting to a DOM node containing code. + +This function is the one to use to apply highlighting dynamically after page load +or within initialization code of third-party Javascript frameworks. + +The function uses language detection by default but you can specify the language +in the ``class`` attribute of the DOM node. See the :doc:`class reference +` for all available language names and aliases. + + +``configure(options)`` +---------------------- + +Configures global options: + +* ``tabReplace``: a string used to replace TAB characters in indentation. +* ``useBR``: a flag to generate ``
`` tags instead of new-line characters in the output, useful when code is marked up using a non-``
`` container.
+* ``classPrefix``: a string prefix added before class names in the generated markup, used for backwards compatibility with stylesheets.
+* ``languages``: an array of language names and aliases restricting auto detection to only these languages.
+
+Accepts an object representing options with the values to updated. Other options don't change
+::
+
+  hljs.configure({
+    tabReplace: '    ', // 4 spaces
+    classPrefix: ''     // don't append class prefix
+                        // … other options aren't changed
+  })
+  hljs.initHighlighting();
+
+
+``initHighlighting()``
+----------------------
+
+Applies highlighting to all ``
..
`` blocks on a page. + + + +``initHighlightingOnLoad()`` +---------------------------- + +Attaches highlighting to the page load event. + + +``registerLanguage(name, language)`` +------------------------------------ + +Adds new language to the library under the specified name. Used mostly internally. + +* ``name``: a string with the name of the language being registered +* ``language``: a function that returns an object which represents the + language definition. The function is passed the ``hljs`` object to be able + to use common regular expressions defined within it. + + +``listLanguages()`` +---------------------------- + +Returns the languages names list. + + + +.. _getLanguage: + + +``getLanguage(name)`` +--------------------- + +Looks up a language by name or alias. + +Returns the language object if found, ``undefined`` otherwise. + + +``requireLanguage(name)`` +--------------------- + +Looks up a language by name or alias. + +This should be used when one language definition depends on another. +Using this function (vs ``getLanguage``) will provide better error messaging +when a required language is missing. + +Returns the language object if found, raises a hard error otherwise. + + +``debugMode()`` +--------------- + +Enables *debug/development* mode. **This mode purposely makes Highlight.js more fragile! It should only be used for testing and local development (of languages or the library itself).** By default "Safe Mode" is used, providing the most reliable experience for production usage. + +For example, if a new version suddenly had a serious bug (or breaking change) that affected only a single language: + +* **In Safe Mode**: All other languages would continue to highlight just fine. The broken language would appear as a code block, but without any highlighting (as if it were plaintext). +* **In Debug Mode**: All highlighting would stop when an error was encountered and a JavaScript error would be thrown. diff --git a/node_modules/highlight.js/docs/building-testing.rst b/node_modules/highlight.js/docs/building-testing.rst new file mode 100644 index 000000000..16292cb84 --- /dev/null +++ b/node_modules/highlight.js/docs/building-testing.rst @@ -0,0 +1,88 @@ +Building and testing +==================== + +To actually run highlight.js it is necessary to build it for the environment +where you're going to run it: a browser, the node.js server, etc. + + +Building +-------- + +The build tool is written in JavaScript using node.js. Before running the +script, make sure to have node installed and run ``npm install`` to get the +dependencies. + +The tool is located in ``tools/build.js``. A few useful examples: + +* Build for a browser using only common languages:: + + node tools/build.js :common + +* Build for node.js including all available languages:: + + node tools/build.js -t node + +* Build two specific languages for debugging, skipping compression in this case:: + + node tools/build.js -n python ruby + +On some systems the node binary is named ``nodejs``; simply replace ``node`` +with ``nodejs`` in the examples above if that is the case. + +The full option reference is available with the usual ``--help`` option. + +The build result will be in the ``build/`` directory. + +.. _basic-testing: + +Basic testing +------------- + +The usual approach to debugging and testing a language is first doing it +visually. You need to build highlight.js with only the language you're working +on (without compression, to have readable code in browser error messages) and +then use the Developer tool in ``tools/developer.html`` to see how it highlights +a test snippet in that language. + +A test snippet should be short and give the idea of the overall look of the +language. It shouldn't include every possible syntactic element and shouldn't +even make practical sense. + +After you satisfied with the result you need to make sure that language +detection still works with your language definition included in the whole suite. + +Testing is done using `Mocha `_ and the +files are found in the ``test/`` directory. You can use the node build to +run the tests in the command line with ``npm test`` after installing the +dependencies with ``npm install``. + +**Note**: for Debian-based machine, like Ubuntu, you might need to create an +alias or symbolic link for nodejs to node. The reason for this is the +dependencies that are requires to test highlight.js has a reference to +"node". + +Place the snippet you used inside the browser in +``test/detect//default.txt``, build the package with all the languages +for node and run the test suite. If your language breaks auto-detection, it +should be fixed by :ref:`improving relevance `, which is a black art +in and of itself. When in doubt, please refer to the discussion group! + + +Testing markup +-------------- + +You can also provide additional markup tests for the language to test isolated +cases of various syntactic construct. If your language has 19 different string +literals or complicated heuristics for telling division (``/``) apart from +regexes (``/ .. /``) -- this is the place. + +A test case consists of two files: + +* ``test/markup//.txt``: test code +* ``test/markup//.expect.txt``: reference rendering + +To generate reference rendering use the Developer tool located at +``tools/developer.html``. Make sure to explicitly select your language in the +drop-down menu, as automatic detection is unlikely to work in this case. + + diff --git a/node_modules/highlight.js/docs/css-classes-reference.rst b/node_modules/highlight.js/docs/css-classes-reference.rst new file mode 100644 index 000000000..a75e411a5 --- /dev/null +++ b/node_modules/highlight.js/docs/css-classes-reference.rst @@ -0,0 +1,140 @@ +CSS classes reference +===================== + + +Stylable classes +---------------- + ++------------------------------------------------------------------------------+ +| **General-purpose** | ++--------------------------+---------------------------------------------------+ +| keyword | keyword in a regular Algol-style language | ++--------------------------+---------------------------------------------------+ +| built_in | built-in or library object (constant, class, | +| | function) | ++--------------------------+---------------------------------------------------+ +| type | user-defined type in a language with first-class | +| | syntactically significant types, like Haskell | ++--------------------------+---------------------------------------------------+ +| literal | special identifier for a built-in value ("true", | +| | "false", "null") | ++--------------------------+---------------------------------------------------+ +| number | number, including units and modifiers, if any. | ++--------------------------+---------------------------------------------------+ +| regexp | literal regular expression | ++--------------------------+---------------------------------------------------+ +| string | literal string, character | ++--------------------------+---------------------------------------------------+ +| subst | parsed section inside a literal string | ++--------------------------+---------------------------------------------------+ +| symbol | symbolic constant, interned string, goto label | ++--------------------------+---------------------------------------------------+ +| class | class or class-level declaration (interfaces, | +| | traits, modules, etc) | ++--------------------------+---------------------------------------------------+ +| function | function or method declaration | ++--------------------------+---------------------------------------------------+ +| title | name of a class or a function at the place of | +| | declaration | ++--------------------------+---------------------------------------------------+ +| params | block of function arguments (parameters) at the | +| | place of declaration | ++--------------------------+---------------------------------------------------+ +| **Meta** | ++--------------------------+---------------------------------------------------+ +| comment | comment | ++--------------------------+---------------------------------------------------+ +| doctag | documentation markup within comments | ++--------------------------+---------------------------------------------------+ +| meta | flags, modifiers, annotations, processing | +| | instructions, preprocessor directive, etc | ++--------------------------+---------------------------------------------------+ +| meta-keyword | keyword or built-in within meta construct | ++--------------------------+---------------------------------------------------+ +| meta-string | string within meta construct | ++--------------------------+---------------------------------------------------+ +| **Tags, attributes, configs** | ++--------------------------+---------------------------------------------------+ +| section | heading of a section in a config file, heading in | +| | text markup | ++--------------------------+---------------------------------------------------+ +| tag | XML/HTML tag | ++--------------------------+---------------------------------------------------+ +| name | name of an XML tag, the first word in an | +| | s-expression | ++--------------------------+---------------------------------------------------+ +| builtin-name | s-expression name from the language standard | +| | library | ++--------------------------+---------------------------------------------------+ +| attr | name of an attribute with no language defined | +| | semantics (keys in JSON, setting names in .ini), | +| | also sub-attribute within another highlighted | +| | object, like XML tag | ++--------------------------+---------------------------------------------------+ +| attribute | name of an attribute followed by a structured | +| | value part, like CSS properties | ++--------------------------+---------------------------------------------------+ +| variable | variable in a config or a template file, | +| | environment var expansion in a script | ++--------------------------+---------------------------------------------------+ +| **Markup** | ++--------------------------+---------------------------------------------------+ +| bullet | list item bullet in text markup | ++--------------------------+---------------------------------------------------+ +| code | code block in text markup | ++--------------------------+---------------------------------------------------+ +| emphasis | emphasis in text markup | ++--------------------------+---------------------------------------------------+ +| strong | strong emphasis in text markup | ++--------------------------+---------------------------------------------------+ +| formula | mathematical formula in text markup | ++--------------------------+---------------------------------------------------+ +| link | hyperlink in text markup | ++--------------------------+---------------------------------------------------+ +| quote | quotation in text markup | ++--------------------------+---------------------------------------------------+ +| **CSS** | ++--------------------------+---------------------------------------------------+ +| selector-tag | tag selector in CSS | ++--------------------------+---------------------------------------------------+ +| selector-id | #id selector in CSS | ++--------------------------+---------------------------------------------------+ +| selector-class | .class selector in CSS | ++--------------------------+---------------------------------------------------+ +| selector-attr | [attr] selector in CSS | ++--------------------------+---------------------------------------------------+ +| selector-pseudo | :pseudo selector in CSS | ++--------------------------+---------------------------------------------------+ +| **Templates** | ++--------------------------+---------------------------------------------------+ +| template-tag | tag of a template language | ++--------------------------+---------------------------------------------------+ +| template-variable | variable in a template language | ++--------------------------+---------------------------------------------------+ +| **diff** | ++--------------------------+---------------------------------------------------+ +| addition | added or changed line in a diff | ++--------------------------+---------------------------------------------------+ +| deletion | deleted line in a diff | ++--------------------------+---------------------------------------------------+ +| **ReasonML** | ++--------------------------+---------------------------------------------------+ +| operator | reasonml operator such as pipe | ++--------------------------+---------------------------------------------------+ +| pattern-match | reasonml pattern matching matchers | ++--------------------------+---------------------------------------------------+ +| typing | type signatures on function parameters | ++--------------------------+---------------------------------------------------+ +| constructor | type constructors | ++--------------------------+---------------------------------------------------+ +| module-access | scope access into a ReasonML module | ++--------------------------+---------------------------------------------------+ +| module | ReasonML module reference within scope access | ++--------------------------+---------------------------------------------------+ + + +Language names and aliases +-------------------------- + +The language names and aliases table has moved to `the project +README `_. diff --git a/node_modules/highlight.js/docs/index.rst b/node_modules/highlight.js/docs/index.rst new file mode 100644 index 000000000..3288758bb --- /dev/null +++ b/node_modules/highlight.js/docs/index.rst @@ -0,0 +1,44 @@ +.. highlight.js documentation master file, created by + sphinx-quickstart on Wed Sep 12 23:48:27 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +``highlight.js`` developer documentation +========================================== + +Contents: + +.. toctree:: + :maxdepth: 1 + + api + language-guide + reference + css-classes-reference + style-guide + language-contribution + building-testing + maintainers-guide + +Miscellaneous: + +.. toctree:: + :maxdepth: 1 + + line-numbers + language-requests + +Links: + +- Code: https://github.com/highlightjs/highlight.js +- Discussion: http://groups.google.com/group/highlightjs +- Bug tracking: https://github.com/highlightjs/highlight.js/issues + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/node_modules/highlight.js/docs/language-contribution.rst b/node_modules/highlight.js/docs/language-contribution.rst new file mode 100644 index 000000000..614e81633 --- /dev/null +++ b/node_modules/highlight.js/docs/language-contribution.rst @@ -0,0 +1,77 @@ +Language contributor checklist +============================== + +1. Put language definition into a .js file +------------------------------------------ + +The file defines a function accepting a reference to the library and returning a language object. +The library parameter is useful to access common modes and regexps. You should not immediately call this function, +this is done during the build process and details differ for different build targets. + +:: + + function(hljs) { + return { + keywords: 'foo bar', + contains: [ ..., hljs.NUMBER_MODE, ... ] + } + } + +The name of the file is used as a short language identifier and should be usable as a class name in HTML and CSS. + + +2. Provide meta data +-------------------- + +At the top of the file there is a specially formatted comment with meta data processed by a build system. +Meta data format is simply key-value pairs each occupying its own line: + +:: + + /* + Language: Superlanguage + Requires: java.js, sql.js + Author: John Smith + Contributors: Mike Johnson <...@...>, Matt Wilson <...@...> + Description: Some cool language definition + */ + +``Language`` — the only required header giving a human-readable language name. + +``Requires`` — a list of other language files required for this language to work. +This make it possible to describe languages that extend definitions of other ones. +Required files aren't processed in any special way. +The build system just makes sure that they will be in the final package in +``LANGUAGES`` object. + +The meaning of the other headers is pretty obvious. + + +3. Create a code example +------------------------ + +The code example is used both to test language detection and for the demo page +on https://highlightjs.org/. Put it in ``test/detect//default.txt``. + +Take inspiration from other languages in ``test/detect/`` and read +:ref:`testing instructions ` for more details. + + +4. Write class reference +------------------------ + +Class reference lives in the :doc:`CSS classes reference `.. +Describe shortly names of all meaningful modes used in your language definition. + + +5. Add yourself to AUTHORS.*.txt and CHANGES.md +----------------------------------------------- + +If you're a new contributor add yourself to the authors list. +Also it will be good to update CHANGES.md. + + +6. Create a pull request +------------------------ + +Send your contribution as a pull request on GitHub. diff --git a/node_modules/highlight.js/docs/language-guide.rst b/node_modules/highlight.js/docs/language-guide.rst new file mode 100644 index 000000000..0971524e5 --- /dev/null +++ b/node_modules/highlight.js/docs/language-guide.rst @@ -0,0 +1,284 @@ +Language definition guide +========================= + +Highlighting overview +--------------------- + +Programming language code consists of parts with different rules of parsing: keywords like ``for`` or ``if`` +don't make sense inside strings, strings may contain backslash-escaped symbols like ``\"`` +and comments usually don't contain anything interesting except the end of the comment. + +In highlight.js such parts are called "modes". + +Each mode consists of: + +* starting condition +* ending condition +* list of contained sub-modes +* lexing rules and keywords +* …exotic stuff like another language inside a language + +The parser's work is to look for modes and their keywords. +Upon finding, it wraps them into the markup ``...`` +and puts the name of the mode ("string", "comment", "number") +or a keyword group name ("keyword", "literal", "built-in") as the span's class name. + + +General syntax +-------------- + +A language definition is a JavaScript object describing the default parsing mode for the language. +This default mode contains sub-modes which in turn contain other sub-modes, effectively making the language definition a tree of modes. + +Here's an example: + +:: + + { + case_insensitive: true, // language is case-insensitive + keywords: 'for if while', + contains: [ + { + className: 'string', + begin: '"', end: '"' + }, + hljs.COMMENT( + '/\\*', // begin + '\\*/', // end + { + contains: [ + { + className: 'doc', begin: '@\\w+' + } + ] + } + ) + ] + } + +Usually the default mode accounts for the majority of the code and describes all language keywords. +A notable exception here is XML in which a default mode is just a user text that doesn't contain any keywords, +and most interesting parsing happens inside tags. + + +Keywords +-------- + +In the simple case language keywords are defined in a string, separated by space: + +:: + + { + keywords: 'else for if while' + } + +Some languages have different kinds of "keywords" that might not be called as such by the language spec +but are very close to them from the point of view of a syntax highlighter. These are all sorts of "literals", "built-ins", "symbols" and such. +To define such keyword groups the attribute ``keywords`` becomes an object each property of which defines its own group of keywords: + +:: + + { + keywords: { + keyword: 'else for if while', + literal: 'false true null' + } + } + +The group name becomes then a class name in a generated markup enabling different styling for different kinds of keywords. + +To detect keywords highlight.js breaks the processed chunk of code into separate words — a process called lexing. +The "word" here is defined by the regexp ``[a-zA-Z][a-zA-Z0-9_]*`` that works for keywords in most languages. +Different lexing rules can be defined by the ``lexemes`` attribute: + +:: + + { + lexemes: '-[a-z]+', + keywords: '-import -export' + } + + +Sub-modes +--------- + +Sub-modes are listed in the ``contains`` attribute: + +:: + + { + keywords: '...', + contains: [ + hljs.QUOTE_STRING_MODE, + hljs.C_LINE_COMMENT, + { ... custom mode definition ... } + ] + } + +A mode can reference itself in the ``contains`` array by using a special keyword ``'self``'. +This is commonly used to define nested modes: + +:: + + { + className: 'object', + begin: '{', end: '}', + contains: [hljs.QUOTE_STRING_MODE, 'self'] + } + +Note: ``self`` may not be used in the root level ``contains`` of a language. The root level mode is special and may not be self-referential. + + +Comments +-------- + +To define custom comments it is recommended to use a built-in helper function ``hljs.COMMENT`` instead of describing the mode directly, as it also defines a few default sub-modes that improve language detection and do other nice things. + +Parameters for the function are: + +:: + + hljs.COMMENT( + begin, // begin regex + end, // end regex + extra // optional object with extra attributes to override defaults + // (for example {relevance: 0}) + ) + + +Markup generation +----------------- + +Modes usually generate actual highlighting markup — ```` elements with specific class names that are defined by the ``className`` attribute: + +:: + + { + contains: [ + { + className: 'string', + // ... other attributes + }, + { + className: 'number', + // ... + } + ] + } + +Names are not required to be unique, it's quite common to have several definitions with the same name. +For example, many languages have various syntaxes for strings, comments, etc… + +Sometimes modes are defined only to support specific parsing rules and aren't needed in the final markup. +A classic example is an escaping sequence inside strings allowing them to contain an ending quote. + +:: + + { + className: 'string', + begin: '"', end: '"', + contains: [{begin: '\\\\.'}], + } + +For such modes ``className`` attribute should be omitted so they won't generate excessive markup. + + +Mode attributes +--------------- + +Other useful attributes are defined in the :doc:`mode reference `. + + +.. _relevance: + +Relevance +--------- + +Highlight.js tries to automatically detect the language of a code fragment. +The heuristics is essentially simple: it tries to highlight a fragment with all the language definitions +and the one that yields most specific modes and keywords wins. The job of a language definition +is to help this heuristics by hinting relative relevance (or irrelevance) of modes. + +This is best illustrated by example. Python has special kinds of strings defined by prefix letters before the quotes: +``r"..."``, ``u"..."``. If a code fragment contains such strings there is a good chance that it's in Python. +So these string modes are given high relevance: + +:: + + { + className: 'string', + begin: 'r"', end: '"', + relevance: 10 + } + +On the other hand, conventional strings in plain single or double quotes aren't specific to any language +and it makes sense to bring their relevance to zero to lessen statistical noise: + +:: + + { + className: 'string', + begin: '"', end: '"', + relevance: 0 + } + +The default value for relevance is 1. When setting an explicit value it's recommended to use either 10 or 0. + +Keywords also influence relevance. Each of them usually has a relevance of 1, but there are some unique names +that aren't likely to be found outside of their languages, even in the form of variable names. +For example just having ``reinterpret_cast`` somewhere in the code is a good indicator that we're looking at C++. +It's worth to set relevance of such keywords a bit higher. This is done with a pipe: + +:: + + { + keywords: 'for if reinterpret_cast|10' + } + + +Illegal symbols +--------------- + +Another way to improve language detection is to define illegal symbols for a mode. +For example in Python first line of class definition (``class MyClass(object):``) cannot contain symbol "{" or a newline. +Presence of these symbols clearly shows that the language is not Python and the parser can drop this attempt early. + +Illegal symbols are defined as a a single regular expression: + +:: + + { + className: 'class', + illegal: '[${]' + } + + +Pre-defined modes and regular expressions +----------------------------------------- + +Many languages share common modes and regular expressions. Such expressions are defined in core highlight.js code +at the end under "Common regexps" and "Common modes" titles. Use them when possible. + + +Regular Expression Features +--------------------------- + +The goal of Highlight.js is to support whatever regex features Javascript itself supports. You're using real regular expressions, use them responsibly. That said, due to the design of the parser, there are some caveats. These are addressed below. + +Things we support now that we did not always: + +* look-ahead regex matching for `begin` (#2135) +* look-ahead regex matching for `end` (#2237) +* look-ahead regex matching for `illegal` (#2135) +* back-references within your regex matches (#1897) +* look-behind matching (when JS supports it) for `begin` (#2135) + +Things we currently know are still issues: + +* look-behind matching (when JS supports it) for `end` matchers + + +Contributing +------------ + +Follow the :doc:`contributor checklist `. diff --git a/node_modules/highlight.js/docs/language-requests.rst b/node_modules/highlight.js/docs/language-requests.rst new file mode 100644 index 000000000..4e4c2f0b6 --- /dev/null +++ b/node_modules/highlight.js/docs/language-requests.rst @@ -0,0 +1,17 @@ +On requesting new languages +=========================== + +This is a general answer to requests for adding new languages that appear from +time to time in the highlight.js issue tracker and discussion group. + + Highlight.js doesn't have a fundamental plan for implementing languages, + instead the project works by accepting language definitions from + interested contributors. There are also no rules at the moment forbidding + any languages from being added to the library, no matter how obscure or + weird. + + This means that there's no point in requesting a new language without + providing an implementation for it. If you want to see a particular language + included in highlight.js but cannot implement it, the best way to make it + happen is to get another developer interested in doing so. Here's our + :doc:`language-guide`. diff --git a/node_modules/highlight.js/docs/line-numbers.rst b/node_modules/highlight.js/docs/line-numbers.rst new file mode 100644 index 000000000..674542d4e --- /dev/null +++ b/node_modules/highlight.js/docs/line-numbers.rst @@ -0,0 +1,39 @@ +Line numbers +============ + +Highlight.js' notable lack of line numbers support is not an oversight but a +feature. Following is the explanation of this policy from the current project +maintainer (hey guys!): + + One of the defining design principles for highlight.js from the start was + simplicity. Not the simplicity of code (in fact, it's quite complex) but + the simplicity of usage and of the actual look of highlighted snippets on + HTML pages. Many highlighters, in my opinion, are overdoing it with such + things as separate colors for every single type of lexemes, striped + backgrounds, fancy buttons around code blocks and — yes — line numbers. + The more fancy stuff resides around the code the more it distracts a + reader from understanding it. + + This is why it's not a straightforward decision: this new feature will not + just make highlight.js better, it might actually make it worse simply by + making it look more bloated in blog posts around the Internet. This is why + I'm asking people to show that it's worth it. + + The only real use-case that ever was brought up in support of line numbers + is referencing code from the descriptive text around it. On my own blog I + was always solving this either with comments within the code itself or by + breaking the larger snippets into smaller ones and describing each small + part separately. I'm not saying that my solution is better. But I don't + see how line numbers are better either. And the only way to show that they + are better is to set up some usability research on the subject. I doubt + anyone would bother to do it. + + Then there's maintenance. So far the core code of highlight.js is + maintained by only one person — yours truly. Inclusion of any new code in + highlight.js means that from that moment I will have to fix bugs in it, + improve it further, make it work together with the rest of the code, + defend its design. And I don't want to do all this for the feature that I + consider "evil" and probably will never use myself. + +This position is `subject to discuss `_. +Also it doesn't stop anyone from forking the code and maintaining line-numbers implementation separately. diff --git a/node_modules/highlight.js/docs/maintainers-guide.rst b/node_modules/highlight.js/docs/maintainers-guide.rst new file mode 100644 index 000000000..0ac3719e8 --- /dev/null +++ b/node_modules/highlight.js/docs/maintainers-guide.rst @@ -0,0 +1,43 @@ +Maintainer's guide +================== + + +Commit policy +------------- + +* Pull requests from outside contributors require a review from a maintainer. + +* Maintainers should avoid working on a master branch directly and create branches for everything. A code review from another maintainer is recommended but not required, use your best judgment. + + + +Release process +--------------- + +Releases (minor) typically happen on a 6-week schedule. + +For major/minor releases you'll be releasing from ``master``. For patch releases you'll be releasing from a stable branch, such as ``9-16-stable``. This allows ongoing development of new features to continue in isolation (in master) without those changes leaking into patch releases (which should focus only on fixing breaking changes). + +The goal being that minor version series always get more stable over time and that patch releases do not add features. + +* For patch releases: First switch to the associated stable branch (i.e., ``9-16-stable``) + +* Update CHANGES.md with everything interesting since the last update. + +* Update version numbers using the three-part x.y.z notation everywhere: + + * The header in CHANGES.md (this is where the site looks for the latest version number) + * ``"version"`` attribute in package.json + * ``"version"`` attribute in package-lock.json (run `npm install`) + * Two places in docs/conf.py (``version`` and ``release``) + +* Commit the version changes and tag the commit with the version number (``9.16.2``, no "v" prefix or anything like that) + +* For major/minor releases: Create a new ``[major]-[minor]-stable`` branch such as ``9-16-stable`` + +* Push the commit and the tags (``git push && git push --tags``) + + +Pushing the tag triggers the update process which can be monitored at http://highlightjs.org/api/release/ + +When something didn't work *and* it's fixable in code (version numbers mismatch, last minute patches, etc), simply make another release incrementing the third (revision) part of the version number. diff --git a/node_modules/highlight.js/docs/reference.rst b/node_modules/highlight.js/docs/reference.rst new file mode 100644 index 000000000..dafee4abd --- /dev/null +++ b/node_modules/highlight.js/docs/reference.rst @@ -0,0 +1,361 @@ +Mode reference +============== + +Types +----- + +Types of attributes values in this reference: + ++------------+-------------------------------------------------------------------------------------+ +| identifier | String suitable to be used as a Javascript variable and CSS class name | +| | (i.e. mostly ``/[A-Za-z0-9_]+/``) | ++------------+-------------------------------------------------------------------------------------+ +| regexp | String representing a Javascript regexp. | +| | Note that since it's not a literal regexp all back-slashes should be repeated twice | ++------------+-------------------------------------------------------------------------------------+ +| boolean | Javascript boolean: ``true`` or ``false`` | ++------------+-------------------------------------------------------------------------------------+ +| number | Javascript number | ++------------+-------------------------------------------------------------------------------------+ +| object | Javascript object: ``{ ... }`` | ++------------+-------------------------------------------------------------------------------------+ +| array | Javascript array: ``[ ... ]`` | ++------------+-------------------------------------------------------------------------------------+ + + +Attributes +---------- + +case_insensitive +^^^^^^^^^^^^^^^^ + +**type**: boolean + +Case insensitivity of language keywords and regexps. Used only on the top-level mode. + + +aliases +^^^^^^^ + +**type**: array + +A list of additional names (besides the canonical one given by the filename) that can be used to identify a language in HTML classes and in a call to :ref:`getLanguage `. + + +className +^^^^^^^^^ + +**type**: identifier + +The name of the mode. It is used as a class name in HTML markup. + +Multiple modes can have the same name. This is useful when a language has multiple variants of syntax +for one thing like string in single or double quotes. + + +begin +^^^^^ + +**type**: regexp + +Regular expression starting a mode. For example a single quote for strings or two forward slashes for C-style comments. +If absent, ``begin`` defaults to a regexp that matches anything, so the mode starts immediately. + + +end +^^^ + +**type**: regexp + +Regular expression ending a mode. For example a single quote for strings or "$" (end of line) for one-line comments. + +It's often the case that a beginning regular expression defines the entire mode and doesn't need any special ending. +For example a number can be defined with ``begin: "\\b\\d+"`` which spans all the digits. + +If absent, ``end`` defaults to a regexp that matches anything, so the mode ends immediately (after possibly +matching any ``contains`` sub-modes). + +Sometimes a mode can end not by itself but implicitly with its containing (parent) mode. +This is achieved with :ref:`endsWithParent ` attribute. + + +beginKeywords +^^^^^^^^^^^^^^^^ + +**type**: string + +Used instead of ``begin`` for modes starting with keywords to avoid needless repetition: + +:: + + { + begin: '\\b(extends|implements) ', + keywords: 'extends implements' + } + +… becomes: + +:: + + { + beginKeywords: 'extends implements' + } + +Unlike the :ref:`keywords ` attribute, this one allows only a simple list of space separated keywords. +If you do need additional features of ``keywords`` or you just need more keywords for this mode you may include ``keywords`` along with ``beginKeywords``. + + +.. _endsWithParent: + +endsWithParent +^^^^^^^^^^^^^^ + +**type**: boolean + +A flag showing that a mode ends when its parent ends. + +This is best demonstrated by example. In CSS syntax a selector has a set of rules contained within symbols "{" and "}". +Individual rules separated by ";" but the last one in a set can omit the terminating semicolon: + +:: + + p { + width: 100%; color: red + } + +This is when ``endsWithParent`` comes into play: + +:: + + { + className: 'rules', begin: '{', end: '}', + contains: [ + {className: 'rule', /* ... */ end: ';', endsWithParent: true} + ] + } + +.. _endsParent: + +endsParent +^^^^^^^^^^^^^^ + +**type**: boolean + +Forces closing of the parent mode right after the current mode is closed. + +This is used for modes that don't have an easily expressible ending lexeme but +instead could be closed after the last interesting sub-mode is found. + +Here's an example with two ways of defining functions in Elixir, one using a +keyword ``do`` and another using a comma: + +:: + + def foo :clear, list do + :ok + end + + def foo, do: IO.puts "hello world" + +Note that in the first case the parameter list after the function title may also +include a comma. And if we're only interested in highlighting a title we can +tell it to end the function definition after itself: + +:: + + { + className: 'function', + beginKeywords: 'def', end: /\B\b/, + contains: [ + { + className: 'title', + begin: hljs.IDENT_RE, endsParent: true + } + ] + } + +(The ``end: /\B\b/`` regex tells function to never end by itself.) + +.. _endSameAsBegin: + +endSameAsBegin +^^^^^^^^^^^^^^ + +**type**: boolean + +Acts as ``end`` matching exactly the same string that was found by the +corresponding ``begin`` regexp. + +For example, in PostgreSQL string constants can uee "dollar quotes", +consisting of a dollar sign, an optional tag of zero or more characters, +and another dollar sign. String constant must be ended with the same +construct using the same tag. It is possible to nest dollar-quoted string +constants by choosing different tags at each nesting level: + +:: + + $foo$ + ... + $bar$ nested $bar$ + ... + $foo$ + +In this case you can't simply specify the same regexp for ``begin`` and +``end`` (say, ``"\\$[a-z]\\$"``), but you can use ``begin: "\\$[a-z]\\$"`` +and ``endSameAsBegin: true``. + +.. _lexemes: + +lexemes +^^^^^^^ + +**type**: regexp + +A regular expression that extracts individual lexemes from language text to find :ref:`keywords ` among them. +Default value is ``hljs.IDENT_RE`` which works for most languages. + + +.. _keywords: + +keywords +^^^^^^^^ + +**type**: object + +Keyword definition comes in two forms: + +* ``'for while if else weird_voodoo|10 ... '`` -- a string of space-separated keywords with an optional relevance over a pipe +* ``{'keyword': ' ... ', 'literal': ' ... '}`` -- an object whose keys are names of different kinds of keywords and values are keyword definition strings in the first form + +For detailed explanation see :doc:`Language definition guide `. + + +illegal +^^^^^^^ + +**type**: regexp + +A regular expression that defines symbols illegal for the mode. +When the parser finds a match for illegal expression it immediately drops parsing the whole language altogether. + + +excludeBegin, excludeEnd +^^^^^^^^^^^^^^^^^^^^^^^^ + +**type**: boolean + +Exclude beginning or ending lexemes out of mode's generated markup. For example in CSS syntax a rule ends with a semicolon. +However visually it's better not to color it as the rule contents. Having ``excludeEnd: true`` forces a ```` element for the rule to close before the semicolon. + + +returnBegin +^^^^^^^^^^^ + +**type**: boolean + +Returns just found beginning lexeme back into parser. This is used when beginning of a sub-mode is a complex expression +that should not only be found within a parent mode but also parsed according to the rules of a sub-mode. + +Since the parser is effectively goes back it's quite possible to create a infinite loop here so use with caution! + + +returnEnd +^^^^^^^^^ + +**type**: boolean + +Returns just found ending lexeme back into parser. This is used for example to parse Javascript embedded into HTML. +A Javascript block ends with the HTML closing tag ```` that cannot be parsed with Javascript rules. +So it is returned back into its parent HTML mode that knows what to do with it. + +Since the parser is effectively goes back it's quite possible to create a infinite loop here so use with caution! + + +contains +^^^^^^^^ + +**type**: array + +The list of sub-modes that can be found inside the mode. For detailed explanation see :doc:`Language definition guide `. + + +starts +^^^^^^ + +**type**: identifier + +The name of the mode that will start right after the current mode ends. The new mode won't be contained within the current one. + +Currently this attribute is used to highlight Javascript and CSS contained within HTML. +Tags ``'); + expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); + done(); + }); + + it('encodes \' characters', function (done) { + + var encoded = Hoek.escapeJavaScript('something(\'param\')'); + expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); + done(); + }); + + it('encodes large unicode characters with the correct padding', function (done) { + + var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); + expect(encoded).to.equal('\\u0500\\u1000'); + done(); + }); + + it('doesn\'t throw an exception when passed null', function (done) { + + var encoded = Hoek.escapeJavaScript(null); + expect(encoded).to.equal(''); + done(); + }); +}); + +describe('escapeHtml()', function () { + + it('encodes / characters', function (done) { + + var encoded = Hoek.escapeHtml(''); + expect(encoded).to.equal('<script>alert(1)</script>'); + done(); + }); + + it('encodes < and > as named characters', function (done) { + + var encoded = Hoek.escapeHtml(' + + \ No newline at end of file diff --git a/node_modules/jsbn/example.js b/node_modules/jsbn/example.js new file mode 100644 index 000000000..664c1b455 --- /dev/null +++ b/node_modules/jsbn/example.js @@ -0,0 +1,3 @@ +var BigInteger = require('./'); +var a = new BigInteger('91823918239182398123'); +console.log(a.bitLength()); \ No newline at end of file diff --git a/node_modules/jsbn/index.js b/node_modules/jsbn/index.js new file mode 100644 index 000000000..973226ddf --- /dev/null +++ b/node_modules/jsbn/index.js @@ -0,0 +1,1357 @@ +(function(){ + + // Copyright (c) 2005 Tom Wu + // All Rights Reserved. + // See "LICENSE" for details. + + // Basic JavaScript BN library - subset useful for RSA encryption. + + // Bits per digit + var dbits; + + // JavaScript engine analysis + var canary = 0xdeadbeefcafe; + var j_lm = ((canary&0xffffff)==0xefcafe); + + // (public) Constructor + function BigInteger(a,b,c) { + if(a != null) + if("number" == typeof a) this.fromNumber(a,b,c); + else if(b == null && "string" != typeof a) this.fromString(a,256); + else this.fromString(a,b); + } + + // return new, unset BigInteger + function nbi() { return new BigInteger(null); } + + // am: Compute w_j += (x*this_i), propagate carries, + // c is initial carry, returns final carry. + // c < 3*dvalue, x < 2*dvalue, this_i < dvalue + // We need to select the fastest one that works in this environment. + + // am1: use a single mult and divide to get the high bits, + // max digit bits should be 26 because + // max internal value = 2*dvalue^2-2*dvalue (< 2^53) + function am1(i,x,w,j,c,n) { + while(--n >= 0) { + var v = x*this[i++]+w[j]+c; + c = Math.floor(v/0x4000000); + w[j++] = v&0x3ffffff; + } + return c; + } + // am2 avoids a big mult-and-extract completely. + // Max digit bits should be <= 30 because we do bitwise ops + // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) + function am2(i,x,w,j,c,n) { + var xl = x&0x7fff, xh = x>>15; + while(--n >= 0) { + var l = this[i]&0x7fff; + var h = this[i++]>>15; + var m = xh*l+h*xl; + l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); + c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); + w[j++] = l&0x3fffffff; + } + return c; + } + // Alternately, set max digit bits to 28 since some + // browsers slow down when dealing with 32-bit numbers. + function am3(i,x,w,j,c,n) { + var xl = x&0x3fff, xh = x>>14; + while(--n >= 0) { + var l = this[i]&0x3fff; + var h = this[i++]>>14; + var m = xh*l+h*xl; + l = xl*l+((m&0x3fff)<<14)+w[j]+c; + c = (l>>28)+(m>>14)+xh*h; + w[j++] = l&0xfffffff; + } + return c; + } + var inBrowser = typeof navigator !== "undefined"; + if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30; + } + else if(inBrowser && j_lm && (navigator.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26; + } + else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = am3; + dbits = 28; + } + + BigInteger.prototype.DB = dbits; + BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; + r.t = this.t; + r.s = this.s; + } + + // (protected) set from integer value x, -DV <= x < DV + function bnpFromInt(x) { + this.t = 1; + this.s = (x<0)?-1:0; + if(x > 0) this[0] = x; + else if(x < -1) this[0] = x+this.DV; + else this.t = 0; + } + + // return bigint initialized to value + function nbv(i) { var r = nbi(); r.fromInt(i); return r; } + + // (protected) set from string and radix + function bnpFromString(s,b) { + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 256) k = 8; // byte array + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else { this.fromRadix(s,b); return; } + this.t = 0; + this.s = 0; + var i = s.length, mi = false, sh = 0; + while(--i >= 0) { + var x = (k==8)?s[i]&0xff:intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-") mi = true; + continue; + } + mi = false; + if(sh == 0) + this[this.t++] = x; + else if(sh+k > this.DB) { + this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); + } + else + this[this.t-1] |= x<= this.DB) sh -= this.DB; + } + if(k == 8 && (s[0]&0x80) != 0) { + this.s = -1; + if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; + } + + // (public) return string representation in given radix + function bnToString(b) { + if(this.s < 0) return "-"+this.negate().toString(b); + var k; + if(b == 16) k = 4; + else if(b == 8) k = 3; + else if(b == 2) k = 1; + else if(b == 32) k = 5; + else if(b == 4) k = 2; + else return this.toRadix(b); + var km = (1< 0) { + if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } + while(i >= 0) { + if(p < k) { + d = (this[i]&((1<>(p+=this.DB-k); + } + else { + d = (this[i]>>(p-=k))&km; + if(p <= 0) { p += this.DB; --i; } + } + if(d > 0) m = true; + if(m) r += int2char(d); + } + } + return m?r:"0"; + } + + // (public) -this + function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } + + // (public) |this| + function bnAbs() { return (this.s<0)?this.negate():this; } + + // (public) return + if this > a, - if this < a, 0 if equal + function bnCompareTo(a) { + var r = this.s-a.s; + if(r != 0) return r; + var i = this.t; + r = i-a.t; + if(r != 0) return (this.s<0)?-r:r; + while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; + return 0; + } + + // returns bit length of the integer x + function nbits(x) { + var r = 1, t; + if((t=x>>>16) != 0) { x = t; r += 16; } + if((t=x>>8) != 0) { x = t; r += 8; } + if((t=x>>4) != 0) { x = t; r += 4; } + if((t=x>>2) != 0) { x = t; r += 2; } + if((t=x>>1) != 0) { x = t; r += 1; } + return r; + } + + // (public) return the number of bits in "this" + function bnBitLength() { + if(this.t <= 0) return 0; + return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); + } + + // (protected) r = this << n*DB + function bnpDLShiftTo(n,r) { + var i; + for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; + for(i = n-1; i >= 0; --i) r[i] = 0; + r.t = this.t+n; + r.s = this.s; + } + + // (protected) r = this >> n*DB + function bnpDRShiftTo(n,r) { + for(var i = n; i < this.t; ++i) r[i-n] = this[i]; + r.t = Math.max(this.t-n,0); + r.s = this.s; + } + + // (protected) r = this << n + function bnpLShiftTo(n,r) { + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<= 0; --i) { + r[i+ds+1] = (this[i]>>cbs)|c; + c = (this[i]&bm)<= 0; --i) r[i] = 0; + r[ds] = c; + r.t = this.t+ds+1; + r.s = this.s; + r.clamp(); + } + + // (protected) r = this >> n + function bnpRShiftTo(n,r) { + r.s = this.s; + var ds = Math.floor(n/this.DB); + if(ds >= this.t) { r.t = 0; return; } + var bs = n%this.DB; + var cbs = this.DB-bs; + var bm = (1<>bs; + for(var i = ds+1; i < this.t; ++i) { + r[i-ds-1] |= (this[i]&bm)<>bs; + } + if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; + } + if(a.t < this.t) { + c -= a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c -= a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c<0)?-1:0; + if(c < -1) r[i++] = this.DV+c; + else if(c > 0) r[i++] = c; + r.t = i; + r.clamp(); + } + + // (protected) r = this * a, r != this,a (HAC 14.12) + // "this" should be the larger one if appropriate. + function bnpMultiplyTo(a,r) { + var x = this.abs(), y = a.abs(); + var i = x.t; + r.t = i+y.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); + r.s = 0; + r.clamp(); + if(this.s != a.s) BigInteger.ZERO.subTo(r,r); + } + + // (protected) r = this^2, r != this (HAC 14.16) + function bnpSquareTo(r) { + var x = this.abs(); + var i = r.t = 2*x.t; + while(--i >= 0) r[i] = 0; + for(i = 0; i < x.t-1; ++i) { + var c = x.am(i,x[i],r,2*i,0,1); + if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { + r[i+x.t] -= x.DV; + r[i+x.t+1] = 1; + } + } + if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); + r.s = 0; + r.clamp(); + } + + // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) + // r != q, this != m. q or r may be null. + function bnpDivRemTo(m,q,r) { + var pm = m.abs(); + if(pm.t <= 0) return; + var pt = this.abs(); + if(pt.t < pm.t) { + if(q != null) q.fromInt(0); + if(r != null) this.copyTo(r); + return; + } + if(r == null) r = nbi(); + var y = nbi(), ts = this.s, ms = m.s; + var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus + if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } + else { pm.copyTo(y); pt.copyTo(r); } + var ys = y.t; + var y0 = y[ys-1]; + if(y0 == 0) return; + var yt = y0*(1<1)?y[ys-2]>>this.F2:0); + var d1 = this.FV/yt, d2 = (1<= 0) { + r[r.t++] = 1; + r.subTo(t,r); + } + BigInteger.ONE.dlShiftTo(ys,t); + t.subTo(y,y); // "negative" y so we can replace sub with am later + while(y.t < ys) y[y.t++] = 0; + while(--j >= 0) { + // Estimate quotient digit + var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); + if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out + y.dlShiftTo(j,t); + r.subTo(t,r); + while(r[i] < --qd) r.subTo(t,r); + } + } + if(q != null) { + r.drShiftTo(ys,q); + if(ts != ms) BigInteger.ZERO.subTo(q,q); + } + r.t = ys; + r.clamp(); + if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder + if(ts < 0) BigInteger.ZERO.subTo(r,r); + } + + // (public) this mod a + function bnMod(a) { + var r = nbi(); + this.abs().divRemTo(a,null,r); + if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); + return r; + } + + // Modular reduction using "classic" algorithm + function Classic(m) { this.m = m; } + function cConvert(x) { + if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); + else return x; + } + function cRevert(x) { return x; } + function cReduce(x) { x.divRemTo(this.m,null,x); } + function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + + Classic.prototype.convert = cConvert; + Classic.prototype.revert = cRevert; + Classic.prototype.reduce = cReduce; + Classic.prototype.mulTo = cMulTo; + Classic.prototype.sqrTo = cSqrTo; + + // (protected) return "-1/this % 2^DB"; useful for Mont. reduction + // justification: + // xy == 1 (mod m) + // xy = 1+km + // xy(2-xy) = (1+km)(1-km) + // x[y(2-xy)] = 1-k^2m^2 + // x[y(2-xy)] == 1 (mod m^2) + // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 + // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. + // JS multiply "overflows" differently from C/C++, so care is needed here. + function bnpInvDigit() { + if(this.t < 1) return 0; + var x = this[0]; + if((x&1) == 0) return 0; + var y = x&3; // y == 1/x mod 2^2 + y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 + y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 + y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y>0)?this.DV-y:-y; + } + + // Montgomery reduction + function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp&0x7fff; + this.mph = this.mp>>15; + this.um = (1<<(m.DB-15))-1; + this.mt2 = 2*m.t; + } + + // xR mod m + function montConvert(x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t,r); + r.divRemTo(this.m,null,r); + if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); + return r; + } + + // x/R mod m + function montRevert(x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + } + + // x = x/R mod m (HAC 14.32) + function montReduce(x) { + while(x.t <= this.mt2) // pad x so am has enough room later + x[x.t++] = 0; + for(var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i]&0x7fff; + var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; + // use am to combine the multiply-shift-add into one call + j = i+this.m.t; + x[j] += this.m.am(0,u0,x,i,0,this.m.t); + // propagate carry + while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } + } + x.clamp(); + x.drShiftTo(this.m.t,x); + if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); + } + + // r = "x^2/R mod m"; x != r + function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + + // r = "xy/R mod m"; x,y != r + function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + + Montgomery.prototype.convert = montConvert; + Montgomery.prototype.revert = montRevert; + Montgomery.prototype.reduce = montReduce; + Montgomery.prototype.mulTo = montMulTo; + Montgomery.prototype.sqrTo = montSqrTo; + + // (protected) true iff this is even + function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } + + // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) + function bnpExp(e,z) { + if(e > 0xffffffff || e < 1) return BigInteger.ONE; + var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; + g.copyTo(r); + while(--i >= 0) { + z.sqrTo(r,r2); + if((e&(1< 0) z.mulTo(r2,g,r); + else { var t = r; r = r2; r2 = t; } + } + return z.revert(r); + } + + // (public) this^e % m, 0 <= e < 2^32 + function bnModPowInt(e,m) { + var z; + if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); + return this.exp(e,z); + } + + // protected + BigInteger.prototype.copyTo = bnpCopyTo; + BigInteger.prototype.fromInt = bnpFromInt; + BigInteger.prototype.fromString = bnpFromString; + BigInteger.prototype.clamp = bnpClamp; + BigInteger.prototype.dlShiftTo = bnpDLShiftTo; + BigInteger.prototype.drShiftTo = bnpDRShiftTo; + BigInteger.prototype.lShiftTo = bnpLShiftTo; + BigInteger.prototype.rShiftTo = bnpRShiftTo; + BigInteger.prototype.subTo = bnpSubTo; + BigInteger.prototype.multiplyTo = bnpMultiplyTo; + BigInteger.prototype.squareTo = bnpSquareTo; + BigInteger.prototype.divRemTo = bnpDivRemTo; + BigInteger.prototype.invDigit = bnpInvDigit; + BigInteger.prototype.isEven = bnpIsEven; + BigInteger.prototype.exp = bnpExp; + + // public + BigInteger.prototype.toString = bnToString; + BigInteger.prototype.negate = bnNegate; + BigInteger.prototype.abs = bnAbs; + BigInteger.prototype.compareTo = bnCompareTo; + BigInteger.prototype.bitLength = bnBitLength; + BigInteger.prototype.mod = bnMod; + BigInteger.prototype.modPowInt = bnModPowInt; + + // "constants" + BigInteger.ZERO = nbv(0); + BigInteger.ONE = nbv(1); + + // Copyright (c) 2005-2009 Tom Wu + // All Rights Reserved. + // See "LICENSE" for details. + + // Extended JavaScript BN functions, required for RSA private ops. + + // Version 1.1: new BigInteger("0", 10) returns "proper" zero + // Version 1.2: square() API, isProbablePrime fix + + // (public) + function bnClone() { var r = nbi(); this.copyTo(r); return r; } + + // (public) return value as integer + function bnIntValue() { + if(this.s < 0) { + if(this.t == 1) return this[0]-this.DV; + else if(this.t == 0) return -1; + } + else if(this.t == 1) return this[0]; + else if(this.t == 0) return 0; + // assumes 16 < DB < 32 + return ((this[1]&((1<<(32-this.DB))-1))<>24; } + + // (public) return value as short (assumes DB>=16) + function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } + + // (protected) return x s.t. r^x < DV + function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } + + // (public) 0 if this == 0, 1 if this > 0 + function bnSigNum() { + if(this.s < 0) return -1; + else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; + else return 1; + } + + // (protected) convert to radix string + function bnpToRadix(b) { + if(b == null) b = 10; + if(this.signum() == 0 || b < 2 || b > 36) return "0"; + var cs = this.chunkSize(b); + var a = Math.pow(b,cs); + var d = nbv(a), y = nbi(), z = nbi(), r = ""; + this.divRemTo(d,y,z); + while(y.signum() > 0) { + r = (a+z.intValue()).toString(b).substr(1) + r; + y.divRemTo(d,y,z); + } + return z.intValue().toString(b) + r; + } + + // (protected) convert from radix string + function bnpFromRadix(s,b) { + this.fromInt(0); + if(b == null) b = 10; + var cs = this.chunkSize(b); + var d = Math.pow(b,cs), mi = false, j = 0, w = 0; + for(var i = 0; i < s.length; ++i) { + var x = intAt(s,i); + if(x < 0) { + if(s.charAt(i) == "-" && this.signum() == 0) mi = true; + continue; + } + w = b*w+x; + if(++j >= cs) { + this.dMultiply(d); + this.dAddOffset(w,0); + j = 0; + w = 0; + } + } + if(j > 0) { + this.dMultiply(Math.pow(b,j)); + this.dAddOffset(w,0); + } + if(mi) BigInteger.ZERO.subTo(this,this); + } + + // (protected) alternate constructor + function bnpFromNumber(a,b,c) { + if("number" == typeof b) { + // new BigInteger(int,int,RNG) + if(a < 2) this.fromInt(1); + else { + this.fromNumber(a,c); + if(!this.testBit(a-1)) // force MSB set + this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); + if(this.isEven()) this.dAddOffset(1,0); // force odd + while(!this.isProbablePrime(b)) { + this.dAddOffset(2,0); + if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); + } + } + } + else { + // new BigInteger(int,RNG) + var x = new Array(), t = a&7; + x.length = (a>>3)+1; + b.nextBytes(x); + if(t > 0) x[0] &= ((1< 0) { + if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) + r[k++] = d|(this.s<<(this.DB-p)); + while(i >= 0) { + if(p < 8) { + d = (this[i]&((1<>(p+=this.DB-8); + } + else { + d = (this[i]>>(p-=8))&0xff; + if(p <= 0) { p += this.DB; --i; } + } + if((d&0x80) != 0) d |= -256; + if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; + if(k > 0 || d != this.s) r[k++] = d; + } + } + return r; + } + + function bnEquals(a) { return(this.compareTo(a)==0); } + function bnMin(a) { return(this.compareTo(a)<0)?this:a; } + function bnMax(a) { return(this.compareTo(a)>0)?this:a; } + + // (protected) r = this op a (bitwise) + function bnpBitwiseTo(a,op,r) { + var i, f, m = Math.min(a.t,this.t); + for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); + if(a.t < this.t) { + f = a.s&this.DM; + for(i = m; i < this.t; ++i) r[i] = op(this[i],f); + r.t = this.t; + } + else { + f = this.s&this.DM; + for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); + r.t = a.t; + } + r.s = op(this.s,a.s); + r.clamp(); + } + + // (public) this & a + function op_and(x,y) { return x&y; } + function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } + + // (public) this | a + function op_or(x,y) { return x|y; } + function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } + + // (public) this ^ a + function op_xor(x,y) { return x^y; } + function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } + + // (public) this & ~a + function op_andnot(x,y) { return x&~y; } + function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } + + // (public) ~this + function bnNot() { + var r = nbi(); + for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; + r.t = this.t; + r.s = ~this.s; + return r; + } + + // (public) this << n + function bnShiftLeft(n) { + var r = nbi(); + if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); + return r; + } + + // (public) this >> n + function bnShiftRight(n) { + var r = nbi(); + if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); + return r; + } + + // return index of lowest 1-bit in x, x < 2^31 + function lbit(x) { + if(x == 0) return -1; + var r = 0; + if((x&0xffff) == 0) { x >>= 16; r += 16; } + if((x&0xff) == 0) { x >>= 8; r += 8; } + if((x&0xf) == 0) { x >>= 4; r += 4; } + if((x&3) == 0) { x >>= 2; r += 2; } + if((x&1) == 0) ++r; + return r; + } + + // (public) returns index of lowest 1-bit (or -1 if none) + function bnGetLowestSetBit() { + for(var i = 0; i < this.t; ++i) + if(this[i] != 0) return i*this.DB+lbit(this[i]); + if(this.s < 0) return this.t*this.DB; + return -1; + } + + // return number of 1 bits in x + function cbit(x) { + var r = 0; + while(x != 0) { x &= x-1; ++r; } + return r; + } + + // (public) return number of set bits + function bnBitCount() { + var r = 0, x = this.s&this.DM; + for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); + return r; + } + + // (public) true iff nth bit is set + function bnTestBit(n) { + var j = Math.floor(n/this.DB); + if(j >= this.t) return(this.s!=0); + return((this[j]&(1<<(n%this.DB)))!=0); + } + + // (protected) this op (1<>= this.DB; + } + if(a.t < this.t) { + c += a.s; + while(i < this.t) { + c += this[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while(i < a.t) { + c += a[i]; + r[i++] = c&this.DM; + c >>= this.DB; + } + c += a.s; + } + r.s = (c<0)?-1:0; + if(c > 0) r[i++] = c; + else if(c < -1) r[i++] = this.DV+c; + r.t = i; + r.clamp(); + } + + // (public) this + a + function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } + + // (public) this - a + function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } + + // (public) this * a + function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } + + // (public) this^2 + function bnSquare() { var r = nbi(); this.squareTo(r); return r; } + + // (public) this / a + function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } + + // (public) this % a + function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } + + // (public) [this/a,this%a] + function bnDivideAndRemainder(a) { + var q = nbi(), r = nbi(); + this.divRemTo(a,q,r); + return new Array(q,r); + } + + // (protected) this *= n, this >= 0, 1 < n < DV + function bnpDMultiply(n) { + this[this.t] = this.am(0,n-1,this,0,0,this.t); + ++this.t; + this.clamp(); + } + + // (protected) this += n << w words, this >= 0 + function bnpDAddOffset(n,w) { + if(n == 0) return; + while(this.t <= w) this[this.t++] = 0; + this[w] += n; + while(this[w] >= this.DV) { + this[w] -= this.DV; + if(++w >= this.t) this[this.t++] = 0; + ++this[w]; + } + } + + // A "null" reducer + function NullExp() {} + function nNop(x) { return x; } + function nMulTo(x,y,r) { x.multiplyTo(y,r); } + function nSqrTo(x,r) { x.squareTo(r); } + + NullExp.prototype.convert = nNop; + NullExp.prototype.revert = nNop; + NullExp.prototype.mulTo = nMulTo; + NullExp.prototype.sqrTo = nSqrTo; + + // (public) this^e + function bnPow(e) { return this.exp(e,new NullExp()); } + + // (protected) r = lower n words of "this * a", a.t <= n + // "this" should be the larger one if appropriate. + function bnpMultiplyLowerTo(a,n,r) { + var i = Math.min(this.t+a.t,n); + r.s = 0; // assumes a,this >= 0 + r.t = i; + while(i > 0) r[--i] = 0; + var j; + for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); + for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); + r.clamp(); + } + + // (protected) r = "this * a" without lower n words, n > 0 + // "this" should be the larger one if appropriate. + function bnpMultiplyUpperTo(a,n,r) { + --n; + var i = r.t = this.t+a.t-n; + r.s = 0; // assumes a,this >= 0 + while(--i >= 0) r[i] = 0; + for(i = Math.max(n-this.t,0); i < a.t; ++i) + r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); + r.clamp(); + r.drShiftTo(1,r); + } + + // Barrett modular reduction + function Barrett(m) { + // setup Barrett + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2*m.t,this.r2); + this.mu = this.r2.divide(m); + this.m = m; + } + + function barrettConvert(x) { + if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); + else if(x.compareTo(this.m) < 0) return x; + else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } + } + + function barrettRevert(x) { return x; } + + // x = x mod m (HAC 14.42) + function barrettReduce(x) { + x.drShiftTo(this.m.t-1,this.r2); + if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } + this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); + this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); + while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); + x.subTo(this.r2,x); + while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); + } + + // r = x^2 mod m; x != r + function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } + + // r = x*y mod m; x,y != r + function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } + + Barrett.prototype.convert = barrettConvert; + Barrett.prototype.revert = barrettRevert; + Barrett.prototype.reduce = barrettReduce; + Barrett.prototype.mulTo = barrettMulTo; + Barrett.prototype.sqrTo = barrettSqrTo; + + // (public) this^e % m (HAC 14.85) + function bnModPow(e,m) { + var i = e.bitLength(), k, r = nbv(1), z; + if(i <= 0) return r; + else if(i < 18) k = 1; + else if(i < 48) k = 3; + else if(i < 144) k = 4; + else if(i < 768) k = 5; + else k = 6; + if(i < 8) + z = new Classic(m); + else if(m.isEven()) + z = new Barrett(m); + else + z = new Montgomery(m); + + // precomputation + var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { + var g2 = nbi(); + z.sqrTo(g[1],g2); + while(n <= km) { + g[n] = nbi(); + z.mulTo(g2,g[n-2],g[n]); + n += 2; + } + } + + var j = e.t-1, w, is1 = true, r2 = nbi(), t; + i = nbits(e[j])-1; + while(j >= 0) { + if(i >= k1) w = (e[j]>>(i-k1))&km; + else { + w = (e[j]&((1<<(i+1))-1))<<(k1-i); + if(j > 0) w |= e[j-1]>>(this.DB+i-k1); + } + + n = k; + while((w&1) == 0) { w >>= 1; --n; } + if((i -= n) < 0) { i += this.DB; --j; } + if(is1) { // ret == 1, don't bother squaring or multiplying it + g[w].copyTo(r); + is1 = false; + } + else { + while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } + if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } + z.mulTo(r2,g[w],r); + } + + while(j >= 0 && (e[j]&(1< 0) { + x.rShiftTo(g,x); + y.rShiftTo(g,y); + } + while(x.signum() > 0) { + if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); + if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); + if(x.compareTo(y) >= 0) { + x.subTo(y,x); + x.rShiftTo(1,x); + } + else { + y.subTo(x,y); + y.rShiftTo(1,y); + } + } + if(g > 0) y.lShiftTo(g,y); + return y; + } + + // (protected) this % n, n < 2^26 + function bnpModInt(n) { + if(n <= 0) return 0; + var d = this.DV%n, r = (this.s<0)?n-1:0; + if(this.t > 0) + if(d == 0) r = this[0]%n; + else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; + return r; + } + + // (public) 1/this % m (HAC 14.61) + function bnModInverse(m) { + var ac = m.isEven(); + if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; + var u = m.clone(), v = this.clone(); + var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); + while(u.signum() != 0) { + while(u.isEven()) { + u.rShiftTo(1,u); + if(ac) { + if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } + a.rShiftTo(1,a); + } + else if(!b.isEven()) b.subTo(m,b); + b.rShiftTo(1,b); + } + while(v.isEven()) { + v.rShiftTo(1,v); + if(ac) { + if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } + c.rShiftTo(1,c); + } + else if(!d.isEven()) d.subTo(m,d); + d.rShiftTo(1,d); + } + if(u.compareTo(v) >= 0) { + u.subTo(v,u); + if(ac) a.subTo(c,a); + b.subTo(d,b); + } + else { + v.subTo(u,v); + if(ac) c.subTo(a,c); + d.subTo(b,d); + } + } + if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; + if(d.compareTo(m) >= 0) return d.subtract(m); + if(d.signum() < 0) d.addTo(m,d); else return d; + if(d.signum() < 0) return d.add(m); else return d; + } + + var lowprimes = [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]; + var lplim = (1<<26)/lowprimes[lowprimes.length-1]; + + // (public) test primality with certainty >= 1-.5^t + function bnIsProbablePrime(t) { + var i, x = this.abs(); + if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { + for(i = 0; i < lowprimes.length; ++i) + if(x[0] == lowprimes[i]) return true; + return false; + } + if(x.isEven()) return false; + i = 1; + while(i < lowprimes.length) { + var m = lowprimes[i], j = i+1; + while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; + m = x.modInt(m); + while(i < j) if(m%lowprimes[i++] == 0) return false; + } + return x.millerRabin(t); + } + + // (protected) true if probably prime (HAC 4.24, Miller-Rabin) + function bnpMillerRabin(t) { + var n1 = this.subtract(BigInteger.ONE); + var k = n1.getLowestSetBit(); + if(k <= 0) return false; + var r = n1.shiftRight(k); + t = (t+1)>>1; + if(t > lowprimes.length) t = lowprimes.length; + var a = nbi(); + for(var i = 0; i < t; ++i) { + //Pick bases at random, instead of starting at 2 + a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); + var y = a.modPow(r,this); + if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { + var j = 1; + while(j++ < k && y.compareTo(n1) != 0) { + y = y.modPowInt(2,this); + if(y.compareTo(BigInteger.ONE) == 0) return false; + } + if(y.compareTo(n1) != 0) return false; + } + } + return true; + } + + // protected + BigInteger.prototype.chunkSize = bnpChunkSize; + BigInteger.prototype.toRadix = bnpToRadix; + BigInteger.prototype.fromRadix = bnpFromRadix; + BigInteger.prototype.fromNumber = bnpFromNumber; + BigInteger.prototype.bitwiseTo = bnpBitwiseTo; + BigInteger.prototype.changeBit = bnpChangeBit; + BigInteger.prototype.addTo = bnpAddTo; + BigInteger.prototype.dMultiply = bnpDMultiply; + BigInteger.prototype.dAddOffset = bnpDAddOffset; + BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; + BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; + BigInteger.prototype.modInt = bnpModInt; + BigInteger.prototype.millerRabin = bnpMillerRabin; + + // public + BigInteger.prototype.clone = bnClone; + BigInteger.prototype.intValue = bnIntValue; + BigInteger.prototype.byteValue = bnByteValue; + BigInteger.prototype.shortValue = bnShortValue; + BigInteger.prototype.signum = bnSigNum; + BigInteger.prototype.toByteArray = bnToByteArray; + BigInteger.prototype.equals = bnEquals; + BigInteger.prototype.min = bnMin; + BigInteger.prototype.max = bnMax; + BigInteger.prototype.and = bnAnd; + BigInteger.prototype.or = bnOr; + BigInteger.prototype.xor = bnXor; + BigInteger.prototype.andNot = bnAndNot; + BigInteger.prototype.not = bnNot; + BigInteger.prototype.shiftLeft = bnShiftLeft; + BigInteger.prototype.shiftRight = bnShiftRight; + BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; + BigInteger.prototype.bitCount = bnBitCount; + BigInteger.prototype.testBit = bnTestBit; + BigInteger.prototype.setBit = bnSetBit; + BigInteger.prototype.clearBit = bnClearBit; + BigInteger.prototype.flipBit = bnFlipBit; + BigInteger.prototype.add = bnAdd; + BigInteger.prototype.subtract = bnSubtract; + BigInteger.prototype.multiply = bnMultiply; + BigInteger.prototype.divide = bnDivide; + BigInteger.prototype.remainder = bnRemainder; + BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; + BigInteger.prototype.modPow = bnModPow; + BigInteger.prototype.modInverse = bnModInverse; + BigInteger.prototype.pow = bnPow; + BigInteger.prototype.gcd = bnGCD; + BigInteger.prototype.isProbablePrime = bnIsProbablePrime; + + // JSBN-specific extension + BigInteger.prototype.square = bnSquare; + + // Expose the Barrett function + BigInteger.prototype.Barrett = Barrett + + // BigInteger interfaces not implemented in jsbn: + + // BigInteger(int signum, byte[] magnitude) + // double doubleValue() + // float floatValue() + // int hashCode() + // long longValue() + // static BigInteger valueOf(long val) + + // Random number generator - requires a PRNG backend, e.g. prng4.js + + // For best results, put code like + // + // in your main HTML document. + + var rng_state; + var rng_pool; + var rng_pptr; + + // Mix in a 32-bit integer into the pool + function rng_seed_int(x) { + rng_pool[rng_pptr++] ^= x & 255; + rng_pool[rng_pptr++] ^= (x >> 8) & 255; + rng_pool[rng_pptr++] ^= (x >> 16) & 255; + rng_pool[rng_pptr++] ^= (x >> 24) & 255; + if(rng_pptr >= rng_psize) rng_pptr -= rng_psize; + } + + // Mix in the current time (w/milliseconds) into the pool + function rng_seed_time() { + rng_seed_int(new Date().getTime()); + } + + // Initialize the pool with junk if needed. + if(rng_pool == null) { + rng_pool = new Array(); + rng_pptr = 0; + var t; + if(typeof window !== "undefined" && window.crypto) { + if (window.crypto.getRandomValues) { + // Use webcrypto if available + var ua = new Uint8Array(32); + window.crypto.getRandomValues(ua); + for(t = 0; t < 32; ++t) + rng_pool[rng_pptr++] = ua[t]; + } + else if(navigator.appName == "Netscape" && navigator.appVersion < "5") { + // Extract entropy (256 bits) from NS4 RNG if available + var z = window.crypto.random(32); + for(t = 0; t < z.length; ++t) + rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; + } + } + while(rng_pptr < rng_psize) { // extract some randomness from Math.random() + t = Math.floor(65536 * Math.random()); + rng_pool[rng_pptr++] = t >>> 8; + rng_pool[rng_pptr++] = t & 255; + } + rng_pptr = 0; + rng_seed_time(); + //rng_seed_int(window.screenX); + //rng_seed_int(window.screenY); + } + + function rng_get_byte() { + if(rng_state == null) { + rng_seed_time(); + rng_state = prng_newstate(); + rng_state.init(rng_pool); + for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) + rng_pool[rng_pptr] = 0; + rng_pptr = 0; + //rng_pool = null; + } + // TODO: allow reseeding after first request + return rng_state.next(); + } + + function rng_get_bytes(ba) { + var i; + for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); + } + + function SecureRandom() {} + + SecureRandom.prototype.nextBytes = rng_get_bytes; + + // prng4.js - uses Arcfour as a PRNG + + function Arcfour() { + this.i = 0; + this.j = 0; + this.S = new Array(); + } + + // Initialize arcfour context from key, an array of ints, each from [0..255] + function ARC4init(key) { + var i, j, t; + for(i = 0; i < 256; ++i) + this.S[i] = i; + j = 0; + for(i = 0; i < 256; ++i) { + j = (j + this.S[i] + key[i % key.length]) & 255; + t = this.S[i]; + this.S[i] = this.S[j]; + this.S[j] = t; + } + this.i = 0; + this.j = 0; + } + + function ARC4next() { + var t; + this.i = (this.i + 1) & 255; + this.j = (this.j + this.S[this.i]) & 255; + t = this.S[this.i]; + this.S[this.i] = this.S[this.j]; + this.S[this.j] = t; + return this.S[(t + this.S[this.i]) & 255]; + } + + Arcfour.prototype.init = ARC4init; + Arcfour.prototype.next = ARC4next; + + // Plug in your RNG constructor here + function prng_newstate() { + return new Arcfour(); + } + + // Pool size must be a multiple of 4 and greater than 32. + // An array of bytes the size of the pool will be passed to init() + var rng_psize = 256; + + BigInteger.SecureRandom = SecureRandom; + BigInteger.BigInteger = BigInteger; + if (typeof exports !== 'undefined') { + exports = module.exports = BigInteger; + } else { + this.BigInteger = BigInteger; + this.SecureRandom = SecureRandom; + } + +}).call(this); diff --git a/node_modules/jsbn/package.json b/node_modules/jsbn/package.json new file mode 100644 index 000000000..7220c19f5 --- /dev/null +++ b/node_modules/jsbn/package.json @@ -0,0 +1,21 @@ +{ + "name": "jsbn", + "version": "0.1.1", + "description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.", + "main": "index.js", + "scripts": { + "test": "mocha test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/andyperlitch/jsbn.git" + }, + "keywords": [ + "biginteger", + "bignumber", + "big", + "integer" + ], + "author": "Tom Wu", + "license": "MIT" +} diff --git a/node_modules/jsdoctypeparser/.eslintignore b/node_modules/jsdoctypeparser/.eslintignore new file mode 100644 index 000000000..6fb72d875 --- /dev/null +++ b/node_modules/jsdoctypeparser/.eslintignore @@ -0,0 +1,2 @@ +lib/legacy +node_modules diff --git a/node_modules/jsdoctypeparser/.eslintrc b/node_modules/jsdoctypeparser/.eslintrc new file mode 100644 index 000000000..9d2749c2c --- /dev/null +++ b/node_modules/jsdoctypeparser/.eslintrc @@ -0,0 +1,15 @@ +{ + "env": { + "node": true + }, + "rules": { + "quotes": [2, "single", "avoid-escape"], + "no-use-before-define": [2, "nofunc"], + "space-infix-ops": [2, { "int32Hint": false }], + "curly": [2, "multi-line"], + "comma-dangle": [2, "always-multiline"], + + "//": "For Closure Library style parameter namings such as opt_optionalParam, var_args.", + "camelcase": 0 + } +} diff --git a/node_modules/jsdoctypeparser/.jscsrc b/node_modules/jsdoctypeparser/.jscsrc new file mode 100644 index 000000000..6e5ad4e10 --- /dev/null +++ b/node_modules/jsdoctypeparser/.jscsrc @@ -0,0 +1,59 @@ +{ + "excludeFiles": ["node_modules/**", "lib/legacy/**"], + + "disallowEmptyBlocks": true, + "disallowImplicitTypeConversion": ["numeric", "boolean", "binary", "string"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineStrings": true, + "disallowMultipleSpaces": true, + "disallowMultipleVarDecl": "exceptUndefined", + "disallowNewlineBeforeBlockStatements": true, + "disallowQuotedKeysInObjects": "allButReserved", + "disallowSpaceAfterObjectKeys": true, + "disallowSpaceAfterPrefixUnaryOperators": true, + "disallowSpaceBeforePostfixUnaryOperators": true, + "disallowSpacesInCallExpression": true, + "disallowTrailingWhitespace": true, + "disallowYodaConditions": true, + "maximumLineLength": 100, + "requireBlocksOnNewline": true, + "requireCapitalizedComments": true, + "requireCapitalizedConstructors": true, + "requireCommaBeforeLineBreak": true, + "requireFunctionDeclarations": true, + "requireKeywordsOnNewLine": ["else"], + "requireLineBreakAfterVariableAssignment": true, + "requireParenthesesAroundIIFE": true, + "requireSemicolons": true, + "requireSpaceAfterBinaryOperators": true, + "requireSpaceBeforeBinaryOperators": true, + "requireSpaceAfterKeywords": [ + "do", + "for", + "if", + "else", + "switch", + "case", + "try", + "catch", + "void", + "while", + "with", + "return", + "typeof" + ], + "requireSpaceBeforeBlockStatements": true, + "requireSpaceBeforeObjectValues": true, + "requireSpaceBetweenArguments": true, + "requireSpacesInConditionalExpression": true, + "requireSpacesInForStatement": true, + "requireTrailingComma": { "ignoreSingleLine": true }, + "safeContextKeyword": ["self"], + "validateIndentation": 2, + "validateLineBreaks": "LF", + "validateNewlineAfterArrayElements": { + "maximum": 2 + }, + "validateParameterSeparator": ", ", + "validateQuoteMarks": { "mark": "'", "escape": true } +} diff --git a/node_modules/jsdoctypeparser/.npmignore b/node_modules/jsdoctypeparser/.npmignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/node_modules/jsdoctypeparser/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/jsdoctypeparser/.travis.yml b/node_modules/jsdoctypeparser/.travis.yml new file mode 100644 index 000000000..c98e1a5e6 --- /dev/null +++ b/node_modules/jsdoctypeparser/.travis.yml @@ -0,0 +1,7 @@ +script: + - "npm test" + +language: node_js + +node_js: + - 0.10 diff --git a/node_modules/jsdoctypeparser/README.md b/node_modules/jsdoctypeparser/README.md new file mode 100644 index 000000000..aacdc30ed --- /dev/null +++ b/node_modules/jsdoctypeparser/README.md @@ -0,0 +1,150 @@ +# Jsdoc type parser +[![Build Status](https://travis-ci.org/Kuniwak/jsdoctypeparser.svg?branch=master)](https://travis-ci.org/Kuniwak/jsdoctypeparser) +[![NPM version](https://badge.fury.io/js/jsdoctypeparser.svg)](http://badge.fury.io/js/jsdoctypeparser) + +This module is Jsdoc type expression parser, it makes easy to publish a type name link by `toHTML()`. + +This parser provide: + +* Parse to object model +* Convert a type name to a link by using `toHtml()` + +```javascript +var Parser = require('jsdoctypeparser').Parser; +var parser = new Parser(); +var result = parser.parse('Array.='); + +console.log(result.toHtml()); // ⇒ 'Array.<MyClass>|undefined' +console.log(result.toString()); // ⇒ 'Array.|undefined' +``` + +This parser can parse: + +* [JsDoc type expressions](https://code.google.com/p/jsdoc-toolkit/wiki/TagParam) + * `foo.bar`, `String[]` +* [Closure Compiler type expressions](https://developers.google.com/closure/compiler/docs/js-for-compiler) + * `Array.`, `function(this: Objext, arg1, arg2): ret` +* Nested type expressions + * `Array.>`, `function(function(Function))` + + +## Live demo +The [live demo](http://kuniwak.github.io/jsdoctypeparser/) is available. + + +## Publishing + +```javascript +var Parser = require('jsdoctypeparser').Parser; +var parser = new Parser(); +var result = parser.parse('Array.='); +``` + +* `result.toString()` ⇒ `'Array.|undefined'` + +* `result.toHtml()` ⇒ `'Array.<MyClass>|undefined'` + +### Customize type name URI +You can change a file URL by set `TypeBulder.TypeName.getUrlByTypeName(typeName)`. + +```javascript +var Builder = require('jsdoctypeparser').Builder; +Bulder.TypeName.getUrlByTypeName = function(typeName) { + // do something. + return typeName; +}; +``` + +## Parsing + +```javascript +var Parser = require('jsdoctypeparser').Parser; +var parser = new Parser(); +var result = parser.parse('Array.|string|undefined'); +``` + +The `result` is: + +```javascript +{ // instanceof TypeBuilder.TypeUnion + optional: true, + types: [ + { // instanceof TypeBuilder.FunctionType + parameterTypeUnions: [ + { // instanceof TypeBuilder.TypeUnion + types: [ + { name: 'string' }, // instanceof TypeBuilder.TypeName + { name: 'number' } // instanceof TypeBuilder.TypeName + ] + }, + { // instanceof TypeBuilder.TypeUnion + nullable: true + optional: true + types: [ + { name: 'Object' } // instanceof TypeBuilder.TypeName + ] + } + ] + }, { // instanceof TypeBuilder.TypeName + { name: 'string' } + } + ] +} +``` + +### Specification + +#### Type name +```javascript +TypeName = { + name: string +}; +``` + +#### Type Union +```javascript +TypeUnion = { + optional: boolean, + nullable: boolean, + variable: boolean, + nonNullable: boolean, + all: boolean, + unknown: boolean, + types: Array. +}; +``` + +#### Generic type +```javascript +GenericType = { + genericTypeName: string, + parameterTypeUnions: Array. +}; +``` + +#### Function type +```javascript +FunctionType = { + parameterTypeUnions: Array., + returnTypeUnion: TypeUnion|null, + isConstructor: boolean, + contextTypeUnion: TypeUnion|null +}; +``` + +#### Record type +```javascript +RecordType = { + entries: Array. +}; + +RecordType.Entry = { + name: string, + typeUnion: TypeUnion +}; +``` + + +## License +This script licensed under the MIT. +See: [http://orgachem.mit-license.org](http://orgachem.mit-license.org) diff --git a/node_modules/jsdoctypeparser/benchmark/benchmark_TypeBuilder.js b/node_modules/jsdoctypeparser/benchmark/benchmark_TypeBuilder.js new file mode 100644 index 000000000..a9c9ebb70 --- /dev/null +++ b/node_modules/jsdoctypeparser/benchmark/benchmark_TypeBuilder.js @@ -0,0 +1,152 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + + +var Benchmark = require('benchmark'); +var jsdoctypebuilder = require('../lib'); +var TypeBuilder = jsdoctypebuilder.Builder; + +var suite = new Benchmark.Suite(); +var util = require('../lib/util'); + +var builder = new TypeBuilder(); + + +suite + .add('Primitive type', function() { + builder.setTypeString('boolean'); + builder.build(); + }) + .add('Global Object', function() { + builder.setTypeString('Window'); + builder.build(); + }) + .add('User Object', function() { + builder.setTypeString('goog.ui.Menu'); + builder.build(); + }) + .add('Generics with a parameter', function() { + builder.setTypeString('Array.'); + builder.build(); + }) + .add('Generics with two parameters', function() { + builder.setTypeString('Object.'); + builder.build(); + }) + .add('Generics in Jsdoc style', function() { + builder.setTypeString('String[]'); + builder.build(); + }) + .add('Formal type union', function() { + builder.setTypeString('(number|boolean)'); + builder.build(); + }) + .add('Informal type union', function() { + builder.setTypeString('number|boolean'); + builder.build(); + }) + .add('Record type', function() { + builder.setTypeString('{myNum: number, myObject}'); + builder.build(); + }) + .add('Record type in generics', function() { + builder.setTypeString('Array.<{length}>'); + builder.build(); + }) + .add('NUllable type', function() { + builder.setTypeString('?number'); + builder.build(); + }) + .add('Nullable on a tail', function() { + builder.setTypeString('goog.ui.Component?'); + builder.build(); + }) + .add('Non nullable type', function() { + builder.setTypeString('!Object'); + builder.build(); + }) + .add('Non nullable type on a tail', function() { + builder.setTypeString('Object!'); + builder.build(); + }) + .add('Function type', function() { + builder.setTypeString('Function'); + builder.build(); + }) + .add('Function type with no parameter', function() { + builder.setTypeString('function()'); + builder.build(); + }) + .add('Function type with a parameter', function() { + builder.setTypeString('function(string)'); + builder.build(); + }) + .add('Function type with two parameters', function() { + builder.setTypeString('function(string, boolean)'); + builder.build(); + }) + .add('Function type with a return', function() { + builder.setTypeString('function(): number'); + builder.build(); + }) + .add('Function type with a context type', function() { + builder.setTypeString('function(this:goog.ui.Menu, string)'); + builder.build(); + }) + .add('Function type as a constructor', function() { + builder.setTypeString('function(new:goog.ui.Menu, string)'); + builder.build(); + }) + .add('Function type with variable parameters', function() { + builder.setTypeString('function(string, ...[number]): number'); + builder.build(); + }) + .add('Function type with nullable or optional parameters', function() { + builder.setTypeString('function(?string=, number=)'); + builder.build(); + }) + .add('Function type as goog.ui.Component#forEachChild', function() { + builder.setTypeString('function(this:T,?,number):?'); + builder.build(); + }) + .add('Variable type', function() { + builder.setTypeString('...number'); + builder.build(); + }) + .add('Optional type', function() { + builder.setTypeString('number='); + builder.build(); + }) + .add('All type', function() { + builder.setTypeString('*'); + builder.build(); + }) + .add('Unknown type', function() { + builder.setTypeString('?'); + builder.build(); + }) + .add('Unknown type with a keyword', function() { + builder.setTypeString('unknown'); + builder.build(); + }) + .add('Optional type with a "undefined" keyword', function() { + builder.setTypeString('Object|undefined'); + builder.build(); + }) + .add('Optional type with a "void" keyword', function() { + builder.setTypeString('Object|void'); + builder.build(); + }) + .on('complete', function() { + var elapsed = 0; + for (var i = 0, l = this.length, benchmark; i < l; ++i) { + benchmark = this[i]; + var name = benchmark.name; + var whites = util.repeat(' ', 55 - name.length); + + console.log(name + whites + ': ' + (benchmark.times.period * 1000) + ' msec'); + elapsed += benchmark.times.elapsed; + } + console.log('Complete (' + benchmark.times.elapsed + ' sec)'); + }) + .run({ 'async': true }); diff --git a/node_modules/jsdoctypeparser/benchmark/benchmark_TypeLexer.js b/node_modules/jsdoctypeparser/benchmark/benchmark_TypeLexer.js new file mode 100644 index 000000000..6351b920a --- /dev/null +++ b/node_modules/jsdoctypeparser/benchmark/benchmark_TypeLexer.js @@ -0,0 +1,120 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + + +var Benchmark = require('benchmark'); +var jsdoctypelexer = require('../lib'); +var TypeLexer = jsdoctypelexer.Lexer; + +var suite = new Benchmark.Suite(); +var util = require('../lib/util'); + +var lexer = new TypeLexer(); + +suite + .add('Primitive type', function() { + lexer.analyze('boolean'); + }) + .add('Global Object', function() { + lexer.analyze('Window'); + }) + .add('User Object', function() { + lexer.analyze('goog.ui.Menu'); + }) + .add('Generics with a parameter', function() { + lexer.analyze('Array.'); + }) + .add('Generics with two parameters', function() { + lexer.analyze('Object.'); + }) + .add('Generics in Jsdoc style', function() { + lexer.analyze('String[]'); + }) + .add('Formal type union', function() { + lexer.analyze('(number|boolean)'); + }) + .add('Informal type union', function() { + lexer.analyze('number|boolean'); + }) + .add('Record type', function() { + lexer.analyze('{myNum: number, myObject}'); + }) + .add('Record type in generics', function() { + lexer.analyze('Array.<{length}>'); + }) + .add('NUllable type', function() { + lexer.analyze('?number'); + }) + .add('Nullable on a tail', function() { + lexer.analyze('goog.ui.Component?'); + }) + .add('Non nullable type', function() { + lexer.analyze('!Object'); + }) + .add('Non nullable type on a tail', function() { + lexer.analyze('Object!'); + }) + .add('Function type', function() { + lexer.analyze('Function'); + }) + .add('Function type with no parameter', function() { + lexer.analyze('function()'); + }) + .add('Function type with a parameter', function() { + lexer.analyze('function(string)'); + }) + .add('Function type with two parameters', function() { + lexer.analyze('function(string, boolean)'); + }) + .add('Function type with a return', function() { + lexer.analyze('function(): number'); + }) + .add('Function type with a context type', function() { + lexer.analyze('function(this:goog.ui.Menu, string)'); + }) + .add('Function type as a constructor', function() { + lexer.analyze('function(new:goog.ui.Menu, string)'); + }) + .add('Function type with variable parameters', function() { + lexer.analyze('function(string, ...[number]): number'); + }) + .add('Function type with nullable or optional parameters', function() { + lexer.analyze('function(?string=, number=)'); + }) + .add('Function type as goog.ui.Component#forEachChild', function() { + lexer.analyze('function(this:T,?,number):?'); + }) + .add('Variable type', function() { + lexer.analyze('...number'); + }) + .add('Optional type', function() { + lexer.analyze('number='); + }) + .add('All type', function() { + lexer.analyze('*'); + }) + .add('Unknown type', function() { + lexer.analyze('?'); + }) + .add('Unknown type with a keyword', function() { + lexer.analyze('unknown'); + }) + .add('Optional type with a "undefined" keyword', function() { + lexer.analyze('Object|undefined'); + }) + .add('Optional type with a "void" keyword', function() { + lexer.analyze('Object|void'); + }) + .on('complete', function() { + var elapsed = 0; + for (var i = 0, l = this.length, benchmark; i < l; ++i) { + benchmark = this[i]; + var name = benchmark.name; + var whites = util.repeat(' ', 55 - name.length); + + console.log(name + whites + ': ' + (benchmark.times.period * 1000) + ' msec'); + elapsed += benchmark.times.elapsed; + } + console.log('Complete (' + benchmark.times.elapsed + ' sec)'); + }) + .run({ 'async': true }); diff --git a/node_modules/jsdoctypeparser/bin/jsdoctypeparser b/node_modules/jsdoctypeparser/bin/jsdoctypeparser new file mode 100755 index 000000000..27b86b400 --- /dev/null +++ b/node_modules/jsdoctypeparser/bin/jsdoctypeparser @@ -0,0 +1,6 @@ +#! /usr/bin/env node +'use strict'; + +var Parser = require('../lib/index.js').Parser; +var parser = new Parser(); +console.log('%j', parser.parse(process.argv[2])); diff --git a/node_modules/jsdoctypeparser/gulpfile.js b/node_modules/jsdoctypeparser/gulpfile.js new file mode 100644 index 000000000..f5c4ec219 --- /dev/null +++ b/node_modules/jsdoctypeparser/gulpfile.js @@ -0,0 +1,28 @@ +'use strict'; + +var gulp = require('gulp'); +var watch = require('gulp-watch'); +var peg = require('gulp-peg'); +var gutil = require('gulp-util'); +var notify = require('gulp-notify'); +var plumber = require('gulp-plumber'); + +var PEG_FILES = 'peg_src/**/*.pegjs'; +var COMPILED_PEG_FILE = 'peg_lib'; + +gulp.task('watch', function() { + return gulp.src(PEG_FILES) + .pipe(plumber({ errorHandler: notify.onError('<%= error.message %>') })) + .pipe(watch(PEG_FILES)) + .pipe(peg().on('error', gutil.log)) + .pipe(notify('Compiled: <%= file.relative %>!')) + .pipe(gulp.dest(COMPILED_PEG_FILE)); +}); + +gulp.task('peg', function() { + return gulp.src(PEG_FILES) + .pipe(peg().on('error', gutil.log)) + .pipe(gulp.dest(COMPILED_PEG_FILE)); +}); + +gulp.task('build', ['peg']); diff --git a/node_modules/jsdoctypeparser/lib/NodeType.js b/node_modules/jsdoctypeparser/lib/NodeType.js new file mode 100644 index 000000000..11e4341de --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/NodeType.js @@ -0,0 +1,21 @@ +var NodeType = { + NAME: 0, + MEMBER: 1, + UNION: 2, + VARIADIC: 3, + RECORD: 4, + RECORD_ENTRY: 5, + GENERIC: 6, + MODULE: 7, + OPTIONAL: 8, + NULLABLE: 9, + NOT_NULLABLE: 10, + FUNCTION: 11, + ANY: 12, + UNKNOWN: 13, + INNER_MEMBER: 14, + INSTANCE_MEMBER: 15, +}; + + +module.exports = NodeType; diff --git a/node_modules/jsdoctypeparser/lib/Parser.js b/node_modules/jsdoctypeparser/lib/Parser.js new file mode 100644 index 000000000..407b3c328 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/Parser.js @@ -0,0 +1,8 @@ +'use strict'; + +var parser = require('../peg_lib/jsdoctype.js'); + +module.exports = { + SyntaxError: parser.SyntaxError, + parse: parser.parse, +}; diff --git a/node_modules/jsdoctypeparser/lib/TransformForLegacy.js b/node_modules/jsdoctypeparser/lib/TransformForLegacy.js new file mode 100644 index 000000000..3fe30d7b5 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/TransformForLegacy.js @@ -0,0 +1,532 @@ +'use strict'; + + +var util = require('util'); +var lodash = require('lodash'); +var NodeType = require('./NodeType.js'); + +var LegacyTypeBuilder = require('./legacy/TypeBuilder.js'); + + +/** + * @name Node + * @typedef {{ type: module:lib/NodeType }} + */ + + + +/** + * @name LegacyNode + * @typedef {Object} + */ + + + +/** + * A class for transform errors. + * @param {string} msg Error message. + * @constructor + * @extends {Error} + */ +function TransformationError(msg) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.message = util.format('TransformationError: %s', msg); +} +util.inherits(TransformationError, Error); + + +/** + * Transform a strict type node structure to a legacy node. + * @param {Node} nodeToTransform Node to transform. + * @return {{ types: Array }} Root union type node. + */ +function transform(nodeToTransform) { + // In legacy spec, root node is always an union type node. + var rootUnionNode; + + // If the node is already union node, transform and return it. + if (nodeToTransform.type === NodeType.UNION) { + rootUnionNode = transformUnionTypeNode(nodeToTransform); + return rootUnionNode; + } + + // If the node is not union node, we should wrap by an implicit union node. + rootUnionNode = createLegacyUnionType([]); + rootUnionNode = wrapByLegacyUnionTypeNode(nodeToTransform, rootUnionNode); + return rootUnionNode; +} + + +/** + * @param {module:lib/NodeType} nodeType Node type. + * @return {string} Node type name. + */ +function getNodeTypeName(nodeType) { + return lodash.findKey(NodeType, function(nodeTypeCandidate) { + return nodeType === nodeTypeCandidate; + }); +} + + +/** + * @param {Node} node Node to test. + * @param {module:lib/NodeType} expectedType Expected node type. + * @throws {module:lib/TransformForLegacy/TransformationError} + */ +function assertNodeType(node, expectedType) { + if (node.type === expectedType) return; + + var msg = util.format('Expected %s, but got %s: %j', + getNodeTypeName(expectedType), + getNodeTypeName(node.type), + node); + + throw new TransformationError(msg); +} + + +/** + * @param {Node} node Node to be wrapped by a legacy + * union type node.. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + */ +function wrapByLegacyUnionTypeNode(node, opt_contextUnionTypeNode) { + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + if (isUnionTypeNodeFamily(node)) { + return transformNode(node, contextUnionTypeNode); + } + + // In the legacy builder, it normalize a type union with undefined. + // And when the type union has only "undefined", the type union has no params + // and its optional flag is true too (it is a bad spec...). + if (node.type === NodeType.NAME) { + switch (node.name) { + case 'undefined': + case 'void': + contextUnionTypeNode.optional = true; + return contextUnionTypeNode; + case 'null': + contextUnionTypeNode.nullable = true; + contextUnionTypeNode.nonNullable = false; + return contextUnionTypeNode; + case 'Unknown': + case 'unknown': + contextUnionTypeNode.unknown = true; + return contextUnionTypeNode; + } + } + + contextUnionTypeNode.types.push(transformNode(node)); + return contextUnionTypeNode; +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * context union type node. Modify the union type node in place, if the node + * is a member of union type node family. + * @return {Object} Legacy node. + */ +function transformNode(node, opt_contextUnionTypeNode) { + switch (node.type) { + case NodeType.NAME: + return transformTypeNameNode(node); + case NodeType.MODULE: + return transformModuleTypeNode(node); + case NodeType.MEMBER: + return transformMemberNode(node); + case NodeType.RECORD: + return transformRecordTypeNode(node); + case NodeType.GENERIC: + return transformGenericTypeNode(node); + case NodeType.FUNCTION: + return transformFunctionTypeNode(node); + case NodeType.UNKNOWN: + return transformUnknownTypeNode(node, opt_contextUnionTypeNode); + case NodeType.ANY: + return transformAnyTypeNode(node, opt_contextUnionTypeNode); + case NodeType.OPTIONAL: + return transformOptionalTypeNode(node, opt_contextUnionTypeNode); + case NodeType.NULLABLE: + return transformNullableTypeNode(node, opt_contextUnionTypeNode); + case NodeType.NOT_NULLABLE: + return transformNotNullableTypeNode(node, opt_contextUnionTypeNode); + case NodeType.VARIADIC: + return transformVariadicTypeNode(node, opt_contextUnionTypeNode); + case NodeType.UNION: + return transformUnionTypeNode(node, opt_contextUnionTypeNode); + } + + var msg = util.format('Unknown node type: %s, %j', getNodeTypeName(node.type), node); + throw new TransformationError(msg); +} + + +/** + * @param {Node} node Node to test. + * @return {boolean} Whether the node is a member of the union type node family. + * In a legacy spec, some nodes are attribute of an legacy union type node. + */ +function isUnionTypeNodeFamily(node) { + switch (node.type) { + case NodeType.UNKNOWN: + case NodeType.ANY: + case NodeType.OPTIONAL: + case NodeType.NULLABLE: + case NodeType.NOT_NULLABLE: + case NodeType.VARIADIC: + case NodeType.UNION: + return true; + } + + return false; +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformUnionTypeNode(unionNode, opt_contextUnionTypeNode) { + assertNodeType(unionNode, NodeType.UNION); + + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode = wrapByLegacyUnionTypeNode(unionNode.left, + contextUnionTypeNode); + contextUnionTypeNode = wrapByLegacyUnionTypeNode(unionNode.right, + contextUnionTypeNode); + + return contextUnionTypeNode; +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformUnknownTypeNode(node, opt_contextUnionTypeNode) { + assertNodeType(node, NodeType.UNKNOWN); + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode.setUnknownType(true); + + return contextUnionTypeNode; +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformAnyTypeNode(node, opt_contextUnionTypeNode) { + assertNodeType(node, NodeType.ANY); + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode.setAllType(true); + + return contextUnionTypeNode; +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformVariadicTypeNode(node, opt_contextUnionTypeNode) { + assertNodeType(node, NodeType.VARIADIC); + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode.setVariableType(true); + + return wrapByLegacyUnionTypeNode(node.value, contextUnionTypeNode); +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformOptionalTypeNode(node, opt_contextUnionTypeNode) { + assertNodeType(node, NodeType.OPTIONAL); + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode.setOptionalType(true); + + return wrapByLegacyUnionTypeNode(node.value, contextUnionTypeNode); +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformNullableTypeNode(node, opt_contextUnionTypeNode) { + assertNodeType(node, NodeType.NULLABLE); + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode.setNullableType(true); + + return wrapByLegacyUnionTypeNode(node.value, contextUnionTypeNode); +} + + +/** + * @param {Node} node Node to transform. + * @param {LegacyNode=} opt_contextUnionTypeNode Optional + * legacy union type node. Modify the union type node in place, if the node + * is a member of the union type node family. Otherwise, a new union type + * node will be created and returned. + * @return {Object} Legacy node. + */ +function transformNotNullableTypeNode(node, opt_contextUnionTypeNode) { + assertNodeType(node, NodeType.NOT_NULLABLE); + var contextUnionTypeNode = opt_contextUnionTypeNode || createLegacyUnionType([]); + + contextUnionTypeNode.setNonNullableType(true); + + return wrapByLegacyUnionTypeNode(node.value, contextUnionTypeNode); +} + + +/** + * @param {Node} node Node to transform. + * @return {Object} Legacy node. + */ +function transformGenericTypeNode(node) { + assertNodeType(node, NodeType.GENERIC); + + var subject = node.subject; + var objects = node.objects; + + var genericTypeName = transformNode(subject); + var legacyParameterTypeUnions = objects.map(function(objectNode) { + return wrapByLegacyUnionTypeNode(objectNode, null); + }); + + return createLegacyGenericNodes(genericTypeName, legacyParameterTypeUnions); +} + + +/** + * @param {Node} node Node to transform. + * @return {Object} Legacy node. + */ +function transformMemberNode(node) { + assertNodeType(node, NodeType.MEMBER); + + var memberNames = []; + var currentNode = node; + + while (currentNode.type === NodeType.MEMBER) { + var name = currentNode.name; + memberNames.unshift(name); + + currentNode = currentNode.owner; + } + + // In legacy spec, it must be a type name node. + var rootOwnerNode = currentNode; + assertNodeType(rootOwnerNode, NodeType.NAME); + memberNames.unshift(rootOwnerNode.name); + + var legacyTypeName = memberNames.join('.'); + + // Member type is a type name node in the legacy spec. + return createLegacyNameNode(legacyTypeName); +} + + +/** + * @param {Node} node Node to transform. + * @return {Object} Legacy node. + */ +function transformTypeNameNode(node) { + assertNodeType(node, NodeType.NAME); + + return createLegacyNameNode(node.name); +} + + +/** + * @param {Node} node Node to transform. + * @return {Object} Legacy node. + */ +function transformModuleTypeNode(node) { + assertNodeType(node, NodeType.MODULE); + + // Module type is a type name node in the legacy spec. + return createLegacyModuleNameNode(node.path); +} + + +/** + * @param {Node} node Node to transform. + * @return {Object} Legacy node. + */ +function transformRecordTypeNode(node) { + assertNodeType(node, NodeType.RECORD); + + var legacyEntries = node.entries.map(function(entry) { + var key = entry.key; + + var legacyUnionTypeNode = entry.hasValue + ? wrapByLegacyUnionTypeNode(entry.value, null) + : createLegacyAnyTypeNode(); + + return createLegacyRecordEntryNode(key, legacyUnionTypeNode); + }); + + return createLegacyRecordTypeNode(legacyEntries); +} + + +/** + * @param {Node} node Node to transform. + * @return {Object} Legacy node. + */ +function transformFunctionTypeNode(node) { + assertNodeType(node, NodeType.FUNCTION); + var params = node.params; + var returns = node.returns; + var thisValue = node.thisValue; + var newValue = node.newValue; + + var parameterTypeUnions = params.map(function(paramNode) { + return wrapByLegacyUnionTypeNode(paramNode, null); + }); + + var returnTypeUnion = returns && wrapByLegacyUnionTypeNode(returns, null); + + var hasFuncContext = Boolean(thisValue || newValue); + var isConstructor = Boolean(newValue); + var contextNode = isConstructor ? newValue : thisValue; + var contextUnionTypeNode = hasFuncContext + ? wrapByLegacyUnionTypeNode(contextNode, null) + : null; + + + return createLegacyFunctionTypeNode( + parameterTypeUnions, + returnTypeUnion, + hasFuncContext, + isConstructor, + contextUnionTypeNode); +} + + +function createLegacyFunctionTypeNode(parameterTypeUnions, returnTypeUnion, + hasFuncContext, isConstructor, + contextUnionTypeNode) { + + var functionTypeNodeLegacy = new LegacyTypeBuilder.FunctionType(); + + functionTypeNodeLegacy.parameterTypeUnions = parameterTypeUnions; + + if (returnTypeUnion) functionTypeNodeLegacy.setReturnTypeUnion(returnTypeUnion); + + if (hasFuncContext) { + functionTypeNodeLegacy.setConstructor(isConstructor); + functionTypeNodeLegacy.setContextTypeUnion(contextUnionTypeNode); + } + + return functionTypeNodeLegacy; +} + + +function createLegacyRecordTypeNode(legacyEntries) { + var recordTypeNodeLegacy = new LegacyTypeBuilder.RecordType(); + recordTypeNodeLegacy.entries = legacyEntries; + + return recordTypeNodeLegacy; +} + + +function createLegacyRecordEntryNode(name, legacyUnionTypeNode) { + var recordTypeEntryNodeLegacy = new LegacyTypeBuilder.RecordType.Entry(); + recordTypeEntryNodeLegacy.setKeyName(name); + recordTypeEntryNodeLegacy.setValueTypeUnion(legacyUnionTypeNode); + + return recordTypeEntryNodeLegacy; +} + + +function createLegacyGenericNodes(genericTypeName, legacyParameterTypeUnions) { + var genericTypeNodeLegacy = new LegacyTypeBuilder.GenericType(); + genericTypeNodeLegacy.setTypeName(genericTypeName); + genericTypeNodeLegacy.parameterTypeUnions = legacyParameterTypeUnions; + + return genericTypeNodeLegacy; +} + + +function createLegacyModuleNameNode(name) { + var moduleNameNodeLegacy = new LegacyTypeBuilder.ModuleName(); + moduleNameNodeLegacy.setModuleName(name); + + return moduleNameNodeLegacy; +} + + +function createLegacyNameNode(name) { + var typeNameNodeLegacy = new LegacyTypeBuilder.TypeName(); + typeNameNodeLegacy.setTypeName(name); + + return typeNameNodeLegacy; +} + + +function createLegacyAnyTypeNode() { + return createLegacyUnionType([], { all: true }); +} + + +function createLegacyUnionType(types, opt_attrMap) { + var attrMap = opt_attrMap || {}; + + var unionTypeNodeLegacy = new LegacyTypeBuilder.TypeUnion(); + unionTypeNodeLegacy.types = types; + + if ('optional' in attrMap) unionTypeNodeLegacy.setOptionalType(attrMap.optional); + if ('nullable' in attrMap) unionTypeNodeLegacy.setNullableType(attrMap.nullable); + if ('nonNullable' in attrMap) unionTypeNodeLegacy.setNonNullableType(attrMap.nonNullable); + if ('unknown' in attrMap) unionTypeNodeLegacy.setUnknownType(attrMap.unknown); + if ('all' in attrMap) unionTypeNodeLegacy.setAllType(attrMap.all); + if ('variable' in attrMap) unionTypeNodeLegacy.setVariableType(attrMap.variable); + + return unionTypeNodeLegacy; +} + + +module.exports = transform; +transform.TransformationError = TransformationError; diff --git a/node_modules/jsdoctypeparser/lib/TypeDictionary.js b/node_modules/jsdoctypeparser/lib/TypeDictionary.js new file mode 100644 index 000000000..f426dbefd --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/TypeDictionary.js @@ -0,0 +1,246 @@ +'use strict'; + +/** + * Namespace for type dictionaries. + * @type {Object} + */ +var TypeDictionary = { + Array: true, + Boolean: true, + Date: true, + Document: true, + Element: true, + Error: true, + Function: true, + Image: true, + Infinity: true, + Iterator: true, + NaN: true, + Null: true, + Number: true, + Object: true, + Option: true, + RegExp: true, + String: true, + Undefined: true, + Window: true, + + EvalError: true, + InternalError: true, + RangeError: true, + ReferenceError: true, + StopIteration: true, + SyntaxError: true, + TypeError: true, + UriError: true, + + Attr: true, + CDATASection: true, + CharacterData: true, + Comment: true, + console: true, + DocumentFragment: true, + DocumentType: true, + DomConfiguration: true, + DOMError: true, + DOMErrorHandler: true, + DOMException: true, + DOMImplementation: true, + DOMImplementationList: true, + DOMImplementationRegistry: true, + DOMImplementationSource: true, + DOMLocator: true, + DOMObject: true, + DOMRequest: true, + DOMString: true, + DOMStringList: true, + DOMTimeStamp: true, + DOMUserData: true, + Entity: true, + EntityReference: true, + MediaQueryList: true, + MediaQueryListListener: true, + NameList: true, + NamedNodeMap: true, + Node: true, + NodeFilter: true, + NodeIterator: true, + NodeList: true, + Notation: true, + Plugin: true, + PluginArray: true, + ProcessingInstruction: true, + SharedWorker: true, + Text: true, + TimeRanges: true, + Treewalker: true, + TypeInfo: true, + UserDataHandler: true, + Worker: true, + WorkerGlobalScope: true, + + HTMLDocument: true, + HTMLElement: true, + HTMLAnchorElement: true, + HTMLAppletElement: true, + HTMLAudioElement: true, + HTMLAreaElement: true, + HTMLBaseElement: true, + HTMLBaseFontElement: true, + HTMLBodyElement: true, + HTMLBRElement: true, + HTMLButtonElement: true, + HTMLCanvasElement: true, + HTMLDataListElement: true, + HTMLDirectoryElement: true, + HTMLDivElement: true, + HTMLDListElement: true, + HTMLEmbedElement: true, + HTMLFieldSetElement: true, + HTMLFontElement: true, + HTMLFormElement: true, + HTMLFrameElement: true, + HTMLFrameSetElement: true, + HTMLHeadElement: true, + HTMLHeadingElement: true, + HTMLHtmlElement: true, + HTMLHRElement: true, + HTMLIFrameElement: true, + HTMLImageElement: true, + HTMLInputElement: true, + HTMLKeygenElement: true, + HTMLLabelElement: true, + HTMLLIElement: true, + HTMLLinkElement: true, + HTMLMapElement: true, + HTMLMenuElement: true, + HTMLMetaElement: true, + HTMLMeterElement: true, + HTMLModElement: true, + HTMLObjectElement: true, + HTMLOListElement: true, + HTMLOptGroupElement: true, + HTMLOptionElement: true, + HTMLOutputElement: true, + HTMLParagraphElement: true, + HTMLParamElement: true, + HTMLPreElement: true, + HTMLProgressElement: true, + HTMLQuoteElement: true, + HTMLScriptElement: true, + HTMLSelectElement: true, + HTMLSourceElement: true, + HTMLSpanElement: true, + HTMLStyleElement: true, + HTMLTableElement: true, + HTMLTableCaptionElement: true, + HTMLTableCellElement: true, + HTMLTableDataCellElement: true, + HTMLTableHeaderCellElement: true, + HTMLTableColElement: true, + HTMLTableRowElement: true, + HTMLTableSectionElement: true, + HTMLTextAreaElement: true, + HTMLTimeElement: true, + HTMLTitleElement: true, + HTMLTrackElement: true, + HTMLUListElement: true, + HTMLUnknownElement: true, + HTMLVideoElement: true, + CanvasRenderingContext2D: true, + CanvasGradient: true, + CanvasPattern: true, + TextMetrics: true, + ImageData: true, + CanvasPixelArray: true, + + SVGElement: true, + SVGAElement: true, + SVGAltGlyphElement: true, + SVGAltGlyphDefElement: true, + SVGAltGlyphItemElement: true, + SVGAnimationElement: true, + SVGAnimateElement: true, + SVGAnimateColorElement: true, + SVGAnimateMotionElement: true, + SVGAnimateTransformElement: true, + SVGSetElement: true, + SVGCircleElement: true, + SVGClipPathElement: true, + SVGColorProfileElement: true, + SVGCursorElement: true, + SVGDefsElement: true, + SVGDescElement: true, + SVGEllipseElement: true, + SVGFilterElement: true, + SVGFilterPrimitiveStandardAttributes: true, + SVGFEBlendElement: true, + SVGFEColorMatrixElement: true, + SVGFEComponentTransferElement: true, + SVGFECompositeElement: true, + SVGFEConvolveMatrixElement: true, + SVGFEDiffuseLightingElement: true, + SVGFEDisplacementMapElement: true, + SVGFEDistantLightElement: true, + SVGFEFloodElement: true, + SVGFEGaussianBlurElement: true, + SVGFEImageElement: true, + SVGFEMergeElement: true, + SVGFEMergeNodeElement: true, + SVGFEMorphologyElement: true, + SVGFEOffsetElement: true, + SVGFEPointLightElement: true, + SVGFESpecularLightingElement: true, + SVGFESpotLightElement: true, + SVGFETileElement: true, + SVGFETurbulenceElement: true, + SVGComponentTransferFunctionElement: true, + SVGFEFuncRElement: true, + SVGFEFuncGElement: true, + SVGFEFuncBElement: true, + SVGFEFuncAElement: true, + SVGFontElement: true, + SVGFontFaceElement: true, + SVGFontFaceFormatElement: true, + SVGFontFaceNameElement: true, + SVGFontFaceSrcElement: true, + SVGFontFaceUriElement: true, + SVGForeignObjectElement: true, + SVGGElement: true, + SVGGlyphElement: true, + SVGGlyphRefElement: true, + SVGGradientElement: true, + SVGLinearGradientElement: true, + SVGRadialGradientElement: true, + SVGHKernElement: true, + SVGImageElement: true, + SVGLineElement: true, + SVGMarkerElement: true, + SVGMaskElement: true, + SVGMetadataElement: true, + SVGMissingGlyphElement: true, + SVGMPathElement: true, + SVGPathElement: true, + SVGPatternElement: true, + SVGPolylineElement: true, + SVGPolygonElement: true, + SVGRectElement: true, + SVGScriptElement: true, + SVGStopElement: true, + SVGStyleElement: true, + SVGSVGElement: true, + SVGSwitchElement: true, + SVGSymbolElement: true, + SVGTextElement: true, + SVGTextPathElement: true, + SVGTitleElement: true, + SVGTRefElement: true, + SVGTSpanElement: true, + SVGUseElement: true, + SVGViewElement: true, + SVGVKernElement: true, +}; + + +// Exports the constructor. +module.exports = TypeDictionary; diff --git a/node_modules/jsdoctypeparser/lib/index.js b/node_modules/jsdoctypeparser/lib/index.js new file mode 100644 index 000000000..b35d27424 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/index.js @@ -0,0 +1,110 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org +'use strict'; + + +var defineProp = Object.defineProperty; +var Lexer = require('./legacy/TypeLexer.js'); + + +/** + * Namespace for jsdoctypeparser. + * @namespace + * @exports jsdoctypeparser + */ +module.exports = { + + + /** + * An alias for type expression parsers. + * @type {module:lib/legacy/TypeParser} + * @see module:lib/legacy/TypeParser + */ + get Parser() { + var Parser = require('./Parser.js'); + var transform = require('./TransformForLegacy.js'); + + /** + * A class for type expression parser. This type parser can parse: + * @constructor + * @exports lib/TypeParser + */ + function ParserWithTransform() {} + + /** + * Parses a type expression. This method use a new parser and transform + * its result. Because the old parser has many bugs such as infinite + * recursions and parsing confusions. + * @param {string} typeExp Type expression string to parse. + * @return {module:lib/TypeBuilder.TypeUnion} Type union object. + */ + ParserWithTransform.prototype.parse = function(typeExp) { + try { + var ast = Parser.parse(typeExp); + return transform(ast); + } + catch (e) { + if (e instanceof transform.TransformationError) { + var unknownType = transform(Parser.parse('unknown')); + return unknownType; + } + + if (e instanceof Parser.SyntaxError) { + throw new Lexer.SyntaxError(e.message, typeExp, e.offset); + } + + throw e; + } + }; + + + /** + * A class for transform errors. + * @param {string} msg Error message. + * @constructor + * @extends {Error} + */ + ParserWithTransform.TransformationError = transform.TransformationError; + + defineProp(this, 'Parser', { value: ParserWithTransform }); + return this.Parser; + }, + + + /** + * An alias for type expression lexers. + * @type {module:lib/legacy/TypeLexer} + * @see module:lib/legacy/TypeLexer + * @deprecated Do not use the module directly. This lexer has legacy + * implementation including infite recursions and lexing confusions. + */ + get Lexer() { + defineProp(this, 'Lexer', { value: Lexer }); + return this.Lexer; + }, + + + /** + * An alias for type expression object builders. + * @type {module:lib/legacy/TypeBuilder} + * @see module:lib/legacy/TypeBuilder + * @deprecated Do not use the module directly. This builder will be removed + * after v2.0.0. You can check node types without the builder by using + * NodeType after v2.0.0. + */ + get Builder() { + defineProp(this, 'Builder', { value: require('./legacy/TypeBuilder.js') }); + return this.Builder; + }, + + + /** + * An alias for type name dictionaries. + * @type {module:lib/legacy/TypeDictionary} + * @see module:lib/legacy/TypeDictionary + */ + get Dictionary() { + defineProp(this, 'Dictionary', { value: require('./legacy/TypeDictionary.js') }); + return this.Dictionary; + }, +}; diff --git a/node_modules/jsdoctypeparser/lib/legacy/TypeBuilder.js b/node_modules/jsdoctypeparser/lib/legacy/TypeBuilder.js new file mode 100644 index 000000000..8867a8c2f --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/legacy/TypeBuilder.js @@ -0,0 +1,1418 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + +/** + * @fileoverview A class for Jsdoc type object builders. + * @author orga.chem.job@gmail.com (OrgaChem) + */ + + +var util = require('./util.js'); +var TypeLexer = require('./TypeLexer.js'); +var TypeDictionary = require('./TypeDictionary.js'); +var dict = TypeDictionary.getInstance(); + + + +/** + * A class for Jsdoc type object builders. + * @constructor + * @exports lib/TypeBuilder + */ +var TypeBuilder = function() { + this.lexer_ = this.getTypeLexer(); +}; + + +/** + * Whether syntax error exceptions are enabled. + * @const + * @type {boolean} + */ +TypeBuilder.ENABLE_EXCEPTIONS = false; + + +/** + * Returns an unknown type. + * @return {module:lib/TypeBuilder.TypeUnion} Unknown union. + */ +TypeBuilder.getUnknownType = function() { + var unknown = new TypeBuilder.TypeUnion(); + unknown.setUnknownType(true); + + return unknown; +}; + + +/** + * Sets a type string to parse. + * @param {string} type Type string. + */ +TypeBuilder.prototype.setTypeString = function(type) { + this.type_ = type; +}; + + +/** + * Builds a type objects. + * @return {module:lib/TypeBuilder.TypeUnion} Builded objects. + */ +TypeBuilder.prototype.build = function() { + var base = new TypeBuilder.BaseMode(); + this.setMode(base); + + try { + this.lexer_.analyze(this.type_); + } + catch (e) { + if (!TypeBuilder.ENABLE_EXCEPTIONS && e instanceof TypeLexer.SyntaxError) { + // Should return an unknown type if a syntax error was found. + util.warn(e.message); + return TypeBuilder.getUnknownType(); + } + else { + throw e; + } + } + return base.getTypeUnionToken(); +}; + + +/** + * Returns a type lexer. Override this method if you want to use the custom + * type lexer. + * @return {module:lib/TypeLexer} Type lexer. + * @protected + */ +TypeBuilder.prototype.getTypeLexer = function() { + return new TypeLexer(); +}; + + +/** + * Sets a mode. + * @param {module:lib/TypeBuilder.Mode} mode Mode of the type builder. + */ +TypeBuilder.prototype.setMode = function(mode) { + mode.setBuilder(this); + this.mode_ = mode; + this.lexer_.setTokenHandlers(mode); +}; + + + +/** + * A base class for modes of type builder. The mode is changed when a opening + * token such as: {@code '.<'} (generic type), {@code 'function'} (function + * type), {@code '{'} (record type), was found. + * Create a child of the class if you want to add a new type expression. + * @constructor + * @alias module:lib/TypeBuilder.Mode + */ +TypeBuilder.Mode = function() {}; + + +/** + * Next mode. + * @type {?module:lib/TypeBuilder.Mode} + * @private + */ +TypeBuilder.Mode.prototype.next_ = null; + + +/** + * Builder has the mode. + * @type {?module:lib/TypeBuilder} + * @private + */ +TypeBuilder.Mode.prototype.builder_ = null; + + +/** + * Sets a builder has the mode. + * @param {module:lib/TypeBuilder} builder Builder has the mode. + */ +TypeBuilder.Mode.prototype.setBuilder = function(builder) { + this.builder_ = builder; +}; + + +/** + * Returns a builder has the mode. + * @return {module:lib/TypeBuilder} Builder has the mode. + */ +TypeBuilder.Mode.prototype.getBuilder = function() { + return this.builder_; +}; + + +/** + * Sets a mode next to the mode. + * @param {module:lib/TypeBuilder.Mode} next Next mode. + */ +TypeBuilder.Mode.prototype.setNext = function(next) { + this.next_ = next; +}; + + +/** + * Returns a mode next to the mode. + * @return {module:lib/TypeBuilder.Mode} Next mode. + */ +TypeBuilder.Mode.prototype.getNext = function() { + return this.next_; +}; + + +/** + * Change a mode to the next mode. + */ +TypeBuilder.Mode.prototype.next = function() { + this.builder_.setMode(this.next_); +}; + + +/** + * Handles an opening type union token. + */ +TypeBuilder.Mode.prototype.handleOpenTypeUnionToken = function() { + var newMode = new TypeBuilder.TypeUnionMode(); + newMode.setNext(this); + this.builder_.setMode(newMode); +}; + + +/** + * Handles a closing type union token. + */ +TypeBuilder.Mode.prototype.handleCloseTypeUnionToken = function() { + this.next(); +}; + + +/** + * Handles an opening function type token. + */ +TypeBuilder.Mode.prototype.handleOpenFunctionTypeToken = function() { + var newMode = new TypeBuilder.FunctionTypeMode(); + newMode.setNext(this); + this.builder_.setMode(newMode); +}; + + +/** + * Handles a closing function type token. + */ +TypeBuilder.Mode.prototype.handleCloseFunctionTypeToken = function() { + this.next(); +}; + + +/** + * Handles an opening generic type token. + */ +TypeBuilder.Mode.prototype.handleOpenGenericTypeToken = function() { + var newMode = new TypeBuilder.GenericTypeMode(); + newMode.setNext(this); + this.builder_.setMode(newMode); +}; + + +/** + * Handles a closing generic type token. + */ +TypeBuilder.Mode.prototype.handleCloseGenericTypeToken = function() { + this.next(); +}; + + +/** + * Handles an opening record type token. + */ +TypeBuilder.Mode.prototype.handleOpenRecordTypeToken = function() { + var newMode = new TypeBuilder.RecordTypeMode(); + newMode.setNext(this); + this.builder_.setMode(newMode); +}; + + +/** + * Handles a closing record type token. + */ +TypeBuilder.Mode.prototype.handleCloseRecordTypeToken = function() { + this.next(); +}; + + + +/** + * A class for base modes. The base mode is set when start to build type + * objects, and the base mode have a root type union. + * @constructor + * @extends {module:lib/TypeBuilder.Mode} + * @alias module:lib/TypeBuilder.BaseMode + */ +TypeBuilder.BaseMode = function() { + TypeBuilder.Mode.call(this); +}; +util.inherits(TypeBuilder.BaseMode, TypeBuilder.Mode); + + +/** + * Base type union. + * @type {?module:lib/TypeBuilder.TypeUnion} + * @private + */ +TypeBuilder.BaseMode.prototype.baseUnion_ = null; + + +/** + * Sets a type union at the root. + * @param {module:lib/TypeBuilder.TypeUnion} union Type union to set. + */ +TypeBuilder.BaseMode.prototype.setTypeUnionToken = function(union) { + this.baseUnion_ = union; +}; + + +/** + * Returns a type union at the root. + * @return {module:lib/TypeBuilder.TypeUnion} Type union to set. + */ +TypeBuilder.BaseMode.prototype.getTypeUnionToken = function() { + return this.baseUnion_; +}; + + + +/** + * A class for type union modes of a type builder. + * @constructor + * @extends {module:lib/TypeBuilder.Mode} + * @alias module:lib/TypeBuilder.TypeUnionMode + */ +TypeBuilder.TypeUnionMode = function() { + TypeBuilder.Mode.call(this); + this.union_ = new TypeBuilder.TypeUnion(); +}; +util.inherits(TypeBuilder.TypeUnionMode, TypeBuilder.Mode); + + +/** + * Target type union. + * @type {module:lib/TypeBuilder.TypeUnion} + * @private + */ +TypeBuilder.TypeUnionMode.prototype.union_ = null; + + +/** @override */ +TypeBuilder.TypeUnionMode.prototype.next = function() { + var nextMode = this.getNext(); + if (nextMode) { + nextMode.setTypeUnionToken(this.union_); + } + TypeBuilder.Mode.prototype.next.call(this); +}; + + +/** + * Handles an all type operator token. + */ +TypeBuilder.TypeUnionMode.prototype.handleAllTypeOperatorToken = function() { + this.union_.setAllType(true); +}; + + +/** + * Handles an unknown type operator token. + */ +TypeBuilder.TypeUnionMode.prototype.handleUnknownTypeOperatorToken = + function() { + this.union_.setUnknownType(true); +}; + + +/** + * Handles a variable type operator token. + */ +TypeBuilder.TypeUnionMode.prototype.handleVariableTypeOperatorToken = + function() { + this.union_.setVariableType(true); +}; + + +/** + * Handles an optional type operator token. + */ +TypeBuilder.TypeUnionMode.prototype.handleOptionalTypeOperatorToken = + function() { + this.union_.setOptionalType(true); +}; + + +/** + * Handles a nullable type operator token. + */ +TypeBuilder.TypeUnionMode.prototype.handleNullableTypeOperatorToken = + function() { + this.union_.setNullableType(true); +}; + + +/** + * Handles a non-nullable type operator token. + */ +TypeBuilder.TypeUnionMode.prototype.handleNonNullableTypeOperatorToken = + function() { + this.union_.setNonNullableType(true); +}; + + +/** + * Handles a type name token. + * @param {module:lib/TypeBuilder.TypeName} typeName Type name. + */ +TypeBuilder.TypeUnionMode.prototype.handleTypeNameToken = function(typeName) { + var typeNameObj = new TypeBuilder.TypeName(); + typeNameObj.setTypeName(typeName); + this.union_.addTypeName(typeNameObj); +}; + + +/** + * Handles a module name token. + * @param {module:lib/TypeBuilder.ModuleName} moduleName Module name. + */ +TypeBuilder.TypeUnionMode.prototype.handleModuleNameToken = function( + moduleName) { + var moduleNameObj = new TypeBuilder.ModuleName(); + moduleNameObj.setModuleName(moduleName); + this.union_.addModuleName(moduleNameObj); +}; + + +/** + * Handles a type name token. + * @param {module:lib/TypeBuilder.TypeName} typeName Type name. + */ +TypeBuilder.TypeUnionMode.prototype.setTypeNameToken = function(typeName) { + this.union_.addTypeName(typeName); +}; + + +/** + * Handles a module name token. + * @param {module:lib/TypeBuilder.ModuleName} moduleName Module name. + */ +TypeBuilder.TypeUnionMode.prototype.setModuleNameToken = function( + moduleName) { + this.union_.addModuleName(moduleName); +}; + + +/** + * Sets a generic type token. + * @param {module:lib/TypeBuilder.GenericType} generic Generic type token to + * set. + */ +TypeBuilder.TypeUnionMode.prototype.setGenericTypeToken = function(generic) { + this.union_.addGenericType(generic); +}; + + +/** + * Handles a function type token. + * @param {module:lib/TypeBuilder.FunctionType} func Function type token to + * set. + */ +TypeBuilder.TypeUnionMode.prototype.setFunctionTypeToken = function(func) { + this.union_.addFunctionType(func); +}; + + +/** + * Handles a record type token. + * @param {module:lib/TypeBuilder.RecordType} record Record type token to + * set. + */ +TypeBuilder.TypeUnionMode.prototype.setRecordTypeToken = function(record) { + this.union_.addRecordType(record); +}; + + + +/** + * A class for generic type mode of a type builder. + * @constructor + * @extends {module:lib/TypeBuilder.Mode} + * @alias module:lib/TypeBuilder.GenericTypeMode + */ +TypeBuilder.GenericTypeMode = function() { + TypeBuilder.Mode.call(this); + this.generic_ = new TypeBuilder.GenericType(); +}; +util.inherits(TypeBuilder.GenericTypeMode, TypeBuilder.Mode); + + +/** + * Target generic type. + * @type {module:lib/TypeBuilder.GenericType} + * @private + */ +TypeBuilder.GenericTypeMode.prototype.generic_ = null; + + +/** + * Handles a type name token. + * @param {module:lib/TypeBuilder.TypeName} typeName Type name. + */ +TypeBuilder.GenericTypeMode.prototype.handleTypeNameToken = function(typeName) { + var typeNameObj = new TypeBuilder.TypeName(); + typeNameObj.setTypeName(typeName); + this.generic_.setTypeName(typeNameObj); +}; + + +/** + * Handles a module name token. + * @param {module:lib/TypeBuilder.ModuleName} moduleName Module name. + */ +TypeBuilder.GenericTypeMode.prototype.handleModuleNameToken = function( + moduleName) { + var moduleNameObj = new TypeBuilder.ModuleName(); + moduleNameObj.setModuleName(moduleName); + this.generic_.setModuleName(moduleNameObj); +}; + + +/** + * Sets a type union at the root. + * @param {module:lib/TypeBuilder.TypeUnion} union Type union to set. + */ +TypeBuilder.GenericTypeMode.prototype.setTypeUnionToken = function(union) { + this.generic_.addParameterTypeUnion(union); +}; + + +/** @override */ +TypeBuilder.GenericTypeMode.prototype.next = function() { + var nextMode = this.getNext(); + if (nextMode) { + nextMode.setGenericTypeToken(this.generic_); + } + TypeBuilder.Mode.prototype.next.call(this); +}; + + + +/** + * A class for function type modes of a type builder. + * @constructor + * @extends {module:lib/TypeBuilder.Mode} + * @alias module:lib/TypeBuilder.FunctionTypeMode + */ +TypeBuilder.FunctionTypeMode = function() { + TypeBuilder.Mode.call(this); + this.state_ = TypeBuilder.FunctionTypeMode.State.INITIAL; + this.function_ = new TypeBuilder.FunctionType(); +}; +util.inherits(TypeBuilder.FunctionTypeMode, TypeBuilder.Mode); + + +/** + * States for a function tyoe mode. + * @enum {number} + */ +TypeBuilder.FunctionTypeMode.State = { + /** Initial state. This state should not allow to set any type. */ + INITIAL: 0, + /** + * Context state. This state should allow to set a type union as a function + * context type union. + */ + CONTEXT: 1, + /** + * Parameters state. This state should allow to set a type union as a + * function parameter type union. + */ + PARAMETERS: 2, + /** + * Return state. This state should allow to set a type union as a function + * return type union. + */ + RETURN: 3 +}; + + +/** + * State of the function type mode. + * @type {module:lib/TypeBuilder.FunctionTypeMode.State} + * @private: + */ +TypeBuilder.FunctionTypeMode.prototype.state_ = null; + + +/** + * Handles an opening function type parameters token. + */ +TypeBuilder.FunctionTypeMode.prototype.handleOpenFunctionTypeParametersToken = + function() { + this.state_ = TypeBuilder.FunctionTypeMode.State.PARAMETERS; +}; + + +/** + * Handles a closing function type parameters token. + * @type {?Function} + */ +TypeBuilder.FunctionTypeMode.prototype.handleCloseFunctionTypeParametersToken = + null; + + +/** + * Handles a function return type union token. + */ +TypeBuilder.FunctionTypeMode.prototype.handleFunctionTypeReturnTypeUnionToken = + function() { + this.state_ = TypeBuilder.FunctionTypeMode.State.RETURN; +}; + + +/** + * Handles a constructor type union token. + */ +TypeBuilder.FunctionTypeMode.prototype.handleConstructorTypeUnionToken = + function() { + this.function_.setConstructor(true); + this.state_ = TypeBuilder.FunctionTypeMode.State.CONTEXT; +}; + + +/** + * Handles a function type context type union token. + */ +TypeBuilder.FunctionTypeMode.prototype.handleFunctionTypeContextTypeUnionToken = + function() { + this.function_.setConstructor(false); + this.state_ = TypeBuilder.FunctionTypeMode.State.CONTEXT; +}; + + +/** + * Sets a type union to a context type or a parameter type or a return type by + * the state. + * @param {module:lib/TypeBuilder.TypeUnion} union Type union to set. + */ +TypeBuilder.FunctionTypeMode.prototype.setTypeUnionToken = function(union) { + var State = TypeBuilder.FunctionTypeMode.State; + switch (this.state_) { + case State.INITIAL: + throw Error('Cannot set the type union to the mode on an initial state.'); + case State.CONTEXT: + this.function_.setContextTypeUnion(union); + this.state_ = TypeBuilder.FunctionTypeMode.State.PARAMETERS; + break; + case State.PARAMETERS: + this.function_.addParameterTypeUnion(union); + break; + case State.RETURN: + this.function_.setReturnTypeUnion(union); + break; + default: + throw Error('Unknown state on function type mode: ' + this.state_); + } +}; + + +/** @override */ +TypeBuilder.FunctionTypeMode.prototype.next = function() { + var nextMode = this.getNext(); + if (nextMode) { + nextMode.setFunctionTypeToken(this.function_); + } + TypeBuilder.Mode.prototype.next.call(this); +}; + + + +/** + * A class for record type modes of a type builder. + * @constructor + * @extends {module:lib/TypeBuilder.Mode} + * @alias module:lib/TypeBuilder.RecordTypeMode + */ +TypeBuilder.RecordTypeMode = function() { + TypeBuilder.Mode.call(this); + this.record_ = new TypeBuilder.RecordType(); +}; +util.inherits(TypeBuilder.RecordTypeMode, TypeBuilder.Mode); + + +/** + * Target record type. + * @type {module:lib/TypeBuilder.RecordType} + * @private + */ +TypeBuilder.RecordTypeMode.prototype.record_ = null; + + +/** + * Target entry. + * @type {?module:lib/TypeBuilder.RecordType.Entry} + * @private + */ +TypeBuilder.RecordTypeMode.prototype.entry_ = null; + + +/** + * Handles an entry value type union token. In default, do nothing. + * @type {?Function} + */ +TypeBuilder.RecordTypeMode.prototype.handleEntryValueTypeUnionToken = null; + + +/** + * Handles an entry key name token. + * @param {string} keyName Entry key name. + */ +TypeBuilder.RecordTypeMode.prototype.handleEntryKeyNameToken = function( + keyName) { + this.entry_ = new TypeBuilder.RecordType.Entry(); + this.entry_.setKeyName(keyName); +}; + + +/** + * Sets a type union at the root. + * @param {module:lib/TypeBuilder.TypeUnion} union Type union to set. + */ +TypeBuilder.RecordTypeMode.prototype.setTypeUnionToken = function(union) { + this.entry_.setValueTypeUnion(union); + this.record_.addEntry(this.entry_); + this.entry_ = null; +}; + + +/** @override */ +TypeBuilder.RecordTypeMode.prototype.next = function() { + var nextMode = this.getNext(); + if (nextMode) { + nextMode.setRecordTypeToken(this.record_); + } + TypeBuilder.Mode.prototype.next.call(this); +}; + + + +/** + * A class for type names. + * @constructor + * @alias module:lib/TypeBuilder.TypeName + */ +TypeBuilder.TypeName = function() {}; + + +/** + * Type name publisher. Set a publisher object if you want to get a link from + * a type name when {@code #toString} is called. + * + * This example is a simple HTML anchor publisher. + *
+ * MyPublisher = {
+ *   publish: function(typeNameObj) {
+ *     return '<a href="' + typeNameObj.name + '.html">' +
+ *         typeNameObj.name + '</a>';
+ *   }
+ * };
+ * 
+ * @type {?{publish: function(module:lib/TypeBuilder.TypeName): string}} + */ +TypeBuilder.TypeName.publisher = null; + + +/** + * Returns an encoded file url by a type name. + * For example, {@code foo.bar} ⇒ {@code foo.bar.html}. + * @param {string} typeName Type name string. + * @return {string} URL string. + */ +TypeBuilder.TypeName.getUrlByTypeName = function(typeName) { + return encodeURIComponent(typeName) + '.html'; +}; + + +/** + * Type name string. + * @type {?string} + */ +TypeBuilder.TypeName.prototype.name = null; + + +/** + * Sets a type name string. + * @param {string} name Type name string. + */ +TypeBuilder.TypeName.prototype.setTypeName = function(name) { + this.name = name; +}; + + +/** + * Returns a type name string. Set {@code TypeBuilder.TypeName.publisher} if + * you want to convert to a link from the type name. In default, returns a + * raw type name. + * @override + * @see module:lib/TypeBuilder.TypeName.publisher + */ +TypeBuilder.TypeName.prototype.toString = function() { + if (TypeBuilder.TypeName.publisher) { + return TypeBuilder.TypeName.publisher.publish(this); + } + else { + return this.name; + } +}; + + +/** + * Returns a html string. A type name is wrapped in an anchor tag, if the type + * dictionary does not have the type name. Otherwise, a type name is wrapped in + * a code tag. For example: + *
    + *
  • string, Array, window are wrapped in a code tag + *
  • foo.bar is wrapped in an anchor tag + *
+ * @return {string} HTML string. + */ +TypeBuilder.TypeName.prototype.toHtml = function() { + // Check the type is user define object. + if (dict.has(this.name)) { + return '' + this.name + ''; + } + else { + return '' + this.name + ''; + } +}; + + + +/** + * A class for type union objects. + * @constructor + * @alias module:lib/TypeBuilder.TypeUnion + */ +TypeBuilder.TypeUnion = function() { + this.types = []; +}; + + +/** + * Type objects. + * @type {Array.} + */ +TypeBuilder.TypeUnion.prototype.types = null; + + +/** + * Optional type flag. + * @type {boolean} + */ +TypeBuilder.TypeUnion.prototype.optional = false; + + +/** + * Variable type flag. + * @type {boolean} + */ +TypeBuilder.TypeUnion.prototype.variable = false; + + +/** + * Nullable type flag. + * @type {boolean} + */ +TypeBuilder.TypeUnion.prototype.nullable = false; + + +/** + * Non nullable type flag. + * @type {boolean} + */ +TypeBuilder.TypeUnion.prototype.nonNullable = false; + + +/** + * All type flag. + * @type {boolean} + */ +TypeBuilder.TypeUnion.prototype.all = false; + + +/** + * Unknown type flag. + * @type {boolean} + */ +TypeBuilder.TypeUnion.prototype.unknown = false; + + +/** + * Adds a type name string to the union. + * @param {module:lib/TypeBuilder.TypeName} type Type name to add. + */ +TypeBuilder.TypeUnion.prototype.addTypeName = function(type) { + this.types.push(type); +}; + + +/** + * Adds a module name string to the union. + * @param {module:lib/TypeBuilder.ModuleName} type Type name to add. + */ +TypeBuilder.TypeUnion.prototype.addModuleName = function(type) { + this.types.push(type); +}; + + +/** + * Adds a generic type to the union. + * @param {module:lib/TypeBuilder.GenericType} generic Generic type to add. + */ +TypeBuilder.TypeUnion.prototype.addGenericType = function(generic) { + this.types.push(generic); +}; + + +/** + * Adds a record type to the union. + * @param {module:lib/TypeBuilder.RecordType} record Record type to add. + */ +TypeBuilder.TypeUnion.prototype.addRecordType = function(record) { + this.types.push(record); +}; + + +/** + * Adds a function type to the union. + * @param {module:lib/TypeBuilder.FunctionType} func Function type to add. + */ +TypeBuilder.TypeUnion.prototype.addFunctionType = function(func) { + this.types.push(func); +}; + + +/** + * Sets an optional type flag. + * @param {boolean} enable Whether the type can be undefined. + */ +TypeBuilder.TypeUnion.prototype.setOptionalType = function(enable) { + this.optional = enable; +}; + + +/** + * Sets a variable type flag. + * @param {boolean} enable Whether the type can be variable. + */ +TypeBuilder.TypeUnion.prototype.setVariableType = function(enable) { + this.variable = enable; +}; + + +/** + * Sets a nullable type flag. + * @param {boolean} enable Whether the type can be null. + */ +TypeBuilder.TypeUnion.prototype.setNullableType = function(enable) { + this.nullable = enable; + if (enable) { + this.nonNullable = false; + } +}; + + +/** + * Sets a non-nullable type flag. + * @param {boolean} enable Whether the type can be not null. + */ +TypeBuilder.TypeUnion.prototype.setNonNullableType = function(enable) { + this.nonNullable = enable; + if (enable) { + this.nullable = false; + } +}; + + +/** + * Sets an all type flag. + * @param {boolean} enable Whether the type can be any type. + */ +TypeBuilder.TypeUnion.prototype.setAllType = function(enable) { + this.all = enable; +}; + + +/** + * Sets an unknown type flag. + * @param {boolean} enable Whether the type is unknown. + */ +TypeBuilder.TypeUnion.prototype.setUnknownType = function(enable) { + this.unknown = enable; +}; + + +/** + * Returns a type union string. + * @param {boolean} isHtml Whether the output string is html. + * @return {string} Type union string. + * @private + */ +TypeBuilder.TypeUnion.prototype.toStringInternal_ = function(isHtml) { + if (this.all) { + var typeName = new TypeBuilder.TypeName(); + typeName.setTypeName('*'); + return isHtml ? typeName.toHtml() : typeName.toString(); + } + else if (this.unknown) { + var typeName = new TypeBuilder.TypeName(); + typeName.setTypeName('?'); + return isHtml ? typeName.toHtml() : typeName.toString(); + } + else { + var str; + var types = [].concat(this.types); + + if (this.variable) { + str = '...'; + } + else { + str = ''; + } + + if (this.optional) { + var typeName = new TypeBuilder.TypeName(); + typeName.setTypeName('undefined'); + types.push(typeName); + } + + if (this.nullable) { + var typeName = new TypeBuilder.TypeName(); + typeName.setTypeName('null'); + types.push(typeName); + } + + if (this.nonNullable) { + str += '!'; + } + + return str + (isHtml ? + types.map(function(type) { return type.toHtml(); }) : + types).join('|'); + } +}; + + +/** @override */ +TypeBuilder.TypeUnion.prototype.toString = function() { + return this.toStringInternal_(false); +}; + + +/** + * Returns a html string. + * @return {string} HTML string. + */ +TypeBuilder.TypeUnion.prototype.toHtml = function() { + return this.toStringInternal_(true); +}; + + + +/** + * A class for generic types. + * @constructor + * @alias module:lib/TypeBuilder.GenericType + */ +TypeBuilder.GenericType = function() { + this.parameterTypeUnions = []; +}; + + +/** + * Generic type name (or module name). + * @type {?module:lib/TypeBuilder.TypeName|module:lib/TypeBuilder.ModuleName} + */ +TypeBuilder.GenericType.prototype.genericTypeName = null; + + +/** + * Generic parameter type unions. + * @type {Array.} + */ +TypeBuilder.GenericType.prototype.parameterTypeUnions = null; + + +/** + * Sets a generic type name. + * @param {module:lib/TypeBuilder.TypeName} name Generic type name. + */ +TypeBuilder.GenericType.prototype.setTypeName = function(name) { + this.genericTypeName = name; +}; + + +/** + * Sets a generic module name. + * @param {module:lib/TypeBuilder.ModuleName} name Generic module name. + */ +TypeBuilder.GenericType.prototype.setModuleName = function(name) { + this.genericTypeName = name; +}; + + +/** + * Adds a generic parameter type union. + * @param {module:lib/TypeBuilder.TypeUnion} type Parameter type union to + * add. + */ +TypeBuilder.GenericType.prototype.addParameterTypeUnion = function(type) { + this.parameterTypeUnions.push(type); +}; + + +/** @override */ +TypeBuilder.GenericType.prototype.toString = function() { + return this.genericTypeName + '.<' + this.parameterTypeUnions.join(', ') + + '>'; +}; + + +/** + * Returns a html string. + * @return {string} HTML string. + */ +TypeBuilder.GenericType.prototype.toHtml = function() { + var params = this.parameterTypeUnions.map(function(param) { + return param.toHtml(); + }); + return this.genericTypeName.toHtml() + '.<' + params.join(', ') + '>'; +}; + + + +/** + * A class for function types. + * @constructor + * @alias module:lib/TypeBuilder.FunctionType + */ +TypeBuilder.FunctionType = function() { + this.parameterTypeUnions = []; +}; + + +/** + * Constructor function flag. The function has to be a constructor if this flag + * is true. + *@type {boolean} + */ +TypeBuilder.FunctionType.prototype.isConstructor = false; + + +/** + * Function parameter type unions. + * @type {Array.} + */ +TypeBuilder.FunctionType.prototype.parameterTypeUnions = null; + + +/** + * Fuction return type union. Null if a function has nothing to return. + * @type {?module:lib/TypeBuilder.TypeUnion} + */ +TypeBuilder.FunctionType.prototype.returnTypeUnion = null; + + +/** + * Fuction context type union. Null if a context where a function run on is + * not specified. + * @type {?module:lib/TypeBuilder.TypeUnion} + */ +TypeBuilder.FunctionType.prototype.contextTypeUnion = null; + + +/** + * Sets a constructor flag. + * @param {boolean} enable Whether a function is a constructor. + */ +TypeBuilder.FunctionType.prototype.setConstructor = function(enable) { + this.isConstructor = enable; +}; + + +/** + * Sets a context type union. + * @param {module:lib/TypeBuilder.TypeUnion} union Context type union. + */ +TypeBuilder.FunctionType.prototype.setContextTypeUnion = function(union) { + this.contextTypeUnion = union; +}; + + +/** + * Adds a parameter type union. + * @param {module:lib/TypeBuilder.TypeUnion} param Parameter type union to + * add. + */ +TypeBuilder.FunctionType.prototype.addParameterTypeUnion = function(param) { + this.parameterTypeUnions.push(param); +}; + + +/** + * Sets a return type union. + * @param {module:lib/TypeBuilder.TypeUnion} ret Return type union. + */ +TypeBuilder.FunctionType.prototype.setReturnTypeUnion = function(ret) { + this.returnTypeUnion = ret; +}; + + +/** + * Returns a function type expression string. + * @param {boolean} isHtml Whether the output string is HTML. + * @return {string} Function type expression string. + * @private + */ +TypeBuilder.FunctionType.prototype.toStringInternal_ = function(isHtml) { + var str = 'function('; + + var arr; + if (isHtml) { + arr = this.parameterTypeUnions.map(function(param) { + return param.toHtml(); + }); + } + else { + arr = [].concat(this.parameterTypeUnions); + } + + if (this.contextTypeUnion) { + if (this.isConstructor) { + arr.unshift('new:' + (isHtml ? this.contextTypeUnion.toHtml() : + this.contextTypeUnion)); + } + else { + arr.unshift('this:' + (isHtml ? this.contextTypeUnion.toHtml() : + this.contextTypeUnion)); + } + } + + str += arr.join(', ') + ')'; + + if (this.returnTypeUnion) { + str += ': ' + (isHtml ? this.returnTypeUnion.toHtml() : + this.returnTypeUnion); + } + + return str; +}; + + +/** @override */ +TypeBuilder.FunctionType.prototype.toString = function() { + return this.toStringInternal_(false); +}; + + +/** + * Returns a html string. + * @return {string} HTML string. + */ +TypeBuilder.FunctionType.prototype.toHtml = function() { + return this.toStringInternal_(true); +}; + + + +/** + * A class for record types. + * @constructor + * @alias module:lib/TypeBuilder.RecordType + */ +TypeBuilder.RecordType = function() { + this.entries = []; +}; + + +/** + * An array of entries. + * @type {Array.} + */ +TypeBuilder.RecordType.prototype.entries = null; + + +/** + * Adds an entry to the target record. + * @param {TypeBuilder.RecordType.Entry} entry Entry to add. + */ +TypeBuilder.RecordType.prototype.addEntry = function(entry) { + this.entries.push(entry); +}; + + +/** @override */ +TypeBuilder.RecordType.prototype.toString = function() { + return '{ ' + this.entries.join(', ') + ' }'; +}; + + +/** + * Returns a html string. + * @return {string} HTML string. + */ +TypeBuilder.RecordType.prototype.toHtml = function() { + return '{ ' + this.entries.map(function(entry) { + return entry.toHtml(); + }).join(', ') + ' }'; +}; + + + +/** + * A class for entries. + * @constructor + * @alias module:lib/TypeBuilder.RecordType.Entry + */ +TypeBuilder.RecordType.Entry = function() {}; + + +/** + * Entry key name. + * @type {string} + */ +TypeBuilder.RecordType.Entry.prototype.name = null; + + +/** + * Entry value type union. + * @type {?module:lib/TypeBuilder.TypeUnion} + */ +TypeBuilder.RecordType.Entry.prototype.typeUnion = null; + + +/** + * Sets an entry key name. + * @param {string} keyName Entry key name to set. + */ +TypeBuilder.RecordType.Entry.prototype.setKeyName = function(keyName) { + this.name = keyName; +}; + + +/** + * Sets a value type union. + * @param {module:lib/TypeBuilder.TypeUnion} type Value type union to set. + */ +TypeBuilder.RecordType.Entry.prototype.setValueTypeUnion = function(type) { + this.typeUnion = type; +}; + + +/** @override */ +TypeBuilder.RecordType.Entry.prototype.toString = function() { + return this.name + ': ' + this.typeUnion; +}; + + +/** @override */ +TypeBuilder.RecordType.Entry.prototype.toHtml = function() { + return this.name + ': ' + this.typeUnion.toHtml(); +}; + + + +/** + * A class for module names. + * @constructor + * @alias module:lib/TypeBuilder.ModuleName + */ +TypeBuilder.ModuleName = function() {}; + + +/** + * Module name publisher. Set a publisher object if you want to get a link from + * a module name when {@code #toString} is called. + * + * This example is a simple HTML anchor publisher. + *
+ * MyPublisher = {
+ *   publish: function(moduleNameObj) {
+ *     return '<a href="' + moduleNameObj.name + '.html">' +
+ *         moduleNameObj.name + '</a>';
+ *   }
+ * };
+ * 
+ * @type {?{publish: function(module:lib/TypeBuilder.ModuleName): string}} + */ +TypeBuilder.ModuleName.publisher = null; + + +/** + * Returns an encoded file url by a module name. + * For example, {@code module:foo/bar} ⇒ {@code module%3Afoo%2Fbar.html}. + * @param {string} moduleName Module name string. + * @return {string} URL string. + */ +TypeBuilder.ModuleName.getUrlByModuleName = function(moduleName) { + return encodeURIComponent('module:' + moduleName) + '.html'; +}; + + +/** + * Type name string. + * @type {?string} + */ +TypeBuilder.ModuleName.prototype.name = null; + + +/** + * Sets a type name string. + * @param {string} name Type name string. + */ +TypeBuilder.ModuleName.prototype.setModuleName = function(name) { + this.name = name; +}; + + +/** + * Returns a type name string. Set {@code TypeBuilder.ModuleName.publisher} if + * you want to convert to a link from the type name. In default, returns a + * raw type name. + * @override + * @see module:lib/TypeBuilder.ModuleName.publisher + */ +TypeBuilder.ModuleName.prototype.toString = function() { + if (TypeBuilder.ModuleName.publisher) { + return TypeBuilder.ModuleName.publisher.publish(this); + } + else { + return 'module:' + this.name; + } +}; + + +/** + * Returns a html. + * @return {string} HTML string. + */ +TypeBuilder.ModuleName.prototype.toHtml = function() { + return 'module:' + this.name + ''; +}; + + +// Exports the constructor. +module.exports = TypeBuilder; diff --git a/node_modules/jsdoctypeparser/lib/legacy/TypeDictionary.js b/node_modules/jsdoctypeparser/lib/legacy/TypeDictionary.js new file mode 100644 index 000000000..8fcc32107 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/legacy/TypeDictionary.js @@ -0,0 +1,415 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + + +var util = require('./util.js'); + + + +/** + * A singleton class for type dictionaries. This dictionaty is useful to check + * an user define type name. Maybe, a type name publisher needs the check to + * determine whether should convert a type name to a link. + * + * Use {@code getInstance()} to get the instance. + * + * For example: + *
+ * var dict = TypeDictionary.getInstance();
+ *
+ * // Browser objects
+ * dict.has('string'); // ⇒ true
+ * dict.has('Element'); // ⇒ true
+ *
+ * // User define objects
+ * dict.has('FooBar'); // ⇒ false
+ * dict.has('foo.Bar'); // ⇒ false
+ * 
+ * @constructor + * @exports lib/TypeDictionary + */ +var TypeDictionary = function() { + var dict = [].concat(TypeDictionary.GENERALS); + + if (TypeDictionary.ERROR_TYPES_ENABLED) { + dict.push.apply(dict, TypeDictionary.ERRORS); + } + + if (TypeDictionary.HTML_TYPES_ENABLED) { + dict.push.apply(dict, TypeDictionary.HTMLS); + } + + if (TypeDictionary.DOM_TYPES_ENABLED) { + dict.push.apply(dict, TypeDictionary.DOMS); + } + + if (TypeDictionary.SVGS_TYPES_ENABLED) { + dict.push.apply(dict, TypeDictionary.SVGS); + } + + dict = dict.map(function(word) { + return word.toLowerCase(); + }); + + dict.sort(); + + this.dict_ = dict; + this.dictLen_ = dict.length; +}; +util.addSingletonGetter(TypeDictionary); + + +/** + * Whether error object types are enabled. Default is true. + * @const + * @type {boolean} + */ +TypeDictionary.ERROR_TYPES_ENABLED = true; + + +/** + * Whether DOM interface types are enabled. Default is true. + * @const + * @type {boolean} + */ +TypeDictionary.DOM_TYPES_ENABLED = true; + + +/** + * Whether HTML interface types are enabled. Default is true. + * @const + * @type {boolean} + */ +TypeDictionary.HTML_TYPES_ENABLED = true; + + +/** + * Whether SVG interface types are enabled. Default is true. + * @const + * @type {boolean} + */ +TypeDictionary.SVGS_TYPES_ENABLED = true; + + +/** + * Type word array. The array has to be sorted. + * @type {Array.} + * @private + */ +TypeDictionary.prototype.dict_ = null; + + +/** + * Type word array length. + * @type {number} + * @private + */ +TypeDictionary.prototype.dictLen_ = null; + + +/** + * Whether the specified type is in the dictionary. + * @param {string} target Type to check. + * @return {boolean} Whether the specified type is in the dictionary. + */ +TypeDictionary.prototype.has = function(target) { + var a = target.toLowerCase(); + var arr = this.dict_; + var left = 0; // inclusive + var right = this.dictLen_; // exclusive + var found; + while (left < right) { + var middle = (left + right) >> 1; + var b = arr[middle]; + var compareResult = a > b ? 1 : a < b ? -1 : 0; + if (compareResult > 0) { + left = middle + 1; + } else if (compareResult === 0) { + return true; + } else { + right = middle; + } + } + return false; +}; + + +/** + * General purpose object names. + * @const + * @type {Array.} + */ +TypeDictionary.GENERALS = [ + 'Array', + 'Boolean', + 'Date', + 'Document', + 'Element', + 'Error', + 'Function', + 'Image', + 'Infinity', + 'Iterator', + 'NaN', + 'Null', + 'Number', + 'Object', + 'Option', + 'RegExp', + 'String', + 'Undefined', + 'Window', + '*', // All type + '?' // Unkown type +]; + + +/** + * Error object names. + * @const + * @type {Array.} + */ +TypeDictionary.ERRORS = [ + 'EvalError', + 'InternalError', + 'RangeError', + 'ReferenceError', + 'StopIteration', + 'SyntaxError', + 'TypeError', + 'UriError' +]; + + +/** + * DOM object names. + * @const + * @type {Array.} + */ +TypeDictionary.DOMS = [ + 'Attr', + 'CDATASection', + 'CharacterData', + 'Comment', + 'console', + 'DocumentFragment', + 'DocumentType', + 'DomConfiguration', + 'DOMError', + 'DOMErrorHandler', + 'DOMException', + 'DOMImplementation', + 'DOMImplementationList', + 'DOMImplementationRegistry', + 'DOMImplementationSource', + 'DOMLocator', + 'DOMObject', + 'DOMRequest', + 'DOMString', + 'DOMStringList', + 'DOMTimeStamp', + 'DOMUserData', + 'Entity', + 'EntityReference', + 'MediaQueryList', + 'MediaQueryListListener', + 'NameList', + 'NamedNodeMap', + 'Node', + 'NodeFilter', + 'NodeIterator', + 'NodeList', + 'Notation', + 'Plugin', + 'PluginArray', + 'ProcessingInstruction', + 'SharedWorker', + 'Text', + 'TimeRanges', + 'Treewalker', + 'TypeInfo', + 'UserDataHandler', + 'Worker', + 'WorkerGlobalScope' +]; + + +/** + * HTML interface names. + * @const + * @type {Array.} + */ +TypeDictionary.HTMLS = [ + 'HTMLDocument', + 'HTMLElement', + 'HTMLAnchorElement', + 'HTMLAppletElement', + 'HTMLAudioElement', + 'HTMLAreaElement', + 'HTMLBaseElement', + 'HTMLBaseFontElement', + 'HTMLBodyElement', + 'HTMLBRElement', + 'HTMLButtonElement', + 'HTMLCanvasElement', + 'HTMLDataListElement', + 'HTMLDirectoryElement', + 'HTMLDivElement', + 'HTMLDListElement', + 'HTMLEmbedElement', + 'HTMLFieldSetElement', + 'HTMLFontElement', + 'HTMLFormElement', + 'HTMLFrameElement', + 'HTMLFrameSetElement', + 'HTMLHeadElement', + 'HTMLHeadingElement', + 'HTMLHtmlElement', + 'HTMLHRElement', + 'HTMLIFrameElement', + 'HTMLImageElement', + 'HTMLInputElement', + 'HTMLKeygenElement', + 'HTMLLabelElement', + 'HTMLLIElement', + 'HTMLLinkElement', + 'HTMLMapElement', + 'HTMLMenuElement', + 'HTMLMetaElement', + 'HTMLMeterElement', + 'HTMLModElement', + 'HTMLObjectElement', + 'HTMLOListElement', + 'HTMLOptGroupElement', + 'HTMLOptionElement', + 'HTMLOutputElement', + 'HTMLParagraphElement', + 'HTMLParamElement', + 'HTMLPreElement', + 'HTMLProgressElement', + 'HTMLQuoteElement', + 'HTMLScriptElement', + 'HTMLSelectElement', + 'HTMLSourceElement', + 'HTMLSpanElement', + 'HTMLStyleElement', + 'HTMLTableElement', + 'HTMLTableCaptionElement', + 'HTMLTableCellElement,', + 'HTMLTableDataCellElement', + 'HTMLTableHeaderCellElement', + 'HTMLTableColElement', + 'HTMLTableRowElement', + 'HTMLTableSectionElement', + 'HTMLTextAreaElement', + 'HTMLTimeElement', + 'HTMLTitleElement', + 'HTMLTrackElement', + 'HTMLUListElement', + 'HTMLUnknownElement', + 'HTMLVideoElement', + 'CanvasRenderingContext2D', + 'CanvasGradient', + 'CanvasPattern', + 'TextMetrics', + 'ImageData', + 'CanvasPixelArray' +]; + + +/** + * SVG interface names. + * @const + * @type {Array.} + */ +TypeDictionary.SVGS = [ + 'SVGElement', + 'SVGAElement', + 'SVGAltGlyphElement', + 'SVGAltGlyphDefElement', + 'SVGAltGlyphItemElement', + 'SVGAnimationElement', + 'SVGAnimateElement', + 'SVGAnimateColorElement', + 'SVGAnimateMotionElement', + 'SVGAnimateTransformElement', + 'SVGSetElement', + 'SVGCircleElement', + 'SVGClipPathElement', + 'SVGColorProfileElement', + 'SVGCursorElement', + 'SVGDefsElement', + 'SVGDescElement', + 'SVGEllipseElement', + 'SVGFilterElement', + 'SVGFilterPrimitiveStandardAttributes', + 'SVGFEBlendElement', + 'SVGFEColorMatrixElement', + 'SVGFEComponentTransferElement', + 'SVGFECompositeElement', + 'SVGFEConvolveMatrixElement', + 'SVGFEDiffuseLightingElement', + 'SVGFEDisplacementMapElement', + 'SVGFEDistantLightElement', + 'SVGFEFloodElement', + 'SVGFEGaussianBlurElement', + 'SVGFEImageElement', + 'SVGFEMergeElement', + 'SVGFEMergeNodeElement', + 'SVGFEMorphologyElement', + 'SVGFEOffsetElement', + 'SVGFEPointLightElement', + 'SVGFESpecularLightingElement', + 'SVGFESpotLightElement', + 'SVGFETileElement', + 'SVGFETurbulenceElement', + 'SVGComponentTransferFunctionElement', + 'SVGFEFuncRElement', + 'SVGFEFuncGElement', + 'SVGFEFuncBElement', + 'SVGFEFuncAElement', + 'SVGFontElement', + 'SVGFontFaceElement', + 'SVGFontFaceFormatElement', + 'SVGFontFaceNameElement', + 'SVGFontFaceSrcElement', + 'SVGFontFaceUriElement', + 'SVGForeignObjectElement', + 'SVGGElement', + 'SVGGlyphElement', + 'SVGGlyphRefElement', + 'SVGGradientElement', + 'SVGLinearGradientElement', + 'SVGRadialGradientElement', + 'SVGHKernElement', + 'SVGImageElement', + 'SVGLineElement', + 'SVGMarkerElement', + 'SVGMaskElement', + 'SVGMetadataElement', + 'SVGMissingGlyphElement', + 'SVGMPathElement', + 'SVGPathElement', + 'SVGPatternElement', + 'SVGPolylineElement', + 'SVGPolygonElement', + 'SVGRectElement', + 'SVGScriptElement', + 'SVGStopElement', + 'SVGStyleElement', + 'SVGSVGElement', + 'SVGSwitchElement', + 'SVGSymbolElement', + 'SVGTextElement', + 'SVGTextPathElement', + 'SVGTitleElement', + 'SVGTRefElement', + 'SVGTSpanElement', + 'SVGUseElement', + 'SVGViewElement', + 'SVGVKernElement' +]; + + +// Exports the constructor. +module.exports = TypeDictionary; diff --git a/node_modules/jsdoctypeparser/lib/legacy/TypeLexer.js b/node_modules/jsdoctypeparser/lib/legacy/TypeLexer.js new file mode 100644 index 000000000..374594953 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/legacy/TypeLexer.js @@ -0,0 +1,588 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + +/** + * @fileoverview A class for Jsdoc type lexers. + * @author orga.chem.job@gmail.com (OrgaChem) + */ + + +var util = require('./util.js'); + + + +/** + * A class for Jsdoc type lexers. This lexer can analyze JsDoc type expressions + * and ClosureCompiler type expressions. See + * {@link https://code.google.com/p/jsdoc-toolkit/wiki/TagParam} and + * {@link https://developers.google.com/closure/compiler/docs/js-for-compiler}. + * + * This lexer calls handlers in a {@code map}. This is a list of method names of + * handlers: + *
+ *
Type name token handler
+ *
{@code handleTypeNameToken(typeName)}
+ * + *
Type union token handlers
+ *
{@code handleOpenTypeUnionToken()}, + * {@code handleCloseTypeUnionToken()}
+ * + *
Function type token handlers
+ *
{@code handleOpenFunctionTypeToken()}, + * {@code handleCloseFunctionTypeToken()}, + * {@code handleOpenFunctionTypeParametersToken()}, + * {@code handleCloseFunctionTypeParametersToken()}, + * {@code handleFunctionTypeReturnTypeUnionToken()}, + * {@code handleFunctionTypeContextTypeUnionToken()}, + * {@code handleConstructorTypeUnionToken()}
+ * + *
Generic type token handlers
+ *
{@code handleOpenGenericTypeToken()}, + * {@code handleCloseGenericTypeToken()}, + * {@code handleGenericTypeNameToken()}, + * {@code handleOpenGenericTypeParametersToken()}, + * {@code handleCloseGenericTypeParametersToken()}
+ * + *
Record type token handlers
+ *
{@code handleOpenRecordTypeToken()}, + * {@code handleCloseRecordTypeToken()}, + * {@code handleEntryKeyNameToken(keyName)}, + * {@code handleEntryValueTypeUnionToken()}
+ * + *
Type operator token handlers
+ *
{@code handleNullableTypeOperatorToken()}, + * {@code handleNonNullableTypeOperatorToken()}, + * {@code handleOptionalTypeOperatorToken()}, + * {@code handleVariableTypeOperatorToken()}, + * {@code handleAllTypeOperatorToken()}, + * {@code handleUnknownTypeOperatorToken()}
+ * + *
Module token handlers
+ *
{@code handleModuleNameToken(moduleName)}
+ *
+ * + * @param {Object.=} opt_map Optional token handlers. + * @constructor + * @exports lib/TypeLexer + */ +var TypeLexer = function(opt_map) { + this.setTokenHandlers(opt_map || {}); +}; + + + +/** + * Type expression syntax error object. + * @param {string=} opt_msg Error message. + * @param {string=} opt_org Original type expression string was analyzed. + * @param {number=} opt_index Error location. + * @constructor + * @extends {Error} + * @alias lib/TypeLexer.SyntaxError + */ +TypeLexer.SyntaxError = function(opt_msg, opt_org, opt_index) { + Error.call(this); + + var msg = opt_msg || ''; + var org = opt_org || ''; + var index = opt_index || 1; + + this.name = 'TypeLexerSyntaxError'; + + this.message = [ + msg + ':', + org, + util.repeat(' ', index - 1) + '^' + ].join('\n'); +}; +util.inherits(TypeLexer.SyntaxError, Error); + + +/** + * Original type expression to analyze. + * @type {?string} + * @private + */ +TypeLexer.prototype.org_ = null; + + +/** + * Fail the analizing. + * @param {string} msg Error message. + * @param {number} index Error location. + * @private + */ +TypeLexer.prototype.fail_ = function(msg, index) { + throw new TypeLexer.SyntaxError(msg, this.org_, index); +}; + + +/** + * Listner map. + * @type {Object.} + * @private + */ +TypeLexer.prototype.handlers_ = null; + + +/** + * Sets an object has token handlers. + * @param {Object.} map Token handlers. + */ +TypeLexer.prototype.setTokenHandlers = function(map) { + this.handlers_ = map; +}; + + +/** + * Analyzes a type string. + * @param {string} arg Type expression string. + */ +TypeLexer.prototype.analyze = function(arg) { + this.org_ = arg; + + var str = this.analyzeTypeUnion(arg); + if (str) { + this.fail_('Type union string was remained', this.org_.length - str.length); + } +}; + + +/** + * Analyzes a type union expression. + * @param {string} arg Type expression string. + * @return {string} Remained string. + * @protected + */ +TypeLexer.prototype.analyzeTypeUnion = function(arg) { + if (this.handlers_.handleOpenTypeUnionToken) { + this.handlers_.handleOpenTypeUnionToken(); + } + + var str = arg.replace(/^\s+/, ''); + var hasQuestionMark = false; + var hasType = false; + var wasOpenParens = false; + + // Check type operators on a head of the type union. + var tmp, matched; + if (tmp = str.match(/^[=!\?\.\s]+/)) { + matched = tmp[0]; + str = str.slice(matched.length); + + if (matched.indexOf('=') >= 0) { + if (this.handlers_.handleOptionalTypeOperatorToken) { + this.handlers_.handleOptionalTypeOperatorToken(); + } + } + if (matched.indexOf('...') >= 0) { + if (this.handlers_.handleVariableTypeOperatorToken) { + this.handlers_.handleVariableTypeOperatorToken(); + } + } + if (matched.indexOf('!') >= 0) { + if (this.handlers_.handleNonNullableTypeOperatorToken) { + this.handlers_.handleNonNullableTypeOperatorToken(); + } + } + if (matched.indexOf('?') >= 0) { + // Cannot determine the question mark means 'the all type' or 'nullable' + // without type count. + hasQuestionMark = true; + } + } + + + if (str[0] === '(' || str[0] === '[') { + // Identify a square bracket with a parenthesis.1 + str = str.replace(/^[\(\[]\s*/, ''); + if (this.handlers_.handleOpenParenthesis) { + this.handlers_.handleOpenParenthesis(); + } + wasOpenParens = true; + } + + while (str[0]) { + if (str.match(/^[\)\]\}>,]/)) { + // This is an end of union. The close parens used as function params + if (wasOpenParens && (str[0] === ')' || str[0] === ']')) { + // Identify a square bracket with a parenthesis.1 + str = str.replace(/^[\)\]]\s*/, ''); + if (this.handlers_.handleCloseParenthesis) { + this.handlers_.handleCloseParenthesis(); + } + } + break; + } + else { + // Check type operators on a tail of the type union. + if (tmp = str.match(/^[=!?\s]+/)) { + matched = tmp[0]; + str = str.slice(matched.length); + + if (matched.indexOf('=') >= 0) { + if (this.handlers_.handleOptionalTypeOperatorToken) { + this.handlers_.handleOptionalTypeOperatorToken(); + } + } + if (matched.indexOf('!') >= 0) { + if (this.handlers_.handleNonNullableTypeOperatorToken) { + this.handlers_.handleNonNullableTypeOperatorToken(); + } + } + if (matched.indexOf('?') >= 0) { + hasQuestionMark = true; + } + } + else { + str = this.analyzeType(str).replace(/^\|\s*/, ''); + hasType = true; + } + } + } + + // Check a type count. If the count is less than 1, the question mark means + // the all type, otherwise nullable. + if (hasQuestionMark) { + if (hasType) { + if (this.handlers_.handleNullableTypeOperatorToken) { + this.handlers_.handleNullableTypeOperatorToken(); + } + } + else { + if (this.handlers_.handleUnknownTypeOperatorToken) { + this.handlers_.handleUnknownTypeOperatorToken(); + } + } + } + + + if (this.handlers_.handleCloseTypeUnionToken) { + this.handlers_.handleCloseTypeUnionToken(); + } + return str; +}; + + +/** + * Analyzes a single type expression such as: type name, generics, function. + * @param {string} arg Type expression string. + * @return {string} Remained string. + * @protected + */ +TypeLexer.prototype.analyzeType = function(arg) { + var str = arg; + var tmp; + + if (!str) { + this.fail_('Unexpected token: ""', this.org_.length); + } + else if (str.match(/^\*/)) { + if (this.handlers_.handleAllTypeOperatorToken) { + this.handlers_.handleAllTypeOperatorToken(); + } + str = str.replace(/^\*\s*/, ''); + } + else if (tmp = str.match(/^(void|undefined)\b/)) { + if (this.handlers_.handleOptionalTypeOperatorToken) { + this.handlers_.handleOptionalTypeOperatorToken(tmp[1]); + } + str = str.replace(/^(void|undefined)\s*/, ''); + } + else if (str.match(/^null\b/)) { + if (this.handlers_.handleNullableTypeOperatorToken) { + this.handlers_.handleNullableTypeOperatorToken(); + } + str = str.replace(/^null\s*/, ''); + } + else if (str.match(/^[Uu]nknown\b/)) { + if (this.handlers_.handleUnknownTypeOperatorToken) { + this.handlers_.handleUnknownTypeOperatorToken(); + } + str = str.replace(/^[Uu]nknown\s*/, ''); + } + else if (str.match(/^function\b/)) { + str = this.analyzeFunctionType(str); + } + else if (str.match(/^\{/)) { + str = this.analyzeRecordType(str); + } + else { + str = this.analyzeTypeName(str); + } + + return str; +}; + + +/** + * Analyzes a type name and a module name expressioon. + * @param {string} arg Type expression string. + * @return {string} Remained string. + * @protected + */ +TypeLexer.prototype.analyzeTypeName = function(arg) { + var str = arg, tmp, matched, isModule; + + if (isModule = str.match(/^module:/)) { + // Support "module:" expression. + str = str.replace(/^module:\s*/, ''); + tmp = str.match(/^[\w\s\.#\/$_]+/); + matched = tmp[0]; + str = str.slice(matched.length); + matched = matched.replace(/\s+/g, ''); + + if (this.isJsdocGenericType(str)) { + str = this.analyzeJsdocGenericType(str, matched); + } + else if (this.isGenericType(str)) { + // Check an opening generic params token that is after the type name. + // This is generic type name if a square bracket was found. + str = this.analyzeGenericType('module:' + matched + str); + } + else if (matched) { + if (this.handlers_.handleModuleNameToken) { + this.handlers_.handleModuleNameToken(matched); + } + } + else { + // This is an empty type that has only white spaces. + this.fail_('Unexpected token: "' + str + '"', this.org_.length - + str.length); + } + } + else { + tmp = str.match(/^[\w\s\.#$_]+/); + + if (!tmp) { + // This is an empty type such as ',foobar' or '|foobar'. + this.fail_('Unexpected token: ""', this.org_.length - str.length); + } + + matched = tmp[0]; + str = str.slice(matched.length); + matched = matched.replace(/\s+/g, ''); + + if (this.isJsdocGenericType(str)) { + str = this.analyzeJsdocGenericType(str, matched); + } + else if (this.isGenericType(str)) { + // Check an opening generic params token that is after the type name. + // This is generic type name if a square bracket was found. + str = this.analyzeGenericType(matched + str); + } + else if (matched) { + if (this.handlers_.handleTypeNameToken) { + this.handlers_.handleTypeNameToken(matched); + } + } + else { + // This is an empty type that has only white spaces. + this.fail_('Unexpected token: "' + str + '"', this.org_.length - + str.length); + } + } + + return str; +}; + + +/** + * Whether a type expression is a jsdoc generic type expression. + * @param {string} str Type expression string. + * @return {boolean} Whether a type expression is a jsdoc generic type + * expression. + */ +TypeLexer.prototype.isJsdocGenericType = function(str) { + return !!str.match(/^\[\s*\]/); +}; + + +/** + * Analyzes a jsdoc generic type expression. + * @param {string} arg Type expression string. + * @param {string} matched Generic parameter type expression string. + * @return {string} Remained string. + * @protected + */ +TypeLexer.prototype.analyzeJsdocGenericType = function(arg, matched) { + // Support an array generic type as JsDoc official such as "String[]". + // String[] => Array. + var str = arg.replace(/^\[\s*\]\s*/, ''); + str = this.analyzeGenericType('Array.<' + matched + '>' + str); + return str; +}; + + +/** + * Whether a type expression is a generic type expression. + * @param {string} str Type expression string. + * @return {boolean} Whether a type expression is a generic type expression. + */ +TypeLexer.prototype.isGenericType = function(str) { + return !!str.match(/^') { + if (char) { + str = this.analyzeTypeUnion(str).replace(/^,?\s*/, ''); + } + else { + this.fail_('Square bracket as generic params was not closed', + this.org_.length - str.length); + } + } + + if (this.handlers_.handleCloseGenericTypeParametersToken) { + this.handlers_.handleCloseGenericTypeParametersToken(); + } + + if (this.handlers_.handleCloseGenericTypeToken) { + this.handlers_.handleCloseGenericTypeToken(); + } + return str.replace(/^>\s*/, ''); +}; + + +/** + * Analyzes a record type expression. + * @param {string} arg Type expression string. + * @return {string} Remained string. + * @protected + */ +TypeLexer.prototype.analyzeRecordType = function(arg) { + if (this.handlers_.handleOpenRecordTypeToken) { + this.handlers_.handleOpenRecordTypeToken(); + } + + var str = arg.replace(/^\{\s*/, ''); + + var tmp, matched; + while (str[0] !== '}') { + if (tmp = str.match(/^[^:\}]+/)) { + matched = tmp[0]; + str = str.slice(matched.length); + if (this.handlers_.handleEntryKeyNameToken) { + this.handlers_.handleEntryKeyNameToken(matched.replace(/\s+/g, '')); + } + } + + if (this.handlers_.handleEntryValueTypeUnionToken) { + this.handlers_.handleEntryValueTypeUnionToken(); + } + + if (str[0] === ':') { + str = this.analyzeTypeUnion(str.replace(/^:\s*/, '')). + replace(/^,?\s*/, ''); + } + else { + // See a record value type as the all type if a colon was not found. + this.analyzeTypeUnion('*'); + str = str.replace(/^,?\s*/, ''); + } + } + + if (this.handlers_.handleCloseRecordTypeToken) { + this.handlers_.handleCloseRecordTypeToken(); + } + return str.replace(/^\}\s*/, ''); +}; + + +// Exports the constructor. +module.exports = TypeLexer; diff --git a/node_modules/jsdoctypeparser/lib/legacy/TypeParser.js b/node_modules/jsdoctypeparser/lib/legacy/TypeParser.js new file mode 100644 index 000000000..889df3935 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/legacy/TypeParser.js @@ -0,0 +1,93 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + + +var TypeBuilder = require('./TypeBuilder.js'); + + + +/** + * A class for type expression parser. This type parser can parse: + *
+ *
Jsdoc type expressions
+ *
{@code 'foo.bar'}, + * {@code 'String[]'}
+ *
Closure Compiler type expressions
+ *
{@code 'Array.<string>'}, + * {@code 'function(this: Objext, arg1, arg2): ret'}
+ *
Nested type expressions
+ *
{@code 'Array.<Array.<string>>'}, + * {@code 'function(function(Function))'}
+ *
+ * + * For example: + *
+ * var parser = new TypeParser();
+ * parser.parse('Array.<string|number, ?Object=>|string|undefined');
+ * // ⇒ {
+ * //   optional: true,
+ * //   types: [
+ * //     {
+ * //       parameterTypeUnions: [
+ * //         {
+ * //           types: [
+ * //             { name: 'string' },
+ * //             { name: 'number' }
+ * //           ]
+ * //         },
+ * //         {
+ * //           nullable: true
+ * //           optional: true
+ * //           types: [
+ * //             { name: 'Object' }
+ * //           ]
+ * //         }
+ * //       ]
+ * //     }, {
+ * //       { name: 'string' }
+ * //     }
+ * //   ]
+ * // }
+ * 
+ * @constructor + * @exports lib/TypeParser + */ +var TypeParser = function() { + this.builder_ = new TypeBuilder(); +}; + + +/** + * Type builder. + * @type {module:lib/TypeBuilder} + * @private + */ +TypeParser.prototype.builder_ = null; + + +/** + * Parses a type expression. + * @param {string} typeExp Type expression string to parse. + * @return {module:lib/TypeBuilder.TypeUnion} Type union object. + */ +TypeParser.prototype.parse = function(typeExp) { + var union; + + if (typeExp) { + var builder = this.builder_; + builder.setTypeString(typeExp); + + union = builder.build(); + } + else { + union = new TypeBuilder.TypeUnion(); + union.setUnknownType(true); + return union; + } + + return union; +}; + + +// Exports the constructor. +module.exports = TypeParser; diff --git a/node_modules/jsdoctypeparser/lib/legacy/index.js b/node_modules/jsdoctypeparser/lib/legacy/index.js new file mode 100755 index 000000000..e71d52d5b --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/legacy/index.js @@ -0,0 +1,62 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + + +var defineProp = Object.defineProperty; + + +/** + * Namespace for jsdoctypeparser. + * @namespace + * @exports jsdoctypeparser + */ +module.exports = { + + + /** + * An alias for type expression parsers. + * @type {module:lib/legacy/TypeParser} + * @see module:lib/legacy/TypeParser + * @deprecated Do not use the module directly. Use TransformToLegacy. + */ + get Parser() { + defineProp(this, 'Parser', { value: require('./TypeParser.js') }); + return this.Parser; + }, + + + /** + * An alias for type expression lexers. + * @type {module:lib/legacy/TypeLexer} + * @see module:lib/legacy/TypeLexer + * @deprecated Do not use the module directly. Use TransformToLegacy. + */ + get Lexer() { + defineProp(this, 'Lexer', { value: require('./TypeLexer.js') }); + return this.Lexer; + }, + + + /** + * An alias for type expression object builders. + * @type {module:lib/legacy/TypeBuilder} + * @see module:lib/legacy/TypeBuilder + * @deprecated Do not use the module directly. Use TransformToLegacy. + */ + get Builder() { + defineProp(this, 'Builder', { value: require('./TypeBuilder.js') }); + return this.Builder; + }, + + + /** + * An alias for type name dictionaries. + * @type {module:lib/legacy/TypeDictionary} + * @see module:lib/legacy/TypeDictionary + * @deprecated Do not use the module directly. Use TransformToLegacy. + */ + get Dictionary() { + defineProp(this, 'Dictionary', { value: require('./TypeDictionary.js') }); + return this.Dictionary; + } +}; diff --git a/node_modules/jsdoctypeparser/lib/legacy/util.js b/node_modules/jsdoctypeparser/lib/legacy/util.js new file mode 100644 index 000000000..8bc5aff28 --- /dev/null +++ b/node_modules/jsdoctypeparser/lib/legacy/util.js @@ -0,0 +1,108 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org + + +/** + * Utility methods fot Jsdoc Strict Type Parser. + * @namespace + * @exports lib/util + */ +var util = {}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * Usage: + *
+ * function ParentClass(a, b) { }
+ * ParentClass.prototype.foo = function(a) { }
+ *
+ * function ChildClass(a, b, c) {
+ *   this.superClass_.call(this, a, b, c);
+ * }
+ * util.inherits(ChildClass, ParentClass);
+ *
+ * var child = new ChildClass('a', 'b', 'see');
+ * child.foo(); // works
+ * 
+ * + * In addition, a superclass' implementation of a method can be invoked + * as follows: + * + *
+ * ChildClass.prototype.foo = function(a) {
+ *   ChildClass.superClass_.foo.call(this, a);
+ *   // other code
+ * };
+ * 
+ * + * This method is a copy from + * {@link http://closure-library.googlecode.com/svn/docs/index.html} + * + * @param {Function} childCtor Child class. + * @param {Function} parentCtor Parent class. + */ +util.inherits = function(childCtor, parentCtor) { + /** @constructor */ + function tempCtor() {}; + tempCtor.prototype = parentCtor.prototype; + childCtor.superClass_ = parentCtor.prototype; + childCtor.prototype = new tempCtor(); + /** @override */ + childCtor.prototype.constructor = childCtor; +}; + + +/** + * Adds a {@code getInstance} static method that always return the same instance + * object. + * + * This method is a copy from + * {@link http://closure-library.googlecode.com/svn/docs/index.html} + * + * @param {!Function} ctor The constructor for the class to add the static + * method to. + */ +util.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + return ctor.instance_ = new ctor; + }; +}; + + +/** + * Repeats a string n times. + * + * This method is clone of + * {@link http://closure-library.googlecode.com/svn/docs/index.html}. + * + * @param {string} string The string to repeat. + * @param {number} length The number of times to repeat. + * @return {string} A string containing {@code length} repetitions of + * {@code string}. + */ +util.repeat = function(string, length) { + return new Array(length + 1).join(string); +}; + + +/** + * Warns with a message. + * @param {string} msg Message. + */ +util.warn = function(msg) { + if (console.warn) { + console.warn(msg); + } + else { + console.log('Warning: ' + msg); + } +}; + + +// Exports the namespace. +module.exports = util; diff --git a/node_modules/jsdoctypeparser/package.json b/node_modules/jsdoctypeparser/package.json new file mode 100644 index 000000000..004e613a8 --- /dev/null +++ b/node_modules/jsdoctypeparser/package.json @@ -0,0 +1,47 @@ +{ + "name": "jsdoctypeparser", + "description": "Strict JsDoc type expression parser.", + "version": "1.2.0", + "author": "Kuniwak ", + "keywords": [ + "jsdoc", + "type expression", + "parser" + ], + "repository": { + "type": "git", + "url": "git://github.com/Kuniwak/jsdoctypeparser.git" + }, + "bugs": { + "mail": "orga.chem.job@gmail.com", + "url": "https://github.com/Kuniwak/jsdoctypeparser/issues" + }, + "directories": { + "test": "test" + }, + "main": "lib/index.js", + "scripts": { + "prepublidh": "npm run build", + "pretest": "npm run lint", + "test": "mocha test", + + "lint": "eslint lib test && jscs lib test", + "build": "gulp build" + }, + "readmeFilename": "README.md", + "devDependencies": { + "benchmark": "~1.0.0", + "chai": "^2.2.0", + "eslint": "^0.20.0", + "gulp": "^3.8.11", + "gulp-notify": "^2.2.0", + "gulp-peg": "^0.1.2", + "gulp-plumber": "^0.6.6", + "jscs": "^1.13.1", + "mocha": "^2.2.4" + }, + "license": "MIT", + "dependencies": { + "lodash": "^3.7.0" + } +} diff --git a/node_modules/jsdoctypeparser/peg_lib/jsdoctype.js b/node_modules/jsdoctypeparser/peg_lib/jsdoctype.js new file mode 100644 index 000000000..a4a4ec13b --- /dev/null +++ b/node_modules/jsdoctypeparser/peg_lib/jsdoctype.js @@ -0,0 +1,2031 @@ +module.exports = (function() { + /* + * Generated by PEG.js 0.8.0. + * + * http://pegjs.majda.cz/ + */ + + function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + } + + function SyntaxError(message, expected, found, offset, line, column) { + this.message = message; + this.expected = expected; + this.found = found; + this.offset = offset; + this.line = line; + this.column = column; + + this.name = "SyntaxError"; + } + + peg$subclass(SyntaxError, Error); + + function parse(input) { + var options = arguments.length > 1 ? arguments[1] : {}, + + peg$FAILED = {}, + + peg$startRuleFunctions = { typeExpr: peg$parsetypeExpr }, + peg$startRuleFunction = peg$parsetypeExpr, + + peg$c0 = peg$FAILED, + peg$c1 = [], + peg$c2 = function(prefixModifiersWithWhiteSpaces, modifieeWithWhiteSpaces, postfixModifiersWithWhiteSpaces) { + var prefixModifiers = lodash.pluck(prefixModifiersWithWhiteSpaces, 0); + var modifiee = modifieeWithWhiteSpaces; + var postfixModifiers = lodash.pluck(postfixModifiersWithWhiteSpaces, 0); + + var modifiersOrderedByPriority = postfixModifiers.concat(reverse(prefixModifiers)); + var rootNode = modifiersOrderedByPriority.reduce(function(prevNode, operator) { + switch (operator.operatorType) { + case OperatorType.UNION: + var unionOperator = operator; + return { + type: NodeType.UNION, + left: prevNode, + right: unionOperator.right, + }; + case OperatorType.MEMBER: + var memberOperator = operator; + return { + type: NodeType.MEMBER, + owner: prevNode, + name: memberOperator.memberName, + }; + case OperatorType.INNER_MEMBER: + var memberOperator = operator; + return { + type: NodeType.INNER_MEMBER, + owner: prevNode, + name: memberOperator.memberName, + }; + case OperatorType.INSTANCE_MEMBER: + var memberOperator = operator; + return { + type: NodeType.INSTANCE_MEMBER, + owner: prevNode, + name: memberOperator.memberName, + }; + case OperatorType.GENERIC: + var genericOperator = operator; + return { + type: NodeType.GENERIC, + subject: prevNode, + objects: genericOperator.objects, + } + case OperatorType.ARRAY: + var arrayOperator = operator; + return { + type: NodeType.GENERIC, + subject: { + type: NodeType.NAME, + name: 'Array' + }, + objects: [ prevNode ], + }; + case OperatorType.OPTIONAL: + return { + type: NodeType.OPTIONAL, + value: prevNode, + }; + case OperatorType.NULLABLE: + return { + type: NodeType.NULLABLE, + value: prevNode, + }; + case OperatorType.NOT_NULLABLE: + return { + type: NodeType.NOT_NULLABLE, + value: prevNode, + }; + case OperatorType.VARIADIC: + return { + type: NodeType.VARIADIC, + value: prevNode, + }; + default: + throw Error('Unexpected token: ' + token); + } + }, modifiee); + + + return rootNode; + }, + peg$c3 = "(", + peg$c4 = { type: "literal", value: "(", description: "\"(\"" }, + peg$c5 = ")", + peg$c6 = { type: "literal", value: ")", description: "\")\"" }, + peg$c7 = function(wrapped) { + return wrapped; + }, + peg$c8 = function(name) { + return { + type: NodeType.NAME, + name: name + }; + }, + peg$c9 = /^[a-zA-Z_$]/, + peg$c10 = { type: "class", value: "[a-zA-Z_$]", description: "[a-zA-Z_$]" }, + peg$c11 = /^[a-zA-Z0-9_$]/, + peg$c12 = { type: "class", value: "[a-zA-Z0-9_$]", description: "[a-zA-Z0-9_$]" }, + peg$c13 = "module", + peg$c14 = { type: "literal", value: "module", description: "\"module\"" }, + peg$c15 = ":", + peg$c16 = { type: "literal", value: ":", description: "\":\"" }, + peg$c17 = function(filePath) { + return { + type: NodeType.MODULE, + path: filePath + }; + }, + peg$c18 = /^[a-zA-Z_0-9_$.\/\-]/, + peg$c19 = { type: "class", value: "[a-zA-Z_0-9_$.\\/\\-]", description: "[a-zA-Z_0-9_$.\\/\\-]" }, + peg$c20 = "*", + peg$c21 = { type: "literal", value: "*", description: "\"*\"" }, + peg$c22 = function() { + return { type: NodeType.ANY }; + }, + peg$c23 = "?", + peg$c24 = { type: "literal", value: "?", description: "\"?\"" }, + peg$c25 = function() { + return { type: NodeType.UNKNOWN }; + }, + peg$c26 = "function", + peg$c27 = { type: "literal", value: "function", description: "\"function\"" }, + peg$c28 = null, + peg$c29 = function(paramParts, returnedTypePart) { + var modifierGroups = lodash.groupBy(paramParts, lodash.property('modifierType')); + + var params = []; + var noModifiers = modifierGroups[FunctionModifierType.NONE]; + if (noModifiers) { + params = noModifiers.map(function(paramPartWithNoModifier) { + return paramPartWithNoModifier.value; + }); + } + + + var thisValue = null; + var thisValueModifiers = modifierGroups[FunctionModifierType.THIS]; + if (thisValueModifiers) { + if (thisValueModifiers.length > 1) { + reportSemanticIssue('"this" keyword should be declared only once'); + } + + // Enable the only first thisValue modifier. + thisValue = thisValueModifiers[0].value; + } + + + var newValue = null; + var newModifiers = modifierGroups[FunctionModifierType.NEW]; + if (newModifiers) { + if (newModifiers.length > 1) { + reportSemanticIssue('"new" keyword should be declared only once'); + } + + // Enable the only first new instance modifier. + newValue = newModifiers[0].value; + } + + var returnedTypeNode = returnedTypePart ? returnedTypePart[3] : null; + + return { + type: NodeType.FUNCTION, + params: params, + returns: returnedTypeNode, + thisValue: thisValue, + newValue: newValue, + }; + }, + peg$c30 = ",", + peg$c31 = { type: "literal", value: ",", description: "\",\"" }, + peg$c32 = function(firstParam, restParamsWithComma) { + var params = buildByFirstAndRest(firstParam, restParamsWithComma, 3); + return params; + }, + peg$c33 = "this", + peg$c34 = { type: "literal", value: "this", description: "\"this\"" }, + peg$c35 = function(value) { + return { + modifierType: FunctionModifierType.THIS, + value: value + }; + }, + peg$c36 = "new", + peg$c37 = { type: "literal", value: "new", description: "\"new\"" }, + peg$c38 = function(value) { + return { + modifierType: FunctionModifierType.NEW, + value: value + }; + }, + peg$c39 = function(value) { + return { + modifierType: FunctionModifierType.NONE, + value: value + }; + }, + peg$c40 = "{", + peg$c41 = { type: "literal", value: "{", description: "\"{\"" }, + peg$c42 = "}", + peg$c43 = { type: "literal", value: "}", description: "\"}\"" }, + peg$c44 = function(firstEntry, restEntriesWithComma) { + var entries = buildByFirstAndRest(firstEntry, restEntriesWithComma, 3); + + return { + type: NodeType.RECORD, + entries: entries + }; + }, + peg$c45 = function(key, valueWithColon) { + var hasValue = Boolean(valueWithColon); + var value = hasValue ? valueWithColon[3] : null; + + return { + type: NodeType.RECORD_ENTRY, + key: key, + value: value, + hasValue: hasValue, + }; + }, + peg$c46 = function() { + return { operatorType: OperatorType.NULLABLE }; + }, + peg$c47 = "!", + peg$c48 = { type: "literal", value: "!", description: "\"!\"" }, + peg$c49 = function() { + return { operatorType: OperatorType.NOT_NULLABLE }; + }, + peg$c50 = "=", + peg$c51 = { type: "literal", value: "=", description: "\"=\"" }, + peg$c52 = function() { + return { operatorType: OperatorType.OPTIONAL }; + }, + peg$c53 = "...", + peg$c54 = { type: "literal", value: "...", description: "\"...\"" }, + peg$c55 = function() { + return { operatorType: OperatorType.VARIADIC }; + }, + peg$c56 = function(right) { + return { + operatorType: OperatorType.UNION, + right: right, + }; + }, + peg$c57 = "|", + peg$c58 = { type: "literal", value: "|", description: "\"|\"" }, + peg$c59 = function(memberName) { + return { + operatorType: OperatorType.MEMBER, + memberName: memberName, + }; + }, + peg$c60 = ".", + peg$c61 = { type: "literal", value: ".", description: "\".\"" }, + peg$c62 = function(name) { + return name; + }, + peg$c63 = function(memberName) { + return { + operatorType: OperatorType.INNER_MEMBER, + memberName: memberName, + }; + }, + peg$c64 = "~", + peg$c65 = { type: "literal", value: "~", description: "\"~\"" }, + peg$c66 = function(memberName) { + return { + operatorType: OperatorType.INSTANCE_MEMBER, + memberName: memberName, + }; + }, + peg$c67 = "#", + peg$c68 = { type: "literal", value: "#", description: "\"#\"" }, + peg$c69 = function(objects) { + return { + operatorType: OperatorType.GENERIC, + objects: objects, + }; + }, + peg$c70 = ".<", + peg$c71 = { type: "literal", value: ".<", description: "\".<\"" }, + peg$c72 = "<", + peg$c73 = { type: "literal", value: "<", description: "\"<\"" }, + peg$c74 = ">", + peg$c75 = { type: "literal", value: ">", description: "\">\"" }, + peg$c76 = function(first, restsWithComma) { + var objects = buildByFirstAndRest(first, restsWithComma, 3); + return objects; + }, + peg$c77 = "[]", + peg$c78 = { type: "literal", value: "[]", description: "\"[]\"" }, + peg$c79 = function() { + return { operatorType: OperatorType.ARRAY }; + }, + peg$c80 = /^[ \t\r\n ]/, + peg$c81 = { type: "class", value: "[ \\t\\r\\n ]", description: "[ \\t\\r\\n ]" }, + + peg$currPos = 0, + peg$reportedPos = 0, + peg$cachedPos = 0, + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }, + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$reportedPos, peg$currPos); + } + + function offset() { + return peg$reportedPos; + } + + function line() { + return peg$computePosDetails(peg$reportedPos).line; + } + + function column() { + return peg$computePosDetails(peg$reportedPos).column; + } + + function expected(description) { + throw peg$buildException( + null, + [{ type: "other", description: description }], + peg$reportedPos + ); + } + + function error(message) { + throw peg$buildException(message, null, peg$reportedPos); + } + + function peg$computePosDetails(pos) { + function advance(details, startPos, endPos) { + var p, ch; + + for (p = startPos; p < endPos; p++) { + ch = input.charAt(p); + if (ch === "\n") { + if (!details.seenCR) { details.line++; } + details.column = 1; + details.seenCR = false; + } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { + details.line++; + details.column = 1; + details.seenCR = true; + } else { + details.column++; + details.seenCR = false; + } + } + } + + if (peg$cachedPos !== pos) { + if (peg$cachedPos > pos) { + peg$cachedPos = 0; + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }; + } + advance(peg$cachedPosDetails, peg$cachedPos, pos); + peg$cachedPos = pos; + } + + return peg$cachedPosDetails; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildException(message, expected, pos) { + function cleanupExpected(expected) { + var i = 1; + + expected.sort(function(a, b) { + if (a.description < b.description) { + return -1; + } else if (a.description > b.description) { + return 1; + } else { + return 0; + } + }); + + while (i < expected.length) { + if (expected[i - 1] === expected[i]) { + expected.splice(i, 1); + } else { + i++; + } + } + } + + function buildMessage(expected, found) { + function stringEscape(s) { + function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } + + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\x08/g, '\\b') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\f/g, '\\f') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); }) + .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); }) + .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); }); + } + + var expectedDescs = new Array(expected.length), + expectedDesc, foundDesc, i; + + for (i = 0; i < expected.length; i++) { + expectedDescs[i] = expected[i].description; + } + + expectedDesc = expected.length > 1 + ? expectedDescs.slice(0, -1).join(", ") + + " or " + + expectedDescs[expected.length - 1] + : expectedDescs[0]; + + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; + + return "Expected " + expectedDesc + " but " + foundDesc + " found."; + } + + var posDetails = peg$computePosDetails(pos), + found = pos < input.length ? input.charAt(pos) : null; + + if (expected !== null) { + cleanupExpected(expected); + } + + return new SyntaxError( + message !== null ? message : buildMessage(expected, found), + expected, + found, + pos, + posDetails.line, + posDetails.column + ); + } + + function peg$parsetypeExpr() { + var s0; + + s0 = peg$parsenotUnknownTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseunknownTypeExpr(); + } + + return s0; + } + + function peg$parsenotUnknownTypeExpr() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parseprefixModifiers(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } else { + peg$currPos = s2; + s2 = peg$c0; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parseprefixModifiers(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsemodifiee(); + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$parsepostfixModifiers(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$parsepostfixModifiers(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } + if (s4 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c2(s1, s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parseprefixModifiers() { + var s0; + + s0 = peg$parsenullableTypeOperator(); + if (s0 === peg$FAILED) { + s0 = peg$parsenotNullableTypeOperator(); + if (s0 === peg$FAILED) { + s0 = peg$parsevariadicTypeOperator(); + if (s0 === peg$FAILED) { + s0 = peg$parseoptionalTypeOperator(); + } + } + } + + return s0; + } + + function peg$parsemodifiee() { + var s0; + + s0 = peg$parsefuncTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parserecordTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseparenthesisTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseanyTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseunknownTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsemoduleNameExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsetypeNameExpr(); + } + } + } + } + } + } + + return s0; + } + + function peg$parsepostfixModifiers() { + var s0; + + s0 = peg$parseoptionalTypeOperator(); + if (s0 === peg$FAILED) { + s0 = peg$parsearrayOfGenericTypeOperatorJsDocFlavored(); + if (s0 === peg$FAILED) { + s0 = peg$parsegenericTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsememberTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseinnerMemberTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseinstanceMemberTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parseunionTypeExpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsenullableTypeOperator(); + if (s0 === peg$FAILED) { + s0 = peg$parsenotNullableTypeOperator(); + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parseparenthesisTypeExpr() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetypeExpr(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s5 = peg$c5; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c6); } + } + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c7(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsetypeNameExpr() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsejsIdentifier(); + if (s2 !== peg$FAILED) { + s2 = input.substring(s1, peg$currPos); + } + s1 = s2; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c8(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsejsIdentifier() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (peg$c9.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c11.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c11.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsemoduleNameExpr() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c13) { + s1 = peg$c13; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c14); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + s6 = peg$parsemoduleNameFilePathPart(); + if (s6 !== peg$FAILED) { + s6 = input.substring(s5, peg$currPos); + } + s5 = s6; + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c17(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsemoduleNameFilePathPart() { + var s0, s1; + + s0 = []; + if (peg$c18.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c18.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + } + } else { + s0 = peg$c0; + } + + return s0; + } + + function peg$parseanyTypeExpr() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 42) { + s1 = peg$c20; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c21); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c22(); + } + s0 = s1; + + return s0; + } + + function peg$parseunknownTypeExpr() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 63) { + s1 = peg$c23; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c24); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c25(); + } + s0 = s1; + + return s0; + } + + function peg$parsefuncTypeExpr() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 8) === peg$c26) { + s1 = peg$c26; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s3 = peg$c3; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s5 = peg$parsefuncTypeExprParamsPart(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s7 = peg$c5; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c6); } + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_(); + if (s8 !== peg$FAILED) { + s9 = peg$currPos; + s10 = peg$parse_(); + if (s10 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s11 = peg$c15; + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse_(); + if (s12 !== peg$FAILED) { + s13 = peg$parsetypeExpr(); + if (s13 !== peg$FAILED) { + s10 = [s10, s11, s12, s13]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$c0; + } + } else { + peg$currPos = s9; + s9 = peg$c0; + } + } else { + peg$currPos = s9; + s9 = peg$c0; + } + } else { + peg$currPos = s9; + s9 = peg$c0; + } + if (s9 === peg$FAILED) { + s9 = peg$c28; + } + if (s9 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c29(s5, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsefuncTypeExprParamsPart() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + s1 = peg$parsefuncTypeExprParam(); + if (s1 === peg$FAILED) { + s1 = peg$c28; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c30; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + s7 = peg$parsefuncTypeExprParam(); + if (s7 !== peg$FAILED) { + s4 = [s4, s5, s6, s7]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c30; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + s7 = peg$parsefuncTypeExprParam(); + if (s7 !== peg$FAILED) { + s4 = [s4, s5, s6, s7]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c32(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsefuncTypeExprParam() { + var s0; + + s0 = peg$parsethisValueTypeModifier(); + if (s0 === peg$FAILED) { + s0 = peg$parsenewTypeModifier(); + if (s0 === peg$FAILED) { + s0 = peg$parsenoModifier(); + } + } + + return s0; + } + + function peg$parsethisValueTypeModifier() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c33) { + s1 = peg$c33; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c34); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s5 = peg$parsetypeExpr(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c35(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsenewTypeModifier() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c36) { + s1 = peg$c36; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s5 = peg$parsetypeExpr(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c38(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsenoModifier() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parsetypeExpr(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c39(s1); + } + s0 = s1; + + return s0; + } + + function peg$parserecordTypeExpr() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c40; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c41); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parserecordEntry(); + if (s3 === peg$FAILED) { + s3 = peg$c28; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s7 = peg$c30; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_(); + if (s8 !== peg$FAILED) { + s9 = peg$parserecordEntry(); + if (s9 !== peg$FAILED) { + s6 = [s6, s7, s8, s9]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s7 = peg$c30; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_(); + if (s8 !== peg$FAILED) { + s9 = peg$parserecordEntry(); + if (s9 !== peg$FAILED) { + s6 = [s6, s7, s8, s9]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } else { + peg$currPos = s5; + s5 = peg$c0; + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c42; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c43); } + } + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c44(s3, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parserecordEntry() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsejsIdentifier(); + if (s2 !== peg$FAILED) { + s2 = input.substring(s1, peg$currPos); + } + s1 = s2; + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parsetypeExpr(); + if (s6 !== peg$FAILED) { + s3 = [s3, s4, s5, s6]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } else { + peg$currPos = s2; + s2 = peg$c0; + } + } else { + peg$currPos = s2; + s2 = peg$c0; + } + if (s2 === peg$FAILED) { + s2 = peg$c28; + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c45(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsenullableTypeOperator() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 63) { + s1 = peg$c23; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c24); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c46(); + } + s0 = s1; + + return s0; + } + + function peg$parsenotNullableTypeOperator() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c47; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c48); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c49(); + } + s0 = s1; + + return s0; + } + + function peg$parseoptionalTypeOperator() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 61) { + s1 = peg$c50; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c52(); + } + s0 = s1; + + return s0; + } + + function peg$parsevariadicTypeOperator() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c53) { + s1 = peg$c53; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c54); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c55(); + } + s0 = s1; + + return s0; + } + + function peg$parseunionTypeExpr() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseunionTypeOperator(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetypeExpr(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c56(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parseunionTypeOperator() { + var s0; + + if (input.charCodeAt(peg$currPos) === 124) { + s0 = peg$c57; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + + return s0; + } + + function peg$parsememberTypeExpr() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsememberTypeOperator(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parsememberName(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c59(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsememberTypeOperator() { + var s0; + + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c60; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c61); } + } + + return s0; + } + + function peg$parsememberName() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsejsIdentifier(); + if (s2 !== peg$FAILED) { + s2 = input.substring(s1, peg$currPos); + } + s1 = s2; + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c62(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseinnerMemberTypeExpr() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseinnerMemberTypeOperator(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parsememberName(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c63(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parseinnerMemberTypeOperator() { + var s0; + + if (input.charCodeAt(peg$currPos) === 126) { + s0 = peg$c64; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + + return s0; + } + + function peg$parseinstanceMemberTypeExpr() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseinstanceMemberTypeOperator(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parsememberName(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c66(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parseinstanceMemberTypeOperator() { + var s0; + + if (input.charCodeAt(peg$currPos) === 35) { + s0 = peg$c67; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c68); } + } + + return s0; + } + + function peg$parsegenericTypeExpr() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parsegenericTypeStartToken(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parsegenericTypeExprObjectivePart(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + s5 = peg$parsegenericTypeEndToken(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c69(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsegenericTypeStartToken() { + var s0; + + s0 = peg$parsegenericTypeEcmaScriptFlavoredStartToken(); + if (s0 === peg$FAILED) { + s0 = peg$parsegenericTypeTypeScriptFlavoredStartToken(); + } + + return s0; + } + + function peg$parsegenericTypeEcmaScriptFlavoredStartToken() { + var s0; + + if (input.substr(peg$currPos, 2) === peg$c70) { + s0 = peg$c70; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + + return s0; + } + + function peg$parsegenericTypeTypeScriptFlavoredStartToken() { + var s0; + + if (input.charCodeAt(peg$currPos) === 60) { + s0 = peg$c72; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + + return s0; + } + + function peg$parsegenericTypeEndToken() { + var s0; + + if (input.charCodeAt(peg$currPos) === 62) { + s0 = peg$c74; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + + return s0; + } + + function peg$parsegenericTypeExprObjectivePart() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + s1 = peg$parsetypeExpr(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c30; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + s7 = peg$parsetypeExpr(); + if (s7 !== peg$FAILED) { + s4 = [s4, s5, s6, s7]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parse_(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c30; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c31); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse_(); + if (s6 !== peg$FAILED) { + s7 = peg$parsetypeExpr(); + if (s7 !== peg$FAILED) { + s4 = [s4, s5, s6, s7]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } else { + peg$currPos = s3; + s3 = peg$c0; + } + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c76(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c0; + } + } else { + peg$currPos = s0; + s0 = peg$c0; + } + + return s0; + } + + function peg$parsearrayOfGenericTypeOperatorJsDocFlavored() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c77) { + s1 = peg$c77; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c78); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c79(); + } + s0 = s1; + + return s0; + } + + function peg$parse_() { + var s0, s1; + + s0 = []; + if (peg$c80.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c80.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + } + + return s0; + } + + + var lodash = require('lodash'); + var NodeType = require('../lib/NodeType.js'); + + var OperatorType = { + UNION: 0, + MEMBER: 1, + GENERIC: 2, + ARRAY: 3, + OPTIONAL: 4, + NULLABLE: 5, + NOT_NULLABLE: 6, + VARIADIC: 7, + INNER_MEMBER: 8, + INSTANCE_MEMBER: 9, + }; + + var FunctionModifierType = { + NONE: 0, + CONTEXT: 1, + NEW: 2, + }; + + function reverse(array) { + var reversed = [].concat(array); + reversed.reverse(); + return reversed; + } + + function buildByFirstAndRest(first, restsWithComma, restIndex) { + if (!first) return []; + + var rests = restsWithComma ? lodash.pluck(restsWithComma, restIndex) : []; + return [first].concat(rests); + } + + function reportSemanticIssue(msg) { + console.warn(msg); + } + + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail({ type: "end", description: "end of input" }); + } + + throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); + } + } + + return { + SyntaxError: SyntaxError, + parse: parse + }; +})(); \ No newline at end of file diff --git a/node_modules/jsdoctypeparser/peg_src/jsdoctype.pegjs b/node_modules/jsdoctypeparser/peg_src/jsdoctype.pegjs new file mode 100644 index 000000000..7992f977c --- /dev/null +++ b/node_modules/jsdoctypeparser/peg_src/jsdoctype.pegjs @@ -0,0 +1,525 @@ +{ + var lodash = require('lodash'); + var NodeType = require('../lib/NodeType.js'); + + var OperatorType = { + UNION: 0, + MEMBER: 1, + GENERIC: 2, + ARRAY: 3, + OPTIONAL: 4, + NULLABLE: 5, + NOT_NULLABLE: 6, + VARIADIC: 7, + INNER_MEMBER: 8, + INSTANCE_MEMBER: 9, + }; + + var FunctionModifierType = { + NONE: 0, + CONTEXT: 1, + NEW: 2, + }; + + function reverse(array) { + var reversed = [].concat(array); + reversed.reverse(); + return reversed; + } + + function buildByFirstAndRest(first, restsWithComma, restIndex) { + if (!first) return []; + + var rests = restsWithComma ? lodash.pluck(restsWithComma, restIndex) : []; + return [first].concat(rests); + } + + function reportSemanticIssue(msg) { + console.warn(msg); + } +} + + +// "?" is a ambiguous token. It has 2 meanings. The first meaning is a prefix +// nullable operator. Another meaning is an unknown type keyword. +// If "typeExpr" is equivalent to "notUnknownTypeExpr" and then "?" arrived, +// parsing "prefixModifiers" become successful, but it make a parsing failure +// because parsing "modifiee" is failed. +// +// So, the parser try to parse the assamption that it is a prefix nullable +// operator, if the try is failed the parser try to parse under the assamption +// that it is an unknown type keyword. +typeExpr = notUnknownTypeExpr / unknownTypeExpr + +notUnknownTypeExpr = prefixModifiersWithWhiteSpaces:(prefixModifiers _)* + modifieeWithWhiteSpaces:modifiee _ + postfixModifiersWithWhiteSpaces:(postfixModifiers _)* { + var prefixModifiers = lodash.pluck(prefixModifiersWithWhiteSpaces, 0); + var modifiee = modifieeWithWhiteSpaces; + var postfixModifiers = lodash.pluck(postfixModifiersWithWhiteSpaces, 0); + + var modifiersOrderedByPriority = postfixModifiers.concat(reverse(prefixModifiers)); + var rootNode = modifiersOrderedByPriority.reduce(function(prevNode, operator) { + switch (operator.operatorType) { + case OperatorType.UNION: + var unionOperator = operator; + return { + type: NodeType.UNION, + left: prevNode, + right: unionOperator.right, + }; + case OperatorType.MEMBER: + var memberOperator = operator; + return { + type: NodeType.MEMBER, + owner: prevNode, + name: memberOperator.memberName, + }; + case OperatorType.INNER_MEMBER: + var memberOperator = operator; + return { + type: NodeType.INNER_MEMBER, + owner: prevNode, + name: memberOperator.memberName, + }; + case OperatorType.INSTANCE_MEMBER: + var memberOperator = operator; + return { + type: NodeType.INSTANCE_MEMBER, + owner: prevNode, + name: memberOperator.memberName, + }; + case OperatorType.GENERIC: + var genericOperator = operator; + return { + type: NodeType.GENERIC, + subject: prevNode, + objects: genericOperator.objects, + } + case OperatorType.ARRAY: + var arrayOperator = operator; + return { + type: NodeType.GENERIC, + subject: { + type: NodeType.NAME, + name: 'Array' + }, + objects: [ prevNode ], + }; + case OperatorType.OPTIONAL: + return { + type: NodeType.OPTIONAL, + value: prevNode, + }; + case OperatorType.NULLABLE: + return { + type: NodeType.NULLABLE, + value: prevNode, + }; + case OperatorType.NOT_NULLABLE: + return { + type: NodeType.NOT_NULLABLE, + value: prevNode, + }; + case OperatorType.VARIADIC: + return { + type: NodeType.VARIADIC, + value: prevNode, + }; + default: + throw Error('Unexpected token: ' + token); + } + }, modifiee); + + + return rootNode; + } + +prefixModifiers = + nullableTypeOperator + / notNullableTypeOperator + / variadicTypeOperator + / deprecatedOptionalTypeOperator + +modifiee = + funcTypeExpr + / recordTypeExpr + / parenthesisTypeExpr + / anyTypeExpr + / unknownTypeExpr + / moduleNameExpr + / typeNameExpr + +postfixModifiers = + optionalTypeOperator + / arrayOfGenericTypeOperatorJsDocFlavored + / genericTypeExpr + / memberTypeExpr + / innerMemberTypeExpr + / instanceMemberTypeExpr + / unionTypeExpr + / deprecatedNullableTypeOperator + / deprecatedNotNullableTypeOperator + + +/* + * Parenthesis expressions. + * + * Examples: + * - (Foo|Bar) + * - (module: path/to/file).Module + */ +parenthesisTypeExpr = "(" _ wrapped:typeExpr _ ")" { + return wrapped; + } + + +/* + * Type name expressions. + * + * Examples: + * - string + * - null + * - Error + * - $ + * - _ + */ +typeNameExpr = name:$(jsIdentifier) { + return { + type: NodeType.NAME, + name: name + }; + } +jsIdentifier = [a-zA-Z_$][a-zA-Z0-9_$]* + + +/* + * Module name expressions. + * + * Examples: + * - module:path/to/file + * - module:path/to/file.js + */ +moduleNameExpr = "module" _ ":" _ filePath:$(moduleNameFilePathPart) { + return { + type: NodeType.MODULE, + path: filePath + }; + } + +moduleNameFilePathPart = [a-zA-Z_0-9_$./-]+ + + +/* + * Any type expressions. + * + * Examples: + * - * + */ +anyTypeExpr = "*" { + return { type: NodeType.ANY }; + } + + +/* + * Unknown type expressions. + * + * Examples: + * - ? + */ +unknownTypeExpr = "?" { + return { type: NodeType.UNKNOWN }; + } + + +/* + * Function type expressions. + * + * Examples: + * - function(string) + * - function(string, ...string) + * - function():number + * - function(this:jQuery):jQuery + * - function(new:Error) + */ +funcTypeExpr = "function" _ "(" _ paramParts:funcTypeExprParamsPart _ ")" _ + returnedTypePart:(_ ":" _ typeExpr)? { + var modifierGroups = lodash.groupBy(paramParts, lodash.property('modifierType')); + + var params = []; + var noModifiers = modifierGroups[FunctionModifierType.NONE]; + if (noModifiers) { + params = noModifiers.map(function(paramPartWithNoModifier) { + return paramPartWithNoModifier.value; + }); + } + + + var thisValue = null; + var thisValueModifiers = modifierGroups[FunctionModifierType.THIS]; + if (thisValueModifiers) { + if (thisValueModifiers.length > 1) { + reportSemanticIssue('"this" keyword should be declared only once'); + } + + // Enable the only first thisValue modifier. + thisValue = thisValueModifiers[0].value; + } + + + var newValue = null; + var newModifiers = modifierGroups[FunctionModifierType.NEW]; + if (newModifiers) { + if (newModifiers.length > 1) { + reportSemanticIssue('"new" keyword should be declared only once'); + } + + // Enable the only first new instance modifier. + newValue = newModifiers[0].value; + } + + var returnedTypeNode = returnedTypePart ? returnedTypePart[3] : null; + + return { + type: NodeType.FUNCTION, + params: params, + returns: returnedTypeNode, + thisValue: thisValue, + newValue: newValue, + }; + } + +funcTypeExprParamsPart = firstParam:funcTypeExprParam? restParamsWithComma:(_ "," _ funcTypeExprParam)* { + var params = buildByFirstAndRest(firstParam, restParamsWithComma, 3); + return params; + } + +funcTypeExprParam = thisValueTypeModifier / newTypeModifier / noModifier + +thisValueTypeModifier = "this" _ ":" _ value:typeExpr { + return { + modifierType: FunctionModifierType.THIS, + value: value + }; + } + +newTypeModifier = "new" _ ":" _ value:typeExpr { + return { + modifierType: FunctionModifierType.NEW, + value: value + }; + } + +noModifier = value:typeExpr { + return { + modifierType: FunctionModifierType.NONE, + value: value + }; + } + + +/* + * Record type expressions. + * + * Examples: + * - {} + * - {length} + * - {length:number} + * - {toString:Function,valueOf:Function} + */ +recordTypeExpr = "{" _ firstEntry:recordEntry? restEntriesWithComma:(_ "," _ recordEntry)* _ "}" { + var entries = buildByFirstAndRest(firstEntry, restEntriesWithComma, 3); + + return { + type: NodeType.RECORD, + entries: entries + }; + } + +recordEntry = key:$(jsIdentifier) valueWithColon:(_ ":" _ typeExpr)? { + var hasValue = Boolean(valueWithColon); + var value = hasValue ? valueWithColon[3] : null; + + return { + type: NodeType.RECORD_ENTRY, + key: key, + value: value, + hasValue: hasValue, + }; + } + + +/* + * Nullable type expressions. + * + * Examples: + * - ?string + * - string? (deprecated) + */ +nullableTypeOperator = "?" { + return { operatorType: OperatorType.NULLABLE }; + } + +deprecatedNullableTypeOperator = nullableTypeOperator + + +/* + * Nullable type expressions. + * + * Examples: + * - !Object + * - Object! (deprecated) + */ +notNullableTypeOperator = "!" { + return { operatorType: OperatorType.NOT_NULLABLE }; + } + +deprecatedNotNullableTypeOperator = notNullableTypeOperator + + +/* + * Optional type expressions. + * + * Examples: + * - string= + * - =string (deprecated) + */ +optionalTypeOperator = "=" { + return { operatorType: OperatorType.OPTIONAL }; + } + +deprecatedOptionalTypeOperator = optionalTypeOperator + + +/* + * Variadic type expressions. + * + * Examples: + * - ...string + */ +variadicTypeOperator = "..." { + return { operatorType: OperatorType.VARIADIC }; + } + + +/* + * Union type expressions. + * + * Examples: + * - number|undefined + * - Foo|Bar|Baz + */ +unionTypeExpr = unionTypeOperator _ right:typeExpr { + return { + operatorType: OperatorType.UNION, + right: right, + }; + } + +unionTypeOperator = "|" + + +/* + * Member type expressions. + * + * Examples: + * - owner.member + * - superOwner.owner.member + */ +memberTypeExpr = memberTypeOperator _ memberName:memberName { + return { + operatorType: OperatorType.MEMBER, + memberName: memberName, + }; + } + +memberTypeOperator = "." + +memberName = name:$(jsIdentifier) { + return name; + } + + +/* + * Inner member type expressions. + * + * Examples: + * - owner~innerMember + * - superOwner~owner~innerMember + */ +innerMemberTypeExpr = innerMemberTypeOperator _ memberName:memberName { + return { + operatorType: OperatorType.INNER_MEMBER, + memberName: memberName, + }; + } + +innerMemberTypeOperator = "~" + + +/* + * Instance member type expressions. + * + * Examples: + * - owner#instanceMember + * - superOwner#owner#instanceMember + */ +instanceMemberTypeExpr = instanceMemberTypeOperator _ memberName:memberName { + return { + operatorType: OperatorType.INSTANCE_MEMBER, + memberName: memberName, + }; + } + +instanceMemberTypeOperator = "#" + + +/* + * Generic type expressions. + * + * Examples: + * - Function + * - Array. + */ +genericTypeExpr = + genericTypeStartToken _ + objects:genericTypeExprObjectivePart _ + genericTypeEndToken { + return { + operatorType: OperatorType.GENERIC, + objects: objects, + }; + } + +genericTypeStartToken = + genericTypeEcmaScriptFlavoredStartToken / + genericTypeTypeScriptFlavoredStartToken + +genericTypeEcmaScriptFlavoredStartToken = ".<" + +genericTypeTypeScriptFlavoredStartToken = "<" + +genericTypeEndToken = ">" + +genericTypeExprObjectivePart = first:typeExpr restsWithComma:(_ "," _ typeExpr)* { + var objects = buildByFirstAndRest(first, restsWithComma, 3); + return objects; + } + + +/* + * JSDoc style array of a generic type expressions. + * + * Examples: + * - string[] + * - number[][] + */ +arrayOfGenericTypeOperatorJsDocFlavored = "[]" { + return { operatorType: OperatorType.ARRAY }; + } + + +/* + * White spaces. + */ +_ = [ \t\r\n ]* diff --git a/node_modules/jsdoctypeparser/test/.eslintrc b/node_modules/jsdoctypeparser/test/.eslintrc new file mode 100644 index 000000000..7eeefc33b --- /dev/null +++ b/node_modules/jsdoctypeparser/test/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "mocha": true + } +} diff --git a/node_modules/jsdoctypeparser/test/test_Parser.js b/node_modules/jsdoctypeparser/test/test_Parser.js new file mode 100644 index 000000000..a6d09511b --- /dev/null +++ b/node_modules/jsdoctypeparser/test/test_Parser.js @@ -0,0 +1,904 @@ +'use strict'; + +var chai = require('chai'); +var expect = chai.expect; + +var NodeType = require('../lib/NodeType.js'); +var Parser = require('../lib/Parser.js'); + + +describe('Parser', function() { + it('should return a type name node when "TypeName" arrived', function() { + var typeExprStr = 'TypeName'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createTypeNameNode(typeExprStr); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a type name node when "$" arrived', function() { + var typeExprStr = '$'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createTypeNameNode(typeExprStr); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a type name node when "_" arrived', function() { + var typeExprStr = '_'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createTypeNameNode(typeExprStr); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an any type node when "*" arrived', function() { + var typeExprStr = '*'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createAnyTypeNode(); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an unknown type node when "?" arrived', function() { + var typeExprStr = '?'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createUnknownTypeNode(); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a module name node when "module:path/to/file.js" arrived', function() { + var typeExprStr = 'module:path/to/file.js'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createModuleNameNode('path/to/file.js'); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a module name node when "module : path/to/file.js" arrived', function() { + var typeExprStr = 'module : path/to/file.js'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createModuleNameNode('path/to/file.js'); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a member node when "(module:path/to/file.js).member" arrived', function() { + var typeExprStr = '(module:path/to/file.js).member'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createMemberTypeNode( + createModuleNameNode('path/to/file.js'), + 'member' + ); + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a member type node when "owner.Member" arrived', function() { + var typeExprStr = 'owner.Member'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createMemberTypeNode( + createTypeNameNode('owner'), + 'Member'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a member type node when "owner . Member" arrived', function() { + var typeExprStr = 'owner . Member'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createMemberTypeNode( + createTypeNameNode('owner'), + 'Member'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a member type node when "superOwner.owner.Member" arrived', function() { + var typeExprStr = 'superOwner.owner.Member'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createMemberTypeNode( + createMemberTypeNode( + createTypeNameNode('superOwner'), 'owner'), + 'Member'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a member type node when "superOwner.owner.Member=" arrived', function() { + var typeExprStr = 'superOwner.owner.Member='; + var node = Parser.parse(typeExprStr); + + var expectedNode = createOptionalTypeNode( + createMemberTypeNode( + createMemberTypeNode( + createTypeNameNode('superOwner'), + 'owner'), + 'Member') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an inner member type node when "owner~innerMember" arrived', function() { + var typeExprStr = 'owner~innerMember'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createInnerMemberTypeNode( + createTypeNameNode('owner'), + 'innerMember'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an inner member type node when "owner ~ innerMember" arrived', function() { + var typeExprStr = 'owner ~ innerMember'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createInnerMemberTypeNode( + createTypeNameNode('owner'), + 'innerMember'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an inner member type node when "superOwner~owner~innerMember" ' + + 'arrived', function() { + var typeExprStr = 'superOwner~owner~innerMember'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createInnerMemberTypeNode( + createInnerMemberTypeNode( + createTypeNameNode('superOwner'), 'owner'), + 'innerMember'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an inner member type node when "superOwner~owner~innerMember=" ' + + 'arrived', function() { + var typeExprStr = 'superOwner~owner~innerMember='; + var node = Parser.parse(typeExprStr); + + var expectedNode = createOptionalTypeNode( + createInnerMemberTypeNode( + createInnerMemberTypeNode( + createTypeNameNode('superOwner'), + 'owner'), + 'innerMember') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an instance member type node when "owner#instanceMember" arrived', function() { + var typeExprStr = 'owner#instanceMember'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createInstanceMemberTypeNode( + createTypeNameNode('owner'), + 'instanceMember'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an instance member type node when "owner # instanceMember" ' + + 'arrived', function() { + var typeExprStr = 'owner # instanceMember'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createInstanceMemberTypeNode( + createTypeNameNode('owner'), + 'instanceMember'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an instance member type node when "superOwner#owner#instanceMember" ' + + 'arrived', function() { + var typeExprStr = 'superOwner#owner#instanceMember'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createInstanceMemberTypeNode( + createInstanceMemberTypeNode( + createTypeNameNode('superOwner'), 'owner'), + 'instanceMember'); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an instance member type node when "superOwner#owner#instanceMember=" ' + + 'arrived', function() { + var typeExprStr = 'superOwner#owner#instanceMember='; + var node = Parser.parse(typeExprStr); + + var expectedNode = createOptionalTypeNode( + createInstanceMemberTypeNode( + createInstanceMemberTypeNode( + createTypeNameNode('superOwner'), + 'owner'), + 'instanceMember') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an union type when "LeftType|RightType" arrived', function() { + var typeExprStr = 'LeftType|RightType'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createUnionTypeNode( + createTypeNameNode('LeftType'), + createTypeNameNode('RightType') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an union type when "LeftType|MiddleType|RightType" arrived', function() { + var typeExprStr = 'LeftType|MiddleType|RightType'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createUnionTypeNode( + createTypeNameNode('LeftType'), + createUnionTypeNode( + createTypeNameNode('MiddleType'), + createTypeNameNode('RightType') + )); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an union type when "(LeftType|RightType)" arrived', function() { + var typeExprStr = '(LeftType|RightType)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createUnionTypeNode( + createTypeNameNode('LeftType'), + createTypeNameNode('RightType') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an union type when "( LeftType | RightType )" arrived', function() { + var typeExprStr = '( LeftType | RightType )'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createUnionTypeNode( + createTypeNameNode('LeftType'), + createTypeNameNode('RightType') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a variadic type node when "...variadicType" arrived', function() { + var typeExprStr = '...variadicType'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createVariadicTypeNode( + createTypeNameNode('variadicType')); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a record type node when "{}" arrived', function() { + var typeExprStr = '{}'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createRecordTypeNode([]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a record type node when "{key:ValueType}" arrived', function() { + var typeExprStr = '{key:ValueType}'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createRecordTypeNode([ + createRecordEntryNode('key', createTypeNameNode('ValueType')), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a record type node when "{keyOnly}" arrived', function() { + var typeExprStr = '{keyOnly}'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createRecordTypeNode([ + createRecordEntryNode('keyOnly', null), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a record type node when "{key1:ValueType1,key2:ValueType2}"' + + ' arrived', function() { + var typeExprStr = '{key1:ValueType1,key2:ValueType2}'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createRecordTypeNode([ + createRecordEntryNode('key1', createTypeNameNode('ValueType1')), + createRecordEntryNode('key2', createTypeNameNode('ValueType2')), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a record type node when "{key:ValueType1,keyOnly}"' + + ' arrived', function() { + var typeExprStr = '{key:ValueType1,keyOnly}'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createRecordTypeNode([ + createRecordEntryNode('key', createTypeNameNode('ValueType1')), + createRecordEntryNode('keyOnly', null), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a record type node when "{ key1 : ValueType1 , key2 : ValueType2 }"' + + ' arrived', function() { + var typeExprStr = '{ key1 : ValueType1 , key2 : ValueType2 }'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createRecordTypeNode([ + createRecordEntryNode('key1', createTypeNameNode('ValueType1')), + createRecordEntryNode('key2', createTypeNameNode('ValueType2')), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic" arrived', function() { + var typeExprStr = 'Generic'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createTypeNameNode('ParamType'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic>" arrived', function() { + var typeExprStr = 'Generic>'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createGenericTypeNode( + createTypeNameNode('Inner'), [ createTypeNameNode('ParamType') ] + ), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic"' + + ' arrived', function() { + var typeExprStr = 'Generic'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createTypeNameNode('ParamType1'), + createTypeNameNode('ParamType2'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic < ParamType1 , ParamType2 >"' + + ' arrived', function() { + var typeExprStr = 'Generic < ParamType1, ParamType2 >'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createTypeNameNode('ParamType1'), + createTypeNameNode('ParamType2'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic." arrived', function() { + var typeExprStr = 'Generic.'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createTypeNameNode('ParamType'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic."' + + ' arrived', function() { + var typeExprStr = 'Generic.'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createTypeNameNode('ParamType1'), + createTypeNameNode('ParamType2'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "Generic .< ParamType1 , ParamType2 >"' + + ' arrived', function() { + var typeExprStr = 'Generic .< ParamType1 , ParamType2 >'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Generic'), [ + createTypeNameNode('ParamType1'), + createTypeNameNode('ParamType2'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "ParamType[]" arrived', function() { + var typeExprStr = 'ParamType[]'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Array'), [ + createTypeNameNode('ParamType'), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a generic type node when "ParamType[][]" arrived', function() { + var typeExprStr = 'ParamType[][]'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createGenericTypeNode( + createTypeNameNode('Array'), [ + createGenericTypeNode( + createTypeNameNode('Array'), [ + createTypeNameNode('ParamType'), + ]), + ]); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an optional type node when "string=" arrived', function() { + var typeExprStr = 'string='; + var node = Parser.parse(typeExprStr); + + var expectedNode = createOptionalTypeNode( + createTypeNameNode('string') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an optional type node when "=string" arrived (deprecated)', function() { + var typeExprStr = '=string'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createOptionalTypeNode( + createTypeNameNode('string') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a nullable type node when "?string" arrived', function() { + var typeExprStr = '?string'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createNullableTypeNode( + createTypeNameNode('string') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a nullable type node when "string?" arrived (deprecated)', function() { + var typeExprStr = 'string?'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createNullableTypeNode( + createTypeNameNode('string') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return an optional type node when "?string=" arrived', function() { + var typeExprStr = '?string='; + var node = Parser.parse(typeExprStr); + + var expectedNode = createNullableTypeNode( + createOptionalTypeNode(createTypeNameNode('string')) + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a variadic type node when "...!Object" arrived', function() { + var typeExprStr = '...!Object'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createVariadicTypeNode( + createNotNullableTypeNode(createTypeNameNode('Object')) + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a not nullable type node when "!Object" arrived', function() { + var typeExprStr = '!Object'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createNotNullableTypeNode( + createTypeNameNode('Object') + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node when "function()" arrived', function() { + var typeExprStr = 'function()'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [], null, + { thisValue: null, newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node with a param when "function(Param)" arrived', function() { + var typeExprStr = 'function(Param)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [ createTypeNameNode('Param') ], null, + { thisValue: null, newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node with several params when "function(Param1,Param2)"' + + ' arrived', function() { + var typeExprStr = 'function(Param1,Param2)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [ createTypeNameNode('Param1'), createTypeNameNode('Param2') ], null, + { thisValue: null, newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node with returns when "function():Returned"' + + ' arrived', function() { + var typeExprStr = 'function():Returned'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [], createTypeNameNode('Returned'), + { thisValue: null, newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node with a context type when "function(this:ThisObject)"' + + ' arrived', function() { + var typeExprStr = 'function(this:ThisObject)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [], null, + { thisValue: createTypeNameNode('ThisObject'), newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node with a context type when ' + + '"function(this:ThisObject, param1)" arrived', function() { + var typeExprStr = 'function(this:ThisObject, param1)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [createTypeNameNode('param1')], + null, + { thisValue: createTypeNameNode('ThisObject'), newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node as a constructor when "function(new:NewObject)"' + + ' arrived', function() { + var typeExprStr = 'function(new:NewObject)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [], null, + { thisValue: null, newValue: createTypeNameNode('NewObject') } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node as a constructor when ' + + '"function(new:NewObject, param1)" arrived', function() { + var typeExprStr = 'function(new:NewObject, param1)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [createTypeNameNode('param1')], + null, + { thisValue: null, newValue: createTypeNameNode('NewObject') } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node as a constructor when ' + + '"function(new:NewObject, this:ThisObject, param1)" arrived', function() { + var typeExprStr = 'function(new:NewObject, this:ThisObject, param1)'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [ createTypeNameNode('param1') ], null, + { + thisValue: createTypeNameNode('ThisObject'), + newValue: createTypeNameNode('NewObject'), + } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should return a function type node when "function( Param1 , Param2 ) : Returned"' + + ' arrived', function() { + var typeExprStr = 'function( Param1 , Param2 ) : Returned'; + var node = Parser.parse(typeExprStr); + + var expectedNode = createFunctionTypeNode( + [ createTypeNameNode('Param1'), createTypeNameNode('Param2') ], + createTypeNameNode('Returned'), + { thisValue: null, newValue: null } + ); + + expect(node).to.deep.equal(expectedNode); + }); + + + it('should throw a syntax error when "" arrived', function() { + var typeExprStr = ''; + + expect(function() { + Parser.parse(typeExprStr); + }).to.throw(Parser.SyntaxError); + }); + + + it('should throw a syntax error when "Invalid type" arrived', function() { + var typeExprStr = 'Invalid type'; + + expect(function() { + Parser.parse(typeExprStr); + }).to.throw(Parser.SyntaxError); + }); + + + it('should throw a syntax error when "Promise*Error" arrived', function() { + var typeExprStr = 'Promise*Error'; + + expect(function() { + Parser.parse(typeExprStr); + }).to.throw(Parser.SyntaxError); + }); + + + it('should throw a syntax error when "(unclosedParenthesis, " arrived', function() { + var typeExprStr = '(unclosedParenthesis, '; + + expect(function() { + Parser.parse(typeExprStr); + }).to.throw(Parser.SyntaxError); + }); +}); + + +function createTypeNameNode(typeName) { + return { + type: NodeType.NAME, + name: typeName, + }; +} + +function createAnyTypeNode() { + return { + type: NodeType.ANY, + }; +} + +function createUnknownTypeNode() { + return { + type: NodeType.UNKNOWN, + }; +} + +function createModuleNameNode(moduleName) { + return { + type: NodeType.MODULE, + path: moduleName, + }; +} + +function createOptionalTypeNode(optionalTypeExpr) { + return { + type: NodeType.OPTIONAL, + value: optionalTypeExpr, + }; +} + +function createNullableTypeNode(nullableTypeExpr) { + return { + type: NodeType.NULLABLE, + value: nullableTypeExpr, + }; +} + +function createNotNullableTypeNode(nullableTypeExpr) { + return { + type: NodeType.NOT_NULLABLE, + value: nullableTypeExpr, + }; +} + +function createMemberTypeNode(ownerTypeExpr, memberTypeName) { + return { + type: NodeType.MEMBER, + owner: ownerTypeExpr, + name: memberTypeName, + }; +} + +function createInnerMemberTypeNode(ownerTypeExpr, memberTypeName) { + return { + type: NodeType.INNER_MEMBER, + owner: ownerTypeExpr, + name: memberTypeName, + }; +} + +function createInstanceMemberTypeNode(ownerTypeExpr, memberTypeName) { + return { + type: NodeType.INSTANCE_MEMBER, + owner: ownerTypeExpr, + name: memberTypeName, + }; +} + +function createUnionTypeNode(leftTypeExpr, rightTypeExpr) { + return { + type: NodeType.UNION, + left: leftTypeExpr, + right: rightTypeExpr, + }; +} + +function createVariadicTypeNode(variadicTypeExpr) { + return { + type: NodeType.VARIADIC, + value: variadicTypeExpr, + }; +} + +function createRecordTypeNode(recordEntries) { + return { + type: NodeType.RECORD, + entries: recordEntries, + }; +} + +function createRecordEntryNode(key, valueTypeExpr) { + return { + type: NodeType.RECORD_ENTRY, + key: key, + value: valueTypeExpr, + hasValue: Boolean(valueTypeExpr), + }; +} + +function createGenericTypeNode(genericTypeName, paramExprs) { + return { + type: NodeType.GENERIC, + subject: genericTypeName, + objects: paramExprs, + }; +} + +function createFunctionTypeNode(paramNodes, returnedNode, modifierMap) { + return { + type: NodeType.FUNCTION, + params: paramNodes, + returns: returnedNode, + thisValue: modifierMap.thisValue, + newValue: modifierMap.newValue, + }; +} diff --git a/node_modules/jsdoctypeparser/test/test_TransformForLegacy.js b/node_modules/jsdoctypeparser/test/test_TransformForLegacy.js new file mode 100644 index 000000000..065ad534e --- /dev/null +++ b/node_modules/jsdoctypeparser/test/test_TransformForLegacy.js @@ -0,0 +1,110 @@ +'use strict'; + +var chai = require('chai'); +var expect = chai.expect; + +var Parser = require('../lib/Parser.js'); +var Legacy = require('../lib/legacy/index.js'); +var transform = require('../lib/TransformForLegacy.js'); + + +var VALID_SYNTAX_SETS = [ + 'TypeName', + 'undefined', + 'null', + 'void', + '$', + '_', + '*', + '?', + 'unknown', + 'Unknown', + 'module:path/to/file.js', + 'owner.Member', + 'owner . Member', + 'superOwner.owner.Member', + 'LeftType|RightType', + 'LeftType|MiddleType|RightType', + '(LeftType|RightType)', + '( LeftType | RightType )', + '...variadicType', + '{}', + '{key:ValueType}', + '{keyOnly}', + '{key1:ValueType1,key2:ValueType2}', + '{key:ValueType,keyOnly}', + '{ key1 : ValueType1 , key2 : ValueType2 }', + 'Generic', + 'Generic>', + 'Generic', + 'Generic < ParamType1, ParamType2 >', + 'Generic.', + 'Generic.', + 'Generic .< ParamType1 , ParamType2 >', + 'ParamType[]', + 'string=', + 'Object|undefined', + 'Object|void', + '?string', + 'string|null', + '?string=', + '...!Object', + '!Object', + 'Object|unknown', + 'Object|Unknown', + 'function()', + 'function(Param)', + 'function(Param1,Param2)', + 'function():Returned', + 'function(this:ThisObject)', + 'function(new:NewObject)', + 'function( Param1 , Param2 ) : Returned', +]; + + +describe('TransformForLegacy', function() { + VALID_SYNTAX_SETS.forEach(function(validTypeExpr) { + it('should return a result is equivalent to the old parser when "' + + validTypeExpr + '" arrived', function() { + + var origin = parse(validTypeExpr); + var legacy = legacyParse(validTypeExpr); + + setDebugInfo(this.test, origin, legacy); + + var convertedLegacy = transform(origin); + + expect(convertedLegacy).to.deep.equal(legacy); + }); + }); + + + afterEach(function() { + if (this.currentTest.state === 'passed') return; + console.log('ORIGIN:'); + console.log(this.currentTest.debugInfo.origin); + console.log('LEGACY:'); + console.log(this.currentTest.debugInfo.legacy); + }); +}); + + +function setDebugInfo(test, origin, legacy) { + test.debugInfo = { + origin: origin, + legacy: legacy, + }; +} + + +function parse(typeExprStr) { + return Parser.parse(typeExprStr); +} + + +function legacyParse(typeExprStr) { + var legacyParser = new Legacy.Parser(); + var legacyResult = legacyParser.parse(typeExprStr); + + return legacyResult; +} diff --git a/node_modules/jsdoctypeparser/test/test_publishingTest.js b/node_modules/jsdoctypeparser/test/test_publishingTest.js new file mode 100644 index 000000000..cb89b508d --- /dev/null +++ b/node_modules/jsdoctypeparser/test/test_publishingTest.js @@ -0,0 +1,1100 @@ +// This script licensed under the MIT. +// http://orgachem.mit-license.org +'use strict'; + + +var Parser = require('../lib/index.js').Parser; +var Lexer = require('../lib/index.js').Lexer; +var expect = require('chai').expect; + + +describe('Parser', function() { + it('Build a primitive type name', function() { + var parser = new Parser(); + var union = parser.parse('boolean'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('boolean'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('boolean'); + expect(union.toHtml()).to.equal('boolean'); + }); + + + it('Build a global type name', function() { + var parser = new Parser(); + var union = parser.parse('Window'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('Window'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('Window'); + expect(union.toHtml()).to.equal('Window'); + }); + + + it('Build an user-defined type name', function() { + var parser = new Parser(); + var union = parser.parse('goog.ui.Menu'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('goog.ui.Menu'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('goog.ui.Menu'); + expect(union.toHtml()).to.equal('goog.ui.Menu'); + }); + + + it('Build a generic type has a parameter', function() { + var parser = new Parser(); + var union = parser.parse('Array.'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var generic = union.types[0]; + expect(generic.genericTypeName.name).to.equal('Array'); + expect(generic.parameterTypeUnions.length).to.equal(1); + + var paramUnion = generic.parameterTypeUnions[0]; + expect(paramUnion.types.length).to.equal(1); + expect(paramUnion.types[0].name).to.equal('string'); + expect(paramUnion.optional).to.equal(false); + expect(paramUnion.nullable).to.equal(false); + expect(paramUnion.nonNullable).to.equal(false); + expect(paramUnion.variable).to.equal(false); + expect(paramUnion.all).to.equal(false); + expect(paramUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('Array.'); + expect(union.toHtml()).to.equal('Array.<string>'); + }); + + + it('Build a generic type has 2 parameters', function() { + var parser = new Parser(); + var union = parser.parse('Object.'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var generic = union.types[0]; + expect(generic.genericTypeName.name).to.equal('Object'); + expect(generic.parameterTypeUnions.length).to.equal(2); + + var paramUnion1 = generic.parameterTypeUnions[0]; + expect(paramUnion1.types.length).to.equal(1); + expect(paramUnion1.types[0].name).to.equal('string'); + expect(paramUnion1.optional).to.equal(false); + expect(paramUnion1.nullable).to.equal(false); + expect(paramUnion1.nonNullable).to.equal(false); + expect(paramUnion1.variable).to.equal(false); + expect(paramUnion1.all).to.equal(false); + expect(paramUnion1.unknown).to.equal(false); + + var paramUnion2 = generic.parameterTypeUnions[1]; + expect(paramUnion2.types.length).to.equal(1); + expect(paramUnion2.types[0].name).to.equal('number'); + expect(paramUnion2.optional).to.equal(false); + expect(paramUnion2.nullable).to.equal(false); + expect(paramUnion2.nonNullable).to.equal(false); + expect(paramUnion2.variable).to.equal(false); + expect(paramUnion2.all).to.equal(false); + expect(paramUnion2.unknown).to.equal(false); + + expect(union.toString()).to.equal('Object.'); + expect(union.toHtml()).to.equal('Object.<string' + + ', number>'); + }); + + + it('Build a JsDoc-formal generic type', function() { + var parser = new Parser(); + var union = parser.parse('String[]'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var generic = union.types[0]; + expect(generic.genericTypeName.name).to.equal('Array'); + expect(generic.parameterTypeUnions.length).to.equal(1); + + var paramUnion = generic.parameterTypeUnions[0]; + expect(paramUnion.types.length).to.equal(1); + expect(paramUnion.types[0].name).to.equal('String'); + expect(paramUnion.optional).to.equal(false); + expect(paramUnion.nullable).to.equal(false); + expect(paramUnion.nonNullable).to.equal(false); + expect(paramUnion.variable).to.equal(false); + expect(paramUnion.all).to.equal(false); + expect(paramUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('Array.'); + expect(union.toHtml()).to.equal('Array.<String>'); + }); + + + it('Build a formal type union', function() { + var parser = new Parser(); + var union = parser.parse('(number|boolean)'); + + expect(union.types.length).to.equal(2); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.types[0].name).to.equal('number'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.types[1].name).to.equal('boolean'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('number|boolean'); + expect(union.toHtml()).to.equal('number|boolean'); + }); + + + it('Build a informal type union', function() { + var parser = new Parser(); + var union = parser.parse('number|boolean'); + + expect(union.types.length).to.equal(2); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.types[0].name).to.equal('number'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.types[1].name).to.equal('boolean'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('number|boolean'); + expect(union.toHtml()).to.equal('number|boolean'); + }); + + + it('Build a record type with an entry', function() { + var parser = new Parser(); + var union = parser.parse('{myNum}'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var record = union.types[0]; + expect(record.entries.length).to.equal(1); + + var entry = record.entries[0]; + expect(entry.name).to.equal('myNum'); + + var valUnion = entry.typeUnion; + expect(valUnion.types.length).to.equal(0); + expect(valUnion.optional).to.equal(false); + expect(valUnion.nullable).to.equal(false); + expect(valUnion.nonNullable).to.equal(false); + expect(valUnion.variable).to.equal(false); + expect(valUnion.all).to.equal(true); + expect(valUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('{ myNum: * }'); + expect(union.toHtml()).to.equal('{ myNum: * }'); + }); + + + it('Build a record type with 2 entries', function() { + var parser = new Parser(); + var union = parser.parse('{myNum: number, myObject}'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var record = union.types[0]; + expect(record.entries.length).to.equal(2); + + var entry1 = record.entries[0]; + expect(entry1.name).to.equal('myNum'); + + var valUnion1 = entry1.typeUnion; + expect(valUnion1.types.length).to.equal(1); + expect(valUnion1.types[0].name).to.equal('number'); + expect(valUnion1.optional).to.equal(false); + expect(valUnion1.nullable).to.equal(false); + expect(valUnion1.nonNullable).to.equal(false); + expect(valUnion1.variable).to.equal(false); + expect(valUnion1.all).to.equal(false); + expect(valUnion1.unknown).to.equal(false); + + var entry2 = record.entries[1]; + expect(entry2.name).to.equal('myObject'); + + var valUnion2 = entry2.typeUnion; + expect(valUnion2.types.length).to.equal(0); + expect(valUnion2.optional).to.equal(false); + expect(valUnion2.nullable).to.equal(false); + expect(valUnion2.nonNullable).to.equal(false); + expect(valUnion2.variable).to.equal(false); + expect(valUnion2.all).to.equal(true); + expect(valUnion2.unknown).to.equal(false); + + expect(union.toString()).to.equal('{ myNum: number, myObject: * }'); + expect(union.toHtml()).to.equal('{ myNum: number, myObject: * }'); + }); + + + it('Build a generic type has a parameter as a record type', function() { + var parser = new Parser(); + var union = parser.parse('Array.<{length}>'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var generic = union.types[0]; + expect(generic.genericTypeName.name).to.equal('Array'); + + expect(generic.parameterTypeUnions.length).to.equal(1); + var valUnion = generic.parameterTypeUnions[0]; + expect(valUnion.types.length).to.equal(1); + expect(valUnion.optional).to.equal(false); + expect(valUnion.nullable).to.equal(false); + expect(valUnion.nonNullable).to.equal(false); + expect(valUnion.variable).to.equal(false); + expect(valUnion.all).to.equal(false); + expect(valUnion.unknown).to.equal(false); + + var record = valUnion.types[0]; + expect(record.entries.length).to.equal(1); + + var entry = record.entries[0]; + expect(entry.name).to.equal('length'); + + valUnion = entry.typeUnion; + expect(valUnion.types.length).to.equal(0); + expect(valUnion.optional).to.equal(false); + expect(valUnion.nullable).to.equal(false); + expect(valUnion.nonNullable).to.equal(false); + expect(valUnion.variable).to.equal(false); + expect(valUnion.all).to.equal(true); + expect(valUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('Array.<{ length: * }>'); + expect(union.toHtml()).to.equal('Array.<{ length: * }>'); + }); + + + it('Build a nullable type has a nullable type operator on the head', function() { + var parser = new Parser(); + var union = parser.parse('?number'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('number'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(true); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('number|null'); + expect(union.toHtml()).to.equal('number|null'); + }); + + + it('Build a nullable type has a nullable type operator on the tail', function() { + var parser = new Parser(); + var union = parser.parse('goog.ui.Component?'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('goog.ui.Component'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(true); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('goog.ui.Component|null'); + expect(union.toHtml()).to.equal('' + + 'goog.ui.Component|null'); + }); + + + it('Build a non-nullable type has a nullable type operator on the head', function() { + var parser = new Parser(); + var union = parser.parse('!Object'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('Object'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(true); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('!Object'); + expect(union.toHtml()).to.equal('!Object'); + }); + + + it('Build a non-nullable type has a nullable type operator on the tail', function() { + var parser = new Parser(); + var union = parser.parse('Object!'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('Object'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(true); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('!Object'); + expect(union.toHtml()).to.equal('!Object'); + }); + + + it('Build a function type', function() { + var parser = new Parser(); + var union = parser.parse('Function'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('Function'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('Function'); + expect(union.toHtml()).to.equal('Function'); + }); + + + it('Build a function type has no parameters', function() { + var parser = new Parser(); + var union = parser.parse('function()'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(0); + expect(func.returnTypeUnion).to.equal(null); + expect(func.contextTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + expect(union.toString()).to.equal('function()'); + expect(union.toHtml()).to.equal('function()'); + }); + + + it('Build a function type has a parameter', function() { + var parser = new Parser(); + var union = parser.parse('function(string)'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(1); + expect(func.returnTypeUnion).to.equal(null); + expect(func.contextTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + var paramUnion = func.parameterTypeUnions[0]; + expect(paramUnion.types.length).to.equal(1); + expect(paramUnion.types[0].name).to.equal('string'); + expect(paramUnion.optional).to.equal(false); + expect(paramUnion.nullable).to.equal(false); + expect(paramUnion.nonNullable).to.equal(false); + expect(paramUnion.variable).to.equal(false); + expect(paramUnion.all).to.equal(false); + expect(paramUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(string)'); + expect(union.toHtml()).to.equal('function(string)'); + }); + + + it('Build a function type has 2 parameters', function() { + var parser = new Parser(); + var union = parser.parse('function(string, boolean)'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(2); + expect(func.returnTypeUnion).to.equal(null); + expect(func.contextTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + var paramUnion1 = func.parameterTypeUnions[0]; + expect(paramUnion1.types.length).to.equal(1); + expect(paramUnion1.types[0].name).to.equal('string'); + expect(paramUnion1.optional).to.equal(false); + expect(paramUnion1.nullable).to.equal(false); + expect(paramUnion1.nonNullable).to.equal(false); + expect(paramUnion1.variable).to.equal(false); + expect(paramUnion1.all).to.equal(false); + expect(paramUnion1.unknown).to.equal(false); + + var paramUnion2 = func.parameterTypeUnions[1]; + expect(paramUnion2.types.length).to.equal(1); + expect(paramUnion2.types[0].name).to.equal('boolean'); + expect(paramUnion2.optional).to.equal(false); + expect(paramUnion2.nullable).to.equal(false); + expect(paramUnion2.nonNullable).to.equal(false); + expect(paramUnion2.variable).to.equal(false); + expect(paramUnion2.all).to.equal(false); + expect(paramUnion2.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(string, boolean)'); + expect(union.toHtml()).to.equal('function(string, boolean)'); + }); + + + it('Build a function type has a return', function() { + var parser = new Parser(); + var union = parser.parse('function(): number'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(0); + expect(func.contextTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + var returnUnion = func.returnTypeUnion; + expect(returnUnion.types.length).to.equal(1); + expect(returnUnion.types[0].name).to.equal('number'); + expect(returnUnion.optional).to.equal(false); + expect(returnUnion.nullable).to.equal(false); + expect(returnUnion.nonNullable).to.equal(false); + expect(returnUnion.variable).to.equal(false); + expect(returnUnion.all).to.equal(false); + expect(returnUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(): number'); + expect(union.toHtml()).to.equal('function(): number'); + }); + + + it('Build a function type has a context', function() { + var parser = new Parser(); + var union = parser.parse('function(this:goog.ui.Menu, string)'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(1); + expect(func.returnTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + var contextUnion = func.contextTypeUnion; + expect(contextUnion.types.length).to.equal(1); + expect(contextUnion.types[0].name).to.equal('goog.ui.Menu'); + expect(contextUnion.optional).to.equal(false); + expect(contextUnion.nullable).to.equal(false); + expect(contextUnion.nonNullable).to.equal(false); + expect(contextUnion.variable).to.equal(false); + expect(contextUnion.all).to.equal(false); + expect(contextUnion.unknown).to.equal(false); + + var paramUnion = func.parameterTypeUnions[0]; + expect(paramUnion.types.length).to.equal(1); + expect(paramUnion.types[0].name).to.equal('string'); + expect(paramUnion.optional).to.equal(false); + expect(paramUnion.nullable).to.equal(false); + expect(paramUnion.nonNullable).to.equal(false); + expect(paramUnion.variable).to.equal(false); + expect(paramUnion.all).to.equal(false); + expect(paramUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(this:goog.ui.Menu, string)'); + expect(union.toHtml()).to.equal('function(this:' + + 'goog.ui.Menu, string)'); + }); + + + it('Build a constructor type', function() { + var parser = new Parser(); + var union = parser.parse('function(new:goog.ui.Menu, string)'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(1); + expect(func.returnTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(true); + + var contextUnion = func.contextTypeUnion; + expect(contextUnion.types.length).to.equal(1); + expect(contextUnion.types[0].name).to.equal('goog.ui.Menu'); + expect(contextUnion.optional).to.equal(false); + expect(contextUnion.nullable).to.equal(false); + expect(contextUnion.nonNullable).to.equal(false); + expect(contextUnion.variable).to.equal(false); + expect(contextUnion.all).to.equal(false); + expect(contextUnion.unknown).to.equal(false); + + var paramUnion = func.parameterTypeUnions[0]; + expect(paramUnion.types.length).to.equal(1); + expect(paramUnion.types[0].name).to.equal('string'); + expect(paramUnion.optional).to.equal(false); + expect(paramUnion.nullable).to.equal(false); + expect(paramUnion.nonNullable).to.equal(false); + expect(paramUnion.variable).to.equal(false); + expect(paramUnion.all).to.equal(false); + expect(paramUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(new:goog.ui.Menu, string)'); + expect(union.toHtml()).to.equal('function(new:' + + 'goog.ui.Menu, string)'); + }); + + + it('Build a function type has a variable parameter', function() { + var parser = new Parser(); + var union = parser.parse('function(string, ...number): number'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(2); + expect(func.contextTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + var paramUnion1 = func.parameterTypeUnions[0]; + expect(paramUnion1.types.length).to.equal(1); + expect(paramUnion1.types[0].name).to.equal('string'); + expect(paramUnion1.optional).to.equal(false); + expect(paramUnion1.nullable).to.equal(false); + expect(paramUnion1.nonNullable).to.equal(false); + expect(paramUnion1.variable).to.equal(false); + expect(paramUnion1.all).to.equal(false); + expect(paramUnion1.unknown).to.equal(false); + + var paramUnion2 = func.parameterTypeUnions[1]; + expect(paramUnion2.types.length).to.equal(1); + expect(paramUnion2.types[0].name).to.equal('number'); + expect(paramUnion2.optional).to.equal(false); + expect(paramUnion2.nullable).to.equal(false); + expect(paramUnion2.nonNullable).to.equal(false); + expect(paramUnion2.variable).to.equal(true); + expect(paramUnion2.all).to.equal(false); + expect(paramUnion2.unknown).to.equal(false); + + var returnUnion = func.returnTypeUnion; + expect(returnUnion.types.length).to.equal(1); + expect(returnUnion.types[0].name).to.equal('number'); + expect(returnUnion.optional).to.equal(false); + expect(returnUnion.nullable).to.equal(false); + expect(returnUnion.nonNullable).to.equal(false); + expect(returnUnion.variable).to.equal(false); + expect(returnUnion.all).to.equal(false); + expect(returnUnion.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(string, ...number): number'); + expect(union.toHtml()).to.equal('function(string, ...number' + + '): number'); + }); + + + it('Build a function type has parameters have some type operators', function() { + var parser = new Parser(); + var union = parser.parse('function(?string=, number=)'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(2); + expect(func.returnTypeUnion).to.equal(null); + expect(func.contextTypeUnion).to.equal(null); + expect(func.isConstructor).to.equal(false); + + var paramUnion1 = func.parameterTypeUnions[0]; + expect(paramUnion1.types.length).to.equal(1); + expect(paramUnion1.types[0].name).to.equal('string'); + expect(paramUnion1.optional).to.equal(true); + expect(paramUnion1.nullable).to.equal(true); + expect(paramUnion1.nonNullable).to.equal(false); + expect(paramUnion1.variable).to.equal(false); + expect(paramUnion1.all).to.equal(false); + expect(paramUnion1.unknown).to.equal(false); + + var paramUnion2 = func.parameterTypeUnions[1]; + expect(paramUnion2.types.length).to.equal(1); + expect(paramUnion2.types[0].name).to.equal('number'); + expect(paramUnion2.optional).to.equal(true); + expect(paramUnion2.nullable).to.equal(false); + expect(paramUnion2.nonNullable).to.equal(false); + expect(paramUnion2.variable).to.equal(false); + expect(paramUnion2.all).to.equal(false); + expect(paramUnion2.unknown).to.equal(false); + + expect(union.toString()).to.equal('function(string|undefined|null, number|undefined)'); + expect(union.toHtml()).to.equal('function(string|undefined' + + '|null, number|undefined)'); + }); + + + it('Build a goog.ui.Component#forEachChild', function() { + var parser = new Parser(); + var union = parser.parse('function(this:T,?,number):?'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + var func = union.types[0]; + expect(func.parameterTypeUnions.length).to.equal(2); + expect(func.isConstructor).to.equal(false); + + var contextUnion = func.contextTypeUnion; + expect(contextUnion.types.length).to.equal(1); + expect(contextUnion.types[0].name).to.equal('T'); + expect(contextUnion.optional).to.equal(false); + expect(contextUnion.nullable).to.equal(false); + expect(contextUnion.nonNullable).to.equal(false); + expect(contextUnion.variable).to.equal(false); + expect(contextUnion.all).to.equal(false); + expect(contextUnion.unknown).to.equal(false); + + var paramUnion1 = func.parameterTypeUnions[0]; + expect(paramUnion1.types.length).to.equal(0); + expect(paramUnion1.optional).to.equal(false); + expect(paramUnion1.nullable).to.equal(false); + expect(paramUnion1.nonNullable).to.equal(false); + expect(paramUnion1.variable).to.equal(false); + expect(paramUnion1.all).to.equal(false); + expect(paramUnion1.unknown).to.equal(true); + + var paramUnion2 = func.parameterTypeUnions[1]; + expect(paramUnion2.types.length).to.equal(1); + expect(paramUnion2.types[0].name).to.equal('number'); + expect(paramUnion2.optional).to.equal(false); + expect(paramUnion2.nullable).to.equal(false); + expect(paramUnion2.nonNullable).to.equal(false); + expect(paramUnion2.variable).to.equal(false); + expect(paramUnion2.all).to.equal(false); + expect(paramUnion2.unknown).to.equal(false); + + var returnUnion = func.returnTypeUnion; + expect(returnUnion.types.length).to.equal(0); + expect(returnUnion.optional).to.equal(false); + expect(returnUnion.nullable).to.equal(false); + expect(returnUnion.nonNullable).to.equal(false); + expect(returnUnion.variable).to.equal(false); + expect(returnUnion.all).to.equal(false); + expect(returnUnion.unknown).to.equal(true); + + expect(union.toString()).to.equal('function(this:T, ?, number): ?'); + expect(union.toHtml()).to.equal('function(this:T, ' + + '?, number): ?'); + }); + + + it('Build a variable type', function() { + var parser = new Parser(); + var union = parser.parse('...number'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('number'); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(true); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('...number'); + expect(union.toHtml()).to.equal('...number'); + }); + + + it('Build an optional type has an optional type operator on the head', function() { + var parser = new Parser(); + var union = parser.parse('=number'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('number'); + expect(union.optional).to.equal(true); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('number|undefined'); + expect(union.toHtml()).to.equal('number|undefined'); + }); + + + it('Build an optional type has an optional type operator on the tail', function() { + var parser = new Parser(); + var union = parser.parse('number='); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('number'); + expect(union.optional).to.equal(true); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('number|undefined'); + expect(union.toHtml()).to.equal('number|undefined'); + }); + + + it('Build an optional type with a "undefined" keyword', function() { + var parser = new Parser(); + var union = parser.parse('Object|undefined'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('Object'); + expect(union.optional).to.equal(true); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('Object|undefined'); + expect(union.toHtml()).to.equal('Object|undefined'); + }); + + + it('Build an optional type with a "void" keyword', function() { + var parser = new Parser(); + var union = parser.parse('Object|void'); + + expect(union.types.length).to.equal(1); + expect(union.types[0].name).to.equal('Object'); + expect(union.optional).to.equal(true); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('Object|undefined'); + expect(union.toHtml()).to.equal('Object|undefined'); + }); + + + it('Build an all type', function() { + var parser = new Parser(); + var union = parser.parse('*'); + + expect(union.types.length).to.equal(0); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(true); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('*'); + expect(union.toHtml()).to.equal('*'); + }); + + + it('Build an unknown type', function() { + var parser = new Parser(); + var union = parser.parse('?'); + + expect(union.types.length).to.equal(0); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(true); + + expect(union.toString()).to.equal('?'); + expect(union.toHtml()).to.equal('?'); + }); + + + it('Build an unknown type with an "unknown" keyword', function() { + var parser = new Parser(); + var union = parser.parse('unknown'); + + expect(union.types.length).to.equal(0); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(true); + + expect(union.toString()).to.equal('?'); + expect(union.toHtml()).to.equal('?'); + }); + + + it('Build an undefined type with an "undefined" keyword', function() { + var parser = new Parser(); + var union = parser.parse('undefined'); + + expect(union.types.length).to.equal(0); + expect(union.optional).to.equal(true); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('undefined'); + expect(union.toHtml()).to.equal('undefined'); + }); + + + it('Build a null type with an "null" keyword', function() { + var parser = new Parser(); + var union = parser.parse('null'); + + expect(union.types.length).to.equal(0); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(true); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('null'); + expect(union.toHtml()).to.equal('null'); + }); + + + it('Build a module type', function() { + var parser = new Parser(); + var union = parser.parse('module:foo/bar'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('module:foo/bar'); + expect(union.toHtml()).to.equal('module:foo/bar'); + }); + + + it('Build a module type with a prefix nullable type operator', function() { + var parser = new Parser(); + var union = parser.parse('?module:foo/bar'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(true); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('module:foo/bar|null'); + expect(union.toHtml()).to.equal('module:' + + 'foo/bar|null'); + }); + + + it('Build a module type with a postfix nullable type operator', function() { + var parser = new Parser(); + var union = parser.parse('module:foo/bar?'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(true); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('module:foo/bar|null'); + expect(union.toHtml()).to.equal('module:' + + 'foo/bar|null'); + }); + + + it('Build a module type with a generic type operator', function() { + var parser = new Parser(); + // Because the new generic type syntax was arrived, the old type generic + // with the module keyword is not equivalent to the legacy behavior. + // + // For example, we get 2 parts as 'module:foo/bar.' and '', when + // the following type expression are arrived. + // var union = parser.parse('module:foo/bar.'); + var union = parser.parse('module:foo/bar'); + + expect(union.types.length).to.equal(1); + expect(union.optional).to.equal(false); + expect(union.nullable).to.equal(false); + expect(union.nonNullable).to.equal(false); + expect(union.variable).to.equal(false); + expect(union.all).to.equal(false); + expect(union.unknown).to.equal(false); + + expect(union.toString()).to.equal('module:foo/bar.'); + expect(union.toHtml()).to.equal('module:' + + 'foo/bar.<string>'); + }); + + + it('Build an illegal generic type', function() { + var parser = new Parser(); + + expect(function() { + parser.parse('Array. + // "Brother/33" + var links = schema.__linkTemplates; + if(!links){ + links = {}; + var schemaLinks = schema.links; + if(schemaLinks && schemaLinks instanceof Array){ + schemaLinks.forEach(function(link){ + /* // TODO: allow for multiple same-name relations + if(links[link.rel]){ + if(!(links[link.rel] instanceof Array)){ + links[link.rel] = [links[link.rel]]; + } + }*/ + links[link.rel] = link.href; + }); + } + if(exports.cacheLinks){ + schema.__linkTemplates = links; + } + } + var linkTemplate = links[relation]; + return linkTemplate && exports.substitute(linkTemplate, instance); +}; + +exports.substitute = function(linkTemplate, instance){ + return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){ + var value = instance[decodeURIComponent(property)]; + if(value instanceof Array){ + // the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values + return '(' + value.join(',') + ')'; + } + return value; + }); +}; +return exports; +})); \ No newline at end of file diff --git a/node_modules/json-schema/lib/validate.js b/node_modules/json-schema/lib/validate.js new file mode 100644 index 000000000..575973cbe --- /dev/null +++ b/node_modules/json-schema/lib/validate.js @@ -0,0 +1,271 @@ +/** + * JSONSchema Validator - Validates JavaScript objects using JSON Schemas + * (http://www.json.com/json-schema-proposal/) + * Licensed under AFL-2.1 OR BSD-3-Clause +To use the validator call the validate function with an instance object and an optional schema object. +If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), +that schema will be used to validate and the schema parameter is not necessary (if both exist, +both validations will occur). +The validate method will return an array of validation errors. If there are no errors, then an +empty list will be returned. A validation error will have two properties: +"property" which indicates which property had the error +"message" which indicates what the error was + */ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], function () { + return factory(); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals + root.jsonSchema = factory(); + } +}(this, function () {// setup primitive classes to be JSON Schema types +var exports = validate +exports.Integer = {type:"integer"}; +var primitiveConstructors = { + String: String, + Boolean: Boolean, + Number: Number, + Object: Object, + Array: Array, + Date: Date +} +exports.validate = validate; +function validate(/*Any*/instance,/*Object*/schema) { + // Summary: + // To use the validator call JSONSchema.validate with an instance object and an optional schema object. + // If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), + // that schema will be used to validate and the schema parameter is not necessary (if both exist, + // both validations will occur). + // The validate method will return an object with two properties: + // valid: A boolean indicating if the instance is valid by the schema + // errors: An array of validation errors. If there are no errors, then an + // empty list will be returned. A validation error will have two properties: + // property: which indicates which property had the error + // message: which indicates what the error was + // + return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false}); + }; +exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) { + // Summary: + // The checkPropertyChange method will check to see if an value can legally be in property with the given schema + // This is slightly different than the validate method in that it will fail if the schema is readonly and it will + // not check for self-validation, it is assumed that the passed in value is already internally valid. + // The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for + // information. + // + return validate(value, schema, {changing: property || "property"}); + }; +var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) { + + if (!options) options = {}; + var _changing = options.changing; + + function getType(schema){ + return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase()); + } + var errors = []; + // validate a value against a property definition + function checkProp(value, schema, path,i){ + + var l; + path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i; + function addError(message){ + errors.push({property:path,message:message}); + } + + if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){ + if(typeof schema == 'function'){ + if(!(value instanceof schema)){ + addError("is not an instance of the class/constructor " + schema.name); + } + }else if(schema){ + addError("Invalid schema/property definition " + schema); + } + return null; + } + if(_changing && schema.readonly){ + addError("is a readonly field, it can not be changed"); + } + if(schema['extends']){ // if it extends another schema, it must pass that schema as well + checkProp(value,schema['extends'],path,i); + } + // validate a value against a type definition + function checkType(type,value){ + if(type){ + if(typeof type == 'string' && type != 'any' && + (type == 'null' ? value !== null : typeof value != type) && + !(value instanceof Array && type == 'array') && + !(value instanceof Date && type == 'date') && + !(type == 'integer' && value%1===0)){ + return [{property:path,message:value + " - " + (typeof value) + " value found, but a " + type + " is required"}]; + } + if(type instanceof Array){ + var unionErrors=[]; + for(var j = 0; j < type.length; j++){ // a union type + if(!(unionErrors=checkType(type[j],value)).length){ + break; + } + } + if(unionErrors.length){ + return unionErrors; + } + }else if(typeof type == 'object'){ + var priorErrors = errors; + errors = []; + checkProp(value,type,path); + var theseErrors = errors; + errors = priorErrors; + return theseErrors; + } + } + return []; + } + if(value === undefined){ + if(schema.required){ + addError("is missing and it is required"); + } + }else{ + errors = errors.concat(checkType(getType(schema),value)); + if(schema.disallow && !checkType(schema.disallow,value).length){ + addError(" disallowed value was matched"); + } + if(value !== null){ + if(value instanceof Array){ + if(schema.items){ + var itemsIsArray = schema.items instanceof Array; + var propDef = schema.items; + for (i = 0, l = value.length; i < l; i += 1) { + if (itemsIsArray) + propDef = schema.items[i]; + if (options.coerce) + value[i] = options.coerce(value[i], propDef); + errors.concat(checkProp(value[i],propDef,path,i)); + } + } + if(schema.minItems && value.length < schema.minItems){ + addError("There must be a minimum of " + schema.minItems + " in the array"); + } + if(schema.maxItems && value.length > schema.maxItems){ + addError("There must be a maximum of " + schema.maxItems + " in the array"); + } + }else if(schema.properties || schema.additionalProperties){ + errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties)); + } + if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){ + addError("does not match the regex pattern " + schema.pattern); + } + if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){ + addError("may only be " + schema.maxLength + " characters long"); + } + if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){ + addError("must be at least " + schema.minLength + " characters long"); + } + if(typeof schema.minimum !== 'undefined' && typeof value == typeof schema.minimum && + schema.minimum > value){ + addError("must have a minimum value of " + schema.minimum); + } + if(typeof schema.maximum !== 'undefined' && typeof value == typeof schema.maximum && + schema.maximum < value){ + addError("must have a maximum value of " + schema.maximum); + } + if(schema['enum']){ + var enumer = schema['enum']; + l = enumer.length; + var found; + for(var j = 0; j < l; j++){ + if(enumer[j]===value){ + found=1; + break; + } + } + if(!found){ + addError("does not have a value in the enumeration " + enumer.join(", ")); + } + } + if(typeof schema.maxDecimal == 'number' && + (value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){ + addError("may only have " + schema.maxDecimal + " digits of decimal places"); + } + } + } + return null; + } + // validate an object against a schema + function checkObj(instance,objTypeDef,path,additionalProp){ + + if(typeof objTypeDef =='object'){ + if(typeof instance != 'object' || instance instanceof Array){ + errors.push({property:path,message:"an object is required"}); + } + + for(var i in objTypeDef){ + if(objTypeDef.hasOwnProperty(i) && i != '__proto__' && i != 'constructor'){ + var value = instance.hasOwnProperty(i) ? instance[i] : undefined; + // skip _not_ specified properties + if (value === undefined && options.existingOnly) continue; + var propDef = objTypeDef[i]; + // set default + if(value === undefined && propDef["default"]){ + value = instance[i] = propDef["default"]; + } + if(options.coerce && i in instance){ + value = instance[i] = options.coerce(value, propDef); + } + checkProp(value,propDef,path,i); + } + } + } + for(i in instance){ + if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){ + if (options.filter) { + delete instance[i]; + continue; + } else { + errors.push({property:path,message:"The property " + i + + " is not defined in the schema and the schema does not allow additional properties"}); + } + } + var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires; + if(requires && !(requires in instance)){ + errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"}); + } + value = instance[i]; + if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){ + if(options.coerce){ + value = instance[i] = options.coerce(value, additionalProp); + } + checkProp(value,additionalProp,path,i); + } + if(!_changing && value && value.$schema){ + errors = errors.concat(checkProp(value,value.$schema,path,i)); + } + } + return errors; + } + if(schema){ + checkProp(instance,schema,'',_changing || ''); + } + if(!_changing && instance && instance.$schema){ + checkProp(instance,instance.$schema,'',''); + } + return {valid:!errors.length,errors:errors}; +}; +exports.mustBeValid = function(result){ + // summary: + // This checks to ensure that the result is valid and will throw an appropriate error message if it is not + // result: the result returned from checkPropertyChange or validate + if(!result.valid){ + throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n")); + } +} + +return exports; +})); diff --git a/node_modules/json-schema/package.json b/node_modules/json-schema/package.json new file mode 100644 index 000000000..8c1f89980 --- /dev/null +++ b/node_modules/json-schema/package.json @@ -0,0 +1,24 @@ +{ + "name": "json-schema", + "version": "0.4.0", + "author": "Kris Zyp", + "description": "JSON Schema validation and specifications", + "maintainers":[ + {"name": "Kris Zyp", "email": "kriszyp@gmail.com"}], + "keywords": [ + "json", + "schema" + ], + "files": [ + "lib" + ], + "license": "(AFL-2.1 OR BSD-3-Clause)", + "repository": { + "type":"git", + "url":"http://github.com/kriszyp/json-schema" + }, + "directories": { "lib": "./lib" }, + "main": "./lib/validate.js", + "devDependencies": { "vows": "*" }, + "scripts": { "test": "vows --spec test/*.js" } +} diff --git a/node_modules/json-stable-stringify/.eslintrc b/node_modules/json-stable-stringify/.eslintrc new file mode 100644 index 000000000..c956bd826 --- /dev/null +++ b/node_modules/json-stable-stringify/.eslintrc @@ -0,0 +1,30 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "consistent-return": 1, + "max-lines-per-function": 0, + "max-params": 1, + "max-statements-per-line": [2, { "max": 2 }], + "no-continue": 1, + "no-negated-condition": 1, + "no-param-reassign": 1, + "no-redeclare": 1, + "no-restricted-syntax": 1, + "object-curly-newline": 0, + "max-statements": 1, + "operator-linebreak": 0, + "sort-keys": 1, + }, + + "overrides": [ + { + "files": "example/**", + "rules": { + "no-console": 0, + }, + }, + ], +} diff --git a/node_modules/json-stable-stringify/.github/FUNDING.yml b/node_modules/json-stable-stringify/.github/FUNDING.yml new file mode 100644 index 000000000..6dfcaef11 --- /dev/null +++ b/node_modules/json-stable-stringify/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +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: npm/json-stable-stringify +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/node_modules/json-stable-stringify/.travis.yml b/node_modules/json-stable-stringify/.travis.yml new file mode 100644 index 000000000..cc4dba29d --- /dev/null +++ b/node_modules/json-stable-stringify/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/json-stable-stringify/CHANGELOG.md b/node_modules/json-stable-stringify/CHANGELOG.md new file mode 100644 index 000000000..02a5a97f9 --- /dev/null +++ b/node_modules/json-stable-stringify/CHANGELOG.md @@ -0,0 +1,89 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/ljharb/json-stable-stringify/compare/v1.0.1...v1.0.2) - 2022-11-07 + +### Commits + +- [eslint] fix indentation and whitespace [`c97e78c`](https://github.com/ljharb/json-stable-stringify/commit/c97e78cf3c0695701095dc0036681182585a6392) +- [eslint] more cleanup [`c162117`](https://github.com/ljharb/json-stable-stringify/commit/c162117489c6dc63ece402b4a9b6e566f109fa65) +- [meta] add `auto-changelog` [`83934ff`](https://github.com/ljharb/json-stable-stringify/commit/83934ffbbb3e72b9da09bf6436e1f86e7dce3b74) +- [actions] add reusable workflows [`7b24830`](https://github.com/ljharb/json-stable-stringify/commit/7b248309f6ba87e2e52f99485c1f8b209b5788dc) +- [readme] rename, add badges [`5433588`](https://github.com/ljharb/json-stable-stringify/commit/5433588781ebd98e41c81b5bfed1fb67520cf171) +- [eslint] add eslint [`7be6c27`](https://github.com/ljharb/json-stable-stringify/commit/7be6c2755a7e2ead43017761b248a21511e457a0) +- [meta] create FUNDING.yml; add `funding` in package.json [`6edbece`](https://github.com/ljharb/json-stable-stringify/commit/6edbece874fb656b9957b7bb362cf492f95fe259) +- [meta] use `npmignore` to autogenerate an npmignore file [`b5d7d3a`](https://github.com/ljharb/json-stable-stringify/commit/b5d7d3abbe3d3a653e9ed511ab1b48940c5eb126) +- [Dev Deps] update `tape` [`2200cf1`](https://github.com/ljharb/json-stable-stringify/commit/2200cf1e5822a4dd928541c3122a0922703c951f) +- [actions] update rebase action [`e41ac00`](https://github.com/ljharb/json-stable-stringify/commit/e41ac000fb633d3df7c1e417ffd6213d885b64a1) +- [meta] update URLs [`f17e490`](https://github.com/ljharb/json-stable-stringify/commit/f17e49038cf39a84a8a2677cc6445fad54902766) +- Only apps should have lockfiles [`4f052f4`](https://github.com/ljharb/json-stable-stringify/commit/4f052f4ebf722024bc3827064b2d823f405ff2f6) +- add breaking test (acyclic detected as cyclic) [`7f5f443`](https://github.com/ljharb/json-stable-stringify/commit/7f5f443e90402a520f1413833318b02bbb11ad67) +- [meta] add `safe-publish-latest` [`ddb843f`](https://github.com/ljharb/json-stable-stringify/commit/ddb843f678bfe5145afaf03d811701c5ce4a17a6) +- [Tests] add `aud` in `posttest` [`245c9bf`](https://github.com/ljharb/json-stable-stringify/commit/245c9bfa291d6d33813d44941d7639494fa8579a) +- [Deps] update `jsonify` [`7b79a68`](https://github.com/ljharb/json-stable-stringify/commit/7b79a686f1ccda88b3ab20549840764c9b6f74eb) +- fix conflict [`e43ca2a`](https://github.com/ljharb/json-stable-stringify/commit/e43ca2a1dcfc39bf1514684492767ef6040d1f3e) + +## [v1.0.1](https://github.com/ljharb/json-stable-stringify/compare/v1.0.0...v1.0.1) - 2016-02-02 + +### Commits + +- Correctly stringify non-cyclic shared references [`c26c700`](https://github.com/ljharb/json-stable-stringify/commit/c26c700f0b1d078512d2eba0eb16d6e5110a5538) + +## [v1.0.0](https://github.com/ljharb/json-stable-stringify/compare/v0.1.3...v1.0.0) - 2014-05-27 + +### Commits + +- Added options.replacer for custom object serialization [`ccf5e63`](https://github.com/ljharb/json-stable-stringify/commit/ccf5e636803a55d062e97aaf4e2c27d5c787aff0) +- document replacer [`894f43b`](https://github.com/ljharb/json-stable-stringify/commit/894f43b633724bf0c6c2741143addfe20e149015) + +## [v0.1.3](https://github.com/ljharb/json-stable-stringify/compare/v0.1.2...v0.1.3) - 2014-05-27 + +### Commits + +- Enable toJSON function to return different types [`de0debf`](https://github.com/ljharb/json-stable-stringify/commit/de0debff3a36604010279af1868c6172674f9cc9) + +## [v0.1.2](https://github.com/ljharb/json-stable-stringify/compare/v0.1.1...v0.1.2) - 2014-04-02 + +### Commits + +- Should call 'toJSON' if it is defined on the object being stringified. [`c1de9d1`](https://github.com/ljharb/json-stable-stringify/commit/c1de9d193e8d6755d6ea2c2e5ead0544a8122040) +- guard the reference [`a723f70`](https://github.com/ljharb/json-stable-stringify/commit/a723f705dd13fcbab1aa0ffa51849395712aaa13) +- reindent [`7ff314f`](https://github.com/ljharb/json-stable-stringify/commit/7ff314fabf3b40074a4aff906b16e087897c6040) + +## [v0.1.1](https://github.com/ljharb/json-stable-stringify/compare/v0.1.0...v0.1.1) - 2013-12-21 + +### Commits + +- fixed merge conflicts [`7e139e8`](https://github.com/ljharb/json-stable-stringify/commit/7e139e8bbeb37b4dfd44991f4d6c98bba446b949) +- fix formatting [`b5df6b9`](https://github.com/ljharb/json-stable-stringify/commit/b5df6b9ec0f5a5826eebb5d93424923041e43405) + +## [v0.1.0](https://github.com/ljharb/json-stable-stringify/compare/v0.0.1...v0.1.0) - 2013-12-21 + +### Commits + +- New “space” option to enable pretty printing (same as ES5) [`e6815c9`](https://github.com/ljharb/json-stable-stringify/commit/e6815c9dd8ca4052023d2bbd5c5b78b44f0efef0) +- formatting [`962edf4`](https://github.com/ljharb/json-stable-stringify/commit/962edf4abb96189546b4f78f8719d747fd90fd43) + +## [v0.0.1](https://github.com/ljharb/json-stable-stringify/compare/v0.0.0...v0.0.1) - 2013-07-17 + +### Commits + +- don't choke on null [`3f4e9c7`](https://github.com/ljharb/json-stable-stringify/commit/3f4e9c78befc32f7d36af68e408e25cdc84be202) + +## v0.0.0 - 2013-07-17 + +### Commits + +- docs, more examples [`81f36c1`](https://github.com/ljharb/json-stable-stringify/commit/81f36c1aa645a75ebefa6d66d9cf41660439ebfe) +- package.json etc [`98c5fd6`](https://github.com/ljharb/json-stable-stringify/commit/98c5fd6f9b12e1679b90777b9f6384203a05e983) +- working implementation with 2 examples [`3e5363a`](https://github.com/ljharb/json-stable-stringify/commit/3e5363ac542fa3bf0bdef51034ca9201648f9839) +- turn examples into tests, everything passes [`cccbd24`](https://github.com/ljharb/json-stable-stringify/commit/cccbd24c1a1a6318e3c004c86ae032db98a9abf8) +- badges [`f8ff127`](https://github.com/ljharb/json-stable-stringify/commit/f8ff127df9f05d0b238bae8f91e483a755e0069e) +- comparison test now passes [`8ab93e2`](https://github.com/ljharb/json-stable-stringify/commit/8ab93e2273ec530990e28233fcb96fde548ab16c) +- failing custom comparison test [`3af627d`](https://github.com/ljharb/json-stable-stringify/commit/3af627d0d367451a98fc9cec6580760ade8f9bae) +- fix object.keys shim [`7c16662`](https://github.com/ljharb/json-stable-stringify/commit/7c16662bc1cc6ecfa64159f9277e067cb1bec505) +- fix for the other tests that don't use a cmp function [`f7b9a47`](https://github.com/ljharb/json-stable-stringify/commit/f7b9a476fd3ce9ec09b2c0588605e6c7c053e9ed) diff --git a/node_modules/json-stable-stringify/LICENSE b/node_modules/json-stable-stringify/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/json-stable-stringify/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +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. diff --git a/node_modules/json-stable-stringify/README.md b/node_modules/json-stable-stringify/README.md new file mode 100644 index 000000000..3f55d0ddd --- /dev/null +++ b/node_modules/json-stable-stringify/README.md @@ -0,0 +1,158 @@ +# json-stable-stringify [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +deterministic version of `JSON.stringify()` so you can get a consistent hash from stringified results + +You can also pass in a custom comparison function. + +[![browser support](https://ci.testling.com/ljharb/json-stable-stringify.png)](https://ci.testling.com/ljharb/json-stable-stringify) + +[![build status](https://secure.travis-ci.org/ljharb/json-stable-stringify.png)](http://travis-ci.org/ljharb/json-stable-stringify) + +# example + +``` js +var stringify = require('json-stable-stringify'); + +var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; + +console.log(stringify(obj)); +``` + +output: + +``` +{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8} +``` + +# methods + +``` js +var stringify = require('json-stable-stringify') +``` + +## var str = stringify(obj, opts) + +Return a deterministic stringified string `str` from the object `obj`. + +## options + +### cmp + +If `opts` is given, you can supply an `opts.cmp` to have a custom comparison function for object keys. +Your function `opts.cmp` is called with these parameters: + +``` js +opts.cmp({ key: akey, value: avalue }, { key: bkey, value: bvalue }) +``` + +For example, to sort on the object key names in reverse order you could write: + +``` js +var stringify = require('json-stable-stringify'); + +var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 },7], a: 3 }; + +var s = stringify(obj, function (a, b) { + return b.key.localeCompare(a.key); +}); + +console.log(s); +``` + +which results in the output string: + +``` +{"c":8,"b":[{"z":6,"y":5,"x":4},7],"a":3} +``` + +Or if you wanted to sort on the object values in reverse order, you could write: + +``` +var stringify = require('json-stable-stringify'); + +var obj = { d: 6, c: 5, b: [{ z: 3, y: 2, x: 1 }, 9], a: 10 }; + +var s = stringify(obj, function (a, b) { + return a.value < b.value ? 1 : -1; +}); + +console.log(s); +``` + +which outputs: + +``` +{"d":6,"c":5,"b":[{"z":3,"y":2,"x":1},9],"a":10} +``` + +### space + +If you specify `opts.space`, it will indent the output for pretty-printing. +Valid values are strings (e.g. `{space: \t}`) or a number of spaces +(`{space: 3}`). + +For example: + +```js +var obj = { b: 1, a: { foo: 'bar', and: [1, 2, 3] } }; + +var s = stringify(obj, { space: ' ' }); + +console.log(s); +``` + +which outputs: + +``` +{ + "a": { + "and": [ + 1, + 2, + 3 + ], + "foo": "bar" + }, + "b": 1 +} +``` + +### replacer + +The replacer parameter is a function `opts.replacer(key, value)` that behaves the same as the replacer +[from the core JSON object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_native_JSON#The_replacer_parameter). + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install json-stable-stringify +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/json-stable-stringify +[npm-version-svg]: https://versionbadg.es/ljharb/json-stable-stringify.svg +[deps-svg]: https://david-dm.org/ljharb/json-stable-stringify.svg +[deps-url]: https://david-dm.org/ljharb/json-stable-stringify +[dev-deps-svg]: https://david-dm.org/ljharb/json-stable-stringify/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/json-stable-stringify#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/json-stable-stringify.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/json-stable-stringify.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/json-stable-stringify.svg +[downloads-url]: https://npm-stat.com/charts.html?package=json-stable-stringify +[codecov-image]: https://codecov.io/gh/ljharb/json-stable-stringify/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/json-stable-stringify/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/json-stable-stringify +[actions-url]: https://github.com/ljharb/json-stable-stringify/actions diff --git a/node_modules/json-stable-stringify/example/key_cmp.js b/node_modules/json-stable-stringify/example/key_cmp.js new file mode 100644 index 000000000..6b64c8558 --- /dev/null +++ b/node_modules/json-stable-stringify/example/key_cmp.js @@ -0,0 +1,9 @@ +'use strict'; + +var stringify = require('../'); + +var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; +var s = stringify(obj, function (a, b) { + return b.key.localeCompare(a.key); +}); +console.log(s); diff --git a/node_modules/json-stable-stringify/example/nested.js b/node_modules/json-stable-stringify/example/nested.js new file mode 100644 index 000000000..a291256ea --- /dev/null +++ b/node_modules/json-stable-stringify/example/nested.js @@ -0,0 +1,7 @@ +'use strict'; + +var stringify = require('../'); + +var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; + +console.log(stringify(obj)); diff --git a/node_modules/json-stable-stringify/example/str.js b/node_modules/json-stable-stringify/example/str.js new file mode 100644 index 000000000..2d021a4d5 --- /dev/null +++ b/node_modules/json-stable-stringify/example/str.js @@ -0,0 +1,7 @@ +'use strict'; + +var stringify = require('../'); + +var obj = { c: 6, b: [4, 5], a: 3 }; + +console.log(stringify(obj)); diff --git a/node_modules/json-stable-stringify/example/value_cmp.js b/node_modules/json-stable-stringify/example/value_cmp.js new file mode 100644 index 000000000..bb97f08c9 --- /dev/null +++ b/node_modules/json-stable-stringify/example/value_cmp.js @@ -0,0 +1,11 @@ +'use strict'; + +var stringify = require('../'); + +var obj = { d: 6, c: 5, b: [{ z: 3, y: 2, x: 1 }, 9], a: 10 }; + +var s = stringify(obj, function (a, b) { + return a.value < b.value ? 1 : -1; +}); + +console.log(s); diff --git a/node_modules/json-stable-stringify/index.js b/node_modules/json-stable-stringify/index.js new file mode 100644 index 000000000..cfab95fd1 --- /dev/null +++ b/node_modules/json-stable-stringify/index.js @@ -0,0 +1,85 @@ +'use strict'; + +var json = typeof JSON !== 'undefined' ? JSON : require('jsonify'); + +var isArray = Array.isArray || function (x) { + return {}.toString.call(x) === '[object Array]'; +}; + +var objectKeys = Object.keys || function (obj) { + var has = Object.prototype.hasOwnProperty || function () { return true; }; + var keys = []; + for (var key in obj) { + if (has.call(obj, key)) { keys.push(key); } + } + return keys; +}; + +module.exports = function (obj, opts) { + if (!opts) { opts = {}; } + if (typeof opts === 'function') { opts = { cmp: opts }; } + var space = opts.space || ''; + if (typeof space === 'number') { space = Array(space + 1).join(' '); } + var cycles = typeof opts.cycles === 'boolean' ? opts.cycles : false; + var replacer = opts.replacer || function (key, value) { return value; }; + + var cmp = opts.cmp && (function (f) { + return function (node) { + return function (a, b) { + var aobj = { key: a, value: node[a] }; + var bobj = { key: b, value: node[b] }; + return f(aobj, bobj); + }; + }; + }(opts.cmp)); + + var seen = []; + return (function stringify(parent, key, node, level) { + var indent = space ? '\n' + new Array(level + 1).join(space) : ''; + var colonSeparator = space ? ': ' : ':'; + + if (node && node.toJSON && typeof node.toJSON === 'function') { + node = node.toJSON(); + } + + node = replacer.call(parent, key, node); + + if (node === undefined) { + return; + } + if (typeof node !== 'object' || node === null) { + return json.stringify(node); + } + if (isArray(node)) { + var out = []; + for (var i = 0; i < node.length; i++) { + var item = stringify(node, i, node[i], level + 1) || json.stringify(null); + out.push(indent + space + item); + } + return '[' + out.join(',') + indent + ']'; + } + + if (seen.indexOf(node) !== -1) { + if (cycles) { return json.stringify('__cycle__'); } + throw new TypeError('Converting circular structure to JSON'); + } else { seen.push(node); } + + var keys = objectKeys(node).sort(cmp && cmp(node)); + var out = []; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var value = stringify(node, key, node[key], level + 1); + + if (!value) { continue; } + + var keyValue = json.stringify(key) + + colonSeparator + + value; + + out.push(indent + space + keyValue); + } + seen.splice(seen.indexOf(node), 1); + return '{' + out.join(',') + indent + '}'; + + }({ '': obj }, '', obj, 0)); +}; diff --git a/node_modules/json-stable-stringify/package.json b/node_modules/json-stable-stringify/package.json new file mode 100644 index 000000000..229fa20ae --- /dev/null +++ b/node_modules/json-stable-stringify/package.json @@ -0,0 +1,78 @@ +{ + "name": "json-stable-stringify", + "version": "1.0.2", + "description": "deterministic JSON.stringify() with custom sorting to get deterministic hashes from stringified results", + "main": "index.js", + "dependencies": { + "jsonify": "^0.0.1" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.0.0", + "aud": "^2.0.1", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.1" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "ff/5", + "ff/latest", + "chrome/15", + "chrome/latest", + "safari/latest", + "opera/latest" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/ljharb/json-stable-stringify.git" + }, + "homepage": "https://github.com/ljharb/json-stable-stringify", + "keywords": [ + "json", + "stringify", + "deterministic", + "hash", + "sort", + "stable" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/json-stable-stringify/test/cmp.js b/node_modules/json-stable-stringify/test/cmp.js new file mode 100644 index 000000000..7a58c6eaa --- /dev/null +++ b/node_modules/json-stable-stringify/test/cmp.js @@ -0,0 +1,13 @@ +'use strict'; + +var test = require('tape'); +var stringify = require('../'); + +test('custom comparison function', function (t) { + t.plan(1); + var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; + var s = stringify(obj, function (a, b) { + return a.key < b.key ? 1 : -1; + }); + t.equal(s, '{"c":8,"b":[{"z":6,"y":5,"x":4},7],"a":3}'); +}); diff --git a/node_modules/json-stable-stringify/test/nested.js b/node_modules/json-stable-stringify/test/nested.js new file mode 100644 index 000000000..25fd3ac07 --- /dev/null +++ b/node_modules/json-stable-stringify/test/nested.js @@ -0,0 +1,44 @@ +'use strict'; + +var test = require('tape'); +var stringify = require('../'); + +test('nested', function (t) { + t.plan(1); + var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; + t.equal(stringify(obj), '{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8}'); +}); + +test('cyclic (default)', function (t) { + t.plan(1); + var one = { a: 1 }; + var two = { a: 2, one: one }; + one.two = two; + try { + stringify(one); + } catch (ex) { + t.equal(ex.toString(), 'TypeError: Converting circular structure to JSON'); + } +}); + +test('cyclic (specifically allowed)', function (t) { + t.plan(1); + var one = { a: 1 }; + var two = { a: 2, one: one }; + one.two = two; + t.equal(stringify(one, { cycles: true }), '{"a":1,"two":{"a":2,"one":"__cycle__"}}'); +}); + +test('repeated non-cyclic value', function (t) { + t.plan(1); + var one = { x: 1 }; + var two = { a: one, b: one }; + t.equal(stringify(two), '{"a":{"x":1},"b":{"x":1}}'); +}); + +test('acyclic but with reused obj-property pointers', function (t) { + t.plan(1); + var x = { a: 1 }; + var y = { b: x, c: x }; + t.equal(stringify(y), '{"b":{"a":1},"c":{"a":1}}'); +}); diff --git a/node_modules/json-stable-stringify/test/replacer.js b/node_modules/json-stable-stringify/test/replacer.js new file mode 100644 index 000000000..5a3ce8caa --- /dev/null +++ b/node_modules/json-stable-stringify/test/replacer.js @@ -0,0 +1,76 @@ +'use strict'; + +var test = require('tape'); +var stringify = require('../'); + +test('replace root', function (t) { + t.plan(1); + + var obj = { a: 1, b: 2, c: false }; + var replacer = function () { return 'one'; }; + + t.equal(stringify(obj, { replacer: replacer }), '"one"'); +}); + +test('replace numbers', function (t) { + t.plan(1); + + var obj = { a: 1, b: 2, c: false }; + var replacer = function (key, value) { + if (value === 1) { return 'one'; } + if (value === 2) { return 'two'; } + return value; + }; + + t.equal(stringify(obj, { replacer: replacer }), '{"a":"one","b":"two","c":false}'); +}); + +test('replace with object', function (t) { + t.plan(1); + + var obj = { a: 1, b: 2, c: false }; + var replacer = function (key, value) { + if (key === 'b') { return { d: 1 }; } + if (value === 1) { return 'one'; } + return value; + }; + + t.equal(stringify(obj, { replacer: replacer }), '{"a":"one","b":{"d":"one"},"c":false}'); +}); + +test('replace with undefined', function (t) { + t.plan(1); + + var obj = { a: 1, b: 2, c: false }; + var replacer = function (key, value) { + if (value === false) { return; } + return value; + }; + + t.equal(stringify(obj, { replacer: replacer }), '{"a":1,"b":2}'); +}); + +test('replace with array', function (t) { + t.plan(1); + + var obj = { a: 1, b: 2, c: false }; + var replacer = function (key, value) { + if (key === 'b') { return ['one', 'two']; } + return value; + }; + + t.equal(stringify(obj, { replacer: replacer }), '{"a":1,"b":["one","two"],"c":false}'); +}); + +test('replace array item', function (t) { + t.plan(1); + + var obj = { a: 1, b: 2, c: [1, 2] }; + var replacer = function (key, value) { + if (value === 1) { return 'one'; } + if (value === 2) { return 'two'; } + return value; + }; + + t.equal(stringify(obj, { replacer: replacer }), '{"a":"one","b":"two","c":["one","two"]}'); +}); diff --git a/node_modules/json-stable-stringify/test/space.js b/node_modules/json-stable-stringify/test/space.js new file mode 100644 index 000000000..944c02dfa --- /dev/null +++ b/node_modules/json-stable-stringify/test/space.js @@ -0,0 +1,72 @@ +'use strict'; + +var test = require('tape'); +var stringify = require('../'); + +test('space parameter', function (t) { + t.plan(1); + var obj = { one: 1, two: 2 }; + t.equal( + stringify(obj, { space: ' ' }), + '' + + '{\n' + + ' "one": 1,\n' + + ' "two": 2\n' + + '}' + ); +}); + +test('space parameter (with tabs)', function (t) { + t.plan(1); + var obj = { one: 1, two: 2 }; + t.equal( + stringify(obj, { space: '\t' }), + '' + + '{\n' + + '\t"one": 1,\n' + + '\t"two": 2\n' + + '}' + ); +}); + +test('space parameter (with a number)', function (t) { + t.plan(1); + var obj = { one: 1, two: 2 }; + t.equal( + stringify(obj, { space: 3 }), + '' + + '{\n' + + ' "one": 1,\n' + + ' "two": 2\n' + + '}' + ); +}); + +test('space parameter (nested objects)', function (t) { + t.plan(1); + var obj = { one: 1, two: { b: 4, a: [2, 3] } }; + t.equal( + stringify(obj, { space: ' ' }), + '' + + '{\n' + + ' "one": 1,\n' + + ' "two": {\n' + + ' "a": [\n' + + ' 2,\n' + + ' 3\n' + + ' ],\n' + + ' "b": 4\n' + + ' }\n' + + '}' + ); +}); + +test('space parameter (same as native)', function (t) { + t.plan(1); + // for this test, properties need to be in alphabetical order + var obj = { one: 1, two: { a: [2, 3], b: 4 } }; + t.equal( + stringify(obj, { space: ' ' }), + JSON.stringify(obj, null, ' ') + ); +}); diff --git a/node_modules/json-stable-stringify/test/str.js b/node_modules/json-stable-stringify/test/str.js new file mode 100644 index 000000000..ef02f3775 --- /dev/null +++ b/node_modules/json-stable-stringify/test/str.js @@ -0,0 +1,34 @@ +'use strict'; + +var test = require('tape'); +var stringify = require('../'); + +test('simple object', function (t) { + t.plan(1); + var obj = { c: 6, b: [4, 5], a: 3, z: null }; + t.equal(stringify(obj), '{"a":3,"b":[4,5],"c":6,"z":null}'); +}); + +test('object with undefined', function (t) { + t.plan(1); + var obj = { a: 3, z: undefined }; + t.equal(stringify(obj), '{"a":3}'); +}); + +test('array with undefined', function (t) { + t.plan(1); + var obj = [4, undefined, 6]; + t.equal(stringify(obj), '[4,null,6]'); +}); + +test('object with empty string', function (t) { + t.plan(1); + var obj = { a: 3, z: '' }; + t.equal(stringify(obj), '{"a":3,"z":""}'); +}); + +test('array with empty string', function (t) { + t.plan(1); + var obj = [4, '', 6]; + t.equal(stringify(obj), '[4,"",6]'); +}); diff --git a/node_modules/json-stable-stringify/test/to-json.js b/node_modules/json-stable-stringify/test/to-json.js new file mode 100644 index 000000000..b5160ebad --- /dev/null +++ b/node_modules/json-stable-stringify/test/to-json.js @@ -0,0 +1,22 @@ +'use strict'; + +var test = require('tape'); +var stringify = require('../'); + +test('toJSON function', function (t) { + t.plan(1); + var obj = { one: 1, two: 2, toJSON: function () { return { one: 1 }; } }; + t.equal(stringify(obj), '{"one":1}'); +}); + +test('toJSON returns string', function (t) { + t.plan(1); + var obj = { one: 1, two: 2, toJSON: function () { return 'one'; } }; + t.equal(stringify(obj), '"one"'); +}); + +test('toJSON returns array', function (t) { + t.plan(1); + var obj = { one: 1, two: 2, toJSON: function () { return ['one']; } }; + t.equal(stringify(obj), '["one"]'); +}); diff --git a/node_modules/json-stringify-safe/.npmignore b/node_modules/json-stringify-safe/.npmignore new file mode 100644 index 000000000..17d6b3677 --- /dev/null +++ b/node_modules/json-stringify-safe/.npmignore @@ -0,0 +1 @@ +/*.tgz diff --git a/node_modules/json-stringify-safe/CHANGELOG.md b/node_modules/json-stringify-safe/CHANGELOG.md new file mode 100644 index 000000000..42bcb60af --- /dev/null +++ b/node_modules/json-stringify-safe/CHANGELOG.md @@ -0,0 +1,14 @@ +## Unreleased +- Fixes stringify to only take ancestors into account when checking + circularity. + It previously assumed every visited object was circular which led to [false + positives][issue9]. + Uses the tiny serializer I wrote for [Must.js][must] a year and a half ago. +- Fixes calling the `replacer` function in the proper context (`thisArg`). +- Fixes calling the `cycleReplacer` function in the proper context (`thisArg`). +- Speeds serializing by a factor of + Big-O(h-my-god-it-linearly-searched-every-object) it had ever seen. Searching + only the ancestors for a circular references speeds up things considerably. + +[must]: https://github.com/moll/js-must +[issue9]: https://github.com/isaacs/json-stringify-safe/issues/9 diff --git a/node_modules/json-stringify-safe/LICENSE b/node_modules/json-stringify-safe/LICENSE new file mode 100644 index 000000000..19129e315 --- /dev/null +++ b/node_modules/json-stringify-safe/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/json-stringify-safe/Makefile b/node_modules/json-stringify-safe/Makefile new file mode 100644 index 000000000..36088c723 --- /dev/null +++ b/node_modules/json-stringify-safe/Makefile @@ -0,0 +1,35 @@ +NODE_OPTS = +TEST_OPTS = + +love: + @echo "Feel like makin' love." + +test: + @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot $(TEST_OPTS) + +spec: + @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec $(TEST_OPTS) + +autotest: + @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot --watch $(TEST_OPTS) + +autospec: + @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec --watch $(TEST_OPTS) + +pack: + @file=$$(npm pack); echo "$$file"; tar tf "$$file" + +publish: + npm publish + +tag: + git tag "v$$(node -e 'console.log(require("./package").version)')" + +clean: + rm -f *.tgz + npm prune --production + +.PHONY: love +.PHONY: test spec autotest autospec +.PHONY: pack publish tag +.PHONY: clean diff --git a/node_modules/json-stringify-safe/README.md b/node_modules/json-stringify-safe/README.md new file mode 100644 index 000000000..a11f302a3 --- /dev/null +++ b/node_modules/json-stringify-safe/README.md @@ -0,0 +1,52 @@ +# json-stringify-safe + +Like JSON.stringify, but doesn't throw on circular references. + +## Usage + +Takes the same arguments as `JSON.stringify`. + +```javascript +var stringify = require('json-stringify-safe'); +var circularObj = {}; +circularObj.circularRef = circularObj; +circularObj.list = [ circularObj, circularObj ]; +console.log(stringify(circularObj, null, 2)); +``` + +Output: + +```json +{ + "circularRef": "[Circular]", + "list": [ + "[Circular]", + "[Circular]" + ] +} +``` + +## Details + +``` +stringify(obj, serializer, indent, decycler) +``` + +The first three arguments are the same as to JSON.stringify. The last +is an argument that's only used when the object has been seen already. + +The default `decycler` function returns the string `'[Circular]'`. +If, for example, you pass in `function(k,v){}` (return nothing) then it +will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`, +then cyclical objects will always be represented as `{"foo":"bar"}` in +the result. + +``` +stringify.getSerialize(serializer, decycler) +``` + +Returns a serializer that can be used elsewhere. This is the actual +function that's passed to JSON.stringify. + +**Note** that the function returned from `getSerialize` is stateful for now, so +do **not** use it more than once. diff --git a/node_modules/json-stringify-safe/package.json b/node_modules/json-stringify-safe/package.json new file mode 100644 index 000000000..8e17b1266 --- /dev/null +++ b/node_modules/json-stringify-safe/package.json @@ -0,0 +1,31 @@ +{ + "name": "json-stringify-safe", + "version": "5.0.1", + "description": "Like JSON.stringify, but doesn't blow up on circular refs.", + "keywords": [ + "json", + "stringify", + "circular", + "safe" + ], + "homepage": "https://github.com/isaacs/json-stringify-safe", + "bugs": "https://github.com/isaacs/json-stringify-safe/issues", + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "contributors": [ + "Andri Möll (http://themoll.com)" + ], + "license": "ISC", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/json-stringify-safe" + }, + "main": "stringify.js", + "scripts": { + "test": "node test.js" + }, + "devDependencies": { + "mocha": ">= 2.1.0 < 3", + "must": ">= 0.12 < 0.13", + "sinon": ">= 1.12.2 < 2" + } +} diff --git a/node_modules/json-stringify-safe/stringify.js b/node_modules/json-stringify-safe/stringify.js new file mode 100644 index 000000000..124a45218 --- /dev/null +++ b/node_modules/json-stringify-safe/stringify.js @@ -0,0 +1,27 @@ +exports = module.exports = stringify +exports.getSerialize = serializer + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces) +} + +function serializer(replacer, cycleReplacer) { + var stack = [], keys = [] + + if (cycleReplacer == null) cycleReplacer = function(key, value) { + if (stack[0] === value) return "[Circular ~]" + return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]" + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = stack.indexOf(this) + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this) + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key) + if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value) + } + else stack.push(value) + + return replacer == null ? value : replacer.call(this, key, value) + } +} diff --git a/node_modules/json-stringify-safe/test/mocha.opts b/node_modules/json-stringify-safe/test/mocha.opts new file mode 100644 index 000000000..2544e5861 --- /dev/null +++ b/node_modules/json-stringify-safe/test/mocha.opts @@ -0,0 +1,2 @@ +--recursive +--require must diff --git a/node_modules/json-stringify-safe/test/stringify_test.js b/node_modules/json-stringify-safe/test/stringify_test.js new file mode 100644 index 000000000..5b3258317 --- /dev/null +++ b/node_modules/json-stringify-safe/test/stringify_test.js @@ -0,0 +1,246 @@ +var Sinon = require("sinon") +var stringify = require("..") +function jsonify(obj) { return JSON.stringify(obj, null, 2) } + +describe("Stringify", function() { + it("must stringify circular objects", function() { + var obj = {name: "Alice"} + obj.self = obj + var json = stringify(obj, null, 2) + json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) + }) + + it("must stringify circular objects with intermediaries", function() { + var obj = {name: "Alice"} + obj.identity = {self: obj} + var json = stringify(obj, null, 2) + json.must.eql(jsonify({name: "Alice", identity: {self: "[Circular ~]"}})) + }) + + it("must stringify circular objects deeper", function() { + var obj = {name: "Alice", child: {name: "Bob"}} + obj.child.self = obj.child + + stringify(obj, null, 2).must.eql(jsonify({ + name: "Alice", + child: {name: "Bob", self: "[Circular ~.child]"} + })) + }) + + it("must stringify circular objects deeper with intermediaries", function() { + var obj = {name: "Alice", child: {name: "Bob"}} + obj.child.identity = {self: obj.child} + + stringify(obj, null, 2).must.eql(jsonify({ + name: "Alice", + child: {name: "Bob", identity: {self: "[Circular ~.child]"}} + })) + }) + + it("must stringify circular objects in an array", function() { + var obj = {name: "Alice"} + obj.self = [obj, obj] + + stringify(obj, null, 2).must.eql(jsonify({ + name: "Alice", self: ["[Circular ~]", "[Circular ~]"] + })) + }) + + it("must stringify circular objects deeper in an array", function() { + var obj = {name: "Alice", children: [{name: "Bob"}, {name: "Eve"}]} + obj.children[0].self = obj.children[0] + obj.children[1].self = obj.children[1] + + stringify(obj, null, 2).must.eql(jsonify({ + name: "Alice", + children: [ + {name: "Bob", self: "[Circular ~.children.0]"}, + {name: "Eve", self: "[Circular ~.children.1]"} + ] + })) + }) + + it("must stringify circular arrays", function() { + var obj = [] + obj.push(obj) + obj.push(obj) + var json = stringify(obj, null, 2) + json.must.eql(jsonify(["[Circular ~]", "[Circular ~]"])) + }) + + it("must stringify circular arrays with intermediaries", function() { + var obj = [] + obj.push({name: "Alice", self: obj}) + obj.push({name: "Bob", self: obj}) + + stringify(obj, null, 2).must.eql(jsonify([ + {name: "Alice", self: "[Circular ~]"}, + {name: "Bob", self: "[Circular ~]"} + ])) + }) + + it("must stringify repeated objects in objects", function() { + var obj = {} + var alice = {name: "Alice"} + obj.alice1 = alice + obj.alice2 = alice + + stringify(obj, null, 2).must.eql(jsonify({ + alice1: {name: "Alice"}, + alice2: {name: "Alice"} + })) + }) + + it("must stringify repeated objects in arrays", function() { + var alice = {name: "Alice"} + var obj = [alice, alice] + var json = stringify(obj, null, 2) + json.must.eql(jsonify([{name: "Alice"}, {name: "Alice"}])) + }) + + it("must call given decycler and use its output", function() { + var obj = {} + obj.a = obj + obj.b = obj + + var decycle = Sinon.spy(function() { return decycle.callCount }) + var json = stringify(obj, null, 2, decycle) + json.must.eql(jsonify({a: 1, b: 2}, null, 2)) + + decycle.callCount.must.equal(2) + decycle.thisValues[0].must.equal(obj) + decycle.args[0][0].must.equal("a") + decycle.args[0][1].must.equal(obj) + decycle.thisValues[1].must.equal(obj) + decycle.args[1][0].must.equal("b") + decycle.args[1][1].must.equal(obj) + }) + + it("must call replacer and use its output", function() { + var obj = {name: "Alice", child: {name: "Bob"}} + + var replacer = Sinon.spy(bangString) + var json = stringify(obj, replacer, 2) + json.must.eql(jsonify({name: "Alice!", child: {name: "Bob!"}})) + + replacer.callCount.must.equal(4) + replacer.args[0][0].must.equal("") + replacer.args[0][1].must.equal(obj) + replacer.thisValues[1].must.equal(obj) + replacer.args[1][0].must.equal("name") + replacer.args[1][1].must.equal("Alice") + replacer.thisValues[2].must.equal(obj) + replacer.args[2][0].must.equal("child") + replacer.args[2][1].must.equal(obj.child) + replacer.thisValues[3].must.equal(obj.child) + replacer.args[3][0].must.equal("name") + replacer.args[3][1].must.equal("Bob") + }) + + it("must call replacer after describing circular references", function() { + var obj = {name: "Alice"} + obj.self = obj + + var replacer = Sinon.spy(bangString) + var json = stringify(obj, replacer, 2) + json.must.eql(jsonify({name: "Alice!", self: "[Circular ~]!"})) + + replacer.callCount.must.equal(3) + replacer.args[0][0].must.equal("") + replacer.args[0][1].must.equal(obj) + replacer.thisValues[1].must.equal(obj) + replacer.args[1][0].must.equal("name") + replacer.args[1][1].must.equal("Alice") + replacer.thisValues[2].must.equal(obj) + replacer.args[2][0].must.equal("self") + replacer.args[2][1].must.equal("[Circular ~]") + }) + + it("must call given decycler and use its output for nested objects", + function() { + var obj = {} + obj.a = obj + obj.b = {self: obj} + + var decycle = Sinon.spy(function() { return decycle.callCount }) + var json = stringify(obj, null, 2, decycle) + json.must.eql(jsonify({a: 1, b: {self: 2}})) + + decycle.callCount.must.equal(2) + decycle.args[0][0].must.equal("a") + decycle.args[0][1].must.equal(obj) + decycle.args[1][0].must.equal("self") + decycle.args[1][1].must.equal(obj) + }) + + it("must use decycler's output when it returned null", function() { + var obj = {a: "b"} + obj.self = obj + obj.selves = [obj, obj] + + function decycle() { return null } + stringify(obj, null, 2, decycle).must.eql(jsonify({ + a: "b", + self: null, + selves: [null, null] + })) + }) + + it("must use decycler's output when it returned undefined", function() { + var obj = {a: "b"} + obj.self = obj + obj.selves = [obj, obj] + + function decycle() {} + stringify(obj, null, 2, decycle).must.eql(jsonify({ + a: "b", + selves: [null, null] + })) + }) + + it("must throw given a decycler that returns a cycle", function() { + var obj = {} + obj.self = obj + var err + function identity(key, value) { return value } + try { stringify(obj, null, 2, identity) } catch (ex) { err = ex } + err.must.be.an.instanceof(TypeError) + }) + + describe(".getSerialize", function() { + it("must stringify circular objects", function() { + var obj = {a: "b"} + obj.circularRef = obj + obj.list = [obj, obj] + + var json = JSON.stringify(obj, stringify.getSerialize(), 2) + json.must.eql(jsonify({ + "a": "b", + "circularRef": "[Circular ~]", + "list": ["[Circular ~]", "[Circular ~]"] + })) + }) + + // This is the behavior as of Mar 3, 2015. + // The serializer function keeps state inside the returned function and + // so far I'm not sure how to not do that. JSON.stringify's replacer is not + // called _after_ serialization. + xit("must return a function that could be called twice", function() { + var obj = {name: "Alice"} + obj.self = obj + + var json + var serializer = stringify.getSerialize() + + json = JSON.stringify(obj, serializer, 2) + json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) + + json = JSON.stringify(obj, serializer, 2) + json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) + }) + }) +}) + +function bangString(key, value) { + return typeof value == "string" ? value + "!" : value +} diff --git a/node_modules/jsonify/.eslintrc b/node_modules/jsonify/.eslintrc new file mode 100644 index 000000000..fbadd3da5 --- /dev/null +++ b/node_modules/jsonify/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": 0, + "consistent-return": 1, + "func-style": [2, "declaration"], + "max-depth": 1, + "max-lines-per-function": 0, + "max-statements": 0, + "multiline-comment-style": 0, + "no-control-regex": 1, + "no-misleading-character-class": 1, + "no-restricted-syntax": 1, + "no-throw-literal": 0, + "no-unmodified-loop-condition": 0, + "sort-keys": 0, + }, +} diff --git a/node_modules/jsonify/.github/FUNDING.yml b/node_modules/jsonify/.github/FUNDING.yml new file mode 100644 index 000000000..753d84569 --- /dev/null +++ b/node_modules/jsonify/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +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: npm/jsonify +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/node_modules/jsonify/CHANGELOG.md b/node_modules/jsonify/CHANGELOG.md new file mode 100644 index 000000000..1090ee488 --- /dev/null +++ b/node_modules/jsonify/CHANGELOG.md @@ -0,0 +1,48 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v0.0.1](https://github.com/ljharb/jsonify/compare/v0.0.0...v0.0.1) - 2022-10-11 + +### Commits + +- [eslint] fix indentation [`1c92797`](https://github.com/ljharb/jsonify/commit/1c92797745b21701242c14f53308d5edfef54025) +- [eslint] add eslint [`6a05332`](https://github.com/ljharb/jsonify/commit/6a05332907827cdf79a515911aec6e12625f8c5c) +- [readme] rename, add badges, soft-wrap [`cb1bd1a`](https://github.com/ljharb/jsonify/commit/cb1bd1a464733b27acd4e42062bb47f04e4e8064) +- [actions] add reusable workflows [`49710ae`](https://github.com/ljharb/jsonify/commit/49710aef8d4a92178cab79015c487e83e2211a37) +- [eslint] use function decls, but avoid relying on hoisting [`dcba2f4`](https://github.com/ljharb/jsonify/commit/dcba2f47667ca9c77fd3ce97f0c8cfa50d66a371) +- [Tests] switch to `tape` [`d31aaa0`](https://github.com/ljharb/jsonify/commit/d31aaa075e57b13587d81d5c08dede3ec3cd8438) +- [meta] add `auto-changelog` [`474188e`](https://github.com/ljharb/jsonify/commit/474188e42a5074cd43038e9f57c90e88708c3633) +- using travis [`7064ab5`](https://github.com/ljharb/jsonify/commit/7064ab53e5f73fa31e2ce7aa47d210c539662f16) +- [Refactor] `parse`: move fn comments outside of the fn body [`78f111a`](https://github.com/ljharb/jsonify/commit/78f111a8d8810d14a732a6395787b1ff5a2f899f) +- [meta] create FUNDING.yml; add `funding` in package.json [`98db8e1`](https://github.com/ljharb/jsonify/commit/98db8e1d0793f57308fcda823c568f47e90702a1) +- [meta] use `npmignore` to autogenerate an npmignore file [`1732b45`](https://github.com/ljharb/jsonify/commit/1732b4537dd952a04bee290310caed6b5fd3ade7) +- [meta] update URLs [`26ded36`](https://github.com/ljharb/jsonify/commit/26ded3613780aeb41f802f4cf98e3337ac3e783d) +- install notes [`57daaee`](https://github.com/ljharb/jsonify/commit/57daaeeb1c2d7a183cfc32727d5b447a3268c533) +- Only apps should have lockfiles [`1f25819`](https://github.com/ljharb/jsonify/commit/1f2581918edc11f55fac1be574a695444eff0d58) +- [meta] add `safe-publish-latest` [`8f3ef5e`](https://github.com/ljharb/jsonify/commit/8f3ef5e90262167420d71f08fe50a568499563d6) +- [Tests] add `aud` in `posttest` [`4c64711`](https://github.com/ljharb/jsonify/commit/4c64711da1a2c3c20c0c27e4f6d18f61c94df223) +- Update tap. [`8cf38a6`](https://github.com/ljharb/jsonify/commit/8cf38a62f34dd05c812829c6d0a9ee1a9486dc8a) +- fix broken browserify link [`9dc7744`](https://github.com/ljharb/jsonify/commit/9dc77442cc375823640f13086d5737fdd918bccf) + +## v0.0.0 - 2011-08-21 + +### Commits + +- first commit [`11c7bdf`](https://github.com/ljharb/jsonify/commit/11c7bdf47c3f21b014b1e984be52211142d8d8b7) +- the recursive descent parser is the fastest, going with it [`9210504`](https://github.com/ljharb/jsonify/commit/92105047b01811d216777d1b260373431b406f53) +- took out unnecessary functions from json.js, only stringify-related stuff remain [`99a8b65`](https://github.com/ljharb/jsonify/commit/99a8b6580af5dedebb39db18127c671b405c26d3) +- fix parse by removing another callback of indirection [`10e1b96`](https://github.com/ljharb/jsonify/commit/10e1b96b535cd66c0aee768aa6dbfc9778e87dbf) +- Hygiene [`633fe5a`](https://github.com/ljharb/jsonify/commit/633fe5ae4bd69985254a68ae111505ec3d3e74ab) +- a package.json [`5258ce2`](https://github.com/ljharb/jsonify/commit/5258ce240702c78f4affffdc3ea2e095ad04f49f) +- pared down parse.js [`40d8617`](https://github.com/ljharb/jsonify/commit/40d86179553cc972b465c2446f58a7ecda1f24ce) +- Style conformance. [`ad6079c`](https://github.com/ljharb/jsonify/commit/ad6079cbd8dc362a3cc42e1f97c01aa5ccd48bfe) +- forgot the readme and index.js [`69d3062`](https://github.com/ljharb/jsonify/commit/69d306269813548103c027df972d960d1b439eef) +- stringify test using garbage passes [`29db45f`](https://github.com/ljharb/jsonify/commit/29db45f4cd72dca91052baf744656d9561716f55) +- parse test passes too hooray [`d58c20e`](https://github.com/ljharb/jsonify/commit/d58c20ee3e2550490bfb5380ad1b0c085ee12e02) +- Create a JSON object only if one does not already exist. [`8d11dc6`](https://github.com/ljharb/jsonify/commit/8d11dc6950eafc7d01f141ce91d4f585caa29f3b) +- !isFinite [`8e0b15c`](https://github.com/ljharb/jsonify/commit/8e0b15cb492f63067a88ad786e4d5fc0fa89a241) +- move into lib [`006d2aa`](https://github.com/ljharb/jsonify/commit/006d2aaf373382b95801964d5b6505d9b79b3a16) diff --git a/node_modules/jsonify/README.md b/node_modules/jsonify/README.md new file mode 100644 index 000000000..962521b7a --- /dev/null +++ b/node_modules/jsonify/README.md @@ -0,0 +1,66 @@ +# jsonify [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +This module provides Douglas Crockford's JSON implementation without modifying any globals. + +`stringify` and `parse` are merely exported without respect to whether or not a global `JSON` object exists. + +[![build status](https://secure.travis-ci.org/ljharb/jsonify.png)](https://travis-ci.org/ljharb/jsonify) + +# methods + +``` js +var json = require('jsonify'); +``` + +## json.parse(source, reviver) + +Return a new javascript object from a parse of the `source` string. + +If a `reviver` function is specified, walk the structure passing each name/value pair to `reviver.call(parent, key, value)` to transform the `value` before parsing it. + +## json.stringify(value, replacer, space) + +Return a string representation for `value`. + +If `replacer` is specified, walk the structure passing each name/value pair to `replacer.call(parent, key, value)` to transform the `value` before stringifying it. + +If `space` is a number, indent the result by that many spaces. +If `space` is a string, use `space` as the indentation. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install jsonify +``` + +To use this module in the browser, check out +[browserify](https://github.com/browserify/browserify). + +# license + +public domain + +[package-url]: https://npmjs.org/package/jsonify +[npm-version-svg]: https://versionbadg.es/ljharb/jsonify.svg +[deps-svg]: https://david-dm.org/ljharb/jsonify.svg +[deps-url]: https://david-dm.org/ljharb/jsonify +[dev-deps-svg]: https://david-dm.org/ljharb/jsonify/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/jsonify#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/jsonify.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/jsonify.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/jsonify.svg +[downloads-url]: https://npm-stat.com/charts.html?package=jsonify +[codecov-image]: https://codecov.io/gh/ljharb/jsonify/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/jsonify/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/jsonify +[actions-url]: https://github.com/ljharb/jsonify/actions diff --git a/node_modules/jsonify/index.js b/node_modules/jsonify/index.js new file mode 100644 index 000000000..6c0da710f --- /dev/null +++ b/node_modules/jsonify/index.js @@ -0,0 +1,4 @@ +'use strict'; + +exports.parse = require('./lib/parse'); +exports.stringify = require('./lib/stringify'); diff --git a/node_modules/jsonify/lib/parse.js b/node_modules/jsonify/lib/parse.js new file mode 100644 index 000000000..4499e9a65 --- /dev/null +++ b/node_modules/jsonify/lib/parse.js @@ -0,0 +1,261 @@ +'use strict'; + +var at; // The index of the current character +var ch; // The current character +var escapee = { + '"': '"', + '\\': '\\', + '/': '/', + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' +}; +var text; + +// Call error when something is wrong. +function error(m) { + throw { + name: 'SyntaxError', + message: m, + at: at, + text: text + }; +} + +function next(c) { + // If a c parameter is provided, verify that it matches the current character. + if (c && c !== ch) { + error("Expected '" + c + "' instead of '" + ch + "'"); + } + + // Get the next character. When there are no more characters, return the empty string. + + ch = text.charAt(at); + at += 1; + return ch; +} + +function number() { + // Parse a number value. + var num; + var str = ''; + + if (ch === '-') { + str = '-'; + next('-'); + } + while (ch >= '0' && ch <= '9') { + str += ch; + next(); + } + if (ch === '.') { + str += '.'; + while (next() && ch >= '0' && ch <= '9') { + str += ch; + } + } + if (ch === 'e' || ch === 'E') { + str += ch; + next(); + if (ch === '-' || ch === '+') { + str += ch; + next(); + } + while (ch >= '0' && ch <= '9') { + str += ch; + next(); + } + } + num = Number(str); + if (!isFinite(num)) { + error('Bad number'); + } + return num; +} + +function string() { + // Parse a string value. + var hex; + var i; + var str = ''; + var uffff; + + // When parsing for string values, we must look for " and \ characters. + if (ch === '"') { + while (next()) { + if (ch === '"') { + next(); + return str; + } else if (ch === '\\') { + next(); + if (ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = (uffff * 16) + hex; + } + str += String.fromCharCode(uffff); + } else if (typeof escapee[ch] === 'string') { + str += escapee[ch]; + } else { + break; + } + } else { + str += ch; + } + } + } + error('Bad string'); +} + +// Skip whitespace. +function white() { + while (ch && ch <= ' ') { + next(); + } +} + +// true, false, or null. +function word() { + switch (ch) { + case 't': + next('t'); + next('r'); + next('u'); + next('e'); + return true; + case 'f': + next('f'); + next('a'); + next('l'); + next('s'); + next('e'); + return false; + case 'n': + next('n'); + next('u'); + next('l'); + next('l'); + return null; + default: + error("Unexpected '" + ch + "'"); + } +} + +// Parse an array value. +function array() { + var arr = []; + + if (ch === '[') { + next('['); + white(); + if (ch === ']') { + next(']'); + return arr; // empty array + } + while (ch) { + arr.push(value()); // eslint-disable-line no-use-before-define + white(); + if (ch === ']') { + next(']'); + return arr; + } + next(','); + white(); + } + } + error('Bad array'); +} + +// Parse an object value. +function object() { + var key; + var obj = {}; + + if (ch === '{') { + next('{'); + white(); + if (ch === '}') { + next('}'); + return obj; // empty object + } + while (ch) { + key = string(); + white(); + next(':'); + if (Object.prototype.hasOwnProperty.call(obj, key)) { + error('Duplicate key "' + key + '"'); + } + obj[key] = value(); // eslint-disable-line no-use-before-define + white(); + if (ch === '}') { + next('}'); + return obj; + } + next(','); + white(); + } + } + error('Bad object'); +} + +// Parse a JSON value. It could be an object, an array, a string, a number, or a word. +function value() { + white(); + switch (ch) { + case '{': + return object(); + case '[': + return array(); + case '"': + return string(); + case '-': + return number(); + default: + return ch >= '0' && ch <= '9' ? number() : word(); + } +} + +// Return the json_parse function. It will have access to all of the above functions and variables. +module.exports = function (source, reviver) { + var result; + + text = source; + at = 0; + ch = ' '; + result = value(); + white(); + if (ch) { + error('Syntax error'); + } + + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + + return typeof reviver === 'function' ? (function walk(holder, key) { + var k; + var v; + var val = holder[key]; + if (val && typeof val === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(val, k)) { + v = walk(val, k); + if (typeof v === 'undefined') { + delete val[k]; + } else { + val[k] = v; + } + } + } + } + return reviver.call(holder, key, val); + }({ '': result }, '')) : result; +}; diff --git a/node_modules/jsonify/lib/stringify.js b/node_modules/jsonify/lib/stringify.js new file mode 100644 index 000000000..cb4aad64a --- /dev/null +++ b/node_modules/jsonify/lib/stringify.js @@ -0,0 +1,151 @@ +'use strict'; + +var escapable = /[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; +var gap; +var indent; +var meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\' +}; +var rep; + +function quote(string) { + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; +} + +function str(key, holder) { + // Produce a string from holder[key]. + var i; // The loop counter. + var k; // The member key. + var v; // The member value. + var length; + var mind = gap; + var partial; + var value = holder[key]; + + // If the value has a toJSON method, call it to obtain a replacement value. + if (value && typeof value === 'object' && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + // If we were called with a replacer function, then call the replacer to obtain a replacement value. + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + + // What happens next depends on the value's type. + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + // JSON numbers must be finite. Encode non-finite numbers as null. + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce 'null'. The case is included here in + // the remote chance that this gets fixed someday. + return String(value); + + case 'object': + if (!value) { + return 'null'; + } + gap += indent; + partial = []; + + // Array.isArray + if (Object.prototype.toString.apply(value) === '[object Array]') { + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + + // Join all of the elements together, separated with commas, and wrap them in brackets. + v = partial.length === 0 ? '[]' : gap + ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' + : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be stringified. + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + k = rep[i]; + if (typeof k === 'string') { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + // Otherwise, iterate through all of the keys in the object. + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; + gap = mind; + return v; + default: + } +} + +module.exports = function (value, replacer, space) { + var i; + gap = ''; + indent = ''; + + // If the space parameter is a number, make an indent string containing that many spaces. + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + } else if (typeof space === 'string') { + // If the space parameter is a string, it will be used as the indent string. + indent = space; + } + + // If there is a replacer, it must be a function or an array. Otherwise, throw an error. + rep = replacer; + if ( + replacer + && typeof replacer !== 'function' + && (typeof replacer !== 'object' || typeof replacer.length !== 'number') + ) { + throw new Error('JSON.stringify'); + } + + // Make a fake root object containing our value under the key of ''. + // Return the result of stringifying the value. + return str('', { '': value }); +}; diff --git a/node_modules/jsonify/package.json b/node_modules/jsonify/package.json new file mode 100644 index 000000000..686cd56cb --- /dev/null +++ b/node_modules/jsonify/package.json @@ -0,0 +1,62 @@ +{ + "name": "jsonify", + "version": "0.0.1", + "description": "JSON without touching any globals", + "main": "index.js", + "directories": { + "lib": ".", + "test": "test" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.0.0", + "aud": "^2.0.1", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "garbage": "0.0.x", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.1" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "https://github.com/ljharb/jsonify.git" + }, + "keywords": [ + "json", + "browser" + ], + "author": { + "name": "Douglas Crockford", + "url": "https://crockford.com/" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "Public Domain", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/jsonify/test/parse.js b/node_modules/jsonify/test/parse.js new file mode 100644 index 000000000..948841c8b --- /dev/null +++ b/node_modules/jsonify/test/parse.js @@ -0,0 +1,20 @@ +'use strict'; + +var test = require('tape'); + +var json = require('../'); +var garbage = require('garbage'); + +test('parse', function (t) { + for (var i = 0; i < 50; i++) { + var s = JSON.stringify(garbage(50)); + + t.deepEqual( + json.parse(s), + JSON.parse(s), + 'comparing JSON.parse to jsonify.parse: run ' + (i + 1) + ); + } + + t.end(); +}); diff --git a/node_modules/jsonify/test/stringify.js b/node_modules/jsonify/test/stringify.js new file mode 100644 index 000000000..ac1c97524 --- /dev/null +++ b/node_modules/jsonify/test/stringify.js @@ -0,0 +1,18 @@ +'use strict'; + +var test = require('tape'); +var json = require('../'); +var garbage = require('garbage'); + +test('stringify', function (t) { + for (var i = 0; i < 50; i++) { + var obj = garbage(50); + t.equal( + json.stringify(obj), + JSON.stringify(obj), + 'comparing JSON.stringify to jsonify.stringify: run ' + (i + 1) + ); + } + + t.end(); +}); diff --git a/node_modules/jsprim/CHANGES.md b/node_modules/jsprim/CHANGES.md new file mode 100644 index 000000000..0e51ff2b1 --- /dev/null +++ b/node_modules/jsprim/CHANGES.md @@ -0,0 +1,53 @@ +# Changelog + +## not yet released + +None yet. + +## v1.4.2 (2021-11-29) + +* #35 Backport json-schema 0.4.0 to version 1.4.x + +## v1.4.1 (2017-08-02) + +* #21 Update verror dep +* #22 Update extsprintf dependency +* #23 update contribution guidelines + +## v1.4.0 (2017-03-13) + +* #7 Add parseInteger() function for safer number parsing + +## v1.3.1 (2016-09-12) + +* #13 Incompatible with webpack + +## v1.3.0 (2016-06-22) + +* #14 add safer version of hasOwnProperty() +* #15 forEachKey() should ignore inherited properties + +## v1.2.2 (2015-10-15) + +* #11 NPM package shouldn't include any code that does `require('JSV')` +* #12 jsl.node.conf missing definition for "module" + +## v1.2.1 (2015-10-14) + +* #8 odd date parsing behaviour + +## v1.2.0 (2015-10-13) + +* #9 want function for returning RFC1123 dates + +## v1.1.0 (2015-09-02) + +* #6 a new suite of hrtime manipulation routines: `hrtimeAdd()`, + `hrtimeAccum()`, `hrtimeNanosec()`, `hrtimeMicrosec()` and + `hrtimeMillisec()`. + +## v1.0.0 (2015-09-01) + +First tracked release. Includes everything in previous releases, plus: + +* #4 want function for merging objects diff --git a/node_modules/jsprim/CONTRIBUTING.md b/node_modules/jsprim/CONTRIBUTING.md new file mode 100644 index 000000000..750cef8df --- /dev/null +++ b/node_modules/jsprim/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# Contributing + +This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new +changes. Anyone can submit changes. To get started, see the [cr.joyent.us user +guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). +This repo does not use GitHub pull requests. + +See the [Joyent Engineering +Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general +best practices expected in this repository. + +Contributions should be "make prepush" clean. The "prepush" target runs the +"check" target, which requires these separate tools: + +* https://github.com/davepacheco/jsstyle +* https://github.com/davepacheco/javascriptlint + +If you're changing something non-trivial or user-facing, you may want to submit +an issue first. diff --git a/node_modules/jsprim/LICENSE b/node_modules/jsprim/LICENSE new file mode 100644 index 000000000..cbc0bb3ba --- /dev/null +++ b/node_modules/jsprim/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012, Joyent, Inc. All rights reserved. + +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 diff --git a/node_modules/jsprim/README.md b/node_modules/jsprim/README.md new file mode 100644 index 000000000..b3f28a46c --- /dev/null +++ b/node_modules/jsprim/README.md @@ -0,0 +1,287 @@ +# jsprim: utilities for primitive JavaScript types + +This module provides miscellaneous facilities for working with strings, +numbers, dates, and objects and arrays of these basic types. + + +### deepCopy(obj) + +Creates a deep copy of a primitive type, object, or array of primitive types. + + +### deepEqual(obj1, obj2) + +Returns whether two objects are equal. + + +### isEmpty(obj) + +Returns true if the given object has no properties and false otherwise. This +is O(1) (unlike `Object.keys(obj).length === 0`, which is O(N)). + +### hasKey(obj, key) + +Returns true if the given object has an enumerable, non-inherited property +called `key`. [For information on enumerability and ownership of properties, see +the MDN +documentation.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) + +### forEachKey(obj, callback) + +Like Array.forEach, but iterates enumerable, owned properties of an object +rather than elements of an array. Equivalent to: + + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + callback(key, obj[key]); + } + } + + +### flattenObject(obj, depth) + +Flattens an object up to a given level of nesting, returning an array of arrays +of length "depth + 1", where the first "depth" elements correspond to flattened +columns and the last element contains the remaining object . For example: + + flattenObject({ + 'I': { + 'A': { + 'i': { + 'datum1': [ 1, 2 ], + 'datum2': [ 3, 4 ] + }, + 'ii': { + 'datum1': [ 3, 4 ] + } + }, + 'B': { + 'i': { + 'datum1': [ 5, 6 ] + }, + 'ii': { + 'datum1': [ 7, 8 ], + 'datum2': [ 3, 4 ], + }, + 'iii': { + } + } + }, + 'II': { + 'A': { + 'i': { + 'datum1': [ 1, 2 ], + 'datum2': [ 3, 4 ] + } + } + } + }, 3) + +becomes: + + [ + [ 'I', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ], + [ 'I', 'A', 'ii', { 'datum1': [ 3, 4 ] } ], + [ 'I', 'B', 'i', { 'datum1': [ 5, 6 ] } ], + [ 'I', 'B', 'ii', { 'datum1': [ 7, 8 ], 'datum2': [ 3, 4 ] } ], + [ 'I', 'B', 'iii', {} ], + [ 'II', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ] + ] + +This function is strict: "depth" must be a non-negative integer and "obj" must +be a non-null object with at least "depth" levels of nesting under all keys. + + +### flattenIter(obj, depth, func) + +This is similar to `flattenObject` except that instead of returning an array, +this function invokes `func(entry)` for each `entry` in the array that +`flattenObject` would return. `flattenIter(obj, depth, func)` is logically +equivalent to `flattenObject(obj, depth).forEach(func)`. Importantly, this +version never constructs the full array. Its memory usage is O(depth) rather +than O(n) (where `n` is the number of flattened elements). + +There's another difference between `flattenObject` and `flattenIter` that's +related to the special case where `depth === 0`. In this case, `flattenObject` +omits the array wrapping `obj` (which is regrettable). + + +### pluck(obj, key) + +Fetch nested property "key" from object "obj", traversing objects as needed. +For example, `pluck(obj, "foo.bar.baz")` is roughly equivalent to +`obj.foo.bar.baz`, except that: + +1. If traversal fails, the resulting value is undefined, and no error is + thrown. For example, `pluck({}, "foo.bar")` is just undefined. +2. If "obj" has property "key" directly (without traversing), the + corresponding property is returned. For example, + `pluck({ 'foo.bar': 1 }, 'foo.bar')` is 1, not undefined. This is also + true recursively, so `pluck({ 'a': { 'foo.bar': 1 } }, 'a.foo.bar')` is + also 1, not undefined. + + +### randElt(array) + +Returns an element from "array" selected uniformly at random. If "array" is +empty, throws an Error. + + +### startsWith(str, prefix) + +Returns true if the given string starts with the given prefix and false +otherwise. + + +### endsWith(str, suffix) + +Returns true if the given string ends with the given suffix and false +otherwise. + + +### parseInteger(str, options) + +Parses the contents of `str` (a string) as an integer. On success, the integer +value is returned (as a number). On failure, an error is **returned** describing +why parsing failed. + +By default, leading and trailing whitespace characters are not allowed, nor are +trailing characters that are not part of the numeric representation. This +behaviour can be toggled by using the options below. The empty string (`''`) is +not considered valid input. If the return value cannot be precisely represented +as a number (i.e., is smaller than `Number.MIN_SAFE_INTEGER` or larger than +`Number.MAX_SAFE_INTEGER`), an error is returned. Additionally, the string +`'-0'` will be parsed as the integer `0`, instead of as the IEEE floating point +value `-0`. + +This function accepts both upper and lowercase characters for digits, similar to +`parseInt()`, `Number()`, and [strtol(3C)](https://illumos.org/man/3C/strtol). + +The following may be specified in `options`: + +Option | Type | Default | Meaning +------------------ | ------- | ------- | --------------------------- +base | number | 10 | numeric base (radix) to use, in the range 2 to 36 +allowSign | boolean | true | whether to interpret any leading `+` (positive) and `-` (negative) characters +allowImprecise | boolean | false | whether to accept values that may have lost precision (past `MAX_SAFE_INTEGER` or below `MIN_SAFE_INTEGER`) +allowPrefix | boolean | false | whether to interpret the prefixes `0b` (base 2), `0o` (base 8), `0t` (base 10), or `0x` (base 16) +allowTrailing | boolean | false | whether to ignore trailing characters +trimWhitespace | boolean | false | whether to trim any leading or trailing whitespace/line terminators +leadingZeroIsOctal | boolean | false | whether a leading zero indicates octal + +Note that if `base` is unspecified, and `allowPrefix` or `leadingZeroIsOctal` +are, then the leading characters can change the default base from 10. If `base` +is explicitly specified and `allowPrefix` is true, then the prefix will only be +accepted if it matches the specified base. `base` and `leadingZeroIsOctal` +cannot be used together. + +**Context:** It's tricky to parse integers with JavaScript's built-in facilities +for several reasons: + +- `parseInt()` and `Number()` by default allow the base to be specified in the + input string by a prefix (e.g., `0x` for hex). +- `parseInt()` allows trailing nonnumeric characters. +- `Number(str)` returns 0 when `str` is the empty string (`''`). +- Both functions return incorrect values when the input string represents a + valid integer outside the range of integers that can be represented precisely. + Specifically, `parseInt('9007199254740993')` returns 9007199254740992. +- Both functions always accept `-` and `+` signs before the digit. +- Some older JavaScript engines always interpret a leading 0 as indicating + octal, which can be surprising when parsing input from users who expect a + leading zero to be insignificant. + +While each of these may be desirable in some contexts, there are also times when +none of them are wanted. `parseInteger()` grants greater control over what +input's permissible. + +### iso8601(date) + +Converts a Date object to an ISO8601 date string of the form +"YYYY-MM-DDTHH:MM:SS.sssZ". This format is not customizable. + + +### parseDateTime(str) + +Parses a date expressed as a string, as either a number of milliseconds since +the epoch or any string format that Date accepts, giving preference to the +former where these two sets overlap (e.g., strings containing small numbers). + + +### hrtimeDiff(timeA, timeB) + +Given two hrtime readings (as from Node's `process.hrtime()`), where timeA is +later than timeB, compute the difference and return that as an hrtime. It is +illegal to invoke this for a pair of times where timeB is newer than timeA. + +### hrtimeAdd(timeA, timeB) + +Add two hrtime intervals (as from Node's `process.hrtime()`), returning a new +hrtime interval array. This function does not modify either input argument. + + +### hrtimeAccum(timeA, timeB) + +Add two hrtime intervals (as from Node's `process.hrtime()`), storing the +result in `timeA`. This function overwrites (and returns) the first argument +passed in. + + +### hrtimeNanosec(timeA), hrtimeMicrosec(timeA), hrtimeMillisec(timeA) + +This suite of functions converts a hrtime interval (as from Node's +`process.hrtime()`) into a scalar number of nanoseconds, microseconds or +milliseconds. Results are truncated, as with `Math.floor()`. + + +### validateJsonObject(schema, object) + +Uses JSON validation (via JSV) to validate the given object against the given +schema. On success, returns null. On failure, *returns* (does not throw) a +useful Error object. + + +### extraProperties(object, allowed) + +Check an object for unexpected properties. Accepts the object to check, and an +array of allowed property name strings. If extra properties are detected, an +array of extra property names is returned. If no properties other than those +in the allowed list are present on the object, the returned array will be of +zero length. + +### mergeObjects(provided, overrides, defaults) + +Merge properties from objects "provided", "overrides", and "defaults". The +intended use case is for functions that accept named arguments in an "args" +object, but want to provide some default values and override other values. In +that case, "provided" is what the caller specified, "overrides" are what the +function wants to override, and "defaults" contains default values. + +The function starts with the values in "defaults", overrides them with the +values in "provided", and then overrides those with the values in "overrides". +For convenience, any of these objects may be falsey, in which case they will be +ignored. The input objects are never modified, but properties in the returned +object are not deep-copied. + +For example: + + mergeObjects(undefined, { 'objectMode': true }, { 'highWaterMark': 0 }) + +returns: + + { 'objectMode': true, 'highWaterMark': 0 } + +For another example: + + mergeObjects( + { 'highWaterMark': 16, 'objectMode': 7 }, /* from caller */ + { 'objectMode': true }, /* overrides */ + { 'highWaterMark': 0 }); /* default */ + +returns: + + { 'objectMode': true, 'highWaterMark': 16 } + + +# Contributing + +See separate [contribution guidelines](CONTRIBUTING.md). diff --git a/node_modules/jsprim/lib/jsprim.js b/node_modules/jsprim/lib/jsprim.js new file mode 100644 index 000000000..f7d0d81c3 --- /dev/null +++ b/node_modules/jsprim/lib/jsprim.js @@ -0,0 +1,735 @@ +/* + * lib/jsprim.js: utilities for primitive JavaScript types + */ + +var mod_assert = require('assert-plus'); +var mod_util = require('util'); + +var mod_extsprintf = require('extsprintf'); +var mod_verror = require('verror'); +var mod_jsonschema = require('json-schema'); + +/* + * Public interface + */ +exports.deepCopy = deepCopy; +exports.deepEqual = deepEqual; +exports.isEmpty = isEmpty; +exports.hasKey = hasKey; +exports.forEachKey = forEachKey; +exports.pluck = pluck; +exports.flattenObject = flattenObject; +exports.flattenIter = flattenIter; +exports.validateJsonObject = validateJsonObjectJS; +exports.validateJsonObjectJS = validateJsonObjectJS; +exports.randElt = randElt; +exports.extraProperties = extraProperties; +exports.mergeObjects = mergeObjects; + +exports.startsWith = startsWith; +exports.endsWith = endsWith; + +exports.parseInteger = parseInteger; + +exports.iso8601 = iso8601; +exports.rfc1123 = rfc1123; +exports.parseDateTime = parseDateTime; + +exports.hrtimediff = hrtimeDiff; +exports.hrtimeDiff = hrtimeDiff; +exports.hrtimeAccum = hrtimeAccum; +exports.hrtimeAdd = hrtimeAdd; +exports.hrtimeNanosec = hrtimeNanosec; +exports.hrtimeMicrosec = hrtimeMicrosec; +exports.hrtimeMillisec = hrtimeMillisec; + + +/* + * Deep copy an acyclic *basic* Javascript object. This only handles basic + * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects + * containing these. This does *not* handle instances of other classes. + */ +function deepCopy(obj) +{ + var ret, key; + var marker = '__deepCopy'; + + if (obj && obj[marker]) + throw (new Error('attempted deep copy of cyclic object')); + + if (obj && obj.constructor == Object) { + ret = {}; + obj[marker] = true; + + for (key in obj) { + if (key == marker) + continue; + + ret[key] = deepCopy(obj[key]); + } + + delete (obj[marker]); + return (ret); + } + + if (obj && obj.constructor == Array) { + ret = []; + obj[marker] = true; + + for (key = 0; key < obj.length; key++) + ret.push(deepCopy(obj[key])); + + delete (obj[marker]); + return (ret); + } + + /* + * It must be a primitive type -- just return it. + */ + return (obj); +} + +function deepEqual(obj1, obj2) +{ + if (typeof (obj1) != typeof (obj2)) + return (false); + + if (obj1 === null || obj2 === null || typeof (obj1) != 'object') + return (obj1 === obj2); + + if (obj1.constructor != obj2.constructor) + return (false); + + var k; + for (k in obj1) { + if (!obj2.hasOwnProperty(k)) + return (false); + + if (!deepEqual(obj1[k], obj2[k])) + return (false); + } + + for (k in obj2) { + if (!obj1.hasOwnProperty(k)) + return (false); + } + + return (true); +} + +function isEmpty(obj) +{ + var key; + for (key in obj) + return (false); + return (true); +} + +function hasKey(obj, key) +{ + mod_assert.equal(typeof (key), 'string'); + return (Object.prototype.hasOwnProperty.call(obj, key)); +} + +function forEachKey(obj, callback) +{ + for (var key in obj) { + if (hasKey(obj, key)) { + callback(key, obj[key]); + } + } +} + +function pluck(obj, key) +{ + mod_assert.equal(typeof (key), 'string'); + return (pluckv(obj, key)); +} + +function pluckv(obj, key) +{ + if (obj === null || typeof (obj) !== 'object') + return (undefined); + + if (obj.hasOwnProperty(key)) + return (obj[key]); + + var i = key.indexOf('.'); + if (i == -1) + return (undefined); + + var key1 = key.substr(0, i); + if (!obj.hasOwnProperty(key1)) + return (undefined); + + return (pluckv(obj[key1], key.substr(i + 1))); +} + +/* + * Invoke callback(row) for each entry in the array that would be returned by + * flattenObject(data, depth). This is just like flattenObject(data, + * depth).forEach(callback), except that the intermediate array is never + * created. + */ +function flattenIter(data, depth, callback) +{ + doFlattenIter(data, depth, [], callback); +} + +function doFlattenIter(data, depth, accum, callback) +{ + var each; + var key; + + if (depth === 0) { + each = accum.slice(0); + each.push(data); + callback(each); + return; + } + + mod_assert.ok(data !== null); + mod_assert.equal(typeof (data), 'object'); + mod_assert.equal(typeof (depth), 'number'); + mod_assert.ok(depth >= 0); + + for (key in data) { + each = accum.slice(0); + each.push(key); + doFlattenIter(data[key], depth - 1, each, callback); + } +} + +function flattenObject(data, depth) +{ + if (depth === 0) + return ([ data ]); + + mod_assert.ok(data !== null); + mod_assert.equal(typeof (data), 'object'); + mod_assert.equal(typeof (depth), 'number'); + mod_assert.ok(depth >= 0); + + var rv = []; + var key; + + for (key in data) { + flattenObject(data[key], depth - 1).forEach(function (p) { + rv.push([ key ].concat(p)); + }); + } + + return (rv); +} + +function startsWith(str, prefix) +{ + return (str.substr(0, prefix.length) == prefix); +} + +function endsWith(str, suffix) +{ + return (str.substr( + str.length - suffix.length, suffix.length) == suffix); +} + +function iso8601(d) +{ + if (typeof (d) == 'number') + d = new Date(d); + mod_assert.ok(d.constructor === Date); + return (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ', + d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(), + d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), + d.getUTCMilliseconds())); +} + +var RFC1123_MONTHS = [ + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; +var RFC1123_DAYS = [ + 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; + +function rfc1123(date) { + return (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT', + RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(), + RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(), + date.getUTCHours(), date.getUTCMinutes(), + date.getUTCSeconds())); +} + +/* + * Parses a date expressed as a string, as either a number of milliseconds since + * the epoch or any string format that Date accepts, giving preference to the + * former where these two sets overlap (e.g., small numbers). + */ +function parseDateTime(str) +{ + /* + * This is irritatingly implicit, but significantly more concise than + * alternatives. The "+str" will convert a string containing only a + * number directly to a Number, or NaN for other strings. Thus, if the + * conversion succeeds, we use it (this is the milliseconds-since-epoch + * case). Otherwise, we pass the string directly to the Date + * constructor to parse. + */ + var numeric = +str; + if (!isNaN(numeric)) { + return (new Date(numeric)); + } else { + return (new Date(str)); + } +} + + +/* + * Number.*_SAFE_INTEGER isn't present before node v0.12, so we hardcode + * the ES6 definitions here, while allowing for them to someday be higher. + */ +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; +var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; + + +/* + * Default options for parseInteger(). + */ +var PI_DEFAULTS = { + base: 10, + allowSign: true, + allowPrefix: false, + allowTrailing: false, + allowImprecise: false, + trimWhitespace: false, + leadingZeroIsOctal: false +}; + +var CP_0 = 0x30; +var CP_9 = 0x39; + +var CP_A = 0x41; +var CP_B = 0x42; +var CP_O = 0x4f; +var CP_T = 0x54; +var CP_X = 0x58; +var CP_Z = 0x5a; + +var CP_a = 0x61; +var CP_b = 0x62; +var CP_o = 0x6f; +var CP_t = 0x74; +var CP_x = 0x78; +var CP_z = 0x7a; + +var PI_CONV_DEC = 0x30; +var PI_CONV_UC = 0x37; +var PI_CONV_LC = 0x57; + + +/* + * A stricter version of parseInt() that provides options for changing what + * is an acceptable string (for example, disallowing trailing characters). + */ +function parseInteger(str, uopts) +{ + mod_assert.string(str, 'str'); + mod_assert.optionalObject(uopts, 'options'); + + var baseOverride = false; + var options = PI_DEFAULTS; + + if (uopts) { + baseOverride = hasKey(uopts, 'base'); + options = mergeObjects(options, uopts); + mod_assert.number(options.base, 'options.base'); + mod_assert.ok(options.base >= 2, 'options.base >= 2'); + mod_assert.ok(options.base <= 36, 'options.base <= 36'); + mod_assert.bool(options.allowSign, 'options.allowSign'); + mod_assert.bool(options.allowPrefix, 'options.allowPrefix'); + mod_assert.bool(options.allowTrailing, + 'options.allowTrailing'); + mod_assert.bool(options.allowImprecise, + 'options.allowImprecise'); + mod_assert.bool(options.trimWhitespace, + 'options.trimWhitespace'); + mod_assert.bool(options.leadingZeroIsOctal, + 'options.leadingZeroIsOctal'); + + if (options.leadingZeroIsOctal) { + mod_assert.ok(!baseOverride, + '"base" and "leadingZeroIsOctal" are ' + + 'mutually exclusive'); + } + } + + var c; + var pbase = -1; + var base = options.base; + var start; + var mult = 1; + var value = 0; + var idx = 0; + var len = str.length; + + /* Trim any whitespace on the left side. */ + if (options.trimWhitespace) { + while (idx < len && isSpace(str.charCodeAt(idx))) { + ++idx; + } + } + + /* Check the number for a leading sign. */ + if (options.allowSign) { + if (str[idx] === '-') { + idx += 1; + mult = -1; + } else if (str[idx] === '+') { + idx += 1; + } + } + + /* Parse the base-indicating prefix if there is one. */ + if (str[idx] === '0') { + if (options.allowPrefix) { + pbase = prefixToBase(str.charCodeAt(idx + 1)); + if (pbase !== -1 && (!baseOverride || pbase === base)) { + base = pbase; + idx += 2; + } + } + + if (pbase === -1 && options.leadingZeroIsOctal) { + base = 8; + } + } + + /* Parse the actual digits. */ + for (start = idx; idx < len; ++idx) { + c = translateDigit(str.charCodeAt(idx)); + if (c !== -1 && c < base) { + value *= base; + value += c; + } else { + break; + } + } + + /* If we didn't parse any digits, we have an invalid number. */ + if (start === idx) { + return (new Error('invalid number: ' + JSON.stringify(str))); + } + + /* Trim any whitespace on the right side. */ + if (options.trimWhitespace) { + while (idx < len && isSpace(str.charCodeAt(idx))) { + ++idx; + } + } + + /* Check for trailing characters. */ + if (idx < len && !options.allowTrailing) { + return (new Error('trailing characters after number: ' + + JSON.stringify(str.slice(idx)))); + } + + /* If our value is 0, we return now, to avoid returning -0. */ + if (value === 0) { + return (0); + } + + /* Calculate our final value. */ + var result = value * mult; + + /* + * If the string represents a value that cannot be precisely represented + * by JavaScript, then we want to check that: + * + * - We never increased the value past MAX_SAFE_INTEGER + * - We don't make the result negative and below MIN_SAFE_INTEGER + * + * Because we only ever increment the value during parsing, there's no + * chance of moving past MAX_SAFE_INTEGER and then dropping below it + * again, losing precision in the process. This means that we only need + * to do our checks here, at the end. + */ + if (!options.allowImprecise && + (value > MAX_SAFE_INTEGER || result < MIN_SAFE_INTEGER)) { + return (new Error('number is outside of the supported range: ' + + JSON.stringify(str.slice(start, idx)))); + } + + return (result); +} + + +/* + * Interpret a character code as a base-36 digit. + */ +function translateDigit(d) +{ + if (d >= CP_0 && d <= CP_9) { + /* '0' to '9' -> 0 to 9 */ + return (d - PI_CONV_DEC); + } else if (d >= CP_A && d <= CP_Z) { + /* 'A' - 'Z' -> 10 to 35 */ + return (d - PI_CONV_UC); + } else if (d >= CP_a && d <= CP_z) { + /* 'a' - 'z' -> 10 to 35 */ + return (d - PI_CONV_LC); + } else { + /* Invalid character code */ + return (-1); + } +} + + +/* + * Test if a value matches the ECMAScript definition of trimmable whitespace. + */ +function isSpace(c) +{ + return (c === 0x20) || + (c >= 0x0009 && c <= 0x000d) || + (c === 0x00a0) || + (c === 0x1680) || + (c === 0x180e) || + (c >= 0x2000 && c <= 0x200a) || + (c === 0x2028) || + (c === 0x2029) || + (c === 0x202f) || + (c === 0x205f) || + (c === 0x3000) || + (c === 0xfeff); +} + + +/* + * Determine which base a character indicates (e.g., 'x' indicates hex). + */ +function prefixToBase(c) +{ + if (c === CP_b || c === CP_B) { + /* 0b/0B (binary) */ + return (2); + } else if (c === CP_o || c === CP_O) { + /* 0o/0O (octal) */ + return (8); + } else if (c === CP_t || c === CP_T) { + /* 0t/0T (decimal) */ + return (10); + } else if (c === CP_x || c === CP_X) { + /* 0x/0X (hexadecimal) */ + return (16); + } else { + /* Not a meaningful character */ + return (-1); + } +} + + +function validateJsonObjectJS(schema, input) +{ + var report = mod_jsonschema.validate(input, schema); + + if (report.errors.length === 0) + return (null); + + /* Currently, we only do anything useful with the first error. */ + var error = report.errors[0]; + + /* The failed property is given by a URI with an irrelevant prefix. */ + var propname = error['property']; + var reason = error['message'].toLowerCase(); + var i, j; + + /* + * There's at least one case where the property error message is + * confusing at best. We work around this here. + */ + if ((i = reason.indexOf('the property ')) != -1 && + (j = reason.indexOf(' is not defined in the schema and the ' + + 'schema does not allow additional properties')) != -1) { + i += 'the property '.length; + if (propname === '') + propname = reason.substr(i, j - i); + else + propname = propname + '.' + reason.substr(i, j - i); + + reason = 'unsupported property'; + } + + var rv = new mod_verror.VError('property "%s": %s', propname, reason); + rv.jsv_details = error; + return (rv); +} + +function randElt(arr) +{ + mod_assert.ok(Array.isArray(arr) && arr.length > 0, + 'randElt argument must be a non-empty array'); + + return (arr[Math.floor(Math.random() * arr.length)]); +} + +function assertHrtime(a) +{ + mod_assert.ok(a[0] >= 0 && a[1] >= 0, + 'negative numbers not allowed in hrtimes'); + mod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow'); +} + +/* + * Compute the time elapsed between hrtime readings A and B, where A is later + * than B. hrtime readings come from Node's process.hrtime(). There is no + * defined way to represent negative deltas, so it's illegal to diff B from A + * where the time denoted by B is later than the time denoted by A. If this + * becomes valuable, we can define a representation and extend the + * implementation to support it. + */ +function hrtimeDiff(a, b) +{ + assertHrtime(a); + assertHrtime(b); + mod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]), + 'negative differences not allowed'); + + var rv = [ a[0] - b[0], 0 ]; + + if (a[1] >= b[1]) { + rv[1] = a[1] - b[1]; + } else { + rv[0]--; + rv[1] = 1e9 - (b[1] - a[1]); + } + + return (rv); +} + +/* + * Convert a hrtime reading from the array format returned by Node's + * process.hrtime() into a scalar number of nanoseconds. + */ +function hrtimeNanosec(a) +{ + assertHrtime(a); + + return (Math.floor(a[0] * 1e9 + a[1])); +} + +/* + * Convert a hrtime reading from the array format returned by Node's + * process.hrtime() into a scalar number of microseconds. + */ +function hrtimeMicrosec(a) +{ + assertHrtime(a); + + return (Math.floor(a[0] * 1e6 + a[1] / 1e3)); +} + +/* + * Convert a hrtime reading from the array format returned by Node's + * process.hrtime() into a scalar number of milliseconds. + */ +function hrtimeMillisec(a) +{ + assertHrtime(a); + + return (Math.floor(a[0] * 1e3 + a[1] / 1e6)); +} + +/* + * Add two hrtime readings A and B, overwriting A with the result of the + * addition. This function is useful for accumulating several hrtime intervals + * into a counter. Returns A. + */ +function hrtimeAccum(a, b) +{ + assertHrtime(a); + assertHrtime(b); + + /* + * Accumulate the nanosecond component. + */ + a[1] += b[1]; + if (a[1] >= 1e9) { + /* + * The nanosecond component overflowed, so carry to the seconds + * field. + */ + a[0]++; + a[1] -= 1e9; + } + + /* + * Accumulate the seconds component. + */ + a[0] += b[0]; + + return (a); +} + +/* + * Add two hrtime readings A and B, returning the result as a new hrtime array. + * Does not modify either input argument. + */ +function hrtimeAdd(a, b) +{ + assertHrtime(a); + + var rv = [ a[0], a[1] ]; + + return (hrtimeAccum(rv, b)); +} + + +/* + * Check an object for unexpected properties. Accepts the object to check, and + * an array of allowed property names (strings). Returns an array of key names + * that were found on the object, but did not appear in the list of allowed + * properties. If no properties were found, the returned array will be of + * zero length. + */ +function extraProperties(obj, allowed) +{ + mod_assert.ok(typeof (obj) === 'object' && obj !== null, + 'obj argument must be a non-null object'); + mod_assert.ok(Array.isArray(allowed), + 'allowed argument must be an array of strings'); + for (var i = 0; i < allowed.length; i++) { + mod_assert.ok(typeof (allowed[i]) === 'string', + 'allowed argument must be an array of strings'); + } + + return (Object.keys(obj).filter(function (key) { + return (allowed.indexOf(key) === -1); + })); +} + +/* + * Given three sets of properties "provided" (may be undefined), "overrides" + * (required), and "defaults" (may be undefined), construct an object containing + * the union of these sets with "overrides" overriding "provided", and + * "provided" overriding "defaults". None of the input objects are modified. + */ +function mergeObjects(provided, overrides, defaults) +{ + var rv, k; + + rv = {}; + if (defaults) { + for (k in defaults) + rv[k] = defaults[k]; + } + + if (provided) { + for (k in provided) + rv[k] = provided[k]; + } + + if (overrides) { + for (k in overrides) + rv[k] = overrides[k]; + } + + return (rv); +} diff --git a/node_modules/jsprim/node_modules/assert-plus/AUTHORS b/node_modules/jsprim/node_modules/assert-plus/AUTHORS new file mode 100644 index 000000000..1923524fe --- /dev/null +++ b/node_modules/jsprim/node_modules/assert-plus/AUTHORS @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/node_modules/jsprim/node_modules/assert-plus/CHANGES.md b/node_modules/jsprim/node_modules/assert-plus/CHANGES.md new file mode 100644 index 000000000..57d92bfdb --- /dev/null +++ b/node_modules/jsprim/node_modules/assert-plus/CHANGES.md @@ -0,0 +1,14 @@ +# assert-plus Changelog + +## 1.0.0 + +- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input +- Add assert.finite check. Previous assert.number callers should use this if + they expect Infinity inputs to throw. + +## 0.2.0 + +- Fix `assert.object(null)` so it throws +- Fix optional/arrayOf exports for non-type-of asserts +- Add optiona/arrayOf exports for Stream/Date/Regex/uuid +- Add basic unit test coverage diff --git a/node_modules/jsprim/node_modules/assert-plus/README.md b/node_modules/jsprim/node_modules/assert-plus/README.md new file mode 100644 index 000000000..ec200d161 --- /dev/null +++ b/node_modules/jsprim/node_modules/assert-plus/README.md @@ -0,0 +1,162 @@ +# assert-plus + +This library is a super small wrapper over node's assert module that has two +things: (1) the ability to disable assertions with the environment variable +NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like +`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks +like this: + +```javascript + var assert = require('assert-plus'); + + function fooAccount(options, callback) { + assert.object(options, 'options'); + assert.number(options.id, 'options.id'); + assert.bool(options.isManager, 'options.isManager'); + assert.string(options.name, 'options.name'); + assert.arrayOfString(options.email, 'options.email'); + assert.func(callback, 'callback'); + + // Do stuff + callback(null, {}); + } +``` + +# API + +All methods that *aren't* part of node's core assert API are simply assumed to +take an argument, and then a string 'name' that's not a message; `AssertionError` +will be thrown if the assertion fails with a message like: + + AssertionError: foo (string) is required + at test (/home/mark/work/foo/foo.js:3:9) + at Object. (/home/mark/work/foo/foo.js:15:1) + at Module._compile (module.js:446:26) + at Object..js (module.js:464:10) + at Module.load (module.js:353:31) + at Function._load (module.js:311:12) + at Array.0 (module.js:484:10) + at EventEmitter._tickCallback (node.js:190:38) + +from: + +```javascript + function test(foo) { + assert.string(foo, 'foo'); + } +``` + +There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: + +```javascript + function test(foo) { + assert.arrayOfString(foo, 'foo'); + } +``` + +You can assert IFF an argument is not `undefined` (i.e., an optional arg): + +```javascript + assert.optionalString(foo, 'foo'); +``` + +Lastly, you can opt-out of assertion checking altogether by setting the +environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have +lots of assertions, and don't want to pay `typeof ()` taxes to v8 in +production. Be advised: The standard functions re-exported from `assert` are +also disabled in assert-plus if NDEBUG is specified. Using them directly from +the `assert` module avoids this behavior. + +The complete list of APIs is: + +* assert.array +* assert.bool +* assert.buffer +* assert.func +* assert.number +* assert.finite +* assert.object +* assert.string +* assert.stream +* assert.date +* assert.regexp +* assert.uuid +* assert.arrayOfArray +* assert.arrayOfBool +* assert.arrayOfBuffer +* assert.arrayOfFunc +* assert.arrayOfNumber +* assert.arrayOfFinite +* assert.arrayOfObject +* assert.arrayOfString +* assert.arrayOfStream +* assert.arrayOfDate +* assert.arrayOfRegexp +* assert.arrayOfUuid +* assert.optionalArray +* assert.optionalBool +* assert.optionalBuffer +* assert.optionalFunc +* assert.optionalNumber +* assert.optionalFinite +* assert.optionalObject +* assert.optionalString +* assert.optionalStream +* assert.optionalDate +* assert.optionalRegexp +* assert.optionalUuid +* assert.optionalArrayOfArray +* assert.optionalArrayOfBool +* assert.optionalArrayOfBuffer +* assert.optionalArrayOfFunc +* assert.optionalArrayOfNumber +* assert.optionalArrayOfFinite +* assert.optionalArrayOfObject +* assert.optionalArrayOfString +* assert.optionalArrayOfStream +* assert.optionalArrayOfDate +* assert.optionalArrayOfRegexp +* assert.optionalArrayOfUuid +* assert.AssertionError +* assert.fail +* assert.ok +* assert.equal +* assert.notEqual +* assert.deepEqual +* assert.notDeepEqual +* assert.strictEqual +* assert.notStrictEqual +* assert.throws +* assert.doesNotThrow +* assert.ifError + +# Installation + + npm install assert-plus + +## License + +The MIT License (MIT) +Copyright (c) 2012 Mark Cavage + +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. + +## Bugs + +See . diff --git a/node_modules/jsprim/node_modules/assert-plus/assert.js b/node_modules/jsprim/node_modules/assert-plus/assert.js new file mode 100644 index 000000000..26f944eec --- /dev/null +++ b/node_modules/jsprim/node_modules/assert-plus/assert.js @@ -0,0 +1,211 @@ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg); + } + }, + finite: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/jsprim/node_modules/assert-plus/package.json b/node_modules/jsprim/node_modules/assert-plus/package.json new file mode 100644 index 000000000..40d6a5cd8 --- /dev/null +++ b/node_modules/jsprim/node_modules/assert-plus/package.json @@ -0,0 +1,23 @@ +{ + "author": "Mark Cavage ", + "name": "assert-plus", + "description": "Extra assertions on top of node's assert module", + "version": "1.0.0", + "license": "MIT", + "main": "./assert.js", + "devDependencies": { + "tape": "4.2.2", + "faucet": "0.0.1" + }, + "optionalDependencies": {}, + "scripts": { + "test": "./node_modules/.bin/tape tests/*.js | ./node_modules/.bin/faucet" + }, + "repository": { + "type": "git", + "url": "https://github.com/mcavage/node-assert-plus.git" + }, + "engines": { + "node": ">=0.8" + } +} diff --git a/node_modules/jsprim/package.json b/node_modules/jsprim/package.json new file mode 100644 index 000000000..daad74b7f --- /dev/null +++ b/node_modules/jsprim/package.json @@ -0,0 +1,20 @@ +{ + "name": "jsprim", + "version": "1.4.2", + "description": "utilities for primitive JavaScript types", + "main": "./lib/jsprim.js", + "repository": { + "type": "git", + "url": "git://github.com/joyent/node-jsprim.git" + }, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + }, + "license": "MIT" +} diff --git a/node_modules/less/.jscsrc b/node_modules/less/.jscsrc new file mode 100644 index 000000000..a576705f2 --- /dev/null +++ b/node_modules/less/.jscsrc @@ -0,0 +1,73 @@ +{ + "disallowImplicitTypeConversion": ["numeric", "boolean", "binary", "string"], + "disallowKeywords": ["with"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineBreaks": true, + "disallowOperatorBeforeLineBreak": ["."], + "disallowSpaceAfterKeywords": [ + "void"//, + //"typeof" + ], + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~"], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "disallowSpacesInCallExpression": true, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true}, + "disallowTrailingComma": true, + "disallowTrailingWhitespace": true, + "maximumLineLength": 160, + "requireCommaBeforeLineBreak": true, + "requireCurlyBraces": [ "if", + "else", + "for", + "while", + "do", + "try", + "catch"], + "requireOperatorBeforeLineBreak": [ "?", + "=", + "+", + "-", + "/", + "*", + "==", + "===", + "!=", + "!==", + ">", + ">=", + "<", + "<="], + "requireSpaceAfterBinaryOperators": true, + "requireSpaceAfterKeywords": [ + "else", + "case", + "try", + "typeof", + "return", + "if", + "for", + "while", + "do" + ], + "requireSpaceBeforeBlockStatements": true, + "requireSpaceBeforeBinaryOperators": [ + "=", + "+", + "-", + "/", + "*", + "==", + "===", + "!=", + "!==" + ], + "requireSpaceBeforeBlockStatements": true, + "requireSpaceBetweenArguments": true, + "requireSpacesInConditionalExpression": true, + "requireSpacesInForStatement": true, + "requireSpacesInNamedFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "validateIndentation": 4 +} \ No newline at end of file diff --git a/node_modules/less/.jshintrc b/node_modules/less/.jshintrc new file mode 100644 index 000000000..c189e87dc --- /dev/null +++ b/node_modules/less/.jshintrc @@ -0,0 +1,11 @@ +{ + "evil": true, + "latedef": true, + "node": true, + "undef": true, + "unused": "vars", + "noarg": true, + "eqnull": true, + "forin": true, + "predef": ["Promise"] +} diff --git a/node_modules/less/.npmignore b/node_modules/less/.npmignore new file mode 100644 index 000000000..744f6a065 --- /dev/null +++ b/node_modules/less/.npmignore @@ -0,0 +1,9 @@ +.gitattributes +build/ +.grunt/ +benchmark/ +test/ +# re-include test files as they can be useful for plugins that do testing +!test/*.js +tmp/ +gradle/ diff --git a/node_modules/less/.travis.yml b/node_modules/less/.travis.yml new file mode 100644 index 000000000..238fb88d7 --- /dev/null +++ b/node_modules/less/.travis.yml @@ -0,0 +1,15 @@ +language: node_js +node_js: + - "6" + - "4" + - "0.12" + - "0.10" +install: + - npm install -g grunt-cli + - npm install +env: + global: + - PHANTOMJS_CDNURL=http://cnpmjs.org/downloads + - secure: TrNVruWYaUK5ALga1y7wRY+MLjWJECUSCsBmKW5EUmIevOUxqHWu7M89FANKxstEeFRRAGH3QJbloRxnzIgh0U0ah5npE9XA1bYXGO5khoXeIyk7pNRfjIo8aEnJH1Vp8vWA6J6ovxdJ7lCFKEGvGKxGde50knVl7KFVVULlX2U= + - secure: Rzh+CEI7YRvvVkOruPE8Z0dkU0s13V6b6cpqbN72vxbJl/Jm5PUZkjTFJdkWJrW3ErhCKX6EC7XdGvrclqEA9WAqKzrecqCJYqTnw4MwqiAj6F9wqE/BqhoWg4xPxm0MK/7eJMvLCgjNpe+gc1CaeFJZkLSNWn6nOFke+vVlf9Q= +sudo: false diff --git a/node_modules/less/CHANGELOG.md b/node_modules/less/CHANGELOG.md new file mode 100644 index 000000000..1c0ef7a7c --- /dev/null +++ b/node_modules/less/CHANGELOG.md @@ -0,0 +1,595 @@ +# 2.7.2 + +2017-01-04 + + - Revert changes to contrast() function in 2.7.0 + +# 2.7.1 HOTFIX + +2016-05-09 + + - Revert commit 470af20 (source map performance) which broke source maps + +# 2.7.0 + +2016-05-07 + + - Fixes for contrast() function + - Allow root functions for plugins + - Allow semi-colon separators in functions + - Performance improvements for source maps + - Fix "blank page" issue in browser + - Compatibility fixes for Node 6.x + - Fix AST to include single-line comments + - Fix reversion for "color-like" words (outputting color values) + +# 2.6.1 + +2016-03-04 + + - Update Less.js dependencies + - Fix comments after named color regression + - use instanceof operator instead of class comparison optimization + - disallow whitespace in variable calls + +# 2.6.0 + +2016-01-29 + + - Underscore now allowed in dimension unit + - Fixes for import by reference + - Fix for #2384 Changes HTTPRequest "sync" setting to simply hide the page until less has rendered, browser version is now orders of magnitude faster. + - Added ability to cache stylesheets while using modifyVars + - Error when when image-size functions are used in browser-less + - Fixed extend leaking through nested parent selector. #2586 + - Added "or" keyword and allowed arbitrary logical expression in guards + - Fixing #2124 - Parsing Error "Unrecognised input" for color operations + - Logical operator ```and``` now has higher precedence than logical operator ```or```. + - Allow unknown at-rules w/o {} block + +# 2.5.3 + +2015-09-25 + + - Fix import inline a URL + +# 2.5.2 + +2015-09-24 + + - No output should result in an empty sourcemap + - Import inline located inside file imported by reference should not be present in output + - Shorthand colors will stay shorthand + - Make percentage work like other math functions and throw an error on NaN + - Fixed mixin definition matching problem when mixin definition contains parameters with default values + - Observe reference for imported comments + +# 2.5.1 + +2015-05-21 + + - Fix problems with less being async in some browsers + - Minor fix only likely to affect programmatic usage of ruleset find + - Fix error when a namespaced mixin is invoked in global scope + +# 2.5.0 + +2015-04-03 + + - supports the scoped `@plugin` directive to load function plugins + - All directives are bubbled (e.g. supports), not just media + - Performance improvements to the parser - should help non-chrome browsers with very large less files to be a lot quicker. + - the image size function respects include paths like other file functions + - colour functions take a relative argument that applies percentages relatively instead of absolutely + - include paths now allows : as a separator on windows (recognising and not splitting drive names by the backslash) + - `@import (css)` does not pull the directive above comments + - Fix for import statements without quotes sometimes causing issues + - replace supports dimensions and colours + - the browser field is set in the package.json for use with browserify + - another fix to support paths being passed as a string instead of an array + - detached rulesets can be used as default arguments + - Fix a lot of false warnings about extends + - errors written to stderr more consistently + - consistently keep units if strict units is off + - Better support for comments in function all arguments + +# 2.4.0 + +2015-02-07 + + - Support for plugins that pre-process (to add libraries silently etc.) + - Empty sourcemaps now work + - Extract and Length functions now ignore comments in a list (more work to come to fix the general problem) + - fragment urls are treated absolute since they refer to the html document + - Extends on a selector joined with `&` now work better + - Nested mixins work better with !important (regression in 2.3.0) + - The promise dependency is now actually optional (introduced in 2.0.0) + - Files with just `\r` newlines now process ok (regression in 2.0.0) + - When strict units is off and the unit is 1/x, (e.g. 1 / 12px) the unit output is x, previously nothing (regression in 2.0.0) + +# 2.3.1 + +2015-01-28 + + - Fix depends option (regression in 2.3.0) + - Support parent selector (`&`) used in sub element expression (e.g. `:not(.c_&)`) + +# 2.3.0 + +2015-01-27 + + - add `isruleset` function + - add optional import option, causing less to not fail if file not found + - Fix browsers-side cache. + - Many fixes to import reference - support `@support` and keyframe + - Selectors now interpolate pseudo selectors (e.g. `:@{hover}`) + - Fix comments missed off if they were at the end of the file + - Fix !important used with parametric mixins + - Emits warnings for extends when the target is not found + - include-path now works on data-uri + - variables and function calls work for path in data-uri + - Fix absolute paths not working on imports sometimes. + - Unicode BOM removed again + - Misc. bug fixes + +# 2.2.0 + +2015-01-04 + + - do not apply relative paths to svg-gradient and data-uri functions data-uri output + - using import filename interpolation and import inline together now works + - deprecate the compression option (still works, but outputs a warning unless silent) + - The node version of less now has image-size, image-width, image-height which return the image dimensions of a file + - Fixed an issue that could cause the parse to occur more than once and the callback be called multiple times + - if you are outputting to the console, lessc defaults to silent so warnings do not end up in output + - `isunit` function supports `''` to test if a dimension has no unit + - data-uri function now counts characters after base64 encoding instead of bytes before encoding to determine ie8 support + - fix bug effecting guards on pseudo class selectors + - do not cache on the browser when used with modifyVars + - detection if less does not parse last character in file + - detection of whether a file is css now requires `/css`, `.css`, `?css`, `&css` instead of just `css`. You can still tell less the type of file using import options. + - remove extra new line added to sourcemap entry inline file + - support safari extension + - less.parse now exposes a way to get the AST. We do not recommend you use this unless you need to. + +# 2.1.2 + +2014-12-20 + + - Fix for use with requirejs + - Fixes for data-uri function + +# 2.1.1 + +2014-11-27 + + - Improved keyword and anonymous usage with the replace function + - Added `getCSSAppendage` to sourcemap builder to avoid duplication in plugins + - Fix problem with plugins when used with the promises version of render + - If the render callback throws an exception it now propagates instead of calling the callback again with an error + +# 2.1.0 + +2014-11-23 + + - Fixed `isSync` option, it was using sync file operations but promises are guaranteed to call back async. We now support promises as a feature rather than the 1st class way of doing things. + - Browser code is now synchronous again, like in v1, meaning it blocks the site until less is compiled + - Some fixes for variable imports which affected filemanagers when synchronous + - Fixed lessc makefile dependencies option + - output now reports back a imports field with an array of imported files + - relative path test for drive names (so windows only) is now case insensitive + - Fix for IE7 - use getChar instead of indexing array + - variables using !important now output !important, which bubbles up to affect the rule + - livereload cache buster is now treated specially + - upgrade dependencies + +# 2.0.0 + +2014-11-09 + + - Fixed multiplication in non strict units mode to take the left operand unit, in the case that the unit cannot be resolved + - Some fixes for browser cross-compatibility + - browser tests now pass in IE 8-11 and FF + - added index.js and browser.js in root as shortcuts + - fixed some local variable spellings + - support for `@counter-style` directive + +# 2.0.0-b3 + +2014-11-01 + + - some refactoring of browser structure to allow use of api vs normal browser bundle + - browser bundle no longer leaks require + - browser can now be scoped with just window + - browser `useFileCache` defaults to `true`, but file cache is now cleared when refreshing or in watch mode + +# 2.0.0-b2 + +2014-10-26 + + - Imports are now sequenced and so are consistent (previously some complex projects might end up with occasional different orderings) + - Imports with variables are better supported - variables can be specified in sub imports + - Support for rebeccapurple + - Browser can now accept options as attributes on the script tag and the link tags e.g. ` + +-------------------------------------------------------------------------------- + + + + + +## Table of Contents + +- [Examples](#examples) + - [Consuming a source map](#consuming-a-source-map) + - [Generating a source map](#generating-a-source-map) + - [With SourceNode (high level API)](#with-sourcenode-high-level-api) + - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api) +- [API](#api) + - [SourceMapConsumer](#sourcemapconsumer) + - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap) + - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans) + - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition) + - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition) + - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition) + - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources) + - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing) + - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order) + - [SourceMapGenerator](#sourcemapgenerator) + - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap) + - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer) + - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping) + - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent) + - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath) + - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring) + - [SourceNode](#sourcenode) + - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name) + - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath) + - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk) + - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk) + - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent) + - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn) + - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn) + - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep) + - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement) + - [SourceNode.prototype.toString()](#sourcenodeprototypetostring) + - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap) + + + +## Examples + +### Consuming a source map + +```js +var rawSourceMap = { + version: 3, + file: 'min.js', + names: ['bar', 'baz', 'n'], + sources: ['one.js', 'two.js'], + sourceRoot: 'http://example.com/www/js/', + mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' +}; + +var smc = new SourceMapConsumer(rawSourceMap); + +console.log(smc.sources); +// [ 'http://example.com/www/js/one.js', +// 'http://example.com/www/js/two.js' ] + +console.log(smc.originalPositionFor({ + line: 2, + column: 28 +})); +// { source: 'http://example.com/www/js/two.js', +// line: 2, +// column: 10, +// name: 'n' } + +console.log(smc.generatedPositionFor({ + source: 'http://example.com/www/js/two.js', + line: 2, + column: 10 +})); +// { line: 2, column: 28 } + +smc.eachMapping(function (m) { + // ... +}); +``` + +### Generating a source map + +In depth guide: +[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/) + +#### With SourceNode (high level API) + +```js +function compile(ast) { + switch (ast.type) { + case 'BinaryExpression': + return new SourceNode( + ast.location.line, + ast.location.column, + ast.location.source, + [compile(ast.left), " + ", compile(ast.right)] + ); + case 'Literal': + return new SourceNode( + ast.location.line, + ast.location.column, + ast.location.source, + String(ast.value) + ); + // ... + default: + throw new Error("Bad AST"); + } +} + +var ast = parse("40 + 2", "add.js"); +console.log(compile(ast).toStringWithSourceMap({ + file: 'add.js' +})); +// { code: '40 + 2', +// map: [object SourceMapGenerator] } +``` + +#### With SourceMapGenerator (low level API) + +```js +var map = new SourceMapGenerator({ + file: "source-mapped.js" +}); + +map.addMapping({ + generated: { + line: 10, + column: 35 + }, + source: "foo.js", + original: { + line: 33, + column: 2 + }, + name: "christopher" +}); + +console.log(map.toString()); +// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}' +``` + +## API + +Get a reference to the module: + +```js +// Node.js +var sourceMap = require('source-map'); + +// Browser builds +var sourceMap = window.sourceMap; + +// Inside Firefox +const sourceMap = require("devtools/toolkit/sourcemap/source-map.js"); +``` + +### SourceMapConsumer + +A SourceMapConsumer instance represents a parsed source map which we can query +for information about the original file positions by giving it a file position +in the generated source. + +#### new SourceMapConsumer(rawSourceMap) + +The only parameter is the raw source map (either as a string which can be +`JSON.parse`'d, or an object). According to the spec, source maps have the +following attributes: + +* `version`: Which version of the source map spec this map is following. + +* `sources`: An array of URLs to the original source files. + +* `names`: An array of identifiers which can be referenced by individual + mappings. + +* `sourceRoot`: Optional. The URL root from which all sources are relative. + +* `sourcesContent`: Optional. An array of contents of the original source files. + +* `mappings`: A string of base64 VLQs which contain the actual mappings. + +* `file`: Optional. The generated filename this source map is associated with. + +```js +var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData); +``` + +#### SourceMapConsumer.prototype.computeColumnSpans() + +Compute the last column for each generated mapping. The last column is +inclusive. + +```js +// Before: +consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1 }, +// { line: 2, +// column: 10 }, +// { line: 2, +// column: 20 } ] + +consumer.computeColumnSpans(); + +// After: +consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1, +// lastColumn: 9 }, +// { line: 2, +// column: 10, +// lastColumn: 19 }, +// { line: 2, +// column: 20, +// lastColumn: Infinity } ] + +``` + +#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition) + +Returns the original source, line, and column information for the generated +source's line and column positions provided. The only argument is an object with +the following properties: + +* `line`: The line number in the generated source. + +* `column`: The column number in the generated source. + +* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or + `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest + element that is smaller than or greater than the one we are searching for, + respectively, if the exact element cannot be found. Defaults to + `SourceMapConsumer.GREATEST_LOWER_BOUND`. + +and an object is returned with the following properties: + +* `source`: The original source file, or null if this information is not + available. + +* `line`: The line number in the original source, or null if this information is + not available. + +* `column`: The column number in the original source, or null if this + information is not available. + +* `name`: The original identifier, or null if this information is not available. + +```js +consumer.originalPositionFor({ line: 2, column: 10 }) +// { source: 'foo.coffee', +// line: 2, +// column: 2, +// name: null } + +consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 }) +// { source: null, +// line: null, +// column: null, +// name: null } +``` + +#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition) + +Returns the generated line and column information for the original source, +line, and column positions provided. The only argument is an object with +the following properties: + +* `source`: The filename of the original source. + +* `line`: The line number in the original source. + +* `column`: The column number in the original source. + +and an object is returned with the following properties: + +* `line`: The line number in the generated source, or null. + +* `column`: The column number in the generated source, or null. + +```js +consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 }) +// { line: 1, +// column: 56 } +``` + +#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition) + +Returns all generated line and column information for the original source, line, +and column provided. If no column is provided, returns all mappings +corresponding to a either the line we are searching for or the next closest line +that has any mappings. Otherwise, returns all mappings corresponding to the +given line and either the column we are searching for or the next closest column +that has any offsets. + +The only argument is an object with the following properties: + +* `source`: The filename of the original source. + +* `line`: The line number in the original source. + +* `column`: Optional. The column number in the original source. + +and an array of objects is returned, each with the following properties: + +* `line`: The line number in the generated source, or null. + +* `column`: The column number in the generated source, or null. + +```js +consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1 }, +// { line: 2, +// column: 10 }, +// { line: 2, +// column: 20 } ] +``` + +#### SourceMapConsumer.prototype.hasContentsOfAllSources() + +Return true if we have the embedded source content for every source listed in +the source map, false otherwise. + +In other words, if this method returns `true`, then +`consumer.sourceContentFor(s)` will succeed for every source `s` in +`consumer.sources`. + +```js +// ... +if (consumer.hasContentsOfAllSources()) { + consumerReadyCallback(consumer); +} else { + fetchSources(consumer, consumerReadyCallback); +} +// ... +``` + +#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing]) + +Returns the original source content for the source provided. The only +argument is the URL of the original source file. + +If the source content for the given source is not found, then an error is +thrown. Optionally, pass `true` as the second param to have `null` returned +instead. + +```js +consumer.sources +// [ "my-cool-lib.clj" ] + +consumer.sourceContentFor("my-cool-lib.clj") +// "..." + +consumer.sourceContentFor("this is not in the source map"); +// Error: "this is not in the source map" is not in the source map + +consumer.sourceContentFor("this is not in the source map", true); +// null +``` + +#### SourceMapConsumer.prototype.eachMapping(callback, context, order) + +Iterate over each mapping between an original source/line/column and a +generated line/column in this source map. + +* `callback`: The function that is called with each mapping. Mappings have the + form `{ source, generatedLine, generatedColumn, originalLine, originalColumn, + name }` + +* `context`: Optional. If specified, this object will be the value of `this` + every time that `callback` is called. + +* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or + `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over + the mappings sorted by the generated file's line/column order or the + original's source/line/column order, respectively. Defaults to + `SourceMapConsumer.GENERATED_ORDER`. + +```js +consumer.eachMapping(function (m) { console.log(m); }) +// ... +// { source: 'illmatic.js', +// generatedLine: 1, +// generatedColumn: 0, +// originalLine: 1, +// originalColumn: 0, +// name: null } +// { source: 'illmatic.js', +// generatedLine: 2, +// generatedColumn: 0, +// originalLine: 2, +// originalColumn: 0, +// name: null } +// ... +``` +### SourceMapGenerator + +An instance of the SourceMapGenerator represents a source map which is being +built incrementally. + +#### new SourceMapGenerator([startOfSourceMap]) + +You may pass an object with the following properties: + +* `file`: The filename of the generated source that this source map is + associated with. + +* `sourceRoot`: A root for all relative URLs in this source map. + +* `skipValidation`: Optional. When `true`, disables validation of mappings as + they are added. This can improve performance but should be used with + discretion, as a last resort. Even then, one should avoid using this flag when + running tests, if possible. + +```js +var generator = new sourceMap.SourceMapGenerator({ + file: "my-generated-javascript-file.js", + sourceRoot: "http://example.com/app/js/" +}); +``` + +#### SourceMapGenerator.fromSourceMap(sourceMapConsumer) + +Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance. + +* `sourceMapConsumer` The SourceMap. + +```js +var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer); +``` + +#### SourceMapGenerator.prototype.addMapping(mapping) + +Add a single mapping from original source line and column to the generated +source's line and column for this source map being created. The mapping object +should have the following properties: + +* `generated`: An object with the generated line and column positions. + +* `original`: An object with the original line and column positions. + +* `source`: The original source file (relative to the sourceRoot). + +* `name`: An optional original token name for this mapping. + +```js +generator.addMapping({ + source: "module-one.scm", + original: { line: 128, column: 0 }, + generated: { line: 3, column: 456 } +}) +``` + +#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent) + +Set the source content for an original source file. + +* `sourceFile` the URL of the original source file. + +* `sourceContent` the content of the source file. + +```js +generator.setSourceContent("module-one.scm", + fs.readFileSync("path/to/module-one.scm")) +``` + +#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]]) + +Applies a SourceMap for a source file to the SourceMap. +Each mapping to the supplied source file is rewritten using the +supplied SourceMap. Note: The resolution for the resulting mappings +is the minimum of this map and the supplied map. + +* `sourceMapConsumer`: The SourceMap to be applied. + +* `sourceFile`: Optional. The filename of the source file. + If omitted, sourceMapConsumer.file will be used, if it exists. + Otherwise an error will be thrown. + +* `sourceMapPath`: Optional. The dirname of the path to the SourceMap + to be applied. If relative, it is relative to the SourceMap. + + This parameter is needed when the two SourceMaps aren't in the same + directory, and the SourceMap to be applied contains relative source + paths. If so, those relative source paths need to be rewritten + relative to the SourceMap. + + If omitted, it is assumed that both SourceMaps are in the same directory, + thus not needing any rewriting. (Supplying `'.'` has the same effect.) + +#### SourceMapGenerator.prototype.toString() + +Renders the source map being generated to a string. + +```js +generator.toString() +// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}' +``` + +### SourceNode + +SourceNodes provide a way to abstract over interpolating and/or concatenating +snippets of generated JavaScript source code, while maintaining the line and +column information associated between those snippets and the original source +code. This is useful as the final intermediate representation a compiler might +use before outputting the generated JS and source map. + +#### new SourceNode([line, column, source[, chunk[, name]]]) + +* `line`: The original line number associated with this source node, or null if + it isn't associated with an original line. + +* `column`: The original column number associated with this source node, or null + if it isn't associated with an original column. + +* `source`: The original source's filename; null if no filename is provided. + +* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see + below. + +* `name`: Optional. The original identifier. + +```js +var node = new SourceNode(1, 2, "a.cpp", [ + new SourceNode(3, 4, "b.cpp", "extern int status;\n"), + new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"), + new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"), +]); +``` + +#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath]) + +Creates a SourceNode from generated code and a SourceMapConsumer. + +* `code`: The generated code + +* `sourceMapConsumer` The SourceMap for the generated code + +* `relativePath` The optional path that relative sources in `sourceMapConsumer` + should be relative to. + +```js +var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8")); +var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"), + consumer); +``` + +#### SourceNode.prototype.add(chunk) + +Add a chunk of generated JS to this source node. + +* `chunk`: A string snippet of generated JS code, another instance of + `SourceNode`, or an array where each member is one of those things. + +```js +node.add(" + "); +node.add(otherNode); +node.add([leftHandOperandNode, " + ", rightHandOperandNode]); +``` + +#### SourceNode.prototype.prepend(chunk) + +Prepend a chunk of generated JS to this source node. + +* `chunk`: A string snippet of generated JS code, another instance of + `SourceNode`, or an array where each member is one of those things. + +```js +node.prepend("/** Build Id: f783haef86324gf **/\n\n"); +``` + +#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent) + +Set the source content for a source file. This will be added to the +`SourceMap` in the `sourcesContent` field. + +* `sourceFile`: The filename of the source file + +* `sourceContent`: The content of the source file + +```js +node.setSourceContent("module-one.scm", + fs.readFileSync("path/to/module-one.scm")) +``` + +#### SourceNode.prototype.walk(fn) + +Walk over the tree of JS snippets in this node and its children. The walking +function is called once for each snippet of JS and is passed that snippet and +the its original associated source's line/column location. + +* `fn`: The traversal function. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.walk(function (code, loc) { console.log("WALK:", code, loc); }) +// WALK: uno { source: 'b.js', line: 3, column: 4, name: null } +// WALK: dos { source: 'a.js', line: 1, column: 2, name: null } +// WALK: tres { source: 'a.js', line: 1, column: 2, name: null } +// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null } +``` + +#### SourceNode.prototype.walkSourceContents(fn) + +Walk over the tree of SourceNodes. The walking function is called for each +source file content and is passed the filename and source content. + +* `fn`: The traversal function. + +```js +var a = new SourceNode(1, 2, "a.js", "generated from a"); +a.setSourceContent("a.js", "original a"); +var b = new SourceNode(1, 2, "b.js", "generated from b"); +b.setSourceContent("b.js", "original b"); +var c = new SourceNode(1, 2, "c.js", "generated from c"); +c.setSourceContent("c.js", "original c"); + +var node = new SourceNode(null, null, null, [a, b, c]); +node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); }) +// WALK: a.js : original a +// WALK: b.js : original b +// WALK: c.js : original c +``` + +#### SourceNode.prototype.join(sep) + +Like `Array.prototype.join` except for SourceNodes. Inserts the separator +between each of this source node's children. + +* `sep`: The separator. + +```js +var lhs = new SourceNode(1, 2, "a.rs", "my_copy"); +var operand = new SourceNode(3, 4, "a.rs", "="); +var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()"); + +var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]); +var joinedNode = node.join(" "); +``` + +#### SourceNode.prototype.replaceRight(pattern, replacement) + +Call `String.prototype.replace` on the very right-most source snippet. Useful +for trimming white space from the end of a source node, etc. + +* `pattern`: The pattern to replace. + +* `replacement`: The thing to replace the pattern with. + +```js +// Trim trailing white space. +node.replaceRight(/\s*$/, ""); +``` + +#### SourceNode.prototype.toString() + +Return the string representation of this source node. Walks over the tree and +concatenates all the various snippets together to one string. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.toString() +// 'unodostresquatro' +``` + +#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap]) + +Returns the string representation of this tree of source nodes, plus a +SourceMapGenerator which contains all the mappings between the generated and +original sources. + +The arguments are the same as those to `new SourceMapGenerator`. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.toStringWithSourceMap({ file: "my-output-file.js" }) +// { code: 'unodostresquatro', +// map: [object SourceMapGenerator] } +``` diff --git a/node_modules/less/node_modules/source-map/dist/source-map.debug.js b/node_modules/less/node_modules/source-map/dist/source-map.debug.js new file mode 100644 index 000000000..b5ab6382a --- /dev/null +++ b/node_modules/less/node_modules/source-map/dist/source-map.debug.js @@ -0,0 +1,3091 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may 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. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlNDczOGZjNzJhN2IyMzAzOTg4OSIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTBDLFNBQVM7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDL1pBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUEyRDtBQUMzRCxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7Ozs7Ozs7QUMzSUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsb0JBQW1CO0FBQ25CLHFCQUFvQjs7QUFFcEIsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsaUJBQWdCO0FBQ2hCLGtCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNsRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoYUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQzlFQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE2QixNQUFNO0FBQ25DO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUMsc0JBQXFCLCtDQUErQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBLHNCQUFxQiw0QkFBNEI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDempDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzlHQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ2pIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU0NzM4ZmM3MmE3YjIzMDM5ODg5IiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF07XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/node_modules/less/node_modules/source-map/dist/source-map.js b/node_modules/less/node_modules/source-map/dist/source-map.js new file mode 100644 index 000000000..4e630e294 --- /dev/null +++ b/node_modules/less/node_modules/source-map/dist/source-map.js @@ -0,0 +1,3090 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may 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. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/node_modules/less/node_modules/source-map/dist/source-map.min.js b/node_modules/less/node_modules/source-map/dist/source-map.min.js new file mode 100644 index 000000000..f2a46bd02 --- /dev/null +++ b/node_modules/less/node_modules/source-map/dist/source-map.min.js @@ -0,0 +1,2 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&r.setSourceContent(n,t)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function f(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}n.getArg=r;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;p1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),S.push(r),"number"==typeof r.originalLine&&A.push(r)}g(S,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,g(A,a.compareByOriginalPositions),this.__originalMappings=A},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap)\n\t : new BasicSourceMapConsumer(sourceMap);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t if (source != null && sourceRoot != null) {\n\t source = util.join(sourceRoot, source);\n\t }\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: Optional. the column number in the original source.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t if (this.sourceRoot != null) {\n\t needle.source = util.relative(this.sourceRoot, needle.source);\n\t }\n\t if (!this._sources.has(needle.source)) {\n\t return [];\n\t }\n\t needle.source = this._sources.indexOf(needle.source);\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The only parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._sources.toArray().map(function (s) {\n\t return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n\t }, this);\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t if (this.sourceRoot != null) {\n\t source = util.join(this.sourceRoot, source);\n\t }\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t if (this.sourceRoot != null) {\n\t aSource = util.relative(this.sourceRoot, aSource);\n\t }\n\t\n\t if (this._sources.has(aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(aSource)];\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t if (this.sourceRoot != null) {\n\t source = util.relative(this.sourceRoot, source);\n\t }\n\t if (!this._sources.has(source)) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t source = this._sources.indexOf(source);\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The only parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t if (section.consumer.sourceRoot !== null) {\n\t source = util.join(section.consumer.sourceRoot, source);\n\t }\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 42c329f865e32e011afb","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written 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\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex];\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex];\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/less/node_modules/source-map/lib/array-set.js b/node_modules/less/node_modules/source-map/lib/array-set.js new file mode 100644 index 000000000..fbd5c81ca --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/array-set.js @@ -0,0 +1,121 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var has = Object.prototype.hasOwnProperty; +var hasNativeMap = typeof Map !== "undefined"; + +/** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ +function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); +} + +/** + * Static method for creating ArraySet instances from an existing array. + */ +ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; +}; + +/** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ +ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); +}; + +/** + * What is the element at the given index? + * + * @param Number aIdx + */ +ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); +}; + +/** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ +ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); +}; + +exports.ArraySet = ArraySet; diff --git a/node_modules/less/node_modules/source-map/lib/base64-vlq.js b/node_modules/less/node_modules/source-map/lib/base64-vlq.js new file mode 100644 index 000000000..612b40401 --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/base64-vlq.js @@ -0,0 +1,140 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may 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. + */ + +var base64 = require('./base64'); + +// A single base 64 digit can contain 6 bits of data. For the base 64 variable +// length quantities we use in the source map spec, the first bit is the sign, +// the next four bits are the actual value, and the 6th bit is the +// continuation bit. The continuation bit tells us whether there are more +// digits in this value following this digit. +// +// Continuation +// | Sign +// | | +// V V +// 101011 + +var VLQ_BASE_SHIFT = 5; + +// binary: 100000 +var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + +// binary: 011111 +var VLQ_BASE_MASK = VLQ_BASE - 1; + +// binary: 100000 +var VLQ_CONTINUATION_BIT = VLQ_BASE; + +/** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ +function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; +} + +/** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ +function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; +} + +/** + * Returns the base 64 VLQ encoded value. + */ +exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; +}; + +/** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ +exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; +}; diff --git a/node_modules/less/node_modules/source-map/lib/base64.js b/node_modules/less/node_modules/source-map/lib/base64.js new file mode 100644 index 000000000..8aa86b302 --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/base64.js @@ -0,0 +1,67 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + +/** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ +exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); +}; + +/** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ +exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; +}; diff --git a/node_modules/less/node_modules/source-map/lib/binary-search.js b/node_modules/less/node_modules/source-map/lib/binary-search.js new file mode 100644 index 000000000..010ac941e --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/binary-search.js @@ -0,0 +1,111 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +exports.GREATEST_LOWER_BOUND = 1; +exports.LEAST_UPPER_BOUND = 2; + +/** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ +function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } +} + +/** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ +exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; +}; diff --git a/node_modules/less/node_modules/source-map/lib/mapping-list.js b/node_modules/less/node_modules/source-map/lib/mapping-list.js new file mode 100644 index 000000000..06d1274a0 --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/mapping-list.js @@ -0,0 +1,79 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); + +/** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ +function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; +} + +/** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ +function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; +} + +/** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ +MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + +/** + * Add the given source mapping. + * + * @param Object aMapping + */ +MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } +}; + +/** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ +MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; +}; + +exports.MappingList = MappingList; diff --git a/node_modules/less/node_modules/source-map/lib/quick-sort.js b/node_modules/less/node_modules/source-map/lib/quick-sort.js new file mode 100644 index 000000000..6a7caadbb --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/quick-sort.js @@ -0,0 +1,114 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; diff --git a/node_modules/less/node_modules/source-map/lib/source-map-consumer.js b/node_modules/less/node_modules/source-map/lib/source-map-consumer.js new file mode 100644 index 000000000..6abcc280e --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/source-map-consumer.js @@ -0,0 +1,1082 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var binarySearch = require('./binary-search'); +var ArraySet = require('./array-set').ArraySet; +var base64VLQ = require('./base64-vlq'); +var quickSort = require('./quick-sort').quickSort; + +function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); +} + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +exports.SourceMapConsumer = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + +exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; diff --git a/node_modules/less/node_modules/source-map/lib/source-map-generator.js b/node_modules/less/node_modules/source-map/lib/source-map-generator.js new file mode 100644 index 000000000..aff1e7fb2 --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/source-map-generator.js @@ -0,0 +1,416 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var base64VLQ = require('./base64-vlq'); +var util = require('./util'); +var ArraySet = require('./array-set').ArraySet; +var MappingList = require('./mapping-list').MappingList; + +/** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ +function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; +} + +SourceMapGenerator.prototype._version = 3; + +/** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ +SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + +/** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ +SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + +/** + * Set the source content for a source file. + */ +SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + +/** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ +SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + +/** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ +SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + +/** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ +SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + +SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + +/** + * Externalize the source map. + */ +SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + +/** + * Render the source map being generated to a string. + */ +SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + +exports.SourceMapGenerator = SourceMapGenerator; diff --git a/node_modules/less/node_modules/source-map/lib/source-node.js b/node_modules/less/node_modules/source-map/lib/source-node.js new file mode 100644 index 000000000..d196a53f8 --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/source-node.js @@ -0,0 +1,413 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; +var util = require('./util'); + +// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other +// operating systems these days (capturing the result). +var REGEX_NEWLINE = /(\r?\n)/; + +// Newline character code for charCodeAt() comparisons +var NEWLINE_CODE = 10; + +// Private symbol for identifying `SourceNode`s when multiple versions of +// the source-map library are loaded. This MUST NOT CHANGE across +// versions! +var isSourceNode = "$$$isSourceNode$$$"; + +/** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ +function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); +} + +/** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ +SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + +/** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } +}; + +/** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ +SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; +}; + +/** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ +SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; +}; + +/** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ +SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + +/** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + +/** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ +SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; +}; + +/** + * Returns the string representation of this source node along with a source + * map. + */ +SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; +}; + +exports.SourceNode = SourceNode; diff --git a/node_modules/less/node_modules/source-map/lib/util.js b/node_modules/less/node_modules/source-map/lib/util.js new file mode 100644 index 000000000..44e0e4520 --- /dev/null +++ b/node_modules/less/node_modules/source-map/lib/util.js @@ -0,0 +1,417 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ +function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } +} +exports.getArg = getArg; + +var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; +var dataUrlRegexp = /^data:.+\,.+$/; + +function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; +} +exports.urlParse = urlParse; + +function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; +} +exports.urlGenerate = urlGenerate; + +/** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ +function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; +} +exports.normalize = normalize; + +/** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ +function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; +} +exports.join = join; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); +}; + +/** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ +function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); +} +exports.relative = relative; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ +function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ +function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByOriginalPositions = compareByOriginalPositions; + +/** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ +function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + +function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; +} + +/** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ +function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; diff --git a/node_modules/less/node_modules/source-map/package.json b/node_modules/less/node_modules/source-map/package.json new file mode 100644 index 000000000..048e3ae86 --- /dev/null +++ b/node_modules/less/node_modules/source-map/package.json @@ -0,0 +1,72 @@ +{ + "name": "source-map", + "description": "Generates and consumes source maps", + "version": "0.5.7", + "homepage": "https://github.com/mozilla/source-map", + "author": "Nick Fitzgerald ", + "contributors": [ + "Tobias Koppers ", + "Duncan Beevers ", + "Stephen Crane ", + "Ryan Seddon ", + "Miles Elam ", + "Mihai Bazon ", + "Michael Ficarra ", + "Todd Wolfson ", + "Alexander Solovyov ", + "Felix Gnass ", + "Conrad Irwin ", + "usrbincc ", + "David Glasser ", + "Chase Douglas ", + "Evan Wallace ", + "Heather Arthur ", + "Hugh Kennedy ", + "David Glasser ", + "Simon Lydell ", + "Jmeas Smith ", + "Michael Z Goddard ", + "azu ", + "John Gozde ", + "Adam Kirkton ", + "Chris Montgomery ", + "J. Ryan Stinnett ", + "Jack Herrington ", + "Chris Truter ", + "Daniel Espeset ", + "Jamie Wong ", + "Eddy Bruël ", + "Hawken Rives ", + "Gilad Peleg ", + "djchie ", + "Gary Ye ", + "Nicolas Lalevée " + ], + "repository": { + "type": "git", + "url": "http://github.com/mozilla/source-map.git" + }, + "main": "./source-map.js", + "files": [ + "source-map.js", + "lib/", + "dist/source-map.debug.js", + "dist/source-map.js", + "dist/source-map.min.js", + "dist/source-map.min.js.map" + ], + "engines": { + "node": ">=0.10.0" + }, + "license": "BSD-3-Clause", + "scripts": { + "test": "npm run build && node test/run-tests.js", + "build": "webpack --color", + "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" + }, + "devDependencies": { + "doctoc": "^0.15.0", + "webpack": "^1.12.0" + }, + "typings": "source-map" +} diff --git a/node_modules/less/node_modules/source-map/source-map.js b/node_modules/less/node_modules/source-map/source-map.js new file mode 100644 index 000000000..bc88fe820 --- /dev/null +++ b/node_modules/less/node_modules/source-map/source-map.js @@ -0,0 +1,8 @@ +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer; +exports.SourceNode = require('./lib/source-node').SourceNode; diff --git a/node_modules/less/package.json b/node_modules/less/package.json new file mode 100644 index 000000000..d506ad655 --- /dev/null +++ b/node_modules/less/package.json @@ -0,0 +1,96 @@ +{ + "name": "less", + "version": "2.7.3", + "description": "Leaner CSS", + "homepage": "http://lesscss.org", + "author": { + "name": "Alexis Sellier", + "email": "self@cloudhead.net" + }, + "contributors": [ + "The Core Less Team" + ], + "bugs": { + "url": "https://github.com/less/less.js/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/less/less.js.git" + }, + "master": { + "url": "https://github.com/less/less.js/blob/master/", + "raw": "https://raw.githubusercontent.com/less/less.js/master/" + }, + "license": "Apache-2.0", + "bin": { + "lessc": "./bin/lessc" + }, + "main": "index", + "directories": { + "test": "./test" + }, + "jam": { + "main": "./dist/less.js" + }, + "browser": "./dist/less.js", + "engines": { + "node": ">=0.12" + }, + "scripts": { + "test": "grunt test" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "source-map": "^0.5.3", + "request": "2.81.0" + }, + "devDependencies": { + "diff": "^2.2.2", + "grunt": "~0.4.5", + "grunt-browserify": "^5.0.0", + "grunt-contrib-clean": "^1.0.0", + "grunt-contrib-concat": "^1.0.1", + "grunt-contrib-connect": "^1.0.2", + "grunt-contrib-jasmine": "^1.0.3", + "grunt-contrib-jshint": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-jscs": "^2.8.0", + "grunt-saucelabs": "^8.6.2", + "grunt-shell": "^1.3.0", + "jit-grunt": "^0.10.0", + "phantomjs-prebuilt": "^2.1.7", + "time-grunt": "^1.3.0" + }, + "keywords": [ + "compile less", + "css nesting", + "css variable", + "css", + "gradients css", + "gradients css3", + "less compiler", + "less css", + "less mixins", + "less", + "less.js", + "lesscss", + "mixins", + "nested css", + "parser", + "preprocessor", + "bootstrap css", + "bootstrap less", + "style", + "styles", + "stylesheet", + "variables in css", + "css less" + ], + "rawcurrent": "https://raw.github.com/less/less.js/v", + "sourcearchive": "https://github.com/less/less.js/archive/v" +} diff --git a/node_modules/less/test/browser/common.js b/node_modules/less/test/browser/common.js new file mode 100644 index 000000000..887e9cc64 --- /dev/null +++ b/node_modules/less/test/browser/common.js @@ -0,0 +1,227 @@ +/* Add js reporter for sauce */ + +jasmine.getEnv().addReporter(new jasmine.JSReporter2()); + +/* record log messages for testing */ + +var logMessages = []; +window.less = window.less || {}; + +var logLevel_debug = 4, + logLevel_info = 3, + logLevel_warn = 2, + logLevel_error = 1; + +// The amount of logging in the javascript console. +// 3 - Debug, information and errors +// 2 - Information and errors +// 1 - Errors +// 0 - None +// Defaults to 2 + +less.loggers = [ + { + debug: function(msg) { + if (less.options.logLevel >= logLevel_debug) { + logMessages.push(msg); + } + }, + info: function(msg) { + if (less.options.logLevel >= logLevel_info) { + logMessages.push(msg); + } + }, + warn: function(msg) { + if (less.options.logLevel >= logLevel_warn) { + logMessages.push(msg); + } + }, + error: function(msg) { + if (less.options.logLevel >= logLevel_error) { + logMessages.push(msg); + } + } + } +]; + +var testLessEqualsInDocument = function () { + testLessInDocument(testSheet); +}; + +var testLessErrorsInDocument = function (isConsole) { + testLessInDocument(isConsole ? testErrorSheetConsole : testErrorSheet); +}; + +var testLessInDocument = function (testFunc) { + var links = document.getElementsByTagName('link'), + typePattern = /^text\/(x-)?less$/; + + for (var i = 0; i < links.length; i++) { + if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/stylesheet/) && + (links[i].type.match(typePattern)))) { + testFunc(links[i]); + } + } +}; + +var ieFormat = function(text) { + var styleNode = document.createElement('style'); + styleNode.setAttribute('type', 'text/css'); + var headNode = document.getElementsByTagName('head')[0]; + headNode.appendChild(styleNode); + try { + if (styleNode.styleSheet) { + styleNode.styleSheet.cssText = text; + } else { + styleNode.innerText = text; + } + } catch (e) { + throw new Error("Couldn't reassign styleSheet.cssText."); + } + var transformedText = styleNode.styleSheet ? styleNode.styleSheet.cssText : styleNode.innerText; + headNode.removeChild(styleNode); + return transformedText; +}; + +var testSheet = function (sheet) { + it(sheet.id + " should match the expected output", function (done) { + var lessOutputId = sheet.id.replace("original-", ""), + expectedOutputId = "expected-" + lessOutputId, + lessOutputObj, + lessOutput, + expectedOutputHref = document.getElementById(expectedOutputId).href, + expectedOutput = loadFile(expectedOutputHref); + + // Browser spec generates less on the fly, so we need to loose control + less.pageLoadFinished + .then(function () { + lessOutputObj = document.getElementById(lessOutputId); + lessOutput = lessOutputObj.styleSheet ? lessOutputObj.styleSheet.cssText : + (lessOutputObj.innerText || lessOutputObj.innerHTML); + + expectedOutput + .then(function (text) { + if (window.navigator.userAgent.indexOf("MSIE") >= 0 || + window.navigator.userAgent.indexOf("Trident/") >= 0) { + text = ieFormat(text); + } + expect(lessOutput).toEqual(text); + done(); + }); + }); + }); +}; + +//TODO: do it cleaner - the same way as in css + +function extractId(href) { + return href.replace(/^[a-z-]+:\/+?[^\/]+/i, '') // Remove protocol & domain + .replace(/^\//, '') // Remove root / + .replace(/\.[a-zA-Z]+$/, '') // Remove simple extension + .replace(/[^\.\w-]+/g, '-') // Replace illegal characters + .replace(/\./g, ':'); // Replace dots with colons(for valid id) +} + +var waitFor = function (waitFunc) { + return new Promise(function (resolve) { + var timeoutId = setInterval(function () { + if (waitFunc()) { + clearInterval(timeoutId); + resolve(); + } + }, 5); + }); +}; + +var testErrorSheet = function (sheet) { + it(sheet.id + " should match an error", function (done) { + var lessHref = sheet.href, + id = "less-error-message:" + extractId(lessHref), + errorHref = lessHref.replace(/.less$/, ".txt"), + errorFile = loadFile(errorHref), + actualErrorElement, + actualErrorMsg; + + // Less.js sets 10ms timer in order to add error message on top of page. + waitFor(function () { + actualErrorElement = document.getElementById(id); + return actualErrorElement !== null; + }).then(function () { + var innerText = (actualErrorElement.innerHTML + .replace(/

|<\/?p>||<\/a>|
    |<\/?pre( class="?[^">]*"?)?>|<\/li>|<\/?label>/ig, "") + .replace(/<\/h3>/ig, " ") + .replace(/
  • |<\/ul>|
    /ig, "\n")) + .replace(/&/ig, "&") + // for IE8 + .replace(/\r\n/g, "\n") + .replace(/\. \nin/, ". in"); + actualErrorMsg = innerText + .replace(/\n\d+/g, function (lineNo) { + return lineNo + " "; + }) + .replace(/\n\s*in /g, " in ") + .replace(/\n{2,}/g, "\n") + .replace(/\nStack Trace\n[\s\S]*/i, "") + .replace(/\n$/, ""); + errorFile + .then(function (errorTxt) { + errorTxt = errorTxt + .replace(/\{path\}/g, "") + .replace(/\{pathrel\}/g, "") + .replace(/\{pathhref\}/g, "http://localhost:8081/test/less/errors/") + .replace(/\{404status\}/g, " (404)") + .replace(/\{node\}.*\{\/node\}/g, "") + .replace(/\n$/, ""); + expect(actualErrorMsg).toEqual(errorTxt); + if (errorTxt == actualErrorMsg) { + actualErrorElement.style.display = "none"; + } + done(); + }); + }); + }); +}; + +var testErrorSheetConsole = function (sheet) { + it(sheet.id + " should match an error", function (done) { + var lessHref = sheet.href, + id = sheet.id.replace(/^original-less:/, "less-error-message:"), + errorHref = lessHref.replace(/.less$/, ".txt"), + errorFile = loadFile(errorHref), + actualErrorElement = document.getElementById(id), + actualErrorMsg = logMessages[logMessages.length - 1] + .replace(/\nStack Trace\n[\s\S]*/, ""); + + describe("the error", function () { + expect(actualErrorElement).toBe(null); + }); + + errorFile + .then(function (errorTxt) { + errorTxt + .replace(/\{path\}/g, "") + .replace(/\{pathrel\}/g, "") + .replace(/\{pathhref\}/g, "http://localhost:8081/browser/less/") + .replace(/\{404status\}/g, " (404)") + .replace(/\{node\}.*\{\/node\}/g, "") + .trim(); + expect(actualErrorMsg).toEqual(errorTxt); + done(); + }); + }); +}; + +var loadFile = function (href) { + return new Promise(function (resolve, reject) { + var request = new XMLHttpRequest(); + request.open('GET', href, true); + request.onreadystatechange = function () { + if (request.readyState == 4) { + resolve(request.responseText.replace(/\r/g, "")); + } + }; + request.send(null); + }); +}; + +jasmine.DEFAULT_TIMEOUT_INTERVAL = 90000; diff --git a/node_modules/less/test/browser/css/global-vars/simple.css b/node_modules/less/test/browser/css/global-vars/simple.css new file mode 100644 index 000000000..6446ebfd4 --- /dev/null +++ b/node_modules/less/test/browser/css/global-vars/simple.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/node_modules/less/test/browser/css/modify-vars/simple.css b/node_modules/less/test/browser/css/modify-vars/simple.css new file mode 100644 index 000000000..2a58574d8 --- /dev/null +++ b/node_modules/less/test/browser/css/modify-vars/simple.css @@ -0,0 +1,8 @@ +.testisimported { + color: gainsboro; +} +.test { + color1: green; + color2: purple; + scalar: 20; +} diff --git a/node_modules/less/test/browser/css/postProcessor/postProcessor.css b/node_modules/less/test/browser/css/postProcessor/postProcessor.css new file mode 100644 index 000000000..8e5489486 --- /dev/null +++ b/node_modules/less/test/browser/css/postProcessor/postProcessor.css @@ -0,0 +1,4 @@ +hr {height:50px;} +.test { + color: white; +} diff --git a/node_modules/less/test/browser/css/relative-urls/urls.css b/node_modules/less/test/browser/css/relative-urls/urls.css new file mode 100644 index 000000000..8a62a8955 --- /dev/null +++ b/node_modules/less/test/browser/css/relative-urls/urls.css @@ -0,0 +1,36 @@ +@import "http://localhost:8081/test/browser/less/imports/modify-this.css"; +@import "http://localhost:8081/test/browser/less/imports/modify-again.css"; +.modify { + my-url: url("http://localhost:8081/test/browser/less/imports/a.png"); +} +.modify { + my-url: url("http://localhost:8081/test/browser/less/imports/b.png"); +} +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), url(http://localhost:8081/test/browser/less/relative-urls/fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(http://localhost:8081/test/browser/less/relative-urls/images/image.jpg); + background: url("#inline-svg"); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(http://localhost:8081/test/browser/less/relative-urls/bg.jpg) no-repeat, url(http://localhost:8081/test/browser/less/relative-urls/bg.png) repeat-x top left, url(http://localhost:8081/test/browser/less/relative-urls/bg); +} +.values { + url: url('http://localhost:8081/test/browser/less/relative-urls/Trebuchet'); +} diff --git a/node_modules/less/test/browser/css/rootpath-relative/urls.css b/node_modules/less/test/browser/css/rootpath-relative/urls.css new file mode 100644 index 000000000..20b08339d --- /dev/null +++ b/node_modules/less/test/browser/css/rootpath-relative/urls.css @@ -0,0 +1,35 @@ +@import "https://www.github.com/cloudhead/imports/modify-this.css"; +@import "https://www.github.com/cloudhead/imports/modify-again.css"; +.modify { + my-url: url("https://www.github.com/cloudhead/imports/a.png"); +} +.modify { + my-url: url("https://www.github.com/cloudhead/imports/b.png"); +} +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), url(https://www.github.com/cloudhead/less.js/fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(https://www.github.com/cloudhead/less.js/images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(https://www.github.com/cloudhead/less.js/bg.jpg) no-repeat, url(https://www.github.com/cloudhead/less.js/bg.png) repeat-x top left, url(https://www.github.com/cloudhead/less.js/bg); +} +.values { + url: url('https://www.github.com/cloudhead/less.js/Trebuchet'); +} diff --git a/node_modules/less/test/browser/css/rootpath/urls.css b/node_modules/less/test/browser/css/rootpath/urls.css new file mode 100644 index 000000000..1a5060ef9 --- /dev/null +++ b/node_modules/less/test/browser/css/rootpath/urls.css @@ -0,0 +1,35 @@ +@import "https://localhost/modify-this.css"; +@import "https://localhost/modify-again.css"; +.modify { + my-url: url("https://localhost/a.png"); +} +.modify { + my-url: url("https://localhost/b.png"); +} +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), url(https://localhost/fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(https://localhost/images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(https://localhost/bg.jpg) no-repeat, url(https://localhost/bg.png) repeat-x top left, url(https://localhost/bg); +} +.values { + url: url('https://localhost/Trebuchet'); +} diff --git a/node_modules/less/test/browser/css/urls.css b/node_modules/less/test/browser/css/urls.css new file mode 100644 index 000000000..515b893b1 --- /dev/null +++ b/node_modules/less/test/browser/css/urls.css @@ -0,0 +1,57 @@ +@import "http://localhost:8081/test/browser/less/modify-this.css"; +@import "http://localhost:8081/test/browser/less/modify-again.css"; +.modify { + my-url: url("http://localhost:8081/test/browser/less/a.png"); +} +.modify { + my-url: url("http://localhost:8081/test/browser/less/b.png"); +} +.gray-gradient { + background: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220%22%2F%3E%3Cstop%20offset%3D%2260%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.05%22%2F%3E%3Cstop%20offset%3D%2270%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.1%22%2F%3E%3Cstop%20offset%3D%2273%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.15%22%2F%3E%3Cstop%20offset%3D%2275%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.2%22%2F%3E%3Cstop%20offset%3D%2280%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.25%22%2F%3E%3Cstop%20offset%3D%2285%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.3%22%2F%3E%3Cstop%20offset%3D%2288%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.35%22%2F%3E%3Cstop%20offset%3D%2290%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.4%22%2F%3E%3Cstop%20offset%3D%2295%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.45%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.5%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); +} +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), url(http://localhost:8081/test/browser/less/fonts.svg#MyGeometricModern) format("svg"); + not-a-comment: url(//z); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(http://localhost:8081/test/browser/less/images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(http://localhost:8081/test/browser/less/bg.jpg) no-repeat, url(http://localhost:8081/test/browser/less/bg.png) repeat-x top left, url(http://localhost:8081/test/browser/less/bg); +} +.values { + url: url('http://localhost:8081/test/browser/less/Trebuchet'); +} +#data-uri { + uri: url('http://localhost:8081/test/data/image.jpg'); +} +#data-uri-guess { + uri: url('http://localhost:8081/test/data/image.jpg'); +} +#data-uri-ascii { + uri-1: url('http://localhost:8081/test/data/page.html'); + uri-2: url('http://localhost:8081/test/data/page.html'); +} +#data-uri-toobig { + uri: url('http://localhost:8081/test/data/data-uri-fail.png'); +} +#svg-functions { + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23000000%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23000000%22%2F%3E%3Cstop%20offset%3D%223%25%22%20stop-color%3D%22%23ffa500%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%221%25%22%20stop-color%3D%22%23c4c4c4%22%2F%3E%3Cstop%20offset%3D%223%25%22%20stop-color%3D%22%23ffa500%22%2F%3E%3Cstop%20offset%3D%225%25%22%20stop-color%3D%22%23008000%22%2F%3E%3Cstop%20offset%3D%2295%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); +} diff --git a/node_modules/less/test/browser/jasmine-jsreporter.js b/node_modules/less/test/browser/jasmine-jsreporter.js new file mode 100644 index 000000000..0d5562999 --- /dev/null +++ b/node_modules/less/test/browser/jasmine-jsreporter.js @@ -0,0 +1,391 @@ +/* + This file is part of the Jasmine JSReporter project from Ivan De Marino. + + Copyright (C) 2011-2014 Ivan De Marino + Copyright (C) 2014 Alex Treppass + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + * Neither the name of the nor the + names of its contributors may 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 IVAN DE MARINO 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. + */ +(function (jasmine) { + + if (!jasmine) { + throw new Error("[Jasmine JSReporter] 'Jasmine' library not found"); + } + + // ------------------------------------------------------------------------ + // Jasmine JSReporter for Jasmine 1.x + // ------------------------------------------------------------------------ + + /** + * Calculate elapsed time, in Seconds. + * @param startMs Start time in Milliseconds + * @param finishMs Finish time in Milliseconds + * @return Elapsed time in Seconds */ + function elapsedSec (startMs, finishMs) { + return (finishMs - startMs) / 1000; + } + + /** + * Round an amount to the given number of Digits. + * If no number of digits is given, than '2' is assumed. + * @param amount Amount to round + * @param numOfDecDigits Number of Digits to round to. Default value is '2'. + * @return Rounded amount */ + function round (amount, numOfDecDigits) { + numOfDecDigits = numOfDecDigits || 2; + return Math.round(amount * Math.pow(10, numOfDecDigits)) / Math.pow(10, numOfDecDigits); + } + + /** + * Create a new array which contains only the failed items. + * @param items Items which will be filtered + * @returns {Array} of failed items */ + function failures (items) { + var fs = [], i, v; + for (i = 0; i < items.length; i += 1) { + v = items[i]; + if (!v.passed_) { + fs.push(v); + } + } + return fs; + } + + /** + * Collect information about a Suite, recursively, and return a JSON result. + * @param suite The Jasmine Suite to get data from + */ + function getSuiteData (suite) { + var suiteData = { + description : suite.description, + durationSec : 0, + specs: [], + suites: [], + passed: true + }, + specs = suite.specs(), + suites = suite.suites(), + i, ilen; + + // Loop over all the Suite's Specs + for (i = 0, ilen = specs.length; i < ilen; ++i) { + suiteData.specs[i] = { + description : specs[i].description, + durationSec : specs[i].durationSec, + passed : specs[i].results().passedCount === specs[i].results().totalCount, + skipped : specs[i].results().skipped, + passedCount : specs[i].results().passedCount, + failedCount : specs[i].results().failedCount, + totalCount : specs[i].results().totalCount, + failures: failures(specs[i].results().getItems()) + }; + suiteData.passed = !suiteData.specs[i].passed ? false : suiteData.passed; + suiteData.durationSec += suiteData.specs[i].durationSec; + } + + // Loop over all the Suite's sub-Suites + for (i = 0, ilen = suites.length; i < ilen; ++i) { + suiteData.suites[i] = getSuiteData(suites[i]); //< recursive population + suiteData.passed = !suiteData.suites[i].passed ? false : suiteData.passed; + suiteData.durationSec += suiteData.suites[i].durationSec; + } + + // Rounding duration numbers to 3 decimal digits + suiteData.durationSec = round(suiteData.durationSec, 4); + + return suiteData; + } + + var JSReporter = function () { + }; + + JSReporter.prototype = { + reportRunnerStarting: function (runner) { + // Nothing to do + }, + + reportSpecStarting: function (spec) { + // Start timing this spec + spec.startedAt = new Date(); + }, + + reportSpecResults: function (spec) { + // Finish timing this spec and calculate duration/delta (in sec) + spec.finishedAt = new Date(); + // If the spec was skipped, reportSpecStarting is never called and spec.startedAt is undefined + spec.durationSec = spec.startedAt ? elapsedSec(spec.startedAt.getTime(), spec.finishedAt.getTime()) : 0; + }, + + reportSuiteResults: function (suite) { + // Nothing to do + }, + + reportRunnerResults: function (runner) { + var suites = runner.suites(), + i, j, ilen; + + // Attach results to the "jasmine" object to make those results easy to scrap/find + jasmine.runnerResults = { + suites: [], + durationSec : 0, + passed : true + }; + + // Loop over all the Suites + for (i = 0, ilen = suites.length, j = 0; i < ilen; ++i) { + if (suites[i].parentSuite === null) { + jasmine.runnerResults.suites[j] = getSuiteData(suites[i]); + // If 1 suite fails, the whole runner fails + jasmine.runnerResults.passed = !jasmine.runnerResults.suites[j].passed ? false : jasmine.runnerResults.passed; + // Add up all the durations + jasmine.runnerResults.durationSec += jasmine.runnerResults.suites[j].durationSec; + j++; + } + } + + // Decorate the 'jasmine' object with getters + jasmine.getJSReport = function () { + if (jasmine.runnerResults) { + return jasmine.runnerResults; + } + return null; + }; + jasmine.getJSReportAsString = function () { + return JSON.stringify(jasmine.getJSReport()); + }; + } + }; + + // export public + jasmine.JSReporter = JSReporter; + + // ------------------------------------------------------------------------ + // Jasmine JSReporter for Jasmine 2.0 + // ------------------------------------------------------------------------ + + /* + Simple timer implementation + */ + var Timer = function () {}; + + Timer.prototype.start = function () { + this.startTime = new Date().getTime(); + return this; + }; + + Timer.prototype.elapsed = function () { + if (this.startTime == null) { + return -1; + } + return new Date().getTime() - this.startTime; + }; + + /* + Utility methods + */ + var _extend = function (obj1, obj2) { + for (var prop in obj2) { + obj1[prop] = obj2[prop]; + } + return obj1; + }; + var _clone = function (obj) { + if (obj !== Object(obj)) { + return obj; + } + return _extend({}, obj); + }; + + jasmine.JSReporter2 = function () { + this.specs = {}; + this.suites = {}; + this.rootSuites = []; + this.suiteStack = []; + + // export methods under jasmine namespace + jasmine.getJSReport = this.getJSReport; + jasmine.getJSReportAsString = this.getJSReportAsString; + }; + + var JSR = jasmine.JSReporter2.prototype; + + // Reporter API methods + // -------------------- + + JSR.suiteStarted = function (suite) { + suite = this._cacheSuite(suite); + // build up suite tree as we go + suite.specs = []; + suite.suites = []; + suite.passed = true; + suite.parentId = this.suiteStack.slice(this.suiteStack.length - 1)[0]; + if (suite.parentId) { + this.suites[suite.parentId].suites.push(suite); + } else { + this.rootSuites.push(suite.id); + } + this.suiteStack.push(suite.id); + suite.timer = new Timer().start(); + }; + + JSR.suiteDone = function (suite) { + suite = this._cacheSuite(suite); + suite.duration = suite.timer.elapsed(); + suite.durationSec = suite.duration / 1000; + this.suiteStack.pop(); + + // maintain parent suite state + var parent = this.suites[suite.parentId]; + if (parent) { + parent.passed = parent.passed && suite.passed; + } + + // keep report representation clean + delete suite.timer; + delete suite.id; + delete suite.parentId; + delete suite.fullName; + }; + + JSR.specStarted = function (spec) { + spec = this._cacheSpec(spec); + spec.timer = new Timer().start(); + // build up suites->spec tree as we go + spec.suiteId = this.suiteStack.slice(this.suiteStack.length - 1)[0]; + this.suites[spec.suiteId].specs.push(spec); + }; + + JSR.specDone = function (spec) { + spec = this._cacheSpec(spec); + + spec.duration = spec.timer.elapsed(); + spec.durationSec = spec.duration / 1000; + + spec.skipped = spec.status === 'pending'; + spec.passed = spec.skipped || spec.status === 'passed'; + + spec.totalCount = spec.passedExpectations.length + spec.failedExpectations.length; + spec.passedCount = spec.passedExpectations.length; + spec.failedCount = spec.failedExpectations.length; + spec.failures = []; + + for (var i = 0, j = spec.failedExpectations.length; i < j; i++) { + var fail = spec.failedExpectations[i]; + spec.failures.push({ + type: 'expect', + expected: fail.expected, + passed: false, + message: fail.message, + matcherName: fail.matcherName, + trace: { + stack: fail.stack + } + }); + } + + // maintain parent suite state + var parent = this.suites[spec.suiteId]; + if (spec.failed) { + parent.failingSpecs.push(spec); + } + parent.passed = parent.passed && spec.passed; + + // keep report representation clean + delete spec.timer; + delete spec.totalExpectations; + delete spec.passedExpectations; + delete spec.suiteId; + delete spec.fullName; + delete spec.id; + delete spec.status; + delete spec.failedExpectations; + }; + + JSR.jasmineDone = function () { + this._buildReport(); + }; + + JSR.getJSReport = function () { + if (jasmine.jsReport) { + return jasmine.jsReport; + } + }; + + JSR.getJSReportAsString = function () { + if (jasmine.jsReport) { + return JSON.stringify(jasmine.jsReport); + } + }; + + // Private methods + // --------------- + + JSR._haveSpec = function (spec) { + return this.specs[spec.id] != null; + }; + + JSR._cacheSpec = function (spec) { + var existing = this.specs[spec.id]; + if (existing == null) { + existing = this.specs[spec.id] = _clone(spec); + } else { + _extend(existing, spec); + } + return existing; + }; + + JSR._haveSuite = function (suite) { + return this.suites[suite.id] != null; + }; + + JSR._cacheSuite = function (suite) { + var existing = this.suites[suite.id]; + if (existing == null) { + existing = this.suites[suite.id] = _clone(suite); + } else { + _extend(existing, suite); + } + return existing; + }; + + JSR._buildReport = function () { + var overallDuration = 0; + var overallPassed = true; + var overallSuites = []; + + for (var i = 0, j = this.rootSuites.length; i < j; i++) { + var suite = this.suites[this.rootSuites[i]]; + overallDuration += suite.duration; + overallPassed = overallPassed && suite.passed; + overallSuites.push(suite); + } + + jasmine.jsReport = { + passed: overallPassed, + durationSec: overallDuration / 1000, + suites: overallSuites + }; + }; + +})(jasmine); diff --git a/node_modules/less/test/browser/less.js b/node_modules/less/test/browser/less.js new file mode 100644 index 000000000..7ca0c98bb --- /dev/null +++ b/node_modules/less/test/browser/less.js @@ -0,0 +1,29 @@ +/*! + * Less - Leaner CSS v2.7.2 + * http://lesscss.org + * + * Copyright (c) 2009-2017, Alexis Sellier + * Licensed under the Apache-2.0 License. + * + */ + + /** * @license Apache-2.0 + */ + +/*! + * Less - Leaner CSS v2.7.2 + * http://lesscss.org + * + * Copyright (c) 2009-2017, Alexis Sellier + * Licensed under the Apache-2.0 License. + * + */ + + /** * @license Apache-2.0 + */ + +!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.less=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0||b.isFileProtocol?"development":"production");var c=/!dumpLineNumbers:(comments|mediaquery|all)/.exec(a.location.hash);c&&(b.dumpLineNumbers=c[1]),void 0===b.useFileCache&&(b.useFileCache=!0),void 0===b.onReady&&(b.onReady=!0)}},{"./browser":3,"./utils":10}],2:[function(a,b,c){function d(a){a.filename&&console.warn(a),e.async||h.removeChild(i)}a("promise/polyfill.js");var e=window.less||{};a("./add-default-options")(window,e);var f=b.exports=a("./index")(window,e);window.less=f;var g,h,i;e.onReady&&(/!watch/.test(window.location.hash)&&f.watch(),e.async||(g="body { display: none !important }",h=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style"),i.type="text/css",i.styleSheet?i.styleSheet.cssText=g:i.appendChild(document.createTextNode(g)),h.appendChild(i)),f.registerStylesheetsImmediately(),f.pageLoadFinished=f.refresh("development"===f.env).then(d,d))},{"./add-default-options":1,"./index":8,"promise/polyfill.js":97}],3:[function(a,b,c){var d=a("./utils");b.exports={createCSS:function(a,b,c){var e=c.href||"",f="less:"+(c.title||d.extractId(e)),g=a.getElementById(f),h=!1,i=a.createElement("style");i.setAttribute("type","text/css"),c.media&&i.setAttribute("media",c.media),i.id=f,i.styleSheet||(i.appendChild(a.createTextNode(b)),h=null!==g&&g.childNodes.length>0&&i.childNodes.length>0&&g.firstChild.nodeValue===i.firstChild.nodeValue);var j=a.getElementsByTagName("head")[0];if(null===g||h===!1){var k=c&&c.nextSibling||null;k?k.parentNode.insertBefore(i,k):j.appendChild(i)}if(g&&h===!1&&g.parentNode.removeChild(g),i.styleSheet)try{i.styleSheet.cssText=b}catch(l){throw new Error("Couldn't reassign styleSheet.cssText.")}},currentScript:function(a){var b=a.document;return b.currentScript||function(){var a=b.getElementsByTagName("script");return a[a.length-1]}()}}},{"./utils":10}],4:[function(a,b,c){b.exports=function(a,b,c){var d=null;if("development"!==b.env)try{d="undefined"==typeof a.localStorage?null:a.localStorage}catch(e){}return{setCSS:function(a,b,e,f){if(d){c.info("saving "+a+" to cache.");try{d.setItem(a,f),d.setItem(a+":timestamp",b),e&&d.setItem(a+":vars",JSON.stringify(e))}catch(g){c.error('failed to save "'+a+'" to local storage for caching.')}}},getCSS:function(a,b,c){var e=d&&d.getItem(a),f=d&&d.getItem(a+":timestamp"),g=d&&d.getItem(a+":vars");if(c=c||{},f&&b.lastModified&&new Date(b.lastModified).valueOf()===new Date(f).valueOf()&&(!c&&!g||JSON.stringify(c)===g))return e}}}},{}],5:[function(a,b,c){var d=a("./utils"),e=a("./browser");b.exports=function(a,b,c){function f(b,f){var g,h,i="less-error-message:"+d.extractId(f||""),j='
  • {content}
  • ',k=a.document.createElement("div"),l=[],m=b.filename||f,n=m.match(/([^\/]+(\?.*)?)$/)[1];k.id=i,k.className="less-error-message",h="

    "+(b.type||"Syntax")+"Error: "+(b.message||"There is an error in your .less file")+'

    in '+n+" ";var o=function(a,b,c){void 0!==a.extract[b]&&l.push(j.replace(/\{line\}/,(parseInt(a.line,10)||0)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};b.extract&&(o(b,0,""),o(b,1,"line"),o(b,2,""),h+="on line "+b.line+", column "+(b.column+1)+":

      "+l.join("")+"
    "),b.stack&&(b.extract||c.logLevel>=4)&&(h+="
    Stack Trace
    "+b.stack.split("\n").slice(1).join("
    ")),k.innerHTML=h,e.createCSS(a.document,[".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),k.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),"development"===c.env&&(g=setInterval(function(){var b=a.document,c=b.body;c&&(b.getElementById(i)?c.replaceChild(k,b.getElementById(i)):c.insertBefore(k,c.firstChild),clearInterval(g))},10))}function g(b){var c=a.document.getElementById("less-error-message:"+d.extractId(b));c&&c.parentNode.removeChild(c)}function h(a){}function i(a){c.errorReporting&&"html"!==c.errorReporting?"console"===c.errorReporting?h(a):"function"==typeof c.errorReporting&&c.errorReporting("remove",a):g(a)}function j(a,d){var e="{line} {content}",f=a.filename||d,g=[],h=(a.type||"Syntax")+"Error: "+(a.message||"There is an error in your .less file")+" in "+f+" ",i=function(a,b,c){void 0!==a.extract[b]&&g.push(e.replace(/\{line\}/,(parseInt(a.line,10)||0)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};a.extract&&(i(a,0,""),i(a,1,"line"),i(a,2,""),h+="on line "+a.line+", column "+(a.column+1)+":\n"+g.join("\n")),a.stack&&(a.extract||c.logLevel>=4)&&(h+="\nStack Trace\n"+a.stack),b.logger.error(h)}function k(a,b){c.errorReporting&&"html"!==c.errorReporting?"console"===c.errorReporting?j(a,b):"function"==typeof c.errorReporting&&c.errorReporting("add",a,b):f(a,b)}return{add:k,remove:i}}},{"./browser":3,"./utils":10}],6:[function(a,b,c){b.exports=function(b,c){function d(){if(window.XMLHttpRequest&&!("file:"===window.location.protocol&&"ActiveXObject"in window))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return c.error("browser doesn't support AJAX."),null}}var e=a("../less/environment/abstract-file-manager.js"),f={},g=function(){};return g.prototype=new e,g.prototype.alwaysMakePathsAbsolute=function(){return!0},g.prototype.join=function(a,b){return a?this.extractUrlParts(b,a).path:b},g.prototype.doXHR=function(a,e,f,g){function h(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):"function"==typeof d&&d(b.status,a)}var i=d(),j=!b.isFileProtocol||b.fileAsync;"function"==typeof i.overrideMimeType&&i.overrideMimeType("text/css"),c.debug("XHR: Getting '"+a+"'"),i.open("GET",a,j),i.setRequestHeader("Accept",e||"text/x-less, text/css; q=0.9, */*; q=0.5"),i.send(null),b.isFileProtocol&&!b.fileAsync?0===i.status||i.status>=200&&i.status<300?f(i.responseText):g(i.status,a):j?i.onreadystatechange=function(){4==i.readyState&&h(i,f,g)}:h(i,f,g)},g.prototype.supports=function(a,b,c,d){return!0},g.prototype.clearFileCache=function(){f={}},g.prototype.loadFile=function(a,b,c,d,e){b&&!this.isPathAbsolute(a)&&(a=b+a),c=c||{};var g=this.extractUrlParts(a,window.location.href),h=g.url;if(c.useFileCache&&f[h])try{var i=f[h];e(null,{contents:i,filename:h,webInfo:{lastModified:new Date}})}catch(j){e({filename:h,message:"Error loading file "+h+" error was "+j.message})}else this.doXHR(h,c.mime,function(a,b){f[h]=a,e(null,{contents:a,filename:h,webInfo:{lastModified:b}})},function(a,b){e({type:"File",message:"'"+b+"' wasn't found ("+a+")",href:h})})},g}},{"../less/environment/abstract-file-manager.js":15}],7:[function(a,b,c){b.exports=function(){function b(){throw{type:"Runtime",message:"Image size functions are not supported in browser version of less"}}var c=a("./../less/functions/function-registry"),d={"image-size":function(a){return b(this,a),-1},"image-width":function(a){return b(this,a),-1},"image-height":function(a){return b(this,a),-1}};c.addMultiple(d)}},{"./../less/functions/function-registry":22}],8:[function(a,b,c){var d=a("./utils").addDataAttr,e=a("./browser");b.exports=function(b,c){function f(a){return c.postProcessor&&"function"==typeof c.postProcessor&&(a=c.postProcessor.call(a,a)||a),a}function g(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function h(a,b){var c=Array.prototype.slice.call(arguments,2);return function(){var d=c.concat(Array.prototype.slice.call(arguments,0));return a.apply(b,d)}}function i(a){for(var b,d=m.getElementsByTagName("style"),e=0;e=c&&console.log(a)},info:function(a){b.logLevel>=d&&console.log(a)},warn:function(a){b.logLevel>=e&&console.warn(a)},error:function(a){b.logLevel>=f&&console.error(a)}}]);for(var g=0;g0&&(a=a.slice(0,b)),b=a.lastIndexOf("/"),b<0&&(b=a.lastIndexOf("\\")),b<0?"":a.slice(0,b+1)},d.prototype.tryAppendExtension=function(a,b){return/(\.[a-z]*$)|([\?;].*)$/.test(a)?a:a+b},d.prototype.tryAppendLessExtension=function(a){return this.tryAppendExtension(a,".less")},d.prototype.supportsSync=function(){return!1},d.prototype.alwaysMakePathsAbsolute=function(){return!1},d.prototype.isPathAbsolute=function(a){return/^(?:[a-z-]+:|\/|\\|#)/i.test(a)},d.prototype.join=function(a,b){return a?a+b:b},d.prototype.pathDiff=function(a,b){var c,d,e,f,g=this.extractUrlParts(a),h=this.extractUrlParts(b),i="";if(g.hostPart!==h.hostPart)return"";for(d=Math.max(h.directories.length,g.directories.length),c=0;c0&&(h.splice(c-1,2),c-=2)}return g.hostPart=f[1],g.directories=h,g.path=(f[1]||"")+h.join("/"),g.fileUrl=g.path+(f[4]||""),g.url=g.fileUrl+(f[5]||""),g},b.exports=d},{}],16:[function(a,b,c){var d=a("../logger"),e=function(a,b){this.fileManagers=b||[],a=a||{};for(var c=["encodeBase64","mimeLookup","charsetLookup","getSourceMapGenerator"],d=[],e=d.concat(c),f=0;f=0;h--){var i=g[h];if(i[f?"supportsSync":"supports"](a,b,c,e))return i}return null},e.prototype.addFileManager=function(a){this.fileManagers.push(a)},e.prototype.clearFileManagers=function(){this.fileManagers=[]},b.exports=e},{"../logger":33}],17:[function(a,b,c){function d(a,b,c){var d,f,g,h,i=b.alpha,j=c.alpha,k=[];g=j+i*(1-j);for(var l=0;l<3;l++)d=b.rgb[l]/255,f=c.rgb[l]/255,h=a(d,f),g&&(h=(j*f+i*(d-j*(d+f-h)))/g),k[l]=255*h;return new e(k,g)}var e=a("../tree/color"),f=a("./function-registry"),g={multiply:function(a,b){return a*b},screen:function(a,b){return a+b-a*b},overlay:function(a,b){return a*=2,a<=1?g.multiply(a,b):g.screen(a-1,b)},softlight:function(a,b){var c=1,d=a;return b>.5&&(d=1,c=a>.25?Math.sqrt(a):((16*a-12)*a+4)*a),a-(1-2*b)*d*(c-a)},hardlight:function(a,b){return g.overlay(b,a)},difference:function(a,b){return Math.abs(a-b)},exclusion:function(a,b){return a+b-2*a*b},average:function(a,b){return(a+b)/2},negation:function(a,b){return 1-Math.abs(a+b-1)}};for(var h in g)g.hasOwnProperty(h)&&(d[h]=d.bind(null,g[h]));f.addMultiple(d)},{"../tree/color":50,"./function-registry":22}],18:[function(a,b,c){function d(a){return Math.min(1,Math.max(0,a))}function e(a){return h.hsla(a.h,a.s,a.l,a.a)}function f(a){if(a instanceof i)return parseFloat(a.unit.is("%")?a.value/100:a.value);if("number"==typeof a)return a;throw{type:"Argument",message:"color functions take numbers as parameters"}}function g(a,b){return a instanceof i&&a.unit.is("%")?parseFloat(a.value*b/100):f(a)}var h,i=a("../tree/dimension"),j=a("../tree/color"),k=a("../tree/quoted"),l=a("../tree/anonymous"),m=a("./function-registry");h={rgb:function(a,b,c){return h.rgba(a,b,c,1)},rgba:function(a,b,c,d){var e=[a,b,c].map(function(a){return g(a,255)});return d=f(d),new j(e,d)},hsl:function(a,b,c){return h.hsla(a,b,c,1)},hsla:function(a,b,c,e){function g(a){return a=a<0?a+1:a>1?a-1:a,6*a<1?i+(j-i)*a*6:2*a<1?j:3*a<2?i+(j-i)*(2/3-a)*6:i}var i,j;return a=f(a)%360/360,b=d(f(b)),c=d(f(c)),e=d(f(e)),j=c<=.5?c*(b+1):c+b-c*b,i=2*c-j,h.rgba(255*g(a+1/3),255*g(a),255*g(a-1/3),e)},hsv:function(a,b,c){return h.hsva(a,b,c,1)},hsva:function(a,b,c,d){a=f(a)%360/360*360,b=f(b),c=f(c),d=f(d);var e,g;e=Math.floor(a/60%6),g=a/60-e;var i=[c,c*(1-b),c*(1-g*b),c*(1-(1-g)*b)],j=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return h.rgba(255*i[j[e][0]],255*i[j[e][1]],255*i[j[e][2]],d)},hue:function(a){return new i(a.toHSL().h)},saturation:function(a){return new i(100*a.toHSL().s,"%")},lightness:function(a){return new i(100*a.toHSL().l,"%")},hsvhue:function(a){return new i(a.toHSV().h)},hsvsaturation:function(a){return new i(100*a.toHSV().s,"%")},hsvvalue:function(a){return new i(100*a.toHSV().v,"%")},red:function(a){return new i(a.rgb[0])},green:function(a){return new i(a.rgb[1])},blue:function(a){return new i(a.rgb[2])},alpha:function(a){return new i(a.toHSL().a)},luma:function(a){return new i(a.luma()*a.alpha*100,"%")},luminance:function(a){var b=.2126*a.rgb[0]/255+.7152*a.rgb[1]/255+.0722*a.rgb[2]/255;return new i(b*a.alpha*100,"%")},saturate:function(a,b,c){if(!a.rgb)return null;var f=a.toHSL();return f.s+="undefined"!=typeof c&&"relative"===c.value?f.s*b.value/100:b.value/100,f.s=d(f.s),e(f)},desaturate:function(a,b,c){var f=a.toHSL();return f.s-="undefined"!=typeof c&&"relative"===c.value?f.s*b.value/100:b.value/100,f.s=d(f.s),e(f)},lighten:function(a,b,c){var f=a.toHSL();return f.l+="undefined"!=typeof c&&"relative"===c.value?f.l*b.value/100:b.value/100,f.l=d(f.l),e(f)},darken:function(a,b,c){var f=a.toHSL();return f.l-="undefined"!=typeof c&&"relative"===c.value?f.l*b.value/100:b.value/100,f.l=d(f.l),e(f)},fadein:function(a,b,c){var f=a.toHSL();return f.a+="undefined"!=typeof c&&"relative"===c.value?f.a*b.value/100:b.value/100,f.a=d(f.a),e(f)},fadeout:function(a,b,c){var f=a.toHSL();return f.a-="undefined"!=typeof c&&"relative"===c.value?f.a*b.value/100:b.value/100,f.a=d(f.a),e(f)},fade:function(a,b){var c=a.toHSL();return c.a=b.value/100,c.a=d(c.a),e(c)},spin:function(a,b){var c=a.toHSL(),d=(c.h+b.value)%360;return c.h=d<0?360+d:d,e(c)},mix:function(a,b,c){a.toHSL&&b.toHSL||(console.log(b.type),console.dir(b)),c||(c=new i(50));var d=c.value/100,e=2*d-1,f=a.toHSL().a-b.toHSL().a,g=((e*f==-1?e:(e+f)/(1+e*f))+1)/2,h=1-g,k=[a.rgb[0]*g+b.rgb[0]*h,a.rgb[1]*g+b.rgb[1]*h,a.rgb[2]*g+b.rgb[2]*h],l=a.alpha*d+b.alpha*(1-d);return new j(k,l)},greyscale:function(a){return h.desaturate(a,new i(100))},contrast:function(a,b,c,d){if(!a.rgb)return null;if("undefined"==typeof c&&(c=h.rgba(255,255,255,1)),"undefined"==typeof b&&(b=h.rgba(0,0,0,1)),b.luma()>c.luma()){var e=c;c=b,b=e}return d="undefined"==typeof d?.43:f(d),a.luma()=t&&this.context.ieCompat!==!1?(g.warn("Skipped data-uri embedding of "+i+" because its size ("+s.length+" characters) exceeds IE8-safe "+t+" characters!"),f(this,e||a)):new d(new c('"'+s+'"',s,(!1),this.index,this.currentFileInfo),this.index,this.currentFileInfo)})}},{"../logger":33,"../tree/quoted":73,"../tree/url":80,"./function-registry":22}],20:[function(a,b,c){var d=a("../tree/keyword"),e=a("./function-registry"),f={eval:function(){var a=this.value_,b=this.error_;if(b)throw b;if(null!=a)return a?d.True:d.False},value:function(a){this.value_=a},error:function(a){this.error_=a},reset:function(){this.value_=this.error_=null}};e.add("default",f.eval.bind(f)),b.exports=f},{"../tree/keyword":65,"./function-registry":22}],21:[function(a,b,c){var d=a("../tree/expression"),e=function(a,b,c,d){this.name=a.toLowerCase(),this.index=c,this.context=b,this.currentFileInfo=d,this.func=b.frames[0].functionRegistry.get(this.name)};e.prototype.isValid=function(){return Boolean(this.func)},e.prototype.call=function(a){return Array.isArray(a)&&(a=a.filter(function(a){return"Comment"!==a.type}).map(function(a){if("Expression"===a.type){var b=a.value.filter(function(a){return"Comment"!==a.type});return 1===b.length?b[0]:new d(b)}return a})),this.func.apply(this,a)},b.exports=e},{"../tree/expression":59}],22:[function(a,b,c){function d(a){return{_data:{},add:function(a,b){a=a.toLowerCase(),this._data.hasOwnProperty(a),this._data[a]=b},addMultiple:function(a){Object.keys(a).forEach(function(b){this.add(b,a[b])}.bind(this))},get:function(b){return this._data[b]||a&&a.get(b)},inherit:function(){return d(this)}}}b.exports=d(null)},{}],23:[function(a,b,c){b.exports=function(b){var c={functionRegistry:a("./function-registry"),functionCaller:a("./function-caller")};return a("./default"),a("./color"),a("./color-blending"),a("./data-uri")(b),a("./math"),a("./number"),a("./string"),a("./svg")(b),a("./types"),c}},{"./color":18,"./color-blending":17,"./data-uri":19,"./default":20,"./function-caller":21,"./function-registry":22,"./math":25,"./number":26,"./string":27,"./svg":28,"./types":29}],24:[function(a,b,c){var d=a("../tree/dimension"),e=function(){};e._math=function(a,b,c){if(!(c instanceof d))throw{type:"Argument",message:"argument must be a number"};return null==b?b=c.unit:c=c.unify(),new d(a(parseFloat(c.value)),b)},b.exports=e},{"../tree/dimension":56}],25:[function(a,b,c){var d=a("./function-registry"),e=a("./math-helper.js"),f={ceil:null,floor:null,sqrt:null,abs:null,tan:"",sin:"",cos:"",atan:"rad",asin:"rad",acos:"rad"};for(var g in f)f.hasOwnProperty(g)&&(f[g]=e._math.bind(null,Math[g],f[g]));f.round=function(a,b){var c="undefined"==typeof b?0:b.value;return e._math(function(a){return a.toFixed(c)},null,a)},d.addMultiple(f)},{"./function-registry":22,"./math-helper.js":24}],26:[function(a,b,c){var d=a("../tree/dimension"),e=a("../tree/anonymous"),f=a("./function-registry"),g=a("./math-helper.js"),h=function(a,b){switch(b=Array.prototype.slice.call(b),b.length){case 0:throw{type:"Argument",message:"one or more arguments required"}}var c,f,g,h,i,j,k,l,m=[],n={};for(c=0;ci.value)&&(m[f]=g);else{if(void 0!==k&&j!==k)throw{type:"Argument",message:"incompatible types"};n[j]=m.length,m.push(g)}else Array.isArray(b[c].value)&&Array.prototype.push.apply(b,Array.prototype.slice.call(b[c].value));return 1==m.length?m[0]:(b=m.map(function(a){return a.toCSS(this.context)}).join(this.context.compress?",":", "),new e((a?"min":"max")+"("+b+")"))};f.addMultiple({min:function(){return h(!0,arguments)},max:function(){return h(!1,arguments)},convert:function(a,b){return a.convertTo(b.value)},pi:function(){return new d(Math.PI)},mod:function(a,b){return new d(a.value%b.value,a.unit)},pow:function(a,b){if("number"==typeof a&&"number"==typeof b)a=new d(a),b=new d(b);else if(!(a instanceof d&&b instanceof d))throw{type:"Argument",message:"arguments must be numbers"};return new d(Math.pow(a.value,b.value),a.unit)},percentage:function(a){var b=g._math(function(a){return 100*a},"%",a);return b}})},{"../tree/anonymous":46,"../tree/dimension":56,"./function-registry":22,"./math-helper.js":24}],27:[function(a,b,c){var d=a("../tree/quoted"),e=a("../tree/anonymous"),f=a("../tree/javascript"),g=a("./function-registry");g.addMultiple({e:function(a){return new e(a instanceof f?a.evaluated:a.value)},escape:function(a){return new e(encodeURI(a.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},replace:function(a,b,c,e){var f=a.value;return c="Quoted"===c.type?c.value:c.toCSS(),f=f.replace(new RegExp(b.value,e?e.value:""),c),new d(a.quote||"",f,a.escaped)},"%":function(a){for(var b=Array.prototype.slice.call(arguments,1),c=a.value,e=0;e",k=0;k";return j+="',j=encodeURIComponent(j),j="data:image/svg+xml,"+j,new g(new f("'"+j+"'",j,(!1),this.index,this.currentFileInfo),this.index,this.currentFileInfo)})}},{"../tree/color":50,"../tree/dimension":56,"../tree/expression":59,"../tree/quoted":73,"../tree/url":80,"./function-registry":22}],29:[function(a,b,c){var d=a("../tree/keyword"),e=a("../tree/detached-ruleset"),f=a("../tree/dimension"),g=a("../tree/color"),h=a("../tree/quoted"),i=a("../tree/anonymous"),j=a("../tree/url"),k=a("../tree/operation"),l=a("./function-registry"),m=function(a,b){return a instanceof b?d.True:d.False},n=function(a,b){if(void 0===b)throw{type:"Argument",message:"missing the required second argument to isunit."};if(b="string"==typeof b.value?b.value:b,"string"!=typeof b)throw{type:"Argument",message:"Second argument to isunit should be a unit or a string."};return a instanceof f&&a.unit.is(b)?d.True:d.False},o=function(a){var b=Array.isArray(a.value)?a.value:Array(a);return b};l.addMultiple({isruleset:function(a){return m(a,e)},iscolor:function(a){return m(a,g)},isnumber:function(a){return m(a,f)},isstring:function(a){return m(a,h)},iskeyword:function(a){return m(a,d)},isurl:function(a){return m(a,j)},ispixel:function(a){return n(a,"px")},ispercentage:function(a){return n(a,"%")},isem:function(a){return n(a,"em")},isunit:n,unit:function(a,b){if(!(a instanceof f))throw{type:"Argument",message:"the first argument to unit must be a number"+(a instanceof k?". Have you forgotten parenthesis?":"")};return b=b?b instanceof d?b.value:b.toCSS():"",new f(a.value,b)},"get-unit":function(a){return new i(a.unit)},extract:function(a,b){return b=b.value-1,o(a)[b]},length:function(a){return new f(o(a).length)}})},{"../tree/anonymous":46,"../tree/color":50,"../tree/detached-ruleset":55,"../tree/dimension":56,"../tree/keyword":65,"../tree/operation":71,"../tree/quoted":73,"../tree/url":80,"./function-registry":22}],30:[function(a,b,c){var d=a("./contexts"),e=a("./parser/parser"),f=a("./plugins/function-importer");b.exports=function(a){var b=function(a,b){this.rootFilename=b.filename,this.paths=a.paths||[],this.contents={},this.contentsIgnoredChars={},this.mime=a.mime,this.error=null,this.context=a,this.queue=[],this.files={}};return b.prototype.push=function(b,c,g,h,i){var j=this;this.queue.push(b);var k=function(a,c,d){j.queue.splice(j.queue.indexOf(b),1);var e=d===j.rootFilename;h.optional&&a?i(null,{rules:[]},!1,null):(j.files[d]=c,a&&!j.error&&(j.error=a),i(a,c,e,d))},l={relativeUrls:this.context.relativeUrls,entryPath:g.entryPath,rootpath:g.rootpath,rootFilename:g.rootFilename},m=a.getFileManager(b,g.currentDirectory,this.context,a);if(!m)return void k({message:"Could not find a file-manager for "+b});c&&(b=m.tryAppendExtension(b,h.plugin?".js":".less"));var n=function(a){var b=a.filename,c=a.contents.replace(/^\uFEFF/,"");l.currentDirectory=m.getPath(b),l.relativeUrls&&(l.rootpath=m.join(j.context.rootpath||"",m.pathDiff(l.currentDirectory,l.entryPath)),!m.isPathAbsolute(l.rootpath)&&m.alwaysMakePathsAbsolute()&&(l.rootpath=m.join(l.entryPath,l.rootpath))),l.filename=b;var i=new d.Parse(j.context);i.processImports=!1,j.contents[b]=c,(g.reference||h.reference)&&(l.reference=!0),h.plugin?new f(i,l).eval(c,function(a,c){k(a,c,b)}):h.inline?k(null,c,b):new e(i,j,l).parse(c,function(a,c){k(a,c,b)})},o=m.loadFile(b,g.currentDirectory,this.context,a,function(a,b){a?k(a):n(b)});o&&o.then(n,k)},b}},{"./contexts":11,"./parser/parser":38,"./plugins/function-importer":40}],31:[function(a,b,c){b.exports=function(b,c){var d,e,f,g,h,i={version:[2,7,2],data:a("./data"),tree:a("./tree"),Environment:h=a("./environment/environment"),AbstractFileManager:a("./environment/abstract-file-manager"),environment:b=new h(b,c),visitors:a("./visitors"),Parser:a("./parser/parser"),functions:a("./functions")(b),contexts:a("./contexts"),SourceMapOutput:d=a("./source-map-output")(b),SourceMapBuilder:e=a("./source-map-builder")(d,b),ParseTree:f=a("./parse-tree")(e),ImportManager:g=a("./import-manager")(b),render:a("./render")(b,f,g),parse:a("./parse")(b,f,g),LessError:a("./less-error"),transformTree:a("./transform-tree"),utils:a("./utils"),PluginManager:a("./plugin-manager"),logger:a("./logger")};return i}},{"./contexts":11,"./data":13,"./environment/abstract-file-manager":15,"./environment/environment":16,"./functions":23,"./import-manager":30,"./less-error":32,"./logger":33,"./parse":35,"./parse-tree":34,"./parser/parser":38,"./plugin-manager":39,"./render":41,"./source-map-builder":42,"./source-map-output":43,"./transform-tree":44,"./tree":62,"./utils":83,"./visitors":87}],32:[function(a,b,c){var d=a("./utils"),e=b.exports=function(a,b,c){Error.call(this);var e=a.filename||c;if(b&&e){var f=b.contents[e],g=d.getLocation(a.index,f),h=g.line,i=g.column,j=a.call&&d.getLocation(a.call,f).line,k=f.split("\n");this.type=a.type||"Syntax",this.filename=e,this.index=a.index,this.line="number"==typeof h?h+1:null,this.callLine=j+1,this.callExtract=k[j],this.column=i,this.extract=[k[h-1],k[h],k[h+1]]}this.message=a.message,this.stack=a.stack};if("undefined"==typeof Object.create){var f=function(){};f.prototype=Error.prototype,e.prototype=new f}else e.prototype=Object.create(Error.prototype);e.prototype.constructor=e},{"./utils":83}],33:[function(a,b,c){b.exports={error:function(a){this._fireEvent("error",a)},warn:function(a){this._fireEvent("warn",a)},info:function(a){this._fireEvent("info",a)},debug:function(a){this._fireEvent("debug",a)},addListener:function(a){this._listeners.push(a)},removeListener:function(a){for(var b=0;b=97&&j<=122||j<34))switch(j){case 40:o++,e=h;continue;case 41:if(--o<0)return b("missing opening `(`",h);continue;case 59:o||c();continue;case 123:n++,d=h;continue;case 125:if(--n<0)return b("missing opening `{`",h);n||o||c();continue;case 92:if(h96)){if(k==j){l=1;break}if(92==k){if(h==m-1)return b("unescaped `\\`",h);h++}}if(l)continue;return b("unmatched `"+String.fromCharCode(j)+"`",i);case 47:if(o||h==m-1)continue;if(k=a.charCodeAt(h+1),47==k)for(h+=2;hd&&g>f?b("missing closing `}` or `*/`",d):b("missing closing `}`",d):0!==o?b("missing closing `)`",e):(c(!0),p)}},{}],37:[function(a,b,c){var d=a("./chunker");b.exports=function(){function a(d){for(var e,f,j,p=k.i,q=c,s=k.i-i,t=k.i+h.length-s,u=k.i+=d,v=b;k.i=0){j={index:k.i,text:v.substr(k.i,x+2-k.i),isLineComment:!1},k.i+=j.text.length-1,k.commentStore.push(j);continue}}break}if(e!==l&&e!==n&&e!==m&&e!==o)break}if(h=h.slice(d+k.i-u+s),i=k.i,!h.length){if(ce||k.i===e&&a&&!f)&&(e=k.i,f=a);var b=j.pop();h=b.current,i=k.i=b.i,c=b.j},k.forget=function(){j.pop()},k.isWhitespace=function(a){var c=k.i+(a||0),d=b.charCodeAt(c);return d===l||d===o||d===m||d===n},k.$re=function(b){k.i>i&&(h=h.slice(k.i-i),i=k.i);var c=b.exec(h);return c?(a(c[0].length),"string"==typeof c?c:1===c.length?c[0]:c):null},k.$char=function(c){return b.charAt(k.i)!==c?null:(a(1),c)},k.$str=function(c){for(var d=c.length,e=0;es||a=b.length;return k.i=b.length-1,furthestChar:b[k.i]}},k}},{"./chunker":36}],38:[function(a,b,c){var d=a("../less-error"),e=a("../tree"),f=a("../visitors"),g=a("./parser-input"),h=a("../utils"),i=function j(a,b,c){function i(a,e){throw new d({index:o.i,filename:c.filename,type:e||"Syntax",message:a},b)}function k(a,b,c){var d=a instanceof Function?a.call(n):o.$re(a);return d?d:void i(b||("string"==typeof a?"expected '"+a+"' got '"+o.currentChar()+"'":"unexpected token"))}function l(a,b){return o.$char(a)?a:void i(b||"expected '"+a+"' got '"+o.currentChar()+"'")}function m(a){var b=c.filename;return{lineNumber:h.getLocation(a,o.getInput()).line+1,fileName:b}}var n,o=g();return{parse:function(g,h,i){var k,l,m,n,p=null,q="";if(l=i&&i.globalVars?j.serializeVars(i.globalVars)+"\n":"",m=i&&i.modifyVars?"\n"+j.serializeVars(i.modifyVars):"",a.pluginManager)for(var r=a.pluginManager.getPreProcessors(),s=0;s1&&(b=new e.Value(g)),d.push(b),g=[])}return o.forget(),a?d:f},literal:function(){return this.dimension()||this.color()||this.quoted()||this.unicodeDescriptor()},assignment:function(){var a,b;return o.save(),(a=o.$re(/^\w+(?=\s?=)/i))&&o.$char("=")&&(b=n.entity())?(o.forget(),new e.Assignment(a,b)):void o.restore()},url:function(){var a,b=o.i;return o.autoCommentAbsorb=!1,o.$str("url(")?(a=this.quoted()||this.variable()||o.$re(/^(?:(?:\\[\(\)'"])|[^\(\)'"])+/)||"",o.autoCommentAbsorb=!0,l(")"),new e.URL(null!=a.value||a instanceof e.Variable?a:new e.Anonymous(a),b,c)):void(o.autoCommentAbsorb=!0)},variable:function(){var a,b=o.i;if("@"===o.currentChar()&&(a=o.$re(/^@@?[\w-]+/)))return new e.Variable(a,b,c)},variableCurly:function(){var a,b=o.i;if("@"===o.currentChar()&&(a=o.$re(/^@\{([\w-]+)\}/)))return new e.Variable("@"+a[1],b,c)},color:function(){var a;if("#"===o.currentChar()&&(a=o.$re(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/))){var b=a.input.match(/^#([\w]+).*/);return b=b[1],b.match(/^[A-Fa-f0-9]+$/)||i("Invalid HEX color code"),new e.Color(a[1],(void 0),"#"+b)}},colorKeyword:function(){o.save();var a=o.autoCommentAbsorb;o.autoCommentAbsorb=!1;var b=o.$re(/^[_A-Za-z-][_A-Za-z0-9-]+/);if(o.autoCommentAbsorb=a,!b)return void o.forget();o.restore();var c=e.Color.fromKeyword(b);return c?(o.$str(b),c):void 0},dimension:function(){if(!o.peekNotNumeric()){var a=o.$re(/^([+-]?\d*\.?\d+)(%|[a-z_]+)?/i);return a?new e.Dimension(a[1],a[2]):void 0}},unicodeDescriptor:function(){var a;if(a=o.$re(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/))return new e.UnicodeDescriptor(a[0])},javascript:function(){var a,b=o.i;o.save();var d=o.$char("~"),f=o.$char("`");return f?(a=o.$re(/^[^`]*`/))?(o.forget(),new e.JavaScript(a.substr(0,a.length-1),Boolean(d),b,c)):void o.restore("invalid javascript definition"):void o.restore()}},variable:function(){var a;if("@"===o.currentChar()&&(a=o.$re(/^(@[\w-]+)\s*:/)))return a[1]},rulesetCall:function(){var a;if("@"===o.currentChar()&&(a=o.$re(/^(@[\w-]+)\(\s*\)\s*;/)))return new e.RulesetCall(a[1])},extend:function(a){var b,d,f,g,h,j=o.i;if(o.$str(a?"&:extend(":":extend(")){do{for(f=null,b=null;!(f=o.$re(/^(all)(?=\s*(\)|,))/))&&(d=this.element());)b?b.push(d):b=[d];f=f&&f[1],b||i("Missing target selector for :extend()."),h=new e.Extend(new e.Selector(b),f,j,c),g?g.push(h):g=[h]}while(o.$char(","));return k(/^\)/),a&&k(/^;/),g}},extendRule:function(){return this.extend(!0)},mixin:{call:function(){var a,b,d,f,g,h,i=o.currentChar(),j=!1,k=o.i;if("."===i||"#"===i){for(o.save();;){if(a=o.i,f=o.$re(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/),!f)break;d=new e.Element(g,f,a,c),b?b.push(d):b=[d],g=o.$char(">")}return b&&(o.$char("(")&&(h=this.args(!0).args,l(")")),n.important()&&(j=!0),n.end())?(o.forget(),new e.mixin.Call(b,h,k,c,j)):void o.restore()}},args:function(a){var b,c,d,f,g,h,j,k=n.entities,l={args:null,variadic:!1},m=[],p=[],q=[];for(o.save();;){if(a)h=n.detachedRuleset()||n.expression();else{if(o.commentStore.length=0,o.$str("...")){l.variadic=!0,o.$char(";")&&!b&&(b=!0),(b?p:q).push({variadic:!0});break}h=k.variable()||k.literal()||k.keyword()}if(!h)break;f=null,h.throwAwayComments&&h.throwAwayComments(),g=h;var r=null;if(a?h.value&&1==h.value.length&&(r=h.value[0]):r=h,r&&r instanceof e.Variable)if(o.$char(":")){if(m.length>0&&(b&&i("Cannot mix ; and , as delimiter types"),c=!0),g=n.detachedRuleset()||n.expression(),!g){if(!a)return o.restore(),l.args=[],l;i("could not understand value for named argument")}f=d=r.name}else if(o.$str("...")){if(!a){l.variadic=!0,o.$char(";")&&!b&&(b=!0),(b?p:q).push({name:h.name,variadic:!0});break}j=!0}else a||(d=f=r.name,g=null);g&&m.push(g),q.push({name:f,value:g,expand:j}),o.$char(",")||(o.$char(";")||b)&&(c&&i("Cannot mix ; and , as delimiter types"),b=!0,m.length>1&&(g=new e.Value(m)),p.push({name:d,value:g,expand:j}),d=null,m=[],c=!1)}return o.forget(),l.args=b?p:q,l},definition:function(){var a,b,c,d,f=[],g=!1;if(!("."!==o.currentChar()&&"#"!==o.currentChar()||o.peek(/^[^{]*\}/)))if(o.save(),b=o.$re(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/)){a=b[1];var h=this.args(!1);if(f=h.args,g=h.variadic,!o.$char(")"))return void o.restore("Missing closing ')'");if(o.commentStore.length=0,o.$str("when")&&(d=k(n.conditions,"expected condition")),c=n.block())return o.forget(),new e.mixin.Definition(a,f,c,d,g);o.restore()}else o.forget()}},entity:function(){var a=this.entities;return this.comment()||a.literal()||a.variable()||a.url()||a.call()||a.keyword()||a.javascript()},end:function(){return o.$char(";")||o.peek("}")},alpha:function(){var a;if(o.$re(/^opacity=/i))return a=o.$re(/^\d+/),a||(a=k(this.entities.variable,"Could not parse alpha")),l(")"),new e.Alpha(a)},element:function(){var a,b,d,f=o.i;if(b=this.combinator(),a=o.$re(/^(?:\d+\.\d+|\d+)%/)||o.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||o.$char("*")||o.$char("&")||this.attribute()||o.$re(/^\([^&()@]+\)/)||o.$re(/^[\.#:](?=@)/)||this.entities.variableCurly(),a||(o.save(),o.$char("(")?(d=this.selector())&&o.$char(")")?(a=new e.Paren(d),o.forget()):o.restore("Missing closing ')'"):o.forget()),a)return new e.Element(b,a,f,c)},combinator:function(){var a=o.currentChar();if("/"===a){o.save();var b=o.$re(/^\/[a-z]+\//i);if(b)return o.forget(),new e.Combinator(b);o.restore()}if(">"===a||"+"===a||"~"===a||"|"===a||"^"===a){for(o.i++,"^"===a&&"^"===o.currentChar()&&(a="^^",o.i++);o.isWhitespace();)o.i++;return new e.Combinator(a)}return new e.Combinator(o.isWhitespace(-1)?" ":null)},lessSelector:function(){return this.selector(!0)},selector:function(a){for(var b,d,f,g,h,j,l,m=o.i;(a&&(d=this.extend())||a&&(j=o.$str("when"))||(g=this.element()))&&(j?l=k(this.conditions,"expected condition"):l?i("CSS guard can only be used at the end of selector"):d?h=h?h.concat(d):d:(h&&i("Extend can only be used at the end of selector"),f=o.currentChar(),b?b.push(g):b=[g],g=null),"{"!==f&&"}"!==f&&";"!==f&&","!==f&&")"!==f););return b?new e.Selector(b,h,l,m,c):void(h&&i("Extend must be used to extend a selector, it cannot be used on its own"))},attribute:function(){if(o.$char("[")){var a,b,c,d=this.entities;return(a=d.variableCurly())||(a=k(/^(?:[_A-Za-z0-9-\*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/)),c=o.$re(/^[|~*$^]?=/),c&&(b=d.quoted()||o.$re(/^[0-9]+%/)||o.$re(/^[\w-]+/)||d.variableCurly()),l("]"),new e.Attribute(a,c,b)}},block:function(){var a;if(o.$char("{")&&(a=this.primary())&&o.$char("}"))return a},blockRuleset:function(){var a=this.block();return a&&(a=new e.Ruleset(null,a)),a},detachedRuleset:function(){var a=this.blockRuleset();if(a)return new e.DetachedRuleset(a)},ruleset:function(){var b,c,d,f;for(o.save(),a.dumpLineNumbers&&(f=m(o.i));;){if(c=this.lessSelector(),!c)break;if(b?b.push(c):b=[c],o.commentStore.length=0,c.condition&&b.length>1&&i("Guards are only currently allowed on a single selector."),!o.$char(","))break;c.condition&&i("Guards are only currently allowed on a single selector."),o.commentStore.length=0}if(b&&(d=this.block())){o.forget();var g=new e.Ruleset(b,d,a.strictImports);return a.dumpLineNumbers&&(g.debugInfo=f),g}o.restore()},rule:function(b){var d,f,g,h,i,j=o.i,k=o.currentChar();if("."!==k&&"#"!==k&&"&"!==k&&":"!==k)if(o.save(),d=this.variable()||this.ruleProperty()){if(i="string"==typeof d,i&&(f=this.detachedRuleset()),o.commentStore.length=0,!f){h=!i&&d.length>1&&d.pop().value;var l=!b&&(a.compress||i);if(l&&(f=this.value()),!f&&(f=this.anonymousValue()))return o.forget(),new e.Rule(d,f,(!1),h,j,c);l||f||(f=this.value()),g=this.important()}if(f&&this.end())return o.forget(),new e.Rule(d,f,g,h,j,c);if(o.restore(),f&&!b)return this.rule(!0)}else o.forget()},anonymousValue:function(){var a=o.$re(/^([^@+\/'"*`(;{}-]*);/);if(a)return new e.Anonymous(a[1])},"import":function(){var a,b,d=o.i,f=o.$re(/^@import?\s+/);if(f){var g=(f?this.importOptions():null)||{};if(a=this.entities.quoted()||this.entities.url())return b=this.mediaFeatures(),o.$char(";")||(o.i=d,i("missing semi-colon or unrecognised media features on import")),b=b&&new e.Value(b),new e.Import(a,b,g,d,c);o.i=d,i("malformed import statement")}},importOptions:function(){var a,b,c,d={};if(!o.$char("("))return null;do if(a=this.importOption()){switch(b=a,c=!0,b){case"css":b="less",c=!1;break;case"once":b="multiple",c=!1}if(d[b]=c,!o.$char(","))break}while(a);return l(")"),d},importOption:function(){var a=o.$re(/^(less|css|multiple|once|inline|reference|optional)/);if(a)return a[1]},mediaFeature:function(){var a,b,d=this.entities,f=[];o.save();do a=d.keyword()||d.variable(),a?f.push(a):o.$char("(")&&(b=this.property(),a=this.value(),o.$char(")")?b&&a?f.push(new e.Paren(new e.Rule(b,a,null,null,o.i,c,(!0)))):a?f.push(new e.Paren(a)):i("badly formed media feature definition"):i("Missing closing ')'","Parse"));while(a);if(o.forget(),f.length>0)return new e.Expression(f)},mediaFeatures:function(){var a,b=this.entities,c=[];do if(a=this.mediaFeature()){if(c.push(a),!o.$char(","))break}else if(a=b.variable(),a&&(c.push(a),!o.$char(",")))break;while(a);return c.length>0?c:null},media:function(){var b,d,f,g,h=o.i;return a.dumpLineNumbers&&(g=m(h)),o.save(),o.$str("@media")?(b=this.mediaFeatures(),d=this.block(),d||i("media definitions require block statements after any features"),o.forget(),f=new e.Media(d,b,h,c),a.dumpLineNumbers&&(f.debugInfo=g),f):void o.restore()},plugin:function(){var a,b=o.i,d=o.$re(/^@plugin?\s+/);if(d){var f={plugin:!0};if(a=this.entities.quoted()||this.entities.url())return o.$char(";")||(o.i=b,i("missing semi-colon on plugin")),new e.Import(a,null,f,b,c);o.i=b,i("malformed plugin statement")}},directive:function(){var b,d,f,g,h,j,k,l=o.i,n=!0,p=!0;if("@"===o.currentChar()){if(d=this["import"]()||this.plugin()||this.media())return d;if(o.save(),b=o.$re(/^@[a-z-]+/)){switch(g=b,"-"==b.charAt(1)&&b.indexOf("-",2)>0&&(g="@"+b.slice(b.indexOf("-",2)+1)),g){case"@charset":h=!0,n=!1;break;case"@namespace":j=!0,n=!1;break;case"@keyframes":case"@counter-style":h=!0;break;case"@document":case"@supports":k=!0,p=!1;break;default:k=!0}return o.commentStore.length=0,h?(d=this.entity(),d||i("expected "+b+" identifier")):j?(d=this.expression(),d||i("expected "+b+" expression")):k&&(d=(o.$re(/^[^{;]+/)||"").trim(),n="{"==o.currentChar(),d&&(d=new e.Anonymous(d))),n&&(f=this.blockRuleset()),f||!n&&d&&o.$char(";")?(o.forget(),new e.Directive(b,d,f,l,c,a.dumpLineNumbers?m(l):null,p)):void o.restore("directive options not recognised")}}},value:function(){var a,b=[];do if(a=this.expression(),a&&(b.push(a),!o.$char(",")))break;while(a);if(b.length>0)return new e.Value(b)},important:function(){if("!"===o.currentChar())return o.$re(/^! *important/)},sub:function(){var a,b;return o.save(),o.$char("(")?(a=this.addition(),a&&o.$char(")")?(o.forget(),b=new e.Expression([a]),b.parens=!0,b):void o.restore("Expected ')'")):void o.restore()},multiplication:function(){var a,b,c,d,f;if(a=this.operand()){for(f=o.isWhitespace(-1);;){if(o.peek(/^\/[*\/]/))break;if(o.save(),c=o.$char("/")||o.$char("*"),!c){o.forget();break}if(b=this.operand(),!b){o.restore();break}o.forget(),a.parensInOp=!0,b.parensInOp=!0,d=new e.Operation(c,[d||a,b],f),f=o.isWhitespace(-1)}return d||a}},addition:function(){var a,b,c,d,f;if(a=this.multiplication()){for(f=o.isWhitespace(-1);;){if(c=o.$re(/^[-+]\s+/)||!f&&(o.$char("+")||o.$char("-")),!c)break;if(b=this.multiplication(),!b)break;a.parensInOp=!0,b.parensInOp=!0,d=new e.Operation(c,[d||a,b],f),f=o.isWhitespace(-1)}return d||a}},conditions:function(){var a,b,c,d=o.i;if(a=this.condition()){for(;;){if(!o.peek(/^,\s*(not\s*)?\(/)||!o.$char(","))break;if(b=this.condition(),!b)break;c=new e.Condition("or",c||a,b,d)}return c||a}},condition:function(){function a(){return o.$str("or")}var b,c,d;if(b=this.conditionAnd(this)){if(c=a()){if(d=this.condition(),!d)return;b=new e.Condition(c,b,d)}return b}},conditionAnd:function(){function a(a){return a.negatedCondition()||a.parenthesisCondition()}function b(){return o.$str("and")}var c,d,f;if(c=a(this)){if(d=b()){if(f=this.conditionAnd(),!f)return;c=new e.Condition(d,c,f)}return c}},negatedCondition:function(){if(o.$str("not")){var a=this.parenthesisCondition();return a&&(a.negate=!a.negate),a}},parenthesisCondition:function(){function a(a){var b;return o.save(),(b=a.condition())&&o.$char(")")?(o.forget(),b):void o.restore()}var b;return o.save(),o.$str("(")?(b=a(this))?(o.forget(),b):(b=this.atomicCondition())?o.$char(")")?(o.forget(),b):void o.restore("expected ')' got '"+o.currentChar()+"'"):void o.restore():void o.restore()},atomicCondition:function(){var a,b,c,d,f=this.entities,g=o.i;if(a=this.addition()||f.keyword()||f.quoted())return o.$char(">")?d=o.$char("=")?">=":">":o.$char("<")?d=o.$char("=")?"<=":"<":o.$char("=")&&(d=o.$char(">")?"=>":o.$char("<")?"=<":"="),d?(b=this.addition()||f.keyword()||f.quoted(),b?c=new e.Condition(d,a,b,g,(!1)):i("expected expression")):c=new e.Condition("=",a,new e.Keyword("true"),g,(!1)),c},operand:function(){var a,b=this.entities;o.peek(/^-[@\(]/)&&(a=o.$char("-"));var c=this.sub()||b.dimension()||b.color()||b.variable()||b.call()||b.colorKeyword();return a&&(c.parensInOp=!0,c=new e.Negative(c)),c},expression:function(){var a,b,c=[];do a=this.comment(),a?c.push(a):(a=this.addition()||this.entity(),a&&(c.push(a),o.peek(/^\/[\/*]/)||(b=o.$char("/"),b&&c.push(new e.Anonymous(b)))));while(a);if(c.length>0)return new e.Expression(c)},property:function(){var a=o.$re(/^(\*?-?[_a-zA-Z0-9-]+)\s*:/);if(a)return a[1]},ruleProperty:function(){function a(a){var b=o.i,c=o.$re(a);if(c)return g.push(b),f.push(c[1])}var b,d,f=[],g=[];o.save();var h=o.$re(/^([_a-zA-Z0-9-]+)\s*:/);if(h)return f=[new e.Keyword(h[1])],o.forget(),f;for(a(/^(\*?)/);;)if(!a(/^((?:[\w-]+)|(?:@\{[\w-]+\}))/))break;if(f.length>1&&a(/^((?:\+_|\+)?)\s*:/)){for(o.forget(),""===f[0]&&(f.shift(),g.shift()),d=0;d=b);c++);this.preProcessors.splice(c,0,{preProcessor:a,priority:b})},d.prototype.addPostProcessor=function(a,b){var c;for(c=0;c=b);c++);this.postProcessors.splice(c,0,{postProcessor:a,priority:b})},d.prototype.addFileManager=function(a){this.fileManagers.push(a)},d.prototype.getPreProcessors=function(){for(var a=[],b=0;b0){var d,e=JSON.stringify(this._sourceMapGenerator.toJSON());this.sourceMapURL?d=this.sourceMapURL:this._sourceMapFilename&&(d=this._sourceMapFilename),this.sourceMapURL=d,this.sourceMap=e}return this._css.join("")},b}},{}],44:[function(a,b,c){var d=a("./contexts"),e=a("./visitors"),f=a("./tree");b.exports=function(a,b){b=b||{};var c,g=b.variables,h=new d.Eval(b);"object"!=typeof g||Array.isArray(g)||(g=Object.keys(g).map(function(a){var b=g[a];return b instanceof f.Value||(b instanceof f.Expression||(b=new f.Expression([b])),b=new f.Value([b])),new f.Rule("@"+a,b,(!1),null,0)}),h.frames=[new f.Ruleset(null,g)]);var i,j=[],k=[new e.JoinSelectorVisitor,new e.MarkVisibleSelectorsVisitor((!0)),new e.ExtendVisitor,new e.ToCSSVisitor({compress:Boolean(b.compress)})];if(b.pluginManager){var l=b.pluginManager.getVisitors();for(i=0;i.5?j/(2-g-h):j/(g+h),g){case c:a=(d-e)/j+(d="===a||"=<"===a||"<="===a;case 1:return">"===a||">="===a;default:return!1}}}(this.op,this.lvalue.eval(a),this.rvalue.eval(a));return this.negate?!b:b},b.exports=e},{"./node":70}],54:[function(a,b,c){var d=function(a,b,c){var e="";if(a.dumpLineNumbers&&!a.compress)switch(a.dumpLineNumbers){case"comments":e=d.asComment(b);break;case"mediaquery":e=d.asMediaQuery(b);break;case"all":e=d.asComment(b)+(c||"")+d.asMediaQuery(b)}return e};d.asComment=function(a){return"/* line "+a.debugInfo.lineNumber+", "+a.debugInfo.fileName+" */\n"},d.asMediaQuery=function(a){var b=a.debugInfo.fileName;return/^[a-z]+:\/\//i.test(b)||(b="file://"+b),"@media -sass-debug-info{filename{font-family:"+b.replace(/([.:\/\\])/g,function(a){return"\\"==a&&(a="/"),"\\"+a})+"}line{font-family:\\00003"+a.debugInfo.lineNumber+"}}\n"},b.exports=d},{}],55:[function(a,b,c){var d=a("./node"),e=a("../contexts"),f=function(a,b){this.ruleset=a,this.frames=b};f.prototype=new d,f.prototype.type="DetachedRuleset",f.prototype.evalFirst=!0,f.prototype.accept=function(a){this.ruleset=a.visit(this.ruleset)},f.prototype.eval=function(a){var b=this.frames||a.frames.slice(0);return new f(this.ruleset,b)},f.prototype.callEval=function(a){return this.ruleset.eval(this.frames?new e.Eval(a,this.frames.concat(a.frames)):a)},b.exports=f},{"../contexts":11,"./node":70}],56:[function(a,b,c){var d=a("./node"),e=a("../data/unit-conversions"),f=a("./unit"),g=a("./color"),h=function(a,b){this.value=parseFloat(a),this.unit=b&&b instanceof f?b:new f(b?[b]:void 0)};h.prototype=new d,h.prototype.type="Dimension",h.prototype.accept=function(a){this.unit=a.visit(this.unit)},h.prototype.eval=function(a){return this},h.prototype.toColor=function(){return new g([this.value,this.value,this.value])},h.prototype.genCSS=function(a,b){if(a&&a.strictUnits&&!this.unit.isSingular())throw new Error("Multiple units in dimension. Correct the units or use the unit function. Bad unit: "+this.unit.toString());var c=this.fround(a,this.value),d=String(c);if(0!==c&&c<1e-6&&c>-1e-6&&(d=c.toFixed(20).replace(/0+$/,"")),a&&a.compress){if(0===c&&this.unit.isLength())return void b.add(d);c>0&&c<1&&(d=d.substr(1))}b.add(d),this.unit.genCSS(a,b)},h.prototype.operate=function(a,b,c){var d=this._operate(a,b,this.value,c.value),e=this.unit.clone();if("+"===b||"-"===b)if(0===e.numerator.length&&0===e.denominator.length)e=c.unit.clone(),this.unit.backupUnit&&(e.backupUnit=this.unit.backupUnit);else if(0===c.unit.numerator.length&&0===e.denominator.length);else{if(c=c.convertTo(this.unit.usedUnits()),a.strictUnits&&c.unit.toString()!==e.toString())throw new Error("Incompatible units. Change the units or use the unit function. Bad units: '"+e.toString()+"' and '"+c.unit.toString()+"'.");d=this._operate(a,b,this.value,c.value)}else"*"===b?(e.numerator=e.numerator.concat(c.unit.numerator).sort(),e.denominator=e.denominator.concat(c.unit.denominator).sort(),e.cancel()):"/"===b&&(e.numerator=e.numerator.concat(c.unit.denominator).sort(),e.denominator=e.denominator.concat(c.unit.numerator).sort(),e.cancel());return new h(d,e)},h.prototype.compare=function(a){var b,c;if(a instanceof h){if(this.unit.isEmpty()||a.unit.isEmpty())b=this,c=a;else if(b=this.unify(),c=a.unify(),0!==b.unit.compare(c.unit))return;return d.numericCompare(b.value,c.value)}},h.prototype.unify=function(){return this.convertTo({length:"px",duration:"s",angle:"rad"})},h.prototype.convertTo=function(a){var b,c,d,f,g,i=this.value,j=this.unit.clone(),k={};if("string"==typeof a){for(b in e)e[b].hasOwnProperty(a)&&(k={},k[b]=a);a=k}g=function(a,b){return d.hasOwnProperty(a)?(b?i/=d[a]/d[f]:i*=d[a]/d[f],f):a};for(c in a)a.hasOwnProperty(c)&&(f=a[c],d=e[c],j.map(g));return j.cancel(),new h(i,j)},b.exports=h},{"../data/unit-conversions":14,"./color":50,"./node":70,"./unit":79}],57:[function(a,b,c){var d=a("./node"),e=a("./selector"),f=a("./ruleset"),g=function(a,b,c,d,f,g,h,i){var j;if(this.name=a,this.value=b,c)for(Array.isArray(c)?this.rules=c:(this.rules=[c],this.rules[0].selectors=new e([],null,null,this.index,f).createEmptySelectors()),j=0;j1?b=new g(this.value.map(function(b){return b.eval(a)})):1===this.value.length?(this.value[0].parens&&!this.value[0].parensInOp&&(d=!0),b=this.value[0].eval(a)):b=this,c&&a.outOfParenthesis(),this.parens&&this.parensInOp&&!a.isMathOn()&&!d&&(b=new e(b)),b},g.prototype.genCSS=function(a,b){for(var c=0;c0&&c.length&&""===c[0].combinator.value&&(c[0].combinator.value=" "),d=d.concat(a[b].elements);this.selfSelectors=[new e(d)],this.selfSelectors[0].copyVisibilityInfo(this.visibilityInfo())},b.exports=f},{"./node":70,"./selector":77}],61:[function(a,b,c){var d=a("./node"),e=a("./media"),f=a("./url"),g=a("./quoted"),h=a("./ruleset"),i=a("./anonymous"),j=function(a,b,c,d,e,f){if(this.options=c,this.index=d,this.path=a,this.features=b,this.currentFileInfo=e,this.allowRoot=!0,void 0!==this.options.less||this.options.inline)this.css=!this.options.less||this.options.inline;else{var g=this.getPath();g&&/[#\.\&\?\/]css([\?;].*)?$/.test(g)&&(this.css=!0)}this.copyVisibilityInfo(f)};j.prototype=new d,j.prototype.type="Import",j.prototype.accept=function(a){this.features&&(this.features=a.visit(this.features)),this.path=a.visit(this.path),this.options.plugin||this.options.inline||!this.root||(this.root=a.visit(this.root))},j.prototype.genCSS=function(a,b){this.css&&void 0===this.path.currentFileInfo.reference&&(b.add("@import ",this.currentFileInfo,this.index),this.path.genCSS(a,b),this.features&&(b.add(" "),this.features.genCSS(a,b)),b.add(";"))},j.prototype.getPath=function(){return this.path instanceof f?this.path.value.value:this.path.value},j.prototype.isVariableImport=function(){var a=this.path;return a instanceof f&&(a=a.value),!(a instanceof g)||a.containsVariables()},j.prototype.evalForImport=function(a){var b=this.path;return b instanceof f&&(b=b.value),new j(b.eval(a),this.features,this.options,this.index,this.currentFileInfo,this.visibilityInfo())},j.prototype.evalPath=function(a){var b=this.path.eval(a),c=this.currentFileInfo&&this.currentFileInfo.rootpath;if(!(b instanceof f)){if(c){var d=b.value;d&&a.isPathRelative(d)&&(b.value=c+d)}b.value=a.normalizePath(b.value)}return b},j.prototype.eval=function(a){var b=this.doEval(a);return(this.options.reference||this.blocksVisibility())&&(b.length||0===b.length?b.forEach(function(a){a.addVisibilityBlock()}):b.addVisibilityBlock()),b},j.prototype.doEval=function(a){var b,c,d=this.features&&this.features.eval(a);if(this.options.plugin)return c=a.frames[0]&&a.frames[0].functionRegistry,c&&this.root&&this.root.functions&&c.addMultiple(this.root.functions),[];if(this.skip&&("function"==typeof this.skip&&(this.skip=this.skip()),this.skip))return[];if(this.options.inline){var f=new i(this.root,0,{filename:this.importedFilename,reference:this.path.currentFileInfo&&this.path.currentFileInfo.reference},(!0),(!0));return this.features?new e([f],this.features.value):[f]}if(this.css){var g=new j(this.evalPath(a),d,this.options,this.index);if(!g.css&&this.error)throw this.error;return g}return b=new h(null,this.root.rules.slice(0)),b.evalImports(a),this.features?new e(b.rules,this.features.value):b.rules},b.exports=j},{"./anonymous":46,"./media":66,"./node":70,"./quoted":73,"./ruleset":76,"./url":80}],62:[function(a,b,c){var d={};d.Node=a("./node"),d.Alpha=a("./alpha"),d.Color=a("./color"),d.Directive=a("./directive"),d.DetachedRuleset=a("./detached-ruleset"),d.Operation=a("./operation"),d.Dimension=a("./dimension"),d.Unit=a("./unit"),d.Keyword=a("./keyword"),d.Variable=a("./variable"),d.Ruleset=a("./ruleset"),d.Element=a("./element"),d.Attribute=a("./attribute"),d.Combinator=a("./combinator"),d.Selector=a("./selector"),d.Quoted=a("./quoted"),d.Expression=a("./expression"),d.Rule=a("./rule"),d.Call=a("./call"),d.URL=a("./url"),d.Import=a("./import"),d.mixin={Call:a("./mixin-call"),Definition:a("./mixin-definition")},d.Comment=a("./comment"),d.Anonymous=a("./anonymous"),d.Value=a("./value"),d.JavaScript=a("./javascript"),d.Assignment=a("./assignment"),d.Condition=a("./condition"),d.Paren=a("./paren"),d.Media=a("./media"),d.UnicodeDescriptor=a("./unicode-descriptor"),d.Negative=a("./negative"),d.Extend=a("./extend"),d.RulesetCall=a("./ruleset-call"),b.exports=d},{"./alpha":45,"./anonymous":46,"./assignment":47,"./attribute":48,"./call":49,"./color":50,"./combinator":51,"./comment":52,"./condition":53,"./detached-ruleset":55,"./dimension":56,"./directive":57,"./element":58,"./expression":59,"./extend":60,"./import":61,"./javascript":63,"./keyword":65,"./media":66,"./mixin-call":67,"./mixin-definition":68,"./negative":69,"./node":70,"./operation":71,"./paren":72,"./quoted":73,"./rule":74,"./ruleset":76,"./ruleset-call":75,"./selector":77,"./unicode-descriptor":78,"./unit":79,"./url":80,"./value":81,"./variable":82}],63:[function(a,b,c){var d=a("./js-eval-node"),e=a("./dimension"),f=a("./quoted"),g=a("./anonymous"),h=function(a,b,c,d){this.escaped=b,this.expression=a,this.index=c,this.currentFileInfo=d};h.prototype=new d,h.prototype.type="JavaScript",h.prototype.eval=function(a){var b=this.evaluateJavaScript(this.expression,a);return"number"==typeof b?new e(b):"string"==typeof b?new f('"'+b+'"',b,this.escaped,this.index):new g(Array.isArray(b)?b.join(", "):b)},b.exports=h},{"./anonymous":46,"./dimension":56,"./js-eval-node":64,"./quoted":73}],64:[function(a,b,c){var d=a("./node"),e=a("./variable"),f=function(){};f.prototype=new d,f.prototype.evaluateJavaScript=function(a,b){var c,d=this,f={};if(void 0!==b.javascriptEnabled&&!b.javascriptEnabled)throw{message:"You are using JavaScript, which has been disabled.",filename:this.currentFileInfo.filename,index:this.index};a=a.replace(/@\{([\w-]+)\}/g,function(a,c){return d.jsify(new e("@"+c,d.index,d.currentFileInfo).eval(b))});try{a=new Function("return ("+a+")")}catch(g){throw{message:"JavaScript evaluation error: "+g.message+" from `"+a+"`",filename:this.currentFileInfo.filename,index:this.index}}var h=b.frames[0].variables();for(var i in h)h.hasOwnProperty(i)&&(f[i.slice(1)]={value:h[i].value,toJS:function(){return this.value.eval(b).toCSS()}});try{c=a.call(f)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message.replace(/["]/g,"'")+"'",filename:this.currentFileInfo.filename,index:this.index}}return c},f.prototype.jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS()}).join(", ")+"]":a.toCSS()},b.exports=f},{"./node":70,"./variable":82}],65:[function(a,b,c){var d=a("./node"),e=function(a){this.value=a};e.prototype=new d,e.prototype.type="Keyword",e.prototype.genCSS=function(a,b){if("%"===this.value)throw{type:"Syntax",message:"Invalid % without number"};b.add(this.value)},e.True=new e("true"),e.False=new e("false"),b.exports=e},{"./node":70}],66:[function(a,b,c){var d=a("./ruleset"),e=a("./value"),f=a("./selector"),g=a("./anonymous"),h=a("./expression"),i=a("./directive"),j=function(a,b,c,g,h){this.index=c,this.currentFileInfo=g;var i=new f([],null,null,this.index,this.currentFileInfo).createEmptySelectors();this.features=new e(b),this.rules=[new d(i,a)],this.rules[0].allowImports=!0,this.copyVisibilityInfo(h),this.allowRoot=!0};j.prototype=new i,j.prototype.type="Media",j.prototype.isRulesetLike=!0,j.prototype.accept=function(a){this.features&&(this.features=a.visit(this.features)),this.rules&&(this.rules=a.visitArray(this.rules))},j.prototype.genCSS=function(a,b){b.add("@media ",this.currentFileInfo,this.index),this.features.genCSS(a,b),this.outputRuleset(a,b,this.rules)},j.prototype.eval=function(a){a.mediaBlocks||(a.mediaBlocks=[],a.mediaPath=[]);var b=new j(null,[],this.index,this.currentFileInfo,this.visibilityInfo());this.debugInfo&&(this.rules[0].debugInfo=this.debugInfo,b.debugInfo=this.debugInfo);var c=!1;a.strictMath||(c=!0,a.strictMath=!0);try{b.features=this.features.eval(a)}finally{c&&(a.strictMath=!1)}return a.mediaPath.push(b),a.mediaBlocks.push(b),this.rules[0].functionRegistry=a.frames[0].functionRegistry.inherit(),a.frames.unshift(this.rules[0]),b.rules=[this.rules[0].eval(a)],a.frames.shift(),a.mediaPath.pop(),0===a.mediaPath.length?b.evalTop(a):b.evalNested(a)},j.prototype.evalTop=function(a){var b=this;if(a.mediaBlocks.length>1){var c=new f([],null,null,this.index,this.currentFileInfo).createEmptySelectors();b=new d(c,a.mediaBlocks),b.multiMedia=!0,b.copyVisibilityInfo(this.visibilityInfo())}return delete a.mediaBlocks,delete a.mediaPath,b},j.prototype.evalNested=function(a){var b,c,f=a.mediaPath.concat([this]);for(b=0;b0;b--)a.splice(b,0,new g("and"));return new h(a)})),new d([],[])},j.prototype.permute=function(a){if(0===a.length)return[];if(1===a.length)return a[0];for(var b=[],c=this.permute(a.slice(1)),d=0;d0){for(n=!0,k=0;k0)p=B;else if(p=A,q[A]+q[B]>1)throw{type:"Runtime",message:"Ambiguous use of `default()` found when matching for `"+this.format(t)+"`",index:this.index,filename:this.currentFileInfo.filename};for(k=0;kthis.params.length)return!1}c=Math.min(f,this.arity);for(var g=0;gb?1:void 0},d.prototype.blocksVisibility=function(){return null==this.visibilityBlocks&&(this.visibilityBlocks=0),0!==this.visibilityBlocks},d.prototype.addVisibilityBlock=function(){null==this.visibilityBlocks&&(this.visibilityBlocks=0),this.visibilityBlocks=this.visibilityBlocks+1},d.prototype.removeVisibilityBlock=function(){null==this.visibilityBlocks&&(this.visibilityBlocks=0),this.visibilityBlocks=this.visibilityBlocks-1},d.prototype.ensureVisibility=function(){this.nodeVisible=!0},d.prototype.ensureInvisibility=function(){this.nodeVisible=!1},d.prototype.isVisible=function(){return this.nodeVisible},d.prototype.visibilityInfo=function(){return{visibilityBlocks:this.visibilityBlocks,nodeVisible:this.nodeVisible}},d.prototype.copyVisibilityInfo=function(a){a&&(this.visibilityBlocks=a.visibilityBlocks,this.nodeVisible=a.nodeVisible)},b.exports=d},{}],71:[function(a,b,c){var d=a("./node"),e=a("./color"),f=a("./dimension"),g=function(a,b,c){this.op=a.trim(),this.operands=b,this.isSpaced=c};g.prototype=new d,g.prototype.type="Operation",g.prototype.accept=function(a){this.operands=a.visit(this.operands)},g.prototype.eval=function(a){var b=this.operands[0].eval(a),c=this.operands[1].eval(a);if(a.isMathOn()){if(b instanceof f&&c instanceof e&&(b=b.toColor()),c instanceof f&&b instanceof e&&(c=c.toColor()),!b.operate)throw{type:"Operation",message:"Operation on an invalid type"};return b.operate(a,this.op,c)}return new g(this.op,[b,c],this.isSpaced)},g.prototype.genCSS=function(a,b){this.operands[0].genCSS(a,b),this.isSpaced&&b.add(" "),b.add(this.op),this.isSpaced&&b.add(" "),this.operands[1].genCSS(a,b)},b.exports=g},{"./color":50,"./dimension":56,"./node":70}],72:[function(a,b,c){var d=a("./node"),e=function(a){this.value=a};e.prototype=new d,e.prototype.type="Paren",e.prototype.genCSS=function(a,b){b.add("("),this.value.genCSS(a,b),b.add(")")},e.prototype.eval=function(a){return new e(this.value.eval(a))},b.exports=e},{"./node":70}],73:[function(a,b,c){var d=a("./node"),e=a("./js-eval-node"),f=a("./variable"),g=function(a,b,c,d,e){this.escaped=null==c||c,this.value=b||"",this.quote=a.charAt(0),this.index=d,this.currentFileInfo=e};g.prototype=new e,g.prototype.type="Quoted",g.prototype.genCSS=function(a,b){this.escaped||b.add(this.quote,this.currentFileInfo,this.index),b.add(this.value),this.escaped||b.add(this.quote)},g.prototype.containsVariables=function(){return this.value.match(/(`([^`]+)`)|@\{([\w-]+)\}/)},g.prototype.eval=function(a){function b(a,b,c){var d=a;do a=d,d=a.replace(b,c);while(a!==d);return d}var c=this,d=this.value,e=function(b,d){return String(c.evaluateJavaScript(d,a))},h=function(b,d){var e=new f("@"+d,c.index,c.currentFileInfo).eval(a,!0);return e instanceof g?e.value:e.toCSS()};return d=b(d,/`([^`]+)`/g,e),d=b(d,/@\{([\w-]+)\}/g,h),new g(this.quote+d+this.quote,d,this.escaped,this.index,this.currentFileInfo)},g.prototype.compare=function(a){return"Quoted"!==a.type||this.escaped||a.escaped?a.toCSS&&this.toCSS()===a.toCSS()?0:void 0:d.numericCompare(this.value,a.value)},b.exports=g},{"./js-eval-node":64,"./node":70,"./variable":82}],74:[function(a,b,c){function d(a,b){var c,d="",e=b.length,f={add:function(a){d+=a}};for(c=0;cd){if(!c||c(h)){e=h.find(new f(a.elements.slice(d)),b,c);for(var j=0;j0&&b.add(k),a.firstSelector=!0,h[0].genCSS(a,b),a.firstSelector=!1,e=1;e0?(e=a.slice(0),f=e.pop(),h=d.createDerived(f.elements.slice(0))):h=d.createDerived([]),b.length>0){var i=c.combinator,j=b[0].elements[0];i.emptyOrWhitespace&&!j.combinator.emptyOrWhitespace&&(i=j.combinator),h.elements.push(new g(i,j.value,c.index,c.currentFileInfo)),h.elements=h.elements.concat(b[0].elements.slice(1))}if(0!==h.elements.length&&e.push(h),b.length>1){var k=b.slice(1);k=k.map(function(a){return a.createDerived(a.elements,[])}),e=e.concat(k)}return e}function j(a,b,c,d,e){var f;for(f=0;f0?d[d.length-1]=d[d.length-1].createDerived(d[d.length-1].elements.concat(a)):d.push(new f(a))}}function l(a,b,c){function f(a){var b;return"Paren"!==a.value.type?null:(b=a.value.value,"Selector"!==b.type?null:b)}var h,m,n,o,p,q,r,s,t,u,v=!1;for(o=[],p=[[]],h=0;h0&&r[0].elements.push(new g(s.combinator,"",s.index,s.currentFileInfo)),q.push(r);else for(n=0;n0&&(a.push(p[h]),u=p[h][t-1],p[h][t-1]=u.createDerived(u.elements,c.extendList));return v}function m(a,b){var c=b.createDerived(b.elements,b.extendList,b.evaldCondition);return c.copyVisibilityInfo(a),c}var n,o,p;if(o=[],p=l(o,b,c),!p)if(b.length>0)for(o=[],n=0;n0)for(b=0;b=0&&"\n"!==b.charAt(c);)e++;return"number"==typeof a&&(d=(b.slice(0,a).match(/\n/g)||"").length),{line:d,column:e}}}},{}],84:[function(a,b,c){var d=a("../tree"),e=a("./visitor"),f=a("../logger"),g=function(){this._visitor=new e(this),this.contexts=[],this.allExtendsStack=[[]]};g.prototype={run:function(a){return a=this._visitor.visit(a),a.allExtends=this.allExtendsStack[0],a},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitRuleset:function(a,b){if(!a.root){var c,e,f,g,h=[],i=a.rules,j=i?i.length:0;for(c=0;c=0||(i=[k.selfSelectors[0]],g=n.findMatch(j,i),g.length&&(j.hasFoundMatches=!0,j.selfSelectors.forEach(function(a){var b=k.visibilityInfo();h=n.extendSelector(g,i,a,j.isVisible()),l=new d.Extend(k.selector,k.option,0,k.currentFileInfo,b),l.selfSelectors=h,h[h.length-1].extendList=[l],m.push(l),l.ruleset=k.ruleset,l.parent_ids=l.parent_ids.concat(k.parent_ids,j.parent_ids),k.firstExtendOnThisSelectorPath&&(l.firstExtendOnThisSelectorPath=!0,k.ruleset.paths.push(h))})));if(m.length){if(this.extendChainCount++,c>100){var o="{unable to calculate}",p="{unable to calculate}";try{o=m[0].selfSelectors[0].toCSS(),p=m[0].selector.toCSS()}catch(q){}throw{message:"extend circular reference detected. One of the circular extends is currently:"+o+":extend("+p+")"}}return m.concat(n.doExtendChaining(m,b,c+1))}return m},visitRule:function(a,b){b.visitDeeper=!1},visitMixinDefinition:function(a,b){b.visitDeeper=!1},visitSelector:function(a,b){b.visitDeeper=!1},visitRuleset:function(a,b){if(!a.root){var c,d,e,f,g=this.allExtendsStack[this.allExtendsStack.length-1],h=[],i=this;for(e=0;e0&&k[i.matched].combinator.value!==g?i=null:i.matched++,i&&(i.finished=i.matched===k.length,i.finished&&!a.allowAfter&&(e+1k&&l>0&&(m[m.length-1].elements=m[m.length-1].elements.concat(b[k].elements.slice(l)),l=0,k++),j=g.elements.slice(l,i.index).concat([h]).concat(c.elements.slice(1)),k===i.pathIndex&&f>0?m[m.length-1].elements=m[m.length-1].elements.concat(j):(m=m.concat(b.slice(k,i.pathIndex)),m.push(new d.Selector(j))),k=i.endPathIndex,l=i.endPathElementIndex,l>=b[k].elements.length&&(l=0,k++);return k0&&(m[m.length-1].elements=m[m.length-1].elements.concat(b[k].elements.slice(l)),k++),m=m.concat(b.slice(k,b.length)),m=m.map(function(a){var b=a.createDerived(a.elements);return e?b.ensureVisibility():b.ensureInvisibility(),b})},visitMedia:function(a,b){var c=a.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);c=c.concat(this.doExtendChaining(c,a.allExtends)),this.allExtendsStack.push(c)},visitMediaOut:function(a){var b=this.allExtendsStack.length-1;this.allExtendsStack.length=b},visitDirective:function(a,b){var c=a.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);c=c.concat(this.doExtendChaining(c,a.allExtends)),this.allExtendsStack.push(c)},visitDirectiveOut:function(a){var b=this.allExtendsStack.length-1;this.allExtendsStack.length=b}},b.exports=h},{"../logger":33,"../tree":62,"./visitor":91}],85:[function(a,b,c){function d(a){this.imports=[],this.variableImports=[],this._onSequencerEmpty=a,this._currentDepth=0}d.prototype.addImport=function(a){var b=this,c={callback:a,args:null,isReady:!1};return this.imports.push(c),function(){c.args=Array.prototype.slice.call(arguments,0),c.isReady=!0,b.tryRun()}},d.prototype.addVariableImport=function(a){this.variableImports.push(a)},d.prototype.tryRun=function(){this._currentDepth++;try{for(;;){for(;this.imports.length>0;){var a=this.imports[0];if(!a.isReady)return; +this.imports=this.imports.slice(1),a.callback.apply(null,a.args)}if(0===this.variableImports.length)break;var b=this.variableImports[0];this.variableImports=this.variableImports.slice(1),b()}}finally{this._currentDepth--}0===this._currentDepth&&this._onSequencerEmpty&&this._onSequencerEmpty()},b.exports=d},{}],86:[function(a,b,c){var d=a("../contexts"),e=a("./visitor"),f=a("./import-sequencer"),g=function(a,b){this._visitor=new e(this),this._importer=a,this._finish=b,this.context=new d.Eval,this.importCount=0,this.onceFileDetectionMap={},this.recursionDetector={},this._sequencer=new f(this._onSequencerEmpty.bind(this))};g.prototype={isReplacing:!1,run:function(a){try{this._visitor.visit(a)}catch(b){this.error=b}this.isFinished=!0,this._sequencer.tryRun()},_onSequencerEmpty:function(){this.isFinished&&this._finish(this.error)},visitImport:function(a,b){var c=a.options.inline;if(!a.css||c){var e=new d.Eval(this.context,this.context.frames.slice(0)),f=e.frames[0];this.importCount++,a.isVariableImport()?this._sequencer.addVariableImport(this.processImportNode.bind(this,a,e,f)):this.processImportNode(a,e,f)}b.visitDeeper=!1},processImportNode:function(a,b,c){var d,e=a.options.inline;try{d=a.evalForImport(b)}catch(f){f.filename||(f.index=a.index,f.filename=a.currentFileInfo.filename),a.css=!0,a.error=f}if(!d||d.css&&!e)this.importCount--,this.isFinished&&this._sequencer.tryRun();else{d.options.multiple&&(b.importMultiple=!0);for(var g=void 0===d.css,h=0;h0},resolveVisibility:function(a,b){if(!a.blocksVisibility()){if(this.isEmpty(a)&&!this.containsSilentNonBlockedChild(b))return;return a}var c=a.rules[0];if(this.keepOnlyVisibleChilds(c),!this.isEmpty(c))return a.ensureVisibility(),a.removeVisibilityBlock(),a},isVisibleRuleset:function(a){return!!a.firstRoot||!this.isEmpty(a)&&!(!a.root&&!this.hasVisibleSelector(a))}};var g=function(a){this._visitor=new e(this),this._context=a,this.utils=new f(a)};g.prototype={isReplacing:!0,run:function(a){return this._visitor.visit(a)},visitRule:function(a,b){if(!a.blocksVisibility()&&!a.variable)return a},visitMixinDefinition:function(a,b){a.frames=[]},visitExtend:function(a,b){},visitComment:function(a,b){if(!a.blocksVisibility()&&!a.isSilent(this._context))return a},visitMedia:function(a,b){var c=a.rules[0].rules;return a.accept(this._visitor),b.visitDeeper=!1,this.utils.resolveVisibility(a,c)},visitImport:function(a,b){if(!a.blocksVisibility())return a},visitDirective:function(a,b){return a.rules&&a.rules.length?this.visitDirectiveWithBody(a,b):this.visitDirectiveWithoutBody(a,b)},visitDirectiveWithBody:function(a,b){function c(a){var b=a.rules;return 1===b.length&&(!b[0].paths||0===b[0].paths.length)}function d(a){var b=a.rules;return c(a)?b[0].rules:b}var e=d(a);return a.accept(this._visitor),b.visitDeeper=!1,this.utils.isEmpty(a)||this._mergeRules(a.rules[0].rules),this.utils.resolveVisibility(a,e)},visitDirectiveWithoutBody:function(a,b){if(!a.blocksVisibility()){if("@charset"===a.name){if(this.charset){if(a.debugInfo){var c=new d.Comment("/* "+a.toCSS(this._context).replace(/\n/g,"")+" */\n");return c.debugInfo=a.debugInfo,this._visitor.visit(c)}return}this.charset=!0}return a}},checkValidNodes:function(a,b){if(a)for(var c=0;c0?a.accept(this._visitor):a.rules=null,b.visitDeeper=!1}return a.rules&&(this._mergeRules(a.rules),this._removeDuplicateRules(a.rules)),this.utils.isVisibleRuleset(a)&&(a.ensureVisibility(),d.splice(0,0,a)),1===d.length?d[0]:d},_compileRulesetPaths:function(a){a.paths&&(a.paths=a.paths.filter(function(a){var b;for(" "===a[0].elements[0].combinator.value&&(a[0].elements[0].combinator=new d.Combinator("")),b=0;b=0;e--)if(c=a[e],c instanceof d.Rule)if(f[c.name]){b=f[c.name],b instanceof d.Rule&&(b=f[c.name]=[f[c.name].toCSS(this._context)]);var g=c.toCSS(this._context);b.indexOf(g)!==-1?a.splice(e,1):b.push(g)}else f[c.name]=c}},_mergeRules:function(a){if(a){for(var b,c,e,f={},g=0;g1){c=b[0];var h=[],i=[];b.map(function(a){"+"===a.merge&&(i.length>0&&h.push(e(i)),i=[]),i.push(a)}),h.push(e(i)),c.value=g(h)}})}},visitAnonymous:function(a,b){if(!a.blocksVisibility())return a.accept(this._visitor),a}},b.exports=g},{"../tree":62,"./visitor":91}],91:[function(a,b,c){function d(a){return a}function e(a,b){var c,d;for(c in a)if(a.hasOwnProperty(c))switch(d=a[c],typeof d){case"function":d.prototype&&d.prototype.type&&(d.prototype.typeIndex=b++);break;case"object":b=e(d,b)}return b}var f=a("../tree"),g={visitDeeper:!0},h=!1,i=function(a){this._implementation=a,this._visitFnCache=[],h||(e(f,1),h=!0)};i.prototype={visit:function(a){if(!a)return a;var b=a.typeIndex;if(!b)return a;var c,e=this._visitFnCache,f=this._implementation,h=b<<1,i=1|h,j=e[h],k=e[i],l=g;if(l.visitDeeper=!0,j||(c="visit"+a.type,j=f[c]||d,k=f[c+"Out"]||d,e[h]=j,e[i]=k),j!==d){var m=j.call(f,a,l);f.isReplacing&&(a=m)}return l.visitDeeper&&a&&a.accept&&a.accept(this),k!=d&&k.call(f,a),a},visitArray:function(a,b){if(!a)return a;var c,d=a.length;if(b||!this._implementation.isReplacing){for(c=0;ck){for(var b=0,c=h.length-j;b'); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} diff --git a/node_modules/less/test/browser/less/rootpath-relative/urls.less b/node_modules/less/test/browser/less/rootpath-relative/urls.less new file mode 100644 index 000000000..1843fb224 --- /dev/null +++ b/node_modules/less/test/browser/less/rootpath-relative/urls.less @@ -0,0 +1,33 @@ +@import "../imports/urls.less"; +@import "http://localhost:8081/test/browser/less/imports/urls2.less"; +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} diff --git a/node_modules/less/test/browser/less/rootpath/urls.less b/node_modules/less/test/browser/less/rootpath/urls.less new file mode 100644 index 000000000..1843fb224 --- /dev/null +++ b/node_modules/less/test/browser/less/rootpath/urls.less @@ -0,0 +1,33 @@ +@import "../imports/urls.less"; +@import "http://localhost:8081/test/browser/less/imports/urls2.less"; +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} diff --git a/node_modules/less/test/browser/less/urls.less b/node_modules/less/test/browser/less/urls.less new file mode 100644 index 000000000..7de201ad8 --- /dev/null +++ b/node_modules/less/test/browser/less/urls.less @@ -0,0 +1,65 @@ +@import "imports/urls.less"; +@import "http://localhost:8081/test/browser/less/imports/urls2.less"; +@import "http://localhost:8081/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less"; +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); + not-a-comment: url(//z); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} +#data-uri { + uri: data-uri('image/jpeg;base64', '../../data/image.jpg'); +} + +#data-uri-guess { + uri: data-uri('../../data/image.jpg'); +} + +#data-uri-ascii { + uri-1: data-uri('text/html', '../../data/page.html'); + uri-2: data-uri('../../data/page.html'); +} + +#data-uri-toobig { + uri: data-uri('../../data/data-uri-fail.png'); +} +#svg-functions { + @colorlist1: black, white; + background-image: svg-gradient(to bottom, @colorlist1); + background-image: svg-gradient(to bottom, black white); + background-image: svg-gradient(to bottom, black, orange 3%, white); + @colorlist2: black, orange 3%, white; + background-image: svg-gradient(to bottom, @colorlist2); + @green_5: green 5%; + @orange_percentage: 3%; + @orange_color: orange; + @colorlist3: (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%; + background-image: svg-gradient(to bottom,@colorlist3); + background-image: svg-gradient(to bottom, (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%); +} diff --git a/node_modules/less/test/browser/runner-VisitorPlugin-options.js b/node_modules/less/test/browser/runner-VisitorPlugin-options.js new file mode 100644 index 000000000..86d0ae15e --- /dev/null +++ b/node_modules/less/test/browser/runner-VisitorPlugin-options.js @@ -0,0 +1,3 @@ +var less = {logLevel: 4, + errorReporting: "console", + plugins: [VisitorPlugin]}; diff --git a/node_modules/less/test/browser/runner-VisitorPlugin.js b/node_modules/less/test/browser/runner-VisitorPlugin.js new file mode 100644 index 000000000..3c4287a2c --- /dev/null +++ b/node_modules/less/test/browser/runner-VisitorPlugin.js @@ -0,0 +1,3 @@ +describe("less.js Visitor Plugin", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-browser-options.js b/node_modules/less/test/browser/runner-browser-options.js new file mode 100644 index 000000000..64037bbb0 --- /dev/null +++ b/node_modules/less/test/browser/runner-browser-options.js @@ -0,0 +1,51 @@ +var less = {logLevel: 4, errorReporting: "console"}; + +// There originally run inside describe method. However, since they have not +// been inside it, they run at jasmine compile time (not runtime). It all +// worked cause less.js was in async mode and custom phantom runner had +// different setup then grunt-contrib-jasmine. They have been created before +// less.js run, even as they have been defined in spec. + +// test inline less in style tags by grabbing an assortment of less files and doing `@import`s +var testFiles = ['charsets', 'colors', 'comments', 'css-3', 'strings', 'media', 'mixins'], + testSheets = []; + +// IE 8-10 does not support less in style tags +if (window.navigator.userAgent.indexOf("MSIE") >= 0) { + testFiles.length = 0; +} + +// setup style tags with less and link tags pointing to expected css output + +for (var i = 0; i < testFiles.length; i++) { + var file = testFiles[i], + lessPath = '/test/less/' + file + '.less', + cssPath = '/test/css/' + file + '.css', + lessStyle = document.createElement('style'), + cssLink = document.createElement('link'), + lessText = '@import "' + lessPath + '";'; + + lessStyle.type = 'text/less'; + lessStyle.id = file; + lessStyle.href = file; + + if (lessStyle.styleSheet === undefined) { + lessStyle.appendChild(document.createTextNode(lessText)); + } + + cssLink.rel = 'stylesheet'; + cssLink.type = 'text/css'; + cssLink.href = cssPath; + cssLink.id = 'expected-' + file; + + var head = document.getElementsByTagName('head')[0]; + + head.appendChild(lessStyle); + + if (lessStyle.styleSheet) { + lessStyle.styleSheet.cssText = lessText; + } + + head.appendChild(cssLink); + testSheets[i] = lessStyle; +} diff --git a/node_modules/less/test/browser/runner-browser-spec.js b/node_modules/less/test/browser/runner-browser-spec.js new file mode 100644 index 000000000..ead27b4a0 --- /dev/null +++ b/node_modules/less/test/browser/runner-browser-spec.js @@ -0,0 +1,12 @@ +describe("less.js browser behaviour", function() { + testLessEqualsInDocument(); + + it("has some log messages", function() { + expect(logMessages.length).toBeGreaterThan(0); + }); + + for (var i = 0; i < testFiles.length; i++) { + var sheet = testSheets[i]; + testSheet(sheet); + } +}); diff --git a/node_modules/less/test/browser/runner-console-errors.js b/node_modules/less/test/browser/runner-console-errors.js new file mode 100644 index 000000000..7af7bdb19 --- /dev/null +++ b/node_modules/less/test/browser/runner-console-errors.js @@ -0,0 +1,5 @@ +less.errorReporting = 'console'; + +describe("less.js error reporting console test", function() { + testLessErrorsInDocument(true); +}); \ No newline at end of file diff --git a/node_modules/less/test/browser/runner-errors-options.js b/node_modules/less/test/browser/runner-errors-options.js new file mode 100644 index 000000000..8ba00e27d --- /dev/null +++ b/node_modules/less/test/browser/runner-errors-options.js @@ -0,0 +1,4 @@ +var less = { + strictUnits: true, + strictMath: true, + logLevel: 4 }; diff --git a/node_modules/less/test/browser/runner-errors-spec.js b/node_modules/less/test/browser/runner-errors-spec.js new file mode 100644 index 000000000..9d68d04a7 --- /dev/null +++ b/node_modules/less/test/browser/runner-errors-spec.js @@ -0,0 +1,3 @@ +describe("less.js error tests", function() { + testLessErrorsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-filemanagerPlugin-options.js b/node_modules/less/test/browser/runner-filemanagerPlugin-options.js new file mode 100644 index 000000000..588fbb046 --- /dev/null +++ b/node_modules/less/test/browser/runner-filemanagerPlugin-options.js @@ -0,0 +1,4 @@ +var less = {logLevel: 4, + errorReporting: "console", + plugins: [AddFilePlugin] + }; diff --git a/node_modules/less/test/browser/runner-filemanagerPlugin.js b/node_modules/less/test/browser/runner-filemanagerPlugin.js new file mode 100644 index 000000000..1ede4157c --- /dev/null +++ b/node_modules/less/test/browser/runner-filemanagerPlugin.js @@ -0,0 +1,3 @@ +describe("less.js filemanager Plugin", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-global-vars-options.js b/node_modules/less/test/browser/runner-global-vars-options.js new file mode 100644 index 000000000..54dc66289 --- /dev/null +++ b/node_modules/less/test/browser/runner-global-vars-options.js @@ -0,0 +1,7 @@ +var less = { + logLevel: 4, + errorReporting: "console", + globalVars: { + "@global-var": "red" + } +}; diff --git a/node_modules/less/test/browser/runner-global-vars-spec.js b/node_modules/less/test/browser/runner-global-vars-spec.js new file mode 100644 index 000000000..075fe0179 --- /dev/null +++ b/node_modules/less/test/browser/runner-global-vars-spec.js @@ -0,0 +1,3 @@ +describe("less.js global vars", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-legacy-options.js b/node_modules/less/test/browser/runner-legacy-options.js new file mode 100644 index 000000000..ed93fbd4c --- /dev/null +++ b/node_modules/less/test/browser/runner-legacy-options.js @@ -0,0 +1,5 @@ +var less = { + logLevel: 4, + errorReporting: "console", + strictMath: false, + strictUnits: false }; diff --git a/node_modules/less/test/browser/runner-legacy-spec.js b/node_modules/less/test/browser/runner-legacy-spec.js new file mode 100644 index 000000000..6ba7bfae7 --- /dev/null +++ b/node_modules/less/test/browser/runner-legacy-spec.js @@ -0,0 +1,3 @@ +describe("less.js legacy tests", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-main-options.js b/node_modules/less/test/browser/runner-main-options.js new file mode 100644 index 000000000..c0008334a --- /dev/null +++ b/node_modules/less/test/browser/runner-main-options.js @@ -0,0 +1,18 @@ +var less = { + logLevel: 4, + errorReporting: "console" +}; +less.strictMath = true; +less.functions = { + add: function(a, b) { + return new(less.tree.Dimension)(a.value + b.value); + }, + increment: function(a) { + return new(less.tree.Dimension)(a.value + 1); + }, + _color: function(str) { + if (str.value === "evil red") { + return new(less.tree.Color)("600"); + } + } +}; \ No newline at end of file diff --git a/node_modules/less/test/browser/runner-main-spec.js b/node_modules/less/test/browser/runner-main-spec.js new file mode 100644 index 000000000..05692690c --- /dev/null +++ b/node_modules/less/test/browser/runner-main-spec.js @@ -0,0 +1,7 @@ +console.warn("start spec"); +describe("less.js main tests", function() { + testLessEqualsInDocument(); + it("the global environment", function() { + expect(window.require).toBe(undefined); + }); +}); diff --git a/node_modules/less/test/browser/runner-modify-vars-options.js b/node_modules/less/test/browser/runner-modify-vars-options.js new file mode 100644 index 000000000..1516f5495 --- /dev/null +++ b/node_modules/less/test/browser/runner-modify-vars-options.js @@ -0,0 +1,5 @@ +/* exported less */ +var less = { + logLevel: 4, + errorReporting: "console" +}; \ No newline at end of file diff --git a/node_modules/less/test/browser/runner-modify-vars-spec.js b/node_modules/less/test/browser/runner-modify-vars-spec.js new file mode 100644 index 000000000..09cfe7a2e --- /dev/null +++ b/node_modules/less/test/browser/runner-modify-vars-spec.js @@ -0,0 +1,33 @@ +var alreadyRun = false; + +describe("less.js modify vars", function () { + beforeEach(function (done) { + // simulating "setUp" or "beforeAll" method + if (alreadyRun) { + done(); + return; + } + + alreadyRun = true; + + less.pageLoadFinished + .then(function () { + less.modifyVars({ + var1: "green", + var2: "purple", + scale: 20 + }).then(function () { + done(); + }); + }); + }); + + testLessEqualsInDocument(); + it("Should log only 2 XHR requests", function (done) { + var xhrLogMessages = logMessages.filter(function (item) { + return (/XHR: Getting '/).test(item); + }); + expect(xhrLogMessages.length).toEqual(2); + done(); + }); +}); diff --git a/node_modules/less/test/browser/runner-no-js-errors-options.js b/node_modules/less/test/browser/runner-no-js-errors-options.js new file mode 100644 index 000000000..825de5cc3 --- /dev/null +++ b/node_modules/less/test/browser/runner-no-js-errors-options.js @@ -0,0 +1,4 @@ +var less = {logLevel: 4}; + +less.strictUnits = true; +less.javascriptEnabled = false; diff --git a/node_modules/less/test/browser/runner-no-js-errors-spec.js b/node_modules/less/test/browser/runner-no-js-errors-spec.js new file mode 100644 index 000000000..6ee7611b4 --- /dev/null +++ b/node_modules/less/test/browser/runner-no-js-errors-spec.js @@ -0,0 +1,3 @@ +describe("less.js javascript disabled error tests", function() { + testLessErrorsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-postProcessor-options.js b/node_modules/less/test/browser/runner-postProcessor-options.js new file mode 100644 index 000000000..fe7111b69 --- /dev/null +++ b/node_modules/less/test/browser/runner-postProcessor-options.js @@ -0,0 +1,5 @@ +var less = {logLevel: 4, + errorReporting: "console"}; +less.postProcessor = function(styles) { + return 'hr {height:50px;}\n' + styles; +}; diff --git a/node_modules/less/test/browser/runner-postProcessor.js b/node_modules/less/test/browser/runner-postProcessor.js new file mode 100644 index 000000000..64937669f --- /dev/null +++ b/node_modules/less/test/browser/runner-postProcessor.js @@ -0,0 +1,3 @@ +describe("less.js postProcessor (deprecated)", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-postProcessorPlugin-options.js b/node_modules/less/test/browser/runner-postProcessorPlugin-options.js new file mode 100644 index 000000000..4024303ed --- /dev/null +++ b/node_modules/less/test/browser/runner-postProcessorPlugin-options.js @@ -0,0 +1,3 @@ +var less = {logLevel: 4, + errorReporting: "console", + plugins: [postProcessorPlugin]}; diff --git a/node_modules/less/test/browser/runner-postProcessorPlugin.js b/node_modules/less/test/browser/runner-postProcessorPlugin.js new file mode 100644 index 000000000..25237cd9f --- /dev/null +++ b/node_modules/less/test/browser/runner-postProcessorPlugin.js @@ -0,0 +1,3 @@ +describe("less.js postProcessor Plugin", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-preProcessorPlugin-options.js b/node_modules/less/test/browser/runner-preProcessorPlugin-options.js new file mode 100644 index 000000000..bbff52015 --- /dev/null +++ b/node_modules/less/test/browser/runner-preProcessorPlugin-options.js @@ -0,0 +1,3 @@ +var less = {logLevel: 4, + errorReporting: "console", + plugins: [preProcessorPlugin]}; diff --git a/node_modules/less/test/browser/runner-preProcessorPlugin.js b/node_modules/less/test/browser/runner-preProcessorPlugin.js new file mode 100644 index 000000000..4382396ef --- /dev/null +++ b/node_modules/less/test/browser/runner-preProcessorPlugin.js @@ -0,0 +1,3 @@ +describe("less.js preProcessor Plugin", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-production-options.js b/node_modules/less/test/browser/runner-production-options.js new file mode 100644 index 000000000..a17f8a952 --- /dev/null +++ b/node_modules/less/test/browser/runner-production-options.js @@ -0,0 +1,3 @@ +var less = {logLevel: 1, + errorReporting: "console"}; +less.env = "production"; diff --git a/node_modules/less/test/browser/runner-production-spec.js b/node_modules/less/test/browser/runner-production-spec.js new file mode 100644 index 000000000..8c8d8f42f --- /dev/null +++ b/node_modules/less/test/browser/runner-production-spec.js @@ -0,0 +1,5 @@ +describe("less.js production behaviour", function() { + it("doesn't log any messages", function() { + expect(logMessages.length).toEqual(0); + }); +}); diff --git a/node_modules/less/test/browser/runner-relative-urls-options.js b/node_modules/less/test/browser/runner-relative-urls-options.js new file mode 100644 index 000000000..e5ebfd2bf --- /dev/null +++ b/node_modules/less/test/browser/runner-relative-urls-options.js @@ -0,0 +1,3 @@ +var less = {logLevel: 4, + errorReporting: "console"}; +less.relativeUrls = true; diff --git a/node_modules/less/test/browser/runner-relative-urls-spec.js b/node_modules/less/test/browser/runner-relative-urls-spec.js new file mode 100644 index 000000000..b13911ee8 --- /dev/null +++ b/node_modules/less/test/browser/runner-relative-urls-spec.js @@ -0,0 +1,3 @@ +describe("less.js browser test - relative url's", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-rootpath-options.js b/node_modules/less/test/browser/runner-rootpath-options.js new file mode 100644 index 000000000..ca9e9a44c --- /dev/null +++ b/node_modules/less/test/browser/runner-rootpath-options.js @@ -0,0 +1,3 @@ +var less = {logLevel: 4, + errorReporting: "console"}; +less.rootpath = "https://localhost/"; diff --git a/node_modules/less/test/browser/runner-rootpath-relative-options.js b/node_modules/less/test/browser/runner-rootpath-relative-options.js new file mode 100644 index 000000000..641bab8fc --- /dev/null +++ b/node_modules/less/test/browser/runner-rootpath-relative-options.js @@ -0,0 +1,4 @@ +var less = {logLevel: 4, + errorReporting: "console"}; +less.rootpath = "https://www.github.com/cloudhead/less.js/"; +less.relativeUrls = true; diff --git a/node_modules/less/test/browser/runner-rootpath-relative-spec.js b/node_modules/less/test/browser/runner-rootpath-relative-spec.js new file mode 100644 index 000000000..cd905739a --- /dev/null +++ b/node_modules/less/test/browser/runner-rootpath-relative-spec.js @@ -0,0 +1,3 @@ +describe("less.js browser test - rootpath and relative url's", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-rootpath-spec.js b/node_modules/less/test/browser/runner-rootpath-spec.js new file mode 100644 index 000000000..b7b9ba1d6 --- /dev/null +++ b/node_modules/less/test/browser/runner-rootpath-spec.js @@ -0,0 +1,3 @@ +describe("less.js browser test - rootpath url's", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/runner-strict-units-options.js b/node_modules/less/test/browser/runner-strict-units-options.js new file mode 100644 index 000000000..4353405f5 --- /dev/null +++ b/node_modules/less/test/browser/runner-strict-units-options.js @@ -0,0 +1,5 @@ +var less = { + logLevel: 4, + errorReporting: "console", + strictMath: true, + strictUnits: true }; diff --git a/node_modules/less/test/browser/runner-strict-units-spec.js b/node_modules/less/test/browser/runner-strict-units-spec.js new file mode 100644 index 000000000..5ff77c892 --- /dev/null +++ b/node_modules/less/test/browser/runner-strict-units-spec.js @@ -0,0 +1,3 @@ +describe("less.js strict units tests", function() { + testLessEqualsInDocument(); +}); diff --git a/node_modules/less/test/browser/test-runner-template.tmpl b/node_modules/less/test/browser/test-runner-template.tmpl new file mode 100644 index 000000000..c02c38f30 --- /dev/null +++ b/node_modules/less/test/browser/test-runner-template.tmpl @@ -0,0 +1,95 @@ + + + + + Jasmine Spec Runner + + + <% var generateScriptTags = function(allScripts) { allScripts.forEach(function(script){ %> + + <% }); }; %> + + + <% var toArray = function(scripts) { + %>[<% + scripts.forEach(function(scriptUrl, index){ + %>"<%= scriptUrl %>"<% + if (index !== scripts.length -1) { + %>,<% + } + }); + %>]<% + }; %> + + + <% scripts.src.forEach(function(fullLessName) { + var pathParts = fullLessName.split('/'); + var fullCssName = fullLessName.replace(/less/g, 'css'); + var lessName = pathParts[pathParts.length - 1]; + var name = lessName.split('.')[0]; %> + + + + <% }); %> + + + <% css.forEach(function(style){ %> + + <% }) %> + + + + + + + + diff --git a/node_modules/less/test/copy-bom.js b/node_modules/less/test/copy-bom.js new file mode 100644 index 000000000..c806381cd --- /dev/null +++ b/node_modules/less/test/copy-bom.js @@ -0,0 +1,72 @@ +/*jshint latedef: nofunc */ + +// This is used to copy a folder (the test/less/* files & sub-folders), adding a BOM to the start of each LESS and CSS file. +// This is a based on the copySync method from fs-extra (https://github.com/jprichardson/node-fs-extra/). + +module.exports = function() { + var path = require('path'), + fs = require('fs'); + + var BUF_LENGTH = 64 * 1024; + var _buff = new Buffer(BUF_LENGTH); + + function copyFolderWithBom(src, dest) { + var stats = fs.lstatSync(src); + var destFolder = path.dirname(dest); + var destFolderExists = fs.existsSync(destFolder); + var performCopy = false; + + if (stats.isFile()) { + if (!destFolderExists) { + fs.mkdirSync(destFolder); + } + if (src.match(/\.(css|less)$/)) { + copyFileAddingBomSync(src, dest); + } else { + copyFileSync(src, dest); + } + } + else if (stats.isDirectory()) { + if (!fs.existsSync(destFolder)) { + fs.mkdirSync(destFolder); + } + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest); + } + fs.readdirSync(src).forEach(function(d) { + if (d !== 'bom') { + copyFolderWithBom(path.join(src, d), path.join(dest, d)); + } + }); + } + } + + function copyFileAddingBomSync(srcFile, destFile) { + var contents = fs.readFileSync(srcFile, { encoding: 'utf8' }); + if (!contents.length || contents.charCodeAt(0) !== 0xFEFF) { + contents = '\ufeff' + contents; + } + fs.writeFileSync(destFile, contents, { encoding: 'utf8' }); + } + + function copyFileSync(srcFile, destFile) { + var fdr = fs.openSync(srcFile, 'r'); + var stat = fs.fstatSync(fdr); + var fdw = fs.openSync(destFile, 'w', stat.mode); + var bytesRead = 1; + var pos = 0; + + while (bytesRead > 0) { + bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos) + fs.writeSync(fdw, _buff, 0, bytesRead); + pos += bytesRead; + } + + fs.closeSync(fdr); + fs.closeSync(fdw); + } + + return { + copyFolderWithBom: copyFolderWithBom + }; +}; diff --git a/node_modules/less/test/css/charsets.css b/node_modules/less/test/css/charsets.css new file mode 100644 index 000000000..9f44090c9 --- /dev/null +++ b/node_modules/less/test/css/charsets.css @@ -0,0 +1 @@ +@charset "UTF-8"; diff --git a/node_modules/less/test/css/colors.css b/node_modules/less/test/css/colors.css new file mode 100644 index 000000000..08a22abb8 --- /dev/null +++ b/node_modules/less/test/css/colors.css @@ -0,0 +1,87 @@ +#yelow #short { + color: #fea; +} +#yelow #long { + color: #ffeeaa; +} +#yelow #rgba { + color: rgba(255, 238, 170, 0.1); +} +#yelow #argb { + color: #1affeeaa; +} +#blue #short { + color: #00f; +} +#blue #long { + color: #0000ff; +} +#blue #rgba { + color: rgba(0, 0, 255, 0.1); +} +#blue #argb { + color: #1a0000ff; +} +#alpha #hsla { + color: rgba(61, 45, 41, 0.6); +} +#overflow .a { + color: #000000; +} +#overflow .b { + color: #ffffff; +} +#overflow .c { + color: #ffffff; +} +#overflow .d { + color: #00ff00; +} +#overflow .e { + color: rgba(0, 31, 255, 0.42); +} +#grey { + color: #c8c8c8; +} +#333333 { + color: #333333; +} +#808080 { + color: #808080; +} +#00ff00 { + color: #00ff00; +} +.lightenblue { + color: #3333ff; +} +.darkenblue { + color: #0000cc; +} +.unknowncolors { + color: blue2; + border: 2px solid superred; +} +.transparent { + color: transparent; + background-color: rgba(0, 0, 0, 0); +} +#alpha #fromvar { + opacity: 0.7; +} +#alpha #short { + opacity: 1; +} +#alpha #long { + opacity: 1; +} +#alpha #rgba { + opacity: 0.2; +} +#alpha #hsl { + opacity: 1; +} +#percentage { + color: 255; + border-color: rgba(255, 0, 0, 0.5); +} diff --git a/node_modules/less/test/css/comments.css b/node_modules/less/test/css/comments.css new file mode 100644 index 000000000..c8475cd9e --- /dev/null +++ b/node_modules/less/test/css/comments.css @@ -0,0 +1,83 @@ +/******************\ +* * +* Comment Header * +* * +\******************/ +/* + + Comment + +*/ +/* + * Comment Test + * + * - cloudhead (http://cloudhead.net) + * + */ +/* Colors + * ------ + * #EDF8FC (background blue) + * #166C89 (darkest blue) + * + * Text: + * #333 (standard text) // A comment within a comment! + * #1F9EC9 (standard link) + * + */ +/* @group Variables +------------------- */ +#comments, +.comments { + /**/ + color: red; + /* A C-style comment */ + /* A C-style comment */ + background-color: orange; + font-size: 12px; + /* lost comment */ + content: "content"; + border: 1px solid black; + padding: 0; + margin: 2em; +} +/* commented out + #more-comments { + color: grey; + } +*/ +.selector, +.lots, +.comments { + color: grey, /* blue */ orange; + -webkit-border-radius: 2px /* webkit only */; + -moz-border-radius: 8px /* moz only with operation */; +} +.test { + color: 1px; +} +.sr-only-focusable { + clip: auto; +} +@-webkit-keyframes hover { + /* and Chrome */ + 0% { + color: red; + } +} +#last { + color: blue; +} +/* */ +/* { */ +/* */ +/* */ +/* */ +#div { + color: #A33; +} +/* } */ +/*by block */ +#output-block { + comment: /* // Not commented out // */; +} +/*comment on last line*/ diff --git a/node_modules/less/test/css/comments2.css b/node_modules/less/test/css/comments2.css new file mode 100644 index 000000000..9fcbd46e8 --- /dev/null +++ b/node_modules/less/test/css/comments2.css @@ -0,0 +1,18 @@ +@-webkit-keyframes hover { + /* Safari and Chrome */ +} +.bg { + background-image: linear-gradient(#333 /*{comment}*/, #111); +} +#planadvisor, +.first, +.planning { + margin: 10px; + total-width: (1 * 6em * 12) + (2em * 12); +} +.some-inline-comments { + a: yes /* comment */; + b: red /* comment */; + c: yes /* comment */; + d: red /* comment */; +} diff --git a/node_modules/less/test/css/compression/compression.css b/node_modules/less/test/css/compression/compression.css new file mode 100644 index 000000000..28fcd9e82 --- /dev/null +++ b/node_modules/less/test/css/compression/compression.css @@ -0,0 +1,3 @@ +#colours{color1:#fea;color2:#ffeeaa;color3:rgba(255,238,170,0.1);string:"#fea";/*! but not this type + Note preserved whitespace + */}dimensions{val:.1px;val:0;val:4cm;val:.2;val:5;angles-must-have-unit:0deg;durations-must-have-unit:0s;length-doesnt-have-unit:0;width:auto\9}@page{marks:none;@top-left-corner{vertical-align:top}@top-left{vertical-align:top}}.shadow^.dom,body^^.shadow{display:done} \ No newline at end of file diff --git a/node_modules/less/test/css/css-3.css b/node_modules/less/test/css/css-3.css new file mode 100644 index 000000000..5aafe04ec --- /dev/null +++ b/node_modules/less/test/css/css-3.css @@ -0,0 +1,157 @@ +.comma-delimited { + text-shadow: -1px -1px 1px red, 6px 5px 5px yellow; + -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset, 0pt 4px 6px rgba(255, 255, 255, 0.4) inset; + -webkit-transform: rotate(0deg); +} +@font-face { + font-family: Headline; + unicode-range: U+??????, U+0???, U+0-7F, U+A5; +} +.other { + -moz-transform: translate(0, 11em) rotate(-90deg); + transform: rotateX(45deg); +} +.item[data-cra_zy-attr1b-ut3=bold] { + font-weight: bold; +} +p:not([class*="lead"]) { + color: black; +} +input[type="text"].class#id[attr=32]:not(1) { + color: white; +} +div#id.class[a=1][b=2].class:not(1) { + color: white; +} +ul.comma > li:not(:only-child)::after { + color: white; +} +ol.comma > li:nth-last-child(2)::after { + color: white; +} +li:nth-child(4n+1), +li:nth-child(-5n), +li:nth-child(-n+2) { + color: white; +} +a[href^="http://"] { + color: black; +} +a[href$="http://"] { + color: black; +} +form[data-disabled] { + color: black; +} +p::before { + color: black; +} +#issue322 { + -webkit-animation: anim2 7s infinite ease-in-out; +} +@-webkit-keyframes frames { + 0% { + border: 1px; + } + 5.5% { + border: 2px; + } + 100% { + border: 3px; + } +} +@keyframes fontbulger1 { + to { + font-size: 15px; + } + from, + to { + font-size: 12px; + } + 0%, + 100% { + font-size: 12px; + } +} +.units { + font: 1.2rem/2rem; + font: 8vw/9vw; + font: 10vh/12vh; + font: 12vm/15vm; + font: 12vmin/15vmin; + font: 1.2ch/1.5ch; +} +@supports ( box-shadow: 2px 2px 2px black ) or + ( -moz-box-shadow: 2px 2px 2px black ) { + .outline { + box-shadow: 2px 2px 2px black; + -moz-box-shadow: 2px 2px 2px black; + } +} +@-x-document url-prefix(""github.com"") { + h1 { + color: red; + } +} +@viewport { + font-size: 10px; +} +@namespace foo url(http://www.example.com); +foo|h1 { + color: blue; +} +foo|* { + color: yellow; +} +|h1 { + color: red; +} +*|h1 { + color: green; +} +h1 { + color: green; +} +.upper-test { + UpperCaseProperties: allowed; +} +@host { + div { + display: block; + } +} +::distributed(input::placeholder) { + color: #b3b3b3; +} +.shadow ^ .dom, +body ^^ .shadow { + display: done; +} +:host(.sel .a), +:host-context(.sel .b), +.sel /deep/ .b, +::content .sel { + type: shadow-dom; +} + /deep/ b { + c: 'd'; +} + /deep/ b[e] { + f: 'g'; +} +#issue2066 { + background: url('/images/icon-team.svg') 0 0 / contain; +} +@counter-style triangle { + system: cyclic; + symbols: ‣; + suffix: " "; +} +@-ms-viewport { +} +@unknown foo 42 (bar) { + x { + y: z; + } +} +@unknown foo 43; diff --git a/node_modules/less/test/css/css-escapes.css b/node_modules/less/test/css/css-escapes.css new file mode 100644 index 000000000..4ebecfe15 --- /dev/null +++ b/node_modules/less/test/css/css-escapes.css @@ -0,0 +1,24 @@ +.escape\|random\|char { + color: red; +} +.mixin\!tUp { + font-weight: bold; +} +.\34 04 { + background: red; +} +.\34 04 strong { + color: fuchsia; + font-weight: bold; +} +.trailingTest\+ { + color: red; +} +/* This hideous test of hideousness checks for the selector "blockquote" with various permutations of hex escapes */ +\62\6c\6f \63 \6B \0071 \000075o\74 e { + color: silver; +} +[ng\:cloak], +ng\:form { + display: none; +} diff --git a/node_modules/less/test/css/css-guards.css b/node_modules/less/test/css/css-guards.css new file mode 100644 index 000000000..f4b8a1087 --- /dev/null +++ b/node_modules/less/test/css/css-guards.css @@ -0,0 +1,37 @@ +.light { + color: green; +} +.see-the { + color: green; +} +.hide-the { + color: green; +} +.multiple-conditions-1 { + color: red; +} +.inheritance .test { + color: black; +} +.inheritance:hover { + color: pink; +} +.clsWithGuard { + dispaly: none; +} +.dont-split-me-up { + width: 1px; + color: red; + height: 1px; +} + + .dont-split-me-up { + sibling: true; +} +.scope-check { + sub-prop: 2px; + prop: 1px; +} +.scope-check-2 { + sub-prop: 2px; + prop: 1px; +} diff --git a/node_modules/less/test/css/css.css b/node_modules/less/test/css/css.css new file mode 100644 index 000000000..4fb579711 --- /dev/null +++ b/node_modules/less/test/css/css.css @@ -0,0 +1,95 @@ +@charset "utf-8"; +div { + color: black; +} +div { + width: 99%; +} +* { + min-width: 45em; +} +h1, +h2 > a > p, +h3 { + color: none; +} +div.class { + color: blue; +} +div#id { + color: green; +} +.class#id { + color: purple; +} +.one.two.three { + color: grey; +} +@media print { + * { + font-size: 3em; + } +} +@media screen { + * { + font-size: 10px; + } +} +@font-face { + font-family: 'Garamond Pro'; +} +a:hover, +a:link { + color: #999; +} +p, +p:first-child { + text-transform: none; +} +q:lang(no) { + quotes: none; +} +p + h1 { + font-size: 2.2em; +} +#shorthands { + border: 1px solid #000; + font: 12px/16px Arial; + font: 100%/16px Arial; + margin: 1px 0; + padding: 0 auto; +} +#more-shorthands { + margin: 0; + padding: 1px 0 2px 0; + font: normal small / 20px 'Trebuchet MS', Verdana, sans-serif; + font: 0/0 a; + border-radius: 5px / 10px; +} +.misc { + -moz-border-radius: 2px; + display: -moz-inline-stack; + width: .1em; + background-color: #009998; + background: -webkit-gradient(linear, left top, left bottom, from(red), to(blue)); + margin: ; + filter: alpha(opacity=100); + width: auto\9; +} +.misc .nested-multiple { + multiple-semi-colons: yes; +} +#important { + color: red !important; + width: 100%!important; + height: 20px ! important; +} +@font-face { + font-family: font-a; +} +@font-face { + font-family: font-b; +} +.æøå { + margin: 0; +} diff --git a/node_modules/less/test/css/debug/linenumbers-all.css b/node_modules/less/test/css/debug/linenumbers-all.css new file mode 100644 index 000000000..eabeb41fd --- /dev/null +++ b/node_modules/less/test/css/debug/linenumbers-all.css @@ -0,0 +1,50 @@ +@charset "UTF-8"; +/* line 1, {pathimport}test.less */ +@media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000031}} +/* @charset "ISO-8859-1"; */ + +/* line 23, {pathimport}test.less */ +@media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\0000323}} +.tst3 { + color: grey; +} +/* line 15, {path}linenumbers.less */ +@media -sass-debug-info{filename{font-family:file\:\/\/{pathesc}linenumbers\.less}line{font-family:\0000315}} +.test1 { + color: black; +} +/* line 6, {path}linenumbers.less */ +@media -sass-debug-info{filename{font-family:file\:\/\/{pathesc}linenumbers\.less}line{font-family:\000036}} +.test2 { + color: red; +} +@media all { + /* line 5, {pathimport}test.less */ + @media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000035}} + .tst { + color: black; + } +} +@media all and screen { + /* line 7, {pathimport}test.less */ + @media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000037}} + .tst { + color: red; + } + /* line 9, {pathimport}test.less */ + @media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000039}} + .tst .tst3 { + color: white; + } +} +/* line 18, {pathimport}test.less */ +@media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\0000318}} +.tst2 { + color: white; +} +/* line 27, {path}linenumbers.less */ +@media -sass-debug-info{filename{font-family:file\:\/\/{pathesc}linenumbers\.less}line{font-family:\0000327}} +.test { + color: red; + width: 2; +} diff --git a/node_modules/less/test/css/debug/linenumbers-comments.css b/node_modules/less/test/css/debug/linenumbers-comments.css new file mode 100644 index 000000000..a00fd7ffb --- /dev/null +++ b/node_modules/less/test/css/debug/linenumbers-comments.css @@ -0,0 +1,41 @@ +@charset "UTF-8"; +/* line 1, {pathimport}test.less */ +/* @charset "ISO-8859-1"; */ + +/* line 23, {pathimport}test.less */ +.tst3 { + color: grey; +} +/* line 15, {path}linenumbers.less */ +.test1 { + color: black; +} +/* line 6, {path}linenumbers.less */ +.test2 { + color: red; +} +@media all { + /* line 5, {pathimport}test.less */ + .tst { + color: black; + } +} +@media all and screen { + /* line 7, {pathimport}test.less */ + .tst { + color: red; + } + /* line 9, {pathimport}test.less */ + .tst .tst3 { + color: white; + } +} +/* line 18, {pathimport}test.less */ +.tst2 { + color: white; +} +/* line 27, {path}linenumbers.less */ +.test { + color: red; + width: 2; +} diff --git a/node_modules/less/test/css/debug/linenumbers-mediaquery.css b/node_modules/less/test/css/debug/linenumbers-mediaquery.css new file mode 100644 index 000000000..11cdd24e6 --- /dev/null +++ b/node_modules/less/test/css/debug/linenumbers-mediaquery.css @@ -0,0 +1,41 @@ +@charset "UTF-8"; +@media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000031}} +/* @charset "ISO-8859-1"; */ + +@media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\0000323}} +.tst3 { + color: grey; +} +@media -sass-debug-info{filename{font-family:file\:\/\/{pathesc}linenumbers\.less}line{font-family:\0000315}} +.test1 { + color: black; +} +@media -sass-debug-info{filename{font-family:file\:\/\/{pathesc}linenumbers\.less}line{font-family:\000036}} +.test2 { + color: red; +} +@media all { + @media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000035}} + .tst { + color: black; + } +} +@media all and screen { + @media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000037}} + .tst { + color: red; + } + @media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\000039}} + .tst .tst3 { + color: white; + } +} +@media -sass-debug-info{filename{font-family:file\:\/\/{pathimportesc}test\.less}line{font-family:\0000318}} +.tst2 { + color: white; +} +@media -sass-debug-info{filename{font-family:file\:\/\/{pathesc}linenumbers\.less}line{font-family:\0000327}} +.test { + color: red; + width: 2; +} diff --git a/node_modules/less/test/css/detached-rulesets.css b/node_modules/less/test/css/detached-rulesets.css new file mode 100644 index 000000000..fdd1035a4 --- /dev/null +++ b/node_modules/less/test/css/detached-rulesets.css @@ -0,0 +1,76 @@ +.wrap-selector { + color: black; + one: 1px; + four: magic-frame; + visible-one: visible; + visible-two: visible; +} +.wrap-selector { + color: red; + visible-one: visible; + visible-two: visible; +} +.wrap-selector { + color: black; + background: white; + visible-one: visible; + visible-two: visible; +} +header { + background: blue; +} +@media screen and (min-width: 1200) { + header { + background: red; + } +} +html.lt-ie9 header { + background: red; +} +.wrap-selector { + test: extra-wrap; + visible-one: visible; + visible-two: visible; +} +.wrap-selector .wrap-selector { + test: wrapped-twice; + visible-one: visible; + visible-two: visible; +} +.wrap-selector { + test-func: 90; + test-arithmetic: 18px; + visible-one: visible; + visible-two: visible; +} +.without-mixins { + b: 1; +} +@media (orientation: portrait) and tv { + .my-selector { + background-color: black; + } +} +@media (orientation: portrait) and widescreen and print and tv { + .triple-wrapped-mq { + triple: true; + } +} +@media (orientation: portrait) and widescreen and tv { + .triple-wrapped-mq { + triple: true; + } +} +@media (orientation: portrait) and tv { + .triple-wrapped-mq { + triple: true; + } +} +.a { + test: test; +} +.argument-default { + default: works; + direct: works; + named: works; +} diff --git a/node_modules/less/test/css/directives-bubling.css b/node_modules/less/test/css/directives-bubling.css new file mode 100644 index 000000000..4f5254b30 --- /dev/null +++ b/node_modules/less/test/css/directives-bubling.css @@ -0,0 +1,119 @@ +.parent { + color: green; +} +@document url-prefix() { + .parent .child { + color: red; + } +} +@supports (sandwitch: butter) { + .inside .top { + property: value; + } +} +@supports (sandwitch: bread) { + .in1 .in2 { + property: value; + } +} +@supports (sandwitch: ham) { + .inside .top { + property: value; + } +} +@supports (font-family: weirdFont) { + @font-face { + font-family: something; + src: made-up-url; + } +} +@font-face { + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + font-family: something; + src: made-up-url; + } +} +@supports (property: value) { + @media (max-size: 2px) { + @supports (whatever: something) { + .outOfMedia { + property: value; + } + } + } +} +@supports (property: value) { + @media (max-size: 2px) { + @supports (whatever: something) { + .onTop { + property: value; + } + } + } +} +@media print { + html { + in-html: visible; + } + @supports (upper: test) { + html { + in-supports: first; + } + html div { + in-div: visible; + } + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + html div { + in-supports: second; + } + @media screen { + html div { + font-weight: 400; + } + html div nested { + property: value; + } + } + } + } +} +@media print and (max-size: 2px) { + .in1 { + stay: here; + } + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + @supports (whatever: something) { + .in2 .in1 { + property: value; + } + } + } +} +html { + font-weight: 300; + -webkit-font-smoothing: subpixel-antialiased; +} +@supports not (-webkit-font-smoothing: subpixel-antialiased) { + html { + font-weight: 400; + } + html nested { + property: value; + } +} +.onTop { + animation: "textscale"; + font-family: something; +} +@font-face { + font-family: something; + src: made-up-url; +} +@keyframes "textscale" { + 0% { + font-size: 1em; + } + 100% { + font-size: 2em; + } +} diff --git a/node_modules/less/test/css/empty.css b/node_modules/less/test/css/empty.css new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/less/test/css/extend-chaining.css b/node_modules/less/test/css/extend-chaining.css new file mode 100644 index 000000000..820e134f0 --- /dev/null +++ b/node_modules/less/test/css/extend-chaining.css @@ -0,0 +1,81 @@ +.a, +.b, +.c { + color: black; +} +.f, +.e, +.d { + color: black; +} +.g.h, +.i.j.h, +.k.j.h { + color: black; +} +.i.j, +.k.j { + color: white; +} +.l, +.m, +.n, +.o, +.p, +.q, +.r, +.s, +.t { + color: black; +} +.u, +.v.u.v { + color: black; +} +.w, +.v.w.v { + color: black; +} +.x, +.y, +.z { + color: x; +} +.y, +.z, +.x { + color: y; +} +.z, +.x, +.y { + color: z; +} +.va, +.vb, +.vc { + color: black; +} +.vb, +.vc { + color: white; +} +@media tv { + .ma, + .mb, + .mc { + color: black; + } + .md, + .ma, + .mb, + .mc { + color: white; + } +} +@media tv and plasma { + .me, + .mf { + background: red; + } +} diff --git a/node_modules/less/test/css/extend-clearfix.css b/node_modules/less/test/css/extend-clearfix.css new file mode 100644 index 000000000..966892a27 --- /dev/null +++ b/node_modules/less/test/css/extend-clearfix.css @@ -0,0 +1,19 @@ +.clearfix, +.foo, +.bar { + *zoom: 1; +} +.clearfix:after, +.foo:after, +.bar:after { + content: ''; + display: block; + clear: both; + height: 0; +} +.foo { + color: red; +} +.bar { + color: blue; +} diff --git a/node_modules/less/test/css/extend-exact.css b/node_modules/less/test/css/extend-exact.css new file mode 100644 index 000000000..beff4133e --- /dev/null +++ b/node_modules/less/test/css/extend-exact.css @@ -0,0 +1,37 @@ +.replace.replace .replace, +.c.replace + .replace .replace, +.replace.replace .c, +.c.replace + .replace .c, +.rep_ace { + prop: copy-paste-replace; +} +.a .b .c { + prop: not_effected; +} +.a, +.effected { + prop: is_effected; +} +.a .b { + prop: not_effected; +} +.a .b.c { + prop: not_effected; +} +.c .b .a, +.a .b .a, +.c .a .a, +.a .a .a, +.c .b .c, +.a .b .c, +.c .a .c, +.a .a .c { + prop: not_effected; +} +.e.e, +.dbl { + prop: extend-double; +} +.e.e:hover { + hover: not-extended; +} diff --git a/node_modules/less/test/css/extend-media.css b/node_modules/less/test/css/extend-media.css new file mode 100644 index 000000000..23bd7b85c --- /dev/null +++ b/node_modules/less/test/css/extend-media.css @@ -0,0 +1,24 @@ +.ext1 .ext2, +.all .ext2 { + background: black; +} +@media tv { + .ext1 .ext3, + .tv-lowres .ext3, + .all .ext3 { + color: white; + } + .tv-lowres { + background: blue; + } +} +@media tv and hires { + .ext1 .ext4, + .tv-hires .ext4, + .all .ext4 { + color: green; + } + .tv-hires { + background: red; + } +} diff --git a/node_modules/less/test/css/extend-nest.css b/node_modules/less/test/css/extend-nest.css new file mode 100644 index 000000000..2c3905d95 --- /dev/null +++ b/node_modules/less/test/css/extend-nest.css @@ -0,0 +1,57 @@ +.sidebar, +.sidebar2, +.type1 .sidebar3, +.type2.sidebar4 { + width: 300px; + background: red; +} +.sidebar .box, +.sidebar2 .box, +.type1 .sidebar3 .box, +.type2.sidebar4 .box { + background: #FFF; + border: 1px solid #000; + margin: 10px 0; +} +.sidebar2 { + background: blue; +} +.type1 .sidebar3 { + background: green; +} +.type2.sidebar4 { + background: red; +} +.button, +.submit { + color: black; +} +.button:hover, +.submit:hover { + color: white; +} +.button2 :hover { + nested: white; +} +.button2 :hover { + notnested: black; +} +.amp-test-h, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-a.amp-test-d.amp-test-b.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-a.amp-test-e.amp-test-g, +.amp-test-f.amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e + .amp-test-c .amp-test-b.amp-test-d.amp-test-b.amp-test-e.amp-test-g { + test: extended by masses of selectors; +} diff --git a/node_modules/less/test/css/extend-selector.css b/node_modules/less/test/css/extend-selector.css new file mode 100644 index 000000000..3c6c01f2c --- /dev/null +++ b/node_modules/less/test/css/extend-selector.css @@ -0,0 +1,87 @@ +.error, +.badError { + border: 1px #f00; + background: #fdd; +} +.error.intrusion, +.badError.intrusion { + font-size: 1.3em; + font-weight: bold; +} +.intrusion .error, +.intrusion .badError { + display: none; +} +.badError { + border-width: 3px; +} +.foo .bar, +.foo .baz, +.ext1 .ext2 .bar, +.ext1 .ext2 .baz, +.ext3 .bar, +.ext3 .baz, +.ext4 .bar, +.ext4 .baz { + display: none; +} +div.ext5, +.ext6 > .ext5, +div.ext7, +.ext6 > .ext7 { + width: 100px; +} +.ext, +.a .c, +.b .c { + test: 1; +} +.a, +.b { + test: 2; +} +.a .c, +.b .c { + test: 3; +} +.a .c .d, +.b .c .d { + test: 4; +} +.replace.replace .replace, +.c.replace + .replace .replace, +.replace.replace .c, +.c.replace + .replace .c, +.rep_ace.rep_ace .rep_ace, +.c.rep_ace + .rep_ace .rep_ace, +.rep_ace.rep_ace .c, +.c.rep_ace + .rep_ace .c { + prop: copy-paste-replace; +} +.attributes [data="test"], +.attributes .attributes .attribute-test { + extend: attributes; +} +.attributes [data], +.attributes .attributes .attribute-test2 { + extend: attributes2; +} +.attributes [data="test3"], +.attributes .attributes .attribute-test { + extend: attributes2; +} +.header .header-nav, +.footer .footer-nav { + background: red; +} +.header .header-nav:before, +.footer .footer-nav:before { + background: blue; +} +.issue-2586-bordered, +.issue-2586-somepage .content { + border: solid 1px black; +} +.issue-2586-somepage .content > span { + margin-bottom: 10px; +} diff --git a/node_modules/less/test/css/extend.css b/node_modules/less/test/css/extend.css new file mode 100644 index 000000000..2895641a7 --- /dev/null +++ b/node_modules/less/test/css/extend.css @@ -0,0 +1,76 @@ +.error, +.badError { + border: 1px #f00; + background: #fdd; +} +.error.intrusion, +.badError.intrusion { + font-size: 1.3em; + font-weight: bold; +} +.intrusion .error, +.intrusion .badError { + display: none; +} +.badError { + border-width: 3px; +} +.foo .bar, +.foo .baz, +.ext1 .ext2 .bar, +.ext1 .ext2 .baz, +.ext3 .bar, +.ext3 .baz, +.foo .ext3, +.ext4 .bar, +.ext4 .baz, +.foo .ext4 { + display: none; +} +div.ext5, +.ext6 > .ext5, +div.ext7, +.ext6 > .ext7 { + width: 100px; +} +.ext8.ext9, +.fuu { + result: add-foo; +} +.ext8 .ext9, +.ext8 + .ext9, +.ext8 > .ext9, +.buu, +.zap, +.zoo { + result: bar-matched; +} +.ext8.nomatch { + result: none; +} +.ext8 .ext9, +.buu { + result: match-nested-bar; +} +.ext8.ext9, +.fuu { + result: match-nested-foo; +} +.aa, +.cc { + color: black; +} +.aa .dd, +.aa .ee { + background: red; +} +.bb, +.cc, +.ee, +.ff { + background: red; +} +.bb .bb, +.ff .ff { + color: black; +} diff --git a/node_modules/less/test/css/extract-and-length.css b/node_modules/less/test/css/extract-and-length.css new file mode 100644 index 000000000..dc69341c1 --- /dev/null +++ b/node_modules/less/test/css/extract-and-length.css @@ -0,0 +1,133 @@ +.multiunit { + length: 6; + extract: abc "abc" 1 1px 1% #123; +} +.incorrect-index { + v1: extract(a b c, 5); + v2: extract(a, b, c, -2); +} +.scalar { + var-value: variable; + var-length: 1; + ill-index: extract(variable, 2); + name-value: name; + string-value: "string"; + number-value: 12345678; + color-value: blue; + rgba-value: rgba(80, 160, 240, 0.67); + empty-value: ; + name-length: 1; + string-length: 1; + number-length: 1; + color-length: 1; + rgba-length: 1; + empty-length: 1; +} +.mixin-arguments-1 { + length: 4; + extract: c | b | a; +} +.mixin-arguments-2 { + length: 4; + extract: c | b | a; +} +.mixin-arguments-3 { + length: 4; + extract: c | b | a; +} +.mixin-arguments-4 { + length: 0; + extract: extract(, 2) | extract(, 1); +} +.mixin-arguments-2 { + length: 4; + extract: c | b | a; +} +.mixin-arguments-3 { + length: 4; + extract: c | b | a; +} +.mixin-arguments-4 { + length: 3; + extract: c | b; +} +.mixin-arguments-2 { + length: 4; + extract: 3 | 2 | 1; +} +.mixin-arguments-3 { + length: 4; + extract: 3 | 2 | 1; +} +.mixin-arguments-4 { + length: 3; + extract: 3 | 2; +} +.md-space-comma { + length-1: 3; + extract-1: 1 2 3; + length-2: 3; + extract-2: 2; +} +.md-space-comma-as-args-2 { + length: 3; + extract: "x" "y" "z" | 1 2 3 | a b c; +} +.md-space-comma-as-args-3 { + length: 3; + extract: "x" "y" "z" | 1 2 3 | a b c; +} +.md-space-comma-as-args-4 { + length: 2; + extract: "x" "y" "z" | 1 2 3; +} +.md-cat-space-comma { + length-1: 3; + extract-1: 1 2 3; + length-2: 3; + extract-2: 2; +} +.md-cat-space-comma-as-args-2 { + length: 3; + extract: "x" "y" "z" | 1 2 3 | a b c; +} +.md-cat-space-comma-as-args-3 { + length: 3; + extract: "x" "y" "z" | 1 2 3 | a b c; +} +.md-cat-space-comma-as-args-4 { + length: 2; + extract: "x" "y" "z" | 1 2 3; +} +.md-cat-comma-space { + length-1: 3; + extract-1: 1, 2, 3; + length-2: 3; + extract-2: 2; +} +.md-cat-comma-space-as-args-1 { + length: 3; + extract: "x", "y", "z" | 1, 2, 3 | a, b, c; +} +.md-cat-comma-space-as-args-2 { + length: 3; + extract: "x", "y", "z" | 1, 2, 3 | a, b, c; +} +.md-cat-comma-space-as-args-3 { + length: 3; + extract: "x", "y", "z" | 1, 2, 3 | a, b, c; +} +.md-cat-comma-space-as-args-4 { + length: 0; + extract: extract(, 2) | extract(, 1); +} +.md-3D { + length-1: 2; + extract-1: a b c d, 1 2 3 4; + length-2: 2; + extract-2: 5 6 7 8; + length-3: 4; + extract-3: 7; + length-4: 1; + extract-4: 8; +} diff --git a/node_modules/less/test/css/filemanagerPlugin/filemanager.css b/node_modules/less/test/css/filemanagerPlugin/filemanager.css new file mode 100644 index 000000000..6446ebfd4 --- /dev/null +++ b/node_modules/less/test/css/filemanagerPlugin/filemanager.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/node_modules/less/test/css/functions.css b/node_modules/less/test/css/functions.css new file mode 100644 index 000000000..ab5df5bb5 --- /dev/null +++ b/node_modules/less/test/css/functions.css @@ -0,0 +1,201 @@ +#functions { + color: #660000; + width: 16; + height: undefined("self"); + border-width: 5; + variable: 11; + background: linear-gradient(#000, #fff); +} +#built-in { + escaped: -Some::weird(#thing, y); + lighten: #ffcccc; + lighten-relative: #ff6666; + darken: #330000; + darken-relative: #990000; + saturate: #203c31; + saturate-relative: #28342f; + desaturate: #29332f; + desaturate-relative: #233930; + greyscale: #2e2e2e; + hsl-clamp: #ffffff; + spin-p: #bf6a40; + spin-n: #bf4055; + luma-white: 100%; + luma-black: 0%; + luma-black-alpha: 0%; + luma-red: 21.26%; + luma-green: 71.52%; + luma-blue: 7.22%; + luma-yellow: 92.78%; + luma-cyan: 78.74%; + luma-differs-from-luminance: 23.89833349%; + luminance-white: 100%; + luminance-black: 0%; + luminance-black-alpha: 0%; + luminance-red: 21.26%; + luminance-differs-from-luma: 36.40541176%; + contrast-filter: contrast(30%); + saturate-filter: saturate(5%); + contrast-white: #000000; + contrast-black: #ffffff; + contrast-red: #ffffff; + contrast-green: #000000; + contrast-blue: #ffffff; + contrast-yellow: #000000; + contrast-cyan: #000000; + contrast-light: #111111; + contrast-dark: #eeeeee; + contrast-wrongorder: #111111; + contrast-light-thresh: #111111; + contrast-dark-thresh: #eeeeee; + contrast-high-thresh: #eeeeee; + contrast-low-thresh: #111111; + contrast-light-thresh-per: #111111; + contrast-dark-thresh-per: #eeeeee; + contrast-high-thresh-per: #eeeeee; + contrast-low-thresh-per: #111111; + replace: "Hello, World!"; + replace-captured: "This is a new string."; + replace-with-flags: "2 + 2 = 4"; + replace-single-quoted: 'foo-2'; + replace-escaped-string: bar-2; + replace-keyword: baz-2; + replace-with-color: "#135#1357"; + replace-with-number: "2em07"; + format: "rgb(32, 128, 64)"; + format-string: "hello world"; + format-multiple: "hello earth 2"; + format-url-encode: "red is %23ff0000"; + format-single-quoted: 'hello single world'; + format-escaped-string: hello escaped world; + format-color-as-string: "#123"; + format-number-as-string: "4px"; + eformat: rgb(32, 128, 64); + unitless: 12; + unit: 14em; + unitpercentage: 100%; + get-unit: px; + get-unit-empty: ; + hue: 98; + saturation: 12%; + lightness: 95%; + hsvhue: 98; + hsvsaturation: 12%; + hsvvalue: 95%; + red: 255; + green: 255; + blue: 255; + rounded: 11; + rounded-two: 10.67; + roundedpx: 3px; + roundedpx-three: 3.333px; + rounded-percentage: 10%; + ceil: 11px; + floor: 12px; + sqrt: 5px; + pi: 3.14159265; + mod: 2m; + abs: 4%; + tan: 0.90040404; + sin: 0.17364818; + cos: 0.84385396; + atan: 0.1rad; + atan: 34deg; + atan: 45deg; + pow: 64px; + pow: 64; + pow: 27; + min: 0; + min: 5; + min: 1pt; + min: 3mm; + max: 3; + max: 5em; + percentage: 20%; + color-quoted-digit: #dda0dd; + color-quoted-keyword: #dda0dd; + color-color: #dda0dd; + color-keyword: #dda0dd; + tint: #898989; + tint-full: #ffffff; + tint-percent: #898989; + tint-negative: #656565; + shade: #686868; + shade-full: #000000; + shade-percent: #686868; + shade-negative: #868686; + fade-out: rgba(255, 0, 0, 0.95); + fade-in: rgba(255, 0, 0, 0.95); + fade-out-relative: rgba(255, 0, 0, 0.95); + fade-in-relative: rgba(255, 0, 0, 0.945); + fade-out2: rgba(255, 0, 0, 0); + fade-out2-relative: rgba(255, 0, 0, 0.25); + hsv: #4d2926; + hsva: rgba(77, 40, 38, 0.2); + mix: #ff3300; + mix-0: #ffff00; + mix-100: #ff0000; + mix-weightless: #ff8000; + mixt: rgba(255, 0, 0, 0.5); +} +#built-in .is-a { + ruleset: true; + color: true; + color1: true; + color2: true; + color3: true; + keyword: true; + number: true; + string: true; + pixel: true; + percent: true; + em: true; + cat: true; + no-unit-is-empty: true; + case-insensitive-1: true; + case-insensitive-2: true; +} +#alpha { + alpha: rgba(153, 94, 51, 0.6); + alpha2: 0.5; + alpha3: 0; +} +#blendmodes { + multiply: #ed0000; + screen: #f600f6; + overlay: #ed0000; + softlight: #fa0000; + hardlight: #0000ed; + difference: #f600f6; + exclusion: #f600f6; + average: #7b007b; + negation: #d73131; +} +#extract-and-length { + extract: 3 2 1 C B A; + length: 6; +} +#quoted-functions-in-mixin { + replace-double-quoted: 'foo-2'; + replace-single-quoted: 'foo-4'; + replace-escaped-string: bar-2; + replace-keyword: baz-2; + replace-anonymous: qux-2; + format-double-quoted: "hello world"; + format-single-quoted: 'hello single world'; + format-escaped-string: hello escaped world; + format-keyword: hello; + format-anonymous: hello anonymous world; +} +#list-details { + length: 2; + one: a 1; + two: b 2; + two-length: 2; + two-one: b; + two-two: 2; +} +/* comment1 */ +html { + color: #8080ff; +} diff --git a/node_modules/less/test/css/globalVars/extended.css b/node_modules/less/test/css/globalVars/extended.css new file mode 100644 index 000000000..1149ac878 --- /dev/null +++ b/node_modules/less/test/css/globalVars/extended.css @@ -0,0 +1,12 @@ +/** + * Test + */ +#header { + color: #333333; + border-left: 1px; + border-right: 2px; +} +#footer { + color: #114411; + border-color: #f20d0d; +} diff --git a/node_modules/less/test/css/globalVars/simple.css b/node_modules/less/test/css/globalVars/simple.css new file mode 100644 index 000000000..630cc4c13 --- /dev/null +++ b/node_modules/less/test/css/globalVars/simple.css @@ -0,0 +1,6 @@ +/** + * Test + */ +.class { + color: red; +} diff --git a/node_modules/less/test/css/ie-filters.css b/node_modules/less/test/css/ie-filters.css new file mode 100644 index 000000000..007aa536b --- /dev/null +++ b/node_modules/less/test/css/ie-filters.css @@ -0,0 +1,9 @@ +.nav { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20); + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr="#000000", GradientType=0); +} +.evalTest1 { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30); + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=5); +} diff --git a/node_modules/less/test/css/import-inline.css b/node_modules/less/test/css/import-inline.css new file mode 100644 index 000000000..6e9568984 --- /dev/null +++ b/node_modules/less/test/css/import-inline.css @@ -0,0 +1,8 @@ +#import { + color: red; +} +@media (min-width: 600px) { + #css { color: yellow; } + +} +this isn't very valid CSS. diff --git a/node_modules/less/test/css/import-interpolation.css b/node_modules/less/test/css/import-interpolation.css new file mode 100644 index 000000000..ee44ac41f --- /dev/null +++ b/node_modules/less/test/css/import-interpolation.css @@ -0,0 +1,13 @@ +body { + width: 100%; +} +#logo { + width: 100px; + height: 100px; + background: url('../assets/logo.png'); + background: url("#inline-svg"); +} + +.a { + var: test; +} diff --git a/node_modules/less/test/css/import-once.css b/node_modules/less/test/css/import-once.css new file mode 100644 index 000000000..f90531ec0 --- /dev/null +++ b/node_modules/less/test/css/import-once.css @@ -0,0 +1,15 @@ +#import { + color: red; +} +body { + width: 100%; +} +.test-f { + height: 10px; +} +body { + width: 100%; +} +.test-f { + height: 10px; +} diff --git a/node_modules/less/test/css/import-reference-issues.css b/node_modules/less/test/css/import-reference-issues.css new file mode 100644 index 000000000..34f481049 --- /dev/null +++ b/node_modules/less/test/css/import-reference-issues.css @@ -0,0 +1,24 @@ +.test-c { + background-color: green; +} +.theOnlySelector { + shall-have: one selector; +} +show-all-content { + /* + tralala +*/ +} +show-all-content .fix { + fix: fix; +} +show-all-content .something { + inside: something; +} +#used-namespaced-mixin { + was: included; + shall-see: another property above; +} +call-mixin-with-import-by-reference-inside { + the-only-property: nothing-below-this; +} diff --git a/node_modules/less/test/css/import-reference.css b/node_modules/less/test/css/import-reference.css new file mode 100644 index 000000000..f3d3b8763 --- /dev/null +++ b/node_modules/less/test/css/import-reference.css @@ -0,0 +1,97 @@ +input[type="text"].class#id[attr=32]:not(1) { + color: white; +} +div#id.class[a=1][b=2].class:not(1) { + color: white; +} +@media print { + .class { + color: blue; + } + .class .sub { + width: 42; + } +} +.visible { + color: red; +} +.visible .c { + color: green; +} +.visible { + color: green; +} +.visible:hover { + color: green; +} +.only-with-visible + .visible, +.visible + .only-with-visible, +.visible + .visible { + color: green; +} +.only-with-visible + .visible .sub, +.visible + .only-with-visible .sub, +.visible + .visible .sub { + color: green; +} +@supports (something: else) { + .class { + something: else; + } + .nestedToo .class { + something: else; + } +} +.b { + color: red; + color: green; +} +.b .c { + color: green; +} +.b:hover { + color: green; +} +.b + .b { + color: green; +} +.b + .b .sub { + color: green; +} +.y { + pulled-in: yes /* inline comment survives */; +} +/* comment pulled in */ +.visible { + extend: test; +} +.test-mediaq-import { + color: green; + test: 340px; +} +@media (max-size: 450px) { + .test-mediaq-import { + color: red; + } +} +.test { + color: red; +} +.test:first-child { + color: blue; +} +@keyframes some-name { + property: value; +} +@supports (animation-name: test) { + @keyframes some-name { + property: value; + } + .selector { + color: red; + } +} +div { + this isn't very valid CSS. +} +this isn't very valid CSS. diff --git a/node_modules/less/test/css/import.css b/node_modules/less/test/css/import.css new file mode 100644 index 000000000..c39470c7d --- /dev/null +++ b/node_modules/less/test/css/import.css @@ -0,0 +1,49 @@ +@charset "UTF-8"; +/** comment at the top**/ +@import url(http://fonts.googleapis.com/css?family=Open+Sans); +@import url(/absolute/something.css) screen and (color) and (max-width: 600px); +@import url("//ha.com/file.css") (min-width: 100px); +#import-test { + height: 10px; + color: red; + width: 10px; + height: 30%; +} +@media screen and (max-width: 600px) { + body { + width: 100%; + } +} +#import { + color: red; +} +.mixin { + height: 10px; + color: red; +} +.test-f { + height: 10px; +} +.deep-import-url { + color: red; +} +@media screen and (max-width: 601px) { + #css { + color: yellow; + } +} +@media screen and (max-width: 602px) { + body { + width: 100%; + } +} +@media screen and (max-width: 603px) { + #css { + color: yellow; + } +} +@media print { + body { + width: 100%; + } +} diff --git a/node_modules/less/test/css/include-path-string/include-path-string.css b/node_modules/less/test/css/include-path-string/include-path-string.css new file mode 100644 index 000000000..74a92fd42 --- /dev/null +++ b/node_modules/less/test/css/include-path-string/include-path-string.css @@ -0,0 +1,3 @@ +data-uri { + property: url("data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0A%3Csvg%20height%3D%22100%22%20width%3D%22100%22%3E%0A%20%20%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2240%22%20stroke%3D%22black%22%20stroke-width%3D%221%22%20fill%3D%22blue%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} diff --git a/node_modules/less/test/css/include-path/include-path.css b/node_modules/less/test/css/include-path/include-path.css new file mode 100644 index 000000000..3d8059467 --- /dev/null +++ b/node_modules/less/test/css/include-path/include-path.css @@ -0,0 +1,9 @@ +body { + width: 100%; +} +data-uri { + property: url("data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0A%3Csvg%20height%3D%22100%22%20width%3D%22100%22%3E%0A%20%20%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2240%22%20stroke%3D%22black%22%20stroke-width%3D%221%22%20fill%3D%22blue%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); +} +image-size { + property: 100px 100px; +} diff --git a/node_modules/less/test/css/javascript.css b/node_modules/less/test/css/javascript.css new file mode 100644 index 000000000..9cc1c3e91 --- /dev/null +++ b/node_modules/less/test/css/javascript.css @@ -0,0 +1,28 @@ +.eval { + js: 42; + js: 2; + js: "hello world"; + js: 1, 2, 3; + title: "string"; + ternary: true; + multiline: 2; +} +.scope { + var: 42; + escaped: 7px; +} +.vars { + width: 8; +} +.escape-interpol { + width: hello world; +} +.arrays { + ary: "1, 2, 3"; + ary1: "1, 2, 3"; +} +.test-tran { + 1: opacity 0.3s ease-in 0.3s, max-height 0.6s linear, margin-bottom 0.4s linear; + 2: [opacity 0.3s ease-in 0.3s, max-height 0.6s linear, margin-bottom 0.4s linear]; + 3: opacity 0.3s ease-in 0.3s, max-height 0.6s linear, margin-bottom 0.4s linear; +} diff --git a/node_modules/less/test/css/lazy-eval.css b/node_modules/less/test/css/lazy-eval.css new file mode 100644 index 000000000..1adfb8f38 --- /dev/null +++ b/node_modules/less/test/css/lazy-eval.css @@ -0,0 +1,3 @@ +.lazy-eval { + width: 100%; +} diff --git a/node_modules/less/test/css/legacy/legacy.css b/node_modules/less/test/css/legacy/legacy.css new file mode 100644 index 000000000..24a6fa5fa --- /dev/null +++ b/node_modules/less/test/css/legacy/legacy.css @@ -0,0 +1,21 @@ +@media (-o-min-device-pixel-ratio: 2/1) { + .test-math-and-units { + font: ignores 0/0 rules; + test-division: 7em; + simple: 2px; + } +} +#units { + t1: 22em; + t2: 22em; + t3: 2em; + t4: 22em; + t5: 22em; + t6: 2em; + t7: 22em; + t8: 22em; + t9: 2em; + t10: 22em; + t11: 22em; + t12: 2em; +} diff --git a/node_modules/less/test/css/media.css b/node_modules/less/test/css/media.css new file mode 100644 index 000000000..4e88ea698 --- /dev/null +++ b/node_modules/less/test/css/media.css @@ -0,0 +1,218 @@ +@media print { + .class { + color: blue; + } + .class .sub { + width: 42; + } + .top, + header > h1 { + color: #444444; + } +} +@media screen { + body { + max-width: 480; + } +} +@media all and (device-aspect-ratio: 16 / 9) { + body { + max-width: 800px; + } +} +@media all and (orientation: portrait) { + aside { + float: none; + } +} +@media handheld and (min-width: 42), screen and (min-width: 20em) { + body { + max-width: 480px; + } +} +@media print { + body { + padding: 20px; + } + body header { + background-color: red; + } +} +@media print and (orientation: landscape) { + body { + margin-left: 20px; + } +} +@media screen { + .sidebar { + width: 300px; + } +} +@media screen and (orientation: landscape) { + .sidebar { + width: 500px; + } +} +@media a and b { + .first .second .third { + width: 300px; + } + .first .second .fourth { + width: 3; + } +} +@media a and b and c { + .first .second .third { + width: 500px; + } +} +@media a, b and c { + body { + width: 95%; + } +} +@media a and x, b and c and x, a and y, b and c and y { + body { + width: 100%; + } +} +.a { + background: black; +} +@media handheld { + .a { + background: white; + } +} +@media handheld and (max-width: 100px) { + .a { + background: red; + } +} +.b { + background: black; +} +@media handheld { + .b { + background: white; + } +} +@media handheld and (max-width: 200px) { + .b { + background: red; + } +} +@media only screen and (max-width: 200px) { + body { + width: 480px; + } +} +@media print { + @page :left { + margin: 0.5cm; + } + @page :right { + margin: 0.5cm; + } + @page Test:first { + margin: 1cm; + } + @page :first { + size: 8.5in 11in; + @top-left { + margin: 1cm; + } + @top-left-corner { + margin: 1cm; + } + @top-center { + margin: 1cm; + } + @top-right { + margin: 1cm; + } + @top-right-corner { + margin: 1cm; + } + @bottom-left { + margin: 1cm; + } + @bottom-left-corner { + margin: 1cm; + } + @bottom-center { + margin: 1cm; + } + @bottom-right { + margin: 1cm; + } + @bottom-right-corner { + margin: 1cm; + } + @left-top { + margin: 1cm; + } + @left-middle { + margin: 1cm; + } + @left-bottom { + margin: 1cm; + } + @right-top { + margin: 1cm; + } + @right-middle { + content: "Page " counter(page); + } + @right-bottom { + margin: 1cm; + } + } +} +@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (min-resolution: 128dpcm) { + .b { + background: red; + } +} +body { + background: red; +} +@media (max-width: 500px) { + body { + background: green; + } +} +@media (max-width: 1000px) { + body { + background: red; + background: blue; + } +} +@media (max-width: 1000px) and (max-width: 500px) { + body { + background: green; + } +} +@media (max-width: 1200px) { + /* a comment */ +} +@media (max-width: 1200px) and (max-width: 900px) { + body { + font-size: 11px; + } +} +@media (min-width: 480px) { + .nav-justified > li { + display: table-cell; + } +} +@media (min-width: 768px) and (min-width: 480px) { + .menu > li { + display: table-cell; + } +} +@media all and tv { + .all-and-tv-variables { + var: all-and-tv; + } +} diff --git a/node_modules/less/test/css/merge.css b/node_modules/less/test/css/merge.css new file mode 100644 index 000000000..fe29dc83b --- /dev/null +++ b/node_modules/less/test/css/merge.css @@ -0,0 +1,34 @@ +.test1 { + transform: rotate(90deg), skew(30deg), scale(2, 4); +} +.test2 { + transform: rotate(90deg), skew(30deg); + transform: scaleX(45deg); +} +.test3 { + transform: scaleX(45deg); + background: url(data://img1.png); +} +.test4 { + transform: rotate(90deg), skew(30deg); + transform: scale(2, 4) !important; +} +.test5 { + transform: rotate(90deg), skew(30deg); + transform: scale(2, 4) !important; +} +.test6 { + transform: scale(2, 4); +} +.test-interleaved { + transform: t1, t2, t3; + background: b1, b2, b3; +} +.test-spaced { + transform: t1 t2 t3; + background: b1 b2, b3; +} +.test-interleaved-with-spaced { + transform: t1s, t2 t3s, t4 t5s t6s; + background: b1 b2s, b3, b4; +} diff --git a/node_modules/less/test/css/mixins-args.css b/node_modules/less/test/css/mixins-args.css new file mode 100644 index 000000000..c97232b76 --- /dev/null +++ b/node_modules/less/test/css/mixins-args.css @@ -0,0 +1,163 @@ +#hidden { + color: transparent; +} +#hidden1 { + color: transparent; +} +.two-args { + color: blue; + width: 10px; + height: 99%; + border: 2px dotted black; +} +.one-arg { + width: 15px; + height: 49%; +} +.no-parens { + width: 5px; + height: 49%; +} +.no-args { + width: 5px; + height: 49%; +} +.var-args { + width: 45; + height: 17%; +} +.multi-mix { + width: 10px; + height: 29%; + margin: 4; + padding: 5; +} +body { + padding: 30px; + color: #f00; +} +.scope-mix { + width: 8; +} +.content { + width: 600px; +} +.content .column { + margin: 600px; +} +#same-var-name { + radius: 5px; +} +#var-inside { + width: 10px; +} +.arguments { + border: 1px solid black; + width: 1px; +} +.arguments2 { + border: 0px; + width: 0px; +} +.arguments3 { + border: 0px; + width: 0px; +} +.arguments4 { + border: 0 1 2 3 4; + rest: 1 2 3 4; + width: 0; +} +.edge-case { + border: "{"; + width: "{"; +} +.slash-vs-math { + border-radius: 2px/5px; + border-radius: 5px/10px; + border-radius: 6px; +} +.comma-vs-semi-colon { + one: a; + two: b, c; + one: d, e; + two: f; + one: g; + one: h; + one: i; + one: j; + one: k; + two: l; + one: m, n; + one: o, p; + two: q; + one: r, s; + two: t; +} +#named-conflict { + four: a, 11, 12, 13; + four: a, 21, 22, 23; +} +.test-mixin-default-arg { + defaults: 1px 1px 1px; + defaults: 2px 2px 2px; +} +.selector { + margin: 2, 2, 2, 2; +} +.selector2 { + margin: 2, 2, 2, 2; +} +.selector3 { + margin: 4; +} +mixins-args-expand-op-1 { + m3: 1, 2, 3; +} +mixins-args-expand-op-2 { + m3: 4, 5, 6; +} +mixins-args-expand-op-3a { + m3: a, b, c; +} +mixins-args-expand-op-3b { + m4: 0, a, b, c; +} +mixins-args-expand-op-3c { + m4: a, b, c, 4; +} +mixins-args-expand-op-4a { + m3: a, b, c, d; +} +mixins-args-expand-op-4b { + m4: 0, a, b, c, d; +} +mixins-args-expand-op-4c { + m4: a, b, c, d, 4; +} +mixins-args-expand-op-5a { + m3: 1, 2, 3; +} +mixins-args-expand-op-5b { + m4: 0, 1, 2, 3; +} +mixins-args-expand-op-5c { + m4: 1, 2, 3, 4; +} +mixins-args-expand-op-6 { + m4: 0, 1, 2, 3; +} +mixins-args-expand-op-7 { + m4: 0, 1, 2, 3; +} +mixins-args-expand-op-8 { + m4: 1, 1.5, 2, 3; +} +mixins-args-expand-op-9 { + aa: 4 5 6 1 2 3 and again 4 5 6; + a4: and; + a8: 5; +} +#test-mixin-matching-when-default-2645 { + height: 20px; +} diff --git a/node_modules/less/test/css/mixins-closure.css b/node_modules/less/test/css/mixins-closure.css new file mode 100644 index 000000000..b1021b6fb --- /dev/null +++ b/node_modules/less/test/css/mixins-closure.css @@ -0,0 +1,9 @@ +.class { + width: 99px; +} +.overwrite { + width: 99px; +} +.nested .class { + width: 5px; +} diff --git a/node_modules/less/test/css/mixins-guards-default-func.css b/node_modules/less/test/css/mixins-guards-default-func.css new file mode 100644 index 000000000..798059164 --- /dev/null +++ b/node_modules/less/test/css/mixins-guards-default-func.css @@ -0,0 +1,129 @@ +guard-default-basic-1-1 { + case: 1; +} +guard-default-basic-1-2 { + default: 2; +} +guard-default-basic-2-0 { + default: 0; +} +guard-default-basic-2-2 { + case: 2; +} +guard-default-basic-3-0 { + default: 0; +} +guard-default-basic-3-2 { + case: 2; +} +guard-default-basic-3-3 { + case: 3; +} +guard-default-definition-order-0 { + default: 0; +} +guard-default-definition-order-2 { + case: 2; +} +guard-default-definition-order-2 { + case: 3; +} +guard-default-out-of-guard-0 { + case-0: default(); + case-1: 1; + default: 2; + case-2: default(); +} +guard-default-out-of-guard-1 { + default: default(); +} +guard-default-out-of-guard-2 { + default: default(); +} +guard-default-expr-not-1 { + case: 1; + default: 1; +} +guard-default-expr-eq-true { + case: true; +} +guard-default-expr-eq-false { + case: false; + default: false; +} +guard-default-expr-or-1 { + case: 1; +} +guard-default-expr-or-2 { + case: 2; + default: 2; +} +guard-default-expr-or-3 { + default: 3; +} +guard-default-expr-and-1 { + case: 1; +} +guard-default-expr-and-2 { + case: 2; +} +guard-default-expr-and-3 { + default: 3; +} +guard-default-expr-always-1 { + case: 1; + default: 1; +} +guard-default-expr-always-2 { + default: 2; +} +guard-default-expr-never-1 { + case: 1; +} +guard-default-multi-1-0 { + case: 0; +} +guard-default-multi-1-1 { + default-1: 1; +} +guard-default-multi-2-1 { + default-1: no; +} +guard-default-multi-2-2 { + default-2: no; +} +guard-default-multi-2-3 { + default-3: 3; +} +guard-default-multi-3-blue { + case-2: darkblue; +} +guard-default-multi-3-green { + default-color: green; +} +guard-default-multi-3-foo { + case-1: I am 'foo'; +} +guard-default-multi-3-baz { + default-string: I am 'baz'; +} +guard-default-multi-4 { + always: 1; + always: 2; + case: 2; +} +guard-default-not-ambiguos-2 { + case: 1; + not-default: 2; +} +guard-default-not-ambiguos-3 { + case: 1; + not-default-1: 2; + not-default-2: 2; +} +guard-default-scopes-3 { + 3: when default; +} +guard-default-scopes-1 { + 1: no condition; +} diff --git a/node_modules/less/test/css/mixins-guards.css b/node_modules/less/test/css/mixins-guards.css new file mode 100644 index 000000000..3b749af12 --- /dev/null +++ b/node_modules/less/test/css/mixins-guards.css @@ -0,0 +1,211 @@ +.light1 { + color: white; + margin: 1px; +} +.light2 { + color: black; + margin: 1px; +} +.max1 { + width: 6; +} +.max2 { + width: 8; +} +.glob1 { + margin: auto auto; +} +.ops1 { + height: gt-or-eq; + height: lt-or-eq; + height: lt-or-eq-alias; +} +.ops2 { + height: gt-or-eq; + height: not-eq; +} +.ops3 { + height: lt-or-eq; + height: lt-or-eq-alias; + height: not-eq; +} +.default1 { + content: default; +} +.test1 { + content: "true."; +} +.test2 { + content: "false."; +} +.test3 { + content: "false."; +} +.test4 { + content: "false."; +} +.test5 { + content: "false."; +} +.bool1 { + content: true and true; + content: true; + content: false, true; + content: false and true and true, true; + content: false, true and true; + content: false, false, true; + content: false, true and true and true, false; + content: not false; + content: not false and false, not false; +} +.equality-units { + test: pass; +} +.colorguardtest { + content: is red; + content: is not blue its red; + content: is not blue its purple; +} +.stringguardtest { + content: "theme1" is "theme1"; + content: "theme1" is not "theme2"; + content: "theme1" is 'theme1'; + content: "theme1" is not 'theme2'; + content: 'theme1' is "theme1"; + content: 'theme1' is not "theme2"; + content: 'theme1' is 'theme1'; + content: 'theme1' is not 'theme2'; + content: theme1 is not "theme2"; + content: theme1 is not 'theme2'; + content: theme1 is theme1; +} +.variouse-types-comparison { + /**/ + content: true is not equal to false; + content: false is not equal to true too; + /**/ + content: 1 is not equal to true; + content: true is not equal to 1 too; + /**/ + content: 2 is equal to 2px; + content: 2px is equal to 2 too; + /**/ + content: 3 is equal to 3; + content: 3 is equal to 3 too; + /**/ + content: 5 is not equal to 4; + content: 4 is not equal to 5 too; + /**/ + content: abc is equal to abc; + content: abc is equal to abc too; + /**/ + content: abc is not equal to "abc"; + content: "abc" is not equal to abc too; + /**/ + content: 'abc' is less than "abd"; + content: "abd" is greater than 'abc' too; + content: 'abc' is not equal to "abd"; + content: "abd" is not equal to 'abc' too; + /**/ + content: 6 is equal to 6; + content: 6 is equal to 6 too; + /**/ + content: 8 is less than 9 too; + content: 9 is greater than 8; + content: 9 is not equal to 8; + content: 8 is not equal to 9 too; + /**/ + content: a is not equal to b; + content: b is not equal to a too; + /**/ + content: 1 2 is not equal to 3; + content: 3 is not equal to 1 2 too; +} +.list-comparison { + /**/ + content: a b c is equal to a b c; + content: a b c is equal to a b c too; + /**/ + content: a b c is not equal to a b d; + content: a b d is not equal to a b c too; + /**/ + content: a, b, c is equal to a, b, c; + content: a, b, c is equal to a, b, c too; + /**/ + content: a, b, c is not equal to a, b, d; + content: a, b, d is not equal to a, b, c too; + /**/ + content: 1 2px 300ms is equal to 1em 2 0.3s; + content: 1em 2 0.3s is equal to 1 2px 300ms too; + /**/ + content: 1 2 3 is not equal to 1, 2, 3; + content: 1, 2, 3 is not equal to 1 2 3 too; + /**/ + content: 1, 2, 3 is equal to 1, 2, 3; + content: 1, 2, 3 is equal to 1, 2, 3 too; + /**/ + content: 1 2 3 1, 2, 3 is equal to 1 2 3 1, 2, 3; + content: 1 2 3 1, 2, 3 is equal to 1 2 3 1, 2, 3 too; + /**/ + content: 1 2 3 1, 2, 3 is not equal to 1, 2, 3 1 2 3; + content: 1, 2, 3 1 2 3 is not equal to 1 2 3 1, 2, 3 too; + /**/ + content: 1 2 3 1, 2, 3 4 is equal to 1 2 3 1, 2, 3 4; + content: 1 2 3 1, 2, 3 4 is equal to 1 2 3 1, 2, 3 4 too; +} +#tryNumberPx { + catch: all; + declare: 4; + declare: 4px; +} +.call-lock-mixin .call-inner-lock-mixin { + a: 1; + x: 1; +} +.mixin-generated-class { + a: 1; +} +#guarded-caller { + guarded: namespace; + silent: namespace; + guarded: with default; +} +#guarded-deeper { + should: match 1; +} +#parenthesisNot-true { + parenthesisNot: just-value; + parenthesisNot: negated twice 1; + parenthesisNot: negated twice 2; + parenthesisNot: negated twice 3; +} +#parenthesisNot-false { + parenthesisNot: negated once inside; + parenthesisNot: negated once outside; + parenthesisNot: negated once middle; +} +#orderOfEvaluation-false-false-true { + no-parenthesis: evaluated true 1a; + no-parenthesis: evaluated true 1b; + no-parenthesis: evaluated true 1d; + no-parenthesis: evaluated true 3; + no-parenthesis: evaluated true 4; + with-parenthesis: evaluated true; +} +#orderOfEvaluation-false-false-false { + no-parenthesis: evaluated true 2a; + no-parenthesis: evaluated true 2b; + no-parenthesis: evaluated true 2c; +} +#orderOfEvaluation-true-true-false { + no-parenthesis: evaluated true 1a; + no-parenthesis: evaluated true 1b; + no-parenthesis: evaluated true 1c; + no-parenthesis: evaluated true 1d; + no-parenthesis: evaluated true 1e; + no-parenthesis: evaluated true 2a; + no-parenthesis: evaluated true 2b; + no-parenthesis: evaluated true 2c; + no-parenthesis: evaluated true 4; + with-parenthesis: evaluated true; +} diff --git a/node_modules/less/test/css/mixins-important.css b/node_modules/less/test/css/mixins-important.css new file mode 100644 index 000000000..3d53d431c --- /dev/null +++ b/node_modules/less/test/css/mixins-important.css @@ -0,0 +1,57 @@ +.class { + border: 1; + boxer: 1; + border-width: 1; + border: 2 !important; + boxer: 2 !important; + border-width: 2 !important; + border: 3; + boxer: 3; + border-width: 3; + border: 4 !important; + boxer: 4 !important; + border-width: 4 !important; + border: 5; + boxer: 5; + border-width: 5; + border: 0 !important; + boxer: 0 !important; + border-width: 0 !important; + border: 9 !important; + border: 9; + boxer: 9; + border-width: 9; +} +.class .inner { + test: 1; +} +.class .inner { + test: 2 !important; +} +.class .inner { + test: 3; +} +.class .inner { + test: 4 !important; +} +.class .inner { + test: 5; +} +.class .inner { + test: 0 !important; +} +.class .inner { + test: 9; +} +.when-calling-nested-issue-2394 { + width: auto !important; +} +.when-calling-nested-with-param-issue-2394 { + width: 10px !important; +} +.class1-2421 { + margin: 5px !important; +} +.class2-2421 { + margin: 5px; +} diff --git a/node_modules/less/test/css/mixins-interpolated.css b/node_modules/less/test/css/mixins-interpolated.css new file mode 100644 index 000000000..0d511fc67 --- /dev/null +++ b/node_modules/less/test/css/mixins-interpolated.css @@ -0,0 +1,43 @@ +.123 { + a: 0; +} +.foo { + a: 1; +} +.foo { + a: 2; +} +#foo { + a: 3; +} +#foo { + a: 4; +} +mi-test-a { + a: 0; + a: 1; + a: 2; + a: 3; + a: 4; +} +.b .bb.foo-xxx .yyy-foo#foo .foo.bbb { + b: 1; +} +mi-test-b { + b: 1; +} +#foo-foo > .bar .baz { + c: c; +} +mi-test-c-1 > .bar .baz { + c: c; +} +mi-test-c-2 .baz { + c: c; +} +mi-test-c-3 { + c: c; +} +mi-test-d { + gender: "Male"; +} diff --git a/node_modules/less/test/css/mixins-named-args.css b/node_modules/less/test/css/mixins-named-args.css new file mode 100644 index 000000000..e460aa104 --- /dev/null +++ b/node_modules/less/test/css/mixins-named-args.css @@ -0,0 +1,27 @@ +.named-arg { + color: blue; + width: 5px; + height: 99%; + args: 1px 100%; + text-align: center; +} +.class { + width: 5px; + height: 19%; + args: 1px 20%; +} +.all-args-wrong-args { + width: 10px; + height: 9%; + args: 2px 10%; +} +.named-args2 { + width: 15px; + height: 49%; + color: #646464; +} +.named-args3 { + width: 5px; + height: 29%; + color: #123456; +} diff --git a/node_modules/less/test/css/mixins-nested.css b/node_modules/less/test/css/mixins-nested.css new file mode 100644 index 000000000..6378c4756 --- /dev/null +++ b/node_modules/less/test/css/mixins-nested.css @@ -0,0 +1,14 @@ +.class .inner { + height: 300; +} +.class .inner .innest { + width: 30; + border-width: 60; +} +.class2 .inner { + height: 600; +} +.class2 .inner .innest { + width: 60; + border-width: 120; +} diff --git a/node_modules/less/test/css/mixins-pattern.css b/node_modules/less/test/css/mixins-pattern.css new file mode 100644 index 000000000..1515f32a9 --- /dev/null +++ b/node_modules/less/test/css/mixins-pattern.css @@ -0,0 +1,51 @@ +.zero { + variadic: true; + named-variadic: true; + zero: 0; + one: 1; + two: 2; + three: 3; +} +.one { + variadic: true; + named-variadic: true; + one: 1; + one-req: 1; + two: 2; + three: 3; +} +.two { + variadic: true; + named-variadic: true; + two: 2; + three: 3; +} +.three { + variadic: true; + named-variadic: true; + three-req: 3; + three: 3; +} +.left { + left: 1; +} +.right { + right: 1; +} +.border-right { + color: black; + border-right: 4px; +} +.border-left { + color: black; + border-left: 4px; +} +.only-right { + right: 33; +} +.only-left { + left: 33; +} +.left-right { + both: 330; +} diff --git a/node_modules/less/test/css/mixins.css b/node_modules/less/test/css/mixins.css new file mode 100644 index 000000000..4d9824f5c --- /dev/null +++ b/node_modules/less/test/css/mixins.css @@ -0,0 +1,144 @@ +.mixin { + border: 1px solid black; +} +.mixout { + border-color: orange; +} +.borders { + border-style: dashed; +} +.mixin > * { + border: do not match me; +} +#namespace .borders { + border-style: dotted; +} +#namespace .biohazard { + content: "death"; +} +#namespace .biohazard .man { + color: transparent; +} +#theme > .mixin { + background-color: grey; +} +#container { + color: black; + border: 1px solid black; + border-color: orange; + background-color: grey; +} +#header .milk { + color: white; + border: 1px solid black; + background-color: grey; +} +#header #cookie { + border-style: dashed; +} +#header #cookie .chips { + border-style: dotted; +} +#header #cookie .chips .calories { + color: black; + border: 1px solid black; + border-color: orange; + background-color: grey; +} +.secure-zone { + color: transparent; +} +.direct { + border-style: dotted; +} +.bo, +.bar { + width: 100%; +} +.bo { + border: 1px; +} +.ar.bo.ca { + color: black; +} +.jo.ki { + background: none; +} +.amp.support { + color: orange; +} +.amp.support .higher { + top: 0px; +} +.amp.support.deeper { + height: auto; +} +.extended { + width: 100%; + border: 1px; + background: none; + color: orange; + top: 0px; + height: auto; +} +.extended .higher { + top: 0px; +} +.extended.deeper { + height: auto; +} +.do .re .mi .fa .sol .la .si { + color: cyan; +} +.mutli-selector-parents { + color: cyan; +} +.foo .bar { + width: 100%; +} +.underParents { + color: red; +} +.parent .underParents { + color: red; +} +* + h1 { + margin-top: 25px; +} +legend + h1 { + margin-top: 0; +} +h1 + * { + margin-top: 10px; +} +* + h2 { + margin-top: 20px; +} +legend + h2 { + margin-top: 0; +} +h2 + * { + margin-top: 8px; +} +* + h3 { + margin-top: 15px; +} +legend + h3 { + margin-top: 0; +} +h3 + * { + margin-top: 5px; +} +.error { + background-image: "/a.png"; + background-position: center center; +} +.test-rec .recursion { + color: black; +} +.button { + padding-left: 44px; +} +.button.large { + padding-left: 40em; +} diff --git a/node_modules/less/test/css/modifyVars/extended.css b/node_modules/less/test/css/modifyVars/extended.css new file mode 100644 index 000000000..32edb38f1 --- /dev/null +++ b/node_modules/less/test/css/modifyVars/extended.css @@ -0,0 +1,9 @@ +#header { + color: #333333; + border-left: 1px; + border-right: 2px; +} +#footer { + color: #114411; + border-color: #842210; +} diff --git a/node_modules/less/test/css/no-output.css b/node_modules/less/test/css/no-output.css new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/less/test/css/no-strict-math/mixins-guards.css b/node_modules/less/test/css/no-strict-math/mixins-guards.css new file mode 100644 index 000000000..81a2d7f9e --- /dev/null +++ b/node_modules/less/test/css/no-strict-math/mixins-guards.css @@ -0,0 +1,12 @@ +.test-2798 { + regression: fixed; +} +.conditions-parser-1 { + only-atomic: ok; +} +.conditions-parser-2 { + only-atomic-with-nested-parenthesis: ok; +} +.conditions-parser-3 { + only-atomic-nested-parenthesis-on-right: ok; +} diff --git a/node_modules/less/test/css/no-strict-math/no-sm-operations.css b/node_modules/less/test/css/no-strict-math/no-sm-operations.css new file mode 100644 index 000000000..00c55660b --- /dev/null +++ b/node_modules/less/test/css/no-strict-math/no-sm-operations.css @@ -0,0 +1,15 @@ +.named-colors-in-expressions { + color-0: 0 -red; + color-1: #000101; + color-2: #ff0000; + color-3: #ff0000; + background-color: blue-2; + color: green-black; + animation: blue-change 5s infinite; +} +.named-colors-in-expressions-bar-red { + x: y; +} +.named-colors-in-expressions-barred { + a: a; +} diff --git a/node_modules/less/test/css/operations.css b/node_modules/less/test/css/operations.css new file mode 100644 index 000000000..61ce933f8 --- /dev/null +++ b/node_modules/less/test/css/operations.css @@ -0,0 +1,50 @@ +#operations { + color: #111111; + color-2: #f8f800; + height: 9px; + width: 3em; + subtraction: 0; + division: 1; +} +#operations .spacing { + height: 9px; + width: 3em; +} +.with-variables { + height: 16em; + width: 24em; + size: 1cm; +} +.with-functions { + color: #646464; + color: #ff8080; + color: #c94a4a; +} +.negative { + height: 0px; + width: 4px; +} +.shorthands { + padding: -1px 2px 0 -4px; +} +.rem-dimensions { + font-size: 5.5rem; +} +.colors { + color: #123; + border-color: #334455; + background-color: #000000; +} +.colors .other { + color: #222222; + border-color: #222222; +} +.negations { + variable: -4px; + variable1: 0px; + variable2: 0px; + variable3: 8px; + variable4: 0px; + paren: -4px; + paren2: 16px; +} diff --git a/node_modules/less/test/css/parens.css b/node_modules/less/test/css/parens.css new file mode 100644 index 000000000..0e8cc7c8f --- /dev/null +++ b/node_modules/less/test/css/parens.css @@ -0,0 +1,36 @@ +.parens { + border: 2px solid black; + margin: 1px 3px 16 3; + width: 36; + padding: 2px 36px; +} +.more-parens { + padding: 8 4 4 4px; + width-all: 96; + width-first: 16 * 6; + width-keep: (4 * 4) * 6; + height-keep: (7 * 7) + (8 * 8); + height-all: 113; + height-parts: 49 + 64; + margin-keep: (4 * (5 + 5) / 2) - (4 * 2); + margin-parts: 20 - 8; + margin-all: 12; + border-radius-keep: 4px * (1 + 1) / 4 + 3px; + border-radius-parts: 8px / 7px; + border-radius-all: 5px; +} +.negative { + neg-var: -1; + neg-var-paren: -(1); +} +.nested-parens { + width: 2 * (4 * (2 + (1 + 6))) - 1; + height: ((2 + 3) * (2 + 3) / (9 - 4)) + 1; +} +.mixed-units { + margin: 2px 4em 1 5pc; + padding: 6px 1em 2px 2; +} +.test-false-negatives { + a: (; +} diff --git a/node_modules/less/test/css/plugin.css b/node_modules/less/test/css/plugin.css new file mode 100644 index 000000000..0b6910754 --- /dev/null +++ b/node_modules/less/test/css/plugin.css @@ -0,0 +1,49 @@ +@charset "utf-8"; +.other { + trans: transitive; +} +.class { + trans: transitive; + global: global; + local: test-local(); + shadow: global; +} +.class .local { + global: global; + local: local; + shadow: local; +} +.class { + ns-mixin-global: global; + ns-mixin-local: local; + ns-mixin-shadow: local; + mixin-local: local; + mixin-global: global; + mixin-shadow: local; + ruleset-local: local; + ruleset-global: global; + ruleset-shadow: local; + class-local: test-local(); +} +@media screen { + .test { + result: global; + } +} +@font-face { + result: global; +} +@media screen and (min-width: 100px) and (max-width: 400px) { + .test { + result: global; + } +} +@media screen { + .test { + result: local; + } +} +.root { + prop: value; +} +@arbitrary value after (); diff --git a/node_modules/less/test/css/postProcessorPlugin/postProcessor.css b/node_modules/less/test/css/postProcessorPlugin/postProcessor.css new file mode 100644 index 000000000..8e5489486 --- /dev/null +++ b/node_modules/less/test/css/postProcessorPlugin/postProcessor.css @@ -0,0 +1,4 @@ +hr {height:50px;} +.test { + color: white; +} diff --git a/node_modules/less/test/css/preProcessorPlugin/preProcessor.css b/node_modules/less/test/css/preProcessorPlugin/preProcessor.css new file mode 100644 index 000000000..6446ebfd4 --- /dev/null +++ b/node_modules/less/test/css/preProcessorPlugin/preProcessor.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/node_modules/less/test/css/property-name-interp.css b/node_modules/less/test/css/property-name-interp.css new file mode 100644 index 000000000..315815e3f --- /dev/null +++ b/node_modules/less/test/css/property-name-interp.css @@ -0,0 +1,21 @@ +pi-test { + border: 0; + @not-variable: @not-variable; + ufo-width: 50%; + *-z-border: 1px dashed blue; + -www-border-top: 2px; + radius-is-not-a-border: true; + border-top-left-radius: 2em; + border-top-red-radius-: 3pt; + global-local-mixer-property: strong; +} +pi-test-merge { + pre-property-ish: high, middle, low, base; + pre-property-ish+: nice try dude; +} +pi-indirect-vars { + auto: auto; +} +pi-complex-values { + 3px rgba(255, 255, 0, 0.5), 3.141592653589793 /* foo */3px rgba(255, 255, 0, 0.5), 3.141592653589793 /* foo */: none; +} diff --git a/node_modules/less/test/css/rulesets.css b/node_modules/less/test/css/rulesets.css new file mode 100644 index 000000000..408c76aad --- /dev/null +++ b/node_modules/less/test/css/rulesets.css @@ -0,0 +1,33 @@ +#first > .one { + font-size: 2em; +} +#first > .one > #second .two > #deux { + width: 50%; +} +#first > .one > #second .two > #deux #third { + height: 100%; +} +#first > .one > #second .two > #deux #third:focus { + color: black; +} +#first > .one > #second .two > #deux #third:focus #fifth > #sixth .seventh #eighth + #ninth { + color: purple; +} +#first > .one > #second .two > #deux #fourth, +#first > .one > #second .two > #deux #five, +#first > .one > #second .two > #deux #six { + color: #110000; +} +#first > .one > #second .two > #deux #fourth .seven, +#first > .one > #second .two > #deux #five .seven, +#first > .one > #second .two > #deux #six .seven, +#first > .one > #second .two > #deux #fourth .eight > #nine, +#first > .one > #second .two > #deux #five .eight > #nine, +#first > .one > #second .two > #deux #six .eight > #nine { + border: 1px solid black; +} +#first > .one > #second .two > #deux #fourth #ten, +#first > .one > #second .two > #deux #five #ten, +#first > .one > #second .two > #deux #six #ten { + color: red; +} diff --git a/node_modules/less/test/css/scope.css b/node_modules/less/test/css/scope.css new file mode 100644 index 000000000..caeb1f0a8 --- /dev/null +++ b/node_modules/less/test/css/scope.css @@ -0,0 +1,38 @@ +.tiny-scope { + color: #989; +} +.scope1 { + color: blue; + border-color: black; +} +.scope1 .scope2 { + color: blue; +} +.scope1 .scope2 .scope3 { + color: red; + border-color: black; + background-color: white; +} +.scope { + scoped-val: green; +} +.heightIsSet { + height: 1024px; +} +.useHeightInMixinCall { + mixin-height: 1024px; +} +.imported { + exists: true; +} +.testImported { + exists: true; +} +#allAreUsedHere { + default: 'top level'; + scope: 'top level'; + sub-scope-only: 'inside'; +} +#parentSelectorScope { + prop: white; +} diff --git a/node_modules/less/test/css/selectors.css b/node_modules/less/test/css/selectors.css new file mode 100644 index 000000000..f0992a5cd --- /dev/null +++ b/node_modules/less/test/css/selectors.css @@ -0,0 +1,170 @@ +h1 a:hover, +h2 a:hover, +h3 a:hover, +h1 p:hover, +h2 p:hover, +h3 p:hover { + color: red; +} +#all { + color: blue; +} +#the { + color: blue; +} +#same { + color: blue; +} +ul, +li, +div, +q, +blockquote, +textarea { + margin: 0; +} +td { + margin: 0; + padding: 0; +} +td, +input { + line-height: 1em; +} +a { + color: red; +} +a:hover { + color: blue; +} +div a { + color: green; +} +p a span { + color: yellow; +} +.foo .bar .qux, +.foo .baz .qux { + display: block; +} +.qux .foo .bar, +.qux .foo .baz { + display: inline; +} +.qux.foo .bar, +.qux.foo .baz { + display: inline-block; +} +.qux .foo .bar .biz, +.qux .foo .baz .biz { + display: none; +} +.a.b.c { + color: red; +} +.c .b.a { + color: red; +} +.foo .p.bar { + color: red; +} +.foo.p.bar { + color: red; +} +.foo + .foo { + background: amber; +} +.foo + .foo { + background: amber; +} +.foo + .foo, +.foo + .bar, +.bar + .foo, +.bar + .bar { + background: amber; +} +.foo a > .foo a, +.foo a > .bar a, +.foo a > .foo b, +.foo a > .bar b, +.bar a > .foo a, +.bar a > .bar a, +.bar a > .foo b, +.bar a > .bar b, +.foo b > .foo a, +.foo b > .bar a, +.foo b > .foo b, +.foo b > .bar b, +.bar b > .foo a, +.bar b > .bar a, +.bar b > .foo b, +.bar b > .bar b { + background: amber; +} +.other ::fnord { + color: red; +} +.other::fnord { + color: red; +} +.other ::bnord { + color: red; +} +.other::bnord { + color: red; +} +.blood { + color: red; +} +.bloodred { + color: green; +} +#blood.blood.red.black:blood { + color: black; +} +:nth-child(3) { + selector: interpolated; +} +.test:nth-child(3) { + selector: interpolated; +} +.test:nth-child(odd):not(:nth-child(3)) { + color: #ff0000; +} +[prop], +[prop=10%], +[prop="value3"], +[prop*="val3"], +[|prop~="val3"], +[*|prop$="val3"], +[ns|prop^="val3"], +[3^="val3"], +[3=3], +[3] { + attributes: yes; +} +/* +Large comment means chunk will be emitted after } which means chunk will begin with whitespace... +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +*/ +.blood { + color: red; +} +.foo:not(.tst.only-nested .level2:hover) { + test: only-nested; +} +.foo.nestend-and-non-nested:not(.tst.nestend-and-non-nested:hover) { + test: nestend-and-non-nested; +} +.selector:not(:hover) { + test: global scope; +} +.extend-this, +.active.first-level .second-level, +.first-level .second-level.active2 { + content: '\2661'; +} diff --git a/node_modules/less/test/css/static-urls/urls.css b/node_modules/less/test/css/static-urls/urls.css new file mode 100644 index 000000000..58678b1a6 --- /dev/null +++ b/node_modules/less/test/css/static-urls/urls.css @@ -0,0 +1,46 @@ +@import "css/background.css"; +@import "folder (1)/import-test-d.css"; +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), url(folder\ \(1\)/fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(folder\ \(1\)/images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(folder\ \(1\)/bg.jpg) no-repeat, url(folder\ \(1\)/bg.png) repeat-x top left, url(folder\ \(1\)/bg); +} +.values { + url: url('folder (1)/Trebuchet'); +} +#logo { + width: 100px; + height: 100px; + background: url('assets/logo.png'); + background: url("#inline-svg"); +} +@font-face { + font-family: xecret; + src: url('assets/xecret.ttf'); +} +#secret { + font-family: xecret, sans-serif; +} +#imported-relative-path { + background-image: url(../data/image.jpg); + border-image: url('../data/image.jpg'); +} diff --git a/node_modules/less/test/css/strict-units/strict-units.css b/node_modules/less/test/css/strict-units/strict-units.css new file mode 100644 index 000000000..f09f00847 --- /dev/null +++ b/node_modules/less/test/css/strict-units/strict-units.css @@ -0,0 +1,4 @@ +.units { + cancels-to-nothing: 1; + cancels: 6px; +} diff --git a/node_modules/less/test/css/strings.css b/node_modules/less/test/css/strings.css new file mode 100644 index 000000000..b40cf6abb --- /dev/null +++ b/node_modules/less/test/css/strings.css @@ -0,0 +1,55 @@ +#strings { + background-image: url("http://son-of-a-banana.com"); + quotes: "~" "~"; + content: "#*%:&^,)!.(~*})"; + empty: ""; + brackets: "{" "}"; + escapes: "\"hello\" \\world"; + escapes2: "\"llo"; +} +#comments { + content: "/* hello */ // not-so-secret"; +} +#single-quote { + quotes: "'" "'"; + content: '""#!&""'; + empty: ''; + semi-colon: ';'; +} +#escaped { + filter: DX.Transform.MS.BS.filter(opacity=50); +} +#one-line { + image: url(http://tooks.com); +} +#crazy { + image: url(http://), "}", url("http://}"); +} +#interpolation { + url: "http://lesscss.org/dev/image.jpg"; + url2: "http://lesscss.org/image-256.jpg"; + url3: "http://lesscss.org#456"; + url4: "http://lesscss.org/hello"; + url5: "http://lesscss.org/54.4px"; +} +.mix-mul-class { + color: blue; + color: red; + color: black; + color: orange; +} +.watermark { + family: Univers, Arial, Verdana, San-Serif; +} +#iterated-interpolation .mixin { + width: 100px; + weird: 100px; + width-str: "100px"; + weird-str: "100px"; +} +#iterated-interpolation .interpolation-mixin { + width: 100px; + weird: 100px; + width-str: "100px"; + weird-str: "100px"; +} diff --git a/node_modules/less/test/css/url-args/urls.css b/node_modules/less/test/css/url-args/urls.css new file mode 100644 index 000000000..ec53bd696 --- /dev/null +++ b/node_modules/less/test/css/url-args/urls.css @@ -0,0 +1,56 @@ +@font-face { + src: url("/fonts/garamond-pro.ttf?424242"); + src: local(Futura-Medium), url(fonts.svg?424242#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html?424242") no-repeat 0 4px; + background: url("img.jpg?424242") center / 100px; + background: #fff url(image.png?424242) center / 1px 100px repeat-x scroll content-box padding-box; +} +#misc { + background-image: url(images/image.jpg?424242); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700&424242); + background-image: url("http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700&424242"); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(bg.jpg?424242) no-repeat, url(bg.png?424242) repeat-x top left, url(bg?424242); +} +.values { + url: url('Trebuchet?424242'); +} +@font-face { + font-family: xecret; + src: url('../assets/xecret.ttf?424242'); +} +#secret { + font-family: xecret, sans-serif; +} +#data-uri { + uri: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k="); +} +#data-uri-guess { + uri: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k="); +} +#data-uri-ascii { + uri-1: url("data:text/html,%3Chtml%3E%3Ch1%3EThis%20page%20is%20100%25%20Awesome.%3C%2Fh1%3E%3C%2Fhtml%3E%0A"); + uri-2: url("data:text/html,%3Chtml%3E%3Ch1%3EThis%20page%20is%20100%25%20Awesome.%3C%2Fh1%3E%3C%2Fhtml%3E%0A"); +} +#svg-functions { + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23000000%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23000000%22%2F%3E%3Cstop%20offset%3D%223%25%22%20stop-color%3D%22%23ffa500%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%221%25%22%20stop-color%3D%22%23c4c4c4%22%2F%3E%3Cstop%20offset%3D%223%25%22%20stop-color%3D%22%23ffa500%22%2F%3E%3Cstop%20offset%3D%225%25%22%20stop-color%3D%22%23008000%22%2F%3E%3Cstop%20offset%3D%2295%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); +} +#data-uri-with-spaces { + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(' data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9=='); +} diff --git a/node_modules/less/test/css/urls.css b/node_modules/less/test/css/urls.css new file mode 100644 index 000000000..6a9a8db23 --- /dev/null +++ b/node_modules/less/test/css/urls.css @@ -0,0 +1,87 @@ +@import "css/background.css"; +@import "import/import-test-d.css"; +@import "file.css"; +.gray-gradient { + background: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220%22%2F%3E%3Cstop%20offset%3D%2260%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.05%22%2F%3E%3Cstop%20offset%3D%2270%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.1%22%2F%3E%3Cstop%20offset%3D%2273%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.15%22%2F%3E%3Cstop%20offset%3D%2275%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.2%22%2F%3E%3Cstop%20offset%3D%2280%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.25%22%2F%3E%3Cstop%20offset%3D%2285%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.3%22%2F%3E%3Cstop%20offset%3D%2288%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.35%22%2F%3E%3Cstop%20offset%3D%2290%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.4%22%2F%3E%3Cstop%20offset%3D%2295%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.45%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23999999%22%20stop-opacity%3D%220.5%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); +} +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), url(fonts.svg#MyGeometricModern) format("svg"); + not-a-comment: url(//z); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; + background: url("img.jpg") center / 100px; + background: #fff url(image.png) center / 1px 100px repeat-x scroll content-box padding-box; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); + background-image: url("http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700"); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + url: url('Trebuchet'); +} +#logo { + width: 100px; + height: 100px; + background: url('import/assets/logo.png'); + background: url("#inline-svg"); +} +@font-face { + font-family: xecret; + src: url('import/assets/xecret.ttf'); +} +#secret { + font-family: xecret, sans-serif; +} +#imported-relative-path { + background-image: url(../data/image.jpg); + border-image: url('../data/image.jpg'); +} +#relative-url-import { + background-image: url(../data/image.jpg); + border-image: url('../data/image.jpg'); +} +#data-uri { + uri: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k="); + background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k="), url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k="); + uri-fragment: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k=#fragment"); +} +#data-uri-guess { + uri: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA4KCwwLCQ4MCwwQDw4RFSMXFRMTFSsfIRojMy02NTItMTA4P1FFODxNPTAxRmBHTVRWW1xbN0RjamNYalFZW1f/2wBDAQ8QEBUSFSkXFylXOjE6V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1f/wgARCAGuAoADASIAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAECAwUEBv/EABkBAQEBAQEBAAAAAAAAAAAAAAABAwIEBf/aAAwDAQACEAMQAAABwG/nAABAJAFAAJgSAAAAAAAAAAAAAAAAAAAAAQAAABCJgABQAAAAARMCQBQACYEgANsst4GuAAAAAAAAAAAAAAAAgAAAAEQAACgRMSAAAAgEokCgAAEwJL4+jr08Onl9viX9G2HkHp8QWAAAAAAAAAAAACAAAAAIgAAKABAJRIAAACASiQKAAAXoz20Vnx/Rm2emvnzg9XhNc89oGuAAAAAAAAAACAAAAACEAACgAAQBMCQAAAAgEolV4+i8/r+benzbecO8wALXnGWUXz267n6+T3eFf065eMerwheQAAAA56Pd489qobecAAAAAIQAAKAAAIAAEwJAAAACLVnnS/S5z5/1d65FnLXL2/NDbzgbY7Yyr0caaKz4/ozbPXXDOsPX4JQL16uvk9/FJ9HkhDvOUBMaYent48x5fbTbKepk0z93zAvIAAiJgAAUAAAQAAAASiQAAAAEtbNl6NK1S7Za5becLANctcpQsA2y1xlCxatst9/Zznh+m9PmgU1y+h8gO+FquNNFHl916Q282uWuW3nCwIIAAAKAAAAgAAAAAJRIAAAACAbY7YrKCTemq0qAWNM9pc6rc9Verzc9wNMrTRl6LVOs9ctcu8wsAATGssZgISYAAAFAAAAQAAAAAAAEokAAAAA2x2xARtjsuSCSiRtSFraunn9f0fHzzx9Ga7rnFens+cFmuWuUoIAA1x2XEIAAACgAAAIAAAAiQAAAACUCQAAJiS+emYA2x1MggG2O2KzfOc9tFHl9t80+jyaZXz2882p78t/Nl9F8/LWLRplA6zAbY7LiEABQAAABAAAAABEwJAAAAAAmBKJAANctcgBrlqZAGhbG1QEAbY7LiEtpnfx/S6XOhj6PR5ltvNiPZ84BtjquQAAAAACAAAAAABAEwJRIAAAAABKBINctcgBrlqZAbY7GIAAG2OxiBems6Voy3nXHXXz5CwDXPXEAAAAEEwAAAAAACAAAAlEgAAAAAAG2WuJJoZ67+idct0oTna+iDxpiwABqzIA2x2MQWm2QAL86Xx6/K47qNcABBMAAAAAAAAgAAAAAJRIAAAAALGm/R92enl9Rx2CgAR5vUTk+D6V1z8o7/K04yy2xvIDWsFQa5a+yXDy+7wk3pp5fd9FxfOz2nPeneWA9nzwAAAAAABBMAAAAAAAAmBIAAAJ7/n6megcaAAAAAAImieHj/U4d8/NtMtMtstcSUSe3t0jLb5yprjOuO2epk8/rvekejyUGmQAAAAABAAAAAAAAAAAAlAkDfDtzroSY7AAAAAAAKXolwuPz30/k644eRrk9Xl6svXx2Y7fJvb4t8J0nEGhbG9AAABvh0pea2xsEEwAAAAAETAkAAAAAAAFvqeD9BnoHGgAAAAAAFL0ugKpeicTw/QfP65O3xO4dAZbR4feTnU6izh+b6Xw9c8EaZl4KgAdvjfT8d8Pw9Lm9chYAAAAABAEwJAAAAAAB1uvzujjsE6AAAAAARNEXFApel0z+X+r+U04v6sMeuPrHj9mOwKAB890/ZbrlEueufyPp464+Tn6HXrnx9Iz04nN9nj2xCwAAAAAgAoIBKJAAAAAPZ3/lPTx39Iw3z0BQABUsABRZJCq2ok2Fj5b6r5jvOcdctONO/wDOTzfq3J6WeuglAAAAAUvybOVU2wAAAAEEwAAKACAJgSiQAAB0ubpL6PR0K8d7a8GZe68Xs56kK83pJ4vToBmNIkBYrGiAridvl9c8eDXEXNq6+OXStVnY6vG6eWuk/J7WfTvF7eOwUy5lnr4CNcgvIAABAAABQAAAAQBMCUSAAW6/GS/WZ/P9fPTDx/Qjhev3+Y0359V6bxejm65lJuikaY1G7ONFBbOu9fMY/TcbTLy+jG1mVSxLsy+vx9T5nPTAa5LVGsZlBAAACAAAACgAAAAAAAgCYEoEgA26fGTr6nT5P18dfQub7ee9aTEL0AVCmqVvNJbqULF6i0VjDD31s5t+mMdmMvk4d6bZBeQAABBKAAAACgAAEIkUAAAAAACAASgSgSADf2cxL3vV8u56+tr8x6Je+5O869zHaWK20FCApEiulOanQ+epTTMOuQBBKAAAAACgAAAAQITAlE0AAAAAAACAAAASgSgSgSgSgaa+ZL7r84vUnlI6mHiF6w65lAAAAAABQAAAAAACEAAAJgSiQKAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAhAAAAAAACYEokCgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAJgSgSAKAAAAAAAAAAAAAAAAAAAAAERMAAAAAAB//xAAtEAACAQIEBgEEAwADAAAAAAABAgMAEQQQEiAhMDEyM1AUEyJAYCNBQ0KAkP/aAAgBAQABBQL/AKFKjMP0/CePFRi36dHIYzJM0gqUR/qC8STc/pd6vkeEeQQsP0K3JHEyH7ssJ2YmMaf0AVoVo5o9Db4+7OOQxmSdnFSGPTzhh2ZGUqfWjKPEaVmf6jRIGZxZto8eQ2KL0xuc7crDtePFgWtUkRj9ivE7W8ed6vk32jZhKnhBHIBIoknJmJphb1t8r0vZtk67Urrtjcxs+Juta1+kRypO71/+W2TybW4LsG3/AC5Mnk9e3ZsTi54nYguzG7bb1er5Dx8gcS/f699sfk2jglCmhcDeOzkR+T2Endsj7tr8MhSm64lArhb0ylTsXs5Efd7CTybE2oLsxuckldKZixUlWdyzMLbB4+QnT1/9yd+xOmxeC75O/IC9dE5A8Xr/AO5O/YnTYeEed6vkBcubvlhfLJErhhY23nx+wk8mxOmyTrui8mQpTpPyuB4mOQIp6bX9jJ37E6ZoLuxu25OmQ2nx7ZPJ7CTrsTpnH13/AOWY6ngb5P02R+T2L9NibB497ducffnJ3bE9kfHsj65nxb5O/Ne3JeLN3bOkfsR4slRmoYaU0mFYH4jV8R6OFlp4pACCN0ffs6RZR92xafDcCLexTpHh3ekgjTkWvTQRtTYSnidM14LskzTtr6emOhQ4FHDriLGVULURb1wBYwYcJzpMOj1JA8dHhHmguzG7Zf5YaHVWKe8lDYjlD3etAuYIRGPwJMPrVgVOScBmkes8FVjc5f1kTR+2P1mEi/BbpUsSyCRDG1HhHnGmlZ+EObcEq9INTMdTerhT6knT8H/llLGJFZCryd2WHXVLUovFnJ35dsfIiTW3o8Ilk/BXZMgOzBDjliIijVH3ZINTMdTcjBD75Rpl9CBcqNK/gN02dWxUeiTLBj+PIi9NhYzQwoA+GKfCuKP2LycGto8WP5vQ4Vbzfg9W2L0xS6ocsMeRiIda5aWNFSNoGooulMb5fQ4IfhL0zbKTjHSC7QyWn5EsZ+vFh1TK16kwqtTxshyw0GnLG+T0OD8f4DbRxaj0pOArDy/UTfpGrYQDRw8RpYkTPFG83oYJvpsCCOeOJzJsALDJu48I6RyjRSrIOex0qTc+iimaMxyrIORcX2Nt6tnIP5ZO7IEgw4kkq6vzsZJ6SCKOVHhkiqPFkUjq++SPVQ+QKXVmOJ2L0zlXTiNkYNmNhqarmsNMzNVxyJ5xGCbn0aMUaKVZRJh0emw8kdJipFpMTG1deQxsNh4nZi76cwCxkOhc8Ev3TNpipJGjMeJR9jSIlS4uuvpgSDFigcnjR6fB19OaKlxUgpcYlCeJqvfYONWIrVWoVc0OGw1p1JIhjalUsVtcm5zgT6ceNb7cwSK+rJRdz6uOZ46jxKNmUVqOGiNfDSviChCwoKRR+6r22FgTViK1VqFMTlLGsith2Qs3Dtjzw+H05TP9ST2SSulJixSurbWNqXpWkVarCgOF7bF41xFahk8URpsMrV8Ohg1pIkTLFy6V9re1JiZFpcWhpZEaibUBVquavVzR1Eg3y0irURXbnpFWAocDnJII1di7e5WWRaXGNS4uM0JEbIm1AWBF6+6uNEmhcZaa4191aa0ir2ykkWMSyGRvfB3FDEyChjDQxcdCeI0GU13GrEVc1c191aasa+1KlxKimYsf0UOwoTyCvlS18uSvmNXzGr5jUcTKaLFv/FD/xAApEQABBAADCAIDAQAAAAAAAAABAAIDEQQSMRATICEwQFBRFEEiMmFw/9oACAEDAQE/AfKvgcwX4eCLOt27eWjhf6iK8LDLuzaE8Z+1NiL5M2Pgc0X4FjWiP8hqpGZDwwx7xGN2ewjhQiKNcTRmNJ8Ffrz7eM04FGNpFLIBopy0u/Hgik3brQxEZ+1NiARTdr447y6LdPvTbh48xv0t1T8yMTGj+I68u2ZiHs5J+Jc4V0cPlz05GNpT6Asp7szr2RvMZsIYtv2FNPvOQ79jc7qT4i3n9bG4mQJ8rpNfCYaOzmTYSCfSdAxo8NDLuyvkxqebechpsgAskp8YIzNRjc3mR4bDZS1NY1uixDw38ffhmOLTyXypESTzPfUVlKo9KJmd1KSIfszTuQ33xZAi0jhq0VhmNIzIQgWpYmBvrt2j76JbwAVsilMei+W30pJTIb7YCz03C9g16I17JnUcOabrspZQi31wsR17FunUfxBuwtWRAUjr2LXV1H7AaQN8ZNdkFXpZvfSdwt0WfaTSJvswaQcCsoVFc+gW7QLTuQ7oEhZ1fRpZRsJvvbKzrOrHFdIuvwllZirP+E//xAAnEQABAwIGAgIDAQAAAAAAAAABAAIRAxIQICEwMUATUEFRBBQicP/aAAgBAgEBPwH2raod6eq+1XC2F5/TVGXhGk8fCp0fl2Daod6FxdfomOuGWo+1XC2F5ygZE5iYEptWeeu8S0q4q4qkHAa5KjLxCNJ4VOkZl2LXuiVe3Gs60K/+YQe5xQ6zqTXJtFrTOzVm2QrimyTATRaIwe0PEFH8dyp0rNe+42iU2oHYGiwptNrePSVnx/KNRNqvJ9NUp3heB6pU7NThVJjRNeZgoOB49NWkORcSqLSdfTOaHDVeBiAjQd6QrgpG091rZTH/AA7sl31muKDpyzCCrOIMLyJlRxPXcdkOyEzg9gev1ymMDNOsTA22nA8bJ46T9xp0TuMJVxQd95XIcdF3O4zMXYByvRMocdEtncZgRKIjOBPSKn7Vv1tNyu5VmIEoCOmRKLSFcpC02A7EmE3U9ogFWKNmVccAI7sK1WqDmiUBHpICtCgf4T//xAAxEAABAQUHBAIBAgcAAAAAAAABAAIQESAhEjAxUFFhcSIyQYFAkWADEyMzYnKAkKH/2gAIAQEABj8C/wACqD8QPKtj8PooYBwsfiGwUfw/l9B+G8UeVbH4EAQoXEdJIhQwDhYFfN/aCrmEGgoqBMEQJmt6T1wCjfQ0QPlwj5zHaZke57H3K0rTONzQwVTF1TFDjMGjMBtNa0miFAB1mzXVRuvQzD3MZgz7N17ujmDMo5RmjdNXTXOYDiUTE60fEi4auWec29GYM6PBVPKgoGVq59HMTK1xKES+hUSohRKHEjVy3xmJla4laN4RcnnMTK3xKN5wE0d3hbqFwzzmJlb4lhoJxtWSIXbVRRBZjFRmZG2YmVviQImdo7XA5mOYjiVriQnQXB3MkFB7I2lGZM8StcSNXDA9ycXLR2zJmU8GQbm4hpSRovCMp3OZHYv6WSVgAokhdwWIXhM9JVZh9yjc3PScyaGyiekLCJ3uKrthwuhr7XUy9o+pQNA9outt+cBJEI2VAVy+AUWqtX2h2Wo1TI1rIAiX8lW2sFDSaLKP3lsAq93wYihUC9praRhnxiVwiXxkh5Ncttn18GGrq46qDTgNaytSMj3JHLAPhcPgVZOKhpR4c0JOKP3auSNskta/CjrIGodQwkaL4jtdHSr9lG5J2TQ3yIBAfG4URgXkvqqURFrFd6pVWfJxuidUciG3wuJjs8saC4tDuD8CqiWAQZQ4yJo/Ghq5obOAUfBuSyyMV1VLqrpoV1B9trFw4yI8/BhKTI01s7cXFrzLVdq6WXnbIv6Soj4EbgobuiFvp8Ak+ETke2iofVzC64kaG6hpR8QrLY9rpMb79se8k0aUR9hQ/UruukzxZNlrVVDLS6oenxl5kaa9ymHCss4LuKxVhqu7sRcQHconJIsrfRaHZRZrwoNVWNnlUvYS09yQC/bHsyNNJo7OiyVXpMnU0FD9P7yeIUP1Kbu6mYroa+1SPpVgV1Ahd4liqKsXYfatHzLA+VAuorLOHk6qMgHnygxrJQrva+1Vo/eV0NNFXpL+pkFdsFiVRsr+c0qtkqC6pIOpgsCvP0sKOgV1duqgKMr+6S23jo4nM+krrEF0mMu8ncVVV8qv3JHVUwfUIQaK7/8Aiq0V0h1gYnNqLGPK6hBdLQdE4qiwWBWEuJUFs/B0JIlFo51RpdTMVWIVGhNg6LXl+KxVaugXRKic/o0VjFVZVYhdyoQtnUWCwWixKxVSv4eOqi0fwajRXeVisAu0LsC7QsYKpj/pQ//EAC0QAAEDAgUDBAIDAQEBAAAAAAEAESExURAgQWFxMFCBkaGx8EBgwdHx4YCQ/9oACAEBAAE/If8AwUUE5AqyIb9O1TNxIEY6/p70pNQnwAQEBO8T+mA5BDpuFOF36cEqENZnjE0Jy1UQR+giSidW6IMAapwwKQYs3XRTBiKrVN3+tAAhDJz0adCBW3x0XqVCicYBEIghj1RVCJBOiIADEduqTIYTi1CFRjDRAbRdDMHY1zQNcMRZAETdFFOWQOCboCqGPVBbnfZBKE2N2wVytK9AJOaF0/16Zh7KKFa8srXvhFoGD3REpjnKuYtkVcxb4VO5IRM1A9sBZMThFIcIZoWQ/wB5hAJKk/KJJEmpyAOEAeYXT2zJ1JxvEYaDlByEuqAt8XcKBvlCq9KWzbsPRBKrwzXTnH0sdwiHZ8os7gjdXOVjBpUpyuzmYvdDoiyLlG5rl3DTsOWttObf0GFSoI3CIbP8fo+2IyX7hp2Ay1NvizeKTzhWhDKELSUA7IxgA5OiIAMRocvw/no1DYnt3H3uX5uVpLcwoVTIA0VinOuUFVwjKuU73AcnxOjA33I7gKF7vpH4iwxBfIS60rAD2x0AdciT0YFuA+e4Che7y/V3GWBufI7AS63kLLeQsWSWKpJtBTjqCdngK5HuAXvcv1dxlo2Az1H0E4yRAEkJyhOFU4EgDgfNEWh95/nuNdfL9XcZGButwDnhZN9cSnISwUN4jlElkfhLencaq4dE4XB0BH0W/wByPIXIgSwpiJdQ5zKLu0BcolySde41eV83JEl2HQjtPdkpHkq46dgBliLfzjuUzWJGX6q2SG6HoV/oGSOybEWW6Nzb5BKotQe3cpchj8OCqnIK0OREcYUdJYFAXBQyeYS0ogwEc5hd6gl4RLkk5DA3MdewfKDlV7xsdUYp7jO6T10SvfJ0BAGAHlaMLwX9YlXGuKY+Ls85YG2Yw2TYb8wQOnuIEN/xHGjwirJLZGJj24YC5KYf6jrSwG8kwRslzQf4ZOTFuQcaIPmI0F1F6RwryOYYqsyaSPbSAA5KeciqfwDSaJqPDTRFIWIx4Awech9IBGjDAE5mpxDmxTFhQNy47ayG5P4L1hsGHDQhYLzfDcxfXziA5ZAiqRKJztk5I6OU66ZAaVJ2T5RYdssjqgAAAoPwa8WOp7Q2TGqkcwpiM/QScGotiA5AFSjDgKQeMfsadHmkR2R7Ovx/CmDcfI0DvUZPZOJWCVMPTUMnCEMBJNgnygaCw6LlsmyHYjWalBA6D8HQvCEBsnslAGri1cHEAMDhEXdxQbH4KyXogrmBQ2U+wW6Tw6kxvAdi9SPwvRyCWDoKzUynBrLFo2A9ARg/yYikN4VSByMpw1igCNAg7E5/D+CSwcoKjUzkk17ANwLDkxSao3R1VDhBgQWA1EQBgBU1/GTWY3wAJLAOVQu0W7I4zX/BSa/LwCBhV4w4gzATBN7oSGSDPlAsAI3RR4cFUoBvj6PdiM0dxDRXB/AmeIyPBTQMDQoGBuoK98AY8hRuNX4AdBA6MdqS/Y4lOtHtN0QMQGRUZShhUwgGDZDANJZSSpUxHEMUEONiHOHrNV37IIxIdXRyYgIiBllUHcZzvwaGgIodydlDENsUnQIGQlg5QVGssjwUAWuQ49RggucKm5Wl7iAy4J+VbwwEdReUCDIL56yD9kQhHJ7IHGYhRmNaSbbyHqMa1Iiz5wVV3EBAOTjboRF0AAABkieZyiTggFiyDAJTQekg1yOWIZeh7D04NChTHslAghxONMGyIYG3Ikk5Lnsw0UgjUJsmehAghwXCAxbkCrWyE5wHc1D+aGRHskqkeSEABwQcaIZHrThbmLFM0ByFzeiJqMF0fMJFW2QmBJTSj3It8ZvgwPI2RWjKj2WuIDlhVeVXJMhVJzkqwOCv9Kqo+e1jPrFFC+ZRAvTD3oAv4oKOiNNFwvGHvxzBTNMalClDfTIIDQ1K0W52FbgeMAKID9R4w1U6GyMCUNCdZ7F+UJTqXtiASWAcoxAOyxUVt6DjudfWsaI+OcELcOUyiSomU4WI4T0EQdx5KfJiOjMICDTAlqqp9gmurLIE1lQp8YNxCDkAAGCaoWu4hUFBvhJl/Yd2BE5EHZVZlK4e9VEeUwTVwjNzYpmvpT1WfWUDJxC4BtgbDcYYZIeS9XVTgcLIEEOCiAagHBCkAVUoaZDfxi6KTJ7zRFHJ5lAUOC+QKr284NIqaYQHldMFCDyn/wB0CHYDynvmbYECXEHZMP8AcJrHomGoknqufKnqboEGhT7eBdaO9Bbv9NHlGnIcgtN+CjqEaJHKqi8rU0e5VVqMWKu+9b1SsnkL6QiQOAblOQB0T8H9GoA8qhIANB5CGsRD/tL/AGEdES01wCNObl/8UP/aAAwDAQACAAMAAAAQCCS//DR99tBBBBR1+++++++++8xBBBBF995DX/6CCCC2/vDV99tBBJBBRx888885xBBBBBF999BH/wD4gqggkv8A8sHX321GqkIEEEEEEEEEEEEEX332EP8A/wCggvigglv/AMsHX32zD6IkEEEEEEEEEEF3332EN/8A6CCC+uCCC2//ACosfffVnYsCAQQQQRzTfffeYQ3/AP6IIIb764IILb+7d3rX1a/Hk03gk03sMzT3EEd//wCiCCG+2++KCCC2/O/hBV299e99OKf9/wBj+gQz/wD/AOiCCCe+S+++KCCCy/8A1T1ggYs8vjPfucYUih3/AP8A6CCCCe++CS+++KCCCS2V/qPLJahdCBqDDDL/AP8A/wDyCCCCe++6LCS+++OCCCC72v8A/wD1r9852Zr/APp//wAgggghvvvugrQwkvvvrigkiQl8unv/AOn+U3v/APtyCCCCCO+++6CD9tLCS2+++OCpCVCBCyyhylaHiCBCCCCGe+++yCDf999LDC2++++lCcJTCCCxCBCpCQJCCGe++++iCDf9R999LDCS2+62P888f7IhCZCvKPMP+++++yCCHd99BR999vDCCy188888885AOtK4+P3j+++yCCDP999xBBB1999PDU88888888j8P9pr1V496yCDBHf999hBtBBBR9999l88888888n8nWp8fvfCBCDTV9995BBB9tBBBBx9938888888708XEy/8880Mrz+d95hBBBN899JBBBBxe/888888v8AO/JwFuPPPPPPOOYQQQRXfdPPfbSQQQQ6d/8Az9/3/wA/8sd5FdZbz8wwBBBBN998AQ8899tJBBRjFHEyUnQGzgdp9hWxhwBBBBN99984AAA08899tNBBg18vro5/j0PfvfoBBBBFN99984gAOAAAQ088999NNBBBDJ0AATAQ/RBBFN999988wAAA+uIAAAQw8899999NNNNNOcuetN99999884wAAAAO+++uKAAAAw088899999999999998888wgAAAAO++C2+++uKAAAAAQw0888888888888wwAAAAAAO++++CCS2+++uOCAAAAAAAAAQwwAAAAAAAAAAGe++++yC/8QAJhEBAAICAgEDBAMBAAAAAAAAAQARITEQQUAgUWEwUHGRcIHRof/aAAgBAwEBPxD7r3B7/H2eyo5KiFOmDrZvrERI/ZU7w7ht4fmELvyzKzuT3+PsJRst+qmFGxyejqKmnJUB1mWdtvtojstnqrT3Guuh+/HBzQkwZiUOjVXLd/b/AHlj+07hN4fmXD/LN8Mx2Kz/ALMgE1NcEwaaMMQ4mbhTfv8AuEEaeMRRs+Z1YR5d8vtwFQwlRAU1H14zLqtXymWZI4qojvyHfBvkjge4fTPuOAau/wAzHPEfQbj5Dvg3z1EIunX9QAXK41sorfdxKa4fQb8l3wb5Yt2xgxa/8lo0o7jALoZorWz/ACFWg5PJd8G+XfJvgDayWS0pCkFu3PXku+DfBv0HFudTBVn6iqlrz15LKuF2p8Eo69HXBx1wAvUAKWP2eThgA16EHcU1wDx1wJASg0QT2FjmWEqLsHse78evL6DL8kSo8UL4SXT2hVlXLg10eNiPovA5RzDYIlkRGmdcPoNgjjwRi/onDKOUh3PglJfCuRbc3eCKH0GHB7zrBqmDZZ6AG+BdQUAUTNeDoMG9evvh46RjwOnroX4SBzBmXCmBBHXCXAqLUOO+NOXGJcTmw9xBHXA7R14aaTAMW1KdMvuQX2l5le0WoFSybYw4hjhFFgObfH0kB3AOo+01MQq5kisJmI7J8EwEuX5oWmC7lIPBHTKvM/PFfEeyN9jWk+afJFu/4J//xAAmEQEAAgICAgICAQUAAAAAAAABABEhMRBBQFEgYTBQkXBxgbHB/9oACAECAQE/EP2rVa9ff6fDKw3DPbg/WD+YIln6Uae4pDDR/iYCNVr/AL+hchVUy2n4dyuWYYZ7cPVqAA7+V16QqBpf48dAHqBt3mWOZQeZAiU1DUOS5bPUxCtXzhEw3G9hMNW+vUSgu/GcvTO8IcmuT3xX2SBiDuH2iVtrrlBYwkvWbYa8g1w65Yb+kxGn1w5dVMyMw+DqHkGuHXPcIWNkBBDJMDy+vqDZwfB15Jrh5IH2EQdT7RDUIBVbCe33H6V8vkmuHk1y64bC8OZsGKjcHPfkmuHXDr4PFAF8AU0c9+STUatz7JZ38O+Hjvi4EVaqf9+UlXfwFNQLcCDjvhAViUtjzq1FtYyQrlffj34PwErwwbhxYrgwHcbcJDKefBxTiEdKDTBEsnfB8HVoN+Cs1+F5s5QjU+yWtfE6KmrwVl+A5Z2iXZEpp+CJXCm4iIrZq8HcIlb+fXBx2hDhNvnYrwgpiVcGNsqIm+BqLcC48dcbcmcyoDAj6MRN8LpDHhhtMgQRuW7JXViHuViXDMcymahJmOeAEGR5o8faRXUUbh7m5mN1MQCMxBdM+yZWVK81DuJ6l4lETZLqf24v7h0Q/wBGoZ9U+iBdf0J//8QALRABAAECBAQGAwEBAQEBAAAAAREAITFBUWEQIHGBMFCRobHB0eHwQGDxgJD/2gAIAQEAAT8Q/wDgrIdKU7RP+OCBNKOZs+hFWaAgTOc6i6FQn/GQJS+JsJg0ZmiULzQB2zoiXPFpIY/4uY35FGD9vSmcAlMGB/xYxhRqKhUuFaLXtLHvPpxOA4xlTqI2/wCBFiiBIDhJj4L3EoCgeYXQLcDEmnAN2mgMkzKS4KUYnjpGPmAm6oZBxtakdZxLU8C8MF7wt7xxgRNWAI2TBq4kYhnUUXoJclNAkZ+LeKZfRI7e9IFxA+XYNAGSmgBjMFZK5AoO7CyocJiBnzb5E6YvwcZCOS0UPV0O9YiDgGRpyLYFi7BhSjwJBmi2mONsqmSCxu0mQcXKnheEpT5YoDyTF6MNndi35jm6oN3QPlxmhZk1DelthTyIu66O3KWKDCE6Xn6oH5pQwH5rAHPWQre8Chre8Cl4QisEEpis4SHV8sXcUJnFb1TWMK34g92frm6AvqflzEfJWa5CnKlJXkDcqOlQhMBpSs5YZEdKigXFdOCiRbiDvy5bxWMakTVukHt8wbTN3sB++USDVpWcl9Nvrmt+3qDgenKsuSI3a9m9x5hGDW9Sri0Y1hNR6CPrzDuMu68uyY9631H35TwJ9ApW809uY1cBGVKrLV4aJ9eDsGFb3r3fMLX+wcveHsvzLVXsYvAzKj7Zk4kdaRX579uXv4JGXAR6DNJRYrPmGLoHty43Ue/mtBq9S7wUS0pMRBRxBYDJmkpKgBdpQWKC5y2LqD2eDb+rjj3jzHD6Q5ca0+OPvlkzCZehepEzGsKoTOdO77kSFOHvm040PJNQBukQUQBmR2knksXVHv4PQsDqh8T5h7w5utXRe6H3y73O6eJDfisEtSJqxfr5Pri4hE4BTdBisRlD4O4jugJ+vMPeHh9BvVH2scRTCjqVPSkxUhmJepojMEHSeKFtkdYp3JhslOwXEaGpEYebfjfSwfD5goR0owfgoAlgpwfD7j757MnL0H6cQBGoICSNNvC3GbUtwoq0Qtiy5U642Qnfm6x3qfMT0g+3gwb1it7hOfrcHVB8Lxguz5LhVj/ojlCAJVgokxki9LD48xv1D9uW8c1/I8nWYOsW8C7Zkdgr8ORCLygqY0yEmcU5VIr10N7jPKEFPYRd9imvhUvmN+pj6Mct8Nfjn65Ouw+s/Xgd+11X4DkBPwC+xNKpXFvxs/mDl6sg6o+C+Zfwhx++W8dfnv1yWT9AR984KgErTITIQ9kfXJ6d+qx8Tx3TNb/LkCoKkmCOjYP2np5lZdH1EfXHAg1LPWv7A+k1pw5JxR91/wCa0HH9VPqv4VetaR9liu1SIugjmBYlXoCX4pnEqyvJvBuwI++IIvBl6UqquLyPGYqBQ3oS/wAalYERhHEfMe7U6ifujC6ZF3oUMIC3vbCgAgIOeKE0E1PLrH4LU92XZ+z8VMIOq9Rx3lDqL8Dy2Llnq3fnj0f77wipxYzXd4SIdKioXESiJIlybrRpgYMS4Fi9R1klNFKgRGEcR8uYq6AKBhQ9vFJJDhQbL8iDuYVLd6J30rdjHTB8PryTtYRLoVvvJxx9fZCoO6L2b8Veq3ZvnwUdfCUw4PZIQySJSNzgq1/a+WpgVAGdCSB9DY/wIE4Behg5xbI02pc+OHj/AO2iz4nkuZJJoLSLis4aBSqpWeAwyVhKAyd+MCDGt5vQGB6y+nlobeDka/4VJzB2Z+00WIqN8BaxP1UNRyGA1OG+EuhY4kAYrFFgWEu2FKBicnd83vY9j3oLBaVpKqD0QutW3gsaAWD08saAxy9CjLgID/C2zKTu/wB78VAxiz1T2EIG+5QLEiDtZ954yyS/pcHx4v8APFjUpAUh2SOgI+uL0PbL9vx4IQFzrBhSQo5eRxgvW6P8OF2rlx9Bl7cgLktBmhYpmWcc54k6MOBBIcGlSKyjLbgIlwRdTD3ikouKzwEEgbIxaeIyNAsHg9F71f1UZkCR08ibFRFEBYj/AAvDxcO/6oADAI5C65Qd39fNFZltGTnxV4tb7cU5ExEmnCM5KSrADBYWC8fHpTFidzSYyyLNMaLIc8jux9PCUVe30Kkxgz28ik6SB/xfRPd5ARWAlpgYjLv+qOBuh+/biMzdA3cfk8AqAU2y6cTpM1FXuPhylZLwVhKkUAhmJ9XyLocPt/hBsAJaYzjLktFoPQu/2/CeMh7cNBkTRS0KXRw8G/8AMAZDf0o0mq4HQoBAA0KihNEmiXp5ipE/Rke/AEpMApiQkXMn54ISMh8vkRGauf4bpZpehy7A/a/tuBkW8qkhRxK7AnVtQoiWSgNtwNTXwASGIth/7yuXrITUsdBApidiJeMaGwPSX8ivNUt03oGppE/wXlg+gckWkuAauVXNlC7q58Ly2rYJnvW/1fQsffCItkZJpQpYJcbn+BfoQqdmVLyO7szcw7aVDFrWJ4PrPM68qBxmH3RGMAjk2qT65ffIoEuoO7RqwEHbH3niYWeCMVPIuw21KsB2INzt4wwXGKex5ItVO4xGVqu8aTHOplRR/EEmdbtKTc7c7k4xmDRq3c0pU1JLUX3eN8/wy8hOkAS0wjhpbbenJAr56IPelUqyt3kEK3K4E3XsfNHFSSNnW6aVGQg0lUJvUXUJz5FiRrrwdhjcFAwBqM86Fwlj5NJgRKufknyhVs1OUAXsTptU/fdqepnU1m4FgdvxUCRLIYO/5qIG0bD1wo4BMFSPgGEoXE6GtYTAW5LTwfRP3ysDRMxsck5Ze27UM6bkOXTkZQsR6t3496uBCI6mx7tS6tEUhmr9QoAHMWB6NAEA4I8SldNUvpjQK8to79inLkZVbvkyNWkSiYOCHF10oEJLiMjUIS2QnfGnyldc9Sm5QziPWPuo0RMbj1KgRfWA+qiIi5P7VFGajPFQKsBjUgOgOVPkGw6NR4rufJatFWwn6oJY7G1HbH4qcY8Tky7cg4aCaZSgr1NEc26A14RIALowDVaNvW2QZbFPiZTxQAVMAZ1Lhd6j+ihcewjD3+ORWevhQJB/ZvQ8H6I+VwSbNd/So95csbo0AFCOZw9ZIVq6iWrlN96R+qJJ+pd81gjaDf5WojoaP1RUcC5fFJEtAcX4oRJGeChdp0lS1gGnekGCCYRRkmtXOjUDGep9ytIXRfioUgxcYbUIgjI4VCuBg4qhlF7GXYNaw7z1LVZ10BDox9+JpSWAJWhYf2LvSgVYC6tIK4+yw/PfzNEhdV6KhULrnpjULds3OVITkB80YlzN1cVpBIblM8le9Pauk9vxSxxCW8elAoJxGhkUYkyfyoCUJtwAKoDOojFlbowqSw950U3ADQ2alGIlCPX5e1DyQECBTMQ4z/rSlh2H5UX1xu+vAMFGD+L+bFSrBUNQIR5C/rUSPallETsJdRyYrYDNpEpOJttSCmWJk1gGd3Nf+RUmKdCkUYvQLTkTRiMHFZcEskmqj4qeR9z8Url3SYFItKeI9xUaSbUfBG5NbQ6UlInWL0pbTS/rkYq+GYtKkgPPTbzkVSKJmUbTiwfmqKCtVDUGTNk/FEnQKCJIibVhKbQ3qwTK3XVpIWQYCyVkV2Q1HiHpRajmKyqESYhZ2cLkNZRWWCUSZO91YzWCxHSkEIjCcFSNYRYYhvQsgm1Ib/JxonSBh4Dz9Wa4DYhFQLO3o9x4n4rDdtZQ89EFCRmXt/GBSARJHKso/wAsaixewrQ7yFaIGqy0RuFmZx7VPZcbUQmc1u0wjorH7pMx83/hRRkUdqyMtFWRDRvwvBPgooOK91f+ypxcuq0YgSqeO3T/APih/9k="); +} +#data-uri-ascii { + uri-1: url("data:text/html,%3Chtml%3E%3Ch1%3EThis%20page%20is%20100%25%20Awesome.%3C%2Fh1%3E%3C%2Fhtml%3E%0A"); + uri-2: url("data:text/html,%3Chtml%3E%3Ch1%3EThis%20page%20is%20100%25%20Awesome.%3C%2Fh1%3E%3C%2Fhtml%3E%0A"); +} +#file-functions { + uri: url('../data/data-uri-fail.png'); + svg-not-base-64: url("data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0A%3Csvg%20height%3D%22100%22%20width%3D%22100%22%3E%0A%20%20%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2240%22%20stroke%3D%22black%22%20stroke-width%3D%221%22%20fill%3D%22blue%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"); + size: 640px 430px; + width: 640px; + height: 430px; +} +#svg-functions { + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23000000%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23000000%22%2F%3E%3Cstop%20offset%3D%223%25%22%20stop-color%3D%22%23ffa500%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); + background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%3E%3Cstop%20offset%3D%221%25%22%20stop-color%3D%22%23c4c4c4%22%2F%3E%3Cstop%20offset%3D%223%25%22%20stop-color%3D%22%23ffa500%22%2F%3E%3Cstop%20offset%3D%225%25%22%20stop-color%3D%22%23008000%22%2F%3E%3Cstop%20offset%3D%2295%25%22%20stop-color%3D%22%23ffffff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); +} +@font-face { + font-family: 'MyWebFont'; + src: url(webfont.eot); + src: url('webfont.eot?#iefix') format('embedded-opentype'), url('webfont.woff') format('woff'), format('truetype') url('webfont.ttf'), url('webfont.svg#svgFontName') format('svg'); +} diff --git a/node_modules/less/test/css/variables-in-at-rules.css b/node_modules/less/test/css/variables-in-at-rules.css new file mode 100644 index 000000000..0327eb18d --- /dev/null +++ b/node_modules/less/test/css/variables-in-at-rules.css @@ -0,0 +1,18 @@ +@charset "UTF-8"; +@namespace less "http://lesscss.org"; +@keyframes enlarger { + from { + font-size: 12px; + } + to { + font-size: 15px; + } +} +@-webkit-keyframes reducer { + from { + font-size: 13px; + } + to { + font-size: 10px; + } +} diff --git a/node_modules/less/test/css/variables.css b/node_modules/less/test/css/variables.css new file mode 100644 index 000000000..32e5a9dde --- /dev/null +++ b/node_modules/less/test/css/variables.css @@ -0,0 +1,68 @@ +.variables { + width: 14cm; +} +.variables { + height: 24px; + color: #888; + font-family: "Trebuchet MS", Verdana, sans-serif; + quotes: "~" "~"; +} +.redef { + zero: 0; +} +.redef .inition { + three: 3; +} +.values { + minus-one: -1; + font-family: 'Trebuchet', 'Trebuchet', 'Trebuchet'; + color: #888 !important; + same-color: #888 !important; + same-again: #888 !important; + multi-important: #888 #888, 'Trebuchet' !important; + multi: something 'A', B, C, 'Trebuchet'; +} +.variable-names .quoted { + name: 'hello'; +} +.variable-names .unquoted { + name: 'hello'; +} +.variable-names .color-keyword { + name: 'hello'; +} +.alpha { + filter: alpha(opacity=42); +} +.testPollution { + a: 'no-pollution'; +} +.units { + width: 1px; + same-unit-as-previously: 1px; + square-pixel-divided: 1px; + odd-unit: 2; + percentage: 500%; + pixels: 500px; + conversion-metric-a: 30mm; + conversion-metric-b: 3cm; + conversion-imperial: 3in; + custom-unit: 420octocats; + custom-unit-cancelling: 18dogs; + mix-units: 2px; + invalid-units: 1px; +} +.units .fallback { + div-px-1: 10px; + div-px-2: 1px; + sub-px-1: 12.6px; + sub-cm-1: 9.666625cm; + mul-px-1: 19.6px; + mul-em-1: 19.6em; + mul-em-2: 196em; + mul-cm-1: 196cm; + add-px-1: 15.4px; + add-px-2: 393.35275591px; + mul-px-2: 140px; + mul-px-3: 140px; +} diff --git a/node_modules/less/test/css/visitorPlugin/visitor.css b/node_modules/less/test/css/visitorPlugin/visitor.css new file mode 100644 index 000000000..6446ebfd4 --- /dev/null +++ b/node_modules/less/test/css/visitorPlugin/visitor.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/node_modules/less/test/css/whitespace.css b/node_modules/less/test/css/whitespace.css new file mode 100644 index 000000000..38ad81c1c --- /dev/null +++ b/node_modules/less/test/css/whitespace.css @@ -0,0 +1,42 @@ +.whitespace { + color: white; +} +.whitespace { + color: white; +} +.whitespace { + color: white; +} +.whitespace { + color: white; +} +.whitespace { + color: white ; +} +.white, +.space, +.mania { + color: white; +} +.no-semi-column { + color: white; +} +.no-semi-column { + color: white; + white-space: pre; +} +.no-semi-column { + border: 2px solid white; +} +.newlines { + background: the, + great, + wall; + border: 2px + solid + black; +} +.sel .newline_ws .tab_ws { + color: white; + background-position: 45 -23; +} diff --git a/node_modules/less/test/data/data-uri-fail.png b/node_modules/less/test/data/data-uri-fail.png new file mode 100644 index 000000000..f91b59fb3 Binary files /dev/null and b/node_modules/less/test/data/data-uri-fail.png differ diff --git a/node_modules/less/test/data/image.jpg b/node_modules/less/test/data/image.jpg new file mode 100644 index 000000000..51389197a Binary files /dev/null and b/node_modules/less/test/data/image.jpg differ diff --git a/node_modules/less/test/data/image.svg b/node_modules/less/test/data/image.svg new file mode 100644 index 000000000..0d69314da --- /dev/null +++ b/node_modules/less/test/data/image.svg @@ -0,0 +1,4 @@ + + + + diff --git a/node_modules/less/test/data/page.html b/node_modules/less/test/data/page.html new file mode 100644 index 000000000..597f1ed22 --- /dev/null +++ b/node_modules/less/test/data/page.html @@ -0,0 +1 @@ +

    This page is 100% Awesome.

    diff --git a/node_modules/less/test/index.js b/node_modules/less/test/index.js new file mode 100644 index 000000000..a7aab0eb1 --- /dev/null +++ b/node_modules/less/test/index.js @@ -0,0 +1,59 @@ +var lessTest = require("./less-test"), + lessTester = lessTest(), + path = require("path"), + stylize = require('../lib/less-node/lessc-helper').stylize; + +function getErrorPathReplacementFunction(dir) { + return function(input, baseDir) { + return input.replace(/\{path\}/g, path.join(process.cwd(), baseDir, dir + "/")) + .replace(/\{node\}/g, "") + .replace(/\{\/node\}/g, "") + .replace(/\{pathrel\}/g, path.join(baseDir, dir + "/")) + .replace(/\{pathhref\}/g, "") + .replace(/\{404status\}/g, "") + .replace(/\r\n/g, '\n'); + }; +} + +console.log("\n" + stylize("Less", 'underline') + "\n"); +lessTester.prepBomTest(); +lessTester.runTestSet({strictMath: true, relativeUrls: true, silent: true}); +lessTester.runTestSet({strictMath: true, strictUnits: true}, "errors/", + lessTester.testErrors, null, getErrorPathReplacementFunction("errors")); +lessTester.runTestSet({strictMath: true, strictUnits: true, javascriptEnabled: false}, "no-js-errors/", + lessTester.testErrors, null, getErrorPathReplacementFunction("no-js-errors")); +lessTester.runTestSet({strictMath: true, dumpLineNumbers: 'comments'}, "debug/", null, + function(name) { return name + '-comments'; }); +lessTester.runTestSet({strictMath: true, dumpLineNumbers: 'mediaquery'}, "debug/", null, + function(name) { return name + '-mediaquery'; }); +lessTester.runTestSet({strictMath: true, dumpLineNumbers: 'all'}, "debug/", null, + function(name) { return name + '-all'; }); +lessTester.runTestSet({strictMath: true, relativeUrls: false, rootpath: "folder (1)/"}, "static-urls/"); +lessTester.runTestSet({strictMath: true, compress: true}, "compression/"); +lessTester.runTestSet({strictMath: true, strictUnits: true}, "strict-units/"); +lessTester.runTestSet({}, "legacy/"); +lessTester.runTestSet({strictMath: true, strictUnits: true, sourceMap: true, globalVars: true }, "sourcemaps/", + lessTester.testSourcemap, null, null, + function(filename, type, baseFolder) { + if (type === "vars") { + return path.join(baseFolder, filename) + '.json'; + } + return path.join('test/sourcemaps', filename) + '.json'; + }); +lessTester.runTestSet({strictMath: true, strictUnits: true, sourceMap: {sourceMapFileInline: true}}, "sourcemaps-empty/", lessTester.testEmptySourcemap); +lessTester.runTestSet({globalVars: true, banner: "/**\n * Test\n */\n"}, "globalVars/", + null, null, null, function(name, type, baseFolder) { return path.join(baseFolder, name) + '.json'; }); +lessTester.runTestSet({modifyVars: true}, "modifyVars/", + null, null, null, function(name, type, baseFolder) { return path.join(baseFolder, name) + '.json'; }); +lessTester.runTestSet({urlArgs: '424242'}, "url-args/"); +lessTester.runTestSet({paths: ['test/data/', 'test/less/import/']}, "include-path/"); +lessTester.runTestSet({paths: 'test/data/'}, "include-path-string/"); +lessTester.runTestSet({plugin: 'test/plugins/postprocess/'}, "postProcessorPlugin/"); +lessTester.runTestSet({plugin: 'test/plugins/preprocess/'}, "preProcessorPlugin/"); +lessTester.runTestSet({plugin: 'test/plugins/visitor/'}, "visitorPlugin/"); +lessTester.runTestSet({plugin: 'test/plugins/filemanager/'}, "filemanagerPlugin/"); +lessTester.runTestSet({}, "no-strict-math/"); +lessTester.testSyncronous({syncImport: true}, "import"); +lessTester.testSyncronous({syncImport: true}, "css"); +lessTester.testNoOptions(); +lessTester.finished(); diff --git a/node_modules/less/test/less-bom/charsets.less b/node_modules/less/test/less-bom/charsets.less new file mode 100644 index 000000000..6887e732f --- /dev/null +++ b/node_modules/less/test/less-bom/charsets.less @@ -0,0 +1,3 @@ +@charset "UTF-8"; + +@import "import/import-charset-test"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/colors.less b/node_modules/less/test/less-bom/colors.less new file mode 100644 index 000000000..b54dfddbc --- /dev/null +++ b/node_modules/less/test/less-bom/colors.less @@ -0,0 +1,98 @@ +#yelow { + #short { + color: #fea; + } + #long { + color: #ffeeaa; + } + #rgba { + color: rgba(255, 238, 170, 0.1); + } + #argb { + color: argb(rgba(255, 238, 170, 0.1)); + } +} + +#blue { + #short { + color: #00f; + } + #long { + color: #0000ff; + } + #rgba { + color: rgba(0, 0, 255, 0.1); + } + #argb { + color: argb(rgba(0, 0, 255, 0.1)); + } +} + +#alpha #hsla { + color: hsla(11, 20%, 20%, 0.6); +} + +#overflow { + .a { color: (#111111 - #444444); } // #000000 + .b { color: (#eee + #fff); } // #ffffff + .c { color: (#aaa * 3); } // #ffffff + .d { color: (#00ee00 + #009900); } // #00ff00 + .e { color: rgba(-99.9, 31.4159, 321, 0.42); } +} + +#grey { + color: rgb(200, 200, 200); +} + +#333333 { + color: rgb(20%, 20%, 20%); +} + +#808080 { + color: hsl(50, 0%, 50%); +} + +#00ff00 { + color: hsl(120, 100%, 50%); +} + +.lightenblue { + color: lighten(blue, 10%); +} + +.darkenblue { + color: darken(blue, 10%); +} + +.unknowncolors { + color: blue2; + border: 2px solid superred; +} + +.transparent { + color: transparent; + background-color: rgba(0, 0, 0, 0); +} +#alpha { + @colorvar: rgba(150, 200, 150, 0.7); + #fromvar { + opacity: alpha(@colorvar); + } + #short { + opacity: alpha(#aaa); + } + #long { + opacity: alpha(#bababa); + } + #rgba { + opacity: alpha(rgba(50, 120, 95, 0.2)); + } + #hsl { + opacity: alpha(hsl(120, 100%, 50%)); + } +} + +#percentage { + color: red(rgb(100%, 0, 0)); + border-color: rgba(100%, 0, 0, 50%); +} diff --git a/node_modules/less/test/less-bom/comments.less b/node_modules/less/test/less-bom/comments.less new file mode 100644 index 000000000..ec8feb8f2 --- /dev/null +++ b/node_modules/less/test/less-bom/comments.less @@ -0,0 +1,102 @@ +/******************\ +* * +* Comment Header * +* * +\******************/ + +/* + + Comment + +*/ + +/* + * Comment Test + * + * - cloudhead (http://cloudhead.net) + * + */ + +//////////////// +@var: "content"; +//////////////// + +/* Colors + * ------ + * #EDF8FC (background blue) + * #166C89 (darkest blue) + * + * Text: + * #333 (standard text) // A comment within a comment! + * #1F9EC9 (standard link) + * + */ + +/* @group Variables +------------------- */ +#comments /* boo *//* boo again*/, +//.commented_out1 +//.commented_out2 +//.commented_out3 +.comments //end of comments1 +//end of comments2 +{ + /**/ // An empty comment + color: red; /* A C-style comment */ /* A C-style comment */ + background-color: orange; // A little comment + font-size: 12px; + + /* lost comment */ content: @var; + + border: 1px solid black; + + // padding & margin // + padding: 0; // }{ '" + margin: 2em; +} // + +/* commented out + #more-comments { + color: grey; + } +*/ + +.selector /* .with */, .lots, /* of */ .comments { + color/* survive */ /* me too */: grey, /* blue */ orange; + -webkit-border-radius: 2px /* webkit only */; + -moz-border-radius: (2px * 4) /* moz only with operation */; +} + +.mixin_def_with_colors(@a: white, // in + @b: 1px //put in @b - causes problems! ---> + ) // the + when (@a = white) { + .test { + color: @b; + } +} +.mixin_def_with_colors(); + +// .s when +//R/2 + +.sr-only-focusable { + clip: auto; +} + +@-webkit-keyframes /* Safari */ hover /* and Chrome */ { + 0% { + color: red; + } +} + +#last { color: blue } +// + +/* *//* { *//* *//* *//* */#div { color:#A33; }/* } */ + +// line immediately followed +/*by block */ +@string_w_comment: ~"/* // Not commented out // */"; +#output-block { comment: @string_w_comment; } +/*comment on last line*/ \ No newline at end of file diff --git a/node_modules/less/test/less-bom/comments2.less b/node_modules/less/test/less-bom/comments2.less new file mode 100644 index 000000000..7855c33aa --- /dev/null +++ b/node_modules/less/test/less-bom/comments2.less @@ -0,0 +1,31 @@ +@media all and/*! */(max-width:1024px) {} +@-webkit-keyframes hover /* Safari and Chrome */{ } +.bg { + background-image: linear-gradient(#333 /*{comment}*/, #111); +} +#planadvisor, +/*comment*//*comment*/ +.first,/*comment*//*comment*/.planning { + margin:10px; + total-width: @total-width; +} +@base : 1; +@column-width : @base * 6em; // Width of column */ +@gutter-width : 2em; // Width of column spacing */ +@columns : 12; // Number of Columns */ +@gridsystem-width : (@column-width * // For calculating the total */ + @columns) + ( // width of the content area. */ + @gutter-width * // We strongly recommend you */ + @columns); // do not change this formula. */ +@total-width : @gridsystem-width; // set to 100% for fluid grid */ + +// ............................................................................. + +.some-inline-comments { + a: yes /* comment */; + b: red /* comment */; + @c: yes /* comment */; + @d: red /* comment */; + c: @c; + d: @d; +} diff --git a/node_modules/less/test/less-bom/compression/compression.less b/node_modules/less/test/less-bom/compression/compression.less new file mode 100644 index 000000000..9b2f701cc --- /dev/null +++ b/node_modules/less/test/less-bom/compression/compression.less @@ -0,0 +1,36 @@ +#colours { + color1: #fea; + color2: #ffeeaa; + color3: rgba(255, 238, 170, 0.1); + @color1: #fea; + string: "@{color1}"; + /* comments are stripped */ + // both types! + /*! but not this type + Note preserved whitespace + */ +} +dimensions { + val: 0.1px; + val: 0em; + val: 4cm; + val: 0.2; + val: 5; + angles-must-have-unit: 0deg; + durations-must-have-unit: 0s; + length-doesnt-have-unit: 0px; + width: auto\9; +} +@page { + marks: none; +@top-left-corner { + vertical-align: top; +} +@top-left { + vertical-align: top; +} +} +.shadow ^ .dom, +body ^^ .shadow { + display: done; +} diff --git a/node_modules/less/test/less-bom/css-3.less b/node_modules/less/test/less-bom/css-3.less new file mode 100644 index 000000000..1a5aa8173 --- /dev/null +++ b/node_modules/less/test/less-bom/css-3.less @@ -0,0 +1,162 @@ +.comma-delimited { + text-shadow: -1px -1px 1px red, 6px 5px 5px yellow; + -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset, + 0pt 4px 6px rgba(255, 255, 255, 0.4) inset; + -webkit-transform: rotate(-0.0000000001deg); +} +@font-face { + font-family: Headline; + unicode-range: U+??????, U+0???, U+0-7F, U+A5; +} +.other { + -moz-transform: translate(0, 11em) rotate(-90deg); + transform: rotateX(45deg); +} +.item[data-cra_zy-attr1b-ut3=bold] { + font-weight: bold; +} +p:not([class*="lead"]) { + color: black; +} + +input[type="text"].class#id[attr=32]:not(1) { + color: white; +} + +div#id.class[a=1][b=2].class:not(1) { + color: white; +} + +ul.comma > li:not(:only-child)::after { + color: white; +} + +ol.comma > li:nth-last-child(2)::after { + color: white; +} + +li:nth-child(4n+1), +li:nth-child(-5n), +li:nth-child(-n+2) { + color: white; +} + +a[href^="http://"] { + color: black; +} + +a[href$="http://"] { + color: black; +} + +form[data-disabled] { + color: black; +} + +p::before { + color: black; +} + +#issue322 { + -webkit-animation: anim2 7s infinite ease-in-out; +} + +@-webkit-keyframes frames { + 0% { border: 1px } + 5.5% { border: 2px } + 100% { border: 3px } +} + +@keyframes fontbulger1 { + to { + font-size: 15px; + } + from,to { + font-size: 12px; + } + 0%,100% { + font-size: 12px; + } +} + +.units { + font: 1.2rem/2rem; + font: 8vw/9vw; + font: 10vh/12vh; + font: 12vm/15vm; + font: 12vmin/15vmin; + font: 1.2ch/1.5ch; +} + +@supports ( box-shadow: 2px 2px 2px black ) or + ( -moz-box-shadow: 2px 2px 2px black ) { + .outline { + box-shadow: 2px 2px 2px black; + -moz-box-shadow: 2px 2px 2px black; + } +} + +@-x-document url-prefix(""github.com"") { + h1 { + color: red; + } +} + +@viewport { + font-size: 10px; +} +@namespace foo url(http://www.example.com); + +foo|h1 { color: blue; } +foo|* { color: yellow; } +|h1 { color: red; } +*|h1 { color: green; } +h1 { color: green; } +.upper-test { + UpperCaseProperties: allowed; +} +@host { + div { + display: block; + } +} +::distributed(input::placeholder) { + color: #b3b3b3; +} +.shadow ^ .dom, +body ^^ .shadow { + display: done; +} + +:host(.sel .a), +:host-context(.sel .b), +.sel /deep/ .b, +::content .sel { + type: shadow-dom; +} +/deep/ b { + c: 'd'; + &[e]{ + f: 'g'; + } +} + +#issue2066 { + background: url('/images/icon-team.svg') 0 0 / contain; +} + +@counter-style triangle { + system: cyclic; + symbols: ‣; + suffix: " "; +} + +@-ms-viewport{ + // width: auto !important; +} + +@unknown foo 42 (bar) { + x {y: z} +} + +@unknown foo 43; diff --git a/node_modules/less/test/less-bom/css-escapes.less b/node_modules/less/test/less-bom/css-escapes.less new file mode 100644 index 000000000..080ac077b --- /dev/null +++ b/node_modules/less/test/less-bom/css-escapes.less @@ -0,0 +1,33 @@ +@ugly: fuchsia; + +.escape\|random\|char { + color: red; +} + +.mixin\!tUp { + font-weight: bold; +} + +// class="404" +.\34 04 { + background: red; + + strong { + color: @ugly; + .mixin\!tUp; + } +} + +.trailingTest\+ { + color: red; +} + +/* This hideous test of hideousness checks for the selector "blockquote" with various permutations of hex escapes */ +\62\6c\6f \63 \6B \0071 \000075o\74 e { + color: silver; +} + +[ng\:cloak], +ng\:form { + display: none; +} diff --git a/node_modules/less/test/less-bom/css-guards.less b/node_modules/less/test/less-bom/css-guards.less new file mode 100644 index 000000000..37c953c9c --- /dev/null +++ b/node_modules/less/test/less-bom/css-guards.less @@ -0,0 +1,103 @@ + +.light when (lightness(@a) > 50%) { + color: green; +} +.dark when (lightness(@a) < 50%) { + color: orange; +} +@a: #ddd; + +.see-the { + @a: #444; // this mirrors what mixins do - they evaluate the guards at the point of definition + .light(); + .dark(); +} + +.hide-the { + .light(); + .dark(); +} + +.multiple-conditions-1 when (@b = 1), (@c = 2), (@d = 3) { + color: red; +} + +.multiple-conditions-2 when (@b = 1), (@c = 2), (@d = 2) { + color: blue; +} + +@b: 2; +@c: 3; +@d: 3; + +.inheritance when (@b = 2) { + .test { + color: black; + } + &:hover { + color: pink; + } + .hideme when (@b = 1) { + color: green; + } + & when (@b = 1) { + hideme: green; + } +} + +.hideme when (@b = 1) { + .test { + color: black; + } + &:hover { + color: pink; + } + .hideme when (@b = 1) { + color: green; + } +} + +& when (@b = 1) { + .hideme { + color: red; + } +} + +.mixin-with-guard-inside(@colWidth) { + // selector with guard (applies also to & when() ...) + .clsWithGuard when (@colWidth <= 0) { + dispaly: none; + } +} + +.mixin-with-guard-inside(0px); + +.dont-split-me-up { + width: 1px; + & when (@c = 3) { + color: red; + } + & when (@c = 3) { + height: 1px; + } + + & when (@c = 3) { // creates invalid css but tests that we don't fold it in + sibling: true; + } +} + +.scope-check when (@c = 3) { + @k: 1px; + & when (@c = 3) { + @k: 2px; + sub-prop: @k; + } + prop: @k; +} +.scope-check-2 { + .scope-check(); + @k:4px; +} +.errors-if-called when (@c = never) { + .mixin-doesnt-exist(); +} +a:hover when (2 = true) {5:-} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/css.less b/node_modules/less/test/less-bom/css.less new file mode 100644 index 000000000..ac8bf7d69 --- /dev/null +++ b/node_modules/less/test/less-bom/css.less @@ -0,0 +1,108 @@ +@charset "utf-8"; +div { color: black; } +div { width: 99%; } + +* { + min-width: 45em; +} + +h1, h2 > a > p, h3 { + color: none; +} + +div.class { + color: blue; +} + +div#id { + color: green; +} + +.class#id { + color: purple; +} + +.one.two.three { + color: grey; +} + +@media print { + * { + font-size: 3em; + } +} + +@media screen { + * { + font-size: 10px; + } +} + +@font-face { + font-family: 'Garamond Pro'; +} + +a:hover, a:link { + color: #999; +} + +p, p:first-child { + text-transform: none; +} + +q:lang(no) { + quotes: none; +} + +p + h1 { + font-size: +2.2em; +} + +#shorthands { + border: 1px solid #000; + font: 12px/16px Arial; + font: 100%/16px Arial; + margin: 1px 0; + padding: 0 auto; +} + +#more-shorthands { + margin: 0; + padding: 1px 0 2px 0; + font: normal small/20px 'Trebuchet MS', Verdana, sans-serif; + font: 0/0 a; + border-radius: 5px / 10px; +} + +.misc { + -moz-border-radius: 2px; + display: -moz-inline-stack; + width: .1em; + background-color: #009998; + background: -webkit-gradient(linear, left top, left bottom, from(red), to(blue)); + margin: ; + .nested-multiple { + multiple-semi-colons: yes;;;;;; + }; + filter: alpha(opacity=100); + width: auto\9; +} + +#important { + color: red !important; + width: 100%!important; + height: 20px ! important; +} + +.def-font(@name) { + @font-face { + font-family: @name + } +} + +.def-font(font-a); +.def-font(font-b); + +.æøå { + margin: 0; +} diff --git a/node_modules/less/test/less-bom/debug/import/test.less b/node_modules/less/test/less-bom/debug/import/test.less new file mode 100644 index 000000000..0ed49a660 --- /dev/null +++ b/node_modules/less/test/less-bom/debug/import/test.less @@ -0,0 +1,25 @@ +@charset "ISO-8859-1"; + +.mixin_import1() { + @media all { + .tst { + color: black; + @media screen { + color: red; + .tst3 { + color: white; + } + } + } + } +} + +.mixin_import2() { + .tst2 { + color: white; + } +} + +.tst3 { + color: grey; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/debug/linenumbers.less b/node_modules/less/test/less-bom/debug/linenumbers.less new file mode 100644 index 000000000..75739fb4b --- /dev/null +++ b/node_modules/less/test/less-bom/debug/linenumbers.less @@ -0,0 +1,33 @@ +@charset "UTF-8"; + +@import "import/test.less"; + +.start() { + .test2 { + color: red; + } +} + +.mix() { + color: black; +} + +.test1 { + .mix(); +} + +.start(); + +.mixin_import1(); + +.mixin_import2(); + +@debug: 1; +& when (@debug = 1) { + .test { + color: red; + & when (@debug = 1) { + width: 2; + } + } +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/detached-rulesets.less b/node_modules/less/test/less-bom/detached-rulesets.less new file mode 100644 index 000000000..cadb4afd2 --- /dev/null +++ b/node_modules/less/test/less-bom/detached-rulesets.less @@ -0,0 +1,112 @@ +@ruleset: { + color: black; + background: white; + }; + +@a: 1px; +.wrap-mixin(@ruleset) { + @a: hidden and if you see this in the output its a bug; + @b: visible; + @d: magic-frame; // same behaviour as mixin calls - falls back to this frame + .wrap-selector { + @c: visible; + @ruleset(); + visible-one: @b; + visible-two: @c; + } +}; + +.wrap-mixin({ + color: black; + one: @a; + @b: hidden and if you see this in the output its a bug; + @c: hidden and if you see this in the output its a bug; + four: @d; +}); + +.wrap-mixin(@ruleset: { + color: red; +}); + +.wrap-mixin(@ruleset); + +.desktop-and-old-ie(@rules) { + @media screen and (min-width: 1200) { @rules(); } + html.lt-ie9 & { @rules(); } +} + +header { + background: blue; + + .desktop-and-old-ie({ + background: red; + }); +} + +.wrap-mixin-calls-wrap(@ruleset) { + .wrap-mixin(@ruleset); +}; + +.wrap-mixin({ + test: extra-wrap; + .wrap-mixin-calls-wrap({ + test: wrapped-twice; + }); +}); + +.wrap-mixin({ + test-func: unit(90px); + test-arithmetic: unit((9+9), px); +}); +// without mixins +@ruleset-2: { + b: 1; +}; +.without-mixins { + @ruleset-2(); +} +@my-ruleset: { + .my-selector { + @media tv { + background-color: black; + } + } + }; +@media (orientation:portrait) { + @my-ruleset(); + .wrap-media-mixin({ + @media tv { + .triple-wrapped-mq { + triple: true; + } + } + }); +} +.wrap-media-mixin(@ruleset) { + @media widescreen { + @media print { + @ruleset(); + } + @ruleset(); + } + @ruleset(); +} +// unlocking mixins +@my-mixins: { + .mixin() { + test: test; + } +}; +@my-mixins(); +.a { + .mixin(); +} +// as mixin argument default +.mixin-definition(@a: {}; @b: {default: works;};) { + @a(); + @b(); +} +.argument-default { + .mixin-definition(); + .mixin-definition({direct: works;}; @b: {named: works;}); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/directives-bubling.less b/node_modules/less/test/less-bom/directives-bubling.less new file mode 100644 index 000000000..26591e76c --- /dev/null +++ b/node_modules/less/test/less-bom/directives-bubling.less @@ -0,0 +1,142 @@ +//simple case: @document +.parent { + color:green; + + @document url-prefix() { + .child { + color:red; + } + } +} + +//selectors joinings test +.top { + @supports (sandwitch: butter) { + .inside & { + property: value; + } + } +} + +@supports (sandwitch: bread) { + .in1 { + .in2 { + property: value; + } + } +} + +.top { + .inside & { + @supports (sandwitch: ham) { + property: value; + } + } +} + +//combined with @font-face which has different kind of body +@supports (font-family: weirdFont) { + @font-face { + font-family: something; + src: made-up-url; + } +} + +@font-face { + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + font-family: something; + src: made-up-url; + } +} + +//bubling through media +@supports (property: value) { + .outOfMedia & { + @media (max-size: 2px) { + @supports (whatever: something) { + property: value; + } + } + } +} + +.onTop & { + @supports (property: value) { + @media (max-size: 2px) { + @supports (whatever: something) { + property: value; + } + } + } +} + + +//long combination of supports and media +@media print { + html { + in-html: visible; + @supports (upper: test) { + in-supports: first; + div { + in-div: visible; + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + in-supports: second; + @media screen { + font-weight: 400; + nested { + property: value; + } + } + } + } + } + } +} + +//another long combination of supports and media +@media print { + @media (max-size: 2px) { + .in1 { + stay: here; + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + .in2 & { + @supports (whatever: something) { + property: value; + } + } + } + } + } +} + +//called from mixin +.nestedSupportsMixin() { + font-weight: 300; + -webkit-font-smoothing: subpixel-antialiased; + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + font-weight: 400; + nested { + property: value; + } + } +} + +html { + .nestedSupportsMixin; +} + +// selectors should not propagate into all directive types +.onTop { + @font-face { + font-family: something; + src: made-up-url; + } + + @keyframes "textscale" { + 0% { font-size : 1em; } + 100% { font-size : 2em; } + } + + animation : "textscale"; + font-family : something; +} diff --git a/node_modules/less/test/less-bom/empty.less b/node_modules/less/test/less-bom/empty.less new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/node_modules/less/test/less-bom/empty.less @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/add-mixed-units.less b/node_modules/less/test/less-bom/errors/add-mixed-units.less new file mode 100644 index 000000000..569834155 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/add-mixed-units.less @@ -0,0 +1,3 @@ +.a { + error: (1px + 3em); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/add-mixed-units.txt b/node_modules/less/test/less-bom/errors/add-mixed-units.txt new file mode 100644 index 000000000..9ea454387 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/add-mixed-units.txt @@ -0,0 +1,4 @@ +SyntaxError: Incompatible units. Change the units or use the unit function. Bad units: 'px' and 'em'. in {path}add-mixed-units.less on line 2, column 3: +1 .a { +2 error: (1px + 3em); +3 } diff --git a/node_modules/less/test/less-bom/errors/add-mixed-units2.less b/node_modules/less/test/less-bom/errors/add-mixed-units2.less new file mode 100644 index 000000000..c15c636a4 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/add-mixed-units2.less @@ -0,0 +1,3 @@ +.a { + error: ((1px * 2px) + (3em * 3px)); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/add-mixed-units2.txt b/node_modules/less/test/less-bom/errors/add-mixed-units2.txt new file mode 100644 index 000000000..ca34304f6 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/add-mixed-units2.txt @@ -0,0 +1,4 @@ +SyntaxError: Incompatible units. Change the units or use the unit function. Bad units: 'px*px' and 'em*px'. in {path}add-mixed-units2.less on line 2, column 3: +1 .a { +2 error: ((1px * 2px) + (3em * 3px)); +3 } diff --git a/node_modules/less/test/less-bom/errors/at-rules-undefined-var.less b/node_modules/less/test/less-bom/errors/at-rules-undefined-var.less new file mode 100644 index 000000000..2aa817768 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/at-rules-undefined-var.less @@ -0,0 +1,4 @@ + +@keyframes @name { + 50% {width: 20px;} +} diff --git a/node_modules/less/test/less-bom/errors/at-rules-undefined-var.txt b/node_modules/less/test/less-bom/errors/at-rules-undefined-var.txt new file mode 100644 index 000000000..240540a06 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/at-rules-undefined-var.txt @@ -0,0 +1,4 @@ +NameError: variable @name is undefined in {path}at-rules-undefined-var.less on line 2, column 12: +1 +2 @keyframes @name { +3 50% {width: 20px;} diff --git a/node_modules/less/test/less-bom/errors/bad-variable-declaration1.less b/node_modules/less/test/less-bom/errors/bad-variable-declaration1.less new file mode 100644 index 000000000..7d2755712 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/bad-variable-declaration1.less @@ -0,0 +1 @@ +@@demo: "hi"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/bad-variable-declaration1.txt b/node_modules/less/test/less-bom/errors/bad-variable-declaration1.txt new file mode 100644 index 000000000..5ae9d4a41 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/bad-variable-declaration1.txt @@ -0,0 +1,2 @@ +ParseError: Unrecognised input in {path}bad-variable-declaration1.less on line 1, column 1: +1 @@demo: "hi"; diff --git a/node_modules/less/test/less-bom/errors/color-func-invalid-color.less b/node_modules/less/test/less-bom/errors/color-func-invalid-color.less new file mode 100644 index 000000000..aa2a5e520 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/color-func-invalid-color.less @@ -0,0 +1,3 @@ +.test { + color: color("NOT A COLOR"); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/color-func-invalid-color.txt b/node_modules/less/test/less-bom/errors/color-func-invalid-color.txt new file mode 100644 index 000000000..08990c30a --- /dev/null +++ b/node_modules/less/test/less-bom/errors/color-func-invalid-color.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `color`: argument must be a color keyword or 3/6 digit hex e.g. #FFF in {path}color-func-invalid-color.less on line 2, column 10: +1 .test { +2 color: color("NOT A COLOR"); +3 } diff --git a/node_modules/less/test/less-bom/errors/color-invalid-hex-code.less b/node_modules/less/test/less-bom/errors/color-invalid-hex-code.less new file mode 100644 index 000000000..4377eba87 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/color-invalid-hex-code.less @@ -0,0 +1,3 @@ +.a { + @wrongHEXColorCode: #DCALLB; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/color-invalid-hex-code.txt b/node_modules/less/test/less-bom/errors/color-invalid-hex-code.txt new file mode 100644 index 000000000..0f8a82ce4 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/color-invalid-hex-code.txt @@ -0,0 +1,4 @@ +SyntaxError: Invalid HEX color code in {path}color-invalid-hex-code.less on line 2, column 29: +1 .a { +2 @wrongHEXColorCode: #DCALLB; +3 } diff --git a/node_modules/less/test/less-bom/errors/color-invalid-hex-code2.less b/node_modules/less/test/less-bom/errors/color-invalid-hex-code2.less new file mode 100644 index 000000000..5097776df --- /dev/null +++ b/node_modules/less/test/less-bom/errors/color-invalid-hex-code2.less @@ -0,0 +1,3 @@ +.a { + @wrongHEXColorCode: #fffblack; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/color-invalid-hex-code2.txt b/node_modules/less/test/less-bom/errors/color-invalid-hex-code2.txt new file mode 100644 index 000000000..dd3996b1f --- /dev/null +++ b/node_modules/less/test/less-bom/errors/color-invalid-hex-code2.txt @@ -0,0 +1,4 @@ +SyntaxError: Invalid HEX color code in {path}color-invalid-hex-code2.less on line 2, column 29: +1 .a { +2 @wrongHEXColorCode: #fffblack; +3 } diff --git a/node_modules/less/test/less-bom/errors/css-guard-default-func.less b/node_modules/less/test/less-bom/errors/css-guard-default-func.less new file mode 100644 index 000000000..8d8d48154 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/css-guard-default-func.less @@ -0,0 +1,4 @@ + +selector when (default()) { + color: red; +} diff --git a/node_modules/less/test/less-bom/errors/css-guard-default-func.txt b/node_modules/less/test/less-bom/errors/css-guard-default-func.txt new file mode 100644 index 000000000..022f5222e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/css-guard-default-func.txt @@ -0,0 +1,4 @@ +SyntaxError: error evaluating function `default`: it is currently only allowed in parametric mixin guards, in {path}css-guard-default-func.less on line 2, column 16: +1 +2 selector when (default()) { +3 color: red; diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-1.less b/node_modules/less/test/less-bom/errors/detached-ruleset-1.less new file mode 100644 index 000000000..d771871f0 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-1.less @@ -0,0 +1,6 @@ +@a: { + b: 1; +}; +.a { + a: @a; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-1.txt b/node_modules/less/test/less-bom/errors/detached-ruleset-1.txt new file mode 100644 index 000000000..7407741c8 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-1.txt @@ -0,0 +1,4 @@ +SyntaxError: Rulesets cannot be evaluated on a property. in {path}detached-ruleset-1.less on line 5, column 3: +4 .a { +5 a: @a; +6 } diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-2.less b/node_modules/less/test/less-bom/errors/detached-ruleset-2.less new file mode 100644 index 000000000..1fc9fe7ee --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-2.less @@ -0,0 +1,6 @@ +@a: { + b: 1; +}; +.a { + a: @a(); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-2.txt b/node_modules/less/test/less-bom/errors/detached-ruleset-2.txt new file mode 100644 index 000000000..43b99255d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-2.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}detached-ruleset-2.less on line 5, column 9: +4 .a { +5 a: @a(); +6 } diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-3.less b/node_modules/less/test/less-bom/errors/detached-ruleset-3.less new file mode 100644 index 000000000..5c55be382 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-3.less @@ -0,0 +1,4 @@ +@a: { + b: 1; +}; +@a(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-3.txt b/node_modules/less/test/less-bom/errors/detached-ruleset-3.txt new file mode 100644 index 000000000..ad43ab46a --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-3.txt @@ -0,0 +1,4 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}detached-ruleset-3.less on line 2, column 3: +1 @a: { +2 b: 1; +3 }; diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-5.less b/node_modules/less/test/less-bom/errors/detached-ruleset-5.less new file mode 100644 index 000000000..b3713a6ae --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-5.less @@ -0,0 +1,4 @@ +.mixin-definition(@b) { + @a(); +} +.mixin-definition({color: red;}); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-5.txt b/node_modules/less/test/less-bom/errors/detached-ruleset-5.txt new file mode 100644 index 000000000..561897950 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-5.txt @@ -0,0 +1,3 @@ +SyntaxError: variable @a is undefined in {path}detached-ruleset-5.less on line 4, column 1: +3 } +4 .mixin-definition({color: red;}); diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-6.less b/node_modules/less/test/less-bom/errors/detached-ruleset-6.less new file mode 100644 index 000000000..ae93a680e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-6.less @@ -0,0 +1,5 @@ +.a { + b: { + color: red; + }; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/detached-ruleset-6.txt b/node_modules/less/test/less-bom/errors/detached-ruleset-6.txt new file mode 100644 index 000000000..7f6b0aeb3 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/detached-ruleset-6.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input in {path}detached-ruleset-6.less on line 2, column 6: +1 .a { +2 b: { +3 color: red; diff --git a/node_modules/less/test/less-bom/errors/divide-mixed-units.less b/node_modules/less/test/less-bom/errors/divide-mixed-units.less new file mode 100644 index 000000000..970dfe56c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/divide-mixed-units.less @@ -0,0 +1,3 @@ +.a { + error: (1px / 3em); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/divide-mixed-units.txt b/node_modules/less/test/less-bom/errors/divide-mixed-units.txt new file mode 100644 index 000000000..c189d2aad --- /dev/null +++ b/node_modules/less/test/less-bom/errors/divide-mixed-units.txt @@ -0,0 +1,4 @@ +SyntaxError: Multiple units in dimension. Correct the units or use the unit function. Bad unit: px/em in {path}divide-mixed-units.less on line 2, column 3: +1 .a { +2 error: (1px / 3em); +3 } diff --git a/node_modules/less/test/less-bom/errors/extend-no-selector.less b/node_modules/less/test/less-bom/errors/extend-no-selector.less new file mode 100644 index 000000000..13dab9374 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/extend-no-selector.less @@ -0,0 +1,3 @@ +:extend(.a all) { + property: red; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/extend-no-selector.txt b/node_modules/less/test/less-bom/errors/extend-no-selector.txt new file mode 100644 index 000000000..bd2e3cd75 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/extend-no-selector.txt @@ -0,0 +1,3 @@ +SyntaxError: Extend must be used to extend a selector, it cannot be used on its own in {path}extend-no-selector.less on line 1, column 17: +1 :extend(.a all) { +2 property: red; diff --git a/node_modules/less/test/less-bom/errors/extend-not-at-end.less b/node_modules/less/test/less-bom/errors/extend-not-at-end.less new file mode 100644 index 000000000..67e9184f2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/extend-not-at-end.less @@ -0,0 +1,3 @@ +.a:extend(.b all).c { + property: red; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/extend-not-at-end.txt b/node_modules/less/test/less-bom/errors/extend-not-at-end.txt new file mode 100644 index 000000000..32ebedfc4 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/extend-not-at-end.txt @@ -0,0 +1,3 @@ +SyntaxError: Extend can only be used at the end of selector in {path}extend-not-at-end.less on line 1, column 21: +1 .a:extend(.b all).c { +2 property: red; diff --git a/node_modules/less/test/less-bom/errors/functions-1.less b/node_modules/less/test/less-bom/errors/functions-1.less new file mode 100644 index 000000000..c4e2b937b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-1.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-undefined(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-1.txt b/node_modules/less/test/less-bom/errors/functions-1.txt new file mode 100644 index 000000000..abeb4bda5 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-1.txt @@ -0,0 +1,3 @@ +SyntaxError: Function 'test-undefined' is undefined in {path}functions-1.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-undefined(); diff --git a/node_modules/less/test/less-bom/errors/functions-10-keyword.less b/node_modules/less/test/less-bom/errors/functions-10-keyword.less new file mode 100644 index 000000000..f8a78ce0d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-10-keyword.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-keyword(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-10-keyword.txt b/node_modules/less/test/less-bom/errors/functions-10-keyword.txt new file mode 100644 index 000000000..dabe839d6 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-10-keyword.txt @@ -0,0 +1,3 @@ +SyntaxError: Keyword node returned by a function is not valid here in {path}functions-10-keyword.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-keyword(); diff --git a/node_modules/less/test/less-bom/errors/functions-11-operation.less b/node_modules/less/test/less-bom/errors/functions-11-operation.less new file mode 100644 index 000000000..650335b7d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-11-operation.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-operation(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-11-operation.txt b/node_modules/less/test/less-bom/errors/functions-11-operation.txt new file mode 100644 index 000000000..27287179c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-11-operation.txt @@ -0,0 +1,3 @@ +SyntaxError: Operation node returned by a function is not valid here in {path}functions-11-operation.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-operation(); diff --git a/node_modules/less/test/less-bom/errors/functions-12-quoted.less b/node_modules/less/test/less-bom/errors/functions-12-quoted.less new file mode 100644 index 000000000..1edf35812 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-12-quoted.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-quoted(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-12-quoted.txt b/node_modules/less/test/less-bom/errors/functions-12-quoted.txt new file mode 100644 index 000000000..45c62ea64 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-12-quoted.txt @@ -0,0 +1,3 @@ +SyntaxError: Quoted node returned by a function is not valid here in {path}functions-12-quoted.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-quoted(); diff --git a/node_modules/less/test/less-bom/errors/functions-13-selector.less b/node_modules/less/test/less-bom/errors/functions-13-selector.less new file mode 100644 index 000000000..af648c26d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-13-selector.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-selector(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-13-selector.txt b/node_modules/less/test/less-bom/errors/functions-13-selector.txt new file mode 100644 index 000000000..2f4b097f2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-13-selector.txt @@ -0,0 +1,3 @@ +SyntaxError: Selector node returned by a function is not valid here in {path}functions-13-selector.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-selector(); diff --git a/node_modules/less/test/less-bom/errors/functions-14-url.less b/node_modules/less/test/less-bom/errors/functions-14-url.less new file mode 100644 index 000000000..cb69f6f0d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-14-url.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-url(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-14-url.txt b/node_modules/less/test/less-bom/errors/functions-14-url.txt new file mode 100644 index 000000000..aeb275cab --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-14-url.txt @@ -0,0 +1,3 @@ +SyntaxError: Url node returned by a function is not valid here in {path}functions-14-url.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-url(); diff --git a/node_modules/less/test/less-bom/errors/functions-15-value.less b/node_modules/less/test/less-bom/errors/functions-15-value.less new file mode 100644 index 000000000..dd1692642 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-15-value.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-value(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-15-value.txt b/node_modules/less/test/less-bom/errors/functions-15-value.txt new file mode 100644 index 000000000..41f6e6a17 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-15-value.txt @@ -0,0 +1,3 @@ +SyntaxError: Value node returned by a function is not valid here in {path}functions-15-value.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-value(); diff --git a/node_modules/less/test/less-bom/errors/functions-2-alpha.less b/node_modules/less/test/less-bom/errors/functions-2-alpha.less new file mode 100644 index 000000000..6f27ba9d8 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-2-alpha.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-alpha(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-2-alpha.txt b/node_modules/less/test/less-bom/errors/functions-2-alpha.txt new file mode 100644 index 000000000..38a172731 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-2-alpha.txt @@ -0,0 +1,3 @@ +SyntaxError: Alpha node returned by a function is not valid here in {path}functions-2-alpha.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-alpha(); diff --git a/node_modules/less/test/less-bom/errors/functions-3-assignment.less b/node_modules/less/test/less-bom/errors/functions-3-assignment.less new file mode 100644 index 000000000..dab800344 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-3-assignment.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-assignment(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-3-assignment.txt b/node_modules/less/test/less-bom/errors/functions-3-assignment.txt new file mode 100644 index 000000000..35c199265 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-3-assignment.txt @@ -0,0 +1,3 @@ +SyntaxError: Assignment node returned by a function is not valid here in {path}functions-3-assignment.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-assignment(); diff --git a/node_modules/less/test/less-bom/errors/functions-4-call.less b/node_modules/less/test/less-bom/errors/functions-4-call.less new file mode 100644 index 000000000..99100c802 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-4-call.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-call(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-4-call.txt b/node_modules/less/test/less-bom/errors/functions-4-call.txt new file mode 100644 index 000000000..338582d7c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-4-call.txt @@ -0,0 +1,3 @@ +SyntaxError: Function 'foo' is undefined in {path}functions-4-call.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-call(); diff --git a/node_modules/less/test/less-bom/errors/functions-5-color-2.less b/node_modules/less/test/less-bom/errors/functions-5-color-2.less new file mode 100644 index 000000000..fed873e98 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-5-color-2.less @@ -0,0 +1 @@ +rgba(0,0,0,0); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-5-color-2.txt b/node_modules/less/test/less-bom/errors/functions-5-color-2.txt new file mode 100644 index 000000000..8b36fd985 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-5-color-2.txt @@ -0,0 +1,2 @@ +SyntaxError: Color node returned by a function is not valid here in {path}functions-5-color-2.less on line 1, column 1: +1 rgba(0,0,0,0); diff --git a/node_modules/less/test/less-bom/errors/functions-5-color.less b/node_modules/less/test/less-bom/errors/functions-5-color.less new file mode 100644 index 000000000..24156695a --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-5-color.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-color(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-5-color.txt b/node_modules/less/test/less-bom/errors/functions-5-color.txt new file mode 100644 index 000000000..fdcd1a08a --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-5-color.txt @@ -0,0 +1,3 @@ +SyntaxError: Color node returned by a function is not valid here in {path}functions-5-color.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-color(); diff --git a/node_modules/less/test/less-bom/errors/functions-6-condition.less b/node_modules/less/test/less-bom/errors/functions-6-condition.less new file mode 100644 index 000000000..1e7af7054 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-6-condition.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-condition(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-6-condition.txt b/node_modules/less/test/less-bom/errors/functions-6-condition.txt new file mode 100644 index 000000000..421bba5f5 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-6-condition.txt @@ -0,0 +1,3 @@ +SyntaxError: Condition node returned by a function is not valid here in {path}functions-6-condition.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-condition(); diff --git a/node_modules/less/test/less-bom/errors/functions-7-dimension.less b/node_modules/less/test/less-bom/errors/functions-7-dimension.less new file mode 100644 index 000000000..30e47efaf --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-7-dimension.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-dimension(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-7-dimension.txt b/node_modules/less/test/less-bom/errors/functions-7-dimension.txt new file mode 100644 index 000000000..3b1b7026c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-7-dimension.txt @@ -0,0 +1,3 @@ +SyntaxError: Dimension node returned by a function is not valid here in {path}functions-7-dimension.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-dimension(); diff --git a/node_modules/less/test/less-bom/errors/functions-8-element.less b/node_modules/less/test/less-bom/errors/functions-8-element.less new file mode 100644 index 000000000..6ec02a76e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-8-element.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-element(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-8-element.txt b/node_modules/less/test/less-bom/errors/functions-8-element.txt new file mode 100644 index 000000000..b505d9543 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-8-element.txt @@ -0,0 +1,3 @@ +SyntaxError: Element node returned by a function is not valid here in {path}functions-8-element.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-element(); diff --git a/node_modules/less/test/less-bom/errors/functions-9-expression.less b/node_modules/less/test/less-bom/errors/functions-9-expression.less new file mode 100644 index 000000000..7b1ff889d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-9-expression.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-expression(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/functions-9-expression.txt b/node_modules/less/test/less-bom/errors/functions-9-expression.txt new file mode 100644 index 000000000..224db785e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/functions-9-expression.txt @@ -0,0 +1,3 @@ +SyntaxError: Expression node returned by a function is not valid here in {path}functions-9-expression.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-expression(); diff --git a/node_modules/less/test/less-bom/errors/import-malformed.less b/node_modules/less/test/less-bom/errors/import-malformed.less new file mode 100644 index 000000000..03790b0b2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-malformed.less @@ -0,0 +1 @@ +@import malformed "this-statement-is-invalid.less"; diff --git a/node_modules/less/test/less-bom/errors/import-malformed.txt b/node_modules/less/test/less-bom/errors/import-malformed.txt new file mode 100644 index 000000000..f8ba9f87c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-malformed.txt @@ -0,0 +1,3 @@ +SyntaxError: malformed import statement in {path}import-malformed.less on line 1, column 1: +1 @import malformed "this-statement-is-invalid.less"; +2 diff --git a/node_modules/less/test/less-bom/errors/import-missing.less b/node_modules/less/test/less-bom/errors/import-missing.less new file mode 100644 index 000000000..d6047b9d3 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-missing.less @@ -0,0 +1,6 @@ +.a { + color: green; + // tests line number for import reference is correct +} + +@import "file-does-not-exist.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/import-missing.txt b/node_modules/less/test/less-bom/errors/import-missing.txt new file mode 100644 index 000000000..5602b0f8b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-missing.txt @@ -0,0 +1,3 @@ +FileError: '{pathhref}file-does-not-exist.less' wasn't found{404status}{node}. Tried - {path}file-does-not-exist.less,{pathrel}file-does-not-exist.less,file-does-not-exist.less{/node} in {path}import-missing.less on line 6, column 1: +5 +6 @import "file-does-not-exist.less"; diff --git a/node_modules/less/test/less-bom/errors/import-no-semi.less b/node_modules/less/test/less-bom/errors/import-no-semi.less new file mode 100644 index 000000000..29bfe0679 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-no-semi.less @@ -0,0 +1 @@ +@import "this-statement-is-invalid.less" \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/import-no-semi.txt b/node_modules/less/test/less-bom/errors/import-no-semi.txt new file mode 100644 index 000000000..aaa4ac583 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-no-semi.txt @@ -0,0 +1,2 @@ +SyntaxError: missing semi-colon or unrecognised media features on import in {path}import-no-semi.less on line 1, column 1: +1 @import "this-statement-is-invalid.less" diff --git a/node_modules/less/test/less-bom/errors/import-subfolder1.less b/node_modules/less/test/less-bom/errors/import-subfolder1.less new file mode 100644 index 000000000..bd30a4ace --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-subfolder1.less @@ -0,0 +1 @@ +@import "imports/import-subfolder1.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/import-subfolder1.txt b/node_modules/less/test/less-bom/errors/import-subfolder1.txt new file mode 100644 index 000000000..976292765 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-subfolder1.txt @@ -0,0 +1,3 @@ +NameError: .mixin-not-defined is undefined in {path}mixin-not-defined.less on line 11, column 1: +10 +11 .mixin-not-defined(); diff --git a/node_modules/less/test/less-bom/errors/import-subfolder2.less b/node_modules/less/test/less-bom/errors/import-subfolder2.less new file mode 100644 index 000000000..dbd2405ec --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-subfolder2.less @@ -0,0 +1 @@ +@import "imports/import-subfolder2.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/import-subfolder2.txt b/node_modules/less/test/less-bom/errors/import-subfolder2.txt new file mode 100644 index 000000000..59cf5bd9f --- /dev/null +++ b/node_modules/less/test/less-bom/errors/import-subfolder2.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input. Possibly missing opening '{' in {path}parse-error-curly-bracket.less on line 4, column 1: +3 } +4 } +5 diff --git a/node_modules/less/test/less-bom/errors/imports/import-subfolder1.less b/node_modules/less/test/less-bom/errors/imports/import-subfolder1.less new file mode 100644 index 000000000..171a5b30b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/imports/import-subfolder1.less @@ -0,0 +1 @@ +@import "subfolder/mixin-not-defined.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/imports/import-subfolder2.less b/node_modules/less/test/less-bom/errors/imports/import-subfolder2.less new file mode 100644 index 000000000..969d7f6c6 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/imports/import-subfolder2.less @@ -0,0 +1 @@ +@import "subfolder/parse-error-curly-bracket.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/imports/import-test.less b/node_modules/less/test/less-bom/errors/imports/import-test.less new file mode 100644 index 000000000..b075faf89 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/imports/import-test.less @@ -0,0 +1,4 @@ +.someclass +{ + font-weight: bold; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/imports/subfolder/mixin-not-defined.less b/node_modules/less/test/less-bom/errors/imports/subfolder/mixin-not-defined.less new file mode 100644 index 000000000..1fa2be6d4 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/imports/subfolder/mixin-not-defined.less @@ -0,0 +1 @@ +@import "../../mixin-not-defined.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/imports/subfolder/parse-error-curly-bracket.less b/node_modules/less/test/less-bom/errors/imports/subfolder/parse-error-curly-bracket.less new file mode 100644 index 000000000..464001ad5 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/imports/subfolder/parse-error-curly-bracket.less @@ -0,0 +1 @@ +@import "../../parse-error-curly-bracket.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/javascript-error.less b/node_modules/less/test/less-bom/errors/javascript-error.less new file mode 100644 index 000000000..5fedbd9e1 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/javascript-error.less @@ -0,0 +1,3 @@ +.scope { + var: `this.foo.toJS`; +} diff --git a/node_modules/less/test/less-bom/errors/javascript-error.txt b/node_modules/less/test/less-bom/errors/javascript-error.txt new file mode 100644 index 000000000..e5f7dc39e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/javascript-error.txt @@ -0,0 +1,4 @@ +SyntaxError: JavaScript evaluation error: 'TypeError: Cannot read property 'toJS' of undefined' in {path}javascript-error.less on line 2, column 10: +1 .scope { +2 var: `this.foo.toJS`; +3 } diff --git a/node_modules/less/test/less-bom/errors/javascript-undefined-var.less b/node_modules/less/test/less-bom/errors/javascript-undefined-var.less new file mode 100644 index 000000000..57f245ba5 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/javascript-undefined-var.less @@ -0,0 +1,3 @@ +.scope { + @a: `@{b}`; +} diff --git a/node_modules/less/test/less-bom/errors/javascript-undefined-var.txt b/node_modules/less/test/less-bom/errors/javascript-undefined-var.txt new file mode 100644 index 000000000..e9710dce9 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/javascript-undefined-var.txt @@ -0,0 +1,4 @@ +NameError: variable @b is undefined in {path}javascript-undefined-var.less on line 2, column 9: +1 .scope { +2 @a: `@{b}`; +3 } diff --git a/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-1.less b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-1.less new file mode 100644 index 000000000..0fbe2bdc1 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-1.less @@ -0,0 +1,6 @@ +.mixin(@a : 4, @b : 3, @c: 2) { + will: fail; +} +.mixin-test { + .mixin(@a: 5; @b: 6, @c: 7); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-1.txt b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-1.txt new file mode 100644 index 000000000..a07f5e9d9 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-1.txt @@ -0,0 +1,4 @@ +SyntaxError: Cannot mix ; and , as delimiter types in {path}mixed-mixin-definition-args-1.less on line 5, column 30: +4 .mixin-test { +5 .mixin(@a: 5; @b: 6, @c: 7); +6 } diff --git a/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-2.less b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-2.less new file mode 100644 index 000000000..0a4997362 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-2.less @@ -0,0 +1,6 @@ +.mixin(@a : 4, @b : 3, @c: 2) { + will: fail; +} +.mixin-test { + .mixin(@a: 5, @b: 6; @c: 7); +} diff --git a/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-2.txt b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-2.txt new file mode 100644 index 000000000..fa00183b2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixed-mixin-definition-args-2.txt @@ -0,0 +1,4 @@ +SyntaxError: Cannot mix ; and , as delimiter types in {path}mixed-mixin-definition-args-2.less on line 5, column 26: +4 .mixin-test { +5 .mixin(@a: 5, @b: 6; @c: 7); +6 } diff --git a/node_modules/less/test/less-bom/errors/mixin-not-defined.less b/node_modules/less/test/less-bom/errors/mixin-not-defined.less new file mode 100644 index 000000000..06e0697be --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-defined.less @@ -0,0 +1,11 @@ + +.error-is-further-on() { +} + +.pad-here-to-reproduce-error-in() { +} + +.the-import-subfolder-test() { +} + +.mixin-not-defined(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/mixin-not-defined.txt b/node_modules/less/test/less-bom/errors/mixin-not-defined.txt new file mode 100644 index 000000000..976292765 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-defined.txt @@ -0,0 +1,3 @@ +NameError: .mixin-not-defined is undefined in {path}mixin-not-defined.less on line 11, column 1: +10 +11 .mixin-not-defined(); diff --git a/node_modules/less/test/less-bom/errors/mixin-not-matched.less b/node_modules/less/test/less-bom/errors/mixin-not-matched.less new file mode 100644 index 000000000..0f3e5a031 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-matched.less @@ -0,0 +1,6 @@ +@saxofon:trumpete; + +.mixin(saxofon) { +} + +.mixin(@saxofon); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/mixin-not-matched.txt b/node_modules/less/test/less-bom/errors/mixin-not-matched.txt new file mode 100644 index 000000000..57df97728 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-matched.txt @@ -0,0 +1,3 @@ +RuntimeError: No matching definition was found for `.mixin(trumpete)` in {path}mixin-not-matched.less on line 6, column 1: +5 +6 .mixin(@saxofon); diff --git a/node_modules/less/test/less-bom/errors/mixin-not-matched2.less b/node_modules/less/test/less-bom/errors/mixin-not-matched2.less new file mode 100644 index 000000000..282c73d87 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-matched2.less @@ -0,0 +1,6 @@ +@saxofon:trumpete; + +.mixin(@a, @b) { +} + +.mixin(@a: @saxofon); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/mixin-not-matched2.txt b/node_modules/less/test/less-bom/errors/mixin-not-matched2.txt new file mode 100644 index 000000000..dceedaf05 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-matched2.txt @@ -0,0 +1,3 @@ +RuntimeError: No matching definition was found for `.mixin(@a:trumpete)` in {path}mixin-not-matched2.less on line 6, column 1: +5 +6 .mixin(@a: @saxofon); diff --git a/node_modules/less/test/less-bom/errors/mixin-not-visible-in-scope-1.less b/node_modules/less/test/less-bom/errors/mixin-not-visible-in-scope-1.less new file mode 100644 index 000000000..4992e9145 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-visible-in-scope-1.less @@ -0,0 +1,9 @@ +.something { + & { + .a {value: a} + } + + & { + .b {.a} // was Err. before 1.6.2 + } +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/mixin-not-visible-in-scope-1.txt b/node_modules/less/test/less-bom/errors/mixin-not-visible-in-scope-1.txt new file mode 100644 index 000000000..15e64dc20 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixin-not-visible-in-scope-1.txt @@ -0,0 +1,4 @@ +NameError: .a is undefined in {path}mixin-not-visible-in-scope-1.less on line 7, column 13: +6 & { +7 .b {.a} // was Err. before 1.6.2 +8 } diff --git a/node_modules/less/test/less-bom/errors/mixins-guards-default-func-1.less b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-1.less new file mode 100644 index 000000000..1cc850f0e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-1.less @@ -0,0 +1,9 @@ + +guard-default-func-conflict { + .m(@x, 1) {} + .m(@x, 2) when (default()) {} + .m(@x, 2) when (default()) {} + + .m(1, 1); + .m(1, 2); +} diff --git a/node_modules/less/test/less-bom/errors/mixins-guards-default-func-1.txt b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-1.txt new file mode 100644 index 000000000..e6aaa0a19 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-1.txt @@ -0,0 +1,4 @@ +RuntimeError: Ambiguous use of `default()` found when matching for `.m(1, 2)` in {path}mixins-guards-default-func-1.less on line 8, column 5: +7 .m(1, 1); +8 .m(1, 2); +9 } diff --git a/node_modules/less/test/less-bom/errors/mixins-guards-default-func-2.less b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-2.less new file mode 100644 index 000000000..68956deaf --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-2.less @@ -0,0 +1,9 @@ + +guard-default-func-conflict { + .m(1) {} + .m(@x) when not(default()) {} + .m(@x) when (@x = 3) and (default()) {} + + .m(2); + .m(3); +} diff --git a/node_modules/less/test/less-bom/errors/mixins-guards-default-func-2.txt b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-2.txt new file mode 100644 index 000000000..99a3a66f3 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-2.txt @@ -0,0 +1,4 @@ +RuntimeError: Ambiguous use of `default()` found when matching for `.m(3)` in {path}mixins-guards-default-func-2.less on line 8, column 5: +7 .m(2); +8 .m(3); +9 } diff --git a/node_modules/less/test/less-bom/errors/mixins-guards-default-func-3.less b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-3.less new file mode 100644 index 000000000..9fe250b7b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-3.less @@ -0,0 +1,9 @@ + +guard-default-func-conflict { + .m(1) {} + .m(@x) when not(default()) {} + .m(@x) when not(default()) {} + + .m(1); + .m(2); +} diff --git a/node_modules/less/test/less-bom/errors/mixins-guards-default-func-3.txt b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-3.txt new file mode 100644 index 000000000..0a85a34cc --- /dev/null +++ b/node_modules/less/test/less-bom/errors/mixins-guards-default-func-3.txt @@ -0,0 +1,4 @@ +RuntimeError: Ambiguous use of `default()` found when matching for `.m(2)` in {path}mixins-guards-default-func-3.less on line 8, column 5: +7 .m(1); +8 .m(2); +9 } diff --git a/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors.less b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors.less new file mode 100644 index 000000000..3d9dbddf8 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors.less @@ -0,0 +1,4 @@ +@ie8: true; +.a when (@ie8 = true), +.b { +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors.txt b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors.txt new file mode 100644 index 000000000..3d23e26bc --- /dev/null +++ b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors.txt @@ -0,0 +1,4 @@ +SyntaxError: Guards are only currently allowed on a single selector. in {path}multiple-guards-on-css-selectors.less on line 3, column 1: +2 .a when (@ie8 = true), +3 .b { +4 } diff --git a/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors2.less b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors2.less new file mode 100644 index 000000000..08318947d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors2.less @@ -0,0 +1,4 @@ +@ie8: true; +.a, +.b when (@ie8 = true) { +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors2.txt b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors2.txt new file mode 100644 index 000000000..d0e5a52bd --- /dev/null +++ b/node_modules/less/test/less-bom/errors/multiple-guards-on-css-selectors2.txt @@ -0,0 +1,4 @@ +SyntaxError: Guards are only currently allowed on a single selector. in {path}multiple-guards-on-css-selectors2.less on line 3, column 23: +2 .a, +3 .b when (@ie8 = true) { +4 } diff --git a/node_modules/less/test/less-bom/errors/multiply-mixed-units.less b/node_modules/less/test/less-bom/errors/multiply-mixed-units.less new file mode 100644 index 000000000..7eb7dc201 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/multiply-mixed-units.less @@ -0,0 +1,7 @@ +/* Test */ +#blah { + // blah +} +.a { + error: (1px * 1em); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/multiply-mixed-units.txt b/node_modules/less/test/less-bom/errors/multiply-mixed-units.txt new file mode 100644 index 000000000..9ed834f1d --- /dev/null +++ b/node_modules/less/test/less-bom/errors/multiply-mixed-units.txt @@ -0,0 +1,4 @@ +SyntaxError: Multiple units in dimension. Correct the units or use the unit function. Bad unit: em*px in {path}multiply-mixed-units.less on line 6, column 3: +5 .a { +6 error: (1px * 1em); +7 } diff --git a/node_modules/less/test/less-bom/errors/parens-error-1.less b/node_modules/less/test/less-bom/errors/parens-error-1.less new file mode 100644 index 000000000..687063ed0 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parens-error-1.less @@ -0,0 +1,3 @@ +.a { + something: (12 (13 + 5 -23) + 5); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/parens-error-1.txt b/node_modules/less/test/less-bom/errors/parens-error-1.txt new file mode 100644 index 000000000..35be175c6 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parens-error-1.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}parens-error-1.less on line 2, column 18: +1 .a { +2 something: (12 (13 + 5 -23) + 5); +3 } diff --git a/node_modules/less/test/less-bom/errors/parens-error-2.less b/node_modules/less/test/less-bom/errors/parens-error-2.less new file mode 100644 index 000000000..e16bafed6 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parens-error-2.less @@ -0,0 +1,3 @@ +.a { + something: (12 * (13 + 5 -23)); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/parens-error-2.txt b/node_modules/less/test/less-bom/errors/parens-error-2.txt new file mode 100644 index 000000000..b40e4c2d9 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parens-error-2.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}parens-error-2.less on line 2, column 28: +1 .a { +2 something: (12 * (13 + 5 -23)); +3 } diff --git a/node_modules/less/test/less-bom/errors/parens-error-3.less b/node_modules/less/test/less-bom/errors/parens-error-3.less new file mode 100644 index 000000000..263ae5a1b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parens-error-3.less @@ -0,0 +1,3 @@ +.a { + something: (12 + (13 + 10 -23)); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/parens-error-3.txt b/node_modules/less/test/less-bom/errors/parens-error-3.txt new file mode 100644 index 000000000..c6c84340e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parens-error-3.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}parens-error-3.less on line 2, column 29: +1 .a { +2 something: (12 + (13 + 10 -23)); +3 } diff --git a/node_modules/less/test/less-bom/errors/parse-error-curly-bracket.less b/node_modules/less/test/less-bom/errors/parse-error-curly-bracket.less new file mode 100644 index 000000000..3d4facddb --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-curly-bracket.less @@ -0,0 +1,4 @@ +body { + background-color: #fff; + } +} diff --git a/node_modules/less/test/less-bom/errors/parse-error-curly-bracket.txt b/node_modules/less/test/less-bom/errors/parse-error-curly-bracket.txt new file mode 100644 index 000000000..59cf5bd9f --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-curly-bracket.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input. Possibly missing opening '{' in {path}parse-error-curly-bracket.less on line 4, column 1: +3 } +4 } +5 diff --git a/node_modules/less/test/less-bom/errors/parse-error-media-no-block-1.less b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-1.less new file mode 100644 index 000000000..124bb82b8 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-1.less @@ -0,0 +1,5 @@ +@media (extra: bracket)) { + body { + background-color: #fff; + } +} diff --git a/node_modules/less/test/less-bom/errors/parse-error-media-no-block-1.txt b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-1.txt new file mode 100644 index 000000000..3af15b70c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-1.txt @@ -0,0 +1,3 @@ +SyntaxError: media definitions require block statements after any features in {path}parse-error-media-no-block-1.less on line 1, column 24: +1 @media (extra: bracket)) { +2 body { diff --git a/node_modules/less/test/less-bom/errors/parse-error-media-no-block-2.less b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-2.less new file mode 100644 index 000000000..77fe033c1 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-2.less @@ -0,0 +1 @@ +@media \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/parse-error-media-no-block-2.txt b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-2.txt new file mode 100644 index 000000000..6d774ea74 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-2.txt @@ -0,0 +1,2 @@ +SyntaxError: media definitions require block statements after any features in {path}parse-error-media-no-block-2.less on line 1, column 7: +1 @media diff --git a/node_modules/less/test/less-bom/errors/parse-error-media-no-block-3.less b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-3.less new file mode 100644 index 000000000..f5b50e565 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-3.less @@ -0,0 +1,4 @@ +@media (min-width: 500px) { + .sometimes-big { + font-size: 5000px; + } \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/parse-error-media-no-block-3.txt b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-3.txt new file mode 100644 index 000000000..7bb0f4c19 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-media-no-block-3.txt @@ -0,0 +1,3 @@ +SyntaxError: media definitions require block statements after any features in {path}parse-error-media-no-block-3.less on line 4, column 4: +3 font-size: 5000px; +4 } diff --git a/node_modules/less/test/less-bom/errors/parse-error-missing-bracket.less b/node_modules/less/test/less-bom/errors/parse-error-missing-bracket.less new file mode 100644 index 000000000..34ad34911 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-missing-bracket.less @@ -0,0 +1,2 @@ +body { + background-color: #fff; diff --git a/node_modules/less/test/less-bom/errors/parse-error-missing-bracket.txt b/node_modules/less/test/less-bom/errors/parse-error-missing-bracket.txt new file mode 100644 index 000000000..307bbd4aa --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-missing-bracket.txt @@ -0,0 +1,3 @@ +ParseError: Unrecognised input. Possibly missing something in {path}parse-error-missing-bracket.less on line 3, column 1: +2 background-color: #fff; +3 diff --git a/node_modules/less/test/less-bom/errors/parse-error-missing-parens.less b/node_modules/less/test/less-bom/errors/parse-error-missing-parens.less new file mode 100644 index 000000000..40139f066 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-missing-parens.less @@ -0,0 +1,5 @@ +@media (missing: bracket { + body { + background-color: #fff; + } +} diff --git a/node_modules/less/test/less-bom/errors/parse-error-missing-parens.txt b/node_modules/less/test/less-bom/errors/parse-error-missing-parens.txt new file mode 100644 index 000000000..b5998fed4 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-missing-parens.txt @@ -0,0 +1,3 @@ +ParseError: Missing closing ')' in {path}parse-error-missing-parens.less on line 1, column 26: +1 @media (missing: bracket { +2 body { diff --git a/node_modules/less/test/less-bom/errors/parse-error-with-import.less b/node_modules/less/test/less-bom/errors/parse-error-with-import.less new file mode 100644 index 000000000..cb90389f2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-with-import.less @@ -0,0 +1,13 @@ +@import 'import/import-test.less'; + +body +{ + font-family: arial, sans-serif; +} + +nonsense; + +.clickable +{ + cursor: pointer; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/parse-error-with-import.txt b/node_modules/less/test/less-bom/errors/parse-error-with-import.txt new file mode 100644 index 000000000..07732c929 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/parse-error-with-import.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input in {path}parse-error-with-import.less on line 8, column 9: +7 +8 nonsense; +9 diff --git a/node_modules/less/test/less-bom/errors/percentage-missing-space.less b/node_modules/less/test/less-bom/errors/percentage-missing-space.less new file mode 100644 index 000000000..09582476b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/percentage-missing-space.less @@ -0,0 +1,3 @@ +.a { + error: calc(1 %); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/percentage-missing-space.txt b/node_modules/less/test/less-bom/errors/percentage-missing-space.txt new file mode 100644 index 000000000..776d8d5d7 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/percentage-missing-space.txt @@ -0,0 +1,4 @@ +SyntaxError: Invalid % without number in {path}percentage-missing-space.less on line 2, column 3: +1 .a { +2 error: calc(1 %); +3 } diff --git a/node_modules/less/test/less-bom/errors/percentage-non-number-argument.less b/node_modules/less/test/less-bom/errors/percentage-non-number-argument.less new file mode 100644 index 000000000..736c0490a --- /dev/null +++ b/node_modules/less/test/less-bom/errors/percentage-non-number-argument.less @@ -0,0 +1,3 @@ +div { + percentage: percentage(16/17); +} diff --git a/node_modules/less/test/less-bom/errors/percentage-non-number-argument.txt b/node_modules/less/test/less-bom/errors/percentage-non-number-argument.txt new file mode 100644 index 000000000..f01a1e546 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/percentage-non-number-argument.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `percentage`: argument must be a number in {path}percentage-non-number-argument.less on line 2, column 15: +1 div { +2 percentage: percentage(16/17); +3 } diff --git a/node_modules/less/test/less-bom/errors/property-asterisk-only-name.less b/node_modules/less/test/less-bom/errors/property-asterisk-only-name.less new file mode 100644 index 000000000..af08d8960 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-asterisk-only-name.less @@ -0,0 +1,3 @@ +a { + * : 1; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/property-asterisk-only-name.txt b/node_modules/less/test/less-bom/errors/property-asterisk-only-name.txt new file mode 100644 index 000000000..b81d7570b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-asterisk-only-name.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input in {path}property-asterisk-only-name.less on line 2, column 7: +1 a { +2 * : 1; +3 } diff --git a/node_modules/less/test/less-bom/errors/property-ie5-hack.less b/node_modules/less/test/less-bom/errors/property-ie5-hack.less new file mode 100644 index 000000000..22c5f18d7 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-ie5-hack.less @@ -0,0 +1,3 @@ +.test { + display/*/: block; /*sorry for IE5*/ +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/property-ie5-hack.txt b/node_modules/less/test/less-bom/errors/property-ie5-hack.txt new file mode 100644 index 000000000..434943f32 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-ie5-hack.txt @@ -0,0 +1,3 @@ +ParseError: Unrecognised input. Possibly missing opening '{' in {path}property-ie5-hack.less on line 3, column 1: +2 display/*/: block; /*sorry for IE5*/ +3 } diff --git a/node_modules/less/test/less-bom/errors/property-in-root.less b/node_modules/less/test/less-bom/errors/property-in-root.less new file mode 100644 index 000000000..702edc2d6 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-in-root.less @@ -0,0 +1,4 @@ +.a() { + prop:1; +} +.a(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/property-in-root.txt b/node_modules/less/test/less-bom/errors/property-in-root.txt new file mode 100644 index 000000000..10c985344 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-in-root.txt @@ -0,0 +1,4 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}property-in-root.less on line 2, column 3: +1 .a() { +2 prop:1; +3 } diff --git a/node_modules/less/test/less-bom/errors/property-in-root2.less b/node_modules/less/test/less-bom/errors/property-in-root2.less new file mode 100644 index 000000000..408e8c969 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-in-root2.less @@ -0,0 +1 @@ +@import "property-in-root"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/property-in-root2.txt b/node_modules/less/test/less-bom/errors/property-in-root2.txt new file mode 100644 index 000000000..10c985344 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-in-root2.txt @@ -0,0 +1,4 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}property-in-root.less on line 2, column 3: +1 .a() { +2 prop:1; +3 } diff --git a/node_modules/less/test/less-bom/errors/property-in-root3.less b/node_modules/less/test/less-bom/errors/property-in-root3.less new file mode 100644 index 000000000..a109f2952 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-in-root3.less @@ -0,0 +1,4 @@ +prop:1; +.a { + prop:1; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/property-in-root3.txt b/node_modules/less/test/less-bom/errors/property-in-root3.txt new file mode 100644 index 000000000..13a49052e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-in-root3.txt @@ -0,0 +1,3 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}property-in-root3.less on line 1, column 1: +1 prop:1; +2 .a { diff --git a/node_modules/less/test/less-bom/errors/property-interp-not-defined.less b/node_modules/less/test/less-bom/errors/property-interp-not-defined.less new file mode 100644 index 000000000..63e0ddccb --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-interp-not-defined.less @@ -0,0 +1 @@ +a {outline-@{color}: green} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/property-interp-not-defined.txt b/node_modules/less/test/less-bom/errors/property-interp-not-defined.txt new file mode 100644 index 000000000..dc803564f --- /dev/null +++ b/node_modules/less/test/less-bom/errors/property-interp-not-defined.txt @@ -0,0 +1,2 @@ +NameError: variable @color is undefined in {path}property-interp-not-defined.less on line 1, column 12: +1 a {outline-@{color}: green} diff --git a/node_modules/less/test/less-bom/errors/recursive-variable.less b/node_modules/less/test/less-bom/errors/recursive-variable.less new file mode 100644 index 000000000..c47b8b65c --- /dev/null +++ b/node_modules/less/test/less-bom/errors/recursive-variable.less @@ -0,0 +1 @@ +@bodyColor: darken(@bodyColor, 30%); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/recursive-variable.txt b/node_modules/less/test/less-bom/errors/recursive-variable.txt new file mode 100644 index 000000000..eb616e7d2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/recursive-variable.txt @@ -0,0 +1,2 @@ +NameError: Recursive variable definition for @bodyColor in {path}recursive-variable.less on line 1, column 20: +1 @bodyColor: darken(@bodyColor, 30%); diff --git a/node_modules/less/test/less-bom/errors/root-func-undefined-1.less b/node_modules/less/test/less-bom/errors/root-func-undefined-1.less new file mode 100644 index 000000000..df6b470ad --- /dev/null +++ b/node_modules/less/test/less-bom/errors/root-func-undefined-1.less @@ -0,0 +1 @@ +func(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/root-func-undefined-1.txt b/node_modules/less/test/less-bom/errors/root-func-undefined-1.txt new file mode 100644 index 000000000..a07480e61 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/root-func-undefined-1.txt @@ -0,0 +1,2 @@ +SyntaxError: Function 'func' is undefined in {path}root-func-undefined-1.less on line 1, column 1: +1 func(); diff --git a/node_modules/less/test/less-bom/errors/root-func-undefined-2.less b/node_modules/less/test/less-bom/errors/root-func-undefined-2.less new file mode 100644 index 000000000..4a7f52a18 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/root-func-undefined-2.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes.js"; +test-undefined(); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/root-func-undefined-2.txt b/node_modules/less/test/less-bom/errors/root-func-undefined-2.txt new file mode 100644 index 000000000..031385d01 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/root-func-undefined-2.txt @@ -0,0 +1,3 @@ +SyntaxError: Function 'test-undefined' is undefined in {path}root-func-undefined-2.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes.js"; +2 test-undefined(); diff --git a/node_modules/less/test/less-bom/errors/single-character.less b/node_modules/less/test/less-bom/errors/single-character.less new file mode 100644 index 000000000..b18d45413 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/single-character.less @@ -0,0 +1 @@ +x \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/single-character.txt b/node_modules/less/test/less-bom/errors/single-character.txt new file mode 100644 index 000000000..b9e49a5e3 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/single-character.txt @@ -0,0 +1,2 @@ +ParseError: Unrecognised input. Possibly missing something in {path}single-character.less on line 1, column 2: +1 x diff --git a/node_modules/less/test/less-bom/errors/svg-gradient1.less b/node_modules/less/test/less-bom/errors/svg-gradient1.less new file mode 100644 index 000000000..4cfbbd56e --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient1.less @@ -0,0 +1,3 @@ +.a { + a: svg-gradient(horizontal, black, white); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/svg-gradient1.txt b/node_modules/less/test/less-bom/errors/svg-gradient1.txt new file mode 100644 index 000000000..ec662fe60 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient1.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient1.less on line 2, column 6: +1 .a { +2 a: svg-gradient(horizontal, black, white); +3 } diff --git a/node_modules/less/test/less-bom/errors/svg-gradient2.less b/node_modules/less/test/less-bom/errors/svg-gradient2.less new file mode 100644 index 000000000..04cacaeb3 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient2.less @@ -0,0 +1,3 @@ +.a { + a: svg-gradient(to bottom, black, orange, 45%, white); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/svg-gradient2.txt b/node_modules/less/test/less-bom/errors/svg-gradient2.txt new file mode 100644 index 000000000..1f2e1bfc9 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient2.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position] or direction, color list in {path}svg-gradient2.less on line 2, column 6: +1 .a { +2 a: svg-gradient(to bottom, black, orange, 45%, white); +3 } diff --git a/node_modules/less/test/less-bom/errors/svg-gradient3.less b/node_modules/less/test/less-bom/errors/svg-gradient3.less new file mode 100644 index 000000000..a0197a8cc --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient3.less @@ -0,0 +1,3 @@ +.a { + a: svg-gradient(black, orange); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/svg-gradient3.txt b/node_modules/less/test/less-bom/errors/svg-gradient3.txt new file mode 100644 index 000000000..f77a353ac --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient3.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient3.less on line 2, column 6: +1 .a { +2 a: svg-gradient(black, orange); +3 } diff --git a/node_modules/less/test/less-bom/errors/svg-gradient4.less b/node_modules/less/test/less-bom/errors/svg-gradient4.less new file mode 100644 index 000000000..6db7f05bc --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient4.less @@ -0,0 +1,4 @@ +.a { + a: svg-gradient(horizontal, @colors); +} +@colors: black, white; diff --git a/node_modules/less/test/less-bom/errors/svg-gradient4.txt b/node_modules/less/test/less-bom/errors/svg-gradient4.txt new file mode 100644 index 000000000..c0d41e94f --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient4.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient4.less on line 2, column 6: +1 .a { +2 a: svg-gradient(horizontal, @colors); +3 } diff --git a/node_modules/less/test/less-bom/errors/svg-gradient5.less b/node_modules/less/test/less-bom/errors/svg-gradient5.less new file mode 100644 index 000000000..8accd634f --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient5.less @@ -0,0 +1,4 @@ +.a { + a: svg-gradient(to bottom, @colors); +} +@colors: black, orange, 45%, white; diff --git a/node_modules/less/test/less-bom/errors/svg-gradient5.txt b/node_modules/less/test/less-bom/errors/svg-gradient5.txt new file mode 100644 index 000000000..41f8f46f2 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient5.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position] or direction, color list in {path}svg-gradient5.less on line 2, column 6: +1 .a { +2 a: svg-gradient(to bottom, @colors); +3 } diff --git a/node_modules/less/test/less-bom/errors/svg-gradient6.less b/node_modules/less/test/less-bom/errors/svg-gradient6.less new file mode 100644 index 000000000..449bf1be0 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient6.less @@ -0,0 +1,4 @@ +.a { + a: svg-gradient(black, @colors); +} +@colors: orange; diff --git a/node_modules/less/test/less-bom/errors/svg-gradient6.txt b/node_modules/less/test/less-bom/errors/svg-gradient6.txt new file mode 100644 index 000000000..2ce85cf6b --- /dev/null +++ b/node_modules/less/test/less-bom/errors/svg-gradient6.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient6.less on line 2, column 6: +1 .a { +2 a: svg-gradient(black, @colors); +3 } diff --git a/node_modules/less/test/less-bom/errors/unit-function.less b/node_modules/less/test/less-bom/errors/unit-function.less new file mode 100644 index 000000000..7a6d76141 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/unit-function.less @@ -0,0 +1,3 @@ +.a { + font-size: unit(80/16,rem); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/errors/unit-function.txt b/node_modules/less/test/less-bom/errors/unit-function.txt new file mode 100644 index 000000000..baf90f422 --- /dev/null +++ b/node_modules/less/test/less-bom/errors/unit-function.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `unit`: the first argument to unit must be a number. Have you forgotten parenthesis? in {path}unit-function.less on line 2, column 14: +1 .a { +2 font-size: unit(80/16,rem); +3 } diff --git a/node_modules/less/test/less-bom/extend-chaining.less b/node_modules/less/test/less-bom/extend-chaining.less new file mode 100644 index 000000000..26a47248a --- /dev/null +++ b/node_modules/less/test/less-bom/extend-chaining.less @@ -0,0 +1,91 @@ +//very simple chaining +.a { + color: black; +} +.b:extend(.a) {} +.c:extend(.b) {} + +//very simple chaining, ordering not important + +.d:extend(.e) {} +.e:extend(.f) {} +.f { + color: black; +} + +//extend with all + +.g.h { + color: black; +} +.i.j:extend(.g all) { + color: white; +} +.k:extend(.i all) {} + +//extend multi-chaining + +.l { + color: black; +} +.m:extend(.l){} +.n:extend(.m){} +.o:extend(.n){} +.p:extend(.o){} +.q:extend(.p){} +.r:extend(.q){} +.s:extend(.r){} +.t:extend(.s){} + +// self referencing is ignored + +.u {color: black;} +.v.u.v:extend(.u all){} + +// circular reference because the new extend product will match the existing extend + +.w:extend(.w) {color: black;} +.v.w.v:extend(.w all){} + +// classic circular references + +.x:extend(.z) { + color: x; +} +.y:extend(.x) { + color: y; +} +.z:extend(.y) { + color: z; +} + +//very simple chaining, but with the extend inside the ruleset +.va { + color: black; +} +.vb { + &:extend(.va); + color: white; +} +.vc { + &:extend(.vb); +} + +// media queries - don't extend outside, do extend inside + +@media tv { + .ma:extend(.a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v,.w,.x,.y,.z,.md) { + color: black; + } + .md { + color: white; + } + @media plasma { + .me, .mf { + &:extend(.mb,.md); + background: red; + } + } +} +.mb:extend(.ma) {}; +.mc:extend(.mb) {}; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/extend-clearfix.less b/node_modules/less/test/less-bom/extend-clearfix.less new file mode 100644 index 000000000..77a885df9 --- /dev/null +++ b/node_modules/less/test/less-bom/extend-clearfix.less @@ -0,0 +1,19 @@ +.clearfix { + *zoom: 1; + &:after { + content: ''; + display: block; + clear: both; + height: 0; + } +} + +.foo { + &:extend(.clearfix all); + color: red; +} + +.bar { + &:extend(.clearfix all); + color: blue; +} diff --git a/node_modules/less/test/less-bom/extend-exact.less b/node_modules/less/test/less-bom/extend-exact.less new file mode 100644 index 000000000..62e5345ec --- /dev/null +++ b/node_modules/less/test/less-bom/extend-exact.less @@ -0,0 +1,46 @@ +.replace.replace, +.c.replace + .replace { + .replace, + .c { + prop: copy-paste-replace; + } +} +.rep_ace:extend(.replace.replace .replace) {} + +.a .b .c { + prop: not_effected; +} + +.a { + prop: is_effected; + .b { + prop: not_effected; + } + .b.c { + prop: not_effected; + } +} + +.c, .a { + .b, .a { + .a, .c { + prop: not_effected; + } + } +} + +.effected { + &:extend(.a); + &:extend(.b); + &:extend(.c); +} + +.e { + && { + prop: extend-double; + &:hover { + hover: not-extended; + } + } +} +.dbl:extend(.e.e) {} diff --git a/node_modules/less/test/less-bom/extend-media.less b/node_modules/less/test/less-bom/extend-media.less new file mode 100644 index 000000000..01165defe --- /dev/null +++ b/node_modules/less/test/less-bom/extend-media.less @@ -0,0 +1,24 @@ +.ext1 .ext2 { + background: black; +} + +@media tv { + .ext1 .ext3 { + color: white; + } + .tv-lowres :extend(.ext1 all) { + background: blue; + } + @media hires { + .ext1 .ext4 { + color: green; + } + .tv-hires :extend(.ext1 all) { + background: red; + } + } +} + +.all:extend(.ext1 all) { + +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/extend-nest.less b/node_modules/less/test/less-bom/extend-nest.less new file mode 100644 index 000000000..03e16c751 --- /dev/null +++ b/node_modules/less/test/less-bom/extend-nest.less @@ -0,0 +1,65 @@ +.sidebar { + width: 300px; + background: red; + + .box { + background: #FFF; + border: 1px solid #000; + margin: 10px 0; + } +} + +.sidebar2 { + &:extend(.sidebar all); + background: blue; +} + +.type1 { + .sidebar3 { + &:extend(.sidebar all); + background: green; + } +} + +.type2 { + &.sidebar4 { + &:extend(.sidebar all); + background: red; + } +} + +.button { + color: black; + &:hover { + color: white; + } +} +.submit { + &:extend(.button); + &:hover:extend(.button:hover) {} +} + +.nomatch { + &:hover:extend(.button :hover) {} +} + +.button2 { + :hover { + nested: white; + } +} +.button2 :hover { + notnested: black; +} + +.nomatch :extend(.button2:hover) {} + +.amp-test-a, +.amp-test-b { + .amp-test-c &.amp-test-d&.amp-test-e { + .amp-test-f&+&.amp-test-g:extend(.amp-test-h) {} + } +} +.amp-test-h { + test: extended by masses of selectors; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/extend-selector.less b/node_modules/less/test/less-bom/extend-selector.less new file mode 100644 index 000000000..9fd663145 --- /dev/null +++ b/node_modules/less/test/less-bom/extend-selector.less @@ -0,0 +1,110 @@ +.error { + border: 1px #f00; + background: #fdd; +} +.error.intrusion { + font-size: 1.3em; + font-weight: bold; +} +.intrusion .error { + display: none; +} +.badError:extend(.error all) { + border-width: 3px; +} + +.foo .bar, .foo .baz { + display: none; +} + +.ext1 .ext2 + :extend(.foo all) { +} + +.ext3:extend(.foo all), +.ext4:extend(.foo all) { +} + +div.ext5, +.ext6 > .ext5 { + width: 100px; +} + +.should-not-exist-in-output, +.ext7:extend(.ext5 all) { +} + +.ext { + test: 1; +} +// same as +// .a .c:extend(.ext all) +// .b .c:extend(.ext all) +// .a .c .d +// .b .c .d +.a, .b { + test: 2; + .c:extend(.ext all) { + test: 3; + .d { + test: 4; + } + } +} + +.replace.replace, +.c.replace + .replace { + .replace, + .c { + prop: copy-paste-replace; + } +} +.rep_ace:extend(.replace all) {} + +.attributes { + [data="test"] { + extend: attributes; + } + .attribute-test { + &:extend([data="test"] all); + } + [data] { + extend: attributes2; + } + .attribute-test2 { + &:extend([data] all); //you could argue it should match [data="test"]... not for now though... + } + @attr-data: "test3"; + [data=@{attr-data}] { + extend: attributes2; + } + .attribute-test { + &:extend([data="test3"] all); + } +} + +.header { + .header-nav { + background: red; + &:before { + background: blue; + } + } +} + +.footer { + .footer-nav { + &:extend( .header .header-nav all ); + } +} + +.issue-2586-bordered { + border: solid 1px black; +} +.issue-2586-somepage { + .content:extend(.issue-2586-bordered) { + &>span { + margin-bottom: 10px; + } + } +} diff --git a/node_modules/less/test/less-bom/extend.less b/node_modules/less/test/less-bom/extend.less new file mode 100644 index 000000000..366c2dffd --- /dev/null +++ b/node_modules/less/test/less-bom/extend.less @@ -0,0 +1,81 @@ +.error { + border: 1px #f00; + background: #fdd; +} +.error.intrusion { + font-size: 1.3em; + font-weight: bold; +} +.intrusion .error { + display: none; +} +.badError { + &:extend(.error all); + border-width: 3px; +} + +.foo .bar, .foo .baz { + display: none; +} + +.ext1 .ext2 { + &:extend(.foo all); +} + +.ext3, +.ext4 { + &:extend(.foo all); + &:extend(.bar all); +} + +div.ext5, +.ext6 > .ext5 { + width: 100px; +} + +.ext7 { + &:extend(.ext5 all); +} + +.ext8.ext9 { + result: add-foo; +} +.ext8 .ext9, +.ext8 + .ext9, +.ext8 > .ext9 { + result: bar-matched; +} +.ext8.nomatch { + result: none; +} +.ext8 { + .ext9 { + result: match-nested-bar; + } +} +.ext8 { + &.ext9 { + result: match-nested-foo; + } +} + +.fuu:extend(.ext8.ext9 all) {} +.buu:extend(.ext8 .ext9 all) {} +.zap:extend(.ext8 + .ext9 all) {} +.zoo:extend(.ext8 > .ext9 all) {} + +.aa { + color: black; + .dd { + background: red; + } +} +.bb { + background: red; + .bb { + color: black; + } +} +.cc:extend(.aa,.bb) {} +.ee:extend(.dd all,.bb) {} +.ff:extend(.dd,.bb all) {} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/extract-and-length.less b/node_modules/less/test/less-bom/extract-and-length.less new file mode 100644 index 000000000..875410232 --- /dev/null +++ b/node_modules/less/test/less-bom/extract-and-length.less @@ -0,0 +1,133 @@ + +// simple array/list: + +.multiunit { + @v: abc "abc" 1 1px 1% #123; + length: length(@v); + extract: extract(@v, 1) extract(@v, 2) extract(@v, 3) extract(@v, 4) extract(@v, 5) extract(@v, 6); +} + +.incorrect-index { + @v1: a b c; + @v2: a, b, c; + v1: extract(@v1, 5); + v2: extract(@v2, -2); +} + +.scalar { + @var: variable; + var-value: extract(@var, 1); + var-length: length(@var); + ill-index: extract(@var, 2); + + name-value: extract(name, 1); + string-value: extract("string", 1); + number-value: extract(12345678, 1); + color-value: extract(blue, 1); + rgba-value: extract(rgba(80, 160, 240, 0.67), 1); + empty-value: extract(~'', 1); + + name-length: length(name); + string-length: length("string"); + number-length: length(12345678); + color-length: length(blue); + rgba-length: length(rgba(80, 160, 240, 0.67)); + empty-length: length(~''); +} + +.mixin-arguments { + .mixin-args(a b c d); + .mixin-args(a, b, c, d); + .mixin-args(1; 2; 3; 4); +} + +.mixin-args(@value) { + &-1 { + length: length(@value); + extract: extract(@value, 3) ~"|" extract(@value, 2) ~"|" extract(@value, 1); + } +} + +.mixin-args(...) { + &-2 { + length: length(@arguments); + extract: extract(@arguments, 3) ~"|" extract(@arguments, 2) ~"|" extract(@arguments, 1); + } +} + +.mixin-args(@values...) { + &-3 { + length: length(@values); + extract: extract(@values, 3) ~"|" extract(@values, 2) ~"|" extract(@values, 1); + } +} + +.mixin-args(@head, @tail...) { + &-4 { + length: length(@tail); + extract: extract(@tail, 2) ~"|" extract(@tail, 1); + } +} + +// "multidimensional" array/list + +.md-space-comma { + @v: a b c, 1 2 3, "x" "y" "z"; + length-1: length(@v); + extract-1: extract(@v, 2); + length-2: length(extract(@v, 2)); + extract-2: extract(extract(@v, 2), 2); + + &-as-args {.mixin-args(a b c, 1 2 3, "x" "y" "z")} +} + +.md-cat-space-comma { + @a: a b c; + @b: 1 2 3; + @c: "x" "y" "z"; + @v: @a, @b, @c; + length-1: length(@v); + extract-1: extract(@v, 2); + length-2: length(extract(@v, 2)); + extract-2: extract(extract(@v, 2), 2); + + &-as-args {.mixin-args(@a, @b, @c)} +} + +.md-cat-comma-space { + @a: a, b, c; + @b: 1, 2, 3; + @c: "x", "y", "z"; + @v: @a @b @c; + length-1: length(@v); + extract-1: extract(@v, 2); + length-2: length(extract(@v, 2)); + extract-2: extract(extract(@v, 2), 2); + + &-as-args {.mixin-args(@a @b @c)} +} + +.md-3D { + @a: a b c d, 1 2 3 4; + @b: 5 6 7 8, e f g h; + .3D(@a, @b); + + .3D(...) { + + @v1: @arguments; + length-1: length(@v1); + extract-1: extract(@v1, 1); + + @v2: extract(@v1, 2); + length-2: length(@v2); + extract-2: extract(@v2, 1); + + @v3: extract(@v2, 1); + length-3: length(@v3); + extract-3: extract(@v3, 3); + + @v4: extract(@v3, 4); + length-4: length(@v4); + extract-4: extract(@v4, 1); + } +} diff --git a/node_modules/less/test/less-bom/filemanagerPlugin/colors.test b/node_modules/less/test/less-bom/filemanagerPlugin/colors.test new file mode 100644 index 000000000..3d86b9ff9 --- /dev/null +++ b/node_modules/less/test/less-bom/filemanagerPlugin/colors.test @@ -0,0 +1 @@ +@color: red; diff --git a/node_modules/less/test/less-bom/filemanagerPlugin/filemanager.less b/node_modules/less/test/less-bom/filemanagerPlugin/filemanager.less new file mode 100644 index 000000000..3d206cbf2 --- /dev/null +++ b/node_modules/less/test/less-bom/filemanagerPlugin/filemanager.less @@ -0,0 +1,4 @@ +@import "test.test"; +.test { + color: @color; +} diff --git a/node_modules/less/test/less-bom/functions.less b/node_modules/less/test/less-bom/functions.less new file mode 100644 index 000000000..1c0ada6ae --- /dev/null +++ b/node_modules/less/test/less-bom/functions.less @@ -0,0 +1,232 @@ +#functions { + @var: 10; + @colors: #000, #fff; + color: _color("evil red"); // #660000 + width: increment(15); + height: undefined("self"); + border-width: add(2, 3); + variable: increment(@var); + background: linear-gradient(@colors); +} + +#built-in { + @r: 32; + escaped: e("-Some::weird(#thing, y)"); + lighten: lighten(#ff0000, 40%); + lighten-relative: lighten(#ff0000, 40%, relative); + darken: darken(#ff0000, 40%); + darken-relative: darken(#ff0000, 40%, relative); + saturate: saturate(#29332f, 20%); + saturate-relative: saturate(#29332f, 20%, relative); + desaturate: desaturate(#203c31, 20%); + desaturate-relative: desaturate(#203c31, 20%, relative); + greyscale: greyscale(#203c31); + hsl-clamp: hsl(380, 150%, 150%); + spin-p: spin(hsl(340, 50%, 50%), 40); + spin-n: spin(hsl(30, 50%, 50%), -40); + luma-white: luma(#fff); + luma-black: luma(#000); + luma-black-alpha: luma(rgba(0,0,0,0.5)); + luma-red: luma(#ff0000); + luma-green: luma(#00ff00); + luma-blue: luma(#0000ff); + luma-yellow: luma(#ffff00); + luma-cyan: luma(#00ffff); + luma-differs-from-luminance: luma(#ff3600); + luminance-white: luma(#fff); + luminance-black: luma(#000); + luminance-black-alpha: luma(rgba(0,0,0,0.5)); + luminance-red: luma(#ff0000); + luminance-differs-from-luma: luminance(#ff3600); + contrast-filter: contrast(30%); + saturate-filter: saturate(5%); + contrast-white: contrast(#fff); + contrast-black: contrast(#000); + contrast-red: contrast(#ff0000); + contrast-green: contrast(#00ff00); + contrast-blue: contrast(#0000ff); + contrast-yellow: contrast(#ffff00); + contrast-cyan: contrast(#00ffff); + contrast-light: contrast(#fff, #111111, #eeeeee); + contrast-dark: contrast(#000, #111111, #eeeeee); + contrast-wrongorder: contrast(#fff, #eeeeee, #111111, 0.5); + contrast-light-thresh: contrast(#fff, #111111, #eeeeee, 0.5); + contrast-dark-thresh: contrast(#000, #111111, #eeeeee, 0.5); + contrast-high-thresh: contrast(#555, #111111, #eeeeee, 0.6); + contrast-low-thresh: contrast(#555, #111111, #eeeeee, 0.09); + contrast-light-thresh-per: contrast(#fff, #111111, #eeeeee, 50%); + contrast-dark-thresh-per: contrast(#000, #111111, #eeeeee, 50%); + contrast-high-thresh-per: contrast(#555, #111111, #eeeeee, 60%); + contrast-low-thresh-per: contrast(#555, #111111, #eeeeee, 9%); + replace: replace("Hello, Mars.", "Mars\.", "World!"); + replace-captured: replace("This is a string.", "(string)\.$", "new $1."); + replace-with-flags: replace("One + one = 4", "one", "2", "gi"); + replace-single-quoted: replace('foo-1', "1", "2"); + replace-escaped-string: replace(~"bar-1", "1", "2"); + replace-keyword: replace(baz-1, "1", "2"); + replace-with-color: replace("007", "0", #135, g); + replace-with-number: replace("007", "0", 2em); + format: %("rgb(%d, %d, %d)", @r, 128, 64); + format-string: %("hello %s", "world"); + format-multiple: %("hello %s %d", "earth", 2); + format-url-encode: %("red is %A", #ff0000); + format-single-quoted: %('hello %s', "single world"); + format-escaped-string: %(~"hello %s", "escaped world"); + format-color-as-string: %("%s", #123); + format-number-as-string: %("%s", 4px); + eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64)); + + unitless: unit(12px); + unit: unit((13px + 1px), em); + unitpercentage: unit(100, %); + + get-unit: get-unit(10px); + get-unit-empty: get-unit(10); + + hue: hue(hsl(98, 12%, 95%)); + saturation: saturation(hsl(98, 12%, 95%)); + lightness: lightness(hsl(98, 12%, 95%)); + hsvhue: hsvhue(hsv(98, 12%, 95%)); + hsvsaturation: hsvsaturation(hsv(98, 12%, 95%)); + hsvvalue: hsvvalue(hsv(98, 12%, 95%)); + red: red(#f00); + green: green(#0f0); + blue: blue(#00f); + rounded: round((@r/3)); + rounded-two: round((@r/3), 2); + roundedpx: round((10px / 3)); + roundedpx-three: round((10px / 3), 3); + rounded-percentage: round(10.2%); + ceil: ceil(10.1px); + floor: floor(12.9px); + sqrt: sqrt(25px); + pi: pi(); + mod: mod(13m, 11cm); // could take into account units, doesn't at the moment + abs: abs(-4%); + tan: tan(42deg); + sin: sin(10deg); + cos: cos(12); + atan: atan(tan(0.1rad)); + atan: convert(acos(cos(34deg)), deg); + atan: convert(acos(cos(50grad)), deg); + pow: pow(8px, 2); + pow: pow(4, 3); + pow: pow(3, 3em); + min: min(0); + min: min(6, 5); + min: min(1pt, 3pt); + min: min(1cm, 3mm); + max: max(1, 3); + max: max(3em, 1em, 2em, 5em); + percentage: percentage((10px / 50)); + color-quoted-digit: color("#dda0dd"); + color-quoted-keyword: color("plum"); + color-color: color(#dda0dd); + color-keyword: color(plum); + tint: tint(#777777, 13); + tint-full: tint(#777777, 100); + tint-percent: tint(#777777, 13%); + tint-negative: tint(#777777, -13%); + shade: shade(#777777, 13); + shade-full: shade(#777777, 100); + shade-percent: shade(#777777, 13%); + shade-negative: shade(#777777, -13%); + + fade-out: fadeout(red, 5%); // support fadeOut and fadeout + fade-in: fadein(fadeout(red, 10%), 5%); + fade-out-relative: fadeout(red, 5%,relative); + fade-in-relative: fadein(fadeout(red, 10%, relative), 5%, relative); + fade-out2: fadeout(fadeout(red, 50%), 50%); + fade-out2-relative: fadeout(fadeout(red, 50%, relative), 50%, relative); + + hsv: hsv(5, 50%, 30%); + hsva: hsva(3, 50%, 30%, 0.2); + + mix: mix(#ff0000, #ffff00, 80); + mix-0: mix(#ff0000, #ffff00, 0); + mix-100: mix(#ff0000, #ffff00, 100); + mix-weightless: mix(#ff0000, #ffff00); + mixt: mix(#ff0000, transparent); + + .is-a { + @rules: { + color: red; + }; + ruleset: isruleset(@rules); + color: iscolor(#ddd); + color1: iscolor(red); + color2: iscolor(rgb(0, 0, 0)); + color3: iscolor(transparent); + keyword: iskeyword(hello); + number: isnumber(32); + string: isstring("hello"); + pixel: ispixel(32px); + percent: ispercentage(32%); + em: isem(32em); + cat: isunit(32cat, cat); + no-unit-is-empty: isunit(32, ''); + case-insensitive-1: isunit(32CAT, cat); + case-insensitive-2: isunit(32px, PX); + } +} + +#alpha { + alpha: darken(hsla(25, 50%, 50%, 0.6), 10%); + alpha2: alpha(rgba(3, 4, 5, 0.5)); + alpha3: alpha(transparent); +} + +#blendmodes { + multiply: multiply(#f60000, #f60000); + screen: screen(#f60000, #0000f6); + overlay: overlay(#f60000, #0000f6); + softlight: softlight(#f60000, #ffffff); + hardlight: hardlight(#f60000, #0000f6); + difference: difference(#f60000, #0000f6); + exclusion: exclusion(#f60000, #0000f6); + average: average(#f60000, #0000f6); + negation: negation(#f60000, #313131); +} + +#extract-and-length { + @anon: A B C 1 2 3; + extract: extract(@anon, 6) extract(@anon, 5) extract(@anon, 4) extract(@anon, 3) extract(@anon, 2) extract(@anon, 1); + length: length(@anon); +} + +#quoted-functions-in-mixin { + // Quoted type may have some weird side-effects when used in mixins (#2308) + .mixin(); + .mixin() { + replace-double-quoted: replace('foo-1', "1", "2"); + replace-single-quoted: replace('foo-3', "3", "4"); + replace-escaped-string: replace(~"bar-1", "1", "2"); + replace-keyword: replace(baz-1, "1", "2"); + replace-anonymous: replace(e("qux-1"), "1", "2"); + format-double-quoted: %("hello %s", "world"); + format-single-quoted: %('hello %s', "single world"); + format-escaped-string: %(~"hello %s", "escaped world"); + format-keyword: %(hello); + format-anonymous: %(e("hello %s"), "anonymous world"); + } +} + +#list-details { + @list: + a 1, // Some comment + b 2; + + length: length(@list); + one: extract(@list, 1); + @two: extract(@list, 2); + two: @two; + two-length: length(@two); + two-one: extract(@two, 1); + two-two: extract(@two, 2); +} +@color1: #FFF;/* comment1 */ +@color2: #FFF/* comment2 */; +html { + color: mix(blue, @color1, 50%); + color: mix(blue, @color2, 50%); +} diff --git a/node_modules/less/test/less-bom/globalVars/extended.json b/node_modules/less/test/less-bom/globalVars/extended.json new file mode 100644 index 000000000..6bd2a4845 --- /dev/null +++ b/node_modules/less/test/less-bom/globalVars/extended.json @@ -0,0 +1,5 @@ +{ + "the-border": "1px", + "base-color": "#111", + "red": "#842210" +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/globalVars/extended.less b/node_modules/less/test/less-bom/globalVars/extended.less new file mode 100644 index 000000000..9f90a9687 --- /dev/null +++ b/node_modules/less/test/less-bom/globalVars/extended.less @@ -0,0 +1,10 @@ +#header { + color: (@base-color * 3); + border-left: @the-border; + border-right: (@the-border * 2); +} +#footer { + color: (@base-color + #003300); + border-color: @red; +} +@red: desaturate(red, 10%); // less file overrides passed in color <- note line comment on last line to check it is okay \ No newline at end of file diff --git a/node_modules/less/test/less-bom/globalVars/simple.json b/node_modules/less/test/less-bom/globalVars/simple.json new file mode 100644 index 000000000..2bccdc51f --- /dev/null +++ b/node_modules/less/test/less-bom/globalVars/simple.json @@ -0,0 +1,3 @@ +{ + "my-color": "red" +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/globalVars/simple.less b/node_modules/less/test/less-bom/globalVars/simple.less new file mode 100644 index 000000000..9fa965f96 --- /dev/null +++ b/node_modules/less/test/less-bom/globalVars/simple.less @@ -0,0 +1,3 @@ +.class { + color: @my-color; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/ie-filters.less b/node_modules/less/test/less-bom/ie-filters.less new file mode 100644 index 000000000..8e64a2d53 --- /dev/null +++ b/node_modules/less/test/less-bom/ie-filters.less @@ -0,0 +1,15 @@ +@fat: 0; +@cloudhead: "#000000"; + +.nav { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 20); + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@fat); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr=@cloudhead, GradientType=@fat); +} +.evalTest(@arg) { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@arg); +} +.evalTest1 { + .evalTest(30); + .evalTest(5); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import-inline.less b/node_modules/less/test/less-bom/import-inline.less new file mode 100644 index 000000000..6506d94e7 --- /dev/null +++ b/node_modules/less/test/less-bom/import-inline.less @@ -0,0 +1,3 @@ +@import url("import/import-test-c.less");// import inline should not float above this #1954 +@import (inline) url("import/import-test-d.css") (min-width:600px); +@import (inline, css) url("import/invalid-css.less"); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import-interpolation.less b/node_modules/less/test/less-bom/import-interpolation.less new file mode 100644 index 000000000..47d22a30b --- /dev/null +++ b/node_modules/less/test/less-bom/import-interpolation.less @@ -0,0 +1,8 @@ +@my_theme: "test"; + +@import "import/import-@{my_theme}-e.less"; + +@import "import/import-@{in}@{terpolation}.less"; + +@import "import/interpolation-vars.less"; + diff --git a/node_modules/less/test/less-bom/import-once.less b/node_modules/less/test/less-bom/import-once.less new file mode 100644 index 000000000..079c56936 --- /dev/null +++ b/node_modules/less/test/less-bom/import-once.less @@ -0,0 +1,6 @@ +@import "import/import-once-test-c"; +@import "import/import-once-test-c"; +@import "import/import-once-test-c.less"; +@import "import/deeper/import-once-test-a"; +@import (multiple) "import/import-test-f.less"; +@import (multiple) "import/import-test-f.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import-reference-issues.less b/node_modules/less/test/less-bom/import-reference-issues.less new file mode 100644 index 000000000..232518bc1 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues.less @@ -0,0 +1,50 @@ +// Tests following past issues: +// * #1851 - Extend within (reference) imported files +// * #1896 - Namespace imported less code does not get properly referenced, when there's a (reference) keyword. +// * #1878 - extend inside referenced file should not extend outside selectors +// * #2716 - A file imported by reference and then normally - multiple imports should be independent +// * #1968 - When using an @import (reference), mixins that contain an & selector get added to the compiled output improperly +// * #2162 - Cannot put import by reference inside of a mixin (also doubles #1896) + +// #1878: extend inside referenced file should not extend outside selectors +@import (reference) "import-reference-issues/global-scope-import.less"; +.theOnlySelector { + shall-have: one selector; +} + +// #2716: A file imported by reference and then normally - multiple imports should be independent +// #1878: - double nested version +#do-not-show-import { + @import (reference, multiple) "import-reference-issues/multiple-import.less"; +} + +show-all-content { + @import (multiple) "import-reference-issues/multiple-import.less"; +} +// #1896: Namespace imported less code does not get properly referenced, when there's a (reference) keyword. +#Namespace { + @import (less, reference) "import-reference-issues/simple-mixin.css"; +} +#used-namespaced-mixin { + #Namespace > .mixin(); + shall-see: another property above; +} + +// #1851: Extend within (reference) imported files +// test-b is in global-scope-import.less file +.test-c { + &:extend(.test-b all); +} + +// #1968: When using an @import (reference), mixins that contain an & selector get added to the compiled output improperly +@import "import-reference-issues/mixin-1968.less"; +@import (reference) "import-reference-issues/appender-reference-1968.less"; + +// #2162 - Cannot put import by reference inside of a mixin (also doubles #1896) +.mixin-with-import-by-reference-inside() { + the-only-property: nothing-below-this; + @import (reference) "import-reference-issues/simple-ruleset-2162.less"; +} +call-mixin-with-import-by-reference-inside { + .mixin-with-import-by-reference-inside(); +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/appender-reference-1968.less b/node_modules/less/test/less-bom/import-reference-issues/appender-reference-1968.less new file mode 100644 index 000000000..0ef1aacb2 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/appender-reference-1968.less @@ -0,0 +1,6 @@ +.container-no-parent-selector { + .mixin-no-parent-selector(); +} +.container-with-parent-selector { + .mixin-with-parent-selector() +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/global-scope-import.less b/node_modules/less/test/less-bom/import-reference-issues/global-scope-import.less new file mode 100644 index 000000000..fded86553 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/global-scope-import.less @@ -0,0 +1,13 @@ +.theOnlySelector { + avoid: warning; +} +.unusedAndReference:extend(.theOnlySelector) { + unused-and: reference; +} + +@import (reference) "global-scope-nested.less"; + +.test-b { + background-color: green; + &:extend(.test-a all); +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/global-scope-nested.less b/node_modules/less/test/less-bom/import-reference-issues/global-scope-nested.less new file mode 100644 index 000000000..cd2fe42a5 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/global-scope-nested.less @@ -0,0 +1,3 @@ +.test-a { + color: red; +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/mixin-1968.less b/node_modules/less/test/less-bom/import-reference-issues/mixin-1968.less new file mode 100644 index 000000000..0c624a629 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/mixin-1968.less @@ -0,0 +1,8 @@ +.mixin-no-parent-selector() { + background-color: red; +} +.mixin-with-parent-selector() { + &:first-child{ // USING AN & SELECTOR HERE + background-color: blue; + } +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/multiple-import-nested.less b/node_modules/less/test/less-bom/import-reference-issues/multiple-import-nested.less new file mode 100644 index 000000000..f0496aa35 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/multiple-import-nested.less @@ -0,0 +1,12 @@ +/* double nested file */ +should { + be: invisible; +} +/* do not extend outside of this */ +.something { + invisible: suppress warning; +} +.invisible { + &:extend(.something all); +} + diff --git a/node_modules/less/test/less-bom/import-reference-issues/multiple-import.less b/node_modules/less/test/less-bom/import-reference-issues/multiple-import.less new file mode 100644 index 000000000..46f99dfa5 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/multiple-import.less @@ -0,0 +1,10 @@ +/* + tralala +*/ +.fix { + fix: fix; +} +.something { + @import (reference) "multiple-import-nested.less"; + inside: something; +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/simple-mixin.css b/node_modules/less/test/less-bom/import-reference-issues/simple-mixin.css new file mode 100644 index 000000000..7413ca6c6 --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/simple-mixin.css @@ -0,0 +1,3 @@ +.mixin { + was: included; +} diff --git a/node_modules/less/test/less-bom/import-reference-issues/simple-ruleset-2162.less b/node_modules/less/test/less-bom/import-reference-issues/simple-ruleset-2162.less new file mode 100644 index 000000000..942f0ba2a --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference-issues/simple-ruleset-2162.less @@ -0,0 +1,3 @@ +ruleset { + shall-be-invisible: less; +} diff --git a/node_modules/less/test/less-bom/import-reference.less b/node_modules/less/test/less-bom/import-reference.less new file mode 100644 index 000000000..3b6c75f0d --- /dev/null +++ b/node_modules/less/test/less-bom/import-reference.less @@ -0,0 +1,26 @@ +@import (reference) url("import-once.less"); +@import (reference) url("css-3.less"); +@import (reference) url("media.less"); +@import (reference) url("import/import-reference.less"); +@import (reference) url("import/css-import.less"); + +.b { + .z(); +} + +.zz(); + +.visible:extend(.z all) { + extend: test; +} + +.test-mediaq-import { + .mixin-with-mediaq(340px); +} + +.class:extend(.class all) { +} +.mixin-with-nested-selectors(); +.mixin-with-directives(some-name); + +.print-referenced-import-inline(); diff --git a/node_modules/less/test/less-bom/import.less b/node_modules/less/test/less-bom/import.less new file mode 100644 index 000000000..dd96b7247 --- /dev/null +++ b/node_modules/less/test/less-bom/import.less @@ -0,0 +1,31 @@ +/** comment at the top**/ +@import url(http://fonts.googleapis.com/css?family=Open+Sans); + +@import url(/absolute/something.css) screen and (color) and (max-width: 600px); + +@import (optional) "file-does-not-exist.does-not-exist"; + +@var: 100px; +@import url("//ha.com/file.css") (min-width:@var); + +#import-test { + .mixin; + width: 10px; + height: (@a + 10%); +} +@import "import/import-test-e" screen and (max-width: 600px); + +@import url("import/import-test-a.less"); + +@import (less, multiple) "import/import-test-d.css" screen and (max-width: 601px); + +@import (multiple) "import/import-test-e" screen and (max-width: 602px); + +@import (less, multiple) url("import/import-test-d.css") screen and (max-width: 603px); + +@media print { + @import (multiple) "import/import-test-e"; +} + +@charset "UTF-8"; // climb on top #2126 + diff --git a/node_modules/less/test/less-bom/import/css-import.less b/node_modules/less/test/less-bom/import/css-import.less new file mode 100644 index 000000000..111302b0e --- /dev/null +++ b/node_modules/less/test/less-bom/import/css-import.less @@ -0,0 +1 @@ +@import url("test.css"); diff --git a/node_modules/less/test/less-bom/import/deeper/deeper-2/url-import-2.less b/node_modules/less/test/less-bom/import/deeper/deeper-2/url-import-2.less new file mode 100644 index 000000000..1968e6d03 --- /dev/null +++ b/node_modules/less/test/less-bom/import/deeper/deeper-2/url-import-2.less @@ -0,0 +1,3 @@ +.deep-import-url { + color: red; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/deeper/deeper-2/url-import.less b/node_modules/less/test/less-bom/import/deeper/deeper-2/url-import.less new file mode 100644 index 000000000..67adeecbb --- /dev/null +++ b/node_modules/less/test/less-bom/import/deeper/deeper-2/url-import.less @@ -0,0 +1 @@ +@import url("url-import-2.less"); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/deeper/import-once-test-a.less b/node_modules/less/test/less-bom/import/deeper/import-once-test-a.less new file mode 100644 index 000000000..0563fa88c --- /dev/null +++ b/node_modules/less/test/less-bom/import/deeper/import-once-test-a.less @@ -0,0 +1 @@ +@import "../import-once-test-c"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/deeper/url-import.less b/node_modules/less/test/less-bom/import/deeper/url-import.less new file mode 100644 index 000000000..bb6fd97c3 --- /dev/null +++ b/node_modules/less/test/less-bom/import/deeper/url-import.less @@ -0,0 +1 @@ +@import url("deeper-2/url-import.less"); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-and-relative-paths-test.less b/node_modules/less/test/less-bom/import/import-and-relative-paths-test.less new file mode 100644 index 000000000..a0c609789 --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-and-relative-paths-test.less @@ -0,0 +1,17 @@ +@import "../css/background.css"; +@import "import-test-d.css"; + +@import "imports/logo"; +@import "imports/font"; + +.unquoted-relative-path-bg() { + background-image: url(../../data/image.jpg); +} +.quoted-relative-path-border-image() { + border-image: url('../../data/image.jpg'); +} + +#imported-relative-path { + .unquoted-relative-path-bg; + .quoted-relative-path-border-image; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-charset-test.less b/node_modules/less/test/less-bom/import/import-charset-test.less new file mode 100644 index 000000000..3d36ce5bc --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-charset-test.less @@ -0,0 +1 @@ +@charset "ISO-8859-1"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-inline-invalid-css.less b/node_modules/less/test/less-bom/import/import-inline-invalid-css.less new file mode 100644 index 000000000..fb8fd2008 --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-inline-invalid-css.less @@ -0,0 +1 @@ +@import (inline) "invalid-css.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-interpolation.less b/node_modules/less/test/less-bom/import/import-interpolation.less new file mode 100644 index 000000000..9194f7d5f --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-interpolation.less @@ -0,0 +1,2 @@ +@import (inline) "imports/logo.less"; +@import "import-@{in}@{terpolation}2.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-interpolation2.less b/node_modules/less/test/less-bom/import/import-interpolation2.less new file mode 100644 index 000000000..d13083e7d --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-interpolation2.less @@ -0,0 +1,5 @@ +.a { + var: test; +} + +@in: "redefined-does-nothing"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-once-test-c.less b/node_modules/less/test/less-bom/import/import-once-test-c.less new file mode 100644 index 000000000..f8531467c --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-once-test-c.less @@ -0,0 +1,6 @@ + +@c: red; + +#import { + color: @c; +} diff --git a/node_modules/less/test/less-bom/import/import-reference.less b/node_modules/less/test/less-bom/import/import-reference.less new file mode 100644 index 000000000..05cfc5bb7 --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-reference.less @@ -0,0 +1,98 @@ +.z { + color: red; + .c { + color: green; + } +} +.only-with-visible, +.z { + color: green; + &:hover { + color: green; + } + & { + color: green; + } + & + & { + color: green; + .sub { + color: green; + } + } +} + +& { + .hidden { + hidden: true; + } +} + +@media tv { + .hidden { + hidden: true; + } +} + +/* comment is not output */ + +.zz { + .y { + pulled-in: yes /* inline comment survives */; + } + /* comment pulled in */ +} +@max-size: 450px; +.mixin-with-mediaq(@num) { + color: green; + test: @num; + @media (max-size: @max-size) { + color: red; + } +} +//https://github.com/less/less.js/issues/2359 +@supports (something: else) { + .class { + something: else; + } + .nestedToo { + .class { + something: else; + } + } + .invisible { + something: else; + } +} +//https://github.com/less/less.js/issues/1979 +.mixin-with-nested-selectors() { + .test { + color: red; + &:first-child { + color: blue; + } + } +} +.mixin-with-directives(@keyframeName) { + @keyframes @keyframeName { + @rules1(); + } + @supports (animation-name: test) { + @keyframes @keyframeName { + @rules2(); + } + .selector { + color: red; + } + } + @rules1: {property: value;}; + @rules2: {property: value;}; +} + +@import (inline, multiple) "invalid-css.less"; +@import "import-inline-invalid-css.less"; +.print-referenced-import-inline() { + div { + @import (inline, multiple) "invalid-css.less"; + } + @import (inline, multiple) "invalid-css.less"; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-test-a.less b/node_modules/less/test/less-bom/import/import-test-a.less new file mode 100644 index 000000000..5112500f4 --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-test-a.less @@ -0,0 +1,5 @@ +@import "import-test-b.less"; +@import url(import-test-f.less); +@import url("deeper/url-import.less"); +@a: 20%; +@import "urls.less"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/import-test-b.less b/node_modules/less/test/less-bom/import/import-test-b.less new file mode 100644 index 000000000..3a955721d --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-test-b.less @@ -0,0 +1,8 @@ +@import "import-test-c"; + +@b: 100%; + +.mixin { + height: 10px; + color: @c; +} diff --git a/node_modules/less/test/less-bom/import/import-test-c.less b/node_modules/less/test/less-bom/import/import-test-c.less new file mode 100644 index 000000000..f8531467c --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-test-c.less @@ -0,0 +1,6 @@ + +@c: red; + +#import { + color: @c; +} diff --git a/node_modules/less/test/less-bom/import/import-test-d.css b/node_modules/less/test/less-bom/import/import-test-d.css new file mode 100644 index 000000000..5e017ca8d --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-test-d.css @@ -0,0 +1 @@ +#css { color: yellow; } diff --git a/node_modules/less/test/less-bom/import/import-test-e.less b/node_modules/less/test/less-bom/import/import-test-e.less new file mode 100644 index 000000000..11eb469d4 --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-test-e.less @@ -0,0 +1,2 @@ + +body { width: 100% } diff --git a/node_modules/less/test/less-bom/import/import-test-f.less b/node_modules/less/test/less-bom/import/import-test-f.less new file mode 100644 index 000000000..2c356a0b0 --- /dev/null +++ b/node_modules/less/test/less-bom/import/import-test-f.less @@ -0,0 +1,5 @@ +@import "import-test-e"; + +.test-f { + height: 10px; +} diff --git a/node_modules/less/test/less-bom/import/imports/font.less b/node_modules/less/test/less-bom/import/imports/font.less new file mode 100644 index 000000000..98d879478 --- /dev/null +++ b/node_modules/less/test/less-bom/import/imports/font.less @@ -0,0 +1,8 @@ +@font-face { + font-family: xecret; + src: url('../assets/xecret.ttf'); +} + +#secret { + font-family: xecret, sans-serif; +} diff --git a/node_modules/less/test/less-bom/import/imports/logo.less b/node_modules/less/test/less-bom/import/imports/logo.less new file mode 100644 index 000000000..9afbda6e8 --- /dev/null +++ b/node_modules/less/test/less-bom/import/imports/logo.less @@ -0,0 +1,6 @@ +#logo { + width: 100px; + height: 100px; + background: url('../assets/logo.png'); + background: url("#inline-svg"); +} diff --git a/node_modules/less/test/less-bom/import/interpolation-vars.less b/node_modules/less/test/less-bom/import/interpolation-vars.less new file mode 100644 index 000000000..6c5de0014 --- /dev/null +++ b/node_modules/less/test/less-bom/import/interpolation-vars.less @@ -0,0 +1,6 @@ +@in: "in"; +@terpolation: "terpolation"; + +// should be ignored because its already imported +// and it uses a variable from the parent scope +@import "import-@{my_theme}-e.less"; diff --git a/node_modules/less/test/less-bom/import/invalid-css.less b/node_modules/less/test/less-bom/import/invalid-css.less new file mode 100644 index 000000000..da05c8b7b --- /dev/null +++ b/node_modules/less/test/less-bom/import/invalid-css.less @@ -0,0 +1 @@ +this isn't very valid CSS. \ No newline at end of file diff --git a/node_modules/less/test/less-bom/import/urls.less b/node_modules/less/test/less-bom/import/urls.less new file mode 100644 index 000000000..cf776c334 --- /dev/null +++ b/node_modules/less/test/less-bom/import/urls.less @@ -0,0 +1 @@ +// empty file showing that it loads from the relative path first diff --git a/node_modules/less/test/less-bom/include-path-string/include-path-string.less b/node_modules/less/test/less-bom/include-path-string/include-path-string.less new file mode 100644 index 000000000..7ac1aa402 --- /dev/null +++ b/node_modules/less/test/less-bom/include-path-string/include-path-string.less @@ -0,0 +1,3 @@ +data-uri { + property: data-uri('image.svg'); +} diff --git a/node_modules/less/test/less-bom/include-path/include-path.less b/node_modules/less/test/less-bom/include-path/include-path.less new file mode 100644 index 000000000..739a0623d --- /dev/null +++ b/node_modules/less/test/less-bom/include-path/include-path.less @@ -0,0 +1,8 @@ +@import "import-test-e"; + +data-uri { + property: data-uri('image.svg'); +} +image-size { + property: image-size('image.svg'); +} diff --git a/node_modules/less/test/less-bom/javascript.less b/node_modules/less/test/less-bom/javascript.less new file mode 100644 index 000000000..60c9a2740 --- /dev/null +++ b/node_modules/less/test/less-bom/javascript.less @@ -0,0 +1,38 @@ +.eval { + js: `42`; + js: `1 + 1`; + js: `"hello world"`; + js: `[1, 2, 3]`; + title: `typeof process.title`; + ternary: `(1 + 1 == 2 ? true : false)`; + multiline: `(function(){var x = 1 + 1; + return x})()`; +} +.scope { + @foo: 42; + var: `parseInt(this.foo.toJS())`; + escaped: ~`2 + 5 + 'px'`; +} +.vars { + @var: `4 + 4`; + width: @var; +} +.escape-interpol { + @world: "world"; + width: ~`"hello" + " " + @{world}`; +} +.arrays { + @ary: 1, 2, 3; + @ary2: 1 2 3; + ary: `@{ary}.join(', ')`; + ary1: `@{ary2}.join(', ')`; +} +.transitions(...) { + @arg: ~`"@{arguments}".replace(/[\[\]]*/g, '')`; + 1: @arg; // rounded to integers + 2: ~`"@{arguments}"`; // rounded to integers + 3: @arguments; // OK +} +.test-tran { + .transitions(opacity 0.3s ease-in 0.3s, max-height 0.6s linear, margin-bottom 0.4s linear;); +} diff --git a/node_modules/less/test/less-bom/lazy-eval.less b/node_modules/less/test/less-bom/lazy-eval.less new file mode 100644 index 000000000..ec35a39cf --- /dev/null +++ b/node_modules/less/test/less-bom/lazy-eval.less @@ -0,0 +1,6 @@ +@var: @a; +@a: 100%; + +.lazy-eval { + width: @var; +} diff --git a/node_modules/less/test/less-bom/legacy/legacy.less b/node_modules/less/test/less-bom/legacy/legacy.less new file mode 100644 index 000000000..d7d5cbd57 --- /dev/null +++ b/node_modules/less/test/less-bom/legacy/legacy.less @@ -0,0 +1,21 @@ +@media (-o-min-device-pixel-ratio: 2/1) { + .test-math-and-units { + font: ignores 0/0 rules; + test-division: 4 / 2 + 5em; + simple: 1px + 1px; + } +} +#units { + t1: (2em/1em) + 20; + t2: 20 + (2em/1em); + t3: 2em/1em; + t4: (2em/1px) + 20; + t5: 20 + (2em/1px); + t6: 2em/1px; + t7: (2em*1em) + 20; + t8: 20 + (2em*1em); + t9: 2em*1em; + t10: (2em*1px) + 20; + t11: 20 + (2em*1px); + t12: 2em*1px; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/media.less b/node_modules/less/test/less-bom/media.less new file mode 100644 index 000000000..5c24da6b2 --- /dev/null +++ b/node_modules/less/test/less-bom/media.less @@ -0,0 +1,234 @@ + +// For now, variables can't be declared inside @media blocks. + +@var: 42; + +@media print { + .class { + color: blue; + .sub { + width: @var; + } + } + .top, header > h1 { + color: (#222 * 2); + } +} + +@media screen { + @base: 8; + body { max-width: (@base * 60); } +} + +@ratio_large: 16; +@ratio_small: 9; + +@media all and (device-aspect-ratio: @ratio_large / @ratio_small) { + body { max-width: 800px; } +} + +@media all and (orientation:portrait) { + aside { float: none; } +} + +@media handheld and (min-width: @var), screen and (min-width: 20em) { + body { + max-width: 480px; + } +} + +body { + @media print { + padding: 20px; + + header { + background-color: red; + } + + @media (orientation:landscape) { + margin-left: 20px; + } + } +} + +@media screen { + .sidebar { + width: 300px; + @media (orientation: landscape) { + width: 500px; + } + } +} + +@media a { + .first { + @media b { + .second { + .third { + width: 300px; + @media c { + width: 500px; + } + } + .fourth { + width: 3; + } + } + } + } +} + +body { + @media a, b and c { + width: 95%; + + @media x, y { + width: 100%; + } + } +} + +.mediaMixin(@fallback: 200px) { + background: black; + + @media handheld { + background: white; + + @media (max-width: @fallback) { + background: red; + } + } +} + +.a { + .mediaMixin(100px); +} + +.b { + .mediaMixin(); +} +@smartphone: ~"only screen and (max-width: 200px)"; +@media @smartphone { + body { + width: 480px; + } +} + +@media print { + @page :left { + margin: 0.5cm; + } + @page :right { + margin: 0.5cm; + } + @page Test:first { + margin: 1cm; + } + @page :first { + size: 8.5in 11in; + @top-left { + margin: 1cm; + } + @top-left-corner { + margin: 1cm; + } + @top-center { + margin: 1cm; + } + @top-right { + margin: 1cm; + } + @top-right-corner { + margin: 1cm; + } + @bottom-left { + margin: 1cm; + } + @bottom-left-corner { + margin: 1cm; + } + @bottom-center { + margin: 1cm; + } + @bottom-right { + margin: 1cm; + } + @bottom-right-corner { + margin: 1cm; + } + @left-top { + margin: 1cm; + } + @left-middle { + margin: 1cm; + } + @left-bottom { + margin: 1cm; + } + @right-top { + margin: 1cm; + } + @right-middle { + content: "Page " counter(page); + } + @right-bottom { + margin: 1cm; + } + } +} + +@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (min-resolution: 128dpcm) { + .b { + background: red; + } +} + +.bg() { + background: red; + + @media (max-width: 500px) { + background: green; + } +} + +body { + .bg(); +} + +@bpMedium: 1000px; +@media (max-width: @bpMedium) { + body { + .bg(); + background: blue; + } +} + +@media (max-width: 1200px) { + /* a comment */ + + @media (max-width: 900px) { + body { font-size: 11px; } + } +} + +.nav-justified { + @media (min-width: 480px) { + > li { + display: table-cell; + } + } +} + +.menu +{ + @media (min-width: 768px) { + .nav-justified(); + } +} +@all: ~"all"; +@tv: ~"tv"; +@media @all and @tv { + .all-and-tv-variables { + var: all-and-tv; + } +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/merge.less b/node_modules/less/test/less-bom/merge.less new file mode 100644 index 000000000..dd7c49ece --- /dev/null +++ b/node_modules/less/test/less-bom/merge.less @@ -0,0 +1,78 @@ +.first-transform() { + transform+: rotate(90deg), skew(30deg); +} +.second-transform() { + transform+: scale(2,4); +} +.third-transform() { + transform: scaleX(45deg); +} +.fourth-transform() { + transform+: scaleX(45deg); +} +.fifth-transform() { + transform+: scale(2,4) !important; +} +.first-background() { + background+: url(data://img1.png); +} +.second-background() { + background+: url(data://img2.png); +} + +.test1 { + // Can merge values + .first-transform(); + .second-transform(); +} +.test2 { + // Won't merge values without +: merge directive, for backwards compatibility with css + .first-transform(); + .third-transform(); +} +.test3 { + // Won't merge values from two sources with different properties + .fourth-transform(); + .first-background(); +} +.test4 { + // Won't merge values from sources that merked as !important, for backwards compatibility with css + .first-transform(); + .fifth-transform(); +} +.test5 { + // Won't merge values from mixins that merked as !important, for backwards compatibility with css + .first-transform(); + .second-transform() !important; +} +.test6 { + // Ignores !merge if no peers found + .second-transform(); +} + +.test-interleaved { + transform+: t1; + background+: b1; + transform+: t2; + background+: b2, b3; + transform+: t3; +} + +.test-spaced { + transform+_: t1; + background+_: b1; + transform+_: t2; + background+_: b2, b3; + transform+_: t3; +} + +.test-interleaved-with-spaced { + transform+_: t1s; + transform+: t2; + background+: b1; + transform+_: t3s; + transform+: t4 t5s; + background+_: b2s, b3; + transform+_: t6s; + background+: b4; +} diff --git a/node_modules/less/test/less-bom/mixins-args.less b/node_modules/less/test/less-bom/mixins-args.less new file mode 100644 index 000000000..13397fa1b --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-args.less @@ -0,0 +1,263 @@ +.mixin (@a: 1px, @b: 50%) { + width: (@a * 5); + height: (@b - 1%); +} + +.mixina (@style, @width, @color: black) { + border: @width @style @color; +} + +.mixiny +(@a: 0, @b: 0) { + margin: @a; + padding: @b; +} + +.hidden() { + color: transparent; // asd +} + +#hidden { + .hidden; +} + +#hidden1 { + .hidden(); +} + +.two-args { + color: blue; + .mixin(2px, 100%); + .mixina(dotted, 2px); +} + +.one-arg { + .mixin(3px); +} + +.no-parens { + .mixin; +} + +.no-args { + .mixin(); +} + +.var-args { + @var: 9; + .mixin(@var, (@var * 2)); +} + +.multi-mix { + .mixin(2px, 30%); + .mixiny(4, 5); +} + +.maxa(@arg1: 10, @arg2: #f00) { + padding: (@arg1 * 2px); + color: @arg2; +} + +body { + .maxa(15); +} + +@glob: 5; +.global-mixin(@a:2) { + width: (@glob + @a); +} + +.scope-mix { + .global-mixin(3); +} + +.nested-ruleset (@width: 200px) { + width: @width; + .column { margin: @width; } +} +.content { + .nested-ruleset(600px); +} + +// + +.same-var-name2(@radius) { + radius: @radius; +} +.same-var-name(@radius) { + .same-var-name2(@radius); +} +#same-var-name { + .same-var-name(5px); +} + +// + +.var-inside () { + @var: 10px; + width: @var; +} +#var-inside { .var-inside; } + +.mixin-arguments (@width: 0px, ...) { + border: @arguments; + width: @width; +} + +.arguments { + .mixin-arguments(1px, solid, black); +} +.arguments2 { + .mixin-arguments(); +} +.arguments3 { + .mixin-arguments; +} + +.mixin-arguments2 (@width, @rest...) { + border: @arguments; + rest: @rest; + width: @width; +} +.arguments4 { + .mixin-arguments2(0, 1, 2, 3, 4); +} + +// Edge cases + +.edge-case { + .mixin-arguments("{"); +} + +// Division vs. Literal Slash +.border-radius(@r: 2px/5px) { + border-radius: @r; +} +.slash-vs-math { + .border-radius(); + .border-radius(5px/10px); + .border-radius((3px * 2)); +} +// semi-colon vs comma for delimiting + +.mixin-takes-one(@a) { + one: @a; +} + +.mixin-takes-two(@a; @b) { + one: @a; + two: @b; +} + +.comma-vs-semi-colon { + .mixin-takes-two(@a : a; @b : b, c); + .mixin-takes-two(@a : d, e; @b : f); + .mixin-takes-one(@a: g); + .mixin-takes-one(@a : h;); + .mixin-takes-one(i); + .mixin-takes-one(j;); + .mixin-takes-two(k, l); + .mixin-takes-one(m, n;); + .mixin-takes-two(o, p; q); + .mixin-takes-two(r, s; t;); +} + +.mixin-conflict(@a:defA, @b:defB, @c:defC) { + three: @a, @b, @c; +} + +.mixin-conflict(@a:defA, @b:defB, @c:defC, @d:defD) { + four: @a, @b, @c, @d; +} + +#named-conflict { + .mixin-conflict(11, 12, 13, @a:a); + .mixin-conflict(@a:a, 21, 22, 23); +} +@a: 3px; +.mixin-default-arg(@a: 1px, @b: @a, @c: @b) { + defaults: 1px 1px 1px; + defaults: 2px 2px 2px; +} + +.test-mixin-default-arg { + .mixin-default-arg(); + .mixin-default-arg(2px); +} + +.mixin-comma-default1(@color; @padding; @margin: 2, 2, 2, 2) { + margin: @margin; +} +.selector { + .mixin-comma-default1(#33acfe; 4); +} +.mixin-comma-default2(@margin: 2, 2, 2, 2;) { + margin: @margin; +} +.selector2 { + .mixin-comma-default2(); +} +.mixin-comma-default3(@margin: 2, 2, 2, 2) { + margin: @margin; +} +.selector3 { + .mixin-comma-default3(4,2,2,2); +} + +.test-calling-one-arg-mixin(@a) { +} + +.test-calling-one-arg-mixin(@a, @b, @rest...) { +} + +div { + .test-calling-one-arg-mixin(1); +} + +mixins-args-expand-op- { + @x: 1, 2, 3; + @y: 4 5 6; + + &1 {.m3(@x...)} + &2 {.m3(@y...)} + &3 {.wr(a, b, c)} + &4 {.wr(a; b; c, d)} + &5 {.wr(@x...)} + &6 {.m4(0; @x...)} + &7 {.m4(@x..., @a: 0)} + &8 {.m4(@b: 1.5; @x...)} + &9 {.aa(@y, @x..., and again, @y...)} + + .m3(@a, @b, @c) { + m3: @a, @b, @c; + } + + .m4(@a, @b, @c, @d) { + m4: @a, @b, @c, @d; + } + + .wr(@a...) { + &a {.m3(@a...)} + &b {.m4(0, @a...)} + &c {.m4(@a..., 4)} + } + + .aa(@a...) { + aa: @a; + a4: extract(@a, 5); + a8: extract(@a, 8); + } +} +#test-mixin-matching-when-default-2645 { + .mixin(@height) { + height: @height; + } + + .mixin(@width, @height: 10px) { + width: @width; + + .mixin(@height: @height); + } + + .mixin(@height: 20px); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/mixins-closure.less b/node_modules/less/test/less-bom/mixins-closure.less new file mode 100644 index 000000000..48cf57e87 --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-closure.less @@ -0,0 +1,26 @@ +.scope { + @var: 99px; + .mixin () { + width: @var; + } +} + +.class { + .scope > .mixin; +} + +.overwrite { + @var: 0px; + .scope > .mixin; +} + +.nested { + @var: 5px; + .mixin () { + width: @var; + } + .class { + @var: 10px; + .mixin; + } +} diff --git a/node_modules/less/test/less-bom/mixins-guards-default-func.less b/node_modules/less/test/less-bom/mixins-guards-default-func.less new file mode 100644 index 000000000..5fd7a8eee --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-guards-default-func.less @@ -0,0 +1,195 @@ + +// basics: + +guard-default-basic-1 { + .m(1) {case: 1} + .m(@x) when (default()) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} +} + +guard-default-basic-2 { + .m(1) {case: 1} + .m(2) {case: 2} + .m(3) {case: 3} + .m(@x) when (default()) {default: @x} + + &-0 {.m(0)} + &-2 {.m(2)} +} + +guard-default-basic-3 { + .m(@x) when (@x = 1) {case: 1} + .m(2) {case: 2} + .m(@x) when (@x = 3) {case: 3} + .m(@x) when (default()) {default: @x} + + &-0 {.m(0)} + &-2 {.m(2)} + &-3 {.m(3)} +} + +guard-default-definition-order { + .m(@x) when (default()) {default: @x} + .m(@x) when (@x = 1) {case: 1} + .m(2) {case: 2} + .m(@x) when (@x = 3) {case: 3} + + &-0 {.m(0)} + &-2 {.m(2)} + &-2 {.m(3)} +} + +// out of guard: + +guard-default-out-of-guard { + .m(1) {case-1: 1} + .m(@x: default()) when (default()) {default: @x} + + &-0 { + case-0: default(); + .m(1); + .m(2); + case-2: default(); + } + &-1 {.m(default())} + &-2 {.m()} +} + +// expressions: + +guard-default-expr-not { + .m(1) {case: 1} + .m(@x) when not(default()) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} +} + +guard-default-expr-eq { + .m(@x) when (@x = true) {case: @x} + .m(@x) when (@x = false) {case: @x} + .m(@x) when (@x = default()) {default: @x} + + &-true {.m(true)} + &-false {.m(false)} +} + +guard-default-expr-or { + .m(1) {case: 1} + .m(2) {case: 2} + .m(@x) when (default()), (@x = 2) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} + &-3 {.m(3)} +} + +guard-default-expr-and { + .m(1) {case: 1} + .m(2) {case: 2} + .m(@x) when (default()) and (@x = 3) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} + &-3 {.m(3)} + &-4 {.m(4)} +} + +guard-default-expr-always { + .m(1) {case: 1} + .m(@x) when (default()), not(default()) {default: @x} // always match + + &-1 {.m(1)} + &-2 {.m(2)} +} + +guard-default-expr-never { + .m(1) {case: 1} + .m(@x) when (default()) and not(default()) {default: @x} // never match + + &-1 {.m(1)} + &-2 {.m(2)} +} + + +// not conflicting multiple default() uses: + +guard-default-multi-1 { + .m(0) {case: 0} + .m(@x) when (default()) {default-1: @x} + .m(2) when (default()) {default-2: @x} + + &-0 {.m(0)} + &-1 {.m(1)} +} + +guard-default-multi-2 { + .m(1, @x) when (default()) {default-1: @x} + .m(2, @x) when (default()) {default-2: @x} + .m(@x, yes) when (default()) {default-3: @x} + + &-1 {.m(1, no)} + &-2 {.m(2, no)} + &-3 {.m(3, yes)} +} + +guard-default-multi-3 { + .m(red) {case-1: darkred} + .m(blue) {case-2: darkblue} + .m(@x) when (iscolor(@x)) and (default()) {default-color: @x} + .m('foo') {case-1: I am 'foo'} + .m('bar') {case-2: I am 'bar'} + .m(@x) when (isstring(@x)) and (default()) {default-string: I am @x} + + &-blue {.m(blue)} + &-green {.m(green)} + &-foo {.m('foo')} + &-baz {.m('baz')} +} + +guard-default-multi-4 { + .m(@x) when (default()), not(default()) {always: @x} + .m(@x) when (default()) and not(default()) {never: @x} + .m(2) {case: 2} + + .m(1); + .m(2); +} + +guard-default-not-ambiguos-2 { + .m(@x) {case: 1} + .m(@x) when (default()) {default: @x} + .m(@x) when not(default()) {not-default: @x} + + .m(2); +} + +guard-default-not-ambiguos-3 { + .m(@x) {case: 1} + .m(@x) when not(default()) {not-default-1: @x} + .m(@x) when not(default()) {not-default-2: @x} + + .m(2); +} + +// default & scope + +guard-default-scopes { + .s1() {.m(@v) {1: no condition}} + .s2() {.m(@v) when (@v) {2: when true}} + .s3() {.m(@v) when (default()) {3: when default}} + + &-3 { + .s2(); + .s3(); + .m(false); + } + + &-1 { + .s1(); + .s3(); + .m(false); + } +} diff --git a/node_modules/less/test/less-bom/mixins-guards.less b/node_modules/less/test/less-bom/mixins-guards.less new file mode 100644 index 000000000..37b1c4680 --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-guards.less @@ -0,0 +1,358 @@ + +// Stacking, functions.. + +.light (@a) when (lightness(@a) > 50%) { + color: white; +} +.light (@a) when (lightness(@a) < 50%) { + color: black; +} +.light (@a) { + margin: 1px; +} + +.light1 { .light(#ddd) } +.light2 { .light(#444) } + +// Arguments against each other + +.max (@a, @b) when (@a > @b) { + width: @a; +} +.max (@a, @b) when (@a < @b) { + width: @b; +} + +.max1 { .max(3, 6) } +.max2 { .max(8, 1) } + +// Globals inside guards + +@g: auto; + +.glob (@a) when (@a = @g) { + margin: @a @g; +} +.glob1 { .glob(auto) } + +// Other operators + +.ops (@a) when (@a >= 0) { + height: gt-or-eq; +} +.ops (@a) when (@a =< 0) { + height: lt-or-eq; +} +.ops (@a) when (@a <= 0) { + height: lt-or-eq-alias; +} +.ops (@a) when not(@a = 0) { + height: not-eq; +} +.ops1 { .ops(0) } +.ops2 { .ops(1) } +.ops3 { .ops(-1) } + +// Scope and default values + +@a: auto; + +.default (@a: inherit) when (@a = inherit) { + content: default; +} +.default1 { .default } + +// true & false keywords +.test (@a) when (@a) { + content: "true."; +} +.test (@a) when not (@a) { + content: "false."; +} + +.test1 { .test(true) } +.test2 { .test(false) } +.test3 { .test(1) } +.test4 { .test(boo) } +.test5 { .test("true") } + +// Boolean expressions + +.bool () when (true) and (false) { content: true and false } // FALSE +.bool () when (true) and (true) { content: true and true } // TRUE +.bool () when (true) { content: true } // TRUE +.bool () when (false) and (false) { content: true } // FALSE +.bool () when (false), (true) { content: false, true } // TRUE +.bool () when (false) and (true) and (true), (true) { content: false and true and true, true } // TRUE +.bool () when (true) and (true) and (false), (false) { content: true and true and false, false } // FALSE +.bool () when (false), (true) and (true) { content: false, true and true } // TRUE +.bool () when (false), (false), (true) { content: false, false, true } // TRUE +.bool () when (false), (false) and (true), (false) { content: false, false and true, false } // FALSE +.bool () when (false), (true) and (true) and (true), (false) { content: false, true and true and true, false } // TRUE +.bool () when not (false) { content: not false } +.bool () when not (true) and not (false) { content: not true and not false } +.bool () when not (true) and not (true) { content: not true and not true } +.bool () when not (false) and (false), not (false) { content: not false and false, not false } + +.bool1 { .bool } + +.equality-unit-test(@num) when (@num = 1%) { + test: fail; +} +.equality-unit-test(@num) when (@num = 2) { + test: pass; +} +.equality-units { + .equality-unit-test(1px); + .equality-unit-test(2px); +} + +.colorguard(@col) when (@col = red) { content: is @col; } +.colorguard(@col) when not (blue = @col) { content: is not blue its @col; } +.colorguard(@col) {} +.colorguardtest { + .colorguard(red); + .colorguard(blue); + .colorguard(purple); +} + +.stringguard(@str) when (@str = "theme1") { content: @str is "theme1"; } +.stringguard(@str) when not ("theme2" = @str) { content: @str is not "theme2"; } +.stringguard(@str) when (@str = 'theme1') { content: @str is 'theme1'; } +.stringguard(@str) when not ('theme2' = @str) { content: @str is not 'theme2'; } +.stringguard(@str) when (~"theme1" = @str) { content: @str is theme1; } +.stringguard(@str) {} +.stringguardtest { + .stringguard("theme1"); + .stringguard("theme2"); + .stringguard('theme1'); + .stringguard('theme2'); + .stringguard(theme1); +} + +.generic(@a, @b) {/**/} +.generic(@a, @b) when (@a = @b) {content: @a is equal to @b} +.generic(@a, @b) when (@b = @a) {content: @b is equal to @a too} +.generic(@a, @b) when (@a < @b) {content: @a is less than @b} +.generic(@a, @b) when (@b < @a) {content: @b is less than @a too} +.generic(@a, @b) when (@a > @b) {content: @a is greater than @b} +.generic(@a, @b) when (@b > @a) {content: @b is greater than @a too} +.generic(@a, @b) when not(@a = @b) {content: @a is not equal to @b} +.generic(@a, @b) when not(@b = @a) {content: @b is not equal to @a too} + +.variouse-types-comparison { + .generic(true, false); + .generic(1, true); + .generic(2, 2px); + .generic(3, ~"3"); + .generic(5, ~"4"); + .generic(abc, ~"abc"); + .generic(abc, "abc"); + .generic('abc', "abd"); + .generic(6, e("6")); + .generic(`9`, 8); + .generic(a, b); + .generic(1 2, 3); +} + +.list-comparison { + .generic(a b c, a b c); + .generic(a b c, a b d); + .generic(a, b, c; a, b, c); + .generic(a, b, c; a, b, d); + .generic(1 2px 300ms, 1em 2 .3s); + + @space-list: 1 2 3; + @comma-list: 1, 2, 3; + @compound: @space-list @comma-list; + + .generic(@space-list, @comma-list); + .generic(@comma-list, ~"1, 2, 3"); + .generic(@compound, @space-list @comma-list); + .generic(@compound, @comma-list @space-list); + .generic(@compound 4, ~"1 2 3 1, 2, 3 4"); +} + +.mixin(...) { + catch:all; +} +.mixin(@var) when (@var=4) { + declare: 4; +} +.mixin(@var) when (@var=4px) { + declare: 4px; +} +#tryNumberPx { + .mixin(4px); +} + +.lock-mixin(@a) { + .inner-locked-mixin(@x: @a) when (@a = 1) { + a: @a; + x: @x; + } +} +.call-lock-mixin { + .lock-mixin(1); + .call-inner-lock-mixin { + .inner-locked-mixin(); + } +} +.bug-100cm-1m(@a) when (@a = 1) { + .failed { + one-hundred: not-equal-to-1; + } +} +.bug-100cm-1m(100cm); + +#ns { + .mixin-for-root-usage(@a) when (@a > 0) { + .mixin-generated-class { + a: @a; + } + } +} + +#ns > .mixin-for-root-usage(1); + +@namespaceGuard: 1; +#guarded when (@namespaceGuard>0) { + #deeper { + .mixin() { + guarded: namespace; + } + } +} +#guarded() when (@namespaceGuard>0) { + #deeper { + .mixin() { + silent: namespace; + } + } +} +#guarded(@variable) when (@namespaceGuard>0) { + #deeper { + .mixin() { + should: not match because namespace argument; + } + } +} +#guarded(@variable: default) when (@namespaceGuard>0) { + #deeper { + .mixin() { + guarded: with default; + } + } +} +#guarded when (@namespaceGuard<0) { + #deeper { + .mixin() { + should: not match because namespace guard; + } + } +} +#guarded-caller { + #guarded > #deeper > .mixin(); +} +#top { + #deeper when (@namespaceGuard<0) { + .mixin(@a) { + should: not match because namespace guard; + } + } + #deeper() when (@namespaceGuard>0) { + .mixin(@a) { + should: match @a; + } + } +} +#guarded-deeper { + #top > #deeper > .mixin(1); +} + +// namespaced & guarded mixin in root +// outputs nothing but should pass: + +@guarded-mixin-for-root: true; +#ns { + .guarded-mixin-for-root() when (@guarded-mixin-for-root) {} +} +#ns > .guarded-mixin-for-root(); +// various combinations of nested or, and, parenthesis and negation +.parenthesisNot(@value) when ((((@value)))) { + parenthesisNot: just-value; +} +.parenthesisNot(@value) when (((not(@value)))) { + parenthesisNot: negated once inside; +} +.parenthesisNot(@value) when not((((@value)))) { + parenthesisNot: negated once outside; +} +.parenthesisNot(@value) when ((not((@value)))) { + parenthesisNot: negated once middle; +} +.parenthesisNot(@value) when not(((not(@value)))) { + parenthesisNot: negated twice 1; +} +.parenthesisNot(@value) when (not((not(@value)))) { + parenthesisNot: negated twice 2; +} +.parenthesisNot(@value) when ((not(not(@value)))) { + parenthesisNot: negated twice 3; +} +.parenthesisNot (...) when (default()) { + parenthesisNot: none matched; +} + +#parenthesisNot-true { + .parenthesisNot(true); +} +#parenthesisNot-false { + .parenthesisNot(false); +} + +.orderOfEvaluation(@a1, @a2, @a3) when ((@a1) and (@a2) or (@a3)) { + no-parenthesis: evaluated true 1a; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((@a3) or (@a1) and (@a2)) { + no-parenthesis: evaluated true 1b; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((@a1) and ((@a2) or (@a3))) { + no-parenthesis: evaluated true 1c; +} +.orderOfEvaluation(@a1, @a2, @a3) when (@a3), (@a1) and (@a2) { + no-parenthesis: evaluated true 1d; +} +.orderOfEvaluation(@a1, @a2, @a3) when (((@a3) or (@a1)) and (@a2)) { + no-parenthesis: evaluated true 1e; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((@a1) and (@a2) or not (@a3)) { + no-parenthesis: evaluated true 2a; +} +.orderOfEvaluation(@a1, @a2, @a3) when (not (@a3) or (@a1) and (@a2)) { + no-parenthesis: evaluated true 2b; +} +.orderOfEvaluation(@a1, @a2, @a3) when not (@a3), (@a1) and (@a2) { + no-parenthesis: evaluated true 2c; +} +.orderOfEvaluation(@a1, @a2, @a3) when (not (@a1) and (@a2) or (@a3)) { + no-parenthesis: evaluated true 3; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((((@a1) and (@a2) or (@a3)))) { + no-parenthesis: evaluated true 4; +} +.orderOfEvaluation(@a1, @a2, @a3) when (((@a1) and (@a2)) or (@a3)) { + with-parenthesis: evaluated true; +} +.orderOfEvaluation(...) when (default()) { + orderOfEvaluation: evaluated false; +} +#orderOfEvaluation-false-false-true { + .orderOfEvaluation(false, false, true); +} +#orderOfEvaluation-false-false-false { + .orderOfEvaluation(false, false, false); +} +#orderOfEvaluation-true-true-false { + .orderOfEvaluation(true, true, false); +} diff --git a/node_modules/less/test/less-bom/mixins-important.less b/node_modules/less/test/less-bom/mixins-important.less new file mode 100644 index 000000000..cc09bb65a --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-important.less @@ -0,0 +1,53 @@ +.submixin(@a) { + border-width: @a; +} +.mixin (9) { + border: 9 !important; +} +.mixin (@a: 0) { + border: @a; + boxer: @a; + .inner { + test: @a; + } + // comment + .submixin(@a); +} + +.class { + .mixin(1); + .mixin(2) !important; + .mixin(3); + .mixin(4) !important; + .mixin(5); + .mixin !important; + .mixin(9); +} +.size(@aaa: auto) { + .set-width(@aaa) { + width: @aaa; + } + .set-width(@aaa); +} +.when-calling-nested-issue-2394 { + .size() !important; +} +.when-calling-nested-with-param-issue-2394 { + .size(10px) !important; +} +.testMixin-2421 () { + .topCheck-2421 () { + .nestedCheck-2421() { + margin: 5px; + } + .nestedCheck-2421(); + } + .topCheck-2421(); +} +.class1-2421 { + .testMixin-2421() !important; +} +.class2-2421 { + .testMixin-2421(); +} + diff --git a/node_modules/less/test/less-bom/mixins-interpolated.less b/node_modules/less/test/less-bom/mixins-interpolated.less new file mode 100644 index 000000000..071550482 --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-interpolated.less @@ -0,0 +1,75 @@ + +@a0: 123; +@a1: foo; +@a2: ~".foo"; +@a4: ~"#foo"; + +.@{a0} { + a: 0; +} + +.@{a1} { + a: 1; +} + +@{a2} { + a: 2; +} + +#@{a1} { + a: 3; +} + +@{a4} { + a: 4; +} + +mi-test-a { + .123; + .foo; + #foo; +} + +.b .bb { + &.@{a1}-xxx .yyy-@{a1}@{a4} { + & @{a2}.bbb { + b: 1; + } + } +} + +mi-test-b { + .b.bb.foo-xxx.yyy-foo#foo.foo.bbb; +} + +@c1: @a1; +@c2: bar; +@c3: baz; + +#@{c1}-foo { + > .@{c2} { + .@{c3} { + c: c; + } + } +} + +mi-test-c { + &-1 {#foo-foo;} + &-2 {#foo-foo > .bar;} + &-3 {#foo-foo > .bar.baz;} +} + +.Person(@name, @gender_) { + .@{name} { + @gender: @gender_; + .sayGender() { + gender: @gender; + } + } +} + +mi-test-d { + .Person(person, "Male"); + .person.sayGender(); +} diff --git a/node_modules/less/test/less-bom/mixins-named-args.less b/node_modules/less/test/less-bom/mixins-named-args.less new file mode 100644 index 000000000..fb6ec9f35 --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-named-args.less @@ -0,0 +1,36 @@ +.mixin (@a: 1px, @b: 50%) { + width: (@a * 5); + height: (@b - 1%); + args: @arguments; +} +.mixin (@a: 1px, @b: 50%) when (@b > 75%){ + text-align: center; +} + +.named-arg { + color: blue; + .mixin(@b: 100%); +} + +.class { + @var: 20%; + .mixin(@b: @var); +} + +.all-args-wrong-args { + .mixin(@b: 10%, @a: 2px); +} + +.mixin2 (@a: 1px, @b: 50%, @c: 50) { + width: (@a * 5); + height: (@b - 1%); + color: (#000000 + @c); +} + +.named-args2 { + .mixin2(3px, @c: 100); +} + +.named-args3 { + .mixin2(@b: 30%, @c: #123456); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/mixins-nested.less b/node_modules/less/test/less-bom/mixins-nested.less new file mode 100644 index 000000000..d7ad6b22e --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-nested.less @@ -0,0 +1,22 @@ +.mix-inner (@var) { + border-width: @var; +} + +.mix (@a: 10) { + .inner { + height: (@a * 10); + + .innest { + width: @a; + .mix-inner((@a * 2)); + } + } +} + +.class { + .mix(30); +} + +.class2 { + .mix(60); +} diff --git a/node_modules/less/test/less-bom/mixins-pattern.less b/node_modules/less/test/less-bom/mixins-pattern.less new file mode 100644 index 000000000..4206056fe --- /dev/null +++ b/node_modules/less/test/less-bom/mixins-pattern.less @@ -0,0 +1,102 @@ +.mixin (...) { + variadic: true; +} +.mixin (@a...) { + named-variadic: true; +} +.mixin () { + zero: 0; +} +.mixin (@a: 1px) { + one: 1; +} +.mixin (@a) { + one-req: 1; +} +.mixin (@a: 1px, @b: 2px) { + two: 2; +} + +.mixin (@a, @b, @c) { + three-req: 3; +} + +.mixin (@a: 1px, @b: 2px, @c: 3px) { + three: 3; +} + +.zero { + .mixin(); +} + +.one { + .mixin(1); +} + +.two { + .mixin(1, 2); +} + +.three { + .mixin(1, 2, 3); +} + +// + +.mixout ('left') { + left: 1; +} + +.mixout ('right') { + right: 1; +} + +.left { + .mixout('left'); +} +.right { + .mixout('right'); +} + +// + +.border (@side, @width) { + color: black; + .border-side(@side, @width); +} +.border-side (left, @w) { + border-left: @w; +} +.border-side (right, @w) { + border-right: @w; +} + +.border-right { + .border(right, 4px); +} +.border-left { + .border(left, 4px); +} + +// + + +.border-radius (@r) { + both: (@r * 10); +} +.border-radius (@r, left) { + left: @r; +} +.border-radius (@r, right) { + right: @r; +} + +.only-right { + .border-radius(33, right); +} +.only-left { + .border-radius(33, left); +} +.left-right { + .border-radius(33); +} diff --git a/node_modules/less/test/less-bom/mixins.less b/node_modules/less/test/less-bom/mixins.less new file mode 100644 index 000000000..6e83fa9b9 --- /dev/null +++ b/node_modules/less/test/less-bom/mixins.less @@ -0,0 +1,145 @@ +.mixin { border: 1px solid black; } +.mixout { border-color: orange; } +.borders { border-style: dashed; } +.mixin > * { border: do not match me; } + +#namespace { + .borders { + border-style: dotted; + } + .biohazard { + content: "death"; + .man { + color: transparent; + } + } +} +#theme { + > .mixin { + background-color: grey; + } +} +#container { + color: black; + .mixin; + .mixout; + #theme > .mixin; +} + +#header { + .milk { + color: white; + .mixin; + #theme > .mixin; + } + #cookie { + .chips { + #namespace .borders; + .calories { + #container; + } + } + .borders; + } +} +.secure-zone { #namespace .biohazard .man; } +.direct { + #namespace > .borders; +} + +.bo, .bar { + width: 100%; +} +.bo { + border: 1px; +} +.ar.bo.ca { + color: black; +} +.jo.ki { + background: none; +} +.amp { + &.support { + color: orange; + .higher { + top: 0px; + } + &.deeper { + height: auto; + } + } +} +.extended { + .bo; + .jo.ki; + .amp.support; + .amp.support.higher; + .amp.support.deeper; +} +.do .re .mi .fa { + .sol .la { + .si { + color: cyan; + } + } +} +.mutli-selector-parents { + .do.re.mi.fa.sol.la.si; +} +.foo .bar { + .bar; +} +.has_parents() { + & .underParents { + color: red; + } +} +.has_parents(); +.parent { + .has_parents(); +} +.margin_between(@above, @below) { + * + & { margin-top: @above; } + legend + & { margin-top: 0; } + & + * { margin-top: @below; } +} +h1 { .margin_between(25px, 10px); } +h2 { .margin_between(20px, 8px); } +h3 { .margin_between(15px, 5px); } + +.mixin_def(@url, @position){ + background-image: @url; + background-position: @position; +} +.error{ + @s: "/"; + .mixin_def( "@{s}a.png", center center); +} +.recursion() { + color: black; +} +.test-rec { + .recursion { + .recursion(); + } +} +.paddingFloat(@padding) { padding-left: @padding; } + +.button { + .paddingFloat(((10px + 12) * 2)); + + &.large { .paddingFloat(((10em * 2) * 2)); } +} +.clearfix() { + // ... +} +.clearfix { + .clearfix(); +} +.clearfix { + .clearfix(); +} +.foo { + .clearfix(); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/modifyVars/extended.json b/node_modules/less/test/less-bom/modifyVars/extended.json new file mode 100644 index 000000000..6bd2a4845 --- /dev/null +++ b/node_modules/less/test/less-bom/modifyVars/extended.json @@ -0,0 +1,5 @@ +{ + "the-border": "1px", + "base-color": "#111", + "red": "#842210" +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/modifyVars/extended.less b/node_modules/less/test/less-bom/modifyVars/extended.less new file mode 100644 index 000000000..3b4b53183 --- /dev/null +++ b/node_modules/less/test/less-bom/modifyVars/extended.less @@ -0,0 +1,11 @@ +#header { + color: (@base-color * 3); + border-left: @the-border; + border-right: (@the-border * 2); +} +#footer { + color: (@base-color + #003300); + border-color: @red; +} +@red: blue; // var is overridden by the modifyVars +//@base-color: green; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/nested-gradient-with-svg-gradient/mixin-consumer.less b/node_modules/less/test/less-bom/nested-gradient-with-svg-gradient/mixin-consumer.less new file mode 100644 index 000000000..e12589229 --- /dev/null +++ b/node_modules/less/test/less-bom/nested-gradient-with-svg-gradient/mixin-consumer.less @@ -0,0 +1,5 @@ +@import "svg-gradient-mixin.less"; + +.gray-gradient { + .gradient-mixin(#999); +} diff --git a/node_modules/less/test/less-bom/nested-gradient-with-svg-gradient/svg-gradient-mixin.less b/node_modules/less/test/less-bom/nested-gradient-with-svg-gradient/svg-gradient-mixin.less new file mode 100644 index 000000000..93617aef6 --- /dev/null +++ b/node_modules/less/test/less-bom/nested-gradient-with-svg-gradient/svg-gradient-mixin.less @@ -0,0 +1,15 @@ +.gradient-mixin(@color) { + background: svg-gradient(to bottom, + fade(@color, 0%) 0%, + fade(@color, 5%) 60%, + fade(@color, 10%) 70%, + fade(@color, 15%) 73%, + fade(@color, 20%) 75%, + fade(@color, 25%) 80%, + fade(@color, 30%) 85%, + fade(@color, 35%) 88%, + fade(@color, 40%) 90%, + fade(@color, 45%) 95%, + fade(@color, 50%) 100% + ); +} diff --git a/node_modules/less/test/less-bom/no-js-errors/no-js-errors.less b/node_modules/less/test/less-bom/no-js-errors/no-js-errors.less new file mode 100644 index 000000000..0f4dd21a4 --- /dev/null +++ b/node_modules/less/test/less-bom/no-js-errors/no-js-errors.less @@ -0,0 +1,3 @@ +.a { + a: `1 + 1`; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/no-js-errors/no-js-errors.txt b/node_modules/less/test/less-bom/no-js-errors/no-js-errors.txt new file mode 100644 index 000000000..d81dd2bdb --- /dev/null +++ b/node_modules/less/test/less-bom/no-js-errors/no-js-errors.txt @@ -0,0 +1,4 @@ +SyntaxError: You are using JavaScript, which has been disabled. in {path}no-js-errors.less on line 2, column 6: +1 .a { +2 a: `1 + 1`; +3 } diff --git a/node_modules/less/test/less-bom/no-output.less b/node_modules/less/test/less-bom/no-output.less new file mode 100644 index 000000000..22d0daf36 --- /dev/null +++ b/node_modules/less/test/less-bom/no-output.less @@ -0,0 +1,2 @@ +.mixin() { +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/no-strict-math/mixins-guards.less b/node_modules/less/test/less-bom/no-strict-math/mixins-guards.less new file mode 100644 index 000000000..88034a225 --- /dev/null +++ b/node_modules/less/test/less-bom/no-strict-math/mixins-guards.less @@ -0,0 +1,25 @@ +// https://github.com/less/less.js/issues/2798 +.test-2798 when ((8+4) < 13) { + regression: fixed; +} +.test-2798 when ((8+6) < 13) { + regression: should not be visible; +} +.conditions-parser-1 when (8+4 < 13) { + only-atomic: ok; +} +.conditions-parser-1 when (8+6 < 13) { + only-atomic: should not be visible; +} +.conditions-parser-2 when (8+(5-1) < 13) { + only-atomic-with-nested-parenthesis: ok; +} +.conditions-parser-2 when (8+(15-1) < 13) { + only-atomic-with-nested-parenthesis: should not be visible; +} +.conditions-parser-3 when (8 < (13+1)) { + only-atomic-nested-parenthesis-on-right: ok; +} +.conditions-parser-3 when (8 < (3+1)) { + only-atomic-nested-parenthesis-on-right: should not be visible; +} diff --git a/node_modules/less/test/less-bom/no-strict-math/no-sm-operations.less b/node_modules/less/test/less-bom/no-strict-math/no-sm-operations.less new file mode 100644 index 000000000..e17f2f458 --- /dev/null +++ b/node_modules/less/test/less-bom/no-strict-math/no-sm-operations.less @@ -0,0 +1,13 @@ +.named-colors-in-expressions { + color-0: 0 -red; + color-1: 1 - red; + color-2: red * 2; + color-3: 2 * red; + @3: -red; + &-bar@{3} {x: y} + @color: red; + &-bar@{color} {a: a}; + background-color: blue-2; + color: green-black; + animation: blue-change 5s infinite; +} diff --git a/node_modules/less/test/less-bom/operations.less b/node_modules/less/test/less-bom/operations.less new file mode 100644 index 000000000..15b82e4d1 --- /dev/null +++ b/node_modules/less/test/less-bom/operations.less @@ -0,0 +1,63 @@ +#operations { + color: (#110000 + #000011 + #001100); // #111111 + color-2: (yellow - #070707); + height: (10px / 2px + 6px - 1px * 2); // 9px + width: (2 * 4 - 5em); // 3em + .spacing { + height: (10px / 2px+6px-1px*2); + width: (2 * 4-5em); + } + subtraction: (20 - 10 - 5 - 5); // 0 + division: (20 / 5 / 4); // 1 +} + +@x: 4; +@y: 12em; + +.with-variables { + height: (@x + @y); // 16em + width: (12 + @y); // 24em + size: (5cm - @x); // 1cm +} + +.with-functions { + color: (rgb(200, 200, 200) / 2); + color: (2 * hsl(0, 50%, 50%)); + color: (rgb(10, 10, 10) + hsl(0, 50%, 50%)); +} + +@z: -2; + +.negative { + height: (2px + @z); // 0px + width: (2px - @z); // 4px +} + +.shorthands { + padding: -1px 2px 0 -4px; // +} + +.rem-dimensions { + font-size: (20rem / 5 + 1.5rem); // 5.5rem +} + +.colors { + color: #123; // #112233 + border-color: (#234 + #111111); // #334455 + background-color: (#222222 - #fff); // #000000 + .other { + color: (2 * #111); // #222222 + border-color: (#333333 / 3 + #111); // #222222 + } +} + +.negations { + @var: 4px; + variable: (-@var); // 4 + variable1: (-@var + @var); // 0 + variable2: (@var + -@var); // 0 + variable3: (@var - -@var); // 8 + variable4: (-@var - -@var); // 0 + paren: (-(@var)); // -4px + paren2: (-(2 + 2) * -@var); // 16 +} diff --git a/node_modules/less/test/less-bom/parens.less b/node_modules/less/test/less-bom/parens.less new file mode 100644 index 000000000..f91b1720a --- /dev/null +++ b/node_modules/less/test/less-bom/parens.less @@ -0,0 +1,45 @@ +.parens { + @var: 1px; + border: (@var * 2) solid black; + margin: (@var * 1) (@var + 2) (4 * 4) 3; + width: (6 * 6); + padding: 2px (6 * 6px); +} + +.more-parens { + @var: (2 * 2); + padding: (2 * @var) 4 4 (@var * 1px); + width-all: ((@var * @var) * 6); + width-first: ((@var * @var)) * 6; + width-keep: (@var * @var) * 6; + height-keep: (7 * 7) + (8 * 8); + height-all: ((7 * 7) + (8 * 8)); + height-parts: ((7 * 7)) + ((8 * 8)); + margin-keep: (4 * (5 + 5) / 2) - (@var * 2); + margin-parts: ((4 * (5 + 5) / 2)) - ((@var * 2)); + margin-all: ((4 * (5 + 5) / 2) + (-(@var * 2))); + border-radius-keep: 4px * (1 + 1) / @var + 3px; + border-radius-parts: ((4px * (1 + 1))) / ((@var + 3px)); + border-radius-all: (4px * (1 + 1) / @var + 3px); + //margin: (6 * 6)px; +} + +.negative { + @var: 1; + neg-var: -@var; // -1 ? + neg-var-paren: -(@var); // -(1) ? +} + +.nested-parens { + width: 2 * (4 * (2 + (1 + 6))) - 1; + height: ((2 + 3) * (2 + 3) / (9 - 4)) + 1; +} + +.mixed-units { + margin: 2px 4em 1 5pc; + padding: (2px + 4px) 1em 2px 2; +} + +.test-false-negatives { + a: ~"("; +} diff --git a/node_modules/less/test/less-bom/plugin.less b/node_modules/less/test/less-bom/plugin.less new file mode 100644 index 000000000..bda5e874b --- /dev/null +++ b/node_modules/less/test/less-bom/plugin.less @@ -0,0 +1,93 @@ +// importing plugin globally +@plugin "./plugin/plugin-global"; + +// transitively include plugins from importing another sheet +@import "./plugin/plugin-transitive"; + + +// `test-global` function should be reachable +// `test-local` function should not be reachable +// `test-shadow` function should return global version +.class { + trans : test-transitive(); + global : test-global(); + local : test-local(); + shadow : test-shadow(); + + // `test-global` function should propagate and be reachable + // `test-local` function should be reachable + // `test-shadow` function should return local version, shadowing global version + .local { + @plugin "./plugin/plugin-local"; + global : test-global(); + local : test-local(); + shadow : test-shadow(); + } +} + +// calling a mixin or detached ruleset should not bubble local plugins +// imported inside either into the parent scope. +.mixin() { + @plugin "./plugin/plugin-local"; + mixin-local : test-local(); + mixin-global : test-global(); + mixin-shadow : test-shadow(); +} +@ruleset : { + @plugin "./plugin/plugin-local"; + ruleset-local : test-local(); + ruleset-global : test-global(); + ruleset-shadow : test-shadow(); +}; +#ns { + @plugin "./plugin/plugin-local"; + .mixin() { + ns-mixin-global : test-global(); + ns-mixin-local : test-local(); + ns-mixin-shadow : test-shadow(); + } +} +.class { + #ns > .mixin(); + .mixin(); + @ruleset(); + class-local : test-local(); +} + + +// `test-global` function should propagate into directive scope +@media screen { + .test { + result : test-global(); + } +} +@font-face { + result : test-global(); +} + +// `test-global` function should propagate into nested directive scopes +@media screen and (min-width:100px) { + @media (max-width:400px) { + .test { + result : test-global(); + } + } +} + +.test { + @media screen { + @plugin "./plugin/plugin-local"; + result : test-local(); + } +} + +@plugin "./plugin/plugin-tree-nodes"; +@ruleset2: test-detached-ruleset(); +.root { + @ruleset2(); +} + +test-directive("@charset"; '"utf-8"'); +test-directive("@arbitrary"; "value after ()"); + + diff --git a/node_modules/less/test/less-bom/plugin/plugin-global.js b/node_modules/less/test/less-bom/plugin/plugin-global.js new file mode 100644 index 000000000..adc828c49 --- /dev/null +++ b/node_modules/less/test/less-bom/plugin/plugin-global.js @@ -0,0 +1,9 @@ + +functions.addMultiple({ + "test-shadow" : function() { + return new tree.Anonymous( "global" ); + }, + "test-global" : function() { + return new tree.Anonymous( "global" ); + } +}); diff --git a/node_modules/less/test/less-bom/plugin/plugin-local.js b/node_modules/less/test/less-bom/plugin/plugin-local.js new file mode 100644 index 000000000..b54ca97a8 --- /dev/null +++ b/node_modules/less/test/less-bom/plugin/plugin-local.js @@ -0,0 +1,8 @@ +functions.addMultiple({ + "test-shadow" : function() { + return new tree.Anonymous( "local" ); + }, + "test-local" : function() { + return new tree.Anonymous( "local" ); + } +}); diff --git a/node_modules/less/test/less-bom/plugin/plugin-transitive.js b/node_modules/less/test/less-bom/plugin/plugin-transitive.js new file mode 100644 index 000000000..1da1864c4 --- /dev/null +++ b/node_modules/less/test/less-bom/plugin/plugin-transitive.js @@ -0,0 +1,5 @@ +functions.addMultiple({ + "test-transitive" : function() { + return new tree.Anonymous( "transitive" ); + } +}); diff --git a/node_modules/less/test/less-bom/plugin/plugin-transitive.less b/node_modules/less/test/less-bom/plugin/plugin-transitive.less new file mode 100644 index 000000000..f50ae743e --- /dev/null +++ b/node_modules/less/test/less-bom/plugin/plugin-transitive.less @@ -0,0 +1,5 @@ +@plugin "plugin-transitive"; + +.other { + trans : test-transitive(); +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/plugin/plugin-tree-nodes.js b/node_modules/less/test/less-bom/plugin/plugin-tree-nodes.js new file mode 100644 index 000000000..442352d7f --- /dev/null +++ b/node_modules/less/test/less-bom/plugin/plugin-tree-nodes.js @@ -0,0 +1,80 @@ +functions.addMultiple({ + + "test-comment": function() { + return new tree.Combinator(' '); + }, + "test-directive": function(arg1, arg2) { + return new tree.Directive(arg1.value, new tree.Anonymous(arg2.value)); + }, + "test-extend": function() { + //TODO + }, + "test-import": function() { + //TODO + }, + "test-media": function() { + //TODO + }, + "test-mixin-call": function() { + //TODO + }, + "test-mixin-definition": function() { + //TODO + }, + "test-ruleset-call": function() { + return new tree.Combinator(' '); + }, + // Functions must return something. Must 'return true' if they produce no output. + "test-undefined": function() { }, + + // These cause root errors + "test-alpha": function() { + return new tree.Alpha(30); + }, + "test-assignment": function() { + return new tree.Assignment("bird", "robin"); + }, + "test-attribute": function() { + return new tree.Attribute("foo", "=", "bar"); + }, + "test-call": function() { + return new tree.Call("foo"); + }, + "test-color": function() { + return new tree.Color([50, 50, 50]); + }, + "test-condition": function() { + return new tree.Condition('<', new tree.Value([0]), new tree.Value([1])); + }, + "test-detached-ruleset" : function() { + var rule = new tree.Rule('prop', new tree.Anonymous('value')); + return new tree.DetachedRuleset(new tree.Ruleset("", [ rule ])); + }, + "test-dimension": function() { + return new tree.Dimension(1, 'px'); + }, + "test-element": function() { + return new tree.Element('+', 'a'); + }, + "test-expression": function() { + return new tree.Expression([1, 2, 3]); + }, + "test-keyword": function() { + return new tree.Keyword('foo'); + }, + "test-operation": function() { + return new tree.Operation('+', [1, 2]); + }, + "test-quoted": function() { + return new tree.Quoted('"', 'foo'); + }, + "test-selector": function() { + return new tree.Selector([new tree.Element('a')]); + }, + "test-url": function() { + return new tree.URL('http://google.com'); + }, + "test-value": function() { + return new tree.Value([1]); + } +}); \ No newline at end of file diff --git a/node_modules/less/test/less-bom/postProcessorPlugin/postProcessor.less b/node_modules/less/test/less-bom/postProcessorPlugin/postProcessor.less new file mode 100644 index 000000000..a76f90797 --- /dev/null +++ b/node_modules/less/test/less-bom/postProcessorPlugin/postProcessor.less @@ -0,0 +1,4 @@ +@color: white; +.test { + color: @color; +} diff --git a/node_modules/less/test/less-bom/preProcessorPlugin/preProcessor.less b/node_modules/less/test/less-bom/preProcessorPlugin/preProcessor.less new file mode 100644 index 000000000..9fe8f012c --- /dev/null +++ b/node_modules/less/test/less-bom/preProcessorPlugin/preProcessor.less @@ -0,0 +1,3 @@ +.test { + color: @color; +} diff --git a/node_modules/less/test/less-bom/property-name-interp.less b/node_modules/less/test/less-bom/property-name-interp.less new file mode 100644 index 000000000..4a4208323 --- /dev/null +++ b/node_modules/less/test/less-bom/property-name-interp.less @@ -0,0 +1,56 @@ + +pi-test { + @prefix: ufo-; + @a: border; + @bb: top; + @c_c: left; + @d-d4: radius; + @-: -; + + @var: ~'@not-variable'; + + @{a}: 0; + @{var}: @var; + @{prefix}width: 50%; + *-z-@{a} :1px dashed blue; + -www-@{a}-@{bb}: 2px; + @{d-d4}-is-not-a-@{a}:true; + @{a}-@{bb}-@{c_c}-@{d-d4} : 2em; + @{a}@{-}@{bb}@{-}red@{-}@{d-d4}-: 3pt; + + .mixin(mixer); + .merge(ish, base); +} + +@global: global; + +.mixin(@arg) { + @local: local; + @{global}-@{local}-@{arg}-property: strong; +} + +.merge(@p, @v) { + &-merge { + @prefix: pre; + @suffix: ish; + @{prefix}-property-ish+ :high; + pre-property-@{suffix} +: middle; + @{prefix}-property-@{suffix}+: low; + @{prefix}-property-@{p} + : @v; + + @subterfuge: ~'+'; + pre-property-ish@{subterfuge}: nice try dude; + } +} + +pi-indirect-vars { + @{p}: @p; + @p: @@a; + @a: b; + @b: auto; +} + +pi-complex-values { + @{p}@{p}: none; + @p: (1 + 2px) fadeout(#ff0, 50%), pi() /* foo */; +} diff --git a/node_modules/less/test/less-bom/rulesets.less b/node_modules/less/test/less-bom/rulesets.less new file mode 100644 index 000000000..619951100 --- /dev/null +++ b/node_modules/less/test/less-bom/rulesets.less @@ -0,0 +1,30 @@ +#first > .one { + > #second .two > #deux { + width: 50%; + #third { + &:focus { + color: black; + #fifth { + > #sixth { + .seventh #eighth { + + #ninth { + color: purple; + } + } + } + } + } + height: 100%; + } + #fourth, #five, #six { + color: #110000; + .seven, .eight > #nine { + border: 1px solid black; + } + #ten { + color: red; + } + } + } + font-size: 2em; +} diff --git a/node_modules/less/test/less-bom/scope.less b/node_modules/less/test/less-bom/scope.less new file mode 100644 index 000000000..d359b282b --- /dev/null +++ b/node_modules/less/test/less-bom/scope.less @@ -0,0 +1,104 @@ +@x: red; +@x: blue; +@z: transparent; +@mix: none; + +.mixin { + @mix: #989; +} +@mix: blue; +.tiny-scope { + color: @mix; // #989 + .mixin; +} + +.scope1 { + @y: orange; + @z: black; + color: @x; // blue + border-color: @z; // black + .hidden { + @x: #131313; + } + .scope2 { + @y: red; + color: @x; // blue + .scope3 { + @local: white; + color: @y; // red + border-color: @z; // black + background-color: @local; // white + } + } +} + +#namespace { + .scoped_mixin() { + @local-will-be-made-global: green; + .scope { + scoped-val: @local-will-be-made-global; + } + } +} + +#namespace > .scoped_mixin(); + +.setHeight(@h) { @height: 1024px; } +.useHeightInMixinCall(@h) { .useHeightInMixinCall { mixin-height: @h; } } +@mainHeight: 50%; +.setHeight(@mainHeight); +.heightIsSet { height: @height; } +.useHeightInMixinCall(@height); + +.importRuleset() { + .imported { + exists: true; + } +} +.importRuleset(); +.testImported { + .imported; +} + +@parameterDefault: 'top level'; +@anotherVariable: 'top level'; +//mixin uses top-level variables +.mixinNoParam(@parameter: @parameterDefault) when (@parameter = 'top level') { + default: @parameter; + scope: @anotherVariable; + sub-scope-only: @subScopeOnly; +} + +#allAreUsedHere { + //redefine top-level variables in different scope + @parameterDefault: 'inside'; + @anotherVariable: 'inside'; + @subScopeOnly: 'inside'; + //use the mixin + .mixinNoParam(); +} +#parentSelectorScope { + @col: white; + & { + @col: black; + } + prop: @col; + & { + @col: black; + } +} +.test-empty-mixin() { +} +#parentSelectorScopeMixins { + & { + .test-empty-mixin() { + should: never seee 1; + } + } + .test-empty-mixin(); + & { + .test-empty-mixin() { + should: never seee 2; + } + } +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/selectors.less b/node_modules/less/test/less-bom/selectors.less new file mode 100644 index 000000000..c10a1598d --- /dev/null +++ b/node_modules/less/test/less-bom/selectors.less @@ -0,0 +1,184 @@ +h1, h2, h3 { + a, p { + &:hover { + color: red; + } + } +} + +#all { color: blue; } +#the { color: blue; } +#same { color: blue; } + +ul, li, div, q, blockquote, textarea { + margin: 0; +} + +td { + margin: 0; + padding: 0; +} + +td, input { + line-height: 1em; +} + +a { + color: red; + + &:hover { color: blue; } + + div & { color: green; } + + p & span { color: yellow; } +} + +.foo { + .bar, .baz { + & .qux { + display: block; + } + .qux & { + display: inline; + } + .qux& { + display: inline-block; + } + .qux & .biz { + display: none; + } + } +} + +.b { + &.c { + .a& { + color: red; + } + } +} + +.b { + .c & { + &.a { + color: red; + } + } +} + +.p { + .foo &.bar { + color: red; + } +} + +.p { + .foo&.bar { + color: red; + } +} + +.foo { + .foo + & { + background: amber; + } + & + & { + background: amber; + } +} + +.foo, .bar { + & + & { + background: amber; + } +} + +.foo, .bar { + a, b { + & > & { + background: amber; + } + } +} + +.other ::fnord { color: red } +.other::fnord { color: red } +.other { + ::bnord {color: red } + &::bnord {color: red } +} +// selector interpolation +@theme: blood; +@selector: ~".@{theme}"; +@{selector} { + color:red; +} +@{selector}red { + color: green; +} +.red { + #@{theme}.@{theme}&.black:@{theme} { + color:black; + } +} +@num: 3; +:nth-child(@{num}) { + selector: interpolated; +} +.test { + &:nth-child(@{num}) { + selector: interpolated; + } + &:nth-child(odd):not(:nth-child(3)) { + color: #ff0000; + } + } +[prop], +[prop=10%], +[prop="value@{num}"], +[prop*="val@{num}"], +[|prop~="val@{num}"], +[*|prop$="val@{num}"], +[ns|prop^="val@{num}"], +[@{num}^="val@{num}"], +[@{num}=@{num}], +[@{num}] { + attributes: yes; +} + +/* +Large comment means chunk will be emitted after } which means chunk will begin with whitespace... +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +*/ +@{selector} { + color: red; +} +.only-nested { + .level2 { + .foo:not(.tst&:hover) { + test: only-nested; + } + } +} +.nestend-and-non-nested { + .foo&:not(.tst&:hover) { + test: nestend-and-non-nested; + } +} +.selector:not(&:hover) { + test: global scope; +} +// https://github.com/less/less.js/issues/2206 +.extend-this { + content: '\2661'; +} +.first-level { + .second-level { + .active&:extend(.extend-this) { } + &.active2:extend(.extend-this) { } + } +} diff --git a/node_modules/less/test/less-bom/sourcemaps-empty/empty.less b/node_modules/less/test/less-bom/sourcemaps-empty/empty.less new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/node_modules/less/test/less-bom/sourcemaps-empty/empty.less @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/node_modules/less/test/less-bom/sourcemaps-empty/var-defs.less b/node_modules/less/test/less-bom/sourcemaps-empty/var-defs.less new file mode 100644 index 000000000..9c5269de6 --- /dev/null +++ b/node_modules/less/test/less-bom/sourcemaps-empty/var-defs.less @@ -0,0 +1 @@ +@test-var: 'something'; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/sourcemaps/basic.json b/node_modules/less/test/less-bom/sourcemaps/basic.json new file mode 100644 index 000000000..2bccdc51f --- /dev/null +++ b/node_modules/less/test/less-bom/sourcemaps/basic.json @@ -0,0 +1,3 @@ +{ + "my-color": "red" +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/sourcemaps/basic.less b/node_modules/less/test/less-bom/sourcemaps/basic.less new file mode 100644 index 000000000..33af04b6e --- /dev/null +++ b/node_modules/less/test/less-bom/sourcemaps/basic.less @@ -0,0 +1,27 @@ +@var: black; + +.a() { + color: red; +} + +.b { + color: green; + .a(); + color: blue; + background: @var; +} + +.a, .b { + background: green; + .c, .d { + background: gray; + & + & { + color: red; + } + } +} + +.extend:extend(.a all) { + color: pink; +} +@import (inline) "imported.css"; \ No newline at end of file diff --git a/node_modules/less/test/less-bom/sourcemaps/imported.css b/node_modules/less/test/less-bom/sourcemaps/imported.css new file mode 100644 index 000000000..dbbf3cf27 --- /dev/null +++ b/node_modules/less/test/less-bom/sourcemaps/imported.css @@ -0,0 +1,7 @@ +/*comments*/ +.unused-css { + color: white; +} +.imported { + color: black; +} \ No newline at end of file diff --git a/node_modules/less/test/less-bom/static-urls/urls.less b/node_modules/less/test/less-bom/static-urls/urls.less new file mode 100644 index 000000000..79b5df376 --- /dev/null +++ b/node_modules/less/test/less-bom/static-urls/urls.less @@ -0,0 +1,33 @@ +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} + +@import "../import/import-and-relative-paths-test"; diff --git a/node_modules/less/test/less-bom/strict-units/strict-units.less b/node_modules/less/test/less-bom/strict-units/strict-units.less new file mode 100644 index 000000000..6e38d2339 --- /dev/null +++ b/node_modules/less/test/less-bom/strict-units/strict-units.less @@ -0,0 +1,4 @@ +.units { + cancels-to-nothing: (1px / 1px); + cancels: ((((10px / 5em) / 1px) * 3em) * 1px); +} diff --git a/node_modules/less/test/less-bom/strings.less b/node_modules/less/test/less-bom/strings.less new file mode 100644 index 000000000..e896ddd74 --- /dev/null +++ b/node_modules/less/test/less-bom/strings.less @@ -0,0 +1,73 @@ +#strings { + background-image: url("http://son-of-a-banana.com"); + quotes: "~" "~"; + content: "#*%:&^,)!.(~*})"; + empty: ""; + brackets: "{" "}"; + escapes: "\"hello\" \\world"; + escapes2: "\"llo"; +} +#comments { + content: "/* hello */ // not-so-secret"; +} +#single-quote { + quotes: "'" "'"; + content: '""#!&""'; + empty: ''; + semi-colon: ';'; +} +#escaped { + filter: ~"DX.Transform.MS.BS.filter(opacity=50)"; +} +#one-line { image: url(http://tooks.com) } +#crazy { image: url(http://), "}", url("http://}") } +#interpolation { + @var: '/dev'; + url: "http://lesscss.org@{var}/image.jpg"; + + @var2: 256; + url2: "http://lesscss.org/image-@{var2}.jpg"; + + @var3: #456; + url3: "http://lesscss.org@{var3}"; + + @var4: hello; + url4: "http://lesscss.org/@{var4}"; + + @var5: 54.4px; + url5: "http://lesscss.org/@{var5}"; +} + +// multiple calls with string interpolation + +.mix-mul (@a: green) { + color: ~"@{a}"; +} +.mix-mul-class { + .mix-mul(blue); + .mix-mul(red); + .mix-mul(black); + .mix-mul(orange); +} + +@test: Arial, Verdana, San-Serif; +.watermark { + @family: ~"Univers, @{test}"; + family: @family; +} +#iterated-interpolation { + @box-small: 10px; + @box-large: 100px; + + .mixin { // both ruleset and mixin + width: ~"@{box-@{suffix}}"; + weird: ~"@{box}-@{suffix}}"; + width-str: "@{box-@{suffix}}"; + weird-str: "@{box}-@{suffix}}"; + @box: ~"@{box"; + @suffix: large; + } + .interpolation-mixin { + .mixin(); //call the above as mixin + } +} diff --git a/node_modules/less/test/less-bom/url-args/urls.less b/node_modules/less/test/less-bom/url-args/urls.less new file mode 100644 index 000000000..e8feb9ed6 --- /dev/null +++ b/node_modules/less/test/less-bom/url-args/urls.less @@ -0,0 +1,63 @@ +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; + background: url("img.jpg") center / 100px; + background: #fff url(image.png) center / 1px 100px repeat-x scroll content-box padding-box; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); + background-image: url("http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700"); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} + +@import "../import/imports/font"; + +#data-uri { + uri: data-uri('image/jpeg;base64', '../../data/image.jpg'); +} + +#data-uri-guess { + uri: data-uri('../../data/image.jpg'); +} + +#data-uri-ascii { + uri-1: data-uri('text/html', '../../data/page.html'); + uri-2: data-uri('../../data/page.html'); +} + +#svg-functions { + background-image: svg-gradient(to bottom, black, white); + background-image: svg-gradient(to bottom, black, orange 3%, white); + @green_5: green 5%; + @orange_percentage: 3%; + @orange_color: orange; + background-image: svg-gradient(to bottom, (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%); +} + +#data-uri-with-spaces { + background-image: url( data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url( ' data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9=='); +} diff --git a/node_modules/less/test/less-bom/urls.less b/node_modules/less/test/less-bom/urls.less new file mode 100644 index 000000000..36f892672 --- /dev/null +++ b/node_modules/less/test/less-bom/urls.less @@ -0,0 +1,94 @@ +@import "nested-gradient-with-svg-gradient/mixin-consumer.less"; + +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); + not-a-comment: url(//z); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; + background: url("img.jpg") center / 100px; + background: #fff url(image.png) center / 1px 100px repeat-x scroll content-box padding-box; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); + background-image: url("http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700"); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} + +@import "import/import-and-relative-paths-test"; + +#relative-url-import { + .unquoted-relative-path-bg; + .quoted-relative-path-border-image; +} + +#data-uri { + uri: data-uri('image/jpeg;base64', '../data/image.jpg'); + @var: replace('../data/replace.jpg', "replace", "image"); + background-image: data-uri(@var), data-uri(replace('../data/image.filext', "filext", "jpg")); + + uri-fragment: data-uri('image/jpeg;base64', '../data/image.jpg#fragment'); +} + +#data-uri-guess { + uri: data-uri('../data/image.jpg'); +} + +#data-uri-ascii { + uri-1: data-uri('text/html', '../data/page.html'); + uri-2: data-uri('../data/page.html'); +} + +#file-functions { + uri: data-uri('../data/data-uri-fail.png'); + svg-not-base-64: data-uri('../data/image.svg'); + size: image-size('../data/data-uri-fail.png'); + width: image-width('../data/data-uri-fail.png'); + height: image-height('../data/data-uri-fail.png'); +} +.add_an_import(@file_to_import) { +@import "@{file_to_import}"; +} + +.add_an_import("file.css"); + +#svg-functions { + background-image: svg-gradient(to bottom, black, white); + background-image: svg-gradient(to bottom, black, orange 3%, white); + @green_5: green 5%; + @orange_percentage: 3%; + @orange_color: orange; + background-image: svg-gradient(to bottom, (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%); +} +//it should work also inside @font-face #2035 +@font-face { + font-family: 'MyWebFont'; + src: url(webfont.eot); + src+: url('webfont.eot?#iefix'); + src+_: format('embedded-opentype'); + src+: url('webfont.woff') format('woff'); + src+: format('truetype'); + src+_: url('webfont.ttf'); + src+: url('webfont.svg#svgFontName') format('svg'); +} diff --git a/node_modules/less/test/less-bom/variables-in-at-rules.less b/node_modules/less/test/less-bom/variables-in-at-rules.less new file mode 100644 index 000000000..bcb2533cb --- /dev/null +++ b/node_modules/less/test/less-bom/variables-in-at-rules.less @@ -0,0 +1,20 @@ + +@Eight: 8; +@charset "UTF-@{Eight}"; + +@ns: less; +@namespace @ns "http://lesscss.org"; + +@name: enlarger; +@keyframes @name { + from {font-size: 12px;} + to {font-size: 15px;} +} + +.m(reducer); +.m(@name) { + @-webkit-keyframes @name { + from {font-size: 13px;} + to {font-size: 10px;} + } +} diff --git a/node_modules/less/test/less-bom/variables.less b/node_modules/less/test/less-bom/variables.less new file mode 100644 index 000000000..6e34b85e6 --- /dev/null +++ b/node_modules/less/test/less-bom/variables.less @@ -0,0 +1,119 @@ +@a: 2; +@x: (@a * @a); +@y: (@x + 1); +@z: (@x * 2 + @y); +@var: -1; + +.variables { + width: (@z + 1cm); // 14cm +} + +@b: @a * 10; +@c: #888; + +@fonts: "Trebuchet MS", Verdana, sans-serif; +@f: @fonts; + +@quotes: "~" "~"; +@q: @quotes; +@onePixel: 1px; + +.variables { + height: (@b + @x + 0px); // 24px + color: @c; + font-family: @f; + quotes: @q; +} + +.redef { + @var: 0; + .inition { + @var: 4; + @var: 2; + three: @var; + @var: 3; + } + zero: @var; +} + +@important-var: @c !important; +@important-var-two: @a !important; +.values { + minus-one: @var; + @a: 'Trebuchet'; + @multi: 'A', B, C; + font-family: @a, @a, @a; + color: @c !important; + same-color: @important-var; + same-again: @important-var !important; + multi-important: @important-var @important-var, @important-var-two; + multi: something @multi, @a; +} + +.variable-names { + .quoted { + @var: 'hello'; + @name: 'var'; + name: @@name; + } + + .unquoted { + @var: 'hello'; + @name: var; + name: @@name; + } + + .color-keyword { + @red: 'hello'; + @name: red; + name: @@name; + } +} + +.alpha { + @var: 42; + filter: alpha(opacity=@var); +} + +.polluteMixin() { + @a: 'pollution'; +} +.testPollution { + @a: 'no-pollution'; + a: @a; + .polluteMixin(); + a: @a; +} + +.units { + width: @onePixel; + same-unit-as-previously: (@onePixel / @onePixel); + square-pixel-divided: (@onePixel * @onePixel / @onePixel); + odd-unit: unit((@onePixel * 4em / 2cm)); + percentage: (10 * 50%); + pixels: (50px * 10); + conversion-metric-a: (20mm + 1cm); + conversion-metric-b: (1cm + 20mm); + conversion-imperial: (1in + 72pt + 6pc); + custom-unit: (42octocats * 10); + custom-unit-cancelling: (8cats * 9dogs / 4cats); + mix-units: (1px + 1em); + invalid-units: (1px * 1px); + .fallback { + @px: 14px; + @em: 1.4em; + @cm: 10cm; + div-px-1: (@px / @em); + div-px-2: ((@px / @em) / @cm); + sub-px-1: (@px - @em); + sub-cm-1: (@cm - (@px - @em)); + mul-px-1: (@px * @em); + mul-em-1: (@em * @px); + mul-em-2: ((@em * @px) * @cm); + mul-cm-1: (@cm * (@em * @px)); + add-px-1: (@px + @em); + add-px-2: ((@px + @em) + @cm); + mul-px-2: ((1 * @px) * @cm); + mul-px-3: ((@px * 1) * @cm); + } +} diff --git a/node_modules/less/test/less-bom/visitorPlugin/visitor.less b/node_modules/less/test/less-bom/visitorPlugin/visitor.less new file mode 100644 index 000000000..820ee880d --- /dev/null +++ b/node_modules/less/test/less-bom/visitorPlugin/visitor.less @@ -0,0 +1,4 @@ +.test { + color: red; + -some-aribitrary-property: value; +} diff --git a/node_modules/less/test/less-bom/whitespace.less b/node_modules/less/test/less-bom/whitespace.less new file mode 100644 index 000000000..705ca72c1 --- /dev/null +++ b/node_modules/less/test/less-bom/whitespace.less @@ -0,0 +1,44 @@ + + +.whitespace + { color: white; } + +.whitespace +{ + color: white; +} + .whitespace +{ color: white; } + +.whitespace{color:white;} +.whitespace { color : white ; } + +.white, +.space, +.mania +{ color: white; } + +.no-semi-column { color: white } +.no-semi-column { + color: white; + white-space: pre +} +.no-semi-column {border: 2px solid white} +.newlines { + background: the, + great, + wall; + border: 2px + solid + black; +} +.empty { + +} +.sel +.newline_ws .tab_ws { +color: +white; +background-position: 45 +-23; +} diff --git a/node_modules/less/test/less-test.js b/node_modules/less/test/less-test.js new file mode 100644 index 000000000..7623a076d --- /dev/null +++ b/node_modules/less/test/less-test.js @@ -0,0 +1,386 @@ +/*jshint latedef: nofunc */ + +module.exports = function() { + var path = require('path'), + fs = require('fs'), + copyBom = require('./copy-bom')(), + doBomTest = false; + + var less = require('../lib/less-node'); + var stylize = require('../lib/less-node/lessc-helper').stylize; + + var globals = Object.keys(global); + + var oneTestOnly = process.argv[2], + isFinished = false; + + var isVerbose = process.env.npm_config_loglevel === 'verbose'; + + var normalFolder = 'test/less'; + var bomFolder = 'test/less-bom'; + + less.logger.addListener({ + info: function(msg) { + if (isVerbose) { + process.stdout.write(msg + "\n"); + } + }, + warn: function(msg) { + process.stdout.write(msg + "\n"); + }, + error: function(msg) { + process.stdout.write(msg + "\n"); + } + }); + + var queueList = [], + queueRunning = false; + function queue(func) { + if (queueRunning) { + //console.log("adding to queue"); + queueList.push(func); + } else { + //console.log("first in queue - starting"); + queueRunning = true; + func(); + } + } + function release() { + if (queueList.length) { + //console.log("running next in queue"); + var func = queueList.shift(); + setTimeout(func, 0); + } else { + //console.log("stopping queue"); + queueRunning = false; + } + } + + var totalTests = 0, + failedTests = 0, + passedTests = 0; + + less.functions.functionRegistry.addMultiple({ + add: function (a, b) { + return new(less.tree.Dimension)(a.value + b.value); + }, + increment: function (a) { + return new(less.tree.Dimension)(a.value + 1); + }, + _color: function (str) { + if (str.value === "evil red") { return new(less.tree.Color)("600"); } + } + }); + + function testSourcemap(name, err, compiledLess, doReplacements, sourcemap, baseFolder) { + fs.readFile(path.join('test/', name) + '.json', 'utf8', function (e, expectedSourcemap) { + process.stdout.write("- " + path.join(baseFolder, name) + ": "); + if (sourcemap === expectedSourcemap) { + ok('OK'); + } else if (err) { + fail("ERROR: " + (err && err.message)); + if (isVerbose) { + process.stdout.write("\n"); + process.stdout.write(err.stack + "\n"); + } + } else { + difference("FAIL", expectedSourcemap, sourcemap); + } + }); + } + + function testEmptySourcemap(name, err, compiledLess, doReplacements, sourcemap, baseFolder) { + process.stdout.write("- " + path.join(baseFolder, name) + ": "); + if (err) { + fail("ERROR: " + (err && err.message)); + } else { + var expectedSourcemap = undefined; + if ( compiledLess !== "" ) { + difference("\nCompiledLess must be empty", "", compiledLess); + + } else if (sourcemap !== expectedSourcemap) { + fail("Sourcemap must be undefined"); + } else { + ok('OK'); + } + } + } + + function testErrors(name, err, compiledLess, doReplacements, sourcemap, baseFolder) { + fs.readFile(path.join(baseFolder, name) + '.txt', 'utf8', function (e, expectedErr) { + process.stdout.write("- " + path.join(baseFolder, name) + ": "); + expectedErr = doReplacements(expectedErr, baseFolder); + if (!err) { + if (compiledLess) { + fail("No Error", 'red'); + } else { + fail("No Error, No Output"); + } + } else { + var errMessage = less.formatError(err); + if (errMessage === expectedErr) { + ok('OK'); + } else { + difference("FAIL", expectedErr, errMessage); + } + } + }); + } + + function globalReplacements(input, directory) { + var p = path.join(process.cwd(), directory), + pathimport = path.join(process.cwd(), directory + "import/"), + pathesc = p.replace(/[.:/\\]/g, function(a) { return '\\' + (a == '\\' ? '\/' : a); }), + pathimportesc = pathimport.replace(/[.:/\\]/g, function(a) { return '\\' + (a == '\\' ? '\/' : a); }); + + return input.replace(/\{path\}/g, p) + .replace(/\{pathesc\}/g, pathesc) + .replace(/\{pathimport\}/g, pathimport) + .replace(/\{pathimportesc\}/g, pathimportesc) + .replace(/\r\n/g, '\n'); + } + + function checkGlobalLeaks() { + return Object.keys(global).filter(function(v) { + return globals.indexOf(v) < 0; + }); + } + + function testSyncronous(options, filenameNoExtension) { + if (oneTestOnly && ("Test Sync " + filenameNoExtension) !== oneTestOnly) { + return; + } + totalTests++; + queue(function() { + var isSync = true; + toCSS(options, path.join(normalFolder, filenameNoExtension + ".less"), function (err, result) { + process.stdout.write("- Test Sync " + filenameNoExtension + ": "); + + if (isSync) { + ok("OK"); + } else { + fail("Not Sync"); + } + release(); + }); + isSync = false; + }); + } + + function prepBomTest() { + copyBom.copyFolderWithBom(normalFolder, bomFolder); + doBomTest = true; + } + + function runTestSet(options, foldername, verifyFunction, nameModifier, doReplacements, getFilename) { + var options2 = options ? JSON.parse(JSON.stringify(options)) : {}; + runTestSetInternal(normalFolder, options, foldername, verifyFunction, nameModifier, doReplacements, getFilename); + if (doBomTest) { + runTestSetInternal(bomFolder, options2, foldername, verifyFunction, nameModifier, doReplacements, getFilename); + } + } + + function runTestSetNormalOnly(options, foldername, verifyFunction, nameModifier, doReplacements, getFilename) { + runTestSetInternal(normalFolder, options, foldername, verifyFunction, nameModifier, doReplacements, getFilename); + } + + function runTestSetInternal(baseFolder, options, foldername, verifyFunction, nameModifier, doReplacements, getFilename) { + foldername = foldername || ""; + + if (!doReplacements) { + doReplacements = globalReplacements; + } + + function getBasename(file) { + return foldername + path.basename(file, '.less'); + } + + fs.readdirSync(path.join(baseFolder, foldername)).forEach(function (file) { + if (! /\.less/.test(file)) { return; } + + var name = getBasename(file); + + if (oneTestOnly && name !== oneTestOnly) { + return; + } + + totalTests++; + + if (options.sourceMap && !options.sourceMap.sourceMapFileInline) { + options.sourceMapOutputFilename = name + ".css"; + options.sourceMapBasepath = path.join(process.cwd(), baseFolder); + options.sourceMapRootpath = "testweb/"; + // TODO separate options? + options.sourceMap = options; + } + + options.getVars = function(file) { + return JSON.parse(fs.readFileSync(getFilename(getBasename(file), 'vars', baseFolder), 'utf8')); + }; + + var doubleCallCheck = false; + queue(function() { + toCSS(options, path.join(baseFolder, foldername + file), function (err, result) { + if (doubleCallCheck) { + totalTests++; + fail("less is calling back twice"); + process.stdout.write(doubleCallCheck + "\n"); + process.stdout.write((new Error()).stack + "\n"); + return; + } + doubleCallCheck = (new Error()).stack; + + if (verifyFunction) { + var verificationResult = verifyFunction(name, err, result && result.css, doReplacements, result && result.map, baseFolder); + release(); + return verificationResult; + } + if (err) { + fail("ERROR: " + (err && err.message)); + if (isVerbose) { + process.stdout.write("\n"); + if (err.stack) { + process.stdout.write(err.stack + "\n"); + } else { + //this sometimes happen - show the whole error object + console.log(err); + } + } + release(); + return; + } + var css_name = name; + if (nameModifier) { css_name = nameModifier(name); } + fs.readFile(path.join('test/css', css_name) + '.css', 'utf8', function (e, css) { + process.stdout.write("- " + path.join(baseFolder, css_name) + ": "); + + css = css && doReplacements(css, path.join(baseFolder, foldername)); + if (result.css === css) { ok('OK'); } + else { + difference("FAIL", css, result.css); + } + release(); + }); + }); + }); + }); + } + + function diff(left, right) { + require('diff').diffLines(left, right).forEach(function(item) { + if (item.added || item.removed) { + var text = item.value && item.value.replace("\n", String.fromCharCode(182) + "\n").replace('\ufeff', '[[BOM]]'); + process.stdout.write(stylize(text, item.added ? 'green' : 'red')); + } else { + process.stdout.write(item.value && item.value.replace('\ufeff', '[[BOM]]')); + } + }); + process.stdout.write("\n"); + } + + function fail(msg) { + process.stdout.write(stylize(msg, 'red') + "\n"); + failedTests++; + endTest(); + } + + function difference(msg, left, right) { + process.stdout.write(stylize(msg, 'yellow') + "\n"); + failedTests++; + + diff(left, right); + endTest(); + } + + function ok(msg) { + process.stdout.write(stylize(msg, 'green') + "\n"); + passedTests++; + endTest(); + } + + function finished() { + isFinished = true; + endTest(); + } + + function endTest() { + if (isFinished && ((failedTests + passedTests) >= totalTests)) { + var leaked = checkGlobalLeaks(); + + process.stdout.write("\n"); + if (failedTests > 0) { + process.stdout.write(failedTests + stylize(" Failed", "red") + ", " + passedTests + " passed\n"); + } else { + process.stdout.write(stylize("All Passed ", "green") + passedTests + " run\n"); + } + if (leaked.length > 0) { + process.stdout.write("\n"); + process.stdout.write(stylize("Global leak detected: ", "red") + leaked.join(', ') + "\n"); + } + + if (leaked.length || failedTests) { + process.on('exit', function() { process.reallyExit(1); }); + } + } + } + + function contains(fullArray, obj) { + for (var i = 0; i < fullArray.length; i++) { + if (fullArray[i] === obj) { + return true; + } + } + return false; + } + + function toCSS(options, path, callback) { + options = options || {}; + var str = fs.readFileSync(path, 'utf8'), addPath = require('path').dirname(path); + if (typeof options.paths !== "string") { + options.paths = options.paths || []; + if (!contains(options.paths, addPath)) { + options.paths.push(addPath); + } + } + options.filename = require('path').resolve(process.cwd(), path); + options.optimization = options.optimization || 0; + + if (options.globalVars) { + options.globalVars = options.getVars(path); + } else if (options.modifyVars) { + options.modifyVars = options.getVars(path); + } + if (options.plugin) { + var Plugin = require(require('path').resolve(process.cwd(), options.plugin)); + options.plugins = [Plugin]; + } + less.render(str, options, callback); + } + + function testNoOptions() { + if (oneTestOnly && "Integration" !== oneTestOnly) { + return; + } + totalTests++; + try { + process.stdout.write("- Integration - creating parser without options: "); + less.render(""); + } catch(e) { + fail(stylize("FAIL\n", "red")); + return; + } + ok(stylize("OK\n", "green")); + } + + return { + runTestSet: runTestSet, + runTestSetNormalOnly: runTestSetNormalOnly, + testSyncronous: testSyncronous, + testErrors: testErrors, + testSourcemap: testSourcemap, + testEmptySourcemap: testEmptySourcemap, + testNoOptions: testNoOptions, + prepBomTest: prepBomTest, + finished: finished + }; +}; diff --git a/node_modules/less/test/less/charsets.less b/node_modules/less/test/less/charsets.less new file mode 100644 index 000000000..550d40e97 --- /dev/null +++ b/node_modules/less/test/less/charsets.less @@ -0,0 +1,3 @@ +@charset "UTF-8"; + +@import "import/import-charset-test"; \ No newline at end of file diff --git a/node_modules/less/test/less/colors.less b/node_modules/less/test/less/colors.less new file mode 100644 index 000000000..061ebc8c4 --- /dev/null +++ b/node_modules/less/test/less/colors.less @@ -0,0 +1,98 @@ +#yelow { + #short { + color: #fea; + } + #long { + color: #ffeeaa; + } + #rgba { + color: rgba(255, 238, 170, 0.1); + } + #argb { + color: argb(rgba(255, 238, 170, 0.1)); + } +} + +#blue { + #short { + color: #00f; + } + #long { + color: #0000ff; + } + #rgba { + color: rgba(0, 0, 255, 0.1); + } + #argb { + color: argb(rgba(0, 0, 255, 0.1)); + } +} + +#alpha #hsla { + color: hsla(11, 20%, 20%, 0.6); +} + +#overflow { + .a { color: (#111111 - #444444); } // #000000 + .b { color: (#eee + #fff); } // #ffffff + .c { color: (#aaa * 3); } // #ffffff + .d { color: (#00ee00 + #009900); } // #00ff00 + .e { color: rgba(-99.9, 31.4159, 321, 0.42); } +} + +#grey { + color: rgb(200, 200, 200); +} + +#333333 { + color: rgb(20%, 20%, 20%); +} + +#808080 { + color: hsl(50, 0%, 50%); +} + +#00ff00 { + color: hsl(120, 100%, 50%); +} + +.lightenblue { + color: lighten(blue, 10%); +} + +.darkenblue { + color: darken(blue, 10%); +} + +.unknowncolors { + color: blue2; + border: 2px solid superred; +} + +.transparent { + color: transparent; + background-color: rgba(0, 0, 0, 0); +} +#alpha { + @colorvar: rgba(150, 200, 150, 0.7); + #fromvar { + opacity: alpha(@colorvar); + } + #short { + opacity: alpha(#aaa); + } + #long { + opacity: alpha(#bababa); + } + #rgba { + opacity: alpha(rgba(50, 120, 95, 0.2)); + } + #hsl { + opacity: alpha(hsl(120, 100%, 50%)); + } +} + +#percentage { + color: red(rgb(100%, 0, 0)); + border-color: rgba(100%, 0, 0, 50%); +} diff --git a/node_modules/less/test/less/comments.less b/node_modules/less/test/less/comments.less new file mode 100644 index 000000000..f33bd6773 --- /dev/null +++ b/node_modules/less/test/less/comments.less @@ -0,0 +1,102 @@ +/******************\ +* * +* Comment Header * +* * +\******************/ + +/* + + Comment + +*/ + +/* + * Comment Test + * + * - cloudhead (http://cloudhead.net) + * + */ + +//////////////// +@var: "content"; +//////////////// + +/* Colors + * ------ + * #EDF8FC (background blue) + * #166C89 (darkest blue) + * + * Text: + * #333 (standard text) // A comment within a comment! + * #1F9EC9 (standard link) + * + */ + +/* @group Variables +------------------- */ +#comments /* boo *//* boo again*/, +//.commented_out1 +//.commented_out2 +//.commented_out3 +.comments //end of comments1 +//end of comments2 +{ + /**/ // An empty comment + color: red; /* A C-style comment */ /* A C-style comment */ + background-color: orange; // A little comment + font-size: 12px; + + /* lost comment */ content: @var; + + border: 1px solid black; + + // padding & margin // + padding: 0; // }{ '" + margin: 2em; +} // + +/* commented out + #more-comments { + color: grey; + } +*/ + +.selector /* .with */, .lots, /* of */ .comments { + color/* survive */ /* me too */: grey, /* blue */ orange; + -webkit-border-radius: 2px /* webkit only */; + -moz-border-radius: (2px * 4) /* moz only with operation */; +} + +.mixin_def_with_colors(@a: white, // in + @b: 1px //put in @b - causes problems! ---> + ) // the + when (@a = white) { + .test { + color: @b; + } +} +.mixin_def_with_colors(); + +// .s when +//R/2 + +.sr-only-focusable { + clip: auto; +} + +@-webkit-keyframes /* Safari */ hover /* and Chrome */ { + 0% { + color: red; + } +} + +#last { color: blue } +// + +/* *//* { *//* *//* *//* */#div { color:#A33; }/* } */ + +// line immediately followed +/*by block */ +@string_w_comment: ~"/* // Not commented out // */"; +#output-block { comment: @string_w_comment; } +/*comment on last line*/ \ No newline at end of file diff --git a/node_modules/less/test/less/comments2.less b/node_modules/less/test/less/comments2.less new file mode 100644 index 000000000..dce78baa3 --- /dev/null +++ b/node_modules/less/test/less/comments2.less @@ -0,0 +1,31 @@ +@media all and/*! */(max-width:1024px) {} +@-webkit-keyframes hover /* Safari and Chrome */{ } +.bg { + background-image: linear-gradient(#333 /*{comment}*/, #111); +} +#planadvisor, +/*comment*//*comment*/ +.first,/*comment*//*comment*/.planning { + margin:10px; + total-width: @total-width; +} +@base : 1; +@column-width : @base * 6em; // Width of column */ +@gutter-width : 2em; // Width of column spacing */ +@columns : 12; // Number of Columns */ +@gridsystem-width : (@column-width * // For calculating the total */ + @columns) + ( // width of the content area. */ + @gutter-width * // We strongly recommend you */ + @columns); // do not change this formula. */ +@total-width : @gridsystem-width; // set to 100% for fluid grid */ + +// ............................................................................. + +.some-inline-comments { + a: yes /* comment */; + b: red /* comment */; + @c: yes /* comment */; + @d: red /* comment */; + c: @c; + d: @d; +} diff --git a/node_modules/less/test/less/compression/compression.less b/node_modules/less/test/less/compression/compression.less new file mode 100644 index 000000000..c196336a7 --- /dev/null +++ b/node_modules/less/test/less/compression/compression.less @@ -0,0 +1,36 @@ +#colours { + color1: #fea; + color2: #ffeeaa; + color3: rgba(255, 238, 170, 0.1); + @color1: #fea; + string: "@{color1}"; + /* comments are stripped */ + // both types! + /*! but not this type + Note preserved whitespace + */ +} +dimensions { + val: 0.1px; + val: 0em; + val: 4cm; + val: 0.2; + val: 5; + angles-must-have-unit: 0deg; + durations-must-have-unit: 0s; + length-doesnt-have-unit: 0px; + width: auto\9; +} +@page { + marks: none; +@top-left-corner { + vertical-align: top; +} +@top-left { + vertical-align: top; +} +} +.shadow ^ .dom, +body ^^ .shadow { + display: done; +} diff --git a/node_modules/less/test/less/css-3.less b/node_modules/less/test/less/css-3.less new file mode 100644 index 000000000..9f206791b --- /dev/null +++ b/node_modules/less/test/less/css-3.less @@ -0,0 +1,162 @@ +.comma-delimited { + text-shadow: -1px -1px 1px red, 6px 5px 5px yellow; + -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset, + 0pt 4px 6px rgba(255, 255, 255, 0.4) inset; + -webkit-transform: rotate(-0.0000000001deg); +} +@font-face { + font-family: Headline; + unicode-range: U+??????, U+0???, U+0-7F, U+A5; +} +.other { + -moz-transform: translate(0, 11em) rotate(-90deg); + transform: rotateX(45deg); +} +.item[data-cra_zy-attr1b-ut3=bold] { + font-weight: bold; +} +p:not([class*="lead"]) { + color: black; +} + +input[type="text"].class#id[attr=32]:not(1) { + color: white; +} + +div#id.class[a=1][b=2].class:not(1) { + color: white; +} + +ul.comma > li:not(:only-child)::after { + color: white; +} + +ol.comma > li:nth-last-child(2)::after { + color: white; +} + +li:nth-child(4n+1), +li:nth-child(-5n), +li:nth-child(-n+2) { + color: white; +} + +a[href^="http://"] { + color: black; +} + +a[href$="http://"] { + color: black; +} + +form[data-disabled] { + color: black; +} + +p::before { + color: black; +} + +#issue322 { + -webkit-animation: anim2 7s infinite ease-in-out; +} + +@-webkit-keyframes frames { + 0% { border: 1px } + 5.5% { border: 2px } + 100% { border: 3px } +} + +@keyframes fontbulger1 { + to { + font-size: 15px; + } + from,to { + font-size: 12px; + } + 0%,100% { + font-size: 12px; + } +} + +.units { + font: 1.2rem/2rem; + font: 8vw/9vw; + font: 10vh/12vh; + font: 12vm/15vm; + font: 12vmin/15vmin; + font: 1.2ch/1.5ch; +} + +@supports ( box-shadow: 2px 2px 2px black ) or + ( -moz-box-shadow: 2px 2px 2px black ) { + .outline { + box-shadow: 2px 2px 2px black; + -moz-box-shadow: 2px 2px 2px black; + } +} + +@-x-document url-prefix(""github.com"") { + h1 { + color: red; + } +} + +@viewport { + font-size: 10px; +} +@namespace foo url(http://www.example.com); + +foo|h1 { color: blue; } +foo|* { color: yellow; } +|h1 { color: red; } +*|h1 { color: green; } +h1 { color: green; } +.upper-test { + UpperCaseProperties: allowed; +} +@host { + div { + display: block; + } +} +::distributed(input::placeholder) { + color: #b3b3b3; +} +.shadow ^ .dom, +body ^^ .shadow { + display: done; +} + +:host(.sel .a), +:host-context(.sel .b), +.sel /deep/ .b, +::content .sel { + type: shadow-dom; +} +/deep/ b { + c: 'd'; + &[e]{ + f: 'g'; + } +} + +#issue2066 { + background: url('/images/icon-team.svg') 0 0 / contain; +} + +@counter-style triangle { + system: cyclic; + symbols: ‣; + suffix: " "; +} + +@-ms-viewport{ + // width: auto !important; +} + +@unknown foo 42 (bar) { + x {y: z} +} + +@unknown foo 43; diff --git a/node_modules/less/test/less/css-escapes.less b/node_modules/less/test/less/css-escapes.less new file mode 100644 index 000000000..697503a69 --- /dev/null +++ b/node_modules/less/test/less/css-escapes.less @@ -0,0 +1,33 @@ +@ugly: fuchsia; + +.escape\|random\|char { + color: red; +} + +.mixin\!tUp { + font-weight: bold; +} + +// class="404" +.\34 04 { + background: red; + + strong { + color: @ugly; + .mixin\!tUp; + } +} + +.trailingTest\+ { + color: red; +} + +/* This hideous test of hideousness checks for the selector "blockquote" with various permutations of hex escapes */ +\62\6c\6f \63 \6B \0071 \000075o\74 e { + color: silver; +} + +[ng\:cloak], +ng\:form { + display: none; +} diff --git a/node_modules/less/test/less/css-guards.less b/node_modules/less/test/less/css-guards.less new file mode 100644 index 000000000..cabd52a5b --- /dev/null +++ b/node_modules/less/test/less/css-guards.less @@ -0,0 +1,103 @@ + +.light when (lightness(@a) > 50%) { + color: green; +} +.dark when (lightness(@a) < 50%) { + color: orange; +} +@a: #ddd; + +.see-the { + @a: #444; // this mirrors what mixins do - they evaluate the guards at the point of definition + .light(); + .dark(); +} + +.hide-the { + .light(); + .dark(); +} + +.multiple-conditions-1 when (@b = 1), (@c = 2), (@d = 3) { + color: red; +} + +.multiple-conditions-2 when (@b = 1), (@c = 2), (@d = 2) { + color: blue; +} + +@b: 2; +@c: 3; +@d: 3; + +.inheritance when (@b = 2) { + .test { + color: black; + } + &:hover { + color: pink; + } + .hideme when (@b = 1) { + color: green; + } + & when (@b = 1) { + hideme: green; + } +} + +.hideme when (@b = 1) { + .test { + color: black; + } + &:hover { + color: pink; + } + .hideme when (@b = 1) { + color: green; + } +} + +& when (@b = 1) { + .hideme { + color: red; + } +} + +.mixin-with-guard-inside(@colWidth) { + // selector with guard (applies also to & when() ...) + .clsWithGuard when (@colWidth <= 0) { + dispaly: none; + } +} + +.mixin-with-guard-inside(0px); + +.dont-split-me-up { + width: 1px; + & when (@c = 3) { + color: red; + } + & when (@c = 3) { + height: 1px; + } + + & when (@c = 3) { // creates invalid css but tests that we don't fold it in + sibling: true; + } +} + +.scope-check when (@c = 3) { + @k: 1px; + & when (@c = 3) { + @k: 2px; + sub-prop: @k; + } + prop: @k; +} +.scope-check-2 { + .scope-check(); + @k:4px; +} +.errors-if-called when (@c = never) { + .mixin-doesnt-exist(); +} +a:hover when (2 = true) {5:-} \ No newline at end of file diff --git a/node_modules/less/test/less/css.less b/node_modules/less/test/less/css.less new file mode 100644 index 000000000..0cdebae89 --- /dev/null +++ b/node_modules/less/test/less/css.less @@ -0,0 +1,108 @@ +@charset "utf-8"; +div { color: black; } +div { width: 99%; } + +* { + min-width: 45em; +} + +h1, h2 > a > p, h3 { + color: none; +} + +div.class { + color: blue; +} + +div#id { + color: green; +} + +.class#id { + color: purple; +} + +.one.two.three { + color: grey; +} + +@media print { + * { + font-size: 3em; + } +} + +@media screen { + * { + font-size: 10px; + } +} + +@font-face { + font-family: 'Garamond Pro'; +} + +a:hover, a:link { + color: #999; +} + +p, p:first-child { + text-transform: none; +} + +q:lang(no) { + quotes: none; +} + +p + h1 { + font-size: +2.2em; +} + +#shorthands { + border: 1px solid #000; + font: 12px/16px Arial; + font: 100%/16px Arial; + margin: 1px 0; + padding: 0 auto; +} + +#more-shorthands { + margin: 0; + padding: 1px 0 2px 0; + font: normal small/20px 'Trebuchet MS', Verdana, sans-serif; + font: 0/0 a; + border-radius: 5px / 10px; +} + +.misc { + -moz-border-radius: 2px; + display: -moz-inline-stack; + width: .1em; + background-color: #009998; + background: -webkit-gradient(linear, left top, left bottom, from(red), to(blue)); + margin: ; + .nested-multiple { + multiple-semi-colons: yes;;;;;; + }; + filter: alpha(opacity=100); + width: auto\9; +} + +#important { + color: red !important; + width: 100%!important; + height: 20px ! important; +} + +.def-font(@name) { + @font-face { + font-family: @name + } +} + +.def-font(font-a); +.def-font(font-b); + +.æøå { + margin: 0; +} diff --git a/node_modules/less/test/less/debug/import/test.less b/node_modules/less/test/less/debug/import/test.less new file mode 100644 index 000000000..795082f5a --- /dev/null +++ b/node_modules/less/test/less/debug/import/test.less @@ -0,0 +1,25 @@ +@charset "ISO-8859-1"; + +.mixin_import1() { + @media all { + .tst { + color: black; + @media screen { + color: red; + .tst3 { + color: white; + } + } + } + } +} + +.mixin_import2() { + .tst2 { + color: white; + } +} + +.tst3 { + color: grey; +} \ No newline at end of file diff --git a/node_modules/less/test/less/debug/linenumbers.less b/node_modules/less/test/less/debug/linenumbers.less new file mode 100644 index 000000000..3bcaed014 --- /dev/null +++ b/node_modules/less/test/less/debug/linenumbers.less @@ -0,0 +1,33 @@ +@charset "UTF-8"; + +@import "import/test.less"; + +.start() { + .test2 { + color: red; + } +} + +.mix() { + color: black; +} + +.test1 { + .mix(); +} + +.start(); + +.mixin_import1(); + +.mixin_import2(); + +@debug: 1; +& when (@debug = 1) { + .test { + color: red; + & when (@debug = 1) { + width: 2; + } + } +} \ No newline at end of file diff --git a/node_modules/less/test/less/detached-rulesets.less b/node_modules/less/test/less/detached-rulesets.less new file mode 100644 index 000000000..0475f6354 --- /dev/null +++ b/node_modules/less/test/less/detached-rulesets.less @@ -0,0 +1,112 @@ +@ruleset: { + color: black; + background: white; + }; + +@a: 1px; +.wrap-mixin(@ruleset) { + @a: hidden and if you see this in the output its a bug; + @b: visible; + @d: magic-frame; // same behaviour as mixin calls - falls back to this frame + .wrap-selector { + @c: visible; + @ruleset(); + visible-one: @b; + visible-two: @c; + } +}; + +.wrap-mixin({ + color: black; + one: @a; + @b: hidden and if you see this in the output its a bug; + @c: hidden and if you see this in the output its a bug; + four: @d; +}); + +.wrap-mixin(@ruleset: { + color: red; +}); + +.wrap-mixin(@ruleset); + +.desktop-and-old-ie(@rules) { + @media screen and (min-width: 1200) { @rules(); } + html.lt-ie9 & { @rules(); } +} + +header { + background: blue; + + .desktop-and-old-ie({ + background: red; + }); +} + +.wrap-mixin-calls-wrap(@ruleset) { + .wrap-mixin(@ruleset); +}; + +.wrap-mixin({ + test: extra-wrap; + .wrap-mixin-calls-wrap({ + test: wrapped-twice; + }); +}); + +.wrap-mixin({ + test-func: unit(90px); + test-arithmetic: unit((9+9), px); +}); +// without mixins +@ruleset-2: { + b: 1; +}; +.without-mixins { + @ruleset-2(); +} +@my-ruleset: { + .my-selector { + @media tv { + background-color: black; + } + } + }; +@media (orientation:portrait) { + @my-ruleset(); + .wrap-media-mixin({ + @media tv { + .triple-wrapped-mq { + triple: true; + } + } + }); +} +.wrap-media-mixin(@ruleset) { + @media widescreen { + @media print { + @ruleset(); + } + @ruleset(); + } + @ruleset(); +} +// unlocking mixins +@my-mixins: { + .mixin() { + test: test; + } +}; +@my-mixins(); +.a { + .mixin(); +} +// as mixin argument default +.mixin-definition(@a: {}; @b: {default: works;};) { + @a(); + @b(); +} +.argument-default { + .mixin-definition(); + .mixin-definition({direct: works;}; @b: {named: works;}); +} \ No newline at end of file diff --git a/node_modules/less/test/less/directives-bubling.less b/node_modules/less/test/less/directives-bubling.less new file mode 100644 index 000000000..be3523869 --- /dev/null +++ b/node_modules/less/test/less/directives-bubling.less @@ -0,0 +1,142 @@ +//simple case: @document +.parent { + color:green; + + @document url-prefix() { + .child { + color:red; + } + } +} + +//selectors joinings test +.top { + @supports (sandwitch: butter) { + .inside & { + property: value; + } + } +} + +@supports (sandwitch: bread) { + .in1 { + .in2 { + property: value; + } + } +} + +.top { + .inside & { + @supports (sandwitch: ham) { + property: value; + } + } +} + +//combined with @font-face which has different kind of body +@supports (font-family: weirdFont) { + @font-face { + font-family: something; + src: made-up-url; + } +} + +@font-face { + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + font-family: something; + src: made-up-url; + } +} + +//bubling through media +@supports (property: value) { + .outOfMedia & { + @media (max-size: 2px) { + @supports (whatever: something) { + property: value; + } + } + } +} + +.onTop & { + @supports (property: value) { + @media (max-size: 2px) { + @supports (whatever: something) { + property: value; + } + } + } +} + + +//long combination of supports and media +@media print { + html { + in-html: visible; + @supports (upper: test) { + in-supports: first; + div { + in-div: visible; + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + in-supports: second; + @media screen { + font-weight: 400; + nested { + property: value; + } + } + } + } + } + } +} + +//another long combination of supports and media +@media print { + @media (max-size: 2px) { + .in1 { + stay: here; + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + .in2 & { + @supports (whatever: something) { + property: value; + } + } + } + } + } +} + +//called from mixin +.nestedSupportsMixin() { + font-weight: 300; + -webkit-font-smoothing: subpixel-antialiased; + @supports not (-webkit-font-smoothing: subpixel-antialiased) { + font-weight: 400; + nested { + property: value; + } + } +} + +html { + .nestedSupportsMixin; +} + +// selectors should not propagate into all directive types +.onTop { + @font-face { + font-family: something; + src: made-up-url; + } + + @keyframes "textscale" { + 0% { font-size : 1em; } + 100% { font-size : 2em; } + } + + animation : "textscale"; + font-family : something; +} diff --git a/node_modules/less/test/less/empty.less b/node_modules/less/test/less/empty.less new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/less/test/less/errors/add-mixed-units.less b/node_modules/less/test/less/errors/add-mixed-units.less new file mode 100644 index 000000000..9b708de93 --- /dev/null +++ b/node_modules/less/test/less/errors/add-mixed-units.less @@ -0,0 +1,3 @@ +.a { + error: (1px + 3em); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/add-mixed-units.txt b/node_modules/less/test/less/errors/add-mixed-units.txt new file mode 100644 index 000000000..9ea454387 --- /dev/null +++ b/node_modules/less/test/less/errors/add-mixed-units.txt @@ -0,0 +1,4 @@ +SyntaxError: Incompatible units. Change the units or use the unit function. Bad units: 'px' and 'em'. in {path}add-mixed-units.less on line 2, column 3: +1 .a { +2 error: (1px + 3em); +3 } diff --git a/node_modules/less/test/less/errors/add-mixed-units2.less b/node_modules/less/test/less/errors/add-mixed-units2.less new file mode 100644 index 000000000..266311605 --- /dev/null +++ b/node_modules/less/test/less/errors/add-mixed-units2.less @@ -0,0 +1,3 @@ +.a { + error: ((1px * 2px) + (3em * 3px)); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/add-mixed-units2.txt b/node_modules/less/test/less/errors/add-mixed-units2.txt new file mode 100644 index 000000000..ca34304f6 --- /dev/null +++ b/node_modules/less/test/less/errors/add-mixed-units2.txt @@ -0,0 +1,4 @@ +SyntaxError: Incompatible units. Change the units or use the unit function. Bad units: 'px*px' and 'em*px'. in {path}add-mixed-units2.less on line 2, column 3: +1 .a { +2 error: ((1px * 2px) + (3em * 3px)); +3 } diff --git a/node_modules/less/test/less/errors/at-rules-undefined-var.less b/node_modules/less/test/less/errors/at-rules-undefined-var.less new file mode 100644 index 000000000..a1473805d --- /dev/null +++ b/node_modules/less/test/less/errors/at-rules-undefined-var.less @@ -0,0 +1,4 @@ + +@keyframes @name { + 50% {width: 20px;} +} diff --git a/node_modules/less/test/less/errors/at-rules-undefined-var.txt b/node_modules/less/test/less/errors/at-rules-undefined-var.txt new file mode 100644 index 000000000..240540a06 --- /dev/null +++ b/node_modules/less/test/less/errors/at-rules-undefined-var.txt @@ -0,0 +1,4 @@ +NameError: variable @name is undefined in {path}at-rules-undefined-var.less on line 2, column 12: +1 +2 @keyframes @name { +3 50% {width: 20px;} diff --git a/node_modules/less/test/less/errors/bad-variable-declaration1.less b/node_modules/less/test/less/errors/bad-variable-declaration1.less new file mode 100644 index 000000000..c2dc6ac0e --- /dev/null +++ b/node_modules/less/test/less/errors/bad-variable-declaration1.less @@ -0,0 +1 @@ +@@demo: "hi"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/bad-variable-declaration1.txt b/node_modules/less/test/less/errors/bad-variable-declaration1.txt new file mode 100644 index 000000000..5ae9d4a41 --- /dev/null +++ b/node_modules/less/test/less/errors/bad-variable-declaration1.txt @@ -0,0 +1,2 @@ +ParseError: Unrecognised input in {path}bad-variable-declaration1.less on line 1, column 1: +1 @@demo: "hi"; diff --git a/node_modules/less/test/less/errors/color-func-invalid-color.less b/node_modules/less/test/less/errors/color-func-invalid-color.less new file mode 100644 index 000000000..5a1edd011 --- /dev/null +++ b/node_modules/less/test/less/errors/color-func-invalid-color.less @@ -0,0 +1,3 @@ +.test { + color: color("NOT A COLOR"); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/color-func-invalid-color.txt b/node_modules/less/test/less/errors/color-func-invalid-color.txt new file mode 100644 index 000000000..08990c30a --- /dev/null +++ b/node_modules/less/test/less/errors/color-func-invalid-color.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `color`: argument must be a color keyword or 3/6 digit hex e.g. #FFF in {path}color-func-invalid-color.less on line 2, column 10: +1 .test { +2 color: color("NOT A COLOR"); +3 } diff --git a/node_modules/less/test/less/errors/color-invalid-hex-code.less b/node_modules/less/test/less/errors/color-invalid-hex-code.less new file mode 100644 index 000000000..0e6c5debe --- /dev/null +++ b/node_modules/less/test/less/errors/color-invalid-hex-code.less @@ -0,0 +1,3 @@ +.a { + @wrongHEXColorCode: #DCALLB; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/color-invalid-hex-code.txt b/node_modules/less/test/less/errors/color-invalid-hex-code.txt new file mode 100644 index 000000000..0f8a82ce4 --- /dev/null +++ b/node_modules/less/test/less/errors/color-invalid-hex-code.txt @@ -0,0 +1,4 @@ +SyntaxError: Invalid HEX color code in {path}color-invalid-hex-code.less on line 2, column 29: +1 .a { +2 @wrongHEXColorCode: #DCALLB; +3 } diff --git a/node_modules/less/test/less/errors/color-invalid-hex-code2.less b/node_modules/less/test/less/errors/color-invalid-hex-code2.less new file mode 100644 index 000000000..cb9a9b767 --- /dev/null +++ b/node_modules/less/test/less/errors/color-invalid-hex-code2.less @@ -0,0 +1,3 @@ +.a { + @wrongHEXColorCode: #fffblack; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/color-invalid-hex-code2.txt b/node_modules/less/test/less/errors/color-invalid-hex-code2.txt new file mode 100644 index 000000000..dd3996b1f --- /dev/null +++ b/node_modules/less/test/less/errors/color-invalid-hex-code2.txt @@ -0,0 +1,4 @@ +SyntaxError: Invalid HEX color code in {path}color-invalid-hex-code2.less on line 2, column 29: +1 .a { +2 @wrongHEXColorCode: #fffblack; +3 } diff --git a/node_modules/less/test/less/errors/css-guard-default-func.less b/node_modules/less/test/less/errors/css-guard-default-func.less new file mode 100644 index 000000000..db6639e17 --- /dev/null +++ b/node_modules/less/test/less/errors/css-guard-default-func.less @@ -0,0 +1,4 @@ + +selector when (default()) { + color: red; +} diff --git a/node_modules/less/test/less/errors/css-guard-default-func.txt b/node_modules/less/test/less/errors/css-guard-default-func.txt new file mode 100644 index 000000000..022f5222e --- /dev/null +++ b/node_modules/less/test/less/errors/css-guard-default-func.txt @@ -0,0 +1,4 @@ +SyntaxError: error evaluating function `default`: it is currently only allowed in parametric mixin guards, in {path}css-guard-default-func.less on line 2, column 16: +1 +2 selector when (default()) { +3 color: red; diff --git a/node_modules/less/test/less/errors/detached-ruleset-1.less b/node_modules/less/test/less/errors/detached-ruleset-1.less new file mode 100644 index 000000000..ac5b8db03 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-1.less @@ -0,0 +1,6 @@ +@a: { + b: 1; +}; +.a { + a: @a; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/detached-ruleset-1.txt b/node_modules/less/test/less/errors/detached-ruleset-1.txt new file mode 100644 index 000000000..7407741c8 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-1.txt @@ -0,0 +1,4 @@ +SyntaxError: Rulesets cannot be evaluated on a property. in {path}detached-ruleset-1.less on line 5, column 3: +4 .a { +5 a: @a; +6 } diff --git a/node_modules/less/test/less/errors/detached-ruleset-2.less b/node_modules/less/test/less/errors/detached-ruleset-2.less new file mode 100644 index 000000000..51a7af6be --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-2.less @@ -0,0 +1,6 @@ +@a: { + b: 1; +}; +.a { + a: @a(); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/detached-ruleset-2.txt b/node_modules/less/test/less/errors/detached-ruleset-2.txt new file mode 100644 index 000000000..43b99255d --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-2.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}detached-ruleset-2.less on line 5, column 9: +4 .a { +5 a: @a(); +6 } diff --git a/node_modules/less/test/less/errors/detached-ruleset-3.less b/node_modules/less/test/less/errors/detached-ruleset-3.less new file mode 100644 index 000000000..c50119d99 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-3.less @@ -0,0 +1,4 @@ +@a: { + b: 1; +}; +@a(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/detached-ruleset-3.txt b/node_modules/less/test/less/errors/detached-ruleset-3.txt new file mode 100644 index 000000000..ad43ab46a --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-3.txt @@ -0,0 +1,4 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}detached-ruleset-3.less on line 2, column 3: +1 @a: { +2 b: 1; +3 }; diff --git a/node_modules/less/test/less/errors/detached-ruleset-5.less b/node_modules/less/test/less/errors/detached-ruleset-5.less new file mode 100644 index 000000000..174ebf354 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-5.less @@ -0,0 +1,4 @@ +.mixin-definition(@b) { + @a(); +} +.mixin-definition({color: red;}); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/detached-ruleset-5.txt b/node_modules/less/test/less/errors/detached-ruleset-5.txt new file mode 100644 index 000000000..561897950 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-5.txt @@ -0,0 +1,3 @@ +SyntaxError: variable @a is undefined in {path}detached-ruleset-5.less on line 4, column 1: +3 } +4 .mixin-definition({color: red;}); diff --git a/node_modules/less/test/less/errors/detached-ruleset-6.less b/node_modules/less/test/less/errors/detached-ruleset-6.less new file mode 100644 index 000000000..121099f75 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-6.less @@ -0,0 +1,5 @@ +.a { + b: { + color: red; + }; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/detached-ruleset-6.txt b/node_modules/less/test/less/errors/detached-ruleset-6.txt new file mode 100644 index 000000000..7f6b0aeb3 --- /dev/null +++ b/node_modules/less/test/less/errors/detached-ruleset-6.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input in {path}detached-ruleset-6.less on line 2, column 6: +1 .a { +2 b: { +3 color: red; diff --git a/node_modules/less/test/less/errors/divide-mixed-units.less b/node_modules/less/test/less/errors/divide-mixed-units.less new file mode 100644 index 000000000..d228b7c47 --- /dev/null +++ b/node_modules/less/test/less/errors/divide-mixed-units.less @@ -0,0 +1,3 @@ +.a { + error: (1px / 3em); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/divide-mixed-units.txt b/node_modules/less/test/less/errors/divide-mixed-units.txt new file mode 100644 index 000000000..c189d2aad --- /dev/null +++ b/node_modules/less/test/less/errors/divide-mixed-units.txt @@ -0,0 +1,4 @@ +SyntaxError: Multiple units in dimension. Correct the units or use the unit function. Bad unit: px/em in {path}divide-mixed-units.less on line 2, column 3: +1 .a { +2 error: (1px / 3em); +3 } diff --git a/node_modules/less/test/less/errors/extend-no-selector.less b/node_modules/less/test/less/errors/extend-no-selector.less new file mode 100644 index 000000000..84689ef39 --- /dev/null +++ b/node_modules/less/test/less/errors/extend-no-selector.less @@ -0,0 +1,3 @@ +:extend(.a all) { + property: red; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/extend-no-selector.txt b/node_modules/less/test/less/errors/extend-no-selector.txt new file mode 100644 index 000000000..bd2e3cd75 --- /dev/null +++ b/node_modules/less/test/less/errors/extend-no-selector.txt @@ -0,0 +1,3 @@ +SyntaxError: Extend must be used to extend a selector, it cannot be used on its own in {path}extend-no-selector.less on line 1, column 17: +1 :extend(.a all) { +2 property: red; diff --git a/node_modules/less/test/less/errors/extend-not-at-end.less b/node_modules/less/test/less/errors/extend-not-at-end.less new file mode 100644 index 000000000..90ee512c5 --- /dev/null +++ b/node_modules/less/test/less/errors/extend-not-at-end.less @@ -0,0 +1,3 @@ +.a:extend(.b all).c { + property: red; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/extend-not-at-end.txt b/node_modules/less/test/less/errors/extend-not-at-end.txt new file mode 100644 index 000000000..32ebedfc4 --- /dev/null +++ b/node_modules/less/test/less/errors/extend-not-at-end.txt @@ -0,0 +1,3 @@ +SyntaxError: Extend can only be used at the end of selector in {path}extend-not-at-end.less on line 1, column 21: +1 .a:extend(.b all).c { +2 property: red; diff --git a/node_modules/less/test/less/errors/functions-1.less b/node_modules/less/test/less/errors/functions-1.less new file mode 100644 index 000000000..f502aa276 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-1.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-undefined(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-1.txt b/node_modules/less/test/less/errors/functions-1.txt new file mode 100644 index 000000000..abeb4bda5 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-1.txt @@ -0,0 +1,3 @@ +SyntaxError: Function 'test-undefined' is undefined in {path}functions-1.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-undefined(); diff --git a/node_modules/less/test/less/errors/functions-10-keyword.less b/node_modules/less/test/less/errors/functions-10-keyword.less new file mode 100644 index 000000000..16d0b9858 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-10-keyword.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-keyword(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-10-keyword.txt b/node_modules/less/test/less/errors/functions-10-keyword.txt new file mode 100644 index 000000000..dabe839d6 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-10-keyword.txt @@ -0,0 +1,3 @@ +SyntaxError: Keyword node returned by a function is not valid here in {path}functions-10-keyword.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-keyword(); diff --git a/node_modules/less/test/less/errors/functions-11-operation.less b/node_modules/less/test/less/errors/functions-11-operation.less new file mode 100644 index 000000000..5695bdb91 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-11-operation.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-operation(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-11-operation.txt b/node_modules/less/test/less/errors/functions-11-operation.txt new file mode 100644 index 000000000..27287179c --- /dev/null +++ b/node_modules/less/test/less/errors/functions-11-operation.txt @@ -0,0 +1,3 @@ +SyntaxError: Operation node returned by a function is not valid here in {path}functions-11-operation.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-operation(); diff --git a/node_modules/less/test/less/errors/functions-12-quoted.less b/node_modules/less/test/less/errors/functions-12-quoted.less new file mode 100644 index 000000000..d35be8710 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-12-quoted.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-quoted(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-12-quoted.txt b/node_modules/less/test/less/errors/functions-12-quoted.txt new file mode 100644 index 000000000..45c62ea64 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-12-quoted.txt @@ -0,0 +1,3 @@ +SyntaxError: Quoted node returned by a function is not valid here in {path}functions-12-quoted.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-quoted(); diff --git a/node_modules/less/test/less/errors/functions-13-selector.less b/node_modules/less/test/less/errors/functions-13-selector.less new file mode 100644 index 000000000..2fd879c60 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-13-selector.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-selector(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-13-selector.txt b/node_modules/less/test/less/errors/functions-13-selector.txt new file mode 100644 index 000000000..2f4b097f2 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-13-selector.txt @@ -0,0 +1,3 @@ +SyntaxError: Selector node returned by a function is not valid here in {path}functions-13-selector.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-selector(); diff --git a/node_modules/less/test/less/errors/functions-14-url.less b/node_modules/less/test/less/errors/functions-14-url.less new file mode 100644 index 000000000..bed6dabff --- /dev/null +++ b/node_modules/less/test/less/errors/functions-14-url.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-url(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-14-url.txt b/node_modules/less/test/less/errors/functions-14-url.txt new file mode 100644 index 000000000..aeb275cab --- /dev/null +++ b/node_modules/less/test/less/errors/functions-14-url.txt @@ -0,0 +1,3 @@ +SyntaxError: Url node returned by a function is not valid here in {path}functions-14-url.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-url(); diff --git a/node_modules/less/test/less/errors/functions-15-value.less b/node_modules/less/test/less/errors/functions-15-value.less new file mode 100644 index 000000000..189ce1967 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-15-value.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-value(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-15-value.txt b/node_modules/less/test/less/errors/functions-15-value.txt new file mode 100644 index 000000000..41f6e6a17 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-15-value.txt @@ -0,0 +1,3 @@ +SyntaxError: Value node returned by a function is not valid here in {path}functions-15-value.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-value(); diff --git a/node_modules/less/test/less/errors/functions-2-alpha.less b/node_modules/less/test/less/errors/functions-2-alpha.less new file mode 100644 index 000000000..f00da0788 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-2-alpha.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-alpha(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-2-alpha.txt b/node_modules/less/test/less/errors/functions-2-alpha.txt new file mode 100644 index 000000000..38a172731 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-2-alpha.txt @@ -0,0 +1,3 @@ +SyntaxError: Alpha node returned by a function is not valid here in {path}functions-2-alpha.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-alpha(); diff --git a/node_modules/less/test/less/errors/functions-3-assignment.less b/node_modules/less/test/less/errors/functions-3-assignment.less new file mode 100644 index 000000000..fe7f5ade4 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-3-assignment.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-assignment(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-3-assignment.txt b/node_modules/less/test/less/errors/functions-3-assignment.txt new file mode 100644 index 000000000..35c199265 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-3-assignment.txt @@ -0,0 +1,3 @@ +SyntaxError: Assignment node returned by a function is not valid here in {path}functions-3-assignment.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-assignment(); diff --git a/node_modules/less/test/less/errors/functions-4-call.less b/node_modules/less/test/less/errors/functions-4-call.less new file mode 100644 index 000000000..6b55c88a7 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-4-call.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-call(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-4-call.txt b/node_modules/less/test/less/errors/functions-4-call.txt new file mode 100644 index 000000000..338582d7c --- /dev/null +++ b/node_modules/less/test/less/errors/functions-4-call.txt @@ -0,0 +1,3 @@ +SyntaxError: Function 'foo' is undefined in {path}functions-4-call.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-call(); diff --git a/node_modules/less/test/less/errors/functions-5-color-2.less b/node_modules/less/test/less/errors/functions-5-color-2.less new file mode 100644 index 000000000..4839416b0 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-5-color-2.less @@ -0,0 +1 @@ +rgba(0,0,0,0); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-5-color-2.txt b/node_modules/less/test/less/errors/functions-5-color-2.txt new file mode 100644 index 000000000..8b36fd985 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-5-color-2.txt @@ -0,0 +1,2 @@ +SyntaxError: Color node returned by a function is not valid here in {path}functions-5-color-2.less on line 1, column 1: +1 rgba(0,0,0,0); diff --git a/node_modules/less/test/less/errors/functions-5-color.less b/node_modules/less/test/less/errors/functions-5-color.less new file mode 100644 index 000000000..700ec5b92 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-5-color.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-color(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-5-color.txt b/node_modules/less/test/less/errors/functions-5-color.txt new file mode 100644 index 000000000..fdcd1a08a --- /dev/null +++ b/node_modules/less/test/less/errors/functions-5-color.txt @@ -0,0 +1,3 @@ +SyntaxError: Color node returned by a function is not valid here in {path}functions-5-color.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-color(); diff --git a/node_modules/less/test/less/errors/functions-6-condition.less b/node_modules/less/test/less/errors/functions-6-condition.less new file mode 100644 index 000000000..db1000b83 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-6-condition.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-condition(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-6-condition.txt b/node_modules/less/test/less/errors/functions-6-condition.txt new file mode 100644 index 000000000..421bba5f5 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-6-condition.txt @@ -0,0 +1,3 @@ +SyntaxError: Condition node returned by a function is not valid here in {path}functions-6-condition.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-condition(); diff --git a/node_modules/less/test/less/errors/functions-7-dimension.less b/node_modules/less/test/less/errors/functions-7-dimension.less new file mode 100644 index 000000000..c399d33e2 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-7-dimension.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-dimension(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-7-dimension.txt b/node_modules/less/test/less/errors/functions-7-dimension.txt new file mode 100644 index 000000000..3b1b7026c --- /dev/null +++ b/node_modules/less/test/less/errors/functions-7-dimension.txt @@ -0,0 +1,3 @@ +SyntaxError: Dimension node returned by a function is not valid here in {path}functions-7-dimension.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-dimension(); diff --git a/node_modules/less/test/less/errors/functions-8-element.less b/node_modules/less/test/less/errors/functions-8-element.less new file mode 100644 index 000000000..c762aad81 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-8-element.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-element(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-8-element.txt b/node_modules/less/test/less/errors/functions-8-element.txt new file mode 100644 index 000000000..b505d9543 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-8-element.txt @@ -0,0 +1,3 @@ +SyntaxError: Element node returned by a function is not valid here in {path}functions-8-element.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-element(); diff --git a/node_modules/less/test/less/errors/functions-9-expression.less b/node_modules/less/test/less/errors/functions-9-expression.less new file mode 100644 index 000000000..5f0bf46c4 --- /dev/null +++ b/node_modules/less/test/less/errors/functions-9-expression.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes"; +test-expression(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/functions-9-expression.txt b/node_modules/less/test/less/errors/functions-9-expression.txt new file mode 100644 index 000000000..224db785e --- /dev/null +++ b/node_modules/less/test/less/errors/functions-9-expression.txt @@ -0,0 +1,3 @@ +SyntaxError: Expression node returned by a function is not valid here in {path}functions-9-expression.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes"; +2 test-expression(); diff --git a/node_modules/less/test/less/errors/import-malformed.less b/node_modules/less/test/less/errors/import-malformed.less new file mode 100644 index 000000000..66768c854 --- /dev/null +++ b/node_modules/less/test/less/errors/import-malformed.less @@ -0,0 +1 @@ +@import malformed "this-statement-is-invalid.less"; diff --git a/node_modules/less/test/less/errors/import-malformed.txt b/node_modules/less/test/less/errors/import-malformed.txt new file mode 100644 index 000000000..f8ba9f87c --- /dev/null +++ b/node_modules/less/test/less/errors/import-malformed.txt @@ -0,0 +1,3 @@ +SyntaxError: malformed import statement in {path}import-malformed.less on line 1, column 1: +1 @import malformed "this-statement-is-invalid.less"; +2 diff --git a/node_modules/less/test/less/errors/import-missing.less b/node_modules/less/test/less/errors/import-missing.less new file mode 100644 index 000000000..a8046afa5 --- /dev/null +++ b/node_modules/less/test/less/errors/import-missing.less @@ -0,0 +1,6 @@ +.a { + color: green; + // tests line number for import reference is correct +} + +@import "file-does-not-exist.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/import-missing.txt b/node_modules/less/test/less/errors/import-missing.txt new file mode 100644 index 000000000..5602b0f8b --- /dev/null +++ b/node_modules/less/test/less/errors/import-missing.txt @@ -0,0 +1,3 @@ +FileError: '{pathhref}file-does-not-exist.less' wasn't found{404status}{node}. Tried - {path}file-does-not-exist.less,{pathrel}file-does-not-exist.less,file-does-not-exist.less{/node} in {path}import-missing.less on line 6, column 1: +5 +6 @import "file-does-not-exist.less"; diff --git a/node_modules/less/test/less/errors/import-no-semi.less b/node_modules/less/test/less/errors/import-no-semi.less new file mode 100644 index 000000000..bf2c7f65f --- /dev/null +++ b/node_modules/less/test/less/errors/import-no-semi.less @@ -0,0 +1 @@ +@import "this-statement-is-invalid.less" \ No newline at end of file diff --git a/node_modules/less/test/less/errors/import-no-semi.txt b/node_modules/less/test/less/errors/import-no-semi.txt new file mode 100644 index 000000000..aaa4ac583 --- /dev/null +++ b/node_modules/less/test/less/errors/import-no-semi.txt @@ -0,0 +1,2 @@ +SyntaxError: missing semi-colon or unrecognised media features on import in {path}import-no-semi.less on line 1, column 1: +1 @import "this-statement-is-invalid.less" diff --git a/node_modules/less/test/less/errors/import-subfolder1.less b/node_modules/less/test/less/errors/import-subfolder1.less new file mode 100644 index 000000000..4280673b5 --- /dev/null +++ b/node_modules/less/test/less/errors/import-subfolder1.less @@ -0,0 +1 @@ +@import "imports/import-subfolder1.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/import-subfolder1.txt b/node_modules/less/test/less/errors/import-subfolder1.txt new file mode 100644 index 000000000..976292765 --- /dev/null +++ b/node_modules/less/test/less/errors/import-subfolder1.txt @@ -0,0 +1,3 @@ +NameError: .mixin-not-defined is undefined in {path}mixin-not-defined.less on line 11, column 1: +10 +11 .mixin-not-defined(); diff --git a/node_modules/less/test/less/errors/import-subfolder2.less b/node_modules/less/test/less/errors/import-subfolder2.less new file mode 100644 index 000000000..a6b9b9ce9 --- /dev/null +++ b/node_modules/less/test/less/errors/import-subfolder2.less @@ -0,0 +1 @@ +@import "imports/import-subfolder2.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/import-subfolder2.txt b/node_modules/less/test/less/errors/import-subfolder2.txt new file mode 100644 index 000000000..59cf5bd9f --- /dev/null +++ b/node_modules/less/test/less/errors/import-subfolder2.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input. Possibly missing opening '{' in {path}parse-error-curly-bracket.less on line 4, column 1: +3 } +4 } +5 diff --git a/node_modules/less/test/less/errors/imports/import-subfolder1.less b/node_modules/less/test/less/errors/imports/import-subfolder1.less new file mode 100644 index 000000000..24ec0532a --- /dev/null +++ b/node_modules/less/test/less/errors/imports/import-subfolder1.less @@ -0,0 +1 @@ +@import "subfolder/mixin-not-defined.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/imports/import-subfolder2.less b/node_modules/less/test/less/errors/imports/import-subfolder2.less new file mode 100644 index 000000000..6058ad14e --- /dev/null +++ b/node_modules/less/test/less/errors/imports/import-subfolder2.less @@ -0,0 +1 @@ +@import "subfolder/parse-error-curly-bracket.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/imports/import-test.less b/node_modules/less/test/less/errors/imports/import-test.less new file mode 100644 index 000000000..a91ae0544 --- /dev/null +++ b/node_modules/less/test/less/errors/imports/import-test.less @@ -0,0 +1,4 @@ +.someclass +{ + font-weight: bold; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/imports/subfolder/mixin-not-defined.less b/node_modules/less/test/less/errors/imports/subfolder/mixin-not-defined.less new file mode 100644 index 000000000..2bb2d0916 --- /dev/null +++ b/node_modules/less/test/less/errors/imports/subfolder/mixin-not-defined.less @@ -0,0 +1 @@ +@import "../../mixin-not-defined.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/imports/subfolder/parse-error-curly-bracket.less b/node_modules/less/test/less/errors/imports/subfolder/parse-error-curly-bracket.less new file mode 100644 index 000000000..f37fa9d00 --- /dev/null +++ b/node_modules/less/test/less/errors/imports/subfolder/parse-error-curly-bracket.less @@ -0,0 +1 @@ +@import "../../parse-error-curly-bracket.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/javascript-error.less b/node_modules/less/test/less/errors/javascript-error.less new file mode 100644 index 000000000..9332a37d8 --- /dev/null +++ b/node_modules/less/test/less/errors/javascript-error.less @@ -0,0 +1,3 @@ +.scope { + var: `this.foo.toJS`; +} diff --git a/node_modules/less/test/less/errors/javascript-error.txt b/node_modules/less/test/less/errors/javascript-error.txt new file mode 100644 index 000000000..e5f7dc39e --- /dev/null +++ b/node_modules/less/test/less/errors/javascript-error.txt @@ -0,0 +1,4 @@ +SyntaxError: JavaScript evaluation error: 'TypeError: Cannot read property 'toJS' of undefined' in {path}javascript-error.less on line 2, column 10: +1 .scope { +2 var: `this.foo.toJS`; +3 } diff --git a/node_modules/less/test/less/errors/javascript-undefined-var.less b/node_modules/less/test/less/errors/javascript-undefined-var.less new file mode 100644 index 000000000..7cd580c4a --- /dev/null +++ b/node_modules/less/test/less/errors/javascript-undefined-var.less @@ -0,0 +1,3 @@ +.scope { + @a: `@{b}`; +} diff --git a/node_modules/less/test/less/errors/javascript-undefined-var.txt b/node_modules/less/test/less/errors/javascript-undefined-var.txt new file mode 100644 index 000000000..e9710dce9 --- /dev/null +++ b/node_modules/less/test/less/errors/javascript-undefined-var.txt @@ -0,0 +1,4 @@ +NameError: variable @b is undefined in {path}javascript-undefined-var.less on line 2, column 9: +1 .scope { +2 @a: `@{b}`; +3 } diff --git a/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.less b/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.less new file mode 100644 index 000000000..9b0e23afa --- /dev/null +++ b/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.less @@ -0,0 +1,6 @@ +.mixin(@a : 4, @b : 3, @c: 2) { + will: fail; +} +.mixin-test { + .mixin(@a: 5; @b: 6, @c: 7); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.txt b/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.txt new file mode 100644 index 000000000..a07f5e9d9 --- /dev/null +++ b/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.txt @@ -0,0 +1,4 @@ +SyntaxError: Cannot mix ; and , as delimiter types in {path}mixed-mixin-definition-args-1.less on line 5, column 30: +4 .mixin-test { +5 .mixin(@a: 5; @b: 6, @c: 7); +6 } diff --git a/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.less b/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.less new file mode 100644 index 000000000..c9709427a --- /dev/null +++ b/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.less @@ -0,0 +1,6 @@ +.mixin(@a : 4, @b : 3, @c: 2) { + will: fail; +} +.mixin-test { + .mixin(@a: 5, @b: 6; @c: 7); +} diff --git a/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.txt b/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.txt new file mode 100644 index 000000000..fa00183b2 --- /dev/null +++ b/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.txt @@ -0,0 +1,4 @@ +SyntaxError: Cannot mix ; and , as delimiter types in {path}mixed-mixin-definition-args-2.less on line 5, column 26: +4 .mixin-test { +5 .mixin(@a: 5, @b: 6; @c: 7); +6 } diff --git a/node_modules/less/test/less/errors/mixin-not-defined.less b/node_modules/less/test/less/errors/mixin-not-defined.less new file mode 100644 index 000000000..e2dad5cea --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-defined.less @@ -0,0 +1,11 @@ + +.error-is-further-on() { +} + +.pad-here-to-reproduce-error-in() { +} + +.the-import-subfolder-test() { +} + +.mixin-not-defined(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/mixin-not-defined.txt b/node_modules/less/test/less/errors/mixin-not-defined.txt new file mode 100644 index 000000000..976292765 --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-defined.txt @@ -0,0 +1,3 @@ +NameError: .mixin-not-defined is undefined in {path}mixin-not-defined.less on line 11, column 1: +10 +11 .mixin-not-defined(); diff --git a/node_modules/less/test/less/errors/mixin-not-matched.less b/node_modules/less/test/less/errors/mixin-not-matched.less new file mode 100644 index 000000000..be0d6b1a1 --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-matched.less @@ -0,0 +1,6 @@ +@saxofon:trumpete; + +.mixin(saxofon) { +} + +.mixin(@saxofon); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/mixin-not-matched.txt b/node_modules/less/test/less/errors/mixin-not-matched.txt new file mode 100644 index 000000000..57df97728 --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-matched.txt @@ -0,0 +1,3 @@ +RuntimeError: No matching definition was found for `.mixin(trumpete)` in {path}mixin-not-matched.less on line 6, column 1: +5 +6 .mixin(@saxofon); diff --git a/node_modules/less/test/less/errors/mixin-not-matched2.less b/node_modules/less/test/less/errors/mixin-not-matched2.less new file mode 100644 index 000000000..14f44bf32 --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-matched2.less @@ -0,0 +1,6 @@ +@saxofon:trumpete; + +.mixin(@a, @b) { +} + +.mixin(@a: @saxofon); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/mixin-not-matched2.txt b/node_modules/less/test/less/errors/mixin-not-matched2.txt new file mode 100644 index 000000000..dceedaf05 --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-matched2.txt @@ -0,0 +1,3 @@ +RuntimeError: No matching definition was found for `.mixin(@a:trumpete)` in {path}mixin-not-matched2.less on line 6, column 1: +5 +6 .mixin(@a: @saxofon); diff --git a/node_modules/less/test/less/errors/mixin-not-visible-in-scope-1.less b/node_modules/less/test/less/errors/mixin-not-visible-in-scope-1.less new file mode 100644 index 000000000..2842613ef --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-visible-in-scope-1.less @@ -0,0 +1,9 @@ +.something { + & { + .a {value: a} + } + + & { + .b {.a} // was Err. before 1.6.2 + } +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/mixin-not-visible-in-scope-1.txt b/node_modules/less/test/less/errors/mixin-not-visible-in-scope-1.txt new file mode 100644 index 000000000..15e64dc20 --- /dev/null +++ b/node_modules/less/test/less/errors/mixin-not-visible-in-scope-1.txt @@ -0,0 +1,4 @@ +NameError: .a is undefined in {path}mixin-not-visible-in-scope-1.less on line 7, column 13: +6 & { +7 .b {.a} // was Err. before 1.6.2 +8 } diff --git a/node_modules/less/test/less/errors/mixins-guards-default-func-1.less b/node_modules/less/test/less/errors/mixins-guards-default-func-1.less new file mode 100644 index 000000000..dc90b86b6 --- /dev/null +++ b/node_modules/less/test/less/errors/mixins-guards-default-func-1.less @@ -0,0 +1,9 @@ + +guard-default-func-conflict { + .m(@x, 1) {} + .m(@x, 2) when (default()) {} + .m(@x, 2) when (default()) {} + + .m(1, 1); + .m(1, 2); +} diff --git a/node_modules/less/test/less/errors/mixins-guards-default-func-1.txt b/node_modules/less/test/less/errors/mixins-guards-default-func-1.txt new file mode 100644 index 000000000..e6aaa0a19 --- /dev/null +++ b/node_modules/less/test/less/errors/mixins-guards-default-func-1.txt @@ -0,0 +1,4 @@ +RuntimeError: Ambiguous use of `default()` found when matching for `.m(1, 2)` in {path}mixins-guards-default-func-1.less on line 8, column 5: +7 .m(1, 1); +8 .m(1, 2); +9 } diff --git a/node_modules/less/test/less/errors/mixins-guards-default-func-2.less b/node_modules/less/test/less/errors/mixins-guards-default-func-2.less new file mode 100644 index 000000000..079b57379 --- /dev/null +++ b/node_modules/less/test/less/errors/mixins-guards-default-func-2.less @@ -0,0 +1,9 @@ + +guard-default-func-conflict { + .m(1) {} + .m(@x) when not(default()) {} + .m(@x) when (@x = 3) and (default()) {} + + .m(2); + .m(3); +} diff --git a/node_modules/less/test/less/errors/mixins-guards-default-func-2.txt b/node_modules/less/test/less/errors/mixins-guards-default-func-2.txt new file mode 100644 index 000000000..99a3a66f3 --- /dev/null +++ b/node_modules/less/test/less/errors/mixins-guards-default-func-2.txt @@ -0,0 +1,4 @@ +RuntimeError: Ambiguous use of `default()` found when matching for `.m(3)` in {path}mixins-guards-default-func-2.less on line 8, column 5: +7 .m(2); +8 .m(3); +9 } diff --git a/node_modules/less/test/less/errors/mixins-guards-default-func-3.less b/node_modules/less/test/less/errors/mixins-guards-default-func-3.less new file mode 100644 index 000000000..ec357fa18 --- /dev/null +++ b/node_modules/less/test/less/errors/mixins-guards-default-func-3.less @@ -0,0 +1,9 @@ + +guard-default-func-conflict { + .m(1) {} + .m(@x) when not(default()) {} + .m(@x) when not(default()) {} + + .m(1); + .m(2); +} diff --git a/node_modules/less/test/less/errors/mixins-guards-default-func-3.txt b/node_modules/less/test/less/errors/mixins-guards-default-func-3.txt new file mode 100644 index 000000000..0a85a34cc --- /dev/null +++ b/node_modules/less/test/less/errors/mixins-guards-default-func-3.txt @@ -0,0 +1,4 @@ +RuntimeError: Ambiguous use of `default()` found when matching for `.m(2)` in {path}mixins-guards-default-func-3.less on line 8, column 5: +7 .m(1); +8 .m(2); +9 } diff --git a/node_modules/less/test/less/errors/multiple-guards-on-css-selectors.less b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors.less new file mode 100644 index 000000000..4eabb60a1 --- /dev/null +++ b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors.less @@ -0,0 +1,4 @@ +@ie8: true; +.a when (@ie8 = true), +.b { +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/multiple-guards-on-css-selectors.txt b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors.txt new file mode 100644 index 000000000..3d23e26bc --- /dev/null +++ b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors.txt @@ -0,0 +1,4 @@ +SyntaxError: Guards are only currently allowed on a single selector. in {path}multiple-guards-on-css-selectors.less on line 3, column 1: +2 .a when (@ie8 = true), +3 .b { +4 } diff --git a/node_modules/less/test/less/errors/multiple-guards-on-css-selectors2.less b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors2.less new file mode 100644 index 000000000..4b1bc6ff4 --- /dev/null +++ b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors2.less @@ -0,0 +1,4 @@ +@ie8: true; +.a, +.b when (@ie8 = true) { +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/multiple-guards-on-css-selectors2.txt b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors2.txt new file mode 100644 index 000000000..d0e5a52bd --- /dev/null +++ b/node_modules/less/test/less/errors/multiple-guards-on-css-selectors2.txt @@ -0,0 +1,4 @@ +SyntaxError: Guards are only currently allowed on a single selector. in {path}multiple-guards-on-css-selectors2.less on line 3, column 23: +2 .a, +3 .b when (@ie8 = true) { +4 } diff --git a/node_modules/less/test/less/errors/multiply-mixed-units.less b/node_modules/less/test/less/errors/multiply-mixed-units.less new file mode 100644 index 000000000..ff983a85e --- /dev/null +++ b/node_modules/less/test/less/errors/multiply-mixed-units.less @@ -0,0 +1,7 @@ +/* Test */ +#blah { + // blah +} +.a { + error: (1px * 1em); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/multiply-mixed-units.txt b/node_modules/less/test/less/errors/multiply-mixed-units.txt new file mode 100644 index 000000000..9ed834f1d --- /dev/null +++ b/node_modules/less/test/less/errors/multiply-mixed-units.txt @@ -0,0 +1,4 @@ +SyntaxError: Multiple units in dimension. Correct the units or use the unit function. Bad unit: em*px in {path}multiply-mixed-units.less on line 6, column 3: +5 .a { +6 error: (1px * 1em); +7 } diff --git a/node_modules/less/test/less/errors/parens-error-1.less b/node_modules/less/test/less/errors/parens-error-1.less new file mode 100644 index 000000000..7c8ec10e6 --- /dev/null +++ b/node_modules/less/test/less/errors/parens-error-1.less @@ -0,0 +1,3 @@ +.a { + something: (12 (13 + 5 -23) + 5); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/parens-error-1.txt b/node_modules/less/test/less/errors/parens-error-1.txt new file mode 100644 index 000000000..35be175c6 --- /dev/null +++ b/node_modules/less/test/less/errors/parens-error-1.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}parens-error-1.less on line 2, column 18: +1 .a { +2 something: (12 (13 + 5 -23) + 5); +3 } diff --git a/node_modules/less/test/less/errors/parens-error-2.less b/node_modules/less/test/less/errors/parens-error-2.less new file mode 100644 index 000000000..4a392b8ee --- /dev/null +++ b/node_modules/less/test/less/errors/parens-error-2.less @@ -0,0 +1,3 @@ +.a { + something: (12 * (13 + 5 -23)); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/parens-error-2.txt b/node_modules/less/test/less/errors/parens-error-2.txt new file mode 100644 index 000000000..b40e4c2d9 --- /dev/null +++ b/node_modules/less/test/less/errors/parens-error-2.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}parens-error-2.less on line 2, column 28: +1 .a { +2 something: (12 * (13 + 5 -23)); +3 } diff --git a/node_modules/less/test/less/errors/parens-error-3.less b/node_modules/less/test/less/errors/parens-error-3.less new file mode 100644 index 000000000..9e6d5405b --- /dev/null +++ b/node_modules/less/test/less/errors/parens-error-3.less @@ -0,0 +1,3 @@ +.a { + something: (12 + (13 + 10 -23)); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/parens-error-3.txt b/node_modules/less/test/less/errors/parens-error-3.txt new file mode 100644 index 000000000..c6c84340e --- /dev/null +++ b/node_modules/less/test/less/errors/parens-error-3.txt @@ -0,0 +1,4 @@ +ParseError: Expected ')' in {path}parens-error-3.less on line 2, column 29: +1 .a { +2 something: (12 + (13 + 10 -23)); +3 } diff --git a/node_modules/less/test/less/errors/parse-error-curly-bracket.less b/node_modules/less/test/less/errors/parse-error-curly-bracket.less new file mode 100644 index 000000000..f78ceb701 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-curly-bracket.less @@ -0,0 +1,4 @@ +body { + background-color: #fff; + } +} diff --git a/node_modules/less/test/less/errors/parse-error-curly-bracket.txt b/node_modules/less/test/less/errors/parse-error-curly-bracket.txt new file mode 100644 index 000000000..59cf5bd9f --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-curly-bracket.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input. Possibly missing opening '{' in {path}parse-error-curly-bracket.less on line 4, column 1: +3 } +4 } +5 diff --git a/node_modules/less/test/less/errors/parse-error-media-no-block-1.less b/node_modules/less/test/less/errors/parse-error-media-no-block-1.less new file mode 100644 index 000000000..46d023a91 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-media-no-block-1.less @@ -0,0 +1,5 @@ +@media (extra: bracket)) { + body { + background-color: #fff; + } +} diff --git a/node_modules/less/test/less/errors/parse-error-media-no-block-1.txt b/node_modules/less/test/less/errors/parse-error-media-no-block-1.txt new file mode 100644 index 000000000..3af15b70c --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-media-no-block-1.txt @@ -0,0 +1,3 @@ +SyntaxError: media definitions require block statements after any features in {path}parse-error-media-no-block-1.less on line 1, column 24: +1 @media (extra: bracket)) { +2 body { diff --git a/node_modules/less/test/less/errors/parse-error-media-no-block-2.less b/node_modules/less/test/less/errors/parse-error-media-no-block-2.less new file mode 100644 index 000000000..fa957bc23 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-media-no-block-2.less @@ -0,0 +1 @@ +@media \ No newline at end of file diff --git a/node_modules/less/test/less/errors/parse-error-media-no-block-2.txt b/node_modules/less/test/less/errors/parse-error-media-no-block-2.txt new file mode 100644 index 000000000..6d774ea74 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-media-no-block-2.txt @@ -0,0 +1,2 @@ +SyntaxError: media definitions require block statements after any features in {path}parse-error-media-no-block-2.less on line 1, column 7: +1 @media diff --git a/node_modules/less/test/less/errors/parse-error-media-no-block-3.less b/node_modules/less/test/less/errors/parse-error-media-no-block-3.less new file mode 100644 index 000000000..6b1b91f08 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-media-no-block-3.less @@ -0,0 +1,4 @@ +@media (min-width: 500px) { + .sometimes-big { + font-size: 5000px; + } \ No newline at end of file diff --git a/node_modules/less/test/less/errors/parse-error-media-no-block-3.txt b/node_modules/less/test/less/errors/parse-error-media-no-block-3.txt new file mode 100644 index 000000000..7bb0f4c19 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-media-no-block-3.txt @@ -0,0 +1,3 @@ +SyntaxError: media definitions require block statements after any features in {path}parse-error-media-no-block-3.less on line 4, column 4: +3 font-size: 5000px; +4 } diff --git a/node_modules/less/test/less/errors/parse-error-missing-bracket.less b/node_modules/less/test/less/errors/parse-error-missing-bracket.less new file mode 100644 index 000000000..144a6edf7 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-missing-bracket.less @@ -0,0 +1,2 @@ +body { + background-color: #fff; diff --git a/node_modules/less/test/less/errors/parse-error-missing-bracket.txt b/node_modules/less/test/less/errors/parse-error-missing-bracket.txt new file mode 100644 index 000000000..307bbd4aa --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-missing-bracket.txt @@ -0,0 +1,3 @@ +ParseError: Unrecognised input. Possibly missing something in {path}parse-error-missing-bracket.less on line 3, column 1: +2 background-color: #fff; +3 diff --git a/node_modules/less/test/less/errors/parse-error-missing-parens.less b/node_modules/less/test/less/errors/parse-error-missing-parens.less new file mode 100644 index 000000000..55d257912 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-missing-parens.less @@ -0,0 +1,5 @@ +@media (missing: bracket { + body { + background-color: #fff; + } +} diff --git a/node_modules/less/test/less/errors/parse-error-missing-parens.txt b/node_modules/less/test/less/errors/parse-error-missing-parens.txt new file mode 100644 index 000000000..b5998fed4 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-missing-parens.txt @@ -0,0 +1,3 @@ +ParseError: Missing closing ')' in {path}parse-error-missing-parens.less on line 1, column 26: +1 @media (missing: bracket { +2 body { diff --git a/node_modules/less/test/less/errors/parse-error-with-import.less b/node_modules/less/test/less/errors/parse-error-with-import.less new file mode 100644 index 000000000..6be3de853 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-with-import.less @@ -0,0 +1,13 @@ +@import 'import/import-test.less'; + +body +{ + font-family: arial, sans-serif; +} + +nonsense; + +.clickable +{ + cursor: pointer; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/parse-error-with-import.txt b/node_modules/less/test/less/errors/parse-error-with-import.txt new file mode 100644 index 000000000..07732c929 --- /dev/null +++ b/node_modules/less/test/less/errors/parse-error-with-import.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input in {path}parse-error-with-import.less on line 8, column 9: +7 +8 nonsense; +9 diff --git a/node_modules/less/test/less/errors/percentage-missing-space.less b/node_modules/less/test/less/errors/percentage-missing-space.less new file mode 100644 index 000000000..247f77331 --- /dev/null +++ b/node_modules/less/test/less/errors/percentage-missing-space.less @@ -0,0 +1,3 @@ +.a { + error: calc(1 %); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/percentage-missing-space.txt b/node_modules/less/test/less/errors/percentage-missing-space.txt new file mode 100644 index 000000000..776d8d5d7 --- /dev/null +++ b/node_modules/less/test/less/errors/percentage-missing-space.txt @@ -0,0 +1,4 @@ +SyntaxError: Invalid % without number in {path}percentage-missing-space.less on line 2, column 3: +1 .a { +2 error: calc(1 %); +3 } diff --git a/node_modules/less/test/less/errors/percentage-non-number-argument.less b/node_modules/less/test/less/errors/percentage-non-number-argument.less new file mode 100644 index 000000000..d6c6cf64c --- /dev/null +++ b/node_modules/less/test/less/errors/percentage-non-number-argument.less @@ -0,0 +1,3 @@ +div { + percentage: percentage(16/17); +} diff --git a/node_modules/less/test/less/errors/percentage-non-number-argument.txt b/node_modules/less/test/less/errors/percentage-non-number-argument.txt new file mode 100644 index 000000000..f01a1e546 --- /dev/null +++ b/node_modules/less/test/less/errors/percentage-non-number-argument.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `percentage`: argument must be a number in {path}percentage-non-number-argument.less on line 2, column 15: +1 div { +2 percentage: percentage(16/17); +3 } diff --git a/node_modules/less/test/less/errors/property-asterisk-only-name.less b/node_modules/less/test/less/errors/property-asterisk-only-name.less new file mode 100644 index 000000000..c6a9990ca --- /dev/null +++ b/node_modules/less/test/less/errors/property-asterisk-only-name.less @@ -0,0 +1,3 @@ +a { + * : 1; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/property-asterisk-only-name.txt b/node_modules/less/test/less/errors/property-asterisk-only-name.txt new file mode 100644 index 000000000..b81d7570b --- /dev/null +++ b/node_modules/less/test/less/errors/property-asterisk-only-name.txt @@ -0,0 +1,4 @@ +ParseError: Unrecognised input in {path}property-asterisk-only-name.less on line 2, column 7: +1 a { +2 * : 1; +3 } diff --git a/node_modules/less/test/less/errors/property-ie5-hack.less b/node_modules/less/test/less/errors/property-ie5-hack.less new file mode 100644 index 000000000..51bf6e397 --- /dev/null +++ b/node_modules/less/test/less/errors/property-ie5-hack.less @@ -0,0 +1,3 @@ +.test { + display/*/: block; /*sorry for IE5*/ +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/property-ie5-hack.txt b/node_modules/less/test/less/errors/property-ie5-hack.txt new file mode 100644 index 000000000..434943f32 --- /dev/null +++ b/node_modules/less/test/less/errors/property-ie5-hack.txt @@ -0,0 +1,3 @@ +ParseError: Unrecognised input. Possibly missing opening '{' in {path}property-ie5-hack.less on line 3, column 1: +2 display/*/: block; /*sorry for IE5*/ +3 } diff --git a/node_modules/less/test/less/errors/property-in-root.less b/node_modules/less/test/less/errors/property-in-root.less new file mode 100644 index 000000000..8fed4be3b --- /dev/null +++ b/node_modules/less/test/less/errors/property-in-root.less @@ -0,0 +1,4 @@ +.a() { + prop:1; +} +.a(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/property-in-root.txt b/node_modules/less/test/less/errors/property-in-root.txt new file mode 100644 index 000000000..10c985344 --- /dev/null +++ b/node_modules/less/test/less/errors/property-in-root.txt @@ -0,0 +1,4 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}property-in-root.less on line 2, column 3: +1 .a() { +2 prop:1; +3 } diff --git a/node_modules/less/test/less/errors/property-in-root2.less b/node_modules/less/test/less/errors/property-in-root2.less new file mode 100644 index 000000000..ce8656d17 --- /dev/null +++ b/node_modules/less/test/less/errors/property-in-root2.less @@ -0,0 +1 @@ +@import "property-in-root"; \ No newline at end of file diff --git a/node_modules/less/test/less/errors/property-in-root2.txt b/node_modules/less/test/less/errors/property-in-root2.txt new file mode 100644 index 000000000..10c985344 --- /dev/null +++ b/node_modules/less/test/less/errors/property-in-root2.txt @@ -0,0 +1,4 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}property-in-root.less on line 2, column 3: +1 .a() { +2 prop:1; +3 } diff --git a/node_modules/less/test/less/errors/property-in-root3.less b/node_modules/less/test/less/errors/property-in-root3.less new file mode 100644 index 000000000..056c2f72a --- /dev/null +++ b/node_modules/less/test/less/errors/property-in-root3.less @@ -0,0 +1,4 @@ +prop:1; +.a { + prop:1; +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/property-in-root3.txt b/node_modules/less/test/less/errors/property-in-root3.txt new file mode 100644 index 000000000..13a49052e --- /dev/null +++ b/node_modules/less/test/less/errors/property-in-root3.txt @@ -0,0 +1,3 @@ +SyntaxError: Properties must be inside selector blocks. They cannot be in the root in {path}property-in-root3.less on line 1, column 1: +1 prop:1; +2 .a { diff --git a/node_modules/less/test/less/errors/property-interp-not-defined.less b/node_modules/less/test/less/errors/property-interp-not-defined.less new file mode 100644 index 000000000..544fd5f9c --- /dev/null +++ b/node_modules/less/test/less/errors/property-interp-not-defined.less @@ -0,0 +1 @@ +a {outline-@{color}: green} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/property-interp-not-defined.txt b/node_modules/less/test/less/errors/property-interp-not-defined.txt new file mode 100644 index 000000000..dc803564f --- /dev/null +++ b/node_modules/less/test/less/errors/property-interp-not-defined.txt @@ -0,0 +1,2 @@ +NameError: variable @color is undefined in {path}property-interp-not-defined.less on line 1, column 12: +1 a {outline-@{color}: green} diff --git a/node_modules/less/test/less/errors/recursive-variable.less b/node_modules/less/test/less/errors/recursive-variable.less new file mode 100644 index 000000000..c1ca75f11 --- /dev/null +++ b/node_modules/less/test/less/errors/recursive-variable.less @@ -0,0 +1 @@ +@bodyColor: darken(@bodyColor, 30%); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/recursive-variable.txt b/node_modules/less/test/less/errors/recursive-variable.txt new file mode 100644 index 000000000..eb616e7d2 --- /dev/null +++ b/node_modules/less/test/less/errors/recursive-variable.txt @@ -0,0 +1,2 @@ +NameError: Recursive variable definition for @bodyColor in {path}recursive-variable.less on line 1, column 20: +1 @bodyColor: darken(@bodyColor, 30%); diff --git a/node_modules/less/test/less/errors/root-func-undefined-1.less b/node_modules/less/test/less/errors/root-func-undefined-1.less new file mode 100644 index 000000000..e5bacda6b --- /dev/null +++ b/node_modules/less/test/less/errors/root-func-undefined-1.less @@ -0,0 +1 @@ +func(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/root-func-undefined-1.txt b/node_modules/less/test/less/errors/root-func-undefined-1.txt new file mode 100644 index 000000000..a07480e61 --- /dev/null +++ b/node_modules/less/test/less/errors/root-func-undefined-1.txt @@ -0,0 +1,2 @@ +SyntaxError: Function 'func' is undefined in {path}root-func-undefined-1.less on line 1, column 1: +1 func(); diff --git a/node_modules/less/test/less/errors/root-func-undefined-2.less b/node_modules/less/test/less/errors/root-func-undefined-2.less new file mode 100644 index 000000000..ee34616e1 --- /dev/null +++ b/node_modules/less/test/less/errors/root-func-undefined-2.less @@ -0,0 +1,2 @@ +@plugin "../plugin/plugin-tree-nodes.js"; +test-undefined(); \ No newline at end of file diff --git a/node_modules/less/test/less/errors/root-func-undefined-2.txt b/node_modules/less/test/less/errors/root-func-undefined-2.txt new file mode 100644 index 000000000..031385d01 --- /dev/null +++ b/node_modules/less/test/less/errors/root-func-undefined-2.txt @@ -0,0 +1,3 @@ +SyntaxError: Function 'test-undefined' is undefined in {path}root-func-undefined-2.less on line 2, column 1: +1 @plugin "../plugin/plugin-tree-nodes.js"; +2 test-undefined(); diff --git a/node_modules/less/test/less/errors/single-character.less b/node_modules/less/test/less/errors/single-character.less new file mode 100644 index 000000000..c1b0730e0 --- /dev/null +++ b/node_modules/less/test/less/errors/single-character.less @@ -0,0 +1 @@ +x \ No newline at end of file diff --git a/node_modules/less/test/less/errors/single-character.txt b/node_modules/less/test/less/errors/single-character.txt new file mode 100644 index 000000000..b9e49a5e3 --- /dev/null +++ b/node_modules/less/test/less/errors/single-character.txt @@ -0,0 +1,2 @@ +ParseError: Unrecognised input. Possibly missing something in {path}single-character.less on line 1, column 2: +1 x diff --git a/node_modules/less/test/less/errors/svg-gradient1.less b/node_modules/less/test/less/errors/svg-gradient1.less new file mode 100644 index 000000000..c069ff724 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient1.less @@ -0,0 +1,3 @@ +.a { + a: svg-gradient(horizontal, black, white); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/svg-gradient1.txt b/node_modules/less/test/less/errors/svg-gradient1.txt new file mode 100644 index 000000000..ec662fe60 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient1.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient1.less on line 2, column 6: +1 .a { +2 a: svg-gradient(horizontal, black, white); +3 } diff --git a/node_modules/less/test/less/errors/svg-gradient2.less b/node_modules/less/test/less/errors/svg-gradient2.less new file mode 100644 index 000000000..ff14ef110 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient2.less @@ -0,0 +1,3 @@ +.a { + a: svg-gradient(to bottom, black, orange, 45%, white); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/svg-gradient2.txt b/node_modules/less/test/less/errors/svg-gradient2.txt new file mode 100644 index 000000000..1f2e1bfc9 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient2.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position] or direction, color list in {path}svg-gradient2.less on line 2, column 6: +1 .a { +2 a: svg-gradient(to bottom, black, orange, 45%, white); +3 } diff --git a/node_modules/less/test/less/errors/svg-gradient3.less b/node_modules/less/test/less/errors/svg-gradient3.less new file mode 100644 index 000000000..8f1852460 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient3.less @@ -0,0 +1,3 @@ +.a { + a: svg-gradient(black, orange); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/svg-gradient3.txt b/node_modules/less/test/less/errors/svg-gradient3.txt new file mode 100644 index 000000000..f77a353ac --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient3.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient3.less on line 2, column 6: +1 .a { +2 a: svg-gradient(black, orange); +3 } diff --git a/node_modules/less/test/less/errors/svg-gradient4.less b/node_modules/less/test/less/errors/svg-gradient4.less new file mode 100644 index 000000000..ae32ceb6b --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient4.less @@ -0,0 +1,4 @@ +.a { + a: svg-gradient(horizontal, @colors); +} +@colors: black, white; diff --git a/node_modules/less/test/less/errors/svg-gradient4.txt b/node_modules/less/test/less/errors/svg-gradient4.txt new file mode 100644 index 000000000..c0d41e94f --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient4.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient4.less on line 2, column 6: +1 .a { +2 a: svg-gradient(horizontal, @colors); +3 } diff --git a/node_modules/less/test/less/errors/svg-gradient5.less b/node_modules/less/test/less/errors/svg-gradient5.less new file mode 100644 index 000000000..6b5ac2cbc --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient5.less @@ -0,0 +1,4 @@ +.a { + a: svg-gradient(to bottom, @colors); +} +@colors: black, orange, 45%, white; diff --git a/node_modules/less/test/less/errors/svg-gradient5.txt b/node_modules/less/test/less/errors/svg-gradient5.txt new file mode 100644 index 000000000..41f8f46f2 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient5.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position] or direction, color list in {path}svg-gradient5.less on line 2, column 6: +1 .a { +2 a: svg-gradient(to bottom, @colors); +3 } diff --git a/node_modules/less/test/less/errors/svg-gradient6.less b/node_modules/less/test/less/errors/svg-gradient6.less new file mode 100644 index 000000000..fca76e638 --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient6.less @@ -0,0 +1,4 @@ +.a { + a: svg-gradient(black, @colors); +} +@colors: orange; diff --git a/node_modules/less/test/less/errors/svg-gradient6.txt b/node_modules/less/test/less/errors/svg-gradient6.txt new file mode 100644 index 000000000..2ce85cf6b --- /dev/null +++ b/node_modules/less/test/less/errors/svg-gradient6.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `svg-gradient`: svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center' in {path}svg-gradient6.less on line 2, column 6: +1 .a { +2 a: svg-gradient(black, @colors); +3 } diff --git a/node_modules/less/test/less/errors/unit-function.less b/node_modules/less/test/less/errors/unit-function.less new file mode 100644 index 000000000..119e9818f --- /dev/null +++ b/node_modules/less/test/less/errors/unit-function.less @@ -0,0 +1,3 @@ +.a { + font-size: unit(80/16,rem); +} \ No newline at end of file diff --git a/node_modules/less/test/less/errors/unit-function.txt b/node_modules/less/test/less/errors/unit-function.txt new file mode 100644 index 000000000..baf90f422 --- /dev/null +++ b/node_modules/less/test/less/errors/unit-function.txt @@ -0,0 +1,4 @@ +ArgumentError: error evaluating function `unit`: the first argument to unit must be a number. Have you forgotten parenthesis? in {path}unit-function.less on line 2, column 14: +1 .a { +2 font-size: unit(80/16,rem); +3 } diff --git a/node_modules/less/test/less/extend-chaining.less b/node_modules/less/test/less/extend-chaining.less new file mode 100644 index 000000000..ac8a475b1 --- /dev/null +++ b/node_modules/less/test/less/extend-chaining.less @@ -0,0 +1,91 @@ +//very simple chaining +.a { + color: black; +} +.b:extend(.a) {} +.c:extend(.b) {} + +//very simple chaining, ordering not important + +.d:extend(.e) {} +.e:extend(.f) {} +.f { + color: black; +} + +//extend with all + +.g.h { + color: black; +} +.i.j:extend(.g all) { + color: white; +} +.k:extend(.i all) {} + +//extend multi-chaining + +.l { + color: black; +} +.m:extend(.l){} +.n:extend(.m){} +.o:extend(.n){} +.p:extend(.o){} +.q:extend(.p){} +.r:extend(.q){} +.s:extend(.r){} +.t:extend(.s){} + +// self referencing is ignored + +.u {color: black;} +.v.u.v:extend(.u all){} + +// circular reference because the new extend product will match the existing extend + +.w:extend(.w) {color: black;} +.v.w.v:extend(.w all){} + +// classic circular references + +.x:extend(.z) { + color: x; +} +.y:extend(.x) { + color: y; +} +.z:extend(.y) { + color: z; +} + +//very simple chaining, but with the extend inside the ruleset +.va { + color: black; +} +.vb { + &:extend(.va); + color: white; +} +.vc { + &:extend(.vb); +} + +// media queries - don't extend outside, do extend inside + +@media tv { + .ma:extend(.a,.b,.c,.d,.e,.f,.g,.h,.i,.j,.k,.l,.m,.n,.o,.p,.q,.r,.s,.t,.u,.v,.w,.x,.y,.z,.md) { + color: black; + } + .md { + color: white; + } + @media plasma { + .me, .mf { + &:extend(.mb,.md); + background: red; + } + } +} +.mb:extend(.ma) {}; +.mc:extend(.mb) {}; \ No newline at end of file diff --git a/node_modules/less/test/less/extend-clearfix.less b/node_modules/less/test/less/extend-clearfix.less new file mode 100644 index 000000000..82445dfa5 --- /dev/null +++ b/node_modules/less/test/less/extend-clearfix.less @@ -0,0 +1,19 @@ +.clearfix { + *zoom: 1; + &:after { + content: ''; + display: block; + clear: both; + height: 0; + } +} + +.foo { + &:extend(.clearfix all); + color: red; +} + +.bar { + &:extend(.clearfix all); + color: blue; +} diff --git a/node_modules/less/test/less/extend-exact.less b/node_modules/less/test/less/extend-exact.less new file mode 100644 index 000000000..41dc41300 --- /dev/null +++ b/node_modules/less/test/less/extend-exact.less @@ -0,0 +1,46 @@ +.replace.replace, +.c.replace + .replace { + .replace, + .c { + prop: copy-paste-replace; + } +} +.rep_ace:extend(.replace.replace .replace) {} + +.a .b .c { + prop: not_effected; +} + +.a { + prop: is_effected; + .b { + prop: not_effected; + } + .b.c { + prop: not_effected; + } +} + +.c, .a { + .b, .a { + .a, .c { + prop: not_effected; + } + } +} + +.effected { + &:extend(.a); + &:extend(.b); + &:extend(.c); +} + +.e { + && { + prop: extend-double; + &:hover { + hover: not-extended; + } + } +} +.dbl:extend(.e.e) {} diff --git a/node_modules/less/test/less/extend-media.less b/node_modules/less/test/less/extend-media.less new file mode 100644 index 000000000..1b22c3faf --- /dev/null +++ b/node_modules/less/test/less/extend-media.less @@ -0,0 +1,24 @@ +.ext1 .ext2 { + background: black; +} + +@media tv { + .ext1 .ext3 { + color: white; + } + .tv-lowres :extend(.ext1 all) { + background: blue; + } + @media hires { + .ext1 .ext4 { + color: green; + } + .tv-hires :extend(.ext1 all) { + background: red; + } + } +} + +.all:extend(.ext1 all) { + +} \ No newline at end of file diff --git a/node_modules/less/test/less/extend-nest.less b/node_modules/less/test/less/extend-nest.less new file mode 100644 index 000000000..9d4d27bbc --- /dev/null +++ b/node_modules/less/test/less/extend-nest.less @@ -0,0 +1,65 @@ +.sidebar { + width: 300px; + background: red; + + .box { + background: #FFF; + border: 1px solid #000; + margin: 10px 0; + } +} + +.sidebar2 { + &:extend(.sidebar all); + background: blue; +} + +.type1 { + .sidebar3 { + &:extend(.sidebar all); + background: green; + } +} + +.type2 { + &.sidebar4 { + &:extend(.sidebar all); + background: red; + } +} + +.button { + color: black; + &:hover { + color: white; + } +} +.submit { + &:extend(.button); + &:hover:extend(.button:hover) {} +} + +.nomatch { + &:hover:extend(.button :hover) {} +} + +.button2 { + :hover { + nested: white; + } +} +.button2 :hover { + notnested: black; +} + +.nomatch :extend(.button2:hover) {} + +.amp-test-a, +.amp-test-b { + .amp-test-c &.amp-test-d&.amp-test-e { + .amp-test-f&+&.amp-test-g:extend(.amp-test-h) {} + } +} +.amp-test-h { + test: extended by masses of selectors; +} \ No newline at end of file diff --git a/node_modules/less/test/less/extend-selector.less b/node_modules/less/test/less/extend-selector.less new file mode 100644 index 000000000..39cef589b --- /dev/null +++ b/node_modules/less/test/less/extend-selector.less @@ -0,0 +1,110 @@ +.error { + border: 1px #f00; + background: #fdd; +} +.error.intrusion { + font-size: 1.3em; + font-weight: bold; +} +.intrusion .error { + display: none; +} +.badError:extend(.error all) { + border-width: 3px; +} + +.foo .bar, .foo .baz { + display: none; +} + +.ext1 .ext2 + :extend(.foo all) { +} + +.ext3:extend(.foo all), +.ext4:extend(.foo all) { +} + +div.ext5, +.ext6 > .ext5 { + width: 100px; +} + +.should-not-exist-in-output, +.ext7:extend(.ext5 all) { +} + +.ext { + test: 1; +} +// same as +// .a .c:extend(.ext all) +// .b .c:extend(.ext all) +// .a .c .d +// .b .c .d +.a, .b { + test: 2; + .c:extend(.ext all) { + test: 3; + .d { + test: 4; + } + } +} + +.replace.replace, +.c.replace + .replace { + .replace, + .c { + prop: copy-paste-replace; + } +} +.rep_ace:extend(.replace all) {} + +.attributes { + [data="test"] { + extend: attributes; + } + .attribute-test { + &:extend([data="test"] all); + } + [data] { + extend: attributes2; + } + .attribute-test2 { + &:extend([data] all); //you could argue it should match [data="test"]... not for now though... + } + @attr-data: "test3"; + [data=@{attr-data}] { + extend: attributes2; + } + .attribute-test { + &:extend([data="test3"] all); + } +} + +.header { + .header-nav { + background: red; + &:before { + background: blue; + } + } +} + +.footer { + .footer-nav { + &:extend( .header .header-nav all ); + } +} + +.issue-2586-bordered { + border: solid 1px black; +} +.issue-2586-somepage { + .content:extend(.issue-2586-bordered) { + &>span { + margin-bottom: 10px; + } + } +} diff --git a/node_modules/less/test/less/extend.less b/node_modules/less/test/less/extend.less new file mode 100644 index 000000000..1db5d431d --- /dev/null +++ b/node_modules/less/test/less/extend.less @@ -0,0 +1,81 @@ +.error { + border: 1px #f00; + background: #fdd; +} +.error.intrusion { + font-size: 1.3em; + font-weight: bold; +} +.intrusion .error { + display: none; +} +.badError { + &:extend(.error all); + border-width: 3px; +} + +.foo .bar, .foo .baz { + display: none; +} + +.ext1 .ext2 { + &:extend(.foo all); +} + +.ext3, +.ext4 { + &:extend(.foo all); + &:extend(.bar all); +} + +div.ext5, +.ext6 > .ext5 { + width: 100px; +} + +.ext7 { + &:extend(.ext5 all); +} + +.ext8.ext9 { + result: add-foo; +} +.ext8 .ext9, +.ext8 + .ext9, +.ext8 > .ext9 { + result: bar-matched; +} +.ext8.nomatch { + result: none; +} +.ext8 { + .ext9 { + result: match-nested-bar; + } +} +.ext8 { + &.ext9 { + result: match-nested-foo; + } +} + +.fuu:extend(.ext8.ext9 all) {} +.buu:extend(.ext8 .ext9 all) {} +.zap:extend(.ext8 + .ext9 all) {} +.zoo:extend(.ext8 > .ext9 all) {} + +.aa { + color: black; + .dd { + background: red; + } +} +.bb { + background: red; + .bb { + color: black; + } +} +.cc:extend(.aa,.bb) {} +.ee:extend(.dd all,.bb) {} +.ff:extend(.dd,.bb all) {} \ No newline at end of file diff --git a/node_modules/less/test/less/extract-and-length.less b/node_modules/less/test/less/extract-and-length.less new file mode 100644 index 000000000..8b1901c8d --- /dev/null +++ b/node_modules/less/test/less/extract-and-length.less @@ -0,0 +1,133 @@ + +// simple array/list: + +.multiunit { + @v: abc "abc" 1 1px 1% #123; + length: length(@v); + extract: extract(@v, 1) extract(@v, 2) extract(@v, 3) extract(@v, 4) extract(@v, 5) extract(@v, 6); +} + +.incorrect-index { + @v1: a b c; + @v2: a, b, c; + v1: extract(@v1, 5); + v2: extract(@v2, -2); +} + +.scalar { + @var: variable; + var-value: extract(@var, 1); + var-length: length(@var); + ill-index: extract(@var, 2); + + name-value: extract(name, 1); + string-value: extract("string", 1); + number-value: extract(12345678, 1); + color-value: extract(blue, 1); + rgba-value: extract(rgba(80, 160, 240, 0.67), 1); + empty-value: extract(~'', 1); + + name-length: length(name); + string-length: length("string"); + number-length: length(12345678); + color-length: length(blue); + rgba-length: length(rgba(80, 160, 240, 0.67)); + empty-length: length(~''); +} + +.mixin-arguments { + .mixin-args(a b c d); + .mixin-args(a, b, c, d); + .mixin-args(1; 2; 3; 4); +} + +.mixin-args(@value) { + &-1 { + length: length(@value); + extract: extract(@value, 3) ~"|" extract(@value, 2) ~"|" extract(@value, 1); + } +} + +.mixin-args(...) { + &-2 { + length: length(@arguments); + extract: extract(@arguments, 3) ~"|" extract(@arguments, 2) ~"|" extract(@arguments, 1); + } +} + +.mixin-args(@values...) { + &-3 { + length: length(@values); + extract: extract(@values, 3) ~"|" extract(@values, 2) ~"|" extract(@values, 1); + } +} + +.mixin-args(@head, @tail...) { + &-4 { + length: length(@tail); + extract: extract(@tail, 2) ~"|" extract(@tail, 1); + } +} + +// "multidimensional" array/list + +.md-space-comma { + @v: a b c, 1 2 3, "x" "y" "z"; + length-1: length(@v); + extract-1: extract(@v, 2); + length-2: length(extract(@v, 2)); + extract-2: extract(extract(@v, 2), 2); + + &-as-args {.mixin-args(a b c, 1 2 3, "x" "y" "z")} +} + +.md-cat-space-comma { + @a: a b c; + @b: 1 2 3; + @c: "x" "y" "z"; + @v: @a, @b, @c; + length-1: length(@v); + extract-1: extract(@v, 2); + length-2: length(extract(@v, 2)); + extract-2: extract(extract(@v, 2), 2); + + &-as-args {.mixin-args(@a, @b, @c)} +} + +.md-cat-comma-space { + @a: a, b, c; + @b: 1, 2, 3; + @c: "x", "y", "z"; + @v: @a @b @c; + length-1: length(@v); + extract-1: extract(@v, 2); + length-2: length(extract(@v, 2)); + extract-2: extract(extract(@v, 2), 2); + + &-as-args {.mixin-args(@a @b @c)} +} + +.md-3D { + @a: a b c d, 1 2 3 4; + @b: 5 6 7 8, e f g h; + .3D(@a, @b); + + .3D(...) { + + @v1: @arguments; + length-1: length(@v1); + extract-1: extract(@v1, 1); + + @v2: extract(@v1, 2); + length-2: length(@v2); + extract-2: extract(@v2, 1); + + @v3: extract(@v2, 1); + length-3: length(@v3); + extract-3: extract(@v3, 3); + + @v4: extract(@v3, 4); + length-4: length(@v4); + extract-4: extract(@v4, 1); + } +} diff --git a/node_modules/less/test/less/filemanagerPlugin/colors.test b/node_modules/less/test/less/filemanagerPlugin/colors.test new file mode 100644 index 000000000..3d86b9ff9 --- /dev/null +++ b/node_modules/less/test/less/filemanagerPlugin/colors.test @@ -0,0 +1 @@ +@color: red; diff --git a/node_modules/less/test/less/filemanagerPlugin/filemanager.less b/node_modules/less/test/less/filemanagerPlugin/filemanager.less new file mode 100644 index 000000000..1a35c67ab --- /dev/null +++ b/node_modules/less/test/less/filemanagerPlugin/filemanager.less @@ -0,0 +1,4 @@ +@import "test.test"; +.test { + color: @color; +} diff --git a/node_modules/less/test/less/functions.less b/node_modules/less/test/less/functions.less new file mode 100644 index 000000000..4866bdca7 --- /dev/null +++ b/node_modules/less/test/less/functions.less @@ -0,0 +1,232 @@ +#functions { + @var: 10; + @colors: #000, #fff; + color: _color("evil red"); // #660000 + width: increment(15); + height: undefined("self"); + border-width: add(2, 3); + variable: increment(@var); + background: linear-gradient(@colors); +} + +#built-in { + @r: 32; + escaped: e("-Some::weird(#thing, y)"); + lighten: lighten(#ff0000, 40%); + lighten-relative: lighten(#ff0000, 40%, relative); + darken: darken(#ff0000, 40%); + darken-relative: darken(#ff0000, 40%, relative); + saturate: saturate(#29332f, 20%); + saturate-relative: saturate(#29332f, 20%, relative); + desaturate: desaturate(#203c31, 20%); + desaturate-relative: desaturate(#203c31, 20%, relative); + greyscale: greyscale(#203c31); + hsl-clamp: hsl(380, 150%, 150%); + spin-p: spin(hsl(340, 50%, 50%), 40); + spin-n: spin(hsl(30, 50%, 50%), -40); + luma-white: luma(#fff); + luma-black: luma(#000); + luma-black-alpha: luma(rgba(0,0,0,0.5)); + luma-red: luma(#ff0000); + luma-green: luma(#00ff00); + luma-blue: luma(#0000ff); + luma-yellow: luma(#ffff00); + luma-cyan: luma(#00ffff); + luma-differs-from-luminance: luma(#ff3600); + luminance-white: luma(#fff); + luminance-black: luma(#000); + luminance-black-alpha: luma(rgba(0,0,0,0.5)); + luminance-red: luma(#ff0000); + luminance-differs-from-luma: luminance(#ff3600); + contrast-filter: contrast(30%); + saturate-filter: saturate(5%); + contrast-white: contrast(#fff); + contrast-black: contrast(#000); + contrast-red: contrast(#ff0000); + contrast-green: contrast(#00ff00); + contrast-blue: contrast(#0000ff); + contrast-yellow: contrast(#ffff00); + contrast-cyan: contrast(#00ffff); + contrast-light: contrast(#fff, #111111, #eeeeee); + contrast-dark: contrast(#000, #111111, #eeeeee); + contrast-wrongorder: contrast(#fff, #eeeeee, #111111, 0.5); + contrast-light-thresh: contrast(#fff, #111111, #eeeeee, 0.5); + contrast-dark-thresh: contrast(#000, #111111, #eeeeee, 0.5); + contrast-high-thresh: contrast(#555, #111111, #eeeeee, 0.6); + contrast-low-thresh: contrast(#555, #111111, #eeeeee, 0.09); + contrast-light-thresh-per: contrast(#fff, #111111, #eeeeee, 50%); + contrast-dark-thresh-per: contrast(#000, #111111, #eeeeee, 50%); + contrast-high-thresh-per: contrast(#555, #111111, #eeeeee, 60%); + contrast-low-thresh-per: contrast(#555, #111111, #eeeeee, 9%); + replace: replace("Hello, Mars.", "Mars\.", "World!"); + replace-captured: replace("This is a string.", "(string)\.$", "new $1."); + replace-with-flags: replace("One + one = 4", "one", "2", "gi"); + replace-single-quoted: replace('foo-1', "1", "2"); + replace-escaped-string: replace(~"bar-1", "1", "2"); + replace-keyword: replace(baz-1, "1", "2"); + replace-with-color: replace("007", "0", #135, g); + replace-with-number: replace("007", "0", 2em); + format: %("rgb(%d, %d, %d)", @r, 128, 64); + format-string: %("hello %s", "world"); + format-multiple: %("hello %s %d", "earth", 2); + format-url-encode: %("red is %A", #ff0000); + format-single-quoted: %('hello %s', "single world"); + format-escaped-string: %(~"hello %s", "escaped world"); + format-color-as-string: %("%s", #123); + format-number-as-string: %("%s", 4px); + eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64)); + + unitless: unit(12px); + unit: unit((13px + 1px), em); + unitpercentage: unit(100, %); + + get-unit: get-unit(10px); + get-unit-empty: get-unit(10); + + hue: hue(hsl(98, 12%, 95%)); + saturation: saturation(hsl(98, 12%, 95%)); + lightness: lightness(hsl(98, 12%, 95%)); + hsvhue: hsvhue(hsv(98, 12%, 95%)); + hsvsaturation: hsvsaturation(hsv(98, 12%, 95%)); + hsvvalue: hsvvalue(hsv(98, 12%, 95%)); + red: red(#f00); + green: green(#0f0); + blue: blue(#00f); + rounded: round((@r/3)); + rounded-two: round((@r/3), 2); + roundedpx: round((10px / 3)); + roundedpx-three: round((10px / 3), 3); + rounded-percentage: round(10.2%); + ceil: ceil(10.1px); + floor: floor(12.9px); + sqrt: sqrt(25px); + pi: pi(); + mod: mod(13m, 11cm); // could take into account units, doesn't at the moment + abs: abs(-4%); + tan: tan(42deg); + sin: sin(10deg); + cos: cos(12); + atan: atan(tan(0.1rad)); + atan: convert(acos(cos(34deg)), deg); + atan: convert(acos(cos(50grad)), deg); + pow: pow(8px, 2); + pow: pow(4, 3); + pow: pow(3, 3em); + min: min(0); + min: min(6, 5); + min: min(1pt, 3pt); + min: min(1cm, 3mm); + max: max(1, 3); + max: max(3em, 1em, 2em, 5em); + percentage: percentage((10px / 50)); + color-quoted-digit: color("#dda0dd"); + color-quoted-keyword: color("plum"); + color-color: color(#dda0dd); + color-keyword: color(plum); + tint: tint(#777777, 13); + tint-full: tint(#777777, 100); + tint-percent: tint(#777777, 13%); + tint-negative: tint(#777777, -13%); + shade: shade(#777777, 13); + shade-full: shade(#777777, 100); + shade-percent: shade(#777777, 13%); + shade-negative: shade(#777777, -13%); + + fade-out: fadeout(red, 5%); // support fadeOut and fadeout + fade-in: fadein(fadeout(red, 10%), 5%); + fade-out-relative: fadeout(red, 5%,relative); + fade-in-relative: fadein(fadeout(red, 10%, relative), 5%, relative); + fade-out2: fadeout(fadeout(red, 50%), 50%); + fade-out2-relative: fadeout(fadeout(red, 50%, relative), 50%, relative); + + hsv: hsv(5, 50%, 30%); + hsva: hsva(3, 50%, 30%, 0.2); + + mix: mix(#ff0000, #ffff00, 80); + mix-0: mix(#ff0000, #ffff00, 0); + mix-100: mix(#ff0000, #ffff00, 100); + mix-weightless: mix(#ff0000, #ffff00); + mixt: mix(#ff0000, transparent); + + .is-a { + @rules: { + color: red; + }; + ruleset: isruleset(@rules); + color: iscolor(#ddd); + color1: iscolor(red); + color2: iscolor(rgb(0, 0, 0)); + color3: iscolor(transparent); + keyword: iskeyword(hello); + number: isnumber(32); + string: isstring("hello"); + pixel: ispixel(32px); + percent: ispercentage(32%); + em: isem(32em); + cat: isunit(32cat, cat); + no-unit-is-empty: isunit(32, ''); + case-insensitive-1: isunit(32CAT, cat); + case-insensitive-2: isunit(32px, PX); + } +} + +#alpha { + alpha: darken(hsla(25, 50%, 50%, 0.6), 10%); + alpha2: alpha(rgba(3, 4, 5, 0.5)); + alpha3: alpha(transparent); +} + +#blendmodes { + multiply: multiply(#f60000, #f60000); + screen: screen(#f60000, #0000f6); + overlay: overlay(#f60000, #0000f6); + softlight: softlight(#f60000, #ffffff); + hardlight: hardlight(#f60000, #0000f6); + difference: difference(#f60000, #0000f6); + exclusion: exclusion(#f60000, #0000f6); + average: average(#f60000, #0000f6); + negation: negation(#f60000, #313131); +} + +#extract-and-length { + @anon: A B C 1 2 3; + extract: extract(@anon, 6) extract(@anon, 5) extract(@anon, 4) extract(@anon, 3) extract(@anon, 2) extract(@anon, 1); + length: length(@anon); +} + +#quoted-functions-in-mixin { + // Quoted type may have some weird side-effects when used in mixins (#2308) + .mixin(); + .mixin() { + replace-double-quoted: replace('foo-1', "1", "2"); + replace-single-quoted: replace('foo-3', "3", "4"); + replace-escaped-string: replace(~"bar-1", "1", "2"); + replace-keyword: replace(baz-1, "1", "2"); + replace-anonymous: replace(e("qux-1"), "1", "2"); + format-double-quoted: %("hello %s", "world"); + format-single-quoted: %('hello %s', "single world"); + format-escaped-string: %(~"hello %s", "escaped world"); + format-keyword: %(hello); + format-anonymous: %(e("hello %s"), "anonymous world"); + } +} + +#list-details { + @list: + a 1, // Some comment + b 2; + + length: length(@list); + one: extract(@list, 1); + @two: extract(@list, 2); + two: @two; + two-length: length(@two); + two-one: extract(@two, 1); + two-two: extract(@two, 2); +} +@color1: #FFF;/* comment1 */ +@color2: #FFF/* comment2 */; +html { + color: mix(blue, @color1, 50%); + color: mix(blue, @color2, 50%); +} diff --git a/node_modules/less/test/less/globalVars/extended.json b/node_modules/less/test/less/globalVars/extended.json new file mode 100644 index 000000000..6bd2a4845 --- /dev/null +++ b/node_modules/less/test/less/globalVars/extended.json @@ -0,0 +1,5 @@ +{ + "the-border": "1px", + "base-color": "#111", + "red": "#842210" +} \ No newline at end of file diff --git a/node_modules/less/test/less/globalVars/extended.less b/node_modules/less/test/less/globalVars/extended.less new file mode 100644 index 000000000..7a3bf2911 --- /dev/null +++ b/node_modules/less/test/less/globalVars/extended.less @@ -0,0 +1,10 @@ +#header { + color: (@base-color * 3); + border-left: @the-border; + border-right: (@the-border * 2); +} +#footer { + color: (@base-color + #003300); + border-color: @red; +} +@red: desaturate(red, 10%); // less file overrides passed in color <- note line comment on last line to check it is okay \ No newline at end of file diff --git a/node_modules/less/test/less/globalVars/simple.json b/node_modules/less/test/less/globalVars/simple.json new file mode 100644 index 000000000..2bccdc51f --- /dev/null +++ b/node_modules/less/test/less/globalVars/simple.json @@ -0,0 +1,3 @@ +{ + "my-color": "red" +} \ No newline at end of file diff --git a/node_modules/less/test/less/globalVars/simple.less b/node_modules/less/test/less/globalVars/simple.less new file mode 100644 index 000000000..c3c5e3b83 --- /dev/null +++ b/node_modules/less/test/less/globalVars/simple.less @@ -0,0 +1,3 @@ +.class { + color: @my-color; +} \ No newline at end of file diff --git a/node_modules/less/test/less/ie-filters.less b/node_modules/less/test/less/ie-filters.less new file mode 100644 index 000000000..3350b6536 --- /dev/null +++ b/node_modules/less/test/less/ie-filters.less @@ -0,0 +1,15 @@ +@fat: 0; +@cloudhead: "#000000"; + +.nav { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 20); + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@fat); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr=@cloudhead, GradientType=@fat); +} +.evalTest(@arg) { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@arg); +} +.evalTest1 { + .evalTest(30); + .evalTest(5); +} \ No newline at end of file diff --git a/node_modules/less/test/less/import-inline.less b/node_modules/less/test/less/import-inline.less new file mode 100644 index 000000000..213a57499 --- /dev/null +++ b/node_modules/less/test/less/import-inline.less @@ -0,0 +1,3 @@ +@import url("import/import-test-c.less");// import inline should not float above this #1954 +@import (inline) url("import/import-test-d.css") (min-width:600px); +@import (inline, css) url("import/invalid-css.less"); \ No newline at end of file diff --git a/node_modules/less/test/less/import-interpolation.less b/node_modules/less/test/less/import-interpolation.less new file mode 100644 index 000000000..6c513b5a0 --- /dev/null +++ b/node_modules/less/test/less/import-interpolation.less @@ -0,0 +1,8 @@ +@my_theme: "test"; + +@import "import/import-@{my_theme}-e.less"; + +@import "import/import-@{in}@{terpolation}.less"; + +@import "import/interpolation-vars.less"; + diff --git a/node_modules/less/test/less/import-once.less b/node_modules/less/test/less/import-once.less new file mode 100644 index 000000000..0a4024a38 --- /dev/null +++ b/node_modules/less/test/less/import-once.less @@ -0,0 +1,6 @@ +@import "import/import-once-test-c"; +@import "import/import-once-test-c"; +@import "import/import-once-test-c.less"; +@import "import/deeper/import-once-test-a"; +@import (multiple) "import/import-test-f.less"; +@import (multiple) "import/import-test-f.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/import-reference-issues.less b/node_modules/less/test/less/import-reference-issues.less new file mode 100644 index 000000000..74e02ce75 --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues.less @@ -0,0 +1,50 @@ +// Tests following past issues: +// * #1851 - Extend within (reference) imported files +// * #1896 - Namespace imported less code does not get properly referenced, when there's a (reference) keyword. +// * #1878 - extend inside referenced file should not extend outside selectors +// * #2716 - A file imported by reference and then normally - multiple imports should be independent +// * #1968 - When using an @import (reference), mixins that contain an & selector get added to the compiled output improperly +// * #2162 - Cannot put import by reference inside of a mixin (also doubles #1896) + +// #1878: extend inside referenced file should not extend outside selectors +@import (reference) "import-reference-issues/global-scope-import.less"; +.theOnlySelector { + shall-have: one selector; +} + +// #2716: A file imported by reference and then normally - multiple imports should be independent +// #1878: - double nested version +#do-not-show-import { + @import (reference, multiple) "import-reference-issues/multiple-import.less"; +} + +show-all-content { + @import (multiple) "import-reference-issues/multiple-import.less"; +} +// #1896: Namespace imported less code does not get properly referenced, when there's a (reference) keyword. +#Namespace { + @import (less, reference) "import-reference-issues/simple-mixin.css"; +} +#used-namespaced-mixin { + #Namespace > .mixin(); + shall-see: another property above; +} + +// #1851: Extend within (reference) imported files +// test-b is in global-scope-import.less file +.test-c { + &:extend(.test-b all); +} + +// #1968: When using an @import (reference), mixins that contain an & selector get added to the compiled output improperly +@import "import-reference-issues/mixin-1968.less"; +@import (reference) "import-reference-issues/appender-reference-1968.less"; + +// #2162 - Cannot put import by reference inside of a mixin (also doubles #1896) +.mixin-with-import-by-reference-inside() { + the-only-property: nothing-below-this; + @import (reference) "import-reference-issues/simple-ruleset-2162.less"; +} +call-mixin-with-import-by-reference-inside { + .mixin-with-import-by-reference-inside(); +} diff --git a/node_modules/less/test/less/import-reference-issues/appender-reference-1968.less b/node_modules/less/test/less/import-reference-issues/appender-reference-1968.less new file mode 100644 index 000000000..68cfc8c00 --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/appender-reference-1968.less @@ -0,0 +1,6 @@ +.container-no-parent-selector { + .mixin-no-parent-selector(); +} +.container-with-parent-selector { + .mixin-with-parent-selector() +} diff --git a/node_modules/less/test/less/import-reference-issues/global-scope-import.less b/node_modules/less/test/less/import-reference-issues/global-scope-import.less new file mode 100644 index 000000000..a7f8c854f --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/global-scope-import.less @@ -0,0 +1,13 @@ +.theOnlySelector { + avoid: warning; +} +.unusedAndReference:extend(.theOnlySelector) { + unused-and: reference; +} + +@import (reference) "global-scope-nested.less"; + +.test-b { + background-color: green; + &:extend(.test-a all); +} diff --git a/node_modules/less/test/less/import-reference-issues/global-scope-nested.less b/node_modules/less/test/less/import-reference-issues/global-scope-nested.less new file mode 100644 index 000000000..afc6ab043 --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/global-scope-nested.less @@ -0,0 +1,3 @@ +.test-a { + color: red; +} diff --git a/node_modules/less/test/less/import-reference-issues/mixin-1968.less b/node_modules/less/test/less/import-reference-issues/mixin-1968.less new file mode 100644 index 000000000..b045ee752 --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/mixin-1968.less @@ -0,0 +1,8 @@ +.mixin-no-parent-selector() { + background-color: red; +} +.mixin-with-parent-selector() { + &:first-child{ // USING AN & SELECTOR HERE + background-color: blue; + } +} diff --git a/node_modules/less/test/less/import-reference-issues/multiple-import-nested.less b/node_modules/less/test/less/import-reference-issues/multiple-import-nested.less new file mode 100644 index 000000000..df83923e4 --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/multiple-import-nested.less @@ -0,0 +1,12 @@ +/* double nested file */ +should { + be: invisible; +} +/* do not extend outside of this */ +.something { + invisible: suppress warning; +} +.invisible { + &:extend(.something all); +} + diff --git a/node_modules/less/test/less/import-reference-issues/multiple-import.less b/node_modules/less/test/less/import-reference-issues/multiple-import.less new file mode 100644 index 000000000..a3a814873 --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/multiple-import.less @@ -0,0 +1,10 @@ +/* + tralala +*/ +.fix { + fix: fix; +} +.something { + @import (reference) "multiple-import-nested.less"; + inside: something; +} diff --git a/node_modules/less/test/less/import-reference-issues/simple-mixin.css b/node_modules/less/test/less/import-reference-issues/simple-mixin.css new file mode 100644 index 000000000..98fb0d4ea --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/simple-mixin.css @@ -0,0 +1,3 @@ +.mixin { + was: included; +} diff --git a/node_modules/less/test/less/import-reference-issues/simple-ruleset-2162.less b/node_modules/less/test/less/import-reference-issues/simple-ruleset-2162.less new file mode 100644 index 000000000..e8b2ef84f --- /dev/null +++ b/node_modules/less/test/less/import-reference-issues/simple-ruleset-2162.less @@ -0,0 +1,3 @@ +ruleset { + shall-be-invisible: less; +} diff --git a/node_modules/less/test/less/import-reference.less b/node_modules/less/test/less/import-reference.less new file mode 100644 index 000000000..1ad02f415 --- /dev/null +++ b/node_modules/less/test/less/import-reference.less @@ -0,0 +1,26 @@ +@import (reference) url("import-once.less"); +@import (reference) url("css-3.less"); +@import (reference) url("media.less"); +@import (reference) url("import/import-reference.less"); +@import (reference) url("import/css-import.less"); + +.b { + .z(); +} + +.zz(); + +.visible:extend(.z all) { + extend: test; +} + +.test-mediaq-import { + .mixin-with-mediaq(340px); +} + +.class:extend(.class all) { +} +.mixin-with-nested-selectors(); +.mixin-with-directives(some-name); + +.print-referenced-import-inline(); diff --git a/node_modules/less/test/less/import.less b/node_modules/less/test/less/import.less new file mode 100644 index 000000000..2beeab1b0 --- /dev/null +++ b/node_modules/less/test/less/import.less @@ -0,0 +1,31 @@ +/** comment at the top**/ +@import url(http://fonts.googleapis.com/css?family=Open+Sans); + +@import url(/absolute/something.css) screen and (color) and (max-width: 600px); + +@import (optional) "file-does-not-exist.does-not-exist"; + +@var: 100px; +@import url("//ha.com/file.css") (min-width:@var); + +#import-test { + .mixin; + width: 10px; + height: (@a + 10%); +} +@import "import/import-test-e" screen and (max-width: 600px); + +@import url("import/import-test-a.less"); + +@import (less, multiple) "import/import-test-d.css" screen and (max-width: 601px); + +@import (multiple) "import/import-test-e" screen and (max-width: 602px); + +@import (less, multiple) url("import/import-test-d.css") screen and (max-width: 603px); + +@media print { + @import (multiple) "import/import-test-e"; +} + +@charset "UTF-8"; // climb on top #2126 + diff --git a/node_modules/less/test/less/import/css-import.less b/node_modules/less/test/less/import/css-import.less new file mode 100644 index 000000000..d5df0a4eb --- /dev/null +++ b/node_modules/less/test/less/import/css-import.less @@ -0,0 +1 @@ +@import url("test.css"); diff --git a/node_modules/less/test/less/import/deeper/deeper-2/url-import-2.less b/node_modules/less/test/less/import/deeper/deeper-2/url-import-2.less new file mode 100644 index 000000000..727ea57a5 --- /dev/null +++ b/node_modules/less/test/less/import/deeper/deeper-2/url-import-2.less @@ -0,0 +1,3 @@ +.deep-import-url { + color: red; +} \ No newline at end of file diff --git a/node_modules/less/test/less/import/deeper/deeper-2/url-import.less b/node_modules/less/test/less/import/deeper/deeper-2/url-import.less new file mode 100644 index 000000000..2ec87bc22 --- /dev/null +++ b/node_modules/less/test/less/import/deeper/deeper-2/url-import.less @@ -0,0 +1 @@ +@import url("url-import-2.less"); \ No newline at end of file diff --git a/node_modules/less/test/less/import/deeper/import-once-test-a.less b/node_modules/less/test/less/import/deeper/import-once-test-a.less new file mode 100644 index 000000000..8a747fc0a --- /dev/null +++ b/node_modules/less/test/less/import/deeper/import-once-test-a.less @@ -0,0 +1 @@ +@import "../import-once-test-c"; \ No newline at end of file diff --git a/node_modules/less/test/less/import/deeper/url-import.less b/node_modules/less/test/less/import/deeper/url-import.less new file mode 100644 index 000000000..003b07781 --- /dev/null +++ b/node_modules/less/test/less/import/deeper/url-import.less @@ -0,0 +1 @@ +@import url("deeper-2/url-import.less"); \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-and-relative-paths-test.less b/node_modules/less/test/less/import/import-and-relative-paths-test.less new file mode 100644 index 000000000..d6256c6b8 --- /dev/null +++ b/node_modules/less/test/less/import/import-and-relative-paths-test.less @@ -0,0 +1,17 @@ +@import "../css/background.css"; +@import "import-test-d.css"; + +@import "imports/logo"; +@import "imports/font"; + +.unquoted-relative-path-bg() { + background-image: url(../../data/image.jpg); +} +.quoted-relative-path-border-image() { + border-image: url('../../data/image.jpg'); +} + +#imported-relative-path { + .unquoted-relative-path-bg; + .quoted-relative-path-border-image; +} \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-charset-test.less b/node_modules/less/test/less/import/import-charset-test.less new file mode 100644 index 000000000..07a66e1a1 --- /dev/null +++ b/node_modules/less/test/less/import/import-charset-test.less @@ -0,0 +1 @@ +@charset "ISO-8859-1"; \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-inline-invalid-css.less b/node_modules/less/test/less/import/import-inline-invalid-css.less new file mode 100644 index 000000000..274a76e3b --- /dev/null +++ b/node_modules/less/test/less/import/import-inline-invalid-css.less @@ -0,0 +1 @@ +@import (inline) "invalid-css.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-interpolation.less b/node_modules/less/test/less/import/import-interpolation.less new file mode 100644 index 000000000..656f3cba4 --- /dev/null +++ b/node_modules/less/test/less/import/import-interpolation.less @@ -0,0 +1,2 @@ +@import (inline) "imports/logo.less"; +@import "import-@{in}@{terpolation}2.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-interpolation2.less b/node_modules/less/test/less/import/import-interpolation2.less new file mode 100644 index 000000000..12bfb4e10 --- /dev/null +++ b/node_modules/less/test/less/import/import-interpolation2.less @@ -0,0 +1,5 @@ +.a { + var: test; +} + +@in: "redefined-does-nothing"; \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-once-test-c.less b/node_modules/less/test/less/import/import-once-test-c.less new file mode 100644 index 000000000..686747a86 --- /dev/null +++ b/node_modules/less/test/less/import/import-once-test-c.less @@ -0,0 +1,6 @@ + +@c: red; + +#import { + color: @c; +} diff --git a/node_modules/less/test/less/import/import-reference.less b/node_modules/less/test/less/import/import-reference.less new file mode 100644 index 000000000..fe595e1be --- /dev/null +++ b/node_modules/less/test/less/import/import-reference.less @@ -0,0 +1,98 @@ +.z { + color: red; + .c { + color: green; + } +} +.only-with-visible, +.z { + color: green; + &:hover { + color: green; + } + & { + color: green; + } + & + & { + color: green; + .sub { + color: green; + } + } +} + +& { + .hidden { + hidden: true; + } +} + +@media tv { + .hidden { + hidden: true; + } +} + +/* comment is not output */ + +.zz { + .y { + pulled-in: yes /* inline comment survives */; + } + /* comment pulled in */ +} +@max-size: 450px; +.mixin-with-mediaq(@num) { + color: green; + test: @num; + @media (max-size: @max-size) { + color: red; + } +} +//https://github.com/less/less.js/issues/2359 +@supports (something: else) { + .class { + something: else; + } + .nestedToo { + .class { + something: else; + } + } + .invisible { + something: else; + } +} +//https://github.com/less/less.js/issues/1979 +.mixin-with-nested-selectors() { + .test { + color: red; + &:first-child { + color: blue; + } + } +} +.mixin-with-directives(@keyframeName) { + @keyframes @keyframeName { + @rules1(); + } + @supports (animation-name: test) { + @keyframes @keyframeName { + @rules2(); + } + .selector { + color: red; + } + } + @rules1: {property: value;}; + @rules2: {property: value;}; +} + +@import (inline, multiple) "invalid-css.less"; +@import "import-inline-invalid-css.less"; +.print-referenced-import-inline() { + div { + @import (inline, multiple) "invalid-css.less"; + } + @import (inline, multiple) "invalid-css.less"; +} \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-test-a.less b/node_modules/less/test/less/import/import-test-a.less new file mode 100644 index 000000000..6916f17c6 --- /dev/null +++ b/node_modules/less/test/less/import/import-test-a.less @@ -0,0 +1,5 @@ +@import "import-test-b.less"; +@import url(import-test-f.less); +@import url("deeper/url-import.less"); +@a: 20%; +@import "urls.less"; \ No newline at end of file diff --git a/node_modules/less/test/less/import/import-test-b.less b/node_modules/less/test/less/import/import-test-b.less new file mode 100644 index 000000000..ce2d35a83 --- /dev/null +++ b/node_modules/less/test/less/import/import-test-b.less @@ -0,0 +1,8 @@ +@import "import-test-c"; + +@b: 100%; + +.mixin { + height: 10px; + color: @c; +} diff --git a/node_modules/less/test/less/import/import-test-c.less b/node_modules/less/test/less/import/import-test-c.less new file mode 100644 index 000000000..686747a86 --- /dev/null +++ b/node_modules/less/test/less/import/import-test-c.less @@ -0,0 +1,6 @@ + +@c: red; + +#import { + color: @c; +} diff --git a/node_modules/less/test/less/import/import-test-d.css b/node_modules/less/test/less/import/import-test-d.css new file mode 100644 index 000000000..30575f018 --- /dev/null +++ b/node_modules/less/test/less/import/import-test-d.css @@ -0,0 +1 @@ +#css { color: yellow; } diff --git a/node_modules/less/test/less/import/import-test-e.less b/node_modules/less/test/less/import/import-test-e.less new file mode 100644 index 000000000..98b84b0a5 --- /dev/null +++ b/node_modules/less/test/less/import/import-test-e.less @@ -0,0 +1,2 @@ + +body { width: 100% } diff --git a/node_modules/less/test/less/import/import-test-f.less b/node_modules/less/test/less/import/import-test-f.less new file mode 100644 index 000000000..fad630f9c --- /dev/null +++ b/node_modules/less/test/less/import/import-test-f.less @@ -0,0 +1,5 @@ +@import "import-test-e"; + +.test-f { + height: 10px; +} diff --git a/node_modules/less/test/less/import/imports/font.less b/node_modules/less/test/less/import/imports/font.less new file mode 100644 index 000000000..822279f22 --- /dev/null +++ b/node_modules/less/test/less/import/imports/font.less @@ -0,0 +1,8 @@ +@font-face { + font-family: xecret; + src: url('../assets/xecret.ttf'); +} + +#secret { + font-family: xecret, sans-serif; +} diff --git a/node_modules/less/test/less/import/imports/logo.less b/node_modules/less/test/less/import/imports/logo.less new file mode 100644 index 000000000..f782c6fbf --- /dev/null +++ b/node_modules/less/test/less/import/imports/logo.less @@ -0,0 +1,6 @@ +#logo { + width: 100px; + height: 100px; + background: url('../assets/logo.png'); + background: url("#inline-svg"); +} diff --git a/node_modules/less/test/less/import/interpolation-vars.less b/node_modules/less/test/less/import/interpolation-vars.less new file mode 100644 index 000000000..c611ed627 --- /dev/null +++ b/node_modules/less/test/less/import/interpolation-vars.less @@ -0,0 +1,6 @@ +@in: "in"; +@terpolation: "terpolation"; + +// should be ignored because its already imported +// and it uses a variable from the parent scope +@import "import-@{my_theme}-e.less"; diff --git a/node_modules/less/test/less/import/invalid-css.less b/node_modules/less/test/less/import/invalid-css.less new file mode 100644 index 000000000..ed585d638 --- /dev/null +++ b/node_modules/less/test/less/import/invalid-css.less @@ -0,0 +1 @@ +this isn't very valid CSS. \ No newline at end of file diff --git a/node_modules/less/test/less/import/urls.less b/node_modules/less/test/less/import/urls.less new file mode 100644 index 000000000..bb48f77a2 --- /dev/null +++ b/node_modules/less/test/less/import/urls.less @@ -0,0 +1 @@ +// empty file showing that it loads from the relative path first diff --git a/node_modules/less/test/less/include-path-string/include-path-string.less b/node_modules/less/test/less/include-path-string/include-path-string.less new file mode 100644 index 000000000..db49715ee --- /dev/null +++ b/node_modules/less/test/less/include-path-string/include-path-string.less @@ -0,0 +1,3 @@ +data-uri { + property: data-uri('image.svg'); +} diff --git a/node_modules/less/test/less/include-path/include-path.less b/node_modules/less/test/less/include-path/include-path.less new file mode 100644 index 000000000..3e9e76529 --- /dev/null +++ b/node_modules/less/test/less/include-path/include-path.less @@ -0,0 +1,8 @@ +@import "import-test-e"; + +data-uri { + property: data-uri('image.svg'); +} +image-size { + property: image-size('image.svg'); +} diff --git a/node_modules/less/test/less/javascript.less b/node_modules/less/test/less/javascript.less new file mode 100644 index 000000000..a8e7eb37f --- /dev/null +++ b/node_modules/less/test/less/javascript.less @@ -0,0 +1,38 @@ +.eval { + js: `42`; + js: `1 + 1`; + js: `"hello world"`; + js: `[1, 2, 3]`; + title: `typeof process.title`; + ternary: `(1 + 1 == 2 ? true : false)`; + multiline: `(function(){var x = 1 + 1; + return x})()`; +} +.scope { + @foo: 42; + var: `parseInt(this.foo.toJS())`; + escaped: ~`2 + 5 + 'px'`; +} +.vars { + @var: `4 + 4`; + width: @var; +} +.escape-interpol { + @world: "world"; + width: ~`"hello" + " " + @{world}`; +} +.arrays { + @ary: 1, 2, 3; + @ary2: 1 2 3; + ary: `@{ary}.join(', ')`; + ary1: `@{ary2}.join(', ')`; +} +.transitions(...) { + @arg: ~`"@{arguments}".replace(/[\[\]]*/g, '')`; + 1: @arg; // rounded to integers + 2: ~`"@{arguments}"`; // rounded to integers + 3: @arguments; // OK +} +.test-tran { + .transitions(opacity 0.3s ease-in 0.3s, max-height 0.6s linear, margin-bottom 0.4s linear;); +} diff --git a/node_modules/less/test/less/lazy-eval.less b/node_modules/less/test/less/lazy-eval.less new file mode 100644 index 000000000..72b3fd46e --- /dev/null +++ b/node_modules/less/test/less/lazy-eval.less @@ -0,0 +1,6 @@ +@var: @a; +@a: 100%; + +.lazy-eval { + width: @var; +} diff --git a/node_modules/less/test/less/legacy/legacy.less b/node_modules/less/test/less/legacy/legacy.less new file mode 100644 index 000000000..4367423d2 --- /dev/null +++ b/node_modules/less/test/less/legacy/legacy.less @@ -0,0 +1,21 @@ +@media (-o-min-device-pixel-ratio: 2/1) { + .test-math-and-units { + font: ignores 0/0 rules; + test-division: 4 / 2 + 5em; + simple: 1px + 1px; + } +} +#units { + t1: (2em/1em) + 20; + t2: 20 + (2em/1em); + t3: 2em/1em; + t4: (2em/1px) + 20; + t5: 20 + (2em/1px); + t6: 2em/1px; + t7: (2em*1em) + 20; + t8: 20 + (2em*1em); + t9: 2em*1em; + t10: (2em*1px) + 20; + t11: 20 + (2em*1px); + t12: 2em*1px; +} \ No newline at end of file diff --git a/node_modules/less/test/less/media.less b/node_modules/less/test/less/media.less new file mode 100644 index 000000000..8bd23bb56 --- /dev/null +++ b/node_modules/less/test/less/media.less @@ -0,0 +1,234 @@ + +// For now, variables can't be declared inside @media blocks. + +@var: 42; + +@media print { + .class { + color: blue; + .sub { + width: @var; + } + } + .top, header > h1 { + color: (#222 * 2); + } +} + +@media screen { + @base: 8; + body { max-width: (@base * 60); } +} + +@ratio_large: 16; +@ratio_small: 9; + +@media all and (device-aspect-ratio: @ratio_large / @ratio_small) { + body { max-width: 800px; } +} + +@media all and (orientation:portrait) { + aside { float: none; } +} + +@media handheld and (min-width: @var), screen and (min-width: 20em) { + body { + max-width: 480px; + } +} + +body { + @media print { + padding: 20px; + + header { + background-color: red; + } + + @media (orientation:landscape) { + margin-left: 20px; + } + } +} + +@media screen { + .sidebar { + width: 300px; + @media (orientation: landscape) { + width: 500px; + } + } +} + +@media a { + .first { + @media b { + .second { + .third { + width: 300px; + @media c { + width: 500px; + } + } + .fourth { + width: 3; + } + } + } + } +} + +body { + @media a, b and c { + width: 95%; + + @media x, y { + width: 100%; + } + } +} + +.mediaMixin(@fallback: 200px) { + background: black; + + @media handheld { + background: white; + + @media (max-width: @fallback) { + background: red; + } + } +} + +.a { + .mediaMixin(100px); +} + +.b { + .mediaMixin(); +} +@smartphone: ~"only screen and (max-width: 200px)"; +@media @smartphone { + body { + width: 480px; + } +} + +@media print { + @page :left { + margin: 0.5cm; + } + @page :right { + margin: 0.5cm; + } + @page Test:first { + margin: 1cm; + } + @page :first { + size: 8.5in 11in; + @top-left { + margin: 1cm; + } + @top-left-corner { + margin: 1cm; + } + @top-center { + margin: 1cm; + } + @top-right { + margin: 1cm; + } + @top-right-corner { + margin: 1cm; + } + @bottom-left { + margin: 1cm; + } + @bottom-left-corner { + margin: 1cm; + } + @bottom-center { + margin: 1cm; + } + @bottom-right { + margin: 1cm; + } + @bottom-right-corner { + margin: 1cm; + } + @left-top { + margin: 1cm; + } + @left-middle { + margin: 1cm; + } + @left-bottom { + margin: 1cm; + } + @right-top { + margin: 1cm; + } + @right-middle { + content: "Page " counter(page); + } + @right-bottom { + margin: 1cm; + } + } +} + +@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (min-resolution: 128dpcm) { + .b { + background: red; + } +} + +.bg() { + background: red; + + @media (max-width: 500px) { + background: green; + } +} + +body { + .bg(); +} + +@bpMedium: 1000px; +@media (max-width: @bpMedium) { + body { + .bg(); + background: blue; + } +} + +@media (max-width: 1200px) { + /* a comment */ + + @media (max-width: 900px) { + body { font-size: 11px; } + } +} + +.nav-justified { + @media (min-width: 480px) { + > li { + display: table-cell; + } + } +} + +.menu +{ + @media (min-width: 768px) { + .nav-justified(); + } +} +@all: ~"all"; +@tv: ~"tv"; +@media @all and @tv { + .all-and-tv-variables { + var: all-and-tv; + } +} \ No newline at end of file diff --git a/node_modules/less/test/less/merge.less b/node_modules/less/test/less/merge.less new file mode 100644 index 000000000..9d37f67a1 --- /dev/null +++ b/node_modules/less/test/less/merge.less @@ -0,0 +1,78 @@ +.first-transform() { + transform+: rotate(90deg), skew(30deg); +} +.second-transform() { + transform+: scale(2,4); +} +.third-transform() { + transform: scaleX(45deg); +} +.fourth-transform() { + transform+: scaleX(45deg); +} +.fifth-transform() { + transform+: scale(2,4) !important; +} +.first-background() { + background+: url(data://img1.png); +} +.second-background() { + background+: url(data://img2.png); +} + +.test1 { + // Can merge values + .first-transform(); + .second-transform(); +} +.test2 { + // Won't merge values without +: merge directive, for backwards compatibility with css + .first-transform(); + .third-transform(); +} +.test3 { + // Won't merge values from two sources with different properties + .fourth-transform(); + .first-background(); +} +.test4 { + // Won't merge values from sources that merked as !important, for backwards compatibility with css + .first-transform(); + .fifth-transform(); +} +.test5 { + // Won't merge values from mixins that merked as !important, for backwards compatibility with css + .first-transform(); + .second-transform() !important; +} +.test6 { + // Ignores !merge if no peers found + .second-transform(); +} + +.test-interleaved { + transform+: t1; + background+: b1; + transform+: t2; + background+: b2, b3; + transform+: t3; +} + +.test-spaced { + transform+_: t1; + background+_: b1; + transform+_: t2; + background+_: b2, b3; + transform+_: t3; +} + +.test-interleaved-with-spaced { + transform+_: t1s; + transform+: t2; + background+: b1; + transform+_: t3s; + transform+: t4 t5s; + background+_: b2s, b3; + transform+_: t6s; + background+: b4; +} diff --git a/node_modules/less/test/less/mixins-args.less b/node_modules/less/test/less/mixins-args.less new file mode 100644 index 000000000..57f5a5b45 --- /dev/null +++ b/node_modules/less/test/less/mixins-args.less @@ -0,0 +1,263 @@ +.mixin (@a: 1px, @b: 50%) { + width: (@a * 5); + height: (@b - 1%); +} + +.mixina (@style, @width, @color: black) { + border: @width @style @color; +} + +.mixiny +(@a: 0, @b: 0) { + margin: @a; + padding: @b; +} + +.hidden() { + color: transparent; // asd +} + +#hidden { + .hidden; +} + +#hidden1 { + .hidden(); +} + +.two-args { + color: blue; + .mixin(2px, 100%); + .mixina(dotted, 2px); +} + +.one-arg { + .mixin(3px); +} + +.no-parens { + .mixin; +} + +.no-args { + .mixin(); +} + +.var-args { + @var: 9; + .mixin(@var, (@var * 2)); +} + +.multi-mix { + .mixin(2px, 30%); + .mixiny(4, 5); +} + +.maxa(@arg1: 10, @arg2: #f00) { + padding: (@arg1 * 2px); + color: @arg2; +} + +body { + .maxa(15); +} + +@glob: 5; +.global-mixin(@a:2) { + width: (@glob + @a); +} + +.scope-mix { + .global-mixin(3); +} + +.nested-ruleset (@width: 200px) { + width: @width; + .column { margin: @width; } +} +.content { + .nested-ruleset(600px); +} + +// + +.same-var-name2(@radius) { + radius: @radius; +} +.same-var-name(@radius) { + .same-var-name2(@radius); +} +#same-var-name { + .same-var-name(5px); +} + +// + +.var-inside () { + @var: 10px; + width: @var; +} +#var-inside { .var-inside; } + +.mixin-arguments (@width: 0px, ...) { + border: @arguments; + width: @width; +} + +.arguments { + .mixin-arguments(1px, solid, black); +} +.arguments2 { + .mixin-arguments(); +} +.arguments3 { + .mixin-arguments; +} + +.mixin-arguments2 (@width, @rest...) { + border: @arguments; + rest: @rest; + width: @width; +} +.arguments4 { + .mixin-arguments2(0, 1, 2, 3, 4); +} + +// Edge cases + +.edge-case { + .mixin-arguments("{"); +} + +// Division vs. Literal Slash +.border-radius(@r: 2px/5px) { + border-radius: @r; +} +.slash-vs-math { + .border-radius(); + .border-radius(5px/10px); + .border-radius((3px * 2)); +} +// semi-colon vs comma for delimiting + +.mixin-takes-one(@a) { + one: @a; +} + +.mixin-takes-two(@a; @b) { + one: @a; + two: @b; +} + +.comma-vs-semi-colon { + .mixin-takes-two(@a : a; @b : b, c); + .mixin-takes-two(@a : d, e; @b : f); + .mixin-takes-one(@a: g); + .mixin-takes-one(@a : h;); + .mixin-takes-one(i); + .mixin-takes-one(j;); + .mixin-takes-two(k, l); + .mixin-takes-one(m, n;); + .mixin-takes-two(o, p; q); + .mixin-takes-two(r, s; t;); +} + +.mixin-conflict(@a:defA, @b:defB, @c:defC) { + three: @a, @b, @c; +} + +.mixin-conflict(@a:defA, @b:defB, @c:defC, @d:defD) { + four: @a, @b, @c, @d; +} + +#named-conflict { + .mixin-conflict(11, 12, 13, @a:a); + .mixin-conflict(@a:a, 21, 22, 23); +} +@a: 3px; +.mixin-default-arg(@a: 1px, @b: @a, @c: @b) { + defaults: 1px 1px 1px; + defaults: 2px 2px 2px; +} + +.test-mixin-default-arg { + .mixin-default-arg(); + .mixin-default-arg(2px); +} + +.mixin-comma-default1(@color; @padding; @margin: 2, 2, 2, 2) { + margin: @margin; +} +.selector { + .mixin-comma-default1(#33acfe; 4); +} +.mixin-comma-default2(@margin: 2, 2, 2, 2;) { + margin: @margin; +} +.selector2 { + .mixin-comma-default2(); +} +.mixin-comma-default3(@margin: 2, 2, 2, 2) { + margin: @margin; +} +.selector3 { + .mixin-comma-default3(4,2,2,2); +} + +.test-calling-one-arg-mixin(@a) { +} + +.test-calling-one-arg-mixin(@a, @b, @rest...) { +} + +div { + .test-calling-one-arg-mixin(1); +} + +mixins-args-expand-op- { + @x: 1, 2, 3; + @y: 4 5 6; + + &1 {.m3(@x...)} + &2 {.m3(@y...)} + &3 {.wr(a, b, c)} + &4 {.wr(a; b; c, d)} + &5 {.wr(@x...)} + &6 {.m4(0; @x...)} + &7 {.m4(@x..., @a: 0)} + &8 {.m4(@b: 1.5; @x...)} + &9 {.aa(@y, @x..., and again, @y...)} + + .m3(@a, @b, @c) { + m3: @a, @b, @c; + } + + .m4(@a, @b, @c, @d) { + m4: @a, @b, @c, @d; + } + + .wr(@a...) { + &a {.m3(@a...)} + &b {.m4(0, @a...)} + &c {.m4(@a..., 4)} + } + + .aa(@a...) { + aa: @a; + a4: extract(@a, 5); + a8: extract(@a, 8); + } +} +#test-mixin-matching-when-default-2645 { + .mixin(@height) { + height: @height; + } + + .mixin(@width, @height: 10px) { + width: @width; + + .mixin(@height: @height); + } + + .mixin(@height: 20px); +} \ No newline at end of file diff --git a/node_modules/less/test/less/mixins-closure.less b/node_modules/less/test/less/mixins-closure.less new file mode 100644 index 000000000..26c8b6e90 --- /dev/null +++ b/node_modules/less/test/less/mixins-closure.less @@ -0,0 +1,26 @@ +.scope { + @var: 99px; + .mixin () { + width: @var; + } +} + +.class { + .scope > .mixin; +} + +.overwrite { + @var: 0px; + .scope > .mixin; +} + +.nested { + @var: 5px; + .mixin () { + width: @var; + } + .class { + @var: 10px; + .mixin; + } +} diff --git a/node_modules/less/test/less/mixins-guards-default-func.less b/node_modules/less/test/less/mixins-guards-default-func.less new file mode 100644 index 000000000..a71f78f5c --- /dev/null +++ b/node_modules/less/test/less/mixins-guards-default-func.less @@ -0,0 +1,195 @@ + +// basics: + +guard-default-basic-1 { + .m(1) {case: 1} + .m(@x) when (default()) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} +} + +guard-default-basic-2 { + .m(1) {case: 1} + .m(2) {case: 2} + .m(3) {case: 3} + .m(@x) when (default()) {default: @x} + + &-0 {.m(0)} + &-2 {.m(2)} +} + +guard-default-basic-3 { + .m(@x) when (@x = 1) {case: 1} + .m(2) {case: 2} + .m(@x) when (@x = 3) {case: 3} + .m(@x) when (default()) {default: @x} + + &-0 {.m(0)} + &-2 {.m(2)} + &-3 {.m(3)} +} + +guard-default-definition-order { + .m(@x) when (default()) {default: @x} + .m(@x) when (@x = 1) {case: 1} + .m(2) {case: 2} + .m(@x) when (@x = 3) {case: 3} + + &-0 {.m(0)} + &-2 {.m(2)} + &-2 {.m(3)} +} + +// out of guard: + +guard-default-out-of-guard { + .m(1) {case-1: 1} + .m(@x: default()) when (default()) {default: @x} + + &-0 { + case-0: default(); + .m(1); + .m(2); + case-2: default(); + } + &-1 {.m(default())} + &-2 {.m()} +} + +// expressions: + +guard-default-expr-not { + .m(1) {case: 1} + .m(@x) when not(default()) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} +} + +guard-default-expr-eq { + .m(@x) when (@x = true) {case: @x} + .m(@x) when (@x = false) {case: @x} + .m(@x) when (@x = default()) {default: @x} + + &-true {.m(true)} + &-false {.m(false)} +} + +guard-default-expr-or { + .m(1) {case: 1} + .m(2) {case: 2} + .m(@x) when (default()), (@x = 2) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} + &-3 {.m(3)} +} + +guard-default-expr-and { + .m(1) {case: 1} + .m(2) {case: 2} + .m(@x) when (default()) and (@x = 3) {default: @x} + + &-1 {.m(1)} + &-2 {.m(2)} + &-3 {.m(3)} + &-4 {.m(4)} +} + +guard-default-expr-always { + .m(1) {case: 1} + .m(@x) when (default()), not(default()) {default: @x} // always match + + &-1 {.m(1)} + &-2 {.m(2)} +} + +guard-default-expr-never { + .m(1) {case: 1} + .m(@x) when (default()) and not(default()) {default: @x} // never match + + &-1 {.m(1)} + &-2 {.m(2)} +} + + +// not conflicting multiple default() uses: + +guard-default-multi-1 { + .m(0) {case: 0} + .m(@x) when (default()) {default-1: @x} + .m(2) when (default()) {default-2: @x} + + &-0 {.m(0)} + &-1 {.m(1)} +} + +guard-default-multi-2 { + .m(1, @x) when (default()) {default-1: @x} + .m(2, @x) when (default()) {default-2: @x} + .m(@x, yes) when (default()) {default-3: @x} + + &-1 {.m(1, no)} + &-2 {.m(2, no)} + &-3 {.m(3, yes)} +} + +guard-default-multi-3 { + .m(red) {case-1: darkred} + .m(blue) {case-2: darkblue} + .m(@x) when (iscolor(@x)) and (default()) {default-color: @x} + .m('foo') {case-1: I am 'foo'} + .m('bar') {case-2: I am 'bar'} + .m(@x) when (isstring(@x)) and (default()) {default-string: I am @x} + + &-blue {.m(blue)} + &-green {.m(green)} + &-foo {.m('foo')} + &-baz {.m('baz')} +} + +guard-default-multi-4 { + .m(@x) when (default()), not(default()) {always: @x} + .m(@x) when (default()) and not(default()) {never: @x} + .m(2) {case: 2} + + .m(1); + .m(2); +} + +guard-default-not-ambiguos-2 { + .m(@x) {case: 1} + .m(@x) when (default()) {default: @x} + .m(@x) when not(default()) {not-default: @x} + + .m(2); +} + +guard-default-not-ambiguos-3 { + .m(@x) {case: 1} + .m(@x) when not(default()) {not-default-1: @x} + .m(@x) when not(default()) {not-default-2: @x} + + .m(2); +} + +// default & scope + +guard-default-scopes { + .s1() {.m(@v) {1: no condition}} + .s2() {.m(@v) when (@v) {2: when true}} + .s3() {.m(@v) when (default()) {3: when default}} + + &-3 { + .s2(); + .s3(); + .m(false); + } + + &-1 { + .s1(); + .s3(); + .m(false); + } +} diff --git a/node_modules/less/test/less/mixins-guards.less b/node_modules/less/test/less/mixins-guards.less new file mode 100644 index 000000000..883bb57a0 --- /dev/null +++ b/node_modules/less/test/less/mixins-guards.less @@ -0,0 +1,358 @@ + +// Stacking, functions.. + +.light (@a) when (lightness(@a) > 50%) { + color: white; +} +.light (@a) when (lightness(@a) < 50%) { + color: black; +} +.light (@a) { + margin: 1px; +} + +.light1 { .light(#ddd) } +.light2 { .light(#444) } + +// Arguments against each other + +.max (@a, @b) when (@a > @b) { + width: @a; +} +.max (@a, @b) when (@a < @b) { + width: @b; +} + +.max1 { .max(3, 6) } +.max2 { .max(8, 1) } + +// Globals inside guards + +@g: auto; + +.glob (@a) when (@a = @g) { + margin: @a @g; +} +.glob1 { .glob(auto) } + +// Other operators + +.ops (@a) when (@a >= 0) { + height: gt-or-eq; +} +.ops (@a) when (@a =< 0) { + height: lt-or-eq; +} +.ops (@a) when (@a <= 0) { + height: lt-or-eq-alias; +} +.ops (@a) when not(@a = 0) { + height: not-eq; +} +.ops1 { .ops(0) } +.ops2 { .ops(1) } +.ops3 { .ops(-1) } + +// Scope and default values + +@a: auto; + +.default (@a: inherit) when (@a = inherit) { + content: default; +} +.default1 { .default } + +// true & false keywords +.test (@a) when (@a) { + content: "true."; +} +.test (@a) when not (@a) { + content: "false."; +} + +.test1 { .test(true) } +.test2 { .test(false) } +.test3 { .test(1) } +.test4 { .test(boo) } +.test5 { .test("true") } + +// Boolean expressions + +.bool () when (true) and (false) { content: true and false } // FALSE +.bool () when (true) and (true) { content: true and true } // TRUE +.bool () when (true) { content: true } // TRUE +.bool () when (false) and (false) { content: true } // FALSE +.bool () when (false), (true) { content: false, true } // TRUE +.bool () when (false) and (true) and (true), (true) { content: false and true and true, true } // TRUE +.bool () when (true) and (true) and (false), (false) { content: true and true and false, false } // FALSE +.bool () when (false), (true) and (true) { content: false, true and true } // TRUE +.bool () when (false), (false), (true) { content: false, false, true } // TRUE +.bool () when (false), (false) and (true), (false) { content: false, false and true, false } // FALSE +.bool () when (false), (true) and (true) and (true), (false) { content: false, true and true and true, false } // TRUE +.bool () when not (false) { content: not false } +.bool () when not (true) and not (false) { content: not true and not false } +.bool () when not (true) and not (true) { content: not true and not true } +.bool () when not (false) and (false), not (false) { content: not false and false, not false } + +.bool1 { .bool } + +.equality-unit-test(@num) when (@num = 1%) { + test: fail; +} +.equality-unit-test(@num) when (@num = 2) { + test: pass; +} +.equality-units { + .equality-unit-test(1px); + .equality-unit-test(2px); +} + +.colorguard(@col) when (@col = red) { content: is @col; } +.colorguard(@col) when not (blue = @col) { content: is not blue its @col; } +.colorguard(@col) {} +.colorguardtest { + .colorguard(red); + .colorguard(blue); + .colorguard(purple); +} + +.stringguard(@str) when (@str = "theme1") { content: @str is "theme1"; } +.stringguard(@str) when not ("theme2" = @str) { content: @str is not "theme2"; } +.stringguard(@str) when (@str = 'theme1') { content: @str is 'theme1'; } +.stringguard(@str) when not ('theme2' = @str) { content: @str is not 'theme2'; } +.stringguard(@str) when (~"theme1" = @str) { content: @str is theme1; } +.stringguard(@str) {} +.stringguardtest { + .stringguard("theme1"); + .stringguard("theme2"); + .stringguard('theme1'); + .stringguard('theme2'); + .stringguard(theme1); +} + +.generic(@a, @b) {/**/} +.generic(@a, @b) when (@a = @b) {content: @a is equal to @b} +.generic(@a, @b) when (@b = @a) {content: @b is equal to @a too} +.generic(@a, @b) when (@a < @b) {content: @a is less than @b} +.generic(@a, @b) when (@b < @a) {content: @b is less than @a too} +.generic(@a, @b) when (@a > @b) {content: @a is greater than @b} +.generic(@a, @b) when (@b > @a) {content: @b is greater than @a too} +.generic(@a, @b) when not(@a = @b) {content: @a is not equal to @b} +.generic(@a, @b) when not(@b = @a) {content: @b is not equal to @a too} + +.variouse-types-comparison { + .generic(true, false); + .generic(1, true); + .generic(2, 2px); + .generic(3, ~"3"); + .generic(5, ~"4"); + .generic(abc, ~"abc"); + .generic(abc, "abc"); + .generic('abc', "abd"); + .generic(6, e("6")); + .generic(`9`, 8); + .generic(a, b); + .generic(1 2, 3); +} + +.list-comparison { + .generic(a b c, a b c); + .generic(a b c, a b d); + .generic(a, b, c; a, b, c); + .generic(a, b, c; a, b, d); + .generic(1 2px 300ms, 1em 2 .3s); + + @space-list: 1 2 3; + @comma-list: 1, 2, 3; + @compound: @space-list @comma-list; + + .generic(@space-list, @comma-list); + .generic(@comma-list, ~"1, 2, 3"); + .generic(@compound, @space-list @comma-list); + .generic(@compound, @comma-list @space-list); + .generic(@compound 4, ~"1 2 3 1, 2, 3 4"); +} + +.mixin(...) { + catch:all; +} +.mixin(@var) when (@var=4) { + declare: 4; +} +.mixin(@var) when (@var=4px) { + declare: 4px; +} +#tryNumberPx { + .mixin(4px); +} + +.lock-mixin(@a) { + .inner-locked-mixin(@x: @a) when (@a = 1) { + a: @a; + x: @x; + } +} +.call-lock-mixin { + .lock-mixin(1); + .call-inner-lock-mixin { + .inner-locked-mixin(); + } +} +.bug-100cm-1m(@a) when (@a = 1) { + .failed { + one-hundred: not-equal-to-1; + } +} +.bug-100cm-1m(100cm); + +#ns { + .mixin-for-root-usage(@a) when (@a > 0) { + .mixin-generated-class { + a: @a; + } + } +} + +#ns > .mixin-for-root-usage(1); + +@namespaceGuard: 1; +#guarded when (@namespaceGuard>0) { + #deeper { + .mixin() { + guarded: namespace; + } + } +} +#guarded() when (@namespaceGuard>0) { + #deeper { + .mixin() { + silent: namespace; + } + } +} +#guarded(@variable) when (@namespaceGuard>0) { + #deeper { + .mixin() { + should: not match because namespace argument; + } + } +} +#guarded(@variable: default) when (@namespaceGuard>0) { + #deeper { + .mixin() { + guarded: with default; + } + } +} +#guarded when (@namespaceGuard<0) { + #deeper { + .mixin() { + should: not match because namespace guard; + } + } +} +#guarded-caller { + #guarded > #deeper > .mixin(); +} +#top { + #deeper when (@namespaceGuard<0) { + .mixin(@a) { + should: not match because namespace guard; + } + } + #deeper() when (@namespaceGuard>0) { + .mixin(@a) { + should: match @a; + } + } +} +#guarded-deeper { + #top > #deeper > .mixin(1); +} + +// namespaced & guarded mixin in root +// outputs nothing but should pass: + +@guarded-mixin-for-root: true; +#ns { + .guarded-mixin-for-root() when (@guarded-mixin-for-root) {} +} +#ns > .guarded-mixin-for-root(); +// various combinations of nested or, and, parenthesis and negation +.parenthesisNot(@value) when ((((@value)))) { + parenthesisNot: just-value; +} +.parenthesisNot(@value) when (((not(@value)))) { + parenthesisNot: negated once inside; +} +.parenthesisNot(@value) when not((((@value)))) { + parenthesisNot: negated once outside; +} +.parenthesisNot(@value) when ((not((@value)))) { + parenthesisNot: negated once middle; +} +.parenthesisNot(@value) when not(((not(@value)))) { + parenthesisNot: negated twice 1; +} +.parenthesisNot(@value) when (not((not(@value)))) { + parenthesisNot: negated twice 2; +} +.parenthesisNot(@value) when ((not(not(@value)))) { + parenthesisNot: negated twice 3; +} +.parenthesisNot (...) when (default()) { + parenthesisNot: none matched; +} + +#parenthesisNot-true { + .parenthesisNot(true); +} +#parenthesisNot-false { + .parenthesisNot(false); +} + +.orderOfEvaluation(@a1, @a2, @a3) when ((@a1) and (@a2) or (@a3)) { + no-parenthesis: evaluated true 1a; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((@a3) or (@a1) and (@a2)) { + no-parenthesis: evaluated true 1b; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((@a1) and ((@a2) or (@a3))) { + no-parenthesis: evaluated true 1c; +} +.orderOfEvaluation(@a1, @a2, @a3) when (@a3), (@a1) and (@a2) { + no-parenthesis: evaluated true 1d; +} +.orderOfEvaluation(@a1, @a2, @a3) when (((@a3) or (@a1)) and (@a2)) { + no-parenthesis: evaluated true 1e; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((@a1) and (@a2) or not (@a3)) { + no-parenthesis: evaluated true 2a; +} +.orderOfEvaluation(@a1, @a2, @a3) when (not (@a3) or (@a1) and (@a2)) { + no-parenthesis: evaluated true 2b; +} +.orderOfEvaluation(@a1, @a2, @a3) when not (@a3), (@a1) and (@a2) { + no-parenthesis: evaluated true 2c; +} +.orderOfEvaluation(@a1, @a2, @a3) when (not (@a1) and (@a2) or (@a3)) { + no-parenthesis: evaluated true 3; +} +.orderOfEvaluation(@a1, @a2, @a3) when ((((@a1) and (@a2) or (@a3)))) { + no-parenthesis: evaluated true 4; +} +.orderOfEvaluation(@a1, @a2, @a3) when (((@a1) and (@a2)) or (@a3)) { + with-parenthesis: evaluated true; +} +.orderOfEvaluation(...) when (default()) { + orderOfEvaluation: evaluated false; +} +#orderOfEvaluation-false-false-true { + .orderOfEvaluation(false, false, true); +} +#orderOfEvaluation-false-false-false { + .orderOfEvaluation(false, false, false); +} +#orderOfEvaluation-true-true-false { + .orderOfEvaluation(true, true, false); +} diff --git a/node_modules/less/test/less/mixins-important.less b/node_modules/less/test/less/mixins-important.less new file mode 100644 index 000000000..9f60efff9 --- /dev/null +++ b/node_modules/less/test/less/mixins-important.less @@ -0,0 +1,53 @@ +.submixin(@a) { + border-width: @a; +} +.mixin (9) { + border: 9 !important; +} +.mixin (@a: 0) { + border: @a; + boxer: @a; + .inner { + test: @a; + } + // comment + .submixin(@a); +} + +.class { + .mixin(1); + .mixin(2) !important; + .mixin(3); + .mixin(4) !important; + .mixin(5); + .mixin !important; + .mixin(9); +} +.size(@aaa: auto) { + .set-width(@aaa) { + width: @aaa; + } + .set-width(@aaa); +} +.when-calling-nested-issue-2394 { + .size() !important; +} +.when-calling-nested-with-param-issue-2394 { + .size(10px) !important; +} +.testMixin-2421 () { + .topCheck-2421 () { + .nestedCheck-2421() { + margin: 5px; + } + .nestedCheck-2421(); + } + .topCheck-2421(); +} +.class1-2421 { + .testMixin-2421() !important; +} +.class2-2421 { + .testMixin-2421(); +} + diff --git a/node_modules/less/test/less/mixins-interpolated.less b/node_modules/less/test/less/mixins-interpolated.less new file mode 100644 index 000000000..b79fa89a6 --- /dev/null +++ b/node_modules/less/test/less/mixins-interpolated.less @@ -0,0 +1,75 @@ + +@a0: 123; +@a1: foo; +@a2: ~".foo"; +@a4: ~"#foo"; + +.@{a0} { + a: 0; +} + +.@{a1} { + a: 1; +} + +@{a2} { + a: 2; +} + +#@{a1} { + a: 3; +} + +@{a4} { + a: 4; +} + +mi-test-a { + .123; + .foo; + #foo; +} + +.b .bb { + &.@{a1}-xxx .yyy-@{a1}@{a4} { + & @{a2}.bbb { + b: 1; + } + } +} + +mi-test-b { + .b.bb.foo-xxx.yyy-foo#foo.foo.bbb; +} + +@c1: @a1; +@c2: bar; +@c3: baz; + +#@{c1}-foo { + > .@{c2} { + .@{c3} { + c: c; + } + } +} + +mi-test-c { + &-1 {#foo-foo;} + &-2 {#foo-foo > .bar;} + &-3 {#foo-foo > .bar.baz;} +} + +.Person(@name, @gender_) { + .@{name} { + @gender: @gender_; + .sayGender() { + gender: @gender; + } + } +} + +mi-test-d { + .Person(person, "Male"); + .person.sayGender(); +} diff --git a/node_modules/less/test/less/mixins-named-args.less b/node_modules/less/test/less/mixins-named-args.less new file mode 100644 index 000000000..196f2aca0 --- /dev/null +++ b/node_modules/less/test/less/mixins-named-args.less @@ -0,0 +1,36 @@ +.mixin (@a: 1px, @b: 50%) { + width: (@a * 5); + height: (@b - 1%); + args: @arguments; +} +.mixin (@a: 1px, @b: 50%) when (@b > 75%){ + text-align: center; +} + +.named-arg { + color: blue; + .mixin(@b: 100%); +} + +.class { + @var: 20%; + .mixin(@b: @var); +} + +.all-args-wrong-args { + .mixin(@b: 10%, @a: 2px); +} + +.mixin2 (@a: 1px, @b: 50%, @c: 50) { + width: (@a * 5); + height: (@b - 1%); + color: (#000000 + @c); +} + +.named-args2 { + .mixin2(3px, @c: 100); +} + +.named-args3 { + .mixin2(@b: 30%, @c: #123456); +} \ No newline at end of file diff --git a/node_modules/less/test/less/mixins-nested.less b/node_modules/less/test/less/mixins-nested.less new file mode 100644 index 000000000..cc741a11d --- /dev/null +++ b/node_modules/less/test/less/mixins-nested.less @@ -0,0 +1,22 @@ +.mix-inner (@var) { + border-width: @var; +} + +.mix (@a: 10) { + .inner { + height: (@a * 10); + + .innest { + width: @a; + .mix-inner((@a * 2)); + } + } +} + +.class { + .mix(30); +} + +.class2 { + .mix(60); +} diff --git a/node_modules/less/test/less/mixins-pattern.less b/node_modules/less/test/less/mixins-pattern.less new file mode 100644 index 000000000..e769b0cf7 --- /dev/null +++ b/node_modules/less/test/less/mixins-pattern.less @@ -0,0 +1,102 @@ +.mixin (...) { + variadic: true; +} +.mixin (@a...) { + named-variadic: true; +} +.mixin () { + zero: 0; +} +.mixin (@a: 1px) { + one: 1; +} +.mixin (@a) { + one-req: 1; +} +.mixin (@a: 1px, @b: 2px) { + two: 2; +} + +.mixin (@a, @b, @c) { + three-req: 3; +} + +.mixin (@a: 1px, @b: 2px, @c: 3px) { + three: 3; +} + +.zero { + .mixin(); +} + +.one { + .mixin(1); +} + +.two { + .mixin(1, 2); +} + +.three { + .mixin(1, 2, 3); +} + +// + +.mixout ('left') { + left: 1; +} + +.mixout ('right') { + right: 1; +} + +.left { + .mixout('left'); +} +.right { + .mixout('right'); +} + +// + +.border (@side, @width) { + color: black; + .border-side(@side, @width); +} +.border-side (left, @w) { + border-left: @w; +} +.border-side (right, @w) { + border-right: @w; +} + +.border-right { + .border(right, 4px); +} +.border-left { + .border(left, 4px); +} + +// + + +.border-radius (@r) { + both: (@r * 10); +} +.border-radius (@r, left) { + left: @r; +} +.border-radius (@r, right) { + right: @r; +} + +.only-right { + .border-radius(33, right); +} +.only-left { + .border-radius(33, left); +} +.left-right { + .border-radius(33); +} diff --git a/node_modules/less/test/less/mixins.less b/node_modules/less/test/less/mixins.less new file mode 100644 index 000000000..15d511f63 --- /dev/null +++ b/node_modules/less/test/less/mixins.less @@ -0,0 +1,145 @@ +.mixin { border: 1px solid black; } +.mixout { border-color: orange; } +.borders { border-style: dashed; } +.mixin > * { border: do not match me; } + +#namespace { + .borders { + border-style: dotted; + } + .biohazard { + content: "death"; + .man { + color: transparent; + } + } +} +#theme { + > .mixin { + background-color: grey; + } +} +#container { + color: black; + .mixin; + .mixout; + #theme > .mixin; +} + +#header { + .milk { + color: white; + .mixin; + #theme > .mixin; + } + #cookie { + .chips { + #namespace .borders; + .calories { + #container; + } + } + .borders; + } +} +.secure-zone { #namespace .biohazard .man; } +.direct { + #namespace > .borders; +} + +.bo, .bar { + width: 100%; +} +.bo { + border: 1px; +} +.ar.bo.ca { + color: black; +} +.jo.ki { + background: none; +} +.amp { + &.support { + color: orange; + .higher { + top: 0px; + } + &.deeper { + height: auto; + } + } +} +.extended { + .bo; + .jo.ki; + .amp.support; + .amp.support.higher; + .amp.support.deeper; +} +.do .re .mi .fa { + .sol .la { + .si { + color: cyan; + } + } +} +.mutli-selector-parents { + .do.re.mi.fa.sol.la.si; +} +.foo .bar { + .bar; +} +.has_parents() { + & .underParents { + color: red; + } +} +.has_parents(); +.parent { + .has_parents(); +} +.margin_between(@above, @below) { + * + & { margin-top: @above; } + legend + & { margin-top: 0; } + & + * { margin-top: @below; } +} +h1 { .margin_between(25px, 10px); } +h2 { .margin_between(20px, 8px); } +h3 { .margin_between(15px, 5px); } + +.mixin_def(@url, @position){ + background-image: @url; + background-position: @position; +} +.error{ + @s: "/"; + .mixin_def( "@{s}a.png", center center); +} +.recursion() { + color: black; +} +.test-rec { + .recursion { + .recursion(); + } +} +.paddingFloat(@padding) { padding-left: @padding; } + +.button { + .paddingFloat(((10px + 12) * 2)); + + &.large { .paddingFloat(((10em * 2) * 2)); } +} +.clearfix() { + // ... +} +.clearfix { + .clearfix(); +} +.clearfix { + .clearfix(); +} +.foo { + .clearfix(); +} \ No newline at end of file diff --git a/node_modules/less/test/less/modifyVars/extended.json b/node_modules/less/test/less/modifyVars/extended.json new file mode 100644 index 000000000..6bd2a4845 --- /dev/null +++ b/node_modules/less/test/less/modifyVars/extended.json @@ -0,0 +1,5 @@ +{ + "the-border": "1px", + "base-color": "#111", + "red": "#842210" +} \ No newline at end of file diff --git a/node_modules/less/test/less/modifyVars/extended.less b/node_modules/less/test/less/modifyVars/extended.less new file mode 100644 index 000000000..0badc6715 --- /dev/null +++ b/node_modules/less/test/less/modifyVars/extended.less @@ -0,0 +1,11 @@ +#header { + color: (@base-color * 3); + border-left: @the-border; + border-right: (@the-border * 2); +} +#footer { + color: (@base-color + #003300); + border-color: @red; +} +@red: blue; // var is overridden by the modifyVars +//@base-color: green; \ No newline at end of file diff --git a/node_modules/less/test/less/nested-gradient-with-svg-gradient/mixin-consumer.less b/node_modules/less/test/less/nested-gradient-with-svg-gradient/mixin-consumer.less new file mode 100644 index 000000000..12bba2ea2 --- /dev/null +++ b/node_modules/less/test/less/nested-gradient-with-svg-gradient/mixin-consumer.less @@ -0,0 +1,5 @@ +@import "svg-gradient-mixin.less"; + +.gray-gradient { + .gradient-mixin(#999); +} diff --git a/node_modules/less/test/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less b/node_modules/less/test/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less new file mode 100644 index 000000000..fad96ea5a --- /dev/null +++ b/node_modules/less/test/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less @@ -0,0 +1,15 @@ +.gradient-mixin(@color) { + background: svg-gradient(to bottom, + fade(@color, 0%) 0%, + fade(@color, 5%) 60%, + fade(@color, 10%) 70%, + fade(@color, 15%) 73%, + fade(@color, 20%) 75%, + fade(@color, 25%) 80%, + fade(@color, 30%) 85%, + fade(@color, 35%) 88%, + fade(@color, 40%) 90%, + fade(@color, 45%) 95%, + fade(@color, 50%) 100% + ); +} diff --git a/node_modules/less/test/less/no-js-errors/no-js-errors.less b/node_modules/less/test/less/no-js-errors/no-js-errors.less new file mode 100644 index 000000000..15ef8a456 --- /dev/null +++ b/node_modules/less/test/less/no-js-errors/no-js-errors.less @@ -0,0 +1,3 @@ +.a { + a: `1 + 1`; +} \ No newline at end of file diff --git a/node_modules/less/test/less/no-js-errors/no-js-errors.txt b/node_modules/less/test/less/no-js-errors/no-js-errors.txt new file mode 100644 index 000000000..d81dd2bdb --- /dev/null +++ b/node_modules/less/test/less/no-js-errors/no-js-errors.txt @@ -0,0 +1,4 @@ +SyntaxError: You are using JavaScript, which has been disabled. in {path}no-js-errors.less on line 2, column 6: +1 .a { +2 a: `1 + 1`; +3 } diff --git a/node_modules/less/test/less/no-output.less b/node_modules/less/test/less/no-output.less new file mode 100644 index 000000000..b4e6a499f --- /dev/null +++ b/node_modules/less/test/less/no-output.less @@ -0,0 +1,2 @@ +.mixin() { +} \ No newline at end of file diff --git a/node_modules/less/test/less/no-strict-math/mixins-guards.less b/node_modules/less/test/less/no-strict-math/mixins-guards.less new file mode 100644 index 000000000..aa2a00588 --- /dev/null +++ b/node_modules/less/test/less/no-strict-math/mixins-guards.less @@ -0,0 +1,25 @@ +// https://github.com/less/less.js/issues/2798 +.test-2798 when ((8+4) < 13) { + regression: fixed; +} +.test-2798 when ((8+6) < 13) { + regression: should not be visible; +} +.conditions-parser-1 when (8+4 < 13) { + only-atomic: ok; +} +.conditions-parser-1 when (8+6 < 13) { + only-atomic: should not be visible; +} +.conditions-parser-2 when (8+(5-1) < 13) { + only-atomic-with-nested-parenthesis: ok; +} +.conditions-parser-2 when (8+(15-1) < 13) { + only-atomic-with-nested-parenthesis: should not be visible; +} +.conditions-parser-3 when (8 < (13+1)) { + only-atomic-nested-parenthesis-on-right: ok; +} +.conditions-parser-3 when (8 < (3+1)) { + only-atomic-nested-parenthesis-on-right: should not be visible; +} diff --git a/node_modules/less/test/less/no-strict-math/no-sm-operations.less b/node_modules/less/test/less/no-strict-math/no-sm-operations.less new file mode 100644 index 000000000..e79d05009 --- /dev/null +++ b/node_modules/less/test/less/no-strict-math/no-sm-operations.less @@ -0,0 +1,13 @@ +.named-colors-in-expressions { + color-0: 0 -red; + color-1: 1 - red; + color-2: red * 2; + color-3: 2 * red; + @3: -red; + &-bar@{3} {x: y} + @color: red; + &-bar@{color} {a: a}; + background-color: blue-2; + color: green-black; + animation: blue-change 5s infinite; +} diff --git a/node_modules/less/test/less/operations.less b/node_modules/less/test/less/operations.less new file mode 100644 index 000000000..ef3a5cacd --- /dev/null +++ b/node_modules/less/test/less/operations.less @@ -0,0 +1,63 @@ +#operations { + color: (#110000 + #000011 + #001100); // #111111 + color-2: (yellow - #070707); + height: (10px / 2px + 6px - 1px * 2); // 9px + width: (2 * 4 - 5em); // 3em + .spacing { + height: (10px / 2px+6px-1px*2); + width: (2 * 4-5em); + } + subtraction: (20 - 10 - 5 - 5); // 0 + division: (20 / 5 / 4); // 1 +} + +@x: 4; +@y: 12em; + +.with-variables { + height: (@x + @y); // 16em + width: (12 + @y); // 24em + size: (5cm - @x); // 1cm +} + +.with-functions { + color: (rgb(200, 200, 200) / 2); + color: (2 * hsl(0, 50%, 50%)); + color: (rgb(10, 10, 10) + hsl(0, 50%, 50%)); +} + +@z: -2; + +.negative { + height: (2px + @z); // 0px + width: (2px - @z); // 4px +} + +.shorthands { + padding: -1px 2px 0 -4px; // +} + +.rem-dimensions { + font-size: (20rem / 5 + 1.5rem); // 5.5rem +} + +.colors { + color: #123; // #112233 + border-color: (#234 + #111111); // #334455 + background-color: (#222222 - #fff); // #000000 + .other { + color: (2 * #111); // #222222 + border-color: (#333333 / 3 + #111); // #222222 + } +} + +.negations { + @var: 4px; + variable: (-@var); // 4 + variable1: (-@var + @var); // 0 + variable2: (@var + -@var); // 0 + variable3: (@var - -@var); // 8 + variable4: (-@var - -@var); // 0 + paren: (-(@var)); // -4px + paren2: (-(2 + 2) * -@var); // 16 +} diff --git a/node_modules/less/test/less/parens.less b/node_modules/less/test/less/parens.less new file mode 100644 index 000000000..eeef34481 --- /dev/null +++ b/node_modules/less/test/less/parens.less @@ -0,0 +1,45 @@ +.parens { + @var: 1px; + border: (@var * 2) solid black; + margin: (@var * 1) (@var + 2) (4 * 4) 3; + width: (6 * 6); + padding: 2px (6 * 6px); +} + +.more-parens { + @var: (2 * 2); + padding: (2 * @var) 4 4 (@var * 1px); + width-all: ((@var * @var) * 6); + width-first: ((@var * @var)) * 6; + width-keep: (@var * @var) * 6; + height-keep: (7 * 7) + (8 * 8); + height-all: ((7 * 7) + (8 * 8)); + height-parts: ((7 * 7)) + ((8 * 8)); + margin-keep: (4 * (5 + 5) / 2) - (@var * 2); + margin-parts: ((4 * (5 + 5) / 2)) - ((@var * 2)); + margin-all: ((4 * (5 + 5) / 2) + (-(@var * 2))); + border-radius-keep: 4px * (1 + 1) / @var + 3px; + border-radius-parts: ((4px * (1 + 1))) / ((@var + 3px)); + border-radius-all: (4px * (1 + 1) / @var + 3px); + //margin: (6 * 6)px; +} + +.negative { + @var: 1; + neg-var: -@var; // -1 ? + neg-var-paren: -(@var); // -(1) ? +} + +.nested-parens { + width: 2 * (4 * (2 + (1 + 6))) - 1; + height: ((2 + 3) * (2 + 3) / (9 - 4)) + 1; +} + +.mixed-units { + margin: 2px 4em 1 5pc; + padding: (2px + 4px) 1em 2px 2; +} + +.test-false-negatives { + a: ~"("; +} diff --git a/node_modules/less/test/less/plugin.less b/node_modules/less/test/less/plugin.less new file mode 100644 index 000000000..66775ea9f --- /dev/null +++ b/node_modules/less/test/less/plugin.less @@ -0,0 +1,93 @@ +// importing plugin globally +@plugin "./plugin/plugin-global"; + +// transitively include plugins from importing another sheet +@import "./plugin/plugin-transitive"; + + +// `test-global` function should be reachable +// `test-local` function should not be reachable +// `test-shadow` function should return global version +.class { + trans : test-transitive(); + global : test-global(); + local : test-local(); + shadow : test-shadow(); + + // `test-global` function should propagate and be reachable + // `test-local` function should be reachable + // `test-shadow` function should return local version, shadowing global version + .local { + @plugin "./plugin/plugin-local"; + global : test-global(); + local : test-local(); + shadow : test-shadow(); + } +} + +// calling a mixin or detached ruleset should not bubble local plugins +// imported inside either into the parent scope. +.mixin() { + @plugin "./plugin/plugin-local"; + mixin-local : test-local(); + mixin-global : test-global(); + mixin-shadow : test-shadow(); +} +@ruleset : { + @plugin "./plugin/plugin-local"; + ruleset-local : test-local(); + ruleset-global : test-global(); + ruleset-shadow : test-shadow(); +}; +#ns { + @plugin "./plugin/plugin-local"; + .mixin() { + ns-mixin-global : test-global(); + ns-mixin-local : test-local(); + ns-mixin-shadow : test-shadow(); + } +} +.class { + #ns > .mixin(); + .mixin(); + @ruleset(); + class-local : test-local(); +} + + +// `test-global` function should propagate into directive scope +@media screen { + .test { + result : test-global(); + } +} +@font-face { + result : test-global(); +} + +// `test-global` function should propagate into nested directive scopes +@media screen and (min-width:100px) { + @media (max-width:400px) { + .test { + result : test-global(); + } + } +} + +.test { + @media screen { + @plugin "./plugin/plugin-local"; + result : test-local(); + } +} + +@plugin "./plugin/plugin-tree-nodes"; +@ruleset2: test-detached-ruleset(); +.root { + @ruleset2(); +} + +test-directive("@charset"; '"utf-8"'); +test-directive("@arbitrary"; "value after ()"); + + diff --git a/node_modules/less/test/less/plugin/plugin-global.js b/node_modules/less/test/less/plugin/plugin-global.js new file mode 100644 index 000000000..adc828c49 --- /dev/null +++ b/node_modules/less/test/less/plugin/plugin-global.js @@ -0,0 +1,9 @@ + +functions.addMultiple({ + "test-shadow" : function() { + return new tree.Anonymous( "global" ); + }, + "test-global" : function() { + return new tree.Anonymous( "global" ); + } +}); diff --git a/node_modules/less/test/less/plugin/plugin-local.js b/node_modules/less/test/less/plugin/plugin-local.js new file mode 100644 index 000000000..b54ca97a8 --- /dev/null +++ b/node_modules/less/test/less/plugin/plugin-local.js @@ -0,0 +1,8 @@ +functions.addMultiple({ + "test-shadow" : function() { + return new tree.Anonymous( "local" ); + }, + "test-local" : function() { + return new tree.Anonymous( "local" ); + } +}); diff --git a/node_modules/less/test/less/plugin/plugin-transitive.js b/node_modules/less/test/less/plugin/plugin-transitive.js new file mode 100644 index 000000000..1da1864c4 --- /dev/null +++ b/node_modules/less/test/less/plugin/plugin-transitive.js @@ -0,0 +1,5 @@ +functions.addMultiple({ + "test-transitive" : function() { + return new tree.Anonymous( "transitive" ); + } +}); diff --git a/node_modules/less/test/less/plugin/plugin-transitive.less b/node_modules/less/test/less/plugin/plugin-transitive.less new file mode 100644 index 000000000..8e4ca00bb --- /dev/null +++ b/node_modules/less/test/less/plugin/plugin-transitive.less @@ -0,0 +1,5 @@ +@plugin "plugin-transitive"; + +.other { + trans : test-transitive(); +} \ No newline at end of file diff --git a/node_modules/less/test/less/plugin/plugin-tree-nodes.js b/node_modules/less/test/less/plugin/plugin-tree-nodes.js new file mode 100644 index 000000000..442352d7f --- /dev/null +++ b/node_modules/less/test/less/plugin/plugin-tree-nodes.js @@ -0,0 +1,80 @@ +functions.addMultiple({ + + "test-comment": function() { + return new tree.Combinator(' '); + }, + "test-directive": function(arg1, arg2) { + return new tree.Directive(arg1.value, new tree.Anonymous(arg2.value)); + }, + "test-extend": function() { + //TODO + }, + "test-import": function() { + //TODO + }, + "test-media": function() { + //TODO + }, + "test-mixin-call": function() { + //TODO + }, + "test-mixin-definition": function() { + //TODO + }, + "test-ruleset-call": function() { + return new tree.Combinator(' '); + }, + // Functions must return something. Must 'return true' if they produce no output. + "test-undefined": function() { }, + + // These cause root errors + "test-alpha": function() { + return new tree.Alpha(30); + }, + "test-assignment": function() { + return new tree.Assignment("bird", "robin"); + }, + "test-attribute": function() { + return new tree.Attribute("foo", "=", "bar"); + }, + "test-call": function() { + return new tree.Call("foo"); + }, + "test-color": function() { + return new tree.Color([50, 50, 50]); + }, + "test-condition": function() { + return new tree.Condition('<', new tree.Value([0]), new tree.Value([1])); + }, + "test-detached-ruleset" : function() { + var rule = new tree.Rule('prop', new tree.Anonymous('value')); + return new tree.DetachedRuleset(new tree.Ruleset("", [ rule ])); + }, + "test-dimension": function() { + return new tree.Dimension(1, 'px'); + }, + "test-element": function() { + return new tree.Element('+', 'a'); + }, + "test-expression": function() { + return new tree.Expression([1, 2, 3]); + }, + "test-keyword": function() { + return new tree.Keyword('foo'); + }, + "test-operation": function() { + return new tree.Operation('+', [1, 2]); + }, + "test-quoted": function() { + return new tree.Quoted('"', 'foo'); + }, + "test-selector": function() { + return new tree.Selector([new tree.Element('a')]); + }, + "test-url": function() { + return new tree.URL('http://google.com'); + }, + "test-value": function() { + return new tree.Value([1]); + } +}); \ No newline at end of file diff --git a/node_modules/less/test/less/postProcessorPlugin/postProcessor.less b/node_modules/less/test/less/postProcessorPlugin/postProcessor.less new file mode 100644 index 000000000..0d4c0304d --- /dev/null +++ b/node_modules/less/test/less/postProcessorPlugin/postProcessor.less @@ -0,0 +1,4 @@ +@color: white; +.test { + color: @color; +} diff --git a/node_modules/less/test/less/preProcessorPlugin/preProcessor.less b/node_modules/less/test/less/preProcessorPlugin/preProcessor.less new file mode 100644 index 000000000..50183ea28 --- /dev/null +++ b/node_modules/less/test/less/preProcessorPlugin/preProcessor.less @@ -0,0 +1,3 @@ +.test { + color: @color; +} diff --git a/node_modules/less/test/less/property-name-interp.less b/node_modules/less/test/less/property-name-interp.less new file mode 100644 index 000000000..ad1dd4190 --- /dev/null +++ b/node_modules/less/test/less/property-name-interp.less @@ -0,0 +1,56 @@ + +pi-test { + @prefix: ufo-; + @a: border; + @bb: top; + @c_c: left; + @d-d4: radius; + @-: -; + + @var: ~'@not-variable'; + + @{a}: 0; + @{var}: @var; + @{prefix}width: 50%; + *-z-@{a} :1px dashed blue; + -www-@{a}-@{bb}: 2px; + @{d-d4}-is-not-a-@{a}:true; + @{a}-@{bb}-@{c_c}-@{d-d4} : 2em; + @{a}@{-}@{bb}@{-}red@{-}@{d-d4}-: 3pt; + + .mixin(mixer); + .merge(ish, base); +} + +@global: global; + +.mixin(@arg) { + @local: local; + @{global}-@{local}-@{arg}-property: strong; +} + +.merge(@p, @v) { + &-merge { + @prefix: pre; + @suffix: ish; + @{prefix}-property-ish+ :high; + pre-property-@{suffix} +: middle; + @{prefix}-property-@{suffix}+: low; + @{prefix}-property-@{p} + : @v; + + @subterfuge: ~'+'; + pre-property-ish@{subterfuge}: nice try dude; + } +} + +pi-indirect-vars { + @{p}: @p; + @p: @@a; + @a: b; + @b: auto; +} + +pi-complex-values { + @{p}@{p}: none; + @p: (1 + 2px) fadeout(#ff0, 50%), pi() /* foo */; +} diff --git a/node_modules/less/test/less/rulesets.less b/node_modules/less/test/less/rulesets.less new file mode 100644 index 000000000..e81192dbc --- /dev/null +++ b/node_modules/less/test/less/rulesets.less @@ -0,0 +1,30 @@ +#first > .one { + > #second .two > #deux { + width: 50%; + #third { + &:focus { + color: black; + #fifth { + > #sixth { + .seventh #eighth { + + #ninth { + color: purple; + } + } + } + } + } + height: 100%; + } + #fourth, #five, #six { + color: #110000; + .seven, .eight > #nine { + border: 1px solid black; + } + #ten { + color: red; + } + } + } + font-size: 2em; +} diff --git a/node_modules/less/test/less/scope.less b/node_modules/less/test/less/scope.less new file mode 100644 index 000000000..13d01a170 --- /dev/null +++ b/node_modules/less/test/less/scope.less @@ -0,0 +1,104 @@ +@x: red; +@x: blue; +@z: transparent; +@mix: none; + +.mixin { + @mix: #989; +} +@mix: blue; +.tiny-scope { + color: @mix; // #989 + .mixin; +} + +.scope1 { + @y: orange; + @z: black; + color: @x; // blue + border-color: @z; // black + .hidden { + @x: #131313; + } + .scope2 { + @y: red; + color: @x; // blue + .scope3 { + @local: white; + color: @y; // red + border-color: @z; // black + background-color: @local; // white + } + } +} + +#namespace { + .scoped_mixin() { + @local-will-be-made-global: green; + .scope { + scoped-val: @local-will-be-made-global; + } + } +} + +#namespace > .scoped_mixin(); + +.setHeight(@h) { @height: 1024px; } +.useHeightInMixinCall(@h) { .useHeightInMixinCall { mixin-height: @h; } } +@mainHeight: 50%; +.setHeight(@mainHeight); +.heightIsSet { height: @height; } +.useHeightInMixinCall(@height); + +.importRuleset() { + .imported { + exists: true; + } +} +.importRuleset(); +.testImported { + .imported; +} + +@parameterDefault: 'top level'; +@anotherVariable: 'top level'; +//mixin uses top-level variables +.mixinNoParam(@parameter: @parameterDefault) when (@parameter = 'top level') { + default: @parameter; + scope: @anotherVariable; + sub-scope-only: @subScopeOnly; +} + +#allAreUsedHere { + //redefine top-level variables in different scope + @parameterDefault: 'inside'; + @anotherVariable: 'inside'; + @subScopeOnly: 'inside'; + //use the mixin + .mixinNoParam(); +} +#parentSelectorScope { + @col: white; + & { + @col: black; + } + prop: @col; + & { + @col: black; + } +} +.test-empty-mixin() { +} +#parentSelectorScopeMixins { + & { + .test-empty-mixin() { + should: never seee 1; + } + } + .test-empty-mixin(); + & { + .test-empty-mixin() { + should: never seee 2; + } + } +} \ No newline at end of file diff --git a/node_modules/less/test/less/selectors.less b/node_modules/less/test/less/selectors.less new file mode 100644 index 000000000..45b2e9afa --- /dev/null +++ b/node_modules/less/test/less/selectors.less @@ -0,0 +1,184 @@ +h1, h2, h3 { + a, p { + &:hover { + color: red; + } + } +} + +#all { color: blue; } +#the { color: blue; } +#same { color: blue; } + +ul, li, div, q, blockquote, textarea { + margin: 0; +} + +td { + margin: 0; + padding: 0; +} + +td, input { + line-height: 1em; +} + +a { + color: red; + + &:hover { color: blue; } + + div & { color: green; } + + p & span { color: yellow; } +} + +.foo { + .bar, .baz { + & .qux { + display: block; + } + .qux & { + display: inline; + } + .qux& { + display: inline-block; + } + .qux & .biz { + display: none; + } + } +} + +.b { + &.c { + .a& { + color: red; + } + } +} + +.b { + .c & { + &.a { + color: red; + } + } +} + +.p { + .foo &.bar { + color: red; + } +} + +.p { + .foo&.bar { + color: red; + } +} + +.foo { + .foo + & { + background: amber; + } + & + & { + background: amber; + } +} + +.foo, .bar { + & + & { + background: amber; + } +} + +.foo, .bar { + a, b { + & > & { + background: amber; + } + } +} + +.other ::fnord { color: red } +.other::fnord { color: red } +.other { + ::bnord {color: red } + &::bnord {color: red } +} +// selector interpolation +@theme: blood; +@selector: ~".@{theme}"; +@{selector} { + color:red; +} +@{selector}red { + color: green; +} +.red { + #@{theme}.@{theme}&.black:@{theme} { + color:black; + } +} +@num: 3; +:nth-child(@{num}) { + selector: interpolated; +} +.test { + &:nth-child(@{num}) { + selector: interpolated; + } + &:nth-child(odd):not(:nth-child(3)) { + color: #ff0000; + } + } +[prop], +[prop=10%], +[prop="value@{num}"], +[prop*="val@{num}"], +[|prop~="val@{num}"], +[*|prop$="val@{num}"], +[ns|prop^="val@{num}"], +[@{num}^="val@{num}"], +[@{num}=@{num}], +[@{num}] { + attributes: yes; +} + +/* +Large comment means chunk will be emitted after } which means chunk will begin with whitespace... +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank blank +*/ +@{selector} { + color: red; +} +.only-nested { + .level2 { + .foo:not(.tst&:hover) { + test: only-nested; + } + } +} +.nestend-and-non-nested { + .foo&:not(.tst&:hover) { + test: nestend-and-non-nested; + } +} +.selector:not(&:hover) { + test: global scope; +} +// https://github.com/less/less.js/issues/2206 +.extend-this { + content: '\2661'; +} +.first-level { + .second-level { + .active&:extend(.extend-this) { } + &.active2:extend(.extend-this) { } + } +} diff --git a/node_modules/less/test/less/sourcemaps-empty/empty.less b/node_modules/less/test/less/sourcemaps-empty/empty.less new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/less/test/less/sourcemaps-empty/var-defs.less b/node_modules/less/test/less/sourcemaps-empty/var-defs.less new file mode 100644 index 000000000..194654152 --- /dev/null +++ b/node_modules/less/test/less/sourcemaps-empty/var-defs.less @@ -0,0 +1 @@ +@test-var: 'something'; \ No newline at end of file diff --git a/node_modules/less/test/less/sourcemaps/basic.json b/node_modules/less/test/less/sourcemaps/basic.json new file mode 100644 index 000000000..2bccdc51f --- /dev/null +++ b/node_modules/less/test/less/sourcemaps/basic.json @@ -0,0 +1,3 @@ +{ + "my-color": "red" +} \ No newline at end of file diff --git a/node_modules/less/test/less/sourcemaps/basic.less b/node_modules/less/test/less/sourcemaps/basic.less new file mode 100644 index 000000000..4ee8b4f6d --- /dev/null +++ b/node_modules/less/test/less/sourcemaps/basic.less @@ -0,0 +1,27 @@ +@var: black; + +.a() { + color: red; +} + +.b { + color: green; + .a(); + color: blue; + background: @var; +} + +.a, .b { + background: green; + .c, .d { + background: gray; + & + & { + color: red; + } + } +} + +.extend:extend(.a all) { + color: pink; +} +@import (inline) "imported.css"; \ No newline at end of file diff --git a/node_modules/less/test/less/sourcemaps/imported.css b/node_modules/less/test/less/sourcemaps/imported.css new file mode 100644 index 000000000..2ee35f066 --- /dev/null +++ b/node_modules/less/test/less/sourcemaps/imported.css @@ -0,0 +1,7 @@ +/*comments*/ +.unused-css { + color: white; +} +.imported { + color: black; +} \ No newline at end of file diff --git a/node_modules/less/test/less/static-urls/urls.less b/node_modules/less/test/less/static-urls/urls.less new file mode 100644 index 000000000..b0c7de09a --- /dev/null +++ b/node_modules/less/test/less/static-urls/urls.less @@ -0,0 +1,33 @@ +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} + +@import "../import/import-and-relative-paths-test"; diff --git a/node_modules/less/test/less/strict-units/strict-units.less b/node_modules/less/test/less/strict-units/strict-units.less new file mode 100644 index 000000000..a7d0bb0d9 --- /dev/null +++ b/node_modules/less/test/less/strict-units/strict-units.less @@ -0,0 +1,4 @@ +.units { + cancels-to-nothing: (1px / 1px); + cancels: ((((10px / 5em) / 1px) * 3em) * 1px); +} diff --git a/node_modules/less/test/less/strings.less b/node_modules/less/test/less/strings.less new file mode 100644 index 000000000..43746053d --- /dev/null +++ b/node_modules/less/test/less/strings.less @@ -0,0 +1,73 @@ +#strings { + background-image: url("http://son-of-a-banana.com"); + quotes: "~" "~"; + content: "#*%:&^,)!.(~*})"; + empty: ""; + brackets: "{" "}"; + escapes: "\"hello\" \\world"; + escapes2: "\"llo"; +} +#comments { + content: "/* hello */ // not-so-secret"; +} +#single-quote { + quotes: "'" "'"; + content: '""#!&""'; + empty: ''; + semi-colon: ';'; +} +#escaped { + filter: ~"DX.Transform.MS.BS.filter(opacity=50)"; +} +#one-line { image: url(http://tooks.com) } +#crazy { image: url(http://), "}", url("http://}") } +#interpolation { + @var: '/dev'; + url: "http://lesscss.org@{var}/image.jpg"; + + @var2: 256; + url2: "http://lesscss.org/image-@{var2}.jpg"; + + @var3: #456; + url3: "http://lesscss.org@{var3}"; + + @var4: hello; + url4: "http://lesscss.org/@{var4}"; + + @var5: 54.4px; + url5: "http://lesscss.org/@{var5}"; +} + +// multiple calls with string interpolation + +.mix-mul (@a: green) { + color: ~"@{a}"; +} +.mix-mul-class { + .mix-mul(blue); + .mix-mul(red); + .mix-mul(black); + .mix-mul(orange); +} + +@test: Arial, Verdana, San-Serif; +.watermark { + @family: ~"Univers, @{test}"; + family: @family; +} +#iterated-interpolation { + @box-small: 10px; + @box-large: 100px; + + .mixin { // both ruleset and mixin + width: ~"@{box-@{suffix}}"; + weird: ~"@{box}-@{suffix}}"; + width-str: "@{box-@{suffix}}"; + weird-str: "@{box}-@{suffix}}"; + @box: ~"@{box"; + @suffix: large; + } + .interpolation-mixin { + .mixin(); //call the above as mixin + } +} diff --git a/node_modules/less/test/less/url-args/urls.less b/node_modules/less/test/less/url-args/urls.less new file mode 100644 index 000000000..2f1bd8727 --- /dev/null +++ b/node_modules/less/test/less/url-args/urls.less @@ -0,0 +1,63 @@ +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; + background: url("img.jpg") center / 100px; + background: #fff url(image.png) center / 1px 100px repeat-x scroll content-box padding-box; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); + background-image: url("http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700"); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} + +@import "../import/imports/font"; + +#data-uri { + uri: data-uri('image/jpeg;base64', '../../data/image.jpg'); +} + +#data-uri-guess { + uri: data-uri('../../data/image.jpg'); +} + +#data-uri-ascii { + uri-1: data-uri('text/html', '../../data/page.html'); + uri-2: data-uri('../../data/page.html'); +} + +#svg-functions { + background-image: svg-gradient(to bottom, black, white); + background-image: svg-gradient(to bottom, black, orange 3%, white); + @green_5: green 5%; + @orange_percentage: 3%; + @orange_color: orange; + background-image: svg-gradient(to bottom, (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%); +} + +#data-uri-with-spaces { + background-image: url( data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url( ' data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9=='); +} diff --git a/node_modules/less/test/less/urls.less b/node_modules/less/test/less/urls.less new file mode 100644 index 000000000..26eb58d45 --- /dev/null +++ b/node_modules/less/test/less/urls.less @@ -0,0 +1,94 @@ +@import "nested-gradient-with-svg-gradient/mixin-consumer.less"; + +@font-face { + src: url("/fonts/garamond-pro.ttf"); + src: local(Futura-Medium), + url(fonts.svg#MyGeometricModern) format("svg"); + not-a-comment: url(//z); +} +#shorthands { + background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px; + background: url("img.jpg") center / 100px; + background: #fff url(image.png) center / 1px 100px repeat-x scroll content-box padding-box; +} +#misc { + background-image: url(images/image.jpg); +} +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); + background-image: url(http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700); + background-image: url("http://fonts.googleapis.com/css?family=\"Rokkitt\":\(400\),700"); +} + +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} + +.comma-delimited { + background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg); +} +.values { + @a: 'Trebuchet'; + url: url(@a); +} + +@import "import/import-and-relative-paths-test"; + +#relative-url-import { + .unquoted-relative-path-bg; + .quoted-relative-path-border-image; +} + +#data-uri { + uri: data-uri('image/jpeg;base64', '../data/image.jpg'); + @var: replace('../data/replace.jpg', "replace", "image"); + background-image: data-uri(@var), data-uri(replace('../data/image.filext', "filext", "jpg")); + + uri-fragment: data-uri('image/jpeg;base64', '../data/image.jpg#fragment'); +} + +#data-uri-guess { + uri: data-uri('../data/image.jpg'); +} + +#data-uri-ascii { + uri-1: data-uri('text/html', '../data/page.html'); + uri-2: data-uri('../data/page.html'); +} + +#file-functions { + uri: data-uri('../data/data-uri-fail.png'); + svg-not-base-64: data-uri('../data/image.svg'); + size: image-size('../data/data-uri-fail.png'); + width: image-width('../data/data-uri-fail.png'); + height: image-height('../data/data-uri-fail.png'); +} +.add_an_import(@file_to_import) { +@import "@{file_to_import}"; +} + +.add_an_import("file.css"); + +#svg-functions { + background-image: svg-gradient(to bottom, black, white); + background-image: svg-gradient(to bottom, black, orange 3%, white); + @green_5: green 5%; + @orange_percentage: 3%; + @orange_color: orange; + background-image: svg-gradient(to bottom, (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%); +} +//it should work also inside @font-face #2035 +@font-face { + font-family: 'MyWebFont'; + src: url(webfont.eot); + src+: url('webfont.eot?#iefix'); + src+_: format('embedded-opentype'); + src+: url('webfont.woff') format('woff'); + src+: format('truetype'); + src+_: url('webfont.ttf'); + src+: url('webfont.svg#svgFontName') format('svg'); +} diff --git a/node_modules/less/test/less/variables-in-at-rules.less b/node_modules/less/test/less/variables-in-at-rules.less new file mode 100644 index 000000000..96d8c611d --- /dev/null +++ b/node_modules/less/test/less/variables-in-at-rules.less @@ -0,0 +1,20 @@ + +@Eight: 8; +@charset "UTF-@{Eight}"; + +@ns: less; +@namespace @ns "http://lesscss.org"; + +@name: enlarger; +@keyframes @name { + from {font-size: 12px;} + to {font-size: 15px;} +} + +.m(reducer); +.m(@name) { + @-webkit-keyframes @name { + from {font-size: 13px;} + to {font-size: 10px;} + } +} diff --git a/node_modules/less/test/less/variables.less b/node_modules/less/test/less/variables.less new file mode 100644 index 000000000..e2a2bea12 --- /dev/null +++ b/node_modules/less/test/less/variables.less @@ -0,0 +1,119 @@ +@a: 2; +@x: (@a * @a); +@y: (@x + 1); +@z: (@x * 2 + @y); +@var: -1; + +.variables { + width: (@z + 1cm); // 14cm +} + +@b: @a * 10; +@c: #888; + +@fonts: "Trebuchet MS", Verdana, sans-serif; +@f: @fonts; + +@quotes: "~" "~"; +@q: @quotes; +@onePixel: 1px; + +.variables { + height: (@b + @x + 0px); // 24px + color: @c; + font-family: @f; + quotes: @q; +} + +.redef { + @var: 0; + .inition { + @var: 4; + @var: 2; + three: @var; + @var: 3; + } + zero: @var; +} + +@important-var: @c !important; +@important-var-two: @a !important; +.values { + minus-one: @var; + @a: 'Trebuchet'; + @multi: 'A', B, C; + font-family: @a, @a, @a; + color: @c !important; + same-color: @important-var; + same-again: @important-var !important; + multi-important: @important-var @important-var, @important-var-two; + multi: something @multi, @a; +} + +.variable-names { + .quoted { + @var: 'hello'; + @name: 'var'; + name: @@name; + } + + .unquoted { + @var: 'hello'; + @name: var; + name: @@name; + } + + .color-keyword { + @red: 'hello'; + @name: red; + name: @@name; + } +} + +.alpha { + @var: 42; + filter: alpha(opacity=@var); +} + +.polluteMixin() { + @a: 'pollution'; +} +.testPollution { + @a: 'no-pollution'; + a: @a; + .polluteMixin(); + a: @a; +} + +.units { + width: @onePixel; + same-unit-as-previously: (@onePixel / @onePixel); + square-pixel-divided: (@onePixel * @onePixel / @onePixel); + odd-unit: unit((@onePixel * 4em / 2cm)); + percentage: (10 * 50%); + pixels: (50px * 10); + conversion-metric-a: (20mm + 1cm); + conversion-metric-b: (1cm + 20mm); + conversion-imperial: (1in + 72pt + 6pc); + custom-unit: (42octocats * 10); + custom-unit-cancelling: (8cats * 9dogs / 4cats); + mix-units: (1px + 1em); + invalid-units: (1px * 1px); + .fallback { + @px: 14px; + @em: 1.4em; + @cm: 10cm; + div-px-1: (@px / @em); + div-px-2: ((@px / @em) / @cm); + sub-px-1: (@px - @em); + sub-cm-1: (@cm - (@px - @em)); + mul-px-1: (@px * @em); + mul-em-1: (@em * @px); + mul-em-2: ((@em * @px) * @cm); + mul-cm-1: (@cm * (@em * @px)); + add-px-1: (@px + @em); + add-px-2: ((@px + @em) + @cm); + mul-px-2: ((1 * @px) * @cm); + mul-px-3: ((@px * 1) * @cm); + } +} diff --git a/node_modules/less/test/less/visitorPlugin/visitor.less b/node_modules/less/test/less/visitorPlugin/visitor.less new file mode 100644 index 000000000..bd2da3e8e --- /dev/null +++ b/node_modules/less/test/less/visitorPlugin/visitor.less @@ -0,0 +1,4 @@ +.test { + color: red; + -some-aribitrary-property: value; +} diff --git a/node_modules/less/test/less/whitespace.less b/node_modules/less/test/less/whitespace.less new file mode 100644 index 000000000..050ac7340 --- /dev/null +++ b/node_modules/less/test/less/whitespace.less @@ -0,0 +1,44 @@ + + +.whitespace + { color: white; } + +.whitespace +{ + color: white; +} + .whitespace +{ color: white; } + +.whitespace{color:white;} +.whitespace { color : white ; } + +.white, +.space, +.mania +{ color: white; } + +.no-semi-column { color: white } +.no-semi-column { + color: white; + white-space: pre +} +.no-semi-column {border: 2px solid white} +.newlines { + background: the, + great, + wall; + border: 2px + solid + black; +} +.empty { + +} +.sel +.newline_ws .tab_ws { +color: +white; +background-position: 45 +-23; +} diff --git a/node_modules/less/test/modify-vars.js b/node_modules/less/test/modify-vars.js new file mode 100644 index 000000000..4f73dce4a --- /dev/null +++ b/node_modules/less/test/modify-vars.js @@ -0,0 +1,19 @@ +var less = require('../lib/less'), + fs = require('fs'); + +var input = fs.readFileSync("./test/less/modifyVars/extended.less", 'utf8'); +var expectedCss = fs.readFileSync('./test/css/modifyVars/extended.css', 'utf8'); +var options = { + modifyVars: JSON.parse(fs.readFileSync("./test/less/modifyVars/extended.json", 'utf8')) +}; + +less.render(input, options, function (err, result) { + if (err) { + console.log(err); + } + if (result.css === expectedCss) { + console.log("PASS"); + } else { + console.log("FAIL"); + } +}); diff --git a/node_modules/less/test/plugins/filemanager/index.js b/node_modules/less/test/plugins/filemanager/index.js new file mode 100644 index 000000000..1cc905d65 --- /dev/null +++ b/node_modules/less/test/plugins/filemanager/index.js @@ -0,0 +1,19 @@ +(function(exports) { + var plugin = function(less) { + var FileManager = less.FileManager, TestFileManager = new FileManager(); + function TestFileManager() { }; + TestFileManager.loadFile = function (filename, currentDirectory, options, environment, callback) { + if (filename.match(/.*\.test$/)) { + return less.environment.fileManagers[0].loadFile("colors.test", currentDirectory, options, environment, callback); + } + return less.environment.fileManagers[0].loadFile(filename, currentDirectory, options, environment, callback); + }; + + return TestFileManager; + }; + + exports.install = function(less, pluginManager) { + less.environment.addFileManager(new plugin(less)); + }; + +})(typeof exports === 'undefined' ? this['AddFilePlugin'] = {} : exports); diff --git a/node_modules/less/test/plugins/postprocess/index.js b/node_modules/less/test/plugins/postprocess/index.js new file mode 100644 index 000000000..1fe736719 --- /dev/null +++ b/node_modules/less/test/plugins/postprocess/index.js @@ -0,0 +1,14 @@ +(function(exports) { + var postProcessor = function() {}; + + postProcessor.prototype = { + process: function (css) { + return 'hr {height:50px;}\n' + css; + } + }; + + exports.install = function(less, pluginManager) { + pluginManager.addPostProcessor( new postProcessor()); + }; + +})(typeof exports === 'undefined' ? this['postProcessorPlugin'] = {} : exports); diff --git a/node_modules/less/test/plugins/preprocess/index.js b/node_modules/less/test/plugins/preprocess/index.js new file mode 100644 index 000000000..868f23256 --- /dev/null +++ b/node_modules/less/test/plugins/preprocess/index.js @@ -0,0 +1,19 @@ +(function(exports) { + var preProcessor = function() {}; + + preProcessor.prototype = { + process : function (src, extra) { + var injected = '@color: red;\n'; + var ignored = extra.imports.contentsIgnoredChars; + var fileInfo = extra.fileInfo; + ignored[fileInfo.filename] = ignored[fileInfo.filename] || 0; + ignored[fileInfo.filename] += injected.length; + return injected + src; + } + }; + + exports.install = function(less, pluginManager) { + pluginManager.addPreProcessor( new preProcessor() ); + }; + +})(typeof exports === 'undefined' ? this['preProcessorPlugin'] = {} : exports); diff --git a/node_modules/less/test/plugins/visitor/index.js b/node_modules/less/test/plugins/visitor/index.js new file mode 100644 index 000000000..8f4f1a4ab --- /dev/null +++ b/node_modules/less/test/plugins/visitor/index.js @@ -0,0 +1,24 @@ +(function(exports) { + var RemoveProperty = function(less) { + this._visitor = new less.visitors.Visitor(this); + }; + + RemoveProperty.prototype = { + isReplacing: true, + run: function (root) { + return this._visitor.visit(root); + }, + visitRule: function (ruleNode, visitArgs) { + if (ruleNode.name != '-some-aribitrary-property') { + return ruleNode; + } else { + return []; + } + } + }; + + exports.install = function(less, pluginManager) { + pluginManager.addVisitor( new RemoveProperty(less)); + }; + +})(typeof exports === 'undefined' ? this['VisitorPlugin'] = {} : exports); diff --git a/node_modules/less/test/rhino/test-header.js b/node_modules/less/test/rhino/test-header.js new file mode 100644 index 000000000..884e5d150 --- /dev/null +++ b/node_modules/less/test/rhino/test-header.js @@ -0,0 +1,15 @@ +function initRhinoTest() { + process = { title: 'dummy' }; + + less.tree.functions.add = function (a, b) { + return new(less.tree.Dimension)(a.value + b.value); + }; + less.tree.functions.increment = function (a) { + return new(less.tree.Dimension)(a.value + 1); + }; + less.tree.functions._color = function (str) { + if (str.value === "evil red") { return new(less.tree.Color)("600"); } + }; +} + +initRhinoTest(); \ No newline at end of file diff --git a/node_modules/less/test/sourcemaps/basic.json b/node_modules/less/test/sourcemaps/basic.json new file mode 100644 index 000000000..51372f313 --- /dev/null +++ b/node_modules/less/test/sourcemaps/basic.json @@ -0,0 +1 @@ +{"version":3,"sources":["testweb/sourcemaps/basic.less","testweb/sourcemaps/imported.css"],"names":[],"mappings":"AAMA;EACE,YAAA;EAJA,UAAA;EAWA,iBAAA;EALA,WAAA;EACA,iBAAA;;AAJF,EASE;AATF,EASM;EACF,gBAAA;;AACA,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;EAGA,UAAA;;AALN;AAAI;AAUJ;EATE,iBAAA;;AADF,EAEE;AAFE,EAEF;AAFF,EAEM;AAFF,EAEE;AAQN,OARE;AAQF,OARM;EACF,gBAAA;;AACA,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFA;AAQN,OARE,GAQF,UARE;AAQF,OARE,GAEI,KAFJ;AAQF,OARE,GAQF,UARM;AAQN,OARE,GAEI,KAFA;AAEF,EAFF,GAQF,UARE;AAEE,EAFF,GAQF,UARM;AAQN,OARM,GAQN,UARE;AAQF,OARM,GAEA,KAFJ;AAQF,OARM,GAQN,UARM;AAQN,OARM,GAEA,KAFA;AAEF,EAFE,GAQN,UARE;AAEE,EAFE,GAQN,UARM;EAGA,UAAA;;AAKN;EACE,WAAA;;ACxBF;AACA;AACA;AACA;AACA;AACA;AACA","file":"sourcemaps/basic.css"} \ No newline at end of file diff --git a/node_modules/less/test/sourcemaps/index.html b/node_modules/less/test/sourcemaps/index.html new file mode 100644 index 000000000..89acca77e --- /dev/null +++ b/node_modules/less/test/sourcemaps/index.html @@ -0,0 +1,17 @@ + + + + + + +
    id import-test
    +
    id import-test
    +
    class imported inline
    +
    class mixin
    +
    class a
    +
    class b
    +
    class b
    class c
    +
    class a
    class d
    +
    class extend
    class c
    + + \ No newline at end of file diff --git a/node_modules/linkify-it/CHANGELOG.md b/node_modules/linkify-it/CHANGELOG.md new file mode 100644 index 000000000..4cc0d2605 --- /dev/null +++ b/node_modules/linkify-it/CHANGELOG.md @@ -0,0 +1,112 @@ +1.2.4 / 2016-06-03 +------------------ + +- Consider `<` & `>` as invalid in links. +- Support links in lt/gt braces: ``, ``. + + +1.2.3 / 2016-05-31 +------------------ + +- Allow digits in local domains, #36. +- Restrict user/pass (prohibit [@/] chars) to avoid wrong domain fetch. +- More restrictions for protocol-transparent links. Don't allow single-level + (local) domains, except '//localhost', #19. + + +1.2.2 / 2016-05-30 +------------------ + +- Security fix: due problem in `Any` class regexp from old `unicode-7.0.0` + package (used in `uc-micro`), hang happend with astral char patterns like + `😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡😡 .com` if fuzzy + options used. New installs will use fixed `uc-micro` automatically. + Old installs need to be updated. #36. +- Unicode rules updated to 8.+ version. + + +1.2.1 / 2016-04-29 +------------------ + +- Fix detect email after opening parenthesis: `(my@email.com)`, #32. + + +1.2.0 / 2015-06-29 +------------------ + +- Allow dash at the end of url, thanks to @Mumakil. + + +1.1.1 / 2015-06-09 +------------------ + +- Allow ".." in link paths. + + +1.1.0 / 2015-04-21 +------------------ + +- Added options to control fuzzy links recognition (`fuzzyLink: true`, + `fuzzyEmail: true`, `fuzzyIP: false`). +- Disabled IP-links without schema prefix by default. + + +1.0.1 / 2015-04-19 +------------------ + +- More strict default 2-characters tlds handle in fuzzy links, to avoid + false positives for `node.js`, `io.js` and so on. + + +1.0.0 / 2015-03-25 +------------------ + +- Version bump to 1.0.0 for semver. +- Removed `Cf` class from whitespace & punctuation sets (#10). +- API change. Exported regex names renamed to reflect changes. Update your + custom rules if needed: + - `src_ZPCcCf` -> `src_ZPCc` + - `src_ZCcCf` -> `src_ZCc` + + +0.1.5 / 2015-03-13 +------------------ + +- Fixed special chars handling (line breaks). +- Fixed demo permalink encode/decode. + + +0.1.4 / 2015-03-12 +------------------ + +- Allow `..` and `...` inside of link paths (#9). Useful for github links with + commit ranges. +- Added `.pretest()` method for speed optimizations. +- Autogenerate demo sample from fixtures. + + +0.1.3 / 2015-03-11 +------------------ + +- Maintenance release. Deps update. + + +0.1.2 / 2015-02-26 +------------------ + +- Fixed blockquoted links (some symbols exclusions), thanks to @MayhemYDG. +- Fixed demo permalinks, thanks to @MayhemYDG. + + +0.1.1 / 2015-02-22 +------------------ + +- Moved unicode data to external package. +- Demo permalink improvements. +- Docs update. + + +0.1.0 / 2015-02-12 +------------------ + +- First release. diff --git a/node_modules/linkify-it/LICENSE b/node_modules/linkify-it/LICENSE new file mode 100644 index 000000000..67596f5f2 --- /dev/null +++ b/node_modules/linkify-it/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015 Vitaly Puzrin. + +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. diff --git a/node_modules/linkify-it/README.md b/node_modules/linkify-it/README.md new file mode 100644 index 000000000..27eaf1519 --- /dev/null +++ b/node_modules/linkify-it/README.md @@ -0,0 +1,181 @@ +linkify-it +========== + +[![Build Status](https://img.shields.io/travis/markdown-it/linkify-it/master.svg?style=flat)](https://travis-ci.org/markdown-it/linkify-it) +[![NPM version](https://img.shields.io/npm/v/linkify-it.svg?style=flat)](https://www.npmjs.org/package/linkify-it) +[![Coverage Status](https://img.shields.io/coveralls/markdown-it/linkify-it/master.svg?style=flat)](https://coveralls.io/r/markdown-it/linkify-it?branch=master) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/markdown-it/linkify-it) + +> Links recognition library with FULL unicode support. +> Focused on high quality link patterns detection in plain text. + +__[Demo](http://markdown-it.github.io/linkify-it/)__ + +Why it's awesome: + +- Full unicode support, _with astral characters_! +- International domains support. +- Allows rules extension & custom normalizers. + + +Install +------- + +```bash +npm install linkify-it --save +``` + +Browserification is also supported. + + +Usage examples +-------------- + +##### Example 1 + +```js +var linkify = require('linkify-it')(); + +// Reload full tlds list & add unofficial `.onion` domain. +linkify + .tlds(require('tlds')) // Reload with full tlds list + .tlds('onion', true) // Add unofficial `.onion` domain + .linkify.add('git:', 'http:') // Add `git:` ptotocol as "alias" + .linkify.add('ftp:', null) // Disable `ftp:` ptotocol + .set({ fuzzyIP: true }); // Enable IPs in fuzzy links (without schema) + +console.log(linkify.test('Site github.com!')); // true + +console.log(linkify.match('Site github.com!')); // [ { + // schema: "", + // index: 5, + // lastIndex: 15, + // raw: "github.com", + // text: "github.com", + // url: "http://github.com", + // } ] +``` + +##### Example 2. Add twitter mentions handler + +```js +linkify.add('@', { + validate: function (text, pos, self) { + var tail = text.slice(pos); + + if (!self.re.twitter) { + self.re.twitter = new RegExp( + '^([a-zA-Z0-9_]){1,15}(?!_)(?=$|' + self.re.src_ZPCc + ')' + ); + } + if (self.re.twitter.test(tail)) { + // Linkifier allows punctuation chars before prefix, + // but we additionally disable `@` ("@@mention" is invalid) + if (pos >= 2 && tail[pos - 2] === '@') { + return false; + } + return tail.match(self.re.twitter)[0].length; + } + return 0; + }, + normalize: function (match) { + match.url = 'https://twitter.com/' + match.url.replace(/^@/, ''); + } +}); +``` + + +API +--- + +__[API documentation](http://markdown-it.github.io/linkify-it/doc)__ + +### new LinkifyIt(schemas, options) + +Creates new linkifier instance with optional additional schemas. +Can be called without `new` keyword for convenience. + +By default understands: + +- `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links +- "fuzzy" links and emails (google.com, foo@bar.com). + +`schemas` is an object, where each key/value describes protocol/rule: + +- __key__ - link prefix (usually, protocol name with `:` at the end, `skype:` + for example). `linkify-it` makes shure that prefix is not preceeded with + alphanumeric char. +- __value__ - rule to check tail after link prefix + - _String_ - just alias to existing rule + - _Object_ + - _validate_ - validator function (should return matched length on success), + or `RegExp`. + - _normalize_ - optional function to normalize text & url of matched result + (for example, for twitter mentions). + +`options`: + +- __fuzzyLink__ - recognige URL-s without `http(s)://` head. Default `true`. +- __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts + like version numbers. Default `false`. +- __fuzzyEmail__ - recognize emails without `mailto:` prefix. Default `true`. + + +### .test(text) + +Searches linkifiable pattern and returns `true` on success or `false` on fail. + + +### .pretest(text) + +Quick check if link MAY BE can exist. Can be used to optimize more expensive +`.test()` calls. Return `false` if link can not be found, `true` - if `.test()` +call needed to know exactly. + + +### .testSchemaAt(text, name, offset) + +Similar to `.test()` but checks only specific protocol tail exactly at given +position. Returns length of found pattern (0 on fail). + + +### .match(text) + +Returns `Array` of found link matches or null if nothing found. + +Each match has: + +- __schema__ - link schema, can be empty for fuzzy links, or `//` for + protocol-neutral links. +- __index__ - offset of matched text +- __lastIndex__ - index of next char after mathch end +- __raw__ - matched text +- __text__ - normalized text +- __url__ - link, generated from matched text + + +### .tlds(list[, keepOld]) + +Load (or merge) new tlds list. Those are needed for fuzzy links (without schema) +to avoid false positives. By default: + +- 2-letter root zones are ok. +- biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф are ok. +- encoded (`xn--...`) root zones are ok. + +If that's not enougth, you can reload defaults with more detailed zones list. + +### .add(schema, definition) + +Add new rule with `schema` prefix. For definition details see constructor +description. To disable existing rule use `.add(name, null)` + + +### .set(options) + +Override default options. Missed properties will not be changed. + + +## License + +[MIT](https://github.com/markdown-it/linkify-it/blob/master/LICENSE) diff --git a/node_modules/linkify-it/index.js b/node_modules/linkify-it/index.js new file mode 100644 index 000000000..092b40cb9 --- /dev/null +++ b/node_modules/linkify-it/index.js @@ -0,0 +1,626 @@ +'use strict'; + + +//////////////////////////////////////////////////////////////////////////////// +// Helpers + +// Merge objects +// +function assign(obj /*from1, from2, from3, ...*/) { + var sources = Array.prototype.slice.call(arguments, 1); + + sources.forEach(function (source) { + if (!source) { return; } + + Object.keys(source).forEach(function (key) { + obj[key] = source[key]; + }); + }); + + return obj; +} + +function _class(obj) { return Object.prototype.toString.call(obj); } +function isString(obj) { return _class(obj) === '[object String]'; } +function isObject(obj) { return _class(obj) === '[object Object]'; } +function isRegExp(obj) { return _class(obj) === '[object RegExp]'; } +function isFunction(obj) { return _class(obj) === '[object Function]'; } + + +function escapeRE(str) { return str.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&'); } + +//////////////////////////////////////////////////////////////////////////////// + + +var defaultOptions = { + fuzzyLink: true, + fuzzyEmail: true, + fuzzyIP: false +}; + + +function isOptionsObj(obj) { + return Object.keys(obj || {}).reduce(function (acc, k) { + return acc || defaultOptions.hasOwnProperty(k); + }, false); +} + + +var defaultSchemas = { + 'http:': { + validate: function (text, pos, self) { + var tail = text.slice(pos); + + if (!self.re.http) { + // compile lazily, because "host"-containing variables can change on tlds update. + self.re.http = new RegExp( + '^\\/\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i' + ); + } + if (self.re.http.test(tail)) { + return tail.match(self.re.http)[0].length; + } + return 0; + } + }, + 'https:': 'http:', + 'ftp:': 'http:', + '//': { + validate: function (text, pos, self) { + var tail = text.slice(pos); + + if (!self.re.no_http) { + // compile lazily, because "host"-containing variables can change on tlds update. + self.re.no_http = new RegExp( + '^' + + self.re.src_auth + + // Don't allow single-level domains, because of false positives like '//test' + // with code comments + '(?:localhost|(?:(?:' + self.re.src_domain + ')\\.)+' + self.re.src_domain_root + ')' + + self.re.src_port + + self.re.src_host_terminator + + self.re.src_path, + + 'i' + ); + } + + if (self.re.no_http.test(tail)) { + // should not be `://` & `///`, that protects from errors in protocol name + if (pos >= 3 && text[pos - 3] === ':') { return 0; } + if (pos >= 3 && text[pos - 3] === '/') { return 0; } + return tail.match(self.re.no_http)[0].length; + } + return 0; + } + }, + 'mailto:': { + validate: function (text, pos, self) { + var tail = text.slice(pos); + + if (!self.re.mailto) { + self.re.mailto = new RegExp( + '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i' + ); + } + if (self.re.mailto.test(tail)) { + return tail.match(self.re.mailto)[0].length; + } + return 0; + } + } +}; + +/*eslint-disable max-len*/ + +// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js) +var tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'; + +// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead +var tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|'); + +/*eslint-enable max-len*/ + +//////////////////////////////////////////////////////////////////////////////// + +function resetScanCache(self) { + self.__index__ = -1; + self.__text_cache__ = ''; +} + +function createValidator(re) { + return function (text, pos) { + var tail = text.slice(pos); + + if (re.test(tail)) { + return tail.match(re)[0].length; + } + return 0; + }; +} + +function createNormalizer() { + return function (match, self) { + self.normalize(match); + }; +} + +// Schemas compiler. Build regexps. +// +function compile(self) { + + // Load & clone RE patterns. + var re = self.re = assign({}, require('./lib/re')); + + // Define dynamic patterns + var tlds = self.__tlds__.slice(); + + if (!self.__tlds_replaced__) { + tlds.push(tlds_2ch_src_re); + } + tlds.push(re.src_xn); + + re.src_tlds = tlds.join('|'); + + function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); } + + re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i'); + re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i'); + re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i'); + re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i'); + + // + // Compile each schema + // + + var aliases = []; + + self.__compiled__ = {}; // Reset compiled data + + function schemaError(name, val) { + throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val); + } + + Object.keys(self.__schemas__).forEach(function (name) { + var val = self.__schemas__[name]; + + // skip disabled methods + if (val === null) { return; } + + var compiled = { validate: null, link: null }; + + self.__compiled__[name] = compiled; + + if (isObject(val)) { + if (isRegExp(val.validate)) { + compiled.validate = createValidator(val.validate); + } else if (isFunction(val.validate)) { + compiled.validate = val.validate; + } else { + schemaError(name, val); + } + + if (isFunction(val.normalize)) { + compiled.normalize = val.normalize; + } else if (!val.normalize) { + compiled.normalize = createNormalizer(); + } else { + schemaError(name, val); + } + + return; + } + + if (isString(val)) { + aliases.push(name); + return; + } + + schemaError(name, val); + }); + + // + // Compile postponed aliases + // + + aliases.forEach(function (alias) { + if (!self.__compiled__[self.__schemas__[alias]]) { + // Silently fail on missed schemas to avoid errons on disable. + // schemaError(alias, self.__schemas__[alias]); + return; + } + + self.__compiled__[alias].validate = + self.__compiled__[self.__schemas__[alias]].validate; + self.__compiled__[alias].normalize = + self.__compiled__[self.__schemas__[alias]].normalize; + }); + + // + // Fake record for guessed links + // + self.__compiled__[''] = { validate: null, normalize: createNormalizer() }; + + // + // Build schema condition + // + var slist = Object.keys(self.__compiled__) + .filter(function (name) { + // Filter disabled & fake schemas + return name.length > 0 && self.__compiled__[name]; + }) + .map(escapeRE) + .join('|'); + // (?!_) cause 1.5x slowdown + self.re.schema_test = RegExp('(^|(?!_)(?:[><]|' + re.src_ZPCc + '))(' + slist + ')', 'i'); + self.re.schema_search = RegExp('(^|(?!_)(?:[><]|' + re.src_ZPCc + '))(' + slist + ')', 'ig'); + + self.re.pretest = RegExp( + '(' + self.re.schema_test.source + ')|' + + '(' + self.re.host_fuzzy_test.source + ')|' + + '@', + 'i'); + + // + // Cleanup + // + + resetScanCache(self); +} + +/** + * class Match + * + * Match result. Single element of array, returned by [[LinkifyIt#match]] + **/ +function Match(self, shift) { + var start = self.__index__, + end = self.__last_index__, + text = self.__text_cache__.slice(start, end); + + /** + * Match#schema -> String + * + * Prefix (protocol) for matched string. + **/ + this.schema = self.__schema__.toLowerCase(); + /** + * Match#index -> Number + * + * First position of matched string. + **/ + this.index = start + shift; + /** + * Match#lastIndex -> Number + * + * Next position after matched string. + **/ + this.lastIndex = end + shift; + /** + * Match#raw -> String + * + * Matched string. + **/ + this.raw = text; + /** + * Match#text -> String + * + * Notmalized text of matched string. + **/ + this.text = text; + /** + * Match#url -> String + * + * Normalized url of matched string. + **/ + this.url = text; +} + +function createMatch(self, shift) { + var match = new Match(self, shift); + + self.__compiled__[match.schema].normalize(match, self); + + return match; +} + + +/** + * class LinkifyIt + **/ + +/** + * new LinkifyIt(schemas, options) + * - schemas (Object): Optional. Additional schemas to validate (prefix/validator) + * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } + * + * Creates new linkifier instance with optional additional schemas. + * Can be called without `new` keyword for convenience. + * + * By default understands: + * + * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links + * - "fuzzy" links and emails (example.com, foo@bar.com). + * + * `schemas` is an object, where each key/value describes protocol/rule: + * + * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:` + * for example). `linkify-it` makes shure that prefix is not preceeded with + * alphanumeric char and symbols. Only whitespaces and punctuation allowed. + * - __value__ - rule to check tail after link prefix + * - _String_ - just alias to existing rule + * - _Object_ + * - _validate_ - validator function (should return matched length on success), + * or `RegExp`. + * - _normalize_ - optional function to normalize text & url of matched result + * (for example, for @twitter mentions). + * + * `options`: + * + * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`. + * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts + * like version numbers. Default `false`. + * - __fuzzyEmail__ - recognize emails without `mailto:` prefix. + * + **/ +function LinkifyIt(schemas, options) { + if (!(this instanceof LinkifyIt)) { + return new LinkifyIt(schemas, options); + } + + if (!options) { + if (isOptionsObj(schemas)) { + options = schemas; + schemas = {}; + } + } + + this.__opts__ = assign({}, defaultOptions, options); + + // Cache last tested result. Used to skip repeating steps on next `match` call. + this.__index__ = -1; + this.__last_index__ = -1; // Next scan position + this.__schema__ = ''; + this.__text_cache__ = ''; + + this.__schemas__ = assign({}, defaultSchemas, schemas); + this.__compiled__ = {}; + + this.__tlds__ = tlds_default; + this.__tlds_replaced__ = false; + + this.re = {}; + + compile(this); +} + + +/** chainable + * LinkifyIt#add(schema, definition) + * - schema (String): rule name (fixed pattern prefix) + * - definition (String|RegExp|Object): schema definition + * + * Add new rule definition. See constructor description for details. + **/ +LinkifyIt.prototype.add = function add(schema, definition) { + this.__schemas__[schema] = definition; + compile(this); + return this; +}; + + +/** chainable + * LinkifyIt#set(options) + * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } + * + * Set recognition options for links without schema. + **/ +LinkifyIt.prototype.set = function set(options) { + this.__opts__ = assign(this.__opts__, options); + return this; +}; + + +/** + * LinkifyIt#test(text) -> Boolean + * + * Searches linkifiable pattern and returns `true` on success or `false` on fail. + **/ +LinkifyIt.prototype.test = function test(text) { + // Reset scan cache + this.__text_cache__ = text; + this.__index__ = -1; + + if (!text.length) { return false; } + + var m, ml, me, len, shift, next, re, tld_pos, at_pos; + + // try to scan for link with schema - that's the most simple rule + if (this.re.schema_test.test(text)) { + re = this.re.schema_search; + re.lastIndex = 0; + while ((m = re.exec(text)) !== null) { + len = this.testSchemaAt(text, m[2], re.lastIndex); + if (len) { + this.__schema__ = m[2]; + this.__index__ = m.index + m[1].length; + this.__last_index__ = m.index + m[0].length + len; + break; + } + } + } + + if (this.__opts__.fuzzyLink && this.__compiled__['http:']) { + // guess schemaless links + tld_pos = text.search(this.re.host_fuzzy_test); + if (tld_pos >= 0) { + // if tld is located after found link - no need to check fuzzy pattern + if (this.__index__ < 0 || tld_pos < this.__index__) { + if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) { + + shift = ml.index + ml[1].length; + + if (this.__index__ < 0 || shift < this.__index__) { + this.__schema__ = ''; + this.__index__ = shift; + this.__last_index__ = ml.index + ml[0].length; + } + } + } + } + } + + if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) { + // guess schemaless emails + at_pos = text.indexOf('@'); + if (at_pos >= 0) { + // We can't skip this check, because this cases are possible: + // 192.168.1.1@gmail.com, my.in@example.com + if ((me = text.match(this.re.email_fuzzy)) !== null) { + + shift = me.index + me[1].length; + next = me.index + me[0].length; + + if (this.__index__ < 0 || shift < this.__index__ || + (shift === this.__index__ && next > this.__last_index__)) { + this.__schema__ = 'mailto:'; + this.__index__ = shift; + this.__last_index__ = next; + } + } + } + } + + return this.__index__ >= 0; +}; + + +/** + * LinkifyIt#pretest(text) -> Boolean + * + * Very quick check, that can give false positives. Returns true if link MAY BE + * can exists. Can be used for speed optimization, when you need to check that + * link NOT exists. + **/ +LinkifyIt.prototype.pretest = function pretest(text) { + return this.re.pretest.test(text); +}; + + +/** + * LinkifyIt#testSchemaAt(text, name, position) -> Number + * - text (String): text to scan + * - name (String): rule (schema) name + * - position (Number): text offset to check from + * + * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly + * at given position. Returns length of found pattern (0 on fail). + **/ +LinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) { + // If not supported schema check requested - terminate + if (!this.__compiled__[schema.toLowerCase()]) { + return 0; + } + return this.__compiled__[schema.toLowerCase()].validate(text, pos, this); +}; + + +/** + * LinkifyIt#match(text) -> Array|null + * + * Returns array of found link descriptions or `null` on fail. We strongly + * recommend to use [[LinkifyIt#test]] first, for best speed. + * + * ##### Result match description + * + * - __schema__ - link schema, can be empty for fuzzy links, or `//` for + * protocol-neutral links. + * - __index__ - offset of matched text + * - __lastIndex__ - index of next char after mathch end + * - __raw__ - matched text + * - __text__ - normalized text + * - __url__ - link, generated from matched text + **/ +LinkifyIt.prototype.match = function match(text) { + var shift = 0, result = []; + + // Try to take previous element from cache, if .test() called before + if (this.__index__ >= 0 && this.__text_cache__ === text) { + result.push(createMatch(this, shift)); + shift = this.__last_index__; + } + + // Cut head if cache was used + var tail = shift ? text.slice(shift) : text; + + // Scan string until end reached + while (this.test(tail)) { + result.push(createMatch(this, shift)); + + tail = tail.slice(this.__last_index__); + shift += this.__last_index__; + } + + if (result.length) { + return result; + } + + return null; +}; + + +/** chainable + * LinkifyIt#tlds(list [, keepOld]) -> this + * - list (Array): list of tlds + * - keepOld (Boolean): merge with current list if `true` (`false` by default) + * + * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix) + * to avoid false positives. By default this algorythm used: + * + * - hostname with any 2-letter root zones are ok. + * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф + * are ok. + * - encoded (`xn--...`) root zones are ok. + * + * If list is replaced, then exact match for 2-chars root zones will be checked. + **/ +LinkifyIt.prototype.tlds = function tlds(list, keepOld) { + list = Array.isArray(list) ? list : [ list ]; + + if (!keepOld) { + this.__tlds__ = list.slice(); + this.__tlds_replaced__ = true; + compile(this); + return this; + } + + this.__tlds__ = this.__tlds__.concat(list) + .sort() + .filter(function (el, idx, arr) { + return el !== arr[idx - 1]; + }) + .reverse(); + + compile(this); + return this; +}; + +/** + * LinkifyIt#normalize(match) + * + * Default normalizer (if schema does not define it's own). + **/ +LinkifyIt.prototype.normalize = function normalize(match) { + + // Do minimal possible changes by default. Need to collect feedback prior + // to move forward https://github.com/markdown-it/linkify-it/issues/1 + + if (!match.schema) { match.url = 'http://' + match.url; } + + if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) { + match.url = 'mailto:' + match.url; + } +}; + + +module.exports = LinkifyIt; diff --git a/node_modules/linkify-it/lib/re.js b/node_modules/linkify-it/lib/re.js new file mode 100644 index 000000000..683d045b9 --- /dev/null +++ b/node_modules/linkify-it/lib/re.js @@ -0,0 +1,162 @@ +'use strict'; + +// Use direct extract instead of `regenerate` to reduse browserified size +var src_Any = exports.src_Any = require('uc.micro/properties/Any/regex').source; +var src_Cc = exports.src_Cc = require('uc.micro/categories/Cc/regex').source; +var src_Z = exports.src_Z = require('uc.micro/categories/Z/regex').source; +var src_P = exports.src_P = require('uc.micro/categories/P/regex').source; + +// \p{\Z\P\Cc\CF} (white spaces + control + format + punctuation) +var src_ZPCc = exports.src_ZPCc = [ src_Z, src_P, src_Cc ].join('|'); + +// \p{\Z\Cc} (white spaces + control) +var src_ZCc = exports.src_ZCc = [ src_Z, src_Cc ].join('|'); + +// All possible word characters (everything without punctuation, spaces & controls) +// Defined via punctuation & spaces to save space +// Should be something like \p{\L\N\S\M} (\w but without `_`) +var src_pseudo_letter = '(?:(?!>|<|' + src_ZPCc + ')' + src_Any + ')'; +// The same as abothe but without [0-9] +// var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')'; + +//////////////////////////////////////////////////////////////////////////////// + +var src_ip4 = exports.src_ip4 = + + '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; + +// Prohibit [@/] in user/pass to avoid wrong domain fetch. +exports.src_auth = '(?:(?:(?!' + src_ZCc + '|[@/]).)+@)?'; + +var src_port = exports.src_port = + + '(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?'; + +var src_host_terminator = exports.src_host_terminator = + + '(?=$|>|<|' + src_ZPCc + ')(?!-|_|:\\d|\\.-|\\.(?!$|' + src_ZPCc + '))'; + +var src_path = exports.src_path = + + '(?:' + + '[/?#]' + + '(?:' + + '(?!' + src_ZCc + '|[()[\\]{}.,"\'?!\\-<>]).|' + + '\\[(?:(?!' + src_ZCc + '|\\]).)*\\]|' + + '\\((?:(?!' + src_ZCc + '|[)]).)*\\)|' + + '\\{(?:(?!' + src_ZCc + '|[}]).)*\\}|' + + '\\"(?:(?!' + src_ZCc + '|["]).)+\\"|' + + "\\'(?:(?!" + src_ZCc + "|[']).)+\\'|" + + "\\'(?=" + src_pseudo_letter + ').|' + // allow `I'm_king` if no pair found + '\\.{2,3}[a-zA-Z0-9%/]|' + // github has ... in commit range links. Restrict to + // - english + // - percent-encoded + // - parts of file path + // until more examples found. + '\\.(?!' + src_ZCc + '|[.]).|' + + '\\-(?!--(?:[^-]|$))(?:-*)|' + // `---` => long dash, terminate + '\\,(?!' + src_ZCc + ').|' + // allow `,,,` in paths + '\\!(?!' + src_ZCc + '|[!]).|' + + '\\?(?!' + src_ZCc + '|[?]).' + + ')+' + + '|\\/' + + ')?'; + +var src_email_name = exports.src_email_name = + + '[\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]+'; + +var src_xn = exports.src_xn = + + 'xn--[a-z0-9\\-]{1,59}'; + +// More to read about domain names +// http://serverfault.com/questions/638260/ + +var src_domain_root = exports.src_domain_root = + + // Allow letters & digits (http://test1) + '(?:' + + src_xn + + '|' + + src_pseudo_letter + '{1,63}' + + ')'; + +var src_domain = exports.src_domain = + + '(?:' + + src_xn + + '|' + + '(?:' + src_pseudo_letter + ')' + + '|' + + // don't allow `--` in domain names, because: + // - that can conflict with markdown — / – + // - nobody use those anyway + '(?:' + src_pseudo_letter + '(?:-(?!-)|' + src_pseudo_letter + '){0,61}' + src_pseudo_letter + ')' + + ')'; + +var src_host = exports.src_host = + + '(?:' + + // Don't need IP check, because digits are already allowed in normal domain names + // src_ip4 + + // '|' + + '(?:(?:(?:' + src_domain + ')\\.)*' + src_domain_root + ')' + + ')'; + +var tpl_host_fuzzy = exports.tpl_host_fuzzy = + + '(?:' + + src_ip4 + + '|' + + '(?:(?:(?:' + src_domain + ')\\.)+(?:%TLDS%))' + + ')'; + +var tpl_host_no_ip_fuzzy = exports.tpl_host_no_ip_fuzzy = + + '(?:(?:(?:' + src_domain + ')\\.)+(?:%TLDS%))'; + +exports.src_host_strict = + + src_host + src_host_terminator; + +var tpl_host_fuzzy_strict = exports.tpl_host_fuzzy_strict = + + tpl_host_fuzzy + src_host_terminator; + +exports.src_host_port_strict = + + src_host + src_port + src_host_terminator; + +var tpl_host_port_fuzzy_strict = exports.tpl_host_port_fuzzy_strict = + + tpl_host_fuzzy + src_port + src_host_terminator; + +var tpl_host_port_no_ip_fuzzy_strict = exports.tpl_host_port_no_ip_fuzzy_strict = + + tpl_host_no_ip_fuzzy + src_port + src_host_terminator; + + +//////////////////////////////////////////////////////////////////////////////// +// Main rules + +// Rude test fuzzy links by host, for quick deny +exports.tpl_host_fuzzy_test = + + 'localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:' + src_ZPCc + '|>|$))'; + +exports.tpl_email_fuzzy = + + '(^|<|>|\\(|' + src_ZCc + ')(' + src_email_name + '@' + tpl_host_fuzzy_strict + ')'; + +exports.tpl_link_fuzzy = + // Fuzzy link can't be prepended with .:/\- and non punctuation. + // but can start with > (markdown blockquote) + '(^|(?![.:/\\-_@])(?:[$+<=>^`|]|' + src_ZPCc + '))' + + '((?![$+<=>^`|])' + tpl_host_port_fuzzy_strict + src_path + ')'; + +exports.tpl_link_no_ip_fuzzy = + // Fuzzy link can't be prepended with .:/\- and non punctuation. + // but can start with > (markdown blockquote) + '(^|(?![.:/\\-_@])(?:[$+<=>^`|]|' + src_ZPCc + '))' + + '((?![$+<=>^`|])' + tpl_host_port_no_ip_fuzzy_strict + src_path + ')'; diff --git a/node_modules/linkify-it/package.json b/node_modules/linkify-it/package.json new file mode 100644 index 000000000..5408fb215 --- /dev/null +++ b/node_modules/linkify-it/package.json @@ -0,0 +1,40 @@ +{ + "name": "linkify-it", + "version": "1.2.4", + "description": "Links recognition library with FULL unicode support", + "keywords": [ + "linkify", + "linkifier", + "autolink", + "autolinker" + ], + "repository": "markdown-it/linkify-it", + "files": [ + "index.js", + "lib/" + ], + "license": "MIT", + "scripts": { + "test": "make test" + }, + "dependencies": { + "uc.micro": "^1.0.1" + }, + "devDependencies": { + "ansi": "^0.3.0", + "autoprefixer-stylus": "^0.9.2", + "benchmark": "^2.1.0", + "browserify": "*", + "chai": "^3.5.0", + "coveralls": "^2.11.2", + "jade": "^1.11.0", + "eslint": "~2.11.0", + "eslint-plugin-nodeca": "^1.0.0", + "istanbul": "*", + "mdurl": "^1.0.0", + "mocha": "*", + "ndoc": "^4.0.1", + "stylus": "~0.54.5", + "tlds": "^1.37.0" + } +} diff --git a/node_modules/lodash/LICENSE b/node_modules/lodash/LICENSE new file mode 100644 index 000000000..9cd87e5dc --- /dev/null +++ b/node_modules/lodash/LICENSE @@ -0,0 +1,22 @@ +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +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. diff --git a/node_modules/lodash/README.md b/node_modules/lodash/README.md new file mode 100644 index 000000000..fd98e5c98 --- /dev/null +++ b/node_modules/lodash/README.md @@ -0,0 +1,121 @@ +# lodash v3.10.1 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash](https://lodash.com/) exported as [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) modules. + +Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli): +```bash +$ lodash modularize modern exports=node -o ./ +$ lodash modern -d -o ./index.js +``` + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash +``` + +In Node.js/io.js: + +```js +// load the modern build +var _ = require('lodash'); +// or a method category +var array = require('lodash/array'); +// or a method (great for smaller builds with browserify/webpack) +var chunk = require('lodash/array/chunk'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/3.10.1-npm) for more details. + +**Note:**
    +Don’t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.
    +Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash by default. + +## Module formats + +lodash is also available in a variety of other builds & module formats. + + * npm packages for [modern](https://www.npmjs.com/package/lodash), [compatibility](https://www.npmjs.com/package/lodash-compat), & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) builds + * AMD modules for [modern](https://github.com/lodash/lodash/tree/3.10.1-amd) & [compatibility](https://github.com/lodash/lodash-compat/tree/3.10.1-amd) builds + * ES modules for the [modern](https://github.com/lodash/lodash/tree/3.10.1-es) build + +## Further Reading + + * [API Documentation](https://lodash.com/docs) + * [Build Differences](https://github.com/lodash/lodash/wiki/Build-Differences) + * [Changelog](https://github.com/lodash/lodash/wiki/Changelog) + * [Roadmap](https://github.com/lodash/lodash/wiki/Roadmap) + * [More Resources](https://github.com/lodash/lodash/wiki/Resources) + +## Features + + * ~100% [code coverage](https://coveralls.io/r/lodash) + * Follows [semantic versioning](http://semver.org/) for releases + * [Lazily evaluated](http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/) chaining + * [_(…)](https://lodash.com/docs#_) supports implicit chaining + * [_.ary](https://lodash.com/docs#ary) & [_.rearg](https://lodash.com/docs#rearg) to change function argument limits & order + * [_.at](https://lodash.com/docs#at) for cherry-picking collection values + * [_.attempt](https://lodash.com/docs#attempt) to execute functions which may error without a try-catch + * [_.before](https://lodash.com/docs#before) to complement [_.after](https://lodash.com/docs#after) + * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods + * [_.chunk](https://lodash.com/docs#chunk) for splitting an array into chunks of a given size + * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects + * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects + * [_.curry](https://lodash.com/docs#curry) & [_.curryRight](https://lodash.com/docs#curryRight) for creating [curried](http://hughfdjackson.com/javascript/why-curry-helps/) functions + * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) are cancelable & accept options for more control + * [_.defaultsDeep](https://lodash.com/docs#defaultsDeep) for recursively assigning default properties + * [_.fill](https://lodash.com/docs#fill) to fill arrays with values + * [_.findKey](https://lodash.com/docs#findKey) for finding keys + * [_.flow](https://lodash.com/docs#flow) to complement [_.flowRight](https://lodash.com/docs#flowRight) (a.k.a `_.compose`) + * [_.forEach](https://lodash.com/docs#forEach) supports exiting early + * [_.forIn](https://lodash.com/docs#forIn) for iterating all enumerable properties + * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties + * [_.get](https://lodash.com/docs#get) & [_.set](https://lodash.com/docs#set) for deep property getting & setting + * [_.gt](https://lodash.com/docs#gt), [_.gte](https://lodash.com/docs#gte), [_.lt](https://lodash.com/docs#lt), & [_.lte](https://lodash.com/docs#lte) relational methods + * [_.inRange](https://lodash.com/docs#inRange) for checking whether a number is within a given range + * [_.isNative](https://lodash.com/docs#isNative) to check for native functions + * [_.isPlainObject](https://lodash.com/docs#isPlainObject) & [_.toPlainObject](https://lodash.com/docs#toPlainObject) to check for & convert to `Object` objects + * [_.isTypedArray](https://lodash.com/docs#isTypedArray) to check for typed arrays + * [_.mapKeys](https://lodash.com/docs#mapKeys) for mapping keys to an object + * [_.matches](https://lodash.com/docs#matches) supports deep object comparisons + * [_.matchesProperty](https://lodash.com/docs#matchesProperty) to complement [_.matches](https://lodash.com/docs#matches) & [_.property](https://lodash.com/docs#property) + * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) + * [_.method](https://lodash.com/docs#method) & [_.methodOf](https://lodash.com/docs#methodOf) to create functions that invoke methods + * [_.modArgs](https://lodash.com/docs#modArgs) for more advanced functional composition + * [_.parseInt](https://lodash.com/docs#parseInt) for consistent cross-environment behavior + * [_.pull](https://lodash.com/docs#pull), [_.pullAt](https://lodash.com/docs#pullAt), & [_.remove](https://lodash.com/docs#remove) for mutating arrays + * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers + * [_.restParam](https://lodash.com/docs#restParam) & [_.spread](https://lodash.com/docs#spread) for applying rest parameters & spreading arguments to functions + * [_.runInContext](https://lodash.com/docs#runInContext) for collisionless mixins & easier mocking + * [_.slice](https://lodash.com/docs#slice) for creating subsets of array-like values + * [_.sortByAll](https://lodash.com/docs#sortByAll) & [_.sortByOrder](https://lodash.com/docs#sortByOrder) for sorting by multiple properties & orders + * [_.support](https://lodash.com/docs#support) for flagging environment features + * [_.template](https://lodash.com/docs#template) supports [*“imports”*](https://lodash.com/docs#templateSettings-imports) options & [ES template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components) + * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects + * [_.unzipWith](https://lodash.com/docs#unzipWith) & [_.zipWith](https://lodash.com/docs#zipWith) to specify how grouped values should be combined + * [_.valuesIn](https://lodash.com/docs#valuesIn) for getting values of all enumerable properties + * [_.xor](https://lodash.com/docs#xor) to complement [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) + * [_.add](https://lodash.com/docs#add), [_.round](https://lodash.com/docs#round), [_.sum](https://lodash.com/docs#sum), & + [more](https://lodash.com/docs "_.ceil & _.floor") math methods + * [_.bind](https://lodash.com/docs#bind), [_.curry](https://lodash.com/docs#curry), [_.partial](https://lodash.com/docs#partial), & + [more](https://lodash.com/docs "_.bindKey, _.curryRight, _.partialRight") support customizable argument placeholders + * [_.capitalize](https://lodash.com/docs#capitalize), [_.trim](https://lodash.com/docs#trim), & + [more](https://lodash.com/docs "_.camelCase, _.deburr, _.endsWith, _.escapeRegExp, _.kebabCase, _.pad, _.padLeft, _.padRight, _.repeat, _.snakeCase, _.startCase, _.startsWith, _.trimLeft, _.trimRight, _.trunc, _.words") string methods + * [_.clone](https://lodash.com/docs#clone), [_.isEqual](https://lodash.com/docs#isEqual), & + [more](https://lodash.com/docs "_.assign, _.cloneDeep, _.merge") accept customizer callbacks + * [_.dropWhile](https://lodash.com/docs#dropWhile), [_.takeWhile](https://lodash.com/docs#takeWhile), & + [more](https://lodash.com/docs "_.drop, _.dropRight, _.dropRightWhile, _.take, _.takeRight, _.takeRightWhile") to complement [_.first](https://lodash.com/docs#first), [_.initial](https://lodash.com/docs#initial), [_.last](https://lodash.com/docs#last), & [_.rest](https://lodash.com/docs#rest) + * [_.findLast](https://lodash.com/docs#findLast), [_.findLastKey](https://lodash.com/docs#findLastKey), & + [more](https://lodash.com/docs "_.curryRight, _.dropRight, _.dropRightWhile, _.flowRight, _.forEachRight, _.forInRight, _.forOwnRight, _.padRight, partialRight, _.takeRight, _.trimRight, _.takeRightWhile") right-associative methods + * [_.includes](https://lodash.com/docs#includes), [_.toArray](https://lodash.com/docs#toArray), & + [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.findLast, _.findWhere, _.forEach, _.forEachRight, _.groupBy, _.indexBy, _.invoke, _.map, _.max, _.min, _.partition, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.sortByAll, _.sortByOrder, _.sum, _.where") accept strings + * [_#commit](https://lodash.com/docs#prototype-commit) & [_#plant](https://lodash.com/docs#prototype-plant) for working with chain sequences + * [_#thru](https://lodash.com/docs#thru) to pass values thru a chain sequence + +## Support + +Tested in Chrome 43-44, Firefox 38-39, IE 6-11, MS Edge, Safari 5-8, ChakraNode 0.12.2, io.js 2.5.0, Node.js 0.8.28, 0.10.40, & 0.12.7, PhantomJS 1.9.8, RingoJS 0.11, & Rhino 1.7.6. +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. Special thanks to [Sauce Labs](https://saucelabs.com/) for providing automated browser testing. diff --git a/node_modules/lodash/array.js b/node_modules/lodash/array.js new file mode 100644 index 000000000..e5121fa52 --- /dev/null +++ b/node_modules/lodash/array.js @@ -0,0 +1,44 @@ +module.exports = { + 'chunk': require('./array/chunk'), + 'compact': require('./array/compact'), + 'difference': require('./array/difference'), + 'drop': require('./array/drop'), + 'dropRight': require('./array/dropRight'), + 'dropRightWhile': require('./array/dropRightWhile'), + 'dropWhile': require('./array/dropWhile'), + 'fill': require('./array/fill'), + 'findIndex': require('./array/findIndex'), + 'findLastIndex': require('./array/findLastIndex'), + 'first': require('./array/first'), + 'flatten': require('./array/flatten'), + 'flattenDeep': require('./array/flattenDeep'), + 'head': require('./array/head'), + 'indexOf': require('./array/indexOf'), + 'initial': require('./array/initial'), + 'intersection': require('./array/intersection'), + 'last': require('./array/last'), + 'lastIndexOf': require('./array/lastIndexOf'), + 'object': require('./array/object'), + 'pull': require('./array/pull'), + 'pullAt': require('./array/pullAt'), + 'remove': require('./array/remove'), + 'rest': require('./array/rest'), + 'slice': require('./array/slice'), + 'sortedIndex': require('./array/sortedIndex'), + 'sortedLastIndex': require('./array/sortedLastIndex'), + 'tail': require('./array/tail'), + 'take': require('./array/take'), + 'takeRight': require('./array/takeRight'), + 'takeRightWhile': require('./array/takeRightWhile'), + 'takeWhile': require('./array/takeWhile'), + 'union': require('./array/union'), + 'uniq': require('./array/uniq'), + 'unique': require('./array/unique'), + 'unzip': require('./array/unzip'), + 'unzipWith': require('./array/unzipWith'), + 'without': require('./array/without'), + 'xor': require('./array/xor'), + 'zip': require('./array/zip'), + 'zipObject': require('./array/zipObject'), + 'zipWith': require('./array/zipWith') +}; diff --git a/node_modules/lodash/array/chunk.js b/node_modules/lodash/array/chunk.js new file mode 100644 index 000000000..c8be1fb02 --- /dev/null +++ b/node_modules/lodash/array/chunk.js @@ -0,0 +1,46 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `collection` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(nativeFloor(size) || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/node_modules/lodash/array/compact.js b/node_modules/lodash/array/compact.js new file mode 100644 index 000000000..1dc1c55e8 --- /dev/null +++ b/node_modules/lodash/array/compact.js @@ -0,0 +1,30 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/node_modules/lodash/array/difference.js b/node_modules/lodash/array/difference.js new file mode 100644 index 000000000..128932a14 --- /dev/null +++ b/node_modules/lodash/array/difference.js @@ -0,0 +1,29 @@ +var baseDifference = require('../internal/baseDifference'), + baseFlatten = require('../internal/baseFlatten'), + isArrayLike = require('../internal/isArrayLike'), + isObjectLike = require('../internal/isObjectLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ +var difference = restParam(function(array, values) { + return (isObjectLike(array) && isArrayLike(array)) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; +}); + +module.exports = difference; diff --git a/node_modules/lodash/array/drop.js b/node_modules/lodash/array/drop.js new file mode 100644 index 000000000..039a0b5fd --- /dev/null +++ b/node_modules/lodash/array/drop.js @@ -0,0 +1,39 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, n < 0 ? 0 : n); +} + +module.exports = drop; diff --git a/node_modules/lodash/array/dropRight.js b/node_modules/lodash/array/dropRight.js new file mode 100644 index 000000000..14b5eb6f0 --- /dev/null +++ b/node_modules/lodash/array/dropRight.js @@ -0,0 +1,40 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/node_modules/lodash/array/dropRightWhile.js b/node_modules/lodash/array/dropRightWhile.js new file mode 100644 index 000000000..be158bd5f --- /dev/null +++ b/node_modules/lodash/array/dropRightWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that match the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [1] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); + * // => ['barney'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/node_modules/lodash/array/dropWhile.js b/node_modules/lodash/array/dropWhile.js new file mode 100644 index 000000000..d9eabae9f --- /dev/null +++ b/node_modules/lodash/array/dropWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [3] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropWhile(users, 'active', false), 'user'); + * // => ['pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/node_modules/lodash/array/fill.js b/node_modules/lodash/array/fill.js new file mode 100644 index 000000000..2c8f6da71 --- /dev/null +++ b/node_modules/lodash/array/fill.js @@ -0,0 +1,44 @@ +var baseFill = require('../internal/baseFill'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8], '*', 1, 2); + * // => [4, '*', 8] + */ +function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/node_modules/lodash/array/findIndex.js b/node_modules/lodash/array/findIndex.js new file mode 100644 index 000000000..2a6b8e14b --- /dev/null +++ b/node_modules/lodash/array/findIndex.js @@ -0,0 +1,53 @@ +var createFindIndex = require('../internal/createFindIndex'); + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(chr) { + * return chr.user == 'barney'; + * }); + * // => 0 + * + * // using the `_.matches` callback shorthand + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // using the `_.matchesProperty` callback shorthand + * _.findIndex(users, 'active', false); + * // => 0 + * + * // using the `_.property` callback shorthand + * _.findIndex(users, 'active'); + * // => 2 + */ +var findIndex = createFindIndex(); + +module.exports = findIndex; diff --git a/node_modules/lodash/array/findLastIndex.js b/node_modules/lodash/array/findLastIndex.js new file mode 100644 index 000000000..d6d8eca6d --- /dev/null +++ b/node_modules/lodash/array/findLastIndex.js @@ -0,0 +1,53 @@ +var createFindIndex = require('../internal/createFindIndex'); + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(chr) { + * return chr.user == 'pebbles'; + * }); + * // => 2 + * + * // using the `_.matches` callback shorthand + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastIndex(users, 'active', false); + * // => 2 + * + * // using the `_.property` callback shorthand + * _.findLastIndex(users, 'active'); + * // => 0 + */ +var findLastIndex = createFindIndex(true); + +module.exports = findLastIndex; diff --git a/node_modules/lodash/array/first.js b/node_modules/lodash/array/first.js new file mode 100644 index 000000000..b3b9c79c7 --- /dev/null +++ b/node_modules/lodash/array/first.js @@ -0,0 +1,22 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ +function first(array) { + return array ? array[0] : undefined; +} + +module.exports = first; diff --git a/node_modules/lodash/array/flatten.js b/node_modules/lodash/array/flatten.js new file mode 100644 index 000000000..dc2eff868 --- /dev/null +++ b/node_modules/lodash/array/flatten.js @@ -0,0 +1,32 @@ +var baseFlatten = require('../internal/baseFlatten'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it's only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ +function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; +} + +module.exports = flatten; diff --git a/node_modules/lodash/array/flattenDeep.js b/node_modules/lodash/array/flattenDeep.js new file mode 100644 index 000000000..9f775febe --- /dev/null +++ b/node_modules/lodash/array/flattenDeep.js @@ -0,0 +1,21 @@ +var baseFlatten = require('../internal/baseFlatten'); + +/** + * Recursively flattens a nested array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to recursively flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, 3, [4]]]); + * // => [1, 2, 3, 4] + */ +function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, true) : []; +} + +module.exports = flattenDeep; diff --git a/node_modules/lodash/array/head.js b/node_modules/lodash/array/head.js new file mode 100644 index 000000000..1961b08c7 --- /dev/null +++ b/node_modules/lodash/array/head.js @@ -0,0 +1 @@ +module.exports = require('./first'); diff --git a/node_modules/lodash/array/indexOf.js b/node_modules/lodash/array/indexOf.js new file mode 100644 index 000000000..4cfc68231 --- /dev/null +++ b/node_modules/lodash/array/indexOf.js @@ -0,0 +1,53 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + binaryIndex = require('../internal/binaryIndex'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ +function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value); + if (index < length && + (value === value ? (value === array[index]) : (array[index] !== array[index]))) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); +} + +module.exports = indexOf; diff --git a/node_modules/lodash/array/initial.js b/node_modules/lodash/array/initial.js new file mode 100644 index 000000000..59b7a7d96 --- /dev/null +++ b/node_modules/lodash/array/initial.js @@ -0,0 +1,20 @@ +var dropRight = require('./dropRight'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + return dropRight(array, 1); +} + +module.exports = initial; diff --git a/node_modules/lodash/array/intersection.js b/node_modules/lodash/array/intersection.js new file mode 100644 index 000000000..f218432cf --- /dev/null +++ b/node_modules/lodash/array/intersection.js @@ -0,0 +1,58 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + cacheIndexOf = require('../internal/cacheIndexOf'), + createCache = require('../internal/createCache'), + isArrayLike = require('../internal/isArrayLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ +var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = baseIndexOf, + isCommon = true, + result = []; + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; + + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } + } + if (seen) { + seen.push(value); + } + result.push(value); + } + } + return result; +}); + +module.exports = intersection; diff --git a/node_modules/lodash/array/last.js b/node_modules/lodash/array/last.js new file mode 100644 index 000000000..299af3146 --- /dev/null +++ b/node_modules/lodash/array/last.js @@ -0,0 +1,19 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/node_modules/lodash/array/lastIndexOf.js b/node_modules/lodash/array/lastIndexOf.js new file mode 100644 index 000000000..02b806269 --- /dev/null +++ b/node_modules/lodash/array/lastIndexOf.js @@ -0,0 +1,60 @@ +var binaryIndex = require('../internal/binaryIndex'), + indexOfNaN = require('../internal/indexOfNaN'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=array.length-1] The index to search from + * or `true` to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // using `fromIndex` + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + * + * // performing a binary search + * _.lastIndexOf([1, 1, 2, 2], 2, true); + * // => 3 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1; + var other = array[index]; + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = lastIndexOf; diff --git a/node_modules/lodash/array/object.js b/node_modules/lodash/array/object.js new file mode 100644 index 000000000..f4a34531b --- /dev/null +++ b/node_modules/lodash/array/object.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/node_modules/lodash/array/pull.js b/node_modules/lodash/array/pull.js new file mode 100644 index 000000000..7bcbb4a63 --- /dev/null +++ b/node_modules/lodash/array/pull.js @@ -0,0 +1,52 @@ +var baseIndexOf = require('../internal/baseIndexOf'); + +/** Used for native method references. */ +var arrayProto = Array.prototype; + +/** Native method references. */ +var splice = arrayProto.splice; + +/** + * Removes all provided values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ +function pull() { + var args = arguments, + array = args[0]; + + if (!(array && array.length)) { + return array; + } + var index = 0, + indexOf = baseIndexOf, + length = args.length; + + while (++index < length) { + var fromIndex = 0, + value = args[index]; + + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = pull; diff --git a/node_modules/lodash/array/pullAt.js b/node_modules/lodash/array/pullAt.js new file mode 100644 index 000000000..4ca2476f0 --- /dev/null +++ b/node_modules/lodash/array/pullAt.js @@ -0,0 +1,40 @@ +var baseAt = require('../internal/baseAt'), + baseCompareAscending = require('../internal/baseCompareAscending'), + baseFlatten = require('../internal/baseFlatten'), + basePullAt = require('../internal/basePullAt'), + restParam = require('../function/restParam'); + +/** + * Removes elements from `array` corresponding to the given indexes and returns + * an array of the removed elements. Indexes may be specified as an array of + * indexes or as individual arguments. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified as individual indexes or arrays of indexes. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ +var pullAt = restParam(function(array, indexes) { + indexes = baseFlatten(indexes); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(baseCompareAscending)); + return result; +}); + +module.exports = pullAt; diff --git a/node_modules/lodash/array/remove.js b/node_modules/lodash/array/remove.js new file mode 100644 index 000000000..0cf979bda --- /dev/null +++ b/node_modules/lodash/array/remove.js @@ -0,0 +1,64 @@ +var baseCallback = require('../internal/baseCallback'), + basePullAt = require('../internal/basePullAt'); + +/** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * **Note:** Unlike `_.filter`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ +function remove(array, predicate, thisArg) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseCallback(predicate, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; +} + +module.exports = remove; diff --git a/node_modules/lodash/array/rest.js b/node_modules/lodash/array/rest.js new file mode 100644 index 000000000..9bfb734f1 --- /dev/null +++ b/node_modules/lodash/array/rest.js @@ -0,0 +1,21 @@ +var drop = require('./drop'); + +/** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @alias tail + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + */ +function rest(array) { + return drop(array, 1); +} + +module.exports = rest; diff --git a/node_modules/lodash/array/slice.js b/node_modules/lodash/array/slice.js new file mode 100644 index 000000000..48ef1a1a2 --- /dev/null +++ b/node_modules/lodash/array/slice.js @@ -0,0 +1,30 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of `Array#slice` to support node + * lists in IE < 9 and to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + return baseSlice(array, start, end); +} + +module.exports = slice; diff --git a/node_modules/lodash/array/sortedIndex.js b/node_modules/lodash/array/sortedIndex.js new file mode 100644 index 000000000..6903bca43 --- /dev/null +++ b/node_modules/lodash/array/sortedIndex.js @@ -0,0 +1,53 @@ +var createSortedIndex = require('../internal/createSortedIndex'); + +/** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. If an iteratee + * function is provided it's invoked for `value` and each element of `array` + * to compute their sort ranking. The iteratee is bound to `thisArg` and + * invoked with one argument; (value). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 4, 5, 5], 5); + * // => 2 + * + * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; + * + * // using an iteratee function + * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { + * return this.data[word]; + * }, dict); + * // => 1 + * + * // using the `_.property` callback shorthand + * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 1 + */ +var sortedIndex = createSortedIndex(); + +module.exports = sortedIndex; diff --git a/node_modules/lodash/array/sortedLastIndex.js b/node_modules/lodash/array/sortedLastIndex.js new file mode 100644 index 000000000..81a4a8689 --- /dev/null +++ b/node_modules/lodash/array/sortedLastIndex.js @@ -0,0 +1,25 @@ +var createSortedIndex = require('../internal/createSortedIndex'); + +/** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 4, 5, 5], 5); + * // => 4 + */ +var sortedLastIndex = createSortedIndex(true); + +module.exports = sortedLastIndex; diff --git a/node_modules/lodash/array/tail.js b/node_modules/lodash/array/tail.js new file mode 100644 index 000000000..c5dfe779d --- /dev/null +++ b/node_modules/lodash/array/tail.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/node_modules/lodash/array/take.js b/node_modules/lodash/array/take.js new file mode 100644 index 000000000..875917a74 --- /dev/null +++ b/node_modules/lodash/array/take.js @@ -0,0 +1,39 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ +function take(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = take; diff --git a/node_modules/lodash/array/takeRight.js b/node_modules/lodash/array/takeRight.js new file mode 100644 index 000000000..6e89c8748 --- /dev/null +++ b/node_modules/lodash/array/takeRight.js @@ -0,0 +1,40 @@ +var baseSlice = require('../internal/baseSlice'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ +function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, n < 0 ? 0 : n); +} + +module.exports = takeRight; diff --git a/node_modules/lodash/array/takeRightWhile.js b/node_modules/lodash/array/takeRightWhile.js new file mode 100644 index 000000000..5464d13b7 --- /dev/null +++ b/node_modules/lodash/array/takeRightWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is bound to `thisArg` + * and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [2, 3] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active'), 'user'); + * // => [] + */ +function takeRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3), false, true) + : []; +} + +module.exports = takeRightWhile; diff --git a/node_modules/lodash/array/takeWhile.js b/node_modules/lodash/array/takeWhile.js new file mode 100644 index 000000000..f7e28a1d4 --- /dev/null +++ b/node_modules/lodash/array/takeWhile.js @@ -0,0 +1,59 @@ +var baseCallback = require('../internal/baseCallback'), + baseWhile = require('../internal/baseWhile'); + +/** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [1, 2] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeWhile(users, 'active', false), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeWhile(users, 'active'), 'user'); + * // => [] + */ +function takeWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, baseCallback(predicate, thisArg, 3)) + : []; +} + +module.exports = takeWhile; diff --git a/node_modules/lodash/array/union.js b/node_modules/lodash/array/union.js new file mode 100644 index 000000000..53cefe432 --- /dev/null +++ b/node_modules/lodash/array/union.js @@ -0,0 +1,24 @@ +var baseFlatten = require('../internal/baseFlatten'), + baseUniq = require('../internal/baseUniq'), + restParam = require('../function/restParam'); + +/** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ +var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); +}); + +module.exports = union; diff --git a/node_modules/lodash/array/uniq.js b/node_modules/lodash/array/uniq.js new file mode 100644 index 000000000..ae937efdf --- /dev/null +++ b/node_modules/lodash/array/uniq.js @@ -0,0 +1,71 @@ +var baseCallback = require('../internal/baseCallback'), + baseUniq = require('../internal/baseUniq'), + isIterateeCall = require('../internal/isIterateeCall'), + sortedUniq = require('../internal/sortedUniq'); + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it's invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ +function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; + isSorted = false; + } + iteratee = iteratee == null ? iteratee : baseCallback(iteratee, thisArg, 3); + return (isSorted) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); +} + +module.exports = uniq; diff --git a/node_modules/lodash/array/unique.js b/node_modules/lodash/array/unique.js new file mode 100644 index 000000000..396de1b80 --- /dev/null +++ b/node_modules/lodash/array/unique.js @@ -0,0 +1 @@ +module.exports = require('./uniq'); diff --git a/node_modules/lodash/array/unzip.js b/node_modules/lodash/array/unzip.js new file mode 100644 index 000000000..0a539fa63 --- /dev/null +++ b/node_modules/lodash/array/unzip.js @@ -0,0 +1,47 @@ +var arrayFilter = require('../internal/arrayFilter'), + arrayMap = require('../internal/arrayMap'), + baseProperty = require('../internal/baseProperty'), + isArrayLike = require('../internal/isArrayLike'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ +function unzip(array) { + if (!(array && array.length)) { + return []; + } + var index = -1, + length = 0; + + array = arrayFilter(array, function(group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + var result = Array(length); + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)); + } + return result; +} + +module.exports = unzip; diff --git a/node_modules/lodash/array/unzipWith.js b/node_modules/lodash/array/unzipWith.js new file mode 100644 index 000000000..324a2b1db --- /dev/null +++ b/node_modules/lodash/array/unzipWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('../internal/arrayMap'), + arrayReduce = require('../internal/arrayReduce'), + bindCallback = require('../internal/bindCallback'), + unzip = require('./unzip'); + +/** + * This method is like `_.unzip` except that it accepts an iteratee to specify + * how regrouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee] The function to combine regrouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ +function unzipWith(array, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + iteratee = bindCallback(iteratee, thisArg, 4); + return arrayMap(result, function(group) { + return arrayReduce(group, iteratee, undefined, true); + }); +} + +module.exports = unzipWith; diff --git a/node_modules/lodash/array/without.js b/node_modules/lodash/array/without.js new file mode 100644 index 000000000..2ac3d1176 --- /dev/null +++ b/node_modules/lodash/array/without.js @@ -0,0 +1,27 @@ +var baseDifference = require('../internal/baseDifference'), + isArrayLike = require('../internal/isArrayLike'), + restParam = require('../function/restParam'); + +/** + * Creates an array excluding all provided values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ +var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; +}); + +module.exports = without; diff --git a/node_modules/lodash/array/xor.js b/node_modules/lodash/array/xor.js new file mode 100644 index 000000000..04ef32aef --- /dev/null +++ b/node_modules/lodash/array/xor.js @@ -0,0 +1,35 @@ +var arrayPush = require('../internal/arrayPush'), + baseDifference = require('../internal/baseDifference'), + baseUniq = require('../internal/baseUniq'), + isArrayLike = require('../internal/isArrayLike'); + +/** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the provided arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([1, 2], [4, 2]); + * // => [1, 4] + */ +function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArrayLike(array)) { + var result = result + ? arrayPush(baseDifference(result, array), baseDifference(array, result)) + : array; + } + } + return result ? baseUniq(result) : []; +} + +module.exports = xor; diff --git a/node_modules/lodash/array/zip.js b/node_modules/lodash/array/zip.js new file mode 100644 index 000000000..53a6f6991 --- /dev/null +++ b/node_modules/lodash/array/zip.js @@ -0,0 +1,21 @@ +var restParam = require('../function/restParam'), + unzip = require('./unzip'); + +/** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ +var zip = restParam(unzip); + +module.exports = zip; diff --git a/node_modules/lodash/array/zipObject.js b/node_modules/lodash/array/zipObject.js new file mode 100644 index 000000000..dec7a211b --- /dev/null +++ b/node_modules/lodash/array/zipObject.js @@ -0,0 +1,43 @@ +var isArray = require('../lang/isArray'); + +/** + * The inverse of `_.pairs`; this method returns an object composed from arrays + * of property names and values. Provide either a single two dimensional array, + * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names + * and one of corresponding values. + * + * @static + * @memberOf _ + * @alias object + * @category Array + * @param {Array} props The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ +function zipObject(props, values) { + var index = -1, + length = props ? props.length : 0, + result = {}; + + if (length && !values && !isArray(props[0])) { + values = []; + } + while (++index < length) { + var key = props[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; +} + +module.exports = zipObject; diff --git a/node_modules/lodash/array/zipWith.js b/node_modules/lodash/array/zipWith.js new file mode 100644 index 000000000..ad103742c --- /dev/null +++ b/node_modules/lodash/array/zipWith.js @@ -0,0 +1,36 @@ +var restParam = require('../function/restParam'), + unzipWith = require('./unzipWith'); + +/** + * This method is like `_.zip` except that it accepts an iteratee to specify + * how grouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], _.add); + * // => [111, 222] + */ +var zipWith = restParam(function(arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined; + + if (length > 2 && typeof iteratee == 'function') { + length -= 2; + } else { + iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; + thisArg = undefined; + } + arrays.length = length; + return unzipWith(arrays, iteratee, thisArg); +}); + +module.exports = zipWith; diff --git a/node_modules/lodash/chain.js b/node_modules/lodash/chain.js new file mode 100644 index 000000000..6439627f3 --- /dev/null +++ b/node_modules/lodash/chain.js @@ -0,0 +1,16 @@ +module.exports = { + 'chain': require('./chain/chain'), + 'commit': require('./chain/commit'), + 'concat': require('./chain/concat'), + 'lodash': require('./chain/lodash'), + 'plant': require('./chain/plant'), + 'reverse': require('./chain/reverse'), + 'run': require('./chain/run'), + 'tap': require('./chain/tap'), + 'thru': require('./chain/thru'), + 'toJSON': require('./chain/toJSON'), + 'toString': require('./chain/toString'), + 'value': require('./chain/value'), + 'valueOf': require('./chain/valueOf'), + 'wrapperChain': require('./chain/wrapperChain') +}; diff --git a/node_modules/lodash/chain/chain.js b/node_modules/lodash/chain/chain.js new file mode 100644 index 000000000..453ba1eb5 --- /dev/null +++ b/node_modules/lodash/chain/chain.js @@ -0,0 +1,35 @@ +var lodash = require('./lodash'); + +/** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/node_modules/lodash/chain/commit.js b/node_modules/lodash/chain/commit.js new file mode 100644 index 000000000..c732d1bf9 --- /dev/null +++ b/node_modules/lodash/chain/commit.js @@ -0,0 +1 @@ +module.exports = require('./wrapperCommit'); diff --git a/node_modules/lodash/chain/concat.js b/node_modules/lodash/chain/concat.js new file mode 100644 index 000000000..90607d1ee --- /dev/null +++ b/node_modules/lodash/chain/concat.js @@ -0,0 +1 @@ +module.exports = require('./wrapperConcat'); diff --git a/node_modules/lodash/chain/lodash.js b/node_modules/lodash/chain/lodash.js new file mode 100644 index 000000000..1c3467efe --- /dev/null +++ b/node_modules/lodash/chain/lodash.js @@ -0,0 +1,125 @@ +var LazyWrapper = require('../internal/LazyWrapper'), + LodashWrapper = require('../internal/LodashWrapper'), + baseLodash = require('../internal/baseLodash'), + isArray = require('../lang/isArray'), + isObjectLike = require('../internal/isObjectLike'), + wrapperClone = require('../internal/wrapperClone'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that retrieve a single value or may return a + * primitive value will automatically end the chain returning the unwrapped + * value. Explicit chaining may be enabled using `_.chain`. The execution of + * chained methods is lazy, that is, execution is deferred until `_#value` + * is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization strategy which merge iteratee calls; this can help + * to avoid the creation of intermediate data structures and greatly reduce the + * number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, + * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, + * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, + * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, + * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, + * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, + * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, + * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, + * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, + * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, + * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, + * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, + * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, + * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, + * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, + * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, + * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, + * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, + * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, + * `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. + * + * @name _ + * @constructor + * @category Chain + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(total, n) { + * return total + n; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(n) { + * return n * n; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ +function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); +} + +// Ensure wrappers are instances of `baseLodash`. +lodash.prototype = baseLodash.prototype; + +module.exports = lodash; diff --git a/node_modules/lodash/chain/plant.js b/node_modules/lodash/chain/plant.js new file mode 100644 index 000000000..04099f238 --- /dev/null +++ b/node_modules/lodash/chain/plant.js @@ -0,0 +1 @@ +module.exports = require('./wrapperPlant'); diff --git a/node_modules/lodash/chain/reverse.js b/node_modules/lodash/chain/reverse.js new file mode 100644 index 000000000..f72a64a19 --- /dev/null +++ b/node_modules/lodash/chain/reverse.js @@ -0,0 +1 @@ +module.exports = require('./wrapperReverse'); diff --git a/node_modules/lodash/chain/run.js b/node_modules/lodash/chain/run.js new file mode 100644 index 000000000..5e751a2c3 --- /dev/null +++ b/node_modules/lodash/chain/run.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/chain/tap.js b/node_modules/lodash/chain/tap.js new file mode 100644 index 000000000..3d0257ecf --- /dev/null +++ b/node_modules/lodash/chain/tap.js @@ -0,0 +1,29 @@ +/** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ +function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; +} + +module.exports = tap; diff --git a/node_modules/lodash/chain/thru.js b/node_modules/lodash/chain/thru.js new file mode 100644 index 000000000..a71578037 --- /dev/null +++ b/node_modules/lodash/chain/thru.js @@ -0,0 +1,26 @@ +/** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ +function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); +} + +module.exports = thru; diff --git a/node_modules/lodash/chain/toJSON.js b/node_modules/lodash/chain/toJSON.js new file mode 100644 index 000000000..5e751a2c3 --- /dev/null +++ b/node_modules/lodash/chain/toJSON.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/chain/toString.js b/node_modules/lodash/chain/toString.js new file mode 100644 index 000000000..c7bcbf9a5 --- /dev/null +++ b/node_modules/lodash/chain/toString.js @@ -0,0 +1 @@ +module.exports = require('./wrapperToString'); diff --git a/node_modules/lodash/chain/value.js b/node_modules/lodash/chain/value.js new file mode 100644 index 000000000..5e751a2c3 --- /dev/null +++ b/node_modules/lodash/chain/value.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/chain/valueOf.js b/node_modules/lodash/chain/valueOf.js new file mode 100644 index 000000000..5e751a2c3 --- /dev/null +++ b/node_modules/lodash/chain/valueOf.js @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/node_modules/lodash/chain/wrapperChain.js b/node_modules/lodash/chain/wrapperChain.js new file mode 100644 index 000000000..38234819b --- /dev/null +++ b/node_modules/lodash/chain/wrapperChain.js @@ -0,0 +1,32 @@ +var chain = require('./chain'); + +/** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ +function wrapperChain() { + return chain(this); +} + +module.exports = wrapperChain; diff --git a/node_modules/lodash/chain/wrapperCommit.js b/node_modules/lodash/chain/wrapperCommit.js new file mode 100644 index 000000000..c3d289804 --- /dev/null +++ b/node_modules/lodash/chain/wrapperCommit.js @@ -0,0 +1,32 @@ +var LodashWrapper = require('../internal/LodashWrapper'); + +/** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/node_modules/lodash/chain/wrapperConcat.js b/node_modules/lodash/chain/wrapperConcat.js new file mode 100644 index 000000000..799156cd8 --- /dev/null +++ b/node_modules/lodash/chain/wrapperConcat.js @@ -0,0 +1,34 @@ +var arrayConcat = require('../internal/arrayConcat'), + baseFlatten = require('../internal/baseFlatten'), + isArray = require('../lang/isArray'), + restParam = require('../function/restParam'), + toObject = require('../internal/toObject'); + +/** + * Creates a new array joining a wrapped array with any additional arrays + * and/or values. + * + * @name concat + * @memberOf _ + * @category Chain + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var wrapped = _(array).concat(2, [3], [[4]]); + * + * console.log(wrapped.value()); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +var wrapperConcat = restParam(function(values) { + values = baseFlatten(values); + return this.thru(function(array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values); + }); +}); + +module.exports = wrapperConcat; diff --git a/node_modules/lodash/chain/wrapperPlant.js b/node_modules/lodash/chain/wrapperPlant.js new file mode 100644 index 000000000..234fe41fe --- /dev/null +++ b/node_modules/lodash/chain/wrapperPlant.js @@ -0,0 +1,45 @@ +var baseLodash = require('../internal/baseLodash'), + wrapperClone = require('../internal/wrapperClone'); + +/** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapped = wrapped.plant(other); + * + * otherWrapped.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ +function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; +} + +module.exports = wrapperPlant; diff --git a/node_modules/lodash/chain/wrapperReverse.js b/node_modules/lodash/chain/wrapperReverse.js new file mode 100644 index 000000000..6ba546de4 --- /dev/null +++ b/node_modules/lodash/chain/wrapperReverse.js @@ -0,0 +1,43 @@ +var LazyWrapper = require('../internal/LazyWrapper'), + LodashWrapper = require('../internal/LodashWrapper'), + thru = require('./thru'); + +/** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ +function wrapperReverse() { + var value = this.__wrapped__; + + var interceptor = function(value) { + return value.reverse(); + }; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(interceptor); +} + +module.exports = wrapperReverse; diff --git a/node_modules/lodash/chain/wrapperToString.js b/node_modules/lodash/chain/wrapperToString.js new file mode 100644 index 000000000..db975a5a3 --- /dev/null +++ b/node_modules/lodash/chain/wrapperToString.js @@ -0,0 +1,17 @@ +/** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ +function wrapperToString() { + return (this.value() + ''); +} + +module.exports = wrapperToString; diff --git a/node_modules/lodash/chain/wrapperValue.js b/node_modules/lodash/chain/wrapperValue.js new file mode 100644 index 000000000..2734e41c4 --- /dev/null +++ b/node_modules/lodash/chain/wrapperValue.js @@ -0,0 +1,20 @@ +var baseWrapperValue = require('../internal/baseWrapperValue'); + +/** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ +function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); +} + +module.exports = wrapperValue; diff --git a/node_modules/lodash/collection.js b/node_modules/lodash/collection.js new file mode 100644 index 000000000..03388571c --- /dev/null +++ b/node_modules/lodash/collection.js @@ -0,0 +1,44 @@ +module.exports = { + 'all': require('./collection/all'), + 'any': require('./collection/any'), + 'at': require('./collection/at'), + 'collect': require('./collection/collect'), + 'contains': require('./collection/contains'), + 'countBy': require('./collection/countBy'), + 'detect': require('./collection/detect'), + 'each': require('./collection/each'), + 'eachRight': require('./collection/eachRight'), + 'every': require('./collection/every'), + 'filter': require('./collection/filter'), + 'find': require('./collection/find'), + 'findLast': require('./collection/findLast'), + 'findWhere': require('./collection/findWhere'), + 'foldl': require('./collection/foldl'), + 'foldr': require('./collection/foldr'), + 'forEach': require('./collection/forEach'), + 'forEachRight': require('./collection/forEachRight'), + 'groupBy': require('./collection/groupBy'), + 'include': require('./collection/include'), + 'includes': require('./collection/includes'), + 'indexBy': require('./collection/indexBy'), + 'inject': require('./collection/inject'), + 'invoke': require('./collection/invoke'), + 'map': require('./collection/map'), + 'max': require('./math/max'), + 'min': require('./math/min'), + 'partition': require('./collection/partition'), + 'pluck': require('./collection/pluck'), + 'reduce': require('./collection/reduce'), + 'reduceRight': require('./collection/reduceRight'), + 'reject': require('./collection/reject'), + 'sample': require('./collection/sample'), + 'select': require('./collection/select'), + 'shuffle': require('./collection/shuffle'), + 'size': require('./collection/size'), + 'some': require('./collection/some'), + 'sortBy': require('./collection/sortBy'), + 'sortByAll': require('./collection/sortByAll'), + 'sortByOrder': require('./collection/sortByOrder'), + 'sum': require('./math/sum'), + 'where': require('./collection/where') +}; diff --git a/node_modules/lodash/collection/all.js b/node_modules/lodash/collection/all.js new file mode 100644 index 000000000..d0839f77e --- /dev/null +++ b/node_modules/lodash/collection/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/node_modules/lodash/collection/any.js b/node_modules/lodash/collection/any.js new file mode 100644 index 000000000..900ac25e8 --- /dev/null +++ b/node_modules/lodash/collection/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/node_modules/lodash/collection/at.js b/node_modules/lodash/collection/at.js new file mode 100644 index 000000000..29236e577 --- /dev/null +++ b/node_modules/lodash/collection/at.js @@ -0,0 +1,29 @@ +var baseAt = require('../internal/baseAt'), + baseFlatten = require('../internal/baseFlatten'), + restParam = require('../function/restParam'); + +/** + * Creates an array of elements corresponding to the given keys, or indexes, + * of `collection`. Keys may be specified as individual arguments or as arrays + * of keys. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [props] The property names + * or indexes of elements to pick, specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * _.at(['a', 'b', 'c'], [0, 2]); + * // => ['a', 'c'] + * + * _.at(['barney', 'fred', 'pebbles'], 0, 2); + * // => ['barney', 'pebbles'] + */ +var at = restParam(function(collection, props) { + return baseAt(collection, baseFlatten(props)); +}); + +module.exports = at; diff --git a/node_modules/lodash/collection/collect.js b/node_modules/lodash/collection/collect.js new file mode 100644 index 000000000..0d1e1abfa --- /dev/null +++ b/node_modules/lodash/collection/collect.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/node_modules/lodash/collection/contains.js b/node_modules/lodash/collection/contains.js new file mode 100644 index 000000000..594722af5 --- /dev/null +++ b/node_modules/lodash/collection/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/node_modules/lodash/collection/countBy.js b/node_modules/lodash/collection/countBy.js new file mode 100644 index 000000000..e97dbb749 --- /dev/null +++ b/node_modules/lodash/collection/countBy.js @@ -0,0 +1,54 @@ +var createAggregator = require('../internal/createAggregator'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); +}); + +module.exports = countBy; diff --git a/node_modules/lodash/collection/detect.js b/node_modules/lodash/collection/detect.js new file mode 100644 index 000000000..2fb6303ef --- /dev/null +++ b/node_modules/lodash/collection/detect.js @@ -0,0 +1 @@ +module.exports = require('./find'); diff --git a/node_modules/lodash/collection/each.js b/node_modules/lodash/collection/each.js new file mode 100644 index 000000000..8800f4204 --- /dev/null +++ b/node_modules/lodash/collection/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/lodash/collection/eachRight.js b/node_modules/lodash/collection/eachRight.js new file mode 100644 index 000000000..3252b2aba --- /dev/null +++ b/node_modules/lodash/collection/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/lodash/collection/every.js b/node_modules/lodash/collection/every.js new file mode 100644 index 000000000..5a2d0f5dd --- /dev/null +++ b/node_modules/lodash/collection/every.js @@ -0,0 +1,66 @@ +var arrayEvery = require('../internal/arrayEvery'), + baseCallback = require('../internal/baseCallback'), + baseEvery = require('../internal/baseEvery'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = every; diff --git a/node_modules/lodash/collection/filter.js b/node_modules/lodash/collection/filter.js new file mode 100644 index 000000000..7620aa761 --- /dev/null +++ b/node_modules/lodash/collection/filter.js @@ -0,0 +1,61 @@ +var arrayFilter = require('../internal/arrayFilter'), + baseCallback = require('../internal/baseCallback'), + baseFilter = require('../internal/baseFilter'), + isArray = require('../lang/isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ +function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = baseCallback(predicate, thisArg, 3); + return func(collection, predicate); +} + +module.exports = filter; diff --git a/node_modules/lodash/collection/find.js b/node_modules/lodash/collection/find.js new file mode 100644 index 000000000..7358cfe86 --- /dev/null +++ b/node_modules/lodash/collection/find.js @@ -0,0 +1,56 @@ +var baseEach = require('../internal/baseEach'), + createFind = require('../internal/createFind'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ +var find = createFind(baseEach); + +module.exports = find; diff --git a/node_modules/lodash/collection/findLast.js b/node_modules/lodash/collection/findLast.js new file mode 100644 index 000000000..75dbadca2 --- /dev/null +++ b/node_modules/lodash/collection/findLast.js @@ -0,0 +1,25 @@ +var baseEachRight = require('../internal/baseEachRight'), + createFind = require('../internal/createFind'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(baseEachRight, true); + +module.exports = findLast; diff --git a/node_modules/lodash/collection/findWhere.js b/node_modules/lodash/collection/findWhere.js new file mode 100644 index 000000000..2d620655e --- /dev/null +++ b/node_modules/lodash/collection/findWhere.js @@ -0,0 +1,37 @@ +var baseMatches = require('../internal/baseMatches'), + find = require('./find'); + +/** + * Performs a deep comparison between each element in `collection` and the + * source object, returning the first element that has equivalent property + * values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); + * // => 'barney' + * + * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); + * // => 'fred' + */ +function findWhere(collection, source) { + return find(collection, baseMatches(source)); +} + +module.exports = findWhere; diff --git a/node_modules/lodash/collection/foldl.js b/node_modules/lodash/collection/foldl.js new file mode 100644 index 000000000..26f53cf7b --- /dev/null +++ b/node_modules/lodash/collection/foldl.js @@ -0,0 +1 @@ +module.exports = require('./reduce'); diff --git a/node_modules/lodash/collection/foldr.js b/node_modules/lodash/collection/foldr.js new file mode 100644 index 000000000..8fb199eda --- /dev/null +++ b/node_modules/lodash/collection/foldr.js @@ -0,0 +1 @@ +module.exports = require('./reduceRight'); diff --git a/node_modules/lodash/collection/forEach.js b/node_modules/lodash/collection/forEach.js new file mode 100644 index 000000000..05a8e2140 --- /dev/null +++ b/node_modules/lodash/collection/forEach.js @@ -0,0 +1,37 @@ +var arrayEach = require('../internal/arrayEach'), + baseEach = require('../internal/baseEach'), + createForEach = require('../internal/createForEach'); + +/** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ +var forEach = createForEach(arrayEach, baseEach); + +module.exports = forEach; diff --git a/node_modules/lodash/collection/forEachRight.js b/node_modules/lodash/collection/forEachRight.js new file mode 100644 index 000000000..349971100 --- /dev/null +++ b/node_modules/lodash/collection/forEachRight.js @@ -0,0 +1,26 @@ +var arrayEachRight = require('../internal/arrayEachRight'), + baseEachRight = require('../internal/baseEachRight'), + createForEach = require('../internal/createForEach'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEachRight(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from right to left and returns the array + */ +var forEachRight = createForEach(arrayEachRight, baseEachRight); + +module.exports = forEachRight; diff --git a/node_modules/lodash/collection/groupBy.js b/node_modules/lodash/collection/groupBy.js new file mode 100644 index 000000000..a925c894a --- /dev/null +++ b/node_modules/lodash/collection/groupBy.js @@ -0,0 +1,59 @@ +var createAggregator = require('../internal/createAggregator'); + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +module.exports = groupBy; diff --git a/node_modules/lodash/collection/include.js b/node_modules/lodash/collection/include.js new file mode 100644 index 000000000..594722af5 --- /dev/null +++ b/node_modules/lodash/collection/include.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/node_modules/lodash/collection/includes.js b/node_modules/lodash/collection/includes.js new file mode 100644 index 000000000..329486a53 --- /dev/null +++ b/node_modules/lodash/collection/includes.js @@ -0,0 +1,57 @@ +var baseIndexOf = require('../internal/baseIndexOf'), + getLength = require('../internal/getLength'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'), + isLength = require('../internal/isLength'), + isString = require('../lang/isString'), + values = require('../object/values'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `target` is in `collection` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ +function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) + : (!!length && baseIndexOf(collection, target, fromIndex) > -1); +} + +module.exports = includes; diff --git a/node_modules/lodash/collection/indexBy.js b/node_modules/lodash/collection/indexBy.js new file mode 100644 index 000000000..34a941e72 --- /dev/null +++ b/node_modules/lodash/collection/indexBy.js @@ -0,0 +1,53 @@ +var createAggregator = require('../internal/createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keyData = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keyData, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return String.fromCharCode(object.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return this.fromCharCode(object.code); + * }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ +var indexBy = createAggregator(function(result, value, key) { + result[key] = value; +}); + +module.exports = indexBy; diff --git a/node_modules/lodash/collection/inject.js b/node_modules/lodash/collection/inject.js new file mode 100644 index 000000000..26f53cf7b --- /dev/null +++ b/node_modules/lodash/collection/inject.js @@ -0,0 +1 @@ +module.exports = require('./reduce'); diff --git a/node_modules/lodash/collection/invoke.js b/node_modules/lodash/collection/invoke.js new file mode 100644 index 000000000..6e7172195 --- /dev/null +++ b/node_modules/lodash/collection/invoke.js @@ -0,0 +1,42 @@ +var baseEach = require('../internal/baseEach'), + invokePath = require('../internal/invokePath'), + isArrayLike = require('../internal/isArrayLike'), + isKey = require('../internal/isKey'), + restParam = require('../function/restParam'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it's + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invoke = restParam(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); + }); + return result; +}); + +module.exports = invoke; diff --git a/node_modules/lodash/collection/map.js b/node_modules/lodash/collection/map.js new file mode 100644 index 000000000..5381110df --- /dev/null +++ b/node_modules/lodash/collection/map.js @@ -0,0 +1,68 @@ +var arrayMap = require('../internal/arrayMap'), + baseCallback = require('../internal/baseCallback'), + baseMap = require('../internal/baseMap'), + isArray = require('../lang/isArray'); + +/** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = baseCallback(iteratee, thisArg, 3); + return func(collection, iteratee); +} + +module.exports = map; diff --git a/node_modules/lodash/collection/max.js b/node_modules/lodash/collection/max.js new file mode 100644 index 000000000..bb1d213c3 --- /dev/null +++ b/node_modules/lodash/collection/max.js @@ -0,0 +1 @@ +module.exports = require('../math/max'); diff --git a/node_modules/lodash/collection/min.js b/node_modules/lodash/collection/min.js new file mode 100644 index 000000000..eef13d02b --- /dev/null +++ b/node_modules/lodash/collection/min.js @@ -0,0 +1 @@ +module.exports = require('../math/min'); diff --git a/node_modules/lodash/collection/partition.js b/node_modules/lodash/collection/partition.js new file mode 100644 index 000000000..ee35f27d9 --- /dev/null +++ b/node_modules/lodash/collection/partition.js @@ -0,0 +1,66 @@ +var createAggregator = require('../internal/createAggregator'); + +/** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, while the second of which + * contains elements `predicate` returns falsey for. The predicate is bound + * to `thisArg` and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * _.partition([1, 2, 3], function(n) { + * return n % 2; + * }); + * // => [[1, 3], [2]] + * + * _.partition([1.2, 2.3, 3.4], function(n) { + * return this.floor(n) % 2; + * }, Math); + * // => [[1.2, 3.4], [2.3]] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * var mapper = function(array) { + * return _.pluck(array, 'user'); + * }; + * + * // using the `_.matches` callback shorthand + * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); + * // => [['pebbles'], ['barney', 'fred']] + * + * // using the `_.matchesProperty` callback shorthand + * _.map(_.partition(users, 'active', false), mapper); + * // => [['barney', 'pebbles'], ['fred']] + * + * // using the `_.property` callback shorthand + * _.map(_.partition(users, 'active'), mapper); + * // => [['fred'], ['barney', 'pebbles']] + */ +var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); +}, function() { return [[], []]; }); + +module.exports = partition; diff --git a/node_modules/lodash/collection/pluck.js b/node_modules/lodash/collection/pluck.js new file mode 100644 index 000000000..5ee1ec84e --- /dev/null +++ b/node_modules/lodash/collection/pluck.js @@ -0,0 +1,31 @@ +var map = require('./map'), + property = require('../utility/property'); + +/** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ +function pluck(collection, path) { + return map(collection, property(path)); +} + +module.exports = pluck; diff --git a/node_modules/lodash/collection/reduce.js b/node_modules/lodash/collection/reduce.js new file mode 100644 index 000000000..5d5e8c916 --- /dev/null +++ b/node_modules/lodash/collection/reduce.js @@ -0,0 +1,44 @@ +var arrayReduce = require('../internal/arrayReduce'), + baseEach = require('../internal/baseEach'), + createReduce = require('../internal/createReduce'); + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, + * and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ +var reduce = createReduce(arrayReduce, baseEach); + +module.exports = reduce; diff --git a/node_modules/lodash/collection/reduceRight.js b/node_modules/lodash/collection/reduceRight.js new file mode 100644 index 000000000..5a5753b9c --- /dev/null +++ b/node_modules/lodash/collection/reduceRight.js @@ -0,0 +1,29 @@ +var arrayReduceRight = require('../internal/arrayReduceRight'), + baseEachRight = require('../internal/baseEachRight'), + createReduce = require('../internal/createReduce'); + +/** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ +var reduceRight = createReduce(arrayReduceRight, baseEachRight); + +module.exports = reduceRight; diff --git a/node_modules/lodash/collection/reject.js b/node_modules/lodash/collection/reject.js new file mode 100644 index 000000000..55924539b --- /dev/null +++ b/node_modules/lodash/collection/reject.js @@ -0,0 +1,50 @@ +var arrayFilter = require('../internal/arrayFilter'), + baseCallback = require('../internal/baseCallback'), + baseFilter = require('../internal/baseFilter'), + isArray = require('../lang/isArray'); + +/** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] + */ +function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = baseCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); +} + +module.exports = reject; diff --git a/node_modules/lodash/collection/sample.js b/node_modules/lodash/collection/sample.js new file mode 100644 index 000000000..8e0153301 --- /dev/null +++ b/node_modules/lodash/collection/sample.js @@ -0,0 +1,50 @@ +var baseRandom = require('../internal/baseRandom'), + isIterateeCall = require('../internal/isIterateeCall'), + toArray = require('../lang/toArray'), + toIterable = require('../internal/toIterable'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Gets a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {*} Returns the random sample(s). + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ +function sample(collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection); + var length = collection.length; + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = nativeMin(n < 0 ? 0 : (+n || 0), length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; +} + +module.exports = sample; diff --git a/node_modules/lodash/collection/select.js b/node_modules/lodash/collection/select.js new file mode 100644 index 000000000..ade80f6fb --- /dev/null +++ b/node_modules/lodash/collection/select.js @@ -0,0 +1 @@ +module.exports = require('./filter'); diff --git a/node_modules/lodash/collection/shuffle.js b/node_modules/lodash/collection/shuffle.js new file mode 100644 index 000000000..949689c5f --- /dev/null +++ b/node_modules/lodash/collection/shuffle.js @@ -0,0 +1,24 @@ +var sample = require('./sample'); + +/** Used as references for `-Infinity` and `Infinity`. */ +var POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle(collection) { + return sample(collection, POSITIVE_INFINITY); +} + +module.exports = shuffle; diff --git a/node_modules/lodash/collection/size.js b/node_modules/lodash/collection/size.js new file mode 100644 index 000000000..78dcf4ce9 --- /dev/null +++ b/node_modules/lodash/collection/size.js @@ -0,0 +1,30 @@ +var getLength = require('../internal/getLength'), + isLength = require('../internal/isLength'), + keys = require('../object/keys'); + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the size of `collection`. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + var length = collection ? getLength(collection) : 0; + return isLength(length) ? length : keys(collection).length; +} + +module.exports = size; diff --git a/node_modules/lodash/collection/some.js b/node_modules/lodash/collection/some.js new file mode 100644 index 000000000..d0b09a474 --- /dev/null +++ b/node_modules/lodash/collection/some.js @@ -0,0 +1,67 @@ +var arraySome = require('../internal/arraySome'), + baseCallback = require('../internal/baseCallback'), + baseSome = require('../internal/baseSome'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true + */ +function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = baseCallback(predicate, thisArg, 3); + } + return func(collection, predicate); +} + +module.exports = some; diff --git a/node_modules/lodash/collection/sortBy.js b/node_modules/lodash/collection/sortBy.js new file mode 100644 index 000000000..4401c777f --- /dev/null +++ b/node_modules/lodash/collection/sortBy.js @@ -0,0 +1,71 @@ +var baseCallback = require('../internal/baseCallback'), + baseMap = require('../internal/baseMap'), + baseSortBy = require('../internal/baseSortBy'), + compareAscending = require('../internal/compareAscending'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through `iteratee`. This method performs + * a stable sort, that is, it preserves the original sort order of equal elements. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new sorted array. + * @example + * + * _.sortBy([1, 2, 3], function(n) { + * return Math.sin(n); + * }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(n) { + * return this.sin(n); + * }, Math); + * // => [3, 1, 2] + * + * var users = [ + * { 'user': 'fred' }, + * { 'user': 'pebbles' }, + * { 'user': 'barney' } + * ]; + * + * // using the `_.property` callback shorthand + * _.pluck(_.sortBy(users, 'user'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ +function sortBy(collection, iteratee, thisArg) { + if (collection == null) { + return []; + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + var index = -1; + iteratee = baseCallback(iteratee, thisArg, 3); + + var result = baseMap(collection, function(value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; + }); + return baseSortBy(result, compareAscending); +} + +module.exports = sortBy; diff --git a/node_modules/lodash/collection/sortByAll.js b/node_modules/lodash/collection/sortByAll.js new file mode 100644 index 000000000..4766c2098 --- /dev/null +++ b/node_modules/lodash/collection/sortByAll.js @@ -0,0 +1,52 @@ +var baseFlatten = require('../internal/baseFlatten'), + baseSortByOrder = require('../internal/baseSortByOrder'), + isIterateeCall = require('../internal/isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * This method is like `_.sortBy` except that it can sort by multiple iteratees + * or property names. + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees + * The iteratees to sort by, specified as individual values or arrays of values. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.map(_.sortByAll(users, ['user', 'age']), _.values); + * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.map(_.sortByAll(users, 'user', function(chr) { + * return Math.floor(chr.age / 10); + * }), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ +var sortByAll = restParam(function(collection, iteratees) { + if (collection == null) { + return []; + } + var guard = iteratees[2]; + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1; + } + return baseSortByOrder(collection, baseFlatten(iteratees), []); +}); + +module.exports = sortByAll; diff --git a/node_modules/lodash/collection/sortByOrder.js b/node_modules/lodash/collection/sortByOrder.js new file mode 100644 index 000000000..8b4fc1968 --- /dev/null +++ b/node_modules/lodash/collection/sortByOrder.js @@ -0,0 +1,55 @@ +var baseSortByOrder = require('../internal/baseSortByOrder'), + isArray = require('../lang/isArray'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** + * This method is like `_.sortByAll` except that it allows specifying the + * sort orders of the iteratees to sort by. If `orders` is unspecified, all + * values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // sort by `user` in ascending order and by `age` in descending order + * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ +function sortByOrder(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseSortByOrder(collection, iteratees, orders); +} + +module.exports = sortByOrder; diff --git a/node_modules/lodash/collection/sum.js b/node_modules/lodash/collection/sum.js new file mode 100644 index 000000000..a2e93808a --- /dev/null +++ b/node_modules/lodash/collection/sum.js @@ -0,0 +1 @@ +module.exports = require('../math/sum'); diff --git a/node_modules/lodash/collection/where.js b/node_modules/lodash/collection/where.js new file mode 100644 index 000000000..f603bf8ce --- /dev/null +++ b/node_modules/lodash/collection/where.js @@ -0,0 +1,37 @@ +var baseMatches = require('../internal/baseMatches'), + filter = require('./filter'); + +/** + * Performs a deep comparison between each element in `collection` and the + * source object, returning an array of all elements that have equivalent + * property values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, + * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); + * // => ['barney'] + * + * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); + * // => ['fred'] + */ +function where(collection, source) { + return filter(collection, baseMatches(source)); +} + +module.exports = where; diff --git a/node_modules/lodash/date.js b/node_modules/lodash/date.js new file mode 100644 index 000000000..195366e77 --- /dev/null +++ b/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./date/now') +}; diff --git a/node_modules/lodash/date/now.js b/node_modules/lodash/date/now.js new file mode 100644 index 000000000..ffe3060e5 --- /dev/null +++ b/node_modules/lodash/date/now.js @@ -0,0 +1,24 @@ +var getNative = require('../internal/getNative'); + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeNow = getNative(Date, 'now'); + +/** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ +var now = nativeNow || function() { + return new Date().getTime(); +}; + +module.exports = now; diff --git a/node_modules/lodash/function.js b/node_modules/lodash/function.js new file mode 100644 index 000000000..71f8ebeb2 --- /dev/null +++ b/node_modules/lodash/function.js @@ -0,0 +1,28 @@ +module.exports = { + 'after': require('./function/after'), + 'ary': require('./function/ary'), + 'backflow': require('./function/backflow'), + 'before': require('./function/before'), + 'bind': require('./function/bind'), + 'bindAll': require('./function/bindAll'), + 'bindKey': require('./function/bindKey'), + 'compose': require('./function/compose'), + 'curry': require('./function/curry'), + 'curryRight': require('./function/curryRight'), + 'debounce': require('./function/debounce'), + 'defer': require('./function/defer'), + 'delay': require('./function/delay'), + 'flow': require('./function/flow'), + 'flowRight': require('./function/flowRight'), + 'memoize': require('./function/memoize'), + 'modArgs': require('./function/modArgs'), + 'negate': require('./function/negate'), + 'once': require('./function/once'), + 'partial': require('./function/partial'), + 'partialRight': require('./function/partialRight'), + 'rearg': require('./function/rearg'), + 'restParam': require('./function/restParam'), + 'spread': require('./function/spread'), + 'throttle': require('./function/throttle'), + 'wrap': require('./function/wrap') +}; diff --git a/node_modules/lodash/function/after.js b/node_modules/lodash/function/after.js new file mode 100644 index 000000000..96a51fdbc --- /dev/null +++ b/node_modules/lodash/function/after.js @@ -0,0 +1,48 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = global.isFinite; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ +function after(n, func) { + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + n = nativeIsFinite(n = +n) ? n : 0; + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/node_modules/lodash/function/ary.js b/node_modules/lodash/function/ary.js new file mode 100644 index 000000000..53a6913e3 --- /dev/null +++ b/node_modules/lodash/function/ary.js @@ -0,0 +1,34 @@ +var createWrapper = require('../internal/createWrapper'), + isIterateeCall = require('../internal/isIterateeCall'); + +/** Used to compose bitmasks for wrapper metadata. */ +var ARY_FLAG = 128; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that accepts up to `n` arguments ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined; + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/node_modules/lodash/function/backflow.js b/node_modules/lodash/function/backflow.js new file mode 100644 index 000000000..1954e9423 --- /dev/null +++ b/node_modules/lodash/function/backflow.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/node_modules/lodash/function/before.js b/node_modules/lodash/function/before.js new file mode 100644 index 000000000..3d9421682 --- /dev/null +++ b/node_modules/lodash/function/before.js @@ -0,0 +1,42 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery('#add').on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/node_modules/lodash/function/bind.js b/node_modules/lodash/function/bind.js new file mode 100644 index 000000000..0de126ae3 --- /dev/null +++ b/node_modules/lodash/function/bind.js @@ -0,0 +1,56 @@ +var createWrapper = require('../internal/createWrapper'), + replaceHolders = require('../internal/replaceHolders'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/node_modules/lodash/function/bindAll.js b/node_modules/lodash/function/bindAll.js new file mode 100644 index 000000000..a09e94852 --- /dev/null +++ b/node_modules/lodash/function/bindAll.js @@ -0,0 +1,50 @@ +var baseFlatten = require('../internal/baseFlatten'), + createWrapper = require('../internal/createWrapper'), + functions = require('../object/functions'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1; + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all enumerable function + * properties, own and inherited, of `object` are bound. + * + * **Note:** This method does not set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} [methodNames] The object method names to bind, + * specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs' when the element is clicked + */ +var bindAll = restParam(function(object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + + var index = -1, + length = methodNames.length; + + while (++index < length) { + var key = methodNames[index]; + object[key] = createWrapper(object[key], BIND_FLAG, object); + } + return object; +}); + +module.exports = bindAll; diff --git a/node_modules/lodash/function/bindKey.js b/node_modules/lodash/function/bindKey.js new file mode 100644 index 000000000..b787fe702 --- /dev/null +++ b/node_modules/lodash/function/bindKey.js @@ -0,0 +1,66 @@ +var createWrapper = require('../internal/createWrapper'), + replaceHolders = require('../internal/replaceHolders'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // using placeholders + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = restParam(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/node_modules/lodash/function/compose.js b/node_modules/lodash/function/compose.js new file mode 100644 index 000000000..1954e9423 --- /dev/null +++ b/node_modules/lodash/function/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/node_modules/lodash/function/curry.js b/node_modules/lodash/function/curry.js new file mode 100644 index 000000000..b7db3fdad --- /dev/null +++ b/node_modules/lodash/function/curry.js @@ -0,0 +1,51 @@ +var createCurry = require('../internal/createCurry'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_FLAG = 8; + +/** + * Creates a function that accepts one or more arguments of `func` that when + * called either invokes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` may be specified + * if `func.length` is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +var curry = createCurry(CURRY_FLAG); + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/node_modules/lodash/function/curryRight.js b/node_modules/lodash/function/curryRight.js new file mode 100644 index 000000000..11c540393 --- /dev/null +++ b/node_modules/lodash/function/curryRight.js @@ -0,0 +1,48 @@ +var createCurry = require('../internal/createCurry'); + +/** Used to compose bitmasks for wrapper metadata. */ +var CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +var curryRight = createCurry(CURRY_RIGHT_FLAG); + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/node_modules/lodash/function/debounce.js b/node_modules/lodash/function/debounce.js new file mode 100644 index 000000000..163af90f3 --- /dev/null +++ b/node_modules/lodash/function/debounce.js @@ -0,0 +1,181 @@ +var isObject = require('../lang/isObject'), + now = require('../date/now'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it's invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; + */ +function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + return debounced; +} + +module.exports = debounce; diff --git a/node_modules/lodash/function/defer.js b/node_modules/lodash/function/defer.js new file mode 100644 index 000000000..3accbf9b1 --- /dev/null +++ b/node_modules/lodash/function/defer.js @@ -0,0 +1,25 @@ +var baseDelay = require('../internal/baseDelay'), + restParam = require('./restParam'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ +var defer = restParam(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/node_modules/lodash/function/delay.js b/node_modules/lodash/function/delay.js new file mode 100644 index 000000000..d5eef27a9 --- /dev/null +++ b/node_modules/lodash/function/delay.js @@ -0,0 +1,26 @@ +var baseDelay = require('../internal/baseDelay'), + restParam = require('./restParam'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ +var delay = restParam(function(func, wait, args) { + return baseDelay(func, wait, args); +}); + +module.exports = delay; diff --git a/node_modules/lodash/function/flow.js b/node_modules/lodash/function/flow.js new file mode 100644 index 000000000..a435a3d87 --- /dev/null +++ b/node_modules/lodash/function/flow.js @@ -0,0 +1,25 @@ +var createFlow = require('../internal/createFlow'); + +/** + * Creates a function that returns the result of invoking the provided + * functions with the `this` binding of the created function, where each + * successive invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/node_modules/lodash/function/flowRight.js b/node_modules/lodash/function/flowRight.js new file mode 100644 index 000000000..23b9d76b5 --- /dev/null +++ b/node_modules/lodash/function/flowRight.js @@ -0,0 +1,25 @@ +var createFlow = require('../internal/createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the provided functions from right to left. + * + * @static + * @memberOf _ + * @alias backflow, compose + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/node_modules/lodash/function/memoize.js b/node_modules/lodash/function/memoize.js new file mode 100644 index 000000000..f3b8d6992 --- /dev/null +++ b/node_modules/lodash/function/memoize.js @@ -0,0 +1,80 @@ +var MapCache = require('../internal/MapCache'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the + * cache key. The `func` is invoked with the `this` binding of the memoized + * function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var upperCase = _.memoize(function(string) { + * return string.toUpperCase(); + * }); + * + * upperCase('fred'); + * // => 'FRED' + * + * // modifying the result cache + * upperCase.cache.set('fred', 'BARNEY'); + * upperCase('fred'); + * // => 'BARNEY' + * + * // replacing `_.memoize.Cache` + * var object = { 'user': 'fred' }; + * var other = { 'user': 'barney' }; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'fred' } + * + * _.memoize.Cache = WeakMap; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'barney' } + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +module.exports = memoize; diff --git a/node_modules/lodash/function/modArgs.js b/node_modules/lodash/function/modArgs.js new file mode 100644 index 000000000..49b9b5e68 --- /dev/null +++ b/node_modules/lodash/function/modArgs.js @@ -0,0 +1,58 @@ +var arrayEvery = require('../internal/arrayEvery'), + baseFlatten = require('../internal/baseFlatten'), + baseIsFunction = require('../internal/baseIsFunction'), + restParam = require('./restParam'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Creates a function that runs each argument through a corresponding + * transform function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified as individual functions or arrays of functions. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var modded = _.modArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * modded(1, 2); + * // => [1, 4] + * + * modded(5, 10); + * // => [25, 20] + */ +var modArgs = restParam(function(func, transforms) { + transforms = baseFlatten(transforms); + if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = transforms.length; + return restParam(function(args) { + var index = nativeMin(args.length, length); + while (index--) { + args[index] = transforms[index](args[index]); + } + return func.apply(this, args); + }); +}); + +module.exports = modArgs; diff --git a/node_modules/lodash/function/negate.js b/node_modules/lodash/function/negate.js new file mode 100644 index 000000000..82479390a --- /dev/null +++ b/node_modules/lodash/function/negate.js @@ -0,0 +1,32 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ +function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; +} + +module.exports = negate; diff --git a/node_modules/lodash/function/once.js b/node_modules/lodash/function/once.js new file mode 100644 index 000000000..0b5bd853c --- /dev/null +++ b/node_modules/lodash/function/once.js @@ -0,0 +1,24 @@ +var before = require('./before'); + +/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first call. The `func` is invoked + * with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ +function once(func) { + return before(2, func); +} + +module.exports = once; diff --git a/node_modules/lodash/function/partial.js b/node_modules/lodash/function/partial.js new file mode 100644 index 000000000..fb1d04fb6 --- /dev/null +++ b/node_modules/lodash/function/partial.js @@ -0,0 +1,43 @@ +var createPartial = require('../internal/createPartial'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // using placeholders + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ +var partial = createPartial(PARTIAL_FLAG); + +// Assign default placeholders. +partial.placeholder = {}; + +module.exports = partial; diff --git a/node_modules/lodash/function/partialRight.js b/node_modules/lodash/function/partialRight.js new file mode 100644 index 000000000..634e6a4c4 --- /dev/null +++ b/node_modules/lodash/function/partialRight.js @@ -0,0 +1,42 @@ +var createPartial = require('../internal/createPartial'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_RIGHT_FLAG = 64; + +/** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // using placeholders + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ +var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + +// Assign default placeholders. +partialRight.placeholder = {}; + +module.exports = partialRight; diff --git a/node_modules/lodash/function/rearg.js b/node_modules/lodash/function/rearg.js new file mode 100644 index 000000000..f2bd9c41e --- /dev/null +++ b/node_modules/lodash/function/rearg.js @@ -0,0 +1,40 @@ +var baseFlatten = require('../internal/baseFlatten'), + createWrapper = require('../internal/createWrapper'), + restParam = require('./restParam'); + +/** Used to compose bitmasks for wrapper metadata. */ +var REARG_FLAG = 256; + +/** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified as individual indexes or arrays of indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + * + * var map = _.rearg(_.map, [1, 0]); + * map(function(n) { + * return n * 3; + * }, [1, 2, 3]); + * // => [3, 6, 9] + */ +var rearg = restParam(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); +}); + +module.exports = rearg; diff --git a/node_modules/lodash/function/restParam.js b/node_modules/lodash/function/restParam.js new file mode 100644 index 000000000..8852286dd --- /dev/null +++ b/node_modules/lodash/function/restParam.js @@ -0,0 +1,58 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Native method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ +function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; +} + +module.exports = restParam; diff --git a/node_modules/lodash/function/spread.js b/node_modules/lodash/function/spread.js new file mode 100644 index 000000000..780f5042a --- /dev/null +++ b/node_modules/lodash/function/spread.js @@ -0,0 +1,44 @@ +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * // with a Promise + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ +function spread(func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function(array) { + return func.apply(this, array); + }; +} + +module.exports = spread; diff --git a/node_modules/lodash/function/throttle.js b/node_modules/lodash/function/throttle.js new file mode 100644 index 000000000..1dd00eab7 --- /dev/null +++ b/node_modules/lodash/function/throttle.js @@ -0,0 +1,62 @@ +var debounce = require('./debounce'), + isObject = require('../lang/isObject'); + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); + */ +function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); +} + +module.exports = throttle; diff --git a/node_modules/lodash/function/wrap.js b/node_modules/lodash/function/wrap.js new file mode 100644 index 000000000..6a33c5ec6 --- /dev/null +++ b/node_modules/lodash/function/wrap.js @@ -0,0 +1,33 @@ +var createWrapper = require('../internal/createWrapper'), + identity = require('../utility/identity'); + +/** Used to compose bitmasks for wrapper metadata. */ +var PARTIAL_FLAG = 32; + +/** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

    ' + func(text) + '

    '; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

    fred, barney, & pebbles

    ' + */ +function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); +} + +module.exports = wrap; diff --git a/node_modules/lodash/index.js b/node_modules/lodash/index.js new file mode 100644 index 000000000..5f17319b9 --- /dev/null +++ b/node_modules/lodash/index.js @@ -0,0 +1,12351 @@ +/** + * @license + * lodash 3.10.1 (Custom Build) + * Build: `lodash modern -d -o ./index.js` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '3.10.1'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256; + + /** Used as default options for `_.trunc`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect when a function becomes hot. */ + var HOT_COUNT = 150, + HOT_SPAN = 16; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g, + reUnescapedHtml = /[&<>"'`]/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; + + /** + * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns) + * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern). + */ + var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g, + reHasRegExpChars = RegExp(reRegExpChars.source); + + /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */ + var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect hexadecimal string values. */ + var reHasHexPrefix = /^0[xX]/; + + /** Used to detect host constructors (Safari > 5). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^\d+$/; + + /** Used to match latin-1 supplementary letters (excluding mathematical operators). */ + var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to match words to create compound words. */ + var reWords = (function() { + var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]', + lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+'; + + return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g'); + }()); + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number', + 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite', + 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dateTag] = typedArrayTags[errorTag] = + typedArrayTags[funcTag] = typedArrayTags[mapTag] = + typedArrayTags[numberTag] = typedArrayTags[objectTag] = + typedArrayTags[regexpTag] = typedArrayTags[setTag] = + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = + cloneableTags[dateTag] = cloneableTags[float32Tag] = + cloneableTags[float64Tag] = cloneableTags[int8Tag] = + cloneableTags[int16Tag] = cloneableTags[int32Tag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[stringTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[mapTag] = cloneableTags[setTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map latin-1 supplementary letters to basic latin letters. */ + var deburredLetters = { + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; + + /** Used to determine if values are of the language type `Object`. */ + var objectTypes = { + 'function': true, + 'object': true + }; + + /** Used to escape characters for inclusion in compiled regexes. */ + var regexpEscapes = { + '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34', + '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39', + 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46', + 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66', + 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78' + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Detect free variable `exports`. */ + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; + + /** Detect free variable `self`. */ + var freeSelf = objectTypes[typeof self] && self && self.Object && self; + + /** Detect free variable `window`. */ + var freeWindow = objectTypes[typeof window] && window && window.Object && window; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; + + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `compareAscending` which compares values and + * sorts them in ascending order without guaranteeing a stable sort. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function baseCompareAscending(value, other) { + if (value !== other) { + var valIsNull = value === null, + valIsUndef = value === undefined, + valIsReflexive = value === value; + + var othIsNull = other === null, + othIsUndef = other === undefined, + othIsReflexive = other === other; + + if ((value > other && !othIsNull) || !valIsReflexive || + (valIsNull && !othIsUndef && othIsReflexive) || + (valIsUndef && othIsReflexive)) { + return 1; + } + if ((value < other && !valIsNull) || !othIsReflexive || + (othIsNull && !valIsUndef && valIsReflexive) || + (othIsUndef && valIsReflexive)) { + return -1; + } + } + return 0; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to search. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without support for binary searches. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isFunction` without support for environments + * with incorrect `typeof` results. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + */ + function baseIsFunction(value) { + // Avoid a Chakra JIT bug in compatibility modes of IE 11. + // See https://github.com/jashkenas/underscore/issues/1621 for more details. + return typeof value == 'function' || false; + } + + /** + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + return value == null ? '' : (value + ''); + } + + /** + * Used by `_.trim` and `_.trimLeft` to get the index of the first character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the first character not found in `chars`. + */ + function charsLeftIndex(string, chars) { + var index = -1, + length = string.length; + + while (++index < length && chars.indexOf(string.charAt(index)) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimRight` to get the index of the last character + * of `string` that is not found in `chars`. + * + * @private + * @param {string} string The string to inspect. + * @param {string} chars The characters to find. + * @returns {number} Returns the index of the last character not found in `chars`. + */ + function charsRightIndex(string, chars) { + var index = string.length; + + while (index-- && chars.indexOf(string.charAt(index)) > -1) {} + return index; + } + + /** + * Used by `_.sortBy` to compare transformed elements of a collection and stable + * sort them in ascending order. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareAscending(object, other) { + return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index); + } + + /** + * Used by `_.sortByOrder` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise, + * a value is sorted in ascending order if its corresponding order is "asc", and + * descending if "desc". + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = baseCompareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * ((order === 'asc' || order === true) ? 1 : -1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://code.google.com/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + function deburrLetter(letter) { + return deburredLetters[letter]; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(chr) { + return htmlEscapes[chr]; + } + + /** + * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes. + * + * @private + * @param {string} chr The matched character to escape. + * @param {string} leadingChar The capture group for a leading character. + * @param {string} whitespaceChar The capture group for a whitespace character. + * @returns {string} Returns the escaped character. + */ + function escapeRegExpChar(chr, leadingChar, whitespaceChar) { + if (leadingChar) { + chr = regexpEscapes[chr]; + } else if (whitespaceChar) { + chr = stringEscapes[chr]; + } + return '\\' + chr; + } + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the index at which the first occurrence of `NaN` is found in `array`. + * + * @private + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. + */ + function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; + } + + /** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ + function isObjectLike(value) { + return !!value && typeof value == 'object'; + } + + /** + * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a + * character code is whitespace. + * + * @private + * @param {number} charCode The character code to inspect. + * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`. + */ + function isSpace(charCode) { + return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 || + (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279))); + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + if (array[index] === placeholder) { + array[index] = PLACEHOLDER; + result[++resIndex] = index; + } + } + return result; + } + + /** + * An implementation of `_.uniq` optimized for sorted arrays without support + * for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ + function sortedUniq(array, iteratee) { + var seen, + index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (!index || seen !== computed) { + seen = computed; + result[++resIndex] = value; + } + } + return result; + } + + /** + * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the first non-whitespace character. + */ + function trimmedLeftIndex(string) { + var index = -1, + length = string.length; + + while (++index < length && isSpace(string.charCodeAt(index))) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedRightIndex(string) { + var index = string.length; + + while (index-- && isSpace(string.charCodeAt(index))) {} + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(chr) { + return htmlUnescapes[chr]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the given `context` object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // using `context` to mock `Date#getTime` use in `_.now` + * var mock = _.runInContext({ + * 'Date': function() { + * return { 'getTime': getTimeMock }; + * } + * }); + * + * // or creating a suped-up `defer` in Node.js + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + function runInContext(context) { + // Avoid issues with some ES3 environments that attempt to use values, named + // after built-in constructors like `Object`, for the creation of literals. + // ES5 clears this up by stating that literals must use built-in constructors. + // See https://es5.github.io/#x11.1.5 for more details. + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + + /** Native constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Number = context.Number, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for native method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype, + stringProto = String.prototype; + + /** Used to resolve the decompiled source of functions. */ + var fnToString = Function.prototype.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ + var objToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Native method references. */ + var ArrayBuffer = context.ArrayBuffer, + clearTimeout = context.clearTimeout, + parseFloat = context.parseFloat, + pow = Math.pow, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + Set = getNative(context, 'Set'), + setTimeout = context.setTimeout, + splice = arrayProto.splice, + Uint8Array = context.Uint8Array, + WeakMap = getNative(context, 'WeakMap'); + + /* Native method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeCreate = getNative(Object, 'create'), + nativeFloor = Math.floor, + nativeIsArray = getNative(Array, 'isArray'), + nativeIsFinite = context.isFinite, + nativeKeys = getNative(Object, 'keys'), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = getNative(Date, 'now'), + nativeParseInt = context.parseInt, + nativeRandom = Math.random; + + /** Used as references for `-Infinity` and `Infinity`. */ + var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY, + POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** + * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) + * of an array-like value. + */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that retrieve a single value or may return a + * primitive value will automatically end the chain returning the unwrapped + * value. Explicit chaining may be enabled using `_.chain`. The execution of + * chained methods is lazy, that is, execution is deferred until `_#value` + * is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization strategy which merge iteratee calls; this can help + * to avoid the creation of intermediate data structures and greatly reduce the + * number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`, + * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`, + * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, + * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`, + * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`, + * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`, + * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`, + * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`, + * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`, + * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`, + * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`, + * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`, + * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, + * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, + * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`, + * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`, + * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`, + * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`, + * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`, + * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`, + * `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. + * + * @name _ + * @constructor + * @category Chain + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(total, n) { + * return total + n; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(n) { + * return n * n; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The function whose prototype all chaining wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. + */ + function LodashWrapper(value, chainAll, actions) { + this.__wrapped__ = value; + this.__actions__ = actions || []; + this.__chain__ = !!chainAll; + } + + /** + * An object environment feature flags. + * + * @static + * @memberOf _ + * @type Object + */ + var support = lodash.support = {}; + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type Object + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type string + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type Object + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type Function + */ + '_': lodash + } + }; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = POSITIVE_INFINITY; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = arrayCopy(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = arrayCopy(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = arrayCopy(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) { + return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a cache object to store key/value pairs. + * + * @private + * @static + * @name Cache + * @memberOf _.memoize + */ + function MapCache() { + this.__data__ = {}; + } + + /** + * Removes `key` and its value from the cache. + * + * @private + * @name delete + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`. + */ + function mapDelete(key) { + return this.has(key) && delete this.__data__[key]; + } + + /** + * Gets the cached value for `key`. + * + * @private + * @name get + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to get. + * @returns {*} Returns the cached value. + */ + function mapGet(key) { + return key == '__proto__' ? undefined : this.__data__[key]; + } + + /** + * Checks if a cached value for `key` exists. + * + * @private + * @name has + * @memberOf _.memoize.Cache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapHas(key) { + return key != '__proto__' && hasOwnProperty.call(this.__data__, key); + } + + /** + * Sets `value` to `key` of the cache. + * + * @private + * @name set + * @memberOf _.memoize.Cache + * @param {string} key The key of the value to cache. + * @param {*} value The value to cache. + * @returns {Object} Returns the cache object. + */ + function mapSet(key, value) { + if (key != '__proto__') { + this.__data__[key] = value; + } + return this; + } + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates a cache object to store unique values. + * + * @private + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var length = values ? values.length : 0; + + this.data = { 'hash': nativeCreate(null), 'set': new Set }; + while (length--) { + this.push(values[length]); + } + } + + /** + * Checks if `value` is in `cache` mimicking the return signature of + * `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ + function cacheIndexOf(cache, value) { + var data = cache.data, + result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; + + return result ? 0 : -1; + } + + /** + * Adds `value` to the cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ + function cachePush(value) { + var data = this.data; + if (typeof value == 'string' || isObject(value)) { + data.set.add(value); + } else { + data.hash[value] = true; + } + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a new array joining `array` with `other`. + * + * @private + * @param {Array} array The array to join. + * @param {Array} other The other array to join. + * @returns {Array} Returns the new concatenated array. + */ + function arrayConcat(array, other) { + var index = -1, + length = array.length, + othIndex = -1, + othLength = other.length, + result = Array(length + othLength); + + while (++index < length) { + result[index] = array[index]; + } + while (++othIndex < othLength) { + result[index++] = other[othIndex]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function arrayCopy(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * A specialized version of `_.forEach` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `baseExtremum` for arrays which invokes `iteratee` + * with one argument: (value). + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ + function arrayExtremum(array, iteratee, comparator, exValue) { + var index = -1, + length = array.length, + computed = exValue, + result = computed; + + while (++index < length) { + var value = array[index], + current = +iteratee(value); + + if (comparator(current, computed)) { + computed = current; + result = value; + } + } + return result; + } + + /** + * A specialized version of `_.filter` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[++resIndex] = value; + } + } + return result; + } + + /** + * A specialized version of `_.map` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the first element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initFromArray) { + var index = -1, + length = array.length; + + if (initFromArray && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the last element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initFromArray) { + var length = array.length; + if (initFromArray && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.sum` for arrays without support for callback + * shorthands and `this` binding.. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function arraySum(array, iteratee) { + var length = array.length, + result = 0; + + while (length--) { + result += +iteratee(array[length]) || 0; + } + return result; + } + + /** + * Used by `_.defaults` to customize its `_.assign` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ + function assignDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : objectValue; + } + + /** + * Used by `_.template` to customize its `_.assign` use. + * + * **Note:** This function is like `assignDefaults` except that it ignores + * inherited property values when checking if a property is `undefined`. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @param {string} key The key associated with the object and source values. + * @param {Object} object The destination object. + * @returns {*} Returns the value to assign to the destination object. + */ + function assignOwnDefaults(objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) + ? sourceValue + : objectValue; + } + + /** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ + function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; + } + + /** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); + } + + /** + * The base implementation of `_.at` without support for string collections + * and individual key arguments. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {number[]|string[]} props The property names or indexes of elements to pick. + * @returns {Array} Returns the new array of picked elements. + */ + function baseAt(collection, props) { + var index = -1, + isNil = collection == null, + isArr = !isNil && isArrayLike(collection), + length = isArr ? collection.length : 0, + propsLength = props.length, + result = Array(propsLength); + + while(++index < propsLength) { + var key = props[index]; + if (isArr) { + result[index] = isIndex(key, length) ? collection[key] : undefined; + } else { + result[index] = isNil ? undefined : collection[key]; + } + } + return result; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; + } + return object; + } + + /** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); + } + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); + } + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); + } + + /** + * The base implementation of `_.clone` without support for argument juggling + * and `this` binding `customizer` functions. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The object `value` belongs to. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { + var result; + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return arrayCopy(value, result); + } + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag; + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return baseAssign(result, value); + } + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); + } + } + // Check for circular references and return its corresponding clone. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + // Add the source value to the stack of traversed objects and associate it with its clone. + stackA.push(value); + stackB.push(result); + + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); + }); + return result; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = undefined; + } + return result || {}; + }; + }()); + + /** + * The base implementation of `_.delay` and `_.defer` which accepts an index + * of where to slice the arguments to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Object} args The arguments provide to `func`. + * @returns {number} Returns the timer id. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.difference` which accepts a single array + * of values to exclude. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values) { + var length = array ? array.length : 0, + result = []; + + if (!length) { + return result; + } + var index = -1, + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null, + valuesLength = values.length; + + if (cache) { + indexOf = cacheIndexOf; + isCommon = false; + values = cache; + } + outer: + while (++index < length) { + var value = array[index]; + + if (isCommon && value === value) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === value) { + continue outer; + } + } + result.push(value); + } + else if (indexOf(values, value, 0) < 0) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * Gets the extremum value of `collection` invoking `iteratee` for each value + * in `collection` to generate the criterion by which the value is ranked. + * The `iteratee` is invoked with three arguments: (value, index|key, collection). + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(collection, iteratee, comparator, exValue) { + var computed = exValue, + result = computed; + + baseEach(collection, function(value, index, collection) { + var current = +iteratee(value, index, collection); + if (comparator(current, computed) || (current === exValue && current === result)) { + computed = current; + result = value; + } + }); + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : (end >>> 0); + start >>>= 0; + + while (start < length) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, + * without support for callback shorthands and `this` binding, which iterates + * over `collection` using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element + * instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with added support for restricting + * flattening and specifying the start index. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, isDeep, isStrict, result) { + result || (result = []); + + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index]; + if (isObjectLike(value) && isArrayLike(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (isDeep) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, isDeep, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forIn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForIn(object, iteratee) { + return baseFor(object, iteratee, keysIn); + } + + /** + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from those provided. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. + */ + function baseFunctions(object, props) { + var index = -1, + length = props.length, + resIndex = -1, + result = []; + + while (++index < length) { + var key = props[index]; + if (isFunction(object[key])) { + result[++resIndex] = key; + } + } + return result; + } + + /** + * The base implementation of `get` without support for string paths + * and default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + if (pathKey !== undefined && pathKey in toObject(object)) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[path[index++]]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } + } + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); + + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; + } + + /** + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.map` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which does not clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + return object[key] === value && (value !== undefined || (key in toObject(object))); + }; + } + return function(object) { + return baseIsMatch(object, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. + */ + function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; + } + + /** + * The base implementation of `_.merge` without support for argument juggling, + * multiple sources, and `this` binding `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {Object} Returns `object`. + */ + function baseMerge(object, source, customizer, stackA, stackB) { + if (!isObject(object)) { + return object; + } + var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), + props = isSrcArr ? undefined : keys(source); + + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObjectLike(srcValue)) { + stackA || (stackA = []); + stackB || (stackB = []); + baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); + } + else { + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + } + if ((result !== undefined || (isSrcArr && !(key in object))) && + (isCommon || (result === result ? (result !== value) : (value === value)))) { + object[key] = result; + } + } + }); + return object; + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize merged values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { + var length = stackA.length, + srcValue = source[key]; + + while (length--) { + if (stackA[length] == srcValue) { + object[key] = stackB[length]; + return; + } + } + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; + + if (isCommon) { + result = srcValue; + if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { + result = isArray(value) + ? value + : (isArrayLike(value) ? arrayCopy(value) : []); + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + result = isArguments(value) + ? toPlainObject(value) + : (isPlainObject(value) ? value : {}); + } + else { + isCommon = false; + } + } + // Add the source value to the stack of traversed objects and associate + // it with its merged value. + stackA.push(srcValue); + stackB.push(result); + + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); + } else if (result === result ? (result !== value) : (value === value)) { + object[key] = result; + } + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + */ + function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * index arguments and capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0; + while (length--) { + var index = indexes[length]; + if (index != previous && isIndex(index)) { + var previous = index; + splice.call(array, index, 1); + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for argument juggling + * and returning floating-point numbers. + * + * @private + * @param {number} min The minimum possible value. + * @param {number} max The maximum possible value. + * @returns {number} Returns the random number. + */ + function baseRandom(min, max) { + return min + nativeFloor(nativeRandom() * (max - min + 1)); + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight` without support + * for callback shorthands and `this` binding, which iterates over `collection` + * using the provided `eachFunc`. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initFromCollection Specify using the first or last element + * of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initFromCollection + ? (initFromCollection = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `setData` without support for hot loop detection. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define + * the sort order of `array` and replaces criteria objects with their + * corresponding values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sortByOrder` without param guards. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseSortByOrder(collection, iteratees, orders) { + var callback = getCallback(), + index = -1; + + iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); }); + + var result = baseMap(collection, function(value) { + var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.sum` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(collection, iteratee) { + var result = 0; + baseEach(collection, function(value, index, collection) { + result += +iteratee(value, index, collection) || 0; + }); + return result; + } + + /** + * The base implementation of `_.uniq` without support for callback shorthands + * and `this` binding. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. + */ + function baseUniq(array, iteratee) { + var index = -1, + indexOf = getIndexOf(), + length = array.length, + isCommon = indexOf == baseIndexOf, + isLarge = isCommon && length >= LARGE_ARRAY_SIZE, + seen = isLarge ? createCache() : null, + result = []; + + if (seen) { + indexOf = cacheIndexOf; + isCommon = false; + } else { + isLarge = false; + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (isCommon && value === value) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (indexOf(seen, computed, 0) < 0) { + if (iteratee || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + var index = -1, + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; + } + + /** + * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`, + * and `_.takeWhile` without support for callback shorthands and `this` binding. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to peform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + var index = -1, + length = actions.length; + + while (++index < length) { + var action = actions[index]; + result = action.func.apply(action.thisArg, arrayPush([result], action.args)); + } + return result; + } + + /** + * Performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function binaryIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return binaryIndexBy(array, value, identity, retHighest); + } + + /** + * This function is like `binaryIndex` except that it invokes `iteratee` for + * `value` and each element of `array` to compute their sort ranking. The + * iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The function invoked per iteration. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function binaryIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; + } + + /** + * Creates a clone of the given array buffer. + * + * @private + * @param {ArrayBuffer} buffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function bufferClone(buffer) { + var result = new ArrayBuffer(buffer.byteLength), + view = new Uint8Array(result); + + view.set(new Uint8Array(buffer)); + return result; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders) { + var holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + leftIndex = -1, + leftLength = partials.length, + result = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + while (argsLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders) { + var holdersIndex = -1, + holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + rightIndex = -1, + rightLength = partials.length, + result = Array(argsLength + rightLength); + + while (++argsIndex < argsLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + return result; + } + + /** + * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function. + * + * @private + * @param {Function} setter The function to set keys and values of the accumulator object. + * @param {Function} [initializer] The function to initialize the accumulator object. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee, thisArg) { + var result = initializer ? initializer() : {}; + iteratee = getCallback(iteratee, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + setter(result, value, iteratee(value, index, collection), collection); + } + } else { + baseEach(collection, function(value, key, collection) { + setter(result, value, iteratee(value, key, collection), collection); + }); + } + return result; + }; + } + + /** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` and invokes it with the `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new bound function. + */ + function createBindWrapper(func, thisArg) { + var Ctor = createCtorWrapper(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(thisArg, arguments); + } + return wrapper; + } + + /** + * Creates a `Set` cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [values] The values to cache. + * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. + */ + function createCache(values) { + return (nativeCreate && Set) ? new SetCache(values) : null; + } + + /** + * Creates a function that produces compound words out of the words in a + * given string. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + var index = -1, + array = words(deburr(string)), + length = array.length, + result = ''; + + while (++index < length) { + result = callback(result, array[index], index); + } + return result; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.curry` or `_.curryRight` function. + * + * @private + * @param {boolean} flag The curry bit flag. + * @returns {Function} Returns the new curry function. + */ + function createCurry(flag) { + function curryFunc(func, arity, guard) { + if (guard && isIterateeCall(func, arity, guard)) { + arity = undefined; + } + var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryFunc.placeholder; + return result; + } + return curryFunc; + } + + /** + * Creates a `_.defaults` or `_.defaultsDeep` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @param {Function} customizer The function to customize assigned values. + * @returns {Function} Returns the new defaults function. + */ + function createDefaults(assigner, customizer) { + return restParam(function(args) { + var object = args[0]; + if (object == null) { + return object; + } + args.push(customizer); + return assigner.apply(undefined, args); + }); + } + + /** + * Creates a `_.max` or `_.min` function. + * + * @private + * @param {Function} comparator The function used to compare values. + * @param {*} exValue The initial extremum value. + * @returns {Function} Returns the new extremum function. + */ + function createExtremum(comparator, exValue) { + return function(collection, iteratee, thisArg) { + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + iteratee = getCallback(iteratee, thisArg, 3); + if (iteratee.length == 1) { + collection = isArray(collection) ? collection : toIterable(collection); + var result = arrayExtremum(collection, iteratee, comparator, exValue); + if (!(collection.length && result === exValue)) { + return result; + } + } + return baseExtremum(collection, iteratee, comparator, exValue); + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFind(eachFunc, fromRight) { + return function(collection, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, fromRight); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, eachFunc); + }; + } + + /** + * Creates a `_.findIndex` or `_.findLastIndex` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFindIndex(fromRight) { + return function(array, predicate, thisArg) { + if (!(array && array.length)) { + return -1; + } + predicate = getCallback(predicate, thisArg, 3); + return baseFindIndex(array, predicate, fromRight); + }; + } + + /** + * Creates a `_.findKey` or `_.findLastKey` function. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new find function. + */ + function createFindKey(objectFunc) { + return function(object, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + return baseFind(object, predicate, objectFunc, true); + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return function() { + var wrapper, + length = arguments.length, + index = fromRight ? length : -1, + leftIndex = 0, + funcs = Array(length); + + while ((fromRight ? index-- : ++index < length)) { + var func = funcs[leftIndex++] = arguments[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') { + wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? -1 : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }; + } + + /** + * Creates a function for `_.forEach` or `_.forEachRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createForEach(arrayFunc, eachFunc) { + return function(collection, iteratee, thisArg) { + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee) + : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); + }; + } + + /** + * Creates a function for `_.forIn` or `_.forInRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForIn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee, keysIn); + }; + } + + /** + * Creates a function for `_.forOwn` or `_.forOwnRight`. + * + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForOwn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee); + }; + } + + /** + * Creates a function for `_.mapKeys` or `_.mapValues`. + * + * @private + * @param {boolean} [isMapKeys] Specify mapping keys instead of values. + * @returns {Function} Returns the new map function. + */ + function createObjectMapper(isMapKeys) { + return function(object, iteratee, thisArg) { + var result = {}; + iteratee = getCallback(iteratee, thisArg, 3); + + baseForOwn(object, function(value, key, object) { + var mapped = iteratee(value, key, object); + key = isMapKeys ? mapped : key; + value = isMapKeys ? value : mapped; + result[key] = value; + }); + return result; + }; + } + + /** + * Creates a function for `_.padLeft` or `_.padRight`. + * + * @private + * @param {boolean} [fromRight] Specify padding from the right. + * @returns {Function} Returns the new pad function. + */ + function createPadDir(fromRight) { + return function(string, length, chars) { + string = baseToString(string); + return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string); + }; + } + + /** + * Creates a `_.partial` or `_.partialRight` function. + * + * @private + * @param {boolean} flag The partial bit flag. + * @returns {Function} Returns the new partial function. + */ + function createPartial(flag) { + var partialFunc = restParam(function(func, partials) { + var holders = replaceHolders(partials, partialFunc.placeholder); + return createWrapper(func, flag, undefined, partials, holders); + }); + return partialFunc; + } + + /** + * Creates a function for `_.reduce` or `_.reduceRight`. + * + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createReduce(arrayFunc, eachFunc) { + return function(collection, iteratee, accumulator, thisArg) { + var initFromArray = arguments.length < 3; + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee, accumulator, initFromArray) + : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); + }; + } + + /** + * Creates a function that wraps `func` and invokes it with optional `this` + * binding of, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurry = bitmask & CURRY_FLAG, + isCurryBound = bitmask & CURRY_BOUND_FLAG, + isCurryRight = bitmask & CURRY_RIGHT_FLAG, + Ctor = isBindKey ? undefined : createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it to other functions. + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (partials) { + args = composeArgs(args, partials, holders); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight); + } + if (isCurry || isCurryRight) { + var placeholder = wrapper.placeholder, + argsHolders = replaceHolders(args, placeholder); + + length -= argsHolders.length; + if (length < arity) { + var newArgPos = argPos ? arrayCopy(argPos) : undefined, + newArity = nativeMax(arity - length, 0), + newsHolders = isCurry ? argsHolders : undefined, + newHoldersRight = isCurry ? undefined : argsHolders, + newPartials = isCurry ? args : undefined, + newPartialsRight = isCurry ? undefined : args; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!isCurryBound) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], + result = createHybridWrapper.apply(undefined, newData); + + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + if (argPos) { + args = reorder(args, argPos); + } + if (isAry && ary < args.length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(func); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates the padding required for `string` based on the given `length`. + * The `chars` string is truncated if the number of characters exceeds `length`. + * + * @private + * @param {string} string The string to create padding for. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the pad for `string`. + */ + function createPadding(string, length, chars) { + var strLength = string.length; + length = +length; + + if (strLength >= length || !nativeIsFinite(length)) { + return ''; + } + var padLength = length - strLength; + chars = chars == null ? ' ' : (chars + ''); + return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength); + } + + /** + * Creates a function that wraps `func` and invokes it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. + * + * @private + * @param {Function} func The function to partially apply arguments to. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new bound function. + */ + function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it `func`. + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength); + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.ceil`, `_.floor`, or `_.round` function. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + precision = precision === undefined ? 0 : (+precision || 0); + if (precision) { + precision = pow(10, precision); + return func(number * precision) / precision; + } + return func(number); + }; + } + + /** + * Creates a `_.sortedIndex` or `_.sortedLastIndex` function. + * + * @private + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {Function} Returns the new index function. + */ + function createSortedIndex(retHighest) { + return function(array, value, iteratee, thisArg) { + var callback = getCallback(iteratee); + return (iteratee == null && callback === baseCallback) + ? binaryIndex(array, value, retHighest) + : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + length -= (holders ? holders.length : 0); + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func), + newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; + + if (data) { + mergeData(newData, data); + bitmask = newData[1]; + arity = newData[9]; + } + newData[9] = arity == null + ? (isBindKey ? 0 : func.length) + : (nativeMax(arity - length, 0) || 0); + + if (bitmask == BIND_FLAG) { + var result = createBindWrapper(newData[0], newData[2]); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { + result = createPartialWrapper.apply(undefined, newData); + } else { + result = createHybridWrapper.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setter(result, newData); + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; + } + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; + + if (result !== undefined) { + if (result) { + continue; + } + return false; + } + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; + } + } + return true; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; + } + } + return true; + } + + /** + * Gets the appropriate "callback" function. If the `_.callback` method is + * customized this function returns the custom method, otherwise it returns + * the `baseCallback` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. + * + * @private + * @returns {Function} Returns the chosen function or its result. + */ + function getCallback(func, thisArg, argCount) { + var result = lodash.callback || callback; + result = result === callback ? baseCallback : result; + return argCount ? result(func, thisArg, argCount) : result; + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = func.name, + array = realNames[result], + length = array ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the appropriate "indexOf" function. If the `_.indexOf` method is + * customized this function returns the custom method, otherwise it returns + * the `baseIndexOf` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. + * + * @private + * @returns {Function|number} Returns the chosen function or its result. + */ + function getIndexOf(collection, target, fromIndex) { + var result = lodash.indexOf || indexOf; + result = result === indexOf ? baseIndexOf : result; + return collection ? result(collection, target, fromIndex) : result; + } + + /** + * Gets the "length" property value of `object`. + * + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. + * + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Gets the propery names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add array properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + var Ctor = object.constructor; + if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { + Ctor = Object; + } + return new Ctor; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return bufferClone(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + var buffer = object.buffer; + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)); + result.lastIndex = object.lastIndex; + } + return result; + } + + /** + * Invokes the method at `path` on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function invokePath(object, path, args) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + path = last(path); + } + var func = object == null ? object : object[path]; + return func == null ? undefined : func.apply(object, args); + } + + /** + * Checks if `value` is array-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + */ + function isArrayLike(value) { + return value != null && isLength(getLength(value)); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; + } + + /** + * Checks if the provided arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func); + if (!(funcName in LazyWrapper.prototype)) { + return false; + } + var other = lodash[funcName]; + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ + function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers required to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * augment function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * common case where curried functions have `_.ary` and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < ARY_FLAG; + + var isCombo = + (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || + (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || + (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = arrayCopy(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @returns {*} Returns the value to assign to the destination object. + */ + function mergeDefaults(objectValue, sourceValue) { + return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults); + } + + /** + * A specialized version of `_.pick` which picks `object` properties specified + * by `props`. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. + */ + function pickByArray(object, props) { + object = toObject(object); + + var index = -1, + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } + } + return result; + } + + /** + * A specialized version of `_.pick` which picks `object` properties `predicate` + * returns truthy for. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per iteration. + * @returns {Object} Returns the new object. + */ + function pickByCallback(object, predicate) { + var result = {}; + baseForIn(object, function(value, key, object) { + if (predicate(value, key, object)) { + result[key] = value; + } + }); + return result; + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = arrayCopy(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = (function() { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); + }; + }()); + + /** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; + + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object)); + + var index = -1, + result = []; + + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to an array-like object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array|Object} Returns the array-like object. + */ + function toIterable(value) { + if (value == null) { + return []; + } + if (!isArrayLike(value)) { + return values(value); + } + return isObject(value) ? value : Object(value); + } + + /** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ + function toObject(value) { + return isObject(value) ? value : Object(value); + } + + /** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ + function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + return wrapper instanceof LazyWrapper + ? wrapper.clone() + : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `collection` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new array containing chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(nativeFloor(size) || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; + } + + /** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ + var difference = restParam(function(array, values) { + return (isObjectLike(array) && isArrayLike(array)) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that match the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [1] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active', false), 'user'); + * // => ['barney'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropRightWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [3] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.dropWhile(users, 'active', false), 'user'); + * // => ['pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.dropWhile(users, 'active'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8], '*', 1, 2); + * // => [4, '*', 8] + */ + function fill(array, value, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(chr) { + * return chr.user == 'barney'; + * }); + * // => 0 + * + * // using the `_.matches` callback shorthand + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // using the `_.matchesProperty` callback shorthand + * _.findIndex(users, 'active', false); + * // => 0 + * + * // using the `_.property` callback shorthand + * _.findIndex(users, 'active'); + * // => 2 + */ + var findIndex = createFindIndex(); + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(chr) { + * return chr.user == 'pebbles'; + * }); + * // => 2 + * + * // using the `_.matches` callback shorthand + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastIndex(users, 'active', false); + * // => 2 + * + * // using the `_.property` callback shorthand + * _.findLastIndex(users, 'active'); + * // => 0 + */ + var findLastIndex = createFindIndex(true); + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ + function first(array) { + return array ? array[0] : undefined; + } + + /** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it is only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ + function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; + } + + /** + * Recursively flattens a nested array. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to recursively flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, 3, [4]]]); + * // => [1, 2, 3, 4] + */ + function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, true) : []; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value); + if (index < length && + (value === value ? (value === array[index]) : (array[index] !== array[index]))) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + return dropRight(array, 1); + } + + /** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ + var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + result = []; + + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; + + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } + } + if (seen) { + seen.push(value); + } + result.push(value); + } + } + return result; + }); + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=array.length-1] The index to search from + * or `true` to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // using `fromIndex` + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + * + * // performing a binary search + * _.lastIndexOf([1, 1, 2, 2], 2, true); + * // => 3 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + var index = length; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1; + } else if (fromIndex) { + index = binaryIndex(array, value, true) - 1; + var other = array[index]; + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + if (value !== value) { + return indexOfNaN(array, index, true); + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all provided values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + function pull() { + var args = arguments, + array = args[0]; + + if (!(array && array.length)) { + return array; + } + var index = 0, + indexOf = getIndexOf(), + length = args.length; + + while (++index < length) { + var fromIndex = 0, + value = args[index]; + + while ((fromIndex = indexOf(array, value, fromIndex)) > -1) { + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * Removes elements from `array` corresponding to the given indexes and returns + * an array of the removed elements. Indexes may be specified as an array of + * indexes or as individual arguments. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove, + * specified as individual indexes or arrays of indexes. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [5, 10, 15, 20]; + * var evens = _.pullAt(array, 1, 3); + * + * console.log(array); + * // => [5, 15] + * + * console.log(evens); + * // => [10, 20] + */ + var pullAt = restParam(function(array, indexes) { + indexes = baseFlatten(indexes); + + var result = baseAt(array, indexes); + basePullAt(array, indexes.sort(baseCompareAscending)); + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * **Note:** Unlike `_.filter`, this method mutates `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to modify. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate, thisArg) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getCallback(predicate, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @alias tail + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + */ + function rest(array) { + return drop(array, 1); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of `Array#slice` to support node + * lists in IE < 9 and to ensure dense arrays are returned. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` should + * be inserted into `array` in order to maintain its sort order. If an iteratee + * function is provided it is invoked for `value` and each element of `array` + * to compute their sort ranking. The iteratee is bound to `thisArg` and + * invoked with one argument; (value). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + * + * _.sortedIndex([4, 4, 5, 5], 5); + * // => 2 + * + * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; + * + * // using an iteratee function + * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { + * return this.data[word]; + * }, dict); + * // => 1 + * + * // using the `_.property` callback shorthand + * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 1 + */ + var sortedIndex = createSortedIndex(); + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 4, 5, 5], 5); + * // => 4 + */ + var sortedLastIndex = createSortedIndex(true); + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (guard ? isIterateeCall(array, n, guard) : n == null) { + n = 1; + } + n = length - (+n || 0); + return baseSlice(array, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is bound to `thisArg` + * and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRightWhile([1, 2, 3], function(n) { + * return n > 1; + * }); + * // => [2, 3] + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user'); + * // => ['pebbles'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active', false), 'user'); + * // => ['fred', 'pebbles'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeRightWhile(users, 'active'), 'user'); + * // => [] + */ + function takeRightWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is bound to + * `thisArg` and invoked with three arguments: (value, index, array). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeWhile([1, 2, 3], function(n) { + * return n < 3; + * }); + * // => [1, 2] + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.takeWhile(users, 'active', false), 'user'); + * // => ['barney', 'fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.takeWhile(users, 'active'), 'user'); + * // => [] + */ + function takeWhile(array, predicate, thisArg) { + return (array && array.length) + ? baseWhile(array, getCallback(predicate, thisArg, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ + var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it is invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted; + isSorted = false; + } + var callback = getCallback(); + if (!(iteratee == null && callback === baseCallback)) { + iteratee = callback(iteratee, thisArg, 3); + } + return (isSorted && getIndexOf() == baseIndexOf) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + * + * _.unzip(zipped); + * // => [['fred', 'barney'], [30, 40], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var index = -1, + length = 0; + + array = arrayFilter(array, function(group) { + if (isArrayLike(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + var result = Array(length); + while (++index < length) { + result[index] = arrayMap(array, baseProperty(index)); + } + return result; + } + + /** + * This method is like `_.unzip` except that it accepts an iteratee to specify + * how regrouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee] The function to combine regrouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + iteratee = bindCallback(iteratee, thisArg, 4); + return arrayMap(result, function(group) { + return arrayReduce(group, iteratee, undefined, true); + }); + } + + /** + * Creates an array excluding all provided values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ + var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the provided arrays. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of values. + * @example + * + * _.xor([1, 2], [4, 2]); + * // => [1, 4] + */ + function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArrayLike(array)) { + var result = result + ? arrayPush(baseDifference(result, array), baseDifference(array, result)) + : array; + } + } + return result ? baseUniq(result) : []; + } + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second elements + * of the given arrays, and so on. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + var zip = restParam(unzip); + + /** + * The inverse of `_.pairs`; this method returns an object composed from arrays + * of property names and values. Provide either a single two dimensional array, + * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names + * and one of corresponding values. + * + * @static + * @memberOf _ + * @alias object + * @category Array + * @param {Array} props The property names. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject([['fred', 30], ['barney', 40]]); + * // => { 'fred': 30, 'barney': 40 } + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ + function zipObject(props, values) { + var index = -1, + length = props ? props.length : 0, + result = {}; + + if (length && !values && !isArray(props[0])) { + values = []; + } + while (++index < length) { + var key = props[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; + } + + /** + * This method is like `_.zip` except that it accepts an iteratee to specify + * how grouped values should be combined. The `iteratee` is bound to `thisArg` + * and invoked with four arguments: (accumulator, value, index, group). + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee] The function to combine grouped values. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], _.add); + * // => [111, 222] + */ + var zipWith = restParam(function(arrays) { + var length = arrays.length, + iteratee = length > 2 ? arrays[length - 2] : undefined, + thisArg = length > 1 ? arrays[length - 1] : undefined; + + if (length > 2 && typeof iteratee == 'function') { + length -= 2; + } else { + iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined; + thisArg = undefined; + } + arrays.length = length; + return unzipWith(arrays, iteratee, thisArg); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); + } + + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Creates a new array joining a wrapped array with any additional arrays + * and/or values. + * + * @name concat + * @memberOf _ + * @category Chain + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var wrapped = _(array).concat(2, [3], [[4]]); + * + * console.log(wrapped.value()); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + var wrapperConcat = restParam(function(values) { + values = baseFlatten(values); + return this.thru(function(array) { + return arrayConcat(isArray(array) ? array : [toObject(array)], values); + }); + }); + + /** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapped = wrapped.plant(other); + * + * otherWrapped.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + + var interceptor = function(value) { + return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse(); + }; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(interceptor); + } + + /** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ + function wrapperToString() { + return (this.value() + ''); + } + + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements corresponding to the given keys, or indexes, + * of `collection`. Keys may be specified as individual arguments or as arrays + * of keys. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [props] The property names + * or indexes of elements to pick, specified individually or in arrays. + * @returns {Array} Returns the new array of picked elements. + * @example + * + * _.at(['a', 'b', 'c'], [0, 2]); + * // => ['a', 'c'] + * + * _.at(['barney', 'fred', 'pebbles'], 0, 2); + * // => ['barney', 'pebbles'] + */ + var at = restParam(function(collection, props) { + return baseAt(collection, baseFlatten(props)); + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the number of times the key was returned by `iteratee`. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1); + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); + } + return func(collection, predicate); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ + function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, predicate); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ + var find = createFind(baseEach); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(baseEachRight, true); + + /** + * Performs a deep comparison between each element in `collection` and the + * source object, returning the first element that has equivalent property + * values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); + * // => 'barney' + * + * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user'); + * // => 'fred' + */ + function findWhere(collection, source) { + return find(collection, baseMatches(source)); + } + + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ + var forEach = createForEach(arrayEach, baseEach); + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEachRight(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from right to left and returns the array + */ + var forEachRight = createForEach(arrayEachRight, baseEachRight); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } + }); + + /** + * Checks if `value` is in `collection` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ + function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1) + : (!!length && getIndexOf(collection, target, fromIndex) > -1); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is the last element responsible for generating the key. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keyData = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keyData, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return String.fromCharCode(object.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keyData, function(object) { + * return this.fromCharCode(object.code); + * }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ + var indexBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `methodName` is a function it is + * invoked for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invoke = restParam(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? func.apply(value, args) : invokePath(value, path, args); + }); + return result; + }); + + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = getCallback(iteratee, thisArg, 3); + return func(collection, iteratee); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, while the second of which + * contains elements `predicate` returns falsey for. The predicate is bound + * to `thisArg` and invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * _.partition([1, 2, 3], function(n) { + * return n % 2; + * }); + * // => [[1, 3], [2]] + * + * _.partition([1.2, 2.3, 3.4], function(n) { + * return this.floor(n) % 2; + * }, Math); + * // => [[1.2, 3.4], [2.3]] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * var mapper = function(array) { + * return _.pluck(array, 'user'); + * }; + * + * // using the `_.matches` callback shorthand + * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper); + * // => [['pebbles'], ['barney', 'fred']] + * + * // using the `_.matchesProperty` callback shorthand + * _.map(_.partition(users, 'active', false), mapper); + * // => [['barney', 'pebbles'], ['fred']] + * + * // using the `_.property` callback shorthand + * _.map(_.partition(users, 'active'), mapper); + * // => [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ + function pluck(collection, path) { + return map(collection, property(path)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, + * and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ + var reduce = createReduce(arrayReduce, baseEach); + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + var reduceRight = createReduce(arrayReduceRight, baseEachRight); + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] + */ + function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); + } + + /** + * Gets a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {*} Returns the random sample(s). + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ + function sample(collection, n, guard) { + if (guard ? isIterateeCall(collection, n, guard) : n == null) { + collection = toIterable(collection); + var length = collection.length; + return length > 0 ? collection[baseRandom(0, length - 1)] : undefined; + } + var index = -1, + result = toArray(collection), + length = result.length, + lastIndex = length - 1; + + n = nativeMin(n < 0 ? 0 : (+n || 0), length); + while (++index < n) { + var rand = baseRandom(index, lastIndex), + value = result[rand]; + + result[rand] = result[index]; + result[index] = value; + } + result.length = n; + return result; + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + return sample(collection, POSITIVE_INFINITY); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the size of `collection`. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + var length = collection ? getLength(collection) : 0; + return isLength(length) ? length : keys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = undefined; + } + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); + } + return func(collection, predicate); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through `iteratee`. This method performs + * a stable sort, that is, it preserves the original sort order of equal elements. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new sorted array. + * @example + * + * _.sortBy([1, 2, 3], function(n) { + * return Math.sin(n); + * }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(n) { + * return this.sin(n); + * }, Math); + * // => [3, 1, 2] + * + * var users = [ + * { 'user': 'fred' }, + * { 'user': 'pebbles' }, + * { 'user': 'barney' } + * ]; + * + * // using the `_.property` callback shorthand + * _.pluck(_.sortBy(users, 'user'), 'user'); + * // => ['barney', 'fred', 'pebbles'] + */ + function sortBy(collection, iteratee, thisArg) { + if (collection == null) { + return []; + } + if (thisArg && isIterateeCall(collection, iteratee, thisArg)) { + iteratee = undefined; + } + var index = -1; + iteratee = getCallback(iteratee, thisArg, 3); + + var result = baseMap(collection, function(value, key, collection) { + return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value }; + }); + return baseSortBy(result, compareAscending); + } + + /** + * This method is like `_.sortBy` except that it can sort by multiple iteratees + * or property names. + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees + * The iteratees to sort by, specified as individual values or arrays of values. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.map(_.sortByAll(users, ['user', 'age']), _.values); + * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]] + * + * _.map(_.sortByAll(users, 'user', function(chr) { + * return Math.floor(chr.age / 10); + * }), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + var sortByAll = restParam(function(collection, iteratees) { + if (collection == null) { + return []; + } + var guard = iteratees[2]; + if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) { + iteratees.length = 1; + } + return baseSortByOrder(collection, baseFlatten(iteratees), []); + }); + + /** + * This method is like `_.sortByAll` except that it allows specifying the + * sort orders of the iteratees to sort by. If `orders` is unspecified, all + * values are sorted in ascending order. Otherwise, a value is sorted in + * ascending order if its corresponding order is "asc", and descending if "desc". + * + * If a property name is provided for an iteratee the created `_.property` + * style callback returns the property value of the given element. + * + * If an object is provided for an iteratee the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {boolean[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 42 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // sort by `user` in ascending order and by `age` in descending order + * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values); + * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] + */ + function sortByOrder(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (guard && isIterateeCall(iteratees, orders, guard)) { + orders = undefined; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseSortByOrder(collection, iteratees, orders); + } + + /** + * Performs a deep comparison between each element in `collection` and the + * source object, returning an array of all elements that have equivalent + * property values. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Object} source The object of property values to match. + * @returns {Array} Returns the new filtered array. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, + * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); + * // => ['barney'] + * + * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user'); + * // => ['fred'] + */ + function where(collection, source) { + return filter(collection, baseMatches(source)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked + */ + var now = nativeNow || function() { + return new Date().getTime(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it is called `n` or more times. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'done saving!' after the two async saves have completed + */ + function after(n, func) { + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + n = nativeIsFinite(n = +n) ? n : 0; + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that accepts up to `n` arguments ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + if (guard && isIterateeCall(func, n, guard)) { + n = undefined; + } + n = (func && n == null) ? func.length : nativeMax(+n || 0, 0); + return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it is called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery('#add').on('click', _.before(5, addContactToList)); + * // => allows adding up to 4 contacts to the list + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + if (typeof n == 'function') { + var temp = n; + n = func; + func = temp; + } else { + throw new TypeError(FUNC_ERROR_TEXT); + } + } + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(func, bitmask, thisArg, partials, holders); + }); + + /** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all enumerable function + * properties, own and inherited, of `object` are bound. + * + * **Note:** This method does not set the "length" property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} [methodNames] The object method names to bind, + * specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs' when the element is clicked + */ + var bindAll = restParam(function(object, methodNames) { + methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object); + + var index = -1, + length = methodNames.length; + + while (++index < length) { + var key = methodNames[index]; + object[key] = createWrapper(object[key], BIND_FLAG, object); + } + return object; + }); + + /** + * Creates a function that invokes the method at `object[key]` and prepends + * any additional `_.bindKey` arguments to those provided to the bound function. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. + * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @category Function + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // using placeholders + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = restParam(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bindKey.placeholder); + bitmask |= PARTIAL_FLAG; + } + return createWrapper(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts one or more arguments of `func` that when + * called either invokes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` may be specified + * if `func.length` is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + var curry = createCurry(CURRY_FLAG); + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method does not set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // using placeholders + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + var curryRight = createCurry(CURRY_RIGHT_FLAG); + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it is invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = !!options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + lastCalled = 0; + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function complete(isCalled, id) { + if (id) { + clearTimeout(id); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + } + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + complete(trailingCall, maxTimeoutId); + } else { + timeoutId = setTimeout(delayed, remaining); + } + } + + function maxDelayed() { + complete(trailing, timeoutId); + } + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = undefined; + } + return result; + } + debounced.cancel = cancel; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ + var defer = restParam(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => logs 'later' after one second + */ + var delay = restParam(function(func, wait, args) { + return baseDelay(func, wait, args); + }); + + /** + * Creates a function that returns the result of invoking the provided + * functions with the `this` binding of the created function, where each + * successive invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow(_.add, square); + * addSquare(1, 2); + * // => 9 + */ + var flow = createFlow(); + + /** + * This method is like `_.flow` except that it creates a function that + * invokes the provided functions from right to left. + * + * @static + * @memberOf _ + * @alias backflow, compose + * @category Function + * @param {...Function} [funcs] Functions to invoke. + * @returns {Function} Returns the new function. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight(square, _.add); + * addSquare(1, 2); + * // => 9 + */ + var flowRight = createFlow(true); + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is coerced to a string and used as the + * cache key. The `func` is invoked with the `this` binding of the memoized + * function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object) + * method interface of `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var upperCase = _.memoize(function(string) { + * return string.toUpperCase(); + * }); + * + * upperCase('fred'); + * // => 'FRED' + * + * // modifying the result cache + * upperCase.cache.set('fred', 'BARNEY'); + * upperCase('fred'); + * // => 'BARNEY' + * + * // replacing `_.memoize.Cache` + * var object = { 'user': 'fred' }; + * var other = { 'user': 'barney' }; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'fred' } + * + * _.memoize.Cache = WeakMap; + * var identity = _.memoize(_.identity); + * + * identity(object); + * // => { 'user': 'fred' } + * identity(other); + * // => { 'user': 'barney' } + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new memoize.Cache; + return memoized; + } + + /** + * Creates a function that runs each argument through a corresponding + * transform function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms] The functions to transform + * arguments, specified as individual functions or arrays of functions. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var modded = _.modArgs(function(x, y) { + * return [x, y]; + * }, square, doubled); + * + * modded(1, 2); + * // => [1, 4] + * + * modded(5, 10); + * // => [25, 20] + */ + var modArgs = restParam(function(func, transforms) { + transforms = baseFlatten(transforms); + if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = transforms.length; + return restParam(function(args) { + var index = nativeMin(args.length, length); + while (index--) { + args[index] = transforms[index](args[index]); + } + return func.apply(this, args); + }); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + return !predicate.apply(this, arguments); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first call. The `func` is invoked + * with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` invokes `createApplication` once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with `partial` arguments prepended + * to those provided to the new function. This method is like `_.bind` except + * it does **not** alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // using placeholders + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = createPartial(PARTIAL_FLAG); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to those provided to the new function. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method does not set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { + * return greeting + ' ' + name; + * }; + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // using placeholders + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = createPartial(PARTIAL_RIGHT_FLAG); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified indexes where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes, + * specified as individual indexes or arrays of indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, 2, 0, 1); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + * + * var map = _.rearg(_.map, [1, 0]); + * map(function(n) { + * return n * 3; + * }, [1, 2, 3]); + * // => [3, 6, 9] + */ + var rearg = restParam(function(func, indexes) { + return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes)); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of the created + * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3). + * + * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to spread arguments over. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * // with a Promise + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function(array) { + return func.apply(this, array); + }; + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing }); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Any additional arguments provided to the function are + * appended to those provided to the wrapper function. The wrapper is invoked + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Function + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

    ' + func(text) + '

    '; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

    fred, barney, & pebbles

    ' + */ + function wrap(value, wrapper) { + wrapper = wrapper == null ? identity : wrapper; + return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, + * otherwise they are assigned by reference. If `customizer` is provided it is + * invoked to produce the cloned values. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is bound to + * `thisArg` and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var shallow = _.clone(users); + * shallow[0] === users[0]; + * // => true + * + * var deep = _.clone(users, true); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.clone(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 0 + */ + function clone(value, isDeep, customizer, thisArg) { + if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { + isDeep = false; + } + else if (typeof isDeep == 'function') { + thisArg = customizer; + customizer = isDeep; + isDeep = false; + } + return typeof customizer == 'function' + ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) + : baseClone(value, isDeep); + } + + /** + * Creates a deep clone of `value`. If `customizer` is provided it is invoked + * to produce the cloned values. If `customizer` returns `undefined` cloning + * is handled by the method instead. The `customizer` is bound to `thisArg` + * and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var deep = _.cloneDeep(users); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.cloneDeep(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 20 + */ + function cloneDeep(value, customizer, thisArg) { + return typeof customizer == 'function' + ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) + : baseClone(value, true); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`. + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + function gt(value, other) { + return value > other; + } + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`. + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + function gte(value, other) { + return value >= other; + } + + /** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false + */ + var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; + }; + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + function isDate(value) { + return isObjectLike(value) && objToString.call(value) == dateTag; + } + + /** + * Checks if `value` is a DOM element. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); + } + + /** + * Checks if `value` is empty. A value is considered empty unless it is an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. If `customizer` is provided it is invoked to compare values. + * If `customizer` returns `undefined` comparisons are handled by the method + * instead. The `customizer` is bound to `thisArg` and invoked with three + * arguments: (value, other [, index|key]). + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. Functions and DOM nodes + * are **not** supported. Provide a customizer function to extend support + * for comparing other values. + * + * @static + * @memberOf _ + * @alias eq + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * object == other; + * // => false + * + * _.isEqual(object, other); + * // => true + * + * // using a customizer callback + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqual(array, other, function(value, other) { + * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) { + * return true; + * } + * }); + * // => true + */ + function isEqual(value, other, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite). + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(10); + * // => true + * + * _.isFinite('10'); + * // => false + * + * _.isFinite(true); + * // => false + * + * _.isFinite(Object(10)); + * // => false + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return isObject(value) && objToString.call(value) == funcTag; + } + + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ + function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } + + /** + * Performs a deep comparison between `object` and `source` to determine if + * `object` contains equivalent property values. If `customizer` is provided + * it is invoked to compare values. If `customizer` returns `undefined` + * comparisons are handled by the method instead. The `customizer` is bound + * to `thisArg` and invoked with three arguments: (value, other, index|key). + * + * **Note:** This method supports comparing properties of arrays, booleans, + * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions + * and DOM nodes are **not** supported. Provide a customizer function to extend + * support for comparing other values. + * + * @static + * @memberOf _ + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.isMatch(object, { 'age': 40 }); + * // => true + * + * _.isMatch(object, { 'age': 36 }); + * // => false + * + * // using a customizer callback + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatch(object, source, function(value, other) { + * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined; + * }); + * // => true + */ + function isMatch(object, source, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + return baseIsMatch(object, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4) + * which returns `true` for `undefined` and other non-numeric values. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some host objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (value == null) { + return false; + } + if (isFunction(value)) { + return reIsNative.test(fnToString.call(value)); + } + return isObjectLike(value) && reIsHostCtor.test(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified + * as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isNumber(8.4); + * // => true + * + * _.isNumber(NaN); + * // => true + * + * _.isNumber('8.4'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * **Note:** This method assumes objects created by the `Object` constructor + * have no inherited enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + var Ctor; + + // Exit early for non `Object` objects. + if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) || + (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { + return false; + } + // IE < 9 iterates inherited properties before own properties. If the first + // iterated property is an object's own property then there are no inherited + // enumerable properties. + var result; + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + baseForIn(value, function(subValue, key) { + result = key; + }); + return result === undefined || hasOwnProperty.call(value, result); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + function isRegExp(value) { + return isObject(value) && objToString.call(value) == regexpTag; + } + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`. + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + function lt(value, other) { + return value < other; + } + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`. + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + function lte(value, other) { + return value <= other; + } + + /** + * Converts `value` to an array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * (function() { + * return _.toArray(arguments).slice(1); + * }(1, 2, 3)); + * // => [2, 3] + */ + function toArray(value) { + var length = value ? getLength(value) : 0; + if (!isLength(length)) { + return values(value); + } + if (!length) { + return []; + } + return arrayCopy(value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return baseCopy(value, keysIn(value)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * overwrite property assignments of previous sources. If `customizer` is + * provided it is invoked to produce the merged values of the destination and + * source properties. If `customizer` returns `undefined` merging is handled + * by the method instead. The `customizer` is bound to `thisArg` and invoked + * with five arguments: (objectValue, sourceValue, key, object, source). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + * + * // using a customizer callback + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(object, other, function(a, b) { + * if (_.isArray(a)) { + * return a.concat(b); + * } + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } + */ + var merge = createAssigner(baseMerge); + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it is invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); + }); + + /** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties, guard) { + var result = baseCreate(prototype); + if (guard && isIterateeCall(prototype, properties, guard)) { + properties = undefined; + } + return properties ? baseAssign(result, properties) : result; + } + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } + */ + var defaults = createDefaults(assign, assignDefaults); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } }); + * // => { 'user': { 'name': 'barney', 'age': 36 } } + * + */ + var defaultsDeep = createDefaults(merge, mergeDefaults); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => 'barney' (iteration order is not guaranteed) + * + * // using the `_.matches` callback shorthand + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.findKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findKey(users, 'active'); + * // => 'barney' + */ + var findKey = createFindKey(baseForOwn); + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {string|undefined} Returns the key of the matched element, else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(chr) { + * return chr.age < 40; + * }); + * // => returns `pebbles` assuming `_.findKey` returns `barney` + * + * // using the `_.matches` callback shorthand + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // using the `_.matchesProperty` callback shorthand + * _.findLastKey(users, 'active', false); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + var findLastKey = createFindKey(baseForOwnRight); + + /** + * Iterates over own and inherited enumerable properties of an object invoking + * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed) + */ + var forIn = createForIn(baseFor); + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c' + */ + var forInRight = createForIn(baseForRight); + + /** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The `iteratee` is bound to `thisArg` and invoked with + * three arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' and 'b' (iteration order is not guaranteed) + */ + var forOwn = createForOwn(baseForOwn); + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b' + */ + var forOwnRight = createForOwn(baseForOwnRight); + + /** + * Creates an array of function property names from all enumerable properties, + * own and inherited, of `object`. + * + * @static + * @memberOf _ + * @alias methods + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the new array of property names. + * @example + * + * _.functions(_); + * // => ['after', 'ary', 'assign', ...] + */ + function functions(object) { + return baseFunctions(object, keysIn(object)); + } + + /** + * Gets the property value at `path` of `object`. If the resolved value is + * `undefined` the `defaultValue` is used in its place. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, toPath(path), path + ''); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` is a direct property, else `false`. + * @example + * + * var object = { 'a': { 'b': { 'c': 3 } } }; + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b.c'); + * // => true + * + * _.has(object, ['a', 'b', 'c']); + * // => true + */ + function has(object, path) { + if (object == null) { + return false; + } + var result = hasOwnProperty.call(object, path); + if (!result && !isKey(path)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + path = last(path); + result = hasOwnProperty.call(object, path); + } + return result || (isLength(object.length) && isIndex(path, object.length) && + (isArray(object) || isArguments(object))); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite property + * assignments of previous values unless `multiValue` is `true`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to invert. + * @param {boolean} [multiValue] Allow multiple values per key. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + * + * // with `multiValue` + * _.invert(object, true); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function invert(object, multiValue, guard) { + if (guard && isIterateeCall(object, multiValue, guard)) { + multiValue = undefined; + } + var index = -1, + props = keys(object), + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index], + value = object[key]; + + if (multiValue) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + else { + result[value] = key; + } + } + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? undefined : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object != 'function' && isArrayLike(object))) { + return shimKeys(object); + } + return isObject(object) ? nativeKeys(object) : []; + }; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length; + length = (length && isLength(length) && + (isArray(object) || isArguments(object)) && length) || 0; + + var Ctor = object.constructor, + index = -1, + isProto = typeof Ctor == 'function' && Ctor.prototype === object, + result = Array(length), + skipIndexes = length > 0; + + while (++index < length) { + result[index] = (index + ''); + } + for (var key in object) { + if (!(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * property of `object` through `iteratee`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + var mapKeys = createObjectMapper(true); + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through `iteratee`. The + * iteratee function is bound to `thisArg` and invoked with three arguments: + * (value, key, object). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the new mapped object. + * @example + * + * _.mapValues({ 'a': 1, 'b': 2 }, function(n) { + * return n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * // using the `_.property` callback shorthand + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + var mapValues = createObjectMapper(); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to omit, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.omit(object, 'age'); + * // => { 'user': 'fred' } + * + * _.omit(object, _.isNumber); + * // => { 'user': 'fred' } + */ + var omit = restParam(function(object, props) { + if (object == null) { + return {}; + } + if (typeof props[0] != 'function') { + var props = arrayMap(baseFlatten(props), String); + return pickByArray(object, baseDifference(keysIn(object), props)); + } + var predicate = bindCallback(props[0], props[1], 3); + return pickByCallback(object, function(value, key, object) { + return !predicate(value, key, object); + }); + }); + + /** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ + function pairs(object) { + object = toObject(object); + + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; + } + + /** + * Creates an object composed of the picked `object` properties. Property + * names may be specified as individual arguments or as arrays of property + * names. If `predicate` is provided it is invoked for each property of `object` + * picking the properties `predicate` returns truthy for. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.pick(object, 'user'); + * // => { 'user': 'fred' } + * + * _.pick(object, _.isString); + * // => { 'user': 'fred' } + */ + var pick = restParam(function(object, props) { + if (object == null) { + return {}; + } + return typeof props[0] == 'function' + ? pickByCallback(object, bindCallback(props[0], props[1], 3)) + : pickByArray(object, baseFlatten(props)); + }); + + /** + * This method is like `_.get` except that if the resolved value is a function + * it is invoked with the `this` binding of its parent object and its result + * is returned. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned if the resolved value is `undefined`. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a.b.c', 'default'); + * // => 'default' + * + * _.result(object, 'a.b.c', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var result = object == null ? undefined : object[path]; + if (result === undefined) { + if (object != null && !isKey(path, object)) { + path = toPath(path); + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + result = object == null ? undefined : object[last(path)]; + } + result = result === undefined ? defaultValue : result; + } + return isFunction(result) ? result.call(object) : result; + } + + /** + * Sets the property value of `path` on `object`. If a portion of `path` + * does not exist it is created. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to augment. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, 'x[0].y.z', 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + if (object == null) { + return object; + } + var pathKey = (path + ''); + path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = path[index]; + if (isObject(nested)) { + if (index == lastIndex) { + nested[key] = value; + } else if (nested[key] == null) { + nested[key] = isIndex(path[index + 1]) ? [] : {}; + } + } + nested = nested[key]; + } + return object; + } + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own enumerable + * properties through `iteratee`, with each invocation potentially mutating + * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked + * with four arguments: (accumulator, value, key, object). Iteratee functions + * may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Array|Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * }); + * // => { 'a': 3, 'b': 6 } + */ + function transform(object, iteratee, accumulator, thisArg) { + var isArr = isArray(object) || isTypedArray(object); + iteratee = getCallback(iteratee, thisArg, 4); + + if (accumulator == null) { + if (isArr || isObject(object)) { + var Ctor = object.constructor; + if (isArr) { + accumulator = isArray(object) ? new Ctor : []; + } else { + accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined); + } + } else { + accumulator = {}; + } + } + (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable property values + * of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `n` is between `start` and up to but not including, `end`. If + * `end` is not specified it is set to `start` with `start` then set to `0`. + * + * @static + * @memberOf _ + * @category Number + * @param {number} n The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `n` is in the range, else `false`. + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + */ + function inRange(value, start, end) { + start = +start || 0; + if (end === undefined) { + end = start; + start = 0; + } else { + end = +end || 0; + } + return value >= nativeMin(start, end) && value < nativeMax(start, end); + } + + /** + * Produces a random number between `min` and `max` (inclusive). If only one + * argument is provided a number between `0` and the given number is returned. + * If `floating` is `true`, or either `min` or `max` are floats, a floating-point + * number is returned instead of an integer. + * + * @static + * @memberOf _ + * @category Number + * @param {number} [min=0] The minimum possible value. + * @param {number} [max=1] The maximum possible value. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(min, max, floating) { + if (floating && isIterateeCall(min, max, floating)) { + max = floating = undefined; + } + var noMin = min == null, + noMax = max == null; + + if (floating == null) { + if (noMax && typeof min == 'boolean') { + floating = min; + min = 1; + } + else if (typeof max == 'boolean') { + floating = max; + noMax = true; + } + } + if (noMin && noMax) { + max = 1; + noMax = false; + } + min = +min || 0; + if (noMax) { + max = min; + min = 0; + } else { + max = +max || 0; + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom(); + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max); + } + return baseRandom(min, max); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar'); + * // => 'fooBar' + * + * _.camelCase('__foo_bar__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word); + }); + + /** + * Capitalizes the first character of `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('fred'); + * // => 'Fred' + */ + function capitalize(string) { + string = baseToString(string); + return string && (string.charAt(0).toUpperCase() + string.slice(1)); + } + + /** + * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = baseToString(string); + return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search from. + * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = baseToString(string); + target = (target + ''); + + var length = string.length; + position = position === undefined + ? length + : nativeMin(position < 0 ? 0 : (+position || 0), length); + + position -= target.length; + return position >= 0 && string.indexOf(target, position) == position; + } + + /** + * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to + * their corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional characters + * use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. + * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * Backticks are escaped because in Internet Explorer < 9, they can break out + * of attribute values or HTML comments. See [#59](https://html5sec.org/#59), + * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and + * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/) + * for more details. + * + * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping) + * to reduce XSS vectors. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + // Reset `lastIndex` because in IE < 9 `String#replace` does not. + string = baseToString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", + * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' + */ + function escapeRegExp(string) { + string = baseToString(string); + return (string && reHasRegExpChars.test(string)) + ? string.replace(reRegExpChars, escapeRegExpChar) + : (string || '(?:)'); + } + + /** + * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__foo_bar__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = baseToString(string); + length = +length; + + var strLength = string.length; + if (strLength >= length || !nativeIsFinite(length)) { + return string; + } + var mid = (length - strLength) / 2, + leftLength = nativeFloor(mid), + rightLength = nativeCeil(mid); + + chars = createPadding('', rightLength, chars); + return chars.slice(0, leftLength) + string + chars; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padLeft('abc', 6); + * // => ' abc' + * + * _.padLeft('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padLeft('abc', 3); + * // => 'abc' + */ + var padLeft = createPadDir(); + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padRight('abc', 6); + * // => 'abc ' + * + * _.padRight('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padRight('abc', 3); + * // => 'abc' + */ + var padRight = createPadDir(true); + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal, + * in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E) + * of `parseInt`. + * + * @static + * @memberOf _ + * @category String + * @param {string} string The string to convert. + * @param {number} [radix] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`. + // Chrome fails to trim leading whitespace characters. + // See https://code.google.com/p/v8/issues/detail?id=3109 for more details. + if (guard ? isIterateeCall(string, radix, guard) : radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + string = trim(string); + return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10)); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=0] The number of times to repeat the string. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n) { + var result = ''; + string = baseToString(string); + n = +n; + if (n < 1 || !string || !nativeIsFinite(n)) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + string += string; + } while (n); + + return result; + } + + /** + * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--foo-bar'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__foo_bar__'); + * // => 'Foo Bar' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1)); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to search. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = baseToString(string); + position = position == null + ? 0 + : nativeMin(position < 0 ? 0 : (+position || 0), string.length); + + return string.lastIndexOf(target, position) == position; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is provided it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [otherOptions] Enables the legacy `options` param signature. + * @returns {Function} Returns the compiled template function. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // using the HTML "escape" delimiter to escape data property values + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + + +
    + + + +``` + + + +## License + +Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License) + diff --git a/node_modules/marked/bin/marked b/node_modules/marked/bin/marked new file mode 100755 index 000000000..df4dcc0f7 --- /dev/null +++ b/node_modules/marked/bin/marked @@ -0,0 +1,191 @@ +#!/usr/bin/env node + +/** + * Marked CLI + * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License) + */ + +var fs = require('fs') + , util = require('util') + , marked = require('../'); + +/** + * Man Page + */ + +function help() { + var spawn = require('child_process').spawn; + + var options = { + cwd: process.cwd(), + env: process.env, + setsid: false, + customFds: [0, 1, 2] + }; + + spawn('man', [__dirname + '/../man/marked.1'], options) + .on('error', function(err) { + fs.readFile(__dirname + '/../man/marked.1.txt', 'utf8', function(err, data) { + if (err) throw err; + console.log(data); + }); + }); +} + +/** + * Main + */ + +function main(argv, callback) { + var files = [] + , options = {} + , input + , output + , arg + , tokens + , opt; + + function getarg() { + var arg = argv.shift(); + + if (arg.indexOf('--') === 0) { + // e.g. --opt + arg = arg.split('='); + if (arg.length > 1) { + // e.g. --opt=val + argv.unshift(arg.slice(1).join('=')); + } + arg = arg[0]; + } else if (arg[0] === '-') { + if (arg.length > 2) { + // e.g. -abc + argv = arg.substring(1).split('').map(function(ch) { + return '-' + ch; + }).concat(argv); + arg = argv.shift(); + } else { + // e.g. -a + } + } else { + // e.g. foo + } + + return arg; + } + + while (argv.length) { + arg = getarg(); + switch (arg) { + case '--test': + return require('../test').main(process.argv.slice()); + case '-o': + case '--output': + output = argv.shift(); + break; + case '-i': + case '--input': + input = argv.shift(); + break; + case '-t': + case '--tokens': + tokens = true; + break; + case '-h': + case '--help': + return help(); + default: + if (arg.indexOf('--') === 0) { + opt = camelize(arg.replace(/^--(no-)?/, '')); + if (!marked.defaults.hasOwnProperty(opt)) { + continue; + } + if (arg.indexOf('--no-') === 0) { + options[opt] = typeof marked.defaults[opt] !== 'boolean' + ? null + : false; + } else { + options[opt] = typeof marked.defaults[opt] !== 'boolean' + ? argv.shift() + : true; + } + } else { + files.push(arg); + } + break; + } + } + + function getData(callback) { + if (!input) { + if (files.length <= 2) { + return getStdin(callback); + } + input = files.pop(); + } + return fs.readFile(input, 'utf8', callback); + } + + return getData(function(err, data) { + if (err) return callback(err); + + data = tokens + ? JSON.stringify(marked.lexer(data, options), null, 2) + : marked(data, options); + + if (!output) { + process.stdout.write(data + '\n'); + return callback(); + } + + return fs.writeFile(output, data, callback); + }); +} + +/** + * Helpers + */ + +function getStdin(callback) { + var stdin = process.stdin + , buff = ''; + + stdin.setEncoding('utf8'); + + stdin.on('data', function(data) { + buff += data; + }); + + stdin.on('error', function(err) { + return callback(err); + }); + + stdin.on('end', function() { + return callback(null, buff); + }); + + try { + stdin.resume(); + } catch (e) { + callback(e); + } +} + +function camelize(text) { + return text.replace(/(\w)-(\w)/g, function(_, a, b) { + return a + b.toUpperCase(); + }); +} + +/** + * Expose / Entry Point + */ + +if (!module.parent) { + process.title = 'marked'; + main(process.argv.slice(), function(err, code) { + if (err) throw err; + return process.exit(code || 0); + }); +} else { + module.exports = main; +} diff --git a/node_modules/marked/bower.json b/node_modules/marked/bower.json new file mode 100644 index 000000000..57c91f030 --- /dev/null +++ b/node_modules/marked/bower.json @@ -0,0 +1,23 @@ +{ + "name": "marked", + "homepage": "https://github.com/markedjs/marked", + "authors": [ + "Christopher Jeffrey " + ], + "description": "A markdown parser built for speed", + "keywords": [ + "markdown", + "markup", + "html" + ], + "main": "lib/marked.js", + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "app/bower_components", + "test", + "tests" + ] +} diff --git a/node_modules/marked/component.json b/node_modules/marked/component.json new file mode 100644 index 000000000..7ebd0356c --- /dev/null +++ b/node_modules/marked/component.json @@ -0,0 +1,10 @@ +{ + "name": "marked", + "version": "0.3.4", + "repo": "markedjs/marked", + "description": "A markdown parser built for speed", + "keywords": ["markdown", "markup", "html"], + "scripts": ["lib/marked.js"], + "main": "lib/marked.js", + "license": "MIT" +} diff --git a/node_modules/marked/index.js b/node_modules/marked/index.js new file mode 100644 index 000000000..a12f90569 --- /dev/null +++ b/node_modules/marked/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/marked'); diff --git a/node_modules/marked/jasmine.json b/node_modules/marked/jasmine.json new file mode 100644 index 000000000..8d1be919d --- /dev/null +++ b/node_modules/marked/jasmine.json @@ -0,0 +1,11 @@ +{ + "spec_dir": "test", + "spec_files": [ + "**/*-spec.js" + ], + "helpers": [ + "helpers/**/*.js" + ], + "stopSpecOnExpectationFailure": false, + "random": true +} diff --git a/node_modules/marked/lib/marked.js b/node_modules/marked/lib/marked.js new file mode 100644 index 000000000..5552616ea --- /dev/null +++ b/node_modules/marked/lib/marked.js @@ -0,0 +1,1388 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +;(function(root) { +'use strict'; + +/** + * Block-Level Grammar + */ + +var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, + nptable: noop, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, + def: /^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, + table: noop, + lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, + paragraph: /^([^\n]+(?:\n?(?!hr|heading|lheading| {0,3}>|tag)[^\n]+)+)/, + text: /^[^\n]+/ +}; + +block._label = /(?:\\[\[\]]|[^\[\]])+/; +block._title = /(?:"(?:\\"|[^"]|"[^"\n]*")*"|'\n?(?:[^'\n]+\n?)*'|\([^()]*\))/; +block.def = edit(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + +block.bullet = /(?:[*+-]|\d+\.)/; +block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; +block.item = edit(block.item, 'gm') + .replace(/bull/g, block.bullet) + .getRegex(); + +block.list = edit(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + +block._tag = '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' + + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' + + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b'; + +block.html = edit(block.html) + .replace('comment', //) + .replace('closed', /<(tag)[\s\S]+?<\/\1>/) + .replace('closing', /\s]*)*?\/?>/) + .replace(/tag/g, block._tag) + .getRegex(); + +block.paragraph = edit(block.paragraph) + .replace('hr', block.hr) + .replace('heading', block.heading) + .replace('lheading', block.lheading) + .replace('tag', '<' + block._tag) + .getRegex(); + +block.blockquote = edit(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); + +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/, + paragraph: /^/, + heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ +}); + +block.gfm.paragraph = edit(block.paragraph) + .replace('(?!', '(?!' + + block.gfm.fences.source.replace('\\1', '\\2') + '|' + + block.list.source.replace('\\1', '\\3') + '|') + .getRegex(); + +/** + * GFM + Tables Block Grammar + */ + +block.tables = merge({}, block.gfm, { + nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, + table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ +}); + +/** + * Block Lexer + */ + +function Lexer(options) { + this.tokens = []; + this.tokens.links = {}; + this.options = options || marked.defaults; + this.rules = block.normal; + + if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; + } else { + this.rules = block.gfm; + } + } +} + +/** + * Expose Block Rules + */ + +Lexer.rules = block; + +/** + * Static Lex Method + */ + +Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); +}; + +/** + * Preprocessing + */ + +Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' ') + .replace(/\u00a0/g, ' ') + .replace(/\u2424/g, '\n'); + + return this.token(src, true); +}; + +/** + * Lexing + */ + +Lexer.prototype.token = function(src, top) { + src = src.replace(/^ +$/gm, ''); + var next, + loose, + cap, + bull, + b, + item, + space, + i, + tag, + l, + isordered; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + text: !this.options.pedantic + ? cap.replace(/\n+$/, '') + : cap + }); + continue; + } + + // fences (gfm) + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2], + text: cap[3] || '' + }); + continue; + } + + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } + + // table no leading pipe (gfm) + if (top && (cap = this.rules.nptable.exec(src))) { + src = src.substring(cap[0].length); + + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/\n$/, '').split('\n') + }; + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i].split(/ *\| */); + } + + this.tokens.push(item); + + continue; + } + + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } + + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); + + this.tokens.push({ + type: 'blockquote_start' + }); + + cap = cap[0].replace(/^ *> ?/gm, ''); + + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top); + + this.tokens.push({ + type: 'blockquote_end' + }); + + continue; + } + + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + isordered = bull.length > 1; + + this.tokens.push({ + type: 'list_start', + ordered: isordered, + start: isordered ? +bull : '' + }); + + // Get each top-level item. + cap = cap[0].match(this.rules.item); + + next = false; + l = cap.length; + i = 0; + + for (; i < l; i++) { + item = cap[i]; + + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ''); + + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } + + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i + 1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } + + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } + + this.tokens.push({ + type: loose + ? 'loose_item_start' + : 'list_item_start' + }); + + // Recurse. + this.token(item, false); + + this.tokens.push({ + type: 'list_item_end' + }); + } + + this.tokens.push({ + type: 'list_end' + }); + + continue; + } + + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }); + continue; + } + + // def + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + tag = cap[1].toLowerCase(); + if (!this.tokens.links[tag]) { + this.tokens.links[tag] = { + href: cap[2], + title: cap[3] + }; + } + continue; + } + + // table (gfm) + if (top && (cap = this.rules.table.exec(src))) { + src = src.substring(cap[0].length); + + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') + }; + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i] + .replace(/^ *\| *| *\| *$/g, '') + .split(/ *\| */); + } + + this.tokens.push(item); + + continue; + } + + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2] === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } + + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return this.tokens; +}; + +/** + * Inline-Level Grammar + */ + +var inline = { + escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noop, + tag: /^|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/\s]*)*?\/?>/, + link: /^!?\[(inside)\]\(href\)/, + reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, + nolink: /^!?\[((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\]/, + strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, + em: /^_([^\s_](?:[^_]|__)+?[^\s_])_\b|^\*((?:\*\*|[^*])+?)\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/, + br: /^ {2,}\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; + +inline.link = edit(inline.link) + .replace('inside', inline._inside) + .replace('href', inline._href) + .getRegex(); + +inline.reflink = edit(inline.reflink) + .replace('inside', inline._inside) + .getRegex(); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/) + .replace('email', inline._email) + .getRegex(), + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^~~(?=\S)([\s\S]*?\S)~~/, + text: edit(inline.text) + .replace(']|', '~]|') + .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|') + .getRegex() +}); + +/** + * GFM + Line Breaks Inline Grammar + */ + +inline.breaks = merge({}, inline.gfm, { + br: edit(inline.br).replace('{2,}', '*').getRegex(), + text: edit(inline.gfm.text).replace('{2,}', '*').getRegex() +}); + +/** + * Inline Lexer & Compiler + */ + +function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; + this.renderer = this.options.renderer || new Renderer(); + this.renderer.options = this.options; + + if (!this.links) { + throw new Error('Tokens array requires a `links` property.'); + } + + if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } else if (this.options.pedantic) { + this.rules = inline.pedantic; + } +} + +/** + * Expose Inline Rules + */ + +InlineLexer.rules = inline; + +/** + * Static Lexing/Compiling Method + */ + +InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); +}; + +/** + * Lexing/Compiling + */ + +InlineLexer.prototype.output = function(src) { + var out = '', + link, + text, + href, + cap; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } + + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(this.mangle(cap[1])); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } + + // url (gfm) + if (!this.inLink && (cap = this.rules.url.exec(src))) { + cap[0] = this.rules._backpedal.exec(cap[0])[0]; + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(cap[0]); + href = 'mailto:' + text; + } else { + text = escape(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + out += this.renderer.link(href, null, text); + continue; + } + + // tag + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^/i.test(cap[0])) { + this.inLink = false; + } + src = src.substring(cap[0].length); + out += this.options.sanitize + ? this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0]) + : cap[0] + continue; + } + + // link + if (cap = this.rules.link.exec(src)) { + src = src.substring(cap[0].length); + this.inLink = true; + out += this.outputLink(cap, { + href: cap[2], + title: cap[3] + }); + this.inLink = false; + continue; + } + + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[2] || cap[1])); + continue; + } + + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[2] || cap[1])); + continue; + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape(cap[2].trim(), true)); + continue; + } + + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.text(escape(this.smartypants(cap[0]))); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return out; +}; + +/** + * Compile Link + */ + +InlineLexer.prototype.outputLink = function(cap, link) { + var href = escape(link.href), + title = link.title ? escape(link.title) : null; + + return cap[0].charAt(0) !== '!' + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape(cap[1])); +}; + +/** + * Smartypants Transformations + */ + +InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); +}; + +/** + * Mangle Links + */ + +InlineLexer.prototype.mangle = function(text) { + if (!this.options.mangle) return text; + var out = '', + l = text.length, + i = 0, + ch; + + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; +}; + +/** + * Renderer + */ + +function Renderer(options) { + this.options = options || {}; +} + +Renderer.prototype.code = function(code, lang, escaped) { + if (this.options.highlight) { + var out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + if (!lang) { + return '
    '
    +      + (escaped ? code : escape(code, true))
    +      + '\n
    '; + } + + return '
    '
    +    + (escaped ? code : escape(code, true))
    +    + '\n
    \n'; +}; + +Renderer.prototype.blockquote = function(quote) { + return '
    \n' + quote + '
    \n'; +}; + +Renderer.prototype.html = function(html) { + return html; +}; + +Renderer.prototype.heading = function(text, level, raw) { + return '' + + text + + '\n'; +}; + +Renderer.prototype.hr = function() { + return this.options.xhtml ? '
    \n' : '
    \n'; +}; + +Renderer.prototype.list = function(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '\n'; +}; + +Renderer.prototype.listitem = function(text) { + return '
  • ' + text + '
  • \n'; +}; + +Renderer.prototype.paragraph = function(text) { + return '

    ' + text + '

    \n'; +}; + +Renderer.prototype.table = function(header, body) { + return '\n' + + '\n' + + header + + '\n' + + '\n' + + body + + '\n' + + '
    \n'; +}; + +Renderer.prototype.tablerow = function(content) { + return '\n' + content + '\n'; +}; + +Renderer.prototype.tablecell = function(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align + ? '<' + type + ' style="text-align:' + flags.align + '">' + : '<' + type + '>'; + return tag + content + '\n'; +}; + +// span level renderer +Renderer.prototype.strong = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.em = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.codespan = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.br = function() { + return this.options.xhtml ? '
    ' : '
    '; +}; + +Renderer.prototype.del = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.link = function(href, title, text) { + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, '') + .toLowerCase(); + } catch (e) { + return text; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return text; + } + } + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + var out = '
    '; + return out; +}; + +Renderer.prototype.image = function(href, title, text) { + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + var out = '' + text + '' : '>'; + return out; +}; + +Renderer.prototype.text = function(text) { + return text; +}; + +/** + * TextRenderer + * returns only the textual part of the token + */ + +function TextRenderer() {} + +// no need for block level renderers + +TextRenderer.prototype.strong = +TextRenderer.prototype.em = +TextRenderer.prototype.codespan = +TextRenderer.prototype.del = +TextRenderer.prototype.text = function (text) { + return text; +} + +TextRenderer.prototype.link = +TextRenderer.prototype.image = function(href, title, text) { + return '' + text; +} + +TextRenderer.prototype.br = function() { + return ''; +} + +/** + * Parsing & Compiling + */ + +function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; +} + +/** + * Static Parse Method + */ + +Parser.parse = function(src, options) { + var parser = new Parser(options); + return parser.parse(src); +}; + +/** + * Parse Loop + */ + +Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options); + // use an InlineLexer with a TextRenderer to extract pure text + this.inlineText = new InlineLexer( + src.links, + merge({}, this.options, {renderer: new TextRenderer()}) + ); + this.tokens = src.reverse(); + + var out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; +}; + +/** + * Next Token + */ + +Parser.prototype.next = function() { + return this.token = this.tokens.pop(); +}; + +/** + * Preview Next Token + */ + +Parser.prototype.peek = function() { + return this.tokens[this.tokens.length - 1] || 0; +}; + +/** + * Parse Text Tokens + */ + +Parser.prototype.parseText = function() { + var body = this.token.text; + + while (this.peek().type === 'text') { + body += '\n' + this.next().text; + } + + return this.inline.output(body); +}; + +/** + * Parse Current Token + */ + +Parser.prototype.tok = function() { + switch (this.token.type) { + case 'space': { + return ''; + } + case 'hr': { + return this.renderer.hr(); + } + case 'heading': { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + unescape(this.inlineText.output(this.token.text))); + } + case 'code': { + return this.renderer.code(this.token.text, + this.token.lang, + this.token.escaped); + } + case 'table': { + var header = '', + body = '', + i, + row, + cell, + j; + + // header + cell = ''; + for (i = 0; i < this.token.header.length; i++) { + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + + cell = ''; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell( + this.inline.output(row[j]), + { header: false, align: this.token.align[j] } + ); + } + + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case 'blockquote_start': { + body = ''; + + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + case 'list_start': { + body = ''; + var ordered = this.token.ordered, + start = this.token.start; + + while (this.next().type !== 'list_end') { + body += this.tok(); + } + + return this.renderer.list(body, ordered, start); + } + case 'list_item_start': { + body = ''; + + while (this.next().type !== 'list_item_end') { + body += this.token.type === 'text' + ? this.parseText() + : this.tok(); + } + + return this.renderer.listitem(body); + } + case 'loose_item_start': { + body = ''; + + while (this.next().type !== 'list_item_end') { + body += this.tok(); + } + + return this.renderer.listitem(body); + } + case 'html': { + var html = !this.token.pre && !this.options.pedantic + ? this.inline.output(this.token.text) + : this.token.text; + return this.renderer.html(html); + } + case 'paragraph': { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case 'text': { + return this.renderer.paragraph(this.parseText()); + } + } +}; + +/** + * Helpers + */ + +function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +function edit(regex, opt) { + regex = regex.source; + opt = opt || ''; + return { + replace: function(name, val) { + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, '$1'); + regex = regex.replace(name, val); + return this; + }, + getRegex: function() { + return new RegExp(regex, opt); + } + }; +} + +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (/^[^:]+:\/*[^/]*$/.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = base.replace(/[^/]*$/, ''); + } + } + base = baseUrls[' ' + base]; + + if (href.slice(0, 2) === '//') { + return base.replace(/:[\s\S]*/, ':') + href; + } else if (href.charAt(0) === '/') { + return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href; + } else { + return base + href; + } +} +var baseUrls = {}; +var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + +function noop() {} +noop.exec = noop; + +function merge(obj) { + var i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + +/** + * Marked + */ + +function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + + var highlight = opt.highlight, + tokens, + pending, + i = 0; + + try { + tokens = Lexer.lex(src, opt) + } catch (e) { + return callback(e); + } + + pending = tokens.length; + + var done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + + var out; + + try { + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!pending) return done(); + + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== 'code') { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if ((opt || marked.defaults).silent) { + return '

    An error occurred:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; +}; + +marked.defaults = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + sanitizer: null, + mangle: true, + smartLists: false, + silent: false, + highlight: null, + langPrefix: 'lang-', + smartypants: false, + headerPrefix: '', + renderer: new Renderer(), + xhtml: false, + baseUrl: null +}; + +/** + * Expose + */ + +marked.Parser = Parser; +marked.parser = Parser.parse; + +marked.Renderer = Renderer; +marked.TextRenderer = TextRenderer; + +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; + +marked.InlineLexer = InlineLexer; +marked.inlineLexer = InlineLexer.output; + +marked.parse = marked; + +if (typeof module !== 'undefined' && typeof exports === 'object') { + module.exports = marked; +} else if (typeof define === 'function' && define.amd) { + define(function() { return marked; }); +} else { + root.marked = marked; +} +})(this || (typeof window !== 'undefined' ? window : global)); diff --git a/node_modules/marked/man/marked.1 b/node_modules/marked/man/marked.1 new file mode 100644 index 000000000..137e060a0 --- /dev/null +++ b/node_modules/marked/man/marked.1 @@ -0,0 +1,91 @@ +.ds q \N'34' +.TH marked 1 "2014-01-31" "v0.3.1" "marked.js" + +.SH NAME +marked \- a javascript markdown parser + +.SH SYNOPSIS +.B marked +[\-o \fI\fP] [\-i \fI\fP] [\-\-help] +[\-\-tokens] [\-\-pedantic] [\-\-gfm] +[\-\-breaks] [\-\-tables] [\-\-sanitize] +[\-\-smart\-lists] [\-\-lang\-prefix \fI\fP] +[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP] + +.SH DESCRIPTION +.B marked +is a full-featured javascript markdown parser, built for speed. It also includes +multiple GFM features. + +.SH EXAMPLES +.TP +cat in.md | marked > out.html +.TP +echo "hello *world*" | marked +.TP +marked \-o out.html in.md \-\-gfm +.TP +marked \-\-output="hello world.html" \-i in.md \-\-no-breaks + +.SH OPTIONS +.TP +.BI \-o,\ \-\-output\ [\fIoutput\fP] +Specify file output. If none is specified, write to stdout. +.TP +.BI \-i,\ \-\-input\ [\fIinput\fP] +Specify file input, otherwise use last argument as input file. If no input file +is specified, read from stdin. +.TP +.BI \-t,\ \-\-tokens +Output a token stream instead of html. +.TP +.BI \-\-pedantic +Conform to obscure parts of markdown.pl as much as possible. Don't fix original +markdown bugs. +.TP +.BI \-\-gfm +Enable github flavored markdown. +.TP +.BI \-\-breaks +Enable GFM line breaks. Only works with the gfm option. +.TP +.BI \-\-tables +Enable GFM tables. Only works with the gfm option. +.TP +.BI \-\-sanitize +Sanitize output. Ignore any HTML input. +.TP +.BI \-\-smart\-lists +Use smarter list behavior than the original markdown. +.TP +.BI \-\-lang\-prefix\ [\fIprefix\fP] +Set the prefix for code block classes. +.TP +.BI \-\-mangle +Mangle email addresses. +.TP +.BI \-\-no\-sanitize,\ \-no-etc... +The inverse of any of the marked options above. +.TP +.BI \-\-silent +Silence error output. +.TP +.BI \-h,\ \-\-help +Display help information. + +.SH CONFIGURATION +For configuring and running programmatically. + +.B Example + + require('marked')('*foo*', { gfm: true }); + +.SH BUGS +Please report any bugs to https://github.com/markedjs/marked. + +.SH LICENSE +Copyright (c) 2011-2014, Christopher Jeffrey (MIT License). + +.SH "SEE ALSO" +.BR markdown(1), +.BR node.js(1) diff --git a/node_modules/marked/man/marked.1.txt b/node_modules/marked/man/marked.1.txt new file mode 100644 index 000000000..7f6041927 --- /dev/null +++ b/node_modules/marked/man/marked.1.txt @@ -0,0 +1,96 @@ +marked(1) marked.js marked(1) + + + +NAME + marked - a javascript markdown parser + + +SYNOPSIS + marked [-o ] [-i ] [--help] [--tokens] [--pedantic] + [--gfm] [--breaks] [--tables] [--sanitize] [--smart-lists] [--lang-pre‐ + fix ] [--no-etc...] [--silent] [filename] + + +DESCRIPTION + marked is a full-featured javascript markdown parser, built for speed. + It also includes multiple GFM features. + + +EXAMPLES + cat in.md | marked > out.html + + echo "hello *world*" | marked + + marked -o out.html in.md --gfm + + marked --output="hello world.html" -i in.md --no-breaks + + +OPTIONS + -o, --output [output] + Specify file output. If none is specified, write to stdout. + + -i, --input [input] + Specify file input, otherwise use last argument as input file. + If no input file is specified, read from stdin. + + -t, --tokens + Output a token stream instead of html. + + --pedantic + Conform to obscure parts of markdown.pl as much as possible. + Don't fix original markdown bugs. + + --gfm Enable github flavored markdown. + + --breaks + Enable GFM line breaks. Only works with the gfm option. + + --tables + Enable GFM tables. Only works with the gfm option. + + --sanitize + Sanitize output. Ignore any HTML input. + + --smart-lists + Use smarter list behavior than the original markdown. + + --lang-prefix [prefix] + Set the prefix for code block classes. + + --mangle + Mangle email addresses. + + --no-sanitize, -no-etc... + The inverse of any of the marked options above. + + --silent + Silence error output. + + -h, --help + Display help information. + + +CONFIGURATION + For configuring and running programmatically. + + Example + + require('marked')('*foo*', { gfm: true }); + + +BUGS + Please report any bugs to https://github.com/chjj/marked. + + +LICENSE + Copyright (c) 2011-2014, Christopher Jeffrey (MIT License). + + +SEE ALSO + markdown(1), node.js(1) + + + +v0.3.1 2014-01-31 marked(1) diff --git a/node_modules/marked/marked.min.js b/node_modules/marked/marked.min.js new file mode 100644 index 000000000..129871ad7 --- /dev/null +++ b/node_modules/marked/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ +!function(e){"use strict";var t={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:f,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:f,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:f,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n?(?!hr|heading|lheading| {0,3}>|tag)[^\n]+)+)/,text:/^[^\n]+/};function n(e){this.tokens=[],this.tokens.links={},this.options=e||k.defaults,this.rules=t.normal,this.options.gfm&&(this.options.tables?this.rules=t.tables:this.rules=t.gfm)}t._label=/(?:\\[\[\]]|[^\[\]])+/,t._title=/(?:"(?:\\"|[^"]|"[^"\n]*")*"|'\n?(?:[^'\n]+\n?)*'|\([^()]*\))/,t.def=p(t.def).replace("label",t._label).replace("title",t._title).getRegex(),t.bullet=/(?:[*+-]|\d+\.)/,t.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,t.item=p(t.item,"gm").replace(/bull/g,t.bullet).getRegex(),t.list=p(t.list).replace(/bull/g,t.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+t.def.source+")").getRegex(),t._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b",t.html=p(t.html).replace("comment",//).replace("closed",/<(tag)[\s\S]+?<\/\1>/).replace("closing",/\s]*)*?\/?>/).replace(/tag/g,t._tag).getRegex(),t.paragraph=p(t.paragraph).replace("hr",t.hr).replace("heading",t.heading).replace("lheading",t.lheading).replace("tag","<"+t._tag).getRegex(),t.blockquote=p(t.blockquote).replace("paragraph",t.paragraph).getRegex(),t.normal=d({},t),t.gfm=d({},t.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),t.gfm.paragraph=p(t.paragraph).replace("(?!","(?!"+t.gfm.fences.source.replace("\\1","\\2")+"|"+t.list.source.replace("\\1","\\3")+"|").getRegex(),t.tables=d({},t.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),n.rules=t,n.lex=function(e,t){return new n(t).lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,n){var r,s,i,l,o,a,h,p,u,c,g;for(e=e.replace(/^ +$/gm,"");e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:i.replace(/\n+$/,"")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(n&&(i=this.rules.nptable.exec(e))){for(e=e.substring(i[0].length),a={type:"table",header:i[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3].replace(/\n$/,"").split("\n")},p=0;p ?/gm,""),this.token(i,n),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),g=(l=i[2]).length>1,this.tokens.push({type:"list_start",ordered:g,start:g?+l:""}),r=!1,c=(i=i[0].match(this.rules.item)).length,p=0;p1&&o.length>1||(e=i.slice(p+1).join("\n")+e,p=c-1)),s=r||/\n\n(?!\s*$)/.test(a),p!==c-1&&(r="\n"===a.charAt(a.length-1),s||(s=r)),this.tokens.push({type:s?"loose_item_start":"list_item_start"}),this.token(a,!1),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(n&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),u=i[1].toLowerCase(),this.tokens.links[u]||(this.tokens.links[u]={href:i[2],title:i[3]});else if(n&&(i=this.rules.table.exec(e))){for(e=e.substring(i[0].length),a={type:"table",header:i[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3].replace(/(?: *\| *)?\n$/,"").split("\n")},p=0;p])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:f,tag:/^|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/\s]*)*?\/?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^_([^\s_](?:[^_]|__)+?[^\s_])_\b|^\*((?:\*\*|[^*])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:f,text:/^[\s\S]+?(?=[\\/g,">").replace(/"/g,""").replace(/'/g,"'")}function h(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function p(e,t){return e=e.source,t=t||"",{replace:function(t,n){return n=(n=n.source||n).replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function u(e,t){return c[" "+e]||(/^[^:]+:\/*[^/]*$/.test(e)?c[" "+e]=e+"/":c[" "+e]=e.replace(/[^/]*$/,"")),e=c[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^/]*)[\s\S]*/,"$1")+t:e+t}r._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,r._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,r.autolink=p(r.autolink).replace("scheme",r._scheme).replace("email",r._email).getRegex(),r._inside=/(?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]]|\](?=[^\[]*\]))*/,r._href=/\s*?(?:\s+['"]([\s\S]*?)['"])?\s*/,r.link=p(r.link).replace("inside",r._inside).replace("href",r._href).getRegex(),r.reflink=p(r.reflink).replace("inside",r._inside).getRegex(),r.normal=d({},r),r.pedantic=d({},r.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),r.gfm=d({},r.normal,{escape:p(r.escape).replace("])","~|])").getRegex(),url:p(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("email",r._email).getRegex(),_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:p(r.text).replace("]|","~]|").replace("|","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|").getRegex()}),r.breaks=d({},r.gfm,{br:p(r.br).replace("{2,}","*").getRegex(),text:p(r.gfm.text).replace("{2,}","*").getRegex()}),s.rules=r,s.output=function(e,t,n){return new s(t,n).output(e)},s.prototype.output=function(e){for(var t,n,r,s,i="";e;)if(s=this.rules.escape.exec(e))e=e.substring(s[0].length),i+=s[1];else if(s=this.rules.autolink.exec(e))e=e.substring(s[0].length),r="@"===s[2]?"mailto:"+(n=a(this.mangle(s[1]))):n=a(s[1]),i+=this.renderer.link(r,null,n);else if(this.inLink||!(s=this.rules.url.exec(e))){if(s=this.rules.tag.exec(e))!this.inLink&&/^
    /i.test(s[0])&&(this.inLink=!1),e=e.substring(s[0].length),i+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):a(s[0]):s[0];else if(s=this.rules.link.exec(e))e=e.substring(s[0].length),this.inLink=!0,i+=this.outputLink(s,{href:s[2],title:s[3]}),this.inLink=!1;else if((s=this.rules.reflink.exec(e))||(s=this.rules.nolink.exec(e))){if(e=e.substring(s[0].length),t=(s[2]||s[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){i+=s[0].charAt(0),e=s[0].substring(1)+e;continue}this.inLink=!0,i+=this.outputLink(s,t),this.inLink=!1}else if(s=this.rules.strong.exec(e))e=e.substring(s[0].length),i+=this.renderer.strong(this.output(s[2]||s[1]));else if(s=this.rules.em.exec(e))e=e.substring(s[0].length),i+=this.renderer.em(this.output(s[2]||s[1]));else if(s=this.rules.code.exec(e))e=e.substring(s[0].length),i+=this.renderer.codespan(a(s[2].trim(),!0));else if(s=this.rules.br.exec(e))e=e.substring(s[0].length),i+=this.renderer.br();else if(s=this.rules.del.exec(e))e=e.substring(s[0].length),i+=this.renderer.del(this.output(s[1]));else if(s=this.rules.text.exec(e))e=e.substring(s[0].length),i+=this.renderer.text(a(this.smartypants(s[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else s[0]=this.rules._backpedal.exec(s[0])[0],e=e.substring(s[0].length),"@"===s[2]?r="mailto:"+(n=a(s[0])):(n=a(s[0]),r="www."===s[1]?"http://"+n:n),i+=this.renderer.link(r,null,n);return i},s.prototype.outputLink=function(e,t){var n=a(t.href),r=t.title?a(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,a(e[1]))},s.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},s.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,s=0;s.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'
    '+(n?e:a(e,!0))+"\n
    \n":"
    "+(n?e:a(e,!0))+"\n
    "},i.prototype.blockquote=function(e){return"
    \n"+e+"
    \n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n){return"'+e+"\n"},i.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},i.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},i.prototype.paragraph=function(e){return"

    "+e+"

    \n"},i.prototype.table=function(e,t){return"\n\n"+e+"\n\n"+t+"\n
    \n"},i.prototype.tablerow=function(e){return"\n"+e+"\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">")+e+"\n"},i.prototype.strong=function(e){return""+e+""},i.prototype.em=function(e){return""+e+""},i.prototype.codespan=function(e){return""+e+""},i.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},i.prototype.del=function(e){return""+e+""},i.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(h(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return n}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return n}this.options.baseUrl&&!g.test(e)&&(e=u(this.options.baseUrl,e));var s='
    "},i.prototype.image=function(e,t,n){this.options.baseUrl&&!g.test(e)&&(e=u(this.options.baseUrl,e));var r=''+n+'":">"},i.prototype.text=function(e){return e},l.prototype.strong=l.prototype.em=l.prototype.codespan=l.prototype.del=l.prototype.text=function(e){return e},l.prototype.link=l.prototype.image=function(e,t,n){return""+n},l.prototype.br=function(){return""},o.parse=function(e,t){return new o(t).parse(e)},o.prototype.parse=function(e){this.inline=new s(e.links,this.options),this.inlineText=new s(e.links,d({},this.options,{renderer:new l})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},o.prototype.next=function(){return this.token=this.tokens.pop()},o.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},o.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},o.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,h(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s="",i="";for(n="",e=0;eAn error occurred:

    "+a(e.message+"",!0)+"
    ";throw e}}f.exec=f,k.options=k.setOptions=function(e){return d(k.defaults,e),k},k.defaults={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,sanitizer:null,mangle:!0,smartLists:!1,silent:!1,highlight:null,langPrefix:"lang-",smartypants:!1,headerPrefix:"",renderer:new i,xhtml:!1,baseUrl:null},k.Parser=o,k.parser=o.parse,k.Renderer=i,k.TextRenderer=l,k.Lexer=n,k.lexer=n.lex,k.InlineLexer=s,k.inlineLexer=s.output,k.parse=k,"undefined"!=typeof module&&"object"==typeof exports?module.exports=k:"function"==typeof define&&define.amd?define(function(){return k}):e.marked=k}(this||("undefined"!=typeof window?window:global)); \ No newline at end of file diff --git a/node_modules/marked/package.json b/node_modules/marked/package.json new file mode 100644 index 000000000..cc7c85dd9 --- /dev/null +++ b/node_modules/marked/package.json @@ -0,0 +1,55 @@ +{ + "name": "marked", + "description": "A markdown parser built for speed", + "author": "Christopher Jeffrey", + "version": "0.3.19", + "main": "./lib/marked.js", + "bin": "./bin/marked", + "man": "./man/marked.1", + "repository": "git://github.com/markedjs/marked.git", + "homepage": "https://marked.js.org", + "bugs": { + "url": "http://github.com/markedjs/marked/issues" + }, + "license": "MIT", + "keywords": [ + "markdown", + "markup", + "html" + ], + "tags": [ + "markdown", + "markup", + "html" + ], + "devDependencies": { + "eslint": "^4.15.0", + "eslint-config-standard": "^11.0.0-beta.0", + "eslint-plugin-import": "^2.8.0", + "eslint-plugin-node": "^5.2.1", + "eslint-plugin-promise": "^3.6.0", + "eslint-plugin-standard": "^3.0.1", + "front-matter": "^2.3.0", + "glob-to-regexp": "0.3.0", + "jasmine": "^3.1.0", + "markdown": "*", + "markdown-it": "*", + "showdown": "*", + "uglify-js": "^3.3.10" + }, + "scripts": { + "test": "jasmine --config=jasmine.json", + "test:unit": "npm test -- test/unit/**/*-spec.js", + "test:specs": "npm test -- test/specs/**/*-spec.js", + "test:integration": "npm test -- test/integration/**/*-spec.js", + "test:old": "node test", + "test:lint": "eslint lib/marked.js test/index.js", + "bench": "node test --bench", + "lint": "eslint --fix lib/marked.js test/index.js", + "build": "uglifyjs lib/marked.js -cm --comments /Copyright/ -o marked.min.js", + "preversion": "npm run build && (git diff --quiet || git commit -am 'minify')" + }, + "engines": { + "node": ">=0.10.0" + } +} diff --git a/node_modules/marked/www/demo.css b/node_modules/marked/www/demo.css new file mode 100644 index 000000000..fed6e03fd --- /dev/null +++ b/node_modules/marked/www/demo.css @@ -0,0 +1,153 @@ +html, body { + margin: 0; + padding: 0; + font-family: Helvetica, Arial, Verdana, sans-serif; + background-color: #DDF; + height: 100%; +} + +textarea { + font-family: monospace; +} + +#header { + margin: 0; + padding: 0.4em 0 0 0; + text-align: center; + color: #002; +} + +#header h1 { + font-size: 2em; +} + +#header * { + margin: 0; + padding: 0; + line-height: 1em; + font-weight: 100; +} + +#header a { + color: #005; + position: relative; + z-index: 20; +} + +#bothContainers { + position: absolute; + top: 0; + bottom: 0; + margin-top: 2.4em; + width: 100%; +} + +#leftContainer, #rightContainer { + margin: 0; + padding: 0; + position: absolute; + width: 48.5%; + top: 0; + bottom: 0; +} + +#leftContainer { + float: left; + left: 1%; +} + +#rightContainer { + float: right; + right: 1%; +} + +#rightContainer > * { + float: right; +} + +.label { + margin: 0; + padding: 0; + position: relative; + width: 100%; + display: block; +} + +.label * { + position: relative; + font-weight: 900; +} + +.label span { + color: #444; +} + +#outputType { + display: block; + margin-left: auto; + font-weight: 900; + font-family: Arial, Verdana, sans-serif; + background-color: #dacccc; + color: #444; + border: 1px solid #999; +} + +.pane { + margin: 1.6em 0em 0.2em; + padding: 0.6em; + background-color: #eee; + display: block; + border: 1px solid #000; + top: 0; + bottom: 0; + left: 0; + right: 0; + position: absolute; + overflow: auto; +} + +#previewPane { + background-color: #f3eeee; +} + +#outputPane { + background-color: #6c6666; + color: #fff; + display: none; +} + +#syntaxPane { + background-color: #e6dede; + background-color: #f7ecec; + display: none; +} + +#inputPane { + background-color: #fff; +} + +#previewPane { + padding: 0; +} + +#previewPane > * { + margin-left: 4px; + margin-right: 4px; +} + +#previewPane > blockquote { + margin-left: 3em; +} + +#previewPane > :first-child { + margin-top: 4px; /* pane padding */ +} + +#previewPane * { + line-height: 1.4em; +} + +#previewPane code { + font-size: 1.3em; +} + diff --git a/node_modules/marked/www/demo.html b/node_modules/marked/www/demo.html new file mode 100644 index 000000000..4181e0777 --- /dev/null +++ b/node_modules/marked/www/demo.html @@ -0,0 +1,244 @@ + + + Marked Demo Page + + + + + + +
    + +
    +
    +
    + Input +
    + +
    + +
    +
    + +
    + +
    + + + + + +
    +
    + + diff --git a/node_modules/marked/www/demo.js b/node_modules/marked/www/demo.js new file mode 100644 index 000000000..36668a4d7 --- /dev/null +++ b/node_modules/marked/www/demo.js @@ -0,0 +1,105 @@ +$(function () { + var $inputElem = $('#input'); + var $outputTypeElem = $('#outputType'); + var $previewElem = $('#preview'); + var $htmlElem = $('#html'); + var $lexerElem = $('#lexer'); + var $syntaxElem = $('#syntax'); + var inputDirty = true; + var $activeElem = null; + + if (top.document.location.href.match(/\?blank=1$/)) { + $inputElem.val(''); + } + + $outputTypeElem.change(function () { + $('#rightContainer .pane').hide(); + $activeElem = $('#' + $outputTypeElem.val()).show(); + }).change(); + + var noticeChange = function () { + inputDirty = true; + }; + $inputElem. + change(noticeChange). + keyup(noticeChange). + keypress(noticeChange). + keydown(noticeChange); + + var jsonString = function (input) { + var output = (input + ''). + replace(/\n/g, '\\n'). + replace(/\r/g, '\\r'). + replace(/\t/g, '\\t'). + replace(/\f/g, '\\f'). + replace(/[\\"']/g, '\\$&'). + replace(/\u0000/g, '\\0'); + return '"' + output + '"'; + }; + + var getScrollSize = function () { + var e = $activeElem[0]; + + return e.scrollHeight - e.clientHeight; + }; + var getScrollPercent = function () { + var size = getScrollSize(); + + if (size <= 0) { + return 1; + } + + return $activeElem.scrollTop() / size; + }; + var setScrollPercent = function (percent) { + $activeElem.scrollTop(percent * getScrollSize()); + }; + + var delayTime = 1; + var checkForChanges = function () { + if (inputDirty) { + inputDirty = false; + var startTime = new Date(); + + // Save scroll position + var scrollPercent = getScrollPercent(); + + // Convert + var markdown = $inputElem.val(); + var lexed = marked.lexer(markdown); + + // Grab lexed output and convert to a string before the parser + // destroys the data + var lexedList = []; + + for (var i = 0; i < lexed.length; i ++) { + var lexedLine = []; + for (var j in lexed[i]) { + lexedLine.push(j + ":" + jsonString(lexed[i][j])); + } + lexedList.push("{" + lexedLine.join(", ") + "}"); + } + + var parsed = marked.parser(lexed); + + // Assign + $previewElem.html(parsed); + $htmlElem.val(parsed); + $lexerElem.val(lexedList.join("\n")); + + // Set the scroll percent + setScrollPercent(scrollPercent); + + var endTime = new Date(); + delayTime = endTime - startTime; + if (delayTime < 50) { + delayTime = 50; + } else if (delayTime > 500) { + delayTime = 1000; + } + } + window.setTimeout(checkForChanges, delayTime); + }; + checkForChanges(); + setScrollPercent(0); +}); diff --git a/node_modules/mdurl/CHANGELOG.md b/node_modules/mdurl/CHANGELOG.md new file mode 100644 index 000000000..ed33c7893 --- /dev/null +++ b/node_modules/mdurl/CHANGELOG.md @@ -0,0 +1,16 @@ +1.0.1 / 2015-09-15 +------------------ + +- Fixed closure compiler compatibility (#1). + + +1.0.0 / 2015-03-04 +------------------ + +- Added `.decode()`, `.parse()`, `.format()`. + + +0.0.1 / 2015-03-02 +------------------ + +- First release. diff --git a/node_modules/mdurl/LICENSE b/node_modules/mdurl/LICENSE new file mode 100644 index 000000000..3b2c7bfb1 --- /dev/null +++ b/node_modules/mdurl/LICENSE @@ -0,0 +1,45 @@ +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. + +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. + +-------------------------------------------------------------------------------- + +.parse() is based on Joyent's node.js `url` code: + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +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. diff --git a/node_modules/mdurl/README.md b/node_modules/mdurl/README.md new file mode 100644 index 000000000..72aebef09 --- /dev/null +++ b/node_modules/mdurl/README.md @@ -0,0 +1,102 @@ +# mdurl + +[![Build Status](https://img.shields.io/travis/markdown-it/mdurl/master.svg?style=flat)](https://travis-ci.org/markdown-it/mdurl) +[![NPM version](https://img.shields.io/npm/v/mdurl.svg?style=flat)](https://www.npmjs.org/package/mdurl) + +> URL utilities for [markdown-it](https://github.com/markdown-it/markdown-it) parser. + + +## API + +### .encode(str [, exclude, keepEncoded]) -> String + +Percent-encode a string, avoiding double encoding. Don't touch `/a-zA-Z0-9/` + +excluded chars + `/%[a-fA-F0-9]{2}/` (if not disabled). Broken surrorates are +replaced with `U+FFFD`. + +Params: + +- __str__ - input string. +- __exclude__ - optional, `;/?:@&=+$,-_.!~*'()#`. Additional chars to keep intact + (except `/a-zA-Z0-9/`). +- __keepEncoded__ - optional, `true`. By default it skips already encoded sequences + (`/%[a-fA-F0-9]{2}/`). If set to `false`, `%` will be encoded. + + +### encode.defaultChars, encode.componentChars + +You can use these constants as second argument to `encode` function. + + - `encode.defaultChars` is the same exclude set as in the standard `encodeURI()` function + - `encode.componentChars` is the same exclude set as in the `encodeURIComponent()` function + +For example, `encode('something', encode.componentChars, true)` is roughly the equivalent of +the `encodeURIComponent()` function (except `encode()` doesn't throw). + + +### .decode(str [, exclude]) -> String + +Decode percent-encoded string. Invalid percent-encoded sequences (e.g. `%2G`) +are left as is. Invalid UTF-8 characters are replaced with `U+FFFD`. + + +Params: + +- __str__ - input string. +- __exclude__ - set of characters to leave encoded, optional, `;/?:@&=+$,#`. + + +### decode.defaultChars, decode.componentChars + +You can use these constants as second argument to `decode` function. + + - `decode.defaultChars` is the same exclude set as in the standard `decodeURI()` function + - `decode.componentChars` is the same exclude set as in the `decodeURIComponent()` function + +For example, `decode('something', decode.defaultChars)` has the same behavior as +`decodeURI('something')` on a correctly encoded input. + + +### .parse(url, slashesDenoteHost) -> urlObs + +Parse url string. Similar to node's [url.parse](http://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost), but without any +normalizations and query string parse. + + - __url__ - input url (string) + - __slashesDenoteHost__ - if url starts with `//`, expect a hostname after it. Optional, `false`. + +Result (hash): + +- protocol +- slashes +- auth +- port +- hostname +- hash +- search +- pathname + +Difference with node's `url`: + +1. No leading slash in paths, e.g. in `url.parse('http://foo?bar')` pathname is + ``, not `/` +2. Backslashes are not replaced with slashes, so `http:\\example.org\` is + treated like a relative path +3. Trailing colon is treated like a part of the path, i.e. in + `http://example.org:foo` pathname is `:foo` +4. Nothing is URL-encoded in the resulting object, (in joyent/node some chars + in auth and paths are encoded) +5. `url.parse()` does not have `parseQueryString` argument +6. Removed extraneous result properties: `host`, `path`, `query`, etc., + which can be constructed using other parts of the url. + + +### .format(urlObject) + +Format an object previously obtained with `.parse()` function. Similar to node's +[url.format](http://nodejs.org/api/url.html#url_url_format_urlobj). + + +## License + +[MIT](https://github.com/markdown-it/mdurl/blob/master/LICENSE) diff --git a/node_modules/mdurl/decode.js b/node_modules/mdurl/decode.js new file mode 100644 index 000000000..189d7b9c5 --- /dev/null +++ b/node_modules/mdurl/decode.js @@ -0,0 +1,122 @@ + +'use strict'; + + +/* eslint-disable no-bitwise */ + +var decodeCache = {}; + +function getDecodeCache(exclude) { + var i, ch, cache = decodeCache[exclude]; + if (cache) { return cache; } + + cache = decodeCache[exclude] = []; + + for (i = 0; i < 128; i++) { + ch = String.fromCharCode(i); + cache.push(ch); + } + + for (i = 0; i < exclude.length; i++) { + ch = exclude.charCodeAt(i); + cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2); + } + + return cache; +} + + +// Decode percent-encoded string. +// +function decode(string, exclude) { + var cache; + + if (typeof exclude !== 'string') { + exclude = decode.defaultChars; + } + + cache = getDecodeCache(exclude); + + return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) { + var i, l, b1, b2, b3, b4, chr, + result = ''; + + for (i = 0, l = seq.length; i < l; i += 3) { + b1 = parseInt(seq.slice(i + 1, i + 3), 16); + + if (b1 < 0x80) { + result += cache[b1]; + continue; + } + + if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) { + // 110xxxxx 10xxxxxx + b2 = parseInt(seq.slice(i + 4, i + 6), 16); + + if ((b2 & 0xC0) === 0x80) { + chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F); + + if (chr < 0x80) { + result += '\ufffd\ufffd'; + } else { + result += String.fromCharCode(chr); + } + + i += 3; + continue; + } + } + + if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) { + // 1110xxxx 10xxxxxx 10xxxxxx + b2 = parseInt(seq.slice(i + 4, i + 6), 16); + b3 = parseInt(seq.slice(i + 7, i + 9), 16); + + if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { + chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F); + + if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) { + result += '\ufffd\ufffd\ufffd'; + } else { + result += String.fromCharCode(chr); + } + + i += 6; + continue; + } + } + + if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) { + // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx + b2 = parseInt(seq.slice(i + 4, i + 6), 16); + b3 = parseInt(seq.slice(i + 7, i + 9), 16); + b4 = parseInt(seq.slice(i + 10, i + 12), 16); + + if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) { + chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F); + + if (chr < 0x10000 || chr > 0x10FFFF) { + result += '\ufffd\ufffd\ufffd\ufffd'; + } else { + chr -= 0x10000; + result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF)); + } + + i += 9; + continue; + } + } + + result += '\ufffd'; + } + + return result; + }); +} + + +decode.defaultChars = ';/?:@&=+$,#'; +decode.componentChars = ''; + + +module.exports = decode; diff --git a/node_modules/mdurl/encode.js b/node_modules/mdurl/encode.js new file mode 100644 index 000000000..6dff4f96e --- /dev/null +++ b/node_modules/mdurl/encode.js @@ -0,0 +1,98 @@ + +'use strict'; + + +var encodeCache = {}; + + +// Create a lookup array where anything but characters in `chars` string +// and alphanumeric chars is percent-encoded. +// +function getEncodeCache(exclude) { + var i, ch, cache = encodeCache[exclude]; + if (cache) { return cache; } + + cache = encodeCache[exclude] = []; + + for (i = 0; i < 128; i++) { + ch = String.fromCharCode(i); + + if (/^[0-9a-z]$/i.test(ch)) { + // always allow unencoded alphanumeric characters + cache.push(ch); + } else { + cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); + } + } + + for (i = 0; i < exclude.length; i++) { + cache[exclude.charCodeAt(i)] = exclude[i]; + } + + return cache; +} + + +// Encode unsafe characters with percent-encoding, skipping already +// encoded sequences. +// +// - string - string to encode +// - exclude - list of characters to ignore (in addition to a-zA-Z0-9) +// - keepEscaped - don't encode '%' in a correct escape sequence (default: true) +// +function encode(string, exclude, keepEscaped) { + var i, l, code, nextCode, cache, + result = ''; + + if (typeof exclude !== 'string') { + // encode(string, keepEscaped) + keepEscaped = exclude; + exclude = encode.defaultChars; + } + + if (typeof keepEscaped === 'undefined') { + keepEscaped = true; + } + + cache = getEncodeCache(exclude); + + for (i = 0, l = string.length; i < l; i++) { + code = string.charCodeAt(i); + + if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { + if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { + result += string.slice(i, i + 3); + i += 2; + continue; + } + } + + if (code < 128) { + result += cache[code]; + continue; + } + + if (code >= 0xD800 && code <= 0xDFFF) { + if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { + nextCode = string.charCodeAt(i + 1); + if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { + result += encodeURIComponent(string[i] + string[i + 1]); + i++; + continue; + } + } + result += '%EF%BF%BD'; + continue; + } + + result += encodeURIComponent(string[i]); + } + + return result; +} + +encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; +encode.componentChars = "-_.!~*'()"; + + +module.exports = encode; diff --git a/node_modules/mdurl/format.js b/node_modules/mdurl/format.js new file mode 100644 index 000000000..c4eb9f4a9 --- /dev/null +++ b/node_modules/mdurl/format.js @@ -0,0 +1,25 @@ + +'use strict'; + + +module.exports = function format(url) { + var result = ''; + + result += url.protocol || ''; + result += url.slashes ? '//' : ''; + result += url.auth ? url.auth + '@' : ''; + + if (url.hostname && url.hostname.indexOf(':') !== -1) { + // ipv6 address + result += '[' + url.hostname + ']'; + } else { + result += url.hostname || ''; + } + + result += url.port ? ':' + url.port : ''; + result += url.pathname || ''; + result += url.search || ''; + result += url.hash || ''; + + return result; +}; diff --git a/node_modules/mdurl/index.js b/node_modules/mdurl/index.js new file mode 100644 index 000000000..194abff59 --- /dev/null +++ b/node_modules/mdurl/index.js @@ -0,0 +1,7 @@ +'use strict'; + + +module.exports.encode = require('./encode'); +module.exports.decode = require('./decode'); +module.exports.format = require('./format'); +module.exports.parse = require('./parse'); diff --git a/node_modules/mdurl/package.json b/node_modules/mdurl/package.json new file mode 100644 index 000000000..017d740b0 --- /dev/null +++ b/node_modules/mdurl/package.json @@ -0,0 +1,16 @@ +{ + "name": "mdurl", + "version": "1.0.1", + "description": "URL utilities for markdown-it", + "repository": "markdown-it/mdurl", + "license": "MIT", + "scripts": { + "test": "make test" + }, + "devDependencies": { + "mocha": "*", + "eslint": "0.13.0", + "eslint-plugin-nodeca": "^1.0.0", + "istanbul": "*" + } +} diff --git a/node_modules/mdurl/parse.js b/node_modules/mdurl/parse.js new file mode 100644 index 000000000..6c33ac128 --- /dev/null +++ b/node_modules/mdurl/parse.js @@ -0,0 +1,312 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +'use strict'; + +// +// Changes from joyent/node: +// +// 1. No leading slash in paths, +// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/` +// +// 2. Backslashes are not replaced with slashes, +// so `http:\\example.org\` is treated like a relative path +// +// 3. Trailing colon is treated like a part of the path, +// i.e. in `http://example.org:foo` pathname is `:foo` +// +// 4. Nothing is URL-encoded in the resulting object, +// (in joyent/node some chars in auth and paths are encoded) +// +// 5. `url.parse()` does not have `parseQueryString` argument +// +// 6. Removed extraneous result properties: `host`, `path`, `query`, etc., +// which can be constructed using other parts of the url. +// + + +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.pathname = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // Special case for a simple path URL + simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = [ '<', '>', '"', '`', ' ', '\r', '\n', '\t' ], + + // RFC 2396: characters not allowed for various reasons. + unwise = [ '{', '}', '|', '\\', '^', '`' ].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = [ '\'' ].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape), + hostEndingChars = [ '/', '?', '#' ], + hostnameMaxLen = 255, + hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + /* eslint-disable no-script-url */ + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }; + /* eslint-enable no-script-url */ + +function urlParse(url, slashesDenoteHost) { + if (url && url instanceof Url) { return url; } + + var u = new Url(); + u.parse(url, slashesDenoteHost); + return u; +} + +Url.prototype.parse = function(url, slashesDenoteHost) { + var i, l, lowerProto, hec, slashes, + rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + var simplePath = simplePathPattern.exec(rest); + if (simplePath) { + this.pathname = simplePath[1]; + if (simplePath[2]) { + this.search = simplePath[2]; + } + return this; + } + } + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + lowerProto = proto.toLowerCase(); + this.protocol = proto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; + } + } + + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (i = 0; i < hostEndingChars.length; i++) { + hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { + hostEnd = hec; + } + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = auth; + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (i = 0; i < nonHostChars.length; i++) { + hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { + hostEnd = hec; + } + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) { + hostEnd = rest.length; + } + + if (rest[hostEnd - 1] === ':') { hostEnd--; } + var host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + this.parseHost(host); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) { continue; } + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } + + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + } + } + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + rest = rest.slice(0, qm); + } + if (rest) { this.pathname = rest; } + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = ''; + } + + return this; +}; + +Url.prototype.parseHost = function(host) { + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) { this.hostname = host; } +}; + +module.exports = urlParse; diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md new file mode 100644 index 000000000..7436f6414 --- /dev/null +++ b/node_modules/mime-db/HISTORY.md @@ -0,0 +1,507 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + +1.51.0 / 2021-11-08 +=================== + + * Add new upstream MIME types + * Mark `image/vnd.microsoft.icon` as compressible + * Mark `image/vnd.ms-dds` as compressible + +1.50.0 / 2021-09-15 +=================== + + * Add deprecated iWorks mime types and extensions + * Add new upstream MIME types + +1.49.0 / 2021-07-26 +=================== + + * Add extension `.trig` to `application/trig` + * Add new upstream MIME types + +1.48.0 / 2021-05-30 +=================== + + * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + * Add new upstream MIME types + * Mark `text/yaml` as compressible + +1.47.0 / 2021-04-01 +=================== + + * Add new upstream MIME types + * Remove ambigious extensions from IANA for `application/*+xml` types + * Update primary extension to `.es` for `application/ecmascript` + +1.46.0 / 2021-02-13 +=================== + + * Add extension `.amr` to `audio/amr` + * Add extension `.m4s` to `video/iso.segment` + * Add extension `.opus` to `audio/ogg` + * Add new upstream MIME types + +1.45.0 / 2020-09-22 +=================== + + * Add `application/ubjson` with extension `.ubj` + * Add `image/avif` with extension `.avif` + * Add `image/ktx2` with extension `.ktx2` + * Add extension `.dbf` to `application/vnd.dbf` + * Add extension `.rar` to `application/vnd.rar` + * Add extension `.td` to `application/urc-targetdesc+xml` + * Add new upstream MIME types + * Fix extension of `application/vnd.apple.keynote` to be `.key` + +1.44.0 / 2020-04-22 +=================== + + * Add charsets from IANA + * Add extension `.cjs` to `application/node` + * Add new upstream MIME types + +1.43.0 / 2020-01-05 +=================== + + * Add `application/x-keepass2` with extension `.kdbx` + * Add extension `.mxmf` to `audio/mobile-xmf` + * Add extensions from IANA for `application/*+xml` types + * Add new upstream MIME types + +1.42.0 / 2019-09-25 +=================== + + * Add `image/vnd.ms-dds` with extension `.dds` + * Add new upstream MIME types + * Remove compressible from `multipart/mixed` + +1.41.0 / 2019-08-30 +=================== + + * Add new upstream MIME types + * Add `application/toml` with extension `.toml` + * Mark `font/ttf` as compressible + +1.40.0 / 2019-04-20 +=================== + + * Add extensions from IANA for `model/*` types + * Add `text/mdx` with extension `.mdx` + +1.39.0 / 2019-04-04 +=================== + + * Add extensions `.siv` and `.sieve` to `application/sieve` + * Add new upstream MIME types + +1.38.0 / 2019-02-04 +=================== + + * Add extension `.nq` to `application/n-quads` + * Add extension `.nt` to `application/n-triples` + * Add new upstream MIME types + * Mark `text/less` as compressible + +1.37.0 / 2018-10-19 +=================== + + * Add extensions to HEIC image types + * Add new upstream MIME types + +1.36.0 / 2018-08-20 +=================== + + * Add Apple file extensions from IANA + * Add extensions from IANA for `image/*` types + * Add new upstream MIME types + +1.35.0 / 2018-07-15 +=================== + + * Add extension `.owl` to `application/rdf+xml` + * Add new upstream MIME types + - Removes extension `.woff` from `application/font-woff` + +1.34.0 / 2018-06-03 +=================== + + * Add extension `.csl` to `application/vnd.citationstyles.style+xml` + * Add extension `.es` to `application/ecmascript` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/turtle` + * Mark all XML-derived types as compressible + +1.33.0 / 2018-02-15 +=================== + + * Add extensions from IANA for `message/*` types + * Add new upstream MIME types + * Fix some incorrect OOXML types + * Remove `application/font-woff2` + +1.32.0 / 2017-11-29 +=================== + + * Add new upstream MIME types + * Update `text/hjson` to registered `application/hjson` + * Add `text/shex` with extension `.shex` + +1.31.0 / 2017-10-25 +=================== + + * Add `application/raml+yaml` with extension `.raml` + * Add `application/wasm` with extension `.wasm` + * Add new `font` type from IANA + * Add new upstream font extensions + * Add new upstream MIME types + * Add extensions for JPEG-2000 images + +1.30.0 / 2017-08-27 +=================== + + * Add `application/vnd.ms-outlook` + * Add `application/x-arj` + * Add extension `.mjs` to `application/javascript` + * Add glTF types and extensions + * Add new upstream MIME types + * Add `text/x-org` + * Add VirtualBox MIME types + * Fix `source` records for `video/*` types that are IANA + * Update `font/opentype` to registered `font/otf` + +1.29.0 / 2017-07-10 +=================== + + * Add `application/fido.trusted-apps+json` + * Add extension `.wadl` to `application/vnd.sun.wadl+xml` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/css` + +1.28.0 / 2017-05-14 +=================== + + * Add new upstream MIME types + * Add extension `.gz` to `application/gzip` + * Update extensions `.md` and `.markdown` to be `text/markdown` + +1.27.0 / 2017-03-16 +=================== + + * Add new upstream MIME types + * Add `image/apng` with extension `.apng` + +1.26.0 / 2017-01-14 +=================== + + * Add new upstream MIME types + * Add extension `.geojson` to `application/geo+json` + +1.25.0 / 2016-11-11 +=================== + + * Add new upstream MIME types + +1.24.0 / 2016-09-18 +=================== + + * Add `audio/mp3` + * Add new upstream MIME types + +1.23.0 / 2016-05-01 +=================== + + * Add new upstream MIME types + * Add extension `.3gpp` to `audio/3gpp` + +1.22.0 / 2016-02-15 +=================== + + * Add `text/slim` + * Add extension `.rng` to `application/xml` + * Add new upstream MIME types + * Fix extension of `application/dash+xml` to be `.mpd` + * Update primary extension to `.m4a` for `audio/mp4` + +1.21.0 / 2016-01-06 +=================== + + * Add Google document types + * Add new upstream MIME types + +1.20.0 / 2015-11-10 +=================== + + * Add `text/x-suse-ymp` + * Add new upstream MIME types + +1.19.0 / 2015-09-17 +=================== + + * Add `application/vnd.apple.pkpass` + * Add new upstream MIME types + +1.18.0 / 2015-09-03 +=================== + + * Add new upstream MIME types + +1.17.0 / 2015-08-13 +=================== + + * Add `application/x-msdos-program` + * Add `audio/g711-0` + * Add `image/vnd.mozilla.apng` + * Add extension `.exe` to `application/x-msdos-program` + +1.16.0 / 2015-07-29 +=================== + + * Add `application/vnd.uri-map` + +1.15.0 / 2015-07-13 +=================== + + * Add `application/x-httpd-php` + +1.14.0 / 2015-06-25 +=================== + + * Add `application/scim+json` + * Add `application/vnd.3gpp.ussd+xml` + * Add `application/vnd.biopax.rdf+xml` + * Add `text/x-processing` + +1.13.0 / 2015-06-07 +=================== + + * Add nginx as a source + * Add `application/x-cocoa` + * Add `application/x-java-archive-diff` + * Add `application/x-makeself` + * Add `application/x-perl` + * Add `application/x-pilot` + * Add `application/x-redhat-package-manager` + * Add `application/x-sea` + * Add `audio/x-m4a` + * Add `audio/x-realaudio` + * Add `image/x-jng` + * Add `text/mathml` + +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE new file mode 100644 index 000000000..0751cb10e --- /dev/null +++ b/node_modules/mime-db/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +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. diff --git a/node_modules/mime-db/README.md b/node_modules/mime-db/README.md new file mode 100644 index 000000000..5a8fcfe4d --- /dev/null +++ b/node_modules/mime-db/README.md @@ -0,0 +1,100 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a large database of mime types and information about them. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +### Database Download + +If you're crazy enough to use this in the browser, you can just grab the +JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to +replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) +as the JSON format may change in the future. + +``` +https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json +``` + +## Usage + +```js +var db = require('mime-db') + +// grab data on .js files +var data = db['application/javascript'] +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) + - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom-types.json` or +`src/custom-suffix.json`. + +The `src/custom-types.json` file is a JSON object with the MIME type as the +keys and the values being an object with the following keys: + +- `compressible` - leave out if you don't know, otherwise `true`/`false` to + indicate whether the data represented by the type is typically compressible. +- `extensions` - include an array of file extensions that are associated with + the type. +- `notes` - human-readable notes about the type, typically what the type is. +- `sources` - include an array of URLs of where the MIME type and the associated + extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); + links to type aggregating sites and Wikipedia are _not acceptable_. + +To update the build, run `npm run build`. + +### Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +If that is not possible / feasible, they can be added directly here as a +"custom" type. To do this, it is required to have a primary source that +definitively lists the media type. If an extension is going to be listed as +associateed with this media type, the source must definitively link the +media type and extension as well. + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci +[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://badgen.net/npm/node/mime-db +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-db +[npm-url]: https://npmjs.org/package/mime-db +[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json new file mode 100644 index 000000000..eb9c42c45 --- /dev/null +++ b/node_modules/mime-db/db.json @@ -0,0 +1,8519 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true + }, + "application/a2l": { + "source": "iana" + }, + "application/ace+cbor": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/at+jwt": { + "source": "iana" + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"] + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-dynamic-event-message": { + "source": "iana" + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"] + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/captive+json": { + "source": "iana", + "compressible": true + }, + "application/cbor": { + "source": "iana" + }, + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true + }, + "application/cfw": { + "source": "iana" + }, + "application/city+json": { + "source": "iana", + "compressible": true + }, + "application/clr": { + "source": "iana" + }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cpl"] + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana", + "compressible": true + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cwt": { + "source": "iana" + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"] + }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"] + }, + "application/dots+cbor": { + "source": "iana" + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["es","ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/elm+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana", + "compressible": true + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, + "application/express": { + "source": "iana", + "extensions": ["exp"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true + }, + "application/fits": { + "source": "iana" + }, + "application/flexfec": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/geo+json-seq": { + "source": "iana" + }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"] + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"] + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"] + }, + "application/manifest+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpf"] + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mipc": { + "source": "iana" + }, + "application/missing-blocks+cbor-seq": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true + }, + "application/msc-ivr+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msc-mixer+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/multipart-core": { + "source": "iana" + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"] + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-groupinfo": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"] + }, + "application/nss": { + "source": "iana" + }, + "application/oauth-authz-req+jwt": { + "source": "iana" + }, + "application/oblivious-dns-message": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true + }, + "application/oscore": { + "source": "iana" + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p21": { + "source": "iana" + }, + "application/p21+zip": { + "source": "iana", + "compressible": false + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"] + }, + "application/parityfec": { + "source": "iana" + }, + "application/passport": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pem-certificate-chain": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana", + "extensions": ["asc"] + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pidf-diff+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkcs8-encrypted": { + "source": "iana" + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana", + "compressible": true + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT" + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"] + }, + "application/pvd+json": { + "source": "iana", + "compressible": true + }, + "application/qsig": { + "source": "iana" + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf","owl"] + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"] + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-publication": { + "source": "iana" + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sarif+json": { + "source": "iana", + "compressible": true + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true + }, + "application/sbe": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/secevent+jwt": { + "source": "iana" + }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-etch+cbor": { + "source": "iana" + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv","sieve"] + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/sipc": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"] + }, + "application/spdx+json": { + "source": "iana", + "compressible": true + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"] + }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/td+json": { + "source": "iana", + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei","teicorpus"] + }, + "application/tetra_isi": { + "source": "iana" + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/token-introspection+jwt": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, + "application/trig": { + "source": "iana", + "extensions": ["trig"] + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"] + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"] + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["td"] + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana" + }, + "application/vnd.3gpp.5gnas": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gtpc": { + "source": "iana" + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana" + }, + "application/vnd.3gpp.lpp": { + "source": "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ngap": { + "source": "iana" + }, + "application/vnd.3gpp.pfcp": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.s1ap": { + "source": "iana" + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"] + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.arrow.file": { + "source": "iana" + }, + "application/vnd.apache.arrow.stream": { + "source": "iana" + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"] + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bint.med-content": { + "source": "iana" + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.ciedi": { + "source": "iana" + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"] + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana" + }, + "application/vnd.cryptomator.vault": { + "source": "iana" + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.d3m-dataset": { + "source": "iana" + }, + "application/vnd.d3m-problem": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"] + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume.movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.efi.img": { + "source": "iana" + }, + "application/vnd.efi.iso": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.slides": { + "source": "iana" + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las": { + "source": "iana" + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"] + }, + "application/vnd.laszip": { + "source": "iana" + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana", + "extensions": ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nebumind.line": { + "source": "iana" + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nimn": { + "source": "iana" + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.ocf+cbor": { + "source": "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+cbor": { + "source": "iana" + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { + "source": "iana" + }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"] + }, + "application/vnd.opentimestamps.ots": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { + "source": "iana" + }, + "application/vnd.patientecommsdoc": { + "source": "iana" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.psfs": { + "source": "iana" + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana", + "extensions": ["rar"] + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.resilient.logic": { + "source": "iana" + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sar": { + "source": "iana" + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shade-save-file": { + "source": "iana" + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shp": { + "source": "iana" + }, + "application/vnd.shx": { + "source": "iana" + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.snesdev-page-table": { + "source": "iana" + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sqlite3": { + "source": "iana" + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"] + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.dpp": { + "source": "iana" + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.youtube.yt": { + "source": "iana" + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"] + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"] + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wif"] + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-pki-message": { + "source": "iana" + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "iana", + "extensions": ["der","crt","pem"] + }, + "application/x-x509-ca-ra-cert": { + "source": "iana" + }, + "application/x-x509-next-ca-cert": { + "source": "iana" + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"] + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"] + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"] + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"] + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsl","xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "application/zstd": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/aac": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana", + "extensions": ["amr"] + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/flexfec": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/melp": { + "source": "iana" + }, + "audio/melp1200": { + "source": "iana" + }, + "audio/melp2400": { + "source": "iana" + }, + "audio/melp600": { + "source": "iana" + }, + "audio/mhas": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"] + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx","opus"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/scip": { + "source": "iana" + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sofa": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tetra_acelp_bb": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/tsvcis": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/usac": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"] + }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, + "image/apng": { + "compressible": false, + "extensions": ["apng"] + }, + "image/avci": { + "source": "iana", + "extensions": ["avci"] + }, + "image/avcs": { + "source": "iana", + "extensions": ["avcs"] + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"] + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"] + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"] + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"] + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"] + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm"] + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"] + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"] + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif","tiff"] + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"] + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"] + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "compressible": true, + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "compressible": true, + "extensions": ["dds"] + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"] + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"] + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"] + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification" + ] + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"] + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"] + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"] + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"] + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/e57": { + "source": "iana" + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"] + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"] + }, + "model/step": { + "source": "iana" + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"] + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"] + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.pytha.pyox": { + "source": "iana" + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"] + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"] + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"] + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"] + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/cql": { + "source": "iana" + }, + "text/cql-expression": { + "source": "iana" + }, + "text/cql-identifier": { + "source": "iana" + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fhirpath": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/gff3": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "compressible": true, + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana", + "charset": "UTF-8" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana", + "charset": "UTF-8" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/shaclc": { + "source": "iana" + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"] + }, + "text/strings": { + "source": "iana" + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"] + }, + "text/vnd.ficlab.flt": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.gml": { + "source": "iana" + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.hans": { + "source": "iana" + }, + "text/vnd.hgl": { + "source": "iana" + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sosi": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "compressible": true, + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "iana" + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "iana" + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"] + }, + "video/av1": { + "source": "iana" + }, + "video/bmpeg": { + "source": "iana" + }, + "video/bt656": { + "source": "iana" + }, + "video/celb": { + "source": "iana" + }, + "video/dv": { + "source": "iana" + }, + "video/encaprtp": { + "source": "iana" + }, + "video/ffv1": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"] + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "iana" + }, + "video/h263-2000": { + "source": "iana" + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "iana" + }, + "video/h264-svc": { + "source": "iana" + }, + "video/h265": { + "source": "iana" + }, + "video/iso.segment": { + "source": "iana", + "extensions": ["m4s"] + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "iana" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/jxsv": { + "source": "iana" + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "iana" + }, + "video/mp2p": { + "source": "iana" + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "iana" + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "iana" + }, + "video/mpv": { + "source": "iana" + }, + "video/nv": { + "source": "iana" + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "iana" + }, + "video/pointer": { + "source": "iana" + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "iana" + }, + "video/raw": { + "source": "iana" + }, + "video/rtp-enc-aescm128": { + "source": "iana" + }, + "video/rtploopback": { + "source": "iana" + }, + "video/rtx": { + "source": "iana" + }, + "video/scip": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" + }, + "video/smpte292m": { + "source": "iana" + }, + "video/ulpfec": { + "source": "iana" + }, + "video/vc1": { + "source": "iana" + }, + "video/vc2": { + "source": "iana" + }, + "video/vnd.cctv": { + "source": "iana" + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "iana" + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "iana" + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana" + }, + "video/vnd.motorola.video": { + "source": "iana" + }, + "video/vnd.motorola.videop": { + "source": "iana" + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" + }, + "video/vnd.nokia.videovoip": { + "source": "iana" + }, + "video/vnd.objectvideo": { + "source": "iana" + }, + "video/vnd.radgamettools.bink": { + "source": "iana" + }, + "video/vnd.radgamettools.smacker": { + "source": "iana" + }, + "video/vnd.sealed.mpeg1": { + "source": "iana" + }, + "video/vnd.sealed.mpeg4": { + "source": "iana" + }, + "video/vnd.sealed.swf": { + "source": "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana" + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"] + }, + "video/vnd.youtube.yt": { + "source": "iana" + }, + "video/vp8": { + "source": "iana" + }, + "video/vp9": { + "source": "iana" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js new file mode 100644 index 000000000..ec2be30de --- /dev/null +++ b/node_modules/mime-db/index.js @@ -0,0 +1,12 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json new file mode 100644 index 000000000..32c14b846 --- /dev/null +++ b/node_modules/mime-db/package.json @@ -0,0 +1,60 @@ +{ + "name": "mime-db", + "description": "Media Type Database", + "version": "1.52.0", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)", + "Robert Kieffer (http://github.com/broofa)" + ], + "license": "MIT", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "repository": "jshttp/mime-db", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.3", + "eslint": "7.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.1", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "media-typer": "1.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0", + "raw-body": "2.5.0", + "stream-to-array": "2.3.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md new file mode 100644 index 000000000..c5043b75b --- /dev/null +++ b/node_modules/mime-types/HISTORY.md @@ -0,0 +1,397 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + +2.1.34 / 2021-11-08 +=================== + + * deps: mime-db@1.51.0 + - Add new upstream MIME types + +2.1.33 / 2021-10-01 +=================== + + * deps: mime-db@1.50.0 + - Add deprecated iWorks mime types and extensions + - Add new upstream MIME types + +2.1.32 / 2021-07-27 +=================== + + * deps: mime-db@1.49.0 + - Add extension `.trig` to `application/trig` + - Add new upstream MIME types + +2.1.31 / 2021-06-01 +=================== + + * deps: mime-db@1.48.0 + - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + - Add new upstream MIME types + +2.1.30 / 2021-04-02 +=================== + + * deps: mime-db@1.47.0 + - Add extension `.amr` to `audio/amr` + - Remove ambigious extensions from IANA for `application/*+xml` types + - Update primary extension to `.es` for `application/ecmascript` + +2.1.29 / 2021-02-17 +=================== + + * deps: mime-db@1.46.0 + - Add extension `.amr` to `audio/amr` + - Add extension `.m4s` to `video/iso.segment` + - Add extension `.opus` to `audio/ogg` + - Add new upstream MIME types + +2.1.28 / 2021-01-01 +=================== + + * deps: mime-db@1.45.0 + - Add `application/ubjson` with extension `.ubj` + - Add `image/avif` with extension `.avif` + - Add `image/ktx2` with extension `.ktx2` + - Add extension `.dbf` to `application/vnd.dbf` + - Add extension `.rar` to `application/vnd.rar` + - Add extension `.td` to `application/urc-targetdesc+xml` + - Add new upstream MIME types + - Fix extension of `application/vnd.apple.keynote` to be `.key` + +2.1.27 / 2020-04-23 +=================== + + * deps: mime-db@1.44.0 + - Add charsets from IANA + - Add extension `.cjs` to `application/node` + - Add new upstream MIME types + +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + +2.1.15 / 2017-03-23 +=================== + + * deps: mime-db@~1.27.0 + - Add new mime types + - Add `image/apng` + +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/mime-types/LICENSE b/node_modules/mime-types/LICENSE new file mode 100644 index 000000000..06166077b --- /dev/null +++ b/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +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. diff --git a/node_modules/mime-types/README.md b/node_modules/mime-types/README.md new file mode 100644 index 000000000..48d2fb477 --- /dev/null +++ b/node_modules/mime-types/README.md @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/node_modules/mime-types/index.js b/node_modules/mime-types/index.js new file mode 100644 index 000000000..b9f34d599 --- /dev/null +++ b/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var db = require('mime-db') +var extname = require('path').extname + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json new file mode 100644 index 000000000..bbef69645 --- /dev/null +++ b/node_modules/mime-types/package.json @@ -0,0 +1,44 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "2.1.35", + "contributors": [ + "Douglas Christopher Wilson ", + "Jeremiah Senkpiel (https://searchbeam.jit.su)", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "keywords": [ + "mime", + "types" + ], + "repository": "jshttp/mime-types", + "dependencies": { + "mime-db": "1.52.0" + }, + "devDependencies": { + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/node_modules/mime/.npmignore b/node_modules/mime/.npmignore new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/mime/CHANGELOG.md b/node_modules/mime/CHANGELOG.md new file mode 100644 index 000000000..f12753505 --- /dev/null +++ b/node_modules/mime/CHANGELOG.md @@ -0,0 +1,164 @@ +# Changelog + +## v1.6.0 (24/11/2017) +*No changelog for this release.* + +--- + +## v2.0.4 (24/11/2017) +- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/node-mime/issues/182) +- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/node-mime/issues/181) + +--- + +## v1.5.0 (22/11/2017) +- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/node-mime/issues/179) +- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/node-mime/issues/178) +- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/node-mime/issues/176) +- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/node-mime/issues/175) +- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/node-mime/issues/167) + +--- + +## v2.0.3 (25/09/2017) +*No changelog for this release.* + +--- + +## v1.4.1 (25/09/2017) +- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/node-mime/issues/172) + +--- + +## v2.0.2 (15/09/2017) +- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/node-mime/issues/165) +- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/node-mime/issues/164) +- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/node-mime/issues/163) +- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/node-mime/issues/162) +- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/node-mime/issues/161) +- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/node-mime/issues/160) +- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/node-mime/issues/152) +- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/node-mime/issues/139) +- [**V2**] reset mime-types [#124](https://github.com/broofa/node-mime/issues/124) +- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/node-mime/issues/113) + +--- + +## v2.0.1 (14/09/2017) +- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/node-mime/issues/171) +- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/node-mime/issues/170) + +--- + +## v2.0.0 (12/09/2017) +- [**closed**] woff and woff2 [#168](https://github.com/broofa/node-mime/issues/168) + +--- + +## v1.4.0 (28/08/2017) +- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/node-mime/issues/159) +- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/node-mime/issues/158) +- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/node-mime/issues/157) +- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/node-mime/issues/147) +- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/node-mime/issues/135) +- [**closed**] requested features [#131](https://github.com/broofa/node-mime/issues/131) +- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/node-mime/issues/129) +- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/node-mime/issues/120) +- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/node-mime/issues/118) +- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/node-mime/issues/108) +- [**closed**] don't make default_type global [#78](https://github.com/broofa/node-mime/issues/78) +- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/node-mime/issues/74) + +--- + +## v1.3.6 (11/05/2017) +- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/node-mime/issues/154) +- [**closed**] Error while installing mime [#153](https://github.com/broofa/node-mime/issues/153) +- [**closed**] application/manifest+json [#149](https://github.com/broofa/node-mime/issues/149) +- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/node-mime/issues/141) +- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/node-mime/issues/140) +- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/node-mime/issues/130) +- [**closed**] how to support plist? [#126](https://github.com/broofa/node-mime/issues/126) +- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/node-mime/issues/123) +- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/node-mime/issues/121) +- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/node-mime/issues/117) + +--- + +## v1.3.4 (06/02/2015) +*No changelog for this release.* + +--- + +## v1.3.3 (06/02/2015) +*No changelog for this release.* + +--- + +## v1.3.1 (05/02/2015) +- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/node-mime/issues/111) +- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/node-mime/issues/110) +- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/node-mime/issues/94) +- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/node-mime/issues/77) + +--- + +## v1.3.0 (05/02/2015) +- [**closed**] Add common name? [#114](https://github.com/broofa/node-mime/issues/114) +- [**closed**] application/x-yaml [#104](https://github.com/broofa/node-mime/issues/104) +- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/node-mime/issues/102) +- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/node-mime/issues/99) +- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/node-mime/issues/98) +- [**closed**] collaborators [#88](https://github.com/broofa/node-mime/issues/88) +- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/node-mime/issues/87) +- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/node-mime/issues/86) +- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/node-mime/issues/81) +- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/node-mime/issues/68) + +--- + +## v1.2.11 (15/08/2013) +- [**closed**] Update mime.types [#65](https://github.com/broofa/node-mime/issues/65) +- [**closed**] Publish a new version [#63](https://github.com/broofa/node-mime/issues/63) +- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/node-mime/issues/55) +- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/node-mime/issues/52) + +--- + +## v1.2.10 (25/07/2013) +- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/node-mime/issues/62) +- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/node-mime/issues/51) + +--- + +## v1.2.9 (17/01/2013) +- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/node-mime/issues/49) +- [**closed**] Please add semicolon [#46](https://github.com/broofa/node-mime/issues/46) +- [**closed**] parse full mime types [#43](https://github.com/broofa/node-mime/issues/43) + +--- + +## v1.2.8 (10/01/2013) +- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/node-mime/issues/47) +- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/node-mime/issues/45) + +--- + +## v1.2.7 (19/10/2012) +- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/node-mime/issues/41) +- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/node-mime/issues/36) +- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/node-mime/issues/30) +- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/node-mime/issues/27) + +--- + +## v1.2.5 (16/02/2012) +- [**closed**] When looking up a types, check hasOwnProperty [#23](https://github.com/broofa/node-mime/issues/23) +- [**closed**] Bump version to 1.2.2 [#18](https://github.com/broofa/node-mime/issues/18) +- [**closed**] No license [#16](https://github.com/broofa/node-mime/issues/16) +- [**closed**] Some types missing that are used by html5/css3 [#13](https://github.com/broofa/node-mime/issues/13) +- [**closed**] npm install fails for 1.2.1 [#12](https://github.com/broofa/node-mime/issues/12) +- [**closed**] image/pjpeg + image/x-png [#10](https://github.com/broofa/node-mime/issues/10) +- [**closed**] symlink [#8](https://github.com/broofa/node-mime/issues/8) +- [**closed**] gzip [#2](https://github.com/broofa/node-mime/issues/2) +- [**closed**] ALL CAPS filenames return incorrect mime type [#1](https://github.com/broofa/node-mime/issues/1) diff --git a/node_modules/mime/LICENSE b/node_modules/mime/LICENSE new file mode 100644 index 000000000..d3f46f7e1 --- /dev/null +++ b/node_modules/mime/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010 Benjamin Thomas, Robert Kieffer + +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. diff --git a/node_modules/mime/README.md b/node_modules/mime/README.md new file mode 100644 index 000000000..506fbe550 --- /dev/null +++ b/node_modules/mime/README.md @@ -0,0 +1,90 @@ +# mime + +Comprehensive MIME type mapping API based on mime-db module. + +## Install + +Install with [npm](http://github.com/isaacs/npm): + + npm install mime + +## Contributing / Testing + + npm run test + +## Command Line + + mime [path_string] + +E.g. + + > mime scripts/jquery.js + application/javascript + +## API - Queries + +### mime.lookup(path) +Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. + +```js +var mime = require('mime'); + +mime.lookup('/path/to/file.txt'); // => 'text/plain' +mime.lookup('file.txt'); // => 'text/plain' +mime.lookup('.TXT'); // => 'text/plain' +mime.lookup('htm'); // => 'text/html' +``` + +### mime.default_type +Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) + +### mime.extension(type) +Get the default extension for `type` + +```js +mime.extension('text/html'); // => 'html' +mime.extension('application/octet-stream'); // => 'bin' +``` + +### mime.charsets.lookup() + +Map mime-type to charset + +```js +mime.charsets.lookup('text/plain'); // => 'UTF-8' +``` + +(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) + +## API - Defining Custom Types + +Custom type mappings can be added on a per-project basis via the following APIs. + +### mime.define() + +Add custom mime/extension mappings + +```js +mime.define({ + 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], + 'application/x-my-type': ['x-mt', 'x-mtt'], + // etc ... +}); + +mime.lookup('x-sft'); // => 'text/x-some-format' +``` + +The first entry in the extensions array is returned by `mime.extension()`. E.g. + +```js +mime.extension('text/x-some-format'); // => 'x-sf' +``` + +### mime.load(filepath) + +Load mappings from an Apache ".types" format file + +```js +mime.load('./my_project.types'); +``` +The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js new file mode 100755 index 000000000..20b1ffeb2 --- /dev/null +++ b/node_modules/mime/cli.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node + +var mime = require('./mime.js'); +var file = process.argv[2]; +var type = mime.lookup(file); + +process.stdout.write(type + '\n'); + diff --git a/node_modules/mime/mime.js b/node_modules/mime/mime.js new file mode 100644 index 000000000..d7efbde70 --- /dev/null +++ b/node_modules/mime/mime.js @@ -0,0 +1,108 @@ +var path = require('path'); +var fs = require('fs'); + +function Mime() { + // Map of extension -> mime type + this.types = Object.create(null); + + // Map of mime type -> extension + this.extensions = Object.create(null); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ +Mime.prototype.define = function (map) { + for (var type in map) { + var exts = map[type]; + for (var i = 0; i < exts.length; i++) { + if (process.env.DEBUG_MIME && this.types[exts[i]]) { + console.warn((this._loading || "define()").replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + + this.types[exts[i]] + ' to ' + type); + } + + this.types[exts[i]] = type; + } + + // Default extension is the first one we encounter + if (!this.extensions[type]) { + this.extensions[type] = exts[0]; + } + } +}; + +/** + * Load an Apache2-style ".types" file + * + * This may be called multiple times (it's expected). Where files declare + * overlapping types/extensions, the last file wins. + * + * @param file (String) path of file to load. + */ +Mime.prototype.load = function(file) { + this._loading = file; + // Read file and split into lines + var map = {}, + content = fs.readFileSync(file, 'ascii'), + lines = content.split(/[\r\n]+/); + + lines.forEach(function(line) { + // Clean up whitespace/comments, and split into fields + var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); + map[fields.shift()] = fields; + }); + + this.define(map); + + this._loading = null; +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.lookup = function(path, fallback) { + var ext = path.replace(/^.*[\.\/\\]/, '').toLowerCase(); + + return this.types[ext] || fallback || this.default_type; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.extension = function(mimeType) { + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; +}; + +// Default instance +var mime = new Mime(); + +// Define built-in types +mime.define(require('./types.json')); + +// Default type +mime.default_type = mime.lookup('bin'); + +// +// Additional API specific to the default instance +// + +mime.Mime = Mime; + +/** + * Lookup a charset based on mime type. + */ +mime.charsets = { + lookup: function(mimeType, fallback) { + // Assume text types are utf8 + return (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback; + } +}; + +module.exports = mime; diff --git a/node_modules/mime/package.json b/node_modules/mime/package.json new file mode 100644 index 000000000..6bd24bc53 --- /dev/null +++ b/node_modules/mime/package.json @@ -0,0 +1,44 @@ +{ + "author": { + "name": "Robert Kieffer", + "url": "http://github.com/broofa", + "email": "robert@broofa.com" + }, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + }, + "contributors": [ + { + "name": "Benjamin Thomas", + "url": "http://github.com/bentomas", + "email": "benjamin@benjaminthomas.org" + } + ], + "description": "A comprehensive library for mime-type mapping", + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "github-release-notes": "0.13.1", + "mime-db": "1.31.0", + "mime-score": "1.1.0" + }, + "scripts": { + "prepare": "node src/build.js", + "changelog": "gren changelog --tags=all --generate --override", + "test": "node src/test.js" + }, + "keywords": [ + "util", + "mime" + ], + "main": "mime.js", + "name": "mime", + "repository": { + "url": "https://github.com/broofa/node-mime", + "type": "git" + }, + "version": "1.6.0" +} diff --git a/node_modules/mime/src/build.js b/node_modules/mime/src/build.js new file mode 100755 index 000000000..4928e48bc --- /dev/null +++ b/node_modules/mime/src/build.js @@ -0,0 +1,53 @@ +#!/usr/bin/env node + +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const mimeScore = require('mime-score'); + +let db = require('mime-db'); +let chalk = require('chalk'); + +const STANDARD_FACET_SCORE = 900; + +const byExtension = {}; + +// Clear out any conflict extensions in mime-db +for (let type in db) { + let entry = db[type]; + entry.type = type; + + if (!entry.extensions) continue; + + entry.extensions.forEach(ext => { + if (ext in byExtension) { + const e0 = entry; + const e1 = byExtension[ext]; + e0.pri = mimeScore(e0.type, e0.source); + e1.pri = mimeScore(e1.type, e1.source); + + let drop = e0.pri < e1.pri ? e0 : e1; + let keep = e0.pri >= e1.pri ? e0 : e1; + drop.extensions = drop.extensions.filter(e => e !== ext); + + console.log(`${ext}: Keeping ${chalk.green(keep.type)} (${keep.pri}), dropping ${chalk.red(drop.type)} (${drop.pri})`); + } + byExtension[ext] = entry; + }); +} + +function writeTypesFile(types, path) { + fs.writeFileSync(path, JSON.stringify(types)); +} + +// Segregate into standard and non-standard types based on facet per +// https://tools.ietf.org/html/rfc6838#section-3.1 +const types = {}; + +Object.keys(db).sort().forEach(k => { + const entry = db[k]; + types[entry.type] = entry.extensions; +}); + +writeTypesFile(types, path.join(__dirname, '..', 'types.json')); diff --git a/node_modules/mime/src/test.js b/node_modules/mime/src/test.js new file mode 100644 index 000000000..42958a20d --- /dev/null +++ b/node_modules/mime/src/test.js @@ -0,0 +1,60 @@ +/** + * Usage: node test.js + */ + +var mime = require('../mime'); +var assert = require('assert'); +var path = require('path'); + +// +// Test mime lookups +// + +assert.equal('text/plain', mime.lookup('text.txt')); // normal file +assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase +assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file +assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file +assert.equal('text/plain', mime.lookup('.txt')); // nameless +assert.equal('text/plain', mime.lookup('txt')); // extension-only +assert.equal('text/plain', mime.lookup('/txt')); // extension-less () +assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less +assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized +assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +assert.equal('txt', mime.extension(mime.types.text)); +assert.equal('html', mime.extension(mime.types.htm)); +assert.equal('bin', mime.extension('application/octet-stream')); +assert.equal('bin', mime.extension('application/octet-stream ')); +assert.equal('html', mime.extension(' text/html; charset=UTF-8')); +assert.equal('html', mime.extension('text/html; charset=UTF-8 ')); +assert.equal('html', mime.extension('text/html; charset=UTF-8')); +assert.equal('html', mime.extension('text/html ; charset=UTF-8')); +assert.equal('html', mime.extension('text/html;charset=UTF-8')); +assert.equal('html', mime.extension('text/Html;charset=UTF-8')); +assert.equal(undefined, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +assert.equal('font/woff', mime.lookup('file.woff')); +assert.equal('application/octet-stream', mime.lookup('file.buffer')); +// TODO: Uncomment once #157 is resolved +// assert.equal('audio/mp4', mime.lookup('file.m4a')); +assert.equal('font/otf', mime.lookup('file.otf')); + +// +// Test charsets +// + +assert.equal('UTF-8', mime.charsets.lookup('text/plain')); +assert.equal('UTF-8', mime.charsets.lookup(mime.types.js)); +assert.equal('UTF-8', mime.charsets.lookup(mime.types.json)); +assert.equal(undefined, mime.charsets.lookup(mime.types.bin)); +assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); + +console.log('\nAll tests passed'); diff --git a/node_modules/mime/types.json b/node_modules/mime/types.json new file mode 100644 index 000000000..bec78abd4 --- /dev/null +++ b/node_modules/mime/types.json @@ -0,0 +1 @@ +{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":[],"application/font-woff2":[],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":[],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":[],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":[],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":[],"application/x-msdownload":["com","bat"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":[],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":[],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":[],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":[],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":[],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":[],"audio/x-wav":[],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":[],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":[],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":[],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":[],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":[],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} \ No newline at end of file diff --git a/node_modules/minimist/.eslintrc b/node_modules/minimist/.eslintrc new file mode 100644 index 000000000..bd1a5e046 --- /dev/null +++ b/node_modules/minimist/.eslintrc @@ -0,0 +1,29 @@ +{ + "root": true, + + "extends": "@ljharb/eslint-config/node/0.4", + + "rules": { + "array-element-newline": 0, + "complexity": 0, + "func-style": [2, "declaration"], + "max-lines-per-function": 0, + "max-nested-callbacks": 1, + "max-statements-per-line": 1, + "max-statements": 0, + "multiline-comment-style": 0, + "no-continue": 1, + "no-param-reassign": 1, + "no-restricted-syntax": 1, + "object-curly-newline": 0, + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "camelcase": 0, + }, + }, + ] +} diff --git a/node_modules/minimist/.github/FUNDING.yml b/node_modules/minimist/.github/FUNDING.yml new file mode 100644 index 000000000..a9366222e --- /dev/null +++ b/node_modules/minimist/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +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: npm/minimist +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/node_modules/minimist/.nycrc b/node_modules/minimist/.nycrc new file mode 100644 index 000000000..55c3d2936 --- /dev/null +++ b/node_modules/minimist/.nycrc @@ -0,0 +1,14 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "example", + "test" + ] +} diff --git a/node_modules/minimist/CHANGELOG.md b/node_modules/minimist/CHANGELOG.md new file mode 100644 index 000000000..c9a1e15e6 --- /dev/null +++ b/node_modules/minimist/CHANGELOG.md @@ -0,0 +1,298 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) +- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) +- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) +- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) +- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) +- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) +- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) + +## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) +- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) +- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) +- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) +- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) +- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) +- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) +- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) +- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) +- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) +- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) + +## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 + +### Commits + +- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) +- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) +- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) + +## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 + +## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 + +### Commits + +- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) +- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) + +## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 + +### Commits + +- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) +- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) + +## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 + +### Commits + +- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) +- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) +- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) +- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) + +## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 + +### Merged + +- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) + +### Commits + +- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) +- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) + +## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 + +### Commits + +- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) +- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) +- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) +- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) +- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) + +## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 + +### Commits + +- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) +- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) + +## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 + +### Commits + +- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) +- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) +- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) + +## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 + +### Commits + +- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) +- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) +- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) +- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) + +## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 + +### Commits + +- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) +- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) +- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) +- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) + +## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 + +### Commits + +- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) +- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) + +## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) + +## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) + +## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 + +## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 + +### Commits + +- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) + +## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 + +### Commits + +- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) +- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) +- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) + +## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 + +### Commits + +- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) +- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) +- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) +- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) +- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) + +## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 + +### Commits + +- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) + +## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 + +### Commits + +- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) +- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) + +## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 + +### Commits + +- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) + +## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 + +### Commits + +- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) + +## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 + +### Commits + +- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) + +## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 + +## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 + +### Commits + +- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) +- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) + +## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 + +### Commits + +- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) +- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) + +## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 + +### Commits + +- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) + +## v0.0.0 - 2013-06-25 + +### Commits + +- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) +- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) +- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) +- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) +- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) +- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) +- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) +- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) +- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) +- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) +- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE new file mode 100644 index 000000000..ee27ba4b4 --- /dev/null +++ b/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +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. diff --git a/node_modules/minimist/README.md b/node_modules/minimist/README.md new file mode 100644 index 000000000..74da3234b --- /dev/null +++ b/node_modules/minimist/README.md @@ -0,0 +1,121 @@ +# minimist [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ + _: ['foo', 'bar', 'baz'], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' +} +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { + _: ['one', 'two', 'three'], + '--': ['four', 'five', '--six'] + } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/minimist +[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg +[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/minimist.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/minimist.svg +[downloads-url]: https://npm-stat.com/charts.html?package=minimist +[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist +[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js new file mode 100644 index 000000000..9d90ffb26 --- /dev/null +++ b/node_modules/minimist/example/parse.js @@ -0,0 +1,4 @@ +'use strict'; + +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js new file mode 100644 index 000000000..f020f3940 --- /dev/null +++ b/node_modules/minimist/index.js @@ -0,0 +1,263 @@ +'use strict'; + +function hasKey(obj, keys) { + var o = obj; + keys.slice(0, -1).forEach(function (key) { + o = o[key] || {}; + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber(x) { + if (typeof x === 'number') { return true; } + if ((/^0x[0-9a-f]+$/i).test(x)) { return true; } + return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x); +} + +function isConstructorOrProto(obj, key) { + return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__'; +} + +module.exports = function (args, opts) { + if (!opts) { opts = {}; } + + var flags = { + bools: {}, + strings: {}, + unknownFn: null, + }; + + if (typeof opts.unknown === 'function') { + flags.unknownFn = opts.unknown; + } + + if (typeof opts.boolean === 'boolean' && opts.boolean) { + flags.allBools = true; + } else { + [].concat(opts.boolean).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + [].concat(aliases[key]).forEach(function (k) { + flags.strings[k] = true; + }); + } + }); + + var defaults = opts.default || {}; + + var argv = { _: [] }; + + function argDefined(key, arg) { + return (flags.allBools && (/^--[^=]+$/).test(arg)) + || flags.strings[key] + || flags.bools[key] + || aliases[key]; + } + + function setKey(obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length - 1; i++) { + var key = keys[i]; + if (isConstructorOrProto(o, key)) { return; } + if (o[key] === undefined) { o[key] = {}; } + if ( + o[key] === Object.prototype + || o[key] === Number.prototype + || o[key] === String.prototype + ) { + o[key] = {}; + } + if (o[key] === Array.prototype) { o[key] = []; } + o = o[key]; + } + + var lastKey = keys[keys.length - 1]; + if (isConstructorOrProto(o, lastKey)) { return; } + if ( + o === Object.prototype + || o === Number.prototype + || o === String.prototype + ) { + o = {}; + } + if (o === Array.prototype) { o = []; } + if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') { + o[lastKey] = value; + } else if (Array.isArray(o[lastKey])) { + o[lastKey].push(value); + } else { + o[lastKey] = [o[lastKey], value]; + } + } + + function setArg(key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) { return; } + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) + : val; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--') + 1); + args = args.slice(0, args.indexOf('--')); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + var key; + var next; + + if ((/^--.+=/).test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } else if ((/^--no-.+/).test(arg)) { + key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } else if ((/^--.+/).test(arg)) { + key = arg.match(/^--(.+)/)[1]; + next = args[i + 1]; + if ( + next !== undefined + && !(/^(-|--)[^-]/).test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, next, arg); + i += 1; + } else if ((/^(true|false)$/).test(next)) { + setArg(key, next === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } else if ((/^-[^-]+/).test(arg)) { + var letters = arg.slice(1, -1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + + if (next === '-') { + setArg(letters[j], next, arg); + continue; + } + + if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') { + setArg(letters[j], next.slice(1), arg); + broken = true; + break; + } + + if ( + (/[A-Za-z]/).test(letters[j]) + && (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next) + ) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j + 1] && letters[j + 1].match(/\W/)) { + setArg(letters[j], arg.slice(j + 2), arg); + broken = true; + break; + } else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if ( + args[i + 1] + && !(/^(-|--)[^-]/).test(args[i + 1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, args[i + 1], arg); + i += 1; + } else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) { + setArg(key, args[i + 1] === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg)); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (k) { + if (!hasKey(argv, k.split('.'))) { + setKey(argv, k.split('.'), defaults[k]); + + (aliases[k] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[k]); + }); + } + }); + + if (opts['--']) { + argv['--'] = notFlags.slice(); + } else { + notFlags.forEach(function (k) { + argv._.push(k); + }); + } + + return argv; +}; diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json new file mode 100644 index 000000000..c10a33444 --- /dev/null +++ b/node_modules/minimist/package.json @@ -0,0 +1,75 @@ +{ + "name": "minimist", + "version": "1.2.8", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "@ljharb/eslint-config": "^21.0.1", + "aud": "^2.0.2", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.3" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/minimistjs/minimist.git" + }, + "homepage": "https://github.com/minimistjs/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js new file mode 100644 index 000000000..befa0c997 --- /dev/null +++ b/node_modules/minimist/test/all_bool.js @@ -0,0 +1,34 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js new file mode 100644 index 000000000..e58d47e44 --- /dev/null +++ b/node_modules/minimist/test/bool.js @@ -0,0 +1,177 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false }, + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse(['-x', '-z', 'one', 'two', 'three'], { + boolean: ['x', 'y', 'z'], + }); + + t.deepEqual(argv, { + x: true, + y: false, + z: true, + _: ['one', 'two', 'three'], + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var opts = { + alias: { h: 'herp' }, + boolean: 'herp', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var alt = ['--harp', 'derp']; + var opts = { + alias: { h: ['herp', 'harp'] }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = ['-h', 'true']; + var regular = ['--herp', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: [], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function (t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + _: ['true.txt'], + }; + + t.same(result, expected); + t.end(); +}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js new file mode 100644 index 000000000..707881771 --- /dev/null +++ b/node_modules/minimist/test/dash.js @@ -0,0 +1,43 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(6); + t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); + t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); + t.deepEqual(parse(['-']), { _: ['-'] }); + t.deepEqual(parse(['-f-']), { f: '-', _: [] }); + t.deepEqual( + parse(['-b', '-'], { boolean: 'b' }), + { b: true, _: ['-'] } + ); + t.deepEqual( + parse(['-s', '-'], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(2); + t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); + t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); +}); + +test('move arguments after the -- into their own `--` array', function (t) { + t.plan(1); + t.deepEqual( + parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), + { name: 'John', _: ['before'], '--': ['after'] } + ); +}); + +test('--- option value', function (t) { + // A multi-dash value is largely an edge case, but check the behaviour is as expected, + // and in particular the same for short option and long option (as made consistent in Jan 2023). + t.plan(2); + t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); + t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); +}); + diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js new file mode 100644 index 000000000..4e9f6250f --- /dev/null +++ b/node_modules/minimist/test/default_bool.js @@ -0,0 +1,37 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true }, + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false }, + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argv.maybe, null); + + var argvLong = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argvLong.maybe, true); + t.end(); +}); diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js new file mode 100644 index 000000000..126ff033b --- /dev/null +++ b/node_modules/minimist/test/dotted.js @@ -0,0 +1,24 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', { default: { 'a.b': 11 } }); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js new file mode 100644 index 000000000..6d1b53a7a --- /dev/null +++ b/node_modules/minimist/test/kv_short.js @@ -0,0 +1,32 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-b=123']); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-a=whatever', '-b=robots']); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); + +test('short with embedded equals -k=a=b', function (t) { + t.plan(1); + + var argv = parse(['-k=a=b']); + t.deepEqual(argv, { k: 'a=b', _: [] }); +}); + +test('short with later equals like -ab=c', function (t) { + t.plan(1); + + var argv = parse(['-ab=c']); + t.deepEqual(argv, { a: true, b: 'c', _: [] }); +}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js new file mode 100644 index 000000000..9fef51f1f --- /dev/null +++ b/node_modules/minimist/test/long.js @@ -0,0 +1,33 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse(['--bool']), + { bool: true, _: [] }, + 'long boolean' + ); + t.deepEqual( + parse(['--pow', 'xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture sp' + ); + t.deepEqual( + parse(['--pow=xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture eq' + ); + t.deepEqual( + parse(['--host', 'localhost', '--port', '555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures sp' + ); + t.deepEqual( + parse(['--host=localhost', '--port=555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js new file mode 100644 index 000000000..074393eca --- /dev/null +++ b/node_modules/minimist/test/num.js @@ -0,0 +1,38 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789', + ]); + t.deepEqual(argv, { + x: 1234, + y: 5.67, + z: 1e7, + w: '10f', + hex: 0xdeadbeef, + _: [789], + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse(['-x', 1234, 789]); + t.deepEqual(argv, { x: 1234, _: [789] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js new file mode 100644 index 000000000..65d9d9092 --- /dev/null +++ b/node_modules/minimist/test/parse.js @@ -0,0 +1,209 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse(['--no-moo']), + { moo: false, _: [] }, + 'no' + ); + t.deepEqual( + parse(['-v', 'a', '-v', 'b', '-v', 'c']), + { v: ['a', 'b', 'c'], _: [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek', + ]), + { + c: true, + a: true, + t: true, + s: 'woo', + h: 'awesome', + b: true, + bool: true, + key: 'value', + multi: ['quux', 'baz'], + meep: false, + name: 'meowmers', + _: ['bare', '--not-a-flag', 'eek'], + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse(['-t', 'moo'], { boolean: 't' }); + t.deepEqual(argv, { t: true, _: ['moo'] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: ['t', 'verbose'], + default: { verbose: true }, + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params', function (t) { + var args = parse(['-s', 'X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse(['--s=X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + t.end(); +}); + +test('strings', function (t) { + var s = parse(['-s', '0001234'], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse(['-x', '56'], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([' ', ' '], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function (t) { + var s = parse(['-s'], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse(['--str'], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse(['-art'], { + string: ['a', 't'], + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + +test('string and alias', function (t) { + var x = parse(['--str', '000123'], { + string: 's', + alias: { s: 'str' }, + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse(['-s', '000123'], { + string: 'str', + alias: { str: 's' }, + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + + var z = parse(['-s123'], { + alias: { str: ['s', 'S'] }, + string: ['str'], + }); + + t.deepEqual( + z, + { _: [], s: '123', S: '123', str: '123' }, + 'opt.string works with multiple aliases' + ); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse(['-I/foo/bar/baz']), + { I: '/foo/bar/baz', _: [] } + ); + t.same( + parse(['-xyz/foo/bar/baz']), + { x: true, y: true, z: '/foo/bar/baz', _: [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: 'zoom' }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: ['zm', 'zoom'] }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop', + ]); + + t.same(argv.foo, { + bar: 3, + baz: 4, + quux: { + quibble: 5, + o_O: true, + }, + }); + t.same(argv.beep, { boop: true }); + t.end(); +}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js new file mode 100644 index 000000000..32965d130 --- /dev/null +++ b/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,11 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions', function (t) { + t.plan(1); + + var argv = parse(['-b', '123'], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/node_modules/minimist/test/proto.js b/node_modules/minimist/test/proto.js new file mode 100644 index 000000000..6e629dd34 --- /dev/null +++ b/node_modules/minimist/test/proto.js @@ -0,0 +1,64 @@ +'use strict'; + +/* eslint no-proto: 0 */ + +var parse = require('../'); +var test = require('tape'); + +test('proto pollution', function (t) { + var argv = parse(['--__proto__.x', '123']); + t.equal({}.x, undefined); + t.equal(argv.__proto__.x, undefined); + t.equal(argv.x, undefined); + t.end(); +}); + +test('proto pollution (array)', function (t) { + var argv = parse(['--x', '4', '--x', '5', '--x.__proto__.z', '789']); + t.equal({}.z, undefined); + t.deepEqual(argv.x, [4, 5]); + t.equal(argv.x.z, undefined); + t.equal(argv.x.__proto__.z, undefined); + t.end(); +}); + +test('proto pollution (number)', function (t) { + var argv = parse(['--x', '5', '--x.__proto__.z', '100']); + t.equal({}.z, undefined); + t.equal((4).z, undefined); + t.equal(argv.x, 5); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (string)', function (t) { + var argv = parse(['--x', 'abc', '--x.__proto__.z', 'def']); + t.equal({}.z, undefined); + t.equal('...'.z, undefined); + t.equal(argv.x, 'abc'); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (constructor)', function (t) { + var argv = parse(['--constructor.prototype.y', '123']); + t.equal({}.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +test('proto pollution (constructor function)', function (t) { + var argv = parse(['--_.concat.constructor.prototype.y', '123']); + function fnToBeTested() {} + t.equal(fnToBeTested.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +// powered by snyk - https://github.com/backstage/backstage/issues/10343 +test('proto pollution (constructor function) snyk', function (t) { + var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); + t.equal(function () {}.foo, undefined); + t.equal(argv.y, undefined); + t.end(); +}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js new file mode 100644 index 000000000..4a7b84385 --- /dev/null +++ b/node_modules/minimist/test/short.js @@ -0,0 +1,69 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse(['-n123']), { n: 123, _: [] }); + t.deepEqual( + parse(['-123', '456']), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse(['-b']), + { b: true, _: [] }, + 'short boolean' + ); + t.deepEqual( + parse(['foo', 'bar', 'baz']), + { _: ['foo', 'bar', 'baz'] }, + 'bare' + ); + t.deepEqual( + parse(['-cats']), + { c: true, a: true, t: true, s: true, _: [] }, + 'group' + ); + t.deepEqual( + parse(['-cats', 'meow']), + { c: true, a: true, t: true, s: 'meow', _: [] }, + 'short group next' + ); + t.deepEqual( + parse(['-h', 'localhost']), + { h: 'localhost', _: [] }, + 'short capture' + ); + t.deepEqual( + parse(['-h', 'localhost', '-p', '555']), + { h: 'localhost', p: 555, _: [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js new file mode 100644 index 000000000..52a6a9190 --- /dev/null +++ b/node_modules/minimist/test/stop_early.js @@ -0,0 +1,17 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true, + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'], + }); + + t.end(); +}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js new file mode 100644 index 000000000..4f2e0ca44 --- /dev/null +++ b/node_modules/minimist/test/unknown.js @@ -0,0 +1,104 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'true', '--derp', 'true']; + var regular = ['--herp', 'true', '-d', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn, + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [], + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello', '--derp', 'goodbye']; + var regular = ['--herp', 'hello', '-d', 'moon']; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello']; + var regular = ['--herp', 'hello']; + var opts = { + default: { h: 'bar' }, + alias: { h: 'herp' }, + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['--bad', '--', 'good', 'arg']; + var opts = { + '--': true, + unknown: unknownFn, + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + _: [], + }); + t.end(); +}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js new file mode 100644 index 000000000..4fdaf1d39 --- /dev/null +++ b/node_modules/minimist/test/whitespace.js @@ -0,0 +1,10 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace', function (t) { + t.plan(1); + var x = parse(['-x', '\t']).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/mkdirp/LICENSE b/node_modules/mkdirp/LICENSE new file mode 100644 index 000000000..432d1aeb0 --- /dev/null +++ b/node_modules/mkdirp/LICENSE @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +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. diff --git a/node_modules/mkdirp/bin/cmd.js b/node_modules/mkdirp/bin/cmd.js new file mode 100755 index 000000000..d95de15ae --- /dev/null +++ b/node_modules/mkdirp/bin/cmd.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +var mkdirp = require('../'); +var minimist = require('minimist'); +var fs = require('fs'); + +var argv = minimist(process.argv.slice(2), { + alias: { m: 'mode', h: 'help' }, + string: [ 'mode' ] +}); +if (argv.help) { + fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); + return; +} + +var paths = argv._.slice(); +var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; + +(function next () { + if (paths.length === 0) return; + var p = paths.shift(); + + if (mode === undefined) mkdirp(p, cb) + else mkdirp(p, mode, cb) + + function cb (err) { + if (err) { + console.error(err.message); + process.exit(1); + } + else next(); + } +})(); diff --git a/node_modules/mkdirp/bin/usage.txt b/node_modules/mkdirp/bin/usage.txt new file mode 100644 index 000000000..f952aa2c7 --- /dev/null +++ b/node_modules/mkdirp/bin/usage.txt @@ -0,0 +1,12 @@ +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + diff --git a/node_modules/mkdirp/index.js b/node_modules/mkdirp/index.js new file mode 100644 index 000000000..0890ac3bd --- /dev/null +++ b/node_modules/mkdirp/index.js @@ -0,0 +1,102 @@ +var path = require('path'); +var fs = require('fs'); +var _0777 = parseInt('0777', 8); + +module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; + +function mkdirP (p, opts, f, made) { + if (typeof opts === 'function') { + f = opts; + opts = {}; + } + else if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 + } + if (!made) made = null; + + var cb = f || /* istanbul ignore next */ function () {}; + p = path.resolve(p); + + xfs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p; + return cb(null, made); + } + switch (er.code) { + case 'ENOENT': + /* istanbul ignore if */ + if (path.dirname(p) === p) return cb(er); + mkdirP(path.dirname(p), opts, function (er, made) { + /* istanbul ignore if */ + if (er) cb(er, made); + else mkdirP(p, opts, cb, made); + }); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + xfs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); + }); + break; + } + }); +} + +mkdirP.sync = function sync (p, opts, made) { + if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 + } + if (!made) made = null; + + p = path.resolve(p); + + try { + xfs.mkdirSync(p, mode); + made = made || p; + } + catch (err0) { + switch (err0.code) { + case 'ENOENT' : + made = sync(path.dirname(p), opts, made); + sync(p, opts, made); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat; + try { + stat = xfs.statSync(p); + } + catch (err1) /* istanbul ignore next */ { + throw err0; + } + /* istanbul ignore if */ + if (!stat.isDirectory()) throw err0; + break; + } + } + + return made; +}; diff --git a/node_modules/mkdirp/package.json b/node_modules/mkdirp/package.json new file mode 100644 index 000000000..951e58da9 --- /dev/null +++ b/node_modules/mkdirp/package.json @@ -0,0 +1,33 @@ +{ + "name": "mkdirp", + "description": "Recursively mkdir, like `mkdir -p`", + "version": "0.5.6", + "publishConfig": { + "tag": "legacy" + }, + "author": "James Halliday (http://substack.net)", + "main": "index.js", + "keywords": [ + "mkdir", + "directory" + ], + "repository": { + "type": "git", + "url": "https://github.com/substack/node-mkdirp.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "dependencies": { + "minimist": "^1.2.6" + }, + "devDependencies": { + "tap": "^16.0.1" + }, + "bin": "bin/cmd.js", + "license": "MIT", + "files": [ + "bin", + "index.js" + ] +} diff --git a/node_modules/mkdirp/readme.markdown b/node_modules/mkdirp/readme.markdown new file mode 100644 index 000000000..fc314bfbd --- /dev/null +++ b/node_modules/mkdirp/readme.markdown @@ -0,0 +1,100 @@ +# mkdirp + +Like `mkdir -p`, but in node.js! + +[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) + +# example + +## pow.js + +```js +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); +``` + +Output + +``` +pow! +``` + +And now /tmp/foo/bar/baz exists, huzzah! + +# methods + +```js +var mkdirp = require('mkdirp'); +``` + +## mkdirp(dir, opts, cb) + +Create a new directory and any necessary subdirectories at `dir` with octal +permission string `opts.mode`. If `opts` is a non-object, it will be treated as +the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777`. + +`cb(err, made)` fires with the error or the first directory `made` +that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and +`opts.fs.stat(path, cb)`. + +## mkdirp.sync(dir, opts) + +Synchronously create a new directory and any necessary subdirectories at `dir` +with octal permission string `opts.mode`. If `opts` is a non-object, it will be +treated as the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777`. + +Returns the first directory that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and +`opts.fs.statSync(path)`. + +# usage + +This package also ships with a `mkdirp` command. + +``` +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + +``` + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install mkdirp +``` + +to get the library, or + +``` +npm install -g mkdirp +``` + +to get the command. + +# license + +MIT diff --git a/node_modules/oauth-sign/LICENSE b/node_modules/oauth-sign/LICENSE new file mode 100644 index 000000000..a4a9aee0c --- /dev/null +++ b/node_modules/oauth-sign/LICENSE @@ -0,0 +1,55 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/oauth-sign/README.md b/node_modules/oauth-sign/README.md new file mode 100644 index 000000000..34c4a85d2 --- /dev/null +++ b/node_modules/oauth-sign/README.md @@ -0,0 +1,4 @@ +oauth-sign +========== + +OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/node_modules/oauth-sign/index.js b/node_modules/oauth-sign/index.js new file mode 100644 index 000000000..dadcba970 --- /dev/null +++ b/node_modules/oauth-sign/index.js @@ -0,0 +1,136 @@ +var crypto = require('crypto') + , qs = require('querystring') + ; + +function sha1 (key, body) { + return crypto.createHmac('sha1', key).update(body).digest('base64') +} + +function rsa (key, body) { + return crypto.createSign("RSA-SHA1").update(body).sign(key, 'base64'); +} + +function rfc3986 (str) { + return encodeURIComponent(str) + .replace(/!/g,'%21') + .replace(/\*/g,'%2A') + .replace(/\(/g,'%28') + .replace(/\)/g,'%29') + .replace(/'/g,'%27') + ; +} + +// Maps object to bi-dimensional array +// Converts { foo: 'A', bar: [ 'b', 'B' ]} to +// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ] +function map (obj) { + var key, val, arr = [] + for (key in obj) { + val = obj[key] + if (Array.isArray(val)) + for (var i = 0; i < val.length; i++) + arr.push([key, val[i]]) + else if (typeof val === "object") + for (var prop in val) + arr.push([key + '[' + prop + ']', val[prop]]); + else + arr.push([key, val]) + } + return arr +} + +// Compare function for sort +function compare (a, b) { + return a > b ? 1 : a < b ? -1 : 0 +} + +function generateBase (httpMethod, base_uri, params) { + // adapted from https://dev.twitter.com/docs/auth/oauth and + // https://dev.twitter.com/docs/auth/creating-signature + + // Parameter normalization + // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2 + var normalized = map(params) + // 1. First, the name and value of each parameter are encoded + .map(function (p) { + return [ rfc3986(p[0]), rfc3986(p[1] || '') ] + }) + // 2. The parameters are sorted by name, using ascending byte value + // ordering. If two or more parameters share the same name, they + // are sorted by their value. + .sort(function (a, b) { + return compare(a[0], b[0]) || compare(a[1], b[1]) + }) + // 3. The name of each parameter is concatenated to its corresponding + // value using an "=" character (ASCII code 61) as a separator, even + // if the value is empty. + .map(function (p) { return p.join('=') }) + // 4. The sorted name/value pairs are concatenated together into a + // single string by using an "&" character (ASCII code 38) as + // separator. + .join('&') + + var base = [ + rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'), + rfc3986(base_uri), + rfc3986(normalized) + ].join('&') + + return base +} + +function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { + var base = generateBase(httpMethod, base_uri, params) + var key = [ + consumer_secret || '', + token_secret || '' + ].map(rfc3986).join('&') + + return sha1(key, base) +} + +function rsasign (httpMethod, base_uri, params, private_key, token_secret) { + var base = generateBase(httpMethod, base_uri, params) + var key = private_key || '' + + return rsa(key, base) +} + +function plaintext (consumer_secret, token_secret) { + var key = [ + consumer_secret || '', + token_secret || '' + ].map(rfc3986).join('&') + + return key +} + +function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) { + var method + var skipArgs = 1 + + switch (signMethod) { + case 'RSA-SHA1': + method = rsasign + break + case 'HMAC-SHA1': + method = hmacsign + break + case 'PLAINTEXT': + method = plaintext + skipArgs = 4 + break + default: + throw new Error("Signature method not supported: " + signMethod) + } + + return method.apply(null, [].slice.call(arguments, skipArgs)) +} + +exports.hmacsign = hmacsign +exports.rsasign = rsasign +exports.plaintext = plaintext +exports.sign = sign +exports.rfc3986 = rfc3986 +exports.generateBase = generateBase + diff --git a/node_modules/oauth-sign/package.json b/node_modules/oauth-sign/package.json new file mode 100644 index 000000000..4c7991e63 --- /dev/null +++ b/node_modules/oauth-sign/package.json @@ -0,0 +1,23 @@ +{ + "author": "Mikeal Rogers (http://www.futurealoof.com)", + "name": "oauth-sign", + "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", + "version": "0.8.2", + "license": "Apache-2.0", + "repository": { + "url": "https://github.com/mikeal/oauth-sign" + }, + "main": "index.js", + "files": [ + "index.js" + ], + "dependencies": {}, + "devDependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "scripts": { + "test": "node test.js" + } +} diff --git a/node_modules/performance-now/.npmignore b/node_modules/performance-now/.npmignore new file mode 100644 index 000000000..496ee2ca6 --- /dev/null +++ b/node_modules/performance-now/.npmignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/node_modules/performance-now/.tm_properties b/node_modules/performance-now/.tm_properties new file mode 100644 index 000000000..4b8eb3f61 --- /dev/null +++ b/node_modules/performance-now/.tm_properties @@ -0,0 +1,7 @@ +excludeDirectories = "{.git,node_modules}" +excludeInFolderSearch = "{excludeDirectories,lib}" + +includeFiles = "{.gitignore,.npmignore,.travis.yml}" + +[ attr.untitled ] +fileType = 'source.coffee' \ No newline at end of file diff --git a/node_modules/performance-now/.travis.yml b/node_modules/performance-now/.travis.yml new file mode 100644 index 000000000..2ca91f289 --- /dev/null +++ b/node_modules/performance-now/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.10" + - "0.8" \ No newline at end of file diff --git a/node_modules/performance-now/Makefile b/node_modules/performance-now/Makefile new file mode 100644 index 000000000..8a2a565b0 --- /dev/null +++ b/node_modules/performance-now/Makefile @@ -0,0 +1,25 @@ +build: + mkdir -p lib + rm -rf lib/* + node_modules/.bin/coffee --compile --output lib/ src/ + +watch: + node_modules/.bin/coffee --watch --compile --output lib/ src/ + +test: + node_modules/.bin/mocha + +jumpstart: + curl -u 'meryn' https://api.github.com/user/repos -d '{"name":"performance-now", "description":"Implements performance.now (based on process.hrtime).","private":false}' + mkdir -p src + touch src/performance-now.coffee + mkdir -p test + touch test/performance-now.coffee + npm install + git init + git remote add origin git@github.com:meryn/performance-now + git add . + git commit -m "jumpstart commit." + git push -u origin master + +.PHONY: test \ No newline at end of file diff --git a/node_modules/performance-now/README.md b/node_modules/performance-now/README.md new file mode 100644 index 000000000..aefd42a16 --- /dev/null +++ b/node_modules/performance-now/README.md @@ -0,0 +1,30 @@ +# performance-now [![Build Status](https://travis-ci.org/meryn/performance-now.png?branch=master)](https://travis-ci.org/meryn/performance-now) [![Dependency Status](https://david-dm.org/meryn/performance-now.png)](https://david-dm.org/meryn/performance-now) + +Implements a function similar to `performance.now` (based on `process.hrtime`). + +Modern browsers have a `window.performance` object with - among others - a `now` method which gives time in miliseconds, but with sub-milisecond precision. This module offers the same function based on the Node.js native `process.hrtime` function. + +According to the [High Resolution Time specification](http://www.w3.org/TR/hr-time/), the number of miliseconds reported by `performance.now` should be relative to the value of `performance.timing.navigationStart`. For this module, it's relative to when the time when this module got loaded. Right after requiring this module for the first time, the reported time is expected to have a near-zero value. + +Using `process.hrtime` means that the reported time will be monotonically increasing, and not subject to clock-drift. + +## Example usage + +```javascript +var now = require("performance-now") +var start = now() +var end = now() +console.log(start.toFixed(3)) // ~ 0.05 on my system +console.log((start-end).toFixed(3)) // ~ 0.002 on my system +``` + +Running the now function two times right after each other yields a time difference of a few microseconds. Given this overhead, I think it's best to assume that the precision of intervals computed with this method is not higher than 10 microseconds, if you don't know the exact overhead on your own system. + +## Credits + +The initial structure of this module was generated by [Jumpstart](https://github.com/meryn/jumpstart), using the [Jumpstart Black Coffee](https://github.com/meryn/jumpstart-black-coffee) template. + +## License + +performance-now is released under the [MIT License](http://opensource.org/licenses/MIT). +Copyright (c) 2013 Meryn Stol \ No newline at end of file diff --git a/node_modules/performance-now/lib/performance-now.js b/node_modules/performance-now/lib/performance-now.js new file mode 100644 index 000000000..e95d6a821 --- /dev/null +++ b/node_modules/performance-now/lib/performance-now.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.7.1 +(function() { + var getNanoSeconds, hrtime, loadTime; + + if ((typeof performance !== "undefined" && performance !== null) && performance.now) { + module.exports = function() { + return performance.now(); + }; + } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) { + module.exports = function() { + return (getNanoSeconds() - loadTime) / 1e6; + }; + hrtime = process.hrtime; + getNanoSeconds = function() { + var hr; + hr = hrtime(); + return hr[0] * 1e9 + hr[1]; + }; + loadTime = getNanoSeconds(); + } else if (Date.now) { + module.exports = function() { + return Date.now() - loadTime; + }; + loadTime = Date.now(); + } else { + module.exports = function() { + return new Date().getTime() - loadTime; + }; + loadTime = new Date().getTime(); + } + +}).call(this); diff --git a/node_modules/performance-now/license.txt b/node_modules/performance-now/license.txt new file mode 100644 index 000000000..d4facc303 --- /dev/null +++ b/node_modules/performance-now/license.txt @@ -0,0 +1,7 @@ +Copyright (c) 2013 Meryn Stol + +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/node_modules/performance-now/package.json b/node_modules/performance-now/package.json new file mode 100644 index 000000000..db44bb2a4 --- /dev/null +++ b/node_modules/performance-now/package.json @@ -0,0 +1,27 @@ +{ + "name": "performance-now", + "description": "Implements performance.now (based on process.hrtime).", + "keywords": [], + "version": "0.2.0", + "author": "Meryn Stol ", + "license": "MIT", + "homepage": "https://github.com/meryn/performance-now", + "bugs": "https://github.com/meryn/performance-now/issues", + "repository": { + "type": "git", + "url": "git://github.com/meryn/performance-now.git" + }, + "private": false, + "dependencies": {}, + "devDependencies": { + "coffee-script": "~1.7.1", + "mocha": "~1.21.0" + }, + "optionalDependencies": {}, + "main": "lib/performance-now.js", + "scripts": { + "prepublish": "npm test", + "pretest": "make build", + "test": "make test" + } +} diff --git a/node_modules/performance-now/src/performance-now.coffee b/node_modules/performance-now/src/performance-now.coffee new file mode 100644 index 000000000..e752fc5e1 --- /dev/null +++ b/node_modules/performance-now/src/performance-now.coffee @@ -0,0 +1,15 @@ +if performance? and performance.now + module.exports = -> performance.now() +else if process? and process.hrtime + module.exports = -> (getNanoSeconds() - loadTime) / 1e6 + hrtime = process.hrtime + getNanoSeconds = -> + hr = hrtime() + hr[0] * 1e9 + hr[1] + loadTime = getNanoSeconds() +else if Date.now + module.exports = -> Date.now() - loadTime + loadTime = Date.now() +else + module.exports = -> new Date().getTime() - loadTime + loadTime = new Date().getTime() diff --git a/node_modules/performance-now/test/mocha.opts b/node_modules/performance-now/test/mocha.opts new file mode 100644 index 000000000..55d849270 --- /dev/null +++ b/node_modules/performance-now/test/mocha.opts @@ -0,0 +1,3 @@ +--require coffee-script/register +--compilers coffee:coffee-script/register +--reporter spec \ No newline at end of file diff --git a/node_modules/performance-now/test/performance-now.coffee b/node_modules/performance-now/test/performance-now.coffee new file mode 100644 index 000000000..c552b8791 --- /dev/null +++ b/node_modules/performance-now/test/performance-now.coffee @@ -0,0 +1,38 @@ +assert = require "assert" + +delay = (ms, fn) -> setTimeout fn, ms +now = undefined +describe "now", -> + it "initially gives a near zero (< 20 ms) time ", -> + now = require "../" + assert now() < 20 + + it "gives a positive time", -> + assert now() > 0 + + it "two subsequent calls return an increasing number", -> + a = now() + b = now() + assert now() < now() + + it "has less than 10 microseconds overhead", -> + Math.abs(now() - now()) < 0.010 + + it "can do 1,000,000 calls really quickly", -> + now() for i in [0...1000000] + + it "shows that at least 990 ms has passed after a timeout of 1 second", (done) -> + a = now() + delay 1000, -> + b = now() + diff = b - a + return done new Error "Diff (#{diff}) lower than 990." if diff < 990 + return done null + + it "shows that not more than 1020 ms has passed after a timeout of 1 second", (done) -> + a = now() + delay 1000, -> + b = now() + diff = b - a + return done new Error "Diff (#{diff}) higher than 1020." if diff > 1020 + return done null \ No newline at end of file diff --git a/node_modules/promise/.jshintrc b/node_modules/promise/.jshintrc new file mode 100644 index 000000000..47c256f0f --- /dev/null +++ b/node_modules/promise/.jshintrc @@ -0,0 +1,5 @@ +{ + "asi": true, + "node": true, + "strict": true +} diff --git a/node_modules/promise/.npmignore b/node_modules/promise/.npmignore new file mode 100644 index 000000000..ad5be4a64 --- /dev/null +++ b/node_modules/promise/.npmignore @@ -0,0 +1,7 @@ +components +node_modules +test +.gitignore +.travis.yml +component.json +coverage diff --git a/node_modules/promise/LICENSE b/node_modules/promise/LICENSE new file mode 100644 index 000000000..7a1f76364 --- /dev/null +++ b/node_modules/promise/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 Forbes Lindesay + +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. diff --git a/node_modules/promise/Readme.md b/node_modules/promise/Readme.md new file mode 100644 index 000000000..9e281a743 --- /dev/null +++ b/node_modules/promise/Readme.md @@ -0,0 +1,231 @@ + +# promise + +This is a simple implementation of Promises. It is a super set of ES6 Promises designed to have readable, performant code and to provide just the extensions that are absolutely necessary for using promises today. + +For detailed tutorials on its use, see www.promisejs.org + +**N.B.** This promise exposes internals via underscore (`_`) prefixed properties. If you use these, your code will break with each new release. + +[![travis][travis-image]][travis-url] +[![dep][dep-image]][dep-url] +[![npm][npm-image]][npm-url] +[![downloads][downloads-image]][downloads-url] + +[travis-image]: https://img.shields.io/travis/then/promise.svg?style=flat +[travis-url]: https://travis-ci.org/then/promise +[dep-image]: https://img.shields.io/david/then/promise.svg?style=flat +[dep-url]: https://david-dm.org/then/promise +[npm-image]: https://img.shields.io/npm/v/promise.svg?style=flat +[npm-url]: https://npmjs.org/package/promise +[downloads-image]: https://img.shields.io/npm/dm/promise.svg?style=flat +[downloads-url]: https://npmjs.org/package/promise + +## Installation + +**Server:** + + $ npm install promise + +**Client:** + +You can use browserify on the client, or use the pre-compiled script that acts as a polyfill. + +```html + +``` + +Note that the [es5-shim](https://github.com/es-shims/es5-shim) must be loaded before this library to support browsers pre IE9. + +```html + +``` + +## Usage + +The example below shows how you can load the promise library (in a way that works on both client and server using node or browserify). It then demonstrates creating a promise from scratch. You simply call `new Promise(fn)`. There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/). + +```javascript +var Promise = require('promise'); + +var promise = new Promise(function (resolve, reject) { + get('http://www.google.com', function (err, res) { + if (err) reject(err); + else resolve(res); + }); +}); +``` + +If you need [domains](https://iojs.org/api/domain.html) support, you should instead use: + +```js +var Promise = require('promise/domains'); +``` + +If you are in an environment that implements `setImmediate` and don't want the optimisations provided by asap, you can use: + +```js +var Promise = require('promise/setimmediate'); +``` + +If you only want part of the features, e.g. just a pure ES6 polyfill: + +```js +var Promise = require('promise/lib/es6-extensions'); +// or require('promise/domains/es6-extensions'); +// or require('promise/setimmediate/es6-extensions'); +``` + +## Unhandled Rejections + +By default, promises silence any unhandled rejections. + +You can enable logging of unhandled ReferenceErrors and TypeErrors via: + +```js +require('promise/lib/rejection-tracking').enable(); +``` + +Due to the performance cost, you should only do this during development. + +You can enable logging of all unhandled rejections if you need to debug an exception you think is being swallowed by promises: + +```js +require('promise/lib/rejection-tracking').enable( + {allRejections: true} +); +``` + +Due to the high probability of false positives, I only recommend using this when debugging specific issues that you think may be being swallowed. For the preferred debugging method, see `Promise#done(onFulfilled, onRejected)`. + +`rejection-tracking.enable(options)` takes the following options: + + - allRejections (`boolean`) - track all exceptions, not just reference errors and type errors. Note that this has a high probability of resulting in false positives if your code loads data optimisticly + - whitelist (`Array`) - this defaults to `[ReferenceError, TypeError]` but you can override it with your own list of error constructors to track. + - `onUnhandled(id, error)` and `onHandled(id, error)` - you can use these to provide your own customised display for errors. Note that if possible you should indicate that the error was a false positive if `onHandled` is called. `onHandled` is only called if `onUnhandled` has already been called. + +To reduce the chance of false-positives there is a delay of up to 2 seconds before errors are logged. This means that if you attach an error handler within 2 seconds, it won't be logged as a false positive. ReferenceErrors and TypeErrors are only subject to a 100ms delay due to the higher likelihood that the error is due to programmer error. + +## API + +Before all examples, you will need: + +```js +var Promise = require('promise'); +``` + +### new Promise(resolver) + +This creates and returns a new promise. `resolver` must be a function. The `resolver` function is passed two arguments: + + 1. `resolve` should be called with a single argument. If it is called with a non-promise value then the promise is fulfilled with that value. If it is called with a promise (A) then the returned promise takes on the state of that new promise (A). + 2. `reject` should be called with a single argument. The returned promise will be rejected with that argument. + +### Static Functions + + These methods are invoked by calling `Promise.methodName`. + +#### Promise.resolve(value) + +(deprecated aliases: `Promise.from(value)`, `Promise.cast(value)`) + +Converts values and foreign promises into Promises/A+ promises. If you pass it a value then it returns a Promise for that value. If you pass it something that is close to a promise (such as a jQuery attempt at a promise) it returns a Promise that takes on the state of `value` (rejected or fulfilled). + +#### Promise.reject(value) + +Returns a rejected promise with the given value. + +#### Promise.all(array) + +Returns a promise for an array. If it is called with a single argument that `Array.isArray` then this returns a promise for a copy of that array with any promises replaced by their fulfilled values. e.g. + +```js +Promise.all([Promise.resolve('a'), 'b', Promise.resolve('c')]) + .then(function (res) { + assert(res[0] === 'a') + assert(res[1] === 'b') + assert(res[2] === 'c') + }) +``` + +#### Promise.denodeify(fn) + +_Non Standard_ + +Takes a function which accepts a node style callback and returns a new function that returns a promise instead. + +e.g. + +```javascript +var fs = require('fs') + +var read = Promise.denodeify(fs.readFile) +var write = Promise.denodeify(fs.writeFile) + +var p = read('foo.json', 'utf8') + .then(function (str) { + return write('foo.json', JSON.stringify(JSON.parse(str), null, ' '), 'utf8') + }) +``` + +#### Promise.nodeify(fn) + +_Non Standard_ + +The twin to `denodeify` is useful when you want to export an API that can be used by people who haven't learnt about the brilliance of promises yet. + +```javascript +module.exports = Promise.nodeify(awesomeAPI) +function awesomeAPI(a, b) { + return download(a, b) +} +``` + +If the last argument passed to `module.exports` is a function, then it will be treated like a node.js callback and not parsed on to the child function, otherwise the API will just return a promise. + +### Prototype Methods + +These methods are invoked on a promise instance by calling `myPromise.methodName` + +### Promise#then(onFulfilled, onRejected) + +This method follows the [Promises/A+ spec](http://promises-aplus.github.io/promises-spec/). It explains things very clearly so I recommend you read it. + +Either `onFulfilled` or `onRejected` will be called and they will not be called more than once. They will be passed a single argument and will always be called asynchronously (in the next turn of the event loop). + +If the promise is fulfilled then `onFulfilled` is called. If the promise is rejected then `onRejected` is called. + +The call to `.then` also returns a promise. If the handler that is called returns a promise, the promise returned by `.then` takes on the state of that returned promise. If the handler that is called returns a value that is not a promise, the promise returned by `.then` will be fulfilled with that value. If the handler that is called throws an exception then the promise returned by `.then` is rejected with that exception. + +#### Promise#catch(onRejected) + +Sugar for `Promise#then(null, onRejected)`, to mirror `catch` in synchronous code. + +#### Promise#done(onFulfilled, onRejected) + +_Non Standard_ + +The same semantics as `.then` except that it does not return a promise and any exceptions are re-thrown so that they can be logged (crashing the application in non-browser environments) + +#### Promise#nodeify(callback) + +_Non Standard_ + +If `callback` is `null` or `undefined` it just returns `this`. If `callback` is a function it is called with rejection reason as the first argument and result as the second argument (as per the node.js convention). + +This lets you write API functions that look like: + +```javascript +function awesomeAPI(foo, bar, callback) { + return internalAPI(foo, bar) + .then(parseResult) + .then(null, retryErrors) + .nodeify(callback) +} +``` + +People who use typical node.js style callbacks will be able to just pass a callback and get the expected behavior. The enlightened people can not pass a callback and will get awesome promises. + +## License + + MIT diff --git a/node_modules/promise/build.js b/node_modules/promise/build.js new file mode 100644 index 000000000..1e028e9a1 --- /dev/null +++ b/node_modules/promise/build.js @@ -0,0 +1,69 @@ +'use strict'; + +var fs = require('fs'); +var rimraf = require('rimraf'); +var acorn = require('acorn'); +var walk = require('acorn/dist/walk'); + +var ids = []; +var names = {}; + +function getIdFor(name) { + if (name in names) return names[name]; + var id; + do { + id = '_' + Math.floor(Math.random() * 100); + } while (ids.indexOf(id) !== -1) + ids.push(id); + names[name] = id; + return id; +} + +function fixup(src) { + var ast = acorn.parse(src); + src = src.split(''); + walk.simple(ast, { + MemberExpression: function (node) { + if (node.computed) return; + if (node.property.type !== 'Identifier') return; + if (node.property.name[0] !== '_') return; + replace(node.property, getIdFor(node.property.name)); + } + }); + function source(node) { + return src.slice(node.start, node.end).join(''); + } + function replace(node, str) { + for (var i = node.start; i < node.end; i++) { + src[i] = ''; + } + src[node.start] = str; + } + return src.join(''); +} +rimraf.sync(__dirname + '/lib/'); +fs.mkdirSync(__dirname + '/lib/'); +fs.readdirSync(__dirname + '/src').forEach(function (filename) { + var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8'); + var out = fixup(src); + fs.writeFileSync(__dirname + '/lib/' + filename, out); +}); + +rimraf.sync(__dirname + '/domains/'); +fs.mkdirSync(__dirname + '/domains/'); +fs.readdirSync(__dirname + '/src').forEach(function (filename) { + var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8'); + var out = fixup(src); + out = out.replace(/require\(\'asap\/raw\'\)/g, "require('asap')"); + fs.writeFileSync(__dirname + '/domains/' + filename, out); +}); + +rimraf.sync(__dirname + '/setimmediate/'); +fs.mkdirSync(__dirname + '/setimmediate/'); +fs.readdirSync(__dirname + '/src').forEach(function (filename) { + var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8'); + var out = fixup(src); + out = out.replace(/var asap \= require\(\'([a-z\/]+)\'\);/g, ''); + out = out.replace(/asap/g, "setImmediate"); + fs.writeFileSync(__dirname + '/setimmediate/' + filename, out); +}); diff --git a/node_modules/promise/core.js b/node_modules/promise/core.js new file mode 100644 index 000000000..5f332a20e --- /dev/null +++ b/node_modules/promise/core.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = require('./lib/core.js'); + +console.error('require("promise/core") is deprecated, use require("promise/lib/core") instead.'); diff --git a/node_modules/promise/domains/core.js b/node_modules/promise/domains/core.js new file mode 100644 index 000000000..aea441481 --- /dev/null +++ b/node_modules/promise/domains/core.js @@ -0,0 +1,213 @@ +'use strict'; + +var asap = require('asap'); + +function noop() {} + +// States: +// +// 0 - pending +// 1 - fulfilled with _value +// 2 - rejected with _value +// 3 - adopted the state of another promise, _value +// +// once the state is no longer pending (0) it is immutable + +// All `_` prefixed properties will be reduced to `_{random number}` +// at build time to obfuscate them and discourage their use. +// We don't use symbols or Object.defineProperty to fully hide them +// because the performance isn't good enough. + + +// to avoid using try/catch inside critical functions, we +// extract them to here. +var LAST_ERROR = null; +var IS_ERROR = {}; +function getThen(obj) { + try { + return obj.then; + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +function tryCallOne(fn, a) { + try { + return fn(a); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} +function tryCallTwo(fn, a, b) { + try { + fn(a, b); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +module.exports = Promise; + +function Promise(fn) { + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + if (typeof fn !== 'function') { + throw new TypeError('Promise constructor\'s argument is not a function'); + } + this._40 = 0; + this._65 = 0; + this._55 = null; + this._72 = null; + if (fn === noop) return; + doResolve(fn, this); +} +Promise._37 = null; +Promise._87 = null; +Promise._61 = noop; + +Promise.prototype.then = function(onFulfilled, onRejected) { + if (this.constructor !== Promise) { + return safeThen(this, onFulfilled, onRejected); + } + var res = new Promise(noop); + handle(this, new Handler(onFulfilled, onRejected, res)); + return res; +}; + +function safeThen(self, onFulfilled, onRejected) { + return new self.constructor(function (resolve, reject) { + var res = new Promise(noop); + res.then(resolve, reject); + handle(self, new Handler(onFulfilled, onRejected, res)); + }); +} +function handle(self, deferred) { + while (self._65 === 3) { + self = self._55; + } + if (Promise._37) { + Promise._37(self); + } + if (self._65 === 0) { + if (self._40 === 0) { + self._40 = 1; + self._72 = deferred; + return; + } + if (self._40 === 1) { + self._40 = 2; + self._72 = [self._72, deferred]; + return; + } + self._72.push(deferred); + return; + } + handleResolved(self, deferred); +} + +function handleResolved(self, deferred) { + asap(function() { + var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + if (self._65 === 1) { + resolve(deferred.promise, self._55); + } else { + reject(deferred.promise, self._55); + } + return; + } + var ret = tryCallOne(cb, self._55); + if (ret === IS_ERROR) { + reject(deferred.promise, LAST_ERROR); + } else { + resolve(deferred.promise, ret); + } + }); +} +function resolve(self, newValue) { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) { + return reject( + self, + new TypeError('A promise cannot be resolved with itself.') + ); + } + if ( + newValue && + (typeof newValue === 'object' || typeof newValue === 'function') + ) { + var then = getThen(newValue); + if (then === IS_ERROR) { + return reject(self, LAST_ERROR); + } + if ( + then === self.then && + newValue instanceof Promise + ) { + self._65 = 3; + self._55 = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(then.bind(newValue), self); + return; + } + } + self._65 = 1; + self._55 = newValue; + finale(self); +} + +function reject(self, newValue) { + self._65 = 2; + self._55 = newValue; + if (Promise._87) { + Promise._87(self, newValue); + } + finale(self); +} +function finale(self) { + if (self._40 === 1) { + handle(self, self._72); + self._72 = null; + } + if (self._40 === 2) { + for (var i = 0; i < self._72.length; i++) { + handle(self, self._72[i]); + } + self._72 = null; + } +} + +function Handler(onFulfilled, onRejected, promise){ + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; +} + +/** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ +function doResolve(fn, promise) { + var done = false; + var res = tryCallTwo(fn, function (value) { + if (done) return; + done = true; + resolve(promise, value); + }, function (reason) { + if (done) return; + done = true; + reject(promise, reason); + }); + if (!done && res === IS_ERROR) { + done = true; + reject(promise, LAST_ERROR); + } +} diff --git a/node_modules/promise/domains/done.js b/node_modules/promise/domains/done.js new file mode 100644 index 000000000..f879317d0 --- /dev/null +++ b/node_modules/promise/domains/done.js @@ -0,0 +1,13 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype.done = function (onFulfilled, onRejected) { + var self = arguments.length ? this.then.apply(this, arguments) : this; + self.then(null, function (err) { + setTimeout(function () { + throw err; + }, 0); + }); +}; diff --git a/node_modules/promise/domains/es6-extensions.js b/node_modules/promise/domains/es6-extensions.js new file mode 100644 index 000000000..8ab266698 --- /dev/null +++ b/node_modules/promise/domains/es6-extensions.js @@ -0,0 +1,107 @@ +'use strict'; + +//This file contains the ES6 extensions to the core Promises/A+ API + +var Promise = require('./core.js'); + +module.exports = Promise; + +/* Static Functions */ + +var TRUE = valuePromise(true); +var FALSE = valuePromise(false); +var NULL = valuePromise(null); +var UNDEFINED = valuePromise(undefined); +var ZERO = valuePromise(0); +var EMPTYSTRING = valuePromise(''); + +function valuePromise(value) { + var p = new Promise(Promise._61); + p._65 = 1; + p._55 = value; + return p; +} +Promise.resolve = function (value) { + if (value instanceof Promise) return value; + + if (value === null) return NULL; + if (value === undefined) return UNDEFINED; + if (value === true) return TRUE; + if (value === false) return FALSE; + if (value === 0) return ZERO; + if (value === '') return EMPTYSTRING; + + if (typeof value === 'object' || typeof value === 'function') { + try { + var then = value.then; + if (typeof then === 'function') { + return new Promise(then.bind(value)); + } + } catch (ex) { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } + } + return valuePromise(value); +}; + +Promise.all = function (arr) { + var args = Array.prototype.slice.call(arr); + + return new Promise(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + function res(i, val) { + if (val && (typeof val === 'object' || typeof val === 'function')) { + if (val instanceof Promise && val.then === Promise.prototype.then) { + while (val._65 === 3) { + val = val._55; + } + if (val._65 === 1) return res(i, val._55); + if (val._65 === 2) reject(val._55); + val.then(function (val) { + res(i, val); + }, reject); + return; + } else { + var then = val.then; + if (typeof then === 'function') { + var p = new Promise(then.bind(val)); + p.then(function (val) { + res(i, val); + }, reject); + return; + } + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); +}; + +Promise.race = function (values) { + return new Promise(function (resolve, reject) { + values.forEach(function(value){ + Promise.resolve(value).then(resolve, reject); + }); + }); +}; + +/* Prototype Methods */ + +Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); +}; diff --git a/node_modules/promise/domains/finally.js b/node_modules/promise/domains/finally.js new file mode 100644 index 000000000..f5ee0b98a --- /dev/null +++ b/node_modules/promise/domains/finally.js @@ -0,0 +1,16 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype['finally'] = function (f) { + return this.then(function (value) { + return Promise.resolve(f()).then(function () { + return value; + }); + }, function (err) { + return Promise.resolve(f()).then(function () { + throw err; + }); + }); +}; diff --git a/node_modules/promise/domains/index.js b/node_modules/promise/domains/index.js new file mode 100644 index 000000000..6e674f387 --- /dev/null +++ b/node_modules/promise/domains/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = require('./core.js'); +require('./done.js'); +require('./finally.js'); +require('./es6-extensions.js'); +require('./node-extensions.js'); +require('./synchronous.js'); diff --git a/node_modules/promise/domains/node-extensions.js b/node_modules/promise/domains/node-extensions.js new file mode 100644 index 000000000..157cddc2b --- /dev/null +++ b/node_modules/promise/domains/node-extensions.js @@ -0,0 +1,130 @@ +'use strict'; + +// This file contains then/promise specific extensions that are only useful +// for node.js interop + +var Promise = require('./core.js'); +var asap = require('asap'); + +module.exports = Promise; + +/* Static Functions */ + +Promise.denodeify = function (fn, argumentCount) { + if ( + typeof argumentCount === 'number' && argumentCount !== Infinity + ) { + return denodeifyWithCount(fn, argumentCount); + } else { + return denodeifyWithoutCount(fn); + } +}; + +var callbackFn = ( + 'function (err, res) {' + + 'if (err) { rj(err); } else { rs(res); }' + + '}' +); +function denodeifyWithCount(fn, argumentCount) { + var args = []; + for (var i = 0; i < argumentCount; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'return new Promise(function (rs, rj) {', + 'var res = fn.call(', + ['self'].concat(args).concat([callbackFn]).join(','), + ');', + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + return Function(['Promise', 'fn'], body)(Promise, fn); +} +function denodeifyWithoutCount(fn) { + var fnLength = Math.max(fn.length - 1, 3); + var args = []; + for (var i = 0; i < fnLength; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'var args;', + 'var argLength = arguments.length;', + 'if (arguments.length > ' + fnLength + ') {', + 'args = new Array(arguments.length + 1);', + 'for (var i = 0; i < arguments.length; i++) {', + 'args[i] = arguments[i];', + '}', + '}', + 'return new Promise(function (rs, rj) {', + 'var cb = ' + callbackFn + ';', + 'var res;', + 'switch (argLength) {', + args.concat(['extra']).map(function (_, index) { + return ( + 'case ' + (index) + ':' + + 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' + + 'break;' + ); + }).join(''), + 'default:', + 'args[argLength] = cb;', + 'res = fn.apply(self, args);', + '}', + + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + + return Function( + ['Promise', 'fn'], + body + )(Promise, fn); +} + +Promise.nodeify = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + var callback = + typeof args[args.length - 1] === 'function' ? args.pop() : null; + var ctx = this; + try { + return fn.apply(this, arguments).nodeify(callback, ctx); + } catch (ex) { + if (callback === null || typeof callback == 'undefined') { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } else { + asap(function () { + callback.call(ctx, ex); + }) + } + } + } +}; + +Promise.prototype.nodeify = function (callback, ctx) { + if (typeof callback != 'function') return this; + + this.then(function (value) { + asap(function () { + callback.call(ctx, null, value); + }); + }, function (err) { + asap(function () { + callback.call(ctx, err); + }); + }); +}; diff --git a/node_modules/promise/domains/rejection-tracking.js b/node_modules/promise/domains/rejection-tracking.js new file mode 100644 index 000000000..10ccce306 --- /dev/null +++ b/node_modules/promise/domains/rejection-tracking.js @@ -0,0 +1,113 @@ +'use strict'; + +var Promise = require('./core'); + +var DEFAULT_WHITELIST = [ + ReferenceError, + TypeError, + RangeError +]; + +var enabled = false; +exports.disable = disable; +function disable() { + enabled = false; + Promise._37 = null; + Promise._87 = null; +} + +exports.enable = enable; +function enable(options) { + options = options || {}; + if (enabled) disable(); + enabled = true; + var id = 0; + var displayId = 0; + var rejections = {}; + Promise._37 = function (promise) { + if ( + promise._65 === 2 && // IS REJECTED + rejections[promise._51] + ) { + if (rejections[promise._51].logged) { + onHandled(promise._51); + } else { + clearTimeout(rejections[promise._51].timeout); + } + delete rejections[promise._51]; + } + }; + Promise._87 = function (promise, err) { + if (promise._40 === 0) { // not yet handled + promise._51 = id++; + rejections[promise._51] = { + displayId: null, + error: err, + timeout: setTimeout( + onUnhandled.bind(null, promise._51), + // For reference errors and type errors, this almost always + // means the programmer made a mistake, so log them after just + // 100ms + // otherwise, wait 2 seconds to see if they get handled + matchWhitelist(err, DEFAULT_WHITELIST) + ? 100 + : 2000 + ), + logged: false + }; + } + }; + function onUnhandled(id) { + if ( + options.allRejections || + matchWhitelist( + rejections[id].error, + options.whitelist || DEFAULT_WHITELIST + ) + ) { + rejections[id].displayId = displayId++; + if (options.onUnhandled) { + rejections[id].logged = true; + options.onUnhandled( + rejections[id].displayId, + rejections[id].error + ); + } else { + rejections[id].logged = true; + logError( + rejections[id].displayId, + rejections[id].error + ); + } + } + } + function onHandled(id) { + if (rejections[id].logged) { + if (options.onHandled) { + options.onHandled(rejections[id].displayId, rejections[id].error); + } else if (!rejections[id].onUnhandled) { + console.warn( + 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):' + ); + console.warn( + ' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' + + rejections[id].displayId + '.' + ); + } + } + } +} + +function logError(id, error) { + console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):'); + var errStr = (error && (error.stack || error)) + ''; + errStr.split('\n').forEach(function (line) { + console.warn(' ' + line); + }); +} + +function matchWhitelist(error, list) { + return list.some(function (cls) { + return error instanceof cls; + }); +} \ No newline at end of file diff --git a/node_modules/promise/domains/synchronous.js b/node_modules/promise/domains/synchronous.js new file mode 100644 index 000000000..49399644b --- /dev/null +++ b/node_modules/promise/domains/synchronous.js @@ -0,0 +1,62 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.enableSynchronous = function () { + Promise.prototype.isPending = function() { + return this.getState() == 0; + }; + + Promise.prototype.isFulfilled = function() { + return this.getState() == 1; + }; + + Promise.prototype.isRejected = function() { + return this.getState() == 2; + }; + + Promise.prototype.getValue = function () { + if (this._65 === 3) { + return this._55.getValue(); + } + + if (!this.isFulfilled()) { + throw new Error('Cannot get a value of an unfulfilled promise.'); + } + + return this._55; + }; + + Promise.prototype.getReason = function () { + if (this._65 === 3) { + return this._55.getReason(); + } + + if (!this.isRejected()) { + throw new Error('Cannot get a rejection reason of a non-rejected promise.'); + } + + return this._55; + }; + + Promise.prototype.getState = function () { + if (this._65 === 3) { + return this._55.getState(); + } + if (this._65 === -1 || this._65 === -2) { + return 0; + } + + return this._65; + }; +}; + +Promise.disableSynchronous = function() { + Promise.prototype.isPending = undefined; + Promise.prototype.isFulfilled = undefined; + Promise.prototype.isRejected = undefined; + Promise.prototype.getValue = undefined; + Promise.prototype.getReason = undefined; + Promise.prototype.getState = undefined; +}; diff --git a/node_modules/promise/index.d.ts b/node_modules/promise/index.d.ts new file mode 100644 index 000000000..a199cbc90 --- /dev/null +++ b/node_modules/promise/index.d.ts @@ -0,0 +1,256 @@ +interface Thenable { + /** + * Attaches callbacks for the resolution and/or rejection of the ThenPromise. + * @param onfulfilled The callback to execute when the ThenPromise is resolved. + * @param onrejected The callback to execute when the ThenPromise is rejected. + * @returns A ThenPromise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | Thenable) | undefined | null, onrejected?: ((reason: any) => TResult2 | Thenable) | undefined | null): Thenable; +} + +/** + * Represents the completion of an asynchronous operation + */ +interface ThenPromise { + /** + * Attaches callbacks for the resolution and/or rejection of the ThenPromise. + * @param onfulfilled The callback to execute when the ThenPromise is resolved. + * @param onrejected The callback to execute when the ThenPromise is rejected. + * @returns A ThenPromise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | Thenable) | undefined | null, onrejected?: ((reason: any) => TResult2 | Thenable) | undefined | null): ThenPromise; + + /** + * Attaches a callback for only the rejection of the ThenPromise. + * @param onrejected The callback to execute when the ThenPromise is rejected. + * @returns A ThenPromise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | Thenable) | undefined | null): ThenPromise; + + // Extensions specific to then/promise + + /** + * Attaches callbacks for the resolution and/or rejection of the ThenPromise, without returning a new promise. + * @param onfulfilled The callback to execute when the ThenPromise is resolved. + * @param onrejected The callback to execute when the ThenPromise is rejected. + */ + done(onfulfilled?: ((value: T) => any) | undefined | null, onrejected?: ((reason: any) => any) | undefined | null): void; + + + /** + * Calls a node.js style callback. If none is provided, the promise is returned. + */ + nodeify(callback: void | null): ThenPromise; + nodeify(callback: (err: Error, value: T) => void): void; +} + +interface ThenPromiseConstructor { + /** + * A reference to the prototype. + */ + readonly prototype: ThenPromise; + + /** + * Creates a new ThenPromise. + * @param executor A callback used to initialize the promise. This callback is passed two arguments: + * a resolve callback used resolve the promise with a value or the result of another promise, + * and a reject callback used to reject the promise with a provided reason or error. + */ + new (executor: (resolve: (value?: T | Thenable) => void, reject: (reason?: any) => void) => any): ThenPromise; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable, T9 | Thenable, T10 | Thenable]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable, T9 | Thenable]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable, T7 | Thenable]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable, T6 | Thenable]): ThenPromise<[T1, T2, T3, T4, T5, T6]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable , T5 | Thenable]): ThenPromise<[T1, T2, T3, T4, T5]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable ]): ThenPromise<[T1, T2, T3, T4]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable]): ThenPromise<[T1, T2, T3]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: [T1 | Thenable, T2 | Thenable]): ThenPromise<[T1, T2]>; + + /** + * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any ThenPromise is rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + all(values: (T | Thenable)[]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable, T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable, T9 | Thenable, T10 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable, T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable, T9 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable, T5 | Thenable, T6 | Thenable, T7 | Thenable, T8 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable, T5 | Thenable, T6 | Thenable, T7 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable, T5 | Thenable, T6 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable, T5 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable, T4 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable, T3 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: [T1 | Thenable, T2 | Thenable]): ThenPromise; + + /** + * Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new ThenPromise. + */ + race(values: (T | Thenable)[]): ThenPromise; + + /** + * Creates a new rejected promise for the provided reason. + * @param reason The reason the promise was rejected. + * @returns A new rejected ThenPromise. + */ + reject(reason: any): ThenPromise; + + /** + * Creates a new rejected promise for the provided reason. + * @param reason The reason the promise was rejected. + * @returns A new rejected ThenPromise. + */ + reject(reason: any): ThenPromise; + + /** + * Creates a new resolved promise for the provided value. + * @param value A promise. + * @returns A promise whose internal state matches the provided promise. + */ + resolve(value: T | Thenable): ThenPromise; + + /** + * Creates a new resolved promise . + * @returns A resolved promise. + */ + resolve(): ThenPromise; + + // Extensions specific to then/promise + + denodeify: (fn: Function) => (...args: any[]) => ThenPromise; + nodeify: (fn: Function) => Function; +} + +declare var ThenPromise: ThenPromiseConstructor; + +export = ThenPromise; \ No newline at end of file diff --git a/node_modules/promise/index.js b/node_modules/promise/index.js new file mode 100644 index 000000000..1c38e467c --- /dev/null +++ b/node_modules/promise/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib') diff --git a/node_modules/promise/lib/core.js b/node_modules/promise/lib/core.js new file mode 100644 index 000000000..aefc987b6 --- /dev/null +++ b/node_modules/promise/lib/core.js @@ -0,0 +1,213 @@ +'use strict'; + +var asap = require('asap/raw'); + +function noop() {} + +// States: +// +// 0 - pending +// 1 - fulfilled with _value +// 2 - rejected with _value +// 3 - adopted the state of another promise, _value +// +// once the state is no longer pending (0) it is immutable + +// All `_` prefixed properties will be reduced to `_{random number}` +// at build time to obfuscate them and discourage their use. +// We don't use symbols or Object.defineProperty to fully hide them +// because the performance isn't good enough. + + +// to avoid using try/catch inside critical functions, we +// extract them to here. +var LAST_ERROR = null; +var IS_ERROR = {}; +function getThen(obj) { + try { + return obj.then; + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +function tryCallOne(fn, a) { + try { + return fn(a); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} +function tryCallTwo(fn, a, b) { + try { + fn(a, b); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +module.exports = Promise; + +function Promise(fn) { + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + if (typeof fn !== 'function') { + throw new TypeError('Promise constructor\'s argument is not a function'); + } + this._40 = 0; + this._65 = 0; + this._55 = null; + this._72 = null; + if (fn === noop) return; + doResolve(fn, this); +} +Promise._37 = null; +Promise._87 = null; +Promise._61 = noop; + +Promise.prototype.then = function(onFulfilled, onRejected) { + if (this.constructor !== Promise) { + return safeThen(this, onFulfilled, onRejected); + } + var res = new Promise(noop); + handle(this, new Handler(onFulfilled, onRejected, res)); + return res; +}; + +function safeThen(self, onFulfilled, onRejected) { + return new self.constructor(function (resolve, reject) { + var res = new Promise(noop); + res.then(resolve, reject); + handle(self, new Handler(onFulfilled, onRejected, res)); + }); +} +function handle(self, deferred) { + while (self._65 === 3) { + self = self._55; + } + if (Promise._37) { + Promise._37(self); + } + if (self._65 === 0) { + if (self._40 === 0) { + self._40 = 1; + self._72 = deferred; + return; + } + if (self._40 === 1) { + self._40 = 2; + self._72 = [self._72, deferred]; + return; + } + self._72.push(deferred); + return; + } + handleResolved(self, deferred); +} + +function handleResolved(self, deferred) { + asap(function() { + var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + if (self._65 === 1) { + resolve(deferred.promise, self._55); + } else { + reject(deferred.promise, self._55); + } + return; + } + var ret = tryCallOne(cb, self._55); + if (ret === IS_ERROR) { + reject(deferred.promise, LAST_ERROR); + } else { + resolve(deferred.promise, ret); + } + }); +} +function resolve(self, newValue) { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) { + return reject( + self, + new TypeError('A promise cannot be resolved with itself.') + ); + } + if ( + newValue && + (typeof newValue === 'object' || typeof newValue === 'function') + ) { + var then = getThen(newValue); + if (then === IS_ERROR) { + return reject(self, LAST_ERROR); + } + if ( + then === self.then && + newValue instanceof Promise + ) { + self._65 = 3; + self._55 = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(then.bind(newValue), self); + return; + } + } + self._65 = 1; + self._55 = newValue; + finale(self); +} + +function reject(self, newValue) { + self._65 = 2; + self._55 = newValue; + if (Promise._87) { + Promise._87(self, newValue); + } + finale(self); +} +function finale(self) { + if (self._40 === 1) { + handle(self, self._72); + self._72 = null; + } + if (self._40 === 2) { + for (var i = 0; i < self._72.length; i++) { + handle(self, self._72[i]); + } + self._72 = null; + } +} + +function Handler(onFulfilled, onRejected, promise){ + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; +} + +/** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ +function doResolve(fn, promise) { + var done = false; + var res = tryCallTwo(fn, function (value) { + if (done) return; + done = true; + resolve(promise, value); + }, function (reason) { + if (done) return; + done = true; + reject(promise, reason); + }); + if (!done && res === IS_ERROR) { + done = true; + reject(promise, LAST_ERROR); + } +} diff --git a/node_modules/promise/lib/done.js b/node_modules/promise/lib/done.js new file mode 100644 index 000000000..f879317d0 --- /dev/null +++ b/node_modules/promise/lib/done.js @@ -0,0 +1,13 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype.done = function (onFulfilled, onRejected) { + var self = arguments.length ? this.then.apply(this, arguments) : this; + self.then(null, function (err) { + setTimeout(function () { + throw err; + }, 0); + }); +}; diff --git a/node_modules/promise/lib/es6-extensions.js b/node_modules/promise/lib/es6-extensions.js new file mode 100644 index 000000000..8ab266698 --- /dev/null +++ b/node_modules/promise/lib/es6-extensions.js @@ -0,0 +1,107 @@ +'use strict'; + +//This file contains the ES6 extensions to the core Promises/A+ API + +var Promise = require('./core.js'); + +module.exports = Promise; + +/* Static Functions */ + +var TRUE = valuePromise(true); +var FALSE = valuePromise(false); +var NULL = valuePromise(null); +var UNDEFINED = valuePromise(undefined); +var ZERO = valuePromise(0); +var EMPTYSTRING = valuePromise(''); + +function valuePromise(value) { + var p = new Promise(Promise._61); + p._65 = 1; + p._55 = value; + return p; +} +Promise.resolve = function (value) { + if (value instanceof Promise) return value; + + if (value === null) return NULL; + if (value === undefined) return UNDEFINED; + if (value === true) return TRUE; + if (value === false) return FALSE; + if (value === 0) return ZERO; + if (value === '') return EMPTYSTRING; + + if (typeof value === 'object' || typeof value === 'function') { + try { + var then = value.then; + if (typeof then === 'function') { + return new Promise(then.bind(value)); + } + } catch (ex) { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } + } + return valuePromise(value); +}; + +Promise.all = function (arr) { + var args = Array.prototype.slice.call(arr); + + return new Promise(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + function res(i, val) { + if (val && (typeof val === 'object' || typeof val === 'function')) { + if (val instanceof Promise && val.then === Promise.prototype.then) { + while (val._65 === 3) { + val = val._55; + } + if (val._65 === 1) return res(i, val._55); + if (val._65 === 2) reject(val._55); + val.then(function (val) { + res(i, val); + }, reject); + return; + } else { + var then = val.then; + if (typeof then === 'function') { + var p = new Promise(then.bind(val)); + p.then(function (val) { + res(i, val); + }, reject); + return; + } + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); +}; + +Promise.race = function (values) { + return new Promise(function (resolve, reject) { + values.forEach(function(value){ + Promise.resolve(value).then(resolve, reject); + }); + }); +}; + +/* Prototype Methods */ + +Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); +}; diff --git a/node_modules/promise/lib/finally.js b/node_modules/promise/lib/finally.js new file mode 100644 index 000000000..f5ee0b98a --- /dev/null +++ b/node_modules/promise/lib/finally.js @@ -0,0 +1,16 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype['finally'] = function (f) { + return this.then(function (value) { + return Promise.resolve(f()).then(function () { + return value; + }); + }, function (err) { + return Promise.resolve(f()).then(function () { + throw err; + }); + }); +}; diff --git a/node_modules/promise/lib/index.js b/node_modules/promise/lib/index.js new file mode 100644 index 000000000..6e674f387 --- /dev/null +++ b/node_modules/promise/lib/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = require('./core.js'); +require('./done.js'); +require('./finally.js'); +require('./es6-extensions.js'); +require('./node-extensions.js'); +require('./synchronous.js'); diff --git a/node_modules/promise/lib/node-extensions.js b/node_modules/promise/lib/node-extensions.js new file mode 100644 index 000000000..157cddc2b --- /dev/null +++ b/node_modules/promise/lib/node-extensions.js @@ -0,0 +1,130 @@ +'use strict'; + +// This file contains then/promise specific extensions that are only useful +// for node.js interop + +var Promise = require('./core.js'); +var asap = require('asap'); + +module.exports = Promise; + +/* Static Functions */ + +Promise.denodeify = function (fn, argumentCount) { + if ( + typeof argumentCount === 'number' && argumentCount !== Infinity + ) { + return denodeifyWithCount(fn, argumentCount); + } else { + return denodeifyWithoutCount(fn); + } +}; + +var callbackFn = ( + 'function (err, res) {' + + 'if (err) { rj(err); } else { rs(res); }' + + '}' +); +function denodeifyWithCount(fn, argumentCount) { + var args = []; + for (var i = 0; i < argumentCount; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'return new Promise(function (rs, rj) {', + 'var res = fn.call(', + ['self'].concat(args).concat([callbackFn]).join(','), + ');', + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + return Function(['Promise', 'fn'], body)(Promise, fn); +} +function denodeifyWithoutCount(fn) { + var fnLength = Math.max(fn.length - 1, 3); + var args = []; + for (var i = 0; i < fnLength; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'var args;', + 'var argLength = arguments.length;', + 'if (arguments.length > ' + fnLength + ') {', + 'args = new Array(arguments.length + 1);', + 'for (var i = 0; i < arguments.length; i++) {', + 'args[i] = arguments[i];', + '}', + '}', + 'return new Promise(function (rs, rj) {', + 'var cb = ' + callbackFn + ';', + 'var res;', + 'switch (argLength) {', + args.concat(['extra']).map(function (_, index) { + return ( + 'case ' + (index) + ':' + + 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' + + 'break;' + ); + }).join(''), + 'default:', + 'args[argLength] = cb;', + 'res = fn.apply(self, args);', + '}', + + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + + return Function( + ['Promise', 'fn'], + body + )(Promise, fn); +} + +Promise.nodeify = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + var callback = + typeof args[args.length - 1] === 'function' ? args.pop() : null; + var ctx = this; + try { + return fn.apply(this, arguments).nodeify(callback, ctx); + } catch (ex) { + if (callback === null || typeof callback == 'undefined') { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } else { + asap(function () { + callback.call(ctx, ex); + }) + } + } + } +}; + +Promise.prototype.nodeify = function (callback, ctx) { + if (typeof callback != 'function') return this; + + this.then(function (value) { + asap(function () { + callback.call(ctx, null, value); + }); + }, function (err) { + asap(function () { + callback.call(ctx, err); + }); + }); +}; diff --git a/node_modules/promise/lib/rejection-tracking.js b/node_modules/promise/lib/rejection-tracking.js new file mode 100644 index 000000000..10ccce306 --- /dev/null +++ b/node_modules/promise/lib/rejection-tracking.js @@ -0,0 +1,113 @@ +'use strict'; + +var Promise = require('./core'); + +var DEFAULT_WHITELIST = [ + ReferenceError, + TypeError, + RangeError +]; + +var enabled = false; +exports.disable = disable; +function disable() { + enabled = false; + Promise._37 = null; + Promise._87 = null; +} + +exports.enable = enable; +function enable(options) { + options = options || {}; + if (enabled) disable(); + enabled = true; + var id = 0; + var displayId = 0; + var rejections = {}; + Promise._37 = function (promise) { + if ( + promise._65 === 2 && // IS REJECTED + rejections[promise._51] + ) { + if (rejections[promise._51].logged) { + onHandled(promise._51); + } else { + clearTimeout(rejections[promise._51].timeout); + } + delete rejections[promise._51]; + } + }; + Promise._87 = function (promise, err) { + if (promise._40 === 0) { // not yet handled + promise._51 = id++; + rejections[promise._51] = { + displayId: null, + error: err, + timeout: setTimeout( + onUnhandled.bind(null, promise._51), + // For reference errors and type errors, this almost always + // means the programmer made a mistake, so log them after just + // 100ms + // otherwise, wait 2 seconds to see if they get handled + matchWhitelist(err, DEFAULT_WHITELIST) + ? 100 + : 2000 + ), + logged: false + }; + } + }; + function onUnhandled(id) { + if ( + options.allRejections || + matchWhitelist( + rejections[id].error, + options.whitelist || DEFAULT_WHITELIST + ) + ) { + rejections[id].displayId = displayId++; + if (options.onUnhandled) { + rejections[id].logged = true; + options.onUnhandled( + rejections[id].displayId, + rejections[id].error + ); + } else { + rejections[id].logged = true; + logError( + rejections[id].displayId, + rejections[id].error + ); + } + } + } + function onHandled(id) { + if (rejections[id].logged) { + if (options.onHandled) { + options.onHandled(rejections[id].displayId, rejections[id].error); + } else if (!rejections[id].onUnhandled) { + console.warn( + 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):' + ); + console.warn( + ' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' + + rejections[id].displayId + '.' + ); + } + } + } +} + +function logError(id, error) { + console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):'); + var errStr = (error && (error.stack || error)) + ''; + errStr.split('\n').forEach(function (line) { + console.warn(' ' + line); + }); +} + +function matchWhitelist(error, list) { + return list.some(function (cls) { + return error instanceof cls; + }); +} \ No newline at end of file diff --git a/node_modules/promise/lib/synchronous.js b/node_modules/promise/lib/synchronous.js new file mode 100644 index 000000000..49399644b --- /dev/null +++ b/node_modules/promise/lib/synchronous.js @@ -0,0 +1,62 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.enableSynchronous = function () { + Promise.prototype.isPending = function() { + return this.getState() == 0; + }; + + Promise.prototype.isFulfilled = function() { + return this.getState() == 1; + }; + + Promise.prototype.isRejected = function() { + return this.getState() == 2; + }; + + Promise.prototype.getValue = function () { + if (this._65 === 3) { + return this._55.getValue(); + } + + if (!this.isFulfilled()) { + throw new Error('Cannot get a value of an unfulfilled promise.'); + } + + return this._55; + }; + + Promise.prototype.getReason = function () { + if (this._65 === 3) { + return this._55.getReason(); + } + + if (!this.isRejected()) { + throw new Error('Cannot get a rejection reason of a non-rejected promise.'); + } + + return this._55; + }; + + Promise.prototype.getState = function () { + if (this._65 === 3) { + return this._55.getState(); + } + if (this._65 === -1 || this._65 === -2) { + return 0; + } + + return this._65; + }; +}; + +Promise.disableSynchronous = function() { + Promise.prototype.isPending = undefined; + Promise.prototype.isFulfilled = undefined; + Promise.prototype.isRejected = undefined; + Promise.prototype.getValue = undefined; + Promise.prototype.getReason = undefined; + Promise.prototype.getState = undefined; +}; diff --git a/node_modules/promise/package.json b/node_modules/promise/package.json new file mode 100644 index 000000000..6f605ea96 --- /dev/null +++ b/node_modules/promise/package.json @@ -0,0 +1,35 @@ +{ + "name": "promise", + "version": "7.3.1", + "description": "Bare bones Promises/A+ implementation", + "main": "index.js", + "scripts": { + "prepublish": "node build", + "pretest": "node build", + "pretest-resolve": "node build", + "pretest-extensions": "node build", + "pretest-memory-leak": "node build", + "test": "mocha --bail --timeout 200 --slow 99999 -R dot && npm run test-memory-leak", + "test-resolve": "mocha test/resolver-tests.js --timeout 200 --slow 999999", + "test-extensions": "mocha test/extensions-tests.js --timeout 200 --slow 999999", + "test-memory-leak": "node --expose-gc test/memory-leak.js", + "coverage": "istanbul cover node_modules/mocha/bin/_mocha -- --bail --timeout 200 --slow 99999 -R dot" + }, + "repository": { + "type": "git", + "url": "https://github.com/then/promise.git" + }, + "author": "ForbesLindesay", + "license": "MIT", + "devDependencies": { + "acorn": "^1.0.1", + "better-assert": "*", + "istanbul": "^0.3.13", + "mocha": "*", + "promises-aplus-tests": "*", + "rimraf": "^2.3.2" + }, + "dependencies": { + "asap": "~2.0.3" + } +} \ No newline at end of file diff --git a/node_modules/promise/polyfill-done.js b/node_modules/promise/polyfill-done.js new file mode 100644 index 000000000..e50b4c0e8 --- /dev/null +++ b/node_modules/promise/polyfill-done.js @@ -0,0 +1,12 @@ +// should work in any browser without browserify + +if (typeof Promise.prototype.done !== 'function') { + Promise.prototype.done = function (onFulfilled, onRejected) { + var self = arguments.length ? this.then.apply(this, arguments) : this + self.then(null, function (err) { + setTimeout(function () { + throw err + }, 0) + }) + } +} \ No newline at end of file diff --git a/node_modules/promise/polyfill.js b/node_modules/promise/polyfill.js new file mode 100644 index 000000000..db099f8ee --- /dev/null +++ b/node_modules/promise/polyfill.js @@ -0,0 +1,10 @@ +// not "use strict" so we can declare global "Promise" + +var asap = require('asap'); + +if (typeof Promise === 'undefined') { + Promise = require('./lib/core.js') + require('./lib/es6-extensions.js') +} + +require('./polyfill-done.js'); diff --git a/node_modules/promise/setimmediate/core.js b/node_modules/promise/setimmediate/core.js new file mode 100644 index 000000000..a84fb3da0 --- /dev/null +++ b/node_modules/promise/setimmediate/core.js @@ -0,0 +1,213 @@ +'use strict'; + + + +function noop() {} + +// States: +// +// 0 - pending +// 1 - fulfilled with _value +// 2 - rejected with _value +// 3 - adopted the state of another promise, _value +// +// once the state is no longer pending (0) it is immutable + +// All `_` prefixed properties will be reduced to `_{random number}` +// at build time to obfuscate them and discourage their use. +// We don't use symbols or Object.defineProperty to fully hide them +// because the performance isn't good enough. + + +// to avoid using try/catch inside critical functions, we +// extract them to here. +var LAST_ERROR = null; +var IS_ERROR = {}; +function getThen(obj) { + try { + return obj.then; + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +function tryCallOne(fn, a) { + try { + return fn(a); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} +function tryCallTwo(fn, a, b) { + try { + fn(a, b); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +module.exports = Promise; + +function Promise(fn) { + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + if (typeof fn !== 'function') { + throw new TypeError('Promise constructor\'s argument is not a function'); + } + this._40 = 0; + this._65 = 0; + this._55 = null; + this._72 = null; + if (fn === noop) return; + doResolve(fn, this); +} +Promise._37 = null; +Promise._87 = null; +Promise._61 = noop; + +Promise.prototype.then = function(onFulfilled, onRejected) { + if (this.constructor !== Promise) { + return safeThen(this, onFulfilled, onRejected); + } + var res = new Promise(noop); + handle(this, new Handler(onFulfilled, onRejected, res)); + return res; +}; + +function safeThen(self, onFulfilled, onRejected) { + return new self.constructor(function (resolve, reject) { + var res = new Promise(noop); + res.then(resolve, reject); + handle(self, new Handler(onFulfilled, onRejected, res)); + }); +} +function handle(self, deferred) { + while (self._65 === 3) { + self = self._55; + } + if (Promise._37) { + Promise._37(self); + } + if (self._65 === 0) { + if (self._40 === 0) { + self._40 = 1; + self._72 = deferred; + return; + } + if (self._40 === 1) { + self._40 = 2; + self._72 = [self._72, deferred]; + return; + } + self._72.push(deferred); + return; + } + handleResolved(self, deferred); +} + +function handleResolved(self, deferred) { + setImmediate(function() { + var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + if (self._65 === 1) { + resolve(deferred.promise, self._55); + } else { + reject(deferred.promise, self._55); + } + return; + } + var ret = tryCallOne(cb, self._55); + if (ret === IS_ERROR) { + reject(deferred.promise, LAST_ERROR); + } else { + resolve(deferred.promise, ret); + } + }); +} +function resolve(self, newValue) { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) { + return reject( + self, + new TypeError('A promise cannot be resolved with itself.') + ); + } + if ( + newValue && + (typeof newValue === 'object' || typeof newValue === 'function') + ) { + var then = getThen(newValue); + if (then === IS_ERROR) { + return reject(self, LAST_ERROR); + } + if ( + then === self.then && + newValue instanceof Promise + ) { + self._65 = 3; + self._55 = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(then.bind(newValue), self); + return; + } + } + self._65 = 1; + self._55 = newValue; + finale(self); +} + +function reject(self, newValue) { + self._65 = 2; + self._55 = newValue; + if (Promise._87) { + Promise._87(self, newValue); + } + finale(self); +} +function finale(self) { + if (self._40 === 1) { + handle(self, self._72); + self._72 = null; + } + if (self._40 === 2) { + for (var i = 0; i < self._72.length; i++) { + handle(self, self._72[i]); + } + self._72 = null; + } +} + +function Handler(onFulfilled, onRejected, promise){ + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; +} + +/** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ +function doResolve(fn, promise) { + var done = false; + var res = tryCallTwo(fn, function (value) { + if (done) return; + done = true; + resolve(promise, value); + }, function (reason) { + if (done) return; + done = true; + reject(promise, reason); + }); + if (!done && res === IS_ERROR) { + done = true; + reject(promise, LAST_ERROR); + } +} diff --git a/node_modules/promise/setimmediate/done.js b/node_modules/promise/setimmediate/done.js new file mode 100644 index 000000000..f879317d0 --- /dev/null +++ b/node_modules/promise/setimmediate/done.js @@ -0,0 +1,13 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype.done = function (onFulfilled, onRejected) { + var self = arguments.length ? this.then.apply(this, arguments) : this; + self.then(null, function (err) { + setTimeout(function () { + throw err; + }, 0); + }); +}; diff --git a/node_modules/promise/setimmediate/es6-extensions.js b/node_modules/promise/setimmediate/es6-extensions.js new file mode 100644 index 000000000..8ab266698 --- /dev/null +++ b/node_modules/promise/setimmediate/es6-extensions.js @@ -0,0 +1,107 @@ +'use strict'; + +//This file contains the ES6 extensions to the core Promises/A+ API + +var Promise = require('./core.js'); + +module.exports = Promise; + +/* Static Functions */ + +var TRUE = valuePromise(true); +var FALSE = valuePromise(false); +var NULL = valuePromise(null); +var UNDEFINED = valuePromise(undefined); +var ZERO = valuePromise(0); +var EMPTYSTRING = valuePromise(''); + +function valuePromise(value) { + var p = new Promise(Promise._61); + p._65 = 1; + p._55 = value; + return p; +} +Promise.resolve = function (value) { + if (value instanceof Promise) return value; + + if (value === null) return NULL; + if (value === undefined) return UNDEFINED; + if (value === true) return TRUE; + if (value === false) return FALSE; + if (value === 0) return ZERO; + if (value === '') return EMPTYSTRING; + + if (typeof value === 'object' || typeof value === 'function') { + try { + var then = value.then; + if (typeof then === 'function') { + return new Promise(then.bind(value)); + } + } catch (ex) { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } + } + return valuePromise(value); +}; + +Promise.all = function (arr) { + var args = Array.prototype.slice.call(arr); + + return new Promise(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + function res(i, val) { + if (val && (typeof val === 'object' || typeof val === 'function')) { + if (val instanceof Promise && val.then === Promise.prototype.then) { + while (val._65 === 3) { + val = val._55; + } + if (val._65 === 1) return res(i, val._55); + if (val._65 === 2) reject(val._55); + val.then(function (val) { + res(i, val); + }, reject); + return; + } else { + var then = val.then; + if (typeof then === 'function') { + var p = new Promise(then.bind(val)); + p.then(function (val) { + res(i, val); + }, reject); + return; + } + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); +}; + +Promise.race = function (values) { + return new Promise(function (resolve, reject) { + values.forEach(function(value){ + Promise.resolve(value).then(resolve, reject); + }); + }); +}; + +/* Prototype Methods */ + +Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); +}; diff --git a/node_modules/promise/setimmediate/finally.js b/node_modules/promise/setimmediate/finally.js new file mode 100644 index 000000000..f5ee0b98a --- /dev/null +++ b/node_modules/promise/setimmediate/finally.js @@ -0,0 +1,16 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype['finally'] = function (f) { + return this.then(function (value) { + return Promise.resolve(f()).then(function () { + return value; + }); + }, function (err) { + return Promise.resolve(f()).then(function () { + throw err; + }); + }); +}; diff --git a/node_modules/promise/setimmediate/index.js b/node_modules/promise/setimmediate/index.js new file mode 100644 index 000000000..6e674f387 --- /dev/null +++ b/node_modules/promise/setimmediate/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = require('./core.js'); +require('./done.js'); +require('./finally.js'); +require('./es6-extensions.js'); +require('./node-extensions.js'); +require('./synchronous.js'); diff --git a/node_modules/promise/setimmediate/node-extensions.js b/node_modules/promise/setimmediate/node-extensions.js new file mode 100644 index 000000000..f03e861d8 --- /dev/null +++ b/node_modules/promise/setimmediate/node-extensions.js @@ -0,0 +1,130 @@ +'use strict'; + +// This file contains then/promise specific extensions that are only useful +// for node.js interop + +var Promise = require('./core.js'); + + +module.exports = Promise; + +/* Static Functions */ + +Promise.denodeify = function (fn, argumentCount) { + if ( + typeof argumentCount === 'number' && argumentCount !== Infinity + ) { + return denodeifyWithCount(fn, argumentCount); + } else { + return denodeifyWithoutCount(fn); + } +}; + +var callbackFn = ( + 'function (err, res) {' + + 'if (err) { rj(err); } else { rs(res); }' + + '}' +); +function denodeifyWithCount(fn, argumentCount) { + var args = []; + for (var i = 0; i < argumentCount; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'return new Promise(function (rs, rj) {', + 'var res = fn.call(', + ['self'].concat(args).concat([callbackFn]).join(','), + ');', + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + return Function(['Promise', 'fn'], body)(Promise, fn); +} +function denodeifyWithoutCount(fn) { + var fnLength = Math.max(fn.length - 1, 3); + var args = []; + for (var i = 0; i < fnLength; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'var args;', + 'var argLength = arguments.length;', + 'if (arguments.length > ' + fnLength + ') {', + 'args = new Array(arguments.length + 1);', + 'for (var i = 0; i < arguments.length; i++) {', + 'args[i] = arguments[i];', + '}', + '}', + 'return new Promise(function (rs, rj) {', + 'var cb = ' + callbackFn + ';', + 'var res;', + 'switch (argLength) {', + args.concat(['extra']).map(function (_, index) { + return ( + 'case ' + (index) + ':' + + 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' + + 'break;' + ); + }).join(''), + 'default:', + 'args[argLength] = cb;', + 'res = fn.apply(self, args);', + '}', + + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + + return Function( + ['Promise', 'fn'], + body + )(Promise, fn); +} + +Promise.nodeify = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + var callback = + typeof args[args.length - 1] === 'function' ? args.pop() : null; + var ctx = this; + try { + return fn.apply(this, arguments).nodeify(callback, ctx); + } catch (ex) { + if (callback === null || typeof callback == 'undefined') { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } else { + setImmediate(function () { + callback.call(ctx, ex); + }) + } + } + } +}; + +Promise.prototype.nodeify = function (callback, ctx) { + if (typeof callback != 'function') return this; + + this.then(function (value) { + setImmediate(function () { + callback.call(ctx, null, value); + }); + }, function (err) { + setImmediate(function () { + callback.call(ctx, err); + }); + }); +}; diff --git a/node_modules/promise/setimmediate/rejection-tracking.js b/node_modules/promise/setimmediate/rejection-tracking.js new file mode 100644 index 000000000..10ccce306 --- /dev/null +++ b/node_modules/promise/setimmediate/rejection-tracking.js @@ -0,0 +1,113 @@ +'use strict'; + +var Promise = require('./core'); + +var DEFAULT_WHITELIST = [ + ReferenceError, + TypeError, + RangeError +]; + +var enabled = false; +exports.disable = disable; +function disable() { + enabled = false; + Promise._37 = null; + Promise._87 = null; +} + +exports.enable = enable; +function enable(options) { + options = options || {}; + if (enabled) disable(); + enabled = true; + var id = 0; + var displayId = 0; + var rejections = {}; + Promise._37 = function (promise) { + if ( + promise._65 === 2 && // IS REJECTED + rejections[promise._51] + ) { + if (rejections[promise._51].logged) { + onHandled(promise._51); + } else { + clearTimeout(rejections[promise._51].timeout); + } + delete rejections[promise._51]; + } + }; + Promise._87 = function (promise, err) { + if (promise._40 === 0) { // not yet handled + promise._51 = id++; + rejections[promise._51] = { + displayId: null, + error: err, + timeout: setTimeout( + onUnhandled.bind(null, promise._51), + // For reference errors and type errors, this almost always + // means the programmer made a mistake, so log them after just + // 100ms + // otherwise, wait 2 seconds to see if they get handled + matchWhitelist(err, DEFAULT_WHITELIST) + ? 100 + : 2000 + ), + logged: false + }; + } + }; + function onUnhandled(id) { + if ( + options.allRejections || + matchWhitelist( + rejections[id].error, + options.whitelist || DEFAULT_WHITELIST + ) + ) { + rejections[id].displayId = displayId++; + if (options.onUnhandled) { + rejections[id].logged = true; + options.onUnhandled( + rejections[id].displayId, + rejections[id].error + ); + } else { + rejections[id].logged = true; + logError( + rejections[id].displayId, + rejections[id].error + ); + } + } + } + function onHandled(id) { + if (rejections[id].logged) { + if (options.onHandled) { + options.onHandled(rejections[id].displayId, rejections[id].error); + } else if (!rejections[id].onUnhandled) { + console.warn( + 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):' + ); + console.warn( + ' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' + + rejections[id].displayId + '.' + ); + } + } + } +} + +function logError(id, error) { + console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):'); + var errStr = (error && (error.stack || error)) + ''; + errStr.split('\n').forEach(function (line) { + console.warn(' ' + line); + }); +} + +function matchWhitelist(error, list) { + return list.some(function (cls) { + return error instanceof cls; + }); +} \ No newline at end of file diff --git a/node_modules/promise/setimmediate/synchronous.js b/node_modules/promise/setimmediate/synchronous.js new file mode 100644 index 000000000..49399644b --- /dev/null +++ b/node_modules/promise/setimmediate/synchronous.js @@ -0,0 +1,62 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.enableSynchronous = function () { + Promise.prototype.isPending = function() { + return this.getState() == 0; + }; + + Promise.prototype.isFulfilled = function() { + return this.getState() == 1; + }; + + Promise.prototype.isRejected = function() { + return this.getState() == 2; + }; + + Promise.prototype.getValue = function () { + if (this._65 === 3) { + return this._55.getValue(); + } + + if (!this.isFulfilled()) { + throw new Error('Cannot get a value of an unfulfilled promise.'); + } + + return this._55; + }; + + Promise.prototype.getReason = function () { + if (this._65 === 3) { + return this._55.getReason(); + } + + if (!this.isRejected()) { + throw new Error('Cannot get a rejection reason of a non-rejected promise.'); + } + + return this._55; + }; + + Promise.prototype.getState = function () { + if (this._65 === 3) { + return this._55.getState(); + } + if (this._65 === -1 || this._65 === -2) { + return 0; + } + + return this._65; + }; +}; + +Promise.disableSynchronous = function() { + Promise.prototype.isPending = undefined; + Promise.prototype.isFulfilled = undefined; + Promise.prototype.isRejected = undefined; + Promise.prototype.getValue = undefined; + Promise.prototype.getReason = undefined; + Promise.prototype.getState = undefined; +}; diff --git a/node_modules/promise/src/core.js b/node_modules/promise/src/core.js new file mode 100644 index 000000000..312010d92 --- /dev/null +++ b/node_modules/promise/src/core.js @@ -0,0 +1,213 @@ +'use strict'; + +var asap = require('asap/raw'); + +function noop() {} + +// States: +// +// 0 - pending +// 1 - fulfilled with _value +// 2 - rejected with _value +// 3 - adopted the state of another promise, _value +// +// once the state is no longer pending (0) it is immutable + +// All `_` prefixed properties will be reduced to `_{random number}` +// at build time to obfuscate them and discourage their use. +// We don't use symbols or Object.defineProperty to fully hide them +// because the performance isn't good enough. + + +// to avoid using try/catch inside critical functions, we +// extract them to here. +var LAST_ERROR = null; +var IS_ERROR = {}; +function getThen(obj) { + try { + return obj.then; + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +function tryCallOne(fn, a) { + try { + return fn(a); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} +function tryCallTwo(fn, a, b) { + try { + fn(a, b); + } catch (ex) { + LAST_ERROR = ex; + return IS_ERROR; + } +} + +module.exports = Promise; + +function Promise(fn) { + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + if (typeof fn !== 'function') { + throw new TypeError('Promise constructor\'s argument is not a function'); + } + this._deferredState = 0; + this._state = 0; + this._value = null; + this._deferreds = null; + if (fn === noop) return; + doResolve(fn, this); +} +Promise._onHandle = null; +Promise._onReject = null; +Promise._noop = noop; + +Promise.prototype.then = function(onFulfilled, onRejected) { + if (this.constructor !== Promise) { + return safeThen(this, onFulfilled, onRejected); + } + var res = new Promise(noop); + handle(this, new Handler(onFulfilled, onRejected, res)); + return res; +}; + +function safeThen(self, onFulfilled, onRejected) { + return new self.constructor(function (resolve, reject) { + var res = new Promise(noop); + res.then(resolve, reject); + handle(self, new Handler(onFulfilled, onRejected, res)); + }); +} +function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (Promise._onHandle) { + Promise._onHandle(self); + } + if (self._state === 0) { + if (self._deferredState === 0) { + self._deferredState = 1; + self._deferreds = deferred; + return; + } + if (self._deferredState === 1) { + self._deferredState = 2; + self._deferreds = [self._deferreds, deferred]; + return; + } + self._deferreds.push(deferred); + return; + } + handleResolved(self, deferred); +} + +function handleResolved(self, deferred) { + asap(function() { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + if (self._state === 1) { + resolve(deferred.promise, self._value); + } else { + reject(deferred.promise, self._value); + } + return; + } + var ret = tryCallOne(cb, self._value); + if (ret === IS_ERROR) { + reject(deferred.promise, LAST_ERROR); + } else { + resolve(deferred.promise, ret); + } + }); +} +function resolve(self, newValue) { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) { + return reject( + self, + new TypeError('A promise cannot be resolved with itself.') + ); + } + if ( + newValue && + (typeof newValue === 'object' || typeof newValue === 'function') + ) { + var then = getThen(newValue); + if (then === IS_ERROR) { + return reject(self, LAST_ERROR); + } + if ( + then === self.then && + newValue instanceof Promise + ) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(then.bind(newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); +} + +function reject(self, newValue) { + self._state = 2; + self._value = newValue; + if (Promise._onReject) { + Promise._onReject(self, newValue); + } + finale(self); +} +function finale(self) { + if (self._deferredState === 1) { + handle(self, self._deferreds); + self._deferreds = null; + } + if (self._deferredState === 2) { + for (var i = 0; i < self._deferreds.length; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; + } +} + +function Handler(onFulfilled, onRejected, promise){ + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; +} + +/** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ +function doResolve(fn, promise) { + var done = false; + var res = tryCallTwo(fn, function (value) { + if (done) return; + done = true; + resolve(promise, value); + }, function (reason) { + if (done) return; + done = true; + reject(promise, reason); + }); + if (!done && res === IS_ERROR) { + done = true; + reject(promise, LAST_ERROR); + } +} diff --git a/node_modules/promise/src/done.js b/node_modules/promise/src/done.js new file mode 100644 index 000000000..f879317d0 --- /dev/null +++ b/node_modules/promise/src/done.js @@ -0,0 +1,13 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype.done = function (onFulfilled, onRejected) { + var self = arguments.length ? this.then.apply(this, arguments) : this; + self.then(null, function (err) { + setTimeout(function () { + throw err; + }, 0); + }); +}; diff --git a/node_modules/promise/src/es6-extensions.js b/node_modules/promise/src/es6-extensions.js new file mode 100644 index 000000000..04358131b --- /dev/null +++ b/node_modules/promise/src/es6-extensions.js @@ -0,0 +1,107 @@ +'use strict'; + +//This file contains the ES6 extensions to the core Promises/A+ API + +var Promise = require('./core.js'); + +module.exports = Promise; + +/* Static Functions */ + +var TRUE = valuePromise(true); +var FALSE = valuePromise(false); +var NULL = valuePromise(null); +var UNDEFINED = valuePromise(undefined); +var ZERO = valuePromise(0); +var EMPTYSTRING = valuePromise(''); + +function valuePromise(value) { + var p = new Promise(Promise._noop); + p._state = 1; + p._value = value; + return p; +} +Promise.resolve = function (value) { + if (value instanceof Promise) return value; + + if (value === null) return NULL; + if (value === undefined) return UNDEFINED; + if (value === true) return TRUE; + if (value === false) return FALSE; + if (value === 0) return ZERO; + if (value === '') return EMPTYSTRING; + + if (typeof value === 'object' || typeof value === 'function') { + try { + var then = value.then; + if (typeof then === 'function') { + return new Promise(then.bind(value)); + } + } catch (ex) { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } + } + return valuePromise(value); +}; + +Promise.all = function (arr) { + var args = Array.prototype.slice.call(arr); + + return new Promise(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + function res(i, val) { + if (val && (typeof val === 'object' || typeof val === 'function')) { + if (val instanceof Promise && val.then === Promise.prototype.then) { + while (val._state === 3) { + val = val._value; + } + if (val._state === 1) return res(i, val._value); + if (val._state === 2) reject(val._value); + val.then(function (val) { + res(i, val); + }, reject); + return; + } else { + var then = val.then; + if (typeof then === 'function') { + var p = new Promise(then.bind(val)); + p.then(function (val) { + res(i, val); + }, reject); + return; + } + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); +}; + +Promise.race = function (values) { + return new Promise(function (resolve, reject) { + values.forEach(function(value){ + Promise.resolve(value).then(resolve, reject); + }); + }); +}; + +/* Prototype Methods */ + +Promise.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); +}; diff --git a/node_modules/promise/src/finally.js b/node_modules/promise/src/finally.js new file mode 100644 index 000000000..f5ee0b98a --- /dev/null +++ b/node_modules/promise/src/finally.js @@ -0,0 +1,16 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.prototype['finally'] = function (f) { + return this.then(function (value) { + return Promise.resolve(f()).then(function () { + return value; + }); + }, function (err) { + return Promise.resolve(f()).then(function () { + throw err; + }); + }); +}; diff --git a/node_modules/promise/src/index.js b/node_modules/promise/src/index.js new file mode 100644 index 000000000..6e674f387 --- /dev/null +++ b/node_modules/promise/src/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = require('./core.js'); +require('./done.js'); +require('./finally.js'); +require('./es6-extensions.js'); +require('./node-extensions.js'); +require('./synchronous.js'); diff --git a/node_modules/promise/src/node-extensions.js b/node_modules/promise/src/node-extensions.js new file mode 100644 index 000000000..157cddc2b --- /dev/null +++ b/node_modules/promise/src/node-extensions.js @@ -0,0 +1,130 @@ +'use strict'; + +// This file contains then/promise specific extensions that are only useful +// for node.js interop + +var Promise = require('./core.js'); +var asap = require('asap'); + +module.exports = Promise; + +/* Static Functions */ + +Promise.denodeify = function (fn, argumentCount) { + if ( + typeof argumentCount === 'number' && argumentCount !== Infinity + ) { + return denodeifyWithCount(fn, argumentCount); + } else { + return denodeifyWithoutCount(fn); + } +}; + +var callbackFn = ( + 'function (err, res) {' + + 'if (err) { rj(err); } else { rs(res); }' + + '}' +); +function denodeifyWithCount(fn, argumentCount) { + var args = []; + for (var i = 0; i < argumentCount; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'return new Promise(function (rs, rj) {', + 'var res = fn.call(', + ['self'].concat(args).concat([callbackFn]).join(','), + ');', + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + return Function(['Promise', 'fn'], body)(Promise, fn); +} +function denodeifyWithoutCount(fn) { + var fnLength = Math.max(fn.length - 1, 3); + var args = []; + for (var i = 0; i < fnLength; i++) { + args.push('a' + i); + } + var body = [ + 'return function (' + args.join(',') + ') {', + 'var self = this;', + 'var args;', + 'var argLength = arguments.length;', + 'if (arguments.length > ' + fnLength + ') {', + 'args = new Array(arguments.length + 1);', + 'for (var i = 0; i < arguments.length; i++) {', + 'args[i] = arguments[i];', + '}', + '}', + 'return new Promise(function (rs, rj) {', + 'var cb = ' + callbackFn + ';', + 'var res;', + 'switch (argLength) {', + args.concat(['extra']).map(function (_, index) { + return ( + 'case ' + (index) + ':' + + 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' + + 'break;' + ); + }).join(''), + 'default:', + 'args[argLength] = cb;', + 'res = fn.apply(self, args);', + '}', + + 'if (res &&', + '(typeof res === "object" || typeof res === "function") &&', + 'typeof res.then === "function"', + ') {rs(res);}', + '});', + '};' + ].join(''); + + return Function( + ['Promise', 'fn'], + body + )(Promise, fn); +} + +Promise.nodeify = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + var callback = + typeof args[args.length - 1] === 'function' ? args.pop() : null; + var ctx = this; + try { + return fn.apply(this, arguments).nodeify(callback, ctx); + } catch (ex) { + if (callback === null || typeof callback == 'undefined') { + return new Promise(function (resolve, reject) { + reject(ex); + }); + } else { + asap(function () { + callback.call(ctx, ex); + }) + } + } + } +}; + +Promise.prototype.nodeify = function (callback, ctx) { + if (typeof callback != 'function') return this; + + this.then(function (value) { + asap(function () { + callback.call(ctx, null, value); + }); + }, function (err) { + asap(function () { + callback.call(ctx, err); + }); + }); +}; diff --git a/node_modules/promise/src/rejection-tracking.js b/node_modules/promise/src/rejection-tracking.js new file mode 100644 index 000000000..33a59a196 --- /dev/null +++ b/node_modules/promise/src/rejection-tracking.js @@ -0,0 +1,113 @@ +'use strict'; + +var Promise = require('./core'); + +var DEFAULT_WHITELIST = [ + ReferenceError, + TypeError, + RangeError +]; + +var enabled = false; +exports.disable = disable; +function disable() { + enabled = false; + Promise._onHandle = null; + Promise._onReject = null; +} + +exports.enable = enable; +function enable(options) { + options = options || {}; + if (enabled) disable(); + enabled = true; + var id = 0; + var displayId = 0; + var rejections = {}; + Promise._onHandle = function (promise) { + if ( + promise._state === 2 && // IS REJECTED + rejections[promise._rejectionId] + ) { + if (rejections[promise._rejectionId].logged) { + onHandled(promise._rejectionId); + } else { + clearTimeout(rejections[promise._rejectionId].timeout); + } + delete rejections[promise._rejectionId]; + } + }; + Promise._onReject = function (promise, err) { + if (promise._deferredState === 0) { // not yet handled + promise._rejectionId = id++; + rejections[promise._rejectionId] = { + displayId: null, + error: err, + timeout: setTimeout( + onUnhandled.bind(null, promise._rejectionId), + // For reference errors and type errors, this almost always + // means the programmer made a mistake, so log them after just + // 100ms + // otherwise, wait 2 seconds to see if they get handled + matchWhitelist(err, DEFAULT_WHITELIST) + ? 100 + : 2000 + ), + logged: false + }; + } + }; + function onUnhandled(id) { + if ( + options.allRejections || + matchWhitelist( + rejections[id].error, + options.whitelist || DEFAULT_WHITELIST + ) + ) { + rejections[id].displayId = displayId++; + if (options.onUnhandled) { + rejections[id].logged = true; + options.onUnhandled( + rejections[id].displayId, + rejections[id].error + ); + } else { + rejections[id].logged = true; + logError( + rejections[id].displayId, + rejections[id].error + ); + } + } + } + function onHandled(id) { + if (rejections[id].logged) { + if (options.onHandled) { + options.onHandled(rejections[id].displayId, rejections[id].error); + } else if (!rejections[id].onUnhandled) { + console.warn( + 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):' + ); + console.warn( + ' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' + + rejections[id].displayId + '.' + ); + } + } + } +} + +function logError(id, error) { + console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):'); + var errStr = (error && (error.stack || error)) + ''; + errStr.split('\n').forEach(function (line) { + console.warn(' ' + line); + }); +} + +function matchWhitelist(error, list) { + return list.some(function (cls) { + return error instanceof cls; + }); +} \ No newline at end of file diff --git a/node_modules/promise/src/synchronous.js b/node_modules/promise/src/synchronous.js new file mode 100644 index 000000000..38b228f52 --- /dev/null +++ b/node_modules/promise/src/synchronous.js @@ -0,0 +1,62 @@ +'use strict'; + +var Promise = require('./core.js'); + +module.exports = Promise; +Promise.enableSynchronous = function () { + Promise.prototype.isPending = function() { + return this.getState() == 0; + }; + + Promise.prototype.isFulfilled = function() { + return this.getState() == 1; + }; + + Promise.prototype.isRejected = function() { + return this.getState() == 2; + }; + + Promise.prototype.getValue = function () { + if (this._state === 3) { + return this._value.getValue(); + } + + if (!this.isFulfilled()) { + throw new Error('Cannot get a value of an unfulfilled promise.'); + } + + return this._value; + }; + + Promise.prototype.getReason = function () { + if (this._state === 3) { + return this._value.getReason(); + } + + if (!this.isRejected()) { + throw new Error('Cannot get a rejection reason of a non-rejected promise.'); + } + + return this._value; + }; + + Promise.prototype.getState = function () { + if (this._state === 3) { + return this._value.getState(); + } + if (this._state === -1 || this._state === -2) { + return 0; + } + + return this._state; + }; +}; + +Promise.disableSynchronous = function() { + Promise.prototype.isPending = undefined; + Promise.prototype.isFulfilled = undefined; + Promise.prototype.isRejected = undefined; + Promise.prototype.getValue = undefined; + Promise.prototype.getReason = undefined; + Promise.prototype.getState = undefined; +}; diff --git a/node_modules/prr/.jshintrc b/node_modules/prr/.jshintrc new file mode 100644 index 000000000..6a7a956c0 --- /dev/null +++ b/node_modules/prr/.jshintrc @@ -0,0 +1,61 @@ +{ + "predef": [ ] + , "bitwise": false + , "camelcase": false + , "curly": false + , "eqeqeq": false + , "forin": false + , "immed": false + , "latedef": false + , "newcap": true + , "noarg": true + , "noempty": true + , "nonew": true + , "plusplus": false + , "quotmark": true + , "regexp": false + , "undef": true + , "unused": true + , "strict": false + , "trailing": true + , "maxlen": 120 + , "asi": true + , "boss": true + , "debug": true + , "eqnull": true + , "es5": true + , "esnext": true + , "evil": true + , "expr": true + , "funcscope": false + , "globalstrict": false + , "iterator": false + , "lastsemic": true + , "laxbreak": true + , "laxcomma": true + , "loopfunc": true + , "multistr": false + , "onecase": false + , "proto": false + , "regexdash": false + , "scripturl": true + , "smarttabs": false + , "shadow": false + , "sub": true + , "supernew": false + , "validthis": true + , "browser": true + , "couch": false + , "devel": false + , "dojo": false + , "mootools": false + , "node": true + , "nonstandard": true + , "prototypejs": false + , "rhino": false + , "worker": true + , "wsh": false + , "nomen": false + , "onevar": true + , "passfail": false +} \ No newline at end of file diff --git a/node_modules/prr/.npmignore b/node_modules/prr/.npmignore new file mode 100644 index 000000000..b512c09d4 --- /dev/null +++ b/node_modules/prr/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/node_modules/prr/.travis.yml b/node_modules/prr/.travis.yml new file mode 100644 index 000000000..33dcbc3a8 --- /dev/null +++ b/node_modules/prr/.travis.yml @@ -0,0 +1,10 @@ +language: node_js +node_js: + - 0.8 + - "0.10" +branches: + only: + - master +notifications: + email: + - rod@vagg.org \ No newline at end of file diff --git a/node_modules/prr/LICENSE.md b/node_modules/prr/LICENSE.md new file mode 100644 index 000000000..29b95e39a --- /dev/null +++ b/node_modules/prr/LICENSE.md @@ -0,0 +1,11 @@ +The MIT License (MIT) +===================== + +Copyright (c) 2014 Rod Vagg +--------------------------- + +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. diff --git a/node_modules/prr/README.md b/node_modules/prr/README.md new file mode 100644 index 000000000..b93404823 --- /dev/null +++ b/node_modules/prr/README.md @@ -0,0 +1,47 @@ +# prr [![Build Status](https://secure.travis-ci.org/rvagg/prr.png)](http://travis-ci.org/rvagg/prr) + +An sensible alternative to `Object.defineProperty()`. Available in npm and Ender as **prr**. + +## Usage + +Set the property `'foo'` (`obj.foo`) to have the value `'bar'` with default options (`'enumerable'`, `'configurable'` and `'writable'` are all `false`): + +```js +prr(obj, 'foo', 'bar') +``` + +Adjust the default options: + +```js +prr(obj, 'foo', 'bar', { enumerable: true, writable: true }) +``` + +Do the same operation for multiple properties: + +```js +prr(obj, { one: 'one', two: 'two' }) +// or with options: +prr(obj, { one: 'one', two: 'two' }, { enumerable: true, writable: true }) +``` + +### Simplify! + +But obviously, having to write out the full options object makes it nearly as bad as the original `Object.defineProperty()` so we can simplify. + +As an alternative method we can use an options string where each character represents a option: `'e'=='enumerable'`, `'c'=='configurable'` and `'w'=='writable'`: + +```js +prr(obj, 'foo', 'bar', 'ew') // enumerable and writable but not configurable +// muliple properties: +prr(obj, { one: 'one', two: 'two' }, 'ewc') // configurable too +``` + +## Where can I use it? + +Anywhere! For pre-ES5 environments *prr* will simply fall-back to an `object[property] = value` so you can get close to what you want. + +*prr* is Ender-compatible so you can include it in your Ender build and `$.prr(...)` or `var prr = require('prr'); prr(...)`. + +## Licence + +prr is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licensed under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_modules/prr/package.json b/node_modules/prr/package.json new file mode 100644 index 000000000..5d298e598 --- /dev/null +++ b/node_modules/prr/package.json @@ -0,0 +1,26 @@ +{ + "name": "prr", + "description": "A better Object.defineProperty()", + "version": "1.0.1", + "homepage": "https://github.com/rvagg/prr", + "author": "Rod Vagg (https://github.com/rvagg)", + "keywords": [ + "property", + "properties", + "defineProperty", + "ender" + ], + "main": "./prr.js", + "repository": { + "type": "git", + "url": "https://github.com/rvagg/prr.git" + }, + "dependencies": {}, + "devDependencies": { + "tap": "*" + }, + "scripts": { + "test": "node ./test.js" + }, + "license": "MIT" +} diff --git a/node_modules/prr/prr.js b/node_modules/prr/prr.js new file mode 100644 index 000000000..94f58628b --- /dev/null +++ b/node_modules/prr/prr.js @@ -0,0 +1,63 @@ +/*! + * prr + * (c) 2013 Rod Vagg + * https://github.com/rvagg/prr + * License: MIT + */ + +(function (name, context, definition) { + if (typeof module != 'undefined' && module.exports) + module.exports = definition() + else + context[name] = definition() +})('prr', this, function() { + + var setProperty = typeof Object.defineProperty == 'function' + ? function (obj, key, options) { + Object.defineProperty(obj, key, options) + return obj + } + : function (obj, key, options) { // < es5 + obj[key] = options.value + return obj + } + + , makeOptions = function (value, options) { + var oo = typeof options == 'object' + , os = !oo && typeof options == 'string' + , op = function (p) { + return oo + ? !!options[p] + : os + ? options.indexOf(p[0]) > -1 + : false + } + + return { + enumerable : op('enumerable') + , configurable : op('configurable') + , writable : op('writable') + , value : value + } + } + + , prr = function (obj, key, value, options) { + var k + + options = makeOptions(value, options) + + if (typeof key == 'object') { + for (k in key) { + if (Object.hasOwnProperty.call(key, k)) { + options.value = key[k] + setProperty(obj, k, options) + } + } + return obj + } + + return setProperty(obj, key, options) + } + + return prr +}) \ No newline at end of file diff --git a/node_modules/prr/test.js b/node_modules/prr/test.js new file mode 100644 index 000000000..5222e3073 --- /dev/null +++ b/node_modules/prr/test.js @@ -0,0 +1,169 @@ +const test = require('tap').test + , prr = require('./') + +test('test prr(o, key, value) form', function (t) { + t.plan(2) + + var o = {} + prr(o, 'foo', 'bar') + t.equal(o.foo, 'bar', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo') + , { + enumerable : false + , configurable : false + , writable : false + , value : 'bar' + } + , 'correct property descriptor' + ) + t.end() +}) + +test('test prr(o, { key: value }) form', function (t) { + t.plan(2) + + var o = {} + prr(o, { foo: 'bar' }) + + t.equal(o.foo, 'bar', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo') + , { + enumerable : false + , configurable : false + , writable : false + , value : 'bar' + } + , 'correct property descriptor' + ) + t.end() +}) + +test('test multiple key:value pairs', function (t) { + var o = { foo: 'bar' } + + prr(o, { one: 'ONE', two: 'TWO', obj: { o: 'o' }}) + + t.deepEqual(o, { foo: 'bar' }, 'properties are not enumerable') + t.equal(o.one, 'ONE', 'correctly set property') + t.equal(o.two, 'TWO', 'correctly set property') + t.deepEqual(o.obj, { o: 'o' }, 'correctly set property') + + ;[ 'one', 'two', 'obj' ].forEach(function (p) { + t.deepEqual( + Object.getOwnPropertyDescriptor(o, p) + , { + enumerable : false + , configurable : false + , writable : false + , value : p == 'obj' ? { o: 'o' } : p.toUpperCase() + } + , 'correct property descriptor' + ) + }) + + t.end() +}) + +test('test descriptor options', function (t) { + var o = {} + + prr(o, 'foo', 'bar', { + enumerable : true + , configurable : false + }) + t.equal(o.foo, 'bar', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo') + , { + enumerable : true + , configurable : false + , writable : false + , value : 'bar' + } + , 'correct property descriptor' + ) + + prr(o, 'foo2', 'bar2', { + enumerable : true + , configurable : true + , writable : false + }) + t.equal(o.foo2, 'bar2', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo2') + , { + enumerable : true + , configurable : true + , writable : false + , value : 'bar2' + } + , 'correct property descriptor' + ) + + prr(o, 'foo3', 'bar3', { + enumerable : true + , configurable : true + , writable : true + }) + t.equal(o.foo3, 'bar3', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo3') + , { + enumerable : true + , configurable : true + , writable : true + , value : 'bar3' + } + , 'correct property descriptor' + ) + + t.end() +}) + + +test('test descriptor options, string form', function (t) { + var o = {} + + prr(o, 'foo', 'bar', 'e') + t.equal(o.foo, 'bar', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo') + , { + enumerable : true + , configurable : false + , writable : false + , value : 'bar' + } + , 'correct property descriptor' + ) + + prr(o, 'foo2', 'bar2', 'ec') + t.equal(o.foo2, 'bar2', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo2') + , { + enumerable : true + , configurable : true + , writable : false + , value : 'bar2' + } + , 'correct property descriptor' + ) + + prr(o, 'foo3', 'bar3', 'ecw') + t.equal(o.foo3, 'bar3', 'correct value') + t.deepEqual( + Object.getOwnPropertyDescriptor(o, 'foo3') + , { + enumerable : true + , configurable : true + , writable : true + , value : 'bar3' + } + , 'correct property descriptor' + ) + + t.end() +}) diff --git a/node_modules/punycode/LICENSE-MIT.txt b/node_modules/punycode/LICENSE-MIT.txt new file mode 100644 index 000000000..a41e0a7ef --- /dev/null +++ b/node_modules/punycode/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +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. diff --git a/node_modules/punycode/README.md b/node_modules/punycode/README.md new file mode 100644 index 000000000..7ad7d1faa --- /dev/null +++ b/node_modules/punycode/README.md @@ -0,0 +1,176 @@ +# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) + +A robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms. + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) and [io.js v1.0.0+](https://github.com/iojs/io.js/blob/v1.x/lib/punycode.js). + +## Installation + +Via [npm](https://www.npmjs.com/) (only required for Node.js releases older than v0.6.2): + +```bash +npm install punycode +``` + +Via [Bower](http://bower.io/): + +```bash +bower install punycode +``` + +Via [Component](https://github.com/component/component): + +```bash +component install bestiejs/punycode.js +``` + +In a browser: + +```html + +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): + +```js +var punycode = require('punycode'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('punycode.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'punycode': 'path/to/punycode' + } + }, + ['punycode'], + function(punycode) { + console.log(punycode); + } +); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## Unit tests & code coverage + +After cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +Feel free to fork if you see possible improvements! + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## Contributors + +| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode/package.json b/node_modules/punycode/package.json new file mode 100644 index 000000000..accb5306f --- /dev/null +++ b/node_modules/punycode/package.json @@ -0,0 +1,60 @@ +{ + "name": "punycode", + "version": "1.4.1", + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "homepage": "https://mths.be/punycode", + "main": "punycode.js", + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + { + "name": "John-David Dalton", + "url": "http://allyoucanleet.com/" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/bestiejs/punycode.js.git" + }, + "bugs": "https://github.com/bestiejs/punycode.js/issues", + "files": [ + "LICENSE-MIT.txt", + "punycode.js" + ], + "scripts": { + "test": "node tests/tests.js" + }, + "devDependencies": { + "coveralls": "^2.11.4", + "grunt": "^0.4.5", + "grunt-contrib-uglify": "^0.11.0", + "grunt-shell": "^1.1.2", + "istanbul": "^0.4.1", + "qunit-extras": "^1.4.4", + "qunitjs": "~1.11.0", + "requirejs": "^2.1.22" + }, + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + } +} diff --git a/node_modules/punycode/punycode.js b/node_modules/punycode/punycode.js new file mode 100644 index 000000000..2c87f6cc4 --- /dev/null +++ b/node_modules/punycode/punycode.js @@ -0,0 +1,533 @@ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); diff --git a/node_modules/qs/.editorconfig b/node_modules/qs/.editorconfig new file mode 100644 index 000000000..226a9322b --- /dev/null +++ b/node_modules/qs/.editorconfig @@ -0,0 +1,44 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 160 +quote_type = single + +[test/*] +max_line_length = off + +[*.md] +indent_size = off +max_line_length = off + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[LICENSE] +indent_size = 2 +max_line_length = off + +[coverage/**/*] +indent_size = off +indent_style = off +indent = off +max_line_length = off + +[dist/*] +max_line_length = off + +[.nycrc] +indent_style = tab diff --git a/node_modules/qs/.eslintrc b/node_modules/qs/.eslintrc new file mode 100644 index 000000000..cd5979eda --- /dev/null +++ b/node_modules/qs/.eslintrc @@ -0,0 +1,37 @@ +{ + "root": true, + + "extends": "@ljharb", + + "ignorePatterns": [ + "dist/", + ], + + "rules": { + "complexity": [2, 29], + "consistent-return": 1, + "func-name-matching": 0, + "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], + "indent": [2, 4], + "max-lines-per-function": 0, + "max-params": [2, 12], + "max-statements": [2, 45], + "multiline-comment-style": 0, + "no-continue": 1, + "no-magic-numbers": 0, + "no-param-reassign": 1, + "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "max-lines-per-function": 0, + "max-statements": 0, + "no-extend-native": 0, + "function-paren-newline": 0, + }, + }, + ], +} diff --git a/node_modules/qs/.github/FUNDING.yml b/node_modules/qs/.github/FUNDING.yml new file mode 100644 index 000000000..0355f4f5f --- /dev/null +++ b/node_modules/qs/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +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: npm/qs +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 a single custom sponsorship URL diff --git a/node_modules/qs/.nycrc b/node_modules/qs/.nycrc new file mode 100644 index 000000000..1d57cabe1 --- /dev/null +++ b/node_modules/qs/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "dist" + ] +} diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md new file mode 100644 index 000000000..30f10c746 --- /dev/null +++ b/node_modules/qs/CHANGELOG.md @@ -0,0 +1,196 @@ +## **6.4.1** +- [Fix] `parse`: ignore `__proto__` keys (#428) +- [Fix] fix for an impossible situation: when the formatter is called with a non-string value +- [Fix] use `safer-buffer` instead of `Buffer` constructor +- [Fix] `utils.merge`: avoid a crash with a null target and an array source +- [Fix]` `utils.merge`: avoid a crash with a null target and a truthy non-array source +- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279) +- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided +- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` +- [Robustness] `stringify`: avoid relying on a global `undefined` (#427) +- [Refactor] use cached `Array.isArray` +- [Refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269) +- [readme] remove travis badge; add github actions/codecov badges; update URLs +- [Docs] Clarify the need for "arrayLimit" option +- [meta] fix README.md (#399) +- [meta] Clean up license text so it’s properly detected as BSD-3-Clause +- [meta] add FUNDING.yml +- [actions] backport actions from main +- [Tests] remove nonexistent tape option +- [Dev Deps] backport from main + +## **6.4.0** +- [New] `qs.stringify`: add `encodeValuesOnly` option +- [Fix] follow `allowPrototypes` option during merge (#201, #201) +- [Fix] support keys starting with brackets (#202, #200) +- [Fix] chmod a-x +- [Dev Deps] update `eslint` +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds +- [eslint] reduce warnings + +## **6.3.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` +- [Tests] on all node minors; improve test matrix +- [Docs] document stringify option `allowDots` (#195) +- [Docs] add empty object and array values example (#195) +- [Docs] Fix minor inconsistency/typo (#192) +- [Docs] document stringify option `sort` (#191) +- [Refactor] `stringify`: throw faster with an invalid encoder +- [Refactor] remove unnecessary escapes (#184) +- Remove contributing.md, since `qs` is no longer part of `hapi` (#183) + +## **6.3.0** +- [New] Add support for RFC 1738 (#174, #173) +- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159) +- [Fix] ensure `utils.merge` handles merging two arrays +- [Refactor] only constructors should be capitalized +- [Refactor] capitalized var names are for constructors only +- [Refactor] avoid using a sparse array +- [Robustness] `formats`: cache `String#replace` +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` +- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix +- [Tests] flesh out arrayLimit/arrayFormat tests (#107) +- [Tests] skip Object.create tests when null objects are not available +- [Tests] Turn on eslint for test files (#175) + +## **6.2.2** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## **6.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values +- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` +- [Tests] remove `parallelshell` since it does not reliably report failures +- [Tests] up to `node` `v6.3`, `v5.12` +- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` + +## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) +- [New] pass Buffers to the encoder/decoder directly (#161) +- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) +- [Fix] fix compacting of nested sparse arrays (#150) + +## **6.1.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) +- [New] allowDots option for `stringify` (#151) +- [Fix] "sort" option should work at a depth of 3 or more (#151) +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## **6.0.3** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) +- Revert ES6 requirement and restore support for node down to v0.8. + +## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) +- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json + +## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) +- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 + +## **5.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values + +## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) +- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string + +## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) +- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional +- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify + +## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) +- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false +- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm + +## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) +- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional + +## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) +- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" + +## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) +- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties +- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost +- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing +- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object +- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option +- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. +- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 +- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 +- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign +- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute + +## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) +- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function + +## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) +- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option + +## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) +- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/node_modules/qs/LICENSE.md b/node_modules/qs/LICENSE.md new file mode 100644 index 000000000..fecf6b694 --- /dev/null +++ b/node_modules/qs/LICENSE.md @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) +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. Neither the name of the copyright holder nor the names of its + contributors may 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 HOLDER 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. diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md new file mode 100644 index 000000000..0ad1947d3 --- /dev/null +++ b/node_modules/qs/README.md @@ -0,0 +1,499 @@ +# qs [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A querystring parsing and stringifying library with some added security. + +[![Build Status](https://api.travis-ci.org/ljharb/qs.svg)](http://travis-ci.org/ljharb/qs) + +Lead Maintainer: [Jordan Harband](https://github.com/ljharb) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var qs = require('qs'); +var assert = require('assert'); + +var obj = qs.parse('a=c'); +assert.deepEqual(obj, { a: 'c' }); + +var str = qs.stringify(obj); +assert.equal(str, 'a=c'); +``` + +### Parsing Objects + +[](#preventEval) +```javascript +qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +assert.deepEqual(qs.parse('foo[bar]=baz'), { + foo: { + bar: 'baz' + } +}); +``` + +When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: + +```javascript +var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); +assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } }); +``` + +By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. + +```javascript +var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); +assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); +``` + +URI encoded strings work too: + +```javascript +assert.deepEqual(qs.parse('a%5Bb%5D=c'), { + a: { b: 'c' } +}); +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { + foo: { + bar: { + baz: 'foobarbaz' + } + } +}); +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +var expected = { + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +}; +var string = 'a[b][c][d][e][f][g][h][i]=j'; +assert.deepEqual(qs.parse(string), expected); +``` + +This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: + +```javascript +var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); +assert.deepEqual(limited, { a: 'b' }); +``` + +An optional delimiter can also be passed: + +```javascript +var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); +assert.deepEqual(delimited, { a: 'b', c: 'd' }); +``` + +Delimiters can be a regular expression too: + +```javascript +var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); +``` + +Option `allowDots` can be used to enable dot notation: + +```javascript +var withDots = qs.parse('a.b=c', { allowDots: true }); +assert.deepEqual(withDots, { a: { b: 'c' } }); +``` + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +var withArray = qs.parse('a[]=b&a[]=c'); +assert.deepEqual(withArray, { a: ['b', 'c'] }); +``` + +You may specify an index as well: + +```javascript +var withIndexes = qs.parse('a[1]=c&a[0]=b'); +assert.deepEqual(withIndexes, { a: ['b', 'c'] }); +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +var noSparse = qs.parse('a[1]=b&a[15]=c'); +assert.deepEqual(noSparse, { a: ['b', 'c'] }); +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +var withEmptyString = qs.parse('a[]=&a[]=b'); +assert.deepEqual(withEmptyString, { a: ['', 'b'] }); + +var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); +assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key. This is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array. + +```javascript +var withMaxIndex = qs.parse('a[100]=b'); +assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); +assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); +``` + +To disable array parsing entirely, set `parseArrays` to `false`. + +```javascript +var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); +assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); +``` + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +var mixedNotation = qs.parse('a[0]=b&a[b]=c'); +assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); +``` + +You can also create arrays of objects: + +```javascript +var arraysOfObjects = qs.parse('a[][b]=c'); +assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); +``` + +### Stringifying + +[](#preventEval) +```javascript +qs.stringify(object, [options]); +``` + +When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: + +```javascript +assert.equal(qs.stringify({ a: 'b' }), 'a=b'); +assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); +``` + +This encoding can be disabled by setting the `encode` option to `false`: + +```javascript +var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); +assert.equal(unencoded, 'a[b]=c'); +``` + +Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: +```javascript +var encodedValues = qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } +) +assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); +``` + +This encoding can also be replaced by a custom encoding method set as `encoder` option: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { + // Passed in values `a`, `b`, `c` + return // Return encoded string +}}) +``` + +_(Note: the `encoder` option does not apply if `encode` is `false`)_ + +Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str) { + // Passed in values `x`, `z` + return // Return decoded string +}}) +``` + +You can encode keys and values using different logic by using the type argument provided to the encoder: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return // Encoded key + } else if (type === 'value') { + return // Encoded value + } +}}) +``` + +The type argument is also provided to the decoder: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str, defaultDecoder, charset, type) { + if (type === 'key') { + return // Decoded key + } else if (type === 'value') { + return // Decoded value + } +}}) +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +You may use the `arrayFormat` option to specify the format of the output array: + +```javascript +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) +// 'a[0]=b&a[1]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) +// 'a[]=b&a[]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) +// 'a=b&a=c' +``` + +When objects are stringified, by default they use bracket notation: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }); +// 'a[b][c]=d&a[b][e]=f' +``` + +You may override this to use dot notation by setting the `allowDots` option to `true`: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }); +// 'a.b.c=d&a.b.e=f' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +assert.equal(qs.stringify({ a: '' }), 'a='); +``` + +Key with no values (such as an empty object or array) will return nothing: + +```javascript +assert.equal(qs.stringify({ a: [] }), ''); +assert.equal(qs.stringify({ a: {} }), ''); +assert.equal(qs.stringify({ a: [{}] }), ''); +assert.equal(qs.stringify({ a: { b: []} }), ''); +assert.equal(qs.stringify({ a: { b: {}} }), ''); +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); +``` + +The delimiter may be overridden with stringify as well: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); +``` + +If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option: + +```javascript +var date = new Date(7); +assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A')); +assert.equal( + qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }), + 'a=7' +); +``` + +You may use the `sort` option to affect the order of parameter keys: + +```javascript +function alphabeticalSort(a, b) { + return a.localeCompare(b); +} +assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); +``` + +Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. +If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you +pass an array, it will be used to select properties and array indices for stringification: + +```javascript +function filterFunc(prefix, value) { + if (prefix == 'b') { + // Return an `undefined` value to omit a property. + return; + } + if (prefix == 'e[f]') { + return value.getTime(); + } + if (prefix == 'e[g][0]') { + return value * 2; + } + return value; +} +qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); +// 'a=b&c=d&e[f]=123&e[g][0]=4' +qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); +// 'a=b&e=f' +qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); +// 'a[0]=b&a[2]=d' +``` + +### Handling of `null` values + +By default, `null` values are treated like empty strings: + +```javascript +var withNull = qs.stringify({ a: null, b: '' }); +assert.equal(withNull, 'a=&b='); +``` + +Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. + +```javascript +var equalsInsensitive = qs.parse('a&b='); +assert.deepEqual(equalsInsensitive, { a: '', b: '' }); +``` + +To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` +values have no `=` sign: + +```javascript +var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); +assert.equal(strictNull, 'a&b='); +``` + +To parse values without `=` back to `null` use the `strictNullHandling` flag: + +```javascript +var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); +assert.deepEqual(parsedStrictNull, { a: null, b: '' }); +``` + +To completely skip rendering keys with `null` values, use the `skipNulls` flag: + +```javascript +var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); +assert.equal(nullsSkipped, 'a=b'); +``` + +### Dealing with special character sets + +By default the encoding and decoding of characters is done in `utf-8`. If you +wish to encode querystrings to a different character set (i.e. +[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the +[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: + +```javascript +var encoder = require('qs-iconv/encoder')('shift_jis'); +var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); +assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); +``` + +This also works for decoding of query strings: + +```javascript +var decoder = require('qs-iconv/decoder')('shift_jis'); +var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); +assert.deepEqual(obj, { a: 'こんにちは!' }); +``` + +### RFC 3986 and RFC 1738 space encoding + +RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible. +In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'. + +``` +assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); +``` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +## qs for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of qs and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-qs?utm_source=npm-qs&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +[package-url]: https://npmjs.org/package/qs +[npm-version-svg]: https://versionbadg.es/ljharb/qs.svg +[deps-svg]: https://david-dm.org/ljharb/qs.svg +[deps-url]: https://david-dm.org/ljharb/qs +[dev-deps-svg]: https://david-dm.org/ljharb/qs/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/qs#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/qs.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/qs.svg +[downloads-url]: https://npm-stat.com/charts.html?package=qs +[codecov-image]: https://codecov.io/gh/ljharb/qs/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/qs/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/qs +[actions-url]: https://github.com/ljharb/qs/actions diff --git a/node_modules/qs/bower.json b/node_modules/qs/bower.json new file mode 100644 index 000000000..7a582762c --- /dev/null +++ b/node_modules/qs/bower.json @@ -0,0 +1,21 @@ +{ + "name": "qs", + "main": "dist/qs.js", + "homepage": "https://github.com/hapijs/qs", + "authors": [ + "Nathan LaFreniere " + ], + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "keywords": [ + "querystring", + "qs" + ], + "license": "BSD-3-Clause", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ] +} diff --git a/node_modules/qs/component.json b/node_modules/qs/component.json new file mode 100644 index 000000000..7867ed1cc --- /dev/null +++ b/node_modules/qs/component.json @@ -0,0 +1,15 @@ +{ + "name": "qs", + "repository": "hapijs/qs", + "description": "query-string parser / stringifier with nesting support", + "version": "6.4.1", + "keywords": ["querystring", "query", "parser"], + "main": "lib/index.js", + "scripts": [ + "lib/index.js", + "lib/parse.js", + "lib/stringify.js", + "lib/utils.js" + ], + "license": "BSD-3-Clause" +} diff --git a/node_modules/qs/dist/qs.js b/node_modules/qs/dist/qs.js new file mode 100644 index 000000000..b23931948 --- /dev/null +++ b/node_modules/qs/dist/qs.js @@ -0,0 +1,609 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = parseObject(chain, val, options); + } else if (cleanRoot !== '__proto__') { + obj[cleanRoot] = parseObject(chain, val, options); + } + } + + return obj; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +module.exports = function (str, opts) { + var options = opts || {}; + + if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; + options.parseArrays = options.parseArrays !== false; + options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; + options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; + options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; + options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; + options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; + +},{"./utils":5}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix); + return [formatter(keyValue) + '=' + formatter(encoder(obj))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (isArray(obj)) { + pushToArray(values, stringify( + obj[key], + generateArrayPrefix(prefix, key), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } else { + pushToArray(values, stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + } + + return values; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = opts || {}; + + if (options.encoder !== null && typeof options.encoder !== 'undefined' && typeof options.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; + var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; + var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; + var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; + var sort = typeof options.sort === 'function' ? options.sort : null; + var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; + var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; + var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; + if (typeof options.format === 'undefined') { + options.format = formats['default']; + } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { + throw new TypeError('Unknown format option provided.'); + } + var formatter = formats.formatters[options.format]; + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (options.arrayFormat in arrayPrefixGenerators) { + arrayFormat = options.arrayFormat; + } else if ('indices' in options) { + arrayFormat = options.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (sort) { + objKeys.sort(sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encode ? encoder : null, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + + return keys.join(delimiter); +}; + +},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +exports.arrayToObject = function (source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +exports.merge = function (target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (Array.isArray(target) && !Array.isArray(source)) { + mergeTarget = exports.arrayToObject(target, options); + } + + if (Array.isArray(target) && Array.isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + if (target[i] && typeof target[i] === 'object') { + target[i] = exports.merge(target[i], item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (Object.prototype.hasOwnProperty.call(acc, key)) { + acc[key] = exports.merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +exports.decode = function (str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + +exports.encode = function (str) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + /* eslint operator-linebreak: [2, "before"] */ + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +exports.compact = function (obj, references) { + if (typeof obj !== 'object' || obj === null) { + return obj; + } + + var refs = references || []; + var lookup = refs.indexOf(obj); + if (lookup !== -1) { + return refs[lookup]; + } + + refs.push(obj); + + if (Array.isArray(obj)) { + var compacted = []; + + for (var i = 0; i < obj.length; ++i) { + if (obj[i] && typeof obj[i] === 'object') { + compacted.push(exports.compact(obj[i], refs)); + } else if (typeof obj[i] !== 'undefined') { + compacted.push(obj[i]); + } + } + + return compacted; + } + + var keys = Object.keys(obj); + keys.forEach(function (key) { + obj[key] = exports.compact(obj[key], refs); + }); + + return obj; +}; + +exports.isRegExp = function (obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +exports.isBuffer = function (obj) { + if (obj === null || typeof obj === 'undefined') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +},{}]},{},[2])(2) +}); diff --git a/node_modules/qs/lib/formats.js b/node_modules/qs/lib/formats.js new file mode 100644 index 000000000..702da12e8 --- /dev/null +++ b/node_modules/qs/lib/formats.js @@ -0,0 +1,18 @@ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +module.exports = { + 'default': 'RFC3986', + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return String(value); + } + }, + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; diff --git a/node_modules/qs/lib/index.js b/node_modules/qs/lib/index.js new file mode 100644 index 000000000..0d6a97dcf --- /dev/null +++ b/node_modules/qs/lib/index.js @@ -0,0 +1,11 @@ +'use strict'; + +var stringify = require('./stringify'); +var parse = require('./parse'); +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js new file mode 100644 index 000000000..f4cde7d7c --- /dev/null +++ b/node_modules/qs/lib/parse.js @@ -0,0 +1,168 @@ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; + +var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + decoder: utils.decode, + delimiter: '&', + depth: 5, + parameterLimit: 1000, + plainObjects: false, + strictNullHandling: false +}; + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); + + for (var i = 0; i < parts.length; ++i) { + var part = parts[i]; + var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos)); + val = options.decoder(part.slice(pos + 1)); + } + if (has.call(obj, key)) { + obj[key] = [].concat(obj[key]).concat(val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function parseObjectRecursive(chain, val, options) { + if (!chain.length) { + return val; + } + + var root = chain.shift(); + + var obj; + if (root === '[]' && options.parseArrays) { + obj = []; + obj = obj.concat(parseObject(chain, val, options)); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: val }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = parseObject(chain, val, options); + } else if (cleanRoot !== '__proto__') { + obj[cleanRoot] = parseObject(chain, val, options); + } + } + + return obj; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options); +}; + +module.exports = function (str, opts) { + var options = opts || {}; + + if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; + options.parseArrays = options.parseArrays !== false; + options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; + options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; + options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; + options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; + options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js new file mode 100644 index 000000000..88b570fd9 --- /dev/null +++ b/node_modules/qs/lib/stringify.js @@ -0,0 +1,214 @@ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaults = { + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix) : prefix; + } + + obj = ''; + } + + if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix); + return [formatter(keyValue) + '=' + formatter(encoder(obj))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (isArray(obj)) { + pushToArray(values, stringify( + obj[key], + generateArrayPrefix(prefix, key), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } else { + pushToArray(values, stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + } + + return values; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = opts || {}; + + if (options.encoder !== null && typeof options.encoder !== 'undefined' && typeof options.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; + var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; + var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; + var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; + var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; + var sort = typeof options.sort === 'function' ? options.sort : null; + var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; + var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; + var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; + if (typeof options.format === 'undefined') { + options.format = formats['default']; + } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { + throw new TypeError('Unknown format option provided.'); + } + var formatter = formats.formatters[options.format]; + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (options.arrayFormat in arrayPrefixGenerators) { + arrayFormat = options.arrayFormat; + } else if ('indices' in options) { + arrayFormat = options.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (sort) { + objKeys.sort(sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encode ? encoder : null, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly + )); + } + + return keys.join(delimiter); +}; diff --git a/node_modules/qs/lib/utils.js b/node_modules/qs/lib/utils.js new file mode 100644 index 000000000..b198ae987 --- /dev/null +++ b/node_modules/qs/lib/utils.js @@ -0,0 +1,186 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +exports.arrayToObject = function (source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +exports.merge = function (target, source, options) { + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (Array.isArray(target) && !Array.isArray(source)) { + mergeTarget = exports.arrayToObject(target, options); + } + + if (Array.isArray(target) && Array.isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + if (target[i] && typeof target[i] === 'object') { + target[i] = exports.merge(target[i], item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (Object.prototype.hasOwnProperty.call(acc, key)) { + acc[key] = exports.merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +exports.decode = function (str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + +exports.encode = function (str) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = typeof str === 'string' ? str : String(str); + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + /* eslint operator-linebreak: [2, "before"] */ + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +exports.compact = function (obj, references) { + if (typeof obj !== 'object' || obj === null) { + return obj; + } + + var refs = references || []; + var lookup = refs.indexOf(obj); + if (lookup !== -1) { + return refs[lookup]; + } + + refs.push(obj); + + if (Array.isArray(obj)) { + var compacted = []; + + for (var i = 0; i < obj.length; ++i) { + if (obj[i] && typeof obj[i] === 'object') { + compacted.push(exports.compact(obj[i], refs)); + } else if (typeof obj[i] !== 'undefined') { + compacted.push(obj[i]); + } + } + + return compacted; + } + + var keys = Object.keys(obj); + keys.forEach(function (key) { + obj[key] = exports.compact(obj[key], refs); + }); + + return obj; +}; + +exports.isRegExp = function (obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +exports.isBuffer = function (obj) { + if (obj === null || typeof obj === 'undefined') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json new file mode 100644 index 000000000..422955cd6 --- /dev/null +++ b/node_modules/qs/package.json @@ -0,0 +1,54 @@ +{ + "name": "qs", + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "homepage": "https://github.com/ljharb/qs", + "version": "6.4.1", + "repository": { + "type": "git", + "url": "https://github.com/ljharb/qs.git" + }, + "main": "lib/index.js", + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "keywords": [ + "querystring", + "qs" + ], + "engines": { + "node": ">=0.6" + }, + "devDependencies": { + "@ljharb/eslint-config": "^20.1.0", + "aud": "^1.1.5", + "browserify": "^16.5.2", + "eclint": "^2.8.1", + "eslint": "^8.6.0", + "evalmd": "^0.0.17", + "iconv-lite": "^0.4.24", + "in-publish": "^2.0.1", + "mkdirp": "^0.5.1", + "nyc": "^10.3.2", + "qs-iconv": "^1.0.4", + "safe-publish-latest": "^2.0.0", + "safer-buffer": "^2.1.2", + "tape": "^5.4.0" + }, + "scripts": { + "prepublishOnly": "safe-publish-latest && npm run dist", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent readme && npm run --silent lint", + "test": "npm run --silent tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "aud --production", + "readme": "evalmd README.md", + "postlint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')", + "lint": "eslint --ext=js,mjs .", + "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js" + }, + "license": "BSD-3-Clause" +} diff --git a/node_modules/qs/test/index.js b/node_modules/qs/test/index.js new file mode 100644 index 000000000..5e6bc8fbd --- /dev/null +++ b/node_modules/qs/test/index.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./parse'); + +require('./stringify'); + +require('./utils'); diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js new file mode 100644 index 000000000..ad27616ae --- /dev/null +++ b/node_modules/qs/test/parse.js @@ -0,0 +1,587 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('parse()', function (t) { + t.test('parses a simple string', function (st) { + st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); + st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); + st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); + st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); + st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); + st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); + st.deepEqual(qs.parse('foo'), { foo: '' }); + st.deepEqual(qs.parse('foo='), { foo: '' }); + st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); + st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); + st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); + st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); + st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); + st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); + st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); + st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + st.end(); + }); + + t.test('allows enabling dot notation', function (st) { + st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); + st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); + t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); + t.deepEqual( + qs.parse('a[b][c][d][e][f][g][h]=i'), + { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, + 'defaults to a depth of 5' + ); + + t.test('only parses one level when depth = 1', function (st) { + st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); + st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); + st.end(); + }); + + t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); + + t.test('parses an explicit array', function (st) { + st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); + st.end(); + }); + + t.test('parses a mix of simple and explicit arrays', function (st) { + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + + st.end(); + }); + + t.test('parses a nested array', function (st) { + st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); + st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); + st.end(); + }); + + t.test('allows to specify array indices', function (st) { + st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); + st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); + st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); + st.end(); + }); + + t.test('limits specific array indices to arrayLimit', function (st) { + st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); + st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); + + t.test('supports encoded = signs', function (st) { + st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); + st.end(); + }); + + t.test('is ok with url encoded strings', function (st) { + st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); + st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); + st.end(); + }); + + t.test('allows brackets in the value', function (st) { + st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); + st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); + st.end(); + }); + + t.test('allows empty values', function (st) { + st.deepEqual(qs.parse(''), {}); + st.deepEqual(qs.parse(null), {}); + st.deepEqual(qs.parse(undefined), {}); + st.end(); + }); + + t.test('transforms arrays to objects', function (st) { + st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); + st.end(); + }); + + t.test('transforms arrays to objects (dot notation)', function (st) { + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); + st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); + st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + st.end(); + }); + + t.test('correctly prunes undefined values when converting an array to an object', function (st) { + st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); + st.end(); + }); + + t.test('supports malformed uri characters', function (st) { + st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); + st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); + st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); + st.end(); + }); + + t.test('doesn\'t produce empty keys', function (st) { + st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); + st.end(); + }); + + t.test('cannot access Object prototype', function (st) { + qs.parse('constructor[prototype][bad]=bad'); + qs.parse('bad[constructor][prototype][bad]=bad'); + st.equal(typeof Object.prototype.bad, 'undefined'); + st.end(); + }); + + t.test('parses arrays of objects', function (st) { + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); + st.end(); + }); + + t.test('allows for empty strings in arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); + + st.deepEqual( + qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 20 + array indices: null then empty string works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 0 + array brackets: null then empty string works' + ); + + st.deepEqual( + qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 20 + array indices: empty string then null works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 0 + array brackets: empty string then null works' + ); + + st.deepEqual( + qs.parse('a[]=&a[]=b&a[]=c'), + { a: ['', 'b', 'c'] }, + 'array brackets: empty strings work' + ); + st.end(); + }); + + t.test('compacts sparse arrays', function (st) { + st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); + st.end(); + }); + + t.test('parses semi-parsed strings', function (st) { + st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); + st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); + st.end(); + }); + + t.test('parses buffers correctly', function (st) { + var b = SaferBuffer.from('test'); + st.deepEqual(qs.parse({ a: b }), { a: b }); + st.end(); + }); + + t.test('continues parsing when no parent is found', function (st) { + st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); + st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); + st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); + st.end(); + }); + + t.test('does not error when parsing a very long array', function (st) { + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str = str + '&' + str; + } + + st.doesNotThrow(function () { + qs.parse(str); + }); + + st.end(); + }); + + t.test('should not throw when a native prototype has an enumerable property', function (st) { + Object.prototype.crash = ''; + Array.prototype.crash = ''; + st.doesNotThrow(qs.parse.bind(null, 'a=b')); + st.deepEqual(qs.parse('a=b'), { a: 'b' }); + st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + st.end(); + }); + + t.test('parses a string with an alternative string delimiter', function (st) { + st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('parses a string with an alternative RegExp delimiter', function (st) { + st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not use non-splittable objects as delimiters', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding parameter limit', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); + st.end(); + }); + + t.test('allows setting the parameter limit to Infinity', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding array limit', function (st) { + st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); + st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows disabling array parsing', function (st) { + var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false }); + st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } }); + st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array'); + + var emptyBrackets = qs.parse('a[]=b', { parseArrays: false }); + st.deepEqual(emptyBrackets, { a: { 0: 'b' } }); + st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array'); + + st.end(); + }); + + t.test('parses an object', function (st) { + var input = { + 'user[name]': { 'pop[bob]': 3 }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object in dot notation', function (st) { + var input = { + 'user.name': { 'pop[bob]': 3 }, + 'user.email.': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input, { allowDots: true }); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object and not child values', function (st) { + var input = { + 'user[name]': { 'pop[bob]': { test: 3 } }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': { test: 3 } }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('does not blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + st.deepEqual(result, { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + var parsed; + + st.doesNotThrow(function () { + parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + st.equal('bar' in parsed.foo, true); + st.equal('baz' in parsed.foo, true); + st.equal(parsed.foo.bar, 'baz'); + st.deepEqual(parsed.foo.baz, a); + st.end(); + }); + + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { + var a = Object.create(null); + a.b = 'c'; + + st.deepEqual(qs.parse(a), { b: 'c' }); + var result = qs.parse({ a: a }); + st.equal('a' in result, true, 'result has "a" property'); + st.deepEqual(result.a, a); + st.end(); + }); + + t.test('parses dates correctly', function (st) { + var now = new Date(); + st.deepEqual(qs.parse({ a: now }), { a: now }); + st.end(); + }); + + t.test('parses regular expressions correctly', function (st) { + var re = /^test$/; + st.deepEqual(qs.parse({ a: re }), { a: re }); + st.end(); + }); + + t.test('does not allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: false }), + {}, + 'bare "toString" results in {}' + ); + + st.end(); + }); + + t.test('can allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: true }), + { toString: '' }, + 'bare "toString" results in { toString: "" }' + ); + + st.end(); + }); + + t.test('params starting with a closing bracket', function (st) { + st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); + st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); + st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); + st.end(); + }); + + t.test('params starting with a starting bracket', function (st) { + st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); + st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); + st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); + st.end(); + }); + + t.test('add keys to objects', function (st) { + st.deepEqual( + qs.parse('a[b]=c&a=d'), + { a: { b: 'c', d: true } }, + 'can add keys to objects' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString'), + { a: { b: 'c' } }, + 'can not overwrite prototype' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with allowPrototypes true' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { plainObjects: true }), + { __proto__: null, a: { __proto__: null, b: 'c', toString: true } }, + 'can overwrite prototype with plainObjects true' + ); + + st.end(); + }); + + t.test('dunder proto is ignored', function (st) { + var payload = 'categories[__proto__]=login&categories[__proto__]&categories[length]=42'; + var result = qs.parse(payload, { allowPrototypes: true }); + + st.deepEqual( + result, + { + categories: { + length: '42' + } + }, + 'silent [[Prototype]] payload' + ); + + var plainResult = qs.parse(payload, { allowPrototypes: true, plainObjects: true }); + + st.deepEqual( + plainResult, + { + __proto__: null, + categories: { + __proto__: null, + length: '42' + } + }, + 'silent [[Prototype]] payload: plain objects' + ); + + var query = qs.parse('categories[__proto__]=cats&categories[__proto__]=dogs&categories[some][json]=toInject', { allowPrototypes: true }); + + st.notOk(Array.isArray(query.categories), 'is not an array'); + st.notOk(query.categories instanceof Array, 'is not instanceof an array'); + st.deepEqual(query.categories, { some: { json: 'toInject' } }); + st.equal(JSON.stringify(query.categories), '{"some":{"json":"toInject"}}', 'stringifies as a non-array'); + + st.deepEqual( + qs.parse('foo[__proto__][hidden]=value&foo[bar]=stuffs', { allowPrototypes: true }), + { + foo: { + bar: 'stuffs' + } + }, + 'hidden values' + ); + + st.deepEqual( + qs.parse('foo[__proto__][hidden]=value&foo[bar]=stuffs', { allowPrototypes: true, plainObjects: true }), + { + __proto__: null, + foo: { + __proto__: null, + bar: 'stuffs' + } + }, + 'hidden values: plain objects' + ); + + st.end(); + }); + + t.test('can return null objects', { skip: !Object.create }, function (st) { + var expected = Object.create(null); + expected.a = Object.create(null); + expected.a.b = 'c'; + expected.a.hasOwnProperty = 'd'; + st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); + st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); + var expectedArray = Object.create(null); + expectedArray.a = Object.create(null); + expectedArray.a[0] = 'b'; + expectedArray.a.c = 'd'; + st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); + st.end(); + }); + + t.test('can parse with custom encoding', function (st) { + st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { + decoder: function (str) { + var reg = /%([0-9A-F]{2})/ig; + var result = []; + var parts = reg.exec(str); + while (parts) { + result.push(parseInt(parts[1], 16)); + parts = reg.exec(str); + } + return iconv.decode(SaferBuffer.from(result), 'shift_jis').toString(); + } + }), { 県: '大阪府' }); + st.end(); + }); + + t.test('throws error with wrong decoder', function (st) { + st['throws'](function () { + qs.parse({}, { decoder: 'string' }); + }, new TypeError('Decoder has to be a function.')); + st.end(); + }); +}); diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js new file mode 100644 index 000000000..ec4df056a --- /dev/null +++ b/node_modules/qs/test/stringify.js @@ -0,0 +1,598 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('stringify()', function (t) { + t.test('stringifies a querystring object', function (st) { + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: 1 }), 'a=1'); + st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); + st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); + st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); + st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); + st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); + st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); + st.end(); + }); + + t.test('stringifies a nested object', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies a nested object with dots notation', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); + st.end(); + }); + + t.test('stringifies an array value', function (st) { + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), + 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'default => indices' + ); + st.end(); + }); + + t.test('omits nulls when asked', function (st) { + st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); + st.end(); + }); + + t.test('omits nested nulls when asked', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('omits array indices when asked', function (st) { + st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); + st.end(); + }); + + t.test('stringifies a nested array value', function (st) { + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.end(); + }); + + t.test('stringifies a nested array value with dots notation', function (st) { + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a.b[0]=c&a.b[1]=d', + 'indices: stringifies with dots + indices' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a.b[]=c&a.b[]=d', + 'brackets: stringifies with dots + brackets' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false } + ), + 'a.b[0]=c&a.b[1]=d', + 'default: stringifies with dots + indices' + ); + st.end(); + }); + + t.test('stringifies an object inside an array', function (st) { + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D=c', + 'indices => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }), + 'a%5B0%5D%5Bb%5D=c', + 'default => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'indices => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', + 'brackets => brackets' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an array with mixed objects and primitives', function (st) { + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + 'a[][b]=1&a[]=2&a[]=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an object inside an array with dots notation', function (st) { + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b=c', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false } + ), + 'a[0].b=c', + 'default => indices' + ); + + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b.c[0]=1', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b.c[]=1', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false } + ), + 'a[0].b.c[0]=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('does not omit object keys when indices = false', function (st) { + st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when indices=true', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); + st.end(); + }); + + t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); + st.end(); + }); + + t.test('stringifies a complicated object', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies an empty value', function (st) { + st.equal(qs.stringify({ a: '' }), 'a='); + st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); + + st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); + st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); + + st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); + + st.end(); + }); + + t.test('stringifies a null object', { skip: !Object.create }, function (st) { + var obj = Object.create(null); + obj.a = 'b'; + st.equal(qs.stringify(obj), 'a=b'); + st.end(); + }); + + t.test('returns an empty string for invalid input', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(''), ''); + st.end(); + }); + + t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { + var obj = { a: Object.create(null) }; + + obj.a.b = 'c'; + st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('drops keys with a value of undefined', function (st) { + st.equal(qs.stringify({ a: undefined }), ''); + + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); + st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); + st.end(); + }); + + t.test('url encodes values', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('stringifies a date', function (st) { + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + st.equal(qs.stringify({ a: now }), str); + st.end(); + }); + + t.test('stringifies the weird object from qs', function (st) { + st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); + st.end(); + }); + + t.test('skips properties that are part of the object prototype', function (st) { + Object.prototype.crash = 'test'; + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + delete Object.prototype.crash; + st.end(); + }); + + t.test('stringifies boolean values', function (st) { + st.equal(qs.stringify({ a: true }), 'a=true'); + st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); + st.equal(qs.stringify({ b: false }), 'b=false'); + st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies buffer values', function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); + st.end(); + }); + + t.test('stringifies an object using an alternative delimiter', function (st) { + st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); + st.end(); + }); + + t.test('doesn\'t blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.stringify({ a: 'b', c: 'd' }); + global.Buffer = tempBuffer; + st.equal(result, 'a=b&c=d'); + st.end(); + }); + + t.test('selects properties when filter=array', function (st) { + st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); + st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); + + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } + ), + 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2] } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('supports custom representations when filter=function', function (st) { + var calls = 0; + var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; + var filterFunc = function (prefix, value) { + calls += 1; + if (calls === 1) { + st.equal(prefix, '', 'prefix is empty'); + st.equal(value, obj); + } else if (prefix === 'c') { + return void 0; + } else if (value instanceof Date) { + st.equal(prefix, 'e[f]'); + return value.getTime(); + } + return value; + }; + + st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); + st.equal(calls, 5); + st.end(); + }); + + t.test('can disable uri encoding', function (st) { + st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); + st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); + st.end(); + }); + + t.test('can sort the keys', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); + st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); + st.end(); + }); + + t.test('can sort the keys at depth 3 or more too', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: sort, encode: false } + ), + 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' + ); + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: null, encode: false } + ), + 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' + ); + st.end(); + }); + + t.test('can stringify with custom encoding', function (st) { + st.equal(qs.stringify({ 県: '大阪府', '': '' }, { + encoder: function (str) { + if (str.length === 0) { + return ''; + } + var buf = iconv.encode(str, 'shiftjis'); + var result = []; + for (var i = 0; i < buf.length; ++i) { + result.push(buf.readUInt8(i).toString(16)); + } + return '%' + result.join('%'); + } + }), '%8c%a7=%91%e5%8d%e3%95%7b&='); + st.end(); + }); + + t.test('throws error with wrong encoder', function (st) { + st['throws'](function () { + qs.stringify({}, { encoder: 'string' }); + }, new TypeError('Encoder has to be a function.')); + st.end(); + }); + + t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { + encoder: function (buffer) { + if (typeof buffer === 'string') { + return buffer; + } + return String.fromCharCode(buffer.readUInt8(0) + 97); + } + }), 'a=b'); + + st.equal(qs.stringify({ a: SaferBuffer.from('a b') }, { + encoder: function (buffer) { + return buffer; + } + }), 'a=a b'); + st.end(); + }); + + t.test('serializeDate option', function (st) { + var date = new Date(); + st.equal( + qs.stringify({ a: date }), + 'a=' + date.toISOString().replace(/:/g, '%3A'), + 'default is toISOString' + ); + + var mutatedDate = new Date(); + mutatedDate.toISOString = function () { + throw new SyntaxError(); + }; + st['throws'](function () { + mutatedDate.toISOString(); + }, SyntaxError); + st.equal( + qs.stringify({ a: mutatedDate }), + 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), + 'toISOString works even when method is not locally present' + ); + + var specificDate = new Date(6); + st.equal( + qs.stringify( + { a: specificDate }, + { serializeDate: function (d) { return d.getTime() * 7; } } + ), + 'a=42', + 'custom serializeDate function called' + ); + + st.end(); + }); + + t.test('RFC 1738 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC1738 }), 'a+b=a+b'); + st.end(); + }); + + t.test('RFC 3986 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC3986 }), 'a%20b=a%20b'); + st.end(); + }); + + t.test('Backward compatibility to RFC 3986', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }), 'a%20b=a%20b'); + st.end(); + }); + + t.test('Edge cases and unknown formats', function (st) { + ['UFO1234', false, 1234, null, {}, []].forEach( + function (format) { + st['throws']( + function () { + qs.stringify({ a: 'b c' }, { format: format }); + }, + new TypeError('Unknown format option provided.') + ); + } + ); + st.end(); + }); + + t.test('encodeValuesOnly', function (st) { + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } + ), + 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' + ); + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } + ), + 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' + ); + st.end(); + }); + + t.test('encodeValuesOnly - strictNullHandling', function (st) { + st.equal( + qs.stringify( + { a: { b: null } }, + { encodeValuesOnly: true, strictNullHandling: true } + ), + 'a[b]' + ); + st.end(); + }); + + t.test('strictNullHandling works with custom filter', function (st) { + var filter = function (prefix, value) { + return value; + }; + + var options = { strictNullHandling: true, filter: filter }; + st.equal(qs.stringify({ key: null }, options), 'key'); + st.end(); + }); + + t.test('strictNullHandling works with null serializeDate', function (st) { + var serializeDate = function () { + return null; + }; + var options = { strictNullHandling: true, serializeDate: serializeDate }; + var date = new Date(); + st.equal(qs.stringify({ key: date }, options), 'key'); + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/qs/test/utils.js b/node_modules/qs/test/utils.js new file mode 100644 index 000000000..3c7ee5235 --- /dev/null +++ b/node_modules/qs/test/utils.js @@ -0,0 +1,29 @@ +'use strict'; + +var test = require('tape'); +var utils = require('../lib/utils'); + +test('merge()', function (t) { + t.deepEqual(utils.merge(null, true), [null, true], 'merges true into null'); + + t.deepEqual(utils.merge(null, [42]), [null, 42], 'merges null into an array'); + + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); + + var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); + t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); + + var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); + t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); + + var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); + t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); + + var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); + t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + + var noOptionsNonObjectSource = utils.merge({ foo: 'baz' }, 'bar'); + t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true }); + + t.end(); +}); diff --git a/node_modules/repeating/index.js b/node_modules/repeating/index.js new file mode 100644 index 000000000..ccae0d7c3 --- /dev/null +++ b/node_modules/repeating/index.js @@ -0,0 +1,24 @@ +'use strict'; +var isFinite = require('is-finite'); + +module.exports = function (str, n) { + if (typeof str !== 'string') { + throw new TypeError('Expected `input` to be a string'); + } + + if (n < 0 || !isFinite(n)) { + throw new TypeError('Expected `count` to be a positive finite number'); + } + + var ret = ''; + + do { + if (n & 1) { + ret += str; + } + + str += str; + } while ((n >>= 1)); + + return ret; +}; diff --git a/node_modules/repeating/license b/node_modules/repeating/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/repeating/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +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. diff --git a/node_modules/repeating/package.json b/node_modules/repeating/package.json new file mode 100644 index 000000000..0247a2374 --- /dev/null +++ b/node_modules/repeating/package.json @@ -0,0 +1,37 @@ +{ + "name": "repeating", + "version": "2.0.1", + "description": "Repeat a string - fast", + "license": "MIT", + "repository": "sindresorhus/repeating", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "xo && ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "repeat", + "string", + "repeating", + "str", + "text", + "fill", + "pad" + ], + "dependencies": { + "is-finite": "^1.0.0" + }, + "devDependencies": { + "ava": "*", + "xo": "*" + } +} diff --git a/node_modules/repeating/readme.md b/node_modules/repeating/readme.md new file mode 100644 index 000000000..06f0b69f7 --- /dev/null +++ b/node_modules/repeating/readme.md @@ -0,0 +1,30 @@ +# repeating [![Build Status](https://travis-ci.org/sindresorhus/repeating.svg?branch=master)](https://travis-ci.org/sindresorhus/repeating) + +> Repeat a string - fast + + +## Install + +``` +$ npm install --save repeating +``` + + +## Usage + +```js +const repeating = require('repeating'); + +repeating('unicorn ', 100); +//=> 'unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn unicorn ' +``` + + +## Related + +- [repeating-cli](https://github.com/sindresorhus/repeating-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/request/CHANGELOG.md b/node_modules/request/CHANGELOG.md new file mode 100644 index 000000000..af76719b4 --- /dev/null +++ b/node_modules/request/CHANGELOG.md @@ -0,0 +1,674 @@ +## Change Log + +### v2.81.0 (2017/03/09) +- [#2584](https://github.com/request/request/pull/2584) Security issue: Upgrade qs to version 6.4.0 (@sergejmueller) +- [#2574](https://github.com/request/request/pull/2574) Migrating to safe-buffer for improved security. (@mikeal) +- [#2573](https://github.com/request/request/pull/2573) fixes #2572 (@ahmadnassri) + +### v2.80.0 (2017/03/04) +- [#2571](https://github.com/request/request/pull/2571) Correctly format the Host header for IPv6 addresses (@JamesMGreene) +- [#2558](https://github.com/request/request/pull/2558) Update README.md example snippet (@FredKSchott) +- [#2221](https://github.com/request/request/pull/2221) Adding a simple Response object reference in argument specification (@calamarico) +- [#2452](https://github.com/request/request/pull/2452) Adds .timings array with DNC, TCP, request and response times (@nicjansma) +- [#2553](https://github.com/request/request/pull/2553) add ISSUE_TEMPLATE, move PR template (@FredKSchott) +- [#2539](https://github.com/request/request/pull/2539) Create PULL_REQUEST_TEMPLATE.md (@FredKSchott) +- [#2524](https://github.com/request/request/pull/2524) Update caseless to version 0.12.0 🚀 (@greenkeeperio-bot) +- [#2460](https://github.com/request/request/pull/2460) Fix wrong MIME type in example (@OwnageIsMagic) +- [#2514](https://github.com/request/request/pull/2514) Change tags to keywords in package.json (@humphd) +- [#2492](https://github.com/request/request/pull/2492) More lenient gzip decompression (@addaleax) + +### v2.79.0 (2016/11/18) +- [#2368](https://github.com/request/request/pull/2368) Fix typeof check in test-pool.js (@forivall) +- [#2394](https://github.com/request/request/pull/2394) Use `files` in package.json (@SimenB) +- [#2463](https://github.com/request/request/pull/2463) AWS support for session tokens for temporary credentials (@simov) +- [#2467](https://github.com/request/request/pull/2467) Migrate to uuid (@simov, @antialias) +- [#2459](https://github.com/request/request/pull/2459) Update taper to version 0.5.0 🚀 (@greenkeeperio-bot) +- [#2448](https://github.com/request/request/pull/2448) Make other connect timeout test more reliable too (@mscdex) + +### v2.78.0 (2016/11/03) +- [#2447](https://github.com/request/request/pull/2447) Always set request timeout on keep-alive connections (@mscdex) + +### v2.77.0 (2016/11/03) +- [#2439](https://github.com/request/request/pull/2439) Fix socket 'connect' listener handling (@mscdex) +- [#2442](https://github.com/request/request/pull/2442) 👻😱 Node.js 0.10 is unmaintained 😱👻 (@greenkeeperio-bot) +- [#2435](https://github.com/request/request/pull/2435) Add followOriginalHttpMethod to redirect to original HTTP method (@kirrg001) +- [#2414](https://github.com/request/request/pull/2414) Improve test-timeout reliability (@mscdex) + +### v2.76.0 (2016/10/25) +- [#2424](https://github.com/request/request/pull/2424) Handle buffers directly instead of using "bl" (@zertosh) +- [#2415](https://github.com/request/request/pull/2415) Re-enable timeout tests on Travis + other fixes (@mscdex) +- [#2431](https://github.com/request/request/pull/2431) Improve timeouts accuracy and node v6.8.0+ compatibility (@mscdex, @greenkeeperio-bot) +- [#2428](https://github.com/request/request/pull/2428) Update qs to version 6.3.0 🚀 (@greenkeeperio-bot) +- [#2420](https://github.com/request/request/pull/2420) change .on to .once, remove possible memory leaks (@duereg) +- [#2426](https://github.com/request/request/pull/2426) Remove "isFunction" helper in favor of "typeof" check (@zertosh) +- [#2425](https://github.com/request/request/pull/2425) Simplify "defer" helper creation (@zertosh) +- [#2402](https://github.com/request/request/pull/2402) form-data@2.1.1 breaks build 🚨 (@greenkeeperio-bot) +- [#2393](https://github.com/request/request/pull/2393) Update form-data to version 2.1.0 🚀 (@greenkeeperio-bot) + +### v2.75.0 (2016/09/17) +- [#2381](https://github.com/request/request/pull/2381) Drop support for Node 0.10 (@simov) +- [#2377](https://github.com/request/request/pull/2377) Update form-data to version 2.0.0 🚀 (@greenkeeperio-bot) +- [#2353](https://github.com/request/request/pull/2353) Add greenkeeper ignored packages (@simov) +- [#2351](https://github.com/request/request/pull/2351) Update karma-tap to version 3.0.1 🚀 (@greenkeeperio-bot) +- [#2348](https://github.com/request/request/pull/2348) form-data@1.0.1 breaks build 🚨 (@greenkeeperio-bot) +- [#2349](https://github.com/request/request/pull/2349) Check error type instead of string (@scotttrinh) + +### v2.74.0 (2016/07/22) +- [#2295](https://github.com/request/request/pull/2295) Update tough-cookie to 2.3.0 (@stash-sfdc) +- [#2280](https://github.com/request/request/pull/2280) Update karma-tap to version 2.0.1 🚀 (@greenkeeperio-bot) + +### v2.73.0 (2016/07/09) +- [#2240](https://github.com/request/request/pull/2240) Remove connectionErrorHandler to fix #1903 (@zarenner) +- [#2251](https://github.com/request/request/pull/2251) tape@4.6.0 breaks build 🚨 (@greenkeeperio-bot) +- [#2225](https://github.com/request/request/pull/2225) Update docs (@ArtskydJ) +- [#2203](https://github.com/request/request/pull/2203) Update browserify to version 13.0.1 🚀 (@greenkeeperio-bot) +- [#2275](https://github.com/request/request/pull/2275) Update karma to version 1.1.1 🚀 (@greenkeeperio-bot) +- [#2204](https://github.com/request/request/pull/2204) Add codecov.yml and disable PR comments (@simov) +- [#2212](https://github.com/request/request/pull/2212) Fix link to http.IncomingMessage documentation (@nazieb) +- [#2208](https://github.com/request/request/pull/2208) Update to form-data RC4 and pass null values to it (@simov) +- [#2207](https://github.com/request/request/pull/2207) Move aws4 require statement to the top (@simov) +- [#2199](https://github.com/request/request/pull/2199) Update karma-coverage to version 1.0.0 🚀 (@greenkeeperio-bot) +- [#2206](https://github.com/request/request/pull/2206) Update qs to version 6.2.0 🚀 (@greenkeeperio-bot) +- [#2205](https://github.com/request/request/pull/2205) Use server-destory to close hanging sockets in tests (@simov) +- [#2200](https://github.com/request/request/pull/2200) Update karma-cli to version 1.0.0 🚀 (@greenkeeperio-bot) + +### v2.72.0 (2016/04/17) +- [#2176](https://github.com/request/request/pull/2176) Do not try to pipe Gzip responses with no body (@simov) +- [#2175](https://github.com/request/request/pull/2175) Add 'delete' alias for the 'del' API method (@simov, @MuhanZou) +- [#2172](https://github.com/request/request/pull/2172) Add support for deflate content encoding (@czardoz) +- [#2169](https://github.com/request/request/pull/2169) Add callback option (@simov) +- [#2165](https://github.com/request/request/pull/2165) Check for self.req existence inside the write method (@simov) +- [#2167](https://github.com/request/request/pull/2167) Fix TravisCI badge reference master branch (@a0viedo) + +### v2.71.0 (2016/04/12) +- [#2164](https://github.com/request/request/pull/2164) Catch errors from the underlying http module (@simov) + +### v2.70.0 (2016/04/05) +- [#2147](https://github.com/request/request/pull/2147) Update eslint to version 2.5.3 🚀 (@simov, @greenkeeperio-bot) +- [#2009](https://github.com/request/request/pull/2009) Support JSON stringify replacer argument. (@elyobo) +- [#2142](https://github.com/request/request/pull/2142) Update eslint to version 2.5.1 🚀 (@greenkeeperio-bot) +- [#2128](https://github.com/request/request/pull/2128) Update browserify-istanbul to version 2.0.0 🚀 (@greenkeeperio-bot) +- [#2115](https://github.com/request/request/pull/2115) Update eslint to version 2.3.0 🚀 (@simov, @greenkeeperio-bot) +- [#2089](https://github.com/request/request/pull/2089) Fix badges (@simov) +- [#2092](https://github.com/request/request/pull/2092) Update browserify-istanbul to version 1.0.0 🚀 (@greenkeeperio-bot) +- [#2079](https://github.com/request/request/pull/2079) Accept read stream as body option (@simov) +- [#2070](https://github.com/request/request/pull/2070) Update bl to version 1.1.2 🚀 (@greenkeeperio-bot) +- [#2063](https://github.com/request/request/pull/2063) Up bluebird and oauth-sign (@simov) +- [#2058](https://github.com/request/request/pull/2058) Karma fixes for latest versions (@eiriksm) +- [#2057](https://github.com/request/request/pull/2057) Update contributing guidelines (@simov) +- [#2054](https://github.com/request/request/pull/2054) Update qs to version 6.1.0 🚀 (@greenkeeperio-bot) + +### v2.69.0 (2016/01/27) +- [#2041](https://github.com/request/request/pull/2041) restore aws4 as regular dependency (@rmg) + +### v2.68.0 (2016/01/27) +- [#2036](https://github.com/request/request/pull/2036) Add AWS Signature Version 4 (@simov, @mirkods) +- [#2022](https://github.com/request/request/pull/2022) Convert numeric multipart bodies to string (@simov, @feross) +- [#2024](https://github.com/request/request/pull/2024) Update har-validator dependency for nsp advisory #76 (@TylerDixon) +- [#2016](https://github.com/request/request/pull/2016) Update qs to version 6.0.2 🚀 (@greenkeeperio-bot) +- [#2007](https://github.com/request/request/pull/2007) Use the `extend` module instead of util._extend (@simov) +- [#2003](https://github.com/request/request/pull/2003) Update browserify to version 13.0.0 🚀 (@greenkeeperio-bot) +- [#1989](https://github.com/request/request/pull/1989) Update buffer-equal to version 1.0.0 🚀 (@greenkeeperio-bot) +- [#1956](https://github.com/request/request/pull/1956) Check form-data content-length value before setting up the header (@jongyoonlee) +- [#1958](https://github.com/request/request/pull/1958) Use IncomingMessage.destroy method (@simov) +- [#1952](https://github.com/request/request/pull/1952) Adds example for Tor proxy (@prometheansacrifice) +- [#1943](https://github.com/request/request/pull/1943) Update eslint to version 1.10.3 🚀 (@simov, @greenkeeperio-bot) +- [#1924](https://github.com/request/request/pull/1924) Update eslint to version 1.10.1 🚀 (@greenkeeperio-bot) +- [#1915](https://github.com/request/request/pull/1915) Remove content-length and transfer-encoding headers from defaultProxyHeaderWhiteList (@yaxia) + +### v2.67.0 (2015/11/19) +- [#1913](https://github.com/request/request/pull/1913) Update http-signature to version 1.1.0 🚀 (@greenkeeperio-bot) + +### v2.66.0 (2015/11/18) +- [#1906](https://github.com/request/request/pull/1906) Update README URLs based on HTTP redirects (@ReadmeCritic) +- [#1905](https://github.com/request/request/pull/1905) Convert typed arrays into regular buffers (@simov) +- [#1902](https://github.com/request/request/pull/1902) node-uuid@1.4.7 breaks build 🚨 (@greenkeeperio-bot) +- [#1894](https://github.com/request/request/pull/1894) Fix tunneling after redirection from https (Original: #1881) (@simov, @falms) +- [#1893](https://github.com/request/request/pull/1893) Update eslint to version 1.9.0 🚀 (@greenkeeperio-bot) +- [#1852](https://github.com/request/request/pull/1852) Update eslint to version 1.7.3 🚀 (@simov, @greenkeeperio-bot, @paulomcnally, @michelsalib, @arbaaz, @nsklkn, @LoicMahieu, @JoshWillik, @jzaefferer, @ryanwholey, @djchie, @thisconnect, @mgenereu, @acroca, @Sebmaster, @KoltesDigital) +- [#1876](https://github.com/request/request/pull/1876) Implement loose matching for har mime types (@simov) +- [#1875](https://github.com/request/request/pull/1875) Update bluebird to version 3.0.2 🚀 (@simov, @greenkeeperio-bot) +- [#1871](https://github.com/request/request/pull/1871) Update browserify to version 12.0.1 🚀 (@greenkeeperio-bot) +- [#1866](https://github.com/request/request/pull/1866) Add missing quotes on x-token property in README (@miguelmota) +- [#1874](https://github.com/request/request/pull/1874) Fix typo in README.md (@gswalden) +- [#1860](https://github.com/request/request/pull/1860) Improve referer header tests and docs (@simov) +- [#1861](https://github.com/request/request/pull/1861) Remove redundant call to Stream constructor (@watson) +- [#1857](https://github.com/request/request/pull/1857) Fix Referer header to point to the original host name (@simov) +- [#1850](https://github.com/request/request/pull/1850) Update karma-coverage to version 0.5.3 🚀 (@greenkeeperio-bot) +- [#1847](https://github.com/request/request/pull/1847) Use node's latest version when building (@simov) +- [#1836](https://github.com/request/request/pull/1836) Tunnel: fix wrong property name (@KoltesDigital) +- [#1820](https://github.com/request/request/pull/1820) Set href as request.js uses it (@mgenereu) +- [#1840](https://github.com/request/request/pull/1840) Update http-signature to version 1.0.2 🚀 (@greenkeeperio-bot) +- [#1845](https://github.com/request/request/pull/1845) Update istanbul to version 0.4.0 🚀 (@greenkeeperio-bot) + +### v2.65.0 (2015/10/11) +- [#1833](https://github.com/request/request/pull/1833) Update aws-sign2 to version 0.6.0 🚀 (@greenkeeperio-bot) +- [#1811](https://github.com/request/request/pull/1811) Enable loose cookie parsing in tough-cookie (@Sebmaster) +- [#1830](https://github.com/request/request/pull/1830) Bring back tilde ranges for all dependencies (@simov) +- [#1821](https://github.com/request/request/pull/1821) Implement support for RFC 2617 MD5-sess algorithm. (@BigDSK) +- [#1828](https://github.com/request/request/pull/1828) Updated qs dependency to 5.2.0 (@acroca) +- [#1818](https://github.com/request/request/pull/1818) Extract `readResponseBody` method out of `onRequestResponse` (@pvoisin) +- [#1819](https://github.com/request/request/pull/1819) Run stringify once (@mgenereu) +- [#1814](https://github.com/request/request/pull/1814) Updated har-validator to version 2.0.2 (@greenkeeperio-bot) +- [#1807](https://github.com/request/request/pull/1807) Updated tough-cookie to version 2.1.0 (@greenkeeperio-bot) +- [#1800](https://github.com/request/request/pull/1800) Add caret ranges for devDependencies, except eslint (@simov) +- [#1799](https://github.com/request/request/pull/1799) Updated karma-browserify to version 4.4.0 (@greenkeeperio-bot) +- [#1797](https://github.com/request/request/pull/1797) Updated tape to version 4.2.0 (@greenkeeperio-bot) +- [#1788](https://github.com/request/request/pull/1788) Pinned all dependencies (@greenkeeperio-bot) + +### v2.64.0 (2015/09/25) +- [#1787](https://github.com/request/request/pull/1787) npm ignore examples, release.sh and disabled.appveyor.yml (@thisconnect) +- [#1775](https://github.com/request/request/pull/1775) Fix typo in README.md (@djchie) +- [#1776](https://github.com/request/request/pull/1776) Changed word 'conjuction' to read 'conjunction' in README.md (@ryanwholey) +- [#1785](https://github.com/request/request/pull/1785) Revert: Set default application/json content-type when using json option #1772 (@simov) + +### v2.63.0 (2015/09/21) +- [#1772](https://github.com/request/request/pull/1772) Set default application/json content-type when using json option (@jzaefferer) + +### v2.62.0 (2015/09/15) +- [#1768](https://github.com/request/request/pull/1768) Add node 4.0 to the list of build targets (@simov) +- [#1767](https://github.com/request/request/pull/1767) Query strings now cooperate with unix sockets (@JoshWillik) +- [#1750](https://github.com/request/request/pull/1750) Revert doc about installation of tough-cookie added in #884 (@LoicMahieu) +- [#1746](https://github.com/request/request/pull/1746) Missed comma in Readme (@nsklkn) +- [#1743](https://github.com/request/request/pull/1743) Fix options not being initialized in defaults method (@simov) + +### v2.61.0 (2015/08/19) +- [#1721](https://github.com/request/request/pull/1721) Minor fix in README.md (@arbaaz) +- [#1733](https://github.com/request/request/pull/1733) Avoid useless Buffer transformation (@michelsalib) +- [#1726](https://github.com/request/request/pull/1726) Update README.md (@paulomcnally) +- [#1715](https://github.com/request/request/pull/1715) Fix forever option in node > 0.10 #1709 (@calibr) +- [#1716](https://github.com/request/request/pull/1716) Do not create Buffer from Object in setContentLength(iojs v3.0 issue) (@calibr) +- [#1711](https://github.com/request/request/pull/1711) Add ability to detect connect timeouts (@kevinburke) +- [#1712](https://github.com/request/request/pull/1712) Set certificate expiration to August 2, 2018 (@kevinburke) +- [#1700](https://github.com/request/request/pull/1700) debug() when JSON.parse() on a response body fails (@phillipj) + +### v2.60.0 (2015/07/21) +- [#1687](https://github.com/request/request/pull/1687) Fix caseless bug - content-type not being set for multipart/form-data (@simov, @garymathews) + +### v2.59.0 (2015/07/20) +- [#1671](https://github.com/request/request/pull/1671) Add tests and docs for using the agent, agentClass, agentOptions and forever options. Forever option defaults to using http(s).Agent in node 0.12+ (@simov) +- [#1679](https://github.com/request/request/pull/1679) Fix - do not remove OAuth param when using OAuth realm (@simov, @jhalickman) +- [#1668](https://github.com/request/request/pull/1668) updated dependencies (@deamme) +- [#1656](https://github.com/request/request/pull/1656) Fix form method (@simov) +- [#1651](https://github.com/request/request/pull/1651) Preserve HEAD method when using followAllRedirects (@simov) +- [#1652](https://github.com/request/request/pull/1652) Update `encoding` option documentation in README.md (@daniel347x) +- [#1650](https://github.com/request/request/pull/1650) Allow content-type overriding when using the `form` option (@simov) +- [#1646](https://github.com/request/request/pull/1646) Clarify the nature of setting `ca` in `agentOptions` (@jeffcharles) + +### v2.58.0 (2015/06/16) +- [#1638](https://github.com/request/request/pull/1638) Use the `extend` module to deep extend in the defaults method (@simov) +- [#1631](https://github.com/request/request/pull/1631) Move tunnel logic into separate module (@simov) +- [#1634](https://github.com/request/request/pull/1634) Fix OAuth query transport_method (@simov) +- [#1603](https://github.com/request/request/pull/1603) Add codecov (@simov) + +### v2.57.0 (2015/05/31) +- [#1615](https://github.com/request/request/pull/1615) Replace '.client' with '.socket' as the former was deprecated in 2.2.0. (@ChALkeR) + +### v2.56.0 (2015/05/28) +- [#1610](https://github.com/request/request/pull/1610) Bump module dependencies (@simov) +- [#1600](https://github.com/request/request/pull/1600) Extract the querystring logic into separate module (@simov) +- [#1607](https://github.com/request/request/pull/1607) Re-generate certificates (@simov) +- [#1599](https://github.com/request/request/pull/1599) Move getProxyFromURI logic below the check for Invaild URI (#1595) (@simov) +- [#1598](https://github.com/request/request/pull/1598) Fix the way http verbs are defined in order to please intellisense IDEs (@simov, @flannelJesus) +- [#1591](https://github.com/request/request/pull/1591) A few minor fixes: (@simov) +- [#1584](https://github.com/request/request/pull/1584) Refactor test-default tests (according to comments in #1430) (@simov) +- [#1585](https://github.com/request/request/pull/1585) Fixing documentation regarding TLS options (#1583) (@mainakae) +- [#1574](https://github.com/request/request/pull/1574) Refresh the oauth_nonce on redirect (#1573) (@simov) +- [#1570](https://github.com/request/request/pull/1570) Discovered tests that weren't properly running (@seanstrom) +- [#1569](https://github.com/request/request/pull/1569) Fix pause before response arrives (@kevinoid) +- [#1558](https://github.com/request/request/pull/1558) Emit error instead of throw (@simov) +- [#1568](https://github.com/request/request/pull/1568) Fix stall when piping gzipped response (@kevinoid) +- [#1560](https://github.com/request/request/pull/1560) Update combined-stream (@apechimp) +- [#1543](https://github.com/request/request/pull/1543) Initial support for oauth_body_hash on json payloads (@simov, @aesopwolf) +- [#1541](https://github.com/request/request/pull/1541) Fix coveralls (@simov) +- [#1540](https://github.com/request/request/pull/1540) Fix recursive defaults for convenience methods (@simov) +- [#1536](https://github.com/request/request/pull/1536) More eslint style rules (@froatsnook) +- [#1533](https://github.com/request/request/pull/1533) Adding dependency status bar to README.md (@YasharF) +- [#1539](https://github.com/request/request/pull/1539) ensure the latest version of har-validator is included (@ahmadnassri) +- [#1516](https://github.com/request/request/pull/1516) forever+pool test (@devTristan) + +### v2.55.0 (2015/04/05) +- [#1520](https://github.com/request/request/pull/1520) Refactor defaults (@simov) +- [#1525](https://github.com/request/request/pull/1525) Delete request headers with undefined value. (@froatsnook) +- [#1521](https://github.com/request/request/pull/1521) Add promise tests (@simov) +- [#1518](https://github.com/request/request/pull/1518) Fix defaults (@simov) +- [#1515](https://github.com/request/request/pull/1515) Allow static invoking of convenience methods (@simov) +- [#1505](https://github.com/request/request/pull/1505) Fix multipart boundary extraction regexp (@simov) +- [#1510](https://github.com/request/request/pull/1510) Fix basic auth form data (@simov) + +### v2.54.0 (2015/03/24) +- [#1501](https://github.com/request/request/pull/1501) HTTP Archive 1.2 support (@ahmadnassri) +- [#1486](https://github.com/request/request/pull/1486) Add a test for the forever agent (@akshayp) +- [#1500](https://github.com/request/request/pull/1500) Adding handling for no auth method and null bearer (@philberg) +- [#1498](https://github.com/request/request/pull/1498) Add table of contents in readme (@simov) +- [#1477](https://github.com/request/request/pull/1477) Add support for qs options via qsOptions key (@simov) +- [#1496](https://github.com/request/request/pull/1496) Parameters encoded to base 64 should be decoded as UTF-8, not ASCII. (@albanm) +- [#1494](https://github.com/request/request/pull/1494) Update eslint (@froatsnook) +- [#1474](https://github.com/request/request/pull/1474) Require Colon in Basic Auth (@erykwalder) +- [#1481](https://github.com/request/request/pull/1481) Fix baseUrl and redirections. (@burningtree) +- [#1469](https://github.com/request/request/pull/1469) Feature/base url (@froatsnook) +- [#1459](https://github.com/request/request/pull/1459) Add option to time request/response cycle (including rollup of redirects) (@aaron-em) +- [#1468](https://github.com/request/request/pull/1468) Re-enable io.js/node 0.12 build (@simov, @mikeal, @BBB) +- [#1442](https://github.com/request/request/pull/1442) Fixed the issue with strictSSL tests on 0.12 & io.js by explicitly setting a cipher that matches the cert. (@BBB, @nickmccurdy, @demohi, @simov, @0x4139) +- [#1460](https://github.com/request/request/pull/1460) localAddress or proxy config is lost when redirecting (@simov, @0x4139) +- [#1453](https://github.com/request/request/pull/1453) Test on Node.js 0.12 and io.js with allowed failures (@nickmccurdy, @demohi) +- [#1426](https://github.com/request/request/pull/1426) Fixing tests to pass on io.js and node 0.12 (only test-https.js stiff failing) (@mikeal) +- [#1446](https://github.com/request/request/pull/1446) Missing HTTP referer header with redirects Fixes #1038 (@simov, @guimon) +- [#1428](https://github.com/request/request/pull/1428) Deprecate Node v0.8.x (@nylen) +- [#1436](https://github.com/request/request/pull/1436) Add ability to set a requester without setting default options (@tikotzky) +- [#1435](https://github.com/request/request/pull/1435) dry up verb methods (@sethpollack) +- [#1423](https://github.com/request/request/pull/1423) Allow fully qualified multipart content-type header (@simov) +- [#1430](https://github.com/request/request/pull/1430) Fix recursive requester (@tikotzky) +- [#1429](https://github.com/request/request/pull/1429) Throw error when making HEAD request with a body (@tikotzky) +- [#1419](https://github.com/request/request/pull/1419) Add note that the project is broken in 0.12.x (@nylen) +- [#1413](https://github.com/request/request/pull/1413) Fix basic auth (@simov) +- [#1397](https://github.com/request/request/pull/1397) Improve pipe-from-file tests (@nylen) + +### v2.53.0 (2015/02/02) +- [#1396](https://github.com/request/request/pull/1396) Do not rfc3986 escape JSON bodies (@nylen, @simov) +- [#1392](https://github.com/request/request/pull/1392) Improve `timeout` option description (@watson) + +### v2.52.0 (2015/02/02) +- [#1383](https://github.com/request/request/pull/1383) Add missing HTTPS options that were not being passed to tunnel (@brichard19) (@nylen) +- [#1388](https://github.com/request/request/pull/1388) Upgrade mime-types package version (@roderickhsiao) +- [#1389](https://github.com/request/request/pull/1389) Revise Setup Tunnel Function (@seanstrom) +- [#1374](https://github.com/request/request/pull/1374) Allow explicitly disabling tunneling for proxied https destinations (@nylen) +- [#1376](https://github.com/request/request/pull/1376) Use karma-browserify for tests. Add browser test coverage reporter. (@eiriksm) +- [#1366](https://github.com/request/request/pull/1366) Refactor OAuth into separate module (@simov) +- [#1373](https://github.com/request/request/pull/1373) Rewrite tunnel test to be pure Node.js (@nylen) +- [#1371](https://github.com/request/request/pull/1371) Upgrade test reporter (@nylen) +- [#1360](https://github.com/request/request/pull/1360) Refactor basic, bearer, digest auth logic into separate class (@simov) +- [#1354](https://github.com/request/request/pull/1354) Remove circular dependency from debugging code (@nylen) +- [#1351](https://github.com/request/request/pull/1351) Move digest auth into private prototype method (@simov) +- [#1352](https://github.com/request/request/pull/1352) Update hawk dependency to ~2.3.0 (@mridgway) +- [#1353](https://github.com/request/request/pull/1353) Correct travis-ci badge (@dogancelik) +- [#1349](https://github.com/request/request/pull/1349) Make sure we return on errored browser requests. (@eiriksm) +- [#1346](https://github.com/request/request/pull/1346) getProxyFromURI Extraction Refactor (@seanstrom) +- [#1337](https://github.com/request/request/pull/1337) Standardize test ports on 6767 (@nylen) +- [#1341](https://github.com/request/request/pull/1341) Emit FormData error events as Request error events (@nylen, @rwky) +- [#1343](https://github.com/request/request/pull/1343) Clean up readme badges, and add Travis and Coveralls badges (@nylen) +- [#1345](https://github.com/request/request/pull/1345) Update README.md (@Aaron-Hartwig) +- [#1338](https://github.com/request/request/pull/1338) Always wait for server.close() callback in tests (@nylen) +- [#1342](https://github.com/request/request/pull/1342) Add mock https server and redo start of browser tests for this purpose. (@eiriksm) +- [#1339](https://github.com/request/request/pull/1339) Improve auth docs (@nylen) +- [#1335](https://github.com/request/request/pull/1335) Add support for OAuth plaintext signature method (@simov) +- [#1332](https://github.com/request/request/pull/1332) Add clean script to remove test-browser.js after the tests run (@seanstrom) +- [#1327](https://github.com/request/request/pull/1327) Fix errors generating coverage reports. (@nylen) +- [#1330](https://github.com/request/request/pull/1330) Return empty buffer upon empty response body and encoding is set to null (@seanstrom) +- [#1326](https://github.com/request/request/pull/1326) Use faster container-based infrastructure on Travis (@nylen) +- [#1315](https://github.com/request/request/pull/1315) Implement rfc3986 option (@simov, @nylen, @apoco, @DullReferenceException, @mmalecki, @oliamb, @cliffcrosland, @LewisJEllis, @eiriksm, @poislagarde) +- [#1314](https://github.com/request/request/pull/1314) Detect urlencoded form data header via regex (@simov) +- [#1317](https://github.com/request/request/pull/1317) Improve OAuth1.0 server side flow example (@simov) + +### v2.51.0 (2014/12/10) +- [#1310](https://github.com/request/request/pull/1310) Revert changes introduced in https://github.com/request/request/pull/1282 (@simov) + +### v2.50.0 (2014/12/09) +- [#1308](https://github.com/request/request/pull/1308) Add browser test to keep track of browserify compability. (@eiriksm) +- [#1299](https://github.com/request/request/pull/1299) Add optional support for jsonReviver (@poislagarde) +- [#1277](https://github.com/request/request/pull/1277) Add Coveralls configuration (@simov) +- [#1307](https://github.com/request/request/pull/1307) Upgrade form-data, add back browserify compability. Fixes #455. (@eiriksm) +- [#1305](https://github.com/request/request/pull/1305) Fix typo in README.md (@LewisJEllis) +- [#1288](https://github.com/request/request/pull/1288) Update README.md to explain custom file use case (@cliffcrosland) + +### v2.49.0 (2014/11/28) +- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb) +- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki) +- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov) +- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov) +- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok) +- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov) + +### v2.48.0 (2014/11/12) +- [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2) +- [#1253](https://github.com/request/request/pull/1253) Add multipart chunked flag (@simov, @nylen) +- [#1251](https://github.com/request/request/pull/1251) Clarify that defaults() does not modify global defaults (@nylen) +- [#1250](https://github.com/request/request/pull/1250) Improve documentation for pool and maxSockets options (@nylen) +- [#1237](https://github.com/request/request/pull/1237) Documenting error handling when using streams (@vmattos) +- [#1244](https://github.com/request/request/pull/1244) Finalize changelog command (@nylen) +- [#1241](https://github.com/request/request/pull/1241) Fix typo (@alexanderGugel) +- [#1223](https://github.com/request/request/pull/1223) Show latest version number instead of "upcoming" in changelog (@nylen) +- [#1236](https://github.com/request/request/pull/1236) Document how to use custom CA in README (#1229) (@hypesystem) +- [#1228](https://github.com/request/request/pull/1228) Support for oauth with RSA-SHA1 signing (@nylen) +- [#1216](https://github.com/request/request/pull/1216) Made json and multipart options coexist (@nylen, @simov) +- [#1225](https://github.com/request/request/pull/1225) Allow header white/exclusive lists in any case. (@RReverser) + +### v2.47.0 (2014/10/26) +- [#1222](https://github.com/request/request/pull/1222) Move from mikeal/request to request/request (@nylen) +- [#1220](https://github.com/request/request/pull/1220) update qs dependency to 2.3.1 (@FredKSchott) +- [#1212](https://github.com/request/request/pull/1212) Improve tests/test-timeout.js (@nylen) +- [#1219](https://github.com/request/request/pull/1219) remove old globalAgent workaround for node 0.4 (@request) +- [#1214](https://github.com/request/request/pull/1214) Remove cruft left over from optional dependencies (@nylen) +- [#1215](https://github.com/request/request/pull/1215) Add proxyHeaderExclusiveList option for proxy-only headers. (@RReverser) +- [#1211](https://github.com/request/request/pull/1211) Allow 'Host' header instead of 'host' and remember case across redirects (@nylen) +- [#1208](https://github.com/request/request/pull/1208) Improve release script (@nylen) +- [#1213](https://github.com/request/request/pull/1213) Support for custom cookie store (@nylen, @mitsuru) +- [#1197](https://github.com/request/request/pull/1197) Clean up some code around setting the agent (@FredKSchott) +- [#1209](https://github.com/request/request/pull/1209) Improve multipart form append test (@simov) +- [#1207](https://github.com/request/request/pull/1207) Update changelog (@nylen) +- [#1185](https://github.com/request/request/pull/1185) Stream multipart/related bodies (@simov) + +### v2.46.0 (2014/10/23) +- [#1198](https://github.com/request/request/pull/1198) doc for TLS/SSL protocol options (@shawnzhu) +- [#1200](https://github.com/request/request/pull/1200) Add a Gitter chat badge to README.md (@gitter-badger) +- [#1196](https://github.com/request/request/pull/1196) Upgrade taper test reporter to v0.3.0 (@nylen) +- [#1199](https://github.com/request/request/pull/1199) Fix lint error: undeclared var i (@nylen) +- [#1191](https://github.com/request/request/pull/1191) Move self.proxy decision logic out of init and into a helper (@FredKSchott) +- [#1190](https://github.com/request/request/pull/1190) Move _buildRequest() logic back into init (@FredKSchott) +- [#1186](https://github.com/request/request/pull/1186) Support Smarter Unix URL Scheme (@FredKSchott) +- [#1178](https://github.com/request/request/pull/1178) update form documentation for new usage (@FredKSchott) +- [#1180](https://github.com/request/request/pull/1180) Enable no-mixed-requires linting rule (@nylen) +- [#1184](https://github.com/request/request/pull/1184) Don't forward authorization header across redirects to different hosts (@nylen) +- [#1183](https://github.com/request/request/pull/1183) Correct README about pre and postamble CRLF using multipart and not mult... (@netpoetica) +- [#1179](https://github.com/request/request/pull/1179) Lint tests directory (@nylen) +- [#1169](https://github.com/request/request/pull/1169) add metadata for form-data file field (@dotcypress) +- [#1173](https://github.com/request/request/pull/1173) remove optional dependencies (@seanstrom) +- [#1165](https://github.com/request/request/pull/1165) Cleanup event listeners and remove function creation from init (@FredKSchott) +- [#1174](https://github.com/request/request/pull/1174) update the request.cookie docs to have a valid cookie example (@seanstrom) +- [#1168](https://github.com/request/request/pull/1168) create a detach helper and use detach helper in replace of nextTick (@seanstrom) +- [#1171](https://github.com/request/request/pull/1171) in post can send form data and use callback (@MiroRadenovic) +- [#1159](https://github.com/request/request/pull/1159) accept charset for x-www-form-urlencoded content-type (@seanstrom) +- [#1157](https://github.com/request/request/pull/1157) Update README.md: body with json=true (@Rob--W) +- [#1164](https://github.com/request/request/pull/1164) Disable tests/test-timeout.js on Travis (@nylen) +- [#1153](https://github.com/request/request/pull/1153) Document how to run a single test (@nylen) +- [#1144](https://github.com/request/request/pull/1144) adds documentation for the "response" event within the streaming section (@tbuchok) +- [#1162](https://github.com/request/request/pull/1162) Update eslintrc file to no longer allow past errors (@FredKSchott) +- [#1155](https://github.com/request/request/pull/1155) Support/use self everywhere (@seanstrom) +- [#1161](https://github.com/request/request/pull/1161) fix no-use-before-define lint warnings (@emkay) +- [#1156](https://github.com/request/request/pull/1156) adding curly brackets to get rid of lint errors (@emkay) +- [#1151](https://github.com/request/request/pull/1151) Fix localAddress test on OS X (@nylen) +- [#1145](https://github.com/request/request/pull/1145) documentation: fix outdated reference to setCookieSync old name in README (@FredKSchott) +- [#1131](https://github.com/request/request/pull/1131) Update pool documentation (@FredKSchott) +- [#1143](https://github.com/request/request/pull/1143) Rewrite all tests to use tape (@nylen) +- [#1137](https://github.com/request/request/pull/1137) Add ability to specifiy querystring lib in options. (@jgrund) +- [#1138](https://github.com/request/request/pull/1138) allow hostname and port in place of host on uri (@cappslock) +- [#1134](https://github.com/request/request/pull/1134) Fix multiple redirects and `self.followRedirect` (@blakeembrey) +- [#1130](https://github.com/request/request/pull/1130) documentation fix: add note about npm test for contributing (@FredKSchott) +- [#1120](https://github.com/request/request/pull/1120) Support/refactor request setup tunnel (@seanstrom) +- [#1129](https://github.com/request/request/pull/1129) linting fix: convert double quote strings to use single quotes (@FredKSchott) +- [#1124](https://github.com/request/request/pull/1124) linting fix: remove unneccesary semi-colons (@FredKSchott) + +### v2.45.0 (2014/10/06) +- [#1128](https://github.com/request/request/pull/1128) Add test for setCookie regression (@nylen) +- [#1127](https://github.com/request/request/pull/1127) added tests around using objects as values in a query string (@bcoe) +- [#1103](https://github.com/request/request/pull/1103) Support/refactor request constructor (@nylen, @seanstrom) +- [#1119](https://github.com/request/request/pull/1119) add basic linting to request library (@FredKSchott) +- [#1121](https://github.com/request/request/pull/1121) Revert "Explicitly use sync versions of cookie functions" (@nylen) +- [#1118](https://github.com/request/request/pull/1118) linting fix: Restructure bad empty if statement (@FredKSchott) +- [#1117](https://github.com/request/request/pull/1117) Fix a bad check for valid URIs (@FredKSchott) +- [#1113](https://github.com/request/request/pull/1113) linting fix: space out operators (@FredKSchott) +- [#1116](https://github.com/request/request/pull/1116) Fix typo in `noProxyHost` definition (@FredKSchott) +- [#1114](https://github.com/request/request/pull/1114) linting fix: Added a `new` operator that was missing when creating and throwing a new error (@FredKSchott) +- [#1096](https://github.com/request/request/pull/1096) No_proxy support (@samcday) +- [#1107](https://github.com/request/request/pull/1107) linting-fix: remove unused variables (@FredKSchott) +- [#1112](https://github.com/request/request/pull/1112) linting fix: Make return values consistent and more straitforward (@FredKSchott) +- [#1111](https://github.com/request/request/pull/1111) linting fix: authPieces was getting redeclared (@FredKSchott) +- [#1105](https://github.com/request/request/pull/1105) Use strict mode in request (@FredKSchott) +- [#1110](https://github.com/request/request/pull/1110) linting fix: replace lazy '==' with more strict '===' (@FredKSchott) +- [#1109](https://github.com/request/request/pull/1109) linting fix: remove function call from if-else conditional statement (@FredKSchott) +- [#1102](https://github.com/request/request/pull/1102) Fix to allow setting a `requester` on recursive calls to `request.defaults` (@tikotzky) +- [#1095](https://github.com/request/request/pull/1095) Tweaking engines in package.json (@pdehaan) +- [#1082](https://github.com/request/request/pull/1082) Forward the socket event from the httpModule request (@seanstrom) +- [#972](https://github.com/request/request/pull/972) Clarify gzip handling in the README (@kevinoid) +- [#1089](https://github.com/request/request/pull/1089) Mention that encoding defaults to utf8, not Buffer (@stuartpb) +- [#1088](https://github.com/request/request/pull/1088) Fix cookie example in README.md and make it more clear (@pipi32167) +- [#1027](https://github.com/request/request/pull/1027) Add support for multipart form data in request options. (@crocket) +- [#1076](https://github.com/request/request/pull/1076) use Request.abort() to abort the request when the request has timed-out (@seanstrom) +- [#1068](https://github.com/request/request/pull/1068) add optional postamble required by .NET multipart requests (@netpoetica) + +### v2.43.0 (2014/09/18) +- [#1057](https://github.com/request/request/pull/1057) Defaults should not overwrite defined options (@davidwood) +- [#1046](https://github.com/request/request/pull/1046) Propagate datastream errors, useful in case gzip fails. (@ZJONSSON, @Janpot) +- [#1063](https://github.com/request/request/pull/1063) copy the input headers object #1060 (@finnp) +- [#1031](https://github.com/request/request/pull/1031) Explicitly use sync versions of cookie functions (@ZJONSSON) +- [#1056](https://github.com/request/request/pull/1056) Fix redirects when passing url.parse(x) as URL to convenience method (@nylen) + +### v2.42.0 (2014/09/04) +- [#1053](https://github.com/request/request/pull/1053) Fix #1051 Parse auth properly when using non-tunneling proxy (@isaacs) + +### v2.41.0 (2014/09/04) +- [#1050](https://github.com/request/request/pull/1050) Pass whitelisted headers to tunneling proxy. Organize all tunneling logic. (@isaacs, @Feldhacker) +- [#1035](https://github.com/request/request/pull/1035) souped up nodei.co badge (@rvagg) +- [#1048](https://github.com/request/request/pull/1048) Aws is now possible over a proxy (@steven-aerts) +- [#1039](https://github.com/request/request/pull/1039) extract out helper functions to a helper file (@seanstrom) +- [#1021](https://github.com/request/request/pull/1021) Support/refactor indexjs (@seanstrom) +- [#1033](https://github.com/request/request/pull/1033) Improve and document debug options (@nylen) +- [#1034](https://github.com/request/request/pull/1034) Fix readme headings (@nylen) +- [#1030](https://github.com/request/request/pull/1030) Allow recursive request.defaults (@tikotzky) +- [#1029](https://github.com/request/request/pull/1029) Fix a couple of typos (@nylen) +- [#675](https://github.com/request/request/pull/675) Checking for SSL fault on connection before reading SSL properties (@VRMink) +- [#989](https://github.com/request/request/pull/989) Added allowRedirect function. Should return true if redirect is allowed or false otherwise (@doronin) +- [#1025](https://github.com/request/request/pull/1025) [fixes #1023] Set self._ended to true once response has ended (@mridgway) +- [#1020](https://github.com/request/request/pull/1020) Add back removed debug metadata (@FredKSchott) +- [#1008](https://github.com/request/request/pull/1008) Moving to module instead of cutomer buffer concatenation. (@mikeal) +- [#770](https://github.com/request/request/pull/770) Added dependency badge for README file; (@timgluz, @mafintosh, @lalitkapoor, @stash, @bobyrizov) +- [#1016](https://github.com/request/request/pull/1016) toJSON no longer results in an infinite loop, returns simple objects (@FredKSchott) +- [#1018](https://github.com/request/request/pull/1018) Remove pre-0.4.4 HTTPS fix (@mmalecki) +- [#1006](https://github.com/request/request/pull/1006) Migrate to caseless, fixes #1001 (@mikeal) +- [#995](https://github.com/request/request/pull/995) Fix parsing array of objects (@sjonnet19) +- [#999](https://github.com/request/request/pull/999) Fix fallback for browserify for optional modules. (@eiriksm) +- [#996](https://github.com/request/request/pull/996) Wrong oauth signature when multiple same param keys exist [updated] (@bengl) + +### v2.40.0 (2014/08/06) +- [#992](https://github.com/request/request/pull/992) Fix security vulnerability. Update qs (@poeticninja) +- [#988](https://github.com/request/request/pull/988) “--” -> “—” (@upisfree) +- [#987](https://github.com/request/request/pull/987) Show optional modules as being loaded by the module that reqeusted them (@iarna) + +### v2.39.0 (2014/07/24) +- [#976](https://github.com/request/request/pull/976) Update README.md (@pvoznenko) + +### v2.38.0 (2014/07/22) +- [#952](https://github.com/request/request/pull/952) Adding support to client certificate with proxy use case (@ofirshaked) +- [#884](https://github.com/request/request/pull/884) Documented tough-cookie installation. (@wbyoung) +- [#935](https://github.com/request/request/pull/935) Correct repository url (@fritx) +- [#963](https://github.com/request/request/pull/963) Update changelog (@nylen) +- [#960](https://github.com/request/request/pull/960) Support gzip with encoding on node pre-v0.9.4 (@kevinoid) +- [#953](https://github.com/request/request/pull/953) Add async Content-Length computation when using form-data (@LoicMahieu) +- [#844](https://github.com/request/request/pull/844) Add support for HTTP[S]_PROXY environment variables. Fixes #595. (@jvmccarthy) +- [#946](https://github.com/request/request/pull/946) defaults: merge headers (@aj0strow) + +### v2.37.0 (2014/07/07) +- [#957](https://github.com/request/request/pull/957) Silence EventEmitter memory leak warning #311 (@watson) +- [#955](https://github.com/request/request/pull/955) check for content-length header before setting it in nextTick (@camilleanne) +- [#951](https://github.com/request/request/pull/951) Add support for gzip content decoding (@kevinoid) +- [#949](https://github.com/request/request/pull/949) Manually enter querystring in form option (@charlespwd) +- [#944](https://github.com/request/request/pull/944) Make request work with browserify (@eiriksm) +- [#943](https://github.com/request/request/pull/943) New mime module (@eiriksm) +- [#927](https://github.com/request/request/pull/927) Bump version of hawk dep. (@samccone) +- [#907](https://github.com/request/request/pull/907) append secureOptions to poolKey (@medovob) + +### v2.35.0 (2014/05/17) +- [#901](https://github.com/request/request/pull/901) Fixes #555 (@pigulla) +- [#897](https://github.com/request/request/pull/897) merge with default options (@vohof) +- [#891](https://github.com/request/request/pull/891) fixes 857 - options object is mutated by calling request (@lalitkapoor) +- [#869](https://github.com/request/request/pull/869) Pipefilter test (@tgohn) +- [#866](https://github.com/request/request/pull/866) Fix typo (@dandv) +- [#861](https://github.com/request/request/pull/861) Add support for RFC 6750 Bearer Tokens (@phedny) +- [#809](https://github.com/request/request/pull/809) upgrade tunnel-proxy to 0.4.0 (@ksato9700) +- [#850](https://github.com/request/request/pull/850) Fix word consistency in readme (@0xNobody) +- [#810](https://github.com/request/request/pull/810) add some exposition to mpu example in README.md (@mikermcneil) +- [#840](https://github.com/request/request/pull/840) improve error reporting for invalid protocols (@FND) +- [#821](https://github.com/request/request/pull/821) added secureOptions back (@nw) +- [#815](https://github.com/request/request/pull/815) Create changelog based on pull requests (@lalitkapoor) + +### v2.34.0 (2014/02/18) +- [#516](https://github.com/request/request/pull/516) UNIX Socket URL Support (@lyuzashi) +- [#801](https://github.com/request/request/pull/801) 794 ignore cookie parsing and domain errors (@lalitkapoor) +- [#802](https://github.com/request/request/pull/802) Added the Apache license to the package.json. (@keskival) +- [#793](https://github.com/request/request/pull/793) Adds content-length calculation when submitting forms using form-data li... (@Juul) +- [#785](https://github.com/request/request/pull/785) Provide ability to override content-type when `json` option used (@vvo) +- [#781](https://github.com/request/request/pull/781) simpler isReadStream function (@joaojeronimo) + +### v2.32.0 (2014/01/16) +- [#767](https://github.com/request/request/pull/767) Use tough-cookie CookieJar sync API (@stash) +- [#764](https://github.com/request/request/pull/764) Case-insensitive authentication scheme (@bobyrizov) +- [#763](https://github.com/request/request/pull/763) Upgrade tough-cookie to 0.10.0 (@stash) +- [#744](https://github.com/request/request/pull/744) Use Cookie.parse (@lalitkapoor) +- [#757](https://github.com/request/request/pull/757) require aws-sign2 (@mafintosh) + +### v2.31.0 (2014/01/08) +- [#645](https://github.com/request/request/pull/645) update twitter api url to v1.1 (@mick) +- [#746](https://github.com/request/request/pull/746) README: Markdown code highlight (@weakish) +- [#745](https://github.com/request/request/pull/745) updating setCookie example to make it clear that the callback is required (@emkay) +- [#742](https://github.com/request/request/pull/742) Add note about JSON output body type (@iansltx) +- [#741](https://github.com/request/request/pull/741) README example is using old cookie jar api (@emkay) +- [#736](https://github.com/request/request/pull/736) Fix callback arguments documentation (@mmalecki) +- [#732](https://github.com/request/request/pull/732) JSHINT: Creating global 'for' variable. Should be 'for (var ...'. (@Fritz-Lium) +- [#730](https://github.com/request/request/pull/730) better HTTP DIGEST support (@dai-shi) +- [#728](https://github.com/request/request/pull/728) Fix TypeError when calling request.cookie (@scarletmeow) +- [#727](https://github.com/request/request/pull/727) fix requester bug (@jchris) +- [#724](https://github.com/request/request/pull/724) README.md: add custom HTTP Headers example. (@tcort) +- [#719](https://github.com/request/request/pull/719) Made a comment gender neutral. (@unsetbit) +- [#715](https://github.com/request/request/pull/715) Request.multipart no longer crashes when header 'Content-type' present (@pastaclub) +- [#710](https://github.com/request/request/pull/710) Fixing listing in callback part of docs. (@lukasz-zak) +- [#696](https://github.com/request/request/pull/696) Edited README.md for formatting and clarity of phrasing (@Zearin) +- [#694](https://github.com/request/request/pull/694) Typo in README (@VRMink) +- [#690](https://github.com/request/request/pull/690) Handle blank password in basic auth. (@diversario) +- [#682](https://github.com/request/request/pull/682) Optional dependencies (@Turbo87) +- [#683](https://github.com/request/request/pull/683) Travis CI support (@Turbo87) +- [#674](https://github.com/request/request/pull/674) change cookie module,to tough-cookie.please check it . (@sxyizhiren) +- [#666](https://github.com/request/request/pull/666) make `ciphers` and `secureProtocol` to work in https request (@richarddong) +- [#656](https://github.com/request/request/pull/656) Test case for #304. (@diversario) +- [#662](https://github.com/request/request/pull/662) option.tunnel to explicitly disable tunneling (@seanmonstar) +- [#659](https://github.com/request/request/pull/659) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm) +- [#630](https://github.com/request/request/pull/630) Send random cnonce for HTTP Digest requests (@wprl) +- [#619](https://github.com/request/request/pull/619) decouple things a bit (@joaojeronimo) +- [#613](https://github.com/request/request/pull/613) Fixes #583, moved initialization of self.uri.pathname (@lexander) +- [#605](https://github.com/request/request/pull/605) Only include ":" + pass in Basic Auth if it's defined (fixes #602) (@bendrucker) +- [#596](https://github.com/request/request/pull/596) Global agent is being used when pool is specified (@Cauldrath) +- [#594](https://github.com/request/request/pull/594) Emit complete event when there is no callback (@RomainLK) +- [#601](https://github.com/request/request/pull/601) Fixed a small typo (@michalstanko) +- [#589](https://github.com/request/request/pull/589) Prevent setting headers after they are sent (@geek) +- [#587](https://github.com/request/request/pull/587) Global cookie jar disabled by default (@threepointone) +- [#544](https://github.com/request/request/pull/544) Update http-signature version. (@davidlehn) +- [#581](https://github.com/request/request/pull/581) Fix spelling of "ignoring." (@bigeasy) +- [#568](https://github.com/request/request/pull/568) use agentOptions to create agent when specified in request (@SamPlacette) +- [#564](https://github.com/request/request/pull/564) Fix redirections (@criloz) +- [#541](https://github.com/request/request/pull/541) The exported request function doesn't have an auth method (@tschaub) +- [#542](https://github.com/request/request/pull/542) Expose Request class (@regality) +- [#536](https://github.com/request/request/pull/536) Allow explicitly empty user field for basic authentication. (@mikeando) +- [#532](https://github.com/request/request/pull/532) fix typo (@fredericosilva) +- [#497](https://github.com/request/request/pull/497) Added redirect event (@Cauldrath) +- [#503](https://github.com/request/request/pull/503) Fix basic auth for passwords that contain colons (@tonistiigi) +- [#521](https://github.com/request/request/pull/521) Improving test-localAddress.js (@noway) +- [#529](https://github.com/request/request/pull/529) dependencies versions bump (@jodaka) +- [#523](https://github.com/request/request/pull/523) Updating dependencies (@noway) +- [#520](https://github.com/request/request/pull/520) Fixing test-tunnel.js (@noway) +- [#519](https://github.com/request/request/pull/519) Update internal path state on post-creation QS changes (@jblebrun) +- [#510](https://github.com/request/request/pull/510) Add HTTP Signature support. (@davidlehn) +- [#502](https://github.com/request/request/pull/502) Fix POST (and probably other) requests that are retried after 401 Unauthorized (@nylen) +- [#508](https://github.com/request/request/pull/508) Honor the .strictSSL option when using proxies (tunnel-agent) (@jhs) +- [#512](https://github.com/request/request/pull/512) Make password optional to support the format: http://username@hostname/ (@pajato1) +- [#513](https://github.com/request/request/pull/513) add 'localAddress' support (@yyfrankyy) +- [#498](https://github.com/request/request/pull/498) Moving response emit above setHeaders on destination streams (@kenperkins) +- [#490](https://github.com/request/request/pull/490) Empty response body (3-rd argument) must be passed to callback as an empty string (@Olegas) +- [#479](https://github.com/request/request/pull/479) Changing so if Accept header is explicitly set, sending json does not ov... (@RoryH) +- [#475](https://github.com/request/request/pull/475) Use `unescape` from `querystring` (@shimaore) +- [#473](https://github.com/request/request/pull/473) V0.10 compat (@isaacs) +- [#471](https://github.com/request/request/pull/471) Using querystring library from visionmedia (@kbackowski) +- [#461](https://github.com/request/request/pull/461) Strip the UTF8 BOM from a UTF encoded response (@kppullin) +- [#460](https://github.com/request/request/pull/460) hawk 0.10.0 (@hueniverse) +- [#462](https://github.com/request/request/pull/462) if query params are empty, then request path shouldn't end with a '?' (merges cleanly now) (@jaipandya) +- [#456](https://github.com/request/request/pull/456) hawk 0.9.0 (@hueniverse) +- [#429](https://github.com/request/request/pull/429) Copy options before adding callback. (@nrn, @nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) +- [#454](https://github.com/request/request/pull/454) Destroy the response if present when destroying the request (clean merge) (@mafintosh) +- [#310](https://github.com/request/request/pull/310) Twitter Oauth Stuff Out of Date; Now Updated (@joemccann, @isaacs, @mscdex) +- [#413](https://github.com/request/request/pull/413) rename googledoodle.png to .jpg (@nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) +- [#448](https://github.com/request/request/pull/448) Convenience method for PATCH (@mloar) +- [#444](https://github.com/request/request/pull/444) protect against double callbacks on error path (@spollack) +- [#433](https://github.com/request/request/pull/433) Added support for HTTPS cert & key (@mmalecki) +- [#430](https://github.com/request/request/pull/430) Respect specified {Host,host} headers, not just {host} (@andrewschaaf) +- [#415](https://github.com/request/request/pull/415) Fixed a typo. (@jerem) +- [#338](https://github.com/request/request/pull/338) Add more auth options, including digest support (@nylen) +- [#403](https://github.com/request/request/pull/403) Optimize environment lookup to happen once only (@mmalecki) +- [#398](https://github.com/request/request/pull/398) Add more reporting to tests (@mmalecki) +- [#388](https://github.com/request/request/pull/388) Ensure "safe" toJSON doesn't break EventEmitters (@othiym23) +- [#381](https://github.com/request/request/pull/381) Resolving "Invalid signature. Expected signature base string: " (@landeiro) +- [#380](https://github.com/request/request/pull/380) Fixes missing host header on retried request when using forever agent (@mac-) +- [#376](https://github.com/request/request/pull/376) Headers lost on redirect (@kapetan) +- [#375](https://github.com/request/request/pull/375) Fix for missing oauth_timestamp parameter (@jplock) +- [#374](https://github.com/request/request/pull/374) Correct Host header for proxy tunnel CONNECT (@youurayy) +- [#370](https://github.com/request/request/pull/370) Twitter reverse auth uses x_auth_mode not x_auth_type (@drudge) +- [#369](https://github.com/request/request/pull/369) Don't remove x_auth_mode for Twitter reverse auth (@drudge) +- [#344](https://github.com/request/request/pull/344) Make AWS auth signing find headers correctly (@nlf) +- [#363](https://github.com/request/request/pull/363) rfc3986 on base_uri, now passes tests (@jeffmarshall) +- [#362](https://github.com/request/request/pull/362) Running `rfc3986` on `base_uri` in `oauth.hmacsign` instead of just `encodeURIComponent` (@jeffmarshall) +- [#361](https://github.com/request/request/pull/361) Don't create a Content-Length header if we already have it set (@danjenkins) +- [#360](https://github.com/request/request/pull/360) Delete self._form along with everything else on redirect (@jgautier) +- [#355](https://github.com/request/request/pull/355) stop sending erroneous headers on redirected requests (@azylman) +- [#332](https://github.com/request/request/pull/332) Fix #296 - Only set Content-Type if body exists (@Marsup) +- [#343](https://github.com/request/request/pull/343) Allow AWS to work in more situations, added a note in the README on its usage (@nlf) +- [#320](https://github.com/request/request/pull/320) request.defaults() doesn't need to wrap jar() (@StuartHarris) +- [#322](https://github.com/request/request/pull/322) Fix + test for piped into request bumped into redirect. #321 (@alexindigo) +- [#326](https://github.com/request/request/pull/326) Do not try to remove listener from an undefined connection (@CartoDB) +- [#318](https://github.com/request/request/pull/318) Pass servername to tunneling secure socket creation (@isaacs) +- [#317](https://github.com/request/request/pull/317) Workaround for #313 (@isaacs) +- [#293](https://github.com/request/request/pull/293) Allow parser errors to bubble up to request (@mscdex) +- [#290](https://github.com/request/request/pull/290) A test for #289 (@isaacs) +- [#280](https://github.com/request/request/pull/280) Like in node.js print options if NODE_DEBUG contains the word request (@Filirom1) +- [#207](https://github.com/request/request/pull/207) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs) +- [#214](https://github.com/request/request/pull/214) documenting additional behavior of json option (@jphaas, @vpulim) +- [#272](https://github.com/request/request/pull/272) Boundary begins with CRLF? (@elspoono, @timshadel, @naholyr, @nanodocumet, @TehShrike) +- [#284](https://github.com/request/request/pull/284) Remove stray `console.log()` call in multipart generator. (@bcherry) +- [#241](https://github.com/request/request/pull/241) Composability updates suggested by issue #239 (@polotek) +- [#282](https://github.com/request/request/pull/282) OAuth Authorization header contains non-"oauth_" parameters (@jplock) +- [#279](https://github.com/request/request/pull/279) fix tests with boundary by injecting boundry from header (@benatkin) +- [#273](https://github.com/request/request/pull/273) Pipe back pressure issue (@mafintosh) +- [#268](https://github.com/request/request/pull/268) I'm not OCD seriously (@TehShrike) +- [#263](https://github.com/request/request/pull/263) Bug in OAuth key generation for sha1 (@nanodocumet) +- [#265](https://github.com/request/request/pull/265) uncaughtException when redirected to invalid URI (@naholyr) +- [#262](https://github.com/request/request/pull/262) JSON test should check for equality (@timshadel) +- [#261](https://github.com/request/request/pull/261) Setting 'pool' to 'false' does NOT disable Agent pooling (@timshadel) +- [#249](https://github.com/request/request/pull/249) Fix for the fix of your (closed) issue #89 where self.headers[content-length] is set to 0 for all methods (@sethbridges, @polotek, @zephrax, @jeromegn) +- [#255](https://github.com/request/request/pull/255) multipart allow body === '' ( the empty string ) (@Filirom1) +- [#260](https://github.com/request/request/pull/260) fixed just another leak of 'i' (@sreuter) +- [#246](https://github.com/request/request/pull/246) Fixing the set-cookie header (@jeromegn) +- [#243](https://github.com/request/request/pull/243) Dynamic boundary (@zephrax) +- [#240](https://github.com/request/request/pull/240) don't error when null is passed for options (@polotek) +- [#211](https://github.com/request/request/pull/211) Replace all occurrences of special chars in RFC3986 (@chriso, @vpulim) +- [#224](https://github.com/request/request/pull/224) Multipart content-type change (@janjongboom) +- [#217](https://github.com/request/request/pull/217) need to use Authorization (titlecase) header with Tumblr OAuth (@visnup) +- [#203](https://github.com/request/request/pull/203) Fix cookie and redirect bugs and add auth support for HTTPS tunnel (@vpulim) +- [#199](https://github.com/request/request/pull/199) Tunnel (@isaacs) +- [#198](https://github.com/request/request/pull/198) Bugfix on forever usage of util.inherits (@isaacs) +- [#197](https://github.com/request/request/pull/197) Make ForeverAgent work with HTTPS (@isaacs) +- [#193](https://github.com/request/request/pull/193) Fixes GH-119 (@goatslacker) +- [#188](https://github.com/request/request/pull/188) Add abort support to the returned request (@itay) +- [#176](https://github.com/request/request/pull/176) Querystring option (@csainty) +- [#182](https://github.com/request/request/pull/182) Fix request.defaults to support (uri, options, callback) api (@twilson63) +- [#180](https://github.com/request/request/pull/180) Modified the post, put, head and del shortcuts to support uri optional param (@twilson63) +- [#179](https://github.com/request/request/pull/179) fix to add opts in .pipe(stream, opts) (@substack) +- [#177](https://github.com/request/request/pull/177) Issue #173 Support uri as first and optional config as second argument (@twilson63) +- [#170](https://github.com/request/request/pull/170) can't create a cookie in a wrapped request (defaults) (@fabianonunes) +- [#168](https://github.com/request/request/pull/168) Picking off an EasyFix by adding some missing mimetypes. (@serby) +- [#161](https://github.com/request/request/pull/161) Fix cookie jar/headers.cookie collision (#125) (@papandreou) +- [#162](https://github.com/request/request/pull/162) Fix issue #159 (@dpetukhov) +- [#90](https://github.com/request/request/pull/90) add option followAllRedirects to follow post/put redirects (@jroes) +- [#148](https://github.com/request/request/pull/148) Retry Agent (@thejh) +- [#146](https://github.com/request/request/pull/146) Multipart should respect content-type if previously set (@apeace) +- [#144](https://github.com/request/request/pull/144) added "form" option to readme (@petejkim) +- [#133](https://github.com/request/request/pull/133) Fixed cookies parsing (@afanasy) +- [#135](https://github.com/request/request/pull/135) host vs hostname (@iangreenleaf) +- [#132](https://github.com/request/request/pull/132) return the body as a Buffer when encoding is set to null (@jahewson) +- [#112](https://github.com/request/request/pull/112) Support using a custom http-like module (@jhs) +- [#104](https://github.com/request/request/pull/104) Cookie handling contains bugs (@janjongboom) +- [#121](https://github.com/request/request/pull/121) Another patch for cookie handling regression (@jhurliman) +- [#117](https://github.com/request/request/pull/117) Remove the global `i` (@3rd-Eden) +- [#110](https://github.com/request/request/pull/110) Update to Iris Couch URL (@jhs) +- [#86](https://github.com/request/request/pull/86) Can't post binary to multipart requests (@kkaefer) +- [#105](https://github.com/request/request/pull/105) added test for proxy option. (@dominictarr) +- [#102](https://github.com/request/request/pull/102) Implemented cookies - closes issue 82: https://github.com/mikeal/request/issues/82 (@alessioalex) +- [#97](https://github.com/request/request/pull/97) Typo in previous pull causes TypeError in non-0.5.11 versions (@isaacs) +- [#96](https://github.com/request/request/pull/96) Authless parsed url host support (@isaacs) +- [#81](https://github.com/request/request/pull/81) Enhance redirect handling (@danmactough) +- [#78](https://github.com/request/request/pull/78) Don't try to do strictSSL for non-ssl connections (@isaacs) +- [#76](https://github.com/request/request/pull/76) Bug when a request fails and a timeout is set (@Marsup) +- [#70](https://github.com/request/request/pull/70) add test script to package.json (@isaacs, @aheckmann) +- [#73](https://github.com/request/request/pull/73) Fix #71 Respect the strictSSL flag (@isaacs) +- [#69](https://github.com/request/request/pull/69) Flatten chunked requests properly (@isaacs) +- [#67](https://github.com/request/request/pull/67) fixed global variable leaks (@aheckmann) +- [#66](https://github.com/request/request/pull/66) Do not overwrite established content-type headers for read stream deliver (@voodootikigod) +- [#53](https://github.com/request/request/pull/53) Parse json: Issue #51 (@benatkin) +- [#45](https://github.com/request/request/pull/45) Added timeout option (@mbrevoort) +- [#35](https://github.com/request/request/pull/35) The "end" event isn't emitted for some responses (@voxpelli) +- [#31](https://github.com/request/request/pull/31) Error on piping a request to a destination (@tobowers) \ No newline at end of file diff --git a/node_modules/request/LICENSE b/node_modules/request/LICENSE new file mode 100644 index 000000000..a4a9aee0c --- /dev/null +++ b/node_modules/request/LICENSE @@ -0,0 +1,55 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/node_modules/request/README.md b/node_modules/request/README.md new file mode 100644 index 000000000..231739114 --- /dev/null +++ b/node_modules/request/README.md @@ -0,0 +1,1115 @@ + +# Request - Simplified HTTP client + +[![npm package](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/) + +[![Build status](https://img.shields.io/travis/request/request/master.svg?style=flat-square)](https://travis-ci.org/request/request) +[![Coverage](https://img.shields.io/codecov/c/github/request/request.svg?style=flat-square)](https://codecov.io/github/request/request?branch=master) +[![Coverage](https://img.shields.io/coveralls/request/request.svg?style=flat-square)](https://coveralls.io/r/request/request) +[![Dependency Status](https://img.shields.io/david/request/request.svg?style=flat-square)](https://david-dm.org/request/request) +[![Known Vulnerabilities](https://snyk.io/test/npm/request/badge.svg?style=flat-square)](https://snyk.io/test/npm/request) +[![Gitter](https://img.shields.io/badge/gitter-join_chat-blue.svg?style=flat-square)](https://gitter.im/request/request?utm_source=badge) + + +## Super simple to use + +Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. + +```js +var request = require('request'); +request('http://www.google.com', function (error, response, body) { + console.log('error:', error); // Print the error if one occurred + console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received + console.log('body:', body); // Print the HTML for the Google homepage. +}); +``` + + +## Table of contents + +- [Streaming](#streaming) +- [Forms](#forms) +- [HTTP Authentication](#http-authentication) +- [Custom HTTP Headers](#custom-http-headers) +- [OAuth Signing](#oauth-signing) +- [Proxies](#proxies) +- [Unix Domain Sockets](#unix-domain-sockets) +- [TLS/SSL Protocol](#tlsssl-protocol) +- [Support for HAR 1.2](#support-for-har-12) +- [**All Available Options**](#requestoptions-callback) + +Request also offers [convenience methods](#convenience-methods) like +`request.defaults` and `request.post`, and there are +lots of [usage examples](#examples) and several +[debugging techniques](#debugging). + + +--- + + +## Streaming + +You can stream any response to a file stream. + +```js +request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) +``` + +You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). + +```js +fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) +``` + +Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. + +```js +request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) +``` + +Request emits a "response" event when a response is received. The `response` argument will be an instance of [http.IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage). + +```js +request + .get('http://google.com/img.png') + .on('response', function(response) { + console.log(response.statusCode) // 200 + console.log(response.headers['content-type']) // 'image/png' + }) + .pipe(request.put('http://mysite.com/img.png')) +``` + +To easily handle errors when streaming requests, listen to the `error` event before piping: + +```js +request + .get('http://mysite.com/doodle.png') + .on('error', function(err) { + console.log(err) + }) + .pipe(fs.createWriteStream('doodle.png')) +``` + +Now let’s get fancy. + +```js +http.createServer(function (req, resp) { + if (req.url === '/doodle.png') { + if (req.method === 'PUT') { + req.pipe(request.put('http://mysite.com/doodle.png')) + } else if (req.method === 'GET' || req.method === 'HEAD') { + request.get('http://mysite.com/doodle.png').pipe(resp) + } + } +}) +``` + +You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: + +```js +http.createServer(function (req, resp) { + if (req.url === '/doodle.png') { + var x = request('http://mysite.com/doodle.png') + req.pipe(x) + x.pipe(resp) + } +}) +``` + +And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) + +```js +req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) +``` + +Also, none of this new functionality conflicts with requests previous features, it just expands them. + +```js +var r = request.defaults({'proxy':'http://localproxy.com'}) + +http.createServer(function (req, resp) { + if (req.url === '/doodle.png') { + r.get('http://google.com/doodle.png').pipe(resp) + } +}) +``` + +You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. + +[back to top](#table-of-contents) + + +--- + + +## Forms + +`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. + + +#### application/x-www-form-urlencoded (URL-Encoded Forms) + +URL-encoded forms are simple. + +```js +request.post('http://service.com/upload', {form:{key:'value'}}) +// or +request.post('http://service.com/upload').form({key:'value'}) +// or +request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ }) +``` + + +#### multipart/form-data (Multipart Form Uploads) + +For `multipart/form-data` we use the [form-data](https://github.com/form-data/form-data) library by [@felixge](https://github.com/felixge). For the most cases, you can pass your upload form data via the `formData` option. + + +```js +var formData = { + // Pass a simple key-value pair + my_field: 'my_value', + // Pass data via Buffers + my_buffer: new Buffer([1, 2, 3]), + // Pass data via Streams + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), + // Pass multiple values /w an Array + attachments: [ + fs.createReadStream(__dirname + '/attachment1.jpg'), + fs.createReadStream(__dirname + '/attachment2.jpg') + ], + // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} + // Use case: for some types of streams, you'll need to provide "file"-related information manually. + // See the `form-data` README for more information about options: https://github.com/form-data/form-data + custom_file: { + value: fs.createReadStream('/dev/urandom'), + options: { + filename: 'topsecret.jpg', + contentType: 'image/jpeg' + } + } +}; +request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) + +```js +// NOTE: Advanced use-case, for normal use see 'formData' usage above +var r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) {...}) +var form = r.form(); +form.append('my_field', 'my_value'); +form.append('my_buffer', new Buffer([1, 2, 3])); +form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'}); +``` +See the [form-data README](https://github.com/form-data/form-data) for more information & examples. + + +#### multipart/related + +Some variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options. + +```js + request({ + method: 'PUT', + preambleCRLF: true, + postambleCRLF: true, + uri: 'http://service.com/upload', + multipart: [ + { + 'content-type': 'application/json', + body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) + }, + { body: 'I am an attachment' }, + { body: fs.createReadStream('image.png') } + ], + // alternatively pass an object containing additional options + multipart: { + chunked: false, + data: [ + { + 'content-type': 'application/json', + body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) + }, + { body: 'I am an attachment' } + ] + } + }, + function (error, response, body) { + if (error) { + return console.error('upload failed:', error); + } + console.log('Upload successful! Server responded with:', body); + }) +``` + +[back to top](#table-of-contents) + + +--- + + +## HTTP Authentication + +```js +request.get('http://some.server.com/').auth('username', 'password', false); +// or +request.get('http://some.server.com/', { + 'auth': { + 'user': 'username', + 'pass': 'password', + 'sendImmediately': false + } +}); +// or +request.get('http://some.server.com/').auth(null, null, true, 'bearerToken'); +// or +request.get('http://some.server.com/', { + 'auth': { + 'bearer': 'bearerToken' + } +}); +``` + +If passed as an option, `auth` should be a hash containing values: + +- `user` || `username` +- `pass` || `password` +- `sendImmediately` (optional) +- `bearer` (optional) + +The method form takes parameters +`auth(username, password, sendImmediately, bearer)`. + +`sendImmediately` defaults to `true`, which causes a basic or bearer +authentication header to be sent. If `sendImmediately` is `false`, then +`request` will retry with a proper authentication header after receiving a +`401` response from the server (which must contain a `WWW-Authenticate` header +indicating the required authentication method). + +Note that you can also specify basic authentication using the URL itself, as +detailed in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt). Simply pass the +`user:password` before the host with an `@` sign: + +```js +var username = 'username', + password = 'password', + url = 'http://' + username + ':' + password + '@some.server.com'; + +request({url: url}, function (error, response, body) { + // Do more stuff with 'body' here +}); +``` + +Digest authentication is supported, but it only works with `sendImmediately` +set to `false`; otherwise `request` will send basic authentication on the +initial request, which will probably cause the request to fail. + +Bearer authentication is supported, and is activated when the `bearer` value is +available. The value may be either a `String` or a `Function` returning a +`String`. Using a function to supply the bearer token is particularly useful if +used in conjunction with `defaults` to allow a single function to supply the +last known token at the time of sending a request, or to compute one on the fly. + +[back to top](#table-of-contents) + + +--- + + +## Custom HTTP Headers + +HTTP Headers, such as `User-Agent`, can be set in the `options` object. +In the example below, we call the github API to find out the number +of stars and forks for the request repository. This requires a +custom `User-Agent` header as well as https. + +```js +var request = require('request'); + +var options = { + url: 'https://api.github.com/repos/request/request', + headers: { + 'User-Agent': 'request' + } +}; + +function callback(error, response, body) { + if (!error && response.statusCode == 200) { + var info = JSON.parse(body); + console.log(info.stargazers_count + " Stars"); + console.log(info.forks_count + " Forks"); + } +} + +request(options, callback); +``` + +[back to top](#table-of-contents) + + +--- + + +## OAuth Signing + +[OAuth version 1.0](https://tools.ietf.org/html/rfc5849) is supported. The +default signing algorithm is +[HMAC-SHA1](https://tools.ietf.org/html/rfc5849#section-3.4.2): + +```js +// OAuth1.0 - 3-legged server side flow (Twitter example) +// step 1 +var qs = require('querystring') + , oauth = + { callback: 'http://mysite.com/callback/' + , consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + } + , url = 'https://api.twitter.com/oauth/request_token' + ; +request.post({url:url, oauth:oauth}, function (e, r, body) { + // Ideally, you would take the body in the response + // and construct a URL that a user clicks on (like a sign in button). + // The verifier is only available in the response after a user has + // verified with twitter that they are authorizing your app. + + // step 2 + var req_data = qs.parse(body) + var uri = 'https://api.twitter.com/oauth/authenticate' + + '?' + qs.stringify({oauth_token: req_data.oauth_token}) + // redirect the user to the authorize uri + + // step 3 + // after the user is redirected back to your server + var auth_data = qs.parse(body) + , oauth = + { consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + , token: auth_data.oauth_token + , token_secret: req_data.oauth_token_secret + , verifier: auth_data.oauth_verifier + } + , url = 'https://api.twitter.com/oauth/access_token' + ; + request.post({url:url, oauth:oauth}, function (e, r, body) { + // ready to make signed requests on behalf of the user + var perm_data = qs.parse(body) + , oauth = + { consumer_key: CONSUMER_KEY + , consumer_secret: CONSUMER_SECRET + , token: perm_data.oauth_token + , token_secret: perm_data.oauth_token_secret + } + , url = 'https://api.twitter.com/1.1/users/show.json' + , qs = + { screen_name: perm_data.screen_name + , user_id: perm_data.user_id + } + ; + request.get({url:url, oauth:oauth, qs:qs, json:true}, function (e, r, user) { + console.log(user) + }) + }) +}) +``` + +For [RSA-SHA1 signing](https://tools.ietf.org/html/rfc5849#section-3.4.3), make +the following changes to the OAuth options object: +* Pass `signature_method : 'RSA-SHA1'` +* Instead of `consumer_secret`, specify a `private_key` string in + [PEM format](http://how2ssl.com/articles/working_with_pem_files/) + +For [PLAINTEXT signing](http://oauth.net/core/1.0/#anchor22), make +the following changes to the OAuth options object: +* Pass `signature_method : 'PLAINTEXT'` + +To send OAuth parameters via query params or in a post body as described in The +[Consumer Request Parameters](http://oauth.net/core/1.0/#consumer_req_param) +section of the oauth1 spec: +* Pass `transport_method : 'query'` or `transport_method : 'body'` in the OAuth + options object. +* `transport_method` defaults to `'header'` + +To use [Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html) you can either +* Manually generate the body hash and pass it as a string `body_hash: '...'` +* Automatically generate the body hash by passing `body_hash: true` + +[back to top](#table-of-contents) + + +--- + + +## Proxies + +If you specify a `proxy` option, then the request (and any subsequent +redirects) will be sent via a connection to the proxy server. + +If your endpoint is an `https` url, and you are using a proxy, then +request will send a `CONNECT` request to the proxy server *first*, and +then use the supplied connection to connect to the endpoint. + +That is, first it will make a request like: + +``` +HTTP/1.1 CONNECT endpoint-server.com:80 +Host: proxy-server.com +User-Agent: whatever user agent you specify +``` + +and then the proxy server make a TCP connection to `endpoint-server` +on port `80`, and return a response that looks like: + +``` +HTTP/1.1 200 OK +``` + +At this point, the connection is left open, and the client is +communicating directly with the `endpoint-server.com` machine. + +See [the wikipedia page on HTTP Tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel) +for more information. + +By default, when proxying `http` traffic, request will simply make a +standard proxied `http` request. This is done by making the `url` +section of the initial line of the request a fully qualified url to +the endpoint. + +For example, it will make a single request that looks like: + +``` +HTTP/1.1 GET http://endpoint-server.com/some-url +Host: proxy-server.com +Other-Headers: all go here + +request body or whatever +``` + +Because a pure "http over http" tunnel offers no additional security +or other features, it is generally simpler to go with a +straightforward HTTP proxy in this case. However, if you would like +to force a tunneling proxy, you may set the `tunnel` option to `true`. + +You can also make a standard proxied `http` request by explicitly setting +`tunnel : false`, but **note that this will allow the proxy to see the traffic +to/from the destination server**. + +If you are using a tunneling proxy, you may set the +`proxyHeaderWhiteList` to share certain headers with the proxy. + +You can also set the `proxyHeaderExclusiveList` to share certain +headers only with the proxy and not with destination host. + +By default, this set is: + +``` +accept +accept-charset +accept-encoding +accept-language +accept-ranges +cache-control +content-encoding +content-language +content-length +content-location +content-md5 +content-range +content-type +connection +date +expect +max-forwards +pragma +proxy-authorization +referer +te +transfer-encoding +user-agent +via +``` + +Note that, when using a tunneling proxy, the `proxy-authorization` +header and any headers from custom `proxyHeaderExclusiveList` are +*never* sent to the endpoint server, but only to the proxy server. + + +### Controlling proxy behaviour using environment variables + +The following environment variables are respected by `request`: + + * `HTTP_PROXY` / `http_proxy` + * `HTTPS_PROXY` / `https_proxy` + * `NO_PROXY` / `no_proxy` + +When `HTTP_PROXY` / `http_proxy` are set, they will be used to proxy non-SSL requests that do not have an explicit `proxy` configuration option present. Similarly, `HTTPS_PROXY` / `https_proxy` will be respected for SSL requests that do not have an explicit `proxy` configuration option. It is valid to define a proxy in one of the environment variables, but then override it for a specific request, using the `proxy` configuration option. Furthermore, the `proxy` configuration option can be explicitly set to false / null to opt out of proxying altogether for that request. + +`request` is also aware of the `NO_PROXY`/`no_proxy` environment variables. These variables provide a granular way to opt out of proxying, on a per-host basis. It should contain a comma separated list of hosts to opt out of proxying. It is also possible to opt of proxying when a particular destination port is used. Finally, the variable may be set to `*` to opt out of the implicit proxy configuration of the other environment variables. + +Here's some examples of valid `no_proxy` values: + + * `google.com` - don't proxy HTTP/HTTPS requests to Google. + * `google.com:443` - don't proxy HTTPS requests to Google, but *do* proxy HTTP requests to Google. + * `google.com:443, yahoo.com:80` - don't proxy HTTPS requests to Google, and don't proxy HTTP requests to Yahoo! + * `*` - ignore `https_proxy`/`http_proxy` environment variables altogether. + +[back to top](#table-of-contents) + + +--- + + +## UNIX Domain Sockets + +`request` supports making requests to [UNIX Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket). To make one, use the following URL scheme: + +```js +/* Pattern */ 'http://unix:SOCKET:PATH' +/* Example */ request.get('http://unix:/absolute/path/to/unix.socket:/request/path') +``` + +Note: The `SOCKET` path is assumed to be absolute to the root of the host file system. + +[back to top](#table-of-contents) + + +--- + + +## TLS/SSL Protocol + +TLS/SSL Protocol options, such as `cert`, `key` and `passphrase`, can be +set directly in `options` object, in the `agentOptions` property of the `options` object, or even in `https.globalAgent.options`. Keep in mind that, although `agentOptions` allows for a slightly wider range of configurations, the recommended way is via `options` object directly, as using `agentOptions` or `https.globalAgent.options` would not be applied in the same way in proxied environments (as data travels through a TLS connection instead of an http/https agent). + +```js +var fs = require('fs') + , path = require('path') + , certFile = path.resolve(__dirname, 'ssl/client.crt') + , keyFile = path.resolve(__dirname, 'ssl/client.key') + , caFile = path.resolve(__dirname, 'ssl/ca.cert.pem') + , request = require('request'); + +var options = { + url: 'https://api.some-server.com/', + cert: fs.readFileSync(certFile), + key: fs.readFileSync(keyFile), + passphrase: 'password', + ca: fs.readFileSync(caFile) +}; + +request.get(options); +``` + +### Using `options.agentOptions` + +In the example below, we call an API requires client side SSL certificate +(in PEM format) with passphrase protected private key (in PEM format) and disable the SSLv3 protocol: + +```js +var fs = require('fs') + , path = require('path') + , certFile = path.resolve(__dirname, 'ssl/client.crt') + , keyFile = path.resolve(__dirname, 'ssl/client.key') + , request = require('request'); + +var options = { + url: 'https://api.some-server.com/', + agentOptions: { + cert: fs.readFileSync(certFile), + key: fs.readFileSync(keyFile), + // Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format: + // pfx: fs.readFileSync(pfxFilePath), + passphrase: 'password', + securityOptions: 'SSL_OP_NO_SSLv3' + } +}; + +request.get(options); +``` + +It is able to force using SSLv3 only by specifying `secureProtocol`: + +```js +request.get({ + url: 'https://api.some-server.com/', + agentOptions: { + secureProtocol: 'SSLv3_method' + } +}); +``` + +It is possible to accept other certificates than those signed by generally allowed Certificate Authorities (CAs). +This can be useful, for example, when using self-signed certificates. +To require a different root certificate, you can specify the signing CA by adding the contents of the CA's certificate file to the `agentOptions`. +The certificate the domain presents must be signed by the root certificate specified: + +```js +request.get({ + url: 'https://api.some-server.com/', + agentOptions: { + ca: fs.readFileSync('ca.cert.pem') + } +}); +``` + +[back to top](#table-of-contents) + + +--- + +## Support for HAR 1.2 + +The `options.har` property will override the values: `url`, `method`, `qs`, `headers`, `form`, `formData`, `body`, `json`, as well as construct multipart data and read files from disk when `request.postData.params[].fileName` is present without a matching `value`. + +a validation step will check if the HAR Request format matches the latest spec (v1.2) and will skip parsing if not matching. + +```js + var request = require('request') + request({ + // will be ignored + method: 'GET', + uri: 'http://www.google.com', + + // HTTP Archive Request Object + har: { + url: 'http://www.mockbin.com/har', + method: 'POST', + headers: [ + { + name: 'content-type', + value: 'application/x-www-form-urlencoded' + } + ], + postData: { + mimeType: 'application/x-www-form-urlencoded', + params: [ + { + name: 'foo', + value: 'bar' + }, + { + name: 'hello', + value: 'world' + } + ] + } + } + }) + + // a POST request will be sent to http://www.mockbin.com + // with body an application/x-www-form-urlencoded body: + // foo=bar&hello=world +``` + +[back to top](#table-of-contents) + + +--- + +## request(options, callback) + +The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. + +- `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` +- `baseUrl` - fully qualified uri string used as the base url. Most useful with `request.defaults`, for example when you want to do many requests to the same domain. If `baseUrl` is `https://example.com/api/`, then requesting `/end/point?test=true` will fetch `https://example.com/api/end/point?test=true`. When `baseUrl` is given, `uri` must also be a string. +- `method` - http method (default: `"GET"`) +- `headers` - http headers (default: `{}`) + +--- + +- `qs` - object containing querystring values to be appended to the `uri` +- `qsParseOptions` - object containing options to pass to the [qs.parse](https://github.com/hapijs/qs#parsing-objects) method. Alternatively pass options to the [querystring.parse](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_parse_str_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}` +- `qsStringifyOptions` - object containing options to pass to the [qs.stringify](https://github.com/hapijs/qs#stringifying) method. Alternatively pass options to the [querystring.stringify](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_stringify_obj_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}`. For example, to change the way arrays are converted to query strings using the `qs` module pass the `arrayFormat` option with one of `indices|brackets|repeat` +- `useQuerystring` - If true, use `querystring` to stringify and parse + querystrings, otherwise use `qs` (default: `false`). Set this option to + `true` if you need arrays to be serialized as `foo=bar&foo=baz` instead of the + default `foo[0]=bar&foo[1]=baz`. + +--- + +- `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer`, `String` or `ReadStream`. If `json` is `true`, then `body` must be a JSON-serializable object. +- `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above. +- `formData` - Data to pass for a `multipart/form-data` request. See + [Forms](#forms) section above. +- `multipart` - array of objects which contain their own headers and `body` + attributes. Sends a `multipart/related` request. See [Forms](#forms) section + above. + - Alternatively you can pass in an object `{chunked: false, data: []}` where + `chunked` is used to specify whether the request is sent in + [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding) + In non-chunked requests, data items with body streams are not allowed. +- `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request. +- `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request. +- `json` - sets `body` to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. +- `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body. +- `jsonReplacer` - a [replacer function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that will be passed to `JSON.stringify()` when stringifying a JSON request body. + +--- + +- `auth` - A hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above. +- `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above. +- `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). +- `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`, and optionally `session` (note that this only works for services that require session as part of the canonical string). Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services). If you want to use AWS sign version 4 use the parameter `sign_version` with value `4` otherwise the default is version 2. **Note:** you need to `npm install aws4` first. +- `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. + +--- + +- `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise. +- `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) +- `followOriginalHttpMethod` - by default we redirect to HTTP method GET. you can enable this property to redirect to the original HTTP method (default: `false`) +- `maxRedirects` - the maximum number of redirects to follow (default: `10`) +- `removeRefererHeader` - removes the referer header when a redirect happens (default: `false`). **Note:** if true, referer header set in the initial request is preserved during redirect chain. + +--- + +- `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default). (**Note:** if you expect binary data, you should set `encoding: null`.) +- `gzip` - If `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response. **Note:** Automatic decoding of the response content is performed on the body data returned through `request` (both through the `request` stream and passed to the callback function) but is not performed on the `response` stream (available from the `response` event) which is the unmodified `http.IncomingMessage` object which may contain compressed data. See example below. +- `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section) + +--- + +- `agent` - `http(s).Agent` instance to use +- `agentClass` - alternatively specify your agent's class name +- `agentOptions` - and pass its options. **Note:** for HTTPS see [tls API doc for TLS/SSL options](http://nodejs.org/api/tls.html#tls_tls_connect_options_callback) and the [documentation above](#using-optionsagentoptions). +- `forever` - set to `true` to use the [forever-agent](https://github.com/request/forever-agent) **Note:** Defaults to `http(s).Agent({keepAlive:true})` in node 0.12+ +- `pool` - An object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as your options allow for it). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool. **Note:** `pool` is used only when the `agent` option is not specified. + - A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`). + - Note that if you are sending multiple requests in a loop and creating + multiple new `pool` objects, `maxSockets` will not work as intended. To + work around this, either use [`request.defaults`](#requestdefaultsoptions) + with your pool options or create the pool object with the `maxSockets` + property outside of the loop. +- `timeout` - Integer containing the number of milliseconds to wait for a +server to send response headers (and start the response body) before aborting +the request. Note that if the underlying TCP connection cannot be established, +the OS-wide TCP connection timeout will overrule the `timeout` option ([the +default in Linux can be anywhere from 20-120 seconds][linux-timeout]). + +[linux-timeout]: http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout + +--- + +- `localAddress` - Local interface to bind for network connections. +- `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) +- `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. +- `tunnel` - controls the behavior of + [HTTP `CONNECT` tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling) + as follows: + - `undefined` (default) - `true` if the destination is `https`, `false` otherwise + - `true` - always tunnel to the destination by making a `CONNECT` request to + the proxy + - `false` - request the destination as a `GET` request. +- `proxyHeaderWhiteList` - A whitelist of headers to send to a + tunneling proxy. +- `proxyHeaderExclusiveList` - A whitelist of headers to send + exclusively to a tunneling proxy and not to destination. + +--- + +- `time` - If `true`, the request-response cycle (including all redirects) is timed at millisecond resolution. When set, the following properties are added to the response object: + - `elapsedTime` Duration of the entire request/response in milliseconds (*deprecated*). + - `responseStartTime` Timestamp when the response began (in Unix Epoch milliseconds) (*deprecated*). + - `timingStart` Timestamp of the start of the request (in Unix Epoch milliseconds). + - `timings` Contains event timestamps in millisecond resolution relative to `timingStart`. If there were redirects, the properties reflect the timings of the final request in the redirect chain: + - `socket` Relative timestamp when the [`http`](https://nodejs.org/api/http.html#http_event_socket) module's `socket` event fires. This happens when the socket is assigned to the request. + - `lookup` Relative timestamp when the [`net`](https://nodejs.org/api/net.html#net_event_lookup) module's `lookup` event fires. This happens when the DNS has been resolved. + - `connect`: Relative timestamp when the [`net`](https://nodejs.org/api/net.html#net_event_connect) module's `connect` event fires. This happens when the server acknowledges the TCP connection. + - `response`: Relative timestamp when the [`http`](https://nodejs.org/api/http.html#http_event_response) module's `response` event fires. This happens when the first bytes are received from the server. + - `end`: Relative timestamp when the last bytes of the response are received. + - `timingPhases` Contains the durations of each request phase. If there were redirects, the properties reflect the timings of the final request in the redirect chain: + - `wait`: Duration of socket initialization (`timings.socket`) + - `dns`: Duration of DNS lookup (`timings.lookup` - `timings.socket`) + - `tcp`: Duration of TCP connection (`timings.connect` - `timings.socket`) + - `firstByte`: Duration of HTTP server response (`timings.response` - `timings.connect`) + - `download`: Duration of HTTP download (`timings.end` - `timings.response`) + - `total`: Duration entire HTTP round-trip (`timings.end`) + +- `har` - A [HAR 1.2 Request Object](http://www.softwareishard.com/blog/har-12-spec/#request), will be processed from HAR format into options overwriting matching values *(see the [HAR 1.2 section](#support-for-har-1.2) for details)* +- `callback` - alternatively pass the request's callback in the options object + +The callback argument gets 3 arguments: + +1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) +2. An [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) object (Response object) +3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) + +[back to top](#table-of-contents) + + +--- + +## Convenience methods + +There are also shorthand methods for different HTTP METHODs and some other conveniences. + + +### request.defaults(options) + +This method **returns a wrapper** around the normal request API that defaults +to whatever options you pass to it. + +**Note:** `request.defaults()` **does not** modify the global request API; +instead, it **returns a wrapper** that has your default settings applied to it. + +**Note:** You can call `.defaults()` on the wrapper that is returned from +`request.defaults` to add/override defaults that were previously defaulted. + +For example: +```js +//requests using baseRequest() will set the 'x-token' header +var baseRequest = request.defaults({ + headers: {'x-token': 'my-token'} +}) + +//requests using specialRequest() will include the 'x-token' header set in +//baseRequest and will also include the 'special' header +var specialRequest = baseRequest.defaults({ + headers: {special: 'special value'} +}) +``` + +### request.put + +Same as `request()`, but defaults to `method: "PUT"`. + +```js +request.put(url) +``` + +### request.patch + +Same as `request()`, but defaults to `method: "PATCH"`. + +```js +request.patch(url) +``` + +### request.post + +Same as `request()`, but defaults to `method: "POST"`. + +```js +request.post(url) +``` + +### request.head + +Same as `request()`, but defaults to `method: "HEAD"`. + +```js +request.head(url) +``` + +### request.del / request.delete + +Same as `request()`, but defaults to `method: "DELETE"`. + +```js +request.del(url) +request.delete(url) +``` + +### request.get + +Same as `request()` (for uniformity). + +```js +request.get(url) +``` +### request.cookie + +Function that creates a new cookie. + +```js +request.cookie('key1=value1') +``` +### request.jar() + +Function that creates a new cookie jar. + +```js +request.jar() +``` + +[back to top](#table-of-contents) + + +--- + + +## Debugging + +There are at least three ways to debug the operation of `request`: + +1. Launch the node process like `NODE_DEBUG=request node script.js` + (`lib,request,otherlib` works too). + +2. Set `require('request').debug = true` at any time (this does the same thing + as #1). + +3. Use the [request-debug module](https://github.com/request/request-debug) to + view request and response headers and bodies. + +[back to top](#table-of-contents) + + +--- + +## Timeouts + +Most requests to external servers should have a timeout attached, in case the +server is not responding in a timely manner. Without a timeout, your code may +have a socket open/consume resources for minutes or more. + +There are two main types of timeouts: **connection timeouts** and **read +timeouts**. A connect timeout occurs if the timeout is hit while your client is +attempting to establish a connection to a remote machine (corresponding to the +[connect() call][connect] on the socket). A read timeout occurs any time the +server is too slow to send back a part of the response. + +These two situations have widely different implications for what went wrong +with the request, so it's useful to be able to distinguish them. You can detect +timeout errors by checking `err.code` for an 'ETIMEDOUT' value. Further, you +can detect whether the timeout was a connection timeout by checking if the +`err.connect` property is set to `true`. + +```js +request.get('http://10.255.255.1', {timeout: 1500}, function(err) { + console.log(err.code === 'ETIMEDOUT'); + // Set to `true` if the timeout was a connection timeout, `false` or + // `undefined` otherwise. + console.log(err.connect === true); + process.exit(0); +}); +``` + +[connect]: http://linux.die.net/man/2/connect + +## Examples: + +```js + var request = require('request') + , rand = Math.floor(Math.random()*100000000).toString() + ; + request( + { method: 'PUT' + , uri: 'http://mikeal.iriscouch.com/testjs/' + rand + , multipart: + [ { 'content-type': 'application/json' + , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) + } + , { body: 'I am an attachment' } + ] + } + , function (error, response, body) { + if(response.statusCode == 201){ + console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) + } else { + console.log('error: '+ response.statusCode) + console.log(body) + } + } + ) +``` + +For backwards-compatibility, response compression is not supported by default. +To accept gzip-compressed responses, set the `gzip` option to `true`. Note +that the body data passed through `request` is automatically decompressed +while the response object is unmodified and will contain compressed data if +the server sent a compressed response. + +```js + var request = require('request') + request( + { method: 'GET' + , uri: 'http://www.google.com' + , gzip: true + } + , function (error, response, body) { + // body is the decompressed response body + console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity')) + console.log('the decoded data is: ' + body) + } + ).on('data', function(data) { + // decompressed data as it is received + console.log('decoded chunk: ' + data) + }) + .on('response', function(response) { + // unmodified http.IncomingMessage object + response.on('data', function(data) { + // compressed data as it is received + console.log('received ' + data.length + ' bytes of compressed data') + }) + }) +``` + +Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). + +```js +var request = request.defaults({jar: true}) +request('http://www.google.com', function () { + request('http://images.google.com') +}) +``` + +To use a custom cookie jar (instead of `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) + +```js +var j = request.jar() +var request = request.defaults({jar:j}) +request('http://www.google.com', function () { + request('http://images.google.com') +}) +``` + +OR + +```js +var j = request.jar(); +var cookie = request.cookie('key1=value1'); +var url = 'http://www.google.com'; +j.setCookie(cookie, url); +request({url: url, jar: j}, function () { + request('http://images.google.com') +}) +``` + +To use a custom cookie store (such as a +[`FileCookieStore`](https://github.com/mitsuru/tough-cookie-filestore) +which supports saving to and restoring from JSON files), pass it as a parameter +to `request.jar()`: + +```js +var FileCookieStore = require('tough-cookie-filestore'); +// NOTE - currently the 'cookies.json' file must already exist! +var j = request.jar(new FileCookieStore('cookies.json')); +request = request.defaults({ jar : j }) +request('http://www.google.com', function() { + request('http://images.google.com') +}) +``` + +The cookie store must be a +[`tough-cookie`](https://github.com/SalesforceEng/tough-cookie) +store and it must support synchronous operations; see the +[`CookieStore` API docs](https://github.com/SalesforceEng/tough-cookie#cookiestore-api) +for details. + +To inspect your cookie jar after a request: + +```js +var j = request.jar() +request({url: 'http://www.google.com', jar: j}, function () { + var cookie_string = j.getCookieString(url); // "key1=value1; key2=value2; ..." + var cookies = j.getCookies(url); + // [{key: 'key1', value: 'value1', domain: "www.google.com", ...}, ...] +}) +``` + +[back to top](#table-of-contents) diff --git a/node_modules/request/index.js b/node_modules/request/index.js new file mode 100755 index 000000000..9ec65ea26 --- /dev/null +++ b/node_modules/request/index.js @@ -0,0 +1,156 @@ +// Copyright 2010-2012 Mikeal Rogers +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict' + +var extend = require('extend') + , cookies = require('./lib/cookies') + , helpers = require('./lib/helpers') + +var paramsHaveRequestBody = helpers.paramsHaveRequestBody + + +// organize params for patch, post, put, head, del +function initParams(uri, options, callback) { + if (typeof options === 'function') { + callback = options + } + + var params = {} + if (typeof options === 'object') { + extend(params, options, {uri: uri}) + } else if (typeof uri === 'string') { + extend(params, {uri: uri}) + } else { + extend(params, uri) + } + + params.callback = callback || params.callback + return params +} + +function request (uri, options, callback) { + if (typeof uri === 'undefined') { + throw new Error('undefined is not a valid uri or options object.') + } + + var params = initParams(uri, options, callback) + + if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { + throw new Error('HTTP HEAD requests MUST NOT include a request body.') + } + + return new request.Request(params) +} + +function verbFunc (verb) { + var method = verb.toUpperCase() + return function (uri, options, callback) { + var params = initParams(uri, options, callback) + params.method = method + return request(params, params.callback) + } +} + +// define like this to please codeintel/intellisense IDEs +request.get = verbFunc('get') +request.head = verbFunc('head') +request.post = verbFunc('post') +request.put = verbFunc('put') +request.patch = verbFunc('patch') +request.del = verbFunc('delete') +request['delete'] = verbFunc('delete') + +request.jar = function (store) { + return cookies.jar(store) +} + +request.cookie = function (str) { + return cookies.parse(str) +} + +function wrapRequestMethod (method, options, requester, verb) { + + return function (uri, opts, callback) { + var params = initParams(uri, opts, callback) + + var target = {} + extend(true, target, options, params) + + target.pool = params.pool || options.pool + + if (verb) { + target.method = verb.toUpperCase() + } + + if (typeof requester === 'function') { + method = requester + } + + return method(target, target.callback) + } +} + +request.defaults = function (options, requester) { + var self = this + + options = options || {} + + if (typeof options === 'function') { + requester = options + options = {} + } + + var defaults = wrapRequestMethod(self, options, requester) + + var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete'] + verbs.forEach(function(verb) { + defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb) + }) + + defaults.cookie = wrapRequestMethod(self.cookie, options, requester) + defaults.jar = self.jar + defaults.defaults = self.defaults + return defaults +} + +request.forever = function (agentOptions, optionsArg) { + var options = {} + if (optionsArg) { + extend(options, optionsArg) + } + if (agentOptions) { + options.agentOptions = agentOptions + } + + options.forever = true + return request.defaults(options) +} + +// Exports + +module.exports = request +request.Request = require('./request') +request.initParams = initParams + +// Backwards compatibility for request.debug +Object.defineProperty(request, 'debug', { + enumerable : true, + get : function() { + return request.Request.debug + }, + set : function(debug) { + request.Request.debug = debug + } +}) diff --git a/node_modules/request/lib/auth.js b/node_modules/request/lib/auth.js new file mode 100644 index 000000000..559ca57be --- /dev/null +++ b/node_modules/request/lib/auth.js @@ -0,0 +1,168 @@ +'use strict' + +var caseless = require('caseless') + , uuid = require('uuid') + , helpers = require('./helpers') + +var md5 = helpers.md5 + , toBase64 = helpers.toBase64 + + +function Auth (request) { + // define all public properties here + this.request = request + this.hasAuth = false + this.sentAuth = false + this.bearerToken = null + this.user = null + this.pass = null +} + +Auth.prototype.basic = function (user, pass, sendImmediately) { + var self = this + if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { + self.request.emit('error', new Error('auth() received invalid user or password')) + } + self.user = user + self.pass = pass + self.hasAuth = true + var header = user + ':' + (pass || '') + if (sendImmediately || typeof sendImmediately === 'undefined') { + var authHeader = 'Basic ' + toBase64(header) + self.sentAuth = true + return authHeader + } +} + +Auth.prototype.bearer = function (bearer, sendImmediately) { + var self = this + self.bearerToken = bearer + self.hasAuth = true + if (sendImmediately || typeof sendImmediately === 'undefined') { + if (typeof bearer === 'function') { + bearer = bearer() + } + var authHeader = 'Bearer ' + (bearer || '') + self.sentAuth = true + return authHeader + } +} + +Auth.prototype.digest = function (method, path, authHeader) { + // TODO: More complete implementation of RFC 2617. + // - handle challenge.domain + // - support qop="auth-int" only + // - handle Authentication-Info (not necessarily?) + // - check challenge.stale (not necessarily?) + // - increase nc (not necessarily?) + // For reference: + // http://tools.ietf.org/html/rfc2617#section-3 + // https://github.com/bagder/curl/blob/master/lib/http_digest.c + + var self = this + + var challenge = {} + var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi + for (;;) { + var match = re.exec(authHeader) + if (!match) { + break + } + challenge[match[1]] = match[2] || match[3] + } + + /** + * RFC 2617: handle both MD5 and MD5-sess algorithms. + * + * If the algorithm directive's value is "MD5" or unspecified, then HA1 is + * HA1=MD5(username:realm:password) + * If the algorithm directive's value is "MD5-sess", then HA1 is + * HA1=MD5(MD5(username:realm:password):nonce:cnonce) + */ + var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) { + var ha1 = md5(user + ':' + realm + ':' + pass) + if (algorithm && algorithm.toLowerCase() === 'md5-sess') { + return md5(ha1 + ':' + nonce + ':' + cnonce) + } else { + return ha1 + } + } + + var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' + var nc = qop && '00000001' + var cnonce = qop && uuid().replace(/-/g, '') + var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce) + var ha2 = md5(method + ':' + path) + var digestResponse = qop + ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) + : md5(ha1 + ':' + challenge.nonce + ':' + ha2) + var authValues = { + username: self.user, + realm: challenge.realm, + nonce: challenge.nonce, + uri: path, + qop: qop, + response: digestResponse, + nc: nc, + cnonce: cnonce, + algorithm: challenge.algorithm, + opaque: challenge.opaque + } + + authHeader = [] + for (var k in authValues) { + if (authValues[k]) { + if (k === 'qop' || k === 'nc' || k === 'algorithm') { + authHeader.push(k + '=' + authValues[k]) + } else { + authHeader.push(k + '="' + authValues[k] + '"') + } + } + } + authHeader = 'Digest ' + authHeader.join(', ') + self.sentAuth = true + return authHeader +} + +Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) { + var self = this + , request = self.request + + var authHeader + if (bearer === undefined && user === undefined) { + self.request.emit('error', new Error('no auth mechanism defined')) + } else if (bearer !== undefined) { + authHeader = self.bearer(bearer, sendImmediately) + } else { + authHeader = self.basic(user, pass, sendImmediately) + } + if (authHeader) { + request.setHeader('authorization', authHeader) + } +} + +Auth.prototype.onResponse = function (response) { + var self = this + , request = self.request + + if (!self.hasAuth || self.sentAuth) { return null } + + var c = caseless(response.headers) + + var authHeader = c.get('www-authenticate') + var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase() + request.debug('reauth', authVerb) + + switch (authVerb) { + case 'basic': + return self.basic(self.user, self.pass, true) + + case 'bearer': + return self.bearer(self.bearerToken, true) + + case 'digest': + return self.digest(request.method, request.path, authHeader) + } +} + +exports.Auth = Auth diff --git a/node_modules/request/lib/cookies.js b/node_modules/request/lib/cookies.js new file mode 100644 index 000000000..412c07d63 --- /dev/null +++ b/node_modules/request/lib/cookies.js @@ -0,0 +1,39 @@ +'use strict' + +var tough = require('tough-cookie') + +var Cookie = tough.Cookie + , CookieJar = tough.CookieJar + + +exports.parse = function(str) { + if (str && str.uri) { + str = str.uri + } + if (typeof str !== 'string') { + throw new Error('The cookie function only accepts STRING as param') + } + return Cookie.parse(str, {loose: true}) +} + +// Adapt the sometimes-Async api of tough.CookieJar to our requirements +function RequestJar(store) { + var self = this + self._jar = new CookieJar(store, {looseMode: true}) +} +RequestJar.prototype.setCookie = function(cookieOrStr, uri, options) { + var self = this + return self._jar.setCookieSync(cookieOrStr, uri, options || {}) +} +RequestJar.prototype.getCookieString = function(uri) { + var self = this + return self._jar.getCookieStringSync(uri) +} +RequestJar.prototype.getCookies = function(uri) { + var self = this + return self._jar.getCookiesSync(uri) +} + +exports.jar = function(store) { + return new RequestJar(store) +} diff --git a/node_modules/request/lib/getProxyFromURI.js b/node_modules/request/lib/getProxyFromURI.js new file mode 100644 index 000000000..c2013a6e1 --- /dev/null +++ b/node_modules/request/lib/getProxyFromURI.js @@ -0,0 +1,79 @@ +'use strict' + +function formatHostname(hostname) { + // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' + return hostname.replace(/^\.*/, '.').toLowerCase() +} + +function parseNoProxyZone(zone) { + zone = zone.trim().toLowerCase() + + var zoneParts = zone.split(':', 2) + , zoneHost = formatHostname(zoneParts[0]) + , zonePort = zoneParts[1] + , hasPort = zone.indexOf(':') > -1 + + return {hostname: zoneHost, port: zonePort, hasPort: hasPort} +} + +function uriInNoProxy(uri, noProxy) { + var port = uri.port || (uri.protocol === 'https:' ? '443' : '80') + , hostname = formatHostname(uri.hostname) + , noProxyList = noProxy.split(',') + + // iterate through the noProxyList until it finds a match. + return noProxyList.map(parseNoProxyZone).some(function(noProxyZone) { + var isMatchedAt = hostname.indexOf(noProxyZone.hostname) + , hostnameMatched = ( + isMatchedAt > -1 && + (isMatchedAt === hostname.length - noProxyZone.hostname.length) + ) + + if (noProxyZone.hasPort) { + return (port === noProxyZone.port) && hostnameMatched + } + + return hostnameMatched + }) +} + +function getProxyFromURI(uri) { + // Decide the proper request proxy to use based on the request URI object and the + // environmental variables (NO_PROXY, HTTP_PROXY, etc.) + // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) + + var noProxy = process.env.NO_PROXY || process.env.no_proxy || '' + + // if the noProxy is a wildcard then return null + + if (noProxy === '*') { + return null + } + + // if the noProxy is not empty and the uri is found return null + + if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { + return null + } + + // Check for HTTP or HTTPS Proxy in environment Else default to null + + if (uri.protocol === 'http:') { + return process.env.HTTP_PROXY || + process.env.http_proxy || null + } + + if (uri.protocol === 'https:') { + return process.env.HTTPS_PROXY || + process.env.https_proxy || + process.env.HTTP_PROXY || + process.env.http_proxy || null + } + + // if none of that works, return null + // (What uri protocol are you using then?) + + return null +} + +module.exports = getProxyFromURI diff --git a/node_modules/request/lib/har.js b/node_modules/request/lib/har.js new file mode 100644 index 000000000..305957487 --- /dev/null +++ b/node_modules/request/lib/har.js @@ -0,0 +1,215 @@ +'use strict' + +var fs = require('fs') +var qs = require('querystring') +var validate = require('har-validator') +var extend = require('extend') + +function Har (request) { + this.request = request +} + +Har.prototype.reducer = function (obj, pair) { + // new property ? + if (obj[pair.name] === undefined) { + obj[pair.name] = pair.value + return obj + } + + // existing? convert to array + var arr = [ + obj[pair.name], + pair.value + ] + + obj[pair.name] = arr + + return obj +} + +Har.prototype.prep = function (data) { + // construct utility properties + data.queryObj = {} + data.headersObj = {} + data.postData.jsonObj = false + data.postData.paramsObj = false + + // construct query objects + if (data.queryString && data.queryString.length) { + data.queryObj = data.queryString.reduce(this.reducer, {}) + } + + // construct headers objects + if (data.headers && data.headers.length) { + // loweCase header keys + data.headersObj = data.headers.reduceRight(function (headers, header) { + headers[header.name] = header.value + return headers + }, {}) + } + + // construct Cookie header + if (data.cookies && data.cookies.length) { + var cookies = data.cookies.map(function (cookie) { + return cookie.name + '=' + cookie.value + }) + + if (cookies.length) { + data.headersObj.cookie = cookies.join('; ') + } + } + + // prep body + function some (arr) { + return arr.some(function (type) { + return data.postData.mimeType.indexOf(type) === 0 + }) + } + + if (some([ + 'multipart/mixed', + 'multipart/related', + 'multipart/form-data', + 'multipart/alternative'])) { + + // reset values + data.postData.mimeType = 'multipart/form-data' + } + + else if (some([ + 'application/x-www-form-urlencoded'])) { + + if (!data.postData.params) { + data.postData.text = '' + } else { + data.postData.paramsObj = data.postData.params.reduce(this.reducer, {}) + + // always overwrite + data.postData.text = qs.stringify(data.postData.paramsObj) + } + } + + else if (some([ + 'text/json', + 'text/x-json', + 'application/json', + 'application/x-json'])) { + + data.postData.mimeType = 'application/json' + + if (data.postData.text) { + try { + data.postData.jsonObj = JSON.parse(data.postData.text) + } catch (e) { + this.request.debug(e) + + // force back to text/plain + data.postData.mimeType = 'text/plain' + } + } + } + + return data +} + +Har.prototype.options = function (options) { + // skip if no har property defined + if (!options.har) { + return options + } + + var har = {} + extend(har, options.har) + + // only process the first entry + if (har.log && har.log.entries) { + har = har.log.entries[0] + } + + // add optional properties to make validation successful + har.url = har.url || options.url || options.uri || options.baseUrl || '/' + har.httpVersion = har.httpVersion || 'HTTP/1.1' + har.queryString = har.queryString || [] + har.headers = har.headers || [] + har.cookies = har.cookies || [] + har.postData = har.postData || {} + har.postData.mimeType = har.postData.mimeType || 'application/octet-stream' + + har.bodySize = 0 + har.headersSize = 0 + har.postData.size = 0 + + if (!validate.request(har)) { + return options + } + + // clean up and get some utility properties + var req = this.prep(har) + + // construct new options + if (req.url) { + options.url = req.url + } + + if (req.method) { + options.method = req.method + } + + if (Object.keys(req.queryObj).length) { + options.qs = req.queryObj + } + + if (Object.keys(req.headersObj).length) { + options.headers = req.headersObj + } + + function test (type) { + return req.postData.mimeType.indexOf(type) === 0 + } + if (test('application/x-www-form-urlencoded')) { + options.form = req.postData.paramsObj + } + else if (test('application/json')) { + if (req.postData.jsonObj) { + options.body = req.postData.jsonObj + options.json = true + } + } + else if (test('multipart/form-data')) { + options.formData = {} + + req.postData.params.forEach(function (param) { + var attachment = {} + + if (!param.fileName && !param.fileName && !param.contentType) { + options.formData[param.name] = param.value + return + } + + // attempt to read from disk! + if (param.fileName && !param.value) { + attachment.value = fs.createReadStream(param.fileName) + } else if (param.value) { + attachment.value = param.value + } + + if (param.fileName) { + attachment.options = { + filename: param.fileName, + contentType: param.contentType ? param.contentType : null + } + } + + options.formData[param.name] = attachment + }) + } + else { + if (req.postData.text) { + options.body = req.postData.text + } + } + + return options +} + +exports.Har = Har diff --git a/node_modules/request/lib/helpers.js b/node_modules/request/lib/helpers.js new file mode 100644 index 000000000..05c77a0bd --- /dev/null +++ b/node_modules/request/lib/helpers.js @@ -0,0 +1,66 @@ +'use strict' + +var jsonSafeStringify = require('json-stringify-safe') + , crypto = require('crypto') + , Buffer = require('safe-buffer').Buffer + +var defer = typeof setImmediate === 'undefined' + ? process.nextTick + : setImmediate + +function paramsHaveRequestBody(params) { + return ( + params.body || + params.requestBodyStream || + (params.json && typeof params.json !== 'boolean') || + params.multipart + ) +} + +function safeStringify (obj, replacer) { + var ret + try { + ret = JSON.stringify(obj, replacer) + } catch (e) { + ret = jsonSafeStringify(obj, replacer) + } + return ret +} + +function md5 (str) { + return crypto.createHash('md5').update(str).digest('hex') +} + +function isReadStream (rs) { + return rs.readable && rs.path && rs.mode +} + +function toBase64 (str) { + return Buffer.from(str || '', 'utf8').toString('base64') +} + +function copy (obj) { + var o = {} + Object.keys(obj).forEach(function (i) { + o[i] = obj[i] + }) + return o +} + +function version () { + var numbers = process.version.replace('v', '').split('.') + return { + major: parseInt(numbers[0], 10), + minor: parseInt(numbers[1], 10), + patch: parseInt(numbers[2], 10) + } +} + +exports.paramsHaveRequestBody = paramsHaveRequestBody +exports.safeStringify = safeStringify +exports.md5 = md5 +exports.isReadStream = isReadStream +exports.toBase64 = toBase64 +exports.copy = copy +exports.version = version +exports.defer = defer diff --git a/node_modules/request/lib/multipart.js b/node_modules/request/lib/multipart.js new file mode 100644 index 000000000..fc7b50276 --- /dev/null +++ b/node_modules/request/lib/multipart.js @@ -0,0 +1,113 @@ +'use strict' + +var uuid = require('uuid') + , CombinedStream = require('combined-stream') + , isstream = require('isstream') + , Buffer = require('safe-buffer').Buffer + + +function Multipart (request) { + this.request = request + this.boundary = uuid() + this.chunked = false + this.body = null +} + +Multipart.prototype.isChunked = function (options) { + var self = this + , chunked = false + , parts = options.data || options + + if (!parts.forEach) { + self.request.emit('error', new Error('Argument error, options.multipart.')) + } + + if (options.chunked !== undefined) { + chunked = options.chunked + } + + if (self.request.getHeader('transfer-encoding') === 'chunked') { + chunked = true + } + + if (!chunked) { + parts.forEach(function (part) { + if (typeof part.body === 'undefined') { + self.request.emit('error', new Error('Body attribute missing in multipart.')) + } + if (isstream(part.body)) { + chunked = true + } + }) + } + + return chunked +} + +Multipart.prototype.setHeaders = function (chunked) { + var self = this + + if (chunked && !self.request.hasHeader('transfer-encoding')) { + self.request.setHeader('transfer-encoding', 'chunked') + } + + var header = self.request.getHeader('content-type') + + if (!header || header.indexOf('multipart') === -1) { + self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) + } else { + if (header.indexOf('boundary') !== -1) { + self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') + } else { + self.request.setHeader('content-type', header + '; boundary=' + self.boundary) + } + } +} + +Multipart.prototype.build = function (parts, chunked) { + var self = this + var body = chunked ? new CombinedStream() : [] + + function add (part) { + if (typeof part === 'number') { + part = part.toString() + } + return chunked ? body.append(part) : body.push(Buffer.from(part)) + } + + if (self.request.preambleCRLF) { + add('\r\n') + } + + parts.forEach(function (part) { + var preamble = '--' + self.boundary + '\r\n' + Object.keys(part).forEach(function (key) { + if (key === 'body') { return } + preamble += key + ': ' + part[key] + '\r\n' + }) + preamble += '\r\n' + add(preamble) + add(part.body) + add('\r\n') + }) + add('--' + self.boundary + '--') + + if (self.request.postambleCRLF) { + add('\r\n') + } + + return body +} + +Multipart.prototype.onRequest = function (options) { + var self = this + + var chunked = self.isChunked(options) + , parts = options.data || options + + self.setHeaders(chunked) + self.chunked = chunked + self.body = self.build(parts, chunked) +} + +exports.Multipart = Multipart diff --git a/node_modules/request/lib/oauth.js b/node_modules/request/lib/oauth.js new file mode 100644 index 000000000..13b693773 --- /dev/null +++ b/node_modules/request/lib/oauth.js @@ -0,0 +1,148 @@ +'use strict' + +var url = require('url') + , qs = require('qs') + , caseless = require('caseless') + , uuid = require('uuid') + , oauth = require('oauth-sign') + , crypto = require('crypto') + , Buffer = require('safe-buffer').Buffer + + +function OAuth (request) { + this.request = request + this.params = null +} + +OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) { + var oa = {} + for (var i in _oauth) { + oa['oauth_' + i] = _oauth[i] + } + if (!oa.oauth_version) { + oa.oauth_version = '1.0' + } + if (!oa.oauth_timestamp) { + oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() + } + if (!oa.oauth_nonce) { + oa.oauth_nonce = uuid().replace(/-/g, '') + } + if (!oa.oauth_signature_method) { + oa.oauth_signature_method = 'HMAC-SHA1' + } + + var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key + delete oa.oauth_consumer_secret + delete oa.oauth_private_key + + var token_secret = oa.oauth_token_secret + delete oa.oauth_token_secret + + var realm = oa.oauth_realm + delete oa.oauth_realm + delete oa.oauth_transport_method + + var baseurl = uri.protocol + '//' + uri.host + uri.pathname + var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&')) + + oa.oauth_signature = oauth.sign( + oa.oauth_signature_method, + method, + baseurl, + params, + consumer_secret_or_private_key, + token_secret) + + if (realm) { + oa.realm = realm + } + + return oa +} + +OAuth.prototype.buildBodyHash = function(_oauth, body) { + if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) { + this.request.emit('error', new Error('oauth: ' + _oauth.signature_method + + ' signature_method not supported with body_hash signing.')) + } + + var shasum = crypto.createHash('sha1') + shasum.update(body || '') + var sha1 = shasum.digest('hex') + + return Buffer.from(sha1).toString('base64') +} + +OAuth.prototype.concatParams = function (oa, sep, wrap) { + wrap = wrap || '' + + var params = Object.keys(oa).filter(function (i) { + return i !== 'realm' && i !== 'oauth_signature' + }).sort() + + if (oa.realm) { + params.splice(0, 0, 'realm') + } + params.push('oauth_signature') + + return params.map(function (i) { + return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap + }).join(sep) +} + +OAuth.prototype.onRequest = function (_oauth) { + var self = this + self.params = _oauth + + var uri = self.request.uri || {} + , method = self.request.method || '' + , headers = caseless(self.request.headers) + , body = self.request.body || '' + , qsLib = self.request.qsLib || qs + + var form + , query + , contentType = headers.get('content-type') || '' + , formContentType = 'application/x-www-form-urlencoded' + , transport = _oauth.transport_method || 'header' + + if (contentType.slice(0, formContentType.length) === formContentType) { + contentType = formContentType + form = body + } + if (uri.query) { + query = uri.query + } + if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) { + self.request.emit('error', new Error('oauth: transport_method of body requires POST ' + + 'and content-type ' + formContentType)) + } + + if (!form && typeof _oauth.body_hash === 'boolean') { + _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString()) + } + + var oa = self.buildParams(_oauth, uri, method, query, form, qsLib) + + switch (transport) { + case 'header': + self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"')) + break + + case 'query': + var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&') + self.request.uri = url.parse(href) + self.request.path = self.request.uri.path + break + + case 'body': + self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&') + break + + default: + self.request.emit('error', new Error('oauth: transport_method invalid')) + } +} + +exports.OAuth = OAuth diff --git a/node_modules/request/lib/querystring.js b/node_modules/request/lib/querystring.js new file mode 100644 index 000000000..baf5e8021 --- /dev/null +++ b/node_modules/request/lib/querystring.js @@ -0,0 +1,51 @@ +'use strict' + +var qs = require('qs') + , querystring = require('querystring') + + +function Querystring (request) { + this.request = request + this.lib = null + this.useQuerystring = null + this.parseOptions = null + this.stringifyOptions = null +} + +Querystring.prototype.init = function (options) { + if (this.lib) {return} + + this.useQuerystring = options.useQuerystring + this.lib = (this.useQuerystring ? querystring : qs) + + this.parseOptions = options.qsParseOptions || {} + this.stringifyOptions = options.qsStringifyOptions || {} +} + +Querystring.prototype.stringify = function (obj) { + return (this.useQuerystring) + ? this.rfc3986(this.lib.stringify(obj, + this.stringifyOptions.sep || null, + this.stringifyOptions.eq || null, + this.stringifyOptions)) + : this.lib.stringify(obj, this.stringifyOptions) +} + +Querystring.prototype.parse = function (str) { + return (this.useQuerystring) + ? this.lib.parse(str, + this.parseOptions.sep || null, + this.parseOptions.eq || null, + this.parseOptions) + : this.lib.parse(str, this.parseOptions) +} + +Querystring.prototype.rfc3986 = function (str) { + return str.replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +Querystring.prototype.unescape = querystring.unescape + +exports.Querystring = Querystring diff --git a/node_modules/request/lib/redirect.js b/node_modules/request/lib/redirect.js new file mode 100644 index 000000000..f8604491f --- /dev/null +++ b/node_modules/request/lib/redirect.js @@ -0,0 +1,157 @@ +'use strict' + +var url = require('url') +var isUrl = /^https?:/ + +function Redirect (request) { + this.request = request + this.followRedirect = true + this.followRedirects = true + this.followAllRedirects = false + this.followOriginalHttpMethod = false + this.allowRedirect = function () {return true} + this.maxRedirects = 10 + this.redirects = [] + this.redirectsFollowed = 0 + this.removeRefererHeader = false +} + +Redirect.prototype.onRequest = function (options) { + var self = this + + if (options.maxRedirects !== undefined) { + self.maxRedirects = options.maxRedirects + } + if (typeof options.followRedirect === 'function') { + self.allowRedirect = options.followRedirect + } + if (options.followRedirect !== undefined) { + self.followRedirects = !!options.followRedirect + } + if (options.followAllRedirects !== undefined) { + self.followAllRedirects = options.followAllRedirects + } + if (self.followRedirects || self.followAllRedirects) { + self.redirects = self.redirects || [] + } + if (options.removeRefererHeader !== undefined) { + self.removeRefererHeader = options.removeRefererHeader + } + if (options.followOriginalHttpMethod !== undefined) { + self.followOriginalHttpMethod = options.followOriginalHttpMethod + } +} + +Redirect.prototype.redirectTo = function (response) { + var self = this + , request = self.request + + var redirectTo = null + if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) { + var location = response.caseless.get('location') + request.debug('redirect', location) + + if (self.followAllRedirects) { + redirectTo = location + } else if (self.followRedirects) { + switch (request.method) { + case 'PATCH': + case 'PUT': + case 'POST': + case 'DELETE': + // Do not follow redirects + break + default: + redirectTo = location + break + } + } + } else if (response.statusCode === 401) { + var authHeader = request._auth.onResponse(response) + if (authHeader) { + request.setHeader('authorization', authHeader) + redirectTo = request.uri + } + } + return redirectTo +} + +Redirect.prototype.onResponse = function (response) { + var self = this + , request = self.request + + var redirectTo = self.redirectTo(response) + if (!redirectTo || !self.allowRedirect.call(request, response)) { + return false + } + + request.debug('redirect to', redirectTo) + + // ignore any potential response body. it cannot possibly be useful + // to us at this point. + // response.resume should be defined, but check anyway before calling. Workaround for browserify. + if (response.resume) { + response.resume() + } + + if (self.redirectsFollowed >= self.maxRedirects) { + request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href)) + return false + } + self.redirectsFollowed += 1 + + if (!isUrl.test(redirectTo)) { + redirectTo = url.resolve(request.uri.href, redirectTo) + } + + var uriPrev = request.uri + request.uri = url.parse(redirectTo) + + // handle the case where we change protocol from https to http or vice versa + if (request.uri.protocol !== uriPrev.protocol) { + delete request.agent + } + + self.redirects.push( + { statusCode : response.statusCode + , redirectUri: redirectTo + } + ) + if (self.followAllRedirects && request.method !== 'HEAD' + && response.statusCode !== 401 && response.statusCode !== 307) { + request.method = self.followOriginalHttpMethod ? request.method : 'GET' + } + // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215 + delete request.src + delete request.req + delete request._started + if (response.statusCode !== 401 && response.statusCode !== 307) { + // Remove parameters from the previous response, unless this is the second request + // for a server that requires digest authentication. + delete request.body + delete request._form + if (request.headers) { + request.removeHeader('host') + request.removeHeader('content-type') + request.removeHeader('content-length') + if (request.uri.hostname !== request.originalHost.split(':')[0]) { + // Remove authorization if changing hostnames (but not if just + // changing ports or protocols). This matches the behavior of curl: + // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710 + request.removeHeader('authorization') + } + } + } + + if (!self.removeRefererHeader) { + request.setHeader('referer', uriPrev.href) + } + + request.emit('redirect') + + request.init() + + return true +} + +exports.Redirect = Redirect diff --git a/node_modules/request/lib/tunnel.js b/node_modules/request/lib/tunnel.js new file mode 100644 index 000000000..bf96a8fec --- /dev/null +++ b/node_modules/request/lib/tunnel.js @@ -0,0 +1,176 @@ +'use strict' + +var url = require('url') + , tunnel = require('tunnel-agent') + +var defaultProxyHeaderWhiteList = [ + 'accept', + 'accept-charset', + 'accept-encoding', + 'accept-language', + 'accept-ranges', + 'cache-control', + 'content-encoding', + 'content-language', + 'content-location', + 'content-md5', + 'content-range', + 'content-type', + 'connection', + 'date', + 'expect', + 'max-forwards', + 'pragma', + 'referer', + 'te', + 'user-agent', + 'via' +] + +var defaultProxyHeaderExclusiveList = [ + 'proxy-authorization' +] + +function constructProxyHost(uriObject) { + var port = uriObject.port + , protocol = uriObject.protocol + , proxyHost = uriObject.hostname + ':' + + if (port) { + proxyHost += port + } else if (protocol === 'https:') { + proxyHost += '443' + } else { + proxyHost += '80' + } + + return proxyHost +} + +function constructProxyHeaderWhiteList(headers, proxyHeaderWhiteList) { + var whiteList = proxyHeaderWhiteList + .reduce(function (set, header) { + set[header.toLowerCase()] = true + return set + }, {}) + + return Object.keys(headers) + .filter(function (header) { + return whiteList[header.toLowerCase()] + }) + .reduce(function (set, header) { + set[header] = headers[header] + return set + }, {}) +} + +function constructTunnelOptions (request, proxyHeaders) { + var proxy = request.proxy + + var tunnelOptions = { + proxy : { + host : proxy.hostname, + port : +proxy.port, + proxyAuth : proxy.auth, + headers : proxyHeaders + }, + headers : request.headers, + ca : request.ca, + cert : request.cert, + key : request.key, + passphrase : request.passphrase, + pfx : request.pfx, + ciphers : request.ciphers, + rejectUnauthorized : request.rejectUnauthorized, + secureOptions : request.secureOptions, + secureProtocol : request.secureProtocol + } + + return tunnelOptions +} + +function constructTunnelFnName(uri, proxy) { + var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http') + var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http') + return [uriProtocol, proxyProtocol].join('Over') +} + +function getTunnelFn(request) { + var uri = request.uri + var proxy = request.proxy + var tunnelFnName = constructTunnelFnName(uri, proxy) + return tunnel[tunnelFnName] +} + + +function Tunnel (request) { + this.request = request + this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList + this.proxyHeaderExclusiveList = [] + if (typeof request.tunnel !== 'undefined') { + this.tunnelOverride = request.tunnel + } +} + +Tunnel.prototype.isEnabled = function () { + var self = this + , request = self.request + // Tunnel HTTPS by default. Allow the user to override this setting. + + // If self.tunnelOverride is set (the user specified a value), use it. + if (typeof self.tunnelOverride !== 'undefined') { + return self.tunnelOverride + } + + // If the destination is HTTPS, tunnel. + if (request.uri.protocol === 'https:') { + return true + } + + // Otherwise, do not use tunnel. + return false +} + +Tunnel.prototype.setup = function (options) { + var self = this + , request = self.request + + options = options || {} + + if (typeof request.proxy === 'string') { + request.proxy = url.parse(request.proxy) + } + + if (!request.proxy || !request.tunnel) { + return false + } + + // Setup Proxy Header Exclusive List and White List + if (options.proxyHeaderWhiteList) { + self.proxyHeaderWhiteList = options.proxyHeaderWhiteList + } + if (options.proxyHeaderExclusiveList) { + self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList + } + + var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList) + var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList) + + // Setup Proxy Headers and Proxy Headers Host + // Only send the Proxy White Listed Header names + var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList) + proxyHeaders.host = constructProxyHost(request.uri) + + proxyHeaderExclusiveList.forEach(request.removeHeader, request) + + // Set Agent from Tunnel Data + var tunnelFn = getTunnelFn(request) + var tunnelOptions = constructTunnelOptions(request, proxyHeaders) + request.agent = tunnelFn(tunnelOptions) + + return true +} + +Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList +Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList +exports.Tunnel = Tunnel diff --git a/node_modules/request/package.json b/node_modules/request/package.json new file mode 100644 index 000000000..6516b5b00 --- /dev/null +++ b/node_modules/request/package.json @@ -0,0 +1,89 @@ +{ + "name": "request", + "description": "Simplified HTTP request client.", + "keywords": [ + "http", + "simple", + "util", + "utility" + ], + "version": "2.81.0", + "author": "Mikeal Rogers ", + "repository": { + "type": "git", + "url": "https://github.com/request/request.git" + }, + "bugs": { + "url": "http://github.com/request/request/issues" + }, + "license": "Apache-2.0", + "engines": { + "node": ">= 4" + }, + "main": "index.js", + "files": [ + "lib/", + "index.js", + "request.js" + ], + "dependencies": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, + "scripts": { + "test": "npm run lint && npm run test-ci && npm run test-browser", + "test-ci": "taper tests/test-*.js", + "test-cov": "istanbul cover tape tests/test-*.js", + "test-browser": "node tests/browser/start.js", + "lint": "eslint lib/ *.js tests/ && echo Lint passed." + }, + "devDependencies": { + "bluebird": "^3.2.1", + "browserify": "^13.0.1", + "browserify-istanbul": "^2.0.0", + "buffer-equal": "^1.0.0", + "codecov": "^1.0.1", + "coveralls": "^2.11.4", + "eslint": "^2.5.3", + "function-bind": "^1.0.2", + "istanbul": "^0.4.0", + "karma": "^1.1.1", + "karma-browserify": "^5.0.1", + "karma-cli": "^1.0.0", + "karma-coverage": "^1.0.0", + "karma-phantomjs-launcher": "^1.0.0", + "karma-tap": "^3.0.1", + "phantomjs-prebuilt": "^2.1.3", + "rimraf": "^2.2.8", + "server-destroy": "^1.0.1", + "tape": "^4.6.0", + "taper": "^0.5.0" + }, + "greenkeeper": { + "ignore": [ + "eslint", + "hawk", + "har-validator" + ] + } +} diff --git a/node_modules/request/request.js b/node_modules/request/request.js new file mode 100644 index 000000000..467524ba4 --- /dev/null +++ b/node_modules/request/request.js @@ -0,0 +1,1565 @@ +'use strict' + +var http = require('http') + , https = require('https') + , url = require('url') + , util = require('util') + , stream = require('stream') + , zlib = require('zlib') + , hawk = require('hawk') + , aws2 = require('aws-sign2') + , aws4 = require('aws4') + , httpSignature = require('http-signature') + , mime = require('mime-types') + , stringstream = require('stringstream') + , caseless = require('caseless') + , ForeverAgent = require('forever-agent') + , FormData = require('form-data') + , extend = require('extend') + , isstream = require('isstream') + , isTypedArray = require('is-typedarray').strict + , helpers = require('./lib/helpers') + , cookies = require('./lib/cookies') + , getProxyFromURI = require('./lib/getProxyFromURI') + , Querystring = require('./lib/querystring').Querystring + , Har = require('./lib/har').Har + , Auth = require('./lib/auth').Auth + , OAuth = require('./lib/oauth').OAuth + , Multipart = require('./lib/multipart').Multipart + , Redirect = require('./lib/redirect').Redirect + , Tunnel = require('./lib/tunnel').Tunnel + , now = require('performance-now') + , Buffer = require('safe-buffer').Buffer + +var safeStringify = helpers.safeStringify + , isReadStream = helpers.isReadStream + , toBase64 = helpers.toBase64 + , defer = helpers.defer + , copy = helpers.copy + , version = helpers.version + , globalCookieJar = cookies.jar() + + +var globalPool = {} + +function filterForNonReserved(reserved, options) { + // Filter out properties that are not reserved. + // Reserved values are passed in at call site. + + var object = {} + for (var i in options) { + var notReserved = (reserved.indexOf(i) === -1) + if (notReserved) { + object[i] = options[i] + } + } + return object +} + +function filterOutReservedFunctions(reserved, options) { + // Filter out properties that are functions and are reserved. + // Reserved values are passed in at call site. + + var object = {} + for (var i in options) { + var isReserved = !(reserved.indexOf(i) === -1) + var isFunction = (typeof options[i] === 'function') + if (!(isReserved && isFunction)) { + object[i] = options[i] + } + } + return object + +} + +// Return a simpler request object to allow serialization +function requestToJSON() { + var self = this + return { + uri: self.uri, + method: self.method, + headers: self.headers + } +} + +// Return a simpler response object to allow serialization +function responseToJSON() { + var self = this + return { + statusCode: self.statusCode, + body: self.body, + headers: self.headers, + request: requestToJSON.call(self.request) + } +} + +function Request (options) { + // if given the method property in options, set property explicitMethod to true + + // extend the Request instance with any non-reserved properties + // remove any reserved functions from the options object + // set Request instance to be readable and writable + // call init + + var self = this + + // start with HAR, then override with additional options + if (options.har) { + self._har = new Har(self) + options = self._har.options(options) + } + + stream.Stream.call(self) + var reserved = Object.keys(Request.prototype) + var nonReserved = filterForNonReserved(reserved, options) + + extend(self, nonReserved) + options = filterOutReservedFunctions(reserved, options) + + self.readable = true + self.writable = true + if (options.method) { + self.explicitMethod = true + } + self._qs = new Querystring(self) + self._auth = new Auth(self) + self._oauth = new OAuth(self) + self._multipart = new Multipart(self) + self._redirect = new Redirect(self) + self._tunnel = new Tunnel(self) + self.init(options) +} + +util.inherits(Request, stream.Stream) + +// Debugging +Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG) +function debug() { + if (Request.debug) { + console.error('REQUEST %s', util.format.apply(util, arguments)) + } +} +Request.prototype.debug = debug + +Request.prototype.init = function (options) { + // init() contains all the code to setup the request object. + // the actual outgoing request is not started until start() is called + // this function is called from both the constructor and on redirect. + var self = this + if (!options) { + options = {} + } + self.headers = self.headers ? copy(self.headers) : {} + + // Delete headers with value undefined since they break + // ClientRequest.OutgoingMessage.setHeader in node 0.12 + for (var headerName in self.headers) { + if (typeof self.headers[headerName] === 'undefined') { + delete self.headers[headerName] + } + } + + caseless.httpify(self, self.headers) + + if (!self.method) { + self.method = options.method || 'GET' + } + if (!self.localAddress) { + self.localAddress = options.localAddress + } + + self._qs.init(options) + + debug(options) + if (!self.pool && self.pool !== false) { + self.pool = globalPool + } + self.dests = self.dests || [] + self.__isRequestRequest = true + + // Protect against double callback + if (!self._callback && self.callback) { + self._callback = self.callback + self.callback = function () { + if (self._callbackCalled) { + return // Print a warning maybe? + } + self._callbackCalled = true + self._callback.apply(self, arguments) + } + self.on('error', self.callback.bind()) + self.on('complete', self.callback.bind(self, null)) + } + + // People use this property instead all the time, so support it + if (!self.uri && self.url) { + self.uri = self.url + delete self.url + } + + // If there's a baseUrl, then use it as the base URL (i.e. uri must be + // specified as a relative path and is appended to baseUrl). + if (self.baseUrl) { + if (typeof self.baseUrl !== 'string') { + return self.emit('error', new Error('options.baseUrl must be a string')) + } + + if (typeof self.uri !== 'string') { + return self.emit('error', new Error('options.uri must be a string when using options.baseUrl')) + } + + if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) { + return self.emit('error', new Error('options.uri must be a path when using options.baseUrl')) + } + + // Handle all cases to make sure that there's only one slash between + // baseUrl and uri. + var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1 + var uriStartsWithSlash = self.uri.indexOf('/') === 0 + + if (baseUrlEndsWithSlash && uriStartsWithSlash) { + self.uri = self.baseUrl + self.uri.slice(1) + } else if (baseUrlEndsWithSlash || uriStartsWithSlash) { + self.uri = self.baseUrl + self.uri + } else if (self.uri === '') { + self.uri = self.baseUrl + } else { + self.uri = self.baseUrl + '/' + self.uri + } + delete self.baseUrl + } + + // A URI is needed by this point, emit error if we haven't been able to get one + if (!self.uri) { + return self.emit('error', new Error('options.uri is a required argument')) + } + + // If a string URI/URL was given, parse it into a URL object + if (typeof self.uri === 'string') { + self.uri = url.parse(self.uri) + } + + // Some URL objects are not from a URL parsed string and need href added + if (!self.uri.href) { + self.uri.href = url.format(self.uri) + } + + // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme + if (self.uri.protocol === 'unix:') { + return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`')) + } + + // Support Unix Sockets + if (self.uri.host === 'unix') { + self.enableUnixSocket() + } + + if (self.strictSSL === false) { + self.rejectUnauthorized = false + } + + if (!self.uri.pathname) {self.uri.pathname = '/'} + + if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) { + // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar + // Detect and reject it as soon as possible + var faultyUri = url.format(self.uri) + var message = 'Invalid URI "' + faultyUri + '"' + if (Object.keys(options).length === 0) { + // No option ? This can be the sign of a redirect + // As this is a case where the user cannot do anything (they didn't call request directly with this URL) + // they should be warned that it can be caused by a redirection (can save some hair) + message += '. This can be caused by a crappy redirection.' + } + // This error was fatal + self.abort() + return self.emit('error', new Error(message)) + } + + if (!self.hasOwnProperty('proxy')) { + self.proxy = getProxyFromURI(self.uri) + } + + self.tunnel = self._tunnel.isEnabled() + if (self.proxy) { + self._tunnel.setup(options) + } + + self._redirect.onRequest(options) + + self.setHost = false + if (!self.hasHeader('host')) { + var hostHeaderName = self.originalHostHeaderName || 'host' + // When used with an IPv6 address, `host` will provide + // the correct bracketed format, unlike using `hostname` and + // optionally adding the `port` when necessary. + self.setHeader(hostHeaderName, self.uri.host) + self.setHost = true + } + + self.jar(self._jar || options.jar) + + if (!self.uri.port) { + if (self.uri.protocol === 'http:') {self.uri.port = 80} + else if (self.uri.protocol === 'https:') {self.uri.port = 443} + } + + if (self.proxy && !self.tunnel) { + self.port = self.proxy.port + self.host = self.proxy.hostname + } else { + self.port = self.uri.port + self.host = self.uri.hostname + } + + if (options.form) { + self.form(options.form) + } + + if (options.formData) { + var formData = options.formData + var requestForm = self.form() + var appendFormValue = function (key, value) { + if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) { + requestForm.append(key, value.value, value.options) + } else { + requestForm.append(key, value) + } + } + for (var formKey in formData) { + if (formData.hasOwnProperty(formKey)) { + var formValue = formData[formKey] + if (formValue instanceof Array) { + for (var j = 0; j < formValue.length; j++) { + appendFormValue(formKey, formValue[j]) + } + } else { + appendFormValue(formKey, formValue) + } + } + } + } + + if (options.qs) { + self.qs(options.qs) + } + + if (self.uri.path) { + self.path = self.uri.path + } else { + self.path = self.uri.pathname + (self.uri.search || '') + } + + if (self.path.length === 0) { + self.path = '/' + } + + // Auth must happen last in case signing is dependent on other headers + if (options.aws) { + self.aws(options.aws) + } + + if (options.hawk) { + self.hawk(options.hawk) + } + + if (options.httpSignature) { + self.httpSignature(options.httpSignature) + } + + if (options.auth) { + if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) { + options.auth.user = options.auth.username + } + if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) { + options.auth.pass = options.auth.password + } + + self.auth( + options.auth.user, + options.auth.pass, + options.auth.sendImmediately, + options.auth.bearer + ) + } + + if (self.gzip && !self.hasHeader('accept-encoding')) { + self.setHeader('accept-encoding', 'gzip, deflate') + } + + if (self.uri.auth && !self.hasHeader('authorization')) { + var uriAuthPieces = self.uri.auth.split(':').map(function(item) {return self._qs.unescape(item)}) + self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true) + } + + if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) { + var proxyAuthPieces = self.proxy.auth.split(':').map(function(item) {return self._qs.unescape(item)}) + var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':')) + self.setHeader('proxy-authorization', authHeader) + } + + if (self.proxy && !self.tunnel) { + self.path = (self.uri.protocol + '//' + self.uri.host + self.path) + } + + if (options.json) { + self.json(options.json) + } + if (options.multipart) { + self.multipart(options.multipart) + } + + if (options.time) { + self.timing = true + + // NOTE: elapsedTime is deprecated in favor of .timings + self.elapsedTime = self.elapsedTime || 0 + } + + function setContentLength () { + if (isTypedArray(self.body)) { + self.body = Buffer.from(self.body) + } + + if (!self.hasHeader('content-length')) { + var length + if (typeof self.body === 'string') { + length = Buffer.byteLength(self.body) + } + else if (Array.isArray(self.body)) { + length = self.body.reduce(function (a, b) {return a + b.length}, 0) + } + else { + length = self.body.length + } + + if (length) { + self.setHeader('content-length', length) + } else { + self.emit('error', new Error('Argument error, options.body.')) + } + } + } + if (self.body && !isstream(self.body)) { + setContentLength() + } + + if (options.oauth) { + self.oauth(options.oauth) + } else if (self._oauth.params && self.hasHeader('authorization')) { + self.oauth(self._oauth.params) + } + + var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol + , defaultModules = {'http:':http, 'https:':https} + , httpModules = self.httpModules || {} + + self.httpModule = httpModules[protocol] || defaultModules[protocol] + + if (!self.httpModule) { + return self.emit('error', new Error('Invalid protocol: ' + protocol)) + } + + if (options.ca) { + self.ca = options.ca + } + + if (!self.agent) { + if (options.agentOptions) { + self.agentOptions = options.agentOptions + } + + if (options.agentClass) { + self.agentClass = options.agentClass + } else if (options.forever) { + var v = version() + // use ForeverAgent in node 0.10- only + if (v.major === 0 && v.minor <= 10) { + self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL + } else { + self.agentClass = self.httpModule.Agent + self.agentOptions = self.agentOptions || {} + self.agentOptions.keepAlive = true + } + } else { + self.agentClass = self.httpModule.Agent + } + } + + if (self.pool === false) { + self.agent = false + } else { + self.agent = self.agent || self.getNewAgent() + } + + self.on('pipe', function (src) { + if (self.ntick && self._started) { + self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.')) + } + self.src = src + if (isReadStream(src)) { + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', mime.lookup(src.path)) + } + } else { + if (src.headers) { + for (var i in src.headers) { + if (!self.hasHeader(i)) { + self.setHeader(i, src.headers[i]) + } + } + } + if (self._json && !self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } + if (src.method && !self.explicitMethod) { + self.method = src.method + } + } + + // self.on('pipe', function () { + // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.') + // }) + }) + + defer(function () { + if (self._aborted) { + return + } + + var end = function () { + if (self._form) { + if (!self._auth.hasAuth) { + self._form.pipe(self) + } + else if (self._auth.hasAuth && self._auth.sentAuth) { + self._form.pipe(self) + } + } + if (self._multipart && self._multipart.chunked) { + self._multipart.body.pipe(self) + } + if (self.body) { + if (isstream(self.body)) { + self.body.pipe(self) + } else { + setContentLength() + if (Array.isArray(self.body)) { + self.body.forEach(function (part) { + self.write(part) + }) + } else { + self.write(self.body) + } + self.end() + } + } else if (self.requestBodyStream) { + console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.') + self.requestBodyStream.pipe(self) + } else if (!self.src) { + if (self._auth.hasAuth && !self._auth.sentAuth) { + self.end() + return + } + if (self.method !== 'GET' && typeof self.method !== 'undefined') { + self.setHeader('content-length', 0) + } + self.end() + } + } + + if (self._form && !self.hasHeader('content-length')) { + // Before ending the request, we had to compute the length of the whole form, asyncly + self.setHeader(self._form.getHeaders(), true) + self._form.getLength(function (err, length) { + if (!err && !isNaN(length)) { + self.setHeader('content-length', length) + } + end() + }) + } else { + end() + } + + self.ntick = true + }) + +} + +Request.prototype.getNewAgent = function () { + var self = this + var Agent = self.agentClass + var options = {} + if (self.agentOptions) { + for (var i in self.agentOptions) { + options[i] = self.agentOptions[i] + } + } + if (self.ca) { + options.ca = self.ca + } + if (self.ciphers) { + options.ciphers = self.ciphers + } + if (self.secureProtocol) { + options.secureProtocol = self.secureProtocol + } + if (self.secureOptions) { + options.secureOptions = self.secureOptions + } + if (typeof self.rejectUnauthorized !== 'undefined') { + options.rejectUnauthorized = self.rejectUnauthorized + } + + if (self.cert && self.key) { + options.key = self.key + options.cert = self.cert + } + + if (self.pfx) { + options.pfx = self.pfx + } + + if (self.passphrase) { + options.passphrase = self.passphrase + } + + var poolKey = '' + + // different types of agents are in different pools + if (Agent !== self.httpModule.Agent) { + poolKey += Agent.name + } + + // ca option is only relevant if proxy or destination are https + var proxy = self.proxy + if (typeof proxy === 'string') { + proxy = url.parse(proxy) + } + var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' + + if (isHttps) { + if (options.ca) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.ca + } + + if (typeof options.rejectUnauthorized !== 'undefined') { + if (poolKey) { + poolKey += ':' + } + poolKey += options.rejectUnauthorized + } + + if (options.cert) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.cert.toString('ascii') + options.key.toString('ascii') + } + + if (options.pfx) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.pfx.toString('ascii') + } + + if (options.ciphers) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.ciphers + } + + if (options.secureProtocol) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.secureProtocol + } + + if (options.secureOptions) { + if (poolKey) { + poolKey += ':' + } + poolKey += options.secureOptions + } + } + + if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) { + // not doing anything special. Use the globalAgent + return self.httpModule.globalAgent + } + + // we're using a stored agent. Make sure it's protocol-specific + poolKey = self.uri.protocol + poolKey + + // generate a new agent for this setting if none yet exists + if (!self.pool[poolKey]) { + self.pool[poolKey] = new Agent(options) + // properly set maxSockets on new agents + if (self.pool.maxSockets) { + self.pool[poolKey].maxSockets = self.pool.maxSockets + } + } + + return self.pool[poolKey] +} + +Request.prototype.start = function () { + // start() is called once we are ready to send the outgoing HTTP request. + // this is usually called on the first write(), end() or on nextTick() + var self = this + + if (self.timing) { + // All timings will be relative to this request's startTime. In order to do this, + // we need to capture the wall-clock start time (via Date), immediately followed + // by the high-resolution timer (via now()). While these two won't be set + // at the _exact_ same time, they should be close enough to be able to calculate + // high-resolution, monotonically non-decreasing timestamps relative to startTime. + var startTime = new Date().getTime() + var startTimeNow = now() + } + + if (self._aborted) { + return + } + + self._started = true + self.method = self.method || 'GET' + self.href = self.uri.href + + if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { + self.setHeader('content-length', self.src.stat.size) + } + if (self._aws) { + self.aws(self._aws, true) + } + + // We have a method named auth, which is completely different from the http.request + // auth option. If we don't remove it, we're gonna have a bad time. + var reqOptions = copy(self) + delete reqOptions.auth + + debug('make request', self.uri.href) + + // node v6.8.0 now supports a `timeout` value in `http.request()`, but we + // should delete it for now since we handle timeouts manually for better + // consistency with node versions before v6.8.0 + delete reqOptions.timeout + + try { + self.req = self.httpModule.request(reqOptions) + } catch (err) { + self.emit('error', err) + return + } + + if (self.timing) { + self.startTime = startTime + self.startTimeNow = startTimeNow + + // Timing values will all be relative to startTime (by comparing to startTimeNow + // so we have an accurate clock) + self.timings = {} + } + + var timeout + if (self.timeout && !self.timeoutTimer) { + if (self.timeout < 0) { + timeout = 0 + } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) { + timeout = self.timeout + } + } + + self.req.on('response', self.onRequestResponse.bind(self)) + self.req.on('error', self.onRequestError.bind(self)) + self.req.on('drain', function() { + self.emit('drain') + }) + self.req.on('socket', function(socket) { + // `._connecting` was the old property which was made public in node v6.1.0 + var isConnecting = socket._connecting || socket.connecting + if (self.timing) { + self.timings.socket = now() - self.startTimeNow + + if (isConnecting) { + var onLookupTiming = function() { + self.timings.lookup = now() - self.startTimeNow + } + + var onConnectTiming = function() { + self.timings.connect = now() - self.startTimeNow + } + + socket.once('lookup', onLookupTiming) + socket.once('connect', onConnectTiming) + + // clean up timing event listeners if needed on error + self.req.once('error', function() { + socket.removeListener('lookup', onLookupTiming) + socket.removeListener('connect', onConnectTiming) + }) + } + } + + var setReqTimeout = function() { + // This timeout sets the amount of time to wait *between* bytes sent + // from the server once connected. + // + // In particular, it's useful for erroring if the server fails to send + // data halfway through streaming a response. + self.req.setTimeout(timeout, function () { + if (self.req) { + self.abort() + var e = new Error('ESOCKETTIMEDOUT') + e.code = 'ESOCKETTIMEDOUT' + e.connect = false + self.emit('error', e) + } + }) + } + if (timeout !== undefined) { + // Only start the connection timer if we're actually connecting a new + // socket, otherwise if we're already connected (because this is a + // keep-alive connection) do not bother. This is important since we won't + // get a 'connect' event for an already connected socket. + if (isConnecting) { + var onReqSockConnect = function() { + socket.removeListener('connect', onReqSockConnect) + clearTimeout(self.timeoutTimer) + self.timeoutTimer = null + setReqTimeout() + } + + socket.on('connect', onReqSockConnect) + + self.req.on('error', function(err) { + socket.removeListener('connect', onReqSockConnect) + }) + + // Set a timeout in memory - this block will throw if the server takes more + // than `timeout` to write the HTTP status and headers (corresponding to + // the on('response') event on the client). NB: this measures wall-clock + // time, not the time between bytes sent by the server. + self.timeoutTimer = setTimeout(function () { + socket.removeListener('connect', onReqSockConnect) + self.abort() + var e = new Error('ETIMEDOUT') + e.code = 'ETIMEDOUT' + e.connect = true + self.emit('error', e) + }, timeout) + } else { + // We're already connected + setReqTimeout() + } + } + self.emit('socket', socket) + }) + + self.emit('request', self.req) +} + +Request.prototype.onRequestError = function (error) { + var self = this + if (self._aborted) { + return + } + if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' + && self.agent.addRequestNoreuse) { + self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } + self.start() + self.req.end() + return + } + if (self.timeout && self.timeoutTimer) { + clearTimeout(self.timeoutTimer) + self.timeoutTimer = null + } + self.emit('error', error) +} + +Request.prototype.onRequestResponse = function (response) { + var self = this + + if (self.timing) { + self.timings.response = now() - self.startTimeNow + } + + debug('onRequestResponse', self.uri.href, response.statusCode, response.headers) + response.on('end', function() { + if (self.timing) { + self.timings.end = now() - self.startTimeNow + response.timingStart = self.startTime + + // fill in the blanks for any periods that didn't trigger, such as + // no lookup or connect due to keep alive + if (!self.timings.socket) { + self.timings.socket = 0 + } + if (!self.timings.lookup) { + self.timings.lookup = self.timings.socket + } + if (!self.timings.connect) { + self.timings.connect = self.timings.lookup + } + if (!self.timings.response) { + self.timings.response = self.timings.connect + } + + debug('elapsed time', self.timings.end) + + // elapsedTime includes all redirects + self.elapsedTime += Math.round(self.timings.end) + + // NOTE: elapsedTime is deprecated in favor of .timings + response.elapsedTime = self.elapsedTime + + // timings is just for the final fetch + response.timings = self.timings + + // pre-calculate phase timings as well + response.timingPhases = { + wait: self.timings.socket, + dns: self.timings.lookup - self.timings.socket, + tcp: self.timings.connect - self.timings.lookup, + firstByte: self.timings.response - self.timings.connect, + download: self.timings.end - self.timings.response, + total: self.timings.end + } + } + debug('response end', self.uri.href, response.statusCode, response.headers) + }) + + if (self._aborted) { + debug('aborted', self.uri.href) + response.resume() + return + } + + self.response = response + response.request = self + response.toJSON = responseToJSON + + // XXX This is different on 0.10, because SSL is strict by default + if (self.httpModule === https && + self.strictSSL && (!response.hasOwnProperty('socket') || + !response.socket.authorized)) { + debug('strict ssl error', self.uri.href) + var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL' + self.emit('error', new Error('SSL Error: ' + sslErr)) + return + } + + // Save the original host before any redirect (if it changes, we need to + // remove any authorization headers). Also remember the case of the header + // name because lots of broken servers expect Host instead of host and we + // want the caller to be able to specify this. + self.originalHost = self.getHeader('host') + if (!self.originalHostHeaderName) { + self.originalHostHeaderName = self.hasHeader('host') + } + if (self.setHost) { + self.removeHeader('host') + } + if (self.timeout && self.timeoutTimer) { + clearTimeout(self.timeoutTimer) + self.timeoutTimer = null + } + + var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar + var addCookie = function (cookie) { + //set the cookie if it's domain in the href's domain. + try { + targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true}) + } catch (e) { + self.emit('error', e) + } + } + + response.caseless = caseless(response.headers) + + if (response.caseless.has('set-cookie') && (!self._disableCookies)) { + var headerName = response.caseless.has('set-cookie') + if (Array.isArray(response.headers[headerName])) { + response.headers[headerName].forEach(addCookie) + } else { + addCookie(response.headers[headerName]) + } + } + + if (self._redirect.onResponse(response)) { + return // Ignore the rest of the response + } else { + // Be a good stream and emit end when the response is finished. + // Hack to emit end on close because of a core bug that never fires end + response.on('close', function () { + if (!self._ended) { + self.response.emit('end') + } + }) + + response.once('end', function () { + self._ended = true + }) + + var noBody = function (code) { + return ( + self.method === 'HEAD' + // Informational + || (code >= 100 && code < 200) + // No Content + || code === 204 + // Not Modified + || code === 304 + ) + } + + var responseContent + if (self.gzip && !noBody(response.statusCode)) { + var contentEncoding = response.headers['content-encoding'] || 'identity' + contentEncoding = contentEncoding.trim().toLowerCase() + + // Be more lenient with decoding compressed responses, since (very rarely) + // servers send slightly invalid gzip responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + var zlibOptions = { + flush: zlib.Z_SYNC_FLUSH + , finishFlush: zlib.Z_SYNC_FLUSH + } + + if (contentEncoding === 'gzip') { + responseContent = zlib.createGunzip(zlibOptions) + response.pipe(responseContent) + } else if (contentEncoding === 'deflate') { + responseContent = zlib.createInflate(zlibOptions) + response.pipe(responseContent) + } else { + // Since previous versions didn't check for Content-Encoding header, + // ignore any invalid values to preserve backwards-compatibility + if (contentEncoding !== 'identity') { + debug('ignoring unrecognized Content-Encoding ' + contentEncoding) + } + responseContent = response + } + } else { + responseContent = response + } + + if (self.encoding) { + if (self.dests.length !== 0) { + console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.') + } else if (responseContent.setEncoding) { + responseContent.setEncoding(self.encoding) + } else { + // Should only occur on node pre-v0.9.4 (joyent/node@9b5abe5) with + // zlib streams. + // If/When support for 0.9.4 is dropped, this should be unnecessary. + responseContent = responseContent.pipe(stringstream(self.encoding)) + } + } + + if (self._paused) { + responseContent.pause() + } + + self.responseContent = responseContent + + self.emit('response', response) + + self.dests.forEach(function (dest) { + self.pipeDest(dest) + }) + + responseContent.on('data', function (chunk) { + if (self.timing && !self.responseStarted) { + self.responseStartTime = (new Date()).getTime() + + // NOTE: responseStartTime is deprecated in favor of .timings + response.responseStartTime = self.responseStartTime + } + self._destdata = true + self.emit('data', chunk) + }) + responseContent.once('end', function (chunk) { + self.emit('end', chunk) + }) + responseContent.on('error', function (error) { + self.emit('error', error) + }) + responseContent.on('close', function () {self.emit('close')}) + + if (self.callback) { + self.readResponseBody(response) + } + //if no callback + else { + self.on('end', function () { + if (self._aborted) { + debug('aborted', self.uri.href) + return + } + self.emit('complete', response) + }) + } + } + debug('finish init function', self.uri.href) +} + +Request.prototype.readResponseBody = function (response) { + var self = this + debug('reading response\'s body') + var buffers = [] + , bufferLength = 0 + , strings = [] + + self.on('data', function (chunk) { + if (!Buffer.isBuffer(chunk)) { + strings.push(chunk) + } else if (chunk.length) { + bufferLength += chunk.length + buffers.push(chunk) + } + }) + self.on('end', function () { + debug('end event', self.uri.href) + if (self._aborted) { + debug('aborted', self.uri.href) + // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request. + // This can lead to leaky behavior if the user retains a reference to the request object. + buffers = [] + bufferLength = 0 + return + } + + if (bufferLength) { + debug('has body', self.uri.href, bufferLength) + response.body = Buffer.concat(buffers, bufferLength) + if (self.encoding !== null) { + response.body = response.body.toString(self.encoding) + } + // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request. + // This can lead to leaky behavior if the user retains a reference to the request object. + buffers = [] + bufferLength = 0 + } else if (strings.length) { + // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. + // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). + if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { + strings[0] = strings[0].substring(1) + } + response.body = strings.join('') + } + + if (self._json) { + try { + response.body = JSON.parse(response.body, self._jsonReviver) + } catch (e) { + debug('invalid JSON received', self.uri.href) + } + } + debug('emitting complete', self.uri.href) + if (typeof response.body === 'undefined' && !self._json) { + response.body = self.encoding === null ? Buffer.alloc(0) : '' + } + self.emit('complete', response, response.body) + }) +} + +Request.prototype.abort = function () { + var self = this + self._aborted = true + + if (self.req) { + self.req.abort() + } + else if (self.response) { + self.response.destroy() + } + + self.emit('abort') +} + +Request.prototype.pipeDest = function (dest) { + var self = this + var response = self.response + // Called after the response is received + if (dest.headers && !dest.headersSent) { + if (response.caseless.has('content-type')) { + var ctname = response.caseless.has('content-type') + if (dest.setHeader) { + dest.setHeader(ctname, response.headers[ctname]) + } + else { + dest.headers[ctname] = response.headers[ctname] + } + } + + if (response.caseless.has('content-length')) { + var clname = response.caseless.has('content-length') + if (dest.setHeader) { + dest.setHeader(clname, response.headers[clname]) + } else { + dest.headers[clname] = response.headers[clname] + } + } + } + if (dest.setHeader && !dest.headersSent) { + for (var i in response.headers) { + // If the response content is being decoded, the Content-Encoding header + // of the response doesn't represent the piped content, so don't pass it. + if (!self.gzip || i !== 'content-encoding') { + dest.setHeader(i, response.headers[i]) + } + } + dest.statusCode = response.statusCode + } + if (self.pipefilter) { + self.pipefilter(response, dest) + } +} + +Request.prototype.qs = function (q, clobber) { + var self = this + var base + if (!clobber && self.uri.query) { + base = self._qs.parse(self.uri.query) + } else { + base = {} + } + + for (var i in q) { + base[i] = q[i] + } + + var qs = self._qs.stringify(base) + + if (qs === '') { + return self + } + + self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs) + self.url = self.uri + self.path = self.uri.path + + if (self.uri.host === 'unix') { + self.enableUnixSocket() + } + + return self +} +Request.prototype.form = function (form) { + var self = this + if (form) { + if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { + self.setHeader('content-type', 'application/x-www-form-urlencoded') + } + self.body = (typeof form === 'string') + ? self._qs.rfc3986(form.toString('utf8')) + : self._qs.stringify(form).toString('utf8') + return self + } + // create form-data object + self._form = new FormData() + self._form.on('error', function(err) { + err.message = 'form-data: ' + err.message + self.emit('error', err) + self.abort() + }) + return self._form +} +Request.prototype.multipart = function (multipart) { + var self = this + + self._multipart.onRequest(multipart) + + if (!self._multipart.chunked) { + self.body = self._multipart.body + } + + return self +} +Request.prototype.json = function (val) { + var self = this + + if (!self.hasHeader('accept')) { + self.setHeader('accept', 'application/json') + } + + if (typeof self.jsonReplacer === 'function') { + self._jsonReplacer = self.jsonReplacer + } + + self._json = true + if (typeof val === 'boolean') { + if (self.body !== undefined) { + if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { + self.body = safeStringify(self.body, self._jsonReplacer) + } else { + self.body = self._qs.rfc3986(self.body) + } + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } + } + } else { + self.body = safeStringify(val, self._jsonReplacer) + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } + } + + if (typeof self.jsonReviver === 'function') { + self._jsonReviver = self.jsonReviver + } + + return self +} +Request.prototype.getHeader = function (name, headers) { + var self = this + var result, re, match + if (!headers) { + headers = self.headers + } + Object.keys(headers).forEach(function (key) { + if (key.length !== name.length) { + return + } + re = new RegExp(name, 'i') + match = key.match(re) + if (match) { + result = headers[key] + } + }) + return result +} +Request.prototype.enableUnixSocket = function () { + // Get the socket & request paths from the URL + var unixParts = this.uri.path.split(':') + , host = unixParts[0] + , path = unixParts[1] + // Apply unix properties to request + this.socketPath = host + this.uri.pathname = path + this.uri.path = path + this.uri.host = host + this.uri.hostname = host + this.uri.isUnix = true +} + + +Request.prototype.auth = function (user, pass, sendImmediately, bearer) { + var self = this + + self._auth.onRequest(user, pass, sendImmediately, bearer) + + return self +} +Request.prototype.aws = function (opts, now) { + var self = this + + if (!now) { + self._aws = opts + return self + } + + if (opts.sign_version == 4 || opts.sign_version == '4') { + // use aws4 + var options = { + host: self.uri.host, + path: self.uri.path, + method: self.method, + headers: { + 'content-type': self.getHeader('content-type') || '' + }, + body: self.body + } + var signRes = aws4.sign(options, { + accessKeyId: opts.key, + secretAccessKey: opts.secret, + sessionToken: opts.session + }) + self.setHeader('authorization', signRes.headers.Authorization) + self.setHeader('x-amz-date', signRes.headers['X-Amz-Date']) + if (signRes.headers['X-Amz-Security-Token']) { + self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token']) + } + } + else { + // default: use aws-sign2 + var date = new Date() + self.setHeader('date', date.toUTCString()) + var auth = + { key: opts.key + , secret: opts.secret + , verb: self.method.toUpperCase() + , date: date + , contentType: self.getHeader('content-type') || '' + , md5: self.getHeader('content-md5') || '' + , amazonHeaders: aws2.canonicalizeHeaders(self.headers) + } + var path = self.uri.path + if (opts.bucket && path) { + auth.resource = '/' + opts.bucket + path + } else if (opts.bucket && !path) { + auth.resource = '/' + opts.bucket + } else if (!opts.bucket && path) { + auth.resource = path + } else if (!opts.bucket && !path) { + auth.resource = '/' + } + auth.resource = aws2.canonicalizeResource(auth.resource) + self.setHeader('authorization', aws2.authorization(auth)) + } + + return self +} +Request.prototype.httpSignature = function (opts) { + var self = this + httpSignature.signRequest({ + getHeader: function(header) { + return self.getHeader(header, self.headers) + }, + setHeader: function(header, value) { + self.setHeader(header, value) + }, + method: self.method, + path: self.path + }, opts) + debug('httpSignature authorization', self.getHeader('authorization')) + + return self +} +Request.prototype.hawk = function (opts) { + var self = this + self.setHeader('Authorization', hawk.client.header(self.uri, self.method, opts).field) +} +Request.prototype.oauth = function (_oauth) { + var self = this + + self._oauth.onRequest(_oauth) + + return self +} + +Request.prototype.jar = function (jar) { + var self = this + var cookies + + if (self._redirect.redirectsFollowed === 0) { + self.originalCookieHeader = self.getHeader('cookie') + } + + if (!jar) { + // disable cookies + cookies = false + self._disableCookies = true + } else { + var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar + var urihref = self.uri.href + //fetch cookie in the Specified host + if (targetCookieJar) { + cookies = targetCookieJar.getCookieString(urihref) + } + } + + //if need cookie and cookie is not empty + if (cookies && cookies.length) { + if (self.originalCookieHeader) { + // Don't overwrite existing Cookie header + self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies) + } else { + self.setHeader('cookie', cookies) + } + } + self._jar = jar + return self +} + + +// Stream API +Request.prototype.pipe = function (dest, opts) { + var self = this + + if (self.response) { + if (self._destdata) { + self.emit('error', new Error('You cannot pipe after data has been emitted from the response.')) + } else if (self._ended) { + self.emit('error', new Error('You cannot pipe after the response has been ended.')) + } else { + stream.Stream.prototype.pipe.call(self, dest, opts) + self.pipeDest(dest) + return dest + } + } else { + self.dests.push(dest) + stream.Stream.prototype.pipe.call(self, dest, opts) + return dest + } +} +Request.prototype.write = function () { + var self = this + if (self._aborted) {return} + + if (!self._started) { + self.start() + } + if (self.req) { + return self.req.write.apply(self.req, arguments) + } +} +Request.prototype.end = function (chunk) { + var self = this + if (self._aborted) {return} + + if (chunk) { + self.write(chunk) + } + if (!self._started) { + self.start() + } + if (self.req) { + self.req.end() + } +} +Request.prototype.pause = function () { + var self = this + if (!self.responseContent) { + self._paused = true + } else { + self.responseContent.pause.apply(self.responseContent, arguments) + } +} +Request.prototype.resume = function () { + var self = this + if (!self.responseContent) { + self._paused = false + } else { + self.responseContent.resume.apply(self.responseContent, arguments) + } +} +Request.prototype.destroy = function () { + var self = this + if (!self._ended) { + self.end() + } else if (self.response) { + self.response.destroy() + } +} + +Request.defaultProxyHeaderWhiteList = + Tunnel.defaultProxyHeaderWhiteList.slice() + +Request.defaultProxyHeaderExclusiveList = + Tunnel.defaultProxyHeaderExclusiveList.slice() + +// Exports + +Request.prototype.toJSON = requestToJSON +module.exports = Request diff --git a/node_modules/resolve-url/.jshintrc b/node_modules/resolve-url/.jshintrc new file mode 100644 index 000000000..aaf335801 --- /dev/null +++ b/node_modules/resolve-url/.jshintrc @@ -0,0 +1,44 @@ +{ + "bitwise": true, + "camelcase": true, + "curly": false, + "eqeqeq": true, + "es3": true, + "forin": true, + "immed": false, + "indent": false, + "latedef": "nofunc", + "newcap": false, + "noarg": true, + "noempty": true, + "nonew": false, + "plusplus": false, + "quotmark": false, + "undef": true, + "unused": "vars", + "strict": false, + "trailing": true, + "maxparams": 5, + "maxdepth": false, + "maxstatements": false, + "maxcomplexity": false, + "maxlen": 100, + + "asi": true, + "expr": true, + "globalstrict": true, + "smarttabs": true, + "sub": true, + + "node": true, + "browser": true, + "globals": { + "describe": false, + "it": false, + "before": false, + "beforeEach": false, + "after": false, + "afterEach": false, + "define": false + } +} diff --git a/node_modules/resolve-url/LICENSE b/node_modules/resolve-url/LICENSE new file mode 100644 index 000000000..0595be367 --- /dev/null +++ b/node_modules/resolve-url/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Simon Lydell + +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. diff --git a/node_modules/resolve-url/bower.json b/node_modules/resolve-url/bower.json new file mode 100644 index 000000000..31aa6f4ea --- /dev/null +++ b/node_modules/resolve-url/bower.json @@ -0,0 +1,15 @@ +{ + "name": "resolve-url", + "version": "0.2.1", + "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.", + "authors": ["Simon Lydell"], + "license": "MIT", + "main": "resolve-url.js", + "keywords": [ + "resolve", + "url" + ], + "ignore": [ + ".*" + ] +} diff --git a/node_modules/resolve-url/changelog.md b/node_modules/resolve-url/changelog.md new file mode 100644 index 000000000..2a4a6304c --- /dev/null +++ b/node_modules/resolve-url/changelog.md @@ -0,0 +1,15 @@ +### Version 0.2.1 (2014-02-25) ### + +- Fix edge case when (accidentally) supplying only one argument, and that + argument happens to be a falsy value such as `undefined` or `null`. + + +### Version 0.2.0 (2014-02-24) ### + +- Disallow passing 0 arguments. It’s weird and inconsistent between browsers. + (Backwards incompatible change.) + + +### Version 0.1.0 (2014-02-23) ### + +- Initial release. diff --git a/node_modules/resolve-url/component.json b/node_modules/resolve-url/component.json new file mode 100644 index 000000000..f37cf0055 --- /dev/null +++ b/node_modules/resolve-url/component.json @@ -0,0 +1,15 @@ +{ + "name": "resolve-url", + "version": "0.2.1", + "license": "MIT", + "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.", + "main": "resolve-url.js", + "repo": "lydell/resolve-url", + "keywords": [ + "resolve", + "url" + ], + "scripts": [ + "resolve-url.js" + ] +} diff --git a/node_modules/resolve-url/package.json b/node_modules/resolve-url/package.json new file mode 100644 index 000000000..944236633 --- /dev/null +++ b/node_modules/resolve-url/package.json @@ -0,0 +1,34 @@ +{ + "name": "resolve-url", + "version": "0.2.1", + "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.", + "author": "Simon Lydell", + "license": "MIT", + "main": "resolve-url.js", + "repository": "lydell/resolve-url", + "keywords": [ + "resolve", + "url" + ], + "scripts": { + "test": "jshint resolve-url.js test/ && testling -u" + }, + "devDependencies": { + "testling": "~1.6.0", + "jshint": "~2.4.3", + "tape": "~2.5.0" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "chrome/latest", + "firefox/latest", + "opera/12", + "opera/latest", + "safari/5", + "iphone/6", + "android-browser/4" + ] + } +} diff --git a/node_modules/resolve-url/readme.md b/node_modules/resolve-url/readme.md new file mode 100644 index 000000000..edfff7357 --- /dev/null +++ b/node_modules/resolve-url/readme.md @@ -0,0 +1,83 @@ +Overview +======== + +[![browser support](https://ci.testling.com/lydell/resolve-url.png)](https://ci.testling.com/lydell/resolve-url) + +Like Node.js’ [`path.resolve`]/[`url.resolve`] for the browser. + +```js +var resolveUrl = require("resolve-url") + +window.location +// https://example.com/articles/resolving-urls/edit + +resolveUrl("remove") +// https://example.com/articles/resolving-urls/remove + +resolveUrl("/static/scripts/app.js") +// https://example.com/static/scripts/app.js + +// Imagine /static/scripts/app.js contains `//# sourceMappingURL=../source-maps/app.js.map` +resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map") +// https://example.com/static/source-maps/app.js.map + +resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee") +// https://example.com/static/coffee/app.coffee + +resolveUrl("//cdn.example.com/jquery.js") +// https://cdn.example.com/jquery.js + +resolveUrl("http://foo.org/") +// http://foo.org/ +``` + + +Installation +============ + +- `npm install resolve-url` +- `bower install resolve-url` +- `component install lydell/resolve-url` + +Works with CommonJS, AMD and browser globals, through UMD. + + +Usage +===== + +### `resolveUrl(...urls)` ### + +Pass one or more urls. Resolves the last one to an absolute url, using the +previous ones and `window.location`. + +It’s like starting out on `window.location`, and then clicking links with the +urls as `href` attributes in order, from left to right. + +Unlike Node.js’ [`path.resolve`], this function always goes through all of the +arguments, from left to right. `path.resolve` goes from right to left and only +in the worst case goes through them all. Should that matter. + +Actually, the function is _really_ like clicking a lot of links in series: An +actual `` gets its `href` attribute set for each url! This means that the +url resolution of the browser is used, which makes this module really +light-weight. + +Also note that this functions deals with urls, not paths, so in that respect it +has more in common with Node.js’ [`url.resolve`]. But the arguments are more +like [`path.resolve`]. + +[`path.resolve`]: http://nodejs.org/api/path.html#path_path_resolve_from_to +[`url.resolve`]: http://nodejs.org/api/url.html#url_url_resolve_from_to + + +Tests +===== + +Run `npm test`, which lints the code and then gives you a link to open in a +browser of choice (using `testling`). + + +License +======= + +[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/resolve-url/resolve-url.js b/node_modules/resolve-url/resolve-url.js new file mode 100644 index 000000000..19e8d040e --- /dev/null +++ b/node_modules/resolve-url/resolve-url.js @@ -0,0 +1,47 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +void (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(factory) + } else if (typeof exports === "object") { + module.exports = factory() + } else { + root.resolveUrl = factory() + } +}(this, function() { + + function resolveUrl(/* ...urls */) { + var numUrls = arguments.length + + if (numUrls === 0) { + throw new Error("resolveUrl requires at least one argument; got none.") + } + + var base = document.createElement("base") + base.href = arguments[0] + + if (numUrls === 1) { + return base.href + } + + var head = document.getElementsByTagName("head")[0] + head.insertBefore(base, head.firstChild) + + var a = document.createElement("a") + var resolved + + for (var index = 1; index < numUrls; index++) { + a.href = arguments[index] + resolved = a.href + base.href = resolved + } + + head.removeChild(base) + + return resolved + } + + return resolveUrl + +})); diff --git a/node_modules/resolve-url/test/resolve-url.js b/node_modules/resolve-url/test/resolve-url.js new file mode 100644 index 000000000..18532edd3 --- /dev/null +++ b/node_modules/resolve-url/test/resolve-url.js @@ -0,0 +1,70 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var test = require("tape") + +var resolveUrl = require("../") + +"use strict" + +test("resolveUrl", function(t) { + + t.plan(7) + + t.equal(typeof resolveUrl, "function", "is a function") + + t.equal( + resolveUrl("https://example.com/"), + "https://example.com/" + ) + + var loc = "https://example.com/articles/resolving-urls/edit" + + t.equal( + resolveUrl(loc, "remove"), + "https://example.com/articles/resolving-urls/remove" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js"), + "https://example.com/static/scripts/app.js" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map"), + "https://example.com/static/source-maps/app.js.map" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee"), + "https://example.com/static/coffee/app.coffee" + ) + + t.equal( + resolveUrl(loc, "//cdn.example.com/jquery.js"), + "https://cdn.example.com/jquery.js" + ) + +}) + +test("edge cases", function(t) { + + t.plan(4) + + t["throws"](resolveUrl, /at least one argument/, "throws with no arguments") + + var accidentallyUndefined + var result + t.doesNotThrow( + function() { result = resolveUrl(accidentallyUndefined) }, + "undefined is still an argument" + ) + t.ok(result.match(/\/undefined$/), "undefined is stringified") + + t.equal( + resolveUrl("http://foo.org/test", undefined, {}, ["a/b"], null), + "http://foo.org/a/null", + "arguments are stringified" + ) + +}) diff --git a/node_modules/safe-buffer/LICENSE b/node_modules/safe-buffer/LICENSE new file mode 100644 index 000000000..0c068ceec --- /dev/null +++ b/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +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. diff --git a/node_modules/safe-buffer/README.md b/node_modules/safe-buffer/README.md new file mode 100644 index 000000000..e9a81afd0 --- /dev/null +++ b/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/safe-buffer/index.d.ts b/node_modules/safe-buffer/index.d.ts new file mode 100644 index 000000000..e9fed809a --- /dev/null +++ b/node_modules/safe-buffer/index.d.ts @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff --git a/node_modules/safe-buffer/index.js b/node_modules/safe-buffer/index.js new file mode 100644 index 000000000..f8d3ec988 --- /dev/null +++ b/node_modules/safe-buffer/index.js @@ -0,0 +1,65 @@ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_modules/safe-buffer/package.json b/node_modules/safe-buffer/package.json new file mode 100644 index 000000000..f2869e256 --- /dev/null +++ b/node_modules/safe-buffer/package.json @@ -0,0 +1,51 @@ +{ + "name": "safe-buffer", + "description": "Safer Node.js Buffer API", + "version": "5.2.1", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "devDependencies": { + "standard": "*", + "tape": "^5.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/safefs/.dependabot/config.yml b/node_modules/safefs/.dependabot/config.yml new file mode 100644 index 000000000..dbe73b7fe --- /dev/null +++ b/node_modules/safefs/.dependabot/config.yml @@ -0,0 +1,9 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: live + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/safefs/.github/FUNDING.yml b/node_modules/safefs/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/safefs/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/safefs/HISTORY.md b/node_modules/safefs/HISTORY.md new file mode 100755 index 000000000..4f6bbe11c --- /dev/null +++ b/node_modules/safefs/HISTORY.md @@ -0,0 +1,95 @@ +# History + +## v4.2.0 2019 November 13 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.1.0 2016 May 28 + +- Updated internal conventions + - Moved from [ESNextGuardian](https://github.com/bevry/esnextguardian) to [Editions](https://github.com/bevry/editions) + +## v4.0.1 2015 December 10 + +- Updated internal conventions + +## v4.0.0 2015 September 5 + +- Dropped node <0.12 support + +## v3.2.2 2015 September 5 + +- Use any version of `graceful-fs` to fix possible compat issues with node <0.10 support + +## v3.2.1 2015 September 5 + +- Fixed node <0.10 support (regression since v3.2.0) - Unfortunately our dev dependencies don't support this early, so no travis ci tests, manual tests pass + +## v3.2.0 2015 September 5 + +- Moved from CoffeeScript to ES6+ +- Removed `cyclic.js` as it should no longer be needed +- Added tests... finally... + +## v3.1.3 2015 March 18 + +- Updated dependencies + +## v3.1.2 2014 December 12 + +- Updated dependencies + +## v3.1.1 2014 February 5 + +- Safefs no longer fails to extend the safefs object with fs utilities under certain environments - Thanks to [Merrick Christensen](https://github.com/iammerrick) and [Kyle Robinson Young](https://github.com/shama) for [issue #3](https://github.com/bevry/safefs/issues/3) + +## v3.1.0 2013 December 9 + +- We no longer use our internal queue and now just rely on the graceful-fs queue +- We now alias all the other standard file system methods onto our own object + +## v3.0.6 2013 November 25 + +- Only unlink if the file exists + +## v3.0.5 2013 November 17 + +- Use [graceful-fs](https://github.com/isaacs/node-graceful-fs) under the hood, along with our limiting abilities to help avoid even more problems +- Updated dependencies + +## v3.0.4 2013 November 6 + +- Repackaged +- Updated dependencies + +## v3.0.3 2013 August 29 + +- Added `lstat` functions - Thanks to [James Gill](https://github.com/jagill) for [pull request #1](https://github.com/bevry/safefs/pull/1) + +## v3.0.2 2013 August 29 + +- Updated dependencies + +## v3.0.1 2013 April 5 + +- Updated dependencies + +## v3.0.0 2013 April 5 + +- Rewrote to use [TaskGroup](https://npmjs.org/package/taskgroup) instead of the manual queue + setTimeout approach we were using before + +## v2.0.3 2013 April 1 + +- Added missing `ensurePath` and `getParentPathSync` + +## v2.0.2 2013 April 1 + +- Added missing `ensurePath` and `getParentPathSync` + +## v2.0.1 2013 March 29 + +- Fixed readme code block + +## v2.0.0 2013 March 29 + +- Split from [bal-util](https://github.com/balupton/bal-util) diff --git a/node_modules/safefs/LICENSE.md b/node_modules/safefs/LICENSE.md new file mode 100644 index 000000000..c69ffc0e0 --- /dev/null +++ b/node_modules/safefs/LICENSE.md @@ -0,0 +1,24 @@ + + +

    License

    + +Unless stated otherwise all works are: + +
    + +and licensed under: + + + +

    MIT License

    + +
    +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 (including the next paragraph) 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.
    +
    + + diff --git a/node_modules/safefs/README.md b/node_modules/safefs/README.md new file mode 100755 index 000000000..b3791fd28 --- /dev/null +++ b/node_modules/safefs/README.md @@ -0,0 +1,145 @@ + + +

    Safe FS

    + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Stop getting EMFILE errors! Open only as many files as the operating system supports. + + + + + + +

    Install

    + +

    npm

    +
      +
    • Install: npm install --save safefs
    • +
    • Require: require('safefs')
    • +
    + +

    Editions

    + +

    This package is published with the following editions:

    + +
    • safefs aliases safefs/index.js which uses Editions to automatically select the correct edition for the consumers environment
    • +
    • safefs/source/index.js is esnext source code with require for modules
    • +
    • safefs/edition-node-0.12/index.js is esnext compiled for node.js 0.12 with require for modules
    + + + + +## Usage + +``` javascript +var safefs = require('safefs') +``` + +SafeFS uses [graceful-fs](https://npmjs.org/package/graceful-fs) to wrap all of the standard [file system](http://nodejs.org/docs/latest/api/all.html#all_file_system) methods to avoid EMFILE errors among other problems. + +On-top of graceful-fs, SafeFS also adds additional wrapping on the following methods: + +- `writeFile(path, data, options?, next)` - ensure the full path exists before writing to it +- `appendFile(path, data, options?, next)` - ensure the full path exists before writing to it +- `mkdir(path, mode?, next)` - mode defaults to `0o777 & (~process.umask())` +- `unlink(path, next)` - checks if the file exists before removing it + +SafeFS also define these additional methods: + +- `ensurePath(path, options, next)` - ensure the full path exists, equivalent to unix's `mdir -p path` +- `getParentPathSync(path)` - returns the parent directory of the path + + + + +

    History

    + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

    Contribute

    + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    Backers

    + +

    Maintainers

    + +These amazing people are maintaining this project: + + + +

    Sponsors

    + +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

    Contributors

    + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/safefs/edition-node-0.12/index.js b/node_modules/safefs/edition-node-0.12/index.js new file mode 100755 index 000000000..57fd59e99 --- /dev/null +++ b/node_modules/safefs/edition-node-0.12/index.js @@ -0,0 +1,141 @@ +/* eslint no-sync:0 */ +'use strict'; // Import + +var fsUtil = require('graceful-fs'); + +var pathUtil = require('path'); // ===================================== +// Define Module + + +var safefs = { + // ===================================== + // Our own custom functions + // Get the parent path + getParentPathSync: function getParentPathSync(path) { + return path // remove trailing slashes + .replace(/[/\\]$/, '') // remove last directory + .replace(/[/\\][^/\\]+$/, ''); + }, + // Ensure path exists + // next(err, existed) + ensurePath: function ensurePath(path, opts, next) { + // Prepare + if (next == null) { + next = opts; + opts = null; + } + + opts = opts || {}; // Check + + safefs.exists(path, function (exists) { + // Error + if (exists) return next(null, true); // Success + + var parentPath = safefs.getParentPathSync(path); + safefs.ensurePath(parentPath, opts, function (err) { + // Error + if (err) return next(err, false); // Success + + safefs.mkdir(path, opts.mode, function () { + // ignore mkdir error, as if it already exists, then we are winning + safefs.exists(path, function (exists) { + // Error + if (!exists) { + var _err = new Error("Failed to create the directory: ".concat(path)); + + return next(_err, false); + } // Success + + + next(null, false); + }); + }); + }); + }); // Chain + + return safefs; + }, + // ===================================== + // Safe Wrappers for Standard Methods + // Write File + // next(err) + writeFile: function writeFile(path, data, opts, next) { + // Prepare + if (next == null) { + next = opts; + opts = null; + } // Ensure path + + + safefs.ensurePath(pathUtil.dirname(path), opts, function (err) { + // Error + if (err) return next(err); // Write data + + fsUtil.writeFile(path, data, opts, next); + }); // Chain + + return safefs; + }, + // Append File + // next(err) + appendFile: function appendFile(path, data, opts, next) { + // Prepare + if (next == null) { + next = opts; + opts = null; + } // Ensure path + + + safefs.ensurePath(pathUtil.dirname(path), opts, function (err) { + // Error + if (err) return next(err); // Write data + + fsUtil.appendFile(path, data, opts, next); + }); // Chain + + return safefs; + }, + // Mkdir + // next(err) + mkdir: function mkdir(path, mode, next) { + // Prepare + if (next == null) { + next = mode; + mode = null; + } + + if (mode == null) { + /* eslint no-bitwise:0, no-magic-numbers:0 */ + mode = 511 & ~process.umask(); + } // Action + + + fsUtil.mkdir(path, mode, next); // Chain + + return safefs; + }, + // Unlink + // don't error if the path doesn't already exist + // next(err) + unlink: function unlink(path, next) { + // Stat + safefs.exists(path, function (exists) { + if (exists === false) return next(); + fsUtil.unlink(path, next); + }); // Chain + + return safefs; + } +}; // Add any missing methods + +Object.keys(fsUtil).forEach(function (key) { + var value = fsUtil[key]; // we do the `!safefs[key]` as we don't want to over-write our own enhancements + // we do the `value.bind` check, as we may interate across trivial types + // we do the `Function.prototype.bind` check, as underscore is a function that has it's own bind + + if (!safefs[key] && value && value.bind === Function.prototype.bind) { + safefs[key] = value.bind(fsUtil); + } +}); // Export + +module.exports = safefs; \ No newline at end of file diff --git a/node_modules/safefs/index.js b/node_modules/safefs/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/safefs/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/safefs/package.json b/node_modules/safefs/package.json new file mode 100644 index 000000000..4eb5a5134 --- /dev/null +++ b/node_modules/safefs/package.json @@ -0,0 +1,171 @@ +{ + "title": "Safe FS", + "name": "safefs", + "version": "4.2.0", + "description": "Stop getting EMFILE errors! Open only as many files as the operating system supports.", + "homepage": "https://github.com/bevry/safefs", + "license": "MIT", + "keywords": [ + "fs", + "path", + "openFile", + "closeFile", + "emfile" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + }, + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "James Gill (http://www.linkedin.com/in/jagill/)", + "Sean Fridman (http://seanfridman.com)", + "Kyle Robinson Young (http://dontkry.com)" + ], + "bugs": { + "url": "https://github.com/bevry/safefs/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/safefs.git" + }, + "engines": { + "node": ">=0.12" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "esnext compiled for node.js 0.12 with require for modules", + "directory": "edition-node-0.12", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "main": "index.js", + "dependencies": { + "editions": "^2.2.0", + "graceful-fs": "^4.2.3" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "assert-helpers": "4.10.0", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.2.1", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-babel": "^5.3.0", + "eslint-plugin-prettier": "^3.1.1", + "kava": "^3.1.0", + "prettier": "^1.19.1", + "projectz": "^1.9.0", + "rimraf": "2.7.1", + "valid-directory": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-node-0.12", + "our:compile:edition-node-0.12": "env BABEL_ENV=edition-node-0.12 babel --out-dir ./edition-node-0.12 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:projectz", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-node-0.12": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.12" + }, + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/safefs/source/index.js b/node_modules/safefs/source/index.js new file mode 100755 index 000000000..72d86ce1a --- /dev/null +++ b/node_modules/safefs/source/index.js @@ -0,0 +1,163 @@ +/* eslint no-sync:0 */ +'use strict' + +// Import +const fsUtil = require('graceful-fs') +const pathUtil = require('path') + +// ===================================== +// Define Module + +const safefs = { + // ===================================== + // Our own custom functions + + // Get the parent path + getParentPathSync(path) { + return ( + path + // remove trailing slashes + .replace(/[/\\]$/, '') + // remove last directory + .replace(/[/\\][^/\\]+$/, '') + ) + }, + + // Ensure path exists + // next(err, existed) + ensurePath(path, opts, next) { + // Prepare + if (next == null) { + next = opts + opts = null + } + opts = opts || {} + + // Check + safefs.exists(path, function(exists) { + // Error + if (exists) return next(null, true) + + // Success + const parentPath = safefs.getParentPathSync(path) + safefs.ensurePath(parentPath, opts, function(err) { + // Error + if (err) return next(err, false) + + // Success + safefs.mkdir(path, opts.mode, function() { + // ignore mkdir error, as if it already exists, then we are winning + + safefs.exists(path, function(exists) { + // Error + if (!exists) { + const err = new Error(`Failed to create the directory: ${path}`) + return next(err, false) + } + + // Success + next(null, false) + }) + }) + }) + }) + + // Chain + return safefs + }, + + // ===================================== + // Safe Wrappers for Standard Methods + + // Write File + // next(err) + writeFile(path, data, opts, next) { + // Prepare + if (next == null) { + next = opts + opts = null + } + + // Ensure path + safefs.ensurePath(pathUtil.dirname(path), opts, function(err) { + // Error + if (err) return next(err) + + // Write data + fsUtil.writeFile(path, data, opts, next) + }) + + // Chain + return safefs + }, + + // Append File + // next(err) + appendFile(path, data, opts, next) { + // Prepare + if (next == null) { + next = opts + opts = null + } + + // Ensure path + safefs.ensurePath(pathUtil.dirname(path), opts, function(err) { + // Error + if (err) return next(err) + + // Write data + fsUtil.appendFile(path, data, opts, next) + }) + + // Chain + return safefs + }, + + // Mkdir + // next(err) + mkdir(path, mode, next) { + // Prepare + if (next == null) { + next = mode + mode = null + } + if (mode == null) { + /* eslint no-bitwise:0, no-magic-numbers:0 */ + mode = 0o777 & ~process.umask() + } + + // Action + fsUtil.mkdir(path, mode, next) + + // Chain + return safefs + }, + + // Unlink + // don't error if the path doesn't already exist + // next(err) + unlink(path, next) { + // Stat + safefs.exists(path, function(exists) { + if (exists === false) return next() + fsUtil.unlink(path, next) + }) + + // Chain + return safefs + } +} + +// Add any missing methods +Object.keys(fsUtil).forEach(function(key) { + const value = fsUtil[key] + // we do the `!safefs[key]` as we don't want to over-write our own enhancements + // we do the `value.bind` check, as we may interate across trivial types + // we do the `Function.prototype.bind` check, as underscore is a function that has it's own bind + if (!safefs[key] && value && value.bind === Function.prototype.bind) { + safefs[key] = value.bind(fsUtil) + } +}) + +// Export +module.exports = safefs diff --git a/node_modules/safeps/.npmignore b/node_modules/safeps/.npmignore new file mode 100644 index 000000000..fd4f83256 --- /dev/null +++ b/node_modules/safeps/.npmignore @@ -0,0 +1,54 @@ +# 2017 April 3 +# https://github.com/bevry/base + +# Temp Files +yarn.lock +**/.docpad.db +**/out.* +**/*.log +**/*.cpuprofile +**/*.heapsnapshot + +# Editor Files +.c9/ +.vscode/ + +# Build Files +build/ +components/ +bower_components/ +node_modules/ + +# Private Files +.env + +# Documentation Files +docs/ +guides/ +BACKERS.md +CONTRIBUTING.md +HISTORY.md + +# Development Files +web/ +**/example* +**/test* +.editorconfig +.eslintrc* +.jshintrc +.jscrc +coffeelint* +.travis* +nakefile* +Cakefile +Makefile + +# Other Package Definitions +template.js +component.json +bower.json + +# ===================================== +# CUSTOM MODIFICATIONS + +# None diff --git a/node_modules/safeps/HISTORY.md b/node_modules/safeps/HISTORY.md new file mode 100644 index 000000000..b60b4ca55 --- /dev/null +++ b/node_modules/safeps/HISTORY.md @@ -0,0 +1,134 @@ +# History + +## v7.0.1 2017 April 16 +- Fixed `fatal: remote origin already exists` on `initGitRepo` when remote already existed, it will now overwrite the remote + +## v7.0.0 2017 April 16 +- Removed `initOrPullGitRepo` and put its functionality into `initGitRepo` if the appropriate args are provided, also checkout the branch (if provided) before pulling it + - Thanks to [Nathan Friedly](https://github.com/nfriedly) for his help on [issue #7](https://github.com/bevry/safeps/issues/7) and [pull request #8](https://github.com/bevry/safeps/pull/8) + +## v6.4.0 2017 April 16 +- Updated base files +- Fix node <0.12 support + +## v6.3.0 2016 June 4 +- Updated dependencies + +## v6.2.0 2016 June 4 +- Introduced `determineExecPathSync` which is now used of `opts.sync` is `true` in `determineExecPath` + - Removes the need for `sync` option in TaskGroup, which has caused too much complexity over the years + +## v6.1.0 2016 May 28 +- Updated internal conventions + - Moved from [ESNextGuardian](https://github.com/bevry/esnextguardian) to [Editions](https://github.com/bevry/editions) + +## v6.0.2 2015 December 10 +- Updated internal conventions + +## v6.0.1 2015 September 24 +- Updated base files +- Updated dependencies + +## v6.0.0 2015 September 7 +- Dropped support for node 0.10 and earlier, minimum supported version is now 0.12 + - This is due to the compiled babel code not supporting `for of` loops +- Moved from CoffeeScript to ES6+ +- Fixed callback support on `execSync` +- Fixed error handling on `initOrPullGitRepo` + +## v5.1.0 2015 April 7 +- Added `spawnNodeModule` + +## v5.0.0 2015 April 7 +- Removed `requireFresh(path)` instead use the [requirefresh](https://npmjs.org/package/requirefresh) package +- Deprecated `path` option on `initGitRepo`, `initOrPullGitRepo`, `initNodeModules` - use `cwd` option instead + +## v4.0.0 2015 March 17 +- Removed `spawnCommand` and `spawnCommands` use `spawn` and `spawnMultiple` instead + +## v3.0.2 2015 March 17 +- Will no longer attempt to read `stdout` and `stderr` on spawn if `stdio` option is set (it's not possible) + +## v3.0.1 2015 March 17 +- Fixed Buffer concatenation error inside spawn + +## v3.0.0 2015 March 17 +- Backwards Compatibility Breaks: + - `spawn`'s `stdout` and `stderr` are now Buffers + - If you're upgrading, all you have to do to get the previous functionality is to do `stdout.toString()` + - `outputPrefix` value no longer affects `stdout` and `stderr` results (only their output to the terminal) +- Added: + - `hasSpawnSync` + - `hasExecSync` + - `isExecutable(path, opts?, next)` + - `isExecutableSync(path, opts?, next?)` + - `spawnSync(command, opts?, next?)` + - `execSync(command, opts?, next?)` +- Improvements: + - `exec` now supports `outputPrefix` option + - The checks to see if an executable path exists and works have been greatly improved and abstracted out from `determineExecPath` into `isExecutable` and `isExecutableSync` + - `determineExecPath`, `getExecPath`, and `isExecutable` can now operate synchronously with a callback using the `sync: true` option + - Retrieval and writing to a path cache can now be disabled using the `cache: false` option +- Updated dependencies + +## v2.2.13 2015 February 7 +- Updated dependencies + +## v2.2.12 2014 May 21 +- Fix `execMultiple` +- Updated dependencies + +## v2.2.11 2014 January 10 +- Added `outputPrefix` option for `safeps.spawn` + +## v2.2.10 2013 December 27 +- Updated dependencies + +## v2.2.9 2013 November 6 +- Repackaged +- Updated dependencies + +## v2.2.8 2013 September 16 +- Fixed `Error: A task's completion callback has fired when the task was already in a completed state, this is unexpected` when an error occurs before close within a spawned process + +## v2.2.7 2013 August 29 +- Updated dependencies + +## v2.2.6 2013 June 29 +- Added support for `.cmd` aliases on windows to `getPossibleExecPaths` + +## v2.2.5 2013 June 29 +- Split out possible exec path functionality from `getExecPath` to `getPossibleExecPaths(execName?)` +- Added support for `.bat` aliases on windows to `getPossibleExecPaths` +- More efficient possible exec paths ordering when on windows + +## v2.2.4 2013 June 25 +- Repackaged + +## v2.2.3 2013 June 25 +- `spawn` now works when `stdio` is set to `inherit` + +## v2.2.2 2013 June 24 +- `determineExecPath` now works for processes that do not implement `--version` +- `spawn` now won't crash on `EACCESS` errors + +## v2.2.1 2013 June 24 +- `determinePossibleExecPath` is now more effecient +- `getGitPath`, `getNodePath`, `getNpmPath` won't added `undefined` paths +- `spawn` + - now inherits our `process.env` by default, can be changed with `opts.env` + - now sends `signal` and `code` in the completion callback correctly + - now works +- `getExecPath` + - now caches the result + - won't currupt absolute paths + - will work with relative paths + +## v2.2.0 2013 June 24 +- Split from [bal-util](https://github.com/balupton/bal-util) with these additional changes: + - `spawn` is now safe rather than just `spawnCommand` + - `spawn` now waits for `close` instead of `exit` + - Thanks to Johny Jose for [balupton/bal-util#9](https://github.com/balupton/bal-util/pull/9) + - `getEnvironmentPaths` now uses `require('path').delimiter` for seperation + - `getStandardExecPaths` now uses `require('path').join` for joining `execName` to a possible path + - `initGitRepo`, `initOrPullGitRepo` and `initNodeModules` now use `opts.cwd` instead of `opts.path` diff --git a/node_modules/safeps/LICENSE.md b/node_modules/safeps/LICENSE.md new file mode 100644 index 000000000..f616c0a06 --- /dev/null +++ b/node_modules/safeps/LICENSE.md @@ -0,0 +1,24 @@ + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

    MIT License

    + +
    +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.
    +
    + + diff --git a/node_modules/safeps/README.md b/node_modules/safeps/README.md new file mode 100644 index 000000000..9f0eb1f7e --- /dev/null +++ b/node_modules/safeps/README.md @@ -0,0 +1,129 @@ + + +

    Safe PS

    + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Patreon donate button +Open Collective donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button +
    +Slack community badge + + + + + + +Work with processes safely and easily with Node.js + + + + + + +

    Install

    + +

    NPM

      +
    • Install: npm install --save safeps
    • +
    • Module: require('safeps')
    + +

    Editions

    + +

    This package is published with the following editions:

    + +
    • safeps aliases safeps/index.js which uses Editions to automatically select the correct edition for the consumers environment
    • +
    • safeps/source/index.js is Source + ESNext + Require
    • +
    • safeps/es2015/index.js is Babel Compiled + ES2015 + Require
    + +

    Older environments may need Babel's Polyfill or something similar.

    + + + + +## Usage + +[Documentation](http://master.safeps.bevry.surge.sh/docs/) + + + + +

    History

    + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

    Contribute

    + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    Backers

    + +

    Maintainers

    + +These amazing people are maintaining this project: + + + +

    Sponsors

    + +No sponsors yet! Will you be the first? + +Patreon donate button +Open Collective donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

    Contributors

    + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/safeps/es2015/index.js b/node_modules/safeps/es2015/index.js new file mode 100644 index 000000000..2f437f829 --- /dev/null +++ b/node_modules/safeps/es2015/index.js @@ -0,0 +1,1777 @@ +/* eslint no-sync:0 */ +'use strict'; + +// Import + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var _require = require('taskgroup'), + TaskGroup = _require.TaskGroup; + +var typeChecker = require('typechecker'); +var safefs = require('safefs'); +var fsUtil = require('fs'); +var pathUtil = require('path'); +var extractOptsAndCallback = require('extract-opts'); + +// Prepare +var _isWindows = (process.platform || '').indexOf('win') === 0; +var DEFAULT_MAX_OPEN_PROCESSES = 100; + +// ===================================== +// Define Globals + +// Prepare +if (global.safepsGlobal == null) { + global.safepsGlobal = {}; +} + +// Define Global Pool +// Create a pool with the concurrency of our max number of open processes +if (global.safepsGlobal.pool == null) { + global.safepsGlobal.pool = new TaskGroup({ + concurrency: process.env.NODE_MAX_OPEN_PROCESSES == null ? DEFAULT_MAX_OPEN_PROCESSES : process.env.NODE_MAX_OPEN_PROCESSES, + abortOnError: false, + destroyOnceDone: false + }).run(); +} + +// ===================================== +// Define Module + +/** +* Contains methods to safely spawn and manage +* various file system processes. It differs +* from the standard node.js child_process +* module in that it intercepts and handles +* many common errors that might occur when +* invoking child processes that could cause +* an application to crash. Most commonly, errors +* such as ENOENT and EACCESS. This enables +* an application to be both cleaner and more robust. +* @class safeps +* @static +*/ +var safeps = { + + // ===================================== + // Open and Close Processes + + /** + * Open a file. + * Pass your callback to fire when it is safe to open the process + * @param {Function} fn callback + * @chainable + * @return {this} + */ + openProcess: function openProcess(fn) { + // Add the task to the pool and execute it right away + global.safepsGlobal.pool.addTask(fn); + + // Chain + return safeps; + }, + + + // ================================= + // Environments + // @TODO These should be abstracted out into their own packages + + /** + * Returns whether or not we are running on a windows machine + * @return {Boolean} + */ + isWindows: function isWindows() { + return _isWindows; + }, + + + /** + * Get locale code - eg: en-AU, + * fr-FR, zh-CN etc. + * @param {String} lang + * @return {String} + */ + getLocaleCode: function getLocaleCode(lang) { + lang = lang || process.env.LANG || ''; + var localeCode = lang.replace(/\..+/, '').replace('-', '_').toLowerCase() || null; + return localeCode; + }, + + + /** + * Given the localeCode, return + * the language code. + * @param {String} localeCode + * @return {String} + */ + getLanguageCode: function getLanguageCode(localeCode) { + localeCode = safeps.getLocaleCode(localeCode) || ''; + var languageCode = localeCode.replace(/^([a-z]+)[_-]([a-z]+)$/i, '$1').toLowerCase() || null; + return languageCode; + }, + + + /** + * Given the localeCode, return + * the country code. + * @param {String} localeCode + * @return {String} + */ + getCountryCode: function getCountryCode(localeCode) { + localeCode = safeps.getLocaleCode(localeCode) || ''; + var countryCode = localeCode.replace(/^([a-z]+)[_-]([a-z]+)$/i, '$2').toLowerCase() || null; + return countryCode; + }, + + + // ================================= + // Executeable Helpers + + /** + * Has spawn sync. Returns true + * if the child_process spawnSync + * method exists, otherwise false + * @return {Boolean} + */ + hasSpawnSync: function hasSpawnSync() { + return require('child_process').spawnSync != null; + }, + + + /** + * Has exec sync. Returns true + * if the child_process execSync + * method exists, otherwise false + * @return {Boolean} + */ + hasExecSync: function hasExecSync() { + return require('child_process').execSync != null; + }, + + + /** + * Is the path to a file object an executable? + * Synchronised version of isExecutable + * @param {String} path path to test + * @param {Object} opts + * @param {Function} [next] + * @param {Error} next.err + * @param {Boolean} next.isExecutable + * @return {Boolean} + */ + isExecutableSync: function isExecutableSync(path, opts, next) { + // Prepare + var isExecutable = void 0; + + // Access (Node 0.12+) + if (fsUtil.accessSync) { + try { + fsUtil.accessSync(path, fsUtil.X_OK); + isExecutable = true; + } catch (err) { + isExecutable = false; + } + } + + // Shim + else { + try { + require('child_process').execSync(path + ' --version'); + isExecutable = true; + } catch (err) { + // If there was an error + // determine if it was an error with trying to run it (not executable) + // or an error from running it (executable) + isExecutable = err.code !== 127 && /EACCESS|Permission denied/.test(err.message) === false; + } + } + + // Return + if (next) { + next(null, isExecutable); + return safeps; + } else { + return isExecutable; + } + }, + + + /** + * Is the path to a file object an executable? + * Boolean result returned as the isExecutable parameter + * of the passed callback. + * @param {String} path path to test + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to test sync rather than async + * @param {Function} next callback + * @param {Error} next.err + * @param {Boolean} next.isExecutable + * @return {Boolean} returned if opts.sync = true + */ + isExecutable: function isExecutable(path, opts, next) { + + // Sync? + var _extractOptsAndCallba = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba2 = _slicedToArray(_extractOptsAndCallba, 2); + + opts = _extractOptsAndCallba2[0]; + next = _extractOptsAndCallba2[1]; + if (opts.sync) { + return safeps.isExecutableSync(path, opts, next); + } + + // Access (Node 0.12+) + if (fsUtil.access) { + fsUtil.access(path, fsUtil.X_OK, function (err) { + var isExecutable = !err; + return next(null, isExecutable); + }); + } + + // Shim + else { + require('child_process').exec(path + ' --version', function (err) { + // If there was no error, then execution worked fine, so we are executable + if (!err) return next(null, true); + // If there was an error + // determine if it was an error with trying to run it (not executable) + // or an error from running it (executable) + var isExecutable = err.code !== 127 && /EACCESS|Permission denied/.test(err.message) === false; + return next(null, isExecutable); + }); + } + + // Chain + return safeps; + }, + + + /** + * Internal: Prepare options for an execution. + * Makes sure all options are populated or exist and + * gives the opportunity to prepopulate some of those + * options. + * @access private + * @param {Object} [opts] + * @param {Stream} [opts.stdin=null] in stream + * @param {Array} [opts.stdio=null] Child's stdio configuration + * @param {Boolean} [opts.safe=true] + * @param {Object} [opts.env=process.env] + * @return {Object} opts + */ + prepareExecutableOptions: function prepareExecutableOptions(opts) { + // Prepare + opts = opts || {}; + + // Ensure all options exist + if (typeof opts.stdin === 'undefined') opts.stdin = null; + if (typeof opts.stdio === 'undefined') opts.stdio = null; + + // By default make sure execution is valid + if (opts.safe == null) opts.safe = true; + + // If a direct pipe then don't do output modifiers + if (opts.stdio) { + opts.read = opts.output = false; + opts.outputPrefix = null; + } + + // Otherwise, set output modifiers + else { + if (opts.read == null) opts.read = true; + if (opts.output == null) opts.output = Boolean(opts.outputPrefix); + if (opts.outputPrefix == null) opts.outputPrefix = null; + } + + // By default inherit environment variables + if (opts.env == null) { + opts.env = process.env; + } + // If we don't want to inherit environment variables, then don't + else if (opts.env === false) { + opts.env = null; + } + + // Return + return opts; + }, + + + /** + * Internal: Prepare result of an execution + * @access private + * @param {Object} result + * @param {Object} result.pid Number Pid of the child process + * @param {Object} result.output output Array Array of results from stdio output + * @param {Stream} result.stdout stdout The contents of output + * @param {Stream} result.stderr stderr The contents of output + * @param {Number} result.status status The exit code of the child process + * @param {String} result.signal signal The signal used to kill the child process + * @param {Error} result.error The error object if the child process failed or timed out + * @param {Object} [opts] + * @param {Object} [opts.output] + * @param {Object} [opts.outputPrefix] + * @return {Object} result + */ + updateExecutableResult: function updateExecutableResult(result, opts) { + // If we want to output, then output the correct streams with the correct prefixes + if (opts.output) { + safeps.outputData(result.stdout, 'stdout', opts.outputPrefix); + safeps.outputData(result.stderr, 'stderr', opts.outputPrefix); + } + + // If we already have an error, then don't continue + if (result.error) { + return result; + } + + // We don't already have an error, so let's check the status code for an error + // Check if the status code exists, and if it is not zero, zero is the success code + if (result.status != null && result.status !== 0) { + var message = 'Command exited with a non-zero status code.'; + + // As there won't be that much information on this error, as it was not already provided + // we should output the stdout if we have it + if (result.stdout) { + var tmp = safeps.prefixData(result.stdout); + if (tmp) { + message += "\nThe command's stdout output:\n" + tmp; + } + } + // and output the stderr if we have it + if (result.stderr) { + var _tmp = safeps.prefixData(result.stderr); + if (_tmp) { + message += "\nThe command's stderr output:\n" + _tmp; + } + } + + // and create the error from that output + result.error = new Error(message); + return result; + } + + // Success + return result; + }, + + + /** + * Internal: prefix data + * @access private + * @param {Object} data + * @param {String} [prefix = '>\t'] + * @return {Object} data + */ + prefixData: function prefixData(data) { + var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '>\t'; + + data = data && data.toString && data.toString() || ''; + if (prefix && data) { + data = prefix + data.trim().replace(/\n/g, '\n' + prefix) + '\n'; + } + return data; + }, + + + /** + * Internal: Set output data + * @access private + * @param {Object} data + * @param {Object} [channel = 'stdout'] + * @param {Object} prefix + * @chainable + * @return {this} + */ + outputData: function outputData(data) { + var channel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'stdout'; + var prefix = arguments[2]; + + if (data.toString().trim().length !== 0) { + if (prefix) { + data = safeps.prefixData(data, prefix); + } + process[channel].write(data); + } + return null; + }, + + + // ================================= + // Spawn + + /** + * Syncronised version of safeps.spawn. Will not return until the + * child process has fully closed. Results can be returned + * from the method call or via a passed callback. Even if + * a callback is passed to spawnSync, the method will still + * be syncronised with the child process and the callback will + * only return after the child process has closed. + * + * Simple usage example: + * + * var safeps = require('safeps'); + * var command = ['npm', 'install', 'jade', '--save']; + * + * //a lot of the time you won't need the opts argument + * var opts = { + * cwd: __dirname //this is actually pointless in a real application + * }; + * + * var result = safeps.spawnSync(command, opts); + * + * console.log(result.error); + * console.log(result.status); + * console.log(result.signal); + * console.log("I've finished..."); + * + * @param {Array|String} command + * @param {Object} [opts] + * @param {Boolean} [opts.safe] Whether to check the executable path. + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Array|String} [opts.stdio] Child's stdio configuration. + * @param {Array} [opts.customFds] Deprecated File descriptors for the child to use for stdio. + * @param {Object} [opts.env] Environment key-value pairs. + * @param {Boolean} [opts.detached] The child will be a process group leader. + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process + * @param {Function} [next] callback + * @param {Error} next.error + * @param {Stream} next.stdout out stream + * @param {Stream} next.stderr error stream + * @param {Number} next.status node.js exit code + * @param {String} next.signal unix style signal such as SIGKILL or SIGHUP + * @return {Object} {error, pid, output, stdout, stderr, status, signal} + */ + spawnSync: function spawnSync(command, opts, next) { + var _extractOptsAndCallba3 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba4 = _slicedToArray(_extractOptsAndCallba3, 2); + + opts = _extractOptsAndCallba4[0]; + next = _extractOptsAndCallba4[1]; + + opts = safeps.prepareExecutableOptions(opts); + opts.sync = true; + + // If the command is a string, then convert it into an array + if (typeChecker.isString(command)) { + command = command.split(' '); + } + + // Get correct executable path + // Only possible if sync abilities are possible (node 0.12 and up) or if it is cached + // Otherwise, don't worry about it and output a warning to stderr + if (opts.safe) { + var wasSync = 0; + safeps.getExecPath(command[0], opts, function (err, execPath) { + if (err) return; + command[0] = execPath; + wasSync = 1; + }); + if (wasSync === 0) { + process.stderr.write('safeps.spawnSync: was unable to get the executable path synchronously'); + } + } + + // Spawn Synchronously + var result = require('child_process').spawnSync(command[0], command.slice(1), opts); + safeps.updateExecutableResult(result, opts); + + // Complete + if (next) { + next(result.error, result.stdout, result.stderr, result.status, result.signal); + } else { + return result; + } + }, + + + /** + * Wrapper around node's spawn command for a cleaner, more robust and powerful API. + * Launches a new process with the given command. Command line arguments are + * part of the command parameter (unlike the node.js spawn). Command can be + * an array of command line arguments or a command line string. Opts allows + * additional options to be sent to the spawning action. + * + * Simple usage example: + * + * var safeps = require('safeps'); + * var command = ['npm', 'install','jade','--save']; + * + * //a lot of the time you won't need the opts argument + * var opts = { + * cwd: __dirname //this is actually pointless in a real application + * } + * function myCallback(error, stdout, stderr, status, signal){ + * console.log(error); + * console.log(status); + * console.log(signal); + * console.log("I've finished..."); + * } + * safeps.spawn(command, opts, myCallback); + * + * @param {Array|String} command + * @param {Object} [opts] + * @param {Boolean} [opts.safe] Whether to check the executable path. + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Array|String} [opts.stdio] Child's stdio configuration. + * @param {Array} [opts.customFds] Deprecated File descriptors for the child to use for stdio. + * @param {Object} [opts.env] Environment key-value pairs. + * @param {Boolean} [opts.detached] The child will be a process group leader. + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process. + * @param {Function} next callback + * @param {Error} next.error + * @param {Stream} next.stdout out stream + * @param {Stream} next.stderr error stream + * @param {Number} next.status node.js exit code + * @param {String} next.signal unix style signal such as SIGKILL or SIGHUP + * @chainable + * @return {this} + */ + spawn: function spawn(command, opts, next) { + var _extractOptsAndCallba5 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba6 = _slicedToArray(_extractOptsAndCallba5, 2); + + opts = _extractOptsAndCallba6[0]; + next = _extractOptsAndCallba6[1]; + + opts = safeps.prepareExecutableOptions(opts); + + // Check if we want sync instead + if (opts.sync) { + return safeps.spawnSync(command, opts, next); + } + + // Patience + safeps.openProcess(function (closeProcess) { + // If the command is a string, then convert it into an array + if (typeChecker.isString(command)) { + command = command.split(' '); + } + + // Prepare + var result = { + pid: null, + stdout: null, + stderr: null, + output: null, + error: null, + status: null, + signal: null + }; + var exited = false; + + // Tasks + var tasks = new TaskGroup().done(function (err) { + exited = true; + closeProcess(); + next(err || result.error, result.stdout, result.stderr, result.status, result.signal); + }); + + // Get correct executable path + if (opts.safe) { + tasks.addTask(function (complete) { + safeps.getExecPath(command[0], opts, function (err, execPath) { + if (err) return complete(err); + command[0] = execPath; + complete(); + }); + }); + } + + // Spawn + tasks.addTask(function (complete) { + // Spawn + result.pid = require('child_process').spawn(command[0], command.slice(1), opts); + + // Write if we want to + // result.pid.stdin may be null of stdio is 'inherit' + if (opts.stdin && result.pid.stdin) { + result.pid.stdin.write(opts.stdin); + result.pid.stdin.end(); + } + + // Read if we want to by listening to the streams and updating our result variables + if (opts.read) { + // result.pid.stdout may be null of stdio is 'inherit' + if (result.pid.stdout) { + result.pid.stdout.on('data', function (data) { + if (opts.output) { + safeps.outputData(data, 'stdout', opts.outputPrefix); + } + if (result.stdout) { + result.stdout = Buffer.concat([result.stdout, data]); + } else { + result.stdout = data; + } + }); + } + + // result.pid.stderr may be null of stdio is 'inherit' + if (result.pid.stderr) { + result.pid.stderr.on('data', function (data) { + if (opts.output) { + safeps.outputData(data, 'stderr', opts.outputPrefix); + } + if (result.stderr) { + result.stderr = Buffer.concat([result.stderr, data]); + } else { + result.stderr = data; + } + }); + } + } + + // Wait + result.pid.on('close', function (status, signal) { + // Apply to local global + result.status = status; + result.signal = signal; + + // Check if we have already exited due to domains + // as without this, then we will fire the completion callback twice + // once for the domain error that will happen first + // then again for the close error + // if it happens the other way round, close, then error, we want to be alerted of that + if (exited === true) return; + + // Check result and complete + opts.output = false; + safeps.updateExecutableResult(result, opts); + return complete(result.error); + }); + }); + + // Run + tasks.run(); + }); + + // Chain + return safeps; + }, + + + /** + * Spawn multiple processes in the one method call. + * Launches new processes with the given array of commands. + * Each item in the commands array represents a command parameter + * sent to the safeps.spawn method, so each item can be a command line + * string or an array of command line inputs. It is also possible + * to pass a single command string and in this case calling + * spawnMultiple will be effectively the same as calling safeps.spawn. + * @param {Array|String} commands + * @param {Object} [opts] + * @param {Boolean} [opts.concurrency=1] Whether to spawn processes concurrently. + * @param {String} opts.cwd Current working directory of the child process. + * @param {Array|String} opts.stdio Child's stdio configuration. + * @param {Array} opts.customFds Deprecated File descriptors for the child to use for stdio. + * @param {Object} opts.env Environment key-value pairs. + * @param {Boolean} opts.detached The child will be a process group leader. + * @param {Number} opts.uid Sets the user identity of the process. + * @param {Number} opts.gid Sets the group identity of the process. + * @param {Function} next callback + * @param {Error} next.error + * @param {Array} next.results array of spawn results + * @param {Stream} next.results[i].stdout out stream + * @param {Stream} next.results[i].stderr error stream + * @param {Number} next.results[i].status node.js exit code + * @param {String} next.results[i].signal unix style signal such as SIGKILL or SIGHUP + * @chainable + * @return {this} + */ + spawnMultiple: function spawnMultiple(commands, opts, next) { + var _extractOptsAndCallba7 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba8 = _slicedToArray(_extractOptsAndCallba7, 2); + + opts = _extractOptsAndCallba8[0]; + next = _extractOptsAndCallba8[1]; + + var results = []; + + // Be synchronous by default + if (opts.concurrency == null) opts.concurrency = 1; + + // Make sure we send back the arguments + var tasks = new TaskGroup({ concurrency: opts.concurrency }).done(function (err) { + next(err, results); + }); + + // Prepare tasks + if (!typeChecker.isArray(commands)) { + commands = [commands]; + } + + // Add tasks + commands.forEach(function (command) { + tasks.addTask(function (complete) { + safeps.spawn(command, opts, function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var err = args[0] || null; + results.push(args); + complete(err); + }); + }); + }); + + // Run the tasks + tasks.run(); + + // Chain + return safeps; + }, + + + // ================================= + // Exec + + /** + * Syncronised version of safeps.exec. Runs a command in a shell and + * buffers the output. Will not return until the + * child process has fully closed. Results can be returned + * from the method call or via a passed callback. Even if + * a callback is passed to execSync, the method will still + * be syncronised with the child process and the callback will + * only return after the child process has closed. + * Note: + * Stdout and stderr should be Buffers but they are strings unless encoding:null + * for now, nothing we should do, besides wait for joyent to reply + * https://github.com/joyent/node/issues/5833#issuecomment-82189525. + * @param {Object} command + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Object} [opts.env] Environment key-value pairs + * @param {String} [opts.encoding='utf8'] + * @param {String} [opts.shell] Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.) + * @param {Number} [opts.timeout=0] + * @param {Number} [opts.maxBuffer=200*1024] Largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed. + * @param {String} [opts.killSignal='SIGTERM'] + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process. + * @param {Function} next + * @param {Error} next.err + * @param {Buffer|String} next.stdout out buffer + * @param {Buffer|String} next.stderr error buffer + * @return {Object} {error, stdout, stderr} + */ + execSync: function execSync(command, opts, next) { + var _extractOptsAndCallba9 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba10 = _slicedToArray(_extractOptsAndCallba9, 2); + + opts = _extractOptsAndCallba10[0]; + next = _extractOptsAndCallba10[1]; + + opts = safeps.prepareExecutableOptions(opts); + opts.sync = true; + + // Output + if (opts.output === true && !opts.outputPrefix) { + opts.stdio = 'inherit'; + opts.output = null; + } + + // Spawn Synchronously + var stdout = void 0, + error = void 0; + try { + stdout = require('child_process').execSync(command, opts); + } catch (err) { + error = err; + } + + // Check result + var result = { error: error, stdout: stdout }; + safeps.updateExecutableResult(result, opts); + + // Complete + if (next) { + next(result.error, result.stdout, result.stderr); + } else { + return result; + } + }, + + + /** + * Wrapper around node's exec command for a cleaner, more robust and powerful API. + * Runs a command in a shell and buffers the output. + * Note: + * Stdout and stderr should be Buffers but they are strings unless encoding:null + * for now, nothing we should do, besides wait for joyent to reply + * https://github.com/joyent/node/issues/5833#issuecomment-82189525. + * @param {Object} command + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Object} [opts.env] Environment key-value pairs + * @param {String} [opts.encoding='utf8'] + * @param {String} [opts.shell] Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.) + * @param {Number} [opts.timeout=0] + * @param {Number} [opts.maxBuffer=200*1024] Largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed. + * @param {String} [opts.killSignal='SIGTERM'] + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process. + * @param {Function} next + * @param {Error} next.err + * @param {Buffer|String} next.stdout out buffer + * @param {Buffer|String} next.stderr error buffer + * @chainable + * @return {this} + */ + exec: function exec(command, opts, next) { + var _extractOptsAndCallba11 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba12 = _slicedToArray(_extractOptsAndCallba11, 2); + + opts = _extractOptsAndCallba12[0]; + next = _extractOptsAndCallba12[1]; + + opts = safeps.prepareExecutableOptions(opts); + + // Check if we want sync instead + if (opts.sync) { + return safeps.execSync(command, opts, next); + } + + // Patience + safeps.openProcess(function (closeProcess) { + // Output + if (opts.output === true && !opts.outputPrefix) { + opts.stdio = 'inherit'; + opts.output = null; + } + + // Execute command + require('child_process').exec(command, opts, function (error, stdout, stderr) { + // Complete the task + closeProcess(); + + // Prepare result + var result = { error: error, stdout: stdout, stderr: stderr }; + safeps.updateExecutableResult(result, opts); + + // Complete + return next(result.error, result.stdout, result.stderr); + }); + }); + + // Chain + return safeps; + }, + + + /** + * Exec multiple processes in the one method call. + * Launches new processes with the given array of commands. + * Each item in the commands array represents a command parameter + * sent to the safeps.exec method, so each item can be a command line + * string or an array of command line inputs. It is also possible + * to pass a single command string and in this case calling + * execMultiple will be effectively the same as calling safeps.exec. + * @param {Array|String} commands + * @param {Object} [opts] + * @param {Boolean} [opts.concurrency=1] Whether to exec processes concurrently. + * @param {String} opts.cwd Current working directory of the child process. + * @param {Array|String} opts.stdio Child's stdio configuration. + * @param {Array} opts.customFds Deprecated File descriptors for the child to use for stdio. + * @param {Object} opts.env Environment key-value pairs. + * @param {Boolean} opts.detached The child will be a process group leader. + * @param {Number} opts.uid Sets the user identity of the process. + * @param {Number} opts.gid Sets the group identity of the process. + * @param {Function} next callback + * @param {Error} next.error + * @param {Array} next.results array of exec results + * @param {Stream} next.results[i].stdout out buffer + * @param {Stream} next.results[i].stderr error buffer + * @chainable + * @return {this} + */ + execMultiple: function execMultiple(commands, opts, next) { + var _extractOptsAndCallba13 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba14 = _slicedToArray(_extractOptsAndCallba13, 2); + + opts = _extractOptsAndCallba14[0]; + next = _extractOptsAndCallba14[1]; + + var results = []; + + // Be synchronous by default + if (opts.concurrency == null) opts.concurrency = 1; + + // Make sure we send back the arguments + var tasks = new TaskGroup({ concurrency: opts.concurrency }).done(function (err) { + next(err, results); + }); + + // Prepare tasks + if (!typeChecker.isArray(commands)) { + commands = [commands]; + } + + // Add tasks + commands.forEach(function (command) { + tasks.addTask(function (complete) { + safeps.exec(command, opts, function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var err = args[0] || null; + results.push(args); + complete(err); + }); + }); + }); + + // Run the tasks + tasks.run(); + + // Chain + return safeps; + }, + + + // ================================= + // Paths + + /** + * Determine an executable path from the passed array of possible file paths. + * Called by getExecPath to find a path for a given executable name. + * @access private + * @param {Array} possibleExecPaths string array of file paths + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {Function} [next] + * @param {Error} next.err + * @param {String} next.execPath + * @chainable + * @return {this} + */ + determineExecPathSync: function determineExecPathSync(possibleExecPaths, opts, next) { + var _extractOptsAndCallba15 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba16 = _slicedToArray(_extractOptsAndCallba15, 2); + + opts = _extractOptsAndCallba16[0]; + next = _extractOptsAndCallba16[1]; + + var execPath = null; + + // Handle + possibleExecPaths.forEach(function (possibleExecPath) { + // Check if we have found the valid exec path earlier, if so, skip + // Check if the path is invalid, if it is, skip it + if (execPath || !possibleExecPath) return; + + // Resolve the path as it may be a virtual or relative path + possibleExecPath = pathUtil.resolve(possibleExecPath); + + // Check if the executeable exists + safeps.isExecutableSync(possibleExecPath, opts, function (err, isExecutable) { + if (!err && isExecutable) execPath = possibleExecPath; + }); + }); + + // Return + if (next) { + next(null, execPath); + return safeps; + } else { + return execPath; + } + }, + + + /** + * Determine an executable path from + * the passed array of possible file paths. + * Called by getExecPath to find a path for + * a given executable name. + * @access private + * @param {Array} possibleExecPaths string array of file paths + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {Function} next + * @param {Error} next.err + * @param {String} next.execPath + * @chainable + * @return {this} + */ + determineExecPath: function determineExecPath(possibleExecPaths, opts, next) { + var _extractOptsAndCallba17 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba18 = _slicedToArray(_extractOptsAndCallba17, 2); + + opts = _extractOptsAndCallba18[0]; + next = _extractOptsAndCallba18[1]; + + var execPath = null; + + // Sync? + if (opts.sync) { + return safeps.determineExecPathSync(possibleExecPaths, opts, next); + } + + // Group + var tasks = new TaskGroup().done(function (err) { + return next(err, execPath); + }); + + // Handle + possibleExecPaths.forEach(function (possibleExecPath) { + // Check if the path is invalid, if it is, skip it + if (!possibleExecPath) return; + tasks.addTask(function (complete) { + // Check if we have found the valid exec path earlier, if so, skip + if (execPath) return complete(); + + // Resolve the path as it may be a virtual or relative path + possibleExecPath = pathUtil.resolve(possibleExecPath); + + // Check if the executeable exists + safeps.isExecutable(possibleExecPath, opts, function (err, isExecutable) { + if (!err && isExecutable) execPath = possibleExecPath; + return complete(); + }); + }); + }); + + // Fire the tasks + tasks.run(); + + // Chain + return safeps; + }, + + + /** + * Get the system's environment paths. + * @return {Array} string array of file paths + */ + getEnvironmentPaths: function getEnvironmentPaths() { + // Fetch system include paths with the correct delimiter for the system + var environmentPaths = process.env.PATH.split(pathUtil.delimiter); + + // Return + return environmentPaths; + }, + + + /** + * Get the possible paths for + * the passed executable using the + * standard environment paths. Basically, + * get a list of places to look for the + * executable. Only safe for non-Windows + * systems. + * @access private + * @param {String} execName + * @return {Array} string array of file paths + */ + getStandardExecPaths: function getStandardExecPaths(execName) { + // Fetch + var standardExecPaths = [process.cwd()].concat(safeps.getEnvironmentPaths()); + + // Get the possible exec paths + if (execName) { + standardExecPaths = standardExecPaths.map(function (path) { + return pathUtil.join(path, execName); + }); + } + + // Return + return standardExecPaths; + }, + + + /** + * Get the possible paths for + * the passed executable using the + * standard environment paths. Basically, + * get a list of places to look for the + * executable. Makes allowances for Windows + * executables possibly needing an extension + * to ensure execution (.exe, .cmd, .bat). + * @access private + * @param {String} execName + * @return {Array} string array of file paths + */ + getPossibleExecPaths: function getPossibleExecPaths(execName) { + var possibleExecPaths = void 0; + + // Fetch available paths + if (_isWindows && execName.indexOf('.') === -1) { + // we are for windows add the paths for .exe as well + var standardExecPaths = safeps.getStandardExecPaths(execName); + possibleExecPaths = []; + for (var i = 0; i < standardExecPaths.length; ++i) { + var standardExecPath = standardExecPaths[i]; + possibleExecPaths.push(standardExecPath, standardExecPath + '.exe', standardExecPath + '.cmd', standardExecPath + '.bat'); + } + } else { + // we are normal, try the paths + possibleExecPaths = safeps.getStandardExecPaths(execName); + } + + // Return + return possibleExecPaths; + }, + + + /** + * Cache of executable paths + * @access private + * @property execPathCache + */ + execPathCache: {}, + + /** + * Given an executable name, search and find + * its actual path. Will search the standard + * file paths defined by the environment to + * see if the executable is in any of those paths. + * @param {Object} execName + * @param {Object} [opts] + * @param {Boolean} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.foundPath path to the executable + * @chainable + * @return {this} + */ + getExecPath: function getExecPath(execName, opts, next) { + + // By default read from the cache and write to the cache + var _extractOptsAndCallba19 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba20 = _slicedToArray(_extractOptsAndCallba19, 2); + + opts = _extractOptsAndCallba20[0]; + next = _extractOptsAndCallba20[1]; + if (opts.cache == null) opts.cache = true; + + // Check for absolute path, as we would not be needed and would just currupt the output + if (execName.substr(0, 1) === '/' || execName.substr(1, 1) === ':') { + next(null, execName); + return safeps; + } + + // Prepare + var execNameCapitalized = execName[0].toUpperCase() + execName.substr(1); + var getExecMethodName = 'get' + execNameCapitalized + 'Path'; + + // Check for special case + if (safeps[getExecMethodName]) { + return safeps[getExecMethodName](opts, next); + } else { + // Check for cache + if (opts.cache && safeps.execPathCache[execName]) { + next(null, safeps.execPathCache[execName]); + return safeps; + } + + // Fetch possible exec paths + var possibleExecPaths = safeps.getPossibleExecPaths(execName); + + // Forward onto determineExecPath + // Which will determine which path it is out of the possible paths + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if (err) { + next(err); + } else if (!execPath) { + err = new Error('Could not locate the ' + execName + ' executable path'); + next(err); + } else { + // Success, write the result to cache and send to our callback + if (opts.cache) safeps.execPathCache[execName] = execPath; + return next(null, execPath); + } + }); + } + + // Chain + return safeps; + }, + + + /** + * Get home path. Returns the user's home directory. + * Based upon home function from: https://github.com/isaacs/osenv + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.homePath + * @chainable + * @return {this} + */ + getHomePath: function getHomePath(opts, next) { + + // By default read from the cache and write to the cache + var _extractOptsAndCallba21 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba22 = _slicedToArray(_extractOptsAndCallba21, 2); + + opts = _extractOptsAndCallba22[0]; + next = _extractOptsAndCallba22[1]; + if (opts.cache == null) opts.cache = true; + + // Cached + if (opts.cache && safeps.cachedHomePath) { + next(null, safeps.cachedHomePath); + return safeps; + } + + // Fetch + var homePath = process.env.USERPROFILE || process.env.HOME || null; + + // Success, write the result to cache and send to our callback + if (opts.cache) safeps.cachedHomePath = homePath; + next(null, homePath); + + // Chain + return safeps; + }, + + + /** + * Path to the evironment's temporary directory. + * Based upon tmpdir function from: https://github.com/isaacs/osenv + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.tmpPath + * @chainable + * @return {this} + */ + getTmpPath: function getTmpPath(opts, next) { + + // By default read from the cache and write to the cache + var _extractOptsAndCallba23 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba24 = _slicedToArray(_extractOptsAndCallba23, 2); + + opts = _extractOptsAndCallba24[0]; + next = _extractOptsAndCallba24[1]; + if (opts.cache == null) opts.cache = true; + + // Cached + if (opts.cache && safeps.cachedTmpPath) { + next(null, safeps.cachedTmpPath); + return safeps; + } + + // Prepare + var tmpDirName = _isWindows ? 'temp' : 'tmp'; + + // Try the OS environment temp path + var tmpPath = process.env.TMPDIR || process.env.TMP || process.env.TEMP || null; + + // Fallback + if (!tmpPath) { + // Try the user directory temp path + safeps.getHomePath(opts, function (err, homePath) { + if (err) return next(err); + tmpPath = pathUtil.resolve(homePath, tmpDirName); + + // Fallback + if (!tmpPath) { + // Try the system temp path + // @TODO perhaps we should check if we have write access to this path + tmpPath = _isWindows ? pathUtil.resolve(process.env.windir || 'C:\\Windows', tmpDirName) : '/tmp'; + } + }); + } + + // Check if we couldn't find it, we should always be able to find it + if (!tmpPath) { + var err = new Error("Wan't able to find a temporary path"); + next(err); + } + + // Success, write the result to cache and send to our callback + if (opts.cache) safeps.cachedTmpPath = tmpPath; + next(null, tmpPath); + + // Chain + return safeps; + }, + + + /** + * Path to the evironment's GIT directory. + * As 'git' is not always available in the environment path, we should check + * common path locations and if we find one that works, then we should use it. + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.gitPath + * @chainable + * @return {this} + */ + getGitPath: function getGitPath(opts, next) { + + // By default read from the cache and write to the cache + var _extractOptsAndCallba25 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba26 = _slicedToArray(_extractOptsAndCallba25, 2); + + opts = _extractOptsAndCallba26[0]; + next = _extractOptsAndCallba26[1]; + if (opts.cache == null) opts.cache = true; + + // Cached + if (opts.cache && safeps.cachedGitPath) { + next(null, safeps.cachedGitPath); + return safeps; + } + + // Prepare + var execName = _isWindows ? 'git.exe' : 'git'; + var possibleExecPaths = []; + + // Add environment paths + if (process.env.GIT_PATH) possibleExecPaths.push(process.env.GIT_PATH); + if (process.env.GITPATH) possibleExecPaths.push(process.env.GITPATH); + + // Add standard paths + possibleExecPaths.push.apply(possibleExecPaths, _toConsumableArray(safeps.getStandardExecPaths(execName))); + + // Add custom paths + if (_isWindows) { + possibleExecPaths.push('/Program Files (x64)/Git/bin/' + execName, '/Program Files (x86)/Git/bin/' + execName, '/Program Files/Git/bin/' + execName); + } else { + possibleExecPaths.push('/usr/local/bin/' + execName, '/usr/bin/' + execName, '~/bin/' + execName); + } + + // Determine the right path + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if (err) { + next(err); + } else if (!execPath) { + err = new Error('Could not locate git binary'); + next(err); + } else { + // Success, write the result to cache and send to our callback + if (opts.cache) safeps.cachedGitPath = execPath; + next(null, execPath); + } + }); + + // Chain + return safeps; + }, + + + /** + * Path to the evironment's Node directory. + * As 'node' is not always available in the environment path, we should check + * common path locations and if we find one that works, then we should use it + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.nodePath + * @chainable + * @return {this} + */ + getNodePath: function getNodePath(opts, next) { + + // By default read from the cache and write to the cache + var _extractOptsAndCallba27 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba28 = _slicedToArray(_extractOptsAndCallba27, 2); + + opts = _extractOptsAndCallba28[0]; + next = _extractOptsAndCallba28[1]; + if (opts.cache == null) opts.cache = true; + + // Cached + if (opts.cache && safeps.cachedNodePath) { + next(null, safeps.cachedNodePath); + return safeps; + } + + // Prepare + var execName = _isWindows ? 'node.exe' : 'node'; + var possibleExecPaths = []; + + // Add environment paths + if (process.env.NODE_PATH) possibleExecPaths.push(process.env.NODE_PATH); + if (process.env.NODEPATH) possibleExecPaths.push(process.env.NODEPATH); + if (/node(.exe)?$/.test(process.execPath)) possibleExecPaths.push(process.execPath); + + // Add standard paths + possibleExecPaths.push.apply(possibleExecPaths, _toConsumableArray(safeps.getStandardExecPaths(execName))); + + // Add custom paths + if (_isWindows) { + possibleExecPaths.push('/Program Files (x64)/nodejs/' + execName, '/Program Files (x86)/nodejs/' + execName, '/Program Files/nodejs/' + execName); + } else { + possibleExecPaths.push('/usr/local/bin/' + execName, '/usr/bin/' + execName, '~/bin/' + execName // User and Heroku + ); + } + + // Determine the right path + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if (err) { + next(err); + } else if (!execPath) { + err = new Error('Could not locate node binary'); + next(err); + } else { + // Success, write the result to cache and send to our callback + if (opts.cache) safeps.cachedNodePath = execPath; + next(null, execPath); + } + }); + + // Chain + return safeps; + }, + + + /** + * Path to the evironment's NPM directory. + * As 'npm' is not always available in the environment path, we should check + * common path locations and if we find one that works, then we should use it + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.npmPath + * @chainable + * @return {this} + */ + getNpmPath: function getNpmPath(opts, next) { + + // By default read from the cache and write to the cache + var _extractOptsAndCallba29 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba30 = _slicedToArray(_extractOptsAndCallba29, 2); + + opts = _extractOptsAndCallba30[0]; + next = _extractOptsAndCallba30[1]; + if (opts.cache == null) opts.cache = true; + + // Cached + if (opts.cache && safeps.cachedNpmPath) { + next(null, safeps.cachedNpmPath); + return safeps; + } + + // Prepare + var execName = _isWindows ? 'npm.cmd' : 'npm'; + var possibleExecPaths = []; + + // Add environment paths + if (process.env.NPM_PATH) possibleExecPaths.push(process.env.NPM_PATH); + if (process.env.NPMPATH) possibleExecPaths.push(process.env.NPMPATH); + if (/node(.exe)?$/.test(process.execPath)) possibleExecPaths.push(process.execPath.replace(/node(.exe)?$/, execName)); + + // Add standard paths + possibleExecPaths.push.apply(possibleExecPaths, _toConsumableArray(safeps.getStandardExecPaths(execName))); + + // Add custom paths + if (_isWindows) { + possibleExecPaths.push('/Program Files (x64)/nodejs/' + execName, '/Program Files (x86)/nodejs/' + execName, '/Program Files/nodejs/' + execName); + } else { + possibleExecPaths.push('/usr/local/bin/' + execName, '/usr/bin/' + execName, '~/node_modules/.bin/' + execName // User and Heroku + ); + } + + // Determine the right path + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if (err) { + next(err); + } else if (!execPath) { + err = new Error('Could not locate npm binary'); + next(err); + } else { + // Success, write the result to cache and send to our callback + if (opts.cache) safeps.cachedNpmPath = execPath; + next(null, execPath); + } + }); + + // Chain + return safeps; + }, + + + // ================================= + // Special Commands + // @TODO These should be abstracted out into their own packages + + /** + * Initialize a git repository, including submodules, and will prepare the given options if they are provided. + * @param {Object} opts also forwarded to {@link spawnMultiple} + * @param {String} [opts.cwd=process.cwd()] path to initiate the repository, can also be `opts.path` + * @param {String} [opts.url] the remote url, e.g. `https://github.com/bevry/safeps.git` + * @param {String} [opts.remote] the remote name, e.g. `origin` + * @param {String} [opts.branch] the branch to use, e.g. `master` + * @param {Function} next + * @param {Error} next.err + * @chainable + * @return {this} + */ + initGitRepo: function initGitRepo(opts, next) { + + // Defaults + var _extractOptsAndCallba31 = extractOptsAndCallback(opts, next); + // Extract + + + var _extractOptsAndCallba32 = _slicedToArray(_extractOptsAndCallba31, 2); + + opts = _extractOptsAndCallba32[0]; + next = _extractOptsAndCallba32[1]; + if (opts.path) { + opts.cwd = opts.path; + delete opts.path; + } + if (!opts.cwd) { + opts.cwd = process.cwd(); + } + + // Prepare + function partTwo(err) { + if (err) return next(err); + var commands = []; + if (opts.remote) { + commands.push(['git', 'fetch', opts.remote]); + } + if (opts.branch) { + commands.push(['git', 'checkout', opts.branch]); + if (opts.remote) { + commands.push(['git', 'pull', opts.remote, opts.branch]); + } + } else if (opts.remote) { + commands.push(['git', 'pull', opts.remote]); + } + commands.push(['git', 'submodule', 'init']); + commands.push(['git', 'submodule', 'update', '--recursive']); + + // Perform commands + safeps.spawnMultiple(commands, opts, next); + } + + // Check if it exists + safefs.ensurePath(opts.cwd, function (err) { + if (err) return next(err); + + // Initialise git repo + safeps.spawn(['git', 'init'], opts, function (err) { + if (err) return next(err); + + // If we want to set a remote, then do so + if (opts.url && opts.remote) { + // Check what remotes we have + safeps.spawn(['git', 'remote', 'show'], opts, function (err, stdout) { + if (err) return next(err); + // stdout will be null if there are no remotes + // and will be buffer if there are remotes + if (stdout && stdout.toString().split('\n').indexOf(opts.remote) !== -1) { + // Overwrite it if it does exist + // @todo we could probably do a check here to see if it is different + // but no need right now + var command = ['git', 'remote', 'set-url', opts.remote, opts.url]; + safeps.spawn(command, opts, partTwo); + } else { + // Add it if it doesn't exist + var _command = ['git', 'remote', 'add', opts.remote, opts.url]; + safeps.spawn(_command, opts, partTwo); + } + }); + } else { + return partTwo(); + } + }); + }); + + // Chain + return safeps; + }, + + + /** + * Init Node Modules with cross platform support + * supports linux, heroku, osx, windows + * @param {Object} opts also forwarded to {@link spawn} + * @param {Function} next {@link spawn} completion callback + * @chainable + * @return {this} + */ + initNodeModules: function initNodeModules(opts, next) { + + // Defaults + var _extractOptsAndCallba33 = extractOptsAndCallback(opts, next); + // Prepare + + + var _extractOptsAndCallba34 = _slicedToArray(_extractOptsAndCallba33, 2); + + opts = _extractOptsAndCallba34[0]; + next = _extractOptsAndCallba34[1]; + if (!opts.cwd) opts.cwd = process.cwd(); + if (opts.args == null) opts.args = []; + if (opts.force == null) opts.force = false; + + // Paths + var packageJsonPath = pathUtil.join(opts.cwd, 'package.json'); + var nodeModulesPath = pathUtil.join(opts.cwd, 'node_modules'); + + // Split this commands into parts + function partTwo() { + // If there is no package.json file, then we can't do anything + safefs.exists(packageJsonPath, function (exists) { + if (!exists) return next(); + + // Prepare command + var command = ['npm', 'install'].concat(opts.args); + + // Execute npm install inside the pugin directory + safeps.spawn(command, opts, next); + }); + } + function partOne() { + // If we are not forcing, then skip if node_modules already exists + if (!opts.force) { + safefs.exists(nodeModulesPath, function (exists) { + if (exists) return next(); + partTwo(); + }); + } else { + partTwo(); + } + } + + // Run the first part + partOne(); + + // Chain + return safeps; + }, + + + /** + * Spawn Node Modules with cross platform support + * supports linux, heroku, osx, windows + * spawnNodeModule(name:string, args:array, opts:object, next:function) + * Better than https://github.com/mafintosh/npm-execspawn as it uses safeps + * @param {String} name + * @param {Array} args + * @param {Object} opts also forwarded to {@link spawn} + * @param {String} opts.name name of node module + * @param {String} [opts.cwd=process.cwd()] Current working directory of the child process. + * @param {Function} next {@link spawn} completion callback + * @chainable + * @return {this} + */ + spawnNodeModule: function spawnNodeModule() { + // Prepare + var opts = { cwd: process.cwd() }; + var next = void 0; + + // Extract options + + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + var type = typeof arg === 'undefined' ? 'undefined' : _typeof(arg); + if (Array.isArray(arg)) { + opts.args = arg; + } else if (type === 'object') { + if (arg.next) { + next = arg.next; + arg.next = null; + } + var keys = Object.keys(arg); + for (var ii = 0; ii < keys.length; ++ii) { + var key = keys[ii]; + opts[key] = arg[key]; + } + } else if (type === 'function') { + next = arg; + } else if (type === 'string') { + opts.name = arg; + } + } + + // Command + var command = void 0; + if (opts.name) { + command = [opts.name].concat(opts.args || []); + opts.name = null; + } else { + command = [].concat(opts.args || []); + } + + // Clean up + opts.args = null; + + // Paths + command[0] = pathUtil.join(opts.cwd, 'node_modules', '.bin', command[0]); + + // Spawn + safeps.spawn(command, opts, next); + + // Chain + return safeps; + } +}; + +// ===================================== +// Export + +module.exports = safeps; \ No newline at end of file diff --git a/node_modules/safeps/index.js b/node_modules/safeps/index.js new file mode 100644 index 000000000..50591268d --- /dev/null +++ b/node_modules/safeps/index.js @@ -0,0 +1,5 @@ +// 2016 December 29 +// https://github.com/bevry/editions +'use strict' + +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/safeps/node_modules/editions/.flowconfig b/node_modules/safeps/node_modules/editions/.flowconfig new file mode 100644 index 000000000..55dc80ab4 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/.flowconfig @@ -0,0 +1,16 @@ +# 2018 January 24 +# https://github.com/bevry/base +[ignore] +.*/docs/.* +.*/es2015/.* +.*/test/.* +.*/node_modules/documentation/.* +.*/node_modules/projectz/.* + +[options] +module.ignore_non_literal_requires=true +esproposal.class_static_fields=enable +esproposal.class_instance_fields=enable + +[version] +>=0.23 <1 diff --git a/node_modules/safeps/node_modules/editions/HISTORY.md b/node_modules/safeps/node_modules/editions/HISTORY.md new file mode 100644 index 000000000..bd57575e4 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/HISTORY.md @@ -0,0 +1,44 @@ +# History + +## v1.3.4 2018 January 31 +- Updated base files + +## v1.3.3 2016 November 4 +- Properly add node 0.8 support + +## v1.3.2 2016 November 4 +- Added node 0.8 support + +## v1.3.1 2016 October 11 +- Fixed failure to load editions that had the edition directory within the edition entry + - Thanks to [Jordan Harband](https://github.com/ljharb) for [issue #20](https://github.com/bevry/editions/issues/20) + +## v1.3.0 2016 October 11 +- Added support for `EDITIONS_SYNTAX_BLACKLIST` environment variable + - Thanks to [Damon Maria](https://github.com/damonmaria) for [issue #10](https://github.com/bevry/editions/issues/10) +- Dropped need for `DEBUG_BEVRY_EDITIONS` as failures will not output all the necessary debugging information + +## v1.2.1 2016 October 10 +- Change `esnext` skip from v8 engines < 4 to node engines < 0.12 + +## v1.2.0 2016 October 10 +- Skip syntaxes that require preprocessors +- Skip `import` syntax, as the `module` field inside `package.json` skips the autoloader if supported +- Skip `esnext` syntax on v8 engines < 4 + +## v1.1.2 2016 June 16 +- Parent errors are now displayed in a more sensible way + +## v1.1.1 2016 March 20 +- Errors and debug messages are now more useful + - Closes https://github.com/bevry/editions/issues/5 + +## v1.1.0 2016 March 20 +- Added support for custom entry point overrides +- Debugging goes to `console.error` (stderr) rather than `console.log` (stdout) + - Closes https://github.com/bevry/editions/issues/2 +- Added tests + - Closes https://github.com/bevry/editions/issues/4 + +## v1.0.1 2016 March 9 +- Initial release diff --git a/node_modules/safeps/node_modules/editions/LICENSE.md b/node_modules/safeps/node_modules/editions/LICENSE.md new file mode 100644 index 000000000..58c05d465 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/LICENSE.md @@ -0,0 +1,23 @@ + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

    MIT License

    + +
    +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.
    +
    + + diff --git a/node_modules/safeps/node_modules/editions/README.md b/node_modules/safeps/node_modules/editions/README.md new file mode 100644 index 000000000..61a05bc62 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/README.md @@ -0,0 +1,109 @@ + + +

    editions

    + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Patreon donate button +Open Collective donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button +
    +Slack community badge + + + + + + +Publish multiple editions for your JavaScript packages consistently and easily (e.g. source edition, esnext edition, es2015 edition) + + + + +## Discover + +[Watch the talk.](https://youtu.be/IAB8_UlcNWI) + +[Get started with the guides and explanations.](https://github.com/bevry/editions/wiki) + +[View the API documentation.](http://master.editions.bevry.surge.sh/docs/) + + + + +

    History

    + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

    Contribute

    + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    Backers

    + +

    Maintainers

    + +These amazing people are maintaining this project: + + + +

    Sponsors

    + +No sponsors yet! Will you be the first? + +Patreon donate button +Open Collective donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

    Contributors

    + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/safeps/node_modules/editions/es2015/index.js b/node_modules/safeps/node_modules/editions/es2015/index.js new file mode 100644 index 000000000..7846d8104 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/es2015/index.js @@ -0,0 +1,211 @@ +/* @flow */ +/* eslint no-console:0 */ +'use strict'; + +// Imports + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var pathUtil = require('path'); + +// Helper class to display nested error in a sensible way + +var DetailedError = function (_Error) { + _inherits(DetailedError, _Error); + + function DetailedError(message /* :string */, details /* :Object */) { + _classCallCheck(this, DetailedError); + + Object.keys(details).forEach(function (key) { + var data = details[key]; + var value = require('util').inspect(data.stack || data.message || data); + message += '\n' + key + ': ' + value; + }); + return _possibleConstructorReturn(this, (DetailedError.__proto__ || Object.getPrototypeOf(DetailedError)).call(this, message)); + } + + return DetailedError; +}(Error); + +// Environment fetching + + +var blacklist = process && process.env && process.env.EDITIONS_SYNTAX_BLACKLIST && process.env.EDITIONS_SYNTAX_BLACKLIST.split(','); + +// Cache of which syntax combinations are supported or unsupported, hash of booleans +var syntaxFailedCombitions = {}; // sorted lowercase syntax combination => Error instance of failure +var syntaxBlacklist = {}; +syntaxBlacklist.import = new Error('The import syntax is skipped as the module package.json field eliminates the need for autoloader support'); +syntaxBlacklist.coffeescript = new Error('The coffeescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime'); +syntaxBlacklist.typescript = new Error('The typescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime'); + +// Blacklist non-esnext node versions from esnext +if (process && process.versions && process.versions.node) { + var EARLIEST_ESNEXT_NODE_VERSION = [0, 12]; + var NODE_VERSION = process.versions.node.split('.').map(function (n) { + return parseInt(n, 10); + }); + var ESNEXT_UNSUPPORTED = NODE_VERSION[0] < EARLIEST_ESNEXT_NODE_VERSION[0] || NODE_VERSION[0] === EARLIEST_ESNEXT_NODE_VERSION[0] && NODE_VERSION[1] < EARLIEST_ESNEXT_NODE_VERSION[1]; + if (ESNEXT_UNSUPPORTED) syntaxBlacklist.esnext = new Error('The esnext syntax is skipped on early node versions as attempting to use esnext features will output debugging information on these node versions'); +} + +// Check the environment configuration for a syntax blacklist +if (blacklist) { + for (var i = 0; i < blacklist.length; ++i) { + var syntax = blacklist[i].trim().toLowerCase(); + syntaxBlacklist[syntax] = new DetailedError('The EDITIONS_SYNTAX_BLACKLIST environment variable has blacklisted an edition syntax:', { syntax: syntax, blacklist: blacklist }); + } +} + +/* :: +type edition = { + name:number, + description?:string, + directory?:string, + entry?:string, + syntaxes?:Array +}; +type options = { + cwd?:string, + package?:string, + entry?:string, + require:function +}; +*/ + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {edition} edition - the edition entry + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative or absolute path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEdition(edition /* :edition */, opts /* :options */) /* :any */{ + // Prevent require from being included in debug logs + Object.defineProperty(opts, 'require', { value: opts.require, enumerable: false }); + + // Get the correct entry path + // As older versions o + var cwd = opts.cwd || ''; + var dir = edition.directory || ''; + var entry = opts.entry || edition.entry || ''; + if (dir && entry && entry.indexOf(dir + '/') === 0) entry = entry.substring(dir.length + 1); + // ^ this should not be needed, but as previous versions of editions included the directory inside the entry + // it unfortunately is, as such this is a stepping stone for the new format, the new format being + // if entry is specified by itself, it is cwd => entry + // if entry is specified with a directory, it is cwd => dir => entry + // if entry is not specified but dir is, it is cwd => dir + // if neither entry nor dir are specified, we have a problem + if (!dir && !entry) { + var editionFailure = new DetailedError('Skipped edition due to no entry or directory being specified:', { edition: edition, cwd: cwd, dir: dir, entry: entry }); + throw editionFailure; + } + var entryPath = pathUtil.resolve(cwd, dir, entry); + + // Check syntax support + // Convert syntaxes into a sorted lowercase string + var syntaxes = edition.syntaxes && edition.syntaxes.map(function (i) { + return i.toLowerCase(); + }).sort(); + var syntaxCombination = syntaxes && syntaxes.join(', '); + if (syntaxes && syntaxCombination) { + // Check if any of the syntaxes are unsupported + var unsupportedSyntaxes = syntaxes.filter(function (i) { + return syntaxBlacklist[i.toLowerCase()]; + }); + if (unsupportedSyntaxes.length) { + var _editionFailure = new DetailedError('Skipped edition due to it containing an unsupported syntax:', { edition: edition, unsupportedSyntaxes: unsupportedSyntaxes }); + throw _editionFailure; + } + // Is this syntax combination unsupported? If so skip it with a soft failure to try the next edition + else if (syntaxFailedCombitions[syntaxCombination]) { + var previousCombinationFailure = syntaxFailedCombitions[syntaxCombination]; + var _editionFailure2 = new DetailedError('Skipped edition due to its syntax combinatiom failing previously:', { edition: edition, previousCombinationFailure: previousCombinationFailure }); + throw _editionFailure2; + } + } + + // Try and load this syntax combination + try { + return opts.require(entryPath); + } catch (error) { + // Note the error with more details + var _editionFailure3 = new DetailedError('Failed to load the edition due to a load error:', { edition: edition, error: error.stack }); + + // Blacklist the combination, even if it may have worked before + // Perhaps in the future note if that if it did work previously, then we should instruct module owners to be more specific with their syntaxes + if (syntaxCombination) syntaxFailedCombitions[syntaxCombination] = _editionFailure3; + + // Continue to the next edition + throw _editionFailure3; + } +} + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {Array} editions - an array of edition entries + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEditions(editions /* :Array */, opts /* :options */) /* :any */{ + // Extract + if (opts.package == null) opts.package = 'custom runtime package'; + + // Check + if (!editions || editions.length === 0) { + throw new DetailedError('No editions were specified:', { opts: opts }); + } + + // Note the last error message + var editionFailures = []; + + // Cycle through the editions + for (var _i = 0; _i < editions.length; ++_i) { + var edition = editions[_i]; + try { + return requireEdition(edition, opts); + } catch (err) { + editionFailures.push(err); + } + } + + // Through the error as no edition loaded + throw new DetailedError('There are no suitable editions for this environment:', { opts: opts, editions: editions, failures: editionFailures }); +} + +/** + * Cycle through the editions for a package and require the correct one + * @param {string} cwd - the path of the package, used to load package.json:editions and handle relative edition entry points + * @param {function} require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [entry] - an optional override for the entry of an edition, requires the edition to specify a `directory` property + * @returns {*} + */ +function requirePackage(cwd /* :string */, require /* :function */, entry /* :: ?:string */) /* :any */{ + // Load the package.json file to fetch `name` for debugging and `editions` for loading + var packagePath = pathUtil.resolve(cwd, 'package.json'); + + var _require = require(packagePath), + name = _require.name, + editions = _require.editions; + + var opts /* :options */ = { cwd: cwd, require: require }; + if (name) opts.package = name; + if (entry) opts.entry = entry; + return requireEditions(editions, opts); +} + +// Exports +module.exports = { requireEdition: requireEdition, requireEditions: requireEditions, requirePackage: requirePackage }; \ No newline at end of file diff --git a/node_modules/safeps/node_modules/editions/package.json b/node_modules/safeps/node_modules/editions/package.json new file mode 100644 index 000000000..93f76df55 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/package.json @@ -0,0 +1,128 @@ +{ + "name": "editions", + "version": "1.3.4", + "description": "Publish multiple editions for your JavaScript packages consistently and easily (e.g. source edition, esnext edition, es2015 edition)", + "homepage": "https://github.com/bevry/editions", + "license": "MIT", + "keywords": [ + "editions", + "edition", + "versions", + "syntaxes", + "esnext", + "jsnext", + "es2015", + "es6", + "es6+" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "opencollective", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist", + "---", + "slackin" + ], + "config": { + "patreonUsername": "bevry", + "opencollectiveUsername": "bevry", + "gratipayUsername": "bevry", + "flattrUsername": "balupton", + "paypalURL": "https://bevry.me/paypal", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "author": "2016+ Bevry Pty Ltd (http://bevry.me)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Zlatan Vasović (http://zdroid.github.io)" + ], + "bugs": { + "url": "https://github.com/bevry/editions/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/editions.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "Source + ESNext + Require + Flow Type Comments", + "directory": "source", + "entry": "index.js", + "syntaxes": [ + "javascript", + "esnext", + "require", + "arrows", + "destructuring", + "const", + "let", + "flow type comments" + ] + }, + { + "description": "Babel Compiled + ES2015 + Require", + "directory": "es2015", + "entry": "index.js", + "syntaxes": [ + "javascript", + "es2015", + "require" + ] + } + ], + "main": "es2015/index.js", + "dependencies": {}, + "devDependencies": { + "assert-helpers": "^4.5.1", + "babel-cli": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "documentation": "^5.3.5", + "eslint": "^4.16.0", + "flow-bin": "^0.64.0", + "joe": "^2.0.2", + "joe-reporter-console": "^2.0.1", + "projectz": "^1.4.0", + "surge": "^0.19.0" + }, + "scripts": { + "our:setup": "npm run our:setup:npm", + "our:setup:npm": "npm install", + "our:clean": "rm -Rf ./docs ./es2015 ./es5 ./out", + "our:compile": "npm run our:compile:es2015", + "our:compile:es2015": "babel ./source --out-dir ./es2015 --presets es2015", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:docs": "documentation build -f html -o ./docs -g --shallow ./source/**.js", + "our:meta:projectz": "projectz compile", + "our:verify": "npm run our:verify:eslint && npm run our:verify:flow", + "our:verify:eslint": "eslint --fix ./source", + "our:verify:flow": "flow check", + "our:test": "npm run our:verify && npm test", + "our:release": "npm run our:release:prepare && npm run our:release:check && npm run our:release:tag && npm run our:release:push", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:check": "npm run our:release:check:changelog && npm run our:release:check:dirty", + "our:release:check:changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check:dirty": "git diff --exit-code", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:release:push": "git push origin master && git push origin --tags", + "test": "node --harmony ./es2015/test.js --joe-reporter=console" + } +} diff --git a/node_modules/safeps/node_modules/editions/source/index.js b/node_modules/safeps/node_modules/editions/source/index.js new file mode 100644 index 000000000..51ac1adc8 --- /dev/null +++ b/node_modules/safeps/node_modules/editions/source/index.js @@ -0,0 +1,190 @@ +/* @flow */ +/* eslint no-console:0 */ +'use strict' + +// Imports +const pathUtil = require('path') + +// Helper class to display nested error in a sensible way +class DetailedError extends Error { + constructor (message /* :string */, details /* :Object */) { + Object.keys(details).forEach(function (key) { + const data = details[key] + const value = require('util').inspect(data.stack || data.message || data) + message += `\n${key}: ${value}` + }) + super(message) + } +} + +// Environment fetching +const blacklist = process && process.env && process.env.EDITIONS_SYNTAX_BLACKLIST && process.env.EDITIONS_SYNTAX_BLACKLIST.split(',') + +// Cache of which syntax combinations are supported or unsupported, hash of booleans +const syntaxFailedCombitions = {} // sorted lowercase syntax combination => Error instance of failure +const syntaxBlacklist = {} +syntaxBlacklist.import = new Error('The import syntax is skipped as the module package.json field eliminates the need for autoloader support') +syntaxBlacklist.coffeescript = new Error('The coffeescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime') +syntaxBlacklist.typescript = new Error('The typescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime') + +// Blacklist non-esnext node versions from esnext +if ( process && process.versions && process.versions.node ) { + const EARLIEST_ESNEXT_NODE_VERSION = [0, 12] + const NODE_VERSION = process.versions.node.split('.').map((n) => parseInt(n, 10)) + const ESNEXT_UNSUPPORTED = NODE_VERSION[0] < EARLIEST_ESNEXT_NODE_VERSION[0] || ( + NODE_VERSION[0] === EARLIEST_ESNEXT_NODE_VERSION[0] && + NODE_VERSION[1] < EARLIEST_ESNEXT_NODE_VERSION[1] + ) + if ( ESNEXT_UNSUPPORTED ) syntaxBlacklist.esnext = new Error('The esnext syntax is skipped on early node versions as attempting to use esnext features will output debugging information on these node versions') +} + +// Check the environment configuration for a syntax blacklist +if ( blacklist ) { + for ( let i = 0; i < blacklist.length; ++i ) { + const syntax = blacklist[i].trim().toLowerCase() + syntaxBlacklist[syntax] = new DetailedError('The EDITIONS_SYNTAX_BLACKLIST environment variable has blacklisted an edition syntax:', {syntax, blacklist}) + } +} + +/* :: +type edition = { + name:number, + description?:string, + directory?:string, + entry?:string, + syntaxes?:Array +}; +type options = { + cwd?:string, + package?:string, + entry?:string, + require:function +}; +*/ + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {edition} edition - the edition entry + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative or absolute path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEdition ( edition /* :edition */, opts /* :options */ ) /* :any */ { + // Prevent require from being included in debug logs + Object.defineProperty(opts, 'require', {value: opts.require, enumerable: false}) + + // Get the correct entry path + // As older versions o + const cwd = opts.cwd || '' + const dir = edition.directory || '' + let entry = opts.entry || edition.entry || '' + if ( dir && entry && entry.indexOf(dir + '/') === 0 ) entry = entry.substring(dir.length + 1) + // ^ this should not be needed, but as previous versions of editions included the directory inside the entry + // it unfortunately is, as such this is a stepping stone for the new format, the new format being + // if entry is specified by itself, it is cwd => entry + // if entry is specified with a directory, it is cwd => dir => entry + // if entry is not specified but dir is, it is cwd => dir + // if neither entry nor dir are specified, we have a problem + if ( !dir && !entry ) { + const editionFailure = new DetailedError('Skipped edition due to no entry or directory being specified:', {edition, cwd, dir, entry}) + throw editionFailure + } + const entryPath = pathUtil.resolve(cwd, dir, entry) + + // Check syntax support + // Convert syntaxes into a sorted lowercase string + const syntaxes = edition.syntaxes && edition.syntaxes.map((i) => i.toLowerCase()).sort() + const syntaxCombination = syntaxes && syntaxes.join(', ') + if ( syntaxes && syntaxCombination ) { + // Check if any of the syntaxes are unsupported + const unsupportedSyntaxes = syntaxes.filter((i) => syntaxBlacklist[i.toLowerCase()]) + if ( unsupportedSyntaxes.length ) { + const editionFailure = new DetailedError('Skipped edition due to it containing an unsupported syntax:', {edition, unsupportedSyntaxes}) + throw editionFailure + } + // Is this syntax combination unsupported? If so skip it with a soft failure to try the next edition + else if ( syntaxFailedCombitions[syntaxCombination] ) { + const previousCombinationFailure = syntaxFailedCombitions[syntaxCombination] + const editionFailure = new DetailedError('Skipped edition due to its syntax combinatiom failing previously:', {edition, previousCombinationFailure}) + throw editionFailure + } + } + + // Try and load this syntax combination + try { + return opts.require(entryPath) + } + catch ( error ) { + // Note the error with more details + const editionFailure = new DetailedError('Failed to load the edition due to a load error:', {edition, error: error.stack}) + + // Blacklist the combination, even if it may have worked before + // Perhaps in the future note if that if it did work previously, then we should instruct module owners to be more specific with their syntaxes + if ( syntaxCombination ) syntaxFailedCombitions[syntaxCombination] = editionFailure + + // Continue to the next edition + throw editionFailure + } +} + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {Array} editions - an array of edition entries + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEditions ( editions /* :Array */, opts /* :options */ ) /* :any */ { + // Extract + if ( opts.package == null ) opts.package = 'custom runtime package' + + // Check + if ( !editions || editions.length === 0 ) { + throw new DetailedError('No editions were specified:', {opts}) + } + + // Note the last error message + const editionFailures = [] + + // Cycle through the editions + for ( let i = 0; i < editions.length; ++i ) { + const edition = editions[i] + try { + return requireEdition(edition, opts) + } + catch ( err ) { + editionFailures.push(err) + } + } + + // Through the error as no edition loaded + throw new DetailedError('There are no suitable editions for this environment:', {opts, editions, failures: editionFailures}) +} + +/** + * Cycle through the editions for a package and require the correct one + * @param {string} cwd - the path of the package, used to load package.json:editions and handle relative edition entry points + * @param {function} require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [entry] - an optional override for the entry of an edition, requires the edition to specify a `directory` property + * @returns {*} + */ +function requirePackage (cwd /* :string */, require /* :function */, entry /* :: ?:string */ ) /* :any */ { + // Load the package.json file to fetch `name` for debugging and `editions` for loading + const packagePath = pathUtil.resolve(cwd, 'package.json') + const {name, editions} = require(packagePath) + const opts /* :options */ = {cwd, require} + if ( name ) opts.package = name + if ( entry ) opts.entry = entry + return requireEditions(editions, opts) +} + +// Exports +module.exports = {requireEdition, requireEditions, requirePackage} diff --git a/node_modules/safeps/package.json b/node_modules/safeps/package.json new file mode 100644 index 000000000..f10084a07 --- /dev/null +++ b/node_modules/safeps/package.json @@ -0,0 +1,133 @@ +{ + "title": "Safe PS", + "name": "safeps", + "version": "7.0.1", + "description": "Work with processes safely and easily with Node.js", + "homepage": "https://github.com/bevry/safeps", + "license": "MIT", + "keywords": [ + "ps", + "process", + "openProcess", + "closeProcess", + "spawn", + "exec", + "child_process" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "opencollective", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist", + "---", + "slackin" + ], + "config": { + "patreonUsername": "bevry", + "opencollectiveUsername": "bevry", + "gratipayUsername": "bevry", + "flattrUsername": "balupton", + "paypalURL": "https://bevry.me/paypal", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Gio d'Amelio (https://github.com/giodamelio)", + "Sean Fridman (http://seanfridman.com)", + "Steve Mc (http://www.stevemcarthur.co.uk)" + ], + "bugs": { + "url": "https://github.com/bevry/safeps/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/safeps.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "Source + ESNext + Require", + "entry": "index.js", + "directory": "source", + "syntaxes": [ + "javascript", + "esnext", + "require", + "let", + "const", + "destructuring", + "shorthand", + "template strings" + ] + }, + { + "description": "Babel Compiled + ES2015 + Require", + "entry": "index.js", + "directory": "es2015", + "syntaxes": [ + "javascript", + "es2015", + "require" + ] + } + ], + "main": "index.js", + "dependencies": { + "editions": "^1.3.3", + "extract-opts": "^3.3.1", + "safefs": "^4.1.0", + "taskgroup": "^5.0.0", + "typechecker": "^4.3.0" + }, + "devDependencies": { + "assert-helpers": "^4.5.0", + "babel-cli": "^6.24.1", + "babel-preset-es2015": "^6.24.1", + "documentation": "^4.0.0-beta.19", + "eslint": "^3.19.0", + "joe": "^2.0.2", + "joe-reporter-console": "^2.0.1", + "projectz": "^1.4.0", + "surge": "^0.19.0" + }, + "scripts": { + "our:setup": "npm run our:setup:npm", + "our:setup:npm": "npm install", + "our:clean": "rm -Rf ./docs ./es2015 ./es5 ./out", + "our:compile": "npm run our:compile:es2015", + "our:compile:es2015": "babel ./source --out-dir ./es2015 --presets es2015", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:docs": "documentation build -f html -o ./docs -g --shallow ./source/**.js", + "our:meta:projectz": "projectz compile", + "our:verify": "npm run our:verify:eslint", + "our:verify:eslint": "eslint --fix ./source", + "our:test": "npm run our:verify && npm test", + "our:release": "npm run our:release:prepare && npm run our:release:check && npm run our:release:tag && npm run our:release:push", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:check": "npm run our:release:check:changelog && npm run our:release:check:dirty", + "our:release:check:changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check:dirty": "git diff --exit-code", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:release:push": "git push origin master && git push origin --tags", + "test": "node --harmony ./test.js --joe-reporter=console" + } +} diff --git a/node_modules/safeps/source/index.js b/node_modules/safeps/source/index.js new file mode 100644 index 000000000..3b3ad6459 --- /dev/null +++ b/node_modules/safeps/source/index.js @@ -0,0 +1,1675 @@ +/* eslint no-sync:0 */ +'use strict' + +// Import +const {TaskGroup} = require('taskgroup') +const typeChecker = require('typechecker') +const safefs = require('safefs') +const fsUtil = require('fs') +const pathUtil = require('path') +const extractOptsAndCallback = require('extract-opts') + +// Prepare +const isWindows = (process.platform || '').indexOf('win') === 0 +const DEFAULT_MAX_OPEN_PROCESSES = 100 + + +// ===================================== +// Define Globals + +// Prepare +if ( global.safepsGlobal == null ) { + global.safepsGlobal = {} +} + +// Define Global Pool +// Create a pool with the concurrency of our max number of open processes +if ( global.safepsGlobal.pool == null ) { + global.safepsGlobal.pool = new TaskGroup({ + concurrency: process.env.NODE_MAX_OPEN_PROCESSES == null ? DEFAULT_MAX_OPEN_PROCESSES : process.env.NODE_MAX_OPEN_PROCESSES, + abortOnError: false, + destroyOnceDone: false + }).run() +} + + +// ===================================== +// Define Module + +/** +* Contains methods to safely spawn and manage +* various file system processes. It differs +* from the standard node.js child_process +* module in that it intercepts and handles +* many common errors that might occur when +* invoking child processes that could cause +* an application to crash. Most commonly, errors +* such as ENOENT and EACCESS. This enables +* an application to be both cleaner and more robust. +* @class safeps +* @static +*/ +const safeps = { + + // ===================================== + // Open and Close Processes + + /** + * Open a file. + * Pass your callback to fire when it is safe to open the process + * @param {Function} fn callback + * @chainable + * @return {this} + */ + openProcess (fn) { + // Add the task to the pool and execute it right away + global.safepsGlobal.pool.addTask(fn) + + // Chain + return safeps + }, + + + // ================================= + // Environments + // @TODO These should be abstracted out into their own packages + + /** + * Returns whether or not we are running on a windows machine + * @return {Boolean} + */ + isWindows () { + return isWindows + }, + + /** + * Get locale code - eg: en-AU, + * fr-FR, zh-CN etc. + * @param {String} lang + * @return {String} + */ + getLocaleCode (lang) { + lang = lang || process.env.LANG || '' + const localeCode = lang.replace(/\..+/, '').replace('-', '_').toLowerCase() || null + return localeCode + }, + + /** + * Given the localeCode, return + * the language code. + * @param {String} localeCode + * @return {String} + */ + getLanguageCode (localeCode) { + localeCode = safeps.getLocaleCode(localeCode) || '' + const languageCode = localeCode.replace(/^([a-z]+)[_-]([a-z]+)$/i, '$1').toLowerCase() || null + return languageCode + }, + + /** + * Given the localeCode, return + * the country code. + * @param {String} localeCode + * @return {String} + */ + getCountryCode (localeCode) { + localeCode = safeps.getLocaleCode(localeCode) || '' + const countryCode = localeCode.replace(/^([a-z]+)[_-]([a-z]+)$/i, '$2').toLowerCase() || null + return countryCode + }, + + + // ================================= + // Executeable Helpers + + /** + * Has spawn sync. Returns true + * if the child_process spawnSync + * method exists, otherwise false + * @return {Boolean} + */ + hasSpawnSync () { + return require('child_process').spawnSync != null + }, + + /** + * Has exec sync. Returns true + * if the child_process execSync + * method exists, otherwise false + * @return {Boolean} + */ + hasExecSync () { + return require('child_process').execSync != null + }, + + /** + * Is the path to a file object an executable? + * Synchronised version of isExecutable + * @param {String} path path to test + * @param {Object} opts + * @param {Function} [next] + * @param {Error} next.err + * @param {Boolean} next.isExecutable + * @return {Boolean} + */ + isExecutableSync (path, opts, next) { + // Prepare + let isExecutable + + // Access (Node 0.12+) + if ( fsUtil.accessSync ) { + try { + fsUtil.accessSync(path, fsUtil.X_OK) + isExecutable = true + } + catch ( err ) { + isExecutable = false + } + } + + // Shim + else { + try { + require('child_process').execSync(path + ' --version') + isExecutable = true + } + catch ( err ) { + // If there was an error + // determine if it was an error with trying to run it (not executable) + // or an error from running it (executable) + isExecutable = err.code !== 127 && (/EACCESS|Permission denied/).test(err.message) === false + } + } + + // Return + if ( next ) { + next(null, isExecutable) + return safeps + } + else { + return isExecutable + } + }, + + /** + * Is the path to a file object an executable? + * Boolean result returned as the isExecutable parameter + * of the passed callback. + * @param {String} path path to test + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to test sync rather than async + * @param {Function} next callback + * @param {Error} next.err + * @param {Boolean} next.isExecutable + * @return {Boolean} returned if opts.sync = true + */ + isExecutable (path, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // Sync? + if ( opts.sync ) { + return safeps.isExecutableSync(path, opts, next) + } + + // Access (Node 0.12+) + if ( fsUtil.access ) { + fsUtil.access(path, fsUtil.X_OK, function (err) { + const isExecutable = !err + return next(null, isExecutable) + }) + } + + // Shim + else { + require('child_process').exec(path + ' --version', function (err) { + // If there was no error, then execution worked fine, so we are executable + if ( !err ) return next(null, true) + // If there was an error + // determine if it was an error with trying to run it (not executable) + // or an error from running it (executable) + const isExecutable = err.code !== 127 && (/EACCESS|Permission denied/).test(err.message) === false + return next(null, isExecutable) + }) + } + + // Chain + return safeps + }, + + /** + * Internal: Prepare options for an execution. + * Makes sure all options are populated or exist and + * gives the opportunity to prepopulate some of those + * options. + * @access private + * @param {Object} [opts] + * @param {Stream} [opts.stdin=null] in stream + * @param {Array} [opts.stdio=null] Child's stdio configuration + * @param {Boolean} [opts.safe=true] + * @param {Object} [opts.env=process.env] + * @return {Object} opts + */ + prepareExecutableOptions (opts) { + // Prepare + opts = opts || {} + + // Ensure all options exist + if ( typeof opts.stdin === 'undefined' ) opts.stdin = null + if ( typeof opts.stdio === 'undefined' ) opts.stdio = null + + // By default make sure execution is valid + if ( opts.safe == null ) opts.safe = true + + // If a direct pipe then don't do output modifiers + if ( opts.stdio ) { + opts.read = opts.output = false + opts.outputPrefix = null + } + + // Otherwise, set output modifiers + else { + if ( opts.read == null ) opts.read = true + if ( opts.output == null ) opts.output = Boolean(opts.outputPrefix) + if ( opts.outputPrefix == null ) opts.outputPrefix = null + } + + // By default inherit environment variables + if ( opts.env == null ) { + opts.env = process.env + } + // If we don't want to inherit environment variables, then don't + else if ( opts.env === false ) { + opts.env = null + } + + // Return + return opts + }, + + /** + * Internal: Prepare result of an execution + * @access private + * @param {Object} result + * @param {Object} result.pid Number Pid of the child process + * @param {Object} result.output output Array Array of results from stdio output + * @param {Stream} result.stdout stdout The contents of output + * @param {Stream} result.stderr stderr The contents of output + * @param {Number} result.status status The exit code of the child process + * @param {String} result.signal signal The signal used to kill the child process + * @param {Error} result.error The error object if the child process failed or timed out + * @param {Object} [opts] + * @param {Object} [opts.output] + * @param {Object} [opts.outputPrefix] + * @return {Object} result + */ + updateExecutableResult (result, opts) { + // If we want to output, then output the correct streams with the correct prefixes + if ( opts.output ) { + safeps.outputData(result.stdout, 'stdout', opts.outputPrefix) + safeps.outputData(result.stderr, 'stderr', opts.outputPrefix) + } + + // If we already have an error, then don't continue + if ( result.error ) { + return result + } + + // We don't already have an error, so let's check the status code for an error + // Check if the status code exists, and if it is not zero, zero is the success code + if ( result.status != null && result.status !== 0 ) { + let message = 'Command exited with a non-zero status code.' + + // As there won't be that much information on this error, as it was not already provided + // we should output the stdout if we have it + if ( result.stdout ) { + const tmp = safeps.prefixData(result.stdout) + if ( tmp ) { + message += "\nThe command's stdout output:\n" + tmp + } + } + // and output the stderr if we have it + if ( result.stderr ) { + const tmp = safeps.prefixData(result.stderr) + if ( tmp ) { + message += "\nThe command's stderr output:\n" + tmp + } + } + + // and create the error from that output + result.error = new Error(message) + return result + } + + // Success + return result + }, + + + /** + * Internal: prefix data + * @access private + * @param {Object} data + * @param {String} [prefix = '>\t'] + * @return {Object} data + */ + prefixData (data, prefix = '>\t') { + data = (data && data.toString && data.toString()) || '' + if ( prefix && data ) { + data = prefix + data.trim().replace(/\n/g, '\n' + prefix) + '\n' + } + return data + }, + + /** + * Internal: Set output data + * @access private + * @param {Object} data + * @param {Object} [channel = 'stdout'] + * @param {Object} prefix + * @chainable + * @return {this} + */ + outputData (data, channel = 'stdout', prefix) { + if ( data.toString().trim().length !== 0 ) { + if ( prefix ) { + data = safeps.prefixData(data, prefix) + } + process[channel].write(data) + } + return null + }, + + + // ================================= + // Spawn + + /** + * Syncronised version of safeps.spawn. Will not return until the + * child process has fully closed. Results can be returned + * from the method call or via a passed callback. Even if + * a callback is passed to spawnSync, the method will still + * be syncronised with the child process and the callback will + * only return after the child process has closed. + * + * Simple usage example: + * + * var safeps = require('safeps'); + * var command = ['npm', 'install', 'jade', '--save']; + * + * //a lot of the time you won't need the opts argument + * var opts = { + * cwd: __dirname //this is actually pointless in a real application + * }; + * + * var result = safeps.spawnSync(command, opts); + * + * console.log(result.error); + * console.log(result.status); + * console.log(result.signal); + * console.log("I've finished..."); + * + * @param {Array|String} command + * @param {Object} [opts] + * @param {Boolean} [opts.safe] Whether to check the executable path. + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Array|String} [opts.stdio] Child's stdio configuration. + * @param {Array} [opts.customFds] Deprecated File descriptors for the child to use for stdio. + * @param {Object} [opts.env] Environment key-value pairs. + * @param {Boolean} [opts.detached] The child will be a process group leader. + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process + * @param {Function} [next] callback + * @param {Error} next.error + * @param {Stream} next.stdout out stream + * @param {Stream} next.stderr error stream + * @param {Number} next.status node.js exit code + * @param {String} next.signal unix style signal such as SIGKILL or SIGHUP + * @return {Object} {error, pid, output, stdout, stderr, status, signal} + */ + spawnSync (command, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + opts = safeps.prepareExecutableOptions(opts) + opts.sync = true + + // If the command is a string, then convert it into an array + if ( typeChecker.isString(command) ) { + command = command.split(' ') + } + + // Get correct executable path + // Only possible if sync abilities are possible (node 0.12 and up) or if it is cached + // Otherwise, don't worry about it and output a warning to stderr + if ( opts.safe ) { + let wasSync = 0 + safeps.getExecPath(command[0], opts, function (err, execPath) { + if ( err ) return + command[0] = execPath + wasSync = 1 + }) + if ( wasSync === 0 ) { + process.stderr.write('safeps.spawnSync: was unable to get the executable path synchronously') + } + } + + // Spawn Synchronously + const result = require('child_process').spawnSync(command[0], command.slice(1), opts) + safeps.updateExecutableResult(result, opts) + + // Complete + if ( next ) { + next(result.error, result.stdout, result.stderr, result.status, result.signal) + } + else { + return result + } + }, + + /** + * Wrapper around node's spawn command for a cleaner, more robust and powerful API. + * Launches a new process with the given command. Command line arguments are + * part of the command parameter (unlike the node.js spawn). Command can be + * an array of command line arguments or a command line string. Opts allows + * additional options to be sent to the spawning action. + * + * Simple usage example: + * + * var safeps = require('safeps'); + * var command = ['npm', 'install','jade','--save']; + * + * //a lot of the time you won't need the opts argument + * var opts = { + * cwd: __dirname //this is actually pointless in a real application + * } + * function myCallback(error, stdout, stderr, status, signal){ + * console.log(error); + * console.log(status); + * console.log(signal); + * console.log("I've finished..."); + * } + * safeps.spawn(command, opts, myCallback); + * + * @param {Array|String} command + * @param {Object} [opts] + * @param {Boolean} [opts.safe] Whether to check the executable path. + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Array|String} [opts.stdio] Child's stdio configuration. + * @param {Array} [opts.customFds] Deprecated File descriptors for the child to use for stdio. + * @param {Object} [opts.env] Environment key-value pairs. + * @param {Boolean} [opts.detached] The child will be a process group leader. + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process. + * @param {Function} next callback + * @param {Error} next.error + * @param {Stream} next.stdout out stream + * @param {Stream} next.stderr error stream + * @param {Number} next.status node.js exit code + * @param {String} next.signal unix style signal such as SIGKILL or SIGHUP + * @chainable + * @return {this} + */ + spawn (command, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + opts = safeps.prepareExecutableOptions(opts) + + // Check if we want sync instead + if ( opts.sync ) { + return safeps.spawnSync(command, opts, next) + } + + // Patience + safeps.openProcess(function (closeProcess) { + // If the command is a string, then convert it into an array + if ( typeChecker.isString(command) ) { + command = command.split(' ') + } + + // Prepare + const result = { + pid: null, + stdout: null, + stderr: null, + output: null, + error: null, + status: null, + signal: null + } + let exited = false + + // Tasks + const tasks = new TaskGroup().done(function (err) { + exited = true + closeProcess() + next(err || result.error, result.stdout, result.stderr, result.status, result.signal) + }) + + // Get correct executable path + if ( opts.safe ) { + tasks.addTask(function (complete) { + safeps.getExecPath(command[0], opts, function (err, execPath) { + if ( err ) return complete(err) + command[0] = execPath + complete() + }) + }) + } + + // Spawn + tasks.addTask(function (complete) { + // Spawn + result.pid = require('child_process').spawn(command[0], command.slice(1), opts) + + // Write if we want to + // result.pid.stdin may be null of stdio is 'inherit' + if ( opts.stdin && result.pid.stdin) { + result.pid.stdin.write(opts.stdin) + result.pid.stdin.end() + } + + // Read if we want to by listening to the streams and updating our result variables + if ( opts.read ) { + // result.pid.stdout may be null of stdio is 'inherit' + if ( result.pid.stdout ) { + result.pid.stdout.on('data', function (data) { + if ( opts.output ) { + safeps.outputData(data, 'stdout', opts.outputPrefix) + } + if ( result.stdout ) { + result.stdout = Buffer.concat([result.stdout, data]) + } + else { + result.stdout = data + } + }) + } + + // result.pid.stderr may be null of stdio is 'inherit' + if ( result.pid.stderr ) { + result.pid.stderr.on('data', function (data) { + if ( opts.output) { + safeps.outputData(data, 'stderr', opts.outputPrefix) + } + if ( result.stderr ) { + result.stderr = Buffer.concat([result.stderr, data]) + } + else { + result.stderr = data + } + }) + } + } + + // Wait + result.pid.on('close', function (status, signal) { + // Apply to local global + result.status = status + result.signal = signal + + // Check if we have already exited due to domains + // as without this, then we will fire the completion callback twice + // once for the domain error that will happen first + // then again for the close error + // if it happens the other way round, close, then error, we want to be alerted of that + if ( exited === true ) return + + // Check result and complete + opts.output = false + safeps.updateExecutableResult(result, opts) + return complete(result.error) + }) + }) + + // Run + tasks.run() + }) + + // Chain + return safeps + }, + + /** + * Spawn multiple processes in the one method call. + * Launches new processes with the given array of commands. + * Each item in the commands array represents a command parameter + * sent to the safeps.spawn method, so each item can be a command line + * string or an array of command line inputs. It is also possible + * to pass a single command string and in this case calling + * spawnMultiple will be effectively the same as calling safeps.spawn. + * @param {Array|String} commands + * @param {Object} [opts] + * @param {Boolean} [opts.concurrency=1] Whether to spawn processes concurrently. + * @param {String} opts.cwd Current working directory of the child process. + * @param {Array|String} opts.stdio Child's stdio configuration. + * @param {Array} opts.customFds Deprecated File descriptors for the child to use for stdio. + * @param {Object} opts.env Environment key-value pairs. + * @param {Boolean} opts.detached The child will be a process group leader. + * @param {Number} opts.uid Sets the user identity of the process. + * @param {Number} opts.gid Sets the group identity of the process. + * @param {Function} next callback + * @param {Error} next.error + * @param {Array} next.results array of spawn results + * @param {Stream} next.results[i].stdout out stream + * @param {Stream} next.results[i].stderr error stream + * @param {Number} next.results[i].status node.js exit code + * @param {String} next.results[i].signal unix style signal such as SIGKILL or SIGHUP + * @chainable + * @return {this} + */ + spawnMultiple (commands, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + const results = [] + + // Be synchronous by default + if ( opts.concurrency == null ) opts.concurrency = 1 + + // Make sure we send back the arguments + const tasks = new TaskGroup({concurrency: opts.concurrency}).done(function (err) { + next(err, results) + }) + + // Prepare tasks + if ( !typeChecker.isArray(commands) ) { + commands = [commands] + } + + // Add tasks + commands.forEach(function (command) { + tasks.addTask(function (complete) { + safeps.spawn(command, opts, function (...args) { + const err = args[0] || null + results.push(args) + complete(err) + }) + }) + }) + + // Run the tasks + tasks.run() + + // Chain + return safeps + }, + + + // ================================= + // Exec + + /** + * Syncronised version of safeps.exec. Runs a command in a shell and + * buffers the output. Will not return until the + * child process has fully closed. Results can be returned + * from the method call or via a passed callback. Even if + * a callback is passed to execSync, the method will still + * be syncronised with the child process and the callback will + * only return after the child process has closed. + * Note: + * Stdout and stderr should be Buffers but they are strings unless encoding:null + * for now, nothing we should do, besides wait for joyent to reply + * https://github.com/joyent/node/issues/5833#issuecomment-82189525. + * @param {Object} command + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Object} [opts.env] Environment key-value pairs + * @param {String} [opts.encoding='utf8'] + * @param {String} [opts.shell] Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.) + * @param {Number} [opts.timeout=0] + * @param {Number} [opts.maxBuffer=200*1024] Largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed. + * @param {String} [opts.killSignal='SIGTERM'] + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process. + * @param {Function} next + * @param {Error} next.err + * @param {Buffer|String} next.stdout out buffer + * @param {Buffer|String} next.stderr error buffer + * @return {Object} {error, stdout, stderr} + */ + execSync (command, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + opts = safeps.prepareExecutableOptions(opts) + opts.sync = true + + // Output + if ( opts.output === true && !opts.outputPrefix ) { + opts.stdio = 'inherit' + opts.output = null + } + + // Spawn Synchronously + let stdout, error + try { + stdout = require('child_process').execSync(command, opts) + } + catch ( err ) { + error = err + } + + // Check result + const result = {error, stdout} + safeps.updateExecutableResult(result, opts) + + // Complete + if ( next ) { + next(result.error, result.stdout, result.stderr) + } + else { + return result + } + }, + + /** + * Wrapper around node's exec command for a cleaner, more robust and powerful API. + * Runs a command in a shell and buffers the output. + * Note: + * Stdout and stderr should be Buffers but they are strings unless encoding:null + * for now, nothing we should do, besides wait for joyent to reply + * https://github.com/joyent/node/issues/5833#issuecomment-82189525. + * @param {Object} command + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {String} [opts.cwd] Current working directory of the child process + * @param {Object} [opts.env] Environment key-value pairs + * @param {String} [opts.encoding='utf8'] + * @param {String} [opts.shell] Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.) + * @param {Number} [opts.timeout=0] + * @param {Number} [opts.maxBuffer=200*1024] Largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed. + * @param {String} [opts.killSignal='SIGTERM'] + * @param {Number} [opts.uid] Sets the user identity of the process. + * @param {Number} [opts.gid] Sets the group identity of the process. + * @param {Function} next + * @param {Error} next.err + * @param {Buffer|String} next.stdout out buffer + * @param {Buffer|String} next.stderr error buffer + * @chainable + * @return {this} + */ + exec (command, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + opts = safeps.prepareExecutableOptions(opts) + + // Check if we want sync instead + if ( opts.sync ) { + return safeps.execSync(command, opts, next) + } + + // Patience + safeps.openProcess(function (closeProcess) { + // Output + if ( opts.output === true && !opts.outputPrefix ) { + opts.stdio = 'inherit' + opts.output = null + } + + // Execute command + require('child_process').exec(command, opts, function (error, stdout, stderr) { + // Complete the task + closeProcess() + + // Prepare result + const result = {error, stdout, stderr} + safeps.updateExecutableResult(result, opts) + + // Complete + return next(result.error, result.stdout, result.stderr) + }) + }) + + // Chain + return safeps + }, + + /** + * Exec multiple processes in the one method call. + * Launches new processes with the given array of commands. + * Each item in the commands array represents a command parameter + * sent to the safeps.exec method, so each item can be a command line + * string or an array of command line inputs. It is also possible + * to pass a single command string and in this case calling + * execMultiple will be effectively the same as calling safeps.exec. + * @param {Array|String} commands + * @param {Object} [opts] + * @param {Boolean} [opts.concurrency=1] Whether to exec processes concurrently. + * @param {String} opts.cwd Current working directory of the child process. + * @param {Array|String} opts.stdio Child's stdio configuration. + * @param {Array} opts.customFds Deprecated File descriptors for the child to use for stdio. + * @param {Object} opts.env Environment key-value pairs. + * @param {Boolean} opts.detached The child will be a process group leader. + * @param {Number} opts.uid Sets the user identity of the process. + * @param {Number} opts.gid Sets the group identity of the process. + * @param {Function} next callback + * @param {Error} next.error + * @param {Array} next.results array of exec results + * @param {Stream} next.results[i].stdout out buffer + * @param {Stream} next.results[i].stderr error buffer + * @chainable + * @return {this} + */ + execMultiple (commands, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + const results = [] + + // Be synchronous by default + if ( opts.concurrency == null ) opts.concurrency = 1 + + // Make sure we send back the arguments + const tasks = new TaskGroup({concurrency: opts.concurrency}).done(function (err) { + next(err, results) + }) + + // Prepare tasks + if ( !typeChecker.isArray(commands) ) { + commands = [commands] + } + + // Add tasks + commands.forEach(function (command) { + tasks.addTask(function (complete) { + safeps.exec(command, opts, function (...args) { + const err = args[0] || null + results.push(args) + complete(err) + }) + }) + }) + + // Run the tasks + tasks.run() + + // Chain + return safeps + }, + + + // ================================= + // Paths + + /** + * Determine an executable path from the passed array of possible file paths. + * Called by getExecPath to find a path for a given executable name. + * @access private + * @param {Array} possibleExecPaths string array of file paths + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {Function} [next] + * @param {Error} next.err + * @param {String} next.execPath + * @chainable + * @return {this} + */ + determineExecPathSync (possibleExecPaths, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + let execPath = null + + // Handle + possibleExecPaths.forEach(function (possibleExecPath) { + // Check if we have found the valid exec path earlier, if so, skip + // Check if the path is invalid, if it is, skip it + if ( execPath || !possibleExecPath ) return + + // Resolve the path as it may be a virtual or relative path + possibleExecPath = pathUtil.resolve(possibleExecPath) + + // Check if the executeable exists + safeps.isExecutableSync(possibleExecPath, opts, function (err, isExecutable) { + if ( !err && isExecutable ) execPath = possibleExecPath + }) + }) + + // Return + if ( next ) { + next(null, execPath) + return safeps + } + else { + return execPath + } + }, + + /** + * Determine an executable path from + * the passed array of possible file paths. + * Called by getExecPath to find a path for + * a given executable name. + * @access private + * @param {Array} possibleExecPaths string array of file paths + * @param {Object} [opts] + * @param {Boolean} [opts.sync] true to execute sync rather than async + * @param {Function} next + * @param {Error} next.err + * @param {String} next.execPath + * @chainable + * @return {this} + */ + determineExecPath (possibleExecPaths, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + let execPath = null + + // Sync? + if ( opts.sync ) { + return safeps.determineExecPathSync(possibleExecPaths, opts, next) + } + + // Group + const tasks = new TaskGroup().done(function (err) { + return next(err, execPath) + }) + + // Handle + possibleExecPaths.forEach(function (possibleExecPath) { + // Check if the path is invalid, if it is, skip it + if ( !possibleExecPath ) return + tasks.addTask(function (complete) { + // Check if we have found the valid exec path earlier, if so, skip + if ( execPath ) return complete() + + // Resolve the path as it may be a virtual or relative path + possibleExecPath = pathUtil.resolve(possibleExecPath) + + // Check if the executeable exists + safeps.isExecutable(possibleExecPath, opts, function (err, isExecutable) { + if ( !err && isExecutable ) execPath = possibleExecPath + return complete() + }) + }) + }) + + // Fire the tasks + tasks.run() + + // Chain + return safeps + }, + + /** + * Get the system's environment paths. + * @return {Array} string array of file paths + */ + getEnvironmentPaths () { + // Fetch system include paths with the correct delimiter for the system + const environmentPaths = process.env.PATH.split(pathUtil.delimiter) + + // Return + return environmentPaths + }, + + /** + * Get the possible paths for + * the passed executable using the + * standard environment paths. Basically, + * get a list of places to look for the + * executable. Only safe for non-Windows + * systems. + * @access private + * @param {String} execName + * @return {Array} string array of file paths + */ + getStandardExecPaths (execName) { + // Fetch + let standardExecPaths = [process.cwd()].concat(safeps.getEnvironmentPaths()) + + // Get the possible exec paths + if ( execName ) { + standardExecPaths = standardExecPaths.map(function (path) { + return pathUtil.join(path, execName) + }) + } + + // Return + return standardExecPaths + }, + + /** + * Get the possible paths for + * the passed executable using the + * standard environment paths. Basically, + * get a list of places to look for the + * executable. Makes allowances for Windows + * executables possibly needing an extension + * to ensure execution (.exe, .cmd, .bat). + * @access private + * @param {String} execName + * @return {Array} string array of file paths + */ + getPossibleExecPaths (execName) { + let possibleExecPaths + + // Fetch available paths + if ( isWindows && execName.indexOf('.') === -1 ) { + // we are for windows add the paths for .exe as well + const standardExecPaths = safeps.getStandardExecPaths(execName) + possibleExecPaths = [] + for ( let i = 0; i < standardExecPaths.length; ++i ) { + const standardExecPath = standardExecPaths[i] + possibleExecPaths.push( + standardExecPath, + standardExecPath + '.exe', + standardExecPath + '.cmd', + standardExecPath + '.bat' + ) + } + } + else { + // we are normal, try the paths + possibleExecPaths = safeps.getStandardExecPaths(execName) + } + + // Return + return possibleExecPaths + }, + + /** + * Cache of executable paths + * @access private + * @property execPathCache + */ + execPathCache: {}, + + /** + * Given an executable name, search and find + * its actual path. Will search the standard + * file paths defined by the environment to + * see if the executable is in any of those paths. + * @param {Object} execName + * @param {Object} [opts] + * @param {Boolean} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.foundPath path to the executable + * @chainable + * @return {this} + */ + getExecPath (execName, opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // By default read from the cache and write to the cache + if ( opts.cache == null ) opts.cache = true + + // Check for absolute path, as we would not be needed and would just currupt the output + if ( execName.substr(0, 1) === '/' || execName.substr(1, 1) === ':' ) { + next(null, execName) + return safeps + } + + // Prepare + const execNameCapitalized = execName[0].toUpperCase() + execName.substr(1) + const getExecMethodName = `get${execNameCapitalized}Path` + + // Check for special case + if ( safeps[getExecMethodName] ) { + return safeps[getExecMethodName](opts, next) + } + else { + // Check for cache + if ( opts.cache && safeps.execPathCache[execName] ) { + next(null, safeps.execPathCache[execName]) + return safeps + } + + // Fetch possible exec paths + const possibleExecPaths = safeps.getPossibleExecPaths(execName) + + // Forward onto determineExecPath + // Which will determine which path it is out of the possible paths + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if ( err ) { + next(err) + } + else if ( !execPath ) { + err = new Error(`Could not locate the ${execName} executable path`) + next(err) + } + else { + // Success, write the result to cache and send to our callback + if ( opts.cache ) safeps.execPathCache[execName] = execPath + return next(null, execPath) + } + }) + } + + // Chain + return safeps + }, + + /** + * Get home path. Returns the user's home directory. + * Based upon home function from: https://github.com/isaacs/osenv + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.homePath + * @chainable + * @return {this} + */ + getHomePath (opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // By default read from the cache and write to the cache + if ( opts.cache == null ) opts.cache = true + + // Cached + if ( opts.cache && safeps.cachedHomePath ) { + next(null, safeps.cachedHomePath) + return safeps + } + + // Fetch + const homePath = process.env.USERPROFILE || process.env.HOME || null + + // Success, write the result to cache and send to our callback + if ( opts.cache ) safeps.cachedHomePath = homePath + next(null, homePath) + + // Chain + return safeps + }, + + /** + * Path to the evironment's temporary directory. + * Based upon tmpdir function from: https://github.com/isaacs/osenv + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.tmpPath + * @chainable + * @return {this} + */ + getTmpPath (opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // By default read from the cache and write to the cache + if ( opts.cache == null ) opts.cache = true + + // Cached + if ( opts.cache && safeps.cachedTmpPath ) { + next(null, safeps.cachedTmpPath) + return safeps + } + + // Prepare + const tmpDirName = isWindows ? 'temp' : 'tmp' + + // Try the OS environment temp path + let tmpPath = process.env.TMPDIR || process.env.TMP || process.env.TEMP || null + + // Fallback + if ( !tmpPath ) { + // Try the user directory temp path + safeps.getHomePath(opts, function (err, homePath) { + if ( err ) return next(err) + tmpPath = pathUtil.resolve(homePath, tmpDirName) + + // Fallback + if ( !tmpPath ) { + // Try the system temp path + // @TODO perhaps we should check if we have write access to this path + tmpPath = isWindows + ? pathUtil.resolve(process.env.windir || 'C:\\Windows', tmpDirName) + : '/tmp' + } + }) + } + + // Check if we couldn't find it, we should always be able to find it + if ( !tmpPath ) { + const err = new Error("Wan't able to find a temporary path") + next(err) + } + + // Success, write the result to cache and send to our callback + if ( opts.cache ) safeps.cachedTmpPath = tmpPath + next(null, tmpPath) + + // Chain + return safeps + }, + + /** + * Path to the evironment's GIT directory. + * As 'git' is not always available in the environment path, we should check + * common path locations and if we find one that works, then we should use it. + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.gitPath + * @chainable + * @return {this} + */ + getGitPath (opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // By default read from the cache and write to the cache + if ( opts.cache == null ) opts.cache = true + + // Cached + if ( opts.cache && safeps.cachedGitPath ) { + next(null, safeps.cachedGitPath) + return safeps + } + + // Prepare + const execName = isWindows ? 'git.exe' : 'git' + const possibleExecPaths = [] + + // Add environment paths + if ( process.env.GIT_PATH ) possibleExecPaths.push(process.env.GIT_PATH) + if ( process.env.GITPATH ) possibleExecPaths.push(process.env.GITPATH) + + // Add standard paths + possibleExecPaths.push(...safeps.getStandardExecPaths(execName)) + + // Add custom paths + if ( isWindows ) { + possibleExecPaths.push( + `/Program Files (x64)/Git/bin/${execName}`, + `/Program Files (x86)/Git/bin/${execName}`, + `/Program Files/Git/bin/${execName}` + ) + } + else { + possibleExecPaths.push( + `/usr/local/bin/${execName}`, + `/usr/bin/${execName}`, + `~/bin/${execName}` + ) + } + + // Determine the right path + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if ( err ) { + next(err) + } + else if ( !execPath ) { + err = new Error('Could not locate git binary') + next(err) + } + else { + // Success, write the result to cache and send to our callback + if ( opts.cache ) safeps.cachedGitPath = execPath + next(null, execPath) + } + }) + + // Chain + return safeps + }, + + /** + * Path to the evironment's Node directory. + * As 'node' is not always available in the environment path, we should check + * common path locations and if we find one that works, then we should use it + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.nodePath + * @chainable + * @return {this} + */ + getNodePath (opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // By default read from the cache and write to the cache + if ( opts.cache == null ) opts.cache = true + + // Cached + if ( opts.cache && safeps.cachedNodePath ) { + next(null, safeps.cachedNodePath) + return safeps + } + + // Prepare + const execName = isWindows ? 'node.exe' : 'node' + const possibleExecPaths = [] + + // Add environment paths + if ( process.env.NODE_PATH ) possibleExecPaths.push(process.env.NODE_PATH) + if ( process.env.NODEPATH ) possibleExecPaths.push(process.env.NODEPATH) + if ( /node(.exe)?$/.test(process.execPath) ) possibleExecPaths.push(process.execPath) + + // Add standard paths + possibleExecPaths.push(...safeps.getStandardExecPaths(execName)) + + // Add custom paths + if ( isWindows ) { + possibleExecPaths.push( + `/Program Files (x64)/nodejs/${execName}`, + `/Program Files (x86)/nodejs/${execName}`, + `/Program Files/nodejs/${execName}` + ) + } + else { + possibleExecPaths.push( + `/usr/local/bin/${execName}`, + `/usr/bin/${execName}`, + `~/bin/${execName}` // User and Heroku + ) + } + + // Determine the right path + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if ( err ) { + next(err) + } + else if ( !execPath ) { + err = new Error('Could not locate node binary') + next(err) + } + else { + // Success, write the result to cache and send to our callback + if ( opts.cache ) safeps.cachedNodePath = execPath + next(null, execPath) + } + }) + + // Chain + return safeps + }, + + /** + * Path to the evironment's NPM directory. + * As 'npm' is not always available in the environment path, we should check + * common path locations and if we find one that works, then we should use it + * @param {Object} [opts] + * @param {Object} [opts.cache=true] + * @param {Function} next + * @param {Error} next.err + * @param {String} next.npmPath + * @chainable + * @return {this} + */ + getNpmPath (opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // By default read from the cache and write to the cache + if ( opts.cache == null ) opts.cache = true + + // Cached + if ( opts.cache && safeps.cachedNpmPath ) { + next(null, safeps.cachedNpmPath) + return safeps + } + + // Prepare + const execName = isWindows ? 'npm.cmd' : 'npm' + const possibleExecPaths = [] + + // Add environment paths + if ( process.env.NPM_PATH ) possibleExecPaths.push(process.env.NPM_PATH) + if ( process.env.NPMPATH ) possibleExecPaths.push(process.env.NPMPATH) + if ( /node(.exe)?$/.test(process.execPath) ) possibleExecPaths.push(process.execPath.replace(/node(.exe)?$/, execName)) + + // Add standard paths + possibleExecPaths.push(...safeps.getStandardExecPaths(execName)) + + // Add custom paths + if ( isWindows ) { + possibleExecPaths.push( + `/Program Files (x64)/nodejs/${execName}`, + `/Program Files (x86)/nodejs/${execName}`, + `/Program Files/nodejs/${execName}` + ) + } + else { + possibleExecPaths.push( + `/usr/local/bin/${execName}`, + `/usr/bin/${execName}`, + `~/node_modules/.bin/${execName}` // User and Heroku + ) + } + + // Determine the right path + safeps.determineExecPath(possibleExecPaths, opts, function (err, execPath) { + if ( err ) { + next(err) + } + else if ( !execPath ) { + err = new Error('Could not locate npm binary') + next(err) + } + else { + // Success, write the result to cache and send to our callback + if ( opts.cache ) safeps.cachedNpmPath = execPath + next(null, execPath) + } + }) + + // Chain + return safeps + }, + + + // ================================= + // Special Commands + // @TODO These should be abstracted out into their own packages + + /** + * Initialize a git repository, including submodules, and will prepare the given options if they are provided. + * @param {Object} opts also forwarded to {@link spawnMultiple} + * @param {String} [opts.cwd=process.cwd()] path to initiate the repository, can also be `opts.path` + * @param {String} [opts.url] the remote url, e.g. `https://github.com/bevry/safeps.git` + * @param {String} [opts.remote] the remote name, e.g. `origin` + * @param {String} [opts.branch] the branch to use, e.g. `master` + * @param {Function} next + * @param {Error} next.err + * @chainable + * @return {this} + */ + initGitRepo (opts, next) { + // Extract + [opts, next] = extractOptsAndCallback(opts, next) + + // Defaults + if (opts.path) { + opts.cwd = opts.path + delete opts.path + } + if (!opts.cwd) { + opts.cwd = process.cwd() + } + + // Prepare + function partTwo (err) { + if (err) return next(err) + const commands = [] + if (opts.remote) { + commands.push(['git', 'fetch', opts.remote]) + } + if (opts.branch) { + commands.push(['git', 'checkout', opts.branch]) + if (opts.remote) { + commands.push(['git', 'pull', opts.remote, opts.branch]) + } + } + else if (opts.remote) { + commands.push(['git', 'pull', opts.remote]) + } + commands.push(['git', 'submodule', 'init']) + commands.push(['git', 'submodule', 'update', '--recursive']) + + // Perform commands + safeps.spawnMultiple(commands, opts, next) + } + + // Check if it exists + safefs.ensurePath(opts.cwd, function (err) { + if (err) return next(err) + + // Initialise git repo + safeps.spawn(['git', 'init'], opts, function (err) { + if (err) return next(err) + + // If we want to set a remote, then do so + if (opts.url && opts.remote) { + // Check what remotes we have + safeps.spawn(['git', 'remote', 'show'], opts, function (err, stdout) { + if (err) return next(err) + // stdout will be null if there are no remotes + // and will be buffer if there are remotes + if (stdout && stdout.toString().split('\n').indexOf(opts.remote) !== -1) { + // Overwrite it if it does exist + // @todo we could probably do a check here to see if it is different + // but no need right now + const command = ['git', 'remote', 'set-url', opts.remote, opts.url] + safeps.spawn(command, opts, partTwo) + } + else { + // Add it if it doesn't exist + const command = ['git', 'remote', 'add', opts.remote, opts.url] + safeps.spawn(command, opts, partTwo) + } + }) + } + else { + return partTwo() + } + }) + }) + + // Chain + return safeps + }, + + /** + * Init Node Modules with cross platform support + * supports linux, heroku, osx, windows + * @param {Object} opts also forwarded to {@link spawn} + * @param {Function} next {@link spawn} completion callback + * @chainable + * @return {this} + */ + initNodeModules (opts, next) { + // Prepare + [opts, next] = extractOptsAndCallback(opts, next) + + // Defaults + if ( !opts.cwd ) opts.cwd = process.cwd() + if ( opts.args == null ) opts.args = [] + if ( opts.force == null ) opts.force = false + + // Paths + const packageJsonPath = pathUtil.join(opts.cwd, 'package.json') + const nodeModulesPath = pathUtil.join(opts.cwd, 'node_modules') + + // Split this commands into parts + function partTwo () { + // If there is no package.json file, then we can't do anything + safefs.exists(packageJsonPath, function (exists) { + if ( !exists ) return next() + + // Prepare command + const command = ['npm', 'install'].concat(opts.args) + + // Execute npm install inside the pugin directory + safeps.spawn(command, opts, next) + }) + } + function partOne () { + // If we are not forcing, then skip if node_modules already exists + if ( !opts.force ) { + safefs.exists(nodeModulesPath, function (exists) { + if ( exists ) return next() + partTwo() + }) + } + else { + partTwo() + } + } + + // Run the first part + partOne() + + // Chain + return safeps + }, + + /** + * Spawn Node Modules with cross platform support + * supports linux, heroku, osx, windows + * spawnNodeModule(name:string, args:array, opts:object, next:function) + * Better than https://github.com/mafintosh/npm-execspawn as it uses safeps + * @param {String} name + * @param {Array} args + * @param {Object} opts also forwarded to {@link spawn} + * @param {String} opts.name name of node module + * @param {String} [opts.cwd=process.cwd()] Current working directory of the child process. + * @param {Function} next {@link spawn} completion callback + * @chainable + * @return {this} + */ + spawnNodeModule (...args) { + // Prepare + const opts = {cwd: process.cwd()} + let next + + // Extract options + for (let i = 0; i < args.length; ++i) { + const arg = args[i] + const type = typeof arg + if ( Array.isArray(arg) ) { + opts.args = arg + } + else if ( type === 'object' ) { + if ( arg.next ) { + next = arg.next + arg.next = null + } + const keys = Object.keys(arg) + for (let ii = 0; ii < keys.length; ++ii) { + const key = keys[ii] + opts[key] = arg[key] + } + } + else if ( type === 'function' ) { + next = arg + } + else if ( type === 'string' ) { + opts.name = arg + } + } + + // Command + let command + if ( opts.name ) { + command = [opts.name].concat(opts.args || []) + opts.name = null + } + else { + command = [].concat(opts.args || []) + } + + // Clean up + opts.args = null + + // Paths + command[0] = pathUtil.join(opts.cwd, 'node_modules', '.bin', command[0]) + + // Spawn + safeps.spawn(command, opts, next) + + // Chain + return safeps + } +} + +// ===================================== +// Export + +module.exports = safeps diff --git a/node_modules/safer-buffer/LICENSE b/node_modules/safer-buffer/LICENSE new file mode 100644 index 000000000..4fe9e6f10 --- /dev/null +++ b/node_modules/safer-buffer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Nikita Skovoroda + +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. diff --git a/node_modules/safer-buffer/Porting-Buffer.md b/node_modules/safer-buffer/Porting-Buffer.md new file mode 100644 index 000000000..68d86bab0 --- /dev/null +++ b/node_modules/safer-buffer/Porting-Buffer.md @@ -0,0 +1,268 @@ +# Porting to the Buffer.from/Buffer.alloc API + + +## Overview + +- [Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.](#variant-1) (*recommended*) +- [Variant 2: Use a polyfill](#variant-2) +- [Variant 3: manual detection, with safeguards](#variant-3) + +### Finding problematic bits of code using grep + +Just run `grep -nrE '[^a-zA-Z](Slow)?Buffer\s*\(' --exclude-dir node_modules`. + +It will find all the potentially unsafe places in your own code (with some considerably unlikely +exceptions). + +### Finding problematic bits of code using Node.js 8 + +If you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code: + +- `--trace-warnings` will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js. +- `--trace-deprecation` does the same thing, but only for deprecation warnings. +- `--pending-deprecation` will show more types of deprecation warnings. In particular, it will show the `Buffer()` deprecation warning, even on Node.js 8. + +You can set these flags using an environment variable: + +```console +$ export NODE_OPTIONS='--trace-warnings --pending-deprecation' +$ cat example.js +'use strict'; +const foo = new Buffer('foo'); +$ node example.js +(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead. + at showFlaggedDeprecation (buffer.js:127:13) + at new Buffer (buffer.js:148:3) + at Object. (/path/to/example.js:2:13) + [... more stack trace lines ...] +``` + +### Finding problematic bits of code using linters + +Eslint rules [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +also find calls to deprecated `Buffer()` API. Those rules are included in some pre-sets. + +There is a drawback, though, that it doesn't always +[work correctly](https://github.com/chalker/safer-buffer#why-not-safe-buffer) when `Buffer` is +overriden e.g. with a polyfill, so recommended is a combination of this and some other method +described above. + + +## Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x. + +This is the recommended solution nowadays that would imply only minimal overhead. + +The Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ [Schedule](https://github.com/nodejs/Release#release-schedule)). This means that these versions of Node.js will *not* receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible. + +What you would do in this case is to convert all `new Buffer()` or `Buffer()` calls to use `Buffer.alloc()` or `Buffer.from()`, in the following way: + +- For `new Buffer(number)`, replace it with `Buffer.alloc(number)`. +- For `new Buffer(string)` (or `new Buffer(string, encoding)`), replace it with `Buffer.from(string)` (or `Buffer.from(string, encoding)`). +- For all other combinations of arguments (these are much rarer), also replace `new Buffer(...arguments)` with `Buffer.from(...arguments)`. + +Note that `Buffer.alloc()` is also _faster_ on the current Node.js versions than +`new Buffer(size).fill(0)`, which is what you would otherwise need to ensure zero-filling. + +Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +is recommended to avoid accidential unsafe Buffer API usage. + +There is also a [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005) +for automatically migrating Buffer constructors to `Buffer.alloc()` or `Buffer.from()`. +Note that it currently only works with cases where the arguments are literals or where the +constructor is invoked with two arguments. + +_If you currently support those older Node.js versions and dropping them would be a semver-major change +for you, or if you support older branches of your packages, consider using [Variant 2](#variant-2) +or [Variant 3](#variant-3) on older branches, so people using those older branches will also receive +the fix. That way, you will eradicate potential issues caused by unguarded Buffer API usage and +your users will not observe a runtime deprecation warning when running your code on Node.js 10._ + + +## Variant 2: Use a polyfill + +Utilize [safer-buffer](https://www.npmjs.com/package/safer-buffer) as a polyfill to support older +Node.js versions. + +You would take exacly the same steps as in [Variant 1](#variant-1), but with a polyfill +`const Buffer = require('safer-buffer').Buffer` in all files where you use the new `Buffer` api. + +Make sure that you do not use old `new Buffer` API — in any files where the line above is added, +using old `new Buffer()` API will _throw_. It will be easy to notice that in CI, though. + +Alternatively, you could use [buffer-from](https://www.npmjs.com/package/buffer-from) and/or +[buffer-alloc](https://www.npmjs.com/package/buffer-alloc) [ponyfills](https://ponyfill.com/) — +those are great, the only downsides being 4 deps in the tree and slightly more code changes to +migrate off them (as you would be using e.g. `Buffer.from` under a different name). If you need only +`Buffer.from` polyfilled — `buffer-from` alone which comes with no extra dependencies. + +_Alternatively, you could use [safe-buffer](https://www.npmjs.com/package/safe-buffer) — it also +provides a polyfill, but takes a different approach which has +[it's drawbacks](https://github.com/chalker/safer-buffer#why-not-safe-buffer). It will allow you +to also use the older `new Buffer()` API in your code, though — but that's arguably a benefit, as +it is problematic, can cause issues in your code, and will start emitting runtime deprecation +warnings starting with Node.js 10._ + +Note that in either case, it is important that you also remove all calls to the old Buffer +API manually — just throwing in `safe-buffer` doesn't fix the problem by itself, it just provides +a polyfill for the new API. I have seen people doing that mistake. + +Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +is recommended. + +_Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0._ + + +## Variant 3 — manual detection, with safeguards + +This is useful if you create Buffer instances in only a few places (e.g. one), or you have your own +wrapper around them. + +### Buffer(0) + +This special case for creating empty buffers can be safely replaced with `Buffer.concat([])`, which +returns the same result all the way down to Node.js 0.8.x. + +### Buffer(notNumber) + +Before: + +```js +var buf = new Buffer(notNumber, encoding); +``` + +After: + +```js +var buf; +if (Buffer.from && Buffer.from !== Uint8Array.from) { + buf = Buffer.from(notNumber, encoding); +} else { + if (typeof notNumber === 'number') + throw new Error('The "size" argument must be of type number.'); + buf = new Buffer(notNumber, encoding); +} +``` + +`encoding` is optional. + +Note that the `typeof notNumber` before `new Buffer` is required (for cases when `notNumber` argument is not +hard-coded) and _is not caused by the deprecation of Buffer constructor_ — it's exactly _why_ the +Buffer constructor is deprecated. Ecosystem packages lacking this type-check caused numereous +security issues — situations when unsanitized user input could end up in the `Buffer(arg)` create +problems ranging from DoS to leaking sensitive information to the attacker from the process memory. + +When `notNumber` argument is hardcoded (e.g. literal `"abc"` or `[0,1,2]`), the `typeof` check can +be omitted. + +Also note that using TypeScript does not fix this problem for you — when libs written in +`TypeScript` are used from JS, or when user input ends up there — it behaves exactly as pure JS, as +all type checks are translation-time only and are not present in the actual JS code which TS +compiles to. + +### Buffer(number) + +For Node.js 0.10.x (and below) support: + +```js +var buf; +if (Buffer.alloc) { + buf = Buffer.alloc(number); +} else { + buf = new Buffer(number); + buf.fill(0); +} +``` + +Otherwise (Node.js ≥ 0.12.x): + +```js +const buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0); +``` + +## Regarding Buffer.allocUnsafe + +Be extra cautious when using `Buffer.allocUnsafe`: + * Don't use it if you don't have a good reason to + * e.g. you probably won't ever see a performance difference for small buffers, in fact, those + might be even faster with `Buffer.alloc()`, + * if your code is not in the hot code path — you also probably won't notice a difference, + * keep in mind that zero-filling minimizes the potential risks. + * If you use it, make sure that you never return the buffer in a partially-filled state, + * if you are writing to it sequentially — always truncate it to the actuall written length + +Errors in handling buffers allocated with `Buffer.allocUnsafe` could result in various issues, +ranged from undefined behaviour of your code to sensitive data (user input, passwords, certs) +leaking to the remote attacker. + +_Note that the same applies to `new Buffer` usage without zero-filling, depending on the Node.js +version (and lacking type checks also adds DoS to the list of potential problems)._ + + +## FAQ + + +### What is wrong with the `Buffer` constructor? + +The `Buffer` constructor could be used to create a buffer in many different ways: + +- `new Buffer(42)` creates a `Buffer` of 42 bytes. Before Node.js 8, this buffer contained + *arbitrary memory* for performance reasons, which could include anything ranging from + program source code to passwords and encryption keys. +- `new Buffer('abc')` creates a `Buffer` that contains the UTF-8-encoded version of + the string `'abc'`. A second argument could specify another encoding: For example, + `new Buffer(string, 'base64')` could be used to convert a Base64 string into the original + sequence of bytes that it represents. +- There are several other combinations of arguments. + +This meant that, in code like `var buffer = new Buffer(foo);`, *it is not possible to tell +what exactly the contents of the generated buffer are* without knowing the type of `foo`. + +Sometimes, the value of `foo` comes from an external source. For example, this function +could be exposed as a service on a web server, converting a UTF-8 string into its Base64 form: + +``` +function stringToBase64(req, res) { + // The request body should have the format of `{ string: 'foobar' }` + const rawBytes = new Buffer(req.body.string) + const encoded = rawBytes.toString('base64') + res.end({ encoded: encoded }) +} +``` + +Note that this code does *not* validate the type of `req.body.string`: + +- `req.body.string` is expected to be a string. If this is the case, all goes well. +- `req.body.string` is controlled by the client that sends the request. +- If `req.body.string` is the *number* `50`, the `rawBytes` would be 50 bytes: + - Before Node.js 8, the content would be uninitialized + - After Node.js 8, the content would be `50` bytes with the value `0` + +Because of the missing type check, an attacker could intentionally send a number +as part of the request. Using this, they can either: + +- Read uninitialized memory. This **will** leak passwords, encryption keys and other + kinds of sensitive information. (Information leak) +- Force the program to allocate a large amount of memory. For example, when specifying + `500000000` as the input value, each request will allocate 500MB of memory. + This can be used to either exhaust the memory available of a program completely + and make it crash, or slow it down significantly. (Denial of Service) + +Both of these scenarios are considered serious security issues in a real-world +web server context. + +when using `Buffer.from(req.body.string)` instead, passing a number will always +throw an exception instead, giving a controlled behaviour that can always be +handled by the program. + + +### The `Buffer()` constructor has been deprecated for a while. Is this really an issue? + +Surveys of code in the `npm` ecosystem have shown that the `Buffer()` constructor is still +widely used. This includes new code, and overall usage of such code has actually been +*increasing*. diff --git a/node_modules/safer-buffer/Readme.md b/node_modules/safer-buffer/Readme.md new file mode 100644 index 000000000..14b082290 --- /dev/null +++ b/node_modules/safer-buffer/Readme.md @@ -0,0 +1,156 @@ +# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url] + +[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master +[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer +[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg +[npm-url]: https://npmjs.org/package/safer-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com +[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg +[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md + +Modern Buffer API polyfill without footguns, working on Node.js from 0.8 to current. + +## How to use? + +First, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API. + +Then, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use +`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new +Buffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._ + +Also, see the +[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide. + +## Do I need it? + +Hopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that +is the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()` +though. + +See the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) +for a better description. + +## Why not [safe-buffer](https://npmjs.com/safe-buffer)? + +_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and +itself contains footguns._ + +`safe-buffer` could be used safely to get the new API while still keeping support for older +Node.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API +I found out that `safe-buffer` is itself causing problems in some cases. + +For example, consider the following snippet: + +```console +$ cat example.unsafe.js +console.log(Buffer(20)) +$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js + +$ standard example.unsafe.js +standard: Use JavaScript Standard Style (https://standardjs.com) + /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead. +``` + +This is allocates and writes to console an uninitialized chunk of memory. +[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people +to avoid using unsafe API. + +Let's now throw in `safe-buffer`! + +```console +$ cat example.safe-buffer.js +const Buffer = require('safe-buffer').Buffer +console.log(Buffer(20)) +$ standard example.safe-buffer.js +$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js + +``` + +See the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior +remains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out +chunks of uninitialized memory. +_And this code will still emit runtime warnings on Node.js 10.x and above._ + +That was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or +emitting warnings on it, but that significantly diverges from `safe-buffer` design. After some +discussion, it was decided to move my approach into a separate package, and _this is that separate +package_. + +This footgun is not imaginary — I observed top-downloaded packages doing that kind of thing, +«fixing» the lint warning by blindly including `safe-buffer` without any actual changes. + +Also in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request +can bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go +unnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even +pass CI. _I also observed that being done in popular packages._ + +Some examples: + * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31) + (a module with 548 759 downloads/month), + * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61) + (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)), + * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c) + (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)), + * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec) + (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)), + * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1) + (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)). + * And there are a lot more over the ecosystem. + +I filed a PR at +[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to +partially fix that (for cases when that lint rule is used), but it is a semver-major change for +linter rules and presets, so it would take significant time for that to reach actual setups. +_It also hasn't been released yet (2018-03-20)._ + +Also, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake. +It still supports it with an explicit concern barier, by placing it under +`require('safer-buffer/dangereous')`. + +## But isn't throwing bad? + +Not really. It's an error that could be noticed and fixed early, instead of causing havoc later like +unguarded `new Buffer()` calls that end up receiving user input can do. + +This package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so +it is really simple to keep track of things and make sure that you don't mix old API usage with that. +Also, CI should hint anything that you might have missed. + +New commits, if tested, won't land new usage of unsafe Buffer API this way. +_Node.js 10.x also deals with that by printing a runtime depecation warning._ + +### Would it affect third-party modules? + +No, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`. +Don't do that. + +### But I don't want throwing… + +That is also fine! + +Also, it could be better in some cases when you don't comprehensive enough test coverage. + +In that case — just don't override `Buffer` and use +`var SaferBuffer = require('safer-buffer').Buffer` instead. + +That way, everything using `Buffer` natively would still work, but there would be two drawbacks: + +* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and + `SaferBuffer.alloc` instead. +* You are still open to accidentally using the insecure deprecated API — use a linter to catch that. + +Note that using a linter to catch accidential `Buffer` constructor usage in this case is strongly +recommended. `Buffer` is not overriden in this usecase, so linters won't get confused. + +## «Without footguns»? + +Well, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property +on older versions and duping things from there. You shouldn't do that in your code, probabably. + +The intention is to remove the most significant footguns that affect lots of packages in the +ecosystem, and to do it in the proper way. + +Also, this package doesn't protect against security issues affecting some Node.js versions, so for +usage in your own production code, it is still recommended to update to a Node.js version +[supported by upstream](https://github.com/nodejs/release#release-schedule). diff --git a/node_modules/safer-buffer/dangerous.js b/node_modules/safer-buffer/dangerous.js new file mode 100644 index 000000000..ca41fdc54 --- /dev/null +++ b/node_modules/safer-buffer/dangerous.js @@ -0,0 +1,58 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var buffer = require('buffer') +var Buffer = buffer.Buffer +var safer = require('./safer.js') +var Safer = safer.Buffer + +var dangerous = {} + +var key + +for (key in safer) { + if (!safer.hasOwnProperty(key)) continue + dangerous[key] = safer[key] +} + +var Dangereous = dangerous.Buffer = {} + +// Copy Safer API +for (key in Safer) { + if (!Safer.hasOwnProperty(key)) continue + Dangereous[key] = Safer[key] +} + +// Copy those missing unsafe methods, if they are present +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue + if (Dangereous.hasOwnProperty(key)) continue + Dangereous[key] = Buffer[key] +} + +if (!Dangereous.allocUnsafe) { + Dangereous.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + return Buffer(size) + } +} + +if (!Dangereous.allocUnsafeSlow) { + Dangereous.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + return buffer.SlowBuffer(size) + } +} + +module.exports = dangerous diff --git a/node_modules/safer-buffer/package.json b/node_modules/safer-buffer/package.json new file mode 100644 index 000000000..d452b04ae --- /dev/null +++ b/node_modules/safer-buffer/package.json @@ -0,0 +1,34 @@ +{ + "name": "safer-buffer", + "version": "2.1.2", + "description": "Modern Buffer API polyfill without footguns", + "main": "safer.js", + "scripts": { + "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js", + "test": "standard && tape tests.js" + }, + "author": { + "name": "Nikita Skovoroda", + "email": "chalkerx@gmail.com", + "url": "https://github.com/ChALkeR" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/ChALkeR/safer-buffer.git" + }, + "bugs": { + "url": "https://github.com/ChALkeR/safer-buffer/issues" + }, + "devDependencies": { + "standard": "^11.0.1", + "tape": "^4.9.0" + }, + "files": [ + "Porting-Buffer.md", + "Readme.md", + "tests.js", + "dangerous.js", + "safer.js" + ] +} diff --git a/node_modules/safer-buffer/safer.js b/node_modules/safer-buffer/safer.js new file mode 100644 index 000000000..37c7e1aa6 --- /dev/null +++ b/node_modules/safer-buffer/safer.js @@ -0,0 +1,77 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var buffer = require('buffer') +var Buffer = buffer.Buffer + +var safer = {} + +var key + +for (key in buffer) { + if (!buffer.hasOwnProperty(key)) continue + if (key === 'SlowBuffer' || key === 'Buffer') continue + safer[key] = buffer[key] +} + +var Safer = safer.Buffer = {} +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue + if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue + Safer[key] = Buffer[key] +} + +safer.Buffer.prototype = Buffer.prototype + +if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) + } + if (value && typeof value.length === 'undefined') { + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) + } + return Buffer(value, encodingOrOffset, length) + } +} + +if (!Safer.alloc) { + Safer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + var buf = Buffer(size) + if (!fill || fill.length === 0) { + buf.fill(0) + } else if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + return buf + } +} + +if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding('buffer').kStringMaxLength + } catch (e) { + // we can't determine kStringMaxLength in environments where process.binding + // is unsupported, so let's not set it + } +} + +if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + } + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength + } +} + +module.exports = safer diff --git a/node_modules/safer-buffer/tests.js b/node_modules/safer-buffer/tests.js new file mode 100644 index 000000000..7ed2777c9 --- /dev/null +++ b/node_modules/safer-buffer/tests.js @@ -0,0 +1,406 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var test = require('tape') + +var buffer = require('buffer') + +var index = require('./') +var safer = require('./safer') +var dangerous = require('./dangerous') + +/* Inheritance tests */ + +test('Default is Safer', function (t) { + t.equal(index, safer) + t.notEqual(safer, dangerous) + t.notEqual(index, dangerous) + t.end() +}) + +test('Is not a function', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(typeof impl, 'object') + t.equal(typeof impl.Buffer, 'object') + }); + [buffer].forEach(function (impl) { + t.equal(typeof impl, 'object') + t.equal(typeof impl.Buffer, 'function') + }) + t.end() +}) + +test('Constructor throws', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.throws(function () { impl.Buffer() }) + t.throws(function () { impl.Buffer(0) }) + t.throws(function () { impl.Buffer('a') }) + t.throws(function () { impl.Buffer('a', 'utf-8') }) + t.throws(function () { return new impl.Buffer() }) + t.throws(function () { return new impl.Buffer(0) }) + t.throws(function () { return new impl.Buffer('a') }) + t.throws(function () { return new impl.Buffer('a', 'utf-8') }) + }) + t.end() +}) + +test('Safe methods exist', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(typeof impl.Buffer.alloc, 'function', 'alloc') + t.equal(typeof impl.Buffer.from, 'function', 'from') + }) + t.end() +}) + +test('Unsafe methods exist only in Dangerous', function (t) { + [index, safer].forEach(function (impl) { + t.equal(typeof impl.Buffer.allocUnsafe, 'undefined') + t.equal(typeof impl.Buffer.allocUnsafeSlow, 'undefined') + }); + [dangerous].forEach(function (impl) { + t.equal(typeof impl.Buffer.allocUnsafe, 'function') + t.equal(typeof impl.Buffer.allocUnsafeSlow, 'function') + }) + t.end() +}) + +test('Generic methods/properties are defined and equal', function (t) { + ['poolSize', 'isBuffer', 'concat', 'byteLength'].forEach(function (method) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], buffer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Built-in buffer static methods/properties are inherited', function (t) { + Object.keys(buffer).forEach(function (method) { + if (method === 'SlowBuffer' || method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], buffer[method], method) + t.notEqual(typeof impl[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Built-in Buffer static methods/properties are inherited', function (t) { + Object.keys(buffer.Buffer).forEach(function (method) { + if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], buffer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('.prototype property of Buffer is inherited', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.prototype, buffer.Buffer.prototype, 'prototype') + t.notEqual(typeof impl.Buffer.prototype, 'undefined', 'prototype') + }) + t.end() +}) + +test('All Safer methods are present in Dangerous', function (t) { + Object.keys(safer).forEach(function (method) { + if (method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], safer[method], method) + if (method !== 'kStringMaxLength') { + t.notEqual(typeof impl[method], 'undefined', method) + } + }) + }) + Object.keys(safer.Buffer).forEach(function (method) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], safer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Safe methods from Dangerous methods are present in Safer', function (t) { + Object.keys(dangerous).forEach(function (method) { + if (method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], dangerous[method], method) + if (method !== 'kStringMaxLength') { + t.notEqual(typeof impl[method], 'undefined', method) + } + }) + }) + Object.keys(dangerous.Buffer).forEach(function (method) { + if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], dangerous.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +/* Behaviour tests */ + +test('Methods return Buffers', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 10))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 'a'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10, 'x'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(9, 'ab'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(''))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string', 'utf-8'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([0, 42, 3]))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(new Uint8Array([0, 42, 3])))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([]))) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](0))) + t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](10))) + }) + t.end() +}) + +test('Constructor is buffer.Buffer', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.alloc(0).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(0, 10).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(0, 'a').constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(10).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(10, 'x').constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(9, 'ab').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('string').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('string', 'utf-8').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').constructor, buffer.Buffer) + t.equal(impl.Buffer.from([0, 42, 3]).constructor, buffer.Buffer) + t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).constructor, buffer.Buffer) + t.equal(impl.Buffer.from([]).constructor, buffer.Buffer) + }); + [0, 10, 100].forEach(function (arg) { + t.equal(dangerous.Buffer.allocUnsafe(arg).constructor, buffer.Buffer) + t.equal(dangerous.Buffer.allocUnsafeSlow(arg).constructor, buffer.SlowBuffer(0).constructor) + }) + t.end() +}) + +test('Invalid calls throw', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.throws(function () { impl.Buffer.from(0) }) + t.throws(function () { impl.Buffer.from(10) }) + t.throws(function () { impl.Buffer.from(10, 'utf-8') }) + t.throws(function () { impl.Buffer.from('string', 'invalid encoding') }) + t.throws(function () { impl.Buffer.from(-10) }) + t.throws(function () { impl.Buffer.from(1e90) }) + t.throws(function () { impl.Buffer.from(Infinity) }) + t.throws(function () { impl.Buffer.from(-Infinity) }) + t.throws(function () { impl.Buffer.from(NaN) }) + t.throws(function () { impl.Buffer.from(null) }) + t.throws(function () { impl.Buffer.from(undefined) }) + t.throws(function () { impl.Buffer.from() }) + t.throws(function () { impl.Buffer.from({}) }) + t.throws(function () { impl.Buffer.alloc('') }) + t.throws(function () { impl.Buffer.alloc('string') }) + t.throws(function () { impl.Buffer.alloc('string', 'utf-8') }) + t.throws(function () { impl.Buffer.alloc('b25ldHdvdGhyZWU=', 'base64') }) + t.throws(function () { impl.Buffer.alloc(-10) }) + t.throws(function () { impl.Buffer.alloc(1e90) }) + t.throws(function () { impl.Buffer.alloc(2 * (1 << 30)) }) + t.throws(function () { impl.Buffer.alloc(Infinity) }) + t.throws(function () { impl.Buffer.alloc(-Infinity) }) + t.throws(function () { impl.Buffer.alloc(null) }) + t.throws(function () { impl.Buffer.alloc(undefined) }) + t.throws(function () { impl.Buffer.alloc() }) + t.throws(function () { impl.Buffer.alloc([]) }) + t.throws(function () { impl.Buffer.alloc([0, 42, 3]) }) + t.throws(function () { impl.Buffer.alloc({}) }) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.throws(function () { dangerous.Buffer[method]('') }) + t.throws(function () { dangerous.Buffer[method]('string') }) + t.throws(function () { dangerous.Buffer[method]('string', 'utf-8') }) + t.throws(function () { dangerous.Buffer[method](2 * (1 << 30)) }) + t.throws(function () { dangerous.Buffer[method](Infinity) }) + if (dangerous.Buffer[method] === buffer.Buffer.allocUnsafe) { + t.skip('Skipping, older impl of allocUnsafe coerced negative sizes to 0') + } else { + t.throws(function () { dangerous.Buffer[method](-10) }) + t.throws(function () { dangerous.Buffer[method](-1e90) }) + t.throws(function () { dangerous.Buffer[method](-Infinity) }) + } + t.throws(function () { dangerous.Buffer[method](null) }) + t.throws(function () { dangerous.Buffer[method](undefined) }) + t.throws(function () { dangerous.Buffer[method]() }) + t.throws(function () { dangerous.Buffer[method]([]) }) + t.throws(function () { dangerous.Buffer[method]([0, 42, 3]) }) + t.throws(function () { dangerous.Buffer[method]({}) }) + }) + t.end() +}) + +test('Buffers have appropriate lengths', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.alloc(0).length, 0) + t.equal(impl.Buffer.alloc(10).length, 10) + t.equal(impl.Buffer.from('').length, 0) + t.equal(impl.Buffer.from('string').length, 6) + t.equal(impl.Buffer.from('string', 'utf-8').length, 6) + t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').length, 11) + t.equal(impl.Buffer.from([0, 42, 3]).length, 3) + t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).length, 3) + t.equal(impl.Buffer.from([]).length, 0) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.equal(dangerous.Buffer[method](0).length, 0) + t.equal(dangerous.Buffer[method](10).length, 10) + }) + t.end() +}) + +test('Buffers have appropriate lengths (2)', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true; + [ safer.Buffer.alloc, + dangerous.Buffer.allocUnsafe, + dangerous.Buffer.allocUnsafeSlow + ].forEach(function (method) { + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 1e5) + var buf = method(length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + } + }) + t.ok(ok) + t.end() +}) + +test('.alloc(size) is zero-filled and has correct length', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var buf = index.Buffer.alloc(length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + var j + for (j = 0; j < length; j++) { + if (buf[j] !== 0) ok = false + } + buf.fill(1) + for (j = 0; j < length; j++) { + if (buf[j] !== 1) ok = false + } + } + t.ok(ok) + t.end() +}) + +test('.allocUnsafe / .allocUnsafeSlow are fillable and have correct lengths', function (t) { + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var buf = dangerous.Buffer[method](length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + buf.fill(0, 0, length) + var j + for (j = 0; j < length; j++) { + if (buf[j] !== 0) ok = false + } + buf.fill(1, 0, length) + for (j = 0; j < length; j++) { + if (buf[j] !== 1) ok = false + } + } + t.ok(ok, method) + }) + t.end() +}) + +test('.alloc(size, fill) is `fill`-filled', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var fill = Math.round(Math.random() * 255) + var buf = index.Buffer.alloc(length, fill) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + for (var j = 0; j < length; j++) { + if (buf[j] !== fill) ok = false + } + } + t.ok(ok) + t.end() +}) + +test('.alloc(size, fill) is `fill`-filled', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var fill = Math.round(Math.random() * 255) + var buf = index.Buffer.alloc(length, fill) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + for (var j = 0; j < length; j++) { + if (buf[j] !== fill) ok = false + } + } + t.ok(ok) + t.deepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 97)) + t.notDeepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 98)) + + var tmp = new buffer.Buffer(2) + tmp.fill('ok') + if (tmp[1] === tmp[0]) { + // Outdated Node.js + t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('ooooo')) + } else { + t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('okoko')) + } + t.notDeepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('kokok')) + + t.end() +}) + +test('safer.Buffer.from returns results same as Buffer constructor', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.deepEqual(impl.Buffer.from(''), new buffer.Buffer('')) + t.deepEqual(impl.Buffer.from('string'), new buffer.Buffer('string')) + t.deepEqual(impl.Buffer.from('string', 'utf-8'), new buffer.Buffer('string', 'utf-8')) + t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), new buffer.Buffer('b25ldHdvdGhyZWU=', 'base64')) + t.deepEqual(impl.Buffer.from([0, 42, 3]), new buffer.Buffer([0, 42, 3])) + t.deepEqual(impl.Buffer.from(new Uint8Array([0, 42, 3])), new buffer.Buffer(new Uint8Array([0, 42, 3]))) + t.deepEqual(impl.Buffer.from([]), new buffer.Buffer([])) + }) + t.end() +}) + +test('safer.Buffer.from returns consistent results', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.deepEqual(impl.Buffer.from(''), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from([]), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from(new Uint8Array([])), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from('string', 'utf-8'), impl.Buffer.from('string')) + t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from([115, 116, 114, 105, 110, 103])) + t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from(impl.Buffer.from('string'))) + t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), impl.Buffer.from('onetwothree')) + t.notDeepEqual(impl.Buffer.from('b25ldHdvdGhyZWU='), impl.Buffer.from('onetwothree')) + }) + t.end() +}) diff --git a/node_modules/scandirectory/.npmignore b/node_modules/scandirectory/.npmignore new file mode 100644 index 000000000..04f814f4c --- /dev/null +++ b/node_modules/scandirectory/.npmignore @@ -0,0 +1,39 @@ +# v1.3.23 October 11, 2014 +# https://github.com/bevry/base + +# Temp Files +**/*.log +**/.docpad.db + +# Build Files +build/ +components/ +bower_components/ +node_modules/ + +# Private Files +.env + +# Development Files +.editorconfig +.eslintrc +.jshintrc +coffeelint.json +.travis* +Cakefile +Makefile +BACKERS.md +CONTRIBUTING.md +HISTORY.md +**/src/ +**/test/ + +# Other Package Definitions +template.js +component.json +bower.json + +# ===================================== +# CUSTOM MODIFICATIONS + +# None diff --git a/node_modules/scandirectory/HISTORY.md b/node_modules/scandirectory/HISTORY.md new file mode 100755 index 000000000..217d95856 --- /dev/null +++ b/node_modules/scandirectory/HISTORY.md @@ -0,0 +1,570 @@ +# History + +## v2.5.0 December 12, 2014 +- Extracted from [balupton/bal-util](https://github.com/balupton/bal-util) +- Changed accepted arguments + +## v2.4.3 December 12, 2014 +- Fixed flow (regression since v2.4.2) + +## v2.4.2 December 12, 2014 +- Updated dependencies + +## v2.4.1 January 10, 2014 +- Updated dependencies +- Repackaged + +## v2.4.0 December 10, 2013 +- `balUtilPaths` changes: + - Added `resolveCaseSensitivePath(path, next)` +- Extracted out: + - [binaryextensions](https://github.com/bevry/binaryextensions) < `balUtilPaths.binaryExtensions` + - [ignorefs](https://github.com/bevry/ignorefs) < `balUtilPaths.isIgnoredPath` + - [ignorepatterns](https://github.com/bevry/ignorepatterns/blob/master/HISTORY.md) < `balUtilPaths.ignoreCommonPatterns` + - [istextorbinary](https://github.com/bevry/istextorbinary) < `balUtilPaths.(isTextSync|isText|getEncodingSync|getEncoding)` + - [textextensions](https://github.com/bevry/textextensions) < `balUtilPaths.textExtensions` + +## v2.3.2 November 1, 2013 +- Can now pass `binary` as the `readFiles` option value to return buffers instead of strings for file contents +- Updated dependencies + +## v2.3.1 October 27, 2013 +- Updated dependencies + +## v2.3.0 July 12, 2013 +- Split out `balUtilEvents.EventEmitterEnhanced` into [event-emitter-grouped](https://github.com/bevry/event-emitter-grouped) + +## v2.2.0 June 24, 2013 +- Split out `balUtilModules` into [safeps](https://github.com/bevry/safeps) +- Split out `balUtilFlow.extractOptsAndCallback` into [extract-opts](https://github.com/bevry/extract-opts) + +## v2.1.0 May 25, 2013 +- `balUtilEvent` changes: + - Event listeners can now have priorities. Highest priorities run first. Set them by `listener.priority = 500` + - Added `off` alias for `removeListener` + +## v2.0.5 April 25, 2013 +- `balUtilFlow` changes: + - `extractOptsAndCallback` now accepts config argument +- `balUtilPaths` changes: + - `readPath` now uses `Wget/1.14 (linux-gnu)` as the default user agent + +## v2.0.4 April 6, 2013 +- `balUtilPaths` changes: + - Fixed redirect handling on `readPath` + +## v2.0.3 April 5, 2013 +- `balUtilModules` changes: + - Fixed `spawnCommands` + - `initGitRepo` and `initNodeModules` now take a `log` function rather than a `logger` object (regards opts) + +## v2.0.2 April 5, 2013 +- `balUtilModules` changes: + - Fixed `spawnCommand` and `spawnCommands` + - `closeProcess` now deprecated in favor of completion callback on `openProcess` + +## v2.0.1 April 5, 2013 +- `balUtilPaths` changes: + - Removed safefs aliases + +## v2.0.0 April 5, 2013 +- We no longer alias split off projects, you should use them directly now +- `balUtilModules` changes: + - Killed `(git|node|npm)(Command|Commands)` functions, use `spawnCommand` and `spawnCommands` instead +- `balUtilHTML` changes: + - `replaceElementAsync` now executes tasks in parallel rather than in serial + +## v1.18.0 April 1, 2013 +- We now use the projects we split away from bal-util + +## v1.17.0 March 27, 2013 +- Killed explicit browser support, use [Browserify](http://browserify.org/) instead +- Removed the `out` directory from git +- Now compiled with the coffee-script bare option + +## v1.16.13 March 23, 2013 +- `balUtilEvents` changes: + - `EventEmitterEnhanced` changes: + - Now works with `once` calls in node 0.10.0 + - Closes [bevry/docpad#462](https://github.com/bevry/docpad/issues/462) + - Changed `emitSync` to be an alias to `emitSerial` and `emitAsync` to be an alias to `emitParallel` + - Added new `getListenerGroup` function +- `balUtilFlow` changes: + - `fireWithOptionalCallback` can now take the method as an array of `[fireMethod,introspectMethod]` useful for pesly binds + +## v1.16.12 March 18, 2013 +- `balUtilFlow` changes: + - `Groups::run` signature changed from no arguments to a single `mode` argument + +## v1.16.11 March 10, 2013 +- `balUtilModules` changes: + - Fixed `getCountryCode` and `getLanguageCode` failing when there is no locale code + +## v1.16.10 March 8, 2013 +- `balUtilModules` changes: + - Fixed `requireFresh` regression, added test + +## v1.16.9 March 8, 2013 +- `balUtilModules` changes: + - Added `getLocaleCode` + - Added `getCountryCode` + - Added `getLanguageCode` + +## v1.16.8 February 16, 2013 +- `balUtilModules` changes: + - `spawnMultiple`, `execMultiple`: now accept a `tasksMode` option that can be `serial` (default) or `parallel` + +## v1.16.7 February 12, 2013 +- `balUtilPaths` changes: + - `readPath`: do not prefer gzip, but still support it for decoding, as the zlib library is buggy + +## v1.16.6 February 12, 2013 +- `balUtilPaths` changes: + - `readPath`: add support for gzip decoding for node 0.6 and higher + +## v1.16.5 February 6, 2013 +- More [browserify](http://browserify.org/) support + +## v1.16.4 February 6, 2013 +- [Browserify](http://browserify.org/) support + +## v1.16.3 February 5, 2013 +- Node v0.4 support +- `balUtilPaths` changes: + - Removed deprecated `console.log`s when errors occur (they are now sent to the callback) + - Fixed `determineExecPath` when executable requires the environment configuration +- `balUtilTypes` changes: + - `isEmptyObject` now works for empty values (e.g. `null`) +- `balUtilFlow` changes: + - Added `clone` + - Added `deepClone` + - `setDeep` and `getDeep` now handle `undefined` values correctly + +## v1.16.2 February 1, 2013 +- `balUtilPaths` changes: + - Added timeout support to `readPath` +- `balUtilFlow` changes: + - Added `setDeep` + - Added `getDeep` + +## v1.16.1 January 25, 2013 +- `balUtilFlow` changes: + - Added `safeShallowExtendPlainObjects` + - Added `safeDeepExtendPlainObjects` + +## v1.16.0 January 24, 2013 +- Node v0.9 compatability +- `balUtilModules` changes: + - Added `getEnvironmentPaths` + - Added `getStandardExecPaths(execName)` + - `exec` now supports the `output` option + - `determineExecPath` now resolves the possible paths and checks for their existance + - This avoids Node v0.9's ENOENT crash when executing a path that doesn't exit + - `getExecPath` will now try for `.exe` paths as well when running on windows if an extension hasn't already been defined + - `getGitPath`, `getNodePath`, `getNpmPath` will now also check the environment paths +- `balUtilFlow` changes: + - Added `createSnore` + - Added `suffixArray` + - `flow` now accepts the signatures `({object,actions,action,args,tasks,next})`, `(object, action, args, next)` and `(actions,args,next)` + - `Group` changes: + - `mode` can now be either `parallel` or `serial`, rather than `async` and `sync` + - `async()` is now `parallel()` (aliased for b/c) + - `sync()` is now `serial()` (aliased for b/c) +- `balUtilTypes` changes: + - Added `isEmptyObject` + +## v1.15.4 January 8, 2013 +- `balUtilPaths` changes: + - Renamed `testIgnorePatterns` to `isIgnoredPath` + - Added aliases for b/c compatibility + - Added new `ignorePaths` option + +## v1.15.3 December 24, 2012 +- `balUtilModules` changes: + - Added `requireFresh` + +## v1.15.2 December 16, 2012 +- `balUtilPaths` changes: + - Fixed `scandir` not inheriting ignore patterns when recursing + +## v1.15.1 December 15, 2012 +- `balUtilPaths` changes: + - Fixed `testIgnorePatterns` when `ignoreCommonPatterns` is set to `true` + +## v1.15.0 December 15, 2012 +- `balUtilPaths` changes: + - Added `testIgnorePatterns` + - Renamed `ignorePatterns` to `ignoreCommonPatterns`, and added new `ignoreCustomPatterns` + - Affects `scandir` options + - Added emac cache files to `ignoreCommonPatterns` + +## v1.14.1 December 14, 2012 +- `balUtilModules` changes: + - Added `getExecPath` that will fetch an executable path based on the paths within the environment `PATH` variable +- Rebuilt with CoffeeScript 1.4.x + +## v1.14.0 November 23, 2012 +- `balUtilPaths` changes: + - `readPath` will now follow url redirects + +## v1.13.13 October 26, 2012 +- `balUtilPaths` changes: + - Files that start with `~` are now correctly ignored in `commonIgnorePatterns` + +## v1.13.12 October 22, 2012 +- `balUtilFlow` changes: + - `extend` is now an alias of `shallowExtendPlainObjects` as they were exactly the same +- `balUtilHTML` changes: + - `replaceElement` and `replaceElementAsync` changes: + - now accept arguments in object form as well + - accept a `removeIndentation` argument that defaults to `true` + +## v1.13.11 October 22, 2012 +- `balUtilPaths` changes: + - `ensurePath` now returns `err` and `exists` instead of just `err` +- `balUtilModules` changes: + - `initGitRepo` will now default `remote` to `origin` and `branch` to `master` + - Added `initOrPullGitRepo` + +## v1.13.10 October 7, 2012 +- `balUtilPaths` changes: + - Added `shallowExtendPlainObjects` + +## v1.13.9 October 7, 2012 +- `balUtilPaths` changes: + - VIM swap files now added to `commonIgnorePatterns` + - Thanks to [Sean Fridman](https://github.com/sfrdmn) for [pull request #4](https://github.com/balupton/bal-util/pull/4) + +## v1.13.8 October 2, 2012 +- `balUtilModules` changes: + - Added `openProcess` and `closeProcess`, and using them in `spawn` and `exec`, used to prevent `EMFILE` errors when there are too many open processes + - Max number of open processes is configurable via the `NODE_MAX_OPEN_PROCESSES` environment variable +` balUtilPaths` changes: + - Max number of open files is now configurable via the`NODE_MAX_OPEN_FILES` environment variable + +## v1.13.7 September 24, 2012 +- `balUtilPaths` changes: + - Added `textExtensions` and `binaryExtensions` + - The environment variables `TEXT_EXTENSIONS` and `BINARY_EXTENSIONS` will append to these arrays + - Added `isText` and `isTextSync` + +## v1.13.6 September 18, 2012 +- `balUtilPaths` changes: + - Improved `getEncoding`/`getEncodingSync` detection + - Will now scan start, middle and end, instead of just middle + +## v1.13.5 September 13, 2012 +- `balUtilPaths` changes: + - Added `getEncoding` and `getEncodingSync` + +## v1.13.4 August 28, 2012 +- `balUtilModules` changes: + - Failing to retrieve the path on `getGitPath`, `getNodePath` and `getNpmPath` will now result in an error + +## v1.13.3 August 28, 2012 +- `balUtilModules` changes: + - Fixed `exec` and `execMultiple` + - Added `gitCommands`, `nodeCommands` and `npmCommands` +- Dropped node v0.4 support, min required version now 0.6 + +## v1.13.2 August 16, 2012 +- Repackaged + +## v1.13.1 August 16, 2012 +- `balUtilHTML` changes: + - Fixed `replaceElement` from mixing up elements that start with our desired selector, instead of being only our desired selector + +## v1.13.0 August 3, 2012 +- `balUtilModules` changes: + - Added `determineExecPath`, `getNpmPath`, `getTmpPath`, `nodeCommand` and `gitCommand` + - `initNodeModules` and `initGitRepo` will now get the determined path of the executable if a path isn't passed +- Re-added markdown files to npm distribution as they are required for the npm website + +## v1.12.5 July 18, 2012 +- `balUtilTypes` changes: + - Better checks for `isString` and `isNumber` under some environments +- `balUtilFlow` changes: + - Removed ambigious `clone` function, use `dereference` or `extend` or `deepExtendPlainObjects` instead + +## v1.12.4 July 12, 2012 +- `balUtilTypes` changes: + - `isObject` now also checks truthyness to avoid `null` and `undefined` from being objects + - `isPlainObject` got so good, it can't get better +- `balUtilFlow` changes: + - added `deepExtendPlainObjects` + +## v1.12.3 July 12, 2012 +- `balUtilModules` changes: + - `npmCommand` will now only prefix with the nodePath if the npmPath exists + - `npmCommand` and `initNodeModules` now use async fs calls instead of sync calls + +## v1.12.2 July 12, 2012 +- `balUtilFlow` changes: + - Added `dereference` + +## v1.12.1 July 10, 2012 +- `balUtilModules` changes: + - Added `stdin` option to `spawn` + +## v1.12.0 July 7, 2012 +- Rejigged `balUtilTypes` and now top level + - Other components now make use of this instead of inline `typeof` and `instanceof` checks +- `balUtilFlow` changes: + - `isArray` and `toString` moved to `balUtilTypes` + +## v1.11.2 July 7, 2012 +- `balUtilFlow` changes: + - Added `clone` +- `balUtilModules` changes: + - Fixed exists warning on `initNodeModules` +- `balUtilPaths` changes: + - Added `scanlist` + - `scandir` changes: + - If `readFiles` is `true`, then we will return the contents into the list entries as well as the tree entries (we weren't doing this for lists before) + +## v1.11.1 July 4, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Cleaned up the context handling code + - `Block` changes: + - Block constructor as well as `createSubBlock` arguments is now a single `opts` object, acceping the options `name`, `fn`, `parentBlock` and the new `complete` + - Fixed bug introduced in v1.11.0 causing blocks to complete instantly (instead of once their tasks are finished) + +## v1.11.0 July 1, 2012 +- Added `balUtilHTML`: + - `getAttribute(attributes,attribute)` + - `detectIndentation(source)` + - `removeIndentation(source)` + - `replaceElement(source, elementNameMatcher, replaceElementCallback)` + - `replaceElementAsync(source, elementNameMatcher, replaceElementCallback, next)` +- `balUtilFlow` changes: + - `wait(delay,fn)` introduced as an alternative to `setTimeout` + - `Group` changes: + - `push` and `pushAndRun` signatures are now `([context], task)` + - `context` is optional, and what we should bind to this + - it saves us having to often wrap our task pushing into for each scopes + - task completion callbacks are now optional, if not specified a task will be completed as soon as it finishes executing +- `balUtilEvents`, `balUtilModules` changes: + - Now make use of the `balUtilFlow.push|pushAndRun` new `context` argument to simplify some loops + +## v1.10.3 June 26, 2012 +- `balUtilModules` changes: + - `initNodeModules` will now install modules from cache, unless `force` is true + +## v1.10.2 June 26, 2012 +- `balUtilModules` changes: + - `initNodeModules` will now never install modules from cache + +## v1.10.1 June 26, 2012 +- `balUtilModules` changes: + - Fixed `npmCommand` under some situations + +## v1.10.0 June 26, 2012 +- `balUtilModules` changes: + - Added `spawnMultiple`, `execMultiple`, `gitGitPath`, `getNodePath`, and `npmCommand` + - `spawn` and `exec` are now only for single commands, use the new `spawnMultiple` and `execMultiple` for multiple commands instead + - error exit code is now anything that isnt `0` + +## v1.9.4 June 22, 2012 +- Fixed a problem with large asynchronous groups + +## v1.9.3 June 22, 2012 +- `balUtilFlow` changes: + - Added `extractOptsAndCallback` and `extend` + +## v1.9.2 June 21, 2012 +- `balUtilFlow` changes: + - Added `fireWithOptionalCallback`, updated groups and emitters to use this + +## v1.9.1 June 21, 2012 +- `balUtilModules` changes: + - `initNodeModules` now supports `output` option + +## v1.9.0 June 21, 2012 +- `balUtilEvents` changes: + - `EventEmitterEnhanced` changes: + - `emitSync` and `emitAsync` changes: + - The next callback is now optional, if it is not detected then we will automatically mark the listener as completed once we have executed it (in other words, if it doesn't have a next callback, then we treat it as a synchronous listener) + +## v1.8.8 June 19, 2012 +- Fixed a problem with large synchronous groups + +## v1.8.7 June 19, 2012 +- Defaulted `dependencies` to an empty object, to hopefully fix [npm issue #2540](https://github.com/isaacs/npm/pull/2540) + +## v1.8.6 June 19, 2012 +- `balUtilEvents` changes: + - Split `emitSync` and `emitAsync` out of `EventSystem` and into new `EventEmitterEnhanced` that `EventSystem` extends + +## v1.8.5 June 11, 2012 +- Made next callbacks necessary by default + +## v1.8.4 June 11, 2012 +- `balUtilModule` changes: + - `spawn` + - will now return results in the order of `err`, `stdout`, `stderr`, `code`, `signal` + - now splits string commands using `/ /` +- `balUtilFlow` changes: + - `Group` will now only return error as an array if we have more than one error +- Updated for Joe v1.0.0 + +## v1.8.3 June 9, 2012 +- `balUtilCompare` changes: + - `packageCompare` will now fail gracefully if it receives malformed json + +## v1.8.2 June 9, 2012 +- Removed request dependency, we now use the native http/https modules + +## v1.8.1 June 9, 2012 +- Restructured directories +- Removed generated docs, use the wiki instead +- Moved tests from Mocha to [Joe](https://github.com/bevry/joe) +- Travis now tests against node v0.7 +- `balUtilPaths` changes: + - Added `exists` and `existsSync` to normalize node's 0.6 to 0.8 api differences +- Made [request](https://github.com/mikeal/request) an optional dependency + +## v1.8.0 June 9, 2012 +- Added expiremental `balUtilFlow.Block` +- Possibly some undocumented `balUtilFlow.Group` changes + +## v1.7.0 June 4, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Constructor now supports `next` and `mode` arguments in any order + - `clear()` now clears everything + - Added `hasTasks()` + - Group completion callback's first argument (the error argument) is now an array of errors (or null if no errors) + - Added `breakOnError` option (defaults to `true`) + - Added `autoClear` option to clear once all tasks have run (defualts to `false`) + +## v1.6.5 May 30, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Reverted the change made in v1.6.4 where errors in callbacks still increment the complete count + - Instead, you should be using the `hasExited()` instead of `hasCompleted()` which is used to find out if everything passed successfully + +## v1.6.4 May 30, 2012 +- `balUtilFlow` changes: + - Added `flow({object,action,[args],[tasks],next})` to simplify calling a series of functions of an object + - `Group` changes: + - If complete callback is called with an error, it'll still increment the complete count (it didn't before) + - Added `hasExited()` +- `balUtilPaths` changes: + - `writeFile` will now call `ensurePath` before writing the file + +## v1.6.3 May 22, 2012 +- `balUtilPaths` changes: + - Fixed a problem introduced with v1.6.0 with `isDirectory` not opening the file before closing it + - If the number of open files becomes a negative number, we will now throw an error + - Decreased the max amount of allowed open files from `500` to `100` + - Increased the wait time for opening a file from `50` to `100` + - This is now customisable through the global `waitingToOpenFileDelay` + +## v1.6.2 May 13, 2012 +- Added support for `balUtilFlow` and `balUtilTypes` to be used inside web browsers + +## v1.6.1 May 4, 2012 +- `balUtilPaths` changes: + - Fixed `initNodeModules` + +## v1.6.0 May 4, 2012 +- We now pre-compile our coffee-script +- `balUtilPaths` changes: + - Added `readFile`, `writeFile`, `mkdir`, `stat`, `readdir`, `unlink`, `rmdir` + - Renamed `rmdir` to `rmdirDeep` +- `balUtilModules` changes: + - Removed `initGitSubmodules`, `gitPull` + - Added `initGitRepo` + - Rewrote `initNodeModules` + +## v1.5.0 April 18, 2012 +- `balUtilPaths` changes: + - `scan` was removed, not sure what it was used for + - `isDirectory` now returns the `fileStat` argument to the callback + - `scandir` changes: + - `ignorePatterns` option when set to true now uses the new `balUtilPaths.commonIgnorePatterns` property + - fixed error throwing when passed an invalid path + - now supports a new `stat` option + - will return the `fileStat` argument to the `fileAction` and `dirAction` callbacks + - `ignorePatterns` and `ignoreHiddenFiles` will now correctly be passed to child scandir calls + - `cpdir` and `rpdir` now uses `path.join` and support `ignoreHiddenFiles` and `ignorePatterns` + - `writetree` now uses `path.join` + +## v1.4.3 April 14, 2012 +- CoffeeScript dependency is now bundled +- Fixed incorrect octal `0700` should have been `700` + +## v1.4.2 April 5, 2012 +- Fixed a failing test due to the `bal-util.npm` to `bal-util` rename +- Improvements to `balUtilModules.spawn` + - will only return an error if the exit code was `1` + - will also contain the `code` and `signal` with the results + - `results[x][0]` is now the stderr string, rather than an error object + +## v1.4.1 April 5, 2012 +- Added `spawn` to `balUtilModules` +- Added `ignoreHiddenFiles` option to `balUtilPaths.scandir` + +## v1.4.0 April 2, 2012 +- Renamed `balUtilGroups` to `balUtilFlow` +- Added `toString`, `isArray` and `each` to `balUtilFlow` +- Added `rpdir`, `empty`, and `isPathOlderThan` to `balUtilPaths` + +## v1.3.0 February 26, 2012 +- Added `openFile` and `closeFile` to open and close files safely (always stays below the maximum number of allowed open files) +- Updated all path utilities to use `openFile` and `closeFile` +- Added npm scripts + +## v1.2.0 February 14, 2012 +- Removed single and multi modes from `exec`, now always returns the same consistent `callback(err,results)` instead + +## v1.1.0 February 6, 2012 +- Modularized +- Added [docco](http://jashkenas.github.com/docco/) docs + +## v1.0 February 5, 2012 +- Moved unit tests to [Mocha](http://visionmedia.github.com/mocha/) + - Offers more flexible unit testing + - Offers better guarantees that tests actually ran, and that they actually ran correctly +- Added `readPath` and `scantree` +- Added `readFiles` option to `scandir` +- `scandir` now supports arguments in object format +- Removed `parallel` +- Tasks inside groups now are passed `next` as there only argument +- Removed `resolvePath`, `expandPath` and `expandPaths`, they were essentially the same as `path.resolve` +- Most functions will now chain +- `comparePackage` now supports comparing two local, or two remote packages +- Added `gitPull` + +## v0.9 January 18, 2012 +- Added `exec`, `initNodeModules`, `initGitSubmodules`, `EventSystem.when` +- Added support for no callbacks + +## v0.8 November 2, 2011 +- Considerable improvements to `scandir`, `cpdir` and `rmdir` + - Note, passing `false` as the file or dir actions will now skip all of that type. Pass `null` if you do not want that. + - `dirAction` is now fired before we read the directories children, if you want it to fire after then in the next callback, pass a callback in the 3rd argument. See `rmdir` for an example of this. +- Fixed npm web to url warnings + +## v0.7 October 3, 2011 +- Added `versionCompare` and `packageCompare` functions + - Added `request` dependency + +## v0.6 September 14, 2011 +- Updated `util.Group` to support `async` and `sync` grouping + +## v0.4 June 2, 2011 +- Added util.type for testing the type of a variable +- Added util.expandPath and util.expandPaths + +## v0.3 June 1, 2011 +- Added util.Group class for your async needs :) + +## v0.2 May 20, 2011 +- Added some tests with expresso +- util.scandir now returns err,list,tree +- Added util.writetree + +## v0.1 May 18, 2011 +- Initial commit diff --git a/node_modules/scandirectory/LICENSE.md b/node_modules/scandirectory/LICENSE.md new file mode 100644 index 000000000..93b675f29 --- /dev/null +++ b/node_modules/scandirectory/LICENSE.md @@ -0,0 +1,18 @@ + + + +# License + +Copyright © 2011+ Benjamin Lupton (http://balupton.com) +
    Copyright © 2014+ Bevry Pty Ltd (http://bevry.me) + +## The MIT License +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. + + + + diff --git a/node_modules/scandirectory/README.md b/node_modules/scandirectory/README.md new file mode 100755 index 000000000..082ec3e9d --- /dev/null +++ b/node_modules/scandirectory/README.md @@ -0,0 +1,140 @@ + + + +# scandirectory + + + + + + +[![Build Status](https://img.shields.io/travis/bevry/scandirectory/master.svg)](http://travis-ci.org/bevry/scandirectory "Check this project's build status on TravisCI") +[![NPM version](https://img.shields.io/npm/v/scandirectory.svg)](https://npmjs.org/package/scandirectory "View this project on NPM") +[![NPM downloads](https://img.shields.io/npm/dm/scandirectory.svg)](https://npmjs.org/package/scandirectory "View this project on NPM") +[![Dependency Status](https://img.shields.io/david/bevry/scandirectory.svg)](https://david-dm.org/bevry/scandirectory) +[![Dev Dependency Status](https://img.shields.io/david/dev/bevry/scandirectory.svg)](https://david-dm.org/bevry/scandirectory#info=devDependencies)
    +[![Gratipay donate button](https://img.shields.io/gratipay/bevry.svg)](https://www.gratipay.com/bevry/ "Donate weekly to this project using Gratipay") +[![Flattr donate button](https://img.shields.io/badge/flattr-donate-yellow.svg)](http://flattr.com/thing/344188/balupton-on-Flattr "Donate monthly to this project using Flattr") +[![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QB8GQPZAH84N6 "Donate once-off to this project using Paypal") +[![BitCoin donate button](https://img.shields.io/badge/bitcoin-donate-yellow.svg)](https://coinbase.com/checkouts/9ef59f5479eec1d97d63382c9ebcb93a "Donate once-off to this project using BitCoin") +[![Wishlist browse button](https://img.shields.io/badge/wishlist-donate-yellow.svg)](http://amzn.com/w/2F8TXKSNAFG4V "Buy an item on our wishlist for us") + + + + + + +Scan a directory recursively with a lot of control and power + + + + + + +## Install + +### [NPM](http://npmjs.org/) +- Use: `require('scandirectory')` +- Install: `npm install --save scandirectory` + + + + +## Usage + +- `scandir(path, opts, next?)`` +- `scandir(opts, next?)`` + +Options: + +- `path`: the path you want to read +- `action`: (default null) can be null or a function to use for both the fileAction and dirAction +- `fileAction`: (default null) can be null or a function to run against each file, in the following format: + - `fileAction(fileFullPath, fileRelativePath, next(err,skip), fileStat)`` +- `dirAction`: (default null) can be null or a function to run against each directory, in the following format: + - `dirAction(fileFullPath, fileRelativePath, next(err,skip), fileStat)`` +- `next`: (default null) can be null or a function to run after the entire directory has been scanned, in the following format: + - `next(err, list, tree)`` +- `stat`: (default null) can be null or a file stat object for the path if we already have one (not actually used yet) +- `recurse`: (default true) can be null or a boolean for whether or not to scan subdirectories too +- `readFiles`: (default false) can be null or a boolean for whether or not we should read the file contents +- `ignorePaths`: (default false) can be null or an array of paths that we should ignore +- `ignoreHiddenFiles`: (default false) can be null or a boolean for if we should ignore files starting with a dot +- `ignoreCommonPatterns`: (default false) can be null or a boolean or a regex + - if null, becomes true + - if false, does not do any ignore patterns + - if true, defaults to bevry/ignorepatterns + - if regex, uses this value instead of bevry/ignorepatterns +- `ignoreCustomPatterns`: (default false) can be null or a boolean or a regex (same as ignoreCommonPatterns but for ignoreCustomPatterns instead) + +Next Callback Arguments: + +- `err`: null, or an error that has occured +- `list`: a collection of all the child nodes in a list/object format: + - `{fileRelativePath: 'dir|file'}` +- `tree`: a colleciton of all the child nodes in a tree format: + - `{dir: {dir:{}, file1:true} }` + - if the readFiles option is true, then files will be returned with their contents instead + + + + +## Contribute + +[Discover how you can contribute by heading on over to the `CONTRIBUTING.md` file.](https://github.com/bevry/scandirectory/blob/master/CONTRIBUTING.md#files) + + + + + + +## History +[Discover the change history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/scandirectory/blob/master/HISTORY.md#files) + + + + + + +## Backers + +### Maintainers + +These amazing people are maintaining this project: + +- Benjamin Lupton (https://github.com/balupton) + +### Sponsors + +No sponsors yet! Will you be the first? + +[![Gratipay donate button](https://img.shields.io/gratipay/bevry.svg)](https://www.gratipay.com/bevry/ "Donate weekly to this project using Gratipay") +[![Flattr donate button](https://img.shields.io/badge/flattr-donate-yellow.svg)](http://flattr.com/thing/344188/balupton-on-Flattr "Donate monthly to this project using Flattr") +[![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QB8GQPZAH84N6 "Donate once-off to this project using Paypal") +[![BitCoin donate button](https://img.shields.io/badge/bitcoin-donate-yellow.svg)](https://coinbase.com/checkouts/9ef59f5479eec1d97d63382c9ebcb93a "Donate once-off to this project using BitCoin") +[![Wishlist browse button](https://img.shields.io/badge/wishlist-donate-yellow.svg)](http://amzn.com/w/2F8TXKSNAFG4V "Buy an item on our wishlist for us") + +### Contributors + +These amazing people have contributed code to this project: + +- [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/scandirectory/commits?author=balupton) +- [sfrdmn](https://github.com/sfrdmn) — [view contributions](https://github.com/bevry/scandirectory/commits?author=sfrdmn) + +[Become a contributor!](https://github.com/bevry/scandirectory/blob/master/CONTRIBUTING.md#files) + + + + + + +## License + +Licensed under the incredibly [permissive](http://en.wikipedia.org/wiki/Permissive_free_software_licence) [MIT license](http://creativecommons.org/licenses/MIT/) + +Copyright © 2011+ Benjamin Lupton (http://balupton.com) +
    Copyright © 2014+ Bevry Pty Ltd (http://bevry.me) + + + + diff --git a/node_modules/scandirectory/node_modules/ambi/.npmignore b/node_modules/scandirectory/node_modules/ambi/.npmignore new file mode 100644 index 000000000..9a433ef95 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/.npmignore @@ -0,0 +1,43 @@ +# 2015 March 8 +# https://github.com/bevry/base + +# Temp Files +**/.docpad.db +**/out.* +**/*.log +**/*.cpuprofile +**/*.heapsnapshot + +# Build Files +build/ +components/ +bower_components/ +node_modules/ + +# Private Files +.env + +# Development Files +.editorconfig +.eslintrc* +.jshintrc +.jscrc +coffeelint* +.travis* +nakefile* +Cakefile +Makefile +BACKERS.md +CONTRIBUTING.md +HISTORY.md +**/test* + +# Other Package Definitions +template.js +component.json +bower.json + +# ===================================== +# CUSTOM MODIFICATIONS + +# None diff --git a/node_modules/scandirectory/node_modules/ambi/HISTORY.md b/node_modules/scandirectory/node_modules/ambi/HISTORY.md new file mode 100755 index 000000000..1b149de23 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/HISTORY.md @@ -0,0 +1,49 @@ +# History + +# v2.5.0 2015 December 9 +- No code changes in this release, just updated packaging +- Now uses [Editions](https://github.com/bevry/editions) instead of [ESNextGuardian](https://github.com/bevry/esnextguardian) +- Update dependencies + +# v2.4.0 2015 December 9 +- Dropped Node 0.10 support, minimum node version supported is now 0.12 +- Updated dependencies + +# v2.3.0 2015 September 5 +- Moved from CoffeeScript to ES6+ +- Removed `cyclic.js` as it should no longer be needed + +# v2.2.0 2013 May 7 +- We no longer send the completion callback to functions executing synchronously +- We now support optional arguments for functions executing asynchronously + +# v2.1.6 2013 November 1 +- Dropped component.io and bower support, just use ender or browserify + +# v2.1.5 2013 October 27 +- Re-packaged + +# v2.1.4 2013 September 18 +- Fixed cyclic dependency problem on windows (since v2.1.3) +- Added bower support + +# v2.1.3 2013 September 18 +- Attempt at fixing circular dependency infinite loop (since v2.1.2) + +# v2.1.2 2013 September 18 +- Added component.io support + +# v2.1.1 2013 August 19 +- Republish with older verson of joe dev dependency to try and stop cyclic errors + +# v2.1.0 2013 August 19 +- will now always return `null` for consistency + - as return values are only possible with synchronous methods +- will now ignore returned errors on asynchronous functions + - asynchronous errors must now give the error via the completion callback + - this is to avoid the possibility of the completion callback being called twice (once for the returned error via ambi, once via your application) +- will now ignore thown errors + - this was determined to be outside the scope of ambi, if you want this functionality use the more full featured [taskgroup package](http://npmjs.org/package/taskgroup) + +# v2.0.0 2013 March 27 +- Split away from [bal-util](https://github.com/balupton/bal-util) diff --git a/node_modules/scandirectory/node_modules/ambi/LICENSE.md b/node_modules/scandirectory/node_modules/ambi/LICENSE.md new file mode 100644 index 000000000..f616c0a06 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/LICENSE.md @@ -0,0 +1,24 @@ + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

    MIT License

    + +
    +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.
    +
    + + diff --git a/node_modules/scandirectory/node_modules/ambi/README.md b/node_modules/scandirectory/node_modules/ambi/README.md new file mode 100755 index 000000000..4be7b4a72 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/README.md @@ -0,0 +1,179 @@ + + +

    ambi

    + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Slack community badge +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + + + + + + +Execute a function ambidextrously (normalizes the differences between synchronous and asynchronous functions). Useful for treating synchronous functions as asynchronous functions (like supporting both synchronous and asynchronous event definitions automatically). + + + + + + +

    Install

    + +

    NPM

      +
    • Install: npm install --save ambi
    • +
    • Module: require('ambi')
    + +

    Browserify

      +
    • Install: npm install --save ambi
    • +
    • Module: require('ambi')
    • +
    • CDN URL: //wzrd.in/bundle/ambi@2.5.0
    + +

    Ender

      +
    • Install: ender add ambi
    • +
    • Module: require('ambi')
    + +

    Editions

    + +

    This package is published with the following editions:

    + +
    • ambi aliases ambi/index.js which uses Editions to automatically select the correct edition for the consumers environment
    • +
    • ambi/source/index.js is Source + ESNext + Require
    • +
    • ambi/es2015/index.js is Babel Compiled + ES2015 + Require
    + +

    Older environments may need Babel's Polyfill or something similar.

    + + + + +## Usage + +### Example + +``` javascript +// Import +const ambi = require('ambi') +let result = null + +// Sample methods +function syncMethod (x, y) { + return x * y +} +function asyncMethod (x, y, next) { + return setTimeout(function () { + next(null, x * y) + }, 0) +} + +// Call the synchronous function asynchronously +// ambi adds support for this asynchronous callback automatically +result = ambi(syncMethod, 5, 2, function(err, result) { + console.log(err, result) // null, 10 +}) +console.log(result) // 10 - just like normal + +// Call the asynchronous function asynchronously +// ambi doesn't do anything special here +result = ambi(asyncMethod, 5, 2, function (err, result) { + console.log(err, result) // null, 10 +}) +console.log(result) // setTimeout - just like normal +``` + + + +### Notes + +- Ambi accepts the arguments `(method, ...args)` + - `method` is the function to execute + - `...args` is the arguments to send to the method + - the last argument is expected to be the completion callback + - the completion callback is optional, but if defined, is expected to have the signature of `(err, ...results)` +- If the method has equal or more arguments than ambi received, then we assume it is an asynchronous method and let it handle calling of the completion callback itself +- If the method has less arguments than ambi received, then we assume it is a synchronous method and we'll call the completion callback ourselves + - If the synchronous method throws an error or returns an error, we'll try to call the completion callback with a single `err` argument + - If the synchronous method executes without error, we'll try to call the completion callback with a `err` argument equal to null, and a `result` argument equal to the returned result of the synchronous method +- Ambi can also introspect a different method than the one it fires, by passing `[methodToFire, methodToIntrospect]` as the `method` argument + + + + +

    History

    + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

    Contribute

    + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    Backers

    + +

    Maintainers

    + +These amazing people are maintaining this project: + + + +

    Sponsors

    + +No sponsors yet! Will you be the first? + +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

    Contributors

    + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/scandirectory/node_modules/ambi/es2015/index.js b/node_modules/scandirectory/node_modules/ambi/es2015/index.js new file mode 100755 index 000000000..4841572d6 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/es2015/index.js @@ -0,0 +1,122 @@ +'use strict'; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +// Import +var typeChecker = require('typechecker'); + +// Define +module.exports = function ambi(method) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // Prepare + var fireMethod = void 0, + introspectMethod = void 0; + + // If binding has occured then make sure we are introspecting the write method + // by allowing the user to pass method as an array of two methods + // the method to fire, and the method to introspect + if (typeChecker.isArray(method)) { + var _method = _slicedToArray(method, 2); + + fireMethod = _method[0]; + introspectMethod = _method[1]; + } else { + fireMethod = introspectMethod = method; + } + + // Extract the preceeding arguments and the completion callback + var simpleArguments = args.slice(0, -1); + var completionCallback = args.slice(-1)[0]; + + // Check the completion callback is actually a function + if (!typeChecker.isFunction(completionCallback)) { + throw new Error('ambi was called without a completion callback'); + } + + /* + Different ways functions can be called: + ambi(function(a,next){return next()}, a, next) + > VALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (a, next) + ambi(function(a,next){return next()}, next) + > VALID: execute asynchronously + > given arguments are LESS than the accepted arguments + > method will be fired with (undefined, next) + ambi(function(a){}, a, next) + > VALID: execute synchronously + > given arguments are MORE than expected arguments + > method will be fired with (a) + ambi(function(a){}, next) + > INVALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (next) + > if they want to use optional args, the function must accept a completion callback + */ + var givenArgumentsLength = args.length; + var acceptedArgumentsLength = introspectMethod.length; + var argumentsDifferenceLength = null; + var executeAsynchronously = null; + + // Given arguments are SAME as the expected arguments + // This will execute asynchronously + // Don't have to do anything with the arguments + if (givenArgumentsLength === acceptedArgumentsLength) { + executeAsynchronously = true; + } + + // Given arguments are LESS than the expected arguments + // This will execute asynchronously + // We will need to supplement any missing expected arguments with undefined + // to ensure the compeltion callback is in the right place in the arguments listing + else if (givenArgumentsLength < acceptedArgumentsLength) { + executeAsynchronously = true; + argumentsDifferenceLength = acceptedArgumentsLength - givenArgumentsLength; + args = simpleArguments.slice().concat(new Array(argumentsDifferenceLength)).concat([completionCallback]); + } + + // Given arguments are MORE than the expected arguments + // This will execute synchronously + // We should to trim off the completion callback from the arguments + // as the synchronous function won't care for it + // while this isn't essential + // it will provide some expectation for the user as to which mode their function was executed in + else { + executeAsynchronously = false; + args = simpleArguments.slice(); + } + + // Execute with the exceptation that the method will fire the completion callback itself + if (executeAsynchronously) { + // Fire the method + fireMethod.apply(undefined, _toConsumableArray(args)); + } + + // Execute with the expectation that we will need to fire the completion callback ourselves + // Always call the completion callback ourselves as the fire method does not make use of it + else { + // Fire the method and check for returned errors + var result = fireMethod.apply(undefined, _toConsumableArray(args)); + + // Check the result for a returned error + if (typeChecker.isError(result)) { + // An error was returned so fire the completion callback with the error + var err = result; + completionCallback(err); + } else { + // Everything worked, so fire the completion callback without an error and with the result + completionCallback(null, result); + } + } + + // Return nothing as we expect ambi to deal with synchronous and asynchronous methods + // so returning something will only work for synchronous methods + // and not asynchronous ones + // so returning anything would be inconsistent + return null; +}; \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/ambi/index.js b/node_modules/scandirectory/node_modules/ambi/index.js new file mode 100644 index 000000000..3bdc0efd9 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/index.js @@ -0,0 +1,3 @@ +// 2016 March 8 +// https://github.com/bevry/editions +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/scandirectory/node_modules/ambi/package.json b/node_modules/scandirectory/node_modules/ambi/package.json new file mode 100644 index 000000000..5767744e5 --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/package.json @@ -0,0 +1,118 @@ +{ + "name": "ambi", + "version": "2.5.0", + "description": "Execute a function ambidextrously (normalizes the differences between synchronous and asynchronous functions). Useful for treating synchronous functions as asynchronous functions (like supporting both synchronous and asynchronous event definitions automatically).", + "homepage": "https://github.com/bevry/ambi", + "license": "MIT", + "keywords": [ + "sync", + "async", + "fire", + "exec", + "execute", + "ambidextrous", + "flow" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "slackin", + "patreon", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist" + ], + "config": { + "patreonUsername": "bevry", + "gratipayUsername": "bevry", + "flattrUsername": "balupton", + "paypalURL": "https://bevry.me/paypal", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Sean Fridman (http://seanfridman.com)", + "Benjamin Lupton (https://balupton.com)" + ], + "bugs": { + "url": "https://github.com/bevry/ambi/issues" + }, + "repository": { + "type": "git", + "url": "http://github.com/bevry/ambi.git" + }, + "engines": { + "node": ">=0.12" + }, + "editions": [ + { + "description": "Source + ESNext + Require", + "entry": "source/index.js", + "directory": "source", + "syntaxes": [ + "javascript", + "esnext", + "require", + "const", + "let", + "rest", + "spread" + ] + }, + { + "description": "Babel Compiled + ES2015 + Require", + "entry": "es2015/index.js", + "directory": "es2015", + "syntaxes": [ + "javascript", + "es2015", + "require" + ] + } + ], + "main": "index.js", + "browser": "es2015/index.js", + "scripts": { + "setup": "npm install", + "clean": "rm -Rf ./docs ./es2015", + "compile": "npm run compile:es2015", + "compile:es2015": "babel ./source --out-dir ./es2015 --presets es2015", + "meta": "npm run meta:projectz", + "meta:projectz": "projectz compile", + "prepare": "npm run compile && npm run test && npm run meta", + "release": "npm run prepare && npm run release:publish && npm run release:tag && npm run release:push", + "release:publish": "npm publish", + "release:tag": "git tag v$npm_package_version -a", + "release:push": "git push origin master && git push origin --tags", + "pretest": "npm run test:eslint", + "test:eslint": "eslint ./source", + "test": "node --harmony -e \"require('editions').requirePackage(process.cwd(), require, 'test.js')\"" + }, + "dependencies": { + "editions": "^1.1.1", + "typechecker": "^4.3.0" + }, + "devDependencies": { + "assert-helpers": "^4.2.0", + "babel-cli": "^6.8.0", + "babel-preset-es2015": "^6.6.0", + "eslint": "^2.10.0", + "joe": "^1.6.0", + "joe-reporter-console": "^1.2.1", + "projectz": "^1.1.5" + } +} diff --git a/node_modules/scandirectory/node_modules/ambi/source/index.js b/node_modules/scandirectory/node_modules/ambi/source/index.js new file mode 100755 index 000000000..6df6b5ebb --- /dev/null +++ b/node_modules/scandirectory/node_modules/ambi/source/index.js @@ -0,0 +1,110 @@ +// Import +const typeChecker = require('typechecker') + +// Define +module.exports = function ambi (method, ...args) { + // Prepare + let fireMethod, introspectMethod + + // If binding has occured then make sure we are introspecting the write method + // by allowing the user to pass method as an array of two methods + // the method to fire, and the method to introspect + if ( typeChecker.isArray(method) ) { + [fireMethod, introspectMethod] = method + } + else { + fireMethod = introspectMethod = method + } + + // Extract the preceeding arguments and the completion callback + const simpleArguments = args.slice(0, -1) + const completionCallback = args.slice(-1)[0] + + // Check the completion callback is actually a function + if ( !typeChecker.isFunction(completionCallback) ) { + throw new Error('ambi was called without a completion callback') + } + + /* + Different ways functions can be called: + ambi(function(a,next){return next()}, a, next) + > VALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (a, next) + ambi(function(a,next){return next()}, next) + > VALID: execute asynchronously + > given arguments are LESS than the accepted arguments + > method will be fired with (undefined, next) + ambi(function(a){}, a, next) + > VALID: execute synchronously + > given arguments are MORE than expected arguments + > method will be fired with (a) + ambi(function(a){}, next) + > INVALID: execute asynchronously + > given arguments are SAME as the accepted arguments + > method will be fired with (next) + > if they want to use optional args, the function must accept a completion callback + */ + const givenArgumentsLength = args.length + const acceptedArgumentsLength = introspectMethod.length + let argumentsDifferenceLength = null + let executeAsynchronously = null + + // Given arguments are SAME as the expected arguments + // This will execute asynchronously + // Don't have to do anything with the arguments + if ( givenArgumentsLength === acceptedArgumentsLength ) { + executeAsynchronously = true + } + + // Given arguments are LESS than the expected arguments + // This will execute asynchronously + // We will need to supplement any missing expected arguments with undefined + // to ensure the compeltion callback is in the right place in the arguments listing + else if ( givenArgumentsLength < acceptedArgumentsLength ) { + executeAsynchronously = true + argumentsDifferenceLength = acceptedArgumentsLength - givenArgumentsLength + args = simpleArguments.slice().concat(new Array(argumentsDifferenceLength)).concat([completionCallback]) + } + + // Given arguments are MORE than the expected arguments + // This will execute synchronously + // We should to trim off the completion callback from the arguments + // as the synchronous function won't care for it + // while this isn't essential + // it will provide some expectation for the user as to which mode their function was executed in + else { + executeAsynchronously = false + args = simpleArguments.slice() + } + + // Execute with the exceptation that the method will fire the completion callback itself + if ( executeAsynchronously ) { + // Fire the method + fireMethod(...args) + } + + // Execute with the expectation that we will need to fire the completion callback ourselves + // Always call the completion callback ourselves as the fire method does not make use of it + else { + // Fire the method and check for returned errors + const result = fireMethod(...args) + + // Check the result for a returned error + if ( typeChecker.isError(result) ) { + // An error was returned so fire the completion callback with the error + const err = result + completionCallback(err) + } + else { + // Everything worked, so fire the completion callback without an error and with the result + completionCallback(null, result) + } + } + + // Return nothing as we expect ambi to deal with synchronous and asynchronous methods + // so returning something will only work for synchronous methods + // and not asynchronous ones + // so returning anything would be inconsistent + return null +} diff --git a/node_modules/scandirectory/node_modules/editions/.flowconfig b/node_modules/scandirectory/node_modules/editions/.flowconfig new file mode 100644 index 000000000..55dc80ab4 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/.flowconfig @@ -0,0 +1,16 @@ +# 2018 January 24 +# https://github.com/bevry/base +[ignore] +.*/docs/.* +.*/es2015/.* +.*/test/.* +.*/node_modules/documentation/.* +.*/node_modules/projectz/.* + +[options] +module.ignore_non_literal_requires=true +esproposal.class_static_fields=enable +esproposal.class_instance_fields=enable + +[version] +>=0.23 <1 diff --git a/node_modules/scandirectory/node_modules/editions/HISTORY.md b/node_modules/scandirectory/node_modules/editions/HISTORY.md new file mode 100644 index 000000000..bd57575e4 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/HISTORY.md @@ -0,0 +1,44 @@ +# History + +## v1.3.4 2018 January 31 +- Updated base files + +## v1.3.3 2016 November 4 +- Properly add node 0.8 support + +## v1.3.2 2016 November 4 +- Added node 0.8 support + +## v1.3.1 2016 October 11 +- Fixed failure to load editions that had the edition directory within the edition entry + - Thanks to [Jordan Harband](https://github.com/ljharb) for [issue #20](https://github.com/bevry/editions/issues/20) + +## v1.3.0 2016 October 11 +- Added support for `EDITIONS_SYNTAX_BLACKLIST` environment variable + - Thanks to [Damon Maria](https://github.com/damonmaria) for [issue #10](https://github.com/bevry/editions/issues/10) +- Dropped need for `DEBUG_BEVRY_EDITIONS` as failures will not output all the necessary debugging information + +## v1.2.1 2016 October 10 +- Change `esnext` skip from v8 engines < 4 to node engines < 0.12 + +## v1.2.0 2016 October 10 +- Skip syntaxes that require preprocessors +- Skip `import` syntax, as the `module` field inside `package.json` skips the autoloader if supported +- Skip `esnext` syntax on v8 engines < 4 + +## v1.1.2 2016 June 16 +- Parent errors are now displayed in a more sensible way + +## v1.1.1 2016 March 20 +- Errors and debug messages are now more useful + - Closes https://github.com/bevry/editions/issues/5 + +## v1.1.0 2016 March 20 +- Added support for custom entry point overrides +- Debugging goes to `console.error` (stderr) rather than `console.log` (stdout) + - Closes https://github.com/bevry/editions/issues/2 +- Added tests + - Closes https://github.com/bevry/editions/issues/4 + +## v1.0.1 2016 March 9 +- Initial release diff --git a/node_modules/scandirectory/node_modules/editions/LICENSE.md b/node_modules/scandirectory/node_modules/editions/LICENSE.md new file mode 100644 index 000000000..58c05d465 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/LICENSE.md @@ -0,0 +1,23 @@ + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

    MIT License

    + +
    +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.
    +
    + + diff --git a/node_modules/scandirectory/node_modules/editions/README.md b/node_modules/scandirectory/node_modules/editions/README.md new file mode 100644 index 000000000..61a05bc62 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/README.md @@ -0,0 +1,109 @@ + + +

    editions

    + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Patreon donate button +Open Collective donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button +
    +Slack community badge + + + + + + +Publish multiple editions for your JavaScript packages consistently and easily (e.g. source edition, esnext edition, es2015 edition) + + + + +## Discover + +[Watch the talk.](https://youtu.be/IAB8_UlcNWI) + +[Get started with the guides and explanations.](https://github.com/bevry/editions/wiki) + +[View the API documentation.](http://master.editions.bevry.surge.sh/docs/) + + + + +

    History

    + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

    Contribute

    + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    Backers

    + +

    Maintainers

    + +These amazing people are maintaining this project: + + + +

    Sponsors

    + +No sponsors yet! Will you be the first? + +Patreon donate button +Open Collective donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

    Contributors

    + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/scandirectory/node_modules/editions/es2015/index.js b/node_modules/scandirectory/node_modules/editions/es2015/index.js new file mode 100644 index 000000000..7846d8104 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/es2015/index.js @@ -0,0 +1,211 @@ +/* @flow */ +/* eslint no-console:0 */ +'use strict'; + +// Imports + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var pathUtil = require('path'); + +// Helper class to display nested error in a sensible way + +var DetailedError = function (_Error) { + _inherits(DetailedError, _Error); + + function DetailedError(message /* :string */, details /* :Object */) { + _classCallCheck(this, DetailedError); + + Object.keys(details).forEach(function (key) { + var data = details[key]; + var value = require('util').inspect(data.stack || data.message || data); + message += '\n' + key + ': ' + value; + }); + return _possibleConstructorReturn(this, (DetailedError.__proto__ || Object.getPrototypeOf(DetailedError)).call(this, message)); + } + + return DetailedError; +}(Error); + +// Environment fetching + + +var blacklist = process && process.env && process.env.EDITIONS_SYNTAX_BLACKLIST && process.env.EDITIONS_SYNTAX_BLACKLIST.split(','); + +// Cache of which syntax combinations are supported or unsupported, hash of booleans +var syntaxFailedCombitions = {}; // sorted lowercase syntax combination => Error instance of failure +var syntaxBlacklist = {}; +syntaxBlacklist.import = new Error('The import syntax is skipped as the module package.json field eliminates the need for autoloader support'); +syntaxBlacklist.coffeescript = new Error('The coffeescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime'); +syntaxBlacklist.typescript = new Error('The typescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime'); + +// Blacklist non-esnext node versions from esnext +if (process && process.versions && process.versions.node) { + var EARLIEST_ESNEXT_NODE_VERSION = [0, 12]; + var NODE_VERSION = process.versions.node.split('.').map(function (n) { + return parseInt(n, 10); + }); + var ESNEXT_UNSUPPORTED = NODE_VERSION[0] < EARLIEST_ESNEXT_NODE_VERSION[0] || NODE_VERSION[0] === EARLIEST_ESNEXT_NODE_VERSION[0] && NODE_VERSION[1] < EARLIEST_ESNEXT_NODE_VERSION[1]; + if (ESNEXT_UNSUPPORTED) syntaxBlacklist.esnext = new Error('The esnext syntax is skipped on early node versions as attempting to use esnext features will output debugging information on these node versions'); +} + +// Check the environment configuration for a syntax blacklist +if (blacklist) { + for (var i = 0; i < blacklist.length; ++i) { + var syntax = blacklist[i].trim().toLowerCase(); + syntaxBlacklist[syntax] = new DetailedError('The EDITIONS_SYNTAX_BLACKLIST environment variable has blacklisted an edition syntax:', { syntax: syntax, blacklist: blacklist }); + } +} + +/* :: +type edition = { + name:number, + description?:string, + directory?:string, + entry?:string, + syntaxes?:Array +}; +type options = { + cwd?:string, + package?:string, + entry?:string, + require:function +}; +*/ + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {edition} edition - the edition entry + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative or absolute path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEdition(edition /* :edition */, opts /* :options */) /* :any */{ + // Prevent require from being included in debug logs + Object.defineProperty(opts, 'require', { value: opts.require, enumerable: false }); + + // Get the correct entry path + // As older versions o + var cwd = opts.cwd || ''; + var dir = edition.directory || ''; + var entry = opts.entry || edition.entry || ''; + if (dir && entry && entry.indexOf(dir + '/') === 0) entry = entry.substring(dir.length + 1); + // ^ this should not be needed, but as previous versions of editions included the directory inside the entry + // it unfortunately is, as such this is a stepping stone for the new format, the new format being + // if entry is specified by itself, it is cwd => entry + // if entry is specified with a directory, it is cwd => dir => entry + // if entry is not specified but dir is, it is cwd => dir + // if neither entry nor dir are specified, we have a problem + if (!dir && !entry) { + var editionFailure = new DetailedError('Skipped edition due to no entry or directory being specified:', { edition: edition, cwd: cwd, dir: dir, entry: entry }); + throw editionFailure; + } + var entryPath = pathUtil.resolve(cwd, dir, entry); + + // Check syntax support + // Convert syntaxes into a sorted lowercase string + var syntaxes = edition.syntaxes && edition.syntaxes.map(function (i) { + return i.toLowerCase(); + }).sort(); + var syntaxCombination = syntaxes && syntaxes.join(', '); + if (syntaxes && syntaxCombination) { + // Check if any of the syntaxes are unsupported + var unsupportedSyntaxes = syntaxes.filter(function (i) { + return syntaxBlacklist[i.toLowerCase()]; + }); + if (unsupportedSyntaxes.length) { + var _editionFailure = new DetailedError('Skipped edition due to it containing an unsupported syntax:', { edition: edition, unsupportedSyntaxes: unsupportedSyntaxes }); + throw _editionFailure; + } + // Is this syntax combination unsupported? If so skip it with a soft failure to try the next edition + else if (syntaxFailedCombitions[syntaxCombination]) { + var previousCombinationFailure = syntaxFailedCombitions[syntaxCombination]; + var _editionFailure2 = new DetailedError('Skipped edition due to its syntax combinatiom failing previously:', { edition: edition, previousCombinationFailure: previousCombinationFailure }); + throw _editionFailure2; + } + } + + // Try and load this syntax combination + try { + return opts.require(entryPath); + } catch (error) { + // Note the error with more details + var _editionFailure3 = new DetailedError('Failed to load the edition due to a load error:', { edition: edition, error: error.stack }); + + // Blacklist the combination, even if it may have worked before + // Perhaps in the future note if that if it did work previously, then we should instruct module owners to be more specific with their syntaxes + if (syntaxCombination) syntaxFailedCombitions[syntaxCombination] = _editionFailure3; + + // Continue to the next edition + throw _editionFailure3; + } +} + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {Array} editions - an array of edition entries + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEditions(editions /* :Array */, opts /* :options */) /* :any */{ + // Extract + if (opts.package == null) opts.package = 'custom runtime package'; + + // Check + if (!editions || editions.length === 0) { + throw new DetailedError('No editions were specified:', { opts: opts }); + } + + // Note the last error message + var editionFailures = []; + + // Cycle through the editions + for (var _i = 0; _i < editions.length; ++_i) { + var edition = editions[_i]; + try { + return requireEdition(edition, opts); + } catch (err) { + editionFailures.push(err); + } + } + + // Through the error as no edition loaded + throw new DetailedError('There are no suitable editions for this environment:', { opts: opts, editions: editions, failures: editionFailures }); +} + +/** + * Cycle through the editions for a package and require the correct one + * @param {string} cwd - the path of the package, used to load package.json:editions and handle relative edition entry points + * @param {function} require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [entry] - an optional override for the entry of an edition, requires the edition to specify a `directory` property + * @returns {*} + */ +function requirePackage(cwd /* :string */, require /* :function */, entry /* :: ?:string */) /* :any */{ + // Load the package.json file to fetch `name` for debugging and `editions` for loading + var packagePath = pathUtil.resolve(cwd, 'package.json'); + + var _require = require(packagePath), + name = _require.name, + editions = _require.editions; + + var opts /* :options */ = { cwd: cwd, require: require }; + if (name) opts.package = name; + if (entry) opts.entry = entry; + return requireEditions(editions, opts); +} + +// Exports +module.exports = { requireEdition: requireEdition, requireEditions: requireEditions, requirePackage: requirePackage }; \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/editions/package.json b/node_modules/scandirectory/node_modules/editions/package.json new file mode 100644 index 000000000..93f76df55 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/package.json @@ -0,0 +1,128 @@ +{ + "name": "editions", + "version": "1.3.4", + "description": "Publish multiple editions for your JavaScript packages consistently and easily (e.g. source edition, esnext edition, es2015 edition)", + "homepage": "https://github.com/bevry/editions", + "license": "MIT", + "keywords": [ + "editions", + "edition", + "versions", + "syntaxes", + "esnext", + "jsnext", + "es2015", + "es6", + "es6+" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "opencollective", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist", + "---", + "slackin" + ], + "config": { + "patreonUsername": "bevry", + "opencollectiveUsername": "bevry", + "gratipayUsername": "bevry", + "flattrUsername": "balupton", + "paypalURL": "https://bevry.me/paypal", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "author": "2016+ Bevry Pty Ltd (http://bevry.me)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Zlatan Vasović (http://zdroid.github.io)" + ], + "bugs": { + "url": "https://github.com/bevry/editions/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/editions.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "Source + ESNext + Require + Flow Type Comments", + "directory": "source", + "entry": "index.js", + "syntaxes": [ + "javascript", + "esnext", + "require", + "arrows", + "destructuring", + "const", + "let", + "flow type comments" + ] + }, + { + "description": "Babel Compiled + ES2015 + Require", + "directory": "es2015", + "entry": "index.js", + "syntaxes": [ + "javascript", + "es2015", + "require" + ] + } + ], + "main": "es2015/index.js", + "dependencies": {}, + "devDependencies": { + "assert-helpers": "^4.5.1", + "babel-cli": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "documentation": "^5.3.5", + "eslint": "^4.16.0", + "flow-bin": "^0.64.0", + "joe": "^2.0.2", + "joe-reporter-console": "^2.0.1", + "projectz": "^1.4.0", + "surge": "^0.19.0" + }, + "scripts": { + "our:setup": "npm run our:setup:npm", + "our:setup:npm": "npm install", + "our:clean": "rm -Rf ./docs ./es2015 ./es5 ./out", + "our:compile": "npm run our:compile:es2015", + "our:compile:es2015": "babel ./source --out-dir ./es2015 --presets es2015", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:docs": "documentation build -f html -o ./docs -g --shallow ./source/**.js", + "our:meta:projectz": "projectz compile", + "our:verify": "npm run our:verify:eslint && npm run our:verify:flow", + "our:verify:eslint": "eslint --fix ./source", + "our:verify:flow": "flow check", + "our:test": "npm run our:verify && npm test", + "our:release": "npm run our:release:prepare && npm run our:release:check && npm run our:release:tag && npm run our:release:push", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:check": "npm run our:release:check:changelog && npm run our:release:check:dirty", + "our:release:check:changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check:dirty": "git diff --exit-code", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:release:push": "git push origin master && git push origin --tags", + "test": "node --harmony ./es2015/test.js --joe-reporter=console" + } +} diff --git a/node_modules/scandirectory/node_modules/editions/source/index.js b/node_modules/scandirectory/node_modules/editions/source/index.js new file mode 100644 index 000000000..51ac1adc8 --- /dev/null +++ b/node_modules/scandirectory/node_modules/editions/source/index.js @@ -0,0 +1,190 @@ +/* @flow */ +/* eslint no-console:0 */ +'use strict' + +// Imports +const pathUtil = require('path') + +// Helper class to display nested error in a sensible way +class DetailedError extends Error { + constructor (message /* :string */, details /* :Object */) { + Object.keys(details).forEach(function (key) { + const data = details[key] + const value = require('util').inspect(data.stack || data.message || data) + message += `\n${key}: ${value}` + }) + super(message) + } +} + +// Environment fetching +const blacklist = process && process.env && process.env.EDITIONS_SYNTAX_BLACKLIST && process.env.EDITIONS_SYNTAX_BLACKLIST.split(',') + +// Cache of which syntax combinations are supported or unsupported, hash of booleans +const syntaxFailedCombitions = {} // sorted lowercase syntax combination => Error instance of failure +const syntaxBlacklist = {} +syntaxBlacklist.import = new Error('The import syntax is skipped as the module package.json field eliminates the need for autoloader support') +syntaxBlacklist.coffeescript = new Error('The coffeescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime') +syntaxBlacklist.typescript = new Error('The typescript syntax is skipped as we want to use a precompiled edition rather than compiling at runtime') + +// Blacklist non-esnext node versions from esnext +if ( process && process.versions && process.versions.node ) { + const EARLIEST_ESNEXT_NODE_VERSION = [0, 12] + const NODE_VERSION = process.versions.node.split('.').map((n) => parseInt(n, 10)) + const ESNEXT_UNSUPPORTED = NODE_VERSION[0] < EARLIEST_ESNEXT_NODE_VERSION[0] || ( + NODE_VERSION[0] === EARLIEST_ESNEXT_NODE_VERSION[0] && + NODE_VERSION[1] < EARLIEST_ESNEXT_NODE_VERSION[1] + ) + if ( ESNEXT_UNSUPPORTED ) syntaxBlacklist.esnext = new Error('The esnext syntax is skipped on early node versions as attempting to use esnext features will output debugging information on these node versions') +} + +// Check the environment configuration for a syntax blacklist +if ( blacklist ) { + for ( let i = 0; i < blacklist.length; ++i ) { + const syntax = blacklist[i].trim().toLowerCase() + syntaxBlacklist[syntax] = new DetailedError('The EDITIONS_SYNTAX_BLACKLIST environment variable has blacklisted an edition syntax:', {syntax, blacklist}) + } +} + +/* :: +type edition = { + name:number, + description?:string, + directory?:string, + entry?:string, + syntaxes?:Array +}; +type options = { + cwd?:string, + package?:string, + entry?:string, + require:function +}; +*/ + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {edition} edition - the edition entry + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative or absolute path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEdition ( edition /* :edition */, opts /* :options */ ) /* :any */ { + // Prevent require from being included in debug logs + Object.defineProperty(opts, 'require', {value: opts.require, enumerable: false}) + + // Get the correct entry path + // As older versions o + const cwd = opts.cwd || '' + const dir = edition.directory || '' + let entry = opts.entry || edition.entry || '' + if ( dir && entry && entry.indexOf(dir + '/') === 0 ) entry = entry.substring(dir.length + 1) + // ^ this should not be needed, but as previous versions of editions included the directory inside the entry + // it unfortunately is, as such this is a stepping stone for the new format, the new format being + // if entry is specified by itself, it is cwd => entry + // if entry is specified with a directory, it is cwd => dir => entry + // if entry is not specified but dir is, it is cwd => dir + // if neither entry nor dir are specified, we have a problem + if ( !dir && !entry ) { + const editionFailure = new DetailedError('Skipped edition due to no entry or directory being specified:', {edition, cwd, dir, entry}) + throw editionFailure + } + const entryPath = pathUtil.resolve(cwd, dir, entry) + + // Check syntax support + // Convert syntaxes into a sorted lowercase string + const syntaxes = edition.syntaxes && edition.syntaxes.map((i) => i.toLowerCase()).sort() + const syntaxCombination = syntaxes && syntaxes.join(', ') + if ( syntaxes && syntaxCombination ) { + // Check if any of the syntaxes are unsupported + const unsupportedSyntaxes = syntaxes.filter((i) => syntaxBlacklist[i.toLowerCase()]) + if ( unsupportedSyntaxes.length ) { + const editionFailure = new DetailedError('Skipped edition due to it containing an unsupported syntax:', {edition, unsupportedSyntaxes}) + throw editionFailure + } + // Is this syntax combination unsupported? If so skip it with a soft failure to try the next edition + else if ( syntaxFailedCombitions[syntaxCombination] ) { + const previousCombinationFailure = syntaxFailedCombitions[syntaxCombination] + const editionFailure = new DetailedError('Skipped edition due to its syntax combinatiom failing previously:', {edition, previousCombinationFailure}) + throw editionFailure + } + } + + // Try and load this syntax combination + try { + return opts.require(entryPath) + } + catch ( error ) { + // Note the error with more details + const editionFailure = new DetailedError('Failed to load the edition due to a load error:', {edition, error: error.stack}) + + // Blacklist the combination, even if it may have worked before + // Perhaps in the future note if that if it did work previously, then we should instruct module owners to be more specific with their syntaxes + if ( syntaxCombination ) syntaxFailedCombitions[syntaxCombination] = editionFailure + + // Continue to the next edition + throw editionFailure + } +} + +/** + * Cycle through the editions and require the correct one + * @protected internal function that is untested for public consumption + * @param {Array} editions - an array of edition entries + * @param {Object} opts - the following options + * @param {string} opts.require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [opts.cwd] - if provided, this will be the cwd for entries + * @param {string} [opts.entry] - if provided, should be a relative path to the entry point of the edition + * @param {string} [opts.package] - if provided, should be the name of the package that we are loading the editions for + * @returns {*} + */ +function requireEditions ( editions /* :Array */, opts /* :options */ ) /* :any */ { + // Extract + if ( opts.package == null ) opts.package = 'custom runtime package' + + // Check + if ( !editions || editions.length === 0 ) { + throw new DetailedError('No editions were specified:', {opts}) + } + + // Note the last error message + const editionFailures = [] + + // Cycle through the editions + for ( let i = 0; i < editions.length; ++i ) { + const edition = editions[i] + try { + return requireEdition(edition, opts) + } + catch ( err ) { + editionFailures.push(err) + } + } + + // Through the error as no edition loaded + throw new DetailedError('There are no suitable editions for this environment:', {opts, editions, failures: editionFailures}) +} + +/** + * Cycle through the editions for a package and require the correct one + * @param {string} cwd - the path of the package, used to load package.json:editions and handle relative edition entry points + * @param {function} require - the require method of the calling module, used to ensure require paths remain correct + * @param {string} [entry] - an optional override for the entry of an edition, requires the edition to specify a `directory` property + * @returns {*} + */ +function requirePackage (cwd /* :string */, require /* :function */, entry /* :: ?:string */ ) /* :any */ { + // Load the package.json file to fetch `name` for debugging and `editions` for loading + const packagePath = pathUtil.resolve(cwd, 'package.json') + const {name, editions} = require(packagePath) + const opts /* :options */ = {cwd, require} + if ( name ) opts.package = name + if ( entry ) opts.entry = entry + return requireEditions(editions, opts) +} + +// Exports +module.exports = {requireEdition, requireEditions, requirePackage} diff --git a/node_modules/scandirectory/node_modules/safefs/.npmignore b/node_modules/scandirectory/node_modules/safefs/.npmignore new file mode 100644 index 000000000..a1c6c4bc9 --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/.npmignore @@ -0,0 +1,42 @@ +# 27 March 2015 +# https://github.com/bevry/base + +# Temp Files +**/.docpad.db +**/out.* +**/*.log +**/*.cpuprofile +**/*.heapsnapshot + +# Build Files +build/ +components/ +bower_components/ +node_modules/ + +# Private Files +.env + +# Development Files +.editorconfig +.eslintrc +.jshintrc +coffeelint.json +.travis* +Cakefile +Makefile +BACKERS.md +CONTRIBUTING.md +HISTORY.md +**/src/ +**/test/ + +# Other Package Definitions +template.js +component.json +bower.json + +# ===================================== +# CUSTOM MODIFICATIONS + +# None diff --git a/node_modules/scandirectory/node_modules/safefs/HISTORY.md b/node_modules/scandirectory/node_modules/safefs/HISTORY.md new file mode 100755 index 000000000..69254c34a --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/HISTORY.md @@ -0,0 +1,555 @@ +# History + +## v3.2.2 September 5, 2015 +- Use any version of `graceful-fs` to fix possible compat issues with node <0.10 support + +## v3.2.1 September 5, 2015 +- Fixed node <0.10 support (regression since v3.2.0) + - Unfortunately our dev dependencies don't support this early, so no travis ci tests, manual tests pass + +## v3.2.0 September 5, 2015 +- Moved from CoffeeScript to ES6+ +- Removed `cyclic.js` as it should no longer be needed +- Added tests... finally... + +## v3.1.3 March 18, 2015 +- Updated dependencies + +## v3.1.2 December 12, 2014 +- Updated dependencies + +## v3.1.1 February 5, 2014 +- Safefs no longer fails to extend the safefs object with fs utilities under certain environments + - Thanks to [Merrick Christensen](https://github.com/iammerrick) and [Kyle Robinson Young](https://github.com/shama) for [issue #3](https://github.com/bevry/safefs/issues/3) + +## v3.1.0 December 9, 2013 +- We no longer use our internal queue and now just rely on the graceful-fs queue +- We now alias all the other standard file system methods onto our own object + +## v3.0.6 November 25, 2013 +- Only unlink if the file exists + +## v3.0.5 November 17, 2013 +- Use [graceful-fs](https://github.com/isaacs/node-graceful-fs) under the hood, along with our limiting abilities to help avoid even more problems +- Updated dependencies + +## v3.0.4 November 6, 2013 +- Repackaged +- Updated dependencies + +## v3.0.3 August 29, 2013 +- Added `lstat` functions + - Thanks to [James Gill](https://github.com/jagill) for [pull request #1](https://github.com/bevry/safefs/pull/1) + +## v3.0.2 August 29, 2013 +- Updated dependencies + +## v3.0.1 April 5, 2013 +- Updated dependencies + +## v3.0.0 April 5, 2013 +- Rewrote to use [TaskGroup](https://npmjs.org/package/taskgroup) instead of the manual queue + setTimeout approach we were using before + +## v2.0.3 April 1, 2013 +- Added missing `ensurePath` and `getParentPathSync` + +## v2.0.2 April 1, 2013 +- Added missing `ensurePath` and `getParentPathSync` + +## v2.0.1 March 29, 2013 +- Fixed readme code block + +## v2.0.0 March 29, 2013 +- Split from bal-util + +## v1.17.0 March 27, 2013 +- Killed explicit browser support, use [Browserify](http://browserify.org/) instead +- Removed the `out` directory from git +- Now compiled with the coffee-script bare option + +## v1.16.13 March 23, 2013 +- `balUtilEvents` changes: + - `EventEmitterEnhanced` changes: + - Now works with `once` calls in node 0.10.0 + - Closes [bevry/docpad#462](https://github.com/bevry/docpad/issues/462) + - Changed `emitSync` to be an alias to `emitSerial` and `emitAsync` to be an alias to `emitParallel` + - Added new `getListenerGroup` function +- `balUtilFlow` changes: + - `fireWithOptionalCallback` can now take the method as an array of `[fireMethod,introspectMethod]` useful for pesly binds + +## v1.16.12 March 18, 2013 +- `balUtilFlow` changes: + - `Groups::run` signature changed from no arguments to a single `mode` argument + +## v1.16.11 March 10, 2013 +- `balUtilModules` changes: + - Fixed `getCountryCode` and `getLanguageCode` failing when there is no locale code + +## v1.16.10 March 8, 2013 +- `balUtilModules` changes: + - Fixed `requireFresh` regression, added test + +## v1.16.9 March 8, 2013 +- `balUtilModules` changes: + - Added `getLocaleCode` + - Added `getCountryCode` + - Added `getLanguageCode` + +## v1.16.8 February 16, 2013 +- `balUtilModules` changes: + - `spawnMultiple`, `execMultiple`: now accept a `tasksMode` option that can be `serial` (default) or `parallel` + +## v1.16.7 February 12, 2013 +- `balUtilPaths` changes: + - `readPath`: do not prefer gzip, but still support it for decoding, as the zlib library is buggy + +## v1.16.6 February 12, 2013 +- `balUtilPaths` changes: + - `readPath`: add support for gzip decoding for node 0.6 and higher + +## v1.16.5 February 6, 2013 +- More [browserify](http://browserify.org/) support + +## v1.16.4 February 6, 2013 +- [Browserify](http://browserify.org/) support + +## v1.16.3 February 5, 2013 +- Node v0.4 support +- `balUtilPaths` changes: + - Removed deprecated `console.log`s when errors occur (they are now sent to the callback) + - Fixed `determineExecPath` when executable requires the environment configuration +- `balUtilTypes` changes: + - `isEmptyObject` now works for empty values (e.g. `null`) +- `balUtilFlow` changes: + - Added `clone` + - Added `deepClone` + - `setDeep` and `getDeep` now handle `undefined` values correctly + +## v1.16.2 February 1, 2013 +- `balUtilPaths` changes: + - Added timeout support to `readPath` +- `balUtilFlow` changes: + - Added `setDeep` + - Added `getDeep` + +## v1.16.1 January 25, 2013 +- `balUtilFlow` changes: + - Added `safeShallowExtendPlainObjects` + - Added `safeDeepExtendPlainObjects` + +## v1.16.0 January 24, 2013 +- Node v0.9 compatability +- `balUtilModules` changes: + - Added `getEnvironmentPaths` + - Added `getStandardExecPaths(execName)` + - `exec` now supports the `output` option + - `determineExecPath` now resolves the possible paths and checks for their existance + - This avoids Node v0.9's ENOENT crash when executing a path that doesn't exit + - `getExecPath` will now try for `.exe` paths as well when running on windows if an extension hasn't already been defined + - `getGitPath`, `getNodePath`, `getNpmPath` will now also check the environment paths +- `balUtilFlow` changes: + - Added `createSnore` + - Added `suffixArray` + - `flow` now accepts the signatures `({object,actions,action,args,tasks,next})`, `(object, action, args, next)` and `(actions,args,next)` + - `Group` changes: + - `mode` can now be either `parallel` or `serial`, rather than `async` and `sync` + - `async()` is now `parallel()` (aliased for b/c) + - `sync()` is now `serial()` (aliased for b/c) +- `balUtilTypes` changes: + - Added `isEmptyObject` + +## v1.15.4 January 8, 2013 +- `balUtilPaths` changes: + - Renamed `testIgnorePatterns` to `isIgnoredPath` + - Added aliases for b/c compatibility + - Added new `ignorePaths` option + +## v1.15.3 December 24, 2012 +- `balUtilModules` changes: + - Added `requireFresh` + +## v1.15.2 December 16, 2012 +- `balUtilPaths` changes: + - Fixed `scandir` not inheriting ignore patterns when recursing + +## v1.15.1 December 15, 2012 +- `balUtilPaths` changes: + - Fixed `testIgnorePatterns` when `ignoreCommonPatterns` is set to `true` + +## v1.15.0 December 15, 2012 +- `balUtilPaths` changes: + - Added `testIgnorePatterns` + - Renamed `ignorePatterns` to `ignoreCommonPatterns`, and added new `ignoreCustomPatterns` + - Affects `scandir` options + - Added emac cache files to `ignoreCommonPatterns` + +## v1.14.1 December 14, 2012 +- `balUtilModules` changes: + - Added `getExecPath` that will fetch an executable path based on the paths within the environment `PATH` variable +- Rebuilt with CoffeeScript 1.4.x + +## v1.14.0 November 23, 2012 +- `balUtilPaths` changes: + - `readPath` will now follow url redirects + +## v1.13.13 October 26, 2012 +- `balUtilPaths` changes: + - Files that start with `~` are now correctly ignored in `commonIgnorePatterns` + +## v1.13.12 October 22, 2012 +- `balUtilFlow` changes: + - `extend` is now an alias of `shallowExtendPlainObjects` as they were exactly the same +- `balUtilHTML` changes: + - `replaceElement` and `replaceElementAsync` changes: + - now accept arguments in object form as well + - accept a `removeIndentation` argument that defaults to `true` + +## v1.13.11 October 22, 2012 +- `balUtilPaths` changes: + - `ensurePath` now returns `err` and `exists` instead of just `err` +- `balUtilModules` changes: + - `initGitRepo` will now default `remote` to `origin` and `branch` to `master` + - Added `initOrPullGitRepo` + +## v1.13.10 October 7, 2012 +- `balUtilPaths` changes: + - Added `shallowExtendPlainObjects` + +## v1.13.9 October 7, 2012 +- `balUtilPaths` changes: + - VIM swap files now added to `commonIgnorePatterns` + - Thanks to [Sean Fridman](https://github.com/sfrdmn) for [pull request #4](https://github.com/balupton/bal-util/pull/4) + +## v1.13.8 October 2, 2012 +- `balUtilModules` changes: + - Added `openProcess` and `closeProcess`, and using them in `spawn` and `exec`, used to prevent `EMFILE` errors when there are too many open processes + - Max number of open processes is configurable via the `NODE_MAX_OPEN_PROCESSES` environment variable +` balUtilPaths` changes: + - Max number of open files is now configurable via the`NODE_MAX_OPEN_FILES` environment variable + +## v1.13.7 September 24, 2012 +- `balUtilPaths` changes: + - Added `textExtensions` and `binaryExtensions` + - The environment variables `TEXT_EXTENSIONS` and `BINARY_EXTENSIONS` will append to these arrays + - Added `isText` and `isTextSync` + +## v1.13.6 September 18, 2012 +- `balUtilPaths` changes: + - Improved `getEncoding`/`getEncodingSync` detection + - Will now scan start, middle and end, instead of just middle + +## v1.13.5 September 13, 2012 +- `balUtilPaths` changes: + - Added `getEncoding` and `getEncodingSync` + +## v1.13.4 August 28, 2012 +- `balUtilModules` changes: + - Failing to retrieve the path on `getGitPath`, `getNodePath` and `getNpmPath` will now result in an error + +## v1.13.3 August 28, 2012 +- `balUtilModules` changes: + - Fixed `exec` and `execMultiple` + - Added `gitCommands`, `nodeCommands` and `npmCommands` +- Dropped node v0.4 support, min required version now 0.6 + +## v1.13.2 August 16, 2012 +- Repackaged + +## v1.13.1 August 16, 2012 +- `balUtilHTML` changes: + - Fixed `replaceElement` from mixing up elements that start with our desired selector, instead of being only our desired selector + +## v1.13.0 August 3, 2012 +- `balUtilModules` changes: + - Added `determineExecPath`, `getNpmPath`, `getTmpPath`, `nodeCommand` and `gitCommand` + - `initNodeModules` and `initGitRepo` will now get the determined path of the executable if a path isn't passed +- Re-added markdown files to npm distribution as they are required for the npm website + +## v1.12.5 July 18, 2012 +- `balUtilTypes` changes: + - Better checks for `isString` and `isNumber` under some environments +- `balUtilFlow` changes: + - Removed ambigious `clone` function, use `dereference` or `extend` or `deepExtendPlainObjects` instead + +## v1.12.4 July 12, 2012 +- `balUtilTypes` changes: + - `isObject` now also checks truthyness to avoid `null` and `undefined` from being objects + - `isPlainObject` got so good, it can't get better +- `balUtilFlow` changes: + - added `deepExtendPlainObjects` + +## v1.12.3 July 12, 2012 +- `balUtilModules` changes: + - `npmCommand` will now only prefix with the nodePath if the npmPath exists + - `npmCommand` and `initNodeModules` now use async fs calls instead of sync calls + +## v1.12.2 July 12, 2012 +- `balUtilFlow` changes: + - Added `dereference` + +## v1.12.1 July 10, 2012 +- `balUtilModules` changes: + - Added `stdin` option to `spawn` + +## v1.12.0 July 7, 2012 +- Rejigged `balUtilTypes` and now top level + - Other components now make use of this instead of inline `typeof` and `instanceof` checks +- `balUtilFlow` changes: + - `isArray` and `toString` moved to `balUtilTypes` + +## v1.11.2 July 7, 2012 +- `balUtilFlow` changes: + - Added `clone` +- `balUtilModules` changes: + - Fixed exists warning on `initNodeModules` +- `balUtilPaths` changes: + - Added `scanlist` + - `scandir` changes: + - If `readFiles` is `true`, then we will return the contents into the list entries as well as the tree entries (we weren't doing this for lists before) + +## v1.11.1 July 4, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Cleaned up the context handling code + - `Block` changes: + - Block constructor as well as `createSubBlock` arguments is now a single `opts` object, acceping the options `name`, `fn`, `parentBlock` and the new `complete` + - Fixed bug introduced in v1.11.0 causing blocks to complete instantly (instead of once their tasks are finished) + +## v1.11.0 July 1, 2012 +- Added `balUtilHTML`: + - `getAttribute(attributes,attribute)` + - `detectIndentation(source)` + - `removeIndentation(source)` + - `replaceElement(source, elementNameMatcher, replaceElementCallback)` + - `replaceElementAsync(source, elementNameMatcher, replaceElementCallback, next)` +- `balUtilFlow` changes: + - `wait(delay,fn)` introduced as an alternative to `setTimeout` + - `Group` changes: + - `push` and `pushAndRun` signatures are now `([context], task)` + - `context` is optional, and what we should bind to this + - it saves us having to often wrap our task pushing into for each scopes + - task completion callbacks are now optional, if not specified a task will be completed as soon as it finishes executing +- `balUtilEvents`, `balUtilModules` changes: + - Now make use of the `balUtilFlow.push|pushAndRun` new `context` argument to simplify some loops + +## v1.10.3 June 26, 2012 +- `balUtilModules` changes: + - `initNodeModules` will now install modules from cache, unless `force` is true + +## v1.10.2 June 26, 2012 +- `balUtilModules` changes: + - `initNodeModules` will now never install modules from cache + +## v1.10.1 June 26, 2012 +- `balUtilModules` changes: + - Fixed `npmCommand` under some situations + +## v1.10.0 June 26, 2012 +- `balUtilModules` changes: + - Added `spawnMultiple`, `execMultiple`, `gitGitPath`, `getNodePath`, and `npmCommand` + - `spawn` and `exec` are now only for single commands, use the new `spawnMultiple` and `execMultiple` for multiple commands instead + - error exit code is now anything that isnt `0` + +## v1.9.4 June 22, 2012 +- Fixed a problem with large asynchronous groups + +## v1.9.3 June 22, 2012 +- `balUtilFlow` changes: + - Added `extractOptsAndCallback` and `extend` + +## v1.9.2 June 21, 2012 +- `balUtilFlow` changes: + - Added `fireWithOptionalCallback`, updated groups and emitters to use this + +## v1.9.1 June 21, 2012 +- `balUtilModules` changes: + - `initNodeModules` now supports `output` option + +## v1.9.0 June 21, 2012 +- `balUtilEvents` changes: + - `EventEmitterEnhanced` changes: + - `emitSync` and `emitAsync` changes: + - The next callback is now optional, if it is not detected then we will automatically mark the listener as completed once we have executed it (in other words, if it doesn't have a next callback, then we treat it as a synchronous listener) + +## v1.8.8 June 19, 2012 +- Fixed a problem with large synchronous groups + +## v1.8.7 June 19, 2012 +- Defaulted `dependencies` to an empty object, to hopefully fix [npm issue #2540](https://github.com/isaacs/npm/pull/2540) + +## v1.8.6 June 19, 2012 +- `balUtilEvents` changes: + - Split `emitSync` and `emitAsync` out of `EventSystem` and into new `EventEmitterEnhanced` that `EventSystem` extends + +## v1.8.5 June 11, 2012 +- Made next callbacks necessary by default + +## v1.8.4 June 11, 2012 +- `balUtilModule` changes: + - `spawn` + - will now return results in the order of `err`, `stdout`, `stderr`, `code`, `signal` + - now splits string commands using `/ /` +- `balUtilFlow` changes: + - `Group` will now only return error as an array if we have more than one error +- Updated for Joe v1.0.0 + +## v1.8.3 June 9, 2012 +- `balUtilCompare` changes: + - `packageCompare` will now fail gracefully if it receives malformed json + +## v1.8.2 June 9, 2012 +- Removed request dependency, we now use the native http/https modules + +## v1.8.1 June 9, 2012 +- Restructured directories +- Removed generated docs, use the wiki instead +- Moved tests from Mocha to [Joe](https://github.com/bevry/joe) +- Travis now tests against node v0.7 +- `balUtilPaths` changes: + - Added `exists` and `existsSync` to normalize node's 0.6 to 0.8 api differences +- Made [request](https://github.com/mikeal/request) an optional dependency + +## v1.8.0 June 9, 2012 +- Added expiremental `balUtilFlow.Block` +- Possibly some undocumented `balUtilFlow.Group` changes + +## v1.7.0 June 4, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Constructor now supports `next` and `mode` arguments in any order + - `clear()` now clears everything + - Added `hasTasks()` + - Group completion callback's first argument (the error argument) is now an array of errors (or null if no errors) + - Added `breakOnError` option (defaults to `true`) + - Added `autoClear` option to clear once all tasks have run (defualts to `false`) + +## v1.6.5 May 30, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Reverted the change made in v1.6.4 where errors in callbacks still increment the complete count + - Instead, you should be using the `hasExited()` instead of `hasCompleted()` which is used to find out if everything passed successfully + +## v1.6.4 May 30, 2012 +- `balUtilFlow` changes: + - Added `flow({object,action,[args],[tasks],next})` to simplify calling a series of functions of an object + - `Group` changes: + - If complete callback is called with an error, it'll still increment the complete count (it didn't before) + - Added `hasExited()` +- `balUtilPaths` changes: + - `writeFile` will now call `ensurePath` before writing the file + +## v1.6.3 May 22, 2012 +- `balUtilPaths` changes: + - Fixed a problem introduced with v1.6.0 with `isDirectory` not opening the file before closing it + - If the number of open files becomes a negative number, we will now throw an error + - Decreased the max amount of allowed open files from `500` to `100` + - Increased the wait time for opening a file from `50` to `100` + - This is now customisable through the global `waitingToOpenFileDelay` + +## v1.6.2 May 13, 2012 +- Added support for `balUtilFlow` and `balUtilTypes` to be used inside web browsers + +## v1.6.1 May 4, 2012 +- `balUtilPaths` changes: + - Fixed `initNodeModules` + +## v1.6.0 May 4, 2012 +- We now pre-compile our coffee-script +- `balUtilPaths` changes: + - Added `readFile`, `writeFile`, `mkdir`, `stat`, `readdir`, `unlink`, `rmdir` + - Renamed `rmdir` to `rmdirDeep` +- `balUtilModules` changes: + - Removed `initGitSubmodules`, `gitPull` + - Added `initGitRepo` + - Rewrote `initNodeModules` + +## v1.5.0 April 18, 2012 +- `balUtilPaths` changes: + - `scan` was removed, not sure what it was used for + - `isDirectory` now returns the `fileStat` argument to the callback + - `scandir` changes: + - `ignorePatterns` option when set to true now uses the new `balUtilPaths.commonIgnorePatterns` property + - fixed error throwing when passed an invalid path + - now supports a new `stat` option + - will return the `fileStat` argument to the `fileAction` and `dirAction` callbacks + - `ignorePatterns` and `ignoreHiddenFiles` will now correctly be passed to child scandir calls + - `cpdir` and `rpdir` now uses `path.join` and support `ignoreHiddenFiles` and `ignorePatterns` + - `writetree` now uses `path.join` + +## v1.4.3 April 14, 2012 +- CoffeeScript dependency is now bundled +- Fixed incorrect octal `0700` should have been `700` + +## v1.4.2 April 5, 2012 +- Fixed a failing test due to the `bal-util.npm` to `bal-util` rename +- Improvements to `balUtilModules.spawn` + - will only return an error if the exit code was `1` + - will also contain the `code` and `signal` with the results + - `results[x][0]` is now the stderr string, rather than an error object + +## v1.4.1 April 5, 2012 +- Added `spawn` to `balUtilModules` +- Added `ignoreHiddenFiles` option to `balUtilPaths.scandir` + +## v1.4.0 April 2, 2012 +- Renamed `balUtilGroups` to `balUtilFlow` +- Added `toString`, `isArray` and `each` to `balUtilFlow` +- Added `rpdir`, `empty`, and `isPathOlderThan` to `balUtilPaths` + +## v1.3.0 February 26, 2012 +- Added `openFile` and `closeFile` to open and close files safely (always stays below the maximum number of allowed open files) +- Updated all path utilities to use `openFile` and `closeFile` +- Added npm scripts + +## v1.2.0 February 14, 2012 +- Removed single and multi modes from `exec`, now always returns the same consistent `callback(err,results)` instead + +## v1.1.0 February 6, 2012 +- Modularized +- Added [docco](http://jashkenas.github.com/docco/) docs + +## v1.0 February 5, 2012 +- Moved unit tests to [Mocha](http://visionmedia.github.com/mocha/) + - Offers more flexible unit testing + - Offers better guarantees that tests actually ran, and that they actually ran correctly +- Added `readPath` and `scantree` +- Added `readFiles` option to `scandir` +- `scandir` now supports arguments in object format +- Removed `parallel` +- Tasks inside groups now are passed `next` as there only argument +- Removed `resolvePath`, `expandPath` and `expandPaths`, they were essentially the same as `path.resolve` +- Most functions will now chain +- `comparePackage` now supports comparing two local, or two remote packages +- Added `gitPull` + +## v0.9 January 18, 2012 +- Added `exec`, `initNodeModules`, `initGitSubmodules`, `EventSystem.when` +- Added support for no callbacks + +## v0.8 November 2, 2011 +- Considerable improvements to `scandir`, `cpdir` and `rmdir` + - Note, passing `false` as the file or dir actions will now skip all of that type. Pass `null` if you do not want that. + - `dirAction` is now fired before we read the directories children, if you want it to fire after then in the next callback, pass a callback in the 3rd argument. See `rmdir` for an example of this. +- Fixed npm web to url warnings + +## v0.7 October 3, 2011 +- Added `versionCompare` and `packageCompare` functions + - Added `request` dependency + +## v0.6 September 14, 2011 +- Updated `util.Group` to support `async` and `sync` grouping + +## v0.4 June 2, 2011 +- Added util.type for testing the type of a variable +- Added util.expandPath and util.expandPaths + +## v0.3 June 1, 2011 +- Added util.Group class for your async needs :) + +## v0.2 May 20, 2011 +- Added some tests with expresso +- util.scandir now returns err,list,tree +- Added util.writetree + +## v0.1 May 18, 2011 +- Initial commit diff --git a/node_modules/scandirectory/node_modules/safefs/LICENSE.md b/node_modules/scandirectory/node_modules/safefs/LICENSE.md new file mode 100644 index 000000000..f0e8ec86e --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/LICENSE.md @@ -0,0 +1,24 @@ + + + +# License + +Unless stated otherwise all works are: + +- Copyright © 2013+ Bevry Pty Ltd (http://bevry.me) +- Copyright © 2011-2012 Benjamin Lupton (http://balupton.com) + +and licensed under: + +- The incredibly [permissive](http://en.wikipedia.org/wiki/Permissive_free_software_licence) [MIT License](http://opensource.org/licenses/mit-license.php) + +## MIT License +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. + + + + diff --git a/node_modules/scandirectory/node_modules/safefs/README.md b/node_modules/scandirectory/node_modules/safefs/README.md new file mode 100755 index 000000000..08c229e5e --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/README.md @@ -0,0 +1,131 @@ + + + +# Safe FS + + + + + + +[![Build Status](https://img.shields.io/travis/bevry/safefs/master.svg)](http://travis-ci.org/bevry/safefs "Check this project's build status on TravisCI") +[![NPM version](https://img.shields.io/npm/v/safefs.svg)](https://npmjs.org/package/safefs "View this project on NPM") +[![NPM downloads](https://img.shields.io/npm/dm/safefs.svg)](https://npmjs.org/package/safefs "View this project on NPM") +[![Dependency Status](https://img.shields.io/david/bevry/safefs.svg)](https://david-dm.org/bevry/safefs) +[![Dev Dependency Status](https://img.shields.io/david/dev/bevry/safefs.svg)](https://david-dm.org/bevry/safefs#info=devDependencies)
    +[![Gratipay donate button](https://img.shields.io/gratipay/bevry.svg)](https://www.gratipay.com/bevry/ "Donate weekly to this project using Gratipay") +[![Flattr donate button](https://img.shields.io/badge/flattr-donate-yellow.svg)](http://flattr.com/thing/344188/balupton-on-Flattr "Donate monthly to this project using Flattr") +[![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QB8GQPZAH84N6 "Donate once-off to this project using Paypal") +[![BitCoin donate button](https://img.shields.io/badge/bitcoin-donate-yellow.svg)](https://bevry.me/bitcoin "Donate once-off to this project using BitCoin") +[![Wishlist browse button](https://img.shields.io/badge/wishlist-donate-yellow.svg)](https://bevry.me/wishlist "Buy an item on our wishlist for us") + + + + + + +Stop getting EMFILE errors! Open only as many files as the operating system supports. + + + + + + +## Install + +### [NPM](http://npmjs.org/) +- Use: `require('safefs')` +- Install: `npm install --save safefs` + + + + +## Usage + +``` javascript +var safefs = require('safefs') +``` + +SafeFS uses [graceful-fs](https://npmjs.org/package/graceful-fs) to wrap all of the standard [file system](http://nodejs.org/docs/latest/api/all.html#all_file_system) methods to avoid EMFILE errors among other problems. + +Ontop of graceful-fs, SafeFS also adds additional wrapping on the following methods: + +- `writeFile(path, data, options?, next)` - ensure the full path exists before writing to it +- `appendFile(path, data, options?, next)` - ensure the full path exists before writing to it +- `mkdir(path, mode?, next)` - mode defaults to `0o777 & (~process.umask())` +- `unlink(path, next)` - checks if the file exists before removing it +- `exists(path, next)` - node =v0.6 compatibility +- `existsSync(path)` - node =v0.6 compatibility + +SafeFS also define these additional methods: + +- `ensurePath(path, options, next)` - ensure the full path exists, equivalent to unix's `mdir -p path` + + + + +## History +[Discover the change history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/safefs/blob/master/HISTORY.md#files) + + + + + + +## Contribute + +[Discover how you can contribute by heading on over to the `CONTRIBUTING.md` file.](https://github.com/bevry/safefs/blob/master/CONTRIBUTING.md#files) + + + + + + +## Backers + +### Maintainers + +These amazing people are maintaining this project: + +- Benjamin Lupton (https://github.com/balupton) + +### Sponsors + +No sponsors yet! Will you be the first? + +[![Gratipay donate button](https://img.shields.io/gratipay/bevry.svg)](https://www.gratipay.com/bevry/ "Donate weekly to this project using Gratipay") +[![Flattr donate button](https://img.shields.io/badge/flattr-donate-yellow.svg)](http://flattr.com/thing/344188/balupton-on-Flattr "Donate monthly to this project using Flattr") +[![PayPayl donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QB8GQPZAH84N6 "Donate once-off to this project using Paypal") +[![BitCoin donate button](https://img.shields.io/badge/bitcoin-donate-yellow.svg)](https://bevry.me/bitcoin "Donate once-off to this project using BitCoin") +[![Wishlist browse button](https://img.shields.io/badge/wishlist-donate-yellow.svg)](https://bevry.me/wishlist "Buy an item on our wishlist for us") + +### Contributors + +These amazing people have contributed code to this project: + +- [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/safefs/commits?author=balupton) +- [jagill](https://github.com/jagill) — [view contributions](https://github.com/bevry/safefs/commits?author=jagill) +- [sfrdmn](https://github.com/sfrdmn) — [view contributions](https://github.com/bevry/safefs/commits?author=sfrdmn) +- [shama](https://github.com/shama) — [view contributions](https://github.com/bevry/safefs/commits?author=shama) + +[Become a contributor!](https://github.com/bevry/safefs/blob/master/CONTRIBUTING.md#files) + + + + + + +## License + +Unless stated otherwise all works are: + +- Copyright © 2013+ Bevry Pty Ltd (http://bevry.me) +- Copyright © 2011-2012 Benjamin Lupton (http://balupton.com) + +and licensed under: + +- The incredibly [permissive](http://en.wikipedia.org/wiki/Permissive_free_software_licence) [MIT License](http://opensource.org/licenses/mit-license.php) + + + + diff --git a/node_modules/scandirectory/node_modules/safefs/es5/lib/safefs.js b/node_modules/scandirectory/node_modules/safefs/es5/lib/safefs.js new file mode 100644 index 000000000..24e7b7a94 --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/es5/lib/safefs.js @@ -0,0 +1,181 @@ +// Import +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +var fsUtil = require('graceful-fs'); +var pathUtil = require('path'); + +// ===================================== +// Define Module + +var safefs = { + + // ===================================== + // Our own custom functions + + // Get the parent path + getParentPathSync: function getParentPathSync(path) { + return path + // remove trailing slashes + .replace(/[\/\\]$/, '') + // remove last directory + .replace(/[\/\\][^\/\\]+$/, ''); + }, + + // Ensure path exists + // next(err, existed) + ensurePath: function ensurePath(path, opts, next) { + // Prepare + if (next == null) { + next = opts; + opts = null; + } + opts = opts || {}; + + // Check + safefs.exists(path, function (exists) { + // Error + if (exists) return next(null, true); + + // Success + var parentPath = safefs.getParentPathSync(path); + safefs.ensurePath(parentPath, opts, function (err) { + // Error + if (err) return next(err, false); + + // Success + safefs.mkdir(path, opts.mode, function () { + // ignore mkdir error, as if it already exists, then we are winning + + safefs.exists(path, function (exists) { + // Error + if (!exists) { + var _err = new Error('Failed to create the directory: ' + path); + return next(_err, false); + } + + // Success + next(null, false); + }); + }); + }); + }); + + // Chain + return safefs; + }, + + // ===================================== + // Safe Wrappers for Standard Methods + + // Write File + // next(err) + writeFile: function writeFile(path, data, opts, next) { + // Prepare + if (next == null) { + next = opts; + opts = null; + } + + // Ensure path + safefs.ensurePath(pathUtil.dirname(path), opts, function (err) { + // Error + if (err) return next(err); + + // Write data + fsUtil.writeFile(path, data, opts, next); + }); + + // Chain + return safefs; + }, + + // Append File + // next(err) + appendFile: function appendFile(path, data, opts, next) { + // Prepare + if (next == null) { + next = opts; + opts = null; + } + + // Ensure path + safefs.ensurePath(pathUtil.dirname(path), opts, function (err) { + // Error + if (err) return next(err); + + // Write data + fsUtil.appendFile(path, data, opts, next); + }); + + // Chain + return safefs; + }, + + // Mkdir + // next(err) + mkdir: function mkdir(path, mode, next) { + // Prepare + if (next == null) { + next = mode; + mode = null; + } + if (mode == null) { + mode = 511 & ~process.umask(); + } + + // Action + fsUtil.mkdir(path, mode, next); + + // Chain + return safefs; + }, + + // Unlink + // don't error if the path doesn't already exist + // next(err) + unlink: function unlink(path, next) { + // Stat + safefs.exists(path, function (exists) { + if (exists === false) return next(); + fsUtil.unlink(path, next); + }); + + // Chain + return safefs; + }, + + // Exists + // next(err) + exists: function exists(path, next) { + // Action + (fsUtil.exists || pathUtil.exists)(path, next); + + // Chain + return safefs; + }, + + // Exits Sync + // next(err) + existsSync: function existsSync(path) { + /* eslint no-sync: 0 */ + return (fsUtil.existsSync || pathUtil.existsSync)(path); + } +}; + +// Add any missing methods +Object.keys(fsUtil).forEach(function (key) { + var value = fsUtil[key]; + // we do the `!safefs[key]` as we don't want to over-write our own enhancements + // we do the `value.bind` check, as we may interate across trivial types + // we do the `Function.prototype.bind` check, as underscore is a function that has it's own bind + if (!safefs[key] && value && value.bind === Function.prototype.bind) { + safefs[key] = value.bind(fsUtil); + } +}); + +// Export +exports['default'] = safefs; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/safefs/es6/lib/safefs.js b/node_modules/scandirectory/node_modules/safefs/es6/lib/safefs.js new file mode 100755 index 000000000..8664b6b93 --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/es6/lib/safefs.js @@ -0,0 +1,178 @@ +// Import +const fsUtil = require('graceful-fs') +const pathUtil = require('path') + + +// ===================================== +// Define Module + +const safefs = { + + // ===================================== + // Our own custom functions + + // Get the parent path + getParentPathSync: function (path) { + return path + // remove trailing slashes + .replace(/[\/\\]$/, '') + // remove last directory + .replace(/[\/\\][^\/\\]+$/, '') + }, + + + // Ensure path exists + // next(err, existed) + ensurePath: function (path, opts, next) { + // Prepare + if ( next == null ) { + next = opts + opts = null + } + opts = opts || {} + + // Check + safefs.exists(path, function (exists) { + // Error + if ( exists ) return next(null, true) + + // Success + const parentPath = safefs.getParentPathSync(path) + safefs.ensurePath(parentPath, opts, function (err) { + // Error + if ( err ) return next(err, false) + + // Success + safefs.mkdir(path, opts.mode, function () { + // ignore mkdir error, as if it already exists, then we are winning + + safefs.exists(path, function (exists) { + // Error + if ( !exists ) { + const err = new Error(`Failed to create the directory: ${path}`) + return next(err, false) + } + + // Success + next(null, false) + }) + }) + }) + }) + + // Chain + return safefs + }, + + + // ===================================== + // Safe Wrappers for Standard Methods + + // Write File + // next(err) + writeFile: function (path, data, opts, next) { + // Prepare + if ( next == null ) { + next = opts + opts = null + } + + // Ensure path + safefs.ensurePath(pathUtil.dirname(path), opts, function (err) { + // Error + if ( err ) return next(err) + + // Write data + fsUtil.writeFile(path, data, opts, next) + }) + + // Chain + return safefs + }, + + // Append File + // next(err) + appendFile: function (path, data, opts, next) { + // Prepare + if ( next == null ) { + next = opts + opts = null + } + + // Ensure path + safefs.ensurePath(pathUtil.dirname(path), opts, function (err) { + // Error + if ( err ) return next(err) + + // Write data + fsUtil.appendFile(path, data, opts, next) + }) + + // Chain + return safefs + }, + + // Mkdir + // next(err) + mkdir: function (path, mode, next) { + // Prepare + if ( next == null ) { + next = mode + mode = null + } + if ( mode == null ) { + mode = 0o777 & ~process.umask() + } + + // Action + fsUtil.mkdir(path, mode, next) + + // Chain + return safefs + }, + + // Unlink + // don't error if the path doesn't already exist + // next(err) + unlink: function (path, next) { + // Stat + safefs.exists(path, function (exists) { + if ( exists === false ) return next() + fsUtil.unlink(path, next) + }) + + // Chain + return safefs + }, + + // Exists + // next(err) + exists: function (path, next) { + // Action + (fsUtil.exists || pathUtil.exists)(path, next) + + // Chain + return safefs + }, + + // Exits Sync + // next(err) + existsSync: function (path) { + /* eslint no-sync: 0 */ + return (fsUtil.existsSync || pathUtil.existsSync)(path) + } +} + +// Add any missing methods +Object.keys(fsUtil).forEach(function (key) { + const value = fsUtil[key] + // we do the `!safefs[key]` as we don't want to over-write our own enhancements + // we do the `value.bind` check, as we may interate across trivial types + // we do the `Function.prototype.bind` check, as underscore is a function that has it's own bind + if ( !safefs[key] && value && value.bind === Function.prototype.bind ) { + safefs[key] = value.bind(fsUtil) + } +}) + +// Export +export default safefs diff --git a/node_modules/scandirectory/node_modules/safefs/es6guardian.js b/node_modules/scandirectory/node_modules/safefs/es6guardian.js new file mode 100644 index 000000000..898212d08 --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/es6guardian.js @@ -0,0 +1,17 @@ +// September 5, 2015 +// https://github.com/bevry/base +if ( process.env.REQUIRE_ES6 ) { + module.exports = require('./es6/lib/safefs.js') +} +else if ( !process.versions.v8 || process.versions.v8.split('.')[0] < 4 ) { + module.exports = require('./es5/lib/safefs.js') +} +else { + try { + module.exports = require('./es6/lib/safefs.js') + } + catch (e) { + // console.log('Downgrading from ES6 to ES5 due to:', e.stack) + module.exports = require('./es5/lib/safefs.js') + } +} diff --git a/node_modules/scandirectory/node_modules/safefs/nakefile.js b/node_modules/scandirectory/node_modules/safefs/nakefile.js new file mode 100644 index 000000000..843270065 --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/nakefile.js @@ -0,0 +1,501 @@ +// 21 August 2015 +// https://github.com/bevry/base +'use strict' + + +// ===================================== +// Imports + +const fsUtil = require('fs') +const pathUtil = require('path') + + +// ===================================== +// Variables + +// Define environment things +const WINDOWS = process.platform.indexOf('win') === 0 +const NODE = process.execPath +const NPM = WINDOWS ? process.execPath.replace('node.exe', 'npm.cmd') : 'npm' +// const EXT = WINDOWS ? '.cmd' : '' +const GIT = 'git' + +// Define project paths +const APP_PATH = process.cwd() +const PACKAGE_PATH = pathUtil.join(APP_PATH, 'package.json') +const PACKAGE_DATA = require(PACKAGE_PATH) +const PACKAGE_CONFIG = PACKAGE_DATA.nakeConfiguration || PACKAGE_DATA.cakeConfiguration || {} + +// Define module paths +const MODULES_PATH = pathUtil.join(APP_PATH, 'node_modules') +const DOCPAD_PATH = pathUtil.join(MODULES_PATH, 'docpad') +const COFFEE = pathUtil.join(MODULES_PATH, '.bin', 'coffee') +const PROJECTZ = pathUtil.join(MODULES_PATH, '.bin', 'projectz') +const DOCCO = pathUtil.join(MODULES_PATH, '.bin', 'docco') +const DOCPAD = pathUtil.join(MODULES_PATH, '.bin', 'docpad') +const BISCOTTO = pathUtil.join(MODULES_PATH, '.bin', 'biscotto') +const YUIDOC = pathUtil.join(MODULES_PATH, '.bin', 'yuidoc') +const BABEL = pathUtil.join(MODULES_PATH, '.bin', 'babel') +const ESLINT = pathUtil.join(MODULES_PATH, '.bin', 'eslint') +const COFFEELINT = pathUtil.join(MODULES_PATH, '.bin', 'coffeelint') + +// Define configuration +const config = { + TEST_PATH: 'test', + DOCCO_SRC_PATH: null, + DOCCO_OUT_PATH: 'docs', + BISCOTTO_SRC_PATH: null, + BISCOTTO_OUT_PATH: 'docs', + YUIDOC_SRC_PATH: null, + YUIDOC_OUT_PATH: 'docs', + YUIDOC_SYNTAX: 'js', + COFFEE_SRC_PATH: null, + COFFEE_OUT_PATH: 'out', + DOCPAD_SRC_PATH: null, + DOCPAD_OUT_PATH: 'out', + BABEL_SRC_PATH: null, + BABEL_OUT_PATH: 'es5', + ESLINT_SRC_PATH: null, + COFFEELINT_SRC_PATH: null +} + +// Move package.json:nakeConfiguration into our configuration object +Object.keys(PACKAGE_CONFIG).forEach(function (key) { + const value = PACKAGE_CONFIG[key] + config[key] = value +}) + + +// ===================================== +// Generic + +const childProcess = require('child_process') + +const spawn = function (command, args, opts, next) { + const commandString = command + ' ' + args.join(' ') + if ( opts.output === true ) { + console.log(commandString) + opts.stdio = 'inherit' + } + const pid = childProcess.spawn(command, args, opts) + pid.on('close', function () { + let args = Array.prototype.slice.call(arguments) + if ( args[0] === 1 ) { + const error = new Error('Process [' + commandString + '] exited with error status code.') + next(error) + } + else { + next() + } + }) + return pid +} + +const exec = function (command, opts, next) { + if ( opts.output === true ) { + console.log(command) + return childProcess.exec(command, opts, function (error, stdout, stderr) { + console.log(stdout) + console.log(stderr) + if ( next ) next(error) + }) + } + else { + return childProcess.exec(command, opts, next) + } +} + +const steps = function (next, steps) { + let step = 0 + + const complete = function (error) { + // success status code + if ( error === 0 ) { + error = null + } + + // error status code + else if ( error === 1 ) { + error = new Error('Process exited with error status code') + } + + // Error + if ( error ) { + next(error) + } + else { + ++step + if ( step === steps.length ) { + next() + } + else { + steps[step](complete) + } + } + } + + return steps[step](complete) +} + + +// ===================================== +// Actions + +const actions = { + clean: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nclean:') + + // Prepare rm args + let args = ['-Rf'] + + // Add compilation paths to args + Object.keys(config).forEach(function (key) { + let value = config[key] + if ( key.indexOf('OUT_PATH') !== -1 ) { + args.push(value) + } + }) + + // Add common ignore paths to args + ; [APP_PATH, config.TEST_PATH].forEach(function (path) { + args.push( + pathUtil.join(path, 'build'), + pathUtil.join(path, 'components'), + pathUtil.join(path, 'bower_components'), + pathUtil.join(path, 'node_modules'), + pathUtil.join(path, '*out'), + pathUtil.join(path, '*log'), + pathUtil.join(path, '*heapsnaphot'), + pathUtil.join(path, '*cpuprofile') + ) + }) + + // rm + spawn('rm', args, {output: true, cwd: APP_PATH}, complete) + } + ]) + }, + + setup: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nnpm install (for app):') + spawn(NPM, ['install'], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !config.TEST_PATH || !fsUtil.existsSync(config.TEST_PATH) ) return complete() + console.log('\nnpm install (for test):') + spawn(NPM, ['install'], {output: true, cwd: config.TEST_PATH}, complete) + }, + + function (complete) { + if ( !fsUtil.existsSync(DOCPAD_PATH) ) return complete() + console.log('\nnpm install (for docpad tests):') + spawn(NPM, ['install'], {output: true, cwd: DOCPAD_PATH}, complete) + } + ]) + }, + + compile: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nnake setup') + actions.setup(opts, complete) + }, + + function (complete) { + if ( !config.COFFEE_SRC_PATH || !fsUtil.existsSync(COFFEE) ) return complete() + console.log('\ncoffee compile:') + spawn(NODE, [COFFEE, '-co', config.COFFEE_OUT_PATH, config.COFFEE_SRC_PATH], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !config.BABEL_SRC_PATH || !fsUtil.existsSync(BABEL) ) return complete() + console.log('\nbabel compile:') + spawn(NODE, [BABEL, config.BABEL_SRC_PATH, '--out-dir', config.BABEL_OUT_PATH], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !config.DOCPAD_SRC_PATH || !fsUtil.existsSync(DOCPAD) ) return complete() + console.log('\ndocpad generate:') + spawn(NODE, [DOCPAD, 'generate'], {output: true, cwd: APP_PATH}, complete) + } + ]) + }, + + watch: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nnake setup') + actions.setup(opts, complete) + }, + + function (complete) { + if ( !config.BABEL_SRC_PATH || !fsUtil.existsSync(BABEL) ) return complete() + console.log('\nbabel compile:') + spawn(NODE, [BABEL, '-w', config.BABEL_SRC_PATH, '--out-dir', config.BABEL_OUT_PATH], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !config.COFFEE_SRC_PATH || !fsUtil.existsSync(COFFEE) ) return complete() + console.log('\ncoffee watch:') + spawn(NODE, [COFFEE, '-wco', config.COFFEE_OUT_PATH, config.COFFEE_SRC_PATH], {output: true, cwd: APP_PATH}) // background + complete() // continue while coffee runs in background + }, + + function (complete) { + if ( !config.DOCPAD_SRC_PATH || !fsUtil.existsSync(DOCPAD) ) return complete() + console.log('\ndocpad run:') + spawn(NODE, [DOCPAD, 'run'], {output: true, cwd: APP_PATH}) // background + complete() // continue while docpad runs in background + } + ]) + }, + + verify: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nnake compile') + actions.compile(opts, complete) + }, + + function (complete) { + console.log('\ncoffeelint:') + if ( !config.COFFEELINT_SRC_PATH || !fsUtil.existsSync(COFFEELINT) ) return complete() + spawn(COFFEELINT, [config.COFFEELINT_SRC_PATH], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + console.log('\neslint:') + if ( !config.ESLINT_SRC_PATH || !fsUtil.existsSync(ESLINT) ) return complete() + spawn(ESLINT, [config.ESLINT_SRC_PATH], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + console.log('\nnpm test:') + spawn(NPM, ['test'], {output: true, cwd: APP_PATH}, complete) + } + ]) + }, + + meta: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + if ( !config.DOCCO_SRC_PATH || !fsUtil.existsSync(DOCCO) ) return complete() + console.log('\ndocco compile:') + let command = [NODE, DOCCO, + '-o', config.DOCCO_OUT_PATH, + config.DOCCO_SRC_PATH + ].join(' ') + exec(command, {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !config.BISCOTTO_SRC_PATH || !fsUtil.existsSync(BISCOTTO) ) return complete() + console.log('\nbiscotto compile:') + let command = [BISCOTTO, + '-n', PACKAGE_DATA.title || PACKAGE_DATA.name, + '--title', '"' + (PACKAGE_DATA.title || PACKAGE_DATA.name) + ' API Documentation"', + '-r', 'README.md', + '-o', config.BISCOTTO_OUT_PATH, + config.BISCOTTO_SRC_PATH, + '-', 'LICENSE.md HISTORY.md' + ].join(' ') + exec(command, {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !fsUtil.existsSync(YUIDOC) ) return complete() + console.log('\nyuidoc compile:') + let command = [YUIDOC] + if ( config.YUIDOC_OUT_PATH ) command.push('-o', config.YUIDOC_OUT_PATH) + if ( config.YUIDOC_SYNTAX ) command.push('--syntaxtype', config.YUIDOC_SYNTAX, '-e', '.coffee') + if ( config.YUIDOC_SRC_PATH ) command.push(config.YUIDOC_SRC_PATH) + spawn(NODE, command, {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + if ( !fsUtil.existsSync(PROJECTZ) ) return complete() + console.log('\nprojectz compile') + spawn(NODE, [PROJECTZ, 'compile'], {output: true, cwd: APP_PATH}, complete) + } + ]) + }, + + prerelease: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nnake verify') + actions.verify(opts, complete) + }, + + function (complete) { + console.log('\nnake meta') + actions.meta(opts, complete) + } + ]) + }, + + release: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\nnake prerelease') + actions.prerelease(opts, complete) + }, + + function (complete) { + console.log('\nnpm publish:') + spawn(NPM, ['publish'], {output: true, cwd: APP_PATH}, complete) + // ^ npm will run prepublish and postpublish for us + }, + + function (complete) { + console.log('\nnake postrelease') + actions.postrelease(opts, complete) + } + ]) + }, + + postrelease: function (opts, next) { + // Steps + steps(next, [ + function (complete) { + console.log('\ngit tag:') + spawn(GIT, ['tag', 'v' + PACKAGE_DATA.version, '-a'], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + console.log('\ngit push origin master:') + spawn(GIT, ['push', 'origin', 'master'], {output: true, cwd: APP_PATH}, complete) + }, + + function (complete) { + console.log('\ngit push tags:') + spawn(GIT, ['push', 'origin', '--tags'], {output: true, cwd: APP_PATH}, complete) + } + ]) + } + +} + +// ===================================== +// Commands + +const commands = { + clean: 'clean up instance', + setup: 'setup our project for development', + compile: 'compile our files (includes setup)', + watch: 'compile our files initially, and again for each change (includes setup)', + verify: 'verify our project works (includes compile)', + meta: 'compile our meta files', + prerelease: 'prepare our project for publishing (includes verify and compile)', + release: 'publish our project using npm (includes prerelease and postrelease)', + postrelease: 'prepare our project after publishing' +} + +const aliases = { + install: 'setup', + test: 'verify', + docs: 'meta', + prepare: 'prerelease', + prepublish: 'prerelease', + publish: 'release', + postpublish: 'postpublish' +} + +const combined = {} + +Object.keys(commands).forEach(function (command) { + const description = commands[command] + const method = actions[command] + combined[command] = { + description: description, + method: method + } +}) + +Object.keys(aliases).forEach(function (alias) { + const command = aliases[alias] + const description = 'alias for ' + command + const method = actions[command] + combined[alias] = { + description: description, + method: method + } +}) + +// ===================================== +// Command Line Interface + +let desiredAction = null +let longestNameLength = 0 + +const finish = function (error) { + if ( error ) { + process.stderr.write( (error.stack || error.message || error) + '\n' ) + throw error + } + else { + process.stdout.write('OK\n') + } +} + +const output = function (list) { + let result = '' + Object.keys(list).forEach(function (key) { + const description = combined[key].description + let name = key + ': ' + while ( name.length < longestNameLength + 10 ) name += ' ' + result += name + ' ' + description + '\n' + }) + return result +} + +Object.keys(combined).forEach(function (command) { + if ( command.length > longestNameLength ) { + longestNameLength = command.length + } + + if ( process.argv.indexOf(command) !== -1 ) { + desiredAction = command + } +}) + +// Fire the method +if ( desiredAction ) { + combined[desiredAction].method({}, finish) +} + +// Display the help +else { + console.log([ + 'Nakefile help for ' + PACKAGE_DATA.name, + '', + 'USAGE', + '', + 'Standard usage:', + 'node --harmony nakefile.js $action', + '', + 'NPM script usage:', + 'npm run-script $action', + '', + 'Shell alias usage:', + 'nake $action', + '', + 'ACTIONS', + '', + output(commands), + output(aliases).trim() + ].join('\n')) +} diff --git a/node_modules/scandirectory/node_modules/safefs/package.json b/node_modules/scandirectory/node_modules/safefs/package.json new file mode 100644 index 000000000..d1f5a2247 --- /dev/null +++ b/node_modules/scandirectory/node_modules/safefs/package.json @@ -0,0 +1,79 @@ +{ + "title": "Safe FS", + "name": "safefs", + "version": "3.2.2", + "description": "Stop getting EMFILE errors! Open only as many files as the operating system supports.", + "homepage": "https://github.com/bevry/safefs", + "license": { + "type": "MIT" + }, + "badges": { + "travis": true, + "npm": true, + "npmdownloads": true, + "david": true, + "daviddev": true, + "gratipay": "bevry", + "flattr": "344188/balupton-on-Flattr", + "paypal": "QB8GQPZAH84N6", + "bitcoin": "https://bevry.me/bitcoin", + "wishlist": "https://bevry.me/wishlist" + }, + "keywords": [ + "fs", + "path", + "openFile", + "closeFile", + "emfile" + ], + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (https://github.com/balupton)" + ], + "contributors": [ + "Benjamin Lupton (https://github.com/balupton)", + "jagill (https://github.com/jagill)", + "sfrdmn (https://github.com/sfrdmn)", + "shama (https://github.com/shama)" + ], + "bugs": { + "url": "https://github.com/bevry/safefs/issues" + }, + "repository": { + "type": "git", + "url": "http://github.com/bevry/safefs.git" + }, + "engines": { + "node": ">=0.4" + }, + "dependencies": { + "graceful-fs": "*" + }, + "devDependencies": { + "assert-helpers": "^1.0.2", + "babel": "^5.8.23", + "babel-eslint": "^4.1.1", + "eslint": "^1.3.1", + "joe": "^1.6.0", + "joe-reporter-console": "^1.2.1", + "projectz": "^0.5.0", + "rimraf": "^2.4.3" + }, + "main": "./es6guardian.js", + "scripts": { + "clean": "node --harmony nakefile.js clean", + "setup": "node --harmony nakefile.js setup", + "compile": "node --harmony nakefile.js compile", + "watch": "node --harmony nakefile.js watch", + "verify": "node --harmony nakefile.js verify", + "meta": "node --harmony nakefile.js meta", + "prepare": "node --harmony nakefile.js prepare", + "release": "node --harmony nakefile.js release", + "test": "node --harmony ./es5/test/safefs-test.js" + }, + "nakeConfiguration": { + "BABEL_SRC_PATH": "es6", + "ESLINT_SRC_PATH": "es6", + "YUIDOC_SRC_PATH": "es6" + } +} diff --git a/node_modules/scandirectory/node_modules/taskgroup/.npmignore b/node_modules/scandirectory/node_modules/taskgroup/.npmignore new file mode 100644 index 000000000..04f814f4c --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/.npmignore @@ -0,0 +1,39 @@ +# v1.3.23 October 11, 2014 +# https://github.com/bevry/base + +# Temp Files +**/*.log +**/.docpad.db + +# Build Files +build/ +components/ +bower_components/ +node_modules/ + +# Private Files +.env + +# Development Files +.editorconfig +.eslintrc +.jshintrc +coffeelint.json +.travis* +Cakefile +Makefile +BACKERS.md +CONTRIBUTING.md +HISTORY.md +**/src/ +**/test/ + +# Other Package Definitions +template.js +component.json +bower.json + +# ===================================== +# CUSTOM MODIFICATIONS + +# None diff --git a/node_modules/scandirectory/node_modules/taskgroup/HISTORY.md b/node_modules/scandirectory/node_modules/taskgroup/HISTORY.md new file mode 100755 index 000000000..23abd6077 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/HISTORY.md @@ -0,0 +1,655 @@ +# History + +## v4.3.1 2015 December 10 +- Removed `cyclic.js` as the problem it solved was solved by npm v2 and above + +## v4.3.0 March 15, 2015 +- Module.exports now exports the TaskGroup class, of which `Task` and `TaskGroup` are now children +- Added `Task` attribute on the TaskGroup class to allow over-riding of what should be the sub-task class +- Added `TaskGroup` attribute on the TaskGroup class to allow over-riding of what should be the sub-taskgroup class +- Added the `sync` configuration option, which when set to `true` will allow the execution of a Task or TaskGroup to execute synchronously +- Updated dependencies + +## v4.2.1 February 20, 2015 +- Output more information about errors when a task completes twice + +## v4.2.0 February 2, 2015 +- Reintroduced `try...catch` for Node v0.8 and browser environments with a workaround to prevent error suppression + - Thanks to [kksharma1618](https://github.com/kksharma1618) for [issue #17](https://github.com/bevry/taskgroup/issues/17) + - Closes [issue #18](https://github.com/bevry/taskgroup/issues/17) +- You can now ignore all the warnings from the v4.1.0 changelog as the behaviour is more or less the same as v4.0.5 but with added improvements + +## v4.1.0 February 2, 2015 +- This release fixes the errors in completion callbacks being swallowed/lost + - Thanks to [kksharma1618](https://github.com/kksharma1618) for [issue #17](https://github.com/bevry/taskgroup/issues/17) +- The following changes have been made + - We no longer use `try...catch` at all, if you want error catching in your task, you must not disable domains (they are enabled by default) - [why?](https://github.com/bevry/taskgroup/issues/17#issuecomment-72383610) + - We now force exit the domain when the task's method calls its completion callback + - Domains now wrap only the firing of the task's method, rather than the preparation too as before + - Removed superflous check to ensure a task has a method before execution + - Ensured the actual check to ensure a task has a method before execution also checks if the method is actually a function (via checking for `.bind`) as the superflous check did +- This **could** introduce the following issues in the following cases: + - You may get errors that were suppressed before now showing themselves, this is good, but it may cause unexpected things to break loudly that were breaking silently before + - If you have domains disabled and an error is thrown, you will get a different flow of logic than before as the error will be caught in your code, not TaskGroup's + - The domain's flow has improved, but this may cause a different flow than you were expecting previously +- This **will** introduce the following issues in the following cases: + - If you are still on Node v0.8, synchronous errors and perhaps asynchronous errors thrown within your task method will no longer be caught by TaskGroup (due to Node 0.8's crippled domain functionality) and instead will need to be caught by your code either via preferably sent to the task method's completion callback rather than thrown, or via your own try...catch. But please upgrade to Node 0.10 or higher. + - If you are running TaskGroup in a web browser, you will need to catch errors manually or utilise a domain shim (browserify has one by default) - [why?](https://github.com/bevry/taskgroup/issues/18) +- In other words, this release is the most stable yet, but do run your tests (you should always do this) + +## v4.0.5 August 3, 2014 +- Changed an error output to be of error type + +## v4.0.4 August 3, 2014 +- Added the ability to turn off using domains by setting the new task option `domain` to `false` (defaults to `true`) +- Added the ability to turn off using [ambi](https://github.com/bevry/ambi) by setting the new task option `ambi` to `false` (defaults to `true`) + +## v4.0.3 July 11, 2014 +- Use `setImmediate` instead of `nextTick` to avoid `(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.` errors +- Updated dependencies + +## v4.0.2 June 18, 2014 +- Added support for `done`, `whenDone`, `onceDone`, `once`, and `on` configuration options + +## v4.0.1 June 16, 2014 +- Fixed `Recursive process.nextTick detected` error (regression since v4.0.0) + +## v4.0.0 June 16, 2014 +- Significant rewrite with b/c breaks + - Completion listeners should now be accomplished via `.done(listener)` (listens once) or `.whenDone(listener)` (listener persists) + - These methods are promises in that they will execute the listener if the item is already complete + - They listen for the `done` event + - The execution of tasks and groups have had a great deal of investment to ensure execution is intuitive and consistent across different use cases + - Refer to to `src/lib/test/taskgroup-usage-test.coffee` for the guaranteed expectations across different scenarios + - In earlier versions you could use `tasks.exit()` during execution to clear remaning items, stop execution, and exit, you can no longer do this, instead use the completion callback with an error, or call `tasks.clear()` then the completion callback + - Refer to the [new public api docs](http://learn.bevry.me/taskgroup/api) for the latest usage +- Changes + - `complete` event is now `completed`, but you really should be using the new `done` event or the promise methods + - `run` event is now `started` + - A lot of internal variables and methods have had their functionality changed or removed, if a method or variable is not in the [public api](http://learn.bevry.me/taskgroup/api), do not use it + - There is now a default `error` and `completed` listener that will emit the `done` event if there are listeners for it, if there is no `done` event listeners, and an error has occured, we will throw the error + - Tasks and groups will now only receive a default name when required, this is to prevent set names from being over-written by the default + - Adding of tasks and groups to a group instance will now return the group instance rather than the added tasks to ensure chainability, if you want the created tasks, use `.createTask(...)` and `.createGroup(...)` instead, then add the result manually +- Introductions + - `passed`, `failed`, `destroyed` events are new + - Task only + - new `timeout` option that accepts a number of milliseconds to wait before throwing an error + - new `onError` option that defaults to `'exit'` but can also accept `'ignore'` which will ignore duplicated exit errors (useful when combined with timeout event) + - TaskGroup only + - new `onError` option that defaults to `'exit'` but can also accept `'ignore'` which will ignore all task errors + - new `setNestedConfig(config)` and `setNestedTaskConfig(config)` options to set configuration for all children + +## v3.4.0 May 8, 2014 +- Added `context` option for Task, to perform a late bind on the method +- Asynchronous task methods can now accept optional arguments thanks to new [ambi](https://github.com/bevry/ambi) version +- Updated dependencies + +## v3.3.9 May 4, 2014 +- Added [extendonclass](https://github.com/bevry/extendonclass) support +- Added `Task.create` and `TaskGroup.create` helpers +- Will no longer fall over if an invalid argument is passed as configuration +- Updated dependencies + +## v3.3.8 February 5, 2014 +- More descriptive error when a task is fired without a method to fire + +## v3.3.7 January 30, 2014 +- Improvements around adding tasks to task groups and passing arguments to Task and TaskGroup constructors + +## v3.3.6 November 29, 2013 +- Properly fixed v3.3.3 issue while maintaining node.js v0.8 and browserify support + - Thanks to [pflannery](https://github.com/pflannery) for [pull request #11](https://github.com/bevry/taskgroup/pull/11) + +## v3.3.5 November 28, 2013 +- Re-added Node.js v0.8 support (regression since v3.3.3) + +## v3.3.4 November 27, 2013 +- Fixed the v3.3.3 fix + +## v3.3.3 November 27, 2013 +- Fixed possible "(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral." error under certain circumstances + +## v3.3.2 November 19, 2013 +- Don't add or create empty tasks and groups + +## v3.3.1 November 6, 2013 +- Fixed child event bubbling by using duck typing (regression since v3.3.0) +- Better error handling on uncaught task exceptions +- Tasks will now get a default name set to ease debugging + +## v3.3.0 November 1, 2013 +- Bindings are now more explicit +- Improved configuration parsing +- Configuration is now accessed via `getConfig()` +- Dropped component.io and bower support, just use ender or browserify + +## v3.2.4 October 27, 2013 +- Re-packaged + +## v3.2.3 September 18, 2013 +- Fixed cyclic dependency problem on windows (since v2.1.3) +- Added bower support + +## v3.2.2 September 18, 2013 +- Component.io compatibility + +## v3.2.1 August 19, 2013 +- Republish with older verson of joe dev dependency to try and stop cyclic errors +- Better node 0.8 support when catching thrown errors + +## v3.2.0 August 19, 2013 +- Wrapped Task execution in a domain to catch uncaught errors within the task execution, as well as added checks to ensure the completion callback does not fire multiple times + - These will be reported via the `error` event that the Task will emit + - If the Task is part of a TaskGroup, the TaskGroup will listen for this, kill the TaskGroup and emit an `error` event on the TaskGroup +- Moved from EventEmitter2 to node's own EventEmitter to ensure domain compatibility + +## v3.1.2 April 6, 2013 +- Added `getTotals()` to `TaskGroup` +- Added `complete()` to `Task` + +## v3.1.1 April 5, 2013 +- Fixed task run issue under certain circumstances +- Added `exit(err)` function + +## v3.1.0 April 5, 2013 +- Tasks can now have the arguments that are sent to them customized by the `args` configuration option +- Group inline functions now support an optional completion callback +- Group events for items now have their first argument as the item the event was for + +## v3.0.0 April 5, 2013 +- Significant rewrite and b/c break + +## v2.0.0 March 27, 2013 +- Split from bal-util + +## v1.16.14 March 27, 2013 +- Killed explicit browser support, use [Browserify](http://browserify.org/) instead +- Removed the `out` directory from git +- Now compiled with the coffee-script bare option + +## v1.16.13 March 23, 2013 +- `balUtilEvents` changes: + - `EventEmitterEnhanced` changes: + - Now works with `once` calls in node 0.10.0 + - Closes [bevry/docpad#462](https://github.com/bevry/docpad/issues/462) + - Changed `emitSync` to be an alias to `emitSerial` and `emitAsync` to be an alias to `emitParallel` + - Added new `getListenerGroup` function +- `balUtilFlow` changes: + - `fireWithOptionalCallback` can now take the method as an array of `[fireMethod,introspectMethod]` useful for pesly binds + +## v1.16.12 March 18, 2013 +- `balUtilFlow` changes: + - `Groups::run` signature changed from no arguments to a single `mode` argument + +## v1.16.11 March 10, 2013 +- `balUtilModules` changes: + - Fixed `getCountryCode` and `getLanguageCode` failing when there is no locale code + +## v1.16.10 March 8, 2013 +- `balUtilModules` changes: + - Fixed `requireFresh` regression, added test + +## v1.16.9 March 8, 2013 +- `balUtilModules` changes: + - Added `getLocaleCode` + - Added `getCountryCode` + - Added `getLanguageCode` + +## v1.16.8 February 16, 2013 +- `balUtilModules` changes: + - `spawnMultiple`, `execMultiple`: now accept a `tasksMode` option that can be `serial` (default) or `parallel` + +## v1.16.7 February 12, 2013 +- `balUtilPaths` changes: + - `readPath`: do not prefer gzip, but still support it for decoding, as the zlib library is buggy + +## v1.16.6 February 12, 2013 +- `balUtilPaths` changes: + - `readPath`: add support for gzip decoding for node 0.6 and higher + +## v1.16.5 February 6, 2013 +- More [browserify](http://browserify.org/) support + +## v1.16.4 February 6, 2013 +- [Browserify](http://browserify.org/) support + +## v1.16.3 February 5, 2013 +- Node v0.4 support +- `balUtilPaths` changes: + - Removed deprecated `console.log`s when errors occur (they are now sent to the callback) + - Fixed `determineExecPath` when executable requires the environment configuration +- `balUtilTypes` changes: + - `isEmptyObject` now works for empty values (e.g. `null`) +- `balUtilFlow` changes: + - Added `clone` + - Added `deepClone` + - `setDeep` and `getDeep` now handle `undefined` values correctly + +## v1.16.2 February 1, 2013 +- `balUtilPaths` changes: + - Added timeout support to `readPath` +- `balUtilFlow` changes: + - Added `setDeep` + - Added `getDeep` + +## v1.16.1 January 25, 2013 +- `balUtilFlow` changes: + - Added `safeShallowExtendPlainObjects` + - Added `safeDeepExtendPlainObjects` + +## v1.16.0 January 24, 2013 +- Node v0.9 compatability +- `balUtilModules` changes: + - Added `getEnvironmentPaths` + - Added `getStandardExecPaths(execName)` + - `exec` now supports the `output` option + - `determineExecPath` now resolves the possible paths and checks for their existance + - This avoids Node v0.9's ENOENT crash when executing a path that doesn't exit + - `getExecPath` will now try for `.exe` paths as well when running on windows if an extension hasn't already been defined + - `getGitPath`, `getNodePath`, `getNpmPath` will now also check the environment paths +- `balUtilFlow` changes: + - Added `createSnore` + - Added `suffixArray` + - `flow` now accepts the signatures `({object,actions,action,args,tasks,next})`, `(object, action, args, next)` and `(actions,args,next)` + - `Group` changes: + - `mode` can now be either `parallel` or `serial`, rather than `async` and `sync` + - `async()` is now `parallel()` (aliased for b/c) + - `sync()` is now `serial()` (aliased for b/c) +- `balUtilTypes` changes: + - Added `isEmptyObject` + +## v1.15.4 January 8, 2013 +- `balUtilPaths` changes: + - Renamed `testIgnorePatterns` to `isIgnoredPath` + - Added aliases for b/c compatibility + - Added new `ignorePaths` option + +## v1.15.3 December 24, 2012 +- `balUtilModules` changes: + - Added `requireFresh` + +## v1.15.2 December 16, 2012 +- `balUtilPaths` changes: + - Fixed `scandir` not inheriting ignore patterns when recursing + +## v1.15.1 December 15, 2012 +- `balUtilPaths` changes: + - Fixed `testIgnorePatterns` when `ignoreCommonPatterns` is set to `true` + +## v1.15.0 December 15, 2012 +- `balUtilPaths` changes: + - Added `testIgnorePatterns` + - Renamed `ignorePatterns` to `ignoreCommonPatterns`, and added new `ignoreCustomPatterns` + - Affects `scandir` options + - Added emac cache files to `ignoreCommonPatterns` + +## v1.14.1 December 14, 2012 +- `balUtilModules` changes: + - Added `getExecPath` that will fetch an executable path based on the paths within the environment `PATH` variable +- Rebuilt with CoffeeScript 1.4.x + +## v1.14.0 November 23, 2012 +- `balUtilPaths` changes: + - `readPath` will now follow url redirects + +## v1.13.13 October 26, 2012 +- `balUtilPaths` changes: + - Files that start with `~` are now correctly ignored in `commonIgnorePatterns` + +## v1.13.12 October 22, 2012 +- `balUtilFlow` changes: + - `extend` is now an alias of `shallowExtendPlainObjects` as they were exactly the same +- `balUtilHTML` changes: + - `replaceElement` and `replaceElementAsync` changes: + - now accept arguments in object form as well + - accept a `removeIndentation` argument that defaults to `true` + +## v1.13.11 October 22, 2012 +- `balUtilPaths` changes: + - `ensurePath` now returns `err` and `exists` instead of just `err` +- `balUtilModules` changes: + - `initGitRepo` will now default `remote` to `origin` and `branch` to `master` + - Added `initOrPullGitRepo` + +## v1.13.10 October 7, 2012 +- `balUtilPaths` changes: + - Added `shallowExtendPlainObjects` + +## v1.13.9 October 7, 2012 +- `balUtilPaths` changes: + - VIM swap files now added to `commonIgnorePatterns` + - Thanks to [Sean Fridman](https://github.com/sfrdmn) for [pull request #4](https://github.com/balupton/bal-util/pull/4) + +## v1.13.8 October 2, 2012 +- `balUtilModules` changes: + - Added `openProcess` and `closeProcess`, and using them in `spawn` and `exec`, used to prevent `EMFILE` errors when there are too many open processes + - Max number of open processes is configurable via the `NODE_MAX_OPEN_PROCESSES` environment variable + ` balUtilPaths` changes: + - Max number of open files is now configurable via the`NODE_MAX_OPEN_FILES` environment variable + +## v1.13.7 September 24, 2012 +- `balUtilPaths` changes: + - Added `textExtensions` and `binaryExtensions` + - The environment variables `TEXT_EXTENSIONS` and `BINARY_EXTENSIONS` will append to these arrays + - Added `isText` and `isTextSync` + +## v1.13.6 September 18, 2012 +- `balUtilPaths` changes: + - Improved `getEncoding`/`getEncodingSync` detection + - Will now scan start, middle and end, instead of just middle + +## v1.13.5 September 13, 2012 +- `balUtilPaths` changes: + - Added `getEncoding` and `getEncodingSync` + +## v1.13.4 August 28, 2012 +- `balUtilModules` changes: + - Failing to retrieve the path on `getGitPath`, `getNodePath` and `getNpmPath` will now result in an error + +## v1.13.3 August 28, 2012 +- `balUtilModules` changes: + - Fixed `exec` and `execMultiple` + - Added `gitCommands`, `nodeCommands` and `npmCommands` +- Dropped node v0.4 support, min required version now 0.6 + +## v1.13.2 August 16, 2012 +- Repackaged + +## v1.13.1 August 16, 2012 +- `balUtilHTML` changes: + - Fixed `replaceElement` from mixing up elements that start with our desired selector, instead of being only our desired selector + +## v1.13.0 August 3, 2012 +- `balUtilModules` changes: + - Added `determineExecPath`, `getNpmPath`, `getTmpPath`, `nodeCommand` and `gitCommand` + - `initNodeModules` and `initGitRepo` will now get the determined path of the executable if a path isn't passed +- Re-added markdown files to npm distribution as they are required for the npm website + +## v1.12.5 July 18, 2012 +- `balUtilTypes` changes: + - Better checks for `isString` and `isNumber` under some environments +- `balUtilFlow` changes: + - Removed ambigious `clone` function, use `dereference` or `extend` or `deepExtendPlainObjects` instead + +## v1.12.4 July 12, 2012 +- `balUtilTypes` changes: + - `isObject` now also checks truthyness to avoid `null` and `undefined` from being objects + - `isPlainObject` got so good, it can't get better +- `balUtilFlow` changes: + - added `deepExtendPlainObjects` + +## v1.12.3 July 12, 2012 +- `balUtilModules` changes: + - `npmCommand` will now only prefix with the nodePath if the npmPath exists + - `npmCommand` and `initNodeModules` now use async fs calls instead of sync calls + +## v1.12.2 July 12, 2012 +- `balUtilFlow` changes: + - Added `dereference` + +## v1.12.1 July 10, 2012 +- `balUtilModules` changes: + - Added `stdin` option to `spawn` + +## v1.12.0 July 7, 2012 +- Rejigged `balUtilTypes` and now top level + - Other components now make use of this instead of inline `typeof` and `instanceof` checks +- `balUtilFlow` changes: + - `isArray` and `toString` moved to `balUtilTypes` + +## v1.11.2 July 7, 2012 +- `balUtilFlow` changes: + - Added `clone` +- `balUtilModules` changes: + - Fixed exists warning on `initNodeModules` +- `balUtilPaths` changes: + - Added `scanlist` + - `scandir` changes: + - If `readFiles` is `true`, then we will return the contents into the list entries as well as the tree entries (we weren't doing this for lists before) + +## v1.11.1 July 4, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Cleaned up the context handling code + - `Block` changes: + - Block constructor as well as `createSubBlock` arguments is now a single `opts` object, acceping the options `name`, `fn`, `parentBlock` and the new `complete` + - Fixed bug introduced in v1.11.0 causing blocks to complete instantly (instead of once their tasks are finished) + +## v1.11.0 July 1, 2012 +- Added `balUtilHTML`: + - `getAttribute(attributes,attribute)` + - `detectIndentation(source)` + - `removeIndentation(source)` + - `replaceElement(source, elementNameMatcher, replaceElementCallback)` + - `replaceElementAsync(source, elementNameMatcher, replaceElementCallback, next)` +- `balUtilFlow` changes: + - `wait(delay,fn)` introduced as an alternative to `setTimeout` + - `Group` changes: + - `push` and `pushAndRun` signatures are now `([context], task)` + - `context` is optional, and what we should bind to this + - it saves us having to often wrap our task pushing into for each scopes + - task completion callbacks are now optional, if not specified a task will be completed as soon as it finishes executing +- `balUtilEvents`, `balUtilModules` changes: + - Now make use of the `balUtilFlow.push|pushAndRun` new `context` argument to simplify some loops + +## v1.10.3 June 26, 2012 +- `balUtilModules` changes: + - `initNodeModules` will now install modules from cache, unless `force` is true + +## v1.10.2 June 26, 2012 +- `balUtilModules` changes: + - `initNodeModules` will now never install modules from cache + +## v1.10.1 June 26, 2012 +- `balUtilModules` changes: + - Fixed `npmCommand` under some situations + +## v1.10.0 June 26, 2012 +- `balUtilModules` changes: + - Added `spawnMultiple`, `execMultiple`, `gitGitPath`, `getNodePath`, and `npmCommand` + - `spawn` and `exec` are now only for single commands, use the new `spawnMultiple` and `execMultiple` for multiple commands instead + - error exit code is now anything that isnt `0` + +## v1.9.4 June 22, 2012 +- Fixed a problem with large asynchronous groups + +## v1.9.3 June 22, 2012 +- `balUtilFlow` changes: + - Added `extractOptsAndCallback` and `extend` + +## v1.9.2 June 21, 2012 +- `balUtilFlow` changes: + - Added `fireWithOptionalCallback`, updated groups and emitters to use this + +## v1.9.1 June 21, 2012 +- `balUtilModules` changes: + - `initNodeModules` now supports `output` option + +## v1.9.0 June 21, 2012 +- `balUtilEvents` changes: + - `EventEmitterEnhanced` changes: + - `emitSync` and `emitAsync` changes: + - The next callback is now optional, if it is not detected then we will automatically mark the listener as completed once we have executed it (in other words, if it doesn't have a next callback, then we treat it as a synchronous listener) + +## v1.8.8 June 19, 2012 +- Fixed a problem with large synchronous groups + +## v1.8.7 June 19, 2012 +- Defaulted `dependencies` to an empty object, to hopefully fix [npm issue #2540](https://github.com/isaacs/npm/pull/2540) + +## v1.8.6 June 19, 2012 +- `balUtilEvents` changes: + - Split `emitSync` and `emitAsync` out of `EventSystem` and into new `EventEmitterEnhanced` that `EventSystem` extends + +## v1.8.5 June 11, 2012 +- Made next callbacks necessary by default + +## v1.8.4 June 11, 2012 +- `balUtilModule` changes: + - `spawn` + - will now return results in the order of `err`, `stdout`, `stderr`, `code`, `signal` + - now splits string commands using `/ /` +- `balUtilFlow` changes: + - `Group` will now only return error as an array if we have more than one error +- Updated for Joe v1.0.0 + +## v1.8.3 June 9, 2012 +- `balUtilCompare` changes: + - `packageCompare` will now fail gracefully if it receives malformed json + +## v1.8.2 June 9, 2012 +- Removed request dependency, we now use the native http/https modules + +## v1.8.1 June 9, 2012 +- Restructured directories +- Removed generated docs, use the wiki instead +- Moved tests from Mocha to [Joe](https://github.com/bevry/joe) +- Travis now tests against node v0.7 +- `balUtilPaths` changes: + - Added `exists` and `existsSync` to normalize node's 0.6 to 0.8 api differences +- Made [request](https://github.com/mikeal/request) an optional dependency + +## v1.8.0 June 9, 2012 +- Added expiremental `balUtilFlow.Block` +- Possibly some undocumented `balUtilFlow.Group` changes + +## v1.7.0 June 4, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Constructor now supports `next` and `mode` arguments in any order + - `clear()` now clears everything + - Added `hasTasks()` + - Group completion callback's first argument (the error argument) is now an array of errors (or null if no errors) + - Added `breakOnError` option (defaults to `true`) + - Added `autoClear` option to clear once all tasks have run (defualts to `false`) + +## v1.6.5 May 30, 2012 +- `balUtilFlow` changes: + - `Group` changes: + - Reverted the change made in v1.6.4 where errors in callbacks still increment the complete count + - Instead, you should be using the `hasExited()` instead of `hasCompleted()` which is used to find out if everything passed successfully + +## v1.6.4 May 30, 2012 +- `balUtilFlow` changes: + - Added `flow({object,action,[args],[tasks],next})` to simplify calling a series of functions of an object + - `Group` changes: + - If complete callback is called with an error, it'll still increment the complete count (it didn't before) + - Added `hasExited()` +- `balUtilPaths` changes: + - `writeFile` will now call `ensurePath` before writing the file + +## v1.6.3 May 22, 2012 +- `balUtilPaths` changes: + - Fixed a problem introduced with v1.6.0 with `isDirectory` not opening the file before closing it + - If the number of open files becomes a negative number, we will now throw an error + - Decreased the max amount of allowed open files from `500` to `100` + - Increased the wait time for opening a file from `50` to `100` + - This is now customisable through the global `waitingToOpenFileDelay` + +## v1.6.2 May 13, 2012 +- Added support for `balUtilFlow` and `balUtilTypes` to be used inside web browsers + +## v1.6.1 May 4, 2012 +- `balUtilPaths` changes: + - Fixed `initNodeModules` + +## v1.6.0 May 4, 2012 +- We now pre-compile our coffee-script +- `balUtilPaths` changes: + - Added `readFile`, `writeFile`, `mkdir`, `stat`, `readdir`, `unlink`, `rmdir` + - Renamed `rmdir` to `rmdirDeep` +- `balUtilModules` changes: + - Removed `initGitSubmodules`, `gitPull` + - Added `initGitRepo` + - Rewrote `initNodeModules` + +## v1.5.0 April 18, 2012 +- `balUtilPaths` changes: + - `scan` was removed, not sure what it was used for + - `isDirectory` now returns the `fileStat` argument to the callback + - `scandir` changes: + - `ignorePatterns` option when set to true now uses the new `balUtilPaths.commonIgnorePatterns` property + - fixed error throwing when passed an invalid path + - now supports a new `stat` option + - will return the `fileStat` argument to the `fileAction` and `dirAction` callbacks + - `ignorePatterns` and `ignoreHiddenFiles` will now correctly be passed to child scandir calls + - `cpdir` and `rpdir` now uses `path.join` and support `ignoreHiddenFiles` and `ignorePatterns` + - `writetree` now uses `path.join` + +## v1.4.3 April 14, 2012 +- CoffeeScript dependency is now bundled +- Fixed incorrect octal `0700` should have been `700` + +## v1.4.2 April 5, 2012 +- Fixed a failing test due to the `bal-util.npm` to `bal-util` rename +- Improvements to `balUtilModules.spawn` + - will only return an error if the exit code was `1` + - will also contain the `code` and `signal` with the results + - `results[x][0]` is now the stderr string, rather than an error object + +## v1.4.1 April 5, 2012 +- Added `spawn` to `balUtilModules` +- Added `ignoreHiddenFiles` option to `balUtilPaths.scandir` + +## v1.4.0 April 2, 2012 +- Renamed `balUtilGroups` to `balUtilFlow` +- Added `toString`, `isArray` and `each` to `balUtilFlow` +- Added `rpdir`, `empty`, and `isPathOlderThan` to `balUtilPaths` + +## v1.3.0 February 26, 2012 +- Added `openFile` and `closeFile` to open and close files safely (always stays below the maximum number of allowed open files) +- Updated all path utilities to use `openFile` and `closeFile` +- Added npm scripts + +## v1.2.0 February 14, 2012 +- Removed single and multi modes from `exec`, now always returns the same consistent `callback(err,results)` instead + +## v1.1.0 February 6, 2012 +- Modularized +- Added [docco](http://jashkenas.github.com/docco/) docs + +## v1.0 February 5, 2012 +- Moved unit tests to [Mocha](http://visionmedia.github.com/mocha/) + - Offers more flexible unit testing + - Offers better guarantees that tests actually ran, and that they actually ran correctly +- Added `readPath` and `scantree` +- Added `readFiles` option to `scandir` +- `scandir` now supports arguments in object format +- Removed `parallel` +- Tasks inside groups now are passed `next` as there only argument +- Removed `resolvePath`, `expandPath` and `expandPaths`, they were essentially the same as `path.resolve` +- Most functions will now chain +- `comparePackage` now supports comparing two local, or two remote packages +- Added `gitPull` + +## v0.9 January 18, 2012 +- Added `exec`, `initNodeModules`, `initGitSubmodules`, `EventSystem.when` +- Added support for no callbacks + +## v0.8 November 2, 2011 +- Considerable improvements to `scandir`, `cpdir` and `rmdir` + - Note, passing `false` as the file or dir actions will now skip all of that type. Pass `null` if you do not want that. + - `dirAction` is now fired before we read the directories children, if you want it to fire after then in the next callback, pass a callback in the 3rd argument. See `rmdir` for an example of this. +- Fixed npm web to url warnings + +## v0.7 October 3, 2011 +- Added `versionCompare` and `packageCompare` functions + - Added `request` dependency + +## v0.6 September 14, 2011 +- Updated `util.Group` to support `async` and `sync` grouping + +## v0.4 June 2, 2011 +- Added util.type for testing the type of a variable +- Added util.expandPath and util.expandPaths + +## v0.3 June 1, 2011 +- Added util.Group class for your async needs :) + +## v0.2 May 20, 2011 +- Added some tests with expresso +- util.scandir now returns err,list,tree +- Added util.writetree + +## v0.1 May 18, 2011 +- Initial commit diff --git a/node_modules/scandirectory/node_modules/taskgroup/LICENSE.md b/node_modules/scandirectory/node_modules/taskgroup/LICENSE.md new file mode 100644 index 000000000..3652c35a2 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/LICENSE.md @@ -0,0 +1,24 @@ + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

    MIT License

    + +
    +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.
    +
    + + diff --git a/node_modules/scandirectory/node_modules/taskgroup/README.md b/node_modules/scandirectory/node_modules/taskgroup/README.md new file mode 100755 index 000000000..fe8e72918 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/README.md @@ -0,0 +1,128 @@ + + +

    TaskGroup

    + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Slack community badge +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + + + + + + +Group together synchronous and asynchronous tasks and execute them with support for concurrency, naming, and nesting. + + + + + + +

    Install

    + +

    NPM

      +
    • Install: npm install --save taskgroup
    • +
    • Use: require('taskgroup')
    + +

    Browserify

      +
    • Install: npm install --save taskgroup
    • +
    • Use: require('taskgroup')
    • +
    • CDN URL: //wzrd.in/bundle/taskgroup@4.3.1
    + +

    Ender

      +
    • Install: ender add taskgroup
    • +
    • Use: require('taskgroup')
    + + + + +## Usage + +1. [Introduction Guide & Usage Examples](http://bevry.me/taskgroup/guide) +2. [Technical API](http://bevry.me/taskgroup/api) +3. [Comparisons against other flow libraries](http://bevry.me/taskgroup/comparisons) +4. [Projects & Libraries built on top of TaskGroup](http://bevry.me/taskgroup/showcase) + + + + +

    History

    + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

    Contribute

    + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    Backers

    + +

    Maintainers

    + +These amazing people are maintaining this project: + + + +

    Sponsors

    + +No sponsors yet! Will you be the first? + +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

    Contributors

    + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

    License

    + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/HISTORY.md.html b/node_modules/scandirectory/node_modules/taskgroup/docs/HISTORY.md.html new file mode 100644 index 000000000..8fd241543 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/HISTORY.md.html @@ -0,0 +1,1149 @@ + + + + + TaskGroup API Documentation + + + + + +
    + +
    + +
    +

    History

    +

    v4.3.1 2015 December 10

    +
      +
    • Removed cyclic.js as the problem it solved was solved by npm v2 and above
    • +
    +

    v4.3.0 March 15, 2015

    +
      +
    • Module.exports now exports the TaskGroup class, of which Task and TaskGroup are now children
    • +
    • Added Task attribute on the TaskGroup class to allow over-riding of what should be the sub-task class
    • +
    • Added TaskGroup attribute on the TaskGroup class to allow over-riding of what should be the sub-taskgroup class
    • +
    • Added the sync configuration option, which when set to true will allow the execution of a Task or TaskGroup to execute synchronously
    • +
    • Updated dependencies
    • +
    +

    v4.2.1 February 20, 2015

    +
      +
    • Output more information about errors when a task completes twice
    • +
    +

    v4.2.0 February 2, 2015

    +
      +
    • Reintroduced try...catch for Node v0.8 and browser environments with a workaround to prevent error suppression +
    • +
    • You can now ignore all the warnings from the v4.1.0 changelog as the behaviour is more or less the same as v4.0.5 but with added improvements
    • +
    +

    v4.1.0 February 2, 2015

    +
      +
    • This release fixes the errors in completion callbacks being swallowed/lost +
    • +
    • The following changes have been made
        +
      • We no longer use try...catch at all, if you want error catching in your task, you must not disable domains (they are enabled by default) - why?
      • +
      • We now force exit the domain when the task's method calls its completion callback
      • +
      • Domains now wrap only the firing of the task's method, rather than the preparation too as before
      • +
      • Removed superflous check to ensure a task has a method before execution
      • +
      • Ensured the actual check to ensure a task has a method before execution also checks if the method is actually a function (via checking for .bind) as the superflous check did
      • +
      +
    • +
    • This could introduce the following issues in the following cases:
        +
      • You may get errors that were suppressed before now showing themselves, this is good, but it may cause unexpected things to break loudly that were breaking silently before
      • +
      • If you have domains disabled and an error is thrown, you will get a different flow of logic than before as the error will be caught in your code, not TaskGroup's
      • +
      • The domain's flow has improved, but this may cause a different flow than you were expecting previously
      • +
      +
    • +
    • This will introduce the following issues in the following cases:
        +
      • If you are still on Node v0.8, synchronous errors and perhaps asynchronous errors thrown within your task method will no longer be caught by TaskGroup (due to Node 0.8's crippled domain functionality) and instead will need to be caught by your code either via preferably sent to the task method's completion callback rather than thrown, or via your own try...catch. But please upgrade to Node 0.10 or higher.
          +
        • If you are running TaskGroup in a web browser, you will need to catch errors manually or utilise a domain shim (browserify has one by default) - why?
        • +
        +
      • +
      +
    • +
    • In other words, this release is the most stable yet, but do run your tests (you should always do this)
    • +
    +

    v4.0.5 August 3, 2014

    +
      +
    • Changed an error output to be of error type
    • +
    +

    v4.0.4 August 3, 2014

    +
      +
    • Added the ability to turn off using domains by setting the new task option domain to false (defaults to true)
    • +
    • Added the ability to turn off using ambi by setting the new task option ambi to false (defaults to true)
    • +
    +

    v4.0.3 July 11, 2014

    +
      +
    • Use setImmediate instead of nextTick to avoid (node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral. errors
    • +
    • Updated dependencies
    • +
    +

    v4.0.2 June 18, 2014

    +
      +
    • Added support for done, whenDone, onceDone, once, and on configuration options
    • +
    +

    v4.0.1 June 16, 2014

    +
      +
    • Fixed Recursive process.nextTick detected error (regression since v4.0.0)
    • +
    +

    v4.0.0 June 16, 2014

    +
      +
    • Significant rewrite with b/c breaks
        +
      • Completion listeners should now be accomplished via .done(listener) (listens once) or .whenDone(listener) (listener persists)
          +
        • These methods are promises in that they will execute the listener if the item is already complete
        • +
        • They listen for the done event
        • +
        +
      • +
      • The execution of tasks and groups have had a great deal of investment to ensure execution is intuitive and consistent across different use cases
          +
        • Refer to to src/lib/test/taskgroup-usage-test.coffee for the guaranteed expectations across different scenarios
        • +
        +
      • +
      • In earlier versions you could use tasks.exit() during execution to clear remaning items, stop execution, and exit, you can no longer do this, instead use the completion callback with an error, or call tasks.clear() then the completion callback
      • +
      • Refer to the new public api docs for the latest usage
      • +
      +
    • +
    • Changes
        +
      • complete event is now completed, but you really should be using the new done event or the promise methods
      • +
      • run event is now started
      • +
      • A lot of internal variables and methods have had their functionality changed or removed, if a method or variable is not in the public api, do not use it
      • +
      • There is now a default error and completed listener that will emit the done event if there are listeners for it, if there is no done event listeners, and an error has occured, we will throw the error
      • +
      • Tasks and groups will now only receive a default name when required, this is to prevent set names from being over-written by the default
      • +
      • Adding of tasks and groups to a group instance will now return the group instance rather than the added tasks to ensure chainability, if you want the created tasks, use .createTask(...) and .createGroup(...) instead, then add the result manually
      • +
      +
    • +
    • Introductions
        +
      • passed, failed, destroyed events are new
      • +
      • Task only
          +
        • new timeout option that accepts a number of milliseconds to wait before throwing an error
        • +
        • new onError option that defaults to 'exit' but can also accept 'ignore' which will ignore duplicated exit errors (useful when combined with timeout event)
        • +
        +
      • +
      • TaskGroup only
          +
        • new onError option that defaults to 'exit' but can also accept 'ignore' which will ignore all task errors
        • +
        • new setNestedConfig(config) and setNestedTaskConfig(config) options to set configuration for all children
        • +
        +
      • +
      +
    • +
    +

    v3.4.0 May 8, 2014

    +
      +
    • Added context option for Task, to perform a late bind on the method
    • +
    • Asynchronous task methods can now accept optional arguments thanks to new ambi version
    • +
    • Updated dependencies
    • +
    +

    v3.3.9 May 4, 2014

    +
      +
    • Added extendonclass support
    • +
    • Added Task.create and TaskGroup.create helpers
    • +
    • Will no longer fall over if an invalid argument is passed as configuration
    • +
    • Updated dependencies
    • +
    +

    v3.3.8 February 5, 2014

    +
      +
    • More descriptive error when a task is fired without a method to fire
    • +
    +

    v3.3.7 January 30, 2014

    +
      +
    • Improvements around adding tasks to task groups and passing arguments to Task and TaskGroup constructors
    • +
    +

    v3.3.6 November 29, 2013

    +
      +
    • Properly fixed v3.3.3 issue while maintaining node.js v0.8 and browserify support +
    • +
    +

    v3.3.5 November 28, 2013

    +
      +
    • Re-added Node.js v0.8 support (regression since v3.3.3)
    • +
    +

    v3.3.4 November 27, 2013

    +
      +
    • Fixed the v3.3.3 fix
    • +
    +

    v3.3.3 November 27, 2013

    +
      +
    • Fixed possible "(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral." error under certain circumstances
    • +
    +

    v3.3.2 November 19, 2013

    +
      +
    • Don't add or create empty tasks and groups
    • +
    +

    v3.3.1 November 6, 2013

    +
      +
    • Fixed child event bubbling by using duck typing (regression since v3.3.0)
    • +
    • Better error handling on uncaught task exceptions
    • +
    • Tasks will now get a default name set to ease debugging
    • +
    +

    v3.3.0 November 1, 2013

    +
      +
    • Bindings are now more explicit
    • +
    • Improved configuration parsing
    • +
    • Configuration is now accessed via getConfig()
    • +
    • Dropped component.io and bower support, just use ender or browserify
    • +
    +

    v3.2.4 October 27, 2013

    +
      +
    • Re-packaged
    • +
    +

    v3.2.3 September 18, 2013

    +
      +
    • Fixed cyclic dependency problem on windows (since v2.1.3)
    • +
    • Added bower support
    • +
    +

    v3.2.2 September 18, 2013

    +
      +
    • Component.io compatibility
    • +
    +

    v3.2.1 August 19, 2013

    +
      +
    • Republish with older verson of joe dev dependency to try and stop cyclic errors
    • +
    • Better node 0.8 support when catching thrown errors
    • +
    +

    v3.2.0 August 19, 2013

    +
      +
    • Wrapped Task execution in a domain to catch uncaught errors within the task execution, as well as added checks to ensure the completion callback does not fire multiple times
        +
      • These will be reported via the error event that the Task will emit
          +
        • If the Task is part of a TaskGroup, the TaskGroup will listen for this, kill the TaskGroup and emit an error event on the TaskGroup
        • +
        +
      • +
      +
    • +
    • Moved from EventEmitter2 to node's own EventEmitter to ensure domain compatibility
    • +
    +

    v3.1.2 April 6, 2013

    +
      +
    • Added getTotals() to TaskGroup
    • +
    • Added complete() to Task
    • +
    +

    v3.1.1 April 5, 2013

    +
      +
    • Fixed task run issue under certain circumstances
    • +
    • Added exit(err) function
    • +
    +

    v3.1.0 April 5, 2013

    +
      +
    • Tasks can now have the arguments that are sent to them customized by the args configuration option
    • +
    • Group inline functions now support an optional completion callback
    • +
    • Group events for items now have their first argument as the item the event was for
    • +
    +

    v3.0.0 April 5, 2013

    +
      +
    • Significant rewrite and b/c break
    • +
    +

    v2.0.0 March 27, 2013

    +
      +
    • Split from bal-util
    • +
    +

    v1.16.14 March 27, 2013

    +
      +
    • Killed explicit browser support, use Browserify instead
    • +
    • Removed the out directory from git
    • +
    • Now compiled with the coffee-script bare option
    • +
    +

    v1.16.13 March 23, 2013

    +
      +
    • balUtilEvents changes:
        +
      • EventEmitterEnhanced changes:
          +
        • Now works with once calls in node 0.10.0 +
        • +
        • Changed emitSync to be an alias to emitSerial and emitAsync to be an alias to emitParallel
        • +
        • Added new getListenerGroup function
        • +
        +
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • fireWithOptionalCallback can now take the method as an array of [fireMethod,introspectMethod] useful for pesly binds
      • +
      +
    • +
    +

    v1.16.12 March 18, 2013

    +
      +
    • balUtilFlow changes:
        +
      • Groups::run signature changed from no arguments to a single mode argument
      • +
      +
    • +
    +

    v1.16.11 March 10, 2013

    +
      +
    • balUtilModules changes:
        +
      • Fixed getCountryCode and getLanguageCode failing when there is no locale code
      • +
      +
    • +
    +

    v1.16.10 March 8, 2013

    +
      +
    • balUtilModules changes:
        +
      • Fixed requireFresh regression, added test
      • +
      +
    • +
    +

    v1.16.9 March 8, 2013

    +
      +
    • balUtilModules changes:
        +
      • Added getLocaleCode
      • +
      • Added getCountryCode
      • +
      • Added getLanguageCode
      • +
      +
    • +
    +

    v1.16.8 February 16, 2013

    +
      +
    • balUtilModules changes:
        +
      • spawnMultiple, execMultiple: now accept a tasksMode option that can be serial (default) or parallel
      • +
      +
    • +
    +

    v1.16.7 February 12, 2013

    +
      +
    • balUtilPaths changes:
        +
      • readPath: do not prefer gzip, but still support it for decoding, as the zlib library is buggy
      • +
      +
    • +
    +

    v1.16.6 February 12, 2013

    +
      +
    • balUtilPaths changes:
        +
      • readPath: add support for gzip decoding for node 0.6 and higher
      • +
      +
    • +
    +

    v1.16.5 February 6, 2013

    + +

    v1.16.4 February 6, 2013

    + +

    v1.16.3 February 5, 2013

    +
      +
    • Node v0.4 support
    • +
    • balUtilPaths changes:
        +
      • Removed deprecated console.logs when errors occur (they are now sent to the callback)
      • +
      • Fixed determineExecPath when executable requires the environment configuration
      • +
      +
    • +
    • balUtilTypes changes:
        +
      • isEmptyObject now works for empty values (e.g. null)
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • Added clone
      • +
      • Added deepClone
      • +
      • setDeep and getDeep now handle undefined values correctly
      • +
      +
    • +
    +

    v1.16.2 February 1, 2013

    +
      +
    • balUtilPaths changes:
        +
      • Added timeout support to readPath
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • Added setDeep
      • +
      • Added getDeep
      • +
      +
    • +
    +

    v1.16.1 January 25, 2013

    +
      +
    • balUtilFlow changes:
        +
      • Added safeShallowExtendPlainObjects
      • +
      • Added safeDeepExtendPlainObjects
      • +
      +
    • +
    +

    v1.16.0 January 24, 2013

    +
      +
    • Node v0.9 compatability
    • +
    • balUtilModules changes:
        +
      • Added getEnvironmentPaths
      • +
      • Added getStandardExecPaths(execName)
      • +
      • exec now supports the output option
      • +
      • determineExecPath now resolves the possible paths and checks for their existance
          +
        • This avoids Node v0.9's ENOENT crash when executing a path that doesn't exit
        • +
        +
      • +
      • getExecPath will now try for .exe paths as well when running on windows if an extension hasn't already been defined
      • +
      • getGitPath, getNodePath, getNpmPath will now also check the environment paths
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • Added createSnore
      • +
      • Added suffixArray
      • +
      • flow now accepts the signatures ({object,actions,action,args,tasks,next}), (object, action, args, next) and (actions,args,next)
      • +
      • Group changes:
          +
        • mode can now be either parallel or serial, rather than async and sync
        • +
        • async() is now parallel() (aliased for b/c)
        • +
        • sync() is now serial() (aliased for b/c)
        • +
        +
      • +
      +
    • +
    • balUtilTypes changes:
        +
      • Added isEmptyObject
      • +
      +
    • +
    +

    v1.15.4 January 8, 2013

    +
      +
    • balUtilPaths changes:
        +
      • Renamed testIgnorePatterns to isIgnoredPath
          +
        • Added aliases for b/c compatibility
        • +
        +
      • +
      • Added new ignorePaths option
      • +
      +
    • +
    +

    v1.15.3 December 24, 2012

    +
      +
    • balUtilModules changes:
        +
      • Added requireFresh
      • +
      +
    • +
    +

    v1.15.2 December 16, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Fixed scandir not inheriting ignore patterns when recursing
      • +
      +
    • +
    +

    v1.15.1 December 15, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Fixed testIgnorePatterns when ignoreCommonPatterns is set to true
      • +
      +
    • +
    +

    v1.15.0 December 15, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Added testIgnorePatterns
      • +
      • Renamed ignorePatterns to ignoreCommonPatterns, and added new ignoreCustomPatterns
          +
        • Affects scandir options
        • +
        +
      • +
      • Added emac cache files to ignoreCommonPatterns
      • +
      +
    • +
    +

    v1.14.1 December 14, 2012

    +
      +
    • balUtilModules changes:
        +
      • Added getExecPath that will fetch an executable path based on the paths within the environment PATH variable
      • +
      +
    • +
    • Rebuilt with CoffeeScript 1.4.x
    • +
    +

    v1.14.0 November 23, 2012

    +
      +
    • balUtilPaths changes:
        +
      • readPath will now follow url redirects
      • +
      +
    • +
    +

    v1.13.13 October 26, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Files that start with ~ are now correctly ignored in commonIgnorePatterns
      • +
      +
    • +
    +

    v1.13.12 October 22, 2012

    +
      +
    • balUtilFlow changes:
        +
      • extend is now an alias of shallowExtendPlainObjects as they were exactly the same
      • +
      +
    • +
    • balUtilHTML changes:
        +
      • replaceElement and replaceElementAsync changes:
          +
        • now accept arguments in object form as well
        • +
        • accept a removeIndentation argument that defaults to true
        • +
        +
      • +
      +
    • +
    +

    v1.13.11 October 22, 2012

    +
      +
    • balUtilPaths changes:
        +
      • ensurePath now returns err and exists instead of just err
      • +
      +
    • +
    • balUtilModules changes:
        +
      • initGitRepo will now default remote to origin and branch to master
      • +
      • Added initOrPullGitRepo
      • +
      +
    • +
    +

    v1.13.10 October 7, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Added shallowExtendPlainObjects
      • +
      +
    • +
    +

    v1.13.9 October 7, 2012

    + +

    v1.13.8 October 2, 2012

    +
      +
    • balUtilModules changes:
        +
      • Added openProcess and closeProcess, and using them in spawn and exec, used to prevent EMFILE errors when there are too many open processes
      • +
      • Max number of open processes is configurable via the NODE_MAX_OPEN_PROCESSES environment variable +balUtilPaths changes:
      • +
      • Max number of open files is now configurable via theNODE_MAX_OPEN_FILES environment variable
      • +
      +
    • +
    +

    v1.13.7 September 24, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Added textExtensions and binaryExtensions
          +
        • The environment variables TEXT_EXTENSIONS and BINARY_EXTENSIONS will append to these arrays
        • +
        +
      • +
      • Added isText and isTextSync
      • +
      +
    • +
    +

    v1.13.6 September 18, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Improved getEncoding/getEncodingSync detection
          +
        • Will now scan start, middle and end, instead of just middle
        • +
        +
      • +
      +
    • +
    +

    v1.13.5 September 13, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Added getEncoding and getEncodingSync
      • +
      +
    • +
    +

    v1.13.4 August 28, 2012

    +
      +
    • balUtilModules changes:
        +
      • Failing to retrieve the path on getGitPath, getNodePath and getNpmPath will now result in an error
      • +
      +
    • +
    +

    v1.13.3 August 28, 2012

    +
      +
    • balUtilModules changes:
        +
      • Fixed exec and execMultiple
      • +
      • Added gitCommands, nodeCommands and npmCommands
      • +
      +
    • +
    • Dropped node v0.4 support, min required version now 0.6
    • +
    +

    v1.13.2 August 16, 2012

    +
      +
    • Repackaged
    • +
    +

    v1.13.1 August 16, 2012

    +
      +
    • balUtilHTML changes:
        +
      • Fixed replaceElement from mixing up elements that start with our desired selector, instead of being only our desired selector
      • +
      +
    • +
    +

    v1.13.0 August 3, 2012

    +
      +
    • balUtilModules changes:
        +
      • Added determineExecPath, getNpmPath, getTmpPath, nodeCommand and gitCommand
      • +
      • initNodeModules and initGitRepo will now get the determined path of the executable if a path isn't passed
      • +
      +
    • +
    • Re-added markdown files to npm distribution as they are required for the npm website
    • +
    +

    v1.12.5 July 18, 2012

    +
      +
    • balUtilTypes changes:
        +
      • Better checks for isString and isNumber under some environments
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • Removed ambigious clone function, use dereference or extend or deepExtendPlainObjects instead
      • +
      +
    • +
    +

    v1.12.4 July 12, 2012

    +
      +
    • balUtilTypes changes:
        +
      • isObject now also checks truthyness to avoid null and undefined from being objects
      • +
      • isPlainObject got so good, it can't get better
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • added deepExtendPlainObjects
      • +
      +
    • +
    +

    v1.12.3 July 12, 2012

    +
      +
    • balUtilModules changes:
        +
      • npmCommand will now only prefix with the nodePath if the npmPath exists
      • +
      • npmCommand and initNodeModules now use async fs calls instead of sync calls
      • +
      +
    • +
    +

    v1.12.2 July 12, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Added dereference
      • +
      +
    • +
    +

    v1.12.1 July 10, 2012

    +
      +
    • balUtilModules changes:
        +
      • Added stdin option to spawn
      • +
      +
    • +
    +

    v1.12.0 July 7, 2012

    +
      +
    • Rejigged balUtilTypes and now top level
        +
      • Other components now make use of this instead of inline typeof and instanceof checks
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • isArray and toString moved to balUtilTypes
      • +
      +
    • +
    +

    v1.11.2 July 7, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Added clone
      • +
      +
    • +
    • balUtilModules changes:
        +
      • Fixed exists warning on initNodeModules
      • +
      +
    • +
    • balUtilPaths changes:
        +
      • Added scanlist
      • +
      • scandir changes:
          +
        • If readFiles is true, then we will return the contents into the list entries as well as the tree entries (we weren't doing this for lists before)
        • +
        +
      • +
      +
    • +
    +

    v1.11.1 July 4, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Group changes:
          +
        • Cleaned up the context handling code
        • +
        +
      • +
      • Block changes:
          +
        • Block constructor as well as createSubBlock arguments is now a single opts object, acceping the options name, fn, parentBlock and the new complete
        • +
        • Fixed bug introduced in v1.11.0 causing blocks to complete instantly (instead of once their tasks are finished)
        • +
        +
      • +
      +
    • +
    +

    v1.11.0 July 1, 2012

    +
      +
    • Added balUtilHTML:
        +
      • getAttribute(attributes,attribute)
      • +
      • detectIndentation(source)
      • +
      • removeIndentation(source)
      • +
      • replaceElement(source, elementNameMatcher, replaceElementCallback)
      • +
      • replaceElementAsync(source, elementNameMatcher, replaceElementCallback, next)
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • wait(delay,fn) introduced as an alternative to setTimeout
      • +
      • Group changes:
          +
        • push and pushAndRun signatures are now ([context], task)
            +
          • context is optional, and what we should bind to this
          • +
          • it saves us having to often wrap our task pushing into for each scopes
          • +
          +
        • +
        • task completion callbacks are now optional, if not specified a task will be completed as soon as it finishes executing
        • +
        +
      • +
      +
    • +
    • balUtilEvents, balUtilModules changes:
        +
      • Now make use of the balUtilFlow.push|pushAndRun new context argument to simplify some loops
      • +
      +
    • +
    +

    v1.10.3 June 26, 2012

    +
      +
    • balUtilModules changes:
        +
      • initNodeModules will now install modules from cache, unless force is true
      • +
      +
    • +
    +

    v1.10.2 June 26, 2012

    +
      +
    • balUtilModules changes:
        +
      • initNodeModules will now never install modules from cache
      • +
      +
    • +
    +

    v1.10.1 June 26, 2012

    +
      +
    • balUtilModules changes:
        +
      • Fixed npmCommand under some situations
      • +
      +
    • +
    +

    v1.10.0 June 26, 2012

    +
      +
    • balUtilModules changes:
        +
      • Added spawnMultiple, execMultiple, gitGitPath, getNodePath, and npmCommand
      • +
      • spawn and exec are now only for single commands, use the new spawnMultiple and execMultiple for multiple commands instead
      • +
      • error exit code is now anything that isnt 0
      • +
      +
    • +
    +

    v1.9.4 June 22, 2012

    +
      +
    • Fixed a problem with large asynchronous groups
    • +
    +

    v1.9.3 June 22, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Added extractOptsAndCallback and extend
      • +
      +
    • +
    +

    v1.9.2 June 21, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Added fireWithOptionalCallback, updated groups and emitters to use this
      • +
      +
    • +
    +

    v1.9.1 June 21, 2012

    +
      +
    • balUtilModules changes:
        +
      • initNodeModules now supports output option
      • +
      +
    • +
    +

    v1.9.0 June 21, 2012

    +
      +
    • balUtilEvents changes:
        +
      • EventEmitterEnhanced changes:
          +
        • emitSync and emitAsync changes:
            +
          • The next callback is now optional, if it is not detected then we will automatically mark the listener as completed once we have executed it (in other words, if it doesn't have a next callback, then we treat it as a synchronous listener)
          • +
          +
        • +
        +
      • +
      +
    • +
    +

    v1.8.8 June 19, 2012

    +
      +
    • Fixed a problem with large synchronous groups
    • +
    +

    v1.8.7 June 19, 2012

    +
      +
    • Defaulted dependencies to an empty object, to hopefully fix npm issue #2540
    • +
    +

    v1.8.6 June 19, 2012

    +
      +
    • balUtilEvents changes:
        +
      • Split emitSync and emitAsync out of EventSystem and into new EventEmitterEnhanced that EventSystem extends
      • +
      +
    • +
    +

    v1.8.5 June 11, 2012

    +
      +
    • Made next callbacks necessary by default
    • +
    +

    v1.8.4 June 11, 2012

    +
      +
    • balUtilModule changes:
        +
      • spawn
          +
        • will now return results in the order of err, stdout, stderr, code, signal
        • +
        • now splits string commands using / /
        • +
        +
      • +
      +
    • +
    • balUtilFlow changes:
        +
      • Group will now only return error as an array if we have more than one error
      • +
      +
    • +
    • Updated for Joe v1.0.0
    • +
    +

    v1.8.3 June 9, 2012

    +
      +
    • balUtilCompare changes:
        +
      • packageCompare will now fail gracefully if it receives malformed json
      • +
      +
    • +
    +

    v1.8.2 June 9, 2012

    +
      +
    • Removed request dependency, we now use the native http/https modules
    • +
    +

    v1.8.1 June 9, 2012

    +
      +
    • Restructured directories
    • +
    • Removed generated docs, use the wiki instead
    • +
    • Moved tests from Mocha to Joe
    • +
    • Travis now tests against node v0.7
    • +
    • balUtilPaths changes:
        +
      • Added exists and existsSync to normalize node's 0.6 to 0.8 api differences
      • +
      +
    • +
    • Made request an optional dependency
    • +
    +

    v1.8.0 June 9, 2012

    +
      +
    • Added expiremental balUtilFlow.Block
    • +
    • Possibly some undocumented balUtilFlow.Group changes
    • +
    +

    v1.7.0 June 4, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Group changes:
          +
        • Constructor now supports next and mode arguments in any order
        • +
        • clear() now clears everything
        • +
        • Added hasTasks()
        • +
        • Group completion callback's first argument (the error argument) is now an array of errors (or null if no errors)
        • +
        • Added breakOnError option (defaults to true)
        • +
        • Added autoClear option to clear once all tasks have run (defualts to false)
        • +
        +
      • +
      +
    • +
    +

    v1.6.5 May 30, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Group changes:
          +
        • Reverted the change made in v1.6.4 where errors in callbacks still increment the complete count
            +
          • Instead, you should be using the hasExited() instead of hasCompleted() which is used to find out if everything passed successfully
          • +
          +
        • +
        +
      • +
      +
    • +
    +

    v1.6.4 May 30, 2012

    +
      +
    • balUtilFlow changes:
        +
      • Added flow({object,action,[args],[tasks],next}) to simplify calling a series of functions of an object
      • +
      • Group changes:
          +
        • If complete callback is called with an error, it'll still increment the complete count (it didn't before)
        • +
        • Added hasExited()
        • +
        +
      • +
      +
    • +
    • balUtilPaths changes:
        +
      • writeFile will now call ensurePath before writing the file
      • +
      +
    • +
    +

    v1.6.3 May 22, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Fixed a problem introduced with v1.6.0 with isDirectory not opening the file before closing it
      • +
      • If the number of open files becomes a negative number, we will now throw an error
      • +
      • Decreased the max amount of allowed open files from 500 to 100
      • +
      • Increased the wait time for opening a file from 50 to 100
          +
        • This is now customisable through the global waitingToOpenFileDelay
        • +
        +
      • +
      +
    • +
    +

    v1.6.2 May 13, 2012

    +
      +
    • Added support for balUtilFlow and balUtilTypes to be used inside web browsers
    • +
    +

    v1.6.1 May 4, 2012

    +
      +
    • balUtilPaths changes:
        +
      • Fixed initNodeModules
      • +
      +
    • +
    +

    v1.6.0 May 4, 2012

    +
      +
    • We now pre-compile our coffee-script
    • +
    • balUtilPaths changes:
        +
      • Added readFile, writeFile, mkdir, stat, readdir, unlink, rmdir
      • +
      • Renamed rmdir to rmdirDeep
      • +
      +
    • +
    • balUtilModules changes:
        +
      • Removed initGitSubmodules, gitPull
      • +
      • Added initGitRepo
      • +
      • Rewrote initNodeModules
      • +
      +
    • +
    +

    v1.5.0 April 18, 2012

    +
      +
    • balUtilPaths changes:
        +
      • scan was removed, not sure what it was used for
      • +
      • isDirectory now returns the fileStat argument to the callback
      • +
      • scandir changes:
          +
        • ignorePatterns option when set to true now uses the new balUtilPaths.commonIgnorePatterns property
        • +
        • fixed error throwing when passed an invalid path
        • +
        • now supports a new stat option
        • +
        • will return the fileStat argument to the fileAction and dirAction callbacks
        • +
        • ignorePatterns and ignoreHiddenFiles will now correctly be passed to child scandir calls
        • +
        +
      • +
      • cpdir and rpdir now uses path.join and support ignoreHiddenFiles and ignorePatterns
      • +
      • writetree now uses path.join
      • +
      +
    • +
    +

    v1.4.3 April 14, 2012

    +
      +
    • CoffeeScript dependency is now bundled
    • +
    • Fixed incorrect octal 0700 should have been 700
    • +
    +

    v1.4.2 April 5, 2012

    +
      +
    • Fixed a failing test due to the bal-util.npm to bal-util rename
    • +
    • Improvements to balUtilModules.spawn
        +
      • will only return an error if the exit code was 1
      • +
      • will also contain the code and signal with the results
      • +
      • results[x][0] is now the stderr string, rather than an error object
      • +
      +
    • +
    +

    v1.4.1 April 5, 2012

    +
      +
    • Added spawn to balUtilModules
    • +
    • Added ignoreHiddenFiles option to balUtilPaths.scandir
    • +
    +

    v1.4.0 April 2, 2012

    +
      +
    • Renamed balUtilGroups to balUtilFlow
    • +
    • Added toString, isArray and each to balUtilFlow
    • +
    • Added rpdir, empty, and isPathOlderThan to balUtilPaths
    • +
    +

    v1.3.0 February 26, 2012

    +
      +
    • Added openFile and closeFile to open and close files safely (always stays below the maximum number of allowed open files)
    • +
    • Updated all path utilities to use openFile and closeFile
    • +
    • Added npm scripts
    • +
    +

    v1.2.0 February 14, 2012

    +
      +
    • Removed single and multi modes from exec, now always returns the same consistent callback(err,results) instead
    • +
    +

    v1.1.0 February 6, 2012

    +
      +
    • Modularized
    • +
    • Added docco docs
    • +
    +

    v1.0 February 5, 2012

    +
      +
    • Moved unit tests to Mocha
        +
      • Offers more flexible unit testing
      • +
      • Offers better guarantees that tests actually ran, and that they actually ran correctly
      • +
      +
    • +
    • Added readPath and scantree
    • +
    • Added readFiles option to scandir
    • +
    • scandir now supports arguments in object format
    • +
    • Removed parallel
    • +
    • Tasks inside groups now are passed next as there only argument
    • +
    • Removed resolvePath, expandPath and expandPaths, they were essentially the same as path.resolve
    • +
    • Most functions will now chain
    • +
    • comparePackage now supports comparing two local, or two remote packages
    • +
    • Added gitPull
    • +
    +

    v0.9 January 18, 2012

    +
      +
    • Added exec, initNodeModules, initGitSubmodules, EventSystem.when
    • +
    • Added support for no callbacks
    • +
    +

    v0.8 November 2, 2011

    +
      +
    • Considerable improvements to scandir, cpdir and rmdir
        +
      • Note, passing false as the file or dir actions will now skip all of that type. Pass null if you do not want that.
      • +
      • dirAction is now fired before we read the directories children, if you want it to fire after then in the next callback, pass a callback in the 3rd argument. See rmdir for an example of this.
      • +
      +
    • +
    • Fixed npm web to url warnings
    • +
    +

    v0.7 October 3, 2011

    +
      +
    • Added versionCompare and packageCompare functions
        +
      • Added request dependency
      • +
      +
    • +
    +

    v0.6 September 14, 2011

    +
      +
    • Updated util.Group to support async and sync grouping
    • +
    +

    v0.4 June 2, 2011

    +
      +
    • Added util.type for testing the type of a variable
    • +
    • Added util.expandPath and util.expandPaths
    • +
    +

    v0.3 June 1, 2011

    +
      +
    • Added util.Group class for your async needs :)
    • +
    +

    v0.2 May 20, 2011

    +
      +
    • Added some tests with expresso
    • +
    • util.scandir now returns err,list,tree
    • +
    • Added util.writetree
    • +
    +

    v0.1 May 18, 2011

    +
      +
    • Initial commit
    • +
    + +
    +
    + + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/LICENSE.md.html b/node_modules/scandirectory/node_modules/taskgroup/docs/LICENSE.md.html new file mode 100644 index 000000000..e2d30bf35 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/LICENSE.md.html @@ -0,0 +1,146 @@ + + + + + TaskGroup API Documentation + + + + + +
    + +
    + +
    + +

    License

    Unless stated otherwise all works are:

    and licensed under:

    + +

    MIT License

    + +
    +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/node_modules/scandirectory/node_modules/taskgroup/docs/README.md.html b/node_modules/scandirectory/node_modules/taskgroup/docs/README.md.html new file mode 100644 index 000000000..b4c2d9009 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/README.md.html @@ -0,0 +1,181 @@ + + + + + TaskGroup API Documentation + + + + + +
    + +
    + +
    + +

    TaskGroup

    + + +

    Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
    +Slack community badge +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button

    +

    Group together synchronous and asynchronous tasks and execute them with support for concurrency, naming, and nesting.

    + +

    Install

    NPM

    • Install: npm install --save taskgroup
    • Use: require('taskgroup')

    Browserify

    • Install: npm install --save taskgroup
    • Use: require('taskgroup')
    • CDN URL: //wzrd.in/bundle/taskgroup@4.3.1

    Ender

    • Install: ender add taskgroup
    • Use: require('taskgroup')

    +

    Usage

    +
      +
    1. Introduction Guide & Usage Examples
    2. +
    3. Technical API
    4. +
    5. Comparisons against other flow libraries
    6. +
    7. Projects & Libraries built on top of TaskGroup
    8. +
    + +

    History

    Discover the release history by heading on over to the HISTORY.md file.

    + +

    Contribute

    Discover how you can contribute by heading on over to the CONTRIBUTING.md file.

    + +

    Backers

    + +

    Maintainers

    These amazing people are maintaining this project:

    + +

    Sponsors

    No sponsors yet! Will you be the first?

    Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button

    Contributors

    These amazing people have contributed code to this project:

    Discover how you can contribute by heading on over to the CONTRIBUTING.md file.

    + +

    License

    Unless stated otherwise all works are:

    and licensed under:

    + + + +
    +
    + + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/assets/biscotto.css b/node_modules/scandirectory/node_modules/taskgroup/docs/assets/biscotto.css new file mode 100644 index 000000000..ea25ceee3 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/assets/biscotto.css @@ -0,0 +1,26 @@ +.stability-1 { + border-color: #EC5315; + border-width: 1px 1px 1px 5px; + border-radius: 0; + border-style: solid; + padding: 10px; + margin-bottom: 10px; +} + +.stability-1 .heading { + display: inline-block; + padding-bottom: 10px; +} + +.stability-1 .heading:before { + color: #EC5315; + font-weight: bold; + content: 'Stability: 1 - Experimental'; +} + +.stability-1 .message:before { + white-space: pre; + content: 'This API was introduced recently, and may change or be removed in future versions.\A\APlease try it out and provide feedback. If it addresses a use-case that is important to you, please tell the Atom team.' +} + +body{padding:0 5px;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-size:13px}h1{font-size:25px;margin:.8em 0 .5em;padding-top:4px;border-top:1px dotted #d5d5d5}h2{padding:0;padding-bottom:3px;border-bottom:1px #aaa solid;font-size:1.4em;margin:1.8em 0 .5em}#base{display:none}#fuzzySearch{-webkit-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-moz-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:fixed;z-index:8000;left:0;right:0;top:25px;width:500px;height:45px;margin:0 auto;display:none;padding:25px;background-color:#fff}#fuzzySearch input{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;width:485px;border:2px solid #05a;font-size:20px;padding:5px}#fuzzySearch ol{list-style-type:none;margin:10px 0 0 0;padding:0}#fuzzySearch ol li{padding:3px}#fuzzySearch ol li.stripe{background:#f0f0f0}#fuzzySearch ol li.selected{background:#05a}#fuzzySearch ol li.selected a{color:#fff}#fuzzySearch ol li.selected a:visited{color:#fff}#fuzzySearch ol li.selected a:hover{color:#05a}#fuzzySearch ol li.selected a span{color:#05a}#fuzzySearch ol li a{color:#05a;font-size:18px;text-decoration:none}#fuzzySearch ol li a:visited{color:#05a}#fuzzySearch ol li a:hover{background:#ffffa5}#fuzzySearch ol li a span{background-color:#ff0}#fuzzySearch ol li small{font-size:14px;padding-left:10px;color:#888}#help{-webkit-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-moz-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:fixed;z-index:8000;left:0;right:0;top:50%;width:500px;height:525px;margin:0 auto;margin-top:-262px;display:none;padding:25px;background-color:#fff}#help ul{list-style-type:none;margin:0;padding:0}#help ul li{height:35px;font-weight:bold}#help ul li span{-webkit-box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;-moz-box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;display:block;float:left;width:50px;padding:5px;margin-right:20px;background:#eee;text-align:center}#content a:link,#content a:visited{text-decoration:none;color:#05a}#content a:hover{background:#ffffa5}#content #filecontents img{border:0}#content #filecontents li{line-height:25px}#content #filecontents table{padding:0;border-collapse:collapse;border-spacing:0}#content #filecontents table tr{border-top:1px solid #ccc;background-color:white;margin:0;padding:0}#content #filecontents table tr td{border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px}#content table.box{font-size:1em;line-height:2;border-spacing:0;border-collapse:collapse}#content table.box tr{background-color:#fff}#content table.box tr:first-child{background-color:#EEE}#content table.box tr td{border:1px solid #aaa}#content table.box tr td:first-child{width:100px;padding-right:10px;text-align:right;font-weight:bold}#content table.box tr td:last-child{min-width:420px;padding-left:10px;padding-right:10px}#content h1 .note,#content li .note,#content .properties .note{font-weight:normal;padding:3px 5px;position:relative;top:-3px;text-transform:capitalize;display:inline}#content h1 .note{font-size:.5em}#content li .note{top:0;font-size:.9em}#content .properties .note{top:0;font-size:.85em}#content ul.summary,#content .properties{list-style:none;font-family:monospace;font-size:1em;line-height:1.5em}#content ul.summary li,#content .properties li{margin-bottom:5px}#content ul.summary .signature,#content .properties .signature{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:1px 10px;color:#05A;background:#eaeaff;border:1px solid #dfdfe5}#content ul.summary .signature a:hover,#content .properties .signature a:hover{background:transparent}#content ul.summary li[deprecated] .signature,#content .properties li[deprecated] .signature{text-decoration:line-through}#content ul.summary .signature+.note.title,#content .properties .signature+.note.title{margin-left:7px}#content ul.summary .desc,#content .properties .desc{margin-left:32px;display:block;font-family:sans-serif}#content ul.summary .desc p,#content .properties .desc p{padding:0;margin:0}#content dl.constants dt{font-weight:bold}#content dl.constants,#content dl.properties{margin-left:40px}#content dl.constants dt,#content dl.properties dt{font-size:1.1em;margin-bottom:5px}#content dl.constants dt .docstring,#content dl.properties dt .docstring{margin-left:32px;font-size:.9em;font-weight:normal}#content dl.constants dd,#content dl.properties dd{margin-bottom:18px}#content .method_details{border-top:1px dotted #aaa;margin-top:15px;padding-top:0}#content .method_details:first-child{border:none}#content .method_details p.signature{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;font-size:1.1em;font-weight:normal;font-family:Monaco,Consolas,Courier,monospace;padding:6px 10px;margin-top:18px;background:#e5e8ff;border:1px solid #d8d8e5}#content .method_details p.signature a.gh-link{float:right}#content .tags{font-size:13px}#content .tags h3{font-size:1em;margin-bottom:3px}#content .tags ul{margin-top:0;padding-left:30px;list-style:square}#content .tags ul .name{font-family:monospace;font-weight:bold}#content .tags .overloads h3{margin-bottom:0}#content .tags .overloads .overload{margin-left:20px}#content .tags .overloads .overload p.signature{padding-top:2px;padding-bottom:2px}#content .note{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin-top:10px;color:#222;background:#e3e4e3;border:1px solid #d5d5d5;padding:7px 10px;display:block}#content .deprecated{background:#ffe5e5;border-color:#e9dada}#content .writeonly{background:#d3ff97;border-color:#c3eb8b}#content .readonly{background:#ffe5e5;border-color:#e9dada}#content .bound{background:#d3ff97;border-color:#c3eb8b}#content .todo{background:#ffffc5;border-color:#ececaa}#content .private{background:#d5d5d5;border-color:#c5c5c5}#content .constructor{color:white;background:#6a98d6;border-color:#6689d6}#content h3.inherited,#content h3.included,#content h3.extended{font-style:italic;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-weight:normal;padding:0;margin:0;margin-top:12px;margin-bottom:3px;font-size:13px}#content p.inherited,#content p.included,#content p.extended{word-spacing:5px;font-size:1.2em;padding:0;margin:0;margin-left:25px}#content p.inherited a,#content p.included a,#content p.extended a{font-family:monospace;font-size:.9em}#footer{margin-top:15px;border-top:1px solid #ccc;text-align:center;padding:7px 0;font-size:12px;color:#999}#footer a:link,#footer a:visited{color:#999;text-decoration:none;border-bottom:1px dotted #bbd}#footer a:hover{color:#05a}pre code{display:block;padding:.5em;color:#000;background:#f8f8ff}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title,pre .subst{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#40a070}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:#000080;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:#008080}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}#menu{font-size:1.3em;color:#bbb;top:-5px;position:relative}#menu .title,#menu a{font-size:.7em}#menu .title a{font-size:1em}#menu .title{color:#555}#menu a:link,#menu a:visited{color:#333;text-decoration:none;border-bottom:1px dotted #bbd}#menu a:hover{color:#05a}#header nav{float:right;color:#000;font-size:.7em}#header nav ul{list-style-type:none;margin:4px!important}#header nav ul,#header nav ul li{margin:0;padding:0;display:inline}#header nav a{font-size:1em}#header #search{float:right;margin-top:-3px}#header #search a:link,#header #search a:visited{-webkit-box-shadow:#ddd -1px 1px 3px;-moz-box-shadow:#ddd -1px 1px 3px;box-shadow:#ddd -1px 1px 3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;display:block;float:left;margin-right:4px;padding:8px 10px;color:#05a;background:#eaf0ff;text-decoration:none;border:1px solid #d8d8e5}#header #search a:hover{background:#f5faff;color:#06b}#header #search a.active{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;padding-bottom:20px;color:#fff;background:#568;border:1px solid #457}#header #search a.inactive{color:#999}body.frames #header li.frames{display:none}body.frames #header #search{display:none}body.noframes #header li.noframes{display:none}#search_frame{-webkit-box-shadow:#aaa -7px 5px 25px;-moz-box-shadow:#aaa -7px 5px 25px;box-shadow:#aaa -7px 5px 25px;display:none;position:absolute;overflow-y:scroll;z-index:9999;top:36px;right:18px;width:500px;height:80%;background:white;border:1px solid #999;border-collapse:collapse}pre{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;-moz-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;padding:0;margin-top:4px;border:1px solid #eaeaea;background-color:#f8f8f8;font-family:monospace}pre.code{word-wrap:break-word}pre code{border:0;white-space:pre;overflow:hidden;word-wrap:break-word}code{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8}pre>code{white-space:wrap}.docstring p>code,.docstring li>code{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8}.alphaindex{margin-top:0;font-size:22px}.noborder{border-top:0;margin-top:0;padding-top:4px}.title{margin-bottom:10px}#files{padding:0;font-size:1.1em}#files li{list-style:none;display:inline;padding:7px 12px;line-height:35px;background:#f0f0f0;margin-right:5px}.index{-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3;-webkit-column-width:33%;-moz-column-width:33%;-ms-column-width:33%;-o-column-width:33%;column-width:33%}.index>ul{margin:0;padding:0;padding-bottom:10px;font-size:1.1em;list-style:none}.index>ul>li.letter{-webkit-column-break-after:avoid;font-size:1.4em;padding-bottom:10px;text-transform:uppercase}.index>ul>ul{margin:0;padding-left:20px}.index>ul>ul small{color:#666;font-size:.7em}body.list{padding:0;margin:0}body.noframes #content.list nav{display:none}body.noframes #content.list #search{position:absolute;right:5px;top:9px;padding-left:10px}body.frames #content.list #search{position:relative;margin-top:5px;margin-left:10px}#content.list.tree>ul{margin-top:13px!important}#content.list.tree ul{font-size:16px;margin:0;padding:0}#content.list.tree ul li{margin:0;padding:5px;color:#000;font-size:1em;list-style:none;white-space:nowrap;overflow:hidden;cursor:pointer}#content.list.tree ul li.namespace{overflow:visible}#content.list.tree ul li>a.toggle{display:block;float:left;width:10px;height:10px;margin-top:5px;margin-left:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:0 -10px}#content.list.tree ul li>a.toggle.collapsed{background-position:0 0}#content.list.tree ul li>span,#content.list.tree ul li a{margin-left:20px;text-decoration:none}#content.list.tree ul li>a.toggle+span,#content.list.tree ul li a.toggle+a{margin-left:5px}#content.list.tree ul li small{color:#888;white-space:nowrap}#content.list.tree ul li small.namespace{display:none}#content.list.tree ul li.result a.toggle{visibility:hidden}#content.list.tree ul li.result small.namespace{display:inline}#content.list.tree ul li.result small.parent{display:none}#content.list{padding:0;margin:0}#content.list h1{padding:12px 10px;padding-bottom:10px;margin:0;font-size:1.4em}#content.list a:hover{background:transparent}#content.list nav{margin-left:10px}#content.list #search{color:#888}#content.list #search input{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border:1px solid #BBB}#content.list a{color:#05A;cursor:pointer;text-decoration:none}#content.list a:hover{text-decoration:underline}#content.list ul{padding:0;list-style:none;margin-left:0}#content.list ul li[deprecated]{text-decoration:line-through}#content.list ul li{padding:5px;padding-left:12px;margin:0;font-size:1.1em;list-style:none;color:#888;cursor:pointer}#content.list ul li.stripe{background:#f0f0f0}#content.list ul li:hover{background:#ddd}nav.toc{-webkit-box-shadow:#bbb -2px 2px 6px;-moz-box-shadow:#bbb -2px 2px 6px;box-shadow:#bbb -2px 2px 6px;overflow:hidden;position:absolute;z-index:500;right:0;max-width:300px;padding:20px;padding-right:30px;margin-left:20px;margin-bottom:20px;background:white;border:1px solid #DDD}nav.toc p.title{margin-top:5px}nav.toc ol{padding-left:1.8em}nav.toc li{font-size:1.1em;line-height:1.7em}nav.toc>ol>li{font-size:1.1em;font-weight:bold}nav.toc ol>ol{font-size:.9em}nav.toc.inline{-webkit-box-shadow:white 0 0 0;-moz-box-shadow:white 0 0 0;box-shadow:white 0 0 0;position:relative;padding:0;margin:5px 0 0 0;border:0}nav.toc.inline.hidden{background:none;padding:0;text-align:left}nav.toc.hidden{height:26px;width:140px;padding:5px;background:#f6f6f6;text-align:center}nav.toc.hidden p.title small{display:none} diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/assets/biscotto.js b/node_modules/scandirectory/node_modules/taskgroup/docs/assets/biscotto.js new file mode 100644 index 000000000..2f6d60769 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/assets/biscotto.js @@ -0,0 +1,21 @@ +/*! + * jQuery JavaScript Library v1.8.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Thu Aug 30 2012 17:17:22 GMT-0400 (Eastern Daylight Time) + */ +(function(a2,aB){var w,af,o=a2.document,aI=a2.location,d=a2.navigator,bg=a2.jQuery,I=a2.$,am=Array.prototype.push,a4=Array.prototype.slice,aK=Array.prototype.indexOf,z=Object.prototype.toString,V=Object.prototype.hasOwnProperty,aO=String.prototype.trim,bG=function(e,bZ){return new bG.fn.init(e,bZ,w)},bx=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,aa=/\S/,aV=/\s+/,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,bo=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,a=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,bf=/^[\],:{}\s]*$/,bi=/(?:^|:|,)(?:\s*\[)+/g,bD=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,a0=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,bP=/^-ms-/,aU=/-([\da-z])/gi,N=function(e,bZ){return(bZ+"").toUpperCase()},aF=function(){if(o.addEventListener){o.removeEventListener("DOMContentLoaded",aF,false);bG.ready()}else{if(o.readyState==="complete"){o.detachEvent("onreadystatechange",aF);bG.ready()}}},Z={};bG.fn=bG.prototype={constructor:bG,init:function(e,b2,b1){var b0,b3,bZ,b4;if(!e){return this}if(e.nodeType){this.context=this[0]=e;this.length=1;return this}if(typeof e==="string"){if(e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3){b0=[null,e,null]}else{b0=bo.exec(e)}if(b0&&(b0[1]||!b2)){if(b0[1]){b2=b2 instanceof bG?b2[0]:b2;b4=(b2&&b2.nodeType?b2.ownerDocument||b2:o);e=bG.parseHTML(b0[1],b4,true);if(a.test(b0[1])&&bG.isPlainObject(b2)){this.attr.call(e,b2,true)}return bG.merge(this,e)}else{b3=o.getElementById(b0[2]);if(b3&&b3.parentNode){if(b3.id!==b0[2]){return b1.find(e)}this.length=1;this[0]=b3}this.context=o;this.selector=e;return this}}else{if(!b2||b2.jquery){return(b2||b1).find(e)}else{return this.constructor(b2).find(e)}}}else{if(bG.isFunction(e)){return b1.ready(e)}}if(e.selector!==aB){this.selector=e.selector;this.context=e.context}return bG.makeArray(e,this)},selector:"",jquery:"1.8.1",length:0,size:function(){return this.length},toArray:function(){return a4.call(this)},get:function(e){return e==null?this.toArray():(e<0?this[this.length+e]:this[e])},pushStack:function(bZ,b1,e){var b0=bG.merge(this.constructor(),bZ);b0.prevObject=this;b0.context=this.context;if(b1==="find"){b0.selector=this.selector+(this.selector?" ":"")+e}else{if(b1){b0.selector=this.selector+"."+b1+"("+e+")"}}return b0},each:function(bZ,e){return bG.each(this,bZ,e)},ready:function(e){bG.ready.promise().done(e);return this},eq:function(e){e=+e;return e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(a4.apply(this,arguments),"slice",a4.call(arguments).join(","))},map:function(e){return this.pushStack(bG.map(this,function(b0,bZ){return e.call(b0,bZ,b0)}))},end:function(){return this.prevObject||this.constructor(null)},push:am,sort:[].sort,splice:[].splice};bG.fn.init.prototype=bG.fn;bG.extend=bG.fn.extend=function(){var b7,b0,e,bZ,b4,b5,b3=arguments[0]||{},b2=1,b1=arguments.length,b6=false;if(typeof b3==="boolean"){b6=b3;b3=arguments[1]||{};b2=2}if(typeof b3!=="object"&&!bG.isFunction(b3)){b3={}}if(b1===b2){b3=this;--b2}for(;b20){return}af.resolveWith(o,[bG]);if(bG.fn.trigger){bG(o).trigger("ready").off("ready")}},isFunction:function(e){return bG.type(e)==="function"},isArray:Array.isArray||function(e){return bG.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return !isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):Z[z.call(e)]||"object"},isPlainObject:function(b1){if(!b1||bG.type(b1)!=="object"||b1.nodeType||bG.isWindow(b1)){return false}try{if(b1.constructor&&!V.call(b1,"constructor")&&!V.call(b1.constructor.prototype,"isPrototypeOf")){return false}}catch(b0){return false}var bZ;for(bZ in b1){}return bZ===aB||V.call(b1,bZ)},isEmptyObject:function(bZ){var e;for(e in bZ){return false}return true},error:function(e){throw new Error(e)},parseHTML:function(b1,b0,e){var bZ;if(!b1||typeof b1!=="string"){return null}if(typeof b0==="boolean"){e=b0;b0=0}b0=b0||o;if((bZ=a.exec(b1))){return[b0.createElement(bZ[1])]}bZ=bG.buildFragment([b1],b0,e?null:[]);return bG.merge([],(bZ.cacheable?bG.clone(bZ.fragment):bZ.fragment).childNodes)},parseJSON:function(e){if(!e||typeof e!=="string"){return null}e=bG.trim(e);if(a2.JSON&&a2.JSON.parse){return a2.JSON.parse(e)}if(bf.test(e.replace(bD,"@").replace(a0,"]").replace(bi,""))){return(new Function("return "+e))()}bG.error("Invalid JSON: "+e)},parseXML:function(b1){var bZ,b0;if(!b1||typeof b1!=="string"){return null}try{if(a2.DOMParser){b0=new DOMParser();bZ=b0.parseFromString(b1,"text/xml")}else{bZ=new ActiveXObject("Microsoft.XMLDOM");bZ.async="false";bZ.loadXML(b1)}}catch(b2){bZ=aB}if(!bZ||!bZ.documentElement||bZ.getElementsByTagName("parsererror").length){bG.error("Invalid XML: "+b1)}return bZ},noop:function(){},globalEval:function(e){if(e&&aa.test(e)){(a2.execScript||function(bZ){a2["eval"].call(a2,bZ)})(e)}},camelCase:function(e){return e.replace(bP,"ms-").replace(aU,N)},nodeName:function(bZ,e){return bZ.nodeName&&bZ.nodeName.toUpperCase()===e.toUpperCase()},each:function(b3,b4,b0){var bZ,b1=0,b2=b3.length,e=b2===aB||bG.isFunction(b3);if(b0){if(e){for(bZ in b3){if(b4.apply(b3[bZ],b0)===false){break}}}else{for(;b10&&e[0]&&e[bZ-1])||bZ===0||bG.isArray(e));if(b1){for(;b0-1){b5.splice(ca,1);if(b2){if(ca<=b3){b3--}if(ca<=b4){b4--}}}})}return this},has:function(b9){return bG.inArray(b9,b5)>-1},empty:function(){b5=[];return this},disable:function(){b5=b6=b1=aB;return this},disabled:function(){return !b5},lock:function(){b6=aB;if(!b1){b7.disable()}return this},locked:function(){return !b6},fireWith:function(ca,b9){b9=b9||[];b9=[ca,b9.slice?b9.slice():b9];if(b5&&(!e||b6)){if(b2){b6.push(b9)}else{bZ(b9)}}return this},fire:function(){b7.fireWith(this,arguments);return this},fired:function(){return !!e}};return b7};bG.extend({Deferred:function(b0){var bZ=[["resolve","done",bG.Callbacks("once memory"),"resolved"],["reject","fail",bG.Callbacks("once memory"),"rejected"],["notify","progress",bG.Callbacks("memory")]],b1="pending",b2={state:function(){return b1},always:function(){e.done(arguments).fail(arguments);return this},then:function(){var b3=arguments;return bG.Deferred(function(b4){bG.each(bZ,function(b6,b5){var b8=b5[0],b7=b3[b6];e[b5[1]](bG.isFunction(b7)?function(){var b9=b7.apply(this,arguments);if(b9&&bG.isFunction(b9.promise)){b9.promise().done(b4.resolve).fail(b4.reject).progress(b4.notify)}else{b4[b8+"With"](this===e?b4:this,[b9])}}:b4[b8])});b3=null}).promise()},promise:function(b3){return typeof b3==="object"?bG.extend(b3,b2):b2}},e={};b2.pipe=b2.then;bG.each(bZ,function(b4,b3){var b6=b3[2],b5=b3[3];b2[b3[1]]=b6.add;if(b5){b6.add(function(){b1=b5},bZ[b4^1][2].disable,bZ[2][2].lock)}e[b3[0]]=b6.fire;e[b3[0]+"With"]=b6.fireWith});b2.promise(e);if(b0){b0.call(e,e)}return e},when:function(b2){var b0=0,b4=a4.call(arguments),e=b4.length,bZ=e!==1||(b2&&bG.isFunction(b2.promise))?e:0,b7=bZ===1?b2:bG.Deferred(),b1=function(b9,ca,b8){return function(cb){ca[b9]=this;b8[b9]=arguments.length>1?a4.call(arguments):cb;if(b8===b6){b7.notifyWith(ca,b8)}else{if(!(--bZ)){b7.resolveWith(ca,b8)}}}},b6,b3,b5;if(e>1){b6=new Array(e);b3=new Array(e);b5=new Array(e);for(;b0
    a";ca=b0.getElementsByTagName("*");b8=b0.getElementsByTagName("a")[0];b8.style.cssText="top:1px;float:left;opacity:.5";if(!ca||!ca.length||!b8){return{}}b9=o.createElement("select");b2=b9.appendChild(o.createElement("option"));b7=b0.getElementsByTagName("input")[0];cb={leadingWhitespace:(b0.firstChild.nodeType===3),tbody:!b0.getElementsByTagName("tbody").length,htmlSerialize:!!b0.getElementsByTagName("link").length,style:/top/.test(b8.getAttribute("style")),hrefNormalized:(b8.getAttribute("href")==="/a"),opacity:/^0.5/.test(b8.style.opacity),cssFloat:!!b8.style.cssFloat,checkOn:(b7.value==="on"),optSelected:b2.selected,getSetAttribute:b0.className!=="t",enctype:!!o.createElement("form").enctype,html5Clone:o.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",boxModel:(o.compatMode==="CSS1Compat"),submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true,boxSizingReliable:true,pixelPosition:false};b7.checked=true;cb.noCloneChecked=b7.cloneNode(true).checked;b9.disabled=true;cb.optDisabled=!b2.disabled;try{delete b0.test}catch(b5){cb.deleteExpando=false}if(!b0.addEventListener&&b0.attachEvent&&b0.fireEvent){b0.attachEvent("onclick",bZ=function(){cb.noCloneEvent=false});b0.cloneNode(true).fireEvent("onclick");b0.detachEvent("onclick",bZ)}b7=o.createElement("input");b7.value="t";b7.setAttribute("type","radio");cb.radioValue=b7.value==="t";b7.setAttribute("checked","checked");b7.setAttribute("name","t");b0.appendChild(b7);b6=o.createDocumentFragment();b6.appendChild(b0.lastChild);cb.checkClone=b6.cloneNode(true).cloneNode(true).lastChild.checked;cb.appendChecked=b7.checked;b6.removeChild(b7);b6.appendChild(b0);if(b0.attachEvent){for(b3 in {submit:true,change:true,focusin:true}){b4="on"+b3;b1=(b4 in b0);if(!b1){b0.setAttribute(b4,"return;");b1=(typeof b0[b4]==="function")}cb[b3+"Bubbles"]=b1}}bG(function(){var cc,cg,ce,cf,cd="padding:0;margin:0;border:0;display:block;overflow:hidden;",e=o.getElementsByTagName("body")[0];if(!e){return}cc=o.createElement("div");cc.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";e.insertBefore(cc,e.firstChild);cg=o.createElement("div");cc.appendChild(cg);cg.innerHTML="
    t
    ";ce=cg.getElementsByTagName("td");ce[0].style.cssText="padding:0;margin:0;border:0;display:none";b1=(ce[0].offsetHeight===0);ce[0].style.display="";ce[1].style.display="none";cb.reliableHiddenOffsets=b1&&(ce[0].offsetHeight===0);cg.innerHTML="";cg.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";cb.boxSizing=(cg.offsetWidth===4);cb.doesNotIncludeMarginInBodyOffset=(e.offsetTop!==1);if(a2.getComputedStyle){cb.pixelPosition=(a2.getComputedStyle(cg,null)||{}).top!=="1%";cb.boxSizingReliable=(a2.getComputedStyle(cg,null)||{width:"4px"}).width==="4px";cf=o.createElement("div");cf.style.cssText=cg.style.cssText=cd;cf.style.marginRight=cf.style.width="0";cg.style.width="1px";cg.appendChild(cf);cb.reliableMarginRight=!parseFloat((a2.getComputedStyle(cf,null)||{}).marginRight)}if(typeof cg.style.zoom!=="undefined"){cg.innerHTML="";cg.style.cssText=cd+"width:1px;padding:1px;display:inline;zoom:1";cb.inlineBlockNeedsLayout=(cg.offsetWidth===3);cg.style.display="block";cg.style.overflow="visible";cg.innerHTML="
    ";cg.firstChild.style.width="5px";cb.shrinkWrapBlocks=(cg.offsetWidth!==3);cc.style.zoom=1}e.removeChild(cc);cc=cg=ce=cf=null});b6.removeChild(b0);ca=b8=b9=b2=b7=b6=b0=null;return cb})();var bt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,aL=/([A-Z])/g;bG.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(bG.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?bG.cache[e[bG.expando]]:e[bG.expando];return !!e&&!O(e)},data:function(b1,bZ,b3,b2){if(!bG.acceptData(b1)){return}var b4,b6,b7=bG.expando,b5=typeof bZ==="string",b8=b1.nodeType,e=b8?bG.cache:b1,b0=b8?b1[b7]:b1[b7]&&b7;if((!b0||!e[b0]||(!b2&&!e[b0].data))&&b5&&b3===aB){return}if(!b0){if(b8){b1[b7]=b0=bG.deletedIds.pop()||++bG.uuid}else{b0=b7}}if(!e[b0]){e[b0]={};if(!b8){e[b0].toJSON=bG.noop}}if(typeof bZ==="object"||typeof bZ==="function"){if(b2){e[b0]=bG.extend(e[b0],bZ)}else{e[b0].data=bG.extend(e[b0].data,bZ)}}b4=e[b0];if(!b2){if(!b4.data){b4.data={}}b4=b4.data}if(b3!==aB){b4[bG.camelCase(bZ)]=b3}if(b5){b6=b4[bZ];if(b6==null){b6=b4[bG.camelCase(bZ)]}}else{b6=b4}return b6},removeData:function(b1,bZ,b2){if(!bG.acceptData(b1)){return}var b5,b4,b3,b6=b1.nodeType,e=b6?bG.cache:b1,b0=b6?b1[bG.expando]:bG.expando;if(!e[b0]){return}if(bZ){b5=b2?e[b0]:e[b0].data;if(b5){if(!bG.isArray(bZ)){if(bZ in b5){bZ=[bZ]}else{bZ=bG.camelCase(bZ);if(bZ in b5){bZ=[bZ]}else{bZ=bZ.split(" ")}}}for(b4=0,b3=bZ.length;b41,null,false)},removeData:function(e){return this.each(function(){bG.removeData(this,e)})}});function bv(b1,b0,b2){if(b2===aB&&b1.nodeType===1){var bZ="data-"+b0.replace(aL,"-$1").toLowerCase();b2=b1.getAttribute(bZ);if(typeof b2==="string"){try{b2=b2==="true"?true:b2==="false"?false:b2==="null"?null:+b2+""===b2?+b2:bt.test(b2)?bG.parseJSON(b2):b2}catch(b3){}bG.data(b1,b0,b2)}else{b2=aB}}return b2}function O(bZ){var e;for(e in bZ){if(e==="data"&&bG.isEmptyObject(bZ[e])){continue}if(e!=="toJSON"){return false}}return true}bG.extend({queue:function(b0,bZ,b1){var e;if(b0){bZ=(bZ||"fx")+"queue";e=bG._data(b0,bZ);if(b1){if(!e||bG.isArray(b1)){e=bG._data(b0,bZ,bG.makeArray(b1))}else{e.push(b1)}}return e||[]}},dequeue:function(b3,b2){b2=b2||"fx";var bZ=bG.queue(b3,b2),b4=bZ.length,b1=bZ.shift(),e=bG._queueHooks(b3,b2),b0=function(){bG.dequeue(b3,b2)};if(b1==="inprogress"){b1=bZ.shift();b4--}if(b1){if(b2==="fx"){bZ.unshift("inprogress")}delete e.stop;b1.call(b3,b0,e)}if(!b4&&e){e.empty.fire()}},_queueHooks:function(b0,bZ){var e=bZ+"queueHooks";return bG._data(b0,e)||bG._data(b0,e,{empty:bG.Callbacks("once memory").add(function(){bG.removeData(b0,bZ+"queue",true);bG.removeData(b0,e,true)})})}});bG.fn.extend({queue:function(e,bZ){var b0=2;if(typeof e!=="string"){bZ=e;e="fx";b0--}if(arguments.length1)},removeAttr:function(e){return this.each(function(){bG.removeAttr(this,e)})},prop:function(e,bZ){return bG.access(this,bG.prop,e,bZ,arguments.length>1)},removeProp:function(e){e=bG.propFix[e]||e;return this.each(function(){try{this[e]=aB;delete this[e]}catch(bZ){}})},addClass:function(b2){var b4,b0,bZ,b1,b3,b5,e;if(bG.isFunction(b2)){return this.each(function(b6){bG(this).addClass(b2.call(this,b6,this.className))})}if(b2&&typeof b2==="string"){b4=b2.split(aV);for(b0=0,bZ=this.length;b0-1){b2=b2.replace(" "+b1[b5]+" "," ")}}b3.className=b4?bG.trim(b2):""}}}return this},toggleClass:function(b1,bZ){var b0=typeof b1,e=typeof bZ==="boolean";if(bG.isFunction(b1)){return this.each(function(b2){bG(this).toggleClass(b1.call(this,b2,this.className,bZ),bZ)})}return this.each(function(){if(b0==="string"){var b4,b3=0,b2=bG(this),b5=bZ,b6=b1.split(aV);while((b4=b6[b3++])){b5=e?b5:!b2.hasClass(b4);b2[b5?"addClass":"removeClass"](b4)}}else{if(b0==="undefined"||b0==="boolean"){if(this.className){bG._data(this,"__className__",this.className)}this.className=this.className||b1===false?"":bG._data(this,"__className__")||""}}})},hasClass:function(e){var b1=" "+e+" ",b0=0,bZ=this.length;for(;b0-1){return true}}return false},val:function(b1){var e,bZ,b2,b0=this[0];if(!arguments.length){if(b0){e=bG.valHooks[b0.type]||bG.valHooks[b0.nodeName.toLowerCase()];if(e&&"get" in e&&(bZ=e.get(b0,"value"))!==aB){return bZ}bZ=b0.value;return typeof bZ==="string"?bZ.replace(ai,""):bZ==null?"":bZ}return}b2=bG.isFunction(b1);return this.each(function(b4){var b5,b3=bG(this);if(this.nodeType!==1){return}if(b2){b5=b1.call(this,b4,b3.val())}else{b5=b1}if(b5==null){b5=""}else{if(typeof b5==="number"){b5+=""}else{if(bG.isArray(b5)){b5=bG.map(b5,function(b6){return b6==null?"":b6+""})}}}e=bG.valHooks[this.type]||bG.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,b5,"value")===aB){this.value=b5}})}});bG.extend({valHooks:{option:{get:function(e){var bZ=e.attributes.value;return !bZ||bZ.specified?e.value:e.text}},select:{get:function(e){var b4,bZ,b3,b1,b2=e.selectedIndex,b5=[],b6=e.options,b0=e.type==="select-one";if(b2<0){return null}bZ=b0?b2:0;b3=b0?b2+1:b6.length;for(;bZ=0});if(!e.length){bZ.selectedIndex=-1}return e}}},attrFn:{},attr:function(b4,b1,b5,b3){var b0,e,b2,bZ=b4.nodeType;if(!b4||bZ===3||bZ===8||bZ===2){return}if(b3&&bG.isFunction(bG.fn[b1])){return bG(b4)[b1](b5)}if(typeof b4.getAttribute==="undefined"){return bG.prop(b4,b1,b5)}b2=bZ!==1||!bG.isXMLDoc(b4);if(b2){b1=b1.toLowerCase();e=bG.attrHooks[b1]||(M.test(b1)?bV:a7)}if(b5!==aB){if(b5===null){bG.removeAttr(b4,b1);return}else{if(e&&"set" in e&&b2&&(b0=e.set(b4,b5,b1))!==aB){return b0}else{b4.setAttribute(b1,""+b5);return b5}}}else{if(e&&"get" in e&&b2&&(b0=e.get(b4,b1))!==null){return b0}else{b0=b4.getAttribute(b1);return b0===null?aB:b0}}},removeAttr:function(b1,b3){var b2,b4,bZ,e,b0=0;if(b3&&b1.nodeType===1){b4=b3.split(aV);for(;b0=0)}}})});var bE=/^(?:textarea|input|select)$/i,br=/^([^\.]*|)(?:\.(.+)|)$/,ba=/(?:^|\s)hover(\.\S+|)\b/,a3=/^key/,bK=/^(?:mouse|contextmenu)|click/,by=/^(?:focusinfocus|focusoutblur)$/,aq=function(e){return bG.event.special.hover?e:e.replace(ba,"mouseenter$1 mouseleave$1")};bG.event={add:function(b1,b5,cc,b3,b2){var b6,b4,cd,cb,ca,b8,e,b9,bZ,b0,b7;if(b1.nodeType===3||b1.nodeType===8||!b5||!cc||!(b6=bG._data(b1))){return}if(cc.handler){bZ=cc;cc=bZ.handler;b2=bZ.selector}if(!cc.guid){cc.guid=bG.guid++}cd=b6.events;if(!cd){b6.events=cd={}}b4=b6.handle;if(!b4){b6.handle=b4=function(ce){return typeof bG!=="undefined"&&(!ce||bG.event.triggered!==ce.type)?bG.event.dispatch.apply(b4.elem,arguments):aB};b4.elem=b1}b5=bG.trim(aq(b5)).split(" ");for(cb=0;cb=0){ca=ca.slice(0,-1);b1=true}if(ca.indexOf(".")>=0){b0=ca.split(".");ca=b0.shift();b0.sort()}if((!b4||bG.event.customEvent[ca])&&!bG.event.global[ca]){return}bZ=typeof bZ==="object"?bZ[bG.expando]?bZ:new bG.Event(ca,bZ):new bG.Event(ca);bZ.type=ca;bZ.isTrigger=true;bZ.exclusive=b1;bZ.namespace=b0.join(".");bZ.namespace_re=bZ.namespace?new RegExp("(^|\\.)"+b0.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;b2=ca.indexOf(":")<0?"on"+ca:"";if(!b4){e=bG.cache;for(b7 in e){if(e[b7].events&&e[b7].events[ca]){bG.event.trigger(bZ,b6,e[b7].handle.elem,true)}}return}bZ.result=aB;if(!bZ.target){bZ.target=b4}b6=b6!=null?bG.makeArray(b6):[];b6.unshift(bZ);b9=bG.event.special[ca]||{};if(b9.trigger&&b9.trigger.apply(b4,b6)===false){return}b5=[[b4,b9.bindType||ca]];if(!cd&&!b9.noBubble&&!bG.isWindow(b4)){cc=b9.delegateType||ca;cb=by.test(cc+ca)?b4:b4.parentNode;for(b3=b4;cb;cb=cb.parentNode){b5.push([cb,cc]);b3=cb}if(b3===(b4.ownerDocument||o)){b5.push([b3.defaultView||b3.parentWindow||a2,cc])}}for(b7=0;b7=0}if(b7[b1]){b6.push(cc)}}if(b6.length){cb.push({elem:ce,matches:b6})}}}}if(b2.length>b3){cb.push({elem:this,matches:b2.slice(b3)})}for(b5=0;b50?this.on(e,null,b1,b0):this.trigger(e)};if(a3.test(e)){bG.event.fixHooks[e]=bG.event.keyHooks}if(bK.test(e)){bG.event.fixHooks[e]=bG.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function(cM,cf){var cn,cR,b9,cE,b0,cj,cv,cc,ce,cb,b8=true,cr="undefined",cU=("sizcache"+Math.random()).replace(".",""),b7=cM.document,ca=b7.documentElement,cd=0,ci=[].slice,cQ=[].push,cW=function(e,c1){e[cU]=c1||true;return e},cZ=function(){var e={},c1=[];return cW(function(c2,c3){if(c1.push(c2)>cE.cacheLength){delete e[c1.shift()]}return(e[c2]=c3)},e)},cO=cZ(),cP=cZ(),ck=cZ(),cu="[\\x20\\t\\r\\n\\f]",ch="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",cg=ch.replace("w","w#"),cY="([*^$|!~]?=)",cJ="\\["+cu+"*("+ch+")"+cu+"*(?:"+cY+cu+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+cg+")|)|)"+cu+"*\\]",c0=":("+ch+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+cJ+")|[^:]|\\\\.)*|.*))\\)|)",cw=":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)",cS=new RegExp("^"+cu+"+|((?:^|[^\\\\])(?:\\\\.)*)"+cu+"+$","g"),b4=new RegExp("^"+cu+"*,"+cu+"*"),cB=new RegExp("^"+cu+"*([\\x20\\t\\r\\n\\f>+~])"+cu+"*"),cG=new RegExp(c0),cI=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,cz=/^:not/,cL=/[\x20\t\r\n\f]*[+~]/,cV=/:not\($/,co=/h\d/i,cH=/input|select|textarea|button/i,cp=/\\(?!\\)/g,cA={ID:new RegExp("^#("+ch+")"),CLASS:new RegExp("^\\.("+ch+")"),NAME:new RegExp("^\\[name=['\"]?("+ch+")['\"]?\\]"),TAG:new RegExp("^("+ch.replace("w","w*")+")"),ATTR:new RegExp("^"+cJ),PSEUDO:new RegExp("^"+c0),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+cu+"*(even|odd|(([+-]|)(\\d*)n|)"+cu+"*(?:([+-]|)"+cu+"*(\\d+)|))"+cu+"*\\)|)","i"),POS:new RegExp(cw,"ig"),needsContext:new RegExp("^"+cu+"*[>+~]|"+cw,"i")},cD=function(c1){var c3=b7.createElement("div");try{return c1(c3)}catch(c2){return false}finally{c3=null}},b6=cD(function(e){e.appendChild(b7.createComment(""));return !e.getElementsByTagName("*").length}),cy=cD(function(e){e.innerHTML="";return e.firstChild&&typeof e.firstChild.getAttribute!==cr&&e.firstChild.getAttribute("href")==="#"}),cm=cD(function(c1){c1.innerHTML="";var e=typeof c1.lastChild.getAttribute("multiple");return e!=="boolean"&&e!=="string"}),cx=cD(function(e){e.innerHTML="";if(!e.getElementsByClassName||!e.getElementsByClassName("e").length){return false}e.lastChild.className="e";return e.getElementsByClassName("e").length===2}),bZ=cD(function(c1){c1.id=cU+0;c1.innerHTML="
    ";ca.insertBefore(c1,ca.firstChild);var e=b7.getElementsByName&&b7.getElementsByName(cU).length===2+b7.getElementsByName(cU+0).length;b9=!b7.getElementById(cU);ca.removeChild(c1);return e});try{ci.call(ca.childNodes,0)[0].nodeType}catch(cX){ci=function(c1){var c2,e=[];for(;(c2=this[c1]);c1++){e.push(c2)}return e}}function cK(c3,e,c5,c8){c5=c5||[];e=e||b7;var c6,c1,c7,c2,c4=e.nodeType;if(c4!==1&&c4!==9){return[]}if(!c3||typeof c3!=="string"){return c5}c7=cj(e);if(!c7&&!c8){if((c6=cI.exec(c3))){if((c2=c6[1])){if(c4===9){c1=e.getElementById(c2);if(c1&&c1.parentNode){if(c1.id===c2){c5.push(c1);return c5}}else{return c5}}else{if(e.ownerDocument&&(c1=e.ownerDocument.getElementById(c2))&&cv(e,c1)&&c1.id===c2){c5.push(c1);return c5}}}else{if(c6[2]){cQ.apply(c5,ci.call(e.getElementsByTagName(c3),0));return c5}else{if((c2=c6[3])&&cx&&e.getElementsByClassName){cQ.apply(c5,ci.call(e.getElementsByClassName(c2),0));return c5}}}}}return cT(c3,e,c5,c8,c7)}cK.matches=function(c1,e){return cK(c1,null,null,e)};cK.matchesSelector=function(e,c1){return cK(c1,null,null,[e]).length>0};function cC(e){return function(c2){var c1=c2.nodeName.toLowerCase();return c1==="input"&&c2.type===e}}function b3(e){return function(c2){var c1=c2.nodeName.toLowerCase();return(c1==="input"||c1==="button")&&c2.type===e}}b0=cK.getText=function(c4){var c3,c1="",c2=0,e=c4.nodeType;if(e){if(e===1||e===9||e===11){if(typeof c4.textContent==="string"){return c4.textContent}else{for(c4=c4.firstChild;c4;c4=c4.nextSibling){c1+=b0(c4)}}}else{if(e===3||e===4){return c4.nodeValue}}}else{for(;(c3=c4[c2]);c2++){c1+=b0(c3)}}return c1};cj=cK.isXML=function cj(e){var c1=e&&(e.ownerDocument||e).documentElement;return c1?c1.nodeName!=="HTML":false};cv=cK.contains=ca.contains?function(c1,e){var c3=c1.nodeType===9?c1.documentElement:c1,c2=e&&e.parentNode;return c1===c2||!!(c2&&c2.nodeType===1&&c3.contains&&c3.contains(c2))}:ca.compareDocumentPosition?function(c1,e){return e&&!!(c1.compareDocumentPosition(e)&16)}:function(c1,e){while((e=e.parentNode)){if(e===c1){return true}}return false};cK.attr=function(c3,c2){var e,c1=cj(c3);if(!c1){c2=c2.toLowerCase()}if(cE.attrHandle[c2]){return cE.attrHandle[c2](c3)}if(cm||c1){return c3.getAttribute(c2)}e=c3.getAttributeNode(c2);return e?typeof c3[c2]==="boolean"?c3[c2]?c2:null:e.specified?e.value:null:null};cE=cK.selectors={cacheLength:50,createPseudo:cW,match:cA,order:new RegExp("ID|TAG"+(bZ?"|NAME":"")+(cx?"|CLASS":"")),attrHandle:cy?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:b9?function(c3,c2,c1){if(typeof c2.getElementById!==cr&&!c1){var e=c2.getElementById(c3);return e&&e.parentNode?[e]:[]}}:function(c3,c2,c1){if(typeof c2.getElementById!==cr&&!c1){var e=c2.getElementById(c3);return e?e.id===c3||typeof e.getAttributeNode!==cr&&e.getAttributeNode("id").value===c3?[e]:cf:[]}},TAG:b6?function(e,c1){if(typeof c1.getElementsByTagName!==cr){return c1.getElementsByTagName(e)}}:function(e,c4){var c3=c4.getElementsByTagName(e);if(e==="*"){var c5,c2=[],c1=0;for(;(c5=c3[c1]);c1++){if(c5.nodeType===1){c2.push(c5)}}return c2}return c3},NAME:function(e,c1){if(typeof c1.getElementsByName!==cr){return c1.getElementsByName(name)}},CLASS:function(c2,c1,e){if(typeof c1.getElementsByClassName!==cr&&!e){return c1.getElementsByClassName(c2)}}},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(cp,"");e[3]=(e[4]||e[5]||"").replace(cp,"");if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1]==="nth"){if(!e[2]){cK.error(e[0])}e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd"));e[4]=+((e[6]+e[7])||e[2]==="odd")}else{if(e[2]){cK.error(e[0])}}return e},PSEUDO:function(c2,c3,c1){var c4,e;if(cA.CHILD.test(c2[0])){return null}if(c2[3]){c2[2]=c2[3]}else{if((c4=c2[4])){if(cG.test(c4)&&(e=b1(c4,c3,c1,true))&&(e=c4.indexOf(")",c4.length-e)-c4.length)){c4=c4.slice(0,e);c2[0]=c2[0].slice(0,e)}c2[2]=c4}}return c2.slice(0,3)}},filter:{ID:b9?function(e){e=e.replace(cp,"");return function(c1){return c1.getAttribute("id")===e}}:function(e){e=e.replace(cp,"");return function(c2){var c1=typeof c2.getAttributeNode!==cr&&c2.getAttributeNode("id");return c1&&c1.value===e}},TAG:function(e){if(e==="*"){return function(){return true}}e=e.replace(cp,"").toLowerCase();return function(c1){return c1.nodeName&&c1.nodeName.toLowerCase()===e}},CLASS:function(e){var c1=cO[cU][e];if(!c1){c1=cO(e,new RegExp("(^|"+cu+")"+e+"("+cu+"|$)"))}return function(c2){return c1.test(c2.className||(typeof c2.getAttribute!==cr&&c2.getAttribute("class"))||"")}},ATTR:function(c2,c1,e){if(!c1){return function(c3){return cK.attr(c3,c2)!=null}}return function(c4){var c3=cK.attr(c4,c2),c5=c3+"";if(c3==null){return c1==="!="}switch(c1){case"=":return c5===e;case"!=":return c5!==e;case"^=":return e&&c5.indexOf(e)===0;case"*=":return e&&c5.indexOf(e)>-1;case"$=":return e&&c5.substr(c5.length-e.length)===e;case"~=":return(" "+c5+" ").indexOf(e)>-1;case"|=":return c5===e||c5.substr(0,e.length+1)===e+"-"}}},CHILD:function(c1,c3,c4,c2){if(c1==="nth"){var e=cd++;return function(c8){var c5,c9,c7=0,c6=c8;if(c4===1&&c2===0){return true}c5=c8.parentNode;if(c5&&(c5[cU]!==e||!c8.sizset)){for(c6=c5.firstChild;c6;c6=c6.nextSibling){if(c6.nodeType===1){c6.sizset=++c7;if(c6===c8){break}}}c5[cU]=e}c9=c8.sizset-c2;if(c4===0){return c9===0}else{return(c9%c4===0&&c9/c4>=0)}}}return function(c6){var c5=c6;switch(c1){case"only":case"first":while((c5=c5.previousSibling)){if(c5.nodeType===1){return false}}if(c1==="first"){return true}c5=c6;case"last":while((c5=c5.nextSibling)){if(c5.nodeType===1){return false}}return true}}},PSEUDO:function(c5,c4,c2,c1){var e,c3=cE.pseudos[c5]||cE.pseudos[c5.toLowerCase()];if(!c3){cK.error("unsupported pseudo: "+c5)}if(!c3[cU]){if(c3.length>1){e=[c5,c5,"",c4];return function(c6){return c3(c6,0,e)}}return c3}return c3(c4,c2,c1)}},pseudos:{not:cW(function(e,c2,c1){var c3=cc(e.replace(cS,"$1"),c2,c1);return function(c4){return !c3(c4)}}),enabled:function(e){return e.disabled===false},disabled:function(e){return e.disabled===true},checked:function(e){var c1=e.nodeName.toLowerCase();return(c1==="input"&&!!e.checked)||(c1==="option"&&!!e.selected)},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !cE.pseudos.empty(e)},empty:function(c1){var e;c1=c1.firstChild;while(c1){if(c1.nodeName>"@"||(e=c1.nodeType)===3||e===4){return false}c1=c1.nextSibling}return true},contains:cW(function(e){return function(c1){return(c1.textContent||c1.innerText||b0(c1)).indexOf(e)>-1}}),has:cW(function(e){return function(c1){return cK(e,c1).length>0}}),header:function(e){return co.test(e.nodeName)},text:function(c2){var c1,e;return c2.nodeName.toLowerCase()==="input"&&(c1=c2.type)==="text"&&((e=c2.getAttribute("type"))==null||e.toLowerCase()===c1)},radio:cC("radio"),checkbox:cC("checkbox"),file:cC("file"),password:cC("password"),image:cC("image"),submit:b3("submit"),reset:b3("reset"),button:function(c1){var e=c1.nodeName.toLowerCase();return e==="input"&&c1.type==="button"||e==="button"},input:function(e){return cH.test(e.nodeName)},focus:function(e){var c1=e.ownerDocument;return e===c1.activeElement&&(!c1.hasFocus||c1.hasFocus())&&!!(e.type||e.href)},active:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(c2,c1,e){return e?c2.slice(1):[c2[0]]},last:function(c3,c2,c1){var e=c3.pop();return c1?c3:[e]},even:function(c5,c4,c3){var c2=[],c1=c3?1:0,e=c5.length;for(;c1":"")+c7.replace(cS,"$1"),c5=cP[cU][de];if(c5){return dg?0:ci.call(c5,0)}db=c7;c4=[];c8=0;e=cE.preFilter;c3=cE.filter;while(db){if(!c2||(da=b4.exec(db))){if(da){db=db.slice(da[0].length);dc.selector=df}c4.push(dc=[]);df="";if(c6){db=" "+db}}c2=false;if((da=cB.exec(db))){df+=da[0];db=db.slice(da[0].length);c2=dc.push({part:da.pop().replace(cS," "),string:da[0],captures:da})}for(dd in c3){if((da=cA[dd].exec(db))&&(!e[dd]||(da=e[dd](da,c1,c9)))){df+=da[0];db=db.slice(da[0].length);c2=dc.push({part:dd,string:da.shift(),captures:da})}}if(!c2){break}}if(df){dc.selector=df}return dg?db.length:db?cK.error(c7):ci.call(cP(de,c4),0)}function cs(c5,c4,c3,c1){var e=c4.dir,c2=cd++;if(!c5){c5=function(c6){return c6===c3}}return c4.first?function(c6){while((c6=c6[e])){if(c6.nodeType===1){return c5(c6)&&c6}}}:c1?function(c6){while((c6=c6[e])){if(c6.nodeType===1){if(c5(c6)){return c6}}}}:function(c7){var c6,c8=c2+"."+cn,c9=c8+"."+cR;while((c7=c7[e])){if(c7.nodeType===1){if((c6=c7[cU])===c9){return c7.sizset}else{if(typeof c6==="string"&&c6.indexOf(c8)===0){if(c7.sizset){return c7}}else{c7[cU]=c9;if(c5(c7)){c7.sizset=true;return c7}c7.sizset=false}}}}}}function cq(e,c1){return e?function(c3){var c2=c1(c3);return c2&&e(c2===true?c3:c2)}:c1}function ct(c5,c3,e){var c2,c4,c1=0;for(;(c2=c5[c1]);c1++){if(cE.relative[c2.part]){c4=cs(c4,cE.relative[c2.part],c3,e)}else{c4=cq(c4,cE.filter[c2.part].apply(null,c2.captures.concat(c3,e)))}}return c4}function b5(e){return function(c2){var c3,c1=0;for(;(c3=e[c1]);c1++){if(c3(c2)){return true}}return false}}cc=cK.compile=function(c1,c4,c2){var c6,c3,e,c5=ck[cU][c1];if(c5&&c5.context===c4){return c5}c6=b1(c1,c4,c2);for(c3=0,e=c6.length;c30?c4(c3,c6,c5):[]}function cN(dj,e,dc,c2){var c8,dd,de,db,c5,df,c4,da,c6,c9,di,dk,c1,dg=0,dh=dj.length,c3=cA.POS,c7=new RegExp("^"+c3.source+"(?!"+cu+")","i"),dl=function(){var dn=1,dm=arguments.length-2;for(;dnc4){dd+=df.slice(c4,c6.index);c4=di;dk=[e];if(cB.test(dd)){if(da){dk=da}da=c2}if((c1=cV.test(dd))){dd=dd.slice(0,-5).replace(cB,"$&*");c4++}if(c6.length>1){c6[0].replace(c7,dl)}da=cF(dd,c6[1],c6[2],dk,da,c1)}dd=""}}if(!c9){dd+=df}c9=false}if(dd){if(cB.test(dd)){cl(dd,da||[e],dc,c2)}else{cK(dd,e,dc,c2?c2.concat(da):da)}}else{cQ.apply(dc,da)}}return dh===1?dc:cK.uniqueSort(dc)}function cT(c6,c1,c8,db,da){c6=c6.replace(cS,"$1");var e,dc,c4,c3,c7,de,c5,c2,df,dd,c9=b1(c6,c1,da),dg=c1.nodeType;if(cA.POS.test(c6)){return cN(c9,c1,c8,db)}if(db){e=ci.call(db,0)}else{if(c9.length===1){if((de=ci.call(c9[0],0)).length>2&&(c5=de[0]).part==="ID"&&dg===9&&!da&&cE.relative[de[1].part]){c1=cE.find.ID(c5.captures[0].replace(cp,""),c1,da)[0];if(!c1){return c8}c6=c6.slice(de.shift().string.length)}df=((c9=cL.exec(de[0].string))&&!c9.index&&c1.parentNode)||c1;c2="";for(c7=de.length-1;c7>=0;c7--){c5=de[c7];dd=c5.part;c2=c5.string+c2;if(cE.relative[dd]){break}if(cE.order.test(dd)){e=cE.find[dd](c5.captures[0].replace(cp,""),df,da);if(e==null){continue}else{c6=c6.slice(0,c6.length-c2.length)+c2.replace(cA[dd],"");if(!c6){cQ.apply(c8,ci.call(e,0))}break}}}}}if(c6){dc=cc(c6,c1,da);cn=dc.dirruns++;if(e==null){e=cE.find.TAG("*",(cL.test(c6)&&c1.parentNode)||c1)}for(c7=0;(c3=e[c7]);c7++){cR=dc.runs++;if(dc(c3)){c8.push(c3)}}}return c8}if(b7.querySelectorAll){(function(){var c5,c6=cT,c4=/'|\\/g,c2=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,c1=[],e=[":active"],c3=ca.matchesSelector||ca.mozMatchesSelector||ca.webkitMatchesSelector||ca.oMatchesSelector||ca.msMatchesSelector;cD(function(c7){c7.innerHTML="";if(!c7.querySelectorAll("[selected]").length){c1.push("\\["+cu+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)")}if(!c7.querySelectorAll(":checked").length){c1.push(":checked")}});cD(function(c7){c7.innerHTML="

    ";if(c7.querySelectorAll("[test^='']").length){c1.push("[*^$]="+cu+"*(?:\"\"|'')")}c7.innerHTML="";if(!c7.querySelectorAll(":enabled").length){c1.push(":enabled",":disabled")}});c1=c1.length&&new RegExp(c1.join("|"));cT=function(dd,c8,de,dh,dg){if(!dh&&!dg&&(!c1||!c1.test(dd))){if(c8.nodeType===9){try{cQ.apply(de,ci.call(c8.querySelectorAll(dd),0));return de}catch(dc){}}else{if(c8.nodeType===1&&c8.nodeName.toLowerCase()!=="object"){var db,df,di,da=c8.getAttribute("id"),c7=da||cU,c9=cL.test(dd)&&c8.parentNode||c8;if(da){c7=c7.replace(c4,"\\$&")}else{c8.setAttribute("id",c7)}db=b1(dd,c8,dg);c7="[id='"+c7+"']";for(df=0,di=db.length;df0}}})()}cE.setFilters.nth=cE.setFilters.eq;cE.filters=cE.pseudos;cK.attr=bG.attr;bG.find=cK;bG.expr=cK.selectors;bG.expr[":"]=bG.expr.pseudos;bG.unique=cK.uniqueSort;bG.text=cK.getText;bG.isXMLDoc=cK.isXML;bG.contains=cK.contains})(a2);var ag=/Until$/,bq=/^(?:parents|prev(?:Until|All))/,al=/^.[^:#\[\.,]*$/,y=bG.expr.match.needsContext,bu={children:true,contents:true,next:true,prev:true};bG.fn.extend({find:function(e){var b2,bZ,b4,b5,b3,b1,b0=this;if(typeof e!=="string"){return bG(e).filter(function(){for(b2=0,bZ=b0.length;b20){for(b5=b4;b5=0:bG.filter(e,this).length>0:this.filter(e).length>0)},closest:function(b2,b1){var b3,b0=0,e=this.length,bZ=[],b4=y.test(b2)||typeof b2!=="string"?bG(b2,b1||this.context):0;for(;b0-1:bG.find.matchesSelector(b3,b2)){bZ.push(b3);break}b3=b3.parentNode}}bZ=bZ.length>1?bG.unique(bZ):bZ;return this.pushStack(bZ,"closest",b2)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return bG.inArray(this[0],bG(e))}return bG.inArray(e.jquery?e[0]:e,this)},add:function(e,bZ){var b1=typeof e==="string"?bG(e,bZ):bG.makeArray(e&&e.nodeType?[e]:e),b0=bG.merge(this.get(),b1);return this.pushStack(aR(b1[0])||aR(b0[0])?b0:bG.unique(b0))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});bG.fn.andSelf=bG.fn.addBack;function aR(e){return !e||!e.parentNode||e.parentNode.nodeType===11}function aY(bZ,e){do{bZ=bZ[e]}while(bZ&&bZ.nodeType!==1);return bZ}bG.each({parent:function(bZ){var e=bZ.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return bG.dir(e,"parentNode")},parentsUntil:function(bZ,e,b0){return bG.dir(bZ,"parentNode",b0)},next:function(e){return aY(e,"nextSibling")},prev:function(e){return aY(e,"previousSibling")},nextAll:function(e){return bG.dir(e,"nextSibling")},prevAll:function(e){return bG.dir(e,"previousSibling")},nextUntil:function(bZ,e,b0){return bG.dir(bZ,"nextSibling",b0)},prevUntil:function(bZ,e,b0){return bG.dir(bZ,"previousSibling",b0)},siblings:function(e){return bG.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return bG.sibling(e.firstChild)},contents:function(e){return bG.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:bG.merge([],e.childNodes)}},function(e,bZ){bG.fn[e]=function(b2,b0){var b1=bG.map(this,bZ,b2);if(!ag.test(e)){b0=b2}if(b0&&typeof b0==="string"){b1=bG.filter(b0,b1)}b1=this.length>1&&!bu[e]?bG.unique(b1):b1;if(this.length>1&&bq.test(e)){b1=b1.reverse()}return this.pushStack(b1,e,a4.call(arguments).join(","))}});bG.extend({filter:function(b0,e,bZ){if(bZ){b0=":not("+b0+")"}return e.length===1?bG.find.matchesSelector(e[0],b0)?[e[0]]:[]:bG.find.matches(b0,e)},dir:function(b0,bZ,b2){var e=[],b1=b0[bZ];while(b1&&b1.nodeType!==9&&(b2===aB||b1.nodeType!==1||!bG(b1).is(b2))){if(b1.nodeType===1){e.push(b1)}b1=b1[bZ]}return e},sibling:function(b0,bZ){var e=[];for(;b0;b0=b0.nextSibling){if(b0.nodeType===1&&b0!==bZ){e.push(b0)}}return e}});function aM(b1,b0,e){b0=b0||0;if(bG.isFunction(b0)){return bG.grep(b1,function(b3,b2){var b4=!!b0.call(b3,b2,b3);return b4===e})}else{if(b0.nodeType){return bG.grep(b1,function(b3,b2){return(b3===b0)===e})}else{if(typeof b0==="string"){var bZ=bG.grep(b1,function(b2){return b2.nodeType===1});if(al.test(b0)){return bG.filter(b0,bZ,!e)}else{b0=bG.filter(b0,bZ)}}}}return bG.grep(b1,function(b3,b2){return(bG.inArray(b3,b0)>=0)===e})}function A(e){var b0=c.split("|"),bZ=e.createDocumentFragment();if(bZ.createElement){while(b0.length){bZ.createElement(b0.pop())}}return bZ}var c="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",av=/ jQuery\d+="(?:null|\d+)"/g,bY=/^\s+/,ay=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,p=/<([\w:]+)/,bT=/]","i"),aE=/^(?:checkbox|radio)$/,bR=/checked\s*(?:[^=]|=\s*.checked.)/i,bw=/\/(java|ecma)script/i,aH=/^\s*\s*$/g,T={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},aQ=A(o),l=aQ.appendChild(o.createElement("div"));T.optgroup=T.option;T.tbody=T.tfoot=T.colgroup=T.caption=T.thead;T.th=T.td;if(!bG.support.htmlSerialize){T._default=[1,"X
    ","
    "]}bG.fn.extend({text:function(e){return bG.access(this,function(bZ){return bZ===aB?bG.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(bZ))},null,e,arguments.length)},wrapAll:function(e){if(bG.isFunction(e)){return this.each(function(b0){bG(this).wrapAll(e.call(this,b0))})}if(this[0]){var bZ=bG(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bZ.insertBefore(this[0])}bZ.map(function(){var b0=this;while(b0.firstChild&&b0.firstChild.nodeType===1){b0=b0.firstChild}return b0}).append(this)}return this},wrapInner:function(e){if(bG.isFunction(e)){return this.each(function(bZ){bG(this).wrapInner(e.call(this,bZ))})}return this.each(function(){var bZ=bG(this),b0=bZ.contents();if(b0.length){b0.wrapAll(e)}else{bZ.append(e)}})},wrap:function(e){var bZ=bG.isFunction(e);return this.each(function(b0){bG(this).wrapAll(bZ?e.call(this,b0):e)})},unwrap:function(){return this.parent().each(function(){if(!bG.nodeName(this,"body")){bG(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1||this.nodeType===11){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1||this.nodeType===11){this.insertBefore(e,this.firstChild)}})},before:function(){if(!aR(this[0])){return this.domManip(arguments,false,function(bZ){this.parentNode.insertBefore(bZ,this)})}if(arguments.length){var e=bG.clean(arguments);return this.pushStack(bG.merge(e,this),"before",this.selector)}},after:function(){if(!aR(this[0])){return this.domManip(arguments,false,function(bZ){this.parentNode.insertBefore(bZ,this.nextSibling)})}if(arguments.length){var e=bG.clean(arguments);return this.pushStack(bG.merge(this,e),"after",this.selector)}},remove:function(e,b1){var b0,bZ=0;for(;(b0=this[bZ])!=null;bZ++){if(!e||bG.filter(e,[b0]).length){if(!b1&&b0.nodeType===1){bG.cleanData(b0.getElementsByTagName("*"));bG.cleanData([b0])}if(b0.parentNode){b0.parentNode.removeChild(b0)}}}return this},empty:function(){var bZ,e=0;for(;(bZ=this[e])!=null;e++){if(bZ.nodeType===1){bG.cleanData(bZ.getElementsByTagName("*"))}while(bZ.firstChild){bZ.removeChild(bZ.firstChild)}}return this},clone:function(bZ,e){bZ=bZ==null?false:bZ;e=e==null?bZ:e;return this.map(function(){return bG.clone(this,bZ,e)})},html:function(e){return bG.access(this,function(b2){var b1=this[0]||{},b0=0,bZ=this.length;if(b2===aB){return b1.nodeType===1?b1.innerHTML.replace(av,""):aB}if(typeof b2==="string"&&!aj.test(b2)&&(bG.support.htmlSerialize||!K.test(b2))&&(bG.support.leadingWhitespace||!bY.test(b2))&&!T[(p.exec(b2)||["",""])[1].toLowerCase()]){b2=b2.replace(ay,"<$1>");try{for(;b01&&typeof b5==="string"&&bR.test(b5)){return this.each(function(){bG(this).domManip(b4,b8,b7)})}if(bG.isFunction(b5)){return this.each(function(ca){var b9=bG(this);b4[0]=b5.call(this,ca,b8?b9.html():aB);b9.domManip(b4,b8,b7)})}if(this[0]){b0=bG.buildFragment(b4,this,bZ);b3=b0.fragment;b2=b3.firstChild;if(b3.childNodes.length===1){b3=b2}if(b2){b8=b8&&bG.nodeName(b2,"tr");for(b6=b0.cacheable||e-1;b10?this.clone(true):this).get();bG(b6[b4])[bZ](b2);b3=b3.concat(b2)}return this.pushStack(b3,e,b6.selector)}}});function m(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function bS(e){if(aE.test(e.type)){e.defaultChecked=e.checked}}bG.extend({clone:function(b2,b4,b0){var e,bZ,b1,b3;if(bG.support.html5Clone||bG.isXMLDoc(b2)||!K.test("<"+b2.nodeName+">")){b3=b2.cloneNode(true)}else{l.innerHTML=b2.outerHTML;l.removeChild(b3=l.firstChild)}if((!bG.support.noCloneEvent||!bG.support.noCloneChecked)&&(b2.nodeType===1||b2.nodeType===11)&&!bG.isXMLDoc(b2)){F(b2,b3);e=m(b2);bZ=m(b3);for(b1=0;e[b1];++b1){if(bZ[b1]){F(e[b1],bZ[b1])}}}if(b4){ao(b2,b3);if(b0){e=m(b2);bZ=m(b3);for(b1=0;e[b1];++b1){ao(e[b1],bZ[b1])}}}e=bZ=null;return b3},clean:function(cb,b0,e,b1){var b8,b7,ca,cf,b4,ce,b5,b2,bZ,b9,cd,b6,b3=b0===o&&aQ,cc=[];if(!b0||typeof b0.createDocumentFragment==="undefined"){b0=o}for(b8=0;(ca=cb[b8])!=null;b8++){if(typeof ca==="number"){ca+=""}if(!ca){continue}if(typeof ca==="string"){if(!J.test(ca)){ca=b0.createTextNode(ca)}else{b3=b3||A(b0);b5=b0.createElement("div");b3.appendChild(b5);ca=ca.replace(ay,"<$1>");cf=(p.exec(ca)||["",""])[1].toLowerCase();b4=T[cf]||T._default;ce=b4[0];b5.innerHTML=b4[1]+ca+b4[2];while(ce--){b5=b5.lastChild}if(!bG.support.tbody){b2=bT.test(ca);bZ=cf==="table"&&!b2?b5.firstChild&&b5.firstChild.childNodes:b4[1]===""&&!b2?b5.childNodes:[];for(b7=bZ.length-1;b7>=0;--b7){if(bG.nodeName(bZ[b7],"tbody")&&!bZ[b7].childNodes.length){bZ[b7].parentNode.removeChild(bZ[b7])}}}if(!bG.support.leadingWhitespace&&bY.test(ca)){b5.insertBefore(b0.createTextNode(bY.exec(ca)[0]),b5.firstChild)}ca=b5.childNodes;b5.parentNode.removeChild(b5)}}if(ca.nodeType){cc.push(ca)}else{bG.merge(cc,ca)}}if(b5){ca=b5=b3=null}if(!bG.support.appendChecked){for(b8=0;(ca=cc[b8])!=null;b8++){if(bG.nodeName(ca,"input")){bS(ca)}else{if(typeof ca.getElementsByTagName!=="undefined"){bG.grep(ca.getElementsByTagName("input"),bS)}}}}if(e){cd=function(cg){if(!cg.type||bw.test(cg.type)){return b1?b1.push(cg.parentNode?cg.parentNode.removeChild(cg):cg):e.appendChild(cg)}};for(b8=0;(ca=cc[b8])!=null;b8++){if(!(bG.nodeName(ca,"script")&&cd(ca))){e.appendChild(ca);if(typeof ca.getElementsByTagName!=="undefined"){b6=bG.grep(bG.merge([],ca.getElementsByTagName("script")),cd);cc.splice.apply(cc,[b8+1,0].concat(b6));b8+=b6.length}}}}return cc},cleanData:function(bZ,b7){var b2,b0,b1,b6,b3=0,b8=bG.expando,e=bG.cache,b4=bG.support.deleteExpando,b5=bG.event.special;for(;(b1=bZ[b3])!=null;b3++){if(b7||bG.acceptData(b1)){b0=b1[b8];b2=b0&&e[b0];if(b2){if(b2.events){for(b6 in b2.events){if(b5[b6]){bG.event.remove(b1,b6)}else{bG.removeEvent(b1,b6,b2.handle)}}}if(e[b0]){delete e[b0];if(b4){delete b1[b8]}else{if(b1.removeAttribute){b1.removeAttribute(b8)}else{b1[b8]=null}}bG.deletedIds.push(b0)}}}}}});(function(){var e,bZ;bG.uaMatch=function(b1){b1=b1.toLowerCase();var b0=/(chrome)[ \/]([\w.]+)/.exec(b1)||/(webkit)[ \/]([\w.]+)/.exec(b1)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(b1)||/(msie) ([\w.]+)/.exec(b1)||b1.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}};e=bG.uaMatch(d.userAgent);bZ={};if(e.browser){bZ[e.browser]=true;bZ.version=e.version}if(bZ.chrome){bZ.webkit=true}else{if(bZ.webkit){bZ.safari=true}}bG.browser=bZ;bG.sub=function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bG.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bG&&!(b4 instanceof b0)){b4=b0(b4)}return bG.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(o);return b0}})();var E,az,aW,be=/alpha\([^)]*\)/i,aS=/opacity=([^)]*)/,bk=/^(top|right|bottom|left)$/,G=/^(none|table(?!-c[ea]).+)/,aZ=/^margin/,a8=new RegExp("^("+bx+")(.*)$","i"),W=new RegExp("^("+bx+")(?!px)[a-z%]+$","i"),S=new RegExp("^([-+])=("+bx+")","i"),bh={},a9={position:"absolute",visibility:"hidden",display:"block"},bA={letterSpacing:0,fontWeight:400},bQ=["Top","Right","Bottom","Left"],ar=["Webkit","O","Moz","ms"],aJ=bG.fn.toggle;function b(b1,bZ){if(bZ in b1){return bZ}var b2=bZ.charAt(0).toUpperCase()+bZ.slice(1),e=bZ,b0=ar.length;while(b0--){bZ=ar[b0]+b2;if(bZ in b1){return bZ}}return e}function Q(bZ,e){bZ=e||bZ;return bG.css(bZ,"display")==="none"||!bG.contains(bZ.ownerDocument,bZ)}function s(b3,e){var b2,b4,bZ=[],b0=0,b1=b3.length;for(;b01)},show:function(){return s(this,true)},hide:function(){return s(this)},toggle:function(b0,bZ){var e=typeof b0==="boolean";if(bG.isFunction(b0)&&bG.isFunction(bZ)){return aJ.apply(this,arguments)}return this.each(function(){if(e?b0:Q(this)){bG(this).show()}else{bG(this).hide()}})}});bG.extend({cssHooks:{opacity:{get:function(b0,bZ){if(bZ){var e=E(b0,"opacity");return e===""?"1":e}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":bG.support.cssFloat?"cssFloat":"styleFloat"},style:function(b1,b0,b7,b2){if(!b1||b1.nodeType===3||b1.nodeType===8||!b1.style){return}var b5,b6,b8,b3=bG.camelCase(b0),bZ=b1.style;b0=bG.cssProps[b3]||(bG.cssProps[b3]=b(bZ,b3));b8=bG.cssHooks[b0]||bG.cssHooks[b3];if(b7!==aB){b6=typeof b7;if(b6==="string"&&(b5=S.exec(b7))){b7=(b5[1]+1)*b5[2]+parseFloat(bG.css(b1,b0));b6="number"}if(b7==null||b6==="number"&&isNaN(b7)){return}if(b6==="number"&&!bG.cssNumber[b3]){b7+="px"}if(!b8||!("set" in b8)||(b7=b8.set(b1,b7,b2))!==aB){try{bZ[b0]=b7}catch(b4){}}}else{if(b8&&"get" in b8&&(b5=b8.get(b1,false,b2))!==aB){return b5}return bZ[b0]}},css:function(b4,b2,b3,bZ){var b5,b1,e,b0=bG.camelCase(b2);b2=bG.cssProps[b0]||(bG.cssProps[b0]=b(b4.style,b0));e=bG.cssHooks[b2]||bG.cssHooks[b0];if(e&&"get" in e){b5=e.get(b4,true,bZ)}if(b5===aB){b5=E(b4,b2)}if(b5==="normal"&&b2 in bA){b5=bA[b2]}if(b3||bZ!==aB){b1=parseFloat(b5);return b3||bG.isNumeric(b1)?b1||0:b5}return b5},swap:function(b2,b1,b3){var b0,bZ,e={};for(bZ in b1){e[bZ]=b2.style[bZ];b2.style[bZ]=b1[bZ]}b0=b3.call(b2);for(bZ in b1){b2.style[bZ]=e[bZ]}return b0}});if(a2.getComputedStyle){E=function(b5,bZ){var e,b2,b1,b4,b3=a2.getComputedStyle(b5,null),b0=b5.style;if(b3){e=b3[bZ];if(e===""&&!bG.contains(b5.ownerDocument,b5)){e=bG.style(b5,bZ)}if(W.test(e)&&aZ.test(bZ)){b2=b0.width;b1=b0.minWidth;b4=b0.maxWidth;b0.minWidth=b0.maxWidth=b0.width=e;e=b3.width;b0.width=b2;b0.minWidth=b1;b0.maxWidth=b4}}return e}}else{if(o.documentElement.currentStyle){E=function(b2,b0){var b3,e,bZ=b2.currentStyle&&b2.currentStyle[b0],b1=b2.style;if(bZ==null&&b1&&b1[b0]){bZ=b1[b0]}if(W.test(bZ)&&!bk.test(b0)){b3=b1.left;e=b2.runtimeStyle&&b2.runtimeStyle.left;if(e){b2.runtimeStyle.left=b2.currentStyle.left}b1.left=b0==="fontSize"?"1em":bZ;bZ=b1.pixelLeft+"px";b1.left=b3;if(e){b2.runtimeStyle.left=e}}return bZ===""?"auto":bZ}}}function aG(e,b0,b1){var bZ=a8.exec(b0);return bZ?Math.max(0,bZ[1]-(b1||0))+(bZ[2]||"px"):b0}function at(b1,bZ,e,b3){var b0=e===(b3?"border":"content")?4:bZ==="width"?1:0,b2=0;for(;b0<4;b0+=2){if(e==="margin"){b2+=bG.css(b1,e+bQ[b0],true)}if(b3){if(e==="content"){b2-=parseFloat(E(b1,"padding"+bQ[b0]))||0}if(e!=="margin"){b2-=parseFloat(E(b1,"border"+bQ[b0]+"Width"))||0}}else{b2+=parseFloat(E(b1,"padding"+bQ[b0]))||0;if(e!=="padding"){b2+=parseFloat(E(b1,"border"+bQ[b0]+"Width"))||0}}}return b2}function u(b1,bZ,e){var b2=bZ==="width"?b1.offsetWidth:b1.offsetHeight,b0=true,b3=bG.support.boxSizing&&bG.css(b1,"boxSizing")==="border-box";if(b2<=0||b2==null){b2=E(b1,bZ);if(b2<0||b2==null){b2=b1.style[bZ]}if(W.test(b2)){return b2}b0=b3&&(bG.support.boxSizingReliable||b2===b1.style[bZ]);b2=parseFloat(b2)||0}return(b2+at(b1,bZ,e||(b3?"border":"content"),b0))+"px"}function bC(b0){if(bh[b0]){return bh[b0]}var e=bG("<"+b0+">").appendTo(o.body),bZ=e.css("display");e.remove();if(bZ==="none"||bZ===""){az=o.body.appendChild(az||bG.extend(o.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!aW||!az.createElement){aW=(az.contentWindow||az.contentDocument).document;aW.write("");aW.close()}e=aW.body.appendChild(aW.createElement(b0));bZ=E(e,"display");o.body.removeChild(az)}bh[b0]=bZ;return bZ}bG.each(["height","width"],function(bZ,e){bG.cssHooks[e]={get:function(b2,b1,b0){if(b1){if(b2.offsetWidth===0&&G.test(E(b2,"display"))){return bG.swap(b2,a9,function(){return u(b2,e,b0)})}else{return u(b2,e,b0)}}},set:function(b1,b2,b0){return aG(b1,b2,b0?at(b1,e,b0,bG.support.boxSizing&&bG.css(b1,"boxSizing")==="border-box"):0)}}});if(!bG.support.opacity){bG.cssHooks.opacity={get:function(bZ,e){return aS.test((e&&bZ.currentStyle?bZ.currentStyle.filter:bZ.style.filter)||"")?(0.01*parseFloat(RegExp.$1))+"":e?"1":""},set:function(b2,b3){var b1=b2.style,bZ=b2.currentStyle,e=bG.isNumeric(b3)?"alpha(opacity="+b3*100+")":"",b0=bZ&&bZ.filter||b1.filter||"";b1.zoom=1;if(b3>=1&&bG.trim(b0.replace(be,""))===""&&b1.removeAttribute){b1.removeAttribute("filter");if(bZ&&!bZ.filter){return}}b1.filter=be.test(b0)?b0.replace(be,e):b0+" "+e}}}bG(function(){if(!bG.support.reliableMarginRight){bG.cssHooks.marginRight={get:function(bZ,e){return bG.swap(bZ,{display:"inline-block"},function(){if(e){return E(bZ,"marginRight")}})}}}if(!bG.support.pixelPosition&&bG.fn.position){bG.each(["top","left"],function(e,bZ){bG.cssHooks[bZ]={get:function(b2,b1){if(b1){var b0=E(b2,bZ);return W.test(b0)?bG(b2).position()[bZ]+"px":b0}}}})}});if(bG.expr&&bG.expr.filters){bG.expr.filters.hidden=function(e){return(e.offsetWidth===0&&e.offsetHeight===0)||(!bG.support.reliableHiddenOffsets&&((e.style&&e.style.display)||E(e,"display"))==="none")};bG.expr.filters.visible=function(e){return !bG.expr.filters.hidden(e)}}bG.each({margin:"",padding:"",border:"Width"},function(e,bZ){bG.cssHooks[e+bZ]={expand:function(b2){var b1,b3=typeof b2==="string"?b2.split(" "):[b2],b0={};for(b1=0;b1<4;b1++){b0[e+bQ[b1]+bZ]=b3[b1]||b3[b1-2]||b3[0]}return b0}};if(!aZ.test(e)){bG.cssHooks[e+bZ].set=aG}});var bs=/%20/g,aP=/\[\]$/,U=/\r?\n/g,bz=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aD=/^(?:select|textarea)/i;bG.fn.extend({serialize:function(){return bG.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?bG.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||aD.test(this.nodeName)||bz.test(this.type))}).map(function(e,bZ){var b0=bG(this).val();return b0==null?null:bG.isArray(b0)?bG.map(b0,function(b2,b1){return{name:bZ.name,value:b2.replace(U,"\r\n")}}):{name:bZ.name,value:b0.replace(U,"\r\n")}}).get()}});bG.param=function(e,b0){var b1,bZ=[],b2=function(b3,b4){b4=bG.isFunction(b4)?b4():(b4==null?"":b4);bZ[bZ.length]=encodeURIComponent(b3)+"="+encodeURIComponent(b4)};if(b0===aB){b0=bG.ajaxSettings&&bG.ajaxSettings.traditional}if(bG.isArray(e)||(e.jquery&&!bG.isPlainObject(e))){bG.each(e,function(){b2(this.name,this.value)})}else{for(b1 in e){k(b1,e[b1],b0,b2)}}return bZ.join("&").replace(bs,"+")};function k(b0,b2,bZ,b1){var e;if(bG.isArray(b2)){bG.each(b2,function(b4,b3){if(bZ||aP.test(b0)){b1(b0,b3)}else{k(b0+"["+(typeof b3==="object"?b4:"")+"]",b3,bZ,b1)}})}else{if(!bZ&&bG.type(b2)==="object"){for(e in b2){k(b0+"["+e+"]",b2[e],bZ,b1)}}else{b1(b0,b2)}}}var Y,bX,an=/#.*$/,ad=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,B=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,r=/^(?:GET|HEAD)$/,aC=/^\/\//,bN=/\?/,g=/)<[^<]*)*<\/script>/gi,P=/([?&])_=[^&]*/,aT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,bW=bG.fn.load,v={},a6={},aX=["*/"]+["*"];try{Y=aI.href}catch(bd){Y=o.createElement("a");Y.href="";Y=Y.href}bX=aT.exec(Y.toLowerCase())||[];function bI(e){return function(b2,b4){if(typeof b2!=="string"){b4=b2;b2="*"}var bZ,b5,b6,b1=b2.toLowerCase().split(aV),b0=0,b3=b1.length;if(bG.isFunction(b4)){for(;b0=0){e=b1.slice(b3,b1.length);b1=b1.slice(0,b3)}if(bG.isFunction(b4)){b5=b4;b4=aB}else{if(b4&&typeof b4==="object"){b2="POST"}}bG.ajax({url:b1,type:b2,dataType:"html",data:b4,complete:function(b7,b6){if(b5){bZ.each(b5,b0||[b7.responseText,b6,b7])}}}).done(function(b6){b0=arguments;bZ.html(e?bG("
    ").append(b6.replace(g,"")).find(e):b6)});return this};bG.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bZ){bG.fn[bZ]=function(b0){return this.on(bZ,b0)}});bG.each(["get","post"],function(e,bZ){bG[bZ]=function(b0,b2,b3,b1){if(bG.isFunction(b2)){b1=b1||b3;b3=b2;b2=aB}return bG.ajax({type:bZ,url:b0,data:b2,success:b3,dataType:b1})}});bG.extend({getScript:function(e,bZ){return bG.get(e,aB,bZ,"script")},getJSON:function(e,bZ,b0){return bG.get(e,bZ,b0,"json")},ajaxSetup:function(bZ,e){if(e){t(bZ,bG.ajaxSettings)}else{e=bZ;bZ=bG.ajaxSettings}t(bZ,e);return bZ},ajaxSettings:{url:Y,isLocal:B.test(bX[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a2.String,"text html":true,"text json":bG.parseJSON,"text xml":bG.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:bI(v),ajaxTransport:bI(a6),ajax:function(b4,b1){if(typeof b4==="object"){b1=b4;b4=aB}b1=b1||{};var b7,cl,b2,cg,b9,cd,b0,cf,b8=bG.ajaxSetup({},b1),cn=b8.context||b8,cb=cn!==b8&&(cn.nodeType||cn instanceof bG)?bG(cn):bG.event,cm=bG.Deferred(),ci=bG.Callbacks("once memory"),b5=b8.statusCode||{},cc={},cj={},b3=0,b6="canceled",ce={readyState:0,setRequestHeader:function(co,cp){if(!b3){var e=co.toLowerCase();co=cj[e]=cj[e]||co;cc[co]=cp}return this},getAllResponseHeaders:function(){return b3===2?cl:null},getResponseHeader:function(co){var e;if(b3===2){if(!b2){b2={};while((e=ad.exec(cl))){b2[e[1].toLowerCase()]=e[2]}}e=b2[co.toLowerCase()]}return e===aB?null:e},overrideMimeType:function(e){if(!b3){b8.mimeType=e}return this},abort:function(e){e=e||b6;if(cg){cg.abort(e)}ca(0,e);return this}};function ca(cs,co,ct,cq){var e,cw,cu,cr,cv,cp=co;if(b3===2){return}b3=2;if(b9){clearTimeout(b9)}cg=aB;cl=cq||"";ce.readyState=cs>0?4:0;if(ct){cr=h(b8,ce,ct)}if(cs>=200&&cs<300||cs===304){if(b8.ifModified){cv=ce.getResponseHeader("Last-Modified");if(cv){bG.lastModified[b7]=cv}cv=ce.getResponseHeader("Etag");if(cv){bG.etag[b7]=cv}}if(cs===304){cp="notmodified";e=true}else{e=ae(b8,cr);cp=e.state;cw=e.data;cu=e.error;e=!cu}}else{cu=cp;if(!cp||cs){cp="error";if(cs<0){cs=0}}}ce.status=cs;ce.statusText=""+(co||cp);if(e){cm.resolveWith(cn,[cw,cp,ce])}else{cm.rejectWith(cn,[ce,cp,cu])}ce.statusCode(b5);b5=aB;if(b0){cb.trigger("ajax"+(e?"Success":"Error"),[ce,b8,e?cw:cu])}ci.fireWith(cn,[ce,cp]);if(b0){cb.trigger("ajaxComplete",[ce,b8]);if(!(--bG.active)){bG.event.trigger("ajaxStop")}}}cm.promise(ce);ce.success=ce.done;ce.error=ce.fail;ce.complete=ci.add;ce.statusCode=function(co){if(co){var e;if(b3<2){for(e in co){b5[e]=[b5[e],co[e]]}}else{e=co[ce.status];ce.always(e)}}return this};b8.url=((b4||b8.url)+"").replace(an,"").replace(aC,bX[1]+"//");b8.dataTypes=bG.trim(b8.dataType||"*").toLowerCase().split(aV);if(b8.crossDomain==null){cd=aT.exec(b8.url.toLowerCase());b8.crossDomain=!!(cd&&(cd[1]!=bX[1]||cd[2]!=bX[2]||(cd[3]||(cd[1]==="http:"?80:443))!=(bX[3]||(bX[1]==="http:"?80:443))))}if(b8.data&&b8.processData&&typeof b8.data!=="string"){b8.data=bG.param(b8.data,b8.traditional)}q(v,b8,b1,ce);if(b3===2){return ce}b0=b8.global;b8.type=b8.type.toUpperCase();b8.hasContent=!r.test(b8.type);if(b0&&bG.active++===0){bG.event.trigger("ajaxStart")}if(!b8.hasContent){if(b8.data){b8.url+=(bN.test(b8.url)?"&":"?")+b8.data;delete b8.data}b7=b8.url;if(b8.cache===false){var bZ=bG.now(),ck=b8.url.replace(P,"$1_="+bZ);b8.url=ck+((ck===b8.url)?(bN.test(b8.url)?"&":"?")+"_="+bZ:"")}}if(b8.data&&b8.hasContent&&b8.contentType!==false||b1.contentType){ce.setRequestHeader("Content-Type",b8.contentType)}if(b8.ifModified){b7=b7||b8.url;if(bG.lastModified[b7]){ce.setRequestHeader("If-Modified-Since",bG.lastModified[b7])}if(bG.etag[b7]){ce.setRequestHeader("If-None-Match",bG.etag[b7])}}ce.setRequestHeader("Accept",b8.dataTypes[0]&&b8.accepts[b8.dataTypes[0]]?b8.accepts[b8.dataTypes[0]]+(b8.dataTypes[0]!=="*"?", "+aX+"; q=0.01":""):b8.accepts["*"]);for(cf in b8.headers){ce.setRequestHeader(cf,b8.headers[cf])}if(b8.beforeSend&&(b8.beforeSend.call(cn,ce,b8)===false||b3===2)){return ce.abort()}b6="abort";for(cf in {success:1,error:1,complete:1}){ce[cf](b8[cf])}cg=q(a6,b8,b1,ce);if(!cg){ca(-1,"No Transport")}else{ce.readyState=1;if(b0){cb.trigger("ajaxSend",[ce,b8])}if(b8.async&&b8.timeout>0){b9=setTimeout(function(){ce.abort("timeout")},b8.timeout)}try{b3=1;cg.send(cc,ca)}catch(ch){if(b3<2){ca(-1,ch)}else{throw ch}}}return ce},active:0,lastModified:{},etag:{}});function h(b7,b6,b3){var b2,b4,b1,e,bZ=b7.contents,b5=b7.dataTypes,b0=b7.responseFields;for(b4 in b0){if(b4 in b3){b6[b0[b4]]=b3[b4]}}while(b5[0]==="*"){b5.shift();if(b2===aB){b2=b7.mimeType||b6.getResponseHeader("content-type")}}if(b2){for(b4 in bZ){if(bZ[b4]&&bZ[b4].test(b2)){b5.unshift(b4);break}}}if(b5[0] in b3){b1=b5[0]}else{for(b4 in b3){if(!b5[0]||b7.converters[b4+" "+b5[0]]){b1=b4;break}if(!e){e=b4}}b1=b1||e}if(b1){if(b1!==b5[0]){b5.unshift(b1)}return b3[b1]}}function ae(b9,b1){var b7,bZ,b5,b3,b6=b9.dataTypes.slice(),b0=b6[0],b8={},b2=0;if(b9.dataFilter){b1=b9.dataFilter(b1,b9.dataType)}if(b6[1]){for(b7 in b9.converters){b8[b7.toLowerCase()]=b9.converters[b7]}}for(;(b5=b6[++b2]);){if(b5!=="*"){if(b0!=="*"&&b0!==b5){b7=b8[b0+" "+b5]||b8["* "+b5];if(!b7){for(bZ in b8){b3=bZ.split(" ");if(b3[1]===b5){b7=b8[b0+" "+b3[0]]||b8["* "+b3[0]];if(b7){if(b7===true){b7=b8[bZ]}else{if(b8[bZ]!==true){b5=b3[0];b6.splice(b2--,0,b5)}}break}}}}if(b7!==true){if(b7&&b9["throws"]){b1=b7(b1)}else{try{b1=b7(b1)}catch(b4){return{state:"parsererror",error:b7?b4:"No conversion from "+b0+" to "+b5}}}}}b0=b5}}return{state:"success",data:b1}}var bp=[],aw=/\?/,a5=/(=)\?(?=&|$)|\?\?/,bl=bG.now();bG.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=bp.pop()||(bG.expando+"_"+(bl++));this[e]=true;return e}});bG.ajaxPrefilter("json jsonp",function(b8,b3,b7){var b6,e,b5,b1=b8.data,bZ=b8.url,b0=b8.jsonp!==false,b4=b0&&a5.test(bZ),b2=b0&&!b4&&typeof b1==="string"&&!(b8.contentType||"").indexOf("application/x-www-form-urlencoded")&&a5.test(b1);if(b8.dataTypes[0]==="jsonp"||b4||b2){b6=b8.jsonpCallback=bG.isFunction(b8.jsonpCallback)?b8.jsonpCallback():b8.jsonpCallback;e=a2[b6];if(b4){b8.url=bZ.replace(a5,"$1"+b6)}else{if(b2){b8.data=b1.replace(a5,"$1"+b6)}else{if(b0){b8.url+=(aw.test(bZ)?"&":"?")+b8.jsonp+"="+b6}}}b8.converters["script json"]=function(){if(!b5){bG.error(b6+" was not called")}return b5[0]};b8.dataTypes[0]="json";a2[b6]=function(){b5=arguments};b7.always(function(){a2[b6]=e;if(b8[b6]){b8.jsonpCallback=b3.jsonpCallback;bp.push(b6)}if(b5&&bG.isFunction(e)){e(b5[0])}b5=e=aB});return"script"}});bG.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){bG.globalEval(e);return e}}});bG.ajaxPrefilter("script",function(e){if(e.cache===aB){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});bG.ajaxTransport("script",function(b0){if(b0.crossDomain){var e,bZ=o.head||o.getElementsByTagName("head")[0]||o.documentElement;return{send:function(b1,b2){e=o.createElement("script");e.async="async";if(b0.scriptCharset){e.charset=b0.scriptCharset}e.src=b0.url;e.onload=e.onreadystatechange=function(b4,b3){if(b3||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bZ&&e.parentNode){bZ.removeChild(e)}e=aB;if(!b3){b2(200,"success")}}};bZ.insertBefore(e,bZ.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var ah,aN=a2.ActiveXObject?function(){for(var e in ah){ah[e](0,1)}}:false,au=0;function bB(){try{return new a2.XMLHttpRequest()}catch(bZ){}}function bb(){try{return new a2.ActiveXObject("Microsoft.XMLHTTP")}catch(bZ){}}bG.ajaxSettings.xhr=a2.ActiveXObject?function(){return !this.isLocal&&bB()||bb()}:bB;(function(e){bG.extend(bG.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(bG.ajaxSettings.xhr());if(bG.support.ajax){bG.ajaxTransport(function(e){if(!e.crossDomain||bG.support.cors){var bZ;return{send:function(b5,b0){var b3,b2,b4=e.xhr();if(e.username){b4.open(e.type,e.url,e.async,e.username,e.password)}else{b4.open(e.type,e.url,e.async)}if(e.xhrFields){for(b2 in e.xhrFields){b4[b2]=e.xhrFields[b2]}}if(e.mimeType&&b4.overrideMimeType){b4.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!b5["X-Requested-With"]){b5["X-Requested-With"]="XMLHttpRequest"}try{for(b2 in b5){b4.setRequestHeader(b2,b5[b2])}}catch(b1){}b4.send((e.hasContent&&e.data)||null);bZ=function(ce,b8){var b9,b7,b6,cc,cb;try{if(bZ&&(b8||b4.readyState===4)){bZ=aB;if(b3){b4.onreadystatechange=bG.noop;if(aN){delete ah[b3]}}if(b8){if(b4.readyState!==4){b4.abort()}}else{b9=b4.status;b6=b4.getAllResponseHeaders();cc={};cb=b4.responseXML;if(cb&&cb.documentElement){cc.xml=cb}try{cc.text=b4.responseText}catch(ce){}try{b7=b4.statusText}catch(cd){b7=""}if(!b9&&e.isLocal&&!e.crossDomain){b9=cc.text?200:404}else{if(b9===1223){b9=204}}}}}catch(ca){if(!b8){b0(-1,ca)}}if(cc){b0(b9,b7,cc,b6)}};if(!e.async){bZ()}else{if(b4.readyState===4){setTimeout(bZ,0)}else{b3=++au;if(aN){if(!ah){ah={};bG(a2).unload(aN)}ah[b3]=bZ}b4.onreadystatechange=bZ}}},abort:function(){if(bZ){bZ(0,1)}}}}})}var L,ab,bO=/^(?:toggle|show|hide)$/,bH=new RegExp("^(?:([-+])=|)("+bx+")([a-z%]*)$","i"),bM=/queueHooks$/,ax=[i],a1={"*":[function(bZ,b5){var b2,b6,e,b7=this.createTween(bZ,b5),b3=bH.exec(b5),b4=b7.cur(),b0=+b4||0,b1=1;if(b3){b2=+b3[2];b6=b3[3]||(bG.cssNumber[bZ]?"":"px");if(b6!=="px"&&b0){b0=bG.css(b7.elem,bZ,true)||b2||1;do{e=b1=b1||".5";b0=b0/b1;bG.style(b7.elem,bZ,b0+b6);b1=b7.cur()/b4}while(b1!==1&&b1!==e)}b7.unit=b6;b7.start=b0;b7.end=b3[1]?b0+(b3[1]+1)*b2:b2}return b7}]};function bj(){setTimeout(function(){L=aB},0);return(L=bG.now())}function bc(bZ,e){bG.each(e,function(b4,b2){var b3=(a1[b4]||[]).concat(a1["*"]),b0=0,b1=b3.length;for(;b0-1,b7={},b6={},b0,b2;if(b9){b6=b3.position();b0=b6.top;b2=b6.left}else{b0=parseFloat(e)||0;b2=parseFloat(b8)||0}if(bG.isFunction(ca)){ca=ca.call(b1,b4,bZ)}if(ca.top!=null){b7.top=(ca.top-bZ.top)+b0}if(ca.left!=null){b7.left=(ca.left-bZ.left)+b2}if("using" in ca){ca.using.call(b1,b7)}else{b3.css(b7)}}};bG.fn.extend({position:function(){if(!this[0]){return}var b0=this[0],bZ=this.offsetParent(),b1=this.offset(),e=bm.test(bZ[0].nodeName)?{top:0,left:0}:bZ.offset();b1.top-=parseFloat(bG.css(b0,"marginTop"))||0;b1.left-=parseFloat(bG.css(b0,"marginLeft"))||0;e.top+=parseFloat(bG.css(bZ[0],"borderTopWidth"))||0;e.left+=parseFloat(bG.css(bZ[0],"borderLeftWidth"))||0;return{top:b1.top-e.top,left:b1.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.body;while(e&&(!bm.test(e.nodeName)&&bG.css(e,"position")==="static")){e=e.offsetParent}return e||o.body})}});bG.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b0,bZ){var e=/Y/.test(bZ);bG.fn[b0]=function(b1){return bG.access(this,function(b2,b5,b4){var b3=bn(b2);if(b4===aB){return b3?(bZ in b3)?b3[bZ]:b3.document.documentElement[b5]:b2[b5]}if(b3){b3.scrollTo(!e?b4:bG(b3).scrollLeft(),e?b4:bG(b3).scrollTop())}else{b2[b5]=b4}},b0,b1,arguments.length,null)}});function bn(e){return bG.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}bG.each({Height:"height",Width:"width"},function(e,bZ){bG.each({padding:"inner"+e,content:bZ,"":"outer"+e},function(b0,b1){bG.fn[b1]=function(b5,b4){var b3=arguments.length&&(b0||typeof b5!=="boolean"),b2=b0||(b5===true||b4===true?"margin":"border");return bG.access(this,function(b7,b6,b8){var b9;if(bG.isWindow(b7)){return b7.document.documentElement["client"+e]}if(b7.nodeType===9){b9=b7.documentElement;return Math.max(b7.body["scroll"+e],b9["scroll"+e],b7.body["offset"+e],b9["offset"+e],b9["client"+e])}return b8===aB?bG.css(b7,b6,b8,b2):bG.style(b7,b6,b8,b2)},bZ,b3?b5:aB,b3,null)}})});a2.jQuery=a2.$=bG;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return bG})}})(window);(function(d){var h,g={},p={16:false,18:false,17:false,91:false},e="all",a={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,command:91},q={backspace:8,tab:9,clear:12,enter:13,"return":13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,"delete":46,home:36,end:35,pageup:33,pagedown:34,",":188,".":190,"/":191,"`":192,"-":189,"=":187,";":186,"'":222,"[":219,"]":221,"\\":220};for(h=1;h<20;h++){a["f"+h]=111+h}function n(t,s){var k=t.length;while(k--){if(t[k]===s){return k}}return -1}function o(x,w){var u,v,s,t,y;u=x.keyCode;if(u==93||u==224){u=91}if(u in p){p[u]=true;for(s in a){if(a[s]==u){c[s]=true}}return}if(!c.filter.call(this,x)){return}if(!(u in g)){return}for(t=0;t0;for(s in p){if((!p[s]&&n(v.mods,+s)>-1)||(p[s]&&n(v.mods,+s)==-1)){y=false}}if((v.mods.length==0&&!p[16]&&!p[18]&&!p[17]&&!p[91])||y){if(v.method(x,v)===false){if(x.preventDefault){x.preventDefault()}else{x.returnValue=false}if(x.stopPropagation){x.stopPropagation()}if(x.cancelBubble){x.cancelBubble=true}}}}}}function f(u){var t=u.keyCode,s;if(t==93||t==224){t=91}if(t in p){p[t]=false;for(s in a){if(a[s]==t){c[s]=false}}}}function r(){for(h in p){p[h]=false}for(h in a){c[h]=false}}function c(t,u,x){var w,v,s,k;if(x===undefined){x=u;u="all"}t=t.replace(/\s/g,"");w=t.split(",");if((w[w.length-1])==""){w[w.length-2]+=","}for(s=0;s1){v=t.slice(0,t.length-1);for(k=0;k2;if(Q==null){Q=[]}if(E&&Q.reduce===E){if(O){P=M.bind(P,O)}return N?Q.reduce(P,p):Q.reduce(P)}I(Q,function(T,R,S){if(!N){p=T;N=true}else{p=P.call(O,p,T,R,S)}});if(!N){throw new TypeError("Reduce of empty array with no initial value")}return p};M.reduceRight=M.foldr=function(Q,P,p,O){var N=arguments.length>2;if(Q==null){Q=[]}if(b&&Q.reduceRight===b){if(O){P=M.bind(P,O)}return N?Q.reduceRight(P,p):Q.reduceRight(P)}var R=M.toArray(Q).reverse();if(O&&!N){P=M.bind(P,O)}return N?M.reduce(R,P,p,O):M.reduce(R,P)};M.find=M.detect=function(P,O,N){var p;y(P,function(S,Q,R){if(O.call(N,S,Q,R)){p=S;return true}});return p};M.filter=M.select=function(P,O,N){var p=[];if(P==null){return p}if(a&&P.filter===a){return P.filter(O,N)}I(P,function(S,Q,R){if(O.call(N,S,Q,R)){p[p.length]=S}});return p};M.reject=function(P,O,N){var p=[];if(P==null){return p}I(P,function(S,Q,R){if(!O.call(N,S,Q,R)){p[p.length]=S}});return p};M.every=M.all=function(P,O,N){var p=true;if(P==null){return p}if(A&&P.every===A){return P.every(O,N)}I(P,function(S,Q,R){if(!(p=p&&O.call(N,S,Q,R))){return D}});return !!p};var y=M.some=M.any=function(P,O,N){O||(O=M.identity);var p=false;if(P==null){return p}if(n&&P.some===n){return P.some(O,N)}I(P,function(S,Q,R){if(p||(p=O.call(N,S,Q,R))){return D}});return !!p};M.include=M.contains=function(O,N){var p=false;if(O==null){return p}if(l&&O.indexOf===l){return O.indexOf(N)!=-1}p=y(O,function(P){return P===N});return p};M.invoke=function(N,O){var p=m.call(arguments,2);return M.map(N,function(P){return(M.isFunction(O)?O||P:P[O]).apply(P,p)})};M.pluck=function(N,p){return M.map(N,function(O){return O[p]})};M.max=function(P,O,N){if(!O&&M.isArray(P)&&P[0]===+P[0]){return Math.max.apply(Math,P)}if(!O&&M.isEmpty(P)){return -Infinity}var p={computed:-Infinity};I(P,function(T,Q,S){var R=O?O.call(N,T,Q,S):T;R>=p.computed&&(p={value:T,computed:R})});return p.value};M.min=function(P,O,N){if(!O&&M.isArray(P)&&P[0]===+P[0]){return Math.min.apply(Math,P)}if(!O&&M.isEmpty(P)){return Infinity}var p={computed:Infinity};I(P,function(T,Q,S){var R=O?O.call(N,T,Q,S):T;RQ?1:0}),"value")};M.groupBy=function(O,P){var p={};var N=M.isFunction(P)?P:function(Q){return Q[P]};I(O,function(S,Q){var R=N(S,Q);(p[R]||(p[R]=[])).push(S)});return p};M.sortedIndex=function(R,Q,O){O||(O=M.identity);var p=0,P=R.length;while(p>1;O(R[N])=0})})};M.difference=function(N){var p=M.flatten(m.call(arguments,1),true);return M.filter(N,function(O){return !M.include(p,O)})};M.zip=function(){var p=m.call(arguments);var P=M.max(M.pluck(p,"length"));var O=new Array(P);for(var N=0;N=0;O--){N=[p[O].apply(this,N)]}return N[0]}};M.after=function(N,p){if(N<=0){return p()}return function(){if(--N<1){return p.apply(this,arguments)}}};M.keys=e||function(O){if(O!==Object(O)){throw new TypeError("Invalid object")}var N=[];for(var p in O){if(M.has(O,p)){N[N.length]=p}}return N};M.values=function(p){return M.map(p,M.identity)};M.functions=M.methods=function(O){var N=[];for(var p in O){if(M.isFunction(O[p])){N.push(p)}}return N.sort()};M.extend=function(p){I(m.call(arguments,1),function(N){for(var O in N){p[O]=N[O]}});return p};M.pick=function(N){var p={};I(M.flatten(m.call(arguments,1)),function(O){if(O in N){p[O]=N[O]}});return p};M.defaults=function(p){I(m.call(arguments,1),function(N){for(var O in N){if(p[O]==null){p[O]=N[O]}}});return p};M.clone=function(p){if(!M.isObject(p)){return p}return M.isArray(p)?p.slice():M.extend({},p)};M.tap=function(N,p){p(N);return N};function J(P,O,N){if(P===O){return P!==0||1/P==1/O}if(P==null||O==null){return P===O}if(P._chain){P=P._wrapped}if(O._chain){O=O._wrapped}if(P.isEqual&&M.isFunction(P.isEqual)){return P.isEqual(O)}if(O.isEqual&&M.isFunction(O.isEqual)){return O.isEqual(P)}var S=c.call(P);if(S!=c.call(O)){return false}switch(S){case"[object String]":return P==String(O);case"[object Number]":return P!=+P?O!=+O:(P==0?1/P==1/O:P==+O);case"[object Date]":case"[object Boolean]":return +P==+O;case"[object RegExp]":return P.source==O.source&&P.global==O.global&&P.multiline==O.multiline&&P.ignoreCase==O.ignoreCase}if(typeof P!="object"||typeof O!="object"){return false}var T=N.length;while(T--){if(N[T]==P){return true}}N.push(P);var R=0,p=true;if(S=="[object Array]"){R=P.length;p=R==O.length;if(p){while(R--){if(!(p=R in P==R in O&&J(P[R],O[R],N))){break}}}}else{if("constructor" in P!="constructor" in O||P.constructor!=O.constructor){return false}for(var Q in P){if(M.has(P,Q)){R++;if(!(p=M.has(O,Q)&&J(P[Q],O[Q],N))){break}}}if(p){for(Q in O){if(M.has(O,Q)&&!(R--)){break}}p=!R}}N.pop();return p}M.isEqual=function(N,p){return J(N,p,[])};M.isEmpty=function(N){if(N==null){return true}if(M.isArray(N)||M.isString(N)){return N.length===0}for(var p in N){if(M.has(N,p)){return false}}return true};M.isElement=function(p){return !!(p&&p.nodeType==1)};M.isArray=s||function(p){return c.call(p)=="[object Array]"};M.isObject=function(p){return p===Object(p)};M.isArguments=function(p){return c.call(p)=="[object Arguments]"};if(!M.isArguments(arguments)){M.isArguments=function(p){return !!(p&&M.has(p,"callee"))}}M.isFunction=function(p){return c.call(p)=="[object Function]"};M.isString=function(p){return c.call(p)=="[object String]"};M.isNumber=function(p){return c.call(p)=="[object Number]"};M.isFinite=function(p){return M.isNumber(p)&&isFinite(p)};M.isNaN=function(p){return p!==p};M.isBoolean=function(p){return p===true||p===false||c.call(p)=="[object Boolean]"};M.isDate=function(p){return c.call(p)=="[object Date]"};M.isRegExp=function(p){return c.call(p)=="[object RegExp]"};M.isNull=function(p){return p===null};M.isUndefined=function(p){return p===void 0};M.has=function(N,p){return h.call(N,p)};M.noConflict=function(){v._=j;return this};M.identity=function(p){return p};M.times=function(P,O,N){for(var p=0;p/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};M.result=function(p,O){if(p==null){return null}var N=p[O];return M.isFunction(N)?N.call(p):N};M.mixin=function(p){I(M.functions(p),function(N){w(N,M[N]=p[N])})};var x=0;M.uniqueId=function(p){var N=x++;return p?p+N:N};M.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/;var g={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"};for(var H in g){g[g[H]]=H}var i=/\\|'|\r|\n|\t|\u2028|\u2029/g;var B=/\\(\\|'|r|n|t|u2028|u2029)/g;var K=function(p){return p.replace(B,function(N,O){return g[O]})};M.template=function(R,Q,O){O=M.defaults(O||{},M.templateSettings);var P="__p+='"+R.replace(i,function(S){return"\\"+g[S]}).replace(O.escape||u,function(S,T){return"'+\n_.escape("+K(T)+")+\n'"}).replace(O.interpolate||u,function(S,T){return"'+\n("+K(T)+")+\n'"}).replace(O.evaluate||u,function(S,T){return"';\n"+K(T)+"\n;__p+='"})+"';\n";if(!O.variable){P="with(obj||{}){\n"+P+"}\n"}P="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+P+"return __p;\n";var N=new Function(O.variable||"obj","_",P);if(Q){return N(Q,M)}var p=function(S){return N.call(this,S,M)};p.source="function("+(O.variable||"obj")+"){\n"+P+"}";return p};M.chain=function(p){return M(p).chain()};var t=function(p){this._wrapped=p};M.prototype=t.prototype;var r=function(N,p){return p?M(N).chain():N};var w=function(p,N){t.prototype[p]=function(){var O=m.call(arguments);z.call(O,this._wrapped);return r(N.apply(M,O),this._chain)}};M.mixin(M);I(["pop","push","reverse","shift","sort","splice","unshift"],function(p){var N=C[p];t.prototype[p]=function(){var O=this._wrapped;N.apply(O,arguments);var P=O.length;if((p=="shift"||p=="splice")&&P===0){delete O[0]}return r(O,this._chain)}});I(["concat","join","slice"],function(p){var N=C[p];t.prototype[p]=function(){return r(N.apply(this._wrapped,arguments),this._chain)}});t.prototype.chain=function(){this._chain=true;return this};t.prototype.value=function(){return this._wrapped}}).call(this);(function(){$(document).ready(function(){var a;$("#search_frame").hide();window.lastSearch="";if(window.top.frames.main){$("body").addClass("frames")}else{$("body").addClass("noframes")}$("pre code").each(function(b,c){return hljs.highlightBlock(c," ")});$("#search_frame").on("load",function(b){if($(this).attr("src")){return $("#search_frame").show()}});$(".frames #content a").each(function(){if(/^https?:\/\//i.test($(this).attr("href"))){return $(this).attr("target","_top")}});$("#search input").focus();$("#search a").click(function(b){var c=this;b.preventDefault();if($(this).hasClass("active")){$(this).removeClass("active");return $("#search_frame").hide()}else{$("#search a").removeClass("active");$("#search_frame").one("load",function(){return $(c).addClass("active")});return $("#search_frame").attr("src",$(this).attr("href"))}});$("#content.list #search input").keyup(function(c){var b;b=$(this).val().toLowerCase();if(b.length===0){$("#content.list ul li").each(function(){if($("#content").hasClass("tree")){$(this).removeClass("result");$(this).css("padding-left",$(this).data("padding"))}return $(this).show()})}else{$("#content.list ul li").each(function(){var d;if($(this).find("a").text().toLowerCase().indexOf(b)===-1){return $(this).hide()}else{if($("#content").hasClass("tree")){$(this).addClass("result");d=$(this).css("padding-left");if(d!=="0px"){$(this).data("padding",d)}$(this).css("padding-left",0)}return $(this).show()}})}return window.createStripes()});$("#fuzzySearch input").keyup(function(b){var e,h,i,j,g,f,m,c,l,d,k;l=$(this).val();c=$("#fuzzySearch ol");if(b.keyCode===13){return location.href=$("#fuzzySearch ol li.selected a").attr("href")}else{if(b.keyCode===38){j=c.children();i=j.index($("#fuzzySearch ol li.selected"));$(j.get(i)).removeClass("selected");i-=1;if(i===-1){i=j.length-1}return $(j.get(i)).addClass("selected")}else{if(b.keyCode===40){j=c.children();i=j.index($("#fuzzySearch ol li.selected"));$(j.get(i)).removeClass("selected");i+=1;if(i===j.length){i=0}return $(j.get(i)).addClass("selected")}else{if(l&&l!==lastSearch){window.lastSearch=l;c.empty();m=$("#base").attr("data-path");f=fuzzy(l,_.pluck(searchData,"t"),{limit:25});h=fuzzy(l,_.pluck(searchData,"t"),{pre:"",post:"",limit:25});for(i=d=0,k=f.length;d"+h[i]+""+(e.h?"("+e.h+")":"")+""))}$("#fuzzySearch ol li:first").addClass("selected");$("#fuzzySearch").height(c.height()+45);return $("#fuzzySearch ol li").each(function(n,o){if(n%2===0){return $(o).addClass("stripe")}else{return $(o).removeClass("stripe")}})}else{if(l!==lastSearch){c.empty();return $("#fuzzySearch").height(45)}}}}}});$("body #content.list ul").on("click","li",function(c){var b;b=$(this).find("a:not(.toggle)").attr("href");if(b){if($("body").hasClass("noframes")){if(b!=="#"){window.parent.location.href=b}}else{if(b!=="#"){top.frames.main.location.href=b}}}return c.preventDefault()});$("#content.tree ul > ul").each(function(){return $(this).prev().prepend($(''))});window.createStripes=function(){return $("#content.list li:visible").each(function(b,c){if(b%2===0){return $(c).addClass("stripe")}else{return $(c).removeClass("stripe")}})};$("#content.tree a.toggle").click(function(){$(this).toggleClass("collapsed");$(this).parent().next().toggle();return window.createStripes()});$("a.frames").click(function(b){location.href=$(this).attr("href");return b.preventDefault()});$("a.noframes").click(function(b){parent.location.href=location.href;return b.preventDefault()});window.indentTree=function(c,b){return $(c).find("> ul").each(function(){$(this).find("> li").css("padding-left",""+b+"px");return window.indentTree($(this),b+20)})};$("#filecontents").each(function(){var p,h,o,j,k,c,m,b,l,f,e,n,g,d;b=$("nav.toc");l=b;c=0;p=[];g=$("h2,h3,h4,h5,h6",this);for(k=f=0,n=g.length;f"));h=parseInt(o.get(0).tagName.substring(1));if(h>c){m=$("
      ");l.append(m);p.push(l);l=m;c=h}else{if(hd;j=0<=d?++e:--e){l=p.pop()}if(!l){l=$("nav.toc ol:first")}c=h}}l.append($("
    1. "+(o.text())+"
    2. "))}if($("ol",b).length===0){return b.hide()}});$("a.hide_toc").click(function(){return $("nav.toc").toggleClass("hidden")});$("a.float_toc").click(function(){$("nav.toc").toggleClass("inline");return $(this).text($("nav.toc").hasClass("inline")?"float":"left")});indentTree($("#content.list > ul"),20);createStripes();a=function(b,c){if(parent.frames.list){if(!/#{ url }$/.test(parent.frames.list.location.href)){return parent.frames.list.location.href=b}}else{if(parent){return parent.$("#search #"+c).click()}else{return $("#search #"+c).click()}}};key.filter=function(c){var b;b=(c.target||c.srcElement).tagName;return b!=="INPUT"||c.keyCode===27||c.ctrlKey===true};key("s",function(b){$("#search input").focus().select();if(parent.frames.list){parent.frames.list.$("#search input").focus().select()}return b.preventDefault()});key("esc",function(){if(parent.frames.list){parent.frames.list.$("#search input").blur();parent.frames.main.$("#help").hide();return parent.frames.main.$("#fuzzySearch").hide()}else{if(parent){parent.$("#search .active").click();parent.$("#help").hide();return parent.$("#fuzzySearch").hide()}else{$("#search input").blur();$("#help").hide();return $("#fuzzySearch").hide()}}});key("⌃+l",function(){var b;b=$(parent.document.body);if(b.data("toggled")){parent.document.body.cols="20%, *";return b.data("toggled",false)}else{parent.document.body.cols="0, *";return b.data("toggled",true)}});key("⌃+c",function(){return a("class_list.html","class_list_link")});key("⌃+m",function(){return a("method_list.html","method_list_link")});key("⌃+i",function(){return a("mixin_list.html","mixin_list_link")});key("⌃+f",function(){return a("file_list.html","file_list_link")});key("⌃+e",function(){return a("extra_list.html","extra_list_link")});key("⌃+h",function(){if(parent.frames.main){return parent.frames.main.$("#help").toggle()}else{if(parent){return parent.$("#help").toggle()}else{return $("#help").toggle()}}});return key("⌃+t",function(b){$("#fuzzySearch").toggle();$("#fuzzySearch input").focus().select();if(parent.frames.main){parent.frames.main.$("#fuzzySearch").show();parent.frames.main.$("#fuzzySearch input").focus().select()}return b.preventDefault()})})}).call(this);(function(){var b,a;window.fuzzy=function(A,u,k){var m,i,t,r,f,l,n,I,d,H,q,E,y,C,g,w,x,D,s,o,v,c,B,e,z,F,p,j,h,G;if(k==null){k={}}v=k.pre,x=k.post,C=k.limit,j=k.separator,I=k.ignorecase,d=k.ignorespace,p=k.separate;if(I==null){I=true}if(d==null){d=true}if(p==null){p=false}if(p&&!j){throw new Error("You must pass a separator when options.separate is true.")}if(d){A=A.replace(/\s/g,"")}g=[];l=(I&&"i")||"";f=v&&x;m=function(J,K,L){if(p){return g[L]([J,K])}else{if(J){return g[L](J+j+K)}else{return g[L](K)}}};t=function(J,K){return m(J,K,"push")};F=function(J,K){return m(J,K,"unshift")};if(j){B=A.split(j);D=B.pop();c=B.join(j);H=_.map(B,(function(J){return b(J)}));H=H.join(".*?"+j+".*?");z=new RegExp("^.*?"+H+".*?$",l)}else{B=false;D=A;z=false}o=new RegExp("^.*?"+(b(D))+".*$",l);for(h=0,G=u.length;h"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("")}while(p!=v.node);s.splice(r,1);while(r'+M[0]+""}else{K+=M[0]}O=P.lexemsRe.lastIndex;M=P.lexemsRe.exec(L)}return K+L.substr(O,L.length-O)}function I(L,M){if(M.subLanguage&&e[M.subLanguage]){var K=d(M.subLanguage,L);y+=K.keyword_count;return K.value}else{return E(L,M)}}function H(M,K){var L=M.className?'':"";if(M.returnBegin){z+=L;M.buffer=""}else{if(M.excludeBegin){z+=m(K)+L;M.buffer=""}else{z+=L;M.buffer=K}}p.push(M);u+=M.relevance}function F(O,N,M){var R=p[p.length-1];if(M){z+=I(R.buffer+O,R);return false}var Q=r(N,R);if(Q){z+=I(R.buffer+O,R);H(Q,N);return Q.returnBegin}var L=w(p.length-1,N);if(L){var P=R.className?"":"";if(R.returnEnd){z+=I(R.buffer+O,R)+P}else{if(R.excludeEnd){z+=I(R.buffer+O,R)+P+m(N)}else{z+=I(R.buffer+O+N,R)+P}}while(L>1){P=p[p.length-2].className?"":"";z+=P;L--;p.length--}var K=p[p.length-1];p.length--;p[p.length-1].buffer="";if(K.starts){H(K.starts,"")}return R.returnEnd}if(x(N,R)){throw"Illegal"}}var D=e[B];var p=[D.defaultMode];var u=0;var y=0;var z="";try{var s,v=0;D.defaultMode.buffer="";do{s=q(C,v);var t=F(s[0],s[1],s[2]);v+=s[0].length;if(!t){v+=s[1].length}}while(!s[2]);if(p.length>1){throw"Illegal"}return{relevance:u,keyword_count:y,value:z}}catch(G){if(G=="Illegal"){return{relevance:0,keyword_count:0,value:m(C)}}else{throw G}}}function g(t){var p={keyword_count:0,relevance:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.relevance>r.keyword_count+r.relevance){r=s}if(s.keyword_count+s.relevance>p.keyword_count+p.relevance){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"
      ")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v=="no-highlight"){return}if(v){y=d(v,x)}else{y=g(x);v=y.language}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="
      "+y.value+"
      ";t=p.firstChild.firstChild;p.firstChild.className=s.className;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.relevance};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.relevance}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BACKSLASH_ESCAPE={begin:"\\\\.",relevance:0};this.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[this.BACKSLASH_ESCAPE],relevance:0};this.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[this.BACKSLASH_ESCAPE],relevance:0};this.C_LINE_COMMENT_MODE={className:"comment",begin:"//",end:"$"};this.C_BLOCK_COMMENT_MODE={className:"comment",begin:"/\\*",end:"\\*/"};this.HASH_COMMENT_MODE={className:"comment",begin:"#",end:"$"};this.NUMBER_MODE={className:"number",begin:this.NUMBER_RE,relevance:0};this.C_NUMBER_MODE={className:"number",begin:this.C_NUMBER_RE,relevance:0};this.BINARY_NUMBER_MODE={className:"number",begin:this.BINARY_NUMBER_RE,relevance:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.apache=function(){var a={className:"number",begin:"[\\$%]\\d+"};return{case_insensitive:true,defaultMode:{keywords:{keyword:{acceptfilter:1,acceptmutex:1,acceptpathinfo:1,accessfilename:1,action:1,addalt:1,addaltbyencoding:1,addaltbytype:1,addcharset:1,adddefaultcharset:1,adddescription:1,addencoding:1,addhandler:1,addicon:1,addiconbyencoding:1,addiconbytype:1,addinputfilter:1,addlanguage:1,addmoduleinfo:1,addoutputfilter:1,addoutputfilterbytype:1,addtype:1,alias:1,aliasmatch:1,allow:1,allowconnect:1,allowencodedslashes:1,allowoverride:1,anonymous:1,anonymous_logemail:1,anonymous_mustgiveemail:1,anonymous_nouserid:1,anonymous_verifyemail:1,authbasicauthoritative:1,authbasicprovider:1,authdbduserpwquery:1,authdbduserrealmquery:1,authdbmgroupfile:1,authdbmtype:1,authdbmuserfile:1,authdefaultauthoritative:1,authdigestalgorithm:1,authdigestdomain:1,authdigestnccheck:1,authdigestnonceformat:1,authdigestnoncelifetime:1,authdigestprovider:1,authdigestqop:1,authdigestshmemsize:1,authgroupfile:1,authldapbinddn:1,authldapbindpassword:1,authldapcharsetconfig:1,authldapcomparednonserver:1,authldapdereferencealiases:1,authldapgroupattribute:1,authldapgroupattributeisdn:1,authldapremoteuserattribute:1,authldapremoteuserisdn:1,authldapurl:1,authname:1,authnprovideralias:1,authtype:1,authuserfile:1,authzdbmauthoritative:1,authzdbmtype:1,authzdefaultauthoritative:1,authzgroupfileauthoritative:1,authzldapauthoritative:1,authzownerauthoritative:1,authzuserauthoritative:1,balancermember:1,browsermatch:1,browsermatchnocase:1,bufferedlogs:1,cachedefaultexpire:1,cachedirlength:1,cachedirlevels:1,cachedisable:1,cacheenable:1,cachefile:1,cacheignorecachecontrol:1,cacheignoreheaders:1,cacheignorenolastmod:1,cacheignorequerystring:1,cachelastmodifiedfactor:1,cachemaxexpire:1,cachemaxfilesize:1,cacheminfilesize:1,cachenegotiateddocs:1,cacheroot:1,cachestorenostore:1,cachestoreprivate:1,cgimapextension:1,charsetdefault:1,charsetoptions:1,charsetsourceenc:1,checkcaseonly:1,checkspelling:1,chrootdir:1,contentdigest:1,cookiedomain:1,cookieexpires:1,cookielog:1,cookiename:1,cookiestyle:1,cookietracking:1,coredumpdirectory:1,customlog:1,dav:1,davdepthinfinity:1,davgenericlockdb:1,davlockdb:1,davmintimeout:1,dbdexptime:1,dbdkeep:1,dbdmax:1,dbdmin:1,dbdparams:1,dbdpersist:1,dbdpreparesql:1,dbdriver:1,defaulticon:1,defaultlanguage:1,defaulttype:1,deflatebuffersize:1,deflatecompressionlevel:1,deflatefilternote:1,deflatememlevel:1,deflatewindowsize:1,deny:1,directoryindex:1,directorymatch:1,directoryslash:1,documentroot:1,dumpioinput:1,dumpiologlevel:1,dumpiooutput:1,enableexceptionhook:1,enablemmap:1,enablesendfile:1,errordocument:1,errorlog:1,example:1,expiresactive:1,expiresbytype:1,expiresdefault:1,extendedstatus:1,extfilterdefine:1,extfilteroptions:1,fileetag:1,filterchain:1,filterdeclare:1,filterprotocol:1,filterprovider:1,filtertrace:1,forcelanguagepriority:1,forcetype:1,forensiclog:1,gracefulshutdowntimeout:1,group:1,header:1,headername:1,hostnamelookups:1,identitycheck:1,identitychecktimeout:1,imapbase:1,imapdefault:1,imapmenu:1,include:1,indexheadinsert:1,indexignore:1,indexoptions:1,indexorderdefault:1,indexstylesheet:1,isapiappendlogtoerrors:1,isapiappendlogtoquery:1,isapicachefile:1,isapifakeasync:1,isapilognotsupported:1,isapireadaheadbuffer:1,keepalive:1,keepalivetimeout:1,languagepriority:1,ldapcacheentries:1,ldapcachettl:1,ldapconnectiontimeout:1,ldapopcacheentries:1,ldapopcachettl:1,ldapsharedcachefile:1,ldapsharedcachesize:1,ldaptrustedclientcert:1,ldaptrustedglobalcert:1,ldaptrustedmode:1,ldapverifyservercert:1,limitinternalrecursion:1,limitrequestbody:1,limitrequestfields:1,limitrequestfieldsize:1,limitrequestline:1,limitxmlrequestbody:1,listen:1,listenbacklog:1,loadfile:1,loadmodule:1,lockfile:1,logformat:1,loglevel:1,maxclients:1,maxkeepaliverequests:1,maxmemfree:1,maxrequestsperchild:1,maxrequestsperthread:1,maxspareservers:1,maxsparethreads:1,maxthreads:1,mcachemaxobjectcount:1,mcachemaxobjectsize:1,mcachemaxstreamingbuffer:1,mcacheminobjectsize:1,mcacheremovalalgorithm:1,mcachesize:1,metadir:1,metafiles:1,metasuffix:1,mimemagicfile:1,minspareservers:1,minsparethreads:1,mmapfile:1,mod_gzip_on:1,mod_gzip_add_header_count:1,mod_gzip_keep_workfiles:1,mod_gzip_dechunk:1,mod_gzip_min_http:1,mod_gzip_minimum_file_size:1,mod_gzip_maximum_file_size:1,mod_gzip_maximum_inmem_size:1,mod_gzip_temp_dir:1,mod_gzip_item_include:1,mod_gzip_item_exclude:1,mod_gzip_command_version:1,mod_gzip_can_negotiate:1,mod_gzip_handle_methods:1,mod_gzip_static_suffix:1,mod_gzip_send_vary:1,mod_gzip_update_static:1,modmimeusepathinfo:1,multiviewsmatch:1,namevirtualhost:1,noproxy:1,nwssltrustedcerts:1,nwsslupgradeable:1,options:1,order:1,passenv:1,pidfile:1,protocolecho:1,proxybadheader:1,proxyblock:1,proxydomain:1,proxyerroroverride:1,proxyftpdircharset:1,proxyiobuffersize:1,proxymaxforwards:1,proxypass:1,proxypassinterpolateenv:1,proxypassmatch:1,proxypassreverse:1,proxypassreversecookiedomain:1,proxypassreversecookiepath:1,proxypreservehost:1,proxyreceivebuffersize:1,proxyremote:1,proxyremotematch:1,proxyrequests:1,proxyset:1,proxystatus:1,proxytimeout:1,proxyvia:1,readmename:1,receivebuffersize:1,redirect:1,redirectmatch:1,redirectpermanent:1,redirecttemp:1,removecharset:1,removeencoding:1,removehandler:1,removeinputfilter:1,removelanguage:1,removeoutputfilter:1,removetype:1,requestheader:1,require:2,rewritebase:1,rewritecond:10,rewriteengine:1,rewritelock:1,rewritelog:1,rewriteloglevel:1,rewritemap:1,rewriteoptions:1,rewriterule:10,rlimitcpu:1,rlimitmem:1,rlimitnproc:1,satisfy:1,scoreboardfile:1,script:1,scriptalias:1,scriptaliasmatch:1,scriptinterpretersource:1,scriptlog:1,scriptlogbuffer:1,scriptloglength:1,scriptsock:1,securelisten:1,seerequesttail:1,sendbuffersize:1,serveradmin:1,serveralias:1,serverlimit:1,servername:1,serverpath:1,serverroot:1,serversignature:1,servertokens:1,setenv:1,setenvif:1,setenvifnocase:1,sethandler:1,setinputfilter:1,setoutputfilter:1,ssienableaccess:1,ssiendtag:1,ssierrormsg:1,ssistarttag:1,ssitimeformat:1,ssiundefinedecho:1,sslcacertificatefile:1,sslcacertificatepath:1,sslcadnrequestfile:1,sslcadnrequestpath:1,sslcarevocationfile:1,sslcarevocationpath:1,sslcertificatechainfile:1,sslcertificatefile:1,sslcertificatekeyfile:1,sslciphersuite:1,sslcryptodevice:1,sslengine:1,sslhonorciperorder:1,sslmutex:1,ssloptions:1,sslpassphrasedialog:1,sslprotocol:1,sslproxycacertificatefile:1,sslproxycacertificatepath:1,sslproxycarevocationfile:1,sslproxycarevocationpath:1,sslproxyciphersuite:1,sslproxyengine:1,sslproxymachinecertificatefile:1,sslproxymachinecertificatepath:1,sslproxyprotocol:1,sslproxyverify:1,sslproxyverifydepth:1,sslrandomseed:1,sslrequire:1,sslrequiressl:1,sslsessioncache:1,sslsessioncachetimeout:1,sslusername:1,sslverifyclient:1,sslverifydepth:1,startservers:1,startthreads:1,substitute:1,suexecusergroup:1,threadlimit:1,threadsperchild:1,threadstacksize:1,timeout:1,traceenable:1,transferlog:1,typesconfig:1,unsetenv:1,usecanonicalname:1,usecanonicalphysicalport:1,user:1,userdir:1,virtualdocumentroot:1,virtualdocumentrootip:1,virtualscriptalias:1,virtualscriptaliasip:1,win32disableacceptex:1,xbithack:1},literal:{on:1,off:1}},contains:[hljs.HASH_COMMENT_MODE,{className:"sqbracket",begin:"\\s\\[",end:"\\]$"},{className:"cbracket",begin:"[\\$%]\\{",end:"\\}",contains:["self",a]},a,{className:"tag",begin:""},hljs.QUOTE_STRING_MODE]}}}();hljs.LANGUAGES.bash=function(){var e={"true":1,"false":1};var b={className:"variable",begin:"\\$([a-zA-Z0-9_]+)\\b"};var a={className:"variable",begin:"\\$\\{(([^}])|(\\\\}))+\\}",contains:[hljs.C_NUMBER_MODE]};var f={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[hljs.BACKSLASH_ESCAPE,b,a],relevance:0};var c={className:"string",begin:"'",end:"'",relevance:0};var d={className:"test_condition",begin:"",end:"",contains:[f,c,b,a,hljs.C_NUMBER_MODE],keywords:{literal:e},relevance:0};return{defaultMode:{keywords:{keyword:{"if":1,then:1,"else":1,fi:1,"for":1,"break":1,"continue":1,"while":1,"in":1,"do":1,done:1,echo:1,exit:1,"return":1,set:1,declare:1},literal:e},contains:[{className:"shebang",begin:"(#!\\/bin\\/bash)|(#!\\/bin\\/sh)",relevance:10},b,a,hljs.HASH_COMMENT_MODE,hljs.C_NUMBER_MODE,f,c,hljs.inherit(d,{begin:"\\[ ",end:" \\]",relevance:0}),hljs.inherit(d,{begin:"\\[\\[ ",end:" \\]\\]"})]}}}();hljs.LANGUAGES.coffeescript=function(){var d={keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"new":1,"do":1,"return":1,"else":1,"break":1,"catch":1,"instanceof":1,"throw":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1,"debugger":1,"class":1,"extends":1,"super":1,then:1,unless:1,until:1,loop:2,of:2,by:1,when:2,and:1,or:1,is:1,isnt:2,not:1},literal:{"true":1,"false":1,"null":1,"undefined":1,yes:1,no:1,on:1,off:1},reserved:{"case":1,"default":1,"function":1,"var":1,"void":1,"with":1,"const":1,let:1,"enum":1,"export":1,"import":1,"native":1,__hasProp:1,__extends:1,__slice:1,__bind:1,__indexOf:1}};var a="[A-Za-z$_][0-9A-Za-z$_]*";var g={className:"subst",begin:"#\\{",end:"}",keywords:d,contains:[hljs.C_NUMBER_MODE,hljs.BINARY_NUMBER_MODE]};var b={className:"string",begin:'"',end:'"',relevance:0,contains:[hljs.BACKSLASH_ESCAPE,g]};var i={className:"string",begin:'"""',end:'"""',contains:[hljs.BACKSLASH_ESCAPE,g]};var e={className:"comment",begin:"###",end:"###"};var f={className:"regexp",begin:"///",end:"///",contains:[hljs.HASH_COMMENT_MODE]};var h={className:"function",begin:a+"\\s*=\\s*(\\(.+\\))?\\s*[-=]>",returnBegin:true,contains:[{className:"title",begin:a},{className:"params",begin:"\\(",end:"\\)"}]};var c={className:"javascript",begin:"`",end:"`",excludeBegin:true,excludeEnd:true,subLanguage:"javascript"};return{defaultMode:{keywords:d,contains:[hljs.C_NUMBER_MODE,hljs.BINARY_NUMBER_MODE,hljs.APOS_STRING_MODE,i,b,e,hljs.HASH_COMMENT_MODE,f,c,h]}}}();hljs.LANGUAGES.css=function(){var a={className:"function",begin:hljs.IDENT_RE+"\\(",end:"\\)",contains:[{endsWithParent:true,excludeEnd:true,contains:[hljs.NUMBER_MODE,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE]}]};return{case_insensitive:true,defaultMode:{illegal:"[=/|']",contains:[hljs.C_BLOCK_COMMENT_MODE,{className:"id",begin:"\\#[A-Za-z0-9_-]+"},{className:"class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"pseudo",begin:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{className:"at_rule",begin:"@(font-face|page)",lexems:"[a-z-]+",keywords:{"font-face":1,page:1}},{className:"at_rule",begin:"@",end:"[{;]",excludeEnd:true,keywords:{"import":1,page:1,media:1,charset:1},contains:[a,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,hljs.NUMBER_MODE]},{className:"tag",begin:hljs.IDENT_RE,relevance:0},{className:"rules",begin:"{",end:"}",illegal:"[^\\s]",relevance:0,contains:[hljs.C_BLOCK_COMMENT_MODE,{className:"rule",begin:"[^\\s]",returnBegin:true,end:";",endsWithParent:true,contains:[{className:"attribute",begin:"[A-Z\\_\\.\\-]+",end:":",excludeEnd:true,illegal:"[^\\s]",starts:{className:"value",endsWithParent:true,excludeEnd:true,contains:[a,hljs.NUMBER_MODE,hljs.QUOTE_STRING_MODE,hljs.APOS_STRING_MODE,hljs.C_BLOCK_COMMENT_MODE,{className:"hexcolor",begin:"\\#[0-9A-F]+"},{className:"important",begin:"!important"}]}}]}]}]}}}();hljs.LANGUAGES.diff={case_insensitive:true,defaultMode:{contains:[{className:"chunk",begin:"^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$",relevance:10},{className:"chunk",begin:"^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$",relevance:10},{className:"chunk",begin:"^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$",relevance:10},{className:"header",begin:"Index: ",end:"$"},{className:"header",begin:"=====",end:"=====$"},{className:"header",begin:"^\\-\\-\\-",end:"$"},{className:"header",begin:"^\\*{3} ",end:"$"},{className:"header",begin:"^\\+\\+\\+",end:"$"},{className:"header",begin:"\\*{5}",end:"\\*{5}$"},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"change",begin:"^\\!",end:"$"}]}};hljs.LANGUAGES.javascript={defaultMode:{keywords:{keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},literal:{"true":1,"false":1,"null":1}},contains:[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,hljs.C_NUMBER_MODE,{begin:"("+hljs.RE_STARTERS_RE+"|case|return|throw)\\s*",keywords:{"return":1,"throw":1,"case":1},contains:[hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,{className:"regexp",begin:"/",end:"/[gim]*",contains:[{begin:"\\\\/"}]}],relevance:0},{className:"function",begin:"\\bfunction\\b",end:"{",keywords:{"function":1},contains:[{className:"title",begin:"[A-Za-z$_][0-9A-Za-z$_]*"},{className:"params",begin:"\\(",end:"\\)",contains:[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]}]}]}};hljs.LANGUAGES.nginx=function(){var c={className:"variable",begin:"\\$\\d+"};var b={className:"variable",begin:"\\${",end:"}"};var a={className:"variable",begin:"[\\$\\@]"+hljs.UNDERSCORE_IDENT_RE};return{defaultMode:{contains:[hljs.HASH_COMMENT_MODE,{begin:hljs.UNDERSCORE_IDENT_RE,end:";|{",returnEnd:true,keywords:{accept_mutex:1,accept_mutex_delay:1,access_log:1,add_after_body:1,add_before_body:1,add_header:1,addition_types:1,alias:1,allow:1,ancient_browser:1,ancient_browser_value:1,auth_basic:1,auth_basic_user_file:1,autoindex:1,autoindex_exact_size:1,autoindex_localtime:1,"break":1,charset:1,charset_map:1,charset_types:1,client_body_buffer_size:1,client_body_in_file_only:1,client_body_in_single_buffer:1,client_body_temp_path:1,client_body_timeout:1,client_header_buffer_size:1,client_header_timeout:1,client_max_body_size:1,connection_pool_size:1,connections:1,create_full_put_path:1,daemon:1,dav_access:1,dav_methods:1,debug_connection:1,debug_points:1,default_type:1,deny:1,directio:1,directio_alignment:1,echo:1,echo_after_body:1,echo_before_body:1,echo_blocking_sleep:1,echo_duplicate:1,echo_end:1,echo_exec:1,echo_flush:1,echo_foreach_split:1,echo_location:1,echo_location_async:1,echo_read_request_body:1,echo_request_body:1,echo_reset_timer:1,echo_sleep:1,echo_subrequest:1,echo_subrequest_async:1,empty_gif:1,env:1,error_log:1,error_page:1,events:1,expires:1,fastcgi_bind:1,fastcgi_buffer_size:1,fastcgi_buffers:1,fastcgi_busy_buffers_size:1,fastcgi_cache:1,fastcgi_cache_key:1,fastcgi_cache_methods:1,fastcgi_cache_min_uses:1,fastcgi_cache_path:1,fastcgi_cache_use_stale:1,fastcgi_cache_valid:1,fastcgi_catch_stderr:1,fastcgi_connect_timeout:1,fastcgi_hide_header:1,fastcgi_ignore_client_abort:1,fastcgi_ignore_headers:1,fastcgi_index:1,fastcgi_intercept_errors:1,fastcgi_max_temp_file_size:1,fastcgi_next_upstream:1,fastcgi_param:1,fastcgi_pass:1,fastcgi_pass_header:1,fastcgi_pass_request_body:1,fastcgi_pass_request_headers:1,fastcgi_read_timeout:1,fastcgi_send_lowat:1,fastcgi_send_timeout:1,fastcgi_split_path_info:1,fastcgi_store:1,fastcgi_store_access:1,fastcgi_temp_file_write_size:1,fastcgi_temp_path:1,fastcgi_upstream_fail_timeout:1,fastcgi_upstream_max_fails:1,flv:1,geo:1,geoip_city:1,geoip_country:1,gzip:1,gzip_buffers:1,gzip_comp_level:1,gzip_disable:1,gzip_hash:1,gzip_http_version:1,gzip_min_length:1,gzip_no_buffer:1,gzip_proxied:1,gzip_static:1,gzip_types:1,gzip_vary:1,gzip_window:1,http:1,"if":1,if_modified_since:1,ignore_invalid_headers:1,image_filter:1,image_filter_buffer:1,image_filter_jpeg_quality:1,image_filter_transparency:1,include:1,index:1,internal:1,ip_hash:1,js:1,js_load:1,js_require:1,js_utf8:1,keepalive_requests:1,keepalive_timeout:1,kqueue_changes:1,kqueue_events:1,large_client_header_buffers:1,limit_conn:1,limit_conn_log_level:1,limit_except:1,limit_rate:1,limit_rate_after:1,limit_req:1,limit_req_log_level:1,limit_req_zone:1,limit_zone:1,lingering_time:1,lingering_timeout:1,listen:1,location:1,lock_file:1,log_format:1,log_not_found:1,log_subrequest:1,map:1,map_hash_bucket_size:1,map_hash_max_size:1,master_process:1,memcached_bind:1,memcached_buffer_size:1,memcached_connect_timeout:1,memcached_next_upstream:1,memcached_pass:1,memcached_read_timeout:1,memcached_send_timeout:1,memcached_upstream_fail_timeout:1,memcached_upstream_max_fails:1,merge_slashes:1,min_delete_depth:1,modern_browser:1,modern_browser_value:1,more_clear_headers:1,more_clear_input_headers:1,more_set_headers:1,more_set_input_headers:1,msie_padding:1,msie_refresh:1,multi_accept:1,open_file_cache:1,open_file_cache_errors:1,open_file_cache_events:1,open_file_cache_min_uses:1,open_file_cache_retest:1,open_file_cache_valid:1,open_log_file_cache:1,optimize_server_names:1,output_buffers:1,override_charset:1,perl:1,perl_modules:1,perl_require:1,perl_set:1,pid:1,port_in_redirect:1,post_action:1,postpone_gzipping:1,postpone_output:1,proxy_bind:1,proxy_buffer_size:1,proxy_buffering:1,proxy_buffers:1,proxy_busy_buffers_size:1,proxy_cache:1,proxy_cache_key:1,proxy_cache_methods:1,proxy_cache_min_uses:1,proxy_cache_path:1,proxy_cache_use_stale:1,proxy_cache_valid:1,proxy_connect_timeout:1,proxy_headers_hash_bucket_size:1,proxy_headers_hash_max_size:1,proxy_hide_header:1,proxy_ignore_client_abort:1,proxy_ignore_headers:1,proxy_intercept_errors:1,proxy_max_temp_file_size:1,proxy_method:1,proxy_next_upstream:1,proxy_pass:1,proxy_pass_header:1,proxy_pass_request_body:1,proxy_pass_request_headers:1,proxy_read_timeout:1,proxy_redirect:1,proxy_send_lowat:1,proxy_send_timeout:1,proxy_set_body:1,proxy_set_header:1,proxy_store:1,proxy_store_access:1,proxy_temp_file_write_size:1,proxy_temp_path:1,proxy_upstream_fail_timeout:1,proxy_upstream_max_fails:1,push_authorized_channels_only:1,push_channel_group:1,push_max_channel_id_length:1,push_max_channel_subscribers:1,push_max_message_buffer_length:1,push_max_reserved_memory:1,push_message_buffer_length:1,push_message_timeout:1,push_min_message_buffer_length:1,push_min_message_recipients:1,push_publisher:1,push_store_messages:1,push_subscriber:1,push_subscriber_concurrency:1,random_index:1,read_ahead:1,real_ip_header:1,recursive_error_pages:1,request_pool_size:1,reset_timedout_connection:1,resolver:1,resolver_timeout:1,"return":1,rewrite:1,rewrite_log:1,root:1,satisfy:1,satisfy_any:1,send_lowat:1,send_timeout:1,sendfile:1,sendfile_max_chunk:1,server:1,server_name:1,server_name_in_redirect:1,server_names_hash_bucket_size:1,server_names_hash_max_size:1,server_tokens:1,set:1,set_real_ip_from:1,source_charset:1,ssi:1,ssi_ignore_recycled_buffers:1,ssi_min_file_chunk:1,ssi_silent_errors:1,ssi_types:1,ssi_value_length:1,ssl:1,ssl_certificate:1,ssl_certificate_key:1,ssl_ciphers:1,ssl_client_certificate:1,ssl_crl:1,ssl_dhparam:1,ssl_prefer_server_ciphers:1,ssl_protocols:1,ssl_session_cache:1,ssl_session_timeout:1,ssl_verify_client:1,ssl_verify_depth:1,sub_filter:1,sub_filter_once:1,sub_filter_types:1,tcp_nodelay:1,tcp_nopush:1,timer_resolution:1,try_files:1,types:1,types_hash_bucket_size:1,types_hash_max_size:1,underscores_in_headers:1,uninitialized_variable_warn:1,upstream:1,use:1,user:1,userid:1,userid_domain:1,userid_expires:1,userid_mark:1,userid_name:1,userid_p3p:1,userid_path:1,userid_service:1,valid_referers:1,variables_hash_bucket_size:1,variables_hash_max_size:1,worker_connections:1,worker_cpu_affinity:1,worker_priority:1,worker_processes:1,worker_rlimit_core:1,worker_rlimit_nofile:1,worker_rlimit_sigpending:1,working_directory:1,xml_entities:1,xslt_stylesheet:1,xslt_types:1},relevance:0,contains:[hljs.HASH_COMMENT_MODE,{begin:"\\s",end:"[;{]",returnBegin:true,returnEnd:true,lexems:"[a-z/]+",keywords:{built_in:{on:1,off:1,yes:1,no:1,"true":1,"false":1,none:1,blocked:1,debug:1,info:1,notice:1,warn:1,error:1,crit:1,select:1,permanent:1,redirect:1,kqueue:1,rtsig:1,epoll:1,poll:1,"/dev/poll":1}},relevance:0,contains:[hljs.HASH_COMMENT_MODE,{className:"string",begin:'"',end:'"',contains:[hljs.BACKSLASH_ESCAPE,c,b,a],relevance:0},{className:"string",begin:"'",end:"'",contains:[hljs.BACKSLASH_ESCAPE,c,b,a],relevance:0},{className:"string",begin:"([a-z]+):/",end:"[;\\s]",returnEnd:true},{className:"regexp",begin:"\\s\\^",end:"\\s|{|;",returnEnd:true,contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"regexp",begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:true,contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"regexp",begin:"\\*(\\.[a-z\\-]+)+",contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"regexp",begin:"([a-z\\-]+\\.)+\\*",contains:[hljs.BACKSLASH_ESCAPE,c,b,a]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b"},{className:"number",begin:"\\s\\d+[kKmMgGdshdwy]*\\b",relevance:0},c,b,a]}]}]}}}();hljs.LANGUAGES.ruby=function(){var a="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?";var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var f={keyword:{and:1,"false":1,then:1,defined:1,module:1,"in":1,"return":1,redo:1,"if":1,BEGIN:1,retry:1,end:1,"for":1,"true":1,self:1,when:1,next:1,until:1,"do":1,begin:1,unless:1,END:1,rescue:1,nil:1,"else":1,"break":1,undef:1,not:1,"super":1,"class":1,"case":1,require:1,yield:1,alias:1,"while":1,ensure:1,elsif:1,or:1,def:1},keymethods:{__id__:1,__send__:1,abort:1,abs:1,"all?":1,allocate:1,ancestors:1,"any?":1,arity:1,assoc:1,at:1,at_exit:1,autoload:1,"autoload?":1,"between?":1,binding:1,binmode:1,"block_given?":1,call:1,callcc:1,caller:1,capitalize:1,"capitalize!":1,casecmp:1,"catch":1,ceil:1,center:1,chomp:1,"chomp!":1,chop:1,"chop!":1,chr:1,"class":1,class_eval:1,"class_variable_defined?":1,class_variables:1,clear:1,clone:1,close:1,close_read:1,close_write:1,"closed?":1,coerce:1,collect:1,"collect!":1,compact:1,"compact!":1,concat:1,"const_defined?":1,const_get:1,const_missing:1,const_set:1,constants:1,count:1,crypt:1,"default":1,default_proc:1,"delete":1,"delete!":1,delete_at:1,delete_if:1,detect:1,display:1,div:1,divmod:1,downcase:1,"downcase!":1,downto:1,dump:1,dup:1,each:1,each_byte:1,each_index:1,each_key:1,each_line:1,each_pair:1,each_value:1,each_with_index:1,"empty?":1,entries:1,eof:1,"eof?":1,"eql?":1,"equal?":1,"eval":1,exec:1,exit:1,"exit!":1,extend:1,fail:1,fcntl:1,fetch:1,fileno:1,fill:1,find:1,find_all:1,first:1,flatten:1,"flatten!":1,floor:1,flush:1,for_fd:1,foreach:1,fork:1,format:1,freeze:1,"frozen?":1,fsync:1,getc:1,gets:1,global_variables:1,grep:1,gsub:1,"gsub!":1,"has_key?":1,"has_value?":1,hash:1,hex:1,id:1,include:1,"include?":1,included_modules:1,index:1,indexes:1,indices:1,induced_from:1,inject:1,insert:1,inspect:1,instance_eval:1,instance_method:1,instance_methods:1,"instance_of?":1,"instance_variable_defined?":1,instance_variable_get:1,instance_variable_set:1,instance_variables:1,"integer?":1,intern:1,invert:1,ioctl:1,"is_a?":1,isatty:1,"iterator?":1,join:1,"key?":1,keys:1,"kind_of?":1,lambda:1,last:1,length:1,lineno:1,ljust:1,load:1,local_variables:1,loop:1,lstrip:1,"lstrip!":1,map:1,"map!":1,match:1,max:1,"member?":1,merge:1,"merge!":1,method:1,"method_defined?":1,method_missing:1,methods:1,min:1,module_eval:1,modulo:1,name:1,nesting:1,"new":1,next:1,"next!":1,"nil?":1,nitems:1,"nonzero?":1,object_id:1,oct:1,open:1,pack:1,partition:1,pid:1,pipe:1,pop:1,popen:1,pos:1,prec:1,prec_f:1,prec_i:1,print:1,printf:1,private_class_method:1,private_instance_methods:1,"private_method_defined?":1,private_methods:1,proc:1,protected_instance_methods:1,"protected_method_defined?":1,protected_methods:1,public_class_method:1,public_instance_methods:1,"public_method_defined?":1,public_methods:1,push:1,putc:1,puts:1,quo:1,raise:1,rand:1,rassoc:1,read:1,read_nonblock:1,readchar:1,readline:1,readlines:1,readpartial:1,rehash:1,reject:1,"reject!":1,remainder:1,reopen:1,replace:1,require:1,"respond_to?":1,reverse:1,"reverse!":1,reverse_each:1,rewind:1,rindex:1,rjust:1,round:1,rstrip:1,"rstrip!":1,scan:1,seek:1,select:1,send:1,set_trace_func:1,shift:1,singleton_method_added:1,singleton_methods:1,size:1,sleep:1,slice:1,"slice!":1,sort:1,"sort!":1,sort_by:1,split:1,sprintf:1,squeeze:1,"squeeze!":1,srand:1,stat:1,step:1,store:1,strip:1,"strip!":1,sub:1,"sub!":1,succ:1,"succ!":1,sum:1,superclass:1,swapcase:1,"swapcase!":1,sync:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,taint:1,"tainted?":1,tell:1,test:1,"throw":1,times:1,to_a:1,to_ary:1,to_f:1,to_hash:1,to_i:1,to_int:1,to_io:1,to_proc:1,to_s:1,to_str:1,to_sym:1,tr:1,"tr!":1,tr_s:1,"tr_s!":1,trace_var:1,transpose:1,trap:1,truncate:1,"tty?":1,type:1,ungetc:1,uniq:1,"uniq!":1,unpack:1,unshift:1,untaint:1,untrace_var:1,upcase:1,"upcase!":1,update:1,upto:1,"value?":1,values:1,values_at:1,warn:1,write:1,write_nonblock:1,"zero?":1,zip:1}};var c={className:"yardoctag",begin:"@[A-Za-z]+"};var k=[{className:"comment",begin:"#",end:"$",contains:[c]},{className:"comment",begin:"^\\=begin",end:"^\\=end",contains:[c],relevance:10},{className:"comment",begin:"^__END__",end:"\\n$"}];var d={className:"subst",begin:"#\\{",end:"}",lexems:a,keywords:f};var i=[hljs.BACKSLASH_ESCAPE,d];var b=[{className:"string",begin:"'",end:"'",contains:i,relevance:0},{className:"string",begin:'"',end:'"',contains:i,relevance:0},{className:"string",begin:"%[qw]?\\(",end:"\\)",contains:i,relevance:10},{className:"string",begin:"%[qw]?\\[",end:"\\]",contains:i,relevance:10},{className:"string",begin:"%[qw]?{",end:"}",contains:i,relevance:10},{className:"string",begin:"%[qw]?<",end:">",contains:i,relevance:10},{className:"string",begin:"%[qw]?/",end:"/",contains:i,relevance:10},{className:"string",begin:"%[qw]?%",end:"%",contains:i,relevance:10},{className:"string",begin:"%[qw]?-",end:"-",contains:i,relevance:10},{className:"string",begin:"%[qw]?\\|",end:"\\|",contains:i,relevance:10}];var h={className:"function",begin:"\\bdef\\s+",end:" |$|;",lexems:a,keywords:f,contains:[{className:"title",begin:j,lexems:a,keywords:f},{className:"params",begin:"\\(",end:"\\)",lexems:a,keywords:f}].concat(k)};var g={className:"identifier",begin:a,lexems:a,keywords:f,relevance:0};var e=k.concat(b.concat([{className:"class",begin:"\\b(class|module)\\b",end:"$|;",keywords:{"class":1,module:1},contains:[{className:"title",begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",relevance:0},{className:"inheritance",begin:"<\\s*",contains:[{className:"parent",begin:"("+hljs.IDENT_RE+"::)?"+hljs.IDENT_RE}]}].concat(k)},h,{className:"constant",begin:"(::)?([A-Z]\\w*(::)?)+",relevance:0},{className:"symbol",begin:":",contains:b.concat([g]),relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"number",begin:"\\?\\w"},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},g,{begin:"("+hljs.RE_STARTERS_RE+")\\s*",contains:k.concat([{className:"regexp",begin:"/",end:"/[a-z]*",illegal:"\\n",contains:[hljs.BACKSLASH_ESCAPE]}]),relevance:0}]));d.contains=e;h.contains[1].contains=e;return{defaultMode:{lexems:a,keywords:f,contains:e}}}();hljs.LANGUAGES.sql={case_insensitive:true,defaultMode:{illegal:"[^\\s]",contains:[{className:"operator",begin:"(begin|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant)\\b",end:";|$",keywords:{keyword:{all:1,partial:1,global:1,month:1,current_timestamp:1,using:1,go:1,revoke:1,smallint:1,indicator:1,"end-exec":1,disconnect:1,zone:1,"with":1,character:1,assertion:1,to:1,add:1,current_user:1,usage:1,input:1,local:1,alter:1,match:1,collate:1,real:1,then:1,rollback:1,get:1,read:1,timestamp:1,session_user:1,not:1,integer:1,bit:1,unique:1,day:1,minute:1,desc:1,insert:1,execute:1,like:1,ilike:2,level:1,decimal:1,drop:1,"continue":1,isolation:1,found:1,where:1,constraints:1,domain:1,right:1,national:1,some:1,module:1,transaction:1,relative:1,second:1,connect:1,escape:1,close:1,system_user:1,"for":1,deferred:1,section:1,cast:1,current:1,sqlstate:1,allocate:1,intersect:1,deallocate:1,numeric:1,"public":1,preserve:1,full:1,"goto":1,initially:1,asc:1,no:1,key:1,output:1,collation:1,group:1,by:1,union:1,session:1,both:1,last:1,language:1,constraint:1,column:1,of:1,space:1,foreign:1,deferrable:1,prior:1,connection:1,unknown:1,action:1,commit:1,view:1,or:1,first:1,into:1,"float":1,year:1,primary:1,cascaded:1,except:1,restrict:1,set:1,references:1,names:1,table:1,outer:1,open:1,select:1,size:1,are:1,rows:1,from:1,prepare:1,distinct:1,leading:1,create:1,only:1,next:1,inner:1,authorization:1,schema:1,corresponding:1,option:1,declare:1,precision:1,immediate:1,"else":1,timezone_minute:1,external:1,varying:1,translation:1,"true":1,"case":1,exception:1,join:1,hour:1,"default":1,"double":1,scroll:1,value:1,cursor:1,descriptor:1,values:1,dec:1,fetch:1,procedure:1,"delete":1,and:1,"false":1,"int":1,is:1,describe:1,"char":1,as:1,at:1,"in":1,varchar:1,"null":1,trailing:1,any:1,absolute:1,current_time:1,end:1,grant:1,privileges:1,when:1,cross:1,check:1,write:1,current_date:1,pad:1,begin:1,temporary:1,exec:1,time:1,update:1,catalog:1,user:1,sql:1,date:1,on:1,identity:1,timezone_hour:1,natural:1,whenever:1,interval:1,work:1,order:1,cascade:1,diagnostics:1,nchar:1,having:1,left:1,call:1,"do":1,handler:1,load:1,replace:1,truncate:1,start:1,lock:1,show:1,pragma:1},aggregate:{count:1,sum:1,min:1,max:1,avg:1}},contains:[{className:"string",begin:"'",end:"'",contains:[hljs.BACKSLASH_ESCAPE,{begin:"''"}],relevance:0},{className:"string",begin:'"',end:'"',contains:[hljs.BACKSLASH_ESCAPE,{begin:'""'}],relevance:0},{className:"string",begin:"`",end:"`",contains:[hljs.BACKSLASH_ESCAPE]},hljs.C_NUMBER_MODE,{begin:"\\n"}]},hljs.C_BLOCK_COMMENT_MODE,{className:"comment",begin:"--",end:"$"}]}};hljs.LANGUAGES.xml=function(){var b="[A-Za-z0-9\\._:-]+";var a={endsWithParent:true,contains:[{className:"attribute",begin:b,relevance:0},{begin:'="',returnBegin:true,end:'"',contains:[{className:"value",begin:'"',endsWithParent:true}]},{begin:"='",returnBegin:true,end:"'",contains:[{className:"value",begin:"'",endsWithParent:true}]},{begin:"=",contains:[{className:"value",begin:"[^\\s/>]+"}]}]};return{case_insensitive:true,defaultMode:{contains:[{className:"pi",begin:"<\\?",end:"\\?>",relevance:10},{className:"doctype",begin:"",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},{className:"comment",begin:"",relevance:10},{className:"cdata",begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"tag",begin:"|$)",end:">",keywords:{title:{style:1}},contains:[a],starts:{className:"css",end:"",returnEnd:true,subLanguage:"css"}},{className:"tag",begin:"|$)",end:">",keywords:{title:{script:1}},contains:[a],starts:{className:"javascript",end:"<\/script>",returnEnd:true,subLanguage:"javascript"}},{className:"vbscript",begin:"<%",end:"%>",subLanguage:"vbscript"},{className:"tag",begin:"",contains:[{className:"title",begin:"[^ />]+"},a]}]}}}(); \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/assets/search_data.js b/node_modules/scandirectory/node_modules/taskgroup/docs/assets/search_data.js new file mode 100644 index 000000000..3818cfb91 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/assets/search_data.js @@ -0,0 +1 @@ +window.searchData = [{"t":"Task","p":"classes/Task.html"},{"t":"@isTask","h":"Task","p":"classes/Task.html#isTask-class"},{"t":"@create","h":"Task","p":"classes/Task.html#create-class"},{"t":".constructor","h":"Task","p":"classes/Task.html#constructor-instance"},{"t":".setConfig","h":"Task","p":"classes/Task.html#setConfig-instance"},{"t":".hasStarted","h":"Task","p":"classes/Task.html#hasStarted-instance"},{"t":".hasExited","h":"Task","p":"classes/Task.html#hasExited-instance"},{"t":".isDestroyed","h":"Task","p":"classes/Task.html#isDestroyed-instance"},{"t":".isComplete","h":"Task","p":"classes/Task.html#isComplete-instance"},{"t":".whenDone","h":"Task","p":"classes/Task.html#whenDone-instance"},{"t":".onceDone","h":"Task","p":"classes/Task.html#onceDone-instance"},{"t":".destroy","h":"Task","p":"classes/Task.html#destroy-instance"},{"t":".run","h":"Task","p":"classes/Task.html#run-instance"},{"t":"TaskGroup","p":"classes/TaskGroup.html"},{"t":"@isTaskGroup","h":"TaskGroup","p":"classes/TaskGroup.html#isTaskGroup-class"},{"t":"@create","h":"TaskGroup","p":"classes/TaskGroup.html#create-class"},{"t":".constructor","h":"TaskGroup","p":"classes/TaskGroup.html#constructor-instance"},{"t":".setNestedTaskConfig","h":"TaskGroup","p":"classes/TaskGroup.html#setNestedTaskConfig-instance"},{"t":".setNestedConfig","h":"TaskGroup","p":"classes/TaskGroup.html#setNestedConfig-instance"},{"t":".setConfig","h":"TaskGroup","p":"classes/TaskGroup.html#setConfig-instance"},{"t":".createTask","h":"TaskGroup","p":"classes/TaskGroup.html#createTask-instance"},{"t":".addTask","h":"TaskGroup","p":"classes/TaskGroup.html#addTask-instance"},{"t":".addTasks","h":"TaskGroup","p":"classes/TaskGroup.html#addTasks-instance"},{"t":".createGroup","h":"TaskGroup","p":"classes/TaskGroup.html#createGroup-instance"},{"t":".addGroup","h":"TaskGroup","p":"classes/TaskGroup.html#addGroup-instance"},{"t":".addGroups","h":"TaskGroup","p":"classes/TaskGroup.html#addGroups-instance"},{"t":".getItemsTotal","h":"TaskGroup","p":"classes/TaskGroup.html#getItemsTotal-instance"},{"t":".getItemNames","h":"TaskGroup","p":"classes/TaskGroup.html#getItemNames-instance"},{"t":".getItemTotals","h":"TaskGroup","p":"classes/TaskGroup.html#getItemTotals-instance"},{"t":".hasRunning","h":"TaskGroup","p":"classes/TaskGroup.html#hasRunning-instance"},{"t":".hasRemaining","h":"TaskGroup","p":"classes/TaskGroup.html#hasRemaining-instance"},{"t":".hasItems","h":"TaskGroup","p":"classes/TaskGroup.html#hasItems-instance"},{"t":".hasStarted","h":"TaskGroup","p":"classes/TaskGroup.html#hasStarted-instance"},{"t":".hasExited","h":"TaskGroup","p":"classes/TaskGroup.html#hasExited-instance"},{"t":".isEmpty","h":"TaskGroup","p":"classes/TaskGroup.html#isEmpty-instance"},{"t":".isComplete","h":"TaskGroup","p":"classes/TaskGroup.html#isComplete-instance"},{"t":".whenDone","h":"TaskGroup","p":"classes/TaskGroup.html#whenDone-instance"},{"t":".onceDone","h":"TaskGroup","p":"classes/TaskGroup.html#onceDone-instance"},{"t":".clear","h":"TaskGroup","p":"classes/TaskGroup.html#clear-instance"},{"t":".destroy","h":"TaskGroup","p":"classes/TaskGroup.html#destroy-instance"},{"t":".run","h":"TaskGroup","p":"classes/TaskGroup.html#run-instance"},{"t":"README.md","p":"README.md.html"},{"t":"HISTORY.md","p":"HISTORY.md.html"},{"t":"LICENSE.md","p":"LICENSE.md.html"}] \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/class_index.html b/node_modules/scandirectory/node_modules/taskgroup/docs/class_index.html new file mode 100644 index 000000000..aed5ab227 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/class_index.html @@ -0,0 +1,154 @@ + + + + + TaskGroup API Documentation + + + + + +
      + +
      +

      TaskGroup API Documentation

      +
      +

      Alphabetic Index

      +

      Extra File Listing

      + +

      Class Listing A-Z

      +
      + + +
      +

      File Listing A-Z

      +
      +
      +
      +
      + + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/class_list.html b/node_modules/scandirectory/node_modules/taskgroup/docs/class_list.html new file mode 100644 index 000000000..e090a4203 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/class_list.html @@ -0,0 +1,47 @@ + + + + + TaskGroup API Documentation + + + + + +
      +

      Class List

      + + +
        +
      • + Task + + < + Interface + + + + +
      • +
      • + TaskGroup + + < + Interface + + + + +
      • +
      + +
      + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/classes/Task.html b/node_modules/scandirectory/node_modules/taskgroup/docs/classes/Task.html new file mode 100644 index 000000000..a4b3ecd6b --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/classes/Task.html @@ -0,0 +1,728 @@ + + + + + TaskGroup API Documentation + + + + + +
      + +
      +

      + Class + Task +

      +
      + + + + + + + + +
      Defined in:src/lib/taskgroup.coffee
      Inherits: + Interface +
      +

      Overview

      +
      + Public: Our Task Class. + +Available configuration is documented in ::setConfig. + +Available events: + + - `started()` - emitted when we start execution + - `running()` - emitted when the method starts execution + - `failed(err)` - emitted when execution exited with a failure + - `passed()` - emitted when execution exited with a success + - `completed(err, args...)` - emitted when execution exited, `args` are the result arguments from the method + - `error(err)` - emtited if an unexpected error occurs without ourself + - `done(err, args...)` - emitted when either execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) + +Available internal statuses: + + - `null` - execution has not yet started + - `'started'` - execution has begun + - `'running'` - execution of our method has begun + - `'failed'` - execution of our method has failed + - `'passed'` - execution of our method has succeeded + - `'destroyed'` - we've been destroyed and can no longer execute + +Examples + + task = require('taskgroup').Task.create('my synchronous task', -> + return 5 + ).done(console.log) # null, 5] + + task = require('taskgroup').Task.create('my asynchronous task', (complete) -> + complete(null, 5) + ).done(console.log) # [null, 5] + + task = require('taskgroup').Task.create('my task that errors', -> + err = new Error('deliberate error') + return err // if asynchronous, can also do: complete(err) + // thrown and uncaught errors are also caught thanks to domains, but that should be avoided + // as it would put your app in an unknown state + ).done(console.log) # [Error('deliberator error')] +
      +

      Examples:

      +

      + +

      +
      task = require('taskgroup').Task.create('my synchronous task', ->
      +  return 5
      +).done(console.log)  # null, 5]
      +

      + +

      +
      task = require('taskgroup').Task.create('my asynchronous task', (complete) ->
      +  complete(null, 5)
      +).done(console.log)  # [null, 5]
      +

      + +

      +
      task = require('taskgroup').Task.create('my task that errors', ->
      +  err = new Error('deliberate error')
      +  return err  // if asynchronous, can also do: complete(err)
      +  // thrown and uncaught errors are also caught thanks to domains, but that should be avoided
      +  // as it would put your app in an unknown state
      +).done(console.log)  # [Error('deliberator error')] 
      +
      +
      +
      +
      +

      Class Method Summary

      + +

      Instance Method Summary

      + +

      + Inherited Method Summary +

      +

      + Methods inherited from + Interface +

      +

      + .whenDone, + .onceDone, + .done, + .getNames, + .getName, + .getConfig +

      +

      Class Method Details

      +
      +
      +

      + Task .create(args...) + Source +

      +
      + Public: Creates a new Task instance. + +args - The Arguments to forwarded along to the ::constructor. + +Returns the new Task instance. +
      +
      +

      Parameters:

      +
        +
      • + args + — + The Arguments to forwarded along to the ::constructor. +
      • +
      +

      Returns:

      +
        +
      • + + (Task) + — + Returns the new Task instance. +
      • +
      +
      +
      +
      +

      + Boolean .isTask(item) + Source +

      +
      + Public: A helper method to check if the passed argument is an instanceof a Task. + +item - The possible instance of the Task that we want to check + +Returns a Boolean of whether or not the item is a Task instance. +
      +
      +

      Parameters:

      +
        +
      • + (Task) + item + — + The possible instance of the Task that we want to check +
      • +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean of whether or not the item is a Task instance. +
      • +
      +
      +
      +
      +

      Constructor Details

      +
      +
      +

      + ::constructor(args...) + Source +

      +
      + Public: Initialize our new Task instance. Forwards arguments onto ::setConfig. +
      +
      +
      +
      +
      +

      Instance Method Details

      +
      +
      +

      + ::destroy() + Source +

      +
      + Public: Destroy the task and prevent it from executing ever again. +
      +
      +
      +
      +
      +

      + Boolean ::hasExited() + Source +

      +
      + Public: Have we finished its execution yet? + +Returns a Boolean which is `true` if we have finished execution +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have finished execution +
      • +
      +
      +
      +
      +

      + Boolean ::hasStarted() + Source +

      +
      + Public: Have we started execution yet? + +Returns a Boolean which is `true` if we have commenced execution +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have commenced execution +
      • +
      +
      +
      +
      +

      + Boolean ::isComplete() + Source +

      +
      + Public: Have we completed its execution yet? + +Returns a Boolean which is `true` if we have completed +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have completed +
      • +
      +
      +
      +
      +

      + Boolean ::isDestroyed() + Source +

      +
      + Public: Have we been destroyed? + +Returns a Boolean which is `true` if we have bene destroyed +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have bene destroyed +
      • +
      +
      +
      +
      +

      + ::onceDone(listener) + Source +

      +
      + Public: Once Done Promise. +Fires the listener once, either on the next tick if we are already done, or if not, once the `done` event fires. + +listener - The Function to attach or execute. +
      +
      +

      Parameters:

      +
        +
      • + (Function) + listener + — + The Function to attach or execute. +
      • +
      +
      +
      +
      +

      + ::run() + Source +

      +
      + Public: Start the execution of the task. + +Will emit an `error` event if the task has already started before. +
      +
      +
      +
      +
      +

      + ::setConfig(opts = {}) + Source +

      +
      + Public: Set the configuration for our instance. + +Despite accepting an Object of configuration, we can also accept an Array of configuration. +When using an array, a String becomes the :name, a Function becomes the :method, and an Object becomes the :config + +config - Our configuration Object can contain the following fields: + :name - (default: null) A String for what we would like our name to be, useful for debugging. + :done - (default: null) A Function that we would like passed to ::onceDone (aliases are :onceDone, and :next) + :whenDone - (default: null) A Function that we would like passed to ::whenDone + :on - (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.on. + :once - (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.once. + :method - (default: null) The Function that we would like to execute within our task. + :parent - (default: null) A parent TaskGroup that we may be attached to. + :onError - (default: 'exit') A String that is either `'exit'` or `'ignore'`, when `'ignore'` duplicate run errors are not reported, useful when combined with the timeout option. + :args - (default: null) An Array of arguments that we would like to forward onto our method when we execute it. + :timeout - (default: null) A Number of millesconds that we would like to wait before timing out the method. + :ambi - (default: true) A Boolean for whether or not to use bevry/ambi to determine if the method is asynchronous or synchronous and execute it appropriately + :domain - (default: true) A Boolean for whether or not to wrap the task execution in a domain to attempt to catch background errors (aka errors that are occuring in other ticks than the initial execution) + :sync - (default: false) A Boolean for whether or not we should execute certain calls asynchronously (`false`) or synchronously (`true`) +
      +
      +

      Parameters:

      +
        +
      • + (Object) + config + — + Our configuration Object can contain the following fields: +
      • +
          +
        • + (String) + name + — + (default: null) A String for what we would like our name to be, useful for debugging. +
        • +
        • + (Function) + done + — + (default: null) A Function that we would like passed to ::onceDone (aliases are :onceDone, and :next) +
        • +
        • + (Function) + whenDone + — + (default: null) A Function that we would like passed to ::whenDone +
        • +
        • + (Object) + on + — + (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.on. +
        • +
        • + (Object) + once + — + (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.once. +
        • +
        • + (Function) + method + — + (default: null) The Function that we would like to execute within our task. +
        • +
        • + (TaskGroup) + parent + — + (default: null) A parent TaskGroup that we may be attached to. +
        • +
        • + (String) + onError + — + (default: 'exit') A String that is either 'exit' or 'ignore', when 'ignore' duplicate run errors are not reported, useful when combined with the timeout option. +
        • +
        • + (Array) + args + — + (default: null) An Array of arguments that we would like to forward onto our method when we execute it. +
        • +
        • + (Number) + timeout + — + (default: null) A Number of millesconds that we would like to wait before timing out the method. +
        • +
        • + (Boolean) + ambi + — + (default: true) A Boolean for whether or not to use bevry/ambi to determine if the method is asynchronous or synchronous and execute it appropriately +
        • +
        • + (Boolean) + domain + — + (default: true) A Boolean for whether or not to wrap the task execution in a domain to attempt to catch background errors (aka errors that are occuring in other ticks than the initial execution) +
        • +
        • + (Boolean) + sync + — + (default: false) A Boolean for whether or not we should execute certain calls asynchronously (false) or synchronously (true) +
        • +
        +
      +
      +
      +
      +

      + ::whenDone(listener) + Source +

      +
      + Public: When Done Promise. +Fires the listener, either on the next tick if we are already done, or if not, each time the `done` event fires. + +listener - The Function to attach or execute. +
      +
      +

      Parameters:

      +
        +
      • + (Function) + listener + — + The Function to attach or execute. +
      • +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/classes/TaskGroup.html b/node_modules/scandirectory/node_modules/taskgroup/docs/classes/TaskGroup.html new file mode 100644 index 000000000..6b59160e3 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/classes/TaskGroup.html @@ -0,0 +1,1292 @@ + + + + + TaskGroup API Documentation + + + + + +
      + +
      +

      + Class + TaskGroup +

      + + + + + + + + + +
      Defined in:src/lib/taskgroup.coffee
      Inherits: + Interface +
      +

      Overview

      +
      + Public: Our TaskGroup class. + +Available configuration is documented in ::setConfig. + +Available events: +- `started()` - emitted when we start execution +- `running()` - emitted when the first item starts execution +- `failed(err)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(err, results)` - emitted when execution exited, `results` is an Array of the result arguments for each item that executed +- `error(err)` - emtited if an unexpected error occured within ourself +- `done(err, results)` - emitted when either the execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) +- `item.*(...)` - bubbled events from an added item +- `task.*(...)` - bubbled events from an added Task +- `group.*(...)` - bubbled events from an added TaskGroup + +Available internal statuses: +- `null` - execution has not yet started +- `'started'` - execution has begun +- `'running'` - execution of items has begun +- `'failed'` - execution has exited with failure status +- `'passed'` - execution has exited with success status +- `'destroyed'` - we've been destroyed and can no longer execute +
      +
      +
      +

      Class Method Summary

      + +

      Instance Method Summary

      + +

      + Inherited Method Summary +

      +

      + Methods inherited from + Interface +

      +

      + .whenDone, + .onceDone, + .done, + .getNames, + .getName, + .getConfig +

      +

      Class Method Details

      +
      +
      +

      + TaskGroup .create(args...) + Source +

      +
      + Public: Creates a new TaskGroup instance. + +args - The Arguments to be forwarded along to the ::constructor. + +Returns the new TaskGroup instance. +
      +
      +

      Parameters:

      +
        +
      • + args + — + The Arguments to be forwarded along to the ::constructor. +
      • +
      +

      Returns:

      + +
      +
      +
      +

      + Boolean .isTaskGroup(group) + Source +

      +
      + Public: A helper method to check if the passed argument is an instanceof a TaskGroup. + +item - The possible instance of the TaskGroup that we want to check + +Returns a Boolean of whether or not the item is a TaskGroup instance. +
      +
      +

      Parameters:

      +
        +
      • + (TaskGroup) + item + — + The possible instance of the TaskGroup that we want to check +
      • +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean of whether or not the item is a TaskGroup instance. +
      • +
      +
      +
      +
      +

      Constructor Details

      +
      +
      +

      + ::constructor(args...) + Source +

      +
      + Public: Initialize our new TaskGroup instance. Forwards Arguments onto ::setConfig. +
      +
      +
      +
      +
      +

      Instance Method Details

      +
      +
      +

      + ::addGroup(args...) + Source +

      +
      + Public: Add a TaskGroup with some configuration to ourself, create it if needed. + +args - Arguments to configure (and if needed, create) the TaskGroup +
      +
      +

      Parameters:

      +
        +
      • + (TaskGroup) + args + — + Arguments to configure (and if needed, create) the TaskGroup +
      • +
      +
      +
      +
      +

      + ::addGroups(items, args...) + Source +

      +
      + Public: Add TaskGroups with some configuration to ourself, create it if needed. + +items - An Array of TaskGroup items to add to ourself +args - Optional Arguments to configure each added TaskGroup +
      +
      +

      Parameters:

      +
        +
      • + (Array) + items + — + An Array of TaskGroup items to add to ourself +
      • +
      • + (TaskGroup) + args + — + Optional Arguments to configure each added TaskGroup +
      • +
      +
      +
      +
      +

      + ::addTask(args...) + Source +

      +
      + Public: Add a Task with some configuration to ourself, create it if needed. + +args - Arguments to configure (and if needed, create) the task +
      +
      +

      Parameters:

      +
        +
      • + args + — + Arguments to configure (and if needed, create) the task +
      • +
      +
      +
      +
      +

      + ::addTasks(items, args...) + Source +

      +
      + Public: Add Tasks with some configuration to ourself, create it if needed. + +items - An Array of Task items to add to ourself +args - Optional Arguments to configure each added Task +
      +
      +

      Parameters:

      +
        +
      • + (Array) + items + — + An Array of Task items to add to ourself +
      • +
      • + (Task) + args + — + Optional Arguments to configure each added Task +
      • +
      +
      +
      +
      +

      + ::clear() + Source +

      +
      + Public: Clear remaning items. +
      +
      +
      +
      +
      +

      + TaskGroup ::createGroup(args...) + Source +

      +
      + Public: Create a TaskGroup instance from some configuration. + +If the first argument is already a TaskGroup instance, then just update it's configuration with the remaning arguments. + +args - Arguments to use to configure the TaskGroup instance + +Returns the new TaskGroup instance +
      +
      +

      Parameters:

      +
        +
      • + (TaskGroup) + args + — + Arguments to use to configure the TaskGroup instance +
      • +
      +

      Returns:

      + +
      +
      +
      +

      + Task ::createTask(args...) + Source +

      +
      + Public: Create a Task instance from some configuration. + +If the first argument is already a Task instance, then just update it's configuration with the remaning arguments. + +args - Arguments to use to configure the Task instance + +Returns the new Task instance +
      +
      +

      Parameters:

      +
        +
      • + (Task) + args + — + Arguments to use to configure the Task instance +
      • +
      +

      Returns:

      +
        +
      • + + (Task) + — + Returns the new Task instance +
      • +
      +
      +
      +
      +

      + ::destroy() + Source +

      +
      + Public: Destroy all remaining items and remove listeners. +
      +
      +
      +
      +
      +

      + Object ::getItemNames() + Source +

      +
      + Public: Gets the names of the items, the total number of items, and their results for the purpose of debugging. + +Returns an Object containg the hashes: + :remaining - An Array of the names of the remaining items + :running - An Array of the names of the running items + :completed - An Array of the names of the completed items + :total - A Number of the total items we have + :results - An Array of the results of the compelted items +
      +
      +

      Returns:

      +
        +
      • + + (Object) + — + Returns an Object containg the hashes: +
          +
        • + (Array) + remaining + — + An Array of the names of the remaining items +
        • +
        • + (Array) + running + — + An Array of the names of the running items +
        • +
        • + (Array) + completed + — + An Array of the names of the completed items +
        • +
        • + (Number) + total + — + A Number of the total items we have +
        • +
        • + (Array) + results + — + An Array of the results of the compelted items +
        • +
        +
      • +
      +
      +
      +
      +

      + Object ::getItemTotals() + Source +

      +
      + Public: Gets the total number count of each of our item lists. + +Returns an Object containg the hashes: + :remaining - A Number of the total remaining items + :running - A Number of the total running items + :completed - A Number of the total completed items + :total - A Number of the total items we have + :results - A Number of the total results we have +
      +
      +

      Returns:

      +
        +
      • + + (Object) + — + Returns an Object containg the hashes: +
          +
        • + (Number) + remaining + — + A Number of the total remaining items +
        • +
        • + (Number) + running + — + A Number of the total running items +
        • +
        • + (Number) + completed + — + A Number of the total completed items +
        • +
        • + (Number) + total + — + A Number of the total items we have +
        • +
        • + (Number) + results + — + A Number of the total results we have +
        • +
        +
      • +
      +
      +
      +
      +

      + Number ::getItemsTotal() + Source +

      +
      + Public: Gets the total number of items + +Returns a Number of the total items we have +
      +
      +

      Returns:

      +
        +
      • + + (Number) + — + Returns a Number of the total items we have +
      • +
      +
      +
      +
      +

      + Boolean ::hasExited() + Source +

      +
      + Public: Have we finished its execution yet? + +Returns a Boolean which is `true` if we have finished execution +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have finished execution +
      • +
      +
      +
      +
      +

      + Boolean ::hasItems() + Source +

      +
      + Public: Whether or not we have any items + +Returns a Boolean which is `true` if we have any running or remaining items +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have any running or remaining items +
      • +
      +
      +
      +
      +

      + Boolean ::hasRemaining() + Source +

      +
      + Public: Whether or not we have any items that are yet to execute + +Returns a Boolean which is `true` if we have any items that are still yet to be executed +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have any items that are still yet to be executed +
      • +
      +
      +
      +
      +

      + Boolean ::hasRunning() + Source +

      +
      + Public: Whether or not we have any running items + +Returns a Boolean which is `true` if we have any items that are currently running +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have any items that are currently running +
      • +
      +
      +
      +
      +

      + Boolean ::hasStarted() + Source +

      +
      + Public: Have we started execution yet? + +Returns a Boolean which is `true` if we have commenced execution +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have commenced execution +
      • +
      +
      +
      +
      +

      + Boolean ::isComplete() + Source +

      +
      + Public: Have we completed its execution yet? + +Completion of executed is determined of whether or not we have started, and whether or not we are currently paused or have no remaining and running items left + +Returns a Boolean which is `true` if we have completed execution +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have completed execution +
      • +
      +
      +
      +
      +

      + Boolean ::isEmpty() + Source +

      +
      + Public: Whether or not we have no items left + +Returns a Boolean which is `true` if we have no more running or remaining items +
      +
      +

      Returns:

      +
        +
      • + + (Boolean) + — + Returns a Boolean which is true if we have no more running or remaining items +
      • +
      +
      +
      +
      +

      + ::onceDone(handler) + Source +

      +
      + Public: Once Done Promise. +Fires the listener once, either on the next tick if we are already done, or if not, once the `done` event fires. + +listener - The Function to attach or execute. +
      +
      +

      Parameters:

      +
        +
      • + (Function) + listener + — + The Function to attach or execute. +
      • +
      +
      +
      +
      +

      + ::run(args...) + Source +

      +
      + Public: Start the execution. +
      +
      +
      +
      +
      +

      + ::setConfig(opts = {}) + Source +

      +
      + Public: Set the configuration for our instance. + +Despite accepting an Object of configuration, we can also accept an Array of configuration. +When using an array, a String becomes the :name, a Function becomes the :method, and an Object becomes the :config + +config - Our configuration Object can contain the following fields: + :name - (default: null) A String for what we would like our name to be, useful for debugging. + :done - (default: null) A Function that we would like passed to ::onceDone (aliases are :onceDone, and :next) + :whenDone - (default: null) A Function that we would like passed to ::whenDone + :on - (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.on. + :once - (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.once. # :method - (default: null) A Function that we would like to use to created nested groups and tasks using an inline style. + :parent - (default: null) A parent TaskGroup that we may be attached to. + :onError - (default: 'exit') A String that is either `'exit'` or `'ignore'`, when `'ignore'` errors that occur within items will not halt execution and will not be reported in the completion callbacks `err` argument (but will still be in the `results` argument). + :concurrency - (default: 1) The Number of items that we would like to execute at the same time. Use `0` for unlimited. `1` accomplishes serial execution, everything else accomplishes parallel execution. + :run - (default: true) A Boolean for whether or not to the :method (if specified) automatically. + :nestedConfig - (default: null) An Object of nested configuration to be applied to all items of this group. + :nestedTaskConfig - (default: null) An Object of nested configuration to be applied to all Tasks of this group. + :tasks - (default: null) An Array of tasks to be added as children. + :groups - (default: null) An Array of groups to be added as children. + :items - (default: null) An Array of Task and/or TaskGroup instances to be added to this group. + :sync - (default: false) A Boolean for whether or not we should execute certain calls asynchronously (`false`) or synchronously (`true`) +
      +
      +

      Parameters:

      +
        +
      • + (Object) + config + — + Our configuration Object can contain the following fields: +
      • +
          +
        • + (String) + name + — + (default: null) A String for what we would like our name to be, useful for debugging. +
        • +
        • + (Function) + done + — + (default: null) A Function that we would like passed to ::onceDone (aliases are :onceDone, and :next) +
        • +
        • + (Function) + whenDone + — + (default: null) A Function that we would like passed to ::whenDone +
        • +
        • + (Object) + on + — + (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.on. +
        • +
        • + (Object) + once + — + (default: null) An Object of (eventName => listener) that we would like bound via EventEmitter.once. # :method +
        • +
        • + (TaskGroup) + parent + — + (default: null) A parent TaskGroup that we may be attached to. +
        • +
        • + (String) + onError + — + (default: 'exit') A String that is either 'exit' or 'ignore', when 'ignore' errors that occur within items will not halt execution and will not be reported in the completion callbacks err argument (but will still be in the results argument). +
        • +
        • + (Number) + concurrency + — + (default: 1) The Number of items that we would like to execute at the same time. Use 0 for unlimited. 1 accomplishes serial execution, everything else accomplishes parallel execution. +
        • +
        • + (Boolean) + run + — + (default: true) A Boolean for whether or not to the :method (if specified) automatically. +
        • +
        • + (Object) + nestedConfig + — + (default: null) An Object of nested configuration to be applied to all items of this group. +
        • +
        • + (Object) + nestedTaskConfig + — + (default: null) An Object of nested configuration to be applied to all Tasks of this group. +
        • +
        • + (Array) + tasks + — + (default: null) An Array of tasks to be added as children. +
        • +
        • + (Array) + groups + — + (default: null) An Array of groups to be added as children. +
        • +
        • + (Array) + items + — + (default: null) An Array of Task and/or TaskGroup instances to be added to this group. +
        • +
        • + (Boolean) + sync + — + (default: false) A Boolean for whether or not we should execute certain calls asynchronously (false) or synchronously (true) +
        • +
        +
      +
      +
      +
      +

      + ::setNestedConfig(config = {}) + Source +

      +
      + Public: Set Nested Config +
      +
      +
      +
      +
      +

      + ::setNestedTaskConfig(config = {}) + Source +

      +
      + Public: Set Nested Task Config +
      +
      +
      +
      +
      +

      + ::whenDone(handler) + Source +

      +
      + Public: When Done Promise. +Fires the listener, either on the next tick if we are already done, or if not, each time the `done` event fires. + +listener - The Function to attach or execute. +
      +
      +

      Parameters:

      +
        +
      • + (Function) + listener + — + The Function to attach or execute. +
      • +
      +
      +
      +
      +
      + + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/extra_list.html b/node_modules/scandirectory/node_modules/taskgroup/docs/extra_list.html new file mode 100644 index 000000000..a78cda10a --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/extra_list.html @@ -0,0 +1,35 @@ + + + + + TaskGroup API Documentation + + + + + +
      +

      File List

      + + + +
      + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/file_list.html b/node_modules/scandirectory/node_modules/taskgroup/docs/file_list.html new file mode 100644 index 000000000..a17f5155c --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/file_list.html @@ -0,0 +1,27 @@ + + + + + TaskGroup API Documentation + + + + + +
      +

      File List

      + + +
        +
      + +
      + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/index.html b/node_modules/scandirectory/node_modules/taskgroup/docs/index.html new file mode 100644 index 000000000..074668172 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/index.html @@ -0,0 +1,14 @@ + + + + + TaskGroup API Documentation + + + + + + + + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/method_list.html b/node_modules/scandirectory/node_modules/taskgroup/docs/method_list.html new file mode 100644 index 000000000..1b62d061c --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/method_list.html @@ -0,0 +1,322 @@ + + + + + TaskGroup API Documentation + + + + + +
      +

      Method List

      + + + +
      + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/docs/mixin_list.html b/node_modules/scandirectory/node_modules/taskgroup/docs/mixin_list.html new file mode 100644 index 000000000..f4e78ca56 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/docs/mixin_list.html @@ -0,0 +1,27 @@ + + + + + TaskGroup API Documentation + + + + + +
      +

      Mixin List

      + + +
        +
      + +
      + + \ No newline at end of file diff --git a/node_modules/scandirectory/node_modules/taskgroup/package.json b/node_modules/scandirectory/node_modules/taskgroup/package.json new file mode 100755 index 000000000..541f9e001 --- /dev/null +++ b/node_modules/scandirectory/node_modules/taskgroup/package.json @@ -0,0 +1,88 @@ +{ + "title": "TaskGroup", + "name": "taskgroup", + "version": "4.3.1", + "description": "Group together synchronous and asynchronous tasks and execute them with support for concurrency, naming, and nesting.", + "homepage": "https://github.com/bevry/taskgroup", + "license": "MIT", + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "slackin", + "patreon", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist" + ], + "config": { + "patreonUsername": "bevry", + "gratipayUsername": "bevry", + "flattrCode": "344188/balupton-on-Flattr", + "paypalButtonID": "QB8GQPZAH84N6", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "keywords": [ + "flow", + "control", + "async", + "sync", + "tasks", + "batch", + "concurrency" + ], + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011+ Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "crito (https://github.com/crito)", + "Peter Flannery (https://github.com/pflannery)", + "Sean Fridman (http://seanfridman.com)" + ], + "bugs": { + "url": "https://github.com/bevry/taskgroup/issues" + }, + "repository": { + "type": "git", + "url": "http://github.com/bevry/taskgroup.git" + }, + "browsers": true, + "engines": { + "node": ">=0.8" + }, + "dependencies": { + "ambi": "^2.2.0", + "csextends": "^1.0.3" + }, + "devDependencies": { + "coffee-script": "^1.9.1", + "joe": "^1.6.0", + "joe-reporter-console": "^1.2.1", + "assert-helpers": "^1.0.0", + "projectz": "^1.0.0", + "biscotto": "^2.3.1", + "safeps": "^2.2.12" + }, + "directories": { + "lib": "./out/lib" + }, + "scripts": { + "test": "node ./out/test/taskgroup-test.js" + }, + "main": "./out/lib/taskgroup.js", + "cakeConfiguration": { + "COFFEE_SRC_PATH": "src", + "BISCOTTO_SRC_PATH": "src" + } +} diff --git a/node_modules/scandirectory/package.json b/node_modules/scandirectory/package.json new file mode 100644 index 000000000..376c4bf4b --- /dev/null +++ b/node_modules/scandirectory/package.json @@ -0,0 +1,71 @@ +{ + "name": "scandirectory", + "version": "2.5.0", + "description": "Scan a directory recursively with a lot of control and power", + "homepage": "https://github.com/bevry/scandirectory", + "license": { + "type": "MIT" + }, + "badges": { + "travis": true, + "npm": true, + "npmdownloads": true, + "david": true, + "daviddev": true, + "gratipay": "bevry", + "flattr": "344188/balupton-on-Flattr", + "paypal": "QB8GQPZAH84N6", + "bitcoin": "https://coinbase.com/checkouts/9ef59f5479eec1d97d63382c9ebcb93a", + "wishlist": "http://amzn.com/w/2F8TXKSNAFG4V" + }, + "keywords": [ + "path", + "fs", + "scandir", + "scandirectory", + "scantree", + "scanlist", + "recursive", + "tree" + ], + "author": "2011+ Benjamin Lupton (http://balupton.com), 2014+ Bevry Pty Ltd (http://bevry.me)", + "maintainers": [ + "Benjamin Lupton (https://github.com/balupton)" + ], + "contributors": [ + "Benjamin Lupton (https://github.com/balupton)", + "sfrdmn (https://github.com/sfrdmn)" + ], + "bugs": { + "url": "https://github.com/bevry/scandirectory/issues" + }, + "repository": { + "type": "git", + "url": "http://github.com/bevry/scandirectory.git" + }, + "engines": { + "node": ">=0.4" + }, + "dependencies": { + "ignorefs": "^1.0.0", + "safefs": "^3.1.2", + "taskgroup": "^4.0.5" + }, + "devDependencies": { + "coffee-script": "~1.8.0", + "joe": "~1.5.0", + "joe-reporter-console": "~1.2.1", + "chai": "~1.10.0", + "projectz": "~0.3.17" + }, + "directories": { + "lib": "./out/lib" + }, + "scripts": { + "test": "node ./out/test/scandirectory-test.js" + }, + "main": "./out/lib/scandirectory", + "cakeConfiguration": { + "COFFEE_SRC_PATH": "src" + } +} \ No newline at end of file diff --git a/node_modules/semver/CHANGELOG.md b/node_modules/semver/CHANGELOG.md new file mode 100644 index 000000000..f567dd3fe --- /dev/null +++ b/node_modules/semver/CHANGELOG.md @@ -0,0 +1,70 @@ +# changes log + +## 6.2.0 + +* Coerce numbers to strings when passed to semver.coerce() +* Add `rtl` option to coerce from right to left + +## 6.1.3 + +* Handle X-ranges properly in includePrerelease mode + +## 6.1.2 + +* Do not throw when testing invalid version strings + +## 6.1.1 + +* Add options support for semver.coerce() +* Handle undefined version passed to Range.test + +## 6.1.0 + +* Add semver.compareBuild function +* Support `*` in semver.intersects + +## 6.0 + +* Fix `intersects` logic. + + This is technically a bug fix, but since it is also a change to behavior + that may require users updating their code, it is marked as a major + version increment. + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE new file mode 100644 index 000000000..19129e315 --- /dev/null +++ b/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md new file mode 100644 index 000000000..2293a14fd --- /dev/null +++ b/node_modules/semver/README.md @@ -0,0 +1,443 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero element in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions + are equal. Sorts in ascending order if passed to `Array.sort()`. + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version, options)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver string to +semver. It looks for the first digit in a string, and consumes all +remaining characters which satisfy at least a partial semver (e.g., `1`, +`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer +versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All +surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes +`3.4.0`). Only text which lacks digits will fail coercion (`version one` +is not valid). The maximum length for any semver component considered for +coercion is 16 characters; longer components will be ignored +(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any +semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value +components are invalid (`9999999999999999.4.7.4` is likely invalid). + +If the `options.rtl` flag is set, then `coerce` will return the right-most +coercible tuple that does not share an ending index with a longer coercible +tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not +`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of +any other overlapping SemVer tuple. + +### Clean + +* `clean(version)`: Clean a string to be a valid semver if possible + +This will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. + +ex. +* `s.clean(' = v 2.1.5foo')`: `null` +* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean(' = v 2.1.5-foo')`: `null` +* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean('=v2.1.5')`: `'2.1.5'` +* `s.clean(' =v2.1.5')`: `2.1.5` +* `s.clean(' 2.1.5 ')`: `'2.1.5'` +* `s.clean('~1.0.0')`: `null` diff --git a/node_modules/semver/bin/semver.js b/node_modules/semver/bin/semver.js new file mode 100755 index 000000000..666034a75 --- /dev/null +++ b/node_modules/semver/bin/semver.js @@ -0,0 +1,174 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + +var versions = [] + +var range = [] + +var inc = null + +var version = require('../package.json').version + +var loose = false + +var includePrerelease = false + +var coerce = false + +var rtl = false + +var identifier + +var semver = require('../semver') + +var reverse = false + +var options = {} + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '--rtl': + rtl = true + break + case '--ltr': + rtl = false + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } + + versions = versions.map(function (v) { + return coerce ? (semver.coerce(v, options) || { version: v }).version : v + }).filter(function (v) { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (var i = 0, l = range.length; i < l; i++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error('--inc can only be used on a single version with no range') + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? 'rcompare' : 'compare' + versions.sort(function (a, b) { + return semver[compare](a, b, options) + }).map(function (v) { + return semver.clean(v, options) + }).map(function (v) { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach(function (v, i, _) { console.log(v) }) +} + +function help () { + console.log(['SemVer ' + version, + '', + 'A JavaScript implementation of the https://semver.org/ specification', + 'Copyright Isaac Z. Schlueter', + '', + 'Usage: semver [options] [ [...]]', + 'Prints valid versions sorted by SemVer precedence', + '', + 'Options:', + '-r --range ', + ' Print versions that match the specified range.', + '', + '-i --increment []', + ' Increment a version by the specified level. Level can', + ' be one of: major, minor, patch, premajor, preminor,', + " prepatch, or prerelease. Default level is 'patch'.", + ' Only one version may be specified.', + '', + '--preid ', + ' Identifier to be used to prefix premajor, preminor,', + ' prepatch or prerelease version increments.', + '', + '-l --loose', + ' Interpret versions and ranges loosely', + '', + '-p --include-prerelease', + ' Always include prerelease versions in range matching', + '', + '-c --coerce', + ' Coerce a string into SemVer if possible', + ' (does not imply --loose)', + '', + '--rtl', + ' Coerce version strings right to left', + '', + '--ltr', + ' Coerce version strings left to right (default)', + '', + 'Program exits successfully if any valid version satisfies', + 'all supplied ranges, and prints all satisfying versions.', + '', + 'If no satisfying versions are found, then exits failure.', + '', + 'Versions are printed in ascending order, so supplying', + 'multiple versions to the utility will just sort them.' + ].join('\n')) +} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json new file mode 100644 index 000000000..bdd442f50 --- /dev/null +++ b/node_modules/semver/package.json @@ -0,0 +1,28 @@ +{ + "name": "semver", + "version": "6.3.0", + "description": "The semantic version parser used by npm.", + "main": "semver.js", + "scripts": { + "test": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags" + }, + "devDependencies": { + "tap": "^14.3.1" + }, + "license": "ISC", + "repository": "https://github.com/npm/node-semver", + "bin": { + "semver": "./bin/semver.js" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "tap": { + "check-coverage": true + } +} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf new file mode 100644 index 000000000..d4c6ae0d7 --- /dev/null +++ b/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js new file mode 100644 index 000000000..636fa4365 --- /dev/null +++ b/node_modules/semver/semver.js @@ -0,0 +1,1596 @@ +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var t = exports.tokens = {} +var R = 0 + +function tok (n) { + t[n] = R++ +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +tok('NUMERICIDENTIFIER') +src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' +tok('NUMERICIDENTIFIERLOOSE') +src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +tok('NONNUMERICIDENTIFIER') +src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +tok('MAINVERSION') +src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')' + +tok('MAINVERSIONLOOSE') +src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +tok('PRERELEASEIDENTIFIER') +src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' + +tok('PRERELEASEIDENTIFIERLOOSE') +src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +tok('PRERELEASE') +src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' + +tok('PRERELEASELOOSE') +src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +tok('BUILDIDENTIFIER') +src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +tok('BUILD') +src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + + '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +tok('FULL') +tok('FULLPLAIN') +src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + + src[t.PRERELEASE] + '?' + + src[t.BUILD] + '?' + +src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +tok('LOOSEPLAIN') +src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + + src[t.PRERELEASELOOSE] + '?' + + src[t.BUILD] + '?' + +tok('LOOSE') +src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' + +tok('GTLT') +src[t.GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +tok('XRANGEIDENTIFIERLOOSE') +src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +tok('XRANGEIDENTIFIER') +src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' + +tok('XRANGEPLAIN') +src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:' + src[t.PRERELEASE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' + +tok('XRANGEPLAINLOOSE') +src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[t.PRERELEASELOOSE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' + +tok('XRANGE') +src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' +tok('XRANGELOOSE') +src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +tok('COERCE') +src[t.COERCE] = '(^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' +tok('COERCERTL') +re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +tok('LONETILDE') +src[t.LONETILDE] = '(?:~>?)' + +tok('TILDETRIM') +src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' +re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +tok('TILDE') +src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' +tok('TILDELOOSE') +src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +tok('LONECARET') +src[t.LONECARET] = '(?:\\^)' + +tok('CARETTRIM') +src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' +re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +tok('CARET') +src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' +tok('CARETLOOSE') +src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +tok('COMPARATORLOOSE') +src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' +tok('COMPARATOR') +src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +tok('COMPARATORTRIM') +src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + + '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +tok('HYPHENRANGE') +src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAIN] + ')' + + '\\s*$' + +tok('HYPHENRANGELOOSE') +src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +tok('STAR') +src[t.STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +SemVer.prototype.compareBuild = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + var i = 0 + do { + var a = this.build[i] + var b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.compareBuild = compareBuild +function compareBuild (a, b, loose) { + var versionA = new SemVer(a, loose) + var versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(b, a, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + if (this.value === '') { + return true + } + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return ( + isSatisfiable(thisComparators, options) && + range.set.some(function (rangeComparators) { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every(function (thisComparator) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) +} + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +function isSatisfiable (comparators, options) { + var result = true + var remainingComparators = comparators.slice() + var testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every(function (otherComparator) { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + pr + } else if (xm) { + ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr + } else if (xp) { + ret = '>=' + M + '.' + m + '.0' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + pr + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version, options) { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + var match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + var next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } + + if (match === null) { + return null + } + + return parse(match[2] + + '.' + (match[3] || '0') + + '.' + (match[4] || '0'), options) +} diff --git a/node_modules/slug/..gitignore.un~ b/node_modules/slug/..gitignore.un~ new file mode 100644 index 000000000..5903c903b Binary files /dev/null and b/node_modules/slug/..gitignore.un~ differ diff --git a/node_modules/slug/..kateproject.un~ b/node_modules/slug/..kateproject.un~ new file mode 100644 index 000000000..e257c56df Binary files /dev/null and b/node_modules/slug/..kateproject.un~ differ diff --git a/node_modules/slug/..travis.yml.un~ b/node_modules/slug/..travis.yml.un~ new file mode 100644 index 000000000..d9df453e1 Binary files /dev/null and b/node_modules/slug/..travis.yml.un~ differ diff --git a/node_modules/slug/.LICENSE.un~ b/node_modules/slug/.LICENSE.un~ new file mode 100644 index 000000000..6de03288d Binary files /dev/null and b/node_modules/slug/.LICENSE.un~ differ diff --git a/node_modules/slug/.kateproject b/node_modules/slug/.kateproject new file mode 100644 index 000000000..15fe6bb6c --- /dev/null +++ b/node_modules/slug/.kateproject @@ -0,0 +1,3 @@ +{ + "name": "slug" +, "files": [ { "git": 1 } ] } diff --git a/node_modules/slug/.kateproject.d/notes.txt b/node_modules/slug/.kateproject.d/notes.txt new file mode 100644 index 000000000..e69de29bb diff --git a/node_modules/slug/.npmignore b/node_modules/slug/.npmignore new file mode 100644 index 000000000..b2784f0e7 --- /dev/null +++ b/node_modules/slug/.npmignore @@ -0,0 +1,2 @@ +Cakefile +src/ diff --git a/node_modules/slug/.package.json.un~ b/node_modules/slug/.package.json.un~ new file mode 100644 index 000000000..3dca228f4 Binary files /dev/null and b/node_modules/slug/.package.json.un~ differ diff --git a/node_modules/slug/.travis.yml b/node_modules/slug/.travis.yml new file mode 100644 index 000000000..ea8987f47 --- /dev/null +++ b/node_modules/slug/.travis.yml @@ -0,0 +1,6 @@ +before_script: "npm install --dev" +script: "npm test" +language: node_js +node_js: + - 0.8 + - 0.10 diff --git a/node_modules/slug/LICENSE b/node_modules/slug/LICENSE new file mode 100644 index 000000000..cb711c46a --- /dev/null +++ b/node_modules/slug/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2014 ▟ ▖▟ ▖(dodo) + +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. diff --git a/node_modules/slug/README.md b/node_modules/slug/README.md new file mode 100644 index 000000000..f021d469a --- /dev/null +++ b/node_modules/slug/README.md @@ -0,0 +1,51 @@ +# [slug](https://github.com/dodo/node-slug) + +slugifies every string, even when it contains unicode! + +Make strings url-safe. + +- Comprehensive tests +- No dependencies (except the unicode table) +- Not in coffee-script (except the tests lol) +- Coerces foreign symbols to their english equivalent +- Works in browser (window.slug) and AMD/CommonJS-flavoured module loaders (except the unicode symbols unless you use browserify but who wants to download a ~2mb js file, right?) + +``` +npm install slug +``` + +## example + +```bash +master//node-slug » node +> slug = require ('./slug') +> slug('i ♥ unicode') + 'i-love-unicode' +> slug('i ♥ unicode', '_') # If you prefer something else then `-` as seperator + 'i_love_unicode' +> slug.charmap['♥'] = 'freaking love' # change default charmap or use option {charmap:{…}} as 2. argument +> slug('I ♥ UNICODE').toLowerCase() # If you prefer lower case + 'i-freaking-love-unicode' +> slug('unicode ♥ is ☢') # yes! + 'unicode-love-is-radioactive' +``` + +## options + +```javascript +// options is either object or replacement (sets options.replacement) +slug('string', [{options} || 'replacement']); +``` + +```javascript +slug.defaults = { + replacement: '-', // replace spaces with replacement + symbols: true, // replace unicode symbols or not + charmap: slug.charmap, // replace special characters +}; +``` + +[![Build Status](https://secure.travis-ci.org/dodo/node-slug.png)](http://travis-ci.org/dodo/node-slug) + +[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/dodo/node-slug/trend.png)](https://bitdeli.com/free "Bitdeli Badge") + diff --git a/node_modules/slug/package.json b/node_modules/slug/package.json new file mode 100644 index 000000000..b6b98efac --- /dev/null +++ b/node_modules/slug/package.json @@ -0,0 +1,21 @@ +{ "name": "slug" +, "description": "slugifies even utf-8 chars!" +, "version": "0.4.2" +, "homepage": "https://github.com/dodo/node-slug" +, "author": "dodo (https://github.com/dodo)" +, "repository": {"type": "git", "url": "git://github.com/dodo/node-slug.git"} +, "main": "slug.js" +, "engines": {"node": ">= 0.4.x"} +, "keywords": ["slugify", "slug", "string", "utf8", "utf-8", "unicode", "url"] +, "scripts": { + "test": "./node_modules/.bin/mocha ./test/*.test.* --require should --reporter spec --colors --compilers coffee:coffee-script/register"} +, "dependencies": { + "unicode": ">= 0.3.1"} +, "devDependencies": { + "mocha": "~1.17.1", + "should": "~3.1.2", + "coffee-script": "~1.7.1"} +, "licenses" : [ + { "type": "MIT" , + "url": "http://github.com/dodo/node-slug/raw/master/LICENSE"} ] +} diff --git a/node_modules/slug/slug.js b/node_modules/slug/slug.js new file mode 100644 index 000000000..499bbfc12 --- /dev/null +++ b/node_modules/slug/slug.js @@ -0,0 +1,130 @@ +(function (root) { +// lazy require symbols table +var _symbols, removelist; +function symbols(code) { + if (_symbols) return _symbols[code]; + _symbols = require('unicode/category/So'); + removelist = ['sign','cross','of','symbol','staff','hand','black','white'] + .map(function (word) {return new RegExp(word, 'gi')}); + return _symbols[code]; +} + +function slug(string, opts) { + opts = opts || {}; + string = string.toString(); + if ('string' === typeof opts) + opts = {replacement:opts}; + opts.replacement = opts.replacement || slug.defaults.replacement; + opts.charmap = opts.charmap || slug.defaults.charmap; + if ('undefined' === typeof opts.symbols) + opts.symbols = slug.defaults.symbols; + var code, unicode, result = ""; + for (var char, i = 0, len = string.length; i < len; i++) { char = string[i]; + if (opts.charmap[char]) { + char = opts.charmap[char]; + code = char.charCodeAt(0); + } else { + code = string.charCodeAt(i); + } + if (opts.symbols && (unicode = symbols(code))) { + char = unicode.name.toLowerCase(); + for(var j = 0, rl = removelist.length; j < rl; j++) { + char = char.replace(removelist[j], ''); + } + char = char.replace(/^\s+|\s+$/g, ''); + } + char = char.replace(/[^\w\s$\*\_\+~\.\(\)\'\"\!\-:@]/g, ''); // allowed + result += char; + } + result = result.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + result = result.replace(/[-\s]+/g, opts.replacement); // convert spaces + return result.replace(opts.replacement+"$",''); // remove trailing separator +}; + +slug.defaults = { + replacement: '-', + symbols: true, +}; + + +// https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/media/js/urlify.js +slug.charmap = slug.defaults.charmap = { + // latin + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', + 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', + 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', + 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', + 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', + 'ý': 'y', 'þ': 'th', 'ÿ': 'y', 'ẞ': 'SS', + // greek + 'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8', + 'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p', + 'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w', + 'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s', + 'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i', + 'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8', + 'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P', + 'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W', + 'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I', + 'Ϋ':'Y', + // turkish + 'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', + 'ğ':'g', 'Ğ':'G', + // russian + 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh', + 'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', + 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c', + 'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'u', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu', + 'я':'ya', + 'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh', + 'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', + 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C', + 'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sh', 'Ъ':'U', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu', + 'Я':'Ya', + // ukranian + 'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g', + // czech + 'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u', + 'ž':'z', 'Č':'C', 'Ď':'D', 'Ě':'E', 'Ň': 'N', 'Ř':'R', 'Š':'S', 'Ť':'T', + 'Ů':'U', 'Ž':'Z', + // polish + 'ą':'a', 'ć':'c', 'ę':'e', 'ł':'l', 'ń':'n', 'ś':'s', 'ź':'z', + 'ż':'z', 'Ą':'A', 'Ć':'C', 'Ę':'e', 'Ł':'L', 'Ń':'N', 'Ś':'S', + 'Ź':'Z', 'Ż':'Z', + // latvian + 'ā':'a', 'ē':'e', 'ģ':'g', 'ī':'i', 'ķ':'k', 'ļ':'l', 'ņ':'n', + 'ū':'u', 'Ā':'A', 'Ē':'E', 'Ģ':'G', 'Ī':'i', + 'Ķ':'k', 'Ļ':'L', 'Ņ':'N', 'Ū':'u', + // currency + '€': 'euro', '₢': 'cruzeiro', '₣': 'french franc', '£': 'pound', + '₤': 'lira', '₥': 'mill', '₦': 'naira', '₧': 'peseta', '₨': 'rupee', + '₩': 'won', '₪': 'new shequel', '₫': 'dong', '₭': 'kip', '₮': 'tugrik', + '₯': 'drachma', '₰': 'penny', '₱': 'peso', '₲': 'guarani', '₳': 'austral', + '₴': 'hryvnia', '₵': 'cedi', '¢': 'cent', '¥': 'yen', '元': 'yuan', + '円': 'yen', '﷼': 'rial', '₠': 'ecu', '¤': 'currency', '฿': 'baht', + "$": 'dollar', '₹': 'indian rupee', + // symbols + '©':'(c)', 'œ': 'oe', 'Œ': 'OE', '∑': 'sum', '®': '(r)', '†': '+', + '“': '"', '”': '"', '‘': "'", '’': "'", '∂': 'd', 'ƒ': 'f', '™': 'tm', + '℠': 'sm', '…': '...', '˚': 'o', 'º': 'o', 'ª': 'a', '•': '*', + '∆': 'delta', '∞': 'infinity', '♥': 'love', '&': 'and', '|': 'or', + '<': 'less', '>': 'greater', +}; + +// Be compatible with different module systems + +if (typeof define !== 'undefined' && define.amd) { // AMD + define([], function () {return slug}); +} else if (typeof module !== 'undefined' && module.exports) { // CommonJS + symbols(); // preload symbols table + module.exports = slug; +} else { // Script tag + slug.defaults.symbols = false; // dont load symbols table in the browser + root.slug = slug; +} + +}(this)); \ No newline at end of file diff --git a/node_modules/slug/test.js b/node_modules/slug/test.js new file mode 100644 index 000000000..dbef81a8b --- /dev/null +++ b/node_modules/slug/test.js @@ -0,0 +1 @@ +console.log(require('./slug')('😹')); diff --git a/node_modules/slug/test/slug.test.coffee b/node_modules/slug/test/slug.test.coffee new file mode 100644 index 000000000..53b9d8933 --- /dev/null +++ b/node_modules/slug/test/slug.test.coffee @@ -0,0 +1,159 @@ +slug = require '../slug' + +describe 'slug', -> + it 'should convert input to string', -> + [slug 1].should.eql ['1'] + [slug 567890].should.eql ['567890'] + + it 'should replace whitespaces with replacement', -> + [slug 'foo bar baz'].should.eql ['foo-bar-baz'] + [slug 'foo bar baz', '_'].should.eql ['foo_bar_baz'] + + it 'should remove trailing space if any', -> + [slug ' foo bar baz '].should.eql ['foo-bar-baz'] + + it 'should remove not allowed chars', -> + [slug 'foo, bar baz'].should.eql ['foo-bar-baz'] + [slug 'foo- bar baz'].should.eql ['foo-bar-baz'] + [slug 'foo] bar baz'].should.eql ['foo-bar-baz'] + + it 'should leave allowed chars', -> + allowed = ['*', '+', '~', '.', '(', ')', "'", '"', '!', ':', '@'] + for a in allowed + [slug "foo #{a} bar baz"].should.eql ["foo-#{a}-bar-baz"] + + it 'should replace latin chars', -> + char_map = { + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', + 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', + 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', + 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', + 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', + 'ý': 'y', 'þ': 'th', 'ÿ': 'y', 'ẞ': 'SS' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace greek chars', -> + char_map = { + 'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8', + 'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p', + 'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w', + 'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s', + 'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i', + 'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8', + 'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P', + 'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W', + 'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I', + 'Ϋ':'Y' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace turkish chars', -> + char_map = { + 'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U', + 'ö':'o', 'Ö':'O', 'ğ':'g', 'Ğ':'G' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace cyrillic chars', -> + char_map = { + 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh', + 'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', + 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c', + 'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'u', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu', + 'я':'ya', + 'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh', + 'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O', + 'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C', + 'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sh', 'Ъ':'U', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu', + 'Я':'Ya', 'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g' + } + for char, replacement of char_map + expected = "foo-#{replacement}-bar-baz" + expected = "foo-bar-baz" if not replacement + [slug "foo #{char} bar baz"].should.eql [expected] + + it 'should replace czech chars', -> + char_map = { + 'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u', + 'ž':'z', 'Č':'C', 'Ď':'D', 'Ě':'E', 'Ň': 'N', 'Ř':'R', 'Š':'S', 'Ť':'T', + 'Ů':'U', 'Ž':'Z' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace polish chars', -> + char_map = { + 'ą':'a', 'ć':'c', 'ę':'e', 'ł':'l', 'ń':'n', 'ó':'o', 'ś':'s', 'ź':'z', + 'ż':'z', 'Ą':'A', 'Ć':'C', 'Ę':'e', 'Ł':'L', 'Ń':'N', 'Ś':'S', + 'Ź':'Z', 'Ż':'Z' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace latvian chars', -> + char_map = { + 'ā':'a', 'č':'c', 'ē':'e', 'ģ':'g', 'ī':'i', 'ķ':'k', 'ļ':'l', 'ņ':'n', + 'š':'s', 'ū':'u', 'ž':'z', 'Ā':'A', 'Č':'C', 'Ē':'E', 'Ģ':'G', 'Ī':'i', + 'Ķ':'k', 'Ļ':'L', 'Ņ':'N', 'Š':'S', 'Ū':'u', 'Ž':'Z' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace currencies', -> + char_map = { + '€': 'euro', '₢': 'cruzeiro', '₣': 'french franc', '£': 'pound', + '₤': 'lira', '₥': 'mill', '₦': 'naira', '₧': 'peseta', '₨': 'rupee', '₹': 'indian rupee', + '₩': 'won', '₪': 'new shequel', '₫': 'dong', '₭': 'kip', '₮': 'tugrik', + '₯': 'drachma', '₰': 'penny', '₱': 'peso', '₲': 'guarani', '₳': 'austral', + '₴': 'hryvnia', '₵': 'cedi', '¢': 'cent', '¥': 'yen', '元': 'yuan', + '円': 'yen', '﷼': 'rial', '₠': 'ecu', '¤': 'currency', '฿': 'baht', + "$": 'dollar' + } + for char, replacement of char_map + replacement = replacement.replace ' ', '-' + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace symbols', -> + char_map = { + '©':'(c)', 'œ': 'oe', 'Œ': 'OE', '∑': 'sum', '®': '(r)', '†': '+', + '“': '"', '”': '"', '‘': "'", '’': "'", '∂': 'd', 'ƒ': 'f', '™': 'tm', + '℠': 'sm', '…': '...', '˚': 'o', 'º': 'o', 'ª': 'a', '•': '*', + '∆': 'delta', '∞': 'infinity', '♥': 'love', '&': 'and', '|': 'or', + '<': 'less', '>': 'greater' + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace unicode', -> + char_map = { + '☢':"radioactive",'☠':"skull-and-bones",'☤':"caduceus", + '☣':"biohazard",'☭':"hammer-and-sickle", '☯':"yin-yang",'☮':"peace", + '☏':"telephone",'☔':"umbrella-with-rain-drops",'☎':"telephone", + '☀':"sun-with-rays",'★':"star",'☂':"umbrella",'☃':"snowman", + '✈':"airplane",'✉':"envelope",'✊':"raised-fist" + } + for char, replacement of char_map + [slug "foo #{char} bar baz"].should.eql ["foo-#{replacement}-bar-baz"] + + it 'should replace no unicode when disabled', -> + char_map = '😹☢☠☤☣☭☯☮☏☔☎☀★☂☃✈✉✊'.split '' + for char in char_map + [slug "foo #{char} bar baz", symbols:no].should.eql ["foo-bar-baz"] + + it 'should allow forcing lowercase slugs', -> + [slug('FOO Bar baZ').toLowerCase()].should.eql ['foo-bar-baz'] + [slug('FOO Bar baZ', replacement:'_').toLowerCase()].should.eql ['foo_bar_baz'] + + it 'should allow altering the charmap', -> + charmap = { + 'f': 'ph', 'o':'0', 'b':'8', 'a':'4', 'r':'2', 'z':'5' + } + [slug("foo bar baz", {charmap}).toUpperCase()].should.eql ['PH00-842-845'] diff --git a/node_modules/sntp/.npmignore b/node_modules/sntp/.npmignore new file mode 100644 index 000000000..77ba16cb0 --- /dev/null +++ b/node_modules/sntp/.npmignore @@ -0,0 +1,18 @@ +.idea +*.iml +npm-debug.log +dump.rdb +node_modules +results.tap +results.xml +npm-shrinkwrap.json +config.json +.DS_Store +*/.DS_Store +*/*/.DS_Store +._* +*/._* +*/*/._* +coverage.* +lib-cov + diff --git a/node_modules/sntp/.travis.yml b/node_modules/sntp/.travis.yml new file mode 100755 index 000000000..047f7e3d5 --- /dev/null +++ b/node_modules/sntp/.travis.yml @@ -0,0 +1,5 @@ +language: node_js + +node_js: + - 0.10 + diff --git a/node_modules/sntp/LICENSE b/node_modules/sntp/LICENSE new file mode 100755 index 000000000..b0d877439 --- /dev/null +++ b/node_modules/sntp/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012-2014, Eran Hammer and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + * The names of any 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 HOLDERS AND 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. + + * * * + +The complete list of contributors can be found at: https://github.com/hueniverse/sntp/graphs/contributors diff --git a/node_modules/sntp/Makefile b/node_modules/sntp/Makefile new file mode 100755 index 000000000..417fd9370 --- /dev/null +++ b/node_modules/sntp/Makefile @@ -0,0 +1,9 @@ +test: + @node node_modules/lab/bin/lab +test-cov: + @node node_modules/lab/bin/lab -t 100 -m 3000 +test-cov-html: + @node node_modules/lab/bin/lab -r html -o coverage.html + +.PHONY: test test-cov test-cov-html + diff --git a/node_modules/sntp/README.md b/node_modules/sntp/README.md new file mode 100755 index 000000000..98a6e025d --- /dev/null +++ b/node_modules/sntp/README.md @@ -0,0 +1,68 @@ +# sntp + +An SNTP v4 client (RFC4330) for node. Simpy connects to the NTP or SNTP server requested and returns the server time +along with the roundtrip duration and clock offset. To adjust the local time to the NTP time, add the returned `t` offset +to the local time. + +[![Build Status](https://secure.travis-ci.org/hueniverse/sntp.png)](http://travis-ci.org/hueniverse/sntp) + +# Usage + +```javascript +var Sntp = require('sntp'); + +// All options are optional + +var options = { + host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org + port: 123, // Defaults to 123 (NTP) + resolveReference: true, // Default to false (not resolving) + timeout: 1000 // Defaults to zero (no timeout) +}; + +// Request server time + +Sntp.time(options, function (err, time) { + + if (err) { + console.log('Failed: ' + err.message); + process.exit(1); + } + + console.log('Local clock is off by: ' + time.t + ' milliseconds'); + process.exit(0); +}); +``` + +If an application needs to maintain continuous time synchronization, the module provides a stateful method for +querying the current offset only when the last one is too old (defaults to daily). + +```javascript +// Request offset once + +Sntp.offset(function (err, offset) { + + console.log(offset); // New (served fresh) + + // Request offset again + + Sntp.offset(function (err, offset) { + + console.log(offset); // Identical (served from cache) + }); +}); +``` + +To set a background offset refresh, start the interval and use the provided now() method. If for any reason the +client fails to obtain an up-to-date offset, the current system clock is used. + +```javascript +var before = Sntp.now(); // System time without offset + +Sntp.start(function () { + + var now = Sntp.now(); // With offset + Sntp.stop(); +}); +``` + diff --git a/node_modules/sntp/examples/offset.js b/node_modules/sntp/examples/offset.js new file mode 100755 index 000000000..0303f6dcf --- /dev/null +++ b/node_modules/sntp/examples/offset.js @@ -0,0 +1,16 @@ +var Sntp = require('../lib'); + +// Request offset once + +Sntp.offset(function (err, offset) { + + console.log(offset); // New (served fresh) + + // Request offset again + + Sntp.offset(function (err, offset) { + + console.log(offset); // Identical (served from cache) + }); +}); + diff --git a/node_modules/sntp/examples/time.js b/node_modules/sntp/examples/time.js new file mode 100755 index 000000000..bd70d0e6a --- /dev/null +++ b/node_modules/sntp/examples/time.js @@ -0,0 +1,25 @@ +var Sntp = require('../lib'); + +// All options are optional + +var options = { + host: 'nist1-sj.ustiming.org', // Defaults to pool.ntp.org + port: 123, // Defaults to 123 (NTP) + resolveReference: true, // Default to false (not resolving) + timeout: 1000 // Defaults to zero (no timeout) +}; + +// Request server time + +Sntp.time(options, function (err, time) { + + if (err) { + console.log('Failed: ' + err.message); + process.exit(1); + } + + console.log(time); + console.log('Local clock is off by: ' + time.t + ' milliseconds'); + process.exit(0); +}); + diff --git a/node_modules/sntp/index.js b/node_modules/sntp/index.js new file mode 100755 index 000000000..4cc88b358 --- /dev/null +++ b/node_modules/sntp/index.js @@ -0,0 +1 @@ +module.exports = require('./lib'); \ No newline at end of file diff --git a/node_modules/sntp/lib/index.js b/node_modules/sntp/lib/index.js new file mode 100755 index 000000000..e91718b4f --- /dev/null +++ b/node_modules/sntp/lib/index.js @@ -0,0 +1,412 @@ +// Load modules + +var Dgram = require('dgram'); +var Dns = require('dns'); +var Hoek = require('hoek'); + + +// Declare internals + +var internals = {}; + + +exports.time = function (options, callback) { + + if (arguments.length !== 2) { + callback = arguments[0]; + options = {}; + } + + var settings = Hoek.clone(options); + settings.host = settings.host || 'pool.ntp.org'; + settings.port = settings.port || 123; + settings.resolveReference = settings.resolveReference || false; + + // Declare variables used by callback + + var timeoutId = 0; + var sent = 0; + + // Ensure callback is only called once + + var finish = function (err, result) { + + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = 0; + } + + socket.removeAllListeners(); + socket.once('error', internals.ignore); + socket.close(); + return callback(err, result); + }; + + finish = Hoek.once(finish); + + // Create UDP socket + + var socket = Dgram.createSocket('udp4'); + + socket.once('error', function (err) { + + return finish(err); + }); + + // Listen to incoming messages + + socket.on('message', function (buffer, rinfo) { + + var received = Date.now(); + + var message = new internals.NtpMessage(buffer); + if (!message.isValid) { + return finish(new Error('Invalid server response'), message); + } + + if (message.originateTimestamp !== sent) { + return finish(new Error('Wrong originate timestamp'), message); + } + + // Timestamp Name ID When Generated + // ------------------------------------------------------------ + // Originate Timestamp T1 time request sent by client + // Receive Timestamp T2 time request received by server + // Transmit Timestamp T3 time reply sent by server + // Destination Timestamp T4 time reply received by client + // + // The roundtrip delay d and system clock offset t are defined as: + // + // d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2 + + var T1 = message.originateTimestamp; + var T2 = message.receiveTimestamp; + var T3 = message.transmitTimestamp; + var T4 = received; + + message.d = (T4 - T1) - (T3 - T2); + message.t = ((T2 - T1) + (T3 - T4)) / 2; + message.receivedLocally = received; + + if (!settings.resolveReference || + message.stratum !== 'secondary') { + + return finish(null, message); + } + + // Resolve reference IP address + + Dns.reverse(message.referenceId, function (err, domains) { + + if (/* $lab:coverage:off$ */ !err /* $lab:coverage:on$ */) { + message.referenceHost = domains[0]; + } + + return finish(null, message); + }); + }); + + // Set timeout + + if (settings.timeout) { + timeoutId = setTimeout(function () { + + timeoutId = 0; + return finish(new Error('Timeout')); + }, settings.timeout); + } + + // Construct NTP message + + var message = new Buffer(48); + for (var i = 0; i < 48; i++) { // Zero message + message[i] = 0; + } + + message[0] = (0 << 6) + (4 << 3) + (3 << 0) // Set version number to 4 and Mode to 3 (client) + sent = Date.now(); + internals.fromMsecs(sent, message, 40); // Set transmit timestamp (returns as originate) + + // Send NTP request + + socket.send(message, 0, message.length, settings.port, settings.host, function (err, bytes) { + + if (err || + bytes !== 48) { + + return finish(err || new Error('Could not send entire message')); + } + }); +}; + + +internals.NtpMessage = function (buffer) { + + this.isValid = false; + + // Validate + + if (buffer.length !== 48) { + return; + } + + // Leap indicator + + var li = (buffer[0] >> 6); + switch (li) { + case 0: this.leapIndicator = 'no-warning'; break; + case 1: this.leapIndicator = 'last-minute-61'; break; + case 2: this.leapIndicator = 'last-minute-59'; break; + case 3: this.leapIndicator = 'alarm'; break; + } + + // Version + + var vn = ((buffer[0] & 0x38) >> 3); + this.version = vn; + + // Mode + + var mode = (buffer[0] & 0x7); + switch (mode) { + case 1: this.mode = 'symmetric-active'; break; + case 2: this.mode = 'symmetric-passive'; break; + case 3: this.mode = 'client'; break; + case 4: this.mode = 'server'; break; + case 5: this.mode = 'broadcast'; break; + case 0: + case 6: + case 7: this.mode = 'reserved'; break; + } + + // Stratum + + var stratum = buffer[1]; + if (stratum === 0) { + this.stratum = 'death'; + } + else if (stratum === 1) { + this.stratum = 'primary'; + } + else if (stratum <= 15) { + this.stratum = 'secondary'; + } + else { + this.stratum = 'reserved'; + } + + // Poll interval (msec) + + this.pollInterval = Math.round(Math.pow(2, buffer[2])) * 1000; + + // Precision (msecs) + + this.precision = Math.pow(2, buffer[3]) * 1000; + + // Root delay (msecs) + + var rootDelay = 256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7]; + this.rootDelay = 1000 * (rootDelay / 0x10000); + + // Root dispersion (msecs) + + this.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000; + + // Reference identifier + + this.referenceId = ''; + switch (this.stratum) { + case 'death': + case 'primary': + this.referenceId = String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]); + break; + case 'secondary': + this.referenceId = '' + buffer[12] + '.' + buffer[13] + '.' + buffer[14] + '.' + buffer[15]; + break; + } + + // Reference timestamp + + this.referenceTimestamp = internals.toMsecs(buffer, 16); + + // Originate timestamp + + this.originateTimestamp = internals.toMsecs(buffer, 24); + + // Receive timestamp + + this.receiveTimestamp = internals.toMsecs(buffer, 32); + + // Transmit timestamp + + this.transmitTimestamp = internals.toMsecs(buffer, 40); + + // Validate + + if (this.version === 4 && + this.stratum !== 'reserved' && + this.mode === 'server' && + this.originateTimestamp && + this.receiveTimestamp && + this.transmitTimestamp) { + + this.isValid = true; + } + + return this; +}; + + +internals.toMsecs = function (buffer, offset) { + + var seconds = 0; + var fraction = 0; + + for (var i = 0; i < 4; ++i) { + seconds = (seconds * 256) + buffer[offset + i]; + } + + for (i = 4; i < 8; ++i) { + fraction = (fraction * 256) + buffer[offset + i]; + } + + return ((seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000); +}; + + +internals.fromMsecs = function (ts, buffer, offset) { + + var seconds = Math.floor(ts / 1000) + 2208988800; + var fraction = Math.round((ts % 1000) / 1000 * Math.pow(2, 32)); + + buffer[offset + 0] = (seconds & 0xFF000000) >> 24; + buffer[offset + 1] = (seconds & 0x00FF0000) >> 16; + buffer[offset + 2] = (seconds & 0x0000FF00) >> 8; + buffer[offset + 3] = (seconds & 0x000000FF); + + buffer[offset + 4] = (fraction & 0xFF000000) >> 24; + buffer[offset + 5] = (fraction & 0x00FF0000) >> 16; + buffer[offset + 6] = (fraction & 0x0000FF00) >> 8; + buffer[offset + 7] = (fraction & 0x000000FF); +}; + + +// Offset singleton + +internals.last = { + offset: 0, + expires: 0, + host: '', + port: 0 +}; + + +exports.offset = function (options, callback) { + + if (arguments.length !== 2) { + callback = arguments[0]; + options = {}; + } + + var now = Date.now(); + var clockSyncRefresh = options.clockSyncRefresh || 24 * 60 * 60 * 1000; // Daily + + if (internals.last.offset && + internals.last.host === options.host && + internals.last.port === options.port && + now < internals.last.expires) { + + process.nextTick(function () { + + callback(null, internals.last.offset); + }); + + return; + } + + exports.time(options, function (err, time) { + + if (err) { + return callback(err, 0); + } + + internals.last = { + offset: Math.round(time.t), + expires: now + clockSyncRefresh, + host: options.host, + port: options.port + }; + + return callback(null, internals.last.offset); + }); +}; + + +// Now singleton + +internals.now = { + intervalId: 0 +}; + + +exports.start = function (options, callback) { + + if (arguments.length !== 2) { + callback = arguments[0]; + options = {}; + } + + if (internals.now.intervalId) { + process.nextTick(function () { + + callback(); + }); + + return; + } + + exports.offset(options, function (err, offset) { + + internals.now.intervalId = setInterval(function () { + + exports.offset(options, function () { }); + }, options.clockSyncRefresh || 24 * 60 * 60 * 1000); // Daily + + return callback(); + }); +}; + + +exports.stop = function () { + + if (!internals.now.intervalId) { + return; + } + + clearInterval(internals.now.intervalId); + internals.now.intervalId = 0; +}; + + +exports.isLive = function () { + + return !!internals.now.intervalId; +}; + + +exports.now = function () { + + var now = Date.now(); + if (!exports.isLive() || + now >= internals.last.expires) { + + return now; + } + + return now + internals.last.offset; +}; + + +internals.ignore = function () { + +}; diff --git a/node_modules/sntp/package.json b/node_modules/sntp/package.json new file mode 100755 index 000000000..0d57e3f5c --- /dev/null +++ b/node_modules/sntp/package.json @@ -0,0 +1,32 @@ +{ + "name": "sntp", + "description": "SNTP Client", + "version": "1.0.9", + "author": "Eran Hammer (http://hueniverse.com)", + "contributors": [], + "repository": "git://github.com/hueniverse/sntp", + "main": "index", + "keywords": [ + "sntp", + "ntp", + "time" + ], + "engines": { + "node": ">=0.8.0" + }, + "dependencies": { + "hoek": "2.x.x" + }, + "devDependencies": { + "lab": "4.x.x" + }, + "scripts": { + "test": "make test-cov" + }, + "licenses": [ + { + "type": "BSD", + "url": "http://github.com/hueniverse/sntp/raw/master/LICENSE" + } + ] +} diff --git a/node_modules/sntp/test/index.js b/node_modules/sntp/test/index.js new file mode 100755 index 000000000..f1d1cdabf --- /dev/null +++ b/node_modules/sntp/test/index.js @@ -0,0 +1,435 @@ +// Load modules + +var Dns = require('dns'); +var Dgram = require('dgram'); +var Lab = require('lab'); +var Sntp = require('../lib'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var before = lab.before; +var after = lab.after; +var describe = lab.experiment; +var it = lab.test; +var expect = Lab.expect; + + +describe('SNTP', function () { + + describe('#time', function () { + + it('returns consistent result over multiple tries', function (done) { + + Sntp.time(function (err, time) { + + expect(err).to.not.exist; + expect(time).to.exist; + var t1 = time.t; + + Sntp.time(function (err, time) { + + expect(err).to.not.exist; + expect(time).to.exist; + var t2 = time.t; + expect(Math.abs(t1 - t2)).is.below(200); + done(); + }); + }); + }); + + it('resolves reference IP', function (done) { + + Sntp.time({ host: 'ntp.exnet.com', resolveReference: true }, function (err, time) { + + expect(err).to.not.exist; + expect(time).to.exist; + expect(time.referenceHost).to.exist; + done(); + }); + }); + + it('times out on no response', function (done) { + + Sntp.time({ port: 124, timeout: 100 }, function (err, time) { + + expect(err).to.exist; + expect(time).to.not.exist; + expect(err.message).to.equal('Timeout'); + done(); + }); + }); + + it('errors on error event', { parallel: false }, function (done) { + + var orig = Dgram.createSocket; + Dgram.createSocket = function (type) { + + Dgram.createSocket = orig; + var socket = Dgram.createSocket(type); + setImmediate(function () { socket.emit('error', new Error('Fake')) }); + return socket; + }; + + Sntp.time(function (err, time) { + + expect(err).to.exist; + expect(time).to.not.exist; + expect(err.message).to.equal('Fake'); + done(); + }); + }); + + it('errors on incorrect sent size', { parallel: false }, function (done) { + + var orig = Dgram.Socket.prototype.send; + Dgram.Socket.prototype.send = function (buf, offset, length, port, address, callback) { + + Dgram.Socket.prototype.send = orig; + return callback(null, 40); + }; + + Sntp.time(function (err, time) { + + expect(err).to.exist; + expect(time).to.not.exist; + expect(err.message).to.equal('Could not send entire message'); + done(); + }); + }); + + it('times out on invalid host', function (done) { + + Sntp.time({ host: 'error', timeout: 10000 }, function (err, time) { + + expect(err).to.exist; + expect(time).to.not.exist; + expect(err.message).to.contain('getaddrinfo'); + done(); + }); + }); + + it('fails on bad response buffer size', function (done) { + + var server = Dgram.createSocket('udp4'); + server.on('message', function (message, remote) { + var message = new Buffer(10); + server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { + + server.close(); + }); + }); + + server.bind(49123); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(err.message).to.equal('Invalid server response'); + done(); + }); + }); + + var messup = function (bytes) { + + var server = Dgram.createSocket('udp4'); + server.on('message', function (message, remote) { + + var message = new Buffer([ + 0x24, 0x01, 0x00, 0xe3, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x41, 0x43, 0x54, 0x53, + 0xd4, 0xa8, 0x2d, 0xc7, + 0x1c, 0x5d, 0x49, 0x1b, + 0xd4, 0xa8, 0x2d, 0xe6, + 0x67, 0xef, 0x9d, 0xb2, + 0xd4, 0xa8, 0x2d, 0xe6, + 0x71, 0xed, 0xb5, 0xfb, + 0xd4, 0xa8, 0x2d, 0xe6, + 0x71, 0xee, 0x6c, 0xc5 + ]); + + for (var i = 0, il = bytes.length; i < il; ++i) { + message[bytes[i][0]] = bytes[i][1]; + } + + server.send(message, 0, message.length, remote.port, remote.address, function (err, bytes) { + + server.close(); + }); + }); + + server.bind(49123); + }; + + it('fails on bad version', function (done) { + + messup([[0, (0 << 6) + (3 << 3) + (4 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(time.version).to.equal(3); + expect(err.message).to.equal('Invalid server response'); + done(); + }); + }); + + it('fails on bad originateTimestamp', function (done) { + + messup([[24, 0x83], [25, 0xaa], [26, 0x7e], [27, 0x80], [28, 0], [29, 0], [30, 0], [31, 0]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(err.message).to.equal('Invalid server response'); + done(); + }); + }); + + it('fails on bad receiveTimestamp', function (done) { + + messup([[32, 0x83], [33, 0xaa], [34, 0x7e], [35, 0x80], [36, 0], [37, 0], [38, 0], [39, 0]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(err.message).to.equal('Invalid server response'); + done(); + }); + }); + + it('fails on bad originate timestamp and alarm li', function (done) { + + messup([[0, (3 << 6) + (4 << 3) + (4 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(err.message).to.equal('Wrong originate timestamp'); + expect(time.leapIndicator).to.equal('alarm'); + done(); + }); + }); + + it('returns time with death stratum and last61 li', function (done) { + + messup([[0, (1 << 6) + (4 << 3) + (4 << 0)], [1, 0]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(time.stratum).to.equal('death'); + expect(time.leapIndicator).to.equal('last-minute-61'); + done(); + }); + }); + + it('returns time with reserved stratum and last59 li', function (done) { + + messup([[0, (2 << 6) + (4 << 3) + (4 << 0)], [1, 0x1f]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(time.stratum).to.equal('reserved'); + expect(time.leapIndicator).to.equal('last-minute-59'); + done(); + }); + }); + + it('fails on bad mode (symmetric-active)', function (done) { + + messup([[0, (0 << 6) + (4 << 3) + (1 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(time.mode).to.equal('symmetric-active'); + done(); + }); + }); + + it('fails on bad mode (symmetric-passive)', function (done) { + + messup([[0, (0 << 6) + (4 << 3) + (2 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(time.mode).to.equal('symmetric-passive'); + done(); + }); + }); + + it('fails on bad mode (client)', function (done) { + + messup([[0, (0 << 6) + (4 << 3) + (3 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(time.mode).to.equal('client'); + done(); + }); + }); + + it('fails on bad mode (broadcast)', function (done) { + + messup([[0, (0 << 6) + (4 << 3) + (5 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(time.mode).to.equal('broadcast'); + done(); + }); + }); + + it('fails on bad mode (reserved)', function (done) { + + messup([[0, (0 << 6) + (4 << 3) + (6 << 0)]]); + + Sntp.time({ host: 'localhost', port: 49123 }, function (err, time) { + + expect(err).to.exist; + expect(time.mode).to.equal('reserved'); + done(); + }); + }); + }); + + describe('#offset', function () { + + it('gets the current offset', function (done) { + + Sntp.offset(function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.not.equal(0); + done(); + }); + }); + + it('gets the current offset from cache', function (done) { + + Sntp.offset(function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.not.equal(0); + var offset1 = offset; + Sntp.offset({}, function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.equal(offset1); + done(); + }); + }); + }); + + it('gets the new offset on different server', function (done) { + + Sntp.offset(function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.not.equal(0); + var offset1 = offset; + Sntp.offset({ host: 'nist1-sj.ustiming.org' }, function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.not.equal(offset1); + done(); + }); + }); + }); + + it('gets the new offset on different server', function (done) { + + Sntp.offset(function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.not.equal(0); + var offset1 = offset; + Sntp.offset({ port: 123 }, function (err, offset) { + + expect(err).to.not.exist; + expect(offset).to.not.equal(offset1); + done(); + }); + }); + }); + + it('fails getting the current offset on invalid server', function (done) { + + Sntp.offset({ host: 'error' }, function (err, offset) { + + expect(err).to.exist; + expect(offset).to.equal(0); + done(); + }); + }); + }); + + describe('#now', function () { + + it('starts auto-sync, gets now, then stops', function (done) { + + Sntp.stop(); + + var before = Sntp.now(); + expect(before).to.equal(Date.now()); + + Sntp.start(function () { + + var now = Sntp.now(); + expect(now).to.not.equal(Date.now()); + Sntp.stop(); + + done(); + }); + }); + + it('starts twice', function (done) { + + Sntp.start(function () { + + Sntp.start(function () { + + var now = Sntp.now(); + expect(now).to.not.equal(Date.now()); + Sntp.stop(); + + done(); + }); + }); + }); + + it('starts auto-sync, gets now, waits, gets again after timeout', function (done) { + + Sntp.stop(); + + var before = Sntp.now(); + expect(before).to.equal(Date.now()); + + Sntp.start({ clockSyncRefresh: 100 }, function () { + + var now = Sntp.now(); + expect(now).to.not.equal(Date.now()); + expect(now).to.equal(Sntp.now()); + + setTimeout(function () { + + expect(Sntp.now()).to.not.equal(now); + Sntp.stop(); + done(); + }, 110); + }); + }); + }); +}); + diff --git a/node_modules/source-map-resolve/LICENSE b/node_modules/source-map-resolve/LICENSE new file mode 100644 index 000000000..2ae975765 --- /dev/null +++ b/node_modules/source-map-resolve/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014, 2015, 2016, 2017, 2018, 2019 Simon Lydell +Copyright (c) 2019 ZHAO Jinxiang + +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. diff --git a/node_modules/source-map-resolve/changelog.md b/node_modules/source-map-resolve/changelog.md new file mode 100644 index 000000000..7b3f94b42 --- /dev/null +++ b/node_modules/source-map-resolve/changelog.md @@ -0,0 +1,108 @@ +### Version 0.5.3 (2019-12-28) ### + +- Fixed: base64 encoded source maps now correctly decodes as utf-8. Previously, + non-ASCII characters could end up garbled. Thanks to ZHAO Jinxiang + (@xiaoxiangmoe)! (Note: This fix does not work in old evironments not + supporting both `TextDecoder` and `Uint8Array`.) +- Improved: Reduced size of the npm package. + +### Version 0.5.2 (2018-05-10) ### + +- Improved: Updated the version range of `atob` to disallow depending on `2.0.3` + which as a [security + vulnerability](https://snyk.io/test/npm/atob/2.0.3?severity=high&severity=medium&severity=low). + +### Version 0.5.1 (2017-10-21) ### + +- Fixed: URLs are now decoded before being passed to `read` in Node.js. This + allows reading files with spaces, for example. +- Fixed: Missing or empty `sources` fields (such as `sources: []`) in source + maps are now handled. Previously, such source maps would cause crashes or + callbacks never bing called. Now, an empty result is produced: + + ```js + sourcesResolved: [], + sourcesContent: [] + ``` + +### Version 0.5.0 (2016-02-28) ### + +- Improved: Errors now have a `sourceMapData` property that contain as much as + possible of the intended result of the function up until the error occurred. +- Changed: `resolveSources` and `resolve`, as well as their `*Sync` + alternatives, no longer fail when one single source fails to be fetched. + Instead, the `sourcesContent` array in the result object will contain error + objects for all failed sources, and strings otherwise. (Backwards-incompatible + change.) + +### Version 0.4.0 (2015-08-29) ### + +- Removed: The `ignoreSourceRoot` option of `resolveSources`. It has been + replaced with `sourceRoot: false`. (Backwards-incompatible change.) +- Added: The `sourceRoot` option of `resolveSources`. It not only allows to + ignore the source root, it also lets you replace it. +- Added: The `parseMapToJSON` method. +- Added: The `resolve` method now accepts `null, mapUrl, ...` as arguments, in + addition to the existing signature, which will read `mapUrl` instead of + looking for a sourceMappingURL in the code. + +### Version 0.3.1 (2014-08-16) ### + +- Improved: Updated the source-map-url dependency to 0.3.0. + + +### Version 0.3.0 (2014-07-02) ### + +- Removed: Argument checking. It’s not worth it. (Possibly + backwards-incompatible change.) +- Added: The `sourceRoot` property of source maps may now be ignored, which can + be useful when resolving sources outside of the browser. +- Added: It is now possible to resolve only the URLs of sources, without + reading them. + + +### Version 0.2.0 (2014-06-22) ### + +- Changed: The result of `resolveSources` is now an object, not an array. The + old result array is available in the `sourcesContent` property. + (Backwards-incompatible change.) +- Changed: `sources` has been renamed to `sourcesContent` in the result object + of `resolve`. (Backwards-incompatible change.) +- Added: `resolveSources` now also returns all sources fully resolved, in the + `sourcesResolved` property. +- Added: The result object of `resolve` now contains the `sourcesResolved` + property from `resolveSources`. + + +### Version 0.1.4 (2014-06-16) ### + +- Fixed: `sourcesContent` was mis-typed as `sourceContents`, which meant that + the `sourcesContent` property of source maps never was used when resolving + sources. + + +### Version 0.1.3 (2014-05-06) ### + +- Only documentation and meta-data changes. + + +### Version 0.1.2 (2014-03-23) ### + +- Improved: Source maps starting with `)]}'` are now parsed correctly. The spec + allows source maps to start with that character sequence to prevent XSSI + attacks. + + +### Version 0.1.1 (2014-03-06) ### + +- Improved: Make sourceRoot resolving more sensible. + + A source root such as `/scripts/subdir` is now treated as `/scripts/subdir/` + — that is, as a directory called “subdir”, not a file called “subdir”. + Pointing to a file as source root does not makes sense. + + + +### Version 0.1.0 (2014-03-03) ### + +- Initial release. diff --git a/node_modules/source-map-resolve/lib/decode-uri-component.js b/node_modules/source-map-resolve/lib/decode-uri-component.js new file mode 100644 index 000000000..0739c20f5 --- /dev/null +++ b/node_modules/source-map-resolve/lib/decode-uri-component.js @@ -0,0 +1,8 @@ +var decodeUriComponent = require("decode-uri-component") + +function customDecodeUriComponent(string) { + // `decodeUriComponent` turns `+` into ` `, but that's not wanted. + return decodeUriComponent(string.replace(/\+/g, "%2B")) +} + +module.exports = customDecodeUriComponent diff --git a/node_modules/source-map-resolve/lib/resolve-url.js b/node_modules/source-map-resolve/lib/resolve-url.js new file mode 100644 index 000000000..e3a86c46a --- /dev/null +++ b/node_modules/source-map-resolve/lib/resolve-url.js @@ -0,0 +1,9 @@ +var url = require("url") + +function resolveUrl(/* ...urls */) { + return Array.prototype.reduce.call(arguments, function(resolved, nextUrl) { + return url.resolve(resolved, nextUrl) + }) +} + +module.exports = resolveUrl diff --git a/node_modules/source-map-resolve/lib/source-map-resolve-node.js b/node_modules/source-map-resolve/lib/source-map-resolve-node.js new file mode 100644 index 000000000..31ec3b2ba --- /dev/null +++ b/node_modules/source-map-resolve/lib/source-map-resolve-node.js @@ -0,0 +1,342 @@ +var sourceMappingURL = require("source-map-url") + +var resolveUrl = require("./resolve-url") +var decodeUriComponent = require("./decode-uri-component") +var urix = require("urix") +var atob = require("atob") + + + +function callbackAsync(callback, error, result) { + setImmediate(function() { callback(error, result) }) +} + +function parseMapToJSON(string, data) { + try { + return JSON.parse(string.replace(/^\)\]\}'/, "")) + } catch (error) { + error.sourceMapData = data + throw error + } +} + +function readSync(read, url, data) { + var readUrl = decodeUriComponent(url) + try { + return String(read(readUrl)) + } catch (error) { + error.sourceMapData = data + throw error + } +} + + + +function resolveSourceMap(code, codeUrl, read, callback) { + var mapData + try { + mapData = resolveSourceMapHelper(code, codeUrl) + } catch (error) { + return callbackAsync(callback, error) + } + if (!mapData || mapData.map) { + return callbackAsync(callback, null, mapData) + } + var readUrl = decodeUriComponent(mapData.url) + read(readUrl, function(error, result) { + if (error) { + error.sourceMapData = mapData + return callback(error) + } + mapData.map = String(result) + try { + mapData.map = parseMapToJSON(mapData.map, mapData) + } catch (error) { + return callback(error) + } + callback(null, mapData) + }) +} + +function resolveSourceMapSync(code, codeUrl, read) { + var mapData = resolveSourceMapHelper(code, codeUrl) + if (!mapData || mapData.map) { + return mapData + } + mapData.map = readSync(read, mapData.url, mapData) + mapData.map = parseMapToJSON(mapData.map, mapData) + return mapData +} + +var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/ + +/** + * The media type for JSON text is application/json. + * + * {@link https://tools.ietf.org/html/rfc8259#section-11 | IANA Considerations } + * + * `text/json` is non-standard media type + */ +var jsonMimeTypeRegex = /^(?:application|text)\/json$/ + +/** + * JSON text exchanged between systems that are not part of a closed ecosystem + * MUST be encoded using UTF-8. + * + * {@link https://tools.ietf.org/html/rfc8259#section-8.1 | Character Encoding} + */ +var jsonCharacterEncoding = "utf-8" + +function base64ToBuf(b64) { + var binStr = atob(b64) + var len = binStr.length + var arr = new Uint8Array(len) + for (var i = 0; i < len; i++) { + arr[i] = binStr.charCodeAt(i) + } + return arr +} + +function decodeBase64String(b64) { + if (typeof TextDecoder === "undefined" || typeof Uint8Array === "undefined") { + return atob(b64) + } + var buf = base64ToBuf(b64); + // Note: `decoder.decode` method will throw a `DOMException` with the + // `"EncodingError"` value when an coding error is found. + var decoder = new TextDecoder(jsonCharacterEncoding, {fatal: true}) + return decoder.decode(buf); +} + +function resolveSourceMapHelper(code, codeUrl) { + codeUrl = urix(codeUrl) + + var url = sourceMappingURL.getFrom(code) + if (!url) { + return null + } + + var dataUri = url.match(dataUriRegex) + if (dataUri) { + var mimeType = dataUri[1] || "text/plain" + var lastParameter = dataUri[2] || "" + var encoded = dataUri[3] || "" + var data = { + sourceMappingURL: url, + url: null, + sourcesRelativeTo: codeUrl, + map: encoded + } + if (!jsonMimeTypeRegex.test(mimeType)) { + var error = new Error("Unuseful data uri mime type: " + mimeType) + error.sourceMapData = data + throw error + } + try { + data.map = parseMapToJSON( + lastParameter === ";base64" ? decodeBase64String(encoded) : decodeURIComponent(encoded), + data + ) + } catch (error) { + error.sourceMapData = data + throw error + } + return data + } + + var mapUrl = resolveUrl(codeUrl, url) + return { + sourceMappingURL: url, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } +} + + + +function resolveSources(map, mapUrl, read, options, callback) { + if (typeof options === "function") { + callback = options + options = {} + } + var pending = map.sources ? map.sources.length : 0 + var result = { + sourcesResolved: [], + sourcesContent: [] + } + + if (pending === 0) { + callbackAsync(callback, null, result) + return + } + + var done = function() { + pending-- + if (pending === 0) { + callback(null, result) + } + } + + resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { + result.sourcesResolved[index] = fullUrl + if (typeof sourceContent === "string") { + result.sourcesContent[index] = sourceContent + callbackAsync(done, null) + } else { + var readUrl = decodeUriComponent(fullUrl) + read(readUrl, function(error, source) { + result.sourcesContent[index] = error ? error : String(source) + done() + }) + } + }) +} + +function resolveSourcesSync(map, mapUrl, read, options) { + var result = { + sourcesResolved: [], + sourcesContent: [] + } + + if (!map.sources || map.sources.length === 0) { + return result + } + + resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { + result.sourcesResolved[index] = fullUrl + if (read !== null) { + if (typeof sourceContent === "string") { + result.sourcesContent[index] = sourceContent + } else { + var readUrl = decodeUriComponent(fullUrl) + try { + result.sourcesContent[index] = String(read(readUrl)) + } catch (error) { + result.sourcesContent[index] = error + } + } + } + }) + + return result +} + +var endingSlash = /\/?$/ + +function resolveSourcesHelper(map, mapUrl, options, fn) { + options = options || {} + mapUrl = urix(mapUrl) + var fullUrl + var sourceContent + var sourceRoot + for (var index = 0, len = map.sources.length; index < len; index++) { + sourceRoot = null + if (typeof options.sourceRoot === "string") { + sourceRoot = options.sourceRoot + } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) { + sourceRoot = map.sourceRoot + } + // If the sourceRoot is the empty string, it is equivalent to not setting + // the property at all. + if (sourceRoot === null || sourceRoot === '') { + fullUrl = resolveUrl(mapUrl, map.sources[index]) + } else { + // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes + // `/scripts/subdir/`, not `/scripts/`. Pointing to a file as source root + // does not make sense. + fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index]) + } + sourceContent = (map.sourcesContent || [])[index] + fn(fullUrl, sourceContent, index) + } +} + + + +function resolve(code, codeUrl, read, options, callback) { + if (typeof options === "function") { + callback = options + options = {} + } + if (code === null) { + var mapUrl = codeUrl + var data = { + sourceMappingURL: null, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + var readUrl = decodeUriComponent(mapUrl) + read(readUrl, function(error, result) { + if (error) { + error.sourceMapData = data + return callback(error) + } + data.map = String(result) + try { + data.map = parseMapToJSON(data.map, data) + } catch (error) { + return callback(error) + } + _resolveSources(data) + }) + } else { + resolveSourceMap(code, codeUrl, read, function(error, mapData) { + if (error) { + return callback(error) + } + if (!mapData) { + return callback(null, null) + } + _resolveSources(mapData) + }) + } + + function _resolveSources(mapData) { + resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) { + if (error) { + return callback(error) + } + mapData.sourcesResolved = result.sourcesResolved + mapData.sourcesContent = result.sourcesContent + callback(null, mapData) + }) + } +} + +function resolveSync(code, codeUrl, read, options) { + var mapData + if (code === null) { + var mapUrl = codeUrl + mapData = { + sourceMappingURL: null, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + mapData.map = readSync(read, mapUrl, mapData) + mapData.map = parseMapToJSON(mapData.map, mapData) + } else { + mapData = resolveSourceMapSync(code, codeUrl, read) + if (!mapData) { + return null + } + } + var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options) + mapData.sourcesResolved = result.sourcesResolved + mapData.sourcesContent = result.sourcesContent + return mapData +} + + + +module.exports = { + resolveSourceMap: resolveSourceMap, + resolveSourceMapSync: resolveSourceMapSync, + resolveSources: resolveSources, + resolveSourcesSync: resolveSourcesSync, + resolve: resolve, + resolveSync: resolveSync, + parseMapToJSON: parseMapToJSON +} diff --git a/node_modules/source-map-resolve/package.json b/node_modules/source-map-resolve/package.json new file mode 100644 index 000000000..78b639821 --- /dev/null +++ b/node_modules/source-map-resolve/package.json @@ -0,0 +1,47 @@ +{ + "name": "source-map-resolve", + "version": "0.5.3", + "author": "Simon Lydell", + "license": "MIT", + "description": "Resolve the source map and/or sources for a generated file.", + "keywords": [ + "source map", + "sourcemap", + "source", + "map", + "sourceMappingURL", + "resolve", + "resolver", + "locate", + "locator", + "find", + "finder" + ], + "repository": "lydell/source-map-resolve", + "main": "lib/source-map-resolve-node.js", + "browser": "source-map-resolve.js", + "files": [ + "lib", + "source-map-resolve.js" + ], + "scripts": { + "lint": "jshint lib/ test/", + "unit": "node test/source-map-resolve.js && node test/windows.js", + "test": "npm run lint && npm run unit", + "build": "node generate-source-map-resolve.js" + }, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + }, + "devDependencies": { + "Base64": "1.1.0", + "jshint": "2.10.3", + "setimmediate": "1.0.5", + "simple-asyncify": "1.0.0", + "tape": "4.12.1" + } +} \ No newline at end of file diff --git a/node_modules/source-map-resolve/readme.md b/node_modules/source-map-resolve/readme.md new file mode 100644 index 000000000..5796ba1f3 --- /dev/null +++ b/node_modules/source-map-resolve/readme.md @@ -0,0 +1,231 @@ +Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.svg?branch=master)](https://travis-ci.org/lydell/source-map-resolve) +======== + +Resolve the source map and/or sources for a generated file. + +```js +var sourceMapResolve = require("source-map-resolve") +var sourceMap = require("source-map") + +var code = [ + "!function(){...}();", + "/*# sourceMappingURL=foo.js.map */" +].join("\n") + +sourceMapResolve.resolveSourceMap(code, "/js/foo.js", fs.readFile, function(error, result) { + if (error) { + return notifyFailure(error) + } + result + // { + // map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []}, + // url: "/js/foo.js.map", + // sourcesRelativeTo: "/js/foo.js.map", + // sourceMappingURL: "foo.js.map" + // } + + sourceMapResolve.resolveSources(result.map, result.sourcesRelativeTo, fs.readFile, function(error, result) { + if (error) { + return notifyFailure(error) + } + result + // { + // sourcesResolved: ["/coffee/foo.coffee"], + // sourcesContent: [""] + // } + }) +}) + +sourceMapResolve.resolve(code, "/js/foo.js", fs.readFile, function(error, result) { + if (error) { + return notifyFailure(error) + } + result + // { + // map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []}, + // url: "/js/foo.js.map", + // sourcesRelativeTo: "/js/foo.js.map", + // sourceMappingURL: "foo.js.map", + // sourcesResolved: ["/coffee/foo.coffee"], + // sourcesContent: [""] + // } + result.map.sourcesContent = result.sourcesContent + var map = new sourceMap.sourceMapConsumer(result.map) + map.sourceContentFor("/coffee/foo.coffee") + // "" +}) +``` + + +Installation +============ + +- `npm install source-map-resolve` +- `bower install source-map-resolve` +- `component install lydell/source-map-resolve` + +Works with CommonJS, AMD and browser globals, through UMD. + +Note: This module requires `setImmediate` and `atob`. +Use polyfills if needed, such as: + +- +- + + +Usage +===== + +### `sourceMapResolve.resolveSourceMap(code, codeUrl, read, callback)` ### + +- `code` is a string of code that may or may not contain a sourceMappingURL + comment. Such a comment is used to resolve the source map. +- `codeUrl` is the url to the file containing `code`. If the sourceMappingURL + is relative, it is resolved against `codeUrl`. +- `read(url, callback)` is a function that reads `url` and responds using + `callback(error, content)`. In Node.js you might want to use `fs.readFile`, + while in the browser you might want to use an asynchronus `XMLHttpRequest`. +- `callback(error, result)` is a function that is invoked with either an error + or `null` and the result. + +The result is an object with the following properties: + +- `map`: The source map for `code`, as an object (not a string). +- `url`: The url to the source map. If the source map came from a data uri, + this property is `null`, since then there is no url to it. +- `sourcesRelativeTo`: The url that the sources of the source map are relative + to. Since the sources are relative to the source map, and the url to the + source map is provided as the `url` property, this property might seem + superfluos. However, remember that the `url` property can be `null` if the + source map came from a data uri. If so, the sources are relative to the file + containing the data uri—`codeUrl`. This property will be identical to the + `url` property or `codeUrl`, whichever is appropriate. This way you can + conveniently resolve the sources without having to think about where the + source map came from. +- `sourceMappingURL`: The url of the sourceMappingURL comment in `code`. + +If `code` contains no sourceMappingURL, the result is `null`. + +### `sourceMapResolve.resolveSources(map, mapUrl, read, [options], callback)` ### + +- `map` is a source map, as an object (not a string). +- `mapUrl` is the url to the file containing `map`. Relative sources in the + source map, if any, are resolved against `mapUrl`. +- `read(url, callback)` is a function that reads `url` and responds using + `callback(error, content)`. In Node.js you might want to use `fs.readFile`, + while in the browser you might want to use an asynchronus `XMLHttpRequest`. +- `options` is an optional object with any of the following properties: + - `sourceRoot`: Override the `sourceRoot` property of the source map, which + might only be relevant when resolving sources in the browser. This lets you + bypass it when using the module outside of a browser, if needed. Pass a + string to replace the `sourceRoot` property with, or `false` to ignore it. + Defaults to `undefined`. +- `callback(error, result)` is a function that is invoked with either an error + or `null` and the result. + +The result is an object with the following properties: + +- `sourcesResolved`: The same as `map.sources`, except all the sources are + fully resolved. +- `sourcesContent`: An array with the contents of all sources in `map.sources`, + in the same order as `map.sources`. If getting the contents of a source fails, + an error object is put into the array instead. + +### `sourceMapResolve.resolve(code, codeUrl, read, [options], callback)` ### + +The arguments are identical to `sourceMapResolve.resolveSourceMap`, except that +you may also provide the same `options` as in `sourceMapResolve.resolveSources`. + +This is a convenience method that first resolves the source map and then its +sources. You could also do this by first calling +`sourceMapResolve.resolveSourceMap` and then `sourceMapResolve.resolveSources`. + +The result is identical to `sourceMapResolve.resolveSourceMap`, with the +properties from `sourceMapResolve.resolveSources` merged into it. + +There is one extra feature available, though. If `code` is `null`, `codeUrl` is +treated as a url to the source map instead of to `code`, and will be read. This +is handy if you _sometimes_ get the source map url from the `SourceMap: ` +header (see the [Notes] section). In this case, the `sourceMappingURL` property +of the result is `null`. + + +[Notes]: #notes + +### `sourceMapResolve.*Sync()` ### + +There are also sync versions of the three previous functions. They are identical +to the async versions, except: + +- They expect a sync reading function. In Node.js you might want to use + `fs.readFileSync`, while in the browser you might want to use a synchronus + `XMLHttpRequest`. +- They throw errors and return the result instead of using a callback. + +`sourceMapResolve.resolveSourcesSync` also accepts `null` as the `read` +parameter. The result is the same as when passing a function as the `read +parameter`, except that the `sourcesContent` property of the result will be an +empty array. In other words, the sources aren’t read. You only get the +`sourcesResolved` property. (This only supported in the synchronus version, since +there is no point doing it asynchronusly.) + +### `sourceMapResolve.parseMapToJSON(string, [data])` ### + +The spec says that if a source map (as a string) starts with `)]}'`, it should +be stripped off. This is to prevent XSSI attacks. This function does that and +returns the result of `JSON.parse`ing what’s left. + +If this function throws `error`, `error.sourceMapData === data`. + +### Errors + +All errors passed to callbacks or thrown by this module have a `sourceMapData` +property that contain as much as possible of the intended result of the function +up until the error occurred. + +Note that while the `map` property of result objects always is an object, +`error.sourceMapData.map` will be a string if parsing that string fails. + + +Note +==== + +This module resolves the source map for a given generated file by looking for a +sourceMappingURL comment. The spec defines yet a way to provide the URL to the +source map: By sending the `SourceMap: ` header along with the generated +file. Since this module doesn’t retrive the generated code for you (instead +_you_ give the generated code to the module), it’s up to you to look for such a +header when you retrieve the file (should the need arise). + + +Development +=========== + +Tests +----- + +First off, run `npm install` to install testing modules and browser polyfills. + +`npm test` lints the code and runs the test suite in Node.js. + +x-package.json5 +--------------- + +package.json, component.json and bower.json are all generated from +x-package.json5 by using [`xpkg`]. Only edit x-package.json5, and remember to +run `xpkg` before commiting! + +[`xpkg`]: https://github.com/kof/node-xpkg + +Generating the browser version +------------------------------ + +source-map-resolve.js is generated from source-map-resolve-node.js and +source-map-resolve-template.js. Only edit the two latter files, _not_ +source-map-resolve.js! To generate it, run `npm run build`. + + +License +======= + +[MIT](LICENSE). diff --git a/node_modules/source-map-resolve/source-map-resolve.js b/node_modules/source-map-resolve/source-map-resolve.js new file mode 100644 index 000000000..282b1260b --- /dev/null +++ b/node_modules/source-map-resolve/source-map-resolve.js @@ -0,0 +1,348 @@ +// Note: source-map-resolve.js is generated from source-map-resolve-node.js and +// source-map-resolve-template.js. Only edit the two latter files, _not_ +// source-map-resolve.js! + +void (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(["source-map-url", "resolve-url"], factory) + } else if (typeof exports === "object") { + var sourceMappingURL = require("source-map-url") + var resolveUrl = require("resolve-url") + module.exports = factory(sourceMappingURL, resolveUrl) + } else { + root.sourceMapResolve = factory(root.sourceMappingURL, root.resolveUrl) + } +}(this, function(sourceMappingURL, resolveUrl) { + + function callbackAsync(callback, error, result) { + setImmediate(function() { callback(error, result) }) + } + + function parseMapToJSON(string, data) { + try { + return JSON.parse(string.replace(/^\)\]\}'/, "")) + } catch (error) { + error.sourceMapData = data + throw error + } + } + + function readSync(read, url, data) { + var readUrl = url + try { + return String(read(readUrl)) + } catch (error) { + error.sourceMapData = data + throw error + } + } + + + + function resolveSourceMap(code, codeUrl, read, callback) { + var mapData + try { + mapData = resolveSourceMapHelper(code, codeUrl) + } catch (error) { + return callbackAsync(callback, error) + } + if (!mapData || mapData.map) { + return callbackAsync(callback, null, mapData) + } + var readUrl = mapData.url + read(readUrl, function(error, result) { + if (error) { + error.sourceMapData = mapData + return callback(error) + } + mapData.map = String(result) + try { + mapData.map = parseMapToJSON(mapData.map, mapData) + } catch (error) { + return callback(error) + } + callback(null, mapData) + }) + } + + function resolveSourceMapSync(code, codeUrl, read) { + var mapData = resolveSourceMapHelper(code, codeUrl) + if (!mapData || mapData.map) { + return mapData + } + mapData.map = readSync(read, mapData.url, mapData) + mapData.map = parseMapToJSON(mapData.map, mapData) + return mapData + } + + var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/ + + /** + * The media type for JSON text is application/json. + * + * {@link https://tools.ietf.org/html/rfc8259#section-11 | IANA Considerations } + * + * `text/json` is non-standard media type + */ + var jsonMimeTypeRegex = /^(?:application|text)\/json$/ + + /** + * JSON text exchanged between systems that are not part of a closed ecosystem + * MUST be encoded using UTF-8. + * + * {@link https://tools.ietf.org/html/rfc8259#section-8.1 | Character Encoding} + */ + var jsonCharacterEncoding = "utf-8" + + function base64ToBuf(b64) { + var binStr = atob(b64) + var len = binStr.length + var arr = new Uint8Array(len) + for (var i = 0; i < len; i++) { + arr[i] = binStr.charCodeAt(i) + } + return arr + } + + function decodeBase64String(b64) { + if (typeof TextDecoder === "undefined" || typeof Uint8Array === "undefined") { + return atob(b64) + } + var buf = base64ToBuf(b64); + // Note: `decoder.decode` method will throw a `DOMException` with the + // `"EncodingError"` value when an coding error is found. + var decoder = new TextDecoder(jsonCharacterEncoding, {fatal: true}) + return decoder.decode(buf); + } + + function resolveSourceMapHelper(code, codeUrl) { + var url = sourceMappingURL.getFrom(code) + if (!url) { + return null + } + + var dataUri = url.match(dataUriRegex) + if (dataUri) { + var mimeType = dataUri[1] || "text/plain" + var lastParameter = dataUri[2] || "" + var encoded = dataUri[3] || "" + var data = { + sourceMappingURL: url, + url: null, + sourcesRelativeTo: codeUrl, + map: encoded + } + if (!jsonMimeTypeRegex.test(mimeType)) { + var error = new Error("Unuseful data uri mime type: " + mimeType) + error.sourceMapData = data + throw error + } + try { + data.map = parseMapToJSON( + lastParameter === ";base64" ? decodeBase64String(encoded) : decodeURIComponent(encoded), + data + ) + } catch (error) { + error.sourceMapData = data + throw error + } + return data + } + + var mapUrl = resolveUrl(codeUrl, url) + return { + sourceMappingURL: url, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + } + + + + function resolveSources(map, mapUrl, read, options, callback) { + if (typeof options === "function") { + callback = options + options = {} + } + var pending = map.sources ? map.sources.length : 0 + var result = { + sourcesResolved: [], + sourcesContent: [] + } + + if (pending === 0) { + callbackAsync(callback, null, result) + return + } + + var done = function() { + pending-- + if (pending === 0) { + callback(null, result) + } + } + + resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { + result.sourcesResolved[index] = fullUrl + if (typeof sourceContent === "string") { + result.sourcesContent[index] = sourceContent + callbackAsync(done, null) + } else { + var readUrl = fullUrl + read(readUrl, function(error, source) { + result.sourcesContent[index] = error ? error : String(source) + done() + }) + } + }) + } + + function resolveSourcesSync(map, mapUrl, read, options) { + var result = { + sourcesResolved: [], + sourcesContent: [] + } + + if (!map.sources || map.sources.length === 0) { + return result + } + + resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { + result.sourcesResolved[index] = fullUrl + if (read !== null) { + if (typeof sourceContent === "string") { + result.sourcesContent[index] = sourceContent + } else { + var readUrl = fullUrl + try { + result.sourcesContent[index] = String(read(readUrl)) + } catch (error) { + result.sourcesContent[index] = error + } + } + } + }) + + return result + } + + var endingSlash = /\/?$/ + + function resolveSourcesHelper(map, mapUrl, options, fn) { + options = options || {} + var fullUrl + var sourceContent + var sourceRoot + for (var index = 0, len = map.sources.length; index < len; index++) { + sourceRoot = null + if (typeof options.sourceRoot === "string") { + sourceRoot = options.sourceRoot + } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) { + sourceRoot = map.sourceRoot + } + // If the sourceRoot is the empty string, it is equivalent to not setting + // the property at all. + if (sourceRoot === null || sourceRoot === '') { + fullUrl = resolveUrl(mapUrl, map.sources[index]) + } else { + // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes + // `/scripts/subdir/`, not `/scripts/`. Pointing to a file as source root + // does not make sense. + fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index]) + } + sourceContent = (map.sourcesContent || [])[index] + fn(fullUrl, sourceContent, index) + } + } + + + + function resolve(code, codeUrl, read, options, callback) { + if (typeof options === "function") { + callback = options + options = {} + } + if (code === null) { + var mapUrl = codeUrl + var data = { + sourceMappingURL: null, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + var readUrl = mapUrl + read(readUrl, function(error, result) { + if (error) { + error.sourceMapData = data + return callback(error) + } + data.map = String(result) + try { + data.map = parseMapToJSON(data.map, data) + } catch (error) { + return callback(error) + } + _resolveSources(data) + }) + } else { + resolveSourceMap(code, codeUrl, read, function(error, mapData) { + if (error) { + return callback(error) + } + if (!mapData) { + return callback(null, null) + } + _resolveSources(mapData) + }) + } + + function _resolveSources(mapData) { + resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) { + if (error) { + return callback(error) + } + mapData.sourcesResolved = result.sourcesResolved + mapData.sourcesContent = result.sourcesContent + callback(null, mapData) + }) + } + } + + function resolveSync(code, codeUrl, read, options) { + var mapData + if (code === null) { + var mapUrl = codeUrl + mapData = { + sourceMappingURL: null, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + mapData.map = readSync(read, mapUrl, mapData) + mapData.map = parseMapToJSON(mapData.map, mapData) + } else { + mapData = resolveSourceMapSync(code, codeUrl, read) + if (!mapData) { + return null + } + } + var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options) + mapData.sourcesResolved = result.sourcesResolved + mapData.sourcesContent = result.sourcesContent + return mapData + } + + + + return { + resolveSourceMap: resolveSourceMap, + resolveSourceMapSync: resolveSourceMapSync, + resolveSources: resolveSources, + resolveSourcesSync: resolveSourcesSync, + resolve: resolve, + resolveSync: resolveSync, + parseMapToJSON: parseMapToJSON + } + +})); diff --git a/node_modules/source-map-url/LICENSE b/node_modules/source-map-url/LICENSE new file mode 100644 index 000000000..10052a95c --- /dev/null +++ b/node_modules/source-map-url/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Simon Lydell + +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. diff --git a/node_modules/source-map-url/changelog.md b/node_modules/source-map-url/changelog.md new file mode 100644 index 000000000..61f1c7bf8 --- /dev/null +++ b/node_modules/source-map-url/changelog.md @@ -0,0 +1,57 @@ +### Version 0.4.1 (2021-02-01) ### + +- Improved: The package is now about 50% smaller, by excluding unnecessary + files. Thanks to Piotr Kuczynski (@pkuczynski)! + +### Version 0.4.0 (2015-11-12) ### + +- Changed: sourceMappingURL comments used to be matched only when placed at + the end of the script. However, since several commonly used JavaScript + libraries do not follow this convention and all popular web browsers accept + non-trailing comments, this has been revised. + + So now non-trailing SourceMappingURL comments are matched as well. + + +### Version 0.3.0 (2014-08-16) ### + +- Changed: sourceMappingURL comments used to be matched only if they appeared + on their own line. However, the spec only says: + + > The generated code may include a line at the end of the source, with the following form: + > + > //# sourceMappingURL= + + So now they are matched also when they appear on the same line as code. + +- Removed: The `.set()` method. I couldn’t decide how it should work + considering the above change. Moreover, it was unnecessarily complex (and + would have gotten worse) for very little gain. It is much easier to run + `.remove()` if needed, and then simply `code += "\n//# sourceMappingURL=" + + url` (using the appropriate comment syntax and newline). KISS. + +- Changed: The `.insertBefore()` method now always inserts the string exactly + before the sourceMappingURL comment; not before the newline before the + comment (if any). Moreover, it does not ensure that the comment will be on a + new line anymore. This is up to the caller. KISS. + +- Changed: The `.remove()` method no longer removes the newline before the + sourceMappingURL (if any). + +- Changed: Renamed `.get()` to `.getFrom()`. +- Changed: Renamed `.remove()` to `.removeFrom()`. + +- Added: The `.existsIn()` method. + + +### Version 0.2.0 (2014-02-23) ### + +- Changed: A space is no longer inserted before the closing comment syntax. If + such a space is desired, it needs to be put in the closing comment syntax + itself (such as `["/*", " */"]` instead of `["/*", "*/"]`). (Backwards + incompatible change.) + + +### Version 0.1.0 (2014-02-22) ### + +- Initial release. diff --git a/node_modules/source-map-url/package.json b/node_modules/source-map-url/package.json new file mode 100644 index 000000000..6fd96d30c --- /dev/null +++ b/node_modules/source-map-url/package.json @@ -0,0 +1,39 @@ +{ + "name": "source-map-url", + "version": "0.4.1", + "author": "Simon Lydell", + "license": "MIT", + "description": "Tools for working with sourceMappingURL comments.", + "keywords": [ + "source map", + "sourceMappingURL", + "comment", + "annotation" + ], + "main": "source-map-url.js", + "repository": "lydell/source-map-url", + "scripts": { + "lint": "jshint source-map-url.js test/ ", + "unit": "mocha", + "test": "npm run lint && npm run unit" + }, + "devDependencies": { + "mocha": "~1.17.1", + "expect.js": "~0.3.1", + "jshint": "~2.4.3" + }, + "testling": { + "harness": "mocha", + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "chrome/latest", + "firefox/latest", + "opera/12", + "opera/latest", + "safari/5", + "iphone/6", + "android-browser/4" + ] + } +} diff --git a/node_modules/source-map-url/readme.md b/node_modules/source-map-url/readme.md new file mode 100644 index 000000000..216de5e52 --- /dev/null +++ b/node_modules/source-map-url/readme.md @@ -0,0 +1,97 @@ +Overview [![Build Status](https://travis-ci.org/lydell/source-map-url.png?branch=master)](https://travis-ci.org/lydell/source-map-url) +======== + +[![browser support](https://ci.testling.com/lydell/source-map-url.png)](https://ci.testling.com/lydell/source-map-url) + +Tools for working with sourceMappingURL comments. + +```js +var sourceMappingURL = require("source-map-url") + +var code = [ + "!function(){...}();", + "/*# sourceMappingURL=foo.js.map */" +].join("\n") + +sourceMappingURL.existsIn(code) +// true + +sourceMappingURL.getFrom(code) +// foo.js.map + +code = sourceMappingURL.insertBefore(code, "// License: MIT\n") +// !function(){...}(); +// // License: MIT +// /*# sourceMappingURL=foo.js.map */ + +code = sourceMappingURL.removeFrom(code) +// !function(){...}(); +// // License: MIT + +sourceMappingURL.existsIn(code) +// false + +sourceMappingURL.getFrom(code) +// null + +code += "//# sourceMappingURL=/other/file.js.map" +// !function(){...}(); +// // License: MIT +// //# sourceMappingURL=/other/file.js.map +``` + + +Installation +============ + +- `npm install source-map-url` +- `bower install source-map-url` +- `component install lydell/source-map-url` + +Works with CommonJS, AMD and browser globals, through UMD. + + +Usage +===== + +### `sourceMappingURL.getFrom(code)` ### + +Returns the url of the sourceMappingURL comment in `code`. Returns `null` if +there is no such comment. + +### `sourceMappingURL.existsIn(code)` ### + +Returns `true` if there is a sourceMappingURL comment in `code`, or `false` +otherwise. + +### `sourceMappingURL.removeFrom(code)` ### + +Removes the sourceMappingURL comment in `code`. Does nothing if there is no +such comment. Returns the updated `code`. + +### `sourceMappingURL.insertBefore(code, string)` ### + +Inserts `string` before the sourceMappingURL comment in `code`. Appends +`string` to `code` if there is no such comment. + +Lets you append something to a file without worrying about burying the +sourceMappingURL comment (by keeping it at the end of the file). + +### `sourceMappingURL.regex` ### + +The regex that is used to match sourceMappingURL comments. It matches both `//` +and `/**/` comments, thus supporting both JavaScript and CSS. + + +Tests +===== + +Start by running `npm test`, which lints the code and runs the test suite in Node.js. + +To run the tests in a browser, run `testling` (`npm install -g testling`) or `testling -u`. + + +License +======= + +[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/source-map-url/source-map-url.js b/node_modules/source-map-url/source-map-url.js new file mode 100644 index 000000000..1724cb7c0 --- /dev/null +++ b/node_modules/source-map-url/source-map-url.js @@ -0,0 +1,57 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +void (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(factory) + } else if (typeof exports === "object") { + module.exports = factory() + } else { + root.sourceMappingURL = factory() + } +}(this, function() { + + var innerRegex = /[#@] sourceMappingURL=([^\s'"]*)/ + + var regex = RegExp( + "(?:" + + "/\\*" + + "(?:\\s*\r?\n(?://)?)?" + + "(?:" + innerRegex.source + ")" + + "\\s*" + + "\\*/" + + "|" + + "//(?:" + innerRegex.source + ")" + + ")" + + "\\s*" + ) + + return { + + regex: regex, + _innerRegex: innerRegex, + + getFrom: function(code) { + var match = code.match(regex) + return (match ? match[1] || match[2] || "" : null) + }, + + existsIn: function(code) { + return regex.test(code) + }, + + removeFrom: function(code) { + return code.replace(regex, "") + }, + + insertBefore: function(code, string) { + var match = code.match(regex) + if (match) { + return code.slice(0, match.index) + string + code.slice(match.index) + } else { + return code + string + } + } + } + +})); diff --git a/node_modules/source-map/CHANGELOG.md b/node_modules/source-map/CHANGELOG.md new file mode 100644 index 000000000..3a8c066c6 --- /dev/null +++ b/node_modules/source-map/CHANGELOG.md @@ -0,0 +1,301 @@ +# Change Log + +## 0.5.6 + +* Fix for regression when people were using numbers as names in source maps. See + #236. + +## 0.5.5 + +* Fix "regression" of unsupported, implementation behavior that half the world + happens to have come to depend on. See #235. + +* Fix regression involving function hoisting in SpiderMonkey. See #233. + +## 0.5.4 + +* Large performance improvements to source-map serialization. See #228 and #229. + +## 0.5.3 + +* Do not include unnecessary distribution files. See + commit ef7006f8d1647e0a83fdc60f04f5a7ca54886f86. + +## 0.5.2 + +* Include browser distributions of the library in package.json's `files`. See + issue #212. + +## 0.5.1 + +* Fix latent bugs in IndexedSourceMapConsumer.prototype._parseMappings. See + ff05274becc9e6e1295ed60f3ea090d31d843379. + +## 0.5.0 + +* Node 0.8 is no longer supported. + +* Use webpack instead of dryice for bundling. + +* Big speedups serializing source maps. See pull request #203. + +* Fix a bug with `SourceMapConsumer.prototype.sourceContentFor` and sources that + explicitly start with the source root. See issue #199. + +## 0.4.4 + +* Fix an issue where using a `SourceMapGenerator` after having created a + `SourceMapConsumer` from it via `SourceMapConsumer.fromSourceMap` failed. See + issue #191. + +* Fix an issue with where `SourceMapGenerator` would mistakenly consider + different mappings as duplicates of each other and avoid generating them. See + issue #192. + +## 0.4.3 + +* A very large number of performance improvements, particularly when parsing + source maps. Collectively about 75% of time shaved off of the source map + parsing benchmark! + +* Fix a bug in `SourceMapConsumer.prototype.allGeneratedPositionsFor` and fuzzy + searching in the presence of a column option. See issue #177. + +* Fix a bug with joining a source and its source root when the source is above + the root. See issue #182. + +* Add the `SourceMapConsumer.prototype.hasContentsOfAllSources` method to + determine when all sources' contents are inlined into the source map. See + issue #190. + +## 0.4.2 + +* Add an `.npmignore` file so that the benchmarks aren't pulled down by + dependent projects. Issue #169. + +* Add an optional `column` argument to + `SourceMapConsumer.prototype.allGeneratedPositionsFor` and better handle lines + with no mappings. Issues #172 and #173. + +## 0.4.1 + +* Fix accidentally defining a global variable. #170. + +## 0.4.0 + +* The default direction for fuzzy searching was changed back to its original + direction. See #164. + +* There is now a `bias` option you can supply to `SourceMapConsumer` to control + the fuzzy searching direction. See #167. + +* About an 8% speed up in parsing source maps. See #159. + +* Added a benchmark for parsing and generating source maps. + +## 0.3.0 + +* Change the default direction that searching for positions fuzzes when there is + not an exact match. See #154. + +* Support for environments using json2.js for JSON serialization. See #156. + +## 0.2.0 + +* Support for consuming "indexed" source maps which do not have any remote + sections. See pull request #127. This introduces a minor backwards + incompatibility if you are monkey patching `SourceMapConsumer.prototype` + methods. + +## 0.1.43 + +* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue + #148 for some discussion and issues #150, #151, and #152 for implementations. + +## 0.1.42 + +* Fix an issue where `SourceNode`s from different versions of the source-map + library couldn't be used in conjunction with each other. See issue #142. + +## 0.1.41 + +* Fix a bug with getting the source content of relative sources with a "./" + prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768). + +* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the + column span of each mapping. + +* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find + all generated positions associated with a given original source and line. + +## 0.1.40 + +* Performance improvements for parsing source maps in SourceMapConsumer. + +## 0.1.39 + +* Fix a bug where setting a source's contents to null before any source content + had been set before threw a TypeError. See issue #131. + +## 0.1.38 + +* Fix a bug where finding relative paths from an empty path were creating + absolute paths. See issue #129. + +## 0.1.37 + +* Fix a bug where if the source root was an empty string, relative source paths + would turn into absolute source paths. Issue #124. + +## 0.1.36 + +* Allow the `names` mapping property to be an empty string. Issue #121. + +## 0.1.35 + +* A third optional parameter was added to `SourceNode.fromStringWithSourceMap` + to specify a path that relative sources in the second parameter should be + relative to. Issue #105. + +* If no file property is given to a `SourceMapGenerator`, then the resulting + source map will no longer have a `null` file property. The property will + simply not exist. Issue #104. + +* Fixed a bug where consecutive newlines were ignored in `SourceNode`s. + Issue #116. + +## 0.1.34 + +* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103. + +* Fix bug involving source contents and the + `SourceMapGenerator.prototype.applySourceMap`. Issue #100. + +## 0.1.33 + +* Fix some edge cases surrounding path joining and URL resolution. + +* Add a third parameter for relative path to + `SourceMapGenerator.prototype.applySourceMap`. + +* Fix issues with mappings and EOLs. + +## 0.1.32 + +* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns + (issue 92). + +* Fixed test runner to actually report number of failed tests as its process + exit code. + +* Fixed a typo when reporting bad mappings (issue 87). + +## 0.1.31 + +* Delay parsing the mappings in SourceMapConsumer until queried for a source + location. + +* Support Sass source maps (which at the time of writing deviate from the spec + in small ways) in SourceMapConsumer. + +## 0.1.30 + +* Do not join source root with a source, when the source is a data URI. + +* Extend the test runner to allow running single specific test files at a time. + +* Performance improvements in `SourceNode.prototype.walk` and + `SourceMapConsumer.prototype.eachMapping`. + +* Source map browser builds will now work inside Workers. + +* Better error messages when attempting to add an invalid mapping to a + `SourceMapGenerator`. + +## 0.1.29 + +* Allow duplicate entries in the `names` and `sources` arrays of source maps + (usually from TypeScript) we are parsing. Fixes github issue 72. + +## 0.1.28 + +* Skip duplicate mappings when creating source maps from SourceNode; github + issue 75. + +## 0.1.27 + +* Don't throw an error when the `file` property is missing in SourceMapConsumer, + we don't use it anyway. + +## 0.1.26 + +* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70. + +## 0.1.25 + +* Make compatible with browserify + +## 0.1.24 + +* Fix issue with absolute paths and `file://` URIs. See + https://bugzilla.mozilla.org/show_bug.cgi?id=885597 + +## 0.1.23 + +* Fix issue with absolute paths and sourcesContent, github issue 64. + +## 0.1.22 + +* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21. + +## 0.1.21 + +* Fixed handling of sources that start with a slash so that they are relative to + the source root's host. + +## 0.1.20 + +* Fixed github issue #43: absolute URLs aren't joined with the source root + anymore. + +## 0.1.19 + +* Using Travis CI to run tests. + +## 0.1.18 + +* Fixed a bug in the handling of sourceRoot. + +## 0.1.17 + +* Added SourceNode.fromStringWithSourceMap. + +## 0.1.16 + +* Added missing documentation. + +* Fixed the generating of empty mappings in SourceNode. + +## 0.1.15 + +* Added SourceMapGenerator.applySourceMap. + +## 0.1.14 + +* The sourceRoot is now handled consistently. + +## 0.1.13 + +* Added SourceMapGenerator.fromSourceMap. + +## 0.1.12 + +* SourceNode now generates empty mappings too. + +## 0.1.11 + +* Added name support to SourceNode. + +## 0.1.10 + +* Added sourcesContent support to the customer and generator. diff --git a/node_modules/source-map/LICENSE b/node_modules/source-map/LICENSE new file mode 100644 index 000000000..ed1b7cf27 --- /dev/null +++ b/node_modules/source-map/LICENSE @@ -0,0 +1,28 @@ + +Copyright (c) 2009-2011, Mozilla Foundation and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* 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. + +* Neither the names of the Mozilla Foundation nor the names of project + contributors may 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 HOLDER 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. diff --git a/node_modules/source-map/README.md b/node_modules/source-map/README.md new file mode 100644 index 000000000..fea4beb19 --- /dev/null +++ b/node_modules/source-map/README.md @@ -0,0 +1,742 @@ +# Source Map + +[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map) + +[![NPM](https://nodei.co/npm/source-map.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/source-map) + +This is a library to generate and consume the source map format +[described here][format]. + +[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit + +## Use with Node + + $ npm install source-map + +## Use on the Web + + + +-------------------------------------------------------------------------------- + + + + + +## Table of Contents + +- [Examples](#examples) + - [Consuming a source map](#consuming-a-source-map) + - [Generating a source map](#generating-a-source-map) + - [With SourceNode (high level API)](#with-sourcenode-high-level-api) + - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api) +- [API](#api) + - [SourceMapConsumer](#sourcemapconsumer) + - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap) + - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans) + - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition) + - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition) + - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition) + - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources) + - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing) + - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order) + - [SourceMapGenerator](#sourcemapgenerator) + - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap) + - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer) + - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping) + - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent) + - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath) + - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring) + - [SourceNode](#sourcenode) + - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name) + - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath) + - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk) + - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk) + - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent) + - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn) + - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn) + - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep) + - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement) + - [SourceNode.prototype.toString()](#sourcenodeprototypetostring) + - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap) + + + +## Examples + +### Consuming a source map + +```js +var rawSourceMap = { + version: 3, + file: 'min.js', + names: ['bar', 'baz', 'n'], + sources: ['one.js', 'two.js'], + sourceRoot: 'http://example.com/www/js/', + mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' +}; + +var smc = new SourceMapConsumer(rawSourceMap); + +console.log(smc.sources); +// [ 'http://example.com/www/js/one.js', +// 'http://example.com/www/js/two.js' ] + +console.log(smc.originalPositionFor({ + line: 2, + column: 28 +})); +// { source: 'http://example.com/www/js/two.js', +// line: 2, +// column: 10, +// name: 'n' } + +console.log(smc.generatedPositionFor({ + source: 'http://example.com/www/js/two.js', + line: 2, + column: 10 +})); +// { line: 2, column: 28 } + +smc.eachMapping(function (m) { + // ... +}); +``` + +### Generating a source map + +In depth guide: +[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/) + +#### With SourceNode (high level API) + +```js +function compile(ast) { + switch (ast.type) { + case 'BinaryExpression': + return new SourceNode( + ast.location.line, + ast.location.column, + ast.location.source, + [compile(ast.left), " + ", compile(ast.right)] + ); + case 'Literal': + return new SourceNode( + ast.location.line, + ast.location.column, + ast.location.source, + String(ast.value) + ); + // ... + default: + throw new Error("Bad AST"); + } +} + +var ast = parse("40 + 2", "add.js"); +console.log(compile(ast).toStringWithSourceMap({ + file: 'add.js' +})); +// { code: '40 + 2', +// map: [object SourceMapGenerator] } +``` + +#### With SourceMapGenerator (low level API) + +```js +var map = new SourceMapGenerator({ + file: "source-mapped.js" +}); + +map.addMapping({ + generated: { + line: 10, + column: 35 + }, + source: "foo.js", + original: { + line: 33, + column: 2 + }, + name: "christopher" +}); + +console.log(map.toString()); +// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}' +``` + +## API + +Get a reference to the module: + +```js +// Node.js +var sourceMap = require('source-map'); + +// Browser builds +var sourceMap = window.sourceMap; + +// Inside Firefox +const sourceMap = require("devtools/toolkit/sourcemap/source-map.js"); +``` + +### SourceMapConsumer + +A SourceMapConsumer instance represents a parsed source map which we can query +for information about the original file positions by giving it a file position +in the generated source. + +#### new SourceMapConsumer(rawSourceMap) + +The only parameter is the raw source map (either as a string which can be +`JSON.parse`'d, or an object). According to the spec, source maps have the +following attributes: + +* `version`: Which version of the source map spec this map is following. + +* `sources`: An array of URLs to the original source files. + +* `names`: An array of identifiers which can be referenced by individual + mappings. + +* `sourceRoot`: Optional. The URL root from which all sources are relative. + +* `sourcesContent`: Optional. An array of contents of the original source files. + +* `mappings`: A string of base64 VLQs which contain the actual mappings. + +* `file`: Optional. The generated filename this source map is associated with. + +```js +var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData); +``` + +#### SourceMapConsumer.prototype.computeColumnSpans() + +Compute the last column for each generated mapping. The last column is +inclusive. + +```js +// Before: +consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1 }, +// { line: 2, +// column: 10 }, +// { line: 2, +// column: 20 } ] + +consumer.computeColumnSpans(); + +// After: +consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1, +// lastColumn: 9 }, +// { line: 2, +// column: 10, +// lastColumn: 19 }, +// { line: 2, +// column: 20, +// lastColumn: Infinity } ] + +``` + +#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition) + +Returns the original source, line, and column information for the generated +source's line and column positions provided. The only argument is an object with +the following properties: + +* `line`: The line number in the generated source. Line numbers in + this library are 1-based (note that the underlying source map + specification uses 0-based line numbers -- this library handles the + translation). + +* `column`: The column number in the generated source. Column numbers + in this library are 0-based. + +* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or + `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest + element that is smaller than or greater than the one we are searching for, + respectively, if the exact element cannot be found. Defaults to + `SourceMapConsumer.GREATEST_LOWER_BOUND`. + +and an object is returned with the following properties: + +* `source`: The original source file, or null if this information is not + available. + +* `line`: The line number in the original source, or null if this information is + not available. The line number is 1-based. + +* `column`: The column number in the original source, or null if this + information is not available. The column number is 0-based. + +* `name`: The original identifier, or null if this information is not available. + +```js +consumer.originalPositionFor({ line: 2, column: 10 }) +// { source: 'foo.coffee', +// line: 2, +// column: 2, +// name: null } + +consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 }) +// { source: null, +// line: null, +// column: null, +// name: null } +``` + +#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition) + +Returns the generated line and column information for the original source, +line, and column positions provided. The only argument is an object with +the following properties: + +* `source`: The filename of the original source. + +* `line`: The line number in the original source. The line number is + 1-based. + +* `column`: The column number in the original source. The column + number is 0-based. + +and an object is returned with the following properties: + +* `line`: The line number in the generated source, or null. The line + number is 1-based. + +* `column`: The column number in the generated source, or null. The + column number is 0-based. + +```js +consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 }) +// { line: 1, +// column: 56 } +``` + +#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition) + +Returns all generated line and column information for the original source, line, +and column provided. If no column is provided, returns all mappings +corresponding to a either the line we are searching for or the next closest line +that has any mappings. Otherwise, returns all mappings corresponding to the +given line and either the column we are searching for or the next closest column +that has any offsets. + +The only argument is an object with the following properties: + +* `source`: The filename of the original source. + +* `line`: The line number in the original source. The line number is + 1-based. + +* `column`: Optional. The column number in the original source. The + column number is 0-based. + +and an array of objects is returned, each with the following properties: + +* `line`: The line number in the generated source, or null. The line + number is 1-based. + +* `column`: The column number in the generated source, or null. The + column number is 0-based. + +```js +consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" }) +// [ { line: 2, +// column: 1 }, +// { line: 2, +// column: 10 }, +// { line: 2, +// column: 20 } ] +``` + +#### SourceMapConsumer.prototype.hasContentsOfAllSources() + +Return true if we have the embedded source content for every source listed in +the source map, false otherwise. + +In other words, if this method returns `true`, then +`consumer.sourceContentFor(s)` will succeed for every source `s` in +`consumer.sources`. + +```js +// ... +if (consumer.hasContentsOfAllSources()) { + consumerReadyCallback(consumer); +} else { + fetchSources(consumer, consumerReadyCallback); +} +// ... +``` + +#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing]) + +Returns the original source content for the source provided. The only +argument is the URL of the original source file. + +If the source content for the given source is not found, then an error is +thrown. Optionally, pass `true` as the second param to have `null` returned +instead. + +```js +consumer.sources +// [ "my-cool-lib.clj" ] + +consumer.sourceContentFor("my-cool-lib.clj") +// "..." + +consumer.sourceContentFor("this is not in the source map"); +// Error: "this is not in the source map" is not in the source map + +consumer.sourceContentFor("this is not in the source map", true); +// null +``` + +#### SourceMapConsumer.prototype.eachMapping(callback, context, order) + +Iterate over each mapping between an original source/line/column and a +generated line/column in this source map. + +* `callback`: The function that is called with each mapping. Mappings have the + form `{ source, generatedLine, generatedColumn, originalLine, originalColumn, + name }` + +* `context`: Optional. If specified, this object will be the value of `this` + every time that `callback` is called. + +* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or + `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over + the mappings sorted by the generated file's line/column order or the + original's source/line/column order, respectively. Defaults to + `SourceMapConsumer.GENERATED_ORDER`. + +```js +consumer.eachMapping(function (m) { console.log(m); }) +// ... +// { source: 'illmatic.js', +// generatedLine: 1, +// generatedColumn: 0, +// originalLine: 1, +// originalColumn: 0, +// name: null } +// { source: 'illmatic.js', +// generatedLine: 2, +// generatedColumn: 0, +// originalLine: 2, +// originalColumn: 0, +// name: null } +// ... +``` +### SourceMapGenerator + +An instance of the SourceMapGenerator represents a source map which is being +built incrementally. + +#### new SourceMapGenerator([startOfSourceMap]) + +You may pass an object with the following properties: + +* `file`: The filename of the generated source that this source map is + associated with. + +* `sourceRoot`: A root for all relative URLs in this source map. + +* `skipValidation`: Optional. When `true`, disables validation of mappings as + they are added. This can improve performance but should be used with + discretion, as a last resort. Even then, one should avoid using this flag when + running tests, if possible. + +```js +var generator = new sourceMap.SourceMapGenerator({ + file: "my-generated-javascript-file.js", + sourceRoot: "http://example.com/app/js/" +}); +``` + +#### SourceMapGenerator.fromSourceMap(sourceMapConsumer) + +Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance. + +* `sourceMapConsumer` The SourceMap. + +```js +var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer); +``` + +#### SourceMapGenerator.prototype.addMapping(mapping) + +Add a single mapping from original source line and column to the generated +source's line and column for this source map being created. The mapping object +should have the following properties: + +* `generated`: An object with the generated line and column positions. + +* `original`: An object with the original line and column positions. + +* `source`: The original source file (relative to the sourceRoot). + +* `name`: An optional original token name for this mapping. + +```js +generator.addMapping({ + source: "module-one.scm", + original: { line: 128, column: 0 }, + generated: { line: 3, column: 456 } +}) +``` + +#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent) + +Set the source content for an original source file. + +* `sourceFile` the URL of the original source file. + +* `sourceContent` the content of the source file. + +```js +generator.setSourceContent("module-one.scm", + fs.readFileSync("path/to/module-one.scm")) +``` + +#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]]) + +Applies a SourceMap for a source file to the SourceMap. +Each mapping to the supplied source file is rewritten using the +supplied SourceMap. Note: The resolution for the resulting mappings +is the minimum of this map and the supplied map. + +* `sourceMapConsumer`: The SourceMap to be applied. + +* `sourceFile`: Optional. The filename of the source file. + If omitted, sourceMapConsumer.file will be used, if it exists. + Otherwise an error will be thrown. + +* `sourceMapPath`: Optional. The dirname of the path to the SourceMap + to be applied. If relative, it is relative to the SourceMap. + + This parameter is needed when the two SourceMaps aren't in the same + directory, and the SourceMap to be applied contains relative source + paths. If so, those relative source paths need to be rewritten + relative to the SourceMap. + + If omitted, it is assumed that both SourceMaps are in the same directory, + thus not needing any rewriting. (Supplying `'.'` has the same effect.) + +#### SourceMapGenerator.prototype.toString() + +Renders the source map being generated to a string. + +```js +generator.toString() +// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}' +``` + +### SourceNode + +SourceNodes provide a way to abstract over interpolating and/or concatenating +snippets of generated JavaScript source code, while maintaining the line and +column information associated between those snippets and the original source +code. This is useful as the final intermediate representation a compiler might +use before outputting the generated JS and source map. + +#### new SourceNode([line, column, source[, chunk[, name]]]) + +* `line`: The original line number associated with this source node, or null if + it isn't associated with an original line. The line number is 1-based. + +* `column`: The original column number associated with this source node, or null + if it isn't associated with an original column. The column number + is 0-based. + +* `source`: The original source's filename; null if no filename is provided. + +* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see + below. + +* `name`: Optional. The original identifier. + +```js +var node = new SourceNode(1, 2, "a.cpp", [ + new SourceNode(3, 4, "b.cpp", "extern int status;\n"), + new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"), + new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"), +]); +``` + +#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath]) + +Creates a SourceNode from generated code and a SourceMapConsumer. + +* `code`: The generated code + +* `sourceMapConsumer` The SourceMap for the generated code + +* `relativePath` The optional path that relative sources in `sourceMapConsumer` + should be relative to. + +```js +var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8")); +var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"), + consumer); +``` + +#### SourceNode.prototype.add(chunk) + +Add a chunk of generated JS to this source node. + +* `chunk`: A string snippet of generated JS code, another instance of + `SourceNode`, or an array where each member is one of those things. + +```js +node.add(" + "); +node.add(otherNode); +node.add([leftHandOperandNode, " + ", rightHandOperandNode]); +``` + +#### SourceNode.prototype.prepend(chunk) + +Prepend a chunk of generated JS to this source node. + +* `chunk`: A string snippet of generated JS code, another instance of + `SourceNode`, or an array where each member is one of those things. + +```js +node.prepend("/** Build Id: f783haef86324gf **/\n\n"); +``` + +#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent) + +Set the source content for a source file. This will be added to the +`SourceMap` in the `sourcesContent` field. + +* `sourceFile`: The filename of the source file + +* `sourceContent`: The content of the source file + +```js +node.setSourceContent("module-one.scm", + fs.readFileSync("path/to/module-one.scm")) +``` + +#### SourceNode.prototype.walk(fn) + +Walk over the tree of JS snippets in this node and its children. The walking +function is called once for each snippet of JS and is passed that snippet and +the its original associated source's line/column location. + +* `fn`: The traversal function. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.walk(function (code, loc) { console.log("WALK:", code, loc); }) +// WALK: uno { source: 'b.js', line: 3, column: 4, name: null } +// WALK: dos { source: 'a.js', line: 1, column: 2, name: null } +// WALK: tres { source: 'a.js', line: 1, column: 2, name: null } +// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null } +``` + +#### SourceNode.prototype.walkSourceContents(fn) + +Walk over the tree of SourceNodes. The walking function is called for each +source file content and is passed the filename and source content. + +* `fn`: The traversal function. + +```js +var a = new SourceNode(1, 2, "a.js", "generated from a"); +a.setSourceContent("a.js", "original a"); +var b = new SourceNode(1, 2, "b.js", "generated from b"); +b.setSourceContent("b.js", "original b"); +var c = new SourceNode(1, 2, "c.js", "generated from c"); +c.setSourceContent("c.js", "original c"); + +var node = new SourceNode(null, null, null, [a, b, c]); +node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); }) +// WALK: a.js : original a +// WALK: b.js : original b +// WALK: c.js : original c +``` + +#### SourceNode.prototype.join(sep) + +Like `Array.prototype.join` except for SourceNodes. Inserts the separator +between each of this source node's children. + +* `sep`: The separator. + +```js +var lhs = new SourceNode(1, 2, "a.rs", "my_copy"); +var operand = new SourceNode(3, 4, "a.rs", "="); +var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()"); + +var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]); +var joinedNode = node.join(" "); +``` + +#### SourceNode.prototype.replaceRight(pattern, replacement) + +Call `String.prototype.replace` on the very right-most source snippet. Useful +for trimming white space from the end of a source node, etc. + +* `pattern`: The pattern to replace. + +* `replacement`: The thing to replace the pattern with. + +```js +// Trim trailing white space. +node.replaceRight(/\s*$/, ""); +``` + +#### SourceNode.prototype.toString() + +Return the string representation of this source node. Walks over the tree and +concatenates all the various snippets together to one string. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.toString() +// 'unodostresquatro' +``` + +#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap]) + +Returns the string representation of this tree of source nodes, plus a +SourceMapGenerator which contains all the mappings between the generated and +original sources. + +The arguments are the same as those to `new SourceMapGenerator`. + +```js +var node = new SourceNode(1, 2, "a.js", [ + new SourceNode(3, 4, "b.js", "uno"), + "dos", + [ + "tres", + new SourceNode(5, 6, "c.js", "quatro") + ] +]); + +node.toStringWithSourceMap({ file: "my-output-file.js" }) +// { code: 'unodostresquatro', +// map: [object SourceMapGenerator] } +``` diff --git a/node_modules/source-map/dist/source-map.debug.js b/node_modules/source-map/dist/source-map.debug.js new file mode 100644 index 000000000..aad0620d7 --- /dev/null +++ b/node_modules/source-map/dist/source-map.debug.js @@ -0,0 +1,3234 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var sourceRelative = sourceFile; + if (sourceRoot !== null) { + sourceRelative = util.relative(sourceRoot, sourceFile); + } + + if (!generator._sources.has(sourceRelative)) { + generator._sources.add(sourceRelative); + } + + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may 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. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || urlRegexp.test(aPath); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 === null) { + return 1; // aStr2 !== null + } + + if (aStr2 === null) { + return -1; // aStr1 !== null + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + /** + * Strip any JSON XSSI avoidance prefix from the string (as documented + * in the source maps specification), and then parse the string as + * JSON. + */ + function parseSourceMapInput(str) { + return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, '')); + } + exports.parseSourceMapInput = parseSourceMapInput; + + /** + * Compute the URL of a source given the the source root, the source's + * URL, and the source map's URL. + */ + function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { + sourceURL = sourceURL || ''; + + if (sourceRoot) { + // This follows what Chrome does. + if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') { + sourceRoot += '/'; + } + // The spec says: + // Line 4: An optional source root, useful for relocating source + // files on a server or removing repeated values in the + // “sources” entry. This value is prepended to the individual + // entries in the “source” field. + sourceURL = sourceRoot + sourceURL; + } + + // Historically, SourceMapConsumer did not take the sourceMapURL as + // a parameter. This mode is still somewhat supported, which is why + // this code block is conditional. However, it's preferable to pass + // the source map URL to SourceMapConsumer, so that this function + // can implement the source URL resolution algorithm as outlined in + // the spec. This block is basically the equivalent of: + // new URL(sourceURL, sourceMapURL).toString() + // ... except it avoids using URL, which wasn't available in the + // older releases of node still supported by this library. + // + // The spec says: + // If the sources are not absolute URLs after prepending of the + // “sourceRoot”, the sources are resolved relative to the + // SourceMap (like resolving script src in a html document). + if (sourceMapURL) { + var parsed = urlParse(sourceMapURL); + if (!parsed) { + throw new Error("sourceMapURL could not be parsed"); + } + if (parsed.path) { + // Strip the last path component, but keep the "/". + var index = parsed.path.lastIndexOf('/'); + if (index >= 0) { + parsed.path = parsed.path.substring(0, index + 1); + } + } + sourceURL = join(urlGenerate(parsed), sourceURL); + } + + return normalize(sourceURL); + } + exports.computeSourceURL = computeSourceURL; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) + : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number is 1-based. + * - column: Optional. the column number in the original source. + * The column number is 0-based. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The first parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this._absoluteSources = this._sources.toArray().map(function (s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Utility function to find the index of a source. Returns -1 if not + * found. + */ + BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + + // Maybe aSource is an absolute URL as returned by |sources|. In + // this case we can't simply undo the transform. + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + + return -1; + }; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @param String aSourceMapURL + * The URL at which the source map can be found (optional) + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function (s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._absoluteSources.slice(); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The first parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex] || ''; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex] || ''; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAxNjI0YzcyOTliODg3ZjdiZGY2NCIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEwQyxTQUFTO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hhQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBMkQ7QUFDM0QscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBOzs7Ozs7O0FDM0lBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLG9CQUFtQjtBQUNuQixxQkFBb0I7O0FBRXBCLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLGlCQUFnQjtBQUNoQixrQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDbEVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBMkIsUUFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWE7QUFDYjs7QUFFQTtBQUNBLGVBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDdmVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUN4SEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUM5RUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWEsa0NBQWtDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUErQyxtQkFBbUIsRUFBRTtBQUNwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBNkIsTUFBTTtBQUNuQztBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDLHNCQUFxQiwrQ0FBK0M7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0Esc0JBQXFCLDRCQUE0QjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3huQ0EsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUM5R0EsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNqSEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQSx1Q0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLFNBQVM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxZQUFXO0FBQ1g7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsNkNBQTRDLGNBQWM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQSxZQUFXO0FBQ1g7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQSxJQUFHOztBQUVILFdBQVU7QUFDVjs7QUFFQSIsImZpbGUiOiJzb3VyY2UtbWFwLmRlYnVnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInNvdXJjZU1hcFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuIFx0XHRcdGxvYWRlZDogZmFsc2VcbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAxNjI0YzcyOTliODg3ZjdiZGY2NCIsIi8qXG4gKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRS50eHQgb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmV4cG9ydHMuU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7XG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuZXhwb3J0cy5Tb3VyY2VOb2RlID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zb3VyY2UtbWFwLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgTWFwcGluZ0xpc3QgPSByZXF1aXJlKCcuL21hcHBpbmctbGlzdCcpLk1hcHBpbmdMaXN0O1xuXG4vKipcbiAqIEFuIGluc3RhbmNlIG9mIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IgcmVwcmVzZW50cyBhIHNvdXJjZSBtYXAgd2hpY2ggaXNcbiAqIGJlaW5nIGJ1aWx0IGluY3JlbWVudGFsbHkuIFlvdSBtYXkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBmaWxlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncykge1xuICBpZiAoIWFBcmdzKSB7XG4gICAgYUFyZ3MgPSB7fTtcbiAgfVxuICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gIHRoaXMuX3NvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdGhpcy5fc2tpcFZhbGlkYXRpb24gPSB1dGlsLmdldEFyZyhhQXJncywgJ3NraXBWYWxpZGF0aW9uJywgZmFsc2UpO1xuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX21hcHBpbmdzID0gbmV3IE1hcHBpbmdMaXN0KCk7XG4gIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG59XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU291cmNlTWFwR2VuZXJhdG9yIGJhc2VkIG9uIGEgU291cmNlTWFwQ29uc3VtZXJcbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgdmFyIHNvdXJjZVJvb3QgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlUm9vdDtcbiAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgIHNvdXJjZVJvb3Q6IHNvdXJjZVJvb3RcbiAgICB9KTtcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBuZXdNYXBwaW5nID0ge1xuICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG5ld01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5uYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGdlbmVyYXRvci5hZGRNYXBwaW5nKG5ld01hcHBpbmcpO1xuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBzb3VyY2VSZWxhdGl2ZSA9IHNvdXJjZUZpbGU7XG4gICAgICBpZiAoc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VSZWxhdGl2ZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VuZXJhdG9yLl9zb3VyY2VzLmhhcyhzb3VyY2VSZWxhdGl2ZSkpIHtcbiAgICAgICAgZ2VuZXJhdG9yLl9zb3VyY2VzLmFkZChzb3VyY2VSZWxhdGl2ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGdlbmVyYXRvci5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH07XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIG1hcHBpbmcgZnJvbSBvcmlnaW5hbCBzb3VyY2UgbGluZSBhbmQgY29sdW1uIHRvIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBmb3IgdGhpcyBzb3VyY2UgbWFwIGJlaW5nIGNyZWF0ZWQuIFRoZSBtYXBwaW5nXG4gKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBnZW5lcmF0ZWQ6IEFuIG9iamVjdCB3aXRoIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUgKHJlbGF0aXZlIHRvIHRoZSBzb3VyY2VSb290KS5cbiAqICAgLSBuYW1lOiBBbiBvcHRpb25hbCBvcmlnaW5hbCB0b2tlbiBuYW1lIGZvciB0aGlzIG1hcHBpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYWRkTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hZGRNYXBwaW5nKGFBcmdzKSB7XG4gICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgdmFyIG9yaWdpbmFsID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdvcmlnaW5hbCcsIG51bGwpO1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScsIG51bGwpO1xuICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICBpZiAoIXRoaXMuX3NraXBWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcHBpbmcoZ2VuZXJhdGVkLCBvcmlnaW5hbCwgc291cmNlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IFN0cmluZyhzb3VyY2UpO1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICAgIGlmICghdGhpcy5fbmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgZ2VuZXJhdGVkTGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IGdlbmVyYXRlZC5jb2x1bW4sXG4gICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiBvcmlnaW5hbCAhPSBudWxsICYmIG9yaWdpbmFsLmNvbHVtbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgbmFtZTogbmFtZVxuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHZhciBzb3VyY2UgPSBhU291cmNlRmlsZTtcbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIC8vIEFkZCB0aGUgc291cmNlIGNvbnRlbnQgdG8gdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwLlxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IF9zb3VyY2VzQ29udGVudHMgbWFwIGlmIHRoZSBwcm9wZXJ0eSBpcyBudWxsLlxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgc291cmNlIGZpbGUgZnJvbSB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBJZiB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAgaXMgZW1wdHksIHNldCB0aGUgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zb3VyY2VzQ29udGVudHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBtYXBwaW5ncyBvZiBhIHN1Yi1zb3VyY2UtbWFwIGZvciBhIHNwZWNpZmljIHNvdXJjZSBmaWxlIHRvIHRoZVxuICogc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQuIEVhY2ggbWFwcGluZyB0byB0aGUgc3VwcGxpZWQgc291cmNlIGZpbGUgaXNcbiAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICogcmVzdWx0aW5nIG1hcHBpbmdzIGlzIHRoZSBtaW5pbWl1bSBvZiB0aGlzIG1hcCBhbmQgdGhlIHN1cHBsaWVkIG1hcC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgT3B0aW9uYWwuIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuXG4gKiAgICAgICAgSWYgb21pdHRlZCwgU291cmNlTWFwQ29uc3VtZXIncyBmaWxlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAqICAgICAgICB0byBiZSBhcHBsaWVkLiBJZiByZWxhdGl2ZSwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcENvbnN1bWVyLlxuICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG5lZWRlZCB3aGVuIHRoZSB0d28gc291cmNlIG1hcHMgYXJlbid0IGluIHRoZSBzYW1lXG4gKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAqICAgICAgICBwYXRocy4gSWYgc28sIHRob3NlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBuZWVkIHRvIGJlIHJld3JpdHRlblxuICogICAgICAgIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYXBwbHlTb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyLCBhU291cmNlRmlsZSwgYVNvdXJjZU1hcFBhdGgpIHtcbiAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgIC8vIElmIGFTb3VyY2VGaWxlIGlzIG9taXR0ZWQsIHdlIHdpbGwgdXNlIHRoZSBmaWxlIHByb3BlcnR5IG9mIHRoZSBTb3VyY2VNYXBcbiAgICBpZiAoYVNvdXJjZUZpbGUgPT0gbnVsbCkge1xuICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgJyArXG4gICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgIH1cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgIH1cbiAgICAvLyBBcHBseWluZyB0aGUgU291cmNlTWFwIGNhbiBhZGQgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBzb3VyY2VzIGFuZFxuICAgIC8vIHRoZSBuYW1lcyBhcnJheS5cbiAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgIHZhciBuZXdOYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gICAgLy8gRmluZCBtYXBwaW5ncyBmb3IgdGhlIFwic291cmNlRmlsZVwiXG4gICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IHNvdXJjZUZpbGUgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgIT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCBjYW4gYmUgbWFwcGVkIGJ5IHRoZSBzb3VyY2UgbWFwLCB0aGVuIHVwZGF0ZSB0aGUgbWFwcGluZy5cbiAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29weSBtYXBwaW5nXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5qb2luKGFTb3VyY2VNYXBQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBvcmlnaW5hbC5saW5lO1xuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gb3JpZ2luYWwubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIG5ld1NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiAhbmV3TmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIG5ld05hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cblxuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXdTb3VyY2VzO1xuICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAvLyBDb3B5IHNvdXJjZXNDb250ZW50cyBvZiBhcHBsaWVkIG1hcC5cbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbi8qKlxuICogQSBtYXBwaW5nIGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhyZWUgbGV2ZWxzIG9mIGRhdGE6XG4gKlxuICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gKiAgIDIuIFRoZSBHZW5lcmF0ZWQgcG9zaXRpb24sIG9yaWdpbmFsIHBvc2l0aW9uLCBhbmQgb3JpZ2luYWwgc291cmNlLlxuICogICAzLiBHZW5lcmF0ZWQgYW5kIG9yaWdpbmFsIHBvc2l0aW9uLCBvcmlnaW5hbCBzb3VyY2UsIGFzIHdlbGwgYXMgYSBuYW1lXG4gKiAgICAgIHRva2VuLlxuICpcbiAqIFRvIG1haW50YWluIGNvbnNpc3RlbmN5LCB3ZSB2YWxpZGF0ZSB0aGF0IGFueSBuZXcgbWFwcGluZyBiZWluZyBhZGRlZCBmYWxsc1xuICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOYW1lKSB7XG4gICAgLy8gV2hlbiBhT3JpZ2luYWwgaXMgdHJ1dGh5IGJ1dCBoYXMgZW1wdHkgdmFsdWVzIGZvciAubGluZSBhbmQgLmNvbHVtbixcbiAgICAvLyBpdCBpcyBtb3N0IGxpa2VseSBhIHByb2dyYW1tZXIgZXJyb3IuIEluIHRoaXMgY2FzZSB3ZSB0aHJvdyBhIHZlcnlcbiAgICAvLyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHRvIHRyeSB0byBndWlkZSB0aGVtIHRoZSByaWdodCB3YXkuXG4gICAgLy8gRm9yIGV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyL3BvbHltZXItYnVuZGxlci9wdWxsLzUxOVxuICAgIGlmIChhT3JpZ2luYWwgJiYgdHlwZW9mIGFPcmlnaW5hbC5saW5lICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgYU9yaWdpbmFsLmNvbHVtbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ29yaWdpbmFsLmxpbmUgYW5kIG9yaWdpbmFsLmNvbHVtbiBhcmUgbm90IG51bWJlcnMgLS0geW91IHByb2JhYmx5IG1lYW50IHRvIG9taXQgJyArXG4gICAgICAgICAgICAndGhlIG9yaWdpbmFsIG1hcHBpbmcgZW50aXJlbHkgYW5kIG9ubHkgbWFwIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uIElmIHNvLCBwYXNzICcgK1xuICAgICAgICAgICAgJ251bGwgZm9yIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGluc3RlYWQgb2YgYW4gb2JqZWN0IHdpdGggZW1wdHkgb3IgbnVsbCB2YWx1ZXMuJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICYmICFhT3JpZ2luYWwgJiYgIWFTb3VyY2UgJiYgIWFOYW1lKSB7XG4gICAgICAvLyBDYXNlIDEuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbCAmJiAnbGluZScgaW4gYU9yaWdpbmFsICYmICdjb2x1bW4nIGluIGFPcmlnaW5hbFxuICAgICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAmJiBhU291cmNlKSB7XG4gICAgICAvLyBDYXNlcyAyIGFuZCAzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnZW5lcmF0ZWQ6IGFHZW5lcmF0ZWQsXG4gICAgICAgIHNvdXJjZTogYVNvdXJjZSxcbiAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgbmFtZTogYU5hbWVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICogc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UgbWFwIGZvcm1hdC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2VyaWFsaXplTWFwcGluZ3MoKSB7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbmV4dDtcbiAgICB2YXIgbWFwcGluZztcbiAgICB2YXIgbmFtZUlkeDtcbiAgICB2YXIgc291cmNlSWR4O1xuXG4gICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgbWFwcGluZyA9IG1hcHBpbmdzW2ldO1xuICAgICAgbmV4dCA9ICcnXG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgIHdoaWxlIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG5leHQgKz0gJzsnO1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkTGluZSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgaWYgKCF1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0ICs9ICcsJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlSWR4ID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKHNvdXJjZUlkeCAtIHByZXZpb3VzU291cmNlKTtcbiAgICAgICAgcHJldmlvdXNTb3VyY2UgPSBzb3VyY2VJZHg7XG5cbiAgICAgICAgLy8gbGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkIGluIFNvdXJjZU1hcCBzcGVjIHZlcnNpb24gM1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbExpbmUgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbExpbmUpO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMTtcblxuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuYW1lSWR4ID0gdGhpcy5fbmFtZXMuaW5kZXhPZihtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShuYW1lSWR4IC0gcHJldmlvdXNOYW1lKTtcbiAgICAgICAgICBwcmV2aW91c05hbWUgPSBuYW1lSWR4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSBuZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZ2VuZXJhdGVTb3VyY2VzQ29udGVudChhU291cmNlcywgYVNvdXJjZVJvb3QpIHtcbiAgICByZXR1cm4gYVNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZShhU291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cywga2V5KVxuICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgIDogbnVsbDtcbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBFeHRlcm5hbGl6ZSB0aGUgc291cmNlIG1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b0pTT04gPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9KU09OKCkge1xuICAgIHZhciBtYXAgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl92ZXJzaW9uLFxuICAgICAgc291cmNlczogdGhpcy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgbWFwcGluZ3M6IHRoaXMuX3NlcmlhbGl6ZU1hcHBpbmdzKClcbiAgICB9O1xuICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgIG1hcC5maWxlID0gdGhpcy5fZmlsZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbWFwLnNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICBtYXAuc291cmNlc0NvbnRlbnQgPSB0aGlzLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KG1hcC5zb3VyY2VzLCBtYXAuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfTtcblxuLyoqXG4gKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvU3RyaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2Jhc2U2NC12bHEuanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2Jhc2U2NC5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuLV0qKSg/OjooXFxkKykpPyguKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgdXJsUmVnZXhwLnRlc3QoYVBhdGgpO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMTsgLy8gYVN0cjIgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAtMTsgLy8gYVN0cjEgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuLyoqXG4gKiBTdHJpcCBhbnkgSlNPTiBYU1NJIGF2b2lkYW5jZSBwcmVmaXggZnJvbSB0aGUgc3RyaW5nIChhcyBkb2N1bWVudGVkXG4gKiBpbiB0aGUgc291cmNlIG1hcHMgc3BlY2lmaWNhdGlvbiksIGFuZCB0aGVuIHBhcnNlIHRoZSBzdHJpbmcgYXNcbiAqIEpTT04uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU291cmNlTWFwSW5wdXQoc3RyKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHN0ci5yZXBsYWNlKC9eXFwpXX0nW15cXG5dKlxcbi8sICcnKSk7XG59XG5leHBvcnRzLnBhcnNlU291cmNlTWFwSW5wdXQgPSBwYXJzZVNvdXJjZU1hcElucHV0O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIFVSTCBvZiBhIHNvdXJjZSBnaXZlbiB0aGUgdGhlIHNvdXJjZSByb290LCB0aGUgc291cmNlJ3NcbiAqIFVSTCwgYW5kIHRoZSBzb3VyY2UgbWFwJ3MgVVJMLlxuICovXG5mdW5jdGlvbiBjb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZVVSTCwgc291cmNlTWFwVVJMKSB7XG4gIHNvdXJjZVVSTCA9IHNvdXJjZVVSTCB8fCAnJztcblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIC8vIFRoaXMgZm9sbG93cyB3aGF0IENocm9tZSBkb2VzLlxuICAgIGlmIChzb3VyY2VSb290W3NvdXJjZVJvb3QubGVuZ3RoIC0gMV0gIT09ICcvJyAmJiBzb3VyY2VVUkxbMF0gIT09ICcvJykge1xuICAgICAgc291cmNlUm9vdCArPSAnLyc7XG4gICAgfVxuICAgIC8vIFRoZSBzcGVjIHNheXM6XG4gICAgLy8gICBMaW5lIDQ6IEFuIG9wdGlvbmFsIHNvdXJjZSByb290LCB1c2VmdWwgZm9yIHJlbG9jYXRpbmcgc291cmNlXG4gICAgLy8gICBmaWxlcyBvbiBhIHNlcnZlciBvciByZW1vdmluZyByZXBlYXRlZCB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gICDigJxzb3VyY2Vz4oCdIGVudHJ5LiAgVGhpcyB2YWx1ZSBpcyBwcmVwZW5kZWQgdG8gdGhlIGluZGl2aWR1YWxcbiAgICAvLyAgIGVudHJpZXMgaW4gdGhlIOKAnHNvdXJjZeKAnSBmaWVsZC5cbiAgICBzb3VyY2VVUkwgPSBzb3VyY2VSb290ICsgc291cmNlVVJMO1xuICB9XG5cbiAgLy8gSGlzdG9yaWNhbGx5LCBTb3VyY2VNYXBDb25zdW1lciBkaWQgbm90IHRha2UgdGhlIHNvdXJjZU1hcFVSTCBhc1xuICAvLyBhIHBhcmFtZXRlci4gIFRoaXMgbW9kZSBpcyBzdGlsbCBzb21ld2hhdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeVxuICAvLyB0aGlzIGNvZGUgYmxvY2sgaXMgY29uZGl0aW9uYWwuICBIb3dldmVyLCBpdCdzIHByZWZlcmFibGUgdG8gcGFzc1xuICAvLyB0aGUgc291cmNlIG1hcCBVUkwgdG8gU291cmNlTWFwQ29uc3VtZXIsIHNvIHRoYXQgdGhpcyBmdW5jdGlvblxuICAvLyBjYW4gaW1wbGVtZW50IHRoZSBzb3VyY2UgVVJMIHJlc29sdXRpb24gYWxnb3JpdGhtIGFzIG91dGxpbmVkIGluXG4gIC8vIHRoZSBzcGVjLiAgVGhpcyBibG9jayBpcyBiYXNpY2FsbHkgdGhlIGVxdWl2YWxlbnQgb2Y6XG4gIC8vICAgIG5ldyBVUkwoc291cmNlVVJMLCBzb3VyY2VNYXBVUkwpLnRvU3RyaW5nKClcbiAgLy8gLi4uIGV4Y2VwdCBpdCBhdm9pZHMgdXNpbmcgVVJMLCB3aGljaCB3YXNuJ3QgYXZhaWxhYmxlIGluIHRoZVxuICAvLyBvbGRlciByZWxlYXNlcyBvZiBub2RlIHN0aWxsIHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnkuXG4gIC8vXG4gIC8vIFRoZSBzcGVjIHNheXM6XG4gIC8vICAgSWYgdGhlIHNvdXJjZXMgYXJlIG5vdCBhYnNvbHV0ZSBVUkxzIGFmdGVyIHByZXBlbmRpbmcgb2YgdGhlXG4gIC8vICAg4oCcc291cmNlUm9vdOKAnSwgdGhlIHNvdXJjZXMgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZVxuICAvLyAgIFNvdXJjZU1hcCAobGlrZSByZXNvbHZpbmcgc2NyaXB0IHNyYyBpbiBhIGh0bWwgZG9jdW1lbnQpLlxuICBpZiAoc291cmNlTWFwVVJMKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybFBhcnNlKHNvdXJjZU1hcFVSTCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNvdXJjZU1hcFVSTCBjb3VsZCBub3QgYmUgcGFyc2VkXCIpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBhdGgpIHtcbiAgICAgIC8vIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LCBidXQga2VlcCB0aGUgXCIvXCIuXG4gICAgICB2YXIgaW5kZXggPSBwYXJzZWQucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBwYXJzZWQucGF0aC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlVVJMID0gam9pbih1cmxHZW5lcmF0ZShwYXJzZWQpLCBzb3VyY2VVUkwpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShzb3VyY2VVUkwpO1xufVxuZXhwb3J0cy5jb21wdXRlU291cmNlVVJMID0gY29tcHV0ZVNvdXJjZVVSTDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgc291cmNlID0gdXRpbC5jb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChuZWVkbGUuc291cmNlKTtcbiAgICBpZiAobmVlZGxlLnNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBUaGUgc2Vjb25kIHBhcmFtZXRlciwgaWYgZ2l2ZW4sIGlzIGEgc3RyaW5nIHdob3NlIHZhbHVlIGlzIHRoZSBVUkxcbiAqIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIHdhcyBmb3VuZC4gIFRoaXMgVVJMIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGVcbiAqIHNvdXJjZXMgYXJyYXkuXG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIHNvdXJjZVJvb3QgPSB1dGlsLm5vcm1hbGl6ZShzb3VyY2VSb290KTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuX2Fic29sdXRlU291cmNlcyA9IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgIHJldHVybiB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc291cmNlUm9vdCwgcywgYVNvdXJjZU1hcFVSTCk7XG4gIH0pO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZmluZCB0aGUgaW5kZXggb2YgYSBzb3VyY2UuICBSZXR1cm5zIC0xIGlmIG5vdFxuICogZm91bmQuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kU291cmNlSW5kZXggPSBmdW5jdGlvbihhU291cmNlKSB7XG4gIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgIHJlbGF0aXZlU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhyZWxhdGl2ZVNvdXJjZSkpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy5pbmRleE9mKHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIC8vIE1heWJlIGFTb3VyY2UgaXMgYW4gYWJzb2x1dGUgVVJMIGFzIHJldHVybmVkIGJ5IHxzb3VyY2VzfC4gIEluXG4gIC8vIHRoaXMgY2FzZSB3ZSBjYW4ndCBzaW1wbHkgdW5kbyB0aGUgdHJhbnNmb3JtLlxuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0aGlzLl9hYnNvbHV0ZVNvdXJjZXNbaV0gPT0gYVNvdXJjZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHBhcmFtIFN0cmluZyBhU291cmNlTWFwVVJMXG4gKiAgICAgICAgVGhlIFVSTCBhdCB3aGljaCB0aGUgc291cmNlIG1hcCBjYW4gYmUgZm91bmQgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuICAgIHNtYy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgICBzbWMuX2Fic29sdXRlU291cmNlcyA9IHNtYy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdXRpbC5jb21wdXRlU291cmNlVVJMKHNtYy5zb3VyY2VSb290LCBzLCBhU291cmNlTWFwVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlU291cmNlcy5zbGljZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwodGhpcy5zb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChhU291cmNlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbaW5kZXhdO1xuICAgIH1cblxuICAgIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICByZWxhdGl2ZVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCByZWxhdGl2ZVNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSByZWxhdGl2ZVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgcmVsYXRpdmVTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIHJlbGF0aXZlU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgcmVsYXRpdmVTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgc291cmNlID0gdGhpcy5fZmluZFNvdXJjZUluZGV4KHNvdXJjZSk7XG4gICAgaWYgKHNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogVGhlIHNlY29uZCBwYXJhbWV0ZXIsIGlmIGdpdmVuLCBpcyBhIHN0cmluZyB3aG9zZSB2YWx1ZSBpcyB0aGUgVVJMXG4gKiBhdCB3aGljaCB0aGUgc291cmNlIG1hcCB3YXMgZm91bmQuICBUaGlzIFVSTCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlXG4gKiBzb3VyY2VzIGFycmF5LlxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSwgYVNvdXJjZU1hcFVSTClcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBjb2x1bW5cbiAqICAgICBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuIFxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gbnVsbDtcbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gfHwgJyc7XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdIHx8ICcnO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/node_modules/source-map/dist/source-map.js b/node_modules/source-map/dist/source-map.js new file mode 100644 index 000000000..b4eb08742 --- /dev/null +++ b/node_modules/source-map/dist/source-map.js @@ -0,0 +1,3233 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var sourceRelative = sourceFile; + if (sourceRoot !== null) { + sourceRelative = util.relative(sourceRoot, sourceFile); + } + + if (!generator._sources.has(sourceRelative)) { + generator._sources.add(sourceRelative); + } + + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may 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. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || urlRegexp.test(aPath); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 === null) { + return 1; // aStr2 !== null + } + + if (aStr2 === null) { + return -1; // aStr1 !== null + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + /** + * Strip any JSON XSSI avoidance prefix from the string (as documented + * in the source maps specification), and then parse the string as + * JSON. + */ + function parseSourceMapInput(str) { + return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, '')); + } + exports.parseSourceMapInput = parseSourceMapInput; + + /** + * Compute the URL of a source given the the source root, the source's + * URL, and the source map's URL. + */ + function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { + sourceURL = sourceURL || ''; + + if (sourceRoot) { + // This follows what Chrome does. + if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') { + sourceRoot += '/'; + } + // The spec says: + // Line 4: An optional source root, useful for relocating source + // files on a server or removing repeated values in the + // “sources” entry. This value is prepended to the individual + // entries in the “source” field. + sourceURL = sourceRoot + sourceURL; + } + + // Historically, SourceMapConsumer did not take the sourceMapURL as + // a parameter. This mode is still somewhat supported, which is why + // this code block is conditional. However, it's preferable to pass + // the source map URL to SourceMapConsumer, so that this function + // can implement the source URL resolution algorithm as outlined in + // the spec. This block is basically the equivalent of: + // new URL(sourceURL, sourceMapURL).toString() + // ... except it avoids using URL, which wasn't available in the + // older releases of node still supported by this library. + // + // The spec says: + // If the sources are not absolute URLs after prepending of the + // “sourceRoot”, the sources are resolved relative to the + // SourceMap (like resolving script src in a html document). + if (sourceMapURL) { + var parsed = urlParse(sourceMapURL); + if (!parsed) { + throw new Error("sourceMapURL could not be parsed"); + } + if (parsed.path) { + // Strip the last path component, but keep the "/". + var index = parsed.path.lastIndexOf('/'); + if (index >= 0) { + parsed.path = parsed.path.substring(0, index + 1); + } + } + sourceURL = join(urlGenerate(parsed), sourceURL); + } + + return normalize(sourceURL); + } + exports.computeSourceURL = computeSourceURL; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) + : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number is 1-based. + * - column: Optional. the column number in the original source. + * The column number is 0-based. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The first parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this._absoluteSources = this._sources.toArray().map(function (s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Utility function to find the index of a source. Returns -1 if not + * found. + */ + BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + + // Maybe aSource is an absolute URL as returned by |sources|. In + // this case we can't simply undo the transform. + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + + return -1; + }; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @param String aSourceMapURL + * The URL at which the source map can be found (optional) + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function (s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._absoluteSources.slice(); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The first parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex] || ''; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex] || ''; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/node_modules/source-map/dist/source-map.min.js b/node_modules/source-map/dist/source-map.min.js new file mode 100644 index 000000000..c7c72dad8 --- /dev/null +++ b/node_modules/source-map/dist/source-map.min.js @@ -0,0 +1,2 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(t){var o=t;null!==n&&(o=i.relative(n,t)),r._sources.has(o)||r._sources.add(o);var s=e.sourceContentFor(t);null!=s&&r.setSourceContent(t,s)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(y))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=f(e.source,n.source);return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:f(e.name,n.name)))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=f(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:f(e.name,n.name)))))}function f(e,n){return e===n?0:null===e?1:null===n?-1:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}function m(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}function _(e,n,r){if(n=n||"",e&&("/"!==e[e.length-1]&&"/"!==n[0]&&(e+="/"),n=e+n),r){var a=t(r);if(!a)throw new Error("sourceMapURL could not be parsed");if(a.path){var u=a.path.lastIndexOf("/");u>=0&&(a.path=a.path.substring(0,u+1))}n=s(o(a),n)}return i(n)}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,y=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||v.test(e)},n.relative=a;var C=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=C?u:l,n.fromSetString=C?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d,n.parseSourceMapInput=m,n.computeSourceURL=_},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e,n){var r=e;return"string"==typeof e&&(r=a.parseSourceMapInput(e)),null!=r.sections?new s(r,n):new o(r,n)}function o(e,n){var r=e;"string"==typeof e&&(r=a.parseSourceMapInput(e));var t=a.getArg(r,"version"),o=a.getArg(r,"sources"),i=a.getArg(r,"names",[]),s=a.getArg(r,"sourceRoot",null),u=a.getArg(r,"sourcesContent",null),c=a.getArg(r,"mappings"),g=a.getArg(r,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);s&&(s=a.normalize(s)),o=o.map(String).map(a.normalize).map(function(e){return s&&a.isAbsolute(s)&&a.isAbsolute(e)?a.relative(s,e):e}),this._names=l.fromArray(i.map(String),!0),this._sources=l.fromArray(o,!0),this._absoluteSources=this._sources.toArray().map(function(e){return a.computeSourceURL(s,e,n)}),this.sourceRoot=s,this.sourcesContent=u,this._mappings=c,this._sourceMapURL=n,this.file=g}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e,n){var r=e;"string"==typeof e&&(r=a.parseSourceMapInput(e));var o=a.getArg(r,"version"),i=a.getArg(r,"sections");if(o!=this._version)throw new Error("Unsupported version: "+o);this._sources=new l,this._names=new l;var s={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var r=a.getArg(e,"offset"),o=a.getArg(r,"line"),i=a.getArg(r,"column");if(o=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.prototype._findSourceIndex=function(e){var n=e;if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),this._sources.has(n))return this._sources.indexOf(n);var r;for(r=0;r1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),A.push(r),"number"==typeof r.originalLine&&S.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(S,a.compareByOriginalPositions),this.__originalMappings=S},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),i=a.computeSourceURL(this.sourceRoot,i,this._sourceMapURL));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;var r=this._findSourceIndex(e);if(r>=0)return this.sourcesContent[r];var t=e;null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t));var o;if(null!=this.sourceRoot&&(o=a.urlParse(this.sourceRoot))){var i=t.replace(/^file:\/\//,"");if("file"==o.scheme&&this._sources.has(i))return this.sourcesContent[this._sources.indexOf(i)];if((!o.path||"/"==o.path)&&this._sources.has("/"+t))return this.sourcesContent[this._sources.indexOf("/"+t)]}if(n)return null;throw new Error('"'+t+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(n=this._findSourceIndex(n),n<0)return{line:null,column:null,lastColumn:null};var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 === null) {\n\t return 1; // aStr2 !== null\n\t }\n\t\n\t if (aStr2 === null) {\n\t return -1; // aStr1 !== null\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\t\n\t/**\n\t * Strip any JSON XSSI avoidance prefix from the string (as documented\n\t * in the source maps specification), and then parse the string as\n\t * JSON.\n\t */\n\tfunction parseSourceMapInput(str) {\n\t return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n\t}\n\texports.parseSourceMapInput = parseSourceMapInput;\n\t\n\t/**\n\t * Compute the URL of a source given the the source root, the source's\n\t * URL, and the source map's URL.\n\t */\n\tfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n\t sourceURL = sourceURL || '';\n\t\n\t if (sourceRoot) {\n\t // This follows what Chrome does.\n\t if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n\t sourceRoot += '/';\n\t }\n\t // The spec says:\n\t // Line 4: An optional source root, useful for relocating source\n\t // files on a server or removing repeated values in the\n\t // “sources” entry. This value is prepended to the individual\n\t // entries in the “source” field.\n\t sourceURL = sourceRoot + sourceURL;\n\t }\n\t\n\t // Historically, SourceMapConsumer did not take the sourceMapURL as\n\t // a parameter. This mode is still somewhat supported, which is why\n\t // this code block is conditional. However, it's preferable to pass\n\t // the source map URL to SourceMapConsumer, so that this function\n\t // can implement the source URL resolution algorithm as outlined in\n\t // the spec. This block is basically the equivalent of:\n\t // new URL(sourceURL, sourceMapURL).toString()\n\t // ... except it avoids using URL, which wasn't available in the\n\t // older releases of node still supported by this library.\n\t //\n\t // The spec says:\n\t // If the sources are not absolute URLs after prepending of the\n\t // “sourceRoot”, the sources are resolved relative to the\n\t // SourceMap (like resolving script src in a html document).\n\t if (sourceMapURL) {\n\t var parsed = urlParse(sourceMapURL);\n\t if (!parsed) {\n\t throw new Error(\"sourceMapURL could not be parsed\");\n\t }\n\t if (parsed.path) {\n\t // Strip the last path component, but keep the \"/\".\n\t var index = parsed.path.lastIndexOf('/');\n\t if (index >= 0) {\n\t parsed.path = parsed.path.substring(0, index + 1);\n\t }\n\t }\n\t sourceURL = join(urlGenerate(parsed), sourceURL);\n\t }\n\t\n\t return normalize(sourceURL);\n\t}\n\texports.computeSourceURL = computeSourceURL;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = util.parseSourceMapInput(aSourceMap);\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n\t : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t configurable: true,\n\t enumerable: true,\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t configurable: true,\n\t enumerable: true,\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source. The line number is 1-based.\n\t * - column: Optional. the column number in the original source.\n\t * The column number is 0-based.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the generated source, or null.\n\t * The column number is 0-based.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t needle.source = this._findSourceIndex(needle.source);\n\t if (needle.source < 0) {\n\t return [];\n\t }\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The first parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found. This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = util.parseSourceMapInput(aSourceMap);\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t if (sourceRoot) {\n\t sourceRoot = util.normalize(sourceRoot);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this._absoluteSources = this._sources.toArray().map(function (s) {\n\t return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n\t });\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this._sourceMapURL = aSourceMapURL;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Utility function to find the index of a source. Returns -1 if not\n\t * found.\n\t */\n\tBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n\t var relativeSource = aSource;\n\t if (this.sourceRoot != null) {\n\t relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t }\n\t\n\t if (this._sources.has(relativeSource)) {\n\t return this._sources.indexOf(relativeSource);\n\t }\n\t\n\t // Maybe aSource is an absolute URL as returned by |sources|. In\n\t // this case we can't simply undo the transform.\n\t var i;\n\t for (i = 0; i < this._absoluteSources.length; ++i) {\n\t if (this._absoluteSources[i] == aSource) {\n\t return i;\n\t }\n\t }\n\t\n\t return -1;\n\t};\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @param String aSourceMapURL\n\t * The URL at which the source map can be found (optional)\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t smc._sourceMapURL = aSourceMapURL;\n\t smc._absoluteSources = smc._sources.toArray().map(function (s) {\n\t return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n\t });\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._absoluteSources.slice();\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source. The line number\n\t * is 1-based.\n\t * - column: The column number in the generated source. The column\n\t * number is 0-based.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the original source, or null. The\n\t * column number is 0-based.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t var index = this._findSourceIndex(aSource);\n\t if (index >= 0) {\n\t return this.sourcesContent[index];\n\t }\n\t\n\t var relativeSource = aSource;\n\t if (this.sourceRoot != null) {\n\t relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + relativeSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source. The line number\n\t * is 1-based.\n\t * - column: The column number in the original source. The column\n\t * number is 0-based.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the generated source, or null.\n\t * The column number is 0-based.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t source = this._findSourceIndex(source);\n\t if (source < 0) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The first parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found. This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = util.parseSourceMapInput(aSourceMap);\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source. The line number\n\t * is 1-based.\n\t * - column: The column number in the generated source. The column\n\t * number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the original source, or null. The\n\t * column number is 0-based.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source. The line number\n\t * is 1-based.\n\t * - column: The column number in the original source. The column\n\t * number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null. The\n\t * line number is 1-based. \n\t * - column: The column number in the generated source, or null.\n\t * The column number is 0-based.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = null;\n\t if (mapping.name) {\n\t name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t }\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex] || '';\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex] || '';\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0fd5815da764db5fb9fe","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written 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\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/source-map/lib/array-set.js b/node_modules/source-map/lib/array-set.js new file mode 100644 index 000000000..fbd5c81ca --- /dev/null +++ b/node_modules/source-map/lib/array-set.js @@ -0,0 +1,121 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var has = Object.prototype.hasOwnProperty; +var hasNativeMap = typeof Map !== "undefined"; + +/** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ +function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); +} + +/** + * Static method for creating ArraySet instances from an existing array. + */ +ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; +}; + +/** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ +ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); +}; + +/** + * What is the element at the given index? + * + * @param Number aIdx + */ +ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); +}; + +/** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ +ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); +}; + +exports.ArraySet = ArraySet; diff --git a/node_modules/source-map/lib/base64-vlq.js b/node_modules/source-map/lib/base64-vlq.js new file mode 100644 index 000000000..612b40401 --- /dev/null +++ b/node_modules/source-map/lib/base64-vlq.js @@ -0,0 +1,140 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the names of its + * contributors may 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. + */ + +var base64 = require('./base64'); + +// A single base 64 digit can contain 6 bits of data. For the base 64 variable +// length quantities we use in the source map spec, the first bit is the sign, +// the next four bits are the actual value, and the 6th bit is the +// continuation bit. The continuation bit tells us whether there are more +// digits in this value following this digit. +// +// Continuation +// | Sign +// | | +// V V +// 101011 + +var VLQ_BASE_SHIFT = 5; + +// binary: 100000 +var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + +// binary: 011111 +var VLQ_BASE_MASK = VLQ_BASE - 1; + +// binary: 100000 +var VLQ_CONTINUATION_BIT = VLQ_BASE; + +/** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ +function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; +} + +/** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ +function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; +} + +/** + * Returns the base 64 VLQ encoded value. + */ +exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; +}; + +/** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ +exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; +}; diff --git a/node_modules/source-map/lib/base64.js b/node_modules/source-map/lib/base64.js new file mode 100644 index 000000000..8aa86b302 --- /dev/null +++ b/node_modules/source-map/lib/base64.js @@ -0,0 +1,67 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + +/** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ +exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); +}; + +/** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ +exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; +}; diff --git a/node_modules/source-map/lib/binary-search.js b/node_modules/source-map/lib/binary-search.js new file mode 100644 index 000000000..010ac941e --- /dev/null +++ b/node_modules/source-map/lib/binary-search.js @@ -0,0 +1,111 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +exports.GREATEST_LOWER_BOUND = 1; +exports.LEAST_UPPER_BOUND = 2; + +/** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ +function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } +} + +/** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ +exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; +}; diff --git a/node_modules/source-map/lib/mapping-list.js b/node_modules/source-map/lib/mapping-list.js new file mode 100644 index 000000000..06d1274a0 --- /dev/null +++ b/node_modules/source-map/lib/mapping-list.js @@ -0,0 +1,79 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); + +/** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ +function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; +} + +/** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ +function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; +} + +/** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ +MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + +/** + * Add the given source mapping. + * + * @param Object aMapping + */ +MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } +}; + +/** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ +MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; +}; + +exports.MappingList = MappingList; diff --git a/node_modules/source-map/lib/quick-sort.js b/node_modules/source-map/lib/quick-sort.js new file mode 100644 index 000000000..6a7caadbb --- /dev/null +++ b/node_modules/source-map/lib/quick-sort.js @@ -0,0 +1,114 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; diff --git a/node_modules/source-map/lib/source-map-consumer.js b/node_modules/source-map/lib/source-map-consumer.js new file mode 100644 index 000000000..7b99d1da7 --- /dev/null +++ b/node_modules/source-map/lib/source-map-consumer.js @@ -0,0 +1,1145 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var binarySearch = require('./binary-search'); +var ArraySet = require('./array-set').ArraySet; +var base64VLQ = require('./base64-vlq'); +var quickSort = require('./quick-sort').quickSort; + +function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) + : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); +} + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number is 1-based. + * - column: Optional. the column number in the original source. + * The column number is 0-based. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +exports.SourceMapConsumer = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The first parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this._absoluteSources = this._sources.toArray().map(function (s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Utility function to find the index of a source. Returns -1 if not + * found. + */ +BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + + // Maybe aSource is an absolute URL as returned by |sources|. In + // this case we can't simply undo the transform. + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + + return -1; +}; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @param String aSourceMapURL + * The URL at which the source map can be found (optional) + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function (s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._absoluteSources.slice(); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The first parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + +exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; diff --git a/node_modules/source-map/lib/source-map-generator.js b/node_modules/source-map/lib/source-map-generator.js new file mode 100644 index 000000000..508bcfbbc --- /dev/null +++ b/node_modules/source-map/lib/source-map-generator.js @@ -0,0 +1,425 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var base64VLQ = require('./base64-vlq'); +var util = require('./util'); +var ArraySet = require('./array-set').ArraySet; +var MappingList = require('./mapping-list').MappingList; + +/** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ +function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; +} + +SourceMapGenerator.prototype._version = 3; + +/** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ +SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var sourceRelative = sourceFile; + if (sourceRoot !== null) { + sourceRelative = util.relative(sourceRoot, sourceFile); + } + + if (!generator._sources.has(sourceRelative)) { + generator._sources.add(sourceRelative); + } + + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + +/** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ +SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + +/** + * Set the source content for a source file. + */ +SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + +/** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ +SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + +/** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ +SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + +/** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ +SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + +SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + +/** + * Externalize the source map. + */ +SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + +/** + * Render the source map being generated to a string. + */ +SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + +exports.SourceMapGenerator = SourceMapGenerator; diff --git a/node_modules/source-map/lib/source-node.js b/node_modules/source-map/lib/source-node.js new file mode 100644 index 000000000..8bcdbe385 --- /dev/null +++ b/node_modules/source-map/lib/source-node.js @@ -0,0 +1,413 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; +var util = require('./util'); + +// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other +// operating systems these days (capturing the result). +var REGEX_NEWLINE = /(\r?\n)/; + +// Newline character code for charCodeAt() comparisons +var NEWLINE_CODE = 10; + +// Private symbol for identifying `SourceNode`s when multiple versions of +// the source-map library are loaded. This MUST NOT CHANGE across +// versions! +var isSourceNode = "$$$isSourceNode$$$"; + +/** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ +function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); +} + +/** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ +SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex] || ''; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex] || ''; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + +/** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } +}; + +/** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ +SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; +}; + +/** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ +SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; +}; + +/** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ +SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + +/** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + +/** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ +SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; +}; + +/** + * Returns the string representation of this source node along with a source + * map. + */ +SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; +}; + +exports.SourceNode = SourceNode; diff --git a/node_modules/source-map/lib/util.js b/node_modules/source-map/lib/util.js new file mode 100644 index 000000000..3ca92e56f --- /dev/null +++ b/node_modules/source-map/lib/util.js @@ -0,0 +1,488 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ +function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } +} +exports.getArg = getArg; + +var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; +var dataUrlRegexp = /^data:.+\,.+$/; + +function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; +} +exports.urlParse = urlParse; + +function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; +} +exports.urlGenerate = urlGenerate; + +/** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ +function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; +} +exports.normalize = normalize; + +/** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ +function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; +} +exports.join = join; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || urlRegexp.test(aPath); +}; + +/** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ +function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); +} +exports.relative = relative; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ +function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ +function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByOriginalPositions = compareByOriginalPositions; + +/** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ +function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + +function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 === null) { + return 1; // aStr2 !== null + } + + if (aStr2 === null) { + return -1; // aStr1 !== null + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; +} + +/** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ +function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + +/** + * Strip any JSON XSSI avoidance prefix from the string (as documented + * in the source maps specification), and then parse the string as + * JSON. + */ +function parseSourceMapInput(str) { + return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, '')); +} +exports.parseSourceMapInput = parseSourceMapInput; + +/** + * Compute the URL of a source given the the source root, the source's + * URL, and the source map's URL. + */ +function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { + sourceURL = sourceURL || ''; + + if (sourceRoot) { + // This follows what Chrome does. + if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') { + sourceRoot += '/'; + } + // The spec says: + // Line 4: An optional source root, useful for relocating source + // files on a server or removing repeated values in the + // “sources” entry. This value is prepended to the individual + // entries in the “source” field. + sourceURL = sourceRoot + sourceURL; + } + + // Historically, SourceMapConsumer did not take the sourceMapURL as + // a parameter. This mode is still somewhat supported, which is why + // this code block is conditional. However, it's preferable to pass + // the source map URL to SourceMapConsumer, so that this function + // can implement the source URL resolution algorithm as outlined in + // the spec. This block is basically the equivalent of: + // new URL(sourceURL, sourceMapURL).toString() + // ... except it avoids using URL, which wasn't available in the + // older releases of node still supported by this library. + // + // The spec says: + // If the sources are not absolute URLs after prepending of the + // “sourceRoot”, the sources are resolved relative to the + // SourceMap (like resolving script src in a html document). + if (sourceMapURL) { + var parsed = urlParse(sourceMapURL); + if (!parsed) { + throw new Error("sourceMapURL could not be parsed"); + } + if (parsed.path) { + // Strip the last path component, but keep the "/". + var index = parsed.path.lastIndexOf('/'); + if (index >= 0) { + parsed.path = parsed.path.substring(0, index + 1); + } + } + sourceURL = join(urlGenerate(parsed), sourceURL); + } + + return normalize(sourceURL); +} +exports.computeSourceURL = computeSourceURL; diff --git a/node_modules/source-map/package.json b/node_modules/source-map/package.json new file mode 100644 index 000000000..24663417e --- /dev/null +++ b/node_modules/source-map/package.json @@ -0,0 +1,73 @@ +{ + "name": "source-map", + "description": "Generates and consumes source maps", + "version": "0.6.1", + "homepage": "https://github.com/mozilla/source-map", + "author": "Nick Fitzgerald ", + "contributors": [ + "Tobias Koppers ", + "Duncan Beevers ", + "Stephen Crane ", + "Ryan Seddon ", + "Miles Elam ", + "Mihai Bazon ", + "Michael Ficarra ", + "Todd Wolfson ", + "Alexander Solovyov ", + "Felix Gnass ", + "Conrad Irwin ", + "usrbincc ", + "David Glasser ", + "Chase Douglas ", + "Evan Wallace ", + "Heather Arthur ", + "Hugh Kennedy ", + "David Glasser ", + "Simon Lydell ", + "Jmeas Smith ", + "Michael Z Goddard ", + "azu ", + "John Gozde ", + "Adam Kirkton ", + "Chris Montgomery ", + "J. Ryan Stinnett ", + "Jack Herrington ", + "Chris Truter ", + "Daniel Espeset ", + "Jamie Wong ", + "Eddy Bruël ", + "Hawken Rives ", + "Gilad Peleg ", + "djchie ", + "Gary Ye ", + "Nicolas Lalevée " + ], + "repository": { + "type": "git", + "url": "http://github.com/mozilla/source-map.git" + }, + "main": "./source-map.js", + "files": [ + "source-map.js", + "source-map.d.ts", + "lib/", + "dist/source-map.debug.js", + "dist/source-map.js", + "dist/source-map.min.js", + "dist/source-map.min.js.map" + ], + "engines": { + "node": ">=0.10.0" + }, + "license": "BSD-3-Clause", + "scripts": { + "test": "npm run build && node test/run-tests.js", + "build": "webpack --color", + "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" + }, + "devDependencies": { + "doctoc": "^0.15.0", + "webpack": "^1.12.0" + }, + "typings": "source-map" +} diff --git a/node_modules/source-map/source-map.d.ts b/node_modules/source-map/source-map.d.ts new file mode 100644 index 000000000..8f972b0cf --- /dev/null +++ b/node_modules/source-map/source-map.d.ts @@ -0,0 +1,98 @@ +export interface StartOfSourceMap { + file?: string; + sourceRoot?: string; +} + +export interface RawSourceMap extends StartOfSourceMap { + version: string; + sources: string[]; + names: string[]; + sourcesContent?: string[]; + mappings: string; +} + +export interface Position { + line: number; + column: number; +} + +export interface LineRange extends Position { + lastColumn: number; +} + +export interface FindPosition extends Position { + // SourceMapConsumer.GREATEST_LOWER_BOUND or SourceMapConsumer.LEAST_UPPER_BOUND + bias?: number; +} + +export interface SourceFindPosition extends FindPosition { + source: string; +} + +export interface MappedPosition extends Position { + source: string; + name?: string; +} + +export interface MappingItem { + source: string; + generatedLine: number; + generatedColumn: number; + originalLine: number; + originalColumn: number; + name: string; +} + +export class SourceMapConsumer { + static GENERATED_ORDER: number; + static ORIGINAL_ORDER: number; + + static GREATEST_LOWER_BOUND: number; + static LEAST_UPPER_BOUND: number; + + constructor(rawSourceMap: RawSourceMap); + computeColumnSpans(): void; + originalPositionFor(generatedPosition: FindPosition): MappedPosition; + generatedPositionFor(originalPosition: SourceFindPosition): LineRange; + allGeneratedPositionsFor(originalPosition: MappedPosition): Position[]; + hasContentsOfAllSources(): boolean; + sourceContentFor(source: string, returnNullOnMissing?: boolean): string; + eachMapping(callback: (mapping: MappingItem) => void, context?: any, order?: number): void; +} + +export interface Mapping { + generated: Position; + original: Position; + source: string; + name?: string; +} + +export class SourceMapGenerator { + constructor(startOfSourceMap?: StartOfSourceMap); + static fromSourceMap(sourceMapConsumer: SourceMapConsumer): SourceMapGenerator; + addMapping(mapping: Mapping): void; + setSourceContent(sourceFile: string, sourceContent: string): void; + applySourceMap(sourceMapConsumer: SourceMapConsumer, sourceFile?: string, sourceMapPath?: string): void; + toString(): string; +} + +export interface CodeWithSourceMap { + code: string; + map: SourceMapGenerator; +} + +export class SourceNode { + constructor(); + constructor(line: number, column: number, source: string); + constructor(line: number, column: number, source: string, chunk?: string, name?: string); + static fromStringWithSourceMap(code: string, sourceMapConsumer: SourceMapConsumer, relativePath?: string): SourceNode; + add(chunk: string): void; + prepend(chunk: string): void; + setSourceContent(sourceFile: string, sourceContent: string): void; + walk(fn: (chunk: string, mapping: MappedPosition) => void): void; + walkSourceContents(fn: (file: string, content: string) => void): void; + join(sep: string): SourceNode; + replaceRight(pattern: string, replacement: string): SourceNode; + toString(): string; + toStringWithSourceMap(startOfSourceMap?: StartOfSourceMap): CodeWithSourceMap; +} diff --git a/node_modules/source-map/source-map.js b/node_modules/source-map/source-map.js new file mode 100644 index 000000000..bc88fe820 --- /dev/null +++ b/node_modules/source-map/source-map.js @@ -0,0 +1,8 @@ +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer; +exports.SourceNode = require('./lib/source-node').SourceNode; diff --git a/node_modules/sprintf-js/.npmignore b/node_modules/sprintf-js/.npmignore new file mode 100644 index 000000000..096746c14 --- /dev/null +++ b/node_modules/sprintf-js/.npmignore @@ -0,0 +1 @@ +/node_modules/ \ No newline at end of file diff --git a/node_modules/sprintf-js/LICENSE b/node_modules/sprintf-js/LICENSE new file mode 100644 index 000000000..663ac52e4 --- /dev/null +++ b/node_modules/sprintf-js/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2007-2014, Alexandru Marasteanu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* 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. +* Neither the name of this software nor the names of its contributors may 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 AUTHORS OR COPYRIGHT HOLDERS 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. diff --git a/node_modules/sprintf-js/README.md b/node_modules/sprintf-js/README.md new file mode 100644 index 000000000..83863561b --- /dev/null +++ b/node_modules/sprintf-js/README.md @@ -0,0 +1,88 @@ +# sprintf.js +**sprintf.js** is a complete open source JavaScript sprintf implementation for the *browser* and *node.js*. + +Its prototype is simple: + + string sprintf(string format , [mixed arg1 [, mixed arg2 [ ,...]]]) + +The placeholders in the format string are marked by `%` and are followed by one or more of these elements, in this order: + +* An optional number followed by a `$` sign that selects which argument index to use for the value. If not specified, arguments will be placed in the same order as the placeholders in the input string. +* An optional `+` sign that forces to preceed the result with a plus or minus sign on numeric values. By default, only the `-` sign is used on negative numbers. +* An optional padding specifier that says what character to use for padding (if specified). Possible values are `0` or any other character precedeed by a `'` (single quote). The default is to pad with *spaces*. +* An optional `-` sign, that causes sprintf to left-align the result of this placeholder. The default is to right-align the result. +* An optional number, that says how many characters the result should have. If the value to be returned is shorter than this number, the result will be padded. When used with the `j` (JSON) type specifier, the padding length specifies the tab size used for indentation. +* An optional precision modifier, consisting of a `.` (dot) followed by a number, that says how many digits should be displayed for floating point numbers. When used with the `g` type specifier, it specifies the number of significant digits. When used on a string, it causes the result to be truncated. +* A type specifier that can be any of: + * `%` — yields a literal `%` character + * `b` — yields an integer as a binary number + * `c` — yields an integer as the character with that ASCII value + * `d` or `i` — yields an integer as a signed decimal number + * `e` — yields a float using scientific notation + * `u` — yields an integer as an unsigned decimal number + * `f` — yields a float as is; see notes on precision above + * `g` — yields a float as is; see notes on precision above + * `o` — yields an integer as an octal number + * `s` — yields a string as is + * `x` — yields an integer as a hexadecimal number (lower-case) + * `X` — yields an integer as a hexadecimal number (upper-case) + * `j` — yields a JavaScript object or array as a JSON encoded string + +## JavaScript `vsprintf` +`vsprintf` is the same as `sprintf` except that it accepts an array of arguments, rather than a variable number of arguments: + + vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) + +## Argument swapping +You can also swap the arguments. That is, the order of the placeholders doesn't have to match the order of the arguments. You can do that by simply indicating in the format string which arguments the placeholders refer to: + + sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") +And, of course, you can repeat the placeholders without having to increase the number of arguments. + +## Named arguments +Format strings may contain replacement fields rather than positional placeholders. Instead of referring to a certain argument, you can now refer to a certain key within an object. Replacement fields are surrounded by rounded parentheses - `(` and `)` - and begin with a keyword that refers to a key: + + var user = { + name: "Dolly" + } + sprintf("Hello %(name)s", user) // Hello Dolly +Keywords in replacement fields can be optionally followed by any number of keywords or indexes: + + var users = [ + {name: "Dolly"}, + {name: "Molly"}, + {name: "Polly"} + ] + sprintf("Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s", {users: users}) // Hello Dolly, Molly and Polly +Note: mixing positional and named placeholders is not (yet) supported + +## Computed values +You can pass in a function as a dynamic value and it will be invoked (with no arguments) in order to compute the value on-the-fly. + + sprintf("Current timestamp: %d", Date.now) // Current timestamp: 1398005382890 + sprintf("Current date and time: %s", function() { return new Date().toString() }) + +# AngularJS +You can now use `sprintf` and `vsprintf` (also aliased as `fmt` and `vfmt` respectively) in your AngularJS projects. See `demo/`. + +# Installation + +## Via Bower + + bower install sprintf + +## Or as a node.js module + + npm install sprintf-js + +### Usage + + var sprintf = require("sprintf-js").sprintf, + vsprintf = require("sprintf-js").vsprintf + + sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") + vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) + +# License + +**sprintf.js** is licensed under the terms of the 3-clause BSD license. diff --git a/node_modules/sprintf-js/bower.json b/node_modules/sprintf-js/bower.json new file mode 100644 index 000000000..d90a75989 --- /dev/null +++ b/node_modules/sprintf-js/bower.json @@ -0,0 +1,14 @@ +{ + "name": "sprintf", + "description": "JavaScript sprintf implementation", + "version": "1.0.3", + "main": "src/sprintf.js", + "license": "BSD-3-Clause-Clear", + "keywords": ["sprintf", "string", "formatting"], + "authors": ["Alexandru Marasteanu (http://alexei.ro/)"], + "homepage": "https://github.com/alexei/sprintf.js", + "repository": { + "type": "git", + "url": "git://github.com/alexei/sprintf.js.git" + } +} diff --git a/node_modules/sprintf-js/demo/angular.html b/node_modules/sprintf-js/demo/angular.html new file mode 100644 index 000000000..3559efd76 --- /dev/null +++ b/node_modules/sprintf-js/demo/angular.html @@ -0,0 +1,20 @@ + + + + + + + + +
      {{ "%+010d"|sprintf:-123 }}
      +
      {{ "%+010d"|vsprintf:[-123] }}
      +
      {{ "%+010d"|fmt:-123 }}
      +
      {{ "%+010d"|vfmt:[-123] }}
      +
      {{ "I've got %2$d apples and %1$d oranges."|fmt:4:2 }}
      +
      {{ "I've got %(apples)d apples and %(oranges)d oranges."|fmt:{apples: 2, oranges: 4} }}
      + + + + diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js b/node_modules/sprintf-js/dist/angular-sprintf.min.js new file mode 100644 index 000000000..dbaf744d8 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ + +angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(a){return a("sprintf")}]).filter("vsprintf",function(){return function(a,b){return vsprintf(a,b)}}).filter("vfmt",["$filter",function(a){return a("vsprintf")}]); +//# sourceMappingURL=angular-sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js.map b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map new file mode 100644 index 000000000..055964c62 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.map b/node_modules/sprintf-js/dist/angular-sprintf.min.map new file mode 100644 index 000000000..055964c62 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js b/node_modules/sprintf-js/dist/sprintf.min.js new file mode 100644 index 000000000..dc61e51ad --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ + +!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[diefg]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":case"i":g=parseInt(g,10);break;case"j":g=JSON.stringify(g,null,j[6]?parseInt(j[6]):0);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"g":g=j[7]?parseFloat(g).toPrecision(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}e.json.test(j[8])?q[q.length]=g:(!e.number.test(j[8])||r&&!j[3]?s="":(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"===j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]&&m>0?d(l,m):"",q[q.length]=j[5]?s+g+k:"0"===l?s+k+g:k+s+g)}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); +//# sourceMappingURL=sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js.map b/node_modules/sprintf-js/dist/sprintf.min.js.map new file mode 100644 index 000000000..369dbafab --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA4JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GApLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,SACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAIyB,UAAU,EAAGtB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAI+C,cAG3BvC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWgD,QAAQxC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAGyB,OAAO,GAAK,IACzEtB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAASyD,GAErB,IADA,GAAIC,GAAOD,EAAK1B,KAAYL,KAAiBiC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC3B,EAAQhB,EAAGK,KAAKwC,KAAKF,IACtBhC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOuC,KAAKF,IAC7BhC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYsC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI9B,EAAM,GAAI,CACV4B,GAAa,CACb,IAAIG,MAAiBC,EAAoBhC,EAAM,GAAIiC,IACnD,IAAuD,QAAlDA,EAAcjD,EAAGnB,IAAIgE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAWzB,QAAU2B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG3B,UACnE,GAA8D,QAAzD2B,EAAcjD,EAAGQ,WAAWqC,KAAKG,IAClCD,EAAWA,EAAWzB,QAAU2B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAcjD,EAAGS,aAAaoC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAWzB,QAAU2B,EAAY,GAUxDjC,EAAM,GAAK+B,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAIlB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC2B,EAAOA,EAAKL,UAAUtB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIuC,GAAW,SAASR,EAAK9B,EAAMuC,GAG/B,MAFAA,IAASvC,OAAYnB,MAAM,GAC3B0D,EAAMC,OAAO,EAAG,EAAGV,GACZ9D,EAAQyE,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ1E,QAAUA,EAClB0E,QAAQJ,SAAWA,IAGnBvE,EAAOC,QAAUA,EACjBD,EAAOuE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI3E,QAASA,EACTsE,SAAUA,OAKT,mBAAXvE,QAAyB8E,KAAO9E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.map b/node_modules/sprintf-js/dist/sprintf.min.map new file mode 100644 index 000000000..ee011aaa5 --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","toPrecision","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA+JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GAvLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,UACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKyB,YAAYtB,EAAM,IAAMoB,WAAWvB,EACxE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAI0B,UAAU,EAAGvB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAIgD,cAG3BxC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWiD,QAAQzC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAG0B,OAAO,GAAK,IACzEvB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAAS0D,GAErB,IADA,GAAIC,GAAOD,EAAK3B,KAAYL,KAAiBkC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC5B,EAAQhB,EAAGK,KAAKyC,KAAKF,IACtBjC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOwC,KAAKF,IAC7BjC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYuC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI/B,EAAM,GAAI,CACV6B,GAAa,CACb,IAAIG,MAAiBC,EAAoBjC,EAAM,GAAIkC,IACnD,IAAuD,QAAlDA,EAAclD,EAAGnB,IAAIiE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAW1B,QAAU4B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG5B,UACnE,GAA8D,QAAzD4B,EAAclD,EAAGQ,WAAWsC,KAAKG,IAClCD,EAAWA,EAAW1B,QAAU4B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAclD,EAAGS,aAAaqC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAW1B,QAAU4B,EAAY,GAUxDlC,EAAM,GAAKgC,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAInB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC4B,EAAOA,EAAKL,UAAUvB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIwC,GAAW,SAASR,EAAK/B,EAAMwC,GAG/B,MAFAA,IAASxC,OAAYnB,MAAM,GAC3B2D,EAAMC,OAAO,EAAG,EAAGV,GACZ/D,EAAQ0E,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ3E,QAAUA,EAClB2E,QAAQJ,SAAWA,IAGnBxE,EAAOC,QAAUA,EACjBD,EAAOwE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI5E,QAASA,EACTuE,SAAUA,OAKT,mBAAXxE,QAAyB+E,KAAO/E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/gruntfile.js b/node_modules/sprintf-js/gruntfile.js new file mode 100644 index 000000000..246e1c3b9 --- /dev/null +++ b/node_modules/sprintf-js/gruntfile.js @@ -0,0 +1,36 @@ +module.exports = function(grunt) { + grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + + uglify: { + options: { + banner: "/*! <%= pkg.name %> | <%= pkg.author %> | <%= pkg.license %> */\n", + sourceMap: true + }, + build: { + files: [ + { + src: "src/sprintf.js", + dest: "dist/sprintf.min.js" + }, + { + src: "src/angular-sprintf.js", + dest: "dist/angular-sprintf.min.js" + } + ] + } + }, + + watch: { + js: { + files: "src/*.js", + tasks: ["uglify"] + } + } + }) + + grunt.loadNpmTasks("grunt-contrib-uglify") + grunt.loadNpmTasks("grunt-contrib-watch") + + grunt.registerTask("default", ["uglify", "watch"]) +} diff --git a/node_modules/sprintf-js/package.json b/node_modules/sprintf-js/package.json new file mode 100644 index 000000000..75f7eca71 --- /dev/null +++ b/node_modules/sprintf-js/package.json @@ -0,0 +1,22 @@ +{ + "name": "sprintf-js", + "version": "1.0.3", + "description": "JavaScript sprintf implementation", + "author": "Alexandru Marasteanu (http://alexei.ro/)", + "main": "src/sprintf.js", + "scripts": { + "test": "mocha test/test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/alexei/sprintf.js.git" + }, + "license": "BSD-3-Clause", + "readmeFilename": "README.md", + "devDependencies": { + "mocha": "*", + "grunt": "*", + "grunt-contrib-watch": "*", + "grunt-contrib-uglify": "*" + } +} diff --git a/node_modules/sprintf-js/src/angular-sprintf.js b/node_modules/sprintf-js/src/angular-sprintf.js new file mode 100644 index 000000000..9c69123be --- /dev/null +++ b/node_modules/sprintf-js/src/angular-sprintf.js @@ -0,0 +1,18 @@ +angular. + module("sprintf", []). + filter("sprintf", function() { + return function() { + return sprintf.apply(null, arguments) + } + }). + filter("fmt", ["$filter", function($filter) { + return $filter("sprintf") + }]). + filter("vsprintf", function() { + return function(format, argv) { + return vsprintf(format, argv) + } + }). + filter("vfmt", ["$filter", function($filter) { + return $filter("vsprintf") + }]) diff --git a/node_modules/sprintf-js/src/sprintf.js b/node_modules/sprintf-js/src/sprintf.js new file mode 100644 index 000000000..c0fc7c08b --- /dev/null +++ b/node_modules/sprintf-js/src/sprintf.js @@ -0,0 +1,208 @@ +(function(window) { + var re = { + not_string: /[^s]/, + number: /[diefg]/, + json: /[j]/, + not_json: /[^j]/, + text: /^[^\x25]+/, + modulo: /^\x25{2}/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + key: /^([a-z_][a-z_\d]*)/i, + key_access: /^\.([a-z_][a-z_\d]*)/i, + index_access: /^\[(\d+)\]/, + sign: /^[\+\-]/ + } + + function sprintf() { + var key = arguments[0], cache = sprintf.cache + if (!(cache[key] && cache.hasOwnProperty(key))) { + cache[key] = sprintf.parse(key) + } + return sprintf.format.call(null, cache[key], arguments) + } + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]) + if (node_type === "string") { + output[output.length] = parse_tree[i] + } + else if (node_type === "array") { + match = parse_tree[i] // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor] + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + } + arg = arg[match[2][k]] + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]] + } + else { // positional argument (implicit) + arg = argv[cursor++] + } + + if (get_type(arg) == "function") { + arg = arg() + } + + if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + } + + if (re.number.test(match[8])) { + is_positive = arg >= 0 + } + + switch (match[8]) { + case "b": + arg = arg.toString(2) + break + case "c": + arg = String.fromCharCode(arg) + break + case "d": + case "i": + arg = parseInt(arg, 10) + break + case "j": + arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) + break + case "e": + arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + break + case "f": + arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) + break + case "g": + arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) + break + case "o": + arg = arg.toString(8) + break + case "s": + arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + break + case "u": + arg = arg >>> 0 + break + case "x": + arg = arg.toString(16) + break + case "X": + arg = arg.toString(16).toUpperCase() + break + } + if (re.json.test(match[8])) { + output[output.length] = arg + } + else { + if (re.number.test(match[8]) && (!is_positive || match[3])) { + sign = is_positive ? "+" : "-" + arg = arg.toString().replace(re.sign, "") + } + else { + sign = "" + } + pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_length = match[6] - (sign + arg).length + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" + output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + } + } + } + return output.join("") + } + + sprintf.cache = {} + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + while (_fmt) { + if ((match = re.text.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = match[0] + } + else if ((match = re.modulo.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = "%" + } + else if ((match = re.placeholder.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1 + var field_list = [], replacement_field = match[2], field_match = [] + if ((field_match = re.key.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + if ((field_match = re.key_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else if ((field_match = re.index_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + } + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + match[2] = field_list + } + else { + arg_names |= 2 + } + if (arg_names === 3) { + throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + } + parse_tree[parse_tree.length] = match + } + else { + throw new SyntaxError("[sprintf] unexpected placeholder") + } + _fmt = _fmt.substring(match[0].length) + } + return parse_tree + } + + var vsprintf = function(fmt, argv, _argv) { + _argv = (argv || []).slice(0) + _argv.splice(0, 0, fmt) + return sprintf.apply(null, _argv) + } + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } + + function str_repeat(input, multiplier) { + return Array(multiplier + 1).join(input) + } + + /** + * export to either browser or node.js + */ + if (typeof exports !== "undefined") { + exports.sprintf = sprintf + exports.vsprintf = vsprintf + } + else { + window.sprintf = sprintf + window.vsprintf = vsprintf + + if (typeof define === "function" && define.amd) { + define(function() { + return { + sprintf: sprintf, + vsprintf: vsprintf + } + }) + } + } +})(typeof window === "undefined" ? this : window); diff --git a/node_modules/sprintf-js/test/test.js b/node_modules/sprintf-js/test/test.js new file mode 100644 index 000000000..6f57b2538 --- /dev/null +++ b/node_modules/sprintf-js/test/test.js @@ -0,0 +1,82 @@ +var assert = require("assert"), + sprintfjs = require("../src/sprintf.js"), + sprintf = sprintfjs.sprintf, + vsprintf = sprintfjs.vsprintf + +describe("sprintfjs", function() { + var pi = 3.141592653589793 + + it("should return formated strings for simple placeholders", function() { + assert.equal("%", sprintf("%%")) + assert.equal("10", sprintf("%b", 2)) + assert.equal("A", sprintf("%c", 65)) + assert.equal("2", sprintf("%d", 2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("2", sprintf("%d", "2")) + assert.equal("2", sprintf("%i", "2")) + assert.equal('{"foo":"bar"}', sprintf("%j", {foo: "bar"})) + assert.equal('["foo","bar"]', sprintf("%j", ["foo", "bar"])) + assert.equal("2e+0", sprintf("%e", 2)) + assert.equal("2", sprintf("%u", 2)) + assert.equal("4294967294", sprintf("%u", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("3.141592653589793", sprintf("%g", pi)) + assert.equal("10", sprintf("%o", 8)) + assert.equal("%s", sprintf("%s", "%s")) + assert.equal("ff", sprintf("%x", 255)) + assert.equal("FF", sprintf("%X", 255)) + assert.equal("Polly wants a cracker", sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")) + assert.equal("Hello world!", sprintf("Hello %(who)s!", {"who": "world"})) + }) + + it("should return formated strings for complex placeholders", function() { + // sign + assert.equal("2", sprintf("%d", 2)) + assert.equal("-2", sprintf("%d", -2)) + assert.equal("+2", sprintf("%+d", 2)) + assert.equal("-2", sprintf("%+d", -2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("-2", sprintf("%i", -2)) + assert.equal("+2", sprintf("%+i", 2)) + assert.equal("-2", sprintf("%+i", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("-2.2", sprintf("%f", -2.2)) + assert.equal("+2.2", sprintf("%+f", 2.2)) + assert.equal("-2.2", sprintf("%+f", -2.2)) + assert.equal("-2.3", sprintf("%+.1f", -2.34)) + assert.equal("-0.0", sprintf("%+.1f", -0.01)) + assert.equal("3.14159", sprintf("%.6g", pi)) + assert.equal("3.14", sprintf("%.3g", pi)) + assert.equal("3", sprintf("%.1g", pi)) + assert.equal("-000000123", sprintf("%+010d", -123)) + assert.equal("______-123", sprintf("%+'_10d", -123)) + assert.equal("-234.34 123.2", sprintf("%f %f", -234.34, 123.2)) + + // padding + assert.equal("-0002", sprintf("%05d", -2)) + assert.equal("-0002", sprintf("%05i", -2)) + assert.equal(" <", sprintf("%5s", "<")) + assert.equal("0000<", sprintf("%05s", "<")) + assert.equal("____<", sprintf("%'_5s", "<")) + assert.equal("> ", sprintf("%-5s", ">")) + assert.equal(">0000", sprintf("%0-5s", ">")) + assert.equal(">____", sprintf("%'_-5s", ">")) + assert.equal("xxxxxx", sprintf("%5s", "xxxxxx")) + assert.equal("1234", sprintf("%02u", 1234)) + assert.equal(" -10.235", sprintf("%8.3f", -10.23456)) + assert.equal("-12.34 xxx", sprintf("%f %s", -12.34, "xxx")) + assert.equal('{\n "foo": "bar"\n}', sprintf("%2j", {foo: "bar"})) + assert.equal('[\n "foo",\n "bar"\n]', sprintf("%2j", ["foo", "bar"])) + + // precision + assert.equal("2.3", sprintf("%.1f", 2.345)) + assert.equal("xxxxx", sprintf("%5.5s", "xxxxxx")) + assert.equal(" x", sprintf("%5.1s", "xxxxxx")) + + }) + + it("should return formated strings for callbacks", function() { + assert.equal("foobar", sprintf("%s", function() { return "foobar" })) + assert.equal(Date.now(), sprintf("%s", Date.now)) // should pass... + }) +}) diff --git a/node_modules/sshpk/.travis.yml b/node_modules/sshpk/.travis.yml new file mode 100644 index 000000000..c3394c258 --- /dev/null +++ b/node_modules/sshpk/.travis.yml @@ -0,0 +1,11 @@ +language: node_js +node_js: + - "5.10" + - "4.4" + - "4.1" + - "0.12" + - "0.10" +before_install: + - "make check" +after_success: + - '[ "${TRAVIS_NODE_VERSION}" = "4.4" ] && make codecovio' diff --git a/node_modules/sshpk/Jenkinsfile b/node_modules/sshpk/Jenkinsfile new file mode 100644 index 000000000..cd0bf2250 --- /dev/null +++ b/node_modules/sshpk/Jenkinsfile @@ -0,0 +1,86 @@ +@Library('jenkins-joylib@v1.0.8') _ + +pipeline { + + agent none + + options { + buildDiscarder(logRotator(numToKeepStr: '30')) + timestamps() + } + + stages { + stage('top') { + parallel { + stage('v0.10.48-zone') { + agent { + label joyCommonLabels(image_ver: '15.4.1') + } + tools { + nodejs 'sdcnode-v0.10.48-zone' + } + stages { + stage('check') { + steps{ + sh('make check') + } + } + stage('test') { + steps{ + sh('make test') + } + } + } + } + + stage('v4-zone') { + agent { + label joyCommonLabels(image_ver: '15.4.1') + } + tools { + nodejs 'sdcnode-v4-zone' + } + stages { + stage('check') { + steps{ + sh('make check') + } + } + stage('test') { + steps{ + sh('make test') + } + } + } + } + + stage('v6-zone64') { + agent { + label joyCommonLabels(image_ver: '18.4.0') + } + tools { + nodejs 'sdcnode-v6-zone64' + } + stages { + stage('check') { + steps{ + sh('make check') + } + } + stage('test') { + steps{ + sh('make test') + } + } + } + } + } + } + } + + post { + always { + joySlackNotifications() + } + } +} diff --git a/node_modules/sshpk/LICENSE b/node_modules/sshpk/LICENSE new file mode 100644 index 000000000..f6d947d2f --- /dev/null +++ b/node_modules/sshpk/LICENSE @@ -0,0 +1,18 @@ +Copyright Joyent, Inc. All rights reserved. +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. diff --git a/node_modules/sshpk/README.md b/node_modules/sshpk/README.md new file mode 100644 index 000000000..5740f74d1 --- /dev/null +++ b/node_modules/sshpk/README.md @@ -0,0 +1,804 @@ +sshpk +========= + +Parse, convert, fingerprint and use SSH keys (both public and private) in pure +node -- no `ssh-keygen` or other external dependencies. + +Supports RSA, DSA, ECDSA (nistp-\*) and ED25519 key types, in PEM (PKCS#1, +PKCS#8) and OpenSSH formats. + +This library has been extracted from +[`node-http-signature`](https://github.com/joyent/node-http-signature) +(work by [Mark Cavage](https://github.com/mcavage) and +[Dave Eddy](https://github.com/bahamas10)) and +[`node-ssh-fingerprint`](https://github.com/bahamas10/node-ssh-fingerprint) +(work by Dave Eddy), with additions (including ECDSA support) by +[Alex Wilson](https://github.com/arekinath). + +Install +------- + +``` +npm install sshpk +``` + +Examples +-------- + +```js +var sshpk = require('sshpk'); + +var fs = require('fs'); + +/* Read in an OpenSSH-format public key */ +var keyPub = fs.readFileSync('id_rsa.pub'); +var key = sshpk.parseKey(keyPub, 'ssh'); + +/* Get metadata about the key */ +console.log('type => %s', key.type); +console.log('size => %d bits', key.size); +console.log('comment => %s', key.comment); + +/* Compute key fingerprints, in new OpenSSH (>6.7) format, and old MD5 */ +console.log('fingerprint => %s', key.fingerprint().toString()); +console.log('old-style fingerprint => %s', key.fingerprint('md5').toString()); +``` + +Example output: + +``` +type => rsa +size => 2048 bits +comment => foo@foo.com +fingerprint => SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w +old-style fingerprint => a0:c8:ad:6c:32:9a:32:fa:59:cc:a9:8c:0a:0d:6e:bd +``` + +More examples: converting between formats: + +```js +/* Read in a PEM public key */ +var keyPem = fs.readFileSync('id_rsa.pem'); +var key = sshpk.parseKey(keyPem, 'pem'); + +/* Convert to PEM PKCS#8 public key format */ +var pemBuf = key.toBuffer('pkcs8'); + +/* Convert to SSH public key format (and return as a string) */ +var sshKey = key.toString('ssh'); +``` + +Signing and verifying: + +```js +/* Read in an OpenSSH/PEM *private* key */ +var keyPriv = fs.readFileSync('id_ecdsa'); +var key = sshpk.parsePrivateKey(keyPriv, 'pem'); + +var data = 'some data'; + +/* Sign some data with the key */ +var s = key.createSign('sha1'); +s.update(data); +var signature = s.sign(); + +/* Now load the public key (could also use just key.toPublic()) */ +var keyPub = fs.readFileSync('id_ecdsa.pub'); +key = sshpk.parseKey(keyPub, 'ssh'); + +/* Make a crypto.Verifier with this key */ +var v = key.createVerify('sha1'); +v.update(data); +var valid = v.verify(signature); +/* => true! */ +``` + +Matching fingerprints with keys: + +```js +var fp = sshpk.parseFingerprint('SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w'); + +var keys = [sshpk.parseKey(...), sshpk.parseKey(...), ...]; + +keys.forEach(function (key) { + if (fp.matches(key)) + console.log('found it!'); +}); +``` + +Usage +----- + +## Public keys + +### `parseKey(data[, format = 'auto'[, options]])` + +Parses a key from a given data format and returns a new `Key` object. + +Parameters + +- `data` -- Either a Buffer or String, containing the key +- `format` -- String name of format to use, valid options are: + - `auto`: choose automatically from all below + - `pem`: supports both PKCS#1 and PKCS#8 + - `ssh`: standard OpenSSH format, + - `pkcs1`, `pkcs8`: variants of `pem` + - `rfc4253`: raw OpenSSH wire format + - `openssh`: new post-OpenSSH 6.5 internal format, produced by + `ssh-keygen -o` + - `dnssec`: `.key` file format output by `dnssec-keygen` etc + - `putty`: the PuTTY `.ppk` file format (supports truncated variant without + all the lines from `Private-Lines:` onwards) +- `options` -- Optional Object, extra options, with keys: + - `filename` -- Optional String, name for the key being parsed + (eg. the filename that was opened). Used to generate + Error messages + - `passphrase` -- Optional String, encryption passphrase used to decrypt an + encrypted PEM file + +### `Key.isKey(obj)` + +Returns `true` if the given object is a valid `Key` object created by a version +of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `Key#type` + +String, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`. + +### `Key#size` + +Integer, "size" of the key in bits. For RSA/DSA this is the size of the modulus; +for ECDSA this is the bit size of the curve in use. + +### `Key#comment` + +Optional string, a key comment used by some formats (eg the `ssh` format). + +### `Key#curve` + +Only present if `this.type === 'ecdsa'`, string containing the name of the +named curve used with this key. Possible values include `nistp256`, `nistp384` +and `nistp521`. + +### `Key#toBuffer([format = 'ssh'])` + +Convert the key into a given data format and return the serialized key as +a Buffer. + +Parameters + +- `format` -- String name of format to use, for valid options see `parseKey()` + +### `Key#toString([format = 'ssh])` + +Same as `this.toBuffer(format).toString()`. + +### `Key#fingerprint([algorithm = 'sha256'[, hashType = 'ssh']])` + +Creates a new `Fingerprint` object representing this Key's fingerprint. + +Parameters + +- `algorithm` -- String name of hash algorithm to use, valid options are `md5`, + `sha1`, `sha256`, `sha384`, `sha512` +- `hashType` -- String name of fingerprint hash type to use, valid options are + `ssh` (the type of fingerprint used by OpenSSH, e.g. in + `ssh-keygen`), `spki` (used by HPKP, some OpenSSL applications) + +### `Key#createVerify([hashAlgorithm])` + +Creates a `crypto.Verifier` specialized to use this Key (and the correct public +key algorithm to match it). The returned Verifier has the same API as a regular +one, except that the `verify()` function takes only the target signature as an +argument. + +Parameters + +- `hashAlgorithm` -- optional String name of hash algorithm to use, any + supported by OpenSSL are valid, usually including + `sha1`, `sha256`. + +`v.verify(signature[, format])` Parameters + +- `signature` -- either a Signature object, or a Buffer or String +- `format` -- optional String, name of format to interpret given String with. + Not valid if `signature` is a Signature or Buffer. + +### `Key#createDiffieHellman()` +### `Key#createDH()` + +Creates a Diffie-Hellman key exchange object initialized with this key and all +necessary parameters. This has the same API as a `crypto.DiffieHellman` +instance, except that functions take `Key` and `PrivateKey` objects as +arguments, and return them where indicated for. + +This is only valid for keys belonging to a cryptosystem that supports DHE +or a close analogue (i.e. `dsa`, `ecdsa` and `curve25519` keys). An attempt +to call this function on other keys will yield an `Error`. + +## Private keys + +### `parsePrivateKey(data[, format = 'auto'[, options]])` + +Parses a private key from a given data format and returns a new +`PrivateKey` object. + +Parameters + +- `data` -- Either a Buffer or String, containing the key +- `format` -- String name of format to use, valid options are: + - `auto`: choose automatically from all below + - `pem`: supports both PKCS#1 and PKCS#8 + - `ssh`, `openssh`: new post-OpenSSH 6.5 internal format, produced by + `ssh-keygen -o` + - `pkcs1`, `pkcs8`: variants of `pem` + - `rfc4253`: raw OpenSSH wire format + - `dnssec`: `.private` format output by `dnssec-keygen` etc. +- `options` -- Optional Object, extra options, with keys: + - `filename` -- Optional String, name for the key being parsed + (eg. the filename that was opened). Used to generate + Error messages + - `passphrase` -- Optional String, encryption passphrase used to decrypt an + encrypted PEM file + +### `generatePrivateKey(type[, options])` + +Generates a new private key of a certain key type, from random data. + +Parameters + +- `type` -- String, type of key to generate. Currently supported are `'ecdsa'` + and `'ed25519'` +- `options` -- optional Object, with keys: + - `curve` -- optional String, for `'ecdsa'` keys, specifies the curve to use. + If ECDSA is specified and this option is not given, defaults to + using `'nistp256'`. + +### `PrivateKey.isPrivateKey(obj)` + +Returns `true` if the given object is a valid `PrivateKey` object created by a +version of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `PrivateKey#type` + +String, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`. + +### `PrivateKey#size` + +Integer, "size" of the key in bits. For RSA/DSA this is the size of the modulus; +for ECDSA this is the bit size of the curve in use. + +### `PrivateKey#curve` + +Only present if `this.type === 'ecdsa'`, string containing the name of the +named curve used with this key. Possible values include `nistp256`, `nistp384` +and `nistp521`. + +### `PrivateKey#toBuffer([format = 'pkcs1'])` + +Convert the key into a given data format and return the serialized key as +a Buffer. + +Parameters + +- `format` -- String name of format to use, valid options are listed under + `parsePrivateKey`. Note that ED25519 keys default to `openssh` + format instead (as they have no `pkcs1` representation). + +### `PrivateKey#toString([format = 'pkcs1'])` + +Same as `this.toBuffer(format).toString()`. + +### `PrivateKey#toPublic()` + +Extract just the public part of this private key, and return it as a `Key` +object. + +### `PrivateKey#fingerprint([algorithm = 'sha256'])` + +Same as `this.toPublic().fingerprint()`. + +### `PrivateKey#createVerify([hashAlgorithm])` + +Same as `this.toPublic().createVerify()`. + +### `PrivateKey#createSign([hashAlgorithm])` + +Creates a `crypto.Sign` specialized to use this PrivateKey (and the correct +key algorithm to match it). The returned Signer has the same API as a regular +one, except that the `sign()` function takes no arguments, and returns a +`Signature` object. + +Parameters + +- `hashAlgorithm` -- optional String name of hash algorithm to use, any + supported by OpenSSL are valid, usually including + `sha1`, `sha256`. + +`v.sign()` Parameters + +- none + +### `PrivateKey#derive(newType)` + +Derives a related key of type `newType` from this key. Currently this is +only supported to change between `ed25519` and `curve25519` keys which are +stored with the same private key (but usually distinct public keys in order +to avoid degenerate keys that lead to a weak Diffie-Hellman exchange). + +Parameters + +- `newType` -- String, type of key to derive, either `ed25519` or `curve25519` + +## Fingerprints + +### `parseFingerprint(fingerprint[, options])` + +Pre-parses a fingerprint, creating a `Fingerprint` object that can be used to +quickly locate a key by using the `Fingerprint#matches` function. + +Parameters + +- `fingerprint` -- String, the fingerprint value, in any supported format +- `options` -- Optional Object, with properties: + - `algorithms` -- Array of strings, names of hash algorithms to limit + support to. If `fingerprint` uses a hash algorithm not on + this list, throws `InvalidAlgorithmError`. + - `hashType` -- String, the type of hash the fingerprint uses, either `ssh` + or `spki` (normally auto-detected based on the format, but + can be overridden) + - `type` -- String, the entity this fingerprint identifies, either `key` or + `certificate` + +### `Fingerprint.isFingerprint(obj)` + +Returns `true` if the given object is a valid `Fingerprint` object created by a +version of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `Fingerprint#toString([format])` + +Returns a fingerprint as a string, in the given format. + +Parameters + +- `format` -- Optional String, format to use, valid options are `hex` and + `base64`. If this `Fingerprint` uses the `md5` algorithm, the + default format is `hex`. Otherwise, the default is `base64`. + +### `Fingerprint#matches(keyOrCertificate)` + +Verifies whether or not this `Fingerprint` matches a given `Key` or +`Certificate`. This function uses double-hashing to avoid leaking timing +information. Returns a boolean. + +Note that a `Key`-type Fingerprint will always return `false` if asked to match +a `Certificate` and vice versa. + +Parameters + +- `keyOrCertificate` -- a `Key` object or `Certificate` object, the entity to + match this fingerprint against + +## Signatures + +### `parseSignature(signature, algorithm, format)` + +Parses a signature in a given format, creating a `Signature` object. Useful +for converting between the SSH and ASN.1 (PKCS/OpenSSL) signature formats, and +also returned as output from `PrivateKey#createSign().sign()`. + +A Signature object can also be passed to a verifier produced by +`Key#createVerify()` and it will automatically be converted internally into the +correct format for verification. + +Parameters + +- `signature` -- a Buffer (binary) or String (base64), data of the actual + signature in the given format +- `algorithm` -- a String, name of the algorithm to be used, possible values + are `rsa`, `dsa`, `ecdsa` +- `format` -- a String, either `asn1` or `ssh` + +### `Signature.isSignature(obj)` + +Returns `true` if the given object is a valid `Signature` object created by a +version of `sshpk` compatible with this one. + +Parameters + +- `obj` -- Object to identify + +### `Signature#toBuffer([format = 'asn1'])` + +Converts a Signature to the given format and returns it as a Buffer. + +Parameters + +- `format` -- a String, either `asn1` or `ssh` + +### `Signature#toString([format = 'asn1'])` + +Same as `this.toBuffer(format).toString('base64')`. + +## Certificates + +`sshpk` includes basic support for parsing certificates in X.509 (PEM) format +and the OpenSSH certificate format. This feature is intended to be used mainly +to access basic metadata about certificates, extract public keys from them, and +also to generate simple self-signed certificates from an existing key. + +Notably, there is no implementation of CA chain-of-trust verification, and only +very minimal support for key usage restrictions. Please do the security world +a favour, and DO NOT use this code for certificate verification in the +traditional X.509 CA chain style. + +### `parseCertificate(data, format)` + +Parameters + + - `data` -- a Buffer or String + - `format` -- a String, format to use, one of `'openssh'`, `'pem'` (X.509 in a + PEM wrapper), or `'x509'` (raw DER encoded) + +### `createSelfSignedCertificate(subject, privateKey[, options])` + +Parameters + + - `subject` -- an Identity, the subject of the certificate + - `privateKey` -- a PrivateKey, the key of the subject: will be used both to be + placed in the certificate and also to sign it (since this is + a self-signed certificate) + - `options` -- optional Object, with keys: + - `lifetime` -- optional Number, lifetime of the certificate from now in + seconds + - `validFrom`, `validUntil` -- optional Dates, beginning and end of + certificate validity period. If given + `lifetime` will be ignored + - `serial` -- optional Buffer, the serial number of the certificate + - `purposes` -- optional Array of String, X.509 key usage restrictions + +### `createCertificate(subject, key, issuer, issuerKey[, options])` + +Parameters + + - `subject` -- an Identity, the subject of the certificate + - `key` -- a Key, the public key of the subject + - `issuer` -- an Identity, the issuer of the certificate who will sign it + - `issuerKey` -- a PrivateKey, the issuer's private key for signing + - `options` -- optional Object, with keys: + - `lifetime` -- optional Number, lifetime of the certificate from now in + seconds + - `validFrom`, `validUntil` -- optional Dates, beginning and end of + certificate validity period. If given + `lifetime` will be ignored + - `serial` -- optional Buffer, the serial number of the certificate + - `purposes` -- optional Array of String, X.509 key usage restrictions + +### `Certificate#subjects` + +Array of `Identity` instances describing the subject of this certificate. + +### `Certificate#issuer` + +The `Identity` of the Certificate's issuer (signer). + +### `Certificate#subjectKey` + +The public key of the subject of the certificate, as a `Key` instance. + +### `Certificate#issuerKey` + +The public key of the signing issuer of this certificate, as a `Key` instance. +May be `undefined` if the issuer's key is unknown (e.g. on an X509 certificate). + +### `Certificate#serial` + +The serial number of the certificate. As this is normally a 64-bit or wider +integer, it is returned as a Buffer. + +### `Certificate#purposes` + +Array of Strings indicating the X.509 key usage purposes that this certificate +is valid for. The possible strings at the moment are: + + * `'signature'` -- key can be used for digital signatures + * `'identity'` -- key can be used to attest about the identity of the signer + (X.509 calls this `nonRepudiation`) + * `'codeSigning'` -- key can be used to sign executable code + * `'keyEncryption'` -- key can be used to encrypt other keys + * `'encryption'` -- key can be used to encrypt data (only applies for RSA) + * `'keyAgreement'` -- key can be used for key exchange protocols such as + Diffie-Hellman + * `'ca'` -- key can be used to sign other certificates (is a Certificate + Authority) + * `'crl'` -- key can be used to sign Certificate Revocation Lists (CRLs) + +### `Certificate#getExtension(nameOrOid)` + +Retrieves information about a certificate extension, if present, or returns +`undefined` if not. The string argument `nameOrOid` should be either the OID +(for X509 extensions) or the name (for OpenSSH extensions) of the extension +to retrieve. + +The object returned will have the following properties: + + * `format` -- String, set to either `'x509'` or `'openssh'` + * `name` or `oid` -- String, only one set based on value of `format` + * `data` -- Buffer, the raw data inside the extension + +### `Certificate#getExtensions()` + +Returns an Array of all present certificate extensions, in the same manner and +format as `getExtension()`. + +### `Certificate#isExpired([when])` + +Tests whether the Certificate is currently expired (i.e. the `validFrom` and +`validUntil` dates specify a range of time that does not include the current +time). + +Parameters + + - `when` -- optional Date, if specified, tests whether the Certificate was or + will be expired at the specified time instead of now + +Returns a Boolean. + +### `Certificate#isSignedByKey(key)` + +Tests whether the Certificate was validly signed by the given (public) Key. + +Parameters + + - `key` -- a Key instance + +Returns a Boolean. + +### `Certificate#isSignedBy(certificate)` + +Tests whether this Certificate was validly signed by the subject of the given +certificate. Also tests that the issuer Identity of this Certificate and the +subject Identity of the other Certificate are equivalent. + +Parameters + + - `certificate` -- another Certificate instance + +Returns a Boolean. + +### `Certificate#fingerprint([hashAlgo])` + +Returns the X509-style fingerprint of the entire certificate (as a Fingerprint +instance). This matches what a web-browser or similar would display as the +certificate fingerprint and should not be confused with the fingerprint of the +subject's public key. + +Parameters + + - `hashAlgo` -- an optional String, any hash function name + +### `Certificate#toBuffer([format])` + +Serializes the Certificate to a Buffer and returns it. + +Parameters + + - `format` -- an optional String, output format, one of `'openssh'`, `'pem'` or + `'x509'`. Defaults to `'x509'`. + +Returns a Buffer. + +### `Certificate#toString([format])` + + - `format` -- an optional String, output format, one of `'openssh'`, `'pem'` or + `'x509'`. Defaults to `'pem'`. + +Returns a String. + +## Certificate identities + +### `identityForHost(hostname)` + +Constructs a host-type Identity for a given hostname. + +Parameters + + - `hostname` -- the fully qualified DNS name of the host + +Returns an Identity instance. + +### `identityForUser(uid)` + +Constructs a user-type Identity for a given UID. + +Parameters + + - `uid` -- a String, user identifier (login name) + +Returns an Identity instance. + +### `identityForEmail(email)` + +Constructs an email-type Identity for a given email address. + +Parameters + + - `email` -- a String, email address + +Returns an Identity instance. + +### `identityFromDN(dn)` + +Parses an LDAP-style DN string (e.g. `'CN=foo, C=US'`) and turns it into an +Identity instance. + +Parameters + + - `dn` -- a String + +Returns an Identity instance. + +### `identityFromArray(arr)` + +Constructs an Identity from an array of DN components (see `Identity#toArray()` +for the format). + +Parameters + + - `arr` -- an Array of Objects, DN components with `name` and `value` + +Returns an Identity instance. + + +Supported attributes in DNs: + +| Attribute name | OID | +| -------------- | --- | +| `cn` | `2.5.4.3` | +| `o` | `2.5.4.10` | +| `ou` | `2.5.4.11` | +| `l` | `2.5.4.7` | +| `s` | `2.5.4.8` | +| `c` | `2.5.4.6` | +| `sn` | `2.5.4.4` | +| `postalCode` | `2.5.4.17` | +| `serialNumber` | `2.5.4.5` | +| `street` | `2.5.4.9` | +| `x500UniqueIdentifier` | `2.5.4.45` | +| `role` | `2.5.4.72` | +| `telephoneNumber` | `2.5.4.20` | +| `description` | `2.5.4.13` | +| `dc` | `0.9.2342.19200300.100.1.25` | +| `uid` | `0.9.2342.19200300.100.1.1` | +| `mail` | `0.9.2342.19200300.100.1.3` | +| `title` | `2.5.4.12` | +| `gn` | `2.5.4.42` | +| `initials` | `2.5.4.43` | +| `pseudonym` | `2.5.4.65` | + +### `Identity#toString()` + +Returns the identity as an LDAP-style DN string. +e.g. `'CN=foo, O=bar corp, C=us'` + +### `Identity#type` + +The type of identity. One of `'host'`, `'user'`, `'email'` or `'unknown'` + +### `Identity#hostname` +### `Identity#uid` +### `Identity#email` + +Set when `type` is `'host'`, `'user'`, or `'email'`, respectively. Strings. + +### `Identity#cn` + +The value of the first `CN=` in the DN, if any. It's probably better to use +the `#get()` method instead of this property. + +### `Identity#get(name[, asArray])` + +Returns the value of a named attribute in the Identity DN. If there is no +attribute of the given name, returns `undefined`. If multiple components +of the DN contain an attribute of this name, an exception is thrown unless +the `asArray` argument is given as `true` -- then they will be returned as +an Array in the same order they appear in the DN. + +Parameters + + - `name` -- a String + - `asArray` -- an optional Boolean + +### `Identity#toArray()` + +Returns the Identity as an Array of DN component objects. This looks like: + +```js +[ { + "name": "cn", + "value": "Joe Bloggs" +}, +{ + "name": "o", + "value": "Organisation Ltd" +} ] +``` + +Each object has a `name` and a `value` property. The returned objects may be +safely modified. + +Errors +------ + +### `InvalidAlgorithmError` + +The specified algorithm is not valid, either because it is not supported, or +because it was not included on a list of allowed algorithms. + +Thrown by `Fingerprint.parse`, `Key#fingerprint`. + +Properties + +- `algorithm` -- the algorithm that could not be validated + +### `FingerprintFormatError` + +The fingerprint string given could not be parsed as a supported fingerprint +format, or the specified fingerprint format is invalid. + +Thrown by `Fingerprint.parse`, `Fingerprint#toString`. + +Properties + +- `fingerprint` -- if caused by a fingerprint, the string value given +- `format` -- if caused by an invalid format specification, the string value given + +### `KeyParseError` + +The key data given could not be parsed as a valid key. + +Properties + +- `keyName` -- `filename` that was given to `parseKey` +- `format` -- the `format` that was trying to parse the key (see `parseKey`) +- `innerErr` -- the inner Error thrown by the format parser + +### `KeyEncryptedError` + +The key is encrypted with a symmetric key (ie, it is password protected). The +parsing operation would succeed if it was given the `passphrase` option. + +Properties + +- `keyName` -- `filename` that was given to `parseKey` +- `format` -- the `format` that was trying to parse the key (currently can only + be `"pem"`) + +### `CertificateParseError` + +The certificate data given could not be parsed as a valid certificate. + +Properties + +- `certName` -- `filename` that was given to `parseCertificate` +- `format` -- the `format` that was trying to parse the key + (see `parseCertificate`) +- `innerErr` -- the inner Error thrown by the format parser + +Friends of sshpk +---------------- + + * [`sshpk-agent`](https://github.com/arekinath/node-sshpk-agent) is a library + for speaking the `ssh-agent` protocol from node.js, which uses `sshpk` diff --git a/node_modules/sshpk/bin/sshpk-conv b/node_modules/sshpk/bin/sshpk-conv new file mode 100755 index 000000000..e839ede5b --- /dev/null +++ b/node_modules/sshpk/bin/sshpk-conv @@ -0,0 +1,243 @@ +#!/usr/bin/env node +// -*- mode: js -*- +// vim: set filetype=javascript : +// Copyright 2018 Joyent, Inc. All rights reserved. + +var dashdash = require('dashdash'); +var sshpk = require('../lib/index'); +var fs = require('fs'); +var path = require('path'); +var tty = require('tty'); +var readline = require('readline'); +var getPassword = require('getpass').getPass; + +var options = [ + { + names: ['outformat', 't'], + type: 'string', + help: 'Output format' + }, + { + names: ['informat', 'T'], + type: 'string', + help: 'Input format' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'Input file name (default stdin)' + }, + { + names: ['out', 'o'], + type: 'string', + help: 'Output file name (default stdout)' + }, + { + names: ['private', 'p'], + type: 'bool', + help: 'Produce a private key as output' + }, + { + names: ['derive', 'd'], + type: 'string', + help: 'Output a new key derived from this one, with given algo' + }, + { + names: ['identify', 'i'], + type: 'bool', + help: 'Print key metadata instead of converting' + }, + { + names: ['fingerprint', 'F'], + type: 'bool', + help: 'Output key fingerprint' + }, + { + names: ['hash', 'H'], + type: 'string', + help: 'Hash function to use for key fingeprint with -F' + }, + { + names: ['spki', 's'], + type: 'bool', + help: 'With -F, generates an SPKI fingerprint instead of SSH' + }, + { + names: ['comment', 'c'], + type: 'string', + help: 'Set key comment, if output format supports' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Shows this help text' + } +]; + +if (require.main === module) { + var parser = dashdash.createParser({ + options: options + }); + + try { + var opts = parser.parse(process.argv); + } catch (e) { + console.error('sshpk-conv: error: %s', e.message); + process.exit(1); + } + + if (opts.help || opts._args.length > 1) { + var help = parser.help({}).trimRight(); + console.error('sshpk-conv: converts between SSH key formats\n'); + console.error(help); + console.error('\navailable key formats:'); + console.error(' - pem, pkcs1 eg id_rsa'); + console.error(' - ssh eg id_rsa.pub'); + console.error(' - pkcs8 format you want for openssl'); + console.error(' - openssh like output of ssh-keygen -o'); + console.error(' - rfc4253 raw OpenSSH wire format'); + console.error(' - dnssec dnssec-keygen format'); + console.error(' - putty PuTTY ppk format'); + console.error('\navailable fingerprint formats:'); + console.error(' - hex colon-separated hex for SSH'); + console.error(' straight hex for SPKI'); + console.error(' - base64 SHA256:* format from OpenSSH'); + process.exit(1); + } + + /* + * Key derivation can only be done on private keys, so use of the -d + * option necessarily implies -p. + */ + if (opts.derive) + opts.private = true; + + var inFile = process.stdin; + var inFileName = 'stdin'; + + var inFilePath; + if (opts.file) { + inFilePath = opts.file; + } else if (opts._args.length === 1) { + inFilePath = opts._args[0]; + } + + if (inFilePath) + inFileName = path.basename(inFilePath); + + try { + if (inFilePath) { + fs.accessSync(inFilePath, fs.R_OK); + inFile = fs.createReadStream(inFilePath); + } + } catch (e) { + ifError(e, 'error opening input file'); + } + + var outFile = process.stdout; + + try { + if (opts.out && !opts.identify) { + fs.accessSync(path.dirname(opts.out), fs.W_OK); + outFile = fs.createWriteStream(opts.out); + } + } catch (e) { + ifError(e, 'error opening output file'); + } + + var bufs = []; + inFile.on('readable', function () { + var data; + while ((data = inFile.read())) + bufs.push(data); + }); + var parseOpts = {}; + parseOpts.filename = inFileName; + inFile.on('end', function processKey() { + var buf = Buffer.concat(bufs); + var fmt = 'auto'; + if (opts.informat) + fmt = opts.informat; + var f = sshpk.parseKey; + if (opts.private) + f = sshpk.parsePrivateKey; + try { + var key = f(buf, fmt, parseOpts); + } catch (e) { + if (e.name === 'KeyEncryptedError') { + getPassword(function (err, pw) { + if (err) + ifError(err); + parseOpts.passphrase = pw; + processKey(); + }); + return; + } + ifError(e); + } + + if (opts.derive) + key = key.derive(opts.derive); + + if (opts.comment) + key.comment = opts.comment; + + if (opts.identify) { + var kind = 'public'; + if (sshpk.PrivateKey.isPrivateKey(key)) + kind = 'private'; + console.log('%s: a %d bit %s %s key', inFileName, + key.size, key.type.toUpperCase(), kind); + if (key.type === 'ecdsa') + console.log('ECDSA curve: %s', key.curve); + if (key.comment) + console.log('Comment: %s', key.comment); + console.log('SHA256 fingerprint: ' + + key.fingerprint('sha256').toString()); + console.log('MD5 fingerprint: ' + + key.fingerprint('md5').toString()); + console.log('SPKI-SHA256 fingerprint: ' + + key.fingerprint('sha256', 'spki').toString()); + process.exit(0); + return; + } + + if (opts.fingerprint) { + var hash = opts.hash; + var type = opts.spki ? 'spki' : 'ssh'; + var format = opts.outformat; + var fp = key.fingerprint(hash, type).toString(format); + outFile.write(fp); + outFile.write('\n'); + outFile.once('drain', function () { + process.exit(0); + }); + return; + } + + fmt = undefined; + if (opts.outformat) + fmt = opts.outformat; + outFile.write(key.toBuffer(fmt)); + if (fmt === 'ssh' || + (!opts.private && fmt === undefined)) + outFile.write('\n'); + outFile.once('drain', function () { + process.exit(0); + }); + }); +} + +function ifError(e, txt) { + if (txt) + txt = txt + ': '; + else + txt = ''; + console.error('sshpk-conv: ' + txt + e.name + ': ' + e.message); + if (process.env['DEBUG'] || process.env['V']) { + console.error(e.stack); + if (e.innerErr) + console.error(e.innerErr.stack); + } + process.exit(1); +} diff --git a/node_modules/sshpk/bin/sshpk-sign b/node_modules/sshpk/bin/sshpk-sign new file mode 100755 index 000000000..673fc9864 --- /dev/null +++ b/node_modules/sshpk/bin/sshpk-sign @@ -0,0 +1,191 @@ +#!/usr/bin/env node +// -*- mode: js -*- +// vim: set filetype=javascript : +// Copyright 2015 Joyent, Inc. All rights reserved. + +var dashdash = require('dashdash'); +var sshpk = require('../lib/index'); +var fs = require('fs'); +var path = require('path'); +var getPassword = require('getpass').getPass; + +var options = [ + { + names: ['hash', 'H'], + type: 'string', + help: 'Hash algorithm (sha1, sha256, sha384, sha512)' + }, + { + names: ['verbose', 'v'], + type: 'bool', + help: 'Display verbose info about key and hash used' + }, + { + names: ['identity', 'i'], + type: 'string', + help: 'Path to key to use' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'Input filename' + }, + { + names: ['out', 'o'], + type: 'string', + help: 'Output filename' + }, + { + names: ['format', 't'], + type: 'string', + help: 'Signature format (asn1, ssh, raw)' + }, + { + names: ['binary', 'b'], + type: 'bool', + help: 'Output raw binary instead of base64' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Shows this help text' + } +]; + +var parseOpts = {}; + +if (require.main === module) { + var parser = dashdash.createParser({ + options: options + }); + + try { + var opts = parser.parse(process.argv); + } catch (e) { + console.error('sshpk-sign: error: %s', e.message); + process.exit(1); + } + + if (opts.help || opts._args.length > 1) { + var help = parser.help({}).trimRight(); + console.error('sshpk-sign: sign data using an SSH key\n'); + console.error(help); + process.exit(1); + } + + if (!opts.identity) { + var help = parser.help({}).trimRight(); + console.error('sshpk-sign: the -i or --identity option ' + + 'is required\n'); + console.error(help); + process.exit(1); + } + + var keyData = fs.readFileSync(opts.identity); + parseOpts.filename = opts.identity; + + run(); +} + +function run() { + var key; + try { + key = sshpk.parsePrivateKey(keyData, 'auto', parseOpts); + } catch (e) { + if (e.name === 'KeyEncryptedError') { + getPassword(function (err, pw) { + parseOpts.passphrase = pw; + run(); + }); + return; + } + console.error('sshpk-sign: error loading private key "' + + opts.identity + '": ' + e.name + ': ' + e.message); + process.exit(1); + } + + var hash = opts.hash || key.defaultHashAlgorithm(); + + var signer; + try { + signer = key.createSign(hash); + } catch (e) { + console.error('sshpk-sign: error creating signer: ' + + e.name + ': ' + e.message); + process.exit(1); + } + + if (opts.verbose) { + console.error('sshpk-sign: using %s-%s with a %d bit key', + key.type, hash, key.size); + } + + var inFile = process.stdin; + var inFileName = 'stdin'; + + var inFilePath; + if (opts.file) { + inFilePath = opts.file; + } else if (opts._args.length === 1) { + inFilePath = opts._args[0]; + } + + if (inFilePath) + inFileName = path.basename(inFilePath); + + try { + if (inFilePath) { + fs.accessSync(inFilePath, fs.R_OK); + inFile = fs.createReadStream(inFilePath); + } + } catch (e) { + console.error('sshpk-sign: error opening input file' + + ': ' + e.name + ': ' + e.message); + process.exit(1); + } + + var outFile = process.stdout; + + try { + if (opts.out && !opts.identify) { + fs.accessSync(path.dirname(opts.out), fs.W_OK); + outFile = fs.createWriteStream(opts.out); + } + } catch (e) { + console.error('sshpk-sign: error opening output file' + + ': ' + e.name + ': ' + e.message); + process.exit(1); + } + + inFile.pipe(signer); + inFile.on('end', function () { + var sig; + try { + sig = signer.sign(); + } catch (e) { + console.error('sshpk-sign: error signing data: ' + + e.name + ': ' + e.message); + process.exit(1); + } + + var fmt = opts.format || 'asn1'; + var output; + try { + output = sig.toBuffer(fmt); + if (!opts.binary) + output = output.toString('base64'); + } catch (e) { + console.error('sshpk-sign: error converting signature' + + ' to ' + fmt + ' format: ' + e.name + ': ' + + e.message); + process.exit(1); + } + + outFile.write(output); + if (!opts.binary) + outFile.write('\n'); + outFile.once('drain', function () { + process.exit(0); + }); + }); +} diff --git a/node_modules/sshpk/bin/sshpk-verify b/node_modules/sshpk/bin/sshpk-verify new file mode 100755 index 000000000..fc71a82c8 --- /dev/null +++ b/node_modules/sshpk/bin/sshpk-verify @@ -0,0 +1,167 @@ +#!/usr/bin/env node +// -*- mode: js -*- +// vim: set filetype=javascript : +// Copyright 2015 Joyent, Inc. All rights reserved. + +var dashdash = require('dashdash'); +var sshpk = require('../lib/index'); +var fs = require('fs'); +var path = require('path'); +var Buffer = require('safer-buffer').Buffer; + +var options = [ + { + names: ['hash', 'H'], + type: 'string', + help: 'Hash algorithm (sha1, sha256, sha384, sha512)' + }, + { + names: ['verbose', 'v'], + type: 'bool', + help: 'Display verbose info about key and hash used' + }, + { + names: ['identity', 'i'], + type: 'string', + help: 'Path to (public) key to use' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'Input filename' + }, + { + names: ['format', 't'], + type: 'string', + help: 'Signature format (asn1, ssh, raw)' + }, + { + names: ['signature', 's'], + type: 'string', + help: 'base64-encoded signature data' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Shows this help text' + } +]; + +if (require.main === module) { + var parser = dashdash.createParser({ + options: options + }); + + try { + var opts = parser.parse(process.argv); + } catch (e) { + console.error('sshpk-verify: error: %s', e.message); + process.exit(3); + } + + if (opts.help || opts._args.length > 1) { + var help = parser.help({}).trimRight(); + console.error('sshpk-verify: sign data using an SSH key\n'); + console.error(help); + process.exit(3); + } + + if (!opts.identity) { + var help = parser.help({}).trimRight(); + console.error('sshpk-verify: the -i or --identity option ' + + 'is required\n'); + console.error(help); + process.exit(3); + } + + if (!opts.signature) { + var help = parser.help({}).trimRight(); + console.error('sshpk-verify: the -s or --signature option ' + + 'is required\n'); + console.error(help); + process.exit(3); + } + + var keyData = fs.readFileSync(opts.identity); + + var key; + try { + key = sshpk.parseKey(keyData); + } catch (e) { + console.error('sshpk-verify: error loading key "' + + opts.identity + '": ' + e.name + ': ' + e.message); + process.exit(2); + } + + var fmt = opts.format || 'asn1'; + var sigData = Buffer.from(opts.signature, 'base64'); + + var sig; + try { + sig = sshpk.parseSignature(sigData, key.type, fmt); + } catch (e) { + console.error('sshpk-verify: error parsing signature: ' + + e.name + ': ' + e.message); + process.exit(2); + } + + var hash = opts.hash || key.defaultHashAlgorithm(); + + var verifier; + try { + verifier = key.createVerify(hash); + } catch (e) { + console.error('sshpk-verify: error creating verifier: ' + + e.name + ': ' + e.message); + process.exit(2); + } + + if (opts.verbose) { + console.error('sshpk-verify: using %s-%s with a %d bit key', + key.type, hash, key.size); + } + + var inFile = process.stdin; + var inFileName = 'stdin'; + + var inFilePath; + if (opts.file) { + inFilePath = opts.file; + } else if (opts._args.length === 1) { + inFilePath = opts._args[0]; + } + + if (inFilePath) + inFileName = path.basename(inFilePath); + + try { + if (inFilePath) { + fs.accessSync(inFilePath, fs.R_OK); + inFile = fs.createReadStream(inFilePath); + } + } catch (e) { + console.error('sshpk-verify: error opening input file' + + ': ' + e.name + ': ' + e.message); + process.exit(2); + } + + inFile.pipe(verifier); + inFile.on('end', function () { + var ret; + try { + ret = verifier.verify(sig); + } catch (e) { + console.error('sshpk-verify: error verifying data: ' + + e.name + ': ' + e.message); + process.exit(1); + } + + if (ret) { + console.error('OK'); + process.exit(0); + } + + console.error('NOT OK'); + process.exit(1); + }); +} diff --git a/node_modules/sshpk/lib/algs.js b/node_modules/sshpk/lib/algs.js new file mode 100644 index 000000000..3b01e7d1d --- /dev/null +++ b/node_modules/sshpk/lib/algs.js @@ -0,0 +1,168 @@ +// Copyright 2015 Joyent, Inc. + +var Buffer = require('safer-buffer').Buffer; + +var algInfo = { + 'dsa': { + parts: ['p', 'q', 'g', 'y'], + sizePart: 'p' + }, + 'rsa': { + parts: ['e', 'n'], + sizePart: 'n' + }, + 'ecdsa': { + parts: ['curve', 'Q'], + sizePart: 'Q' + }, + 'ed25519': { + parts: ['A'], + sizePart: 'A' + } +}; +algInfo['curve25519'] = algInfo['ed25519']; + +var algPrivInfo = { + 'dsa': { + parts: ['p', 'q', 'g', 'y', 'x'] + }, + 'rsa': { + parts: ['n', 'e', 'd', 'iqmp', 'p', 'q'] + }, + 'ecdsa': { + parts: ['curve', 'Q', 'd'] + }, + 'ed25519': { + parts: ['A', 'k'] + } +}; +algPrivInfo['curve25519'] = algPrivInfo['ed25519']; + +var hashAlgs = { + 'md5': true, + 'sha1': true, + 'sha256': true, + 'sha384': true, + 'sha512': true +}; + +/* + * Taken from + * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf + */ +var curves = { + 'nistp256': { + size: 256, + pkcs8oid: '1.2.840.10045.3.1.7', + p: Buffer.from(('00' + + 'ffffffff 00000001 00000000 00000000' + + '00000000 ffffffff ffffffff ffffffff'). + replace(/ /g, ''), 'hex'), + a: Buffer.from(('00' + + 'FFFFFFFF 00000001 00000000 00000000' + + '00000000 FFFFFFFF FFFFFFFF FFFFFFFC'). + replace(/ /g, ''), 'hex'), + b: Buffer.from(( + '5ac635d8 aa3a93e7 b3ebbd55 769886bc' + + '651d06b0 cc53b0f6 3bce3c3e 27d2604b'). + replace(/ /g, ''), 'hex'), + s: Buffer.from(('00' + + 'c49d3608 86e70493 6a6678e1 139d26b7' + + '819f7e90'). + replace(/ /g, ''), 'hex'), + n: Buffer.from(('00' + + 'ffffffff 00000000 ffffffff ffffffff' + + 'bce6faad a7179e84 f3b9cac2 fc632551'). + replace(/ /g, ''), 'hex'), + G: Buffer.from(('04' + + '6b17d1f2 e12c4247 f8bce6e5 63a440f2' + + '77037d81 2deb33a0 f4a13945 d898c296' + + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' + + '2bce3357 6b315ece cbb64068 37bf51f5'). + replace(/ /g, ''), 'hex') + }, + 'nistp384': { + size: 384, + pkcs8oid: '1.3.132.0.34', + p: Buffer.from(('00' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff fffffffe' + + 'ffffffff 00000000 00000000 ffffffff'). + replace(/ /g, ''), 'hex'), + a: Buffer.from(('00' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' + + 'FFFFFFFF 00000000 00000000 FFFFFFFC'). + replace(/ /g, ''), 'hex'), + b: Buffer.from(( + 'b3312fa7 e23ee7e4 988e056b e3f82d19' + + '181d9c6e fe814112 0314088f 5013875a' + + 'c656398d 8a2ed19d 2a85c8ed d3ec2aef'). + replace(/ /g, ''), 'hex'), + s: Buffer.from(('00' + + 'a335926a a319a27a 1d00896a 6773a482' + + '7acdac73'). + replace(/ /g, ''), 'hex'), + n: Buffer.from(('00' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff c7634d81 f4372ddf' + + '581a0db2 48b0a77a ecec196a ccc52973'). + replace(/ /g, ''), 'hex'), + G: Buffer.from(('04' + + 'aa87ca22 be8b0537 8eb1c71e f320ad74' + + '6e1d3b62 8ba79b98 59f741e0 82542a38' + + '5502f25d bf55296c 3a545e38 72760ab7' + + '3617de4a 96262c6f 5d9e98bf 9292dc29' + + 'f8f41dbd 289a147c e9da3113 b5f0b8c0' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'). + replace(/ /g, ''), 'hex') + }, + 'nistp521': { + size: 521, + pkcs8oid: '1.3.132.0.35', + p: Buffer.from(( + '01ffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffff').replace(/ /g, ''), 'hex'), + a: Buffer.from(('01FF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + + 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC'). + replace(/ /g, ''), 'hex'), + b: Buffer.from(('51' + + '953eb961 8e1c9a1f 929a21a0 b68540ee' + + 'a2da725b 99b315f3 b8b48991 8ef109e1' + + '56193951 ec7e937b 1652c0bd 3bb1bf07' + + '3573df88 3d2c34f1 ef451fd4 6b503f00'). + replace(/ /g, ''), 'hex'), + s: Buffer.from(('00' + + 'd09e8800 291cb853 96cc6717 393284aa' + + 'a0da64ba').replace(/ /g, ''), 'hex'), + n: Buffer.from(('01ff' + + 'ffffffff ffffffff ffffffff ffffffff' + + 'ffffffff ffffffff ffffffff fffffffa' + + '51868783 bf2f966b 7fcc0148 f709a5d0' + + '3bb5c9b8 899c47ae bb6fb71e 91386409'). + replace(/ /g, ''), 'hex'), + G: Buffer.from(('04' + + '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' + + '9c648139 053fb521 f828af60 6b4d3dba' + + 'a14b5e77 efe75928 fe1dc127 a2ffa8de' + + '3348b3c1 856a429b f97e7e31 c2e5bd66' + + '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' + + '98f54449 579b4468 17afbd17 273e662c' + + '97ee7299 5ef42640 c550b901 3fad0761' + + '353c7086 a272c240 88be9476 9fd16650'). + replace(/ /g, ''), 'hex') + } +}; + +module.exports = { + info: algInfo, + privInfo: algPrivInfo, + hashAlgs: hashAlgs, + curves: curves +}; diff --git a/node_modules/sshpk/lib/certificate.js b/node_modules/sshpk/lib/certificate.js new file mode 100644 index 000000000..693235707 --- /dev/null +++ b/node_modules/sshpk/lib/certificate.js @@ -0,0 +1,410 @@ +// Copyright 2016 Joyent, Inc. + +module.exports = Certificate; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var errs = require('./errors'); +var util = require('util'); +var utils = require('./utils'); +var Key = require('./key'); +var PrivateKey = require('./private-key'); +var Identity = require('./identity'); + +var formats = {}; +formats['openssh'] = require('./formats/openssh-cert'); +formats['x509'] = require('./formats/x509'); +formats['pem'] = require('./formats/x509-pem'); + +var CertificateParseError = errs.CertificateParseError; +var InvalidAlgorithmError = errs.InvalidAlgorithmError; + +function Certificate(opts) { + assert.object(opts, 'options'); + assert.arrayOfObject(opts.subjects, 'options.subjects'); + utils.assertCompatible(opts.subjects[0], Identity, [1, 0], + 'options.subjects'); + utils.assertCompatible(opts.subjectKey, Key, [1, 0], + 'options.subjectKey'); + utils.assertCompatible(opts.issuer, Identity, [1, 0], 'options.issuer'); + if (opts.issuerKey !== undefined) { + utils.assertCompatible(opts.issuerKey, Key, [1, 0], + 'options.issuerKey'); + } + assert.object(opts.signatures, 'options.signatures'); + assert.buffer(opts.serial, 'options.serial'); + assert.date(opts.validFrom, 'options.validFrom'); + assert.date(opts.validUntil, 'optons.validUntil'); + + assert.optionalArrayOfString(opts.purposes, 'options.purposes'); + + this._hashCache = {}; + + this.subjects = opts.subjects; + this.issuer = opts.issuer; + this.subjectKey = opts.subjectKey; + this.issuerKey = opts.issuerKey; + this.signatures = opts.signatures; + this.serial = opts.serial; + this.validFrom = opts.validFrom; + this.validUntil = opts.validUntil; + this.purposes = opts.purposes; +} + +Certificate.formats = formats; + +Certificate.prototype.toBuffer = function (format, options) { + if (format === undefined) + format = 'x509'; + assert.string(format, 'format'); + assert.object(formats[format], 'formats[format]'); + assert.optionalObject(options, 'options'); + + return (formats[format].write(this, options)); +}; + +Certificate.prototype.toString = function (format, options) { + if (format === undefined) + format = 'pem'; + return (this.toBuffer(format, options).toString()); +}; + +Certificate.prototype.fingerprint = function (algo) { + if (algo === undefined) + algo = 'sha256'; + assert.string(algo, 'algorithm'); + var opts = { + type: 'certificate', + hash: this.hash(algo), + algorithm: algo + }; + return (new Fingerprint(opts)); +}; + +Certificate.prototype.hash = function (algo) { + assert.string(algo, 'algorithm'); + algo = algo.toLowerCase(); + if (algs.hashAlgs[algo] === undefined) + throw (new InvalidAlgorithmError(algo)); + + if (this._hashCache[algo]) + return (this._hashCache[algo]); + + var hash = crypto.createHash(algo). + update(this.toBuffer('x509')).digest(); + this._hashCache[algo] = hash; + return (hash); +}; + +Certificate.prototype.isExpired = function (when) { + if (when === undefined) + when = new Date(); + return (!((when.getTime() >= this.validFrom.getTime()) && + (when.getTime() < this.validUntil.getTime()))); +}; + +Certificate.prototype.isSignedBy = function (issuerCert) { + utils.assertCompatible(issuerCert, Certificate, [1, 0], 'issuer'); + + if (!this.issuer.equals(issuerCert.subjects[0])) + return (false); + if (this.issuer.purposes && this.issuer.purposes.length > 0 && + this.issuer.purposes.indexOf('ca') === -1) { + return (false); + } + + return (this.isSignedByKey(issuerCert.subjectKey)); +}; + +Certificate.prototype.getExtension = function (keyOrOid) { + assert.string(keyOrOid, 'keyOrOid'); + var ext = this.getExtensions().filter(function (maybeExt) { + if (maybeExt.format === 'x509') + return (maybeExt.oid === keyOrOid); + if (maybeExt.format === 'openssh') + return (maybeExt.name === keyOrOid); + return (false); + })[0]; + return (ext); +}; + +Certificate.prototype.getExtensions = function () { + var exts = []; + var x509 = this.signatures.x509; + if (x509 && x509.extras && x509.extras.exts) { + x509.extras.exts.forEach(function (ext) { + ext.format = 'x509'; + exts.push(ext); + }); + } + var openssh = this.signatures.openssh; + if (openssh && openssh.exts) { + openssh.exts.forEach(function (ext) { + ext.format = 'openssh'; + exts.push(ext); + }); + } + return (exts); +}; + +Certificate.prototype.isSignedByKey = function (issuerKey) { + utils.assertCompatible(issuerKey, Key, [1, 2], 'issuerKey'); + + if (this.issuerKey !== undefined) { + return (this.issuerKey. + fingerprint('sha512').matches(issuerKey)); + } + + var fmt = Object.keys(this.signatures)[0]; + var valid = formats[fmt].verify(this, issuerKey); + if (valid) + this.issuerKey = issuerKey; + return (valid); +}; + +Certificate.prototype.signWith = function (key) { + utils.assertCompatible(key, PrivateKey, [1, 2], 'key'); + var fmts = Object.keys(formats); + var didOne = false; + for (var i = 0; i < fmts.length; ++i) { + if (fmts[i] !== 'pem') { + var ret = formats[fmts[i]].sign(this, key); + if (ret === true) + didOne = true; + } + } + if (!didOne) { + throw (new Error('Failed to sign the certificate for any ' + + 'available certificate formats')); + } +}; + +Certificate.createSelfSigned = function (subjectOrSubjects, key, options) { + var subjects; + if (Array.isArray(subjectOrSubjects)) + subjects = subjectOrSubjects; + else + subjects = [subjectOrSubjects]; + + assert.arrayOfObject(subjects); + subjects.forEach(function (subject) { + utils.assertCompatible(subject, Identity, [1, 0], 'subject'); + }); + + utils.assertCompatible(key, PrivateKey, [1, 2], 'private key'); + + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalObject(options.validFrom, 'options.validFrom'); + assert.optionalObject(options.validUntil, 'options.validUntil'); + var validFrom = options.validFrom; + var validUntil = options.validUntil; + if (validFrom === undefined) + validFrom = new Date(); + if (validUntil === undefined) { + assert.optionalNumber(options.lifetime, 'options.lifetime'); + var lifetime = options.lifetime; + if (lifetime === undefined) + lifetime = 10*365*24*3600; + validUntil = new Date(); + validUntil.setTime(validUntil.getTime() + lifetime*1000); + } + assert.optionalBuffer(options.serial, 'options.serial'); + var serial = options.serial; + if (serial === undefined) + serial = Buffer.from('0000000000000001', 'hex'); + + var purposes = options.purposes; + if (purposes === undefined) + purposes = []; + + if (purposes.indexOf('signature') === -1) + purposes.push('signature'); + + /* Self-signed certs are always CAs. */ + if (purposes.indexOf('ca') === -1) + purposes.push('ca'); + if (purposes.indexOf('crl') === -1) + purposes.push('crl'); + + /* + * If we weren't explicitly given any other purposes, do the sensible + * thing and add some basic ones depending on the subject type. + */ + if (purposes.length <= 3) { + var hostSubjects = subjects.filter(function (subject) { + return (subject.type === 'host'); + }); + var userSubjects = subjects.filter(function (subject) { + return (subject.type === 'user'); + }); + if (hostSubjects.length > 0) { + if (purposes.indexOf('serverAuth') === -1) + purposes.push('serverAuth'); + } + if (userSubjects.length > 0) { + if (purposes.indexOf('clientAuth') === -1) + purposes.push('clientAuth'); + } + if (userSubjects.length > 0 || hostSubjects.length > 0) { + if (purposes.indexOf('keyAgreement') === -1) + purposes.push('keyAgreement'); + if (key.type === 'rsa' && + purposes.indexOf('encryption') === -1) + purposes.push('encryption'); + } + } + + var cert = new Certificate({ + subjects: subjects, + issuer: subjects[0], + subjectKey: key.toPublic(), + issuerKey: key.toPublic(), + signatures: {}, + serial: serial, + validFrom: validFrom, + validUntil: validUntil, + purposes: purposes + }); + cert.signWith(key); + + return (cert); +}; + +Certificate.create = + function (subjectOrSubjects, key, issuer, issuerKey, options) { + var subjects; + if (Array.isArray(subjectOrSubjects)) + subjects = subjectOrSubjects; + else + subjects = [subjectOrSubjects]; + + assert.arrayOfObject(subjects); + subjects.forEach(function (subject) { + utils.assertCompatible(subject, Identity, [1, 0], 'subject'); + }); + + utils.assertCompatible(key, Key, [1, 0], 'key'); + if (PrivateKey.isPrivateKey(key)) + key = key.toPublic(); + utils.assertCompatible(issuer, Identity, [1, 0], 'issuer'); + utils.assertCompatible(issuerKey, PrivateKey, [1, 2], 'issuer key'); + + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalObject(options.validFrom, 'options.validFrom'); + assert.optionalObject(options.validUntil, 'options.validUntil'); + var validFrom = options.validFrom; + var validUntil = options.validUntil; + if (validFrom === undefined) + validFrom = new Date(); + if (validUntil === undefined) { + assert.optionalNumber(options.lifetime, 'options.lifetime'); + var lifetime = options.lifetime; + if (lifetime === undefined) + lifetime = 10*365*24*3600; + validUntil = new Date(); + validUntil.setTime(validUntil.getTime() + lifetime*1000); + } + assert.optionalBuffer(options.serial, 'options.serial'); + var serial = options.serial; + if (serial === undefined) + serial = Buffer.from('0000000000000001', 'hex'); + + var purposes = options.purposes; + if (purposes === undefined) + purposes = []; + + if (purposes.indexOf('signature') === -1) + purposes.push('signature'); + + if (options.ca === true) { + if (purposes.indexOf('ca') === -1) + purposes.push('ca'); + if (purposes.indexOf('crl') === -1) + purposes.push('crl'); + } + + var hostSubjects = subjects.filter(function (subject) { + return (subject.type === 'host'); + }); + var userSubjects = subjects.filter(function (subject) { + return (subject.type === 'user'); + }); + if (hostSubjects.length > 0) { + if (purposes.indexOf('serverAuth') === -1) + purposes.push('serverAuth'); + } + if (userSubjects.length > 0) { + if (purposes.indexOf('clientAuth') === -1) + purposes.push('clientAuth'); + } + if (userSubjects.length > 0 || hostSubjects.length > 0) { + if (purposes.indexOf('keyAgreement') === -1) + purposes.push('keyAgreement'); + if (key.type === 'rsa' && + purposes.indexOf('encryption') === -1) + purposes.push('encryption'); + } + + var cert = new Certificate({ + subjects: subjects, + issuer: issuer, + subjectKey: key, + issuerKey: issuerKey.toPublic(), + signatures: {}, + serial: serial, + validFrom: validFrom, + validUntil: validUntil, + purposes: purposes + }); + cert.signWith(issuerKey); + + return (cert); +}; + +Certificate.parse = function (data, format, options) { + if (typeof (data) !== 'string') + assert.buffer(data, 'data'); + if (format === undefined) + format = 'auto'; + assert.string(format, 'format'); + if (typeof (options) === 'string') + options = { filename: options }; + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalString(options.filename, 'options.filename'); + if (options.filename === undefined) + options.filename = '(unnamed)'; + + assert.object(formats[format], 'formats[format]'); + + try { + var k = formats[format].read(data, options); + return (k); + } catch (e) { + throw (new CertificateParseError(options.filename, format, e)); + } +}; + +Certificate.isCertificate = function (obj, ver) { + return (utils.isCompatible(obj, Certificate, ver)); +}; + +/* + * API versions for Certificate: + * [1,0] -- initial ver + * [1,1] -- openssh format now unpacks extensions + */ +Certificate.prototype._sshpkApiVersion = [1, 1]; + +Certificate._oldVersionDetect = function (obj) { + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/dhe.js b/node_modules/sshpk/lib/dhe.js new file mode 100644 index 000000000..a3c8032cf --- /dev/null +++ b/node_modules/sshpk/lib/dhe.js @@ -0,0 +1,397 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + DiffieHellman: DiffieHellman, + generateECDSA: generateECDSA, + generateED25519: generateED25519 +}; + +var assert = require('assert-plus'); +var crypto = require('crypto'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var utils = require('./utils'); +var nacl = require('tweetnacl'); + +var Key = require('./key'); +var PrivateKey = require('./private-key'); + +var CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined); + +var ecdh = require('ecc-jsbn'); +var ec = require('ecc-jsbn/lib/ec'); +var jsbn = require('jsbn').BigInteger; + +function DiffieHellman(key) { + utils.assertCompatible(key, Key, [1, 4], 'key'); + this._isPriv = PrivateKey.isPrivateKey(key, [1, 3]); + this._algo = key.type; + this._curve = key.curve; + this._key = key; + if (key.type === 'dsa') { + if (!CRYPTO_HAVE_ECDH) { + throw (new Error('Due to bugs in the node 0.10 ' + + 'crypto API, node 0.12.x or later is required ' + + 'to use DH')); + } + this._dh = crypto.createDiffieHellman( + key.part.p.data, undefined, + key.part.g.data, undefined); + this._p = key.part.p; + this._g = key.part.g; + if (this._isPriv) + this._dh.setPrivateKey(key.part.x.data); + this._dh.setPublicKey(key.part.y.data); + + } else if (key.type === 'ecdsa') { + if (!CRYPTO_HAVE_ECDH) { + this._ecParams = new X9ECParameters(this._curve); + + if (this._isPriv) { + this._priv = new ECPrivate( + this._ecParams, key.part.d.data); + } + return; + } + + var curve = { + 'nistp256': 'prime256v1', + 'nistp384': 'secp384r1', + 'nistp521': 'secp521r1' + }[key.curve]; + this._dh = crypto.createECDH(curve); + if (typeof (this._dh) !== 'object' || + typeof (this._dh.setPrivateKey) !== 'function') { + CRYPTO_HAVE_ECDH = false; + DiffieHellman.call(this, key); + return; + } + if (this._isPriv) + this._dh.setPrivateKey(key.part.d.data); + this._dh.setPublicKey(key.part.Q.data); + + } else if (key.type === 'curve25519') { + if (this._isPriv) { + utils.assertCompatible(key, PrivateKey, [1, 5], 'key'); + this._priv = key.part.k.data; + } + + } else { + throw (new Error('DH not supported for ' + key.type + ' keys')); + } +} + +DiffieHellman.prototype.getPublicKey = function () { + if (this._isPriv) + return (this._key.toPublic()); + return (this._key); +}; + +DiffieHellman.prototype.getPrivateKey = function () { + if (this._isPriv) + return (this._key); + else + return (undefined); +}; +DiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey; + +DiffieHellman.prototype._keyCheck = function (pk, isPub) { + assert.object(pk, 'key'); + if (!isPub) + utils.assertCompatible(pk, PrivateKey, [1, 3], 'key'); + utils.assertCompatible(pk, Key, [1, 4], 'key'); + + if (pk.type !== this._algo) { + throw (new Error('A ' + pk.type + ' key cannot be used in ' + + this._algo + ' Diffie-Hellman')); + } + + if (pk.curve !== this._curve) { + throw (new Error('A key from the ' + pk.curve + ' curve ' + + 'cannot be used with a ' + this._curve + + ' Diffie-Hellman')); + } + + if (pk.type === 'dsa') { + assert.deepEqual(pk.part.p, this._p, + 'DSA key prime does not match'); + assert.deepEqual(pk.part.g, this._g, + 'DSA key generator does not match'); + } +}; + +DiffieHellman.prototype.setKey = function (pk) { + this._keyCheck(pk); + + if (pk.type === 'dsa') { + this._dh.setPrivateKey(pk.part.x.data); + this._dh.setPublicKey(pk.part.y.data); + + } else if (pk.type === 'ecdsa') { + if (CRYPTO_HAVE_ECDH) { + this._dh.setPrivateKey(pk.part.d.data); + this._dh.setPublicKey(pk.part.Q.data); + } else { + this._priv = new ECPrivate( + this._ecParams, pk.part.d.data); + } + + } else if (pk.type === 'curve25519') { + var k = pk.part.k; + if (!pk.part.k) + k = pk.part.r; + this._priv = k.data; + if (this._priv[0] === 0x00) + this._priv = this._priv.slice(1); + this._priv = this._priv.slice(0, 32); + } + this._key = pk; + this._isPriv = true; +}; +DiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey; + +DiffieHellman.prototype.computeSecret = function (otherpk) { + this._keyCheck(otherpk, true); + if (!this._isPriv) + throw (new Error('DH exchange has not been initialized with ' + + 'a private key yet')); + + var pub; + if (this._algo === 'dsa') { + return (this._dh.computeSecret( + otherpk.part.y.data)); + + } else if (this._algo === 'ecdsa') { + if (CRYPTO_HAVE_ECDH) { + return (this._dh.computeSecret( + otherpk.part.Q.data)); + } else { + pub = new ECPublic( + this._ecParams, otherpk.part.Q.data); + return (this._priv.deriveSharedSecret(pub)); + } + + } else if (this._algo === 'curve25519') { + pub = otherpk.part.A.data; + while (pub[0] === 0x00 && pub.length > 32) + pub = pub.slice(1); + var priv = this._priv; + assert.strictEqual(pub.length, 32); + assert.strictEqual(priv.length, 32); + + var secret = nacl.box.before(new Uint8Array(pub), + new Uint8Array(priv)); + + return (Buffer.from(secret)); + } + + throw (new Error('Invalid algorithm: ' + this._algo)); +}; + +DiffieHellman.prototype.generateKey = function () { + var parts = []; + var priv, pub; + if (this._algo === 'dsa') { + this._dh.generateKeys(); + + parts.push({name: 'p', data: this._p.data}); + parts.push({name: 'q', data: this._key.part.q.data}); + parts.push({name: 'g', data: this._g.data}); + parts.push({name: 'y', data: this._dh.getPublicKey()}); + parts.push({name: 'x', data: this._dh.getPrivateKey()}); + this._key = new PrivateKey({ + type: 'dsa', + parts: parts + }); + this._isPriv = true; + return (this._key); + + } else if (this._algo === 'ecdsa') { + if (CRYPTO_HAVE_ECDH) { + this._dh.generateKeys(); + + parts.push({name: 'curve', + data: Buffer.from(this._curve)}); + parts.push({name: 'Q', data: this._dh.getPublicKey()}); + parts.push({name: 'd', data: this._dh.getPrivateKey()}); + this._key = new PrivateKey({ + type: 'ecdsa', + curve: this._curve, + parts: parts + }); + this._isPriv = true; + return (this._key); + + } else { + var n = this._ecParams.getN(); + var r = new jsbn(crypto.randomBytes(n.bitLength())); + var n1 = n.subtract(jsbn.ONE); + priv = r.mod(n1).add(jsbn.ONE); + pub = this._ecParams.getG().multiply(priv); + + priv = Buffer.from(priv.toByteArray()); + pub = Buffer.from(this._ecParams.getCurve(). + encodePointHex(pub), 'hex'); + + this._priv = new ECPrivate(this._ecParams, priv); + + parts.push({name: 'curve', + data: Buffer.from(this._curve)}); + parts.push({name: 'Q', data: pub}); + parts.push({name: 'd', data: priv}); + + this._key = new PrivateKey({ + type: 'ecdsa', + curve: this._curve, + parts: parts + }); + this._isPriv = true; + return (this._key); + } + + } else if (this._algo === 'curve25519') { + var pair = nacl.box.keyPair(); + priv = Buffer.from(pair.secretKey); + pub = Buffer.from(pair.publicKey); + priv = Buffer.concat([priv, pub]); + assert.strictEqual(priv.length, 64); + assert.strictEqual(pub.length, 32); + + parts.push({name: 'A', data: pub}); + parts.push({name: 'k', data: priv}); + this._key = new PrivateKey({ + type: 'curve25519', + parts: parts + }); + this._isPriv = true; + return (this._key); + } + + throw (new Error('Invalid algorithm: ' + this._algo)); +}; +DiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey; + +/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */ + +function X9ECParameters(name) { + var params = algs.curves[name]; + assert.object(params); + + var p = new jsbn(params.p); + var a = new jsbn(params.a); + var b = new jsbn(params.b); + var n = new jsbn(params.n); + var h = jsbn.ONE; + var curve = new ec.ECCurveFp(p, a, b); + var G = curve.decodePointHex(params.G.toString('hex')); + + this.curve = curve; + this.g = G; + this.n = n; + this.h = h; +} +X9ECParameters.prototype.getCurve = function () { return (this.curve); }; +X9ECParameters.prototype.getG = function () { return (this.g); }; +X9ECParameters.prototype.getN = function () { return (this.n); }; +X9ECParameters.prototype.getH = function () { return (this.h); }; + +function ECPublic(params, buffer) { + this._params = params; + if (buffer[0] === 0x00) + buffer = buffer.slice(1); + this._pub = params.getCurve().decodePointHex(buffer.toString('hex')); +} + +function ECPrivate(params, buffer) { + this._params = params; + this._priv = new jsbn(utils.mpNormalize(buffer)); +} +ECPrivate.prototype.deriveSharedSecret = function (pubKey) { + assert.ok(pubKey instanceof ECPublic); + var S = pubKey._pub.multiply(this._priv); + return (Buffer.from(S.getX().toBigInteger().toByteArray())); +}; + +function generateED25519() { + var pair = nacl.sign.keyPair(); + var priv = Buffer.from(pair.secretKey); + var pub = Buffer.from(pair.publicKey); + assert.strictEqual(priv.length, 64); + assert.strictEqual(pub.length, 32); + + var parts = []; + parts.push({name: 'A', data: pub}); + parts.push({name: 'k', data: priv.slice(0, 32)}); + var key = new PrivateKey({ + type: 'ed25519', + parts: parts + }); + return (key); +} + +/* Generates a new ECDSA private key on a given curve. */ +function generateECDSA(curve) { + var parts = []; + var key; + + if (CRYPTO_HAVE_ECDH) { + /* + * Node crypto doesn't expose key generation directly, but the + * ECDH instances can generate keys. It turns out this just + * calls into the OpenSSL generic key generator, and we can + * read its output happily without doing an actual DH. So we + * use that here. + */ + var osCurve = { + 'nistp256': 'prime256v1', + 'nistp384': 'secp384r1', + 'nistp521': 'secp521r1' + }[curve]; + + var dh = crypto.createECDH(osCurve); + dh.generateKeys(); + + parts.push({name: 'curve', + data: Buffer.from(curve)}); + parts.push({name: 'Q', data: dh.getPublicKey()}); + parts.push({name: 'd', data: dh.getPrivateKey()}); + + key = new PrivateKey({ + type: 'ecdsa', + curve: curve, + parts: parts + }); + return (key); + } else { + + var ecParams = new X9ECParameters(curve); + + /* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */ + var n = ecParams.getN(); + /* + * The crypto.randomBytes() function can only give us whole + * bytes, so taking a nod from X9.62, we round up. + */ + var cByteLen = Math.ceil((n.bitLength() + 64) / 8); + var c = new jsbn(crypto.randomBytes(cByteLen)); + + var n1 = n.subtract(jsbn.ONE); + var priv = c.mod(n1).add(jsbn.ONE); + var pub = ecParams.getG().multiply(priv); + + priv = Buffer.from(priv.toByteArray()); + pub = Buffer.from(ecParams.getCurve(). + encodePointHex(pub), 'hex'); + + parts.push({name: 'curve', data: Buffer.from(curve)}); + parts.push({name: 'Q', data: pub}); + parts.push({name: 'd', data: priv}); + + key = new PrivateKey({ + type: 'ecdsa', + curve: curve, + parts: parts + }); + return (key); + } +} diff --git a/node_modules/sshpk/lib/ed-compat.js b/node_modules/sshpk/lib/ed-compat.js new file mode 100644 index 000000000..70732e1f7 --- /dev/null +++ b/node_modules/sshpk/lib/ed-compat.js @@ -0,0 +1,92 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + Verifier: Verifier, + Signer: Signer +}; + +var nacl = require('tweetnacl'); +var stream = require('stream'); +var util = require('util'); +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var Signature = require('./signature'); + +function Verifier(key, hashAlgo) { + if (hashAlgo.toLowerCase() !== 'sha512') + throw (new Error('ED25519 only supports the use of ' + + 'SHA-512 hashes')); + + this.key = key; + this.chunks = []; + + stream.Writable.call(this, {}); +} +util.inherits(Verifier, stream.Writable); + +Verifier.prototype._write = function (chunk, enc, cb) { + this.chunks.push(chunk); + cb(); +}; + +Verifier.prototype.update = function (chunk) { + if (typeof (chunk) === 'string') + chunk = Buffer.from(chunk, 'binary'); + this.chunks.push(chunk); +}; + +Verifier.prototype.verify = function (signature, fmt) { + var sig; + if (Signature.isSignature(signature, [2, 0])) { + if (signature.type !== 'ed25519') + return (false); + sig = signature.toBuffer('raw'); + + } else if (typeof (signature) === 'string') { + sig = Buffer.from(signature, 'base64'); + + } else if (Signature.isSignature(signature, [1, 0])) { + throw (new Error('signature was created by too old ' + + 'a version of sshpk and cannot be verified')); + } + + assert.buffer(sig); + return (nacl.sign.detached.verify( + new Uint8Array(Buffer.concat(this.chunks)), + new Uint8Array(sig), + new Uint8Array(this.key.part.A.data))); +}; + +function Signer(key, hashAlgo) { + if (hashAlgo.toLowerCase() !== 'sha512') + throw (new Error('ED25519 only supports the use of ' + + 'SHA-512 hashes')); + + this.key = key; + this.chunks = []; + + stream.Writable.call(this, {}); +} +util.inherits(Signer, stream.Writable); + +Signer.prototype._write = function (chunk, enc, cb) { + this.chunks.push(chunk); + cb(); +}; + +Signer.prototype.update = function (chunk) { + if (typeof (chunk) === 'string') + chunk = Buffer.from(chunk, 'binary'); + this.chunks.push(chunk); +}; + +Signer.prototype.sign = function () { + var sig = nacl.sign.detached( + new Uint8Array(Buffer.concat(this.chunks)), + new Uint8Array(Buffer.concat([ + this.key.part.k.data, this.key.part.A.data]))); + var sigBuf = Buffer.from(sig); + var sigObj = Signature.parse(sigBuf, 'ed25519', 'raw'); + sigObj.hashAlgorithm = 'sha512'; + return (sigObj); +}; diff --git a/node_modules/sshpk/lib/errors.js b/node_modules/sshpk/lib/errors.js new file mode 100644 index 000000000..1cc09ec71 --- /dev/null +++ b/node_modules/sshpk/lib/errors.js @@ -0,0 +1,84 @@ +// Copyright 2015 Joyent, Inc. + +var assert = require('assert-plus'); +var util = require('util'); + +function FingerprintFormatError(fp, format) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, FingerprintFormatError); + this.name = 'FingerprintFormatError'; + this.fingerprint = fp; + this.format = format; + this.message = 'Fingerprint format is not supported, or is invalid: '; + if (fp !== undefined) + this.message += ' fingerprint = ' + fp; + if (format !== undefined) + this.message += ' format = ' + format; +} +util.inherits(FingerprintFormatError, Error); + +function InvalidAlgorithmError(alg) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, InvalidAlgorithmError); + this.name = 'InvalidAlgorithmError'; + this.algorithm = alg; + this.message = 'Algorithm "' + alg + '" is not supported'; +} +util.inherits(InvalidAlgorithmError, Error); + +function KeyParseError(name, format, innerErr) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, KeyParseError); + this.name = 'KeyParseError'; + this.format = format; + this.keyName = name; + this.innerErr = innerErr; + this.message = 'Failed to parse ' + name + ' as a valid ' + format + + ' format key: ' + innerErr.message; +} +util.inherits(KeyParseError, Error); + +function SignatureParseError(type, format, innerErr) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, SignatureParseError); + this.name = 'SignatureParseError'; + this.type = type; + this.format = format; + this.innerErr = innerErr; + this.message = 'Failed to parse the given data as a ' + type + + ' signature in ' + format + ' format: ' + innerErr.message; +} +util.inherits(SignatureParseError, Error); + +function CertificateParseError(name, format, innerErr) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, CertificateParseError); + this.name = 'CertificateParseError'; + this.format = format; + this.certName = name; + this.innerErr = innerErr; + this.message = 'Failed to parse ' + name + ' as a valid ' + format + + ' format certificate: ' + innerErr.message; +} +util.inherits(CertificateParseError, Error); + +function KeyEncryptedError(name, format) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, KeyEncryptedError); + this.name = 'KeyEncryptedError'; + this.format = format; + this.keyName = name; + this.message = 'The ' + format + ' format key ' + name + ' is ' + + 'encrypted (password-protected), and no passphrase was ' + + 'provided in `options`'; +} +util.inherits(KeyEncryptedError, Error); + +module.exports = { + FingerprintFormatError: FingerprintFormatError, + InvalidAlgorithmError: InvalidAlgorithmError, + KeyParseError: KeyParseError, + SignatureParseError: SignatureParseError, + KeyEncryptedError: KeyEncryptedError, + CertificateParseError: CertificateParseError +}; diff --git a/node_modules/sshpk/lib/fingerprint.js b/node_modules/sshpk/lib/fingerprint.js new file mode 100644 index 000000000..0004b376e --- /dev/null +++ b/node_modules/sshpk/lib/fingerprint.js @@ -0,0 +1,220 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = Fingerprint; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var errs = require('./errors'); +var Key = require('./key'); +var PrivateKey = require('./private-key'); +var Certificate = require('./certificate'); +var utils = require('./utils'); + +var FingerprintFormatError = errs.FingerprintFormatError; +var InvalidAlgorithmError = errs.InvalidAlgorithmError; + +function Fingerprint(opts) { + assert.object(opts, 'options'); + assert.string(opts.type, 'options.type'); + assert.buffer(opts.hash, 'options.hash'); + assert.string(opts.algorithm, 'options.algorithm'); + + this.algorithm = opts.algorithm.toLowerCase(); + if (algs.hashAlgs[this.algorithm] !== true) + throw (new InvalidAlgorithmError(this.algorithm)); + + this.hash = opts.hash; + this.type = opts.type; + this.hashType = opts.hashType; +} + +Fingerprint.prototype.toString = function (format) { + if (format === undefined) { + if (this.algorithm === 'md5' || this.hashType === 'spki') + format = 'hex'; + else + format = 'base64'; + } + assert.string(format); + + switch (format) { + case 'hex': + if (this.hashType === 'spki') + return (this.hash.toString('hex')); + return (addColons(this.hash.toString('hex'))); + case 'base64': + if (this.hashType === 'spki') + return (this.hash.toString('base64')); + return (sshBase64Format(this.algorithm, + this.hash.toString('base64'))); + default: + throw (new FingerprintFormatError(undefined, format)); + } +}; + +Fingerprint.prototype.matches = function (other) { + assert.object(other, 'key or certificate'); + if (this.type === 'key' && this.hashType !== 'ssh') { + utils.assertCompatible(other, Key, [1, 7], 'key with spki'); + if (PrivateKey.isPrivateKey(other)) { + utils.assertCompatible(other, PrivateKey, [1, 6], + 'privatekey with spki support'); + } + } else if (this.type === 'key') { + utils.assertCompatible(other, Key, [1, 0], 'key'); + } else { + utils.assertCompatible(other, Certificate, [1, 0], + 'certificate'); + } + + var theirHash = other.hash(this.algorithm, this.hashType); + var theirHash2 = crypto.createHash(this.algorithm). + update(theirHash).digest('base64'); + + if (this.hash2 === undefined) + this.hash2 = crypto.createHash(this.algorithm). + update(this.hash).digest('base64'); + + return (this.hash2 === theirHash2); +}; + +/*JSSTYLED*/ +var base64RE = /^[A-Za-z0-9+\/=]+$/; +/*JSSTYLED*/ +var hexRE = /^[a-fA-F0-9]+$/; + +Fingerprint.parse = function (fp, options) { + assert.string(fp, 'fingerprint'); + + var alg, hash, enAlgs; + if (Array.isArray(options)) { + enAlgs = options; + options = {}; + } + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + if (options.enAlgs !== undefined) + enAlgs = options.enAlgs; + if (options.algorithms !== undefined) + enAlgs = options.algorithms; + assert.optionalArrayOfString(enAlgs, 'algorithms'); + + var hashType = 'ssh'; + if (options.hashType !== undefined) + hashType = options.hashType; + assert.string(hashType, 'options.hashType'); + + var parts = fp.split(':'); + if (parts.length == 2) { + alg = parts[0].toLowerCase(); + if (!base64RE.test(parts[1])) + throw (new FingerprintFormatError(fp)); + try { + hash = Buffer.from(parts[1], 'base64'); + } catch (e) { + throw (new FingerprintFormatError(fp)); + } + } else if (parts.length > 2) { + alg = 'md5'; + if (parts[0].toLowerCase() === 'md5') + parts = parts.slice(1); + parts = parts.map(function (p) { + while (p.length < 2) + p = '0' + p; + if (p.length > 2) + throw (new FingerprintFormatError(fp)); + return (p); + }); + parts = parts.join(''); + if (!hexRE.test(parts) || parts.length % 2 !== 0) + throw (new FingerprintFormatError(fp)); + try { + hash = Buffer.from(parts, 'hex'); + } catch (e) { + throw (new FingerprintFormatError(fp)); + } + } else { + if (hexRE.test(fp)) { + hash = Buffer.from(fp, 'hex'); + } else if (base64RE.test(fp)) { + hash = Buffer.from(fp, 'base64'); + } else { + throw (new FingerprintFormatError(fp)); + } + + switch (hash.length) { + case 32: + alg = 'sha256'; + break; + case 16: + alg = 'md5'; + break; + case 20: + alg = 'sha1'; + break; + case 64: + alg = 'sha512'; + break; + default: + throw (new FingerprintFormatError(fp)); + } + + /* Plain hex/base64: guess it's probably SPKI unless told. */ + if (options.hashType === undefined) + hashType = 'spki'; + } + + if (alg === undefined) + throw (new FingerprintFormatError(fp)); + + if (algs.hashAlgs[alg] === undefined) + throw (new InvalidAlgorithmError(alg)); + + if (enAlgs !== undefined) { + enAlgs = enAlgs.map(function (a) { return a.toLowerCase(); }); + if (enAlgs.indexOf(alg) === -1) + throw (new InvalidAlgorithmError(alg)); + } + + return (new Fingerprint({ + algorithm: alg, + hash: hash, + type: options.type || 'key', + hashType: hashType + })); +}; + +function addColons(s) { + /*JSSTYLED*/ + return (s.replace(/(.{2})(?=.)/g, '$1:')); +} + +function base64Strip(s) { + /*JSSTYLED*/ + return (s.replace(/=*$/, '')); +} + +function sshBase64Format(alg, h) { + return (alg.toUpperCase() + ':' + base64Strip(h)); +} + +Fingerprint.isFingerprint = function (obj, ver) { + return (utils.isCompatible(obj, Fingerprint, ver)); +}; + +/* + * API versions for Fingerprint: + * [1,0] -- initial ver + * [1,1] -- first tagged ver + * [1,2] -- hashType and spki support + */ +Fingerprint.prototype._sshpkApiVersion = [1, 2]; + +Fingerprint._oldVersionDetect = function (obj) { + assert.func(obj.toString); + assert.func(obj.matches); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/formats/auto.js b/node_modules/sshpk/lib/formats/auto.js new file mode 100644 index 000000000..f32cd9648 --- /dev/null +++ b/node_modules/sshpk/lib/formats/auto.js @@ -0,0 +1,124 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); + +var pem = require('./pem'); +var ssh = require('./ssh'); +var rfc4253 = require('./rfc4253'); +var dnssec = require('./dnssec'); +var putty = require('./putty'); + +var DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1'; + +function read(buf, options) { + if (typeof (buf) === 'string') { + if (buf.trim().match(/^[-]+[ ]*BEGIN/)) + return (pem.read(buf, options)); + if (buf.match(/^\s*ssh-[a-z]/)) + return (ssh.read(buf, options)); + if (buf.match(/^\s*ecdsa-/)) + return (ssh.read(buf, options)); + if (buf.match(/^putty-user-key-file-2:/i)) + return (putty.read(buf, options)); + if (findDNSSECHeader(buf)) + return (dnssec.read(buf, options)); + buf = Buffer.from(buf, 'binary'); + } else { + assert.buffer(buf); + if (findPEMHeader(buf)) + return (pem.read(buf, options)); + if (findSSHHeader(buf)) + return (ssh.read(buf, options)); + if (findPuTTYHeader(buf)) + return (putty.read(buf, options)); + if (findDNSSECHeader(buf)) + return (dnssec.read(buf, options)); + } + if (buf.readUInt32BE(0) < buf.length) + return (rfc4253.read(buf, options)); + throw (new Error('Failed to auto-detect format of key')); +} + +function findPuTTYHeader(buf) { + var offset = 0; + while (offset < buf.length && + (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9)) + ++offset; + if (offset + 22 <= buf.length && + buf.slice(offset, offset + 22).toString('ascii').toLowerCase() === + 'putty-user-key-file-2:') + return (true); + return (false); +} + +function findSSHHeader(buf) { + var offset = 0; + while (offset < buf.length && + (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9)) + ++offset; + if (offset + 4 <= buf.length && + buf.slice(offset, offset + 4).toString('ascii') === 'ssh-') + return (true); + if (offset + 6 <= buf.length && + buf.slice(offset, offset + 6).toString('ascii') === 'ecdsa-') + return (true); + return (false); +} + +function findPEMHeader(buf) { + var offset = 0; + while (offset < buf.length && + (buf[offset] === 32 || buf[offset] === 10)) + ++offset; + if (buf[offset] !== 45) + return (false); + while (offset < buf.length && + (buf[offset] === 45)) + ++offset; + while (offset < buf.length && + (buf[offset] === 32)) + ++offset; + if (offset + 5 > buf.length || + buf.slice(offset, offset + 5).toString('ascii') !== 'BEGIN') + return (false); + return (true); +} + +function findDNSSECHeader(buf) { + // private case first + if (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length) + return (false); + var headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length); + if (headerCheck.toString('ascii') === DNSSEC_PRIVKEY_HEADER_PREFIX) + return (true); + + // public-key RFC3110 ? + // 'domain.com. IN KEY ...' or 'domain.com. IN DNSKEY ...' + // skip any comment-lines + if (typeof (buf) !== 'string') { + buf = buf.toString('ascii'); + } + var lines = buf.split('\n'); + var line = 0; + /* JSSTYLED */ + while (lines[line].match(/^\;/)) + line++; + if (lines[line].toString('ascii').match(/\. IN KEY /)) + return (true); + if (lines[line].toString('ascii').match(/\. IN DNSKEY /)) + return (true); + return (false); +} + +function write(key, options) { + throw (new Error('"auto" format cannot be used for writing')); +} diff --git a/node_modules/sshpk/lib/formats/dnssec.js b/node_modules/sshpk/lib/formats/dnssec.js new file mode 100644 index 000000000..a74ea9ce0 --- /dev/null +++ b/node_modules/sshpk/lib/formats/dnssec.js @@ -0,0 +1,287 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var utils = require('../utils'); +var SSHBuffer = require('../ssh-buffer'); +var Dhe = require('../dhe'); + +var supportedAlgos = { + 'rsa-sha1' : 5, + 'rsa-sha256' : 8, + 'rsa-sha512' : 10, + 'ecdsa-p256-sha256' : 13, + 'ecdsa-p384-sha384' : 14 + /* + * ed25519 is hypothetically supported with id 15 + * but the common tools available don't appear to be + * capable of generating/using ed25519 keys + */ +}; + +var supportedAlgosById = {}; +Object.keys(supportedAlgos).forEach(function (k) { + supportedAlgosById[supportedAlgos[k]] = k.toUpperCase(); +}); + +function read(buf, options) { + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + var lines = buf.split('\n'); + if (lines[0].match(/^Private-key-format\: v1/)) { + var algElems = lines[1].split(' '); + var algoNum = parseInt(algElems[1], 10); + var algoName = algElems[2]; + if (!supportedAlgosById[algoNum]) + throw (new Error('Unsupported algorithm: ' + algoName)); + return (readDNSSECPrivateKey(algoNum, lines.slice(2))); + } + + // skip any comment-lines + var line = 0; + /* JSSTYLED */ + while (lines[line].match(/^\;/)) + line++; + // we should now have *one single* line left with our KEY on it. + if ((lines[line].match(/\. IN KEY /) || + lines[line].match(/\. IN DNSKEY /)) && lines[line+1].length === 0) { + return (readRFC3110(lines[line])); + } + throw (new Error('Cannot parse dnssec key')); +} + +function readRFC3110(keyString) { + var elems = keyString.split(' '); + //unused var flags = parseInt(elems[3], 10); + //unused var protocol = parseInt(elems[4], 10); + var algorithm = parseInt(elems[5], 10); + if (!supportedAlgosById[algorithm]) + throw (new Error('Unsupported algorithm: ' + algorithm)); + var base64key = elems.slice(6, elems.length).join(); + var keyBuffer = Buffer.from(base64key, 'base64'); + if (supportedAlgosById[algorithm].match(/^RSA-/)) { + // join the rest of the body into a single base64-blob + var publicExponentLen = keyBuffer.readUInt8(0); + if (publicExponentLen != 3 && publicExponentLen != 1) + throw (new Error('Cannot parse dnssec key: ' + + 'unsupported exponent length')); + + var publicExponent = keyBuffer.slice(1, publicExponentLen+1); + publicExponent = utils.mpNormalize(publicExponent); + var modulus = keyBuffer.slice(1+publicExponentLen); + modulus = utils.mpNormalize(modulus); + // now, make the key + var rsaKey = { + type: 'rsa', + parts: [] + }; + rsaKey.parts.push({ name: 'e', data: publicExponent}); + rsaKey.parts.push({ name: 'n', data: modulus}); + return (new Key(rsaKey)); + } + if (supportedAlgosById[algorithm] === 'ECDSA-P384-SHA384' || + supportedAlgosById[algorithm] === 'ECDSA-P256-SHA256') { + var curve = 'nistp384'; + var size = 384; + if (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) { + curve = 'nistp256'; + size = 256; + } + + var ecdsaKey = { + type: 'ecdsa', + curve: curve, + size: size, + parts: [ + {name: 'curve', data: Buffer.from(curve) }, + {name: 'Q', data: utils.ecNormalize(keyBuffer) } + ] + }; + return (new Key(ecdsaKey)); + } + throw (new Error('Unsupported algorithm: ' + + supportedAlgosById[algorithm])); +} + +function elementToBuf(e) { + return (Buffer.from(e.split(' ')[1], 'base64')); +} + +function readDNSSECRSAPrivateKey(elements) { + var rsaParams = {}; + elements.forEach(function (element) { + if (element.split(' ')[0] === 'Modulus:') + rsaParams['n'] = elementToBuf(element); + else if (element.split(' ')[0] === 'PublicExponent:') + rsaParams['e'] = elementToBuf(element); + else if (element.split(' ')[0] === 'PrivateExponent:') + rsaParams['d'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Prime1:') + rsaParams['p'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Prime2:') + rsaParams['q'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Exponent1:') + rsaParams['dmodp'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Exponent2:') + rsaParams['dmodq'] = elementToBuf(element); + else if (element.split(' ')[0] === 'Coefficient:') + rsaParams['iqmp'] = elementToBuf(element); + }); + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'e', data: utils.mpNormalize(rsaParams['e'])}, + { name: 'n', data: utils.mpNormalize(rsaParams['n'])}, + { name: 'd', data: utils.mpNormalize(rsaParams['d'])}, + { name: 'p', data: utils.mpNormalize(rsaParams['p'])}, + { name: 'q', data: utils.mpNormalize(rsaParams['q'])}, + { name: 'dmodp', + data: utils.mpNormalize(rsaParams['dmodp'])}, + { name: 'dmodq', + data: utils.mpNormalize(rsaParams['dmodq'])}, + { name: 'iqmp', + data: utils.mpNormalize(rsaParams['iqmp'])} + ] + }; + return (new PrivateKey(key)); +} + +function readDNSSECPrivateKey(alg, elements) { + if (supportedAlgosById[alg].match(/^RSA-/)) { + return (readDNSSECRSAPrivateKey(elements)); + } + if (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' || + supportedAlgosById[alg] === 'ECDSA-P256-SHA256') { + var d = Buffer.from(elements[0].split(' ')[1], 'base64'); + var curve = 'nistp384'; + var size = 384; + if (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') { + curve = 'nistp256'; + size = 256; + } + // DNSSEC generates the public-key on the fly (go calculate it) + var publicKey = utils.publicFromPrivateECDSA(curve, d); + var Q = publicKey.part['Q'].data; + var ecdsaKey = { + type: 'ecdsa', + curve: curve, + size: size, + parts: [ + {name: 'curve', data: Buffer.from(curve) }, + {name: 'd', data: d }, + {name: 'Q', data: Q } + ] + }; + return (new PrivateKey(ecdsaKey)); + } + throw (new Error('Unsupported algorithm: ' + supportedAlgosById[alg])); +} + +function dnssecTimestamp(date) { + var year = date.getFullYear() + ''; //stringify + var month = (date.getMonth() + 1); + var timestampStr = year + month + date.getUTCDate(); + timestampStr += '' + date.getUTCHours() + date.getUTCMinutes(); + timestampStr += date.getUTCSeconds(); + return (timestampStr); +} + +function rsaAlgFromOptions(opts) { + if (!opts || !opts.hashAlgo || opts.hashAlgo === 'sha1') + return ('5 (RSASHA1)'); + else if (opts.hashAlgo === 'sha256') + return ('8 (RSASHA256)'); + else if (opts.hashAlgo === 'sha512') + return ('10 (RSASHA512)'); + else + throw (new Error('Unknown or unsupported hash: ' + + opts.hashAlgo)); +} + +function writeRSA(key, options) { + // if we're missing parts, add them. + if (!key.part.dmodp || !key.part.dmodq) { + utils.addRSAMissing(key); + } + + var out = ''; + out += 'Private-key-format: v1.3\n'; + out += 'Algorithm: ' + rsaAlgFromOptions(options) + '\n'; + var n = utils.mpDenormalize(key.part['n'].data); + out += 'Modulus: ' + n.toString('base64') + '\n'; + var e = utils.mpDenormalize(key.part['e'].data); + out += 'PublicExponent: ' + e.toString('base64') + '\n'; + var d = utils.mpDenormalize(key.part['d'].data); + out += 'PrivateExponent: ' + d.toString('base64') + '\n'; + var p = utils.mpDenormalize(key.part['p'].data); + out += 'Prime1: ' + p.toString('base64') + '\n'; + var q = utils.mpDenormalize(key.part['q'].data); + out += 'Prime2: ' + q.toString('base64') + '\n'; + var dmodp = utils.mpDenormalize(key.part['dmodp'].data); + out += 'Exponent1: ' + dmodp.toString('base64') + '\n'; + var dmodq = utils.mpDenormalize(key.part['dmodq'].data); + out += 'Exponent2: ' + dmodq.toString('base64') + '\n'; + var iqmp = utils.mpDenormalize(key.part['iqmp'].data); + out += 'Coefficient: ' + iqmp.toString('base64') + '\n'; + // Assume that we're valid as-of now + var timestamp = new Date(); + out += 'Created: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n'; + return (Buffer.from(out, 'ascii')); +} + +function writeECDSA(key, options) { + var out = ''; + out += 'Private-key-format: v1.3\n'; + + if (key.curve === 'nistp256') { + out += 'Algorithm: 13 (ECDSAP256SHA256)\n'; + } else if (key.curve === 'nistp384') { + out += 'Algorithm: 14 (ECDSAP384SHA384)\n'; + } else { + throw (new Error('Unsupported curve')); + } + var base64Key = key.part['d'].data.toString('base64'); + out += 'PrivateKey: ' + base64Key + '\n'; + + // Assume that we're valid as-of now + var timestamp = new Date(); + out += 'Created: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n'; + out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n'; + + return (Buffer.from(out, 'ascii')); +} + +function write(key, options) { + if (PrivateKey.isPrivateKey(key)) { + if (key.type === 'rsa') { + return (writeRSA(key, options)); + } else if (key.type === 'ecdsa') { + return (writeECDSA(key, options)); + } else { + throw (new Error('Unsupported algorithm: ' + key.type)); + } + } else if (Key.isKey(key)) { + /* + * RFC3110 requires a keyname, and a keytype, which we + * don't really have a mechanism for specifying such + * additional metadata. + */ + throw (new Error('Format "dnssec" only supports ' + + 'writing private keys')); + } else { + throw (new Error('key is not a Key or PrivateKey')); + } +} diff --git a/node_modules/sshpk/lib/formats/openssh-cert.js b/node_modules/sshpk/lib/formats/openssh-cert.js new file mode 100644 index 000000000..766f3d39c --- /dev/null +++ b/node_modules/sshpk/lib/formats/openssh-cert.js @@ -0,0 +1,352 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + read: read, + verify: verify, + sign: sign, + signAsync: signAsync, + write: write, + + /* Internal private API */ + fromBuffer: fromBuffer, + toBuffer: toBuffer +}; + +var assert = require('assert-plus'); +var SSHBuffer = require('../ssh-buffer'); +var crypto = require('crypto'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var Identity = require('../identity'); +var rfc4253 = require('./rfc4253'); +var Signature = require('../signature'); +var utils = require('../utils'); +var Certificate = require('../certificate'); + +function verify(cert, key) { + /* + * We always give an issuerKey, so if our verify() is being called then + * there was no signature. Return false. + */ + return (false); +} + +var TYPES = { + 'user': 1, + 'host': 2 +}; +Object.keys(TYPES).forEach(function (k) { TYPES[TYPES[k]] = k; }); + +var ECDSA_ALGO = /^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/; + +function read(buf, options) { + if (Buffer.isBuffer(buf)) + buf = buf.toString('ascii'); + var parts = buf.trim().split(/[ \t\n]+/g); + if (parts.length < 2 || parts.length > 3) + throw (new Error('Not a valid SSH certificate line')); + + var algo = parts[0]; + var data = parts[1]; + + data = Buffer.from(data, 'base64'); + return (fromBuffer(data, algo)); +} + +function fromBuffer(data, algo, partial) { + var sshbuf = new SSHBuffer({ buffer: data }); + var innerAlgo = sshbuf.readString(); + if (algo !== undefined && innerAlgo !== algo) + throw (new Error('SSH certificate algorithm mismatch')); + if (algo === undefined) + algo = innerAlgo; + + var cert = {}; + cert.signatures = {}; + cert.signatures.openssh = {}; + + cert.signatures.openssh.nonce = sshbuf.readBuffer(); + + var key = {}; + var parts = (key.parts = []); + key.type = getAlg(algo); + + var partCount = algs.info[key.type].parts.length; + while (parts.length < partCount) + parts.push(sshbuf.readPart()); + assert.ok(parts.length >= 1, 'key must have at least one part'); + + var algInfo = algs.info[key.type]; + if (key.type === 'ecdsa') { + var res = ECDSA_ALGO.exec(algo); + assert.ok(res !== null); + assert.strictEqual(res[1], parts[0].data.toString()); + } + + for (var i = 0; i < algInfo.parts.length; ++i) { + parts[i].name = algInfo.parts[i]; + if (parts[i].name !== 'curve' && + algInfo.normalize !== false) { + var p = parts[i]; + p.data = utils.mpNormalize(p.data); + } + } + + cert.subjectKey = new Key(key); + + cert.serial = sshbuf.readInt64(); + + var type = TYPES[sshbuf.readInt()]; + assert.string(type, 'valid cert type'); + + cert.signatures.openssh.keyId = sshbuf.readString(); + + var principals = []; + var pbuf = sshbuf.readBuffer(); + var psshbuf = new SSHBuffer({ buffer: pbuf }); + while (!psshbuf.atEnd()) + principals.push(psshbuf.readString()); + if (principals.length === 0) + principals = ['*']; + + cert.subjects = principals.map(function (pr) { + if (type === 'user') + return (Identity.forUser(pr)); + else if (type === 'host') + return (Identity.forHost(pr)); + throw (new Error('Unknown identity type ' + type)); + }); + + cert.validFrom = int64ToDate(sshbuf.readInt64()); + cert.validUntil = int64ToDate(sshbuf.readInt64()); + + var exts = []; + var extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() }); + var ext; + while (!extbuf.atEnd()) { + ext = { critical: true }; + ext.name = extbuf.readString(); + ext.data = extbuf.readBuffer(); + exts.push(ext); + } + extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() }); + while (!extbuf.atEnd()) { + ext = { critical: false }; + ext.name = extbuf.readString(); + ext.data = extbuf.readBuffer(); + exts.push(ext); + } + cert.signatures.openssh.exts = exts; + + /* reserved */ + sshbuf.readBuffer(); + + var signingKeyBuf = sshbuf.readBuffer(); + cert.issuerKey = rfc4253.read(signingKeyBuf); + + /* + * OpenSSH certs don't give the identity of the issuer, just their + * public key. So, we use an Identity that matches anything. The + * isSignedBy() function will later tell you if the key matches. + */ + cert.issuer = Identity.forHost('**'); + + var sigBuf = sshbuf.readBuffer(); + cert.signatures.openssh.signature = + Signature.parse(sigBuf, cert.issuerKey.type, 'ssh'); + + if (partial !== undefined) { + partial.remainder = sshbuf.remainder(); + partial.consumed = sshbuf._offset; + } + + return (new Certificate(cert)); +} + +function int64ToDate(buf) { + var i = buf.readUInt32BE(0) * 4294967296; + i += buf.readUInt32BE(4); + var d = new Date(); + d.setTime(i * 1000); + d.sourceInt64 = buf; + return (d); +} + +function dateToInt64(date) { + if (date.sourceInt64 !== undefined) + return (date.sourceInt64); + var i = Math.round(date.getTime() / 1000); + var upper = Math.floor(i / 4294967296); + var lower = Math.floor(i % 4294967296); + var buf = Buffer.alloc(8); + buf.writeUInt32BE(upper, 0); + buf.writeUInt32BE(lower, 4); + return (buf); +} + +function sign(cert, key) { + if (cert.signatures.openssh === undefined) + cert.signatures.openssh = {}; + try { + var blob = toBuffer(cert, true); + } catch (e) { + delete (cert.signatures.openssh); + return (false); + } + var sig = cert.signatures.openssh; + var hashAlgo = undefined; + if (key.type === 'rsa' || key.type === 'dsa') + hashAlgo = 'sha1'; + var signer = key.createSign(hashAlgo); + signer.write(blob); + sig.signature = signer.sign(); + return (true); +} + +function signAsync(cert, signer, done) { + if (cert.signatures.openssh === undefined) + cert.signatures.openssh = {}; + try { + var blob = toBuffer(cert, true); + } catch (e) { + delete (cert.signatures.openssh); + done(e); + return; + } + var sig = cert.signatures.openssh; + + signer(blob, function (err, signature) { + if (err) { + done(err); + return; + } + try { + /* + * This will throw if the signature isn't of a + * type/algo that can be used for SSH. + */ + signature.toBuffer('ssh'); + } catch (e) { + done(e); + return; + } + sig.signature = signature; + done(); + }); +} + +function write(cert, options) { + if (options === undefined) + options = {}; + + var blob = toBuffer(cert); + var out = getCertType(cert.subjectKey) + ' ' + blob.toString('base64'); + if (options.comment) + out = out + ' ' + options.comment; + return (out); +} + + +function toBuffer(cert, noSig) { + assert.object(cert.signatures.openssh, 'signature for openssh format'); + var sig = cert.signatures.openssh; + + if (sig.nonce === undefined) + sig.nonce = crypto.randomBytes(16); + var buf = new SSHBuffer({}); + buf.writeString(getCertType(cert.subjectKey)); + buf.writeBuffer(sig.nonce); + + var key = cert.subjectKey; + var algInfo = algs.info[key.type]; + algInfo.parts.forEach(function (part) { + buf.writePart(key.part[part]); + }); + + buf.writeInt64(cert.serial); + + var type = cert.subjects[0].type; + assert.notStrictEqual(type, 'unknown'); + cert.subjects.forEach(function (id) { + assert.strictEqual(id.type, type); + }); + type = TYPES[type]; + buf.writeInt(type); + + if (sig.keyId === undefined) { + sig.keyId = cert.subjects[0].type + '_' + + (cert.subjects[0].uid || cert.subjects[0].hostname); + } + buf.writeString(sig.keyId); + + var sub = new SSHBuffer({}); + cert.subjects.forEach(function (id) { + if (type === TYPES.host) + sub.writeString(id.hostname); + else if (type === TYPES.user) + sub.writeString(id.uid); + }); + buf.writeBuffer(sub.toBuffer()); + + buf.writeInt64(dateToInt64(cert.validFrom)); + buf.writeInt64(dateToInt64(cert.validUntil)); + + var exts = sig.exts; + if (exts === undefined) + exts = []; + + var extbuf = new SSHBuffer({}); + exts.forEach(function (ext) { + if (ext.critical !== true) + return; + extbuf.writeString(ext.name); + extbuf.writeBuffer(ext.data); + }); + buf.writeBuffer(extbuf.toBuffer()); + + extbuf = new SSHBuffer({}); + exts.forEach(function (ext) { + if (ext.critical === true) + return; + extbuf.writeString(ext.name); + extbuf.writeBuffer(ext.data); + }); + buf.writeBuffer(extbuf.toBuffer()); + + /* reserved */ + buf.writeBuffer(Buffer.alloc(0)); + + sub = rfc4253.write(cert.issuerKey); + buf.writeBuffer(sub); + + if (!noSig) + buf.writeBuffer(sig.signature.toBuffer('ssh')); + + return (buf.toBuffer()); +} + +function getAlg(certType) { + if (certType === 'ssh-rsa-cert-v01@openssh.com') + return ('rsa'); + if (certType === 'ssh-dss-cert-v01@openssh.com') + return ('dsa'); + if (certType.match(ECDSA_ALGO)) + return ('ecdsa'); + if (certType === 'ssh-ed25519-cert-v01@openssh.com') + return ('ed25519'); + throw (new Error('Unsupported cert type ' + certType)); +} + +function getCertType(key) { + if (key.type === 'rsa') + return ('ssh-rsa-cert-v01@openssh.com'); + if (key.type === 'dsa') + return ('ssh-dss-cert-v01@openssh.com'); + if (key.type === 'ecdsa') + return ('ecdsa-sha2-' + key.curve + '-cert-v01@openssh.com'); + if (key.type === 'ed25519') + return ('ssh-ed25519-cert-v01@openssh.com'); + throw (new Error('Unsupported key type ' + key.type)); +} diff --git a/node_modules/sshpk/lib/formats/pem.js b/node_modules/sshpk/lib/formats/pem.js new file mode 100644 index 000000000..bbe78fcb5 --- /dev/null +++ b/node_modules/sshpk/lib/formats/pem.js @@ -0,0 +1,290 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var crypto = require('crypto'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); + +var pkcs1 = require('./pkcs1'); +var pkcs8 = require('./pkcs8'); +var sshpriv = require('./ssh-private'); +var rfc4253 = require('./rfc4253'); + +var errors = require('../errors'); + +var OID_PBES2 = '1.2.840.113549.1.5.13'; +var OID_PBKDF2 = '1.2.840.113549.1.5.12'; + +var OID_TO_CIPHER = { + '1.2.840.113549.3.7': '3des-cbc', + '2.16.840.1.101.3.4.1.2': 'aes128-cbc', + '2.16.840.1.101.3.4.1.42': 'aes256-cbc' +}; +var CIPHER_TO_OID = {}; +Object.keys(OID_TO_CIPHER).forEach(function (k) { + CIPHER_TO_OID[OID_TO_CIPHER[k]] = k; +}); + +var OID_TO_HASH = { + '1.2.840.113549.2.7': 'sha1', + '1.2.840.113549.2.9': 'sha256', + '1.2.840.113549.2.11': 'sha512' +}; +var HASH_TO_OID = {}; +Object.keys(OID_TO_HASH).forEach(function (k) { + HASH_TO_OID[OID_TO_HASH[k]] = k; +}); + +/* + * For reading we support both PKCS#1 and PKCS#8. If we find a private key, + * we just take the public component of it and use that. + */ +function read(buf, options, forceType) { + var input = buf; + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + + var lines = buf.trim().split(/[\r\n]+/g); + + var m; + var si = -1; + while (!m && si < lines.length) { + m = lines[++si].match(/*JSSTYLED*/ + /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/); + } + assert.ok(m, 'invalid PEM header'); + + var m2; + var ei = lines.length; + while (!m2 && ei > 0) { + m2 = lines[--ei].match(/*JSSTYLED*/ + /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/); + } + assert.ok(m2, 'invalid PEM footer'); + + /* Begin and end banners must match key type */ + assert.equal(m[2], m2[2]); + var type = m[2].toLowerCase(); + + var alg; + if (m[1]) { + /* They also must match algorithms, if given */ + assert.equal(m[1], m2[1], 'PEM header and footer mismatch'); + alg = m[1].trim(); + } + + lines = lines.slice(si, ei + 1); + + var headers = {}; + while (true) { + lines = lines.slice(1); + m = lines[0].match(/*JSSTYLED*/ + /^([A-Za-z0-9-]+): (.+)$/); + if (!m) + break; + headers[m[1].toLowerCase()] = m[2]; + } + + /* Chop off the first and last lines */ + lines = lines.slice(0, -1).join(''); + buf = Buffer.from(lines, 'base64'); + + var cipher, key, iv; + if (headers['proc-type']) { + var parts = headers['proc-type'].split(','); + if (parts[0] === '4' && parts[1] === 'ENCRYPTED') { + if (typeof (options.passphrase) === 'string') { + options.passphrase = Buffer.from( + options.passphrase, 'utf-8'); + } + if (!Buffer.isBuffer(options.passphrase)) { + throw (new errors.KeyEncryptedError( + options.filename, 'PEM')); + } else { + parts = headers['dek-info'].split(','); + assert.ok(parts.length === 2); + cipher = parts[0].toLowerCase(); + iv = Buffer.from(parts[1], 'hex'); + key = utils.opensslKeyDeriv(cipher, iv, + options.passphrase, 1).key; + } + } + } + + if (alg && alg.toLowerCase() === 'encrypted') { + var eder = new asn1.BerReader(buf); + var pbesEnd; + eder.readSequence(); + + eder.readSequence(); + pbesEnd = eder.offset + eder.length; + + var method = eder.readOID(); + if (method !== OID_PBES2) { + throw (new Error('Unsupported PEM/PKCS8 encryption ' + + 'scheme: ' + method)); + } + + eder.readSequence(); /* PBES2-params */ + + eder.readSequence(); /* keyDerivationFunc */ + var kdfEnd = eder.offset + eder.length; + var kdfOid = eder.readOID(); + if (kdfOid !== OID_PBKDF2) + throw (new Error('Unsupported PBES2 KDF: ' + kdfOid)); + eder.readSequence(); + var salt = eder.readString(asn1.Ber.OctetString, true); + var iterations = eder.readInt(); + var hashAlg = 'sha1'; + if (eder.offset < kdfEnd) { + eder.readSequence(); + var hashAlgOid = eder.readOID(); + hashAlg = OID_TO_HASH[hashAlgOid]; + if (hashAlg === undefined) { + throw (new Error('Unsupported PBKDF2 hash: ' + + hashAlgOid)); + } + } + eder._offset = kdfEnd; + + eder.readSequence(); /* encryptionScheme */ + var cipherOid = eder.readOID(); + cipher = OID_TO_CIPHER[cipherOid]; + if (cipher === undefined) { + throw (new Error('Unsupported PBES2 cipher: ' + + cipherOid)); + } + iv = eder.readString(asn1.Ber.OctetString, true); + + eder._offset = pbesEnd; + buf = eder.readString(asn1.Ber.OctetString, true); + + if (typeof (options.passphrase) === 'string') { + options.passphrase = Buffer.from( + options.passphrase, 'utf-8'); + } + if (!Buffer.isBuffer(options.passphrase)) { + throw (new errors.KeyEncryptedError( + options.filename, 'PEM')); + } + + var cinfo = utils.opensshCipherInfo(cipher); + + cipher = cinfo.opensslName; + key = utils.pbkdf2(hashAlg, salt, iterations, cinfo.keySize, + options.passphrase); + alg = undefined; + } + + if (cipher && key && iv) { + var cipherStream = crypto.createDecipheriv(cipher, key, iv); + var chunk, chunks = []; + cipherStream.once('error', function (e) { + if (e.toString().indexOf('bad decrypt') !== -1) { + throw (new Error('Incorrect passphrase ' + + 'supplied, could not decrypt key')); + } + throw (e); + }); + cipherStream.write(buf); + cipherStream.end(); + while ((chunk = cipherStream.read()) !== null) + chunks.push(chunk); + buf = Buffer.concat(chunks); + } + + /* The new OpenSSH internal format abuses PEM headers */ + if (alg && alg.toLowerCase() === 'openssh') + return (sshpriv.readSSHPrivate(type, buf, options)); + if (alg && alg.toLowerCase() === 'ssh2') + return (rfc4253.readType(type, buf, options)); + + var der = new asn1.BerReader(buf); + der.originalInput = input; + + /* + * All of the PEM file types start with a sequence tag, so chop it + * off here + */ + der.readSequence(); + + /* PKCS#1 type keys name an algorithm in the banner explicitly */ + if (alg) { + if (forceType) + assert.strictEqual(forceType, 'pkcs1'); + return (pkcs1.readPkcs1(alg, type, der)); + } else { + if (forceType) + assert.strictEqual(forceType, 'pkcs8'); + return (pkcs8.readPkcs8(alg, type, der)); + } +} + +function write(key, options, type) { + assert.object(key); + + var alg = { + 'ecdsa': 'EC', + 'rsa': 'RSA', + 'dsa': 'DSA', + 'ed25519': 'EdDSA' + }[key.type]; + var header; + + var der = new asn1.BerWriter(); + + if (PrivateKey.isPrivateKey(key)) { + if (type && type === 'pkcs8') { + header = 'PRIVATE KEY'; + pkcs8.writePkcs8(der, key); + } else { + if (type) + assert.strictEqual(type, 'pkcs1'); + header = alg + ' PRIVATE KEY'; + pkcs1.writePkcs1(der, key); + } + + } else if (Key.isKey(key)) { + if (type && type === 'pkcs1') { + header = alg + ' PUBLIC KEY'; + pkcs1.writePkcs1(der, key); + } else { + if (type) + assert.strictEqual(type, 'pkcs8'); + header = 'PUBLIC KEY'; + pkcs8.writePkcs8(der, key); + } + + } else { + throw (new Error('key is not a Key or PrivateKey')); + } + + var tmp = der.buffer.toString('base64'); + var len = tmp.length + (tmp.length / 64) + + 18 + 16 + header.length*2 + 10; + var buf = Buffer.alloc(len); + var o = 0; + o += buf.write('-----BEGIN ' + header + '-----\n', o); + for (var i = 0; i < tmp.length; ) { + var limit = i + 64; + if (limit > tmp.length) + limit = tmp.length; + o += buf.write(tmp.slice(i, limit), o); + buf[o++] = 10; + i = limit; + } + o += buf.write('-----END ' + header + '-----\n', o); + + return (buf.slice(0, o)); +} diff --git a/node_modules/sshpk/lib/formats/pkcs1.js b/node_modules/sshpk/lib/formats/pkcs1.js new file mode 100644 index 000000000..bc4855002 --- /dev/null +++ b/node_modules/sshpk/lib/formats/pkcs1.js @@ -0,0 +1,373 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read, + readPkcs1: readPkcs1, + write: write, + writePkcs1: writePkcs1 +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); + +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); + +var pkcs8 = require('./pkcs8'); +var readECDSACurve = pkcs8.readECDSACurve; + +function read(buf, options) { + return (pem.read(buf, options, 'pkcs1')); +} + +function write(key, options) { + return (pem.write(key, options, 'pkcs1')); +} + +/* Helper to read in a single mpint */ +function readMPInt(der, nm) { + assert.strictEqual(der.peek(), asn1.Ber.Integer, + nm + ' is not an Integer'); + return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); +} + +function readPkcs1(alg, type, der) { + switch (alg) { + case 'RSA': + if (type === 'public') + return (readPkcs1RSAPublic(der)); + else if (type === 'private') + return (readPkcs1RSAPrivate(der)); + throw (new Error('Unknown key type: ' + type)); + case 'DSA': + if (type === 'public') + return (readPkcs1DSAPublic(der)); + else if (type === 'private') + return (readPkcs1DSAPrivate(der)); + throw (new Error('Unknown key type: ' + type)); + case 'EC': + case 'ECDSA': + if (type === 'private') + return (readPkcs1ECDSAPrivate(der)); + else if (type === 'public') + return (readPkcs1ECDSAPublic(der)); + throw (new Error('Unknown key type: ' + type)); + case 'EDDSA': + case 'EdDSA': + if (type === 'private') + return (readPkcs1EdDSAPrivate(der)); + throw (new Error(type + ' keys not supported with EdDSA')); + default: + throw (new Error('Unknown key algo: ' + alg)); + } +} + +function readPkcs1RSAPublic(der) { + // modulus and exponent + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'exponent'); + + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'e', data: e }, + { name: 'n', data: n } + ] + }; + + return (new Key(key)); +} + +function readPkcs1RSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version[0], 0); + + // modulus then public exponent + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'public exponent'); + var d = readMPInt(der, 'private exponent'); + var p = readMPInt(der, 'prime1'); + var q = readMPInt(der, 'prime2'); + var dmodp = readMPInt(der, 'exponent1'); + var dmodq = readMPInt(der, 'exponent2'); + var iqmp = readMPInt(der, 'iqmp'); + + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'n', data: n }, + { name: 'e', data: e }, + { name: 'd', data: d }, + { name: 'iqmp', data: iqmp }, + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'dmodp', data: dmodp }, + { name: 'dmodq', data: dmodq } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs1DSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version.readUInt8(0), 0); + + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + var y = readMPInt(der, 'y'); + var x = readMPInt(der, 'x'); + + // now, make the key + var key = { + type: 'dsa', + parts: [ + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g }, + { name: 'y', data: y }, + { name: 'x', data: x } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs1EdDSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version.readUInt8(0), 1); + + // private key + var k = der.readString(asn1.Ber.OctetString, true); + + der.readSequence(0xa0); + var oid = der.readOID(); + assert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier'); + + der.readSequence(0xa1); + var A = utils.readBitString(der); + + var key = { + type: 'ed25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) }, + { name: 'k', data: k } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs1DSAPublic(der) { + var y = readMPInt(der, 'y'); + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + + var key = { + type: 'dsa', + parts: [ + { name: 'y', data: y }, + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g } + ] + }; + + return (new Key(key)); +} + +function readPkcs1ECDSAPublic(der) { + der.readSequence(); + + var oid = der.readOID(); + assert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey'); + + var curveOid = der.readOID(); + + var curve; + var curves = Object.keys(algs.curves); + for (var j = 0; j < curves.length; ++j) { + var c = curves[j]; + var cd = algs.curves[c]; + if (cd.pkcs8oid === curveOid) { + curve = c; + break; + } + } + assert.string(curve, 'a known ECDSA named curve'); + + var Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curve) }, + { name: 'Q', data: Q } + ] + }; + + return (new Key(key)); +} + +function readPkcs1ECDSAPrivate(der) { + var version = readMPInt(der, 'version'); + assert.strictEqual(version.readUInt8(0), 1); + + // private key + var d = der.readString(asn1.Ber.OctetString, true); + + der.readSequence(0xa0); + var curve = readECDSACurve(der); + assert.string(curve, 'a known elliptic curve'); + + der.readSequence(0xa1); + var Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curve) }, + { name: 'Q', data: Q }, + { name: 'd', data: d } + ] + }; + + return (new PrivateKey(key)); +} + +function writePkcs1(der, key) { + der.startSequence(); + + switch (key.type) { + case 'rsa': + if (PrivateKey.isPrivateKey(key)) + writePkcs1RSAPrivate(der, key); + else + writePkcs1RSAPublic(der, key); + break; + case 'dsa': + if (PrivateKey.isPrivateKey(key)) + writePkcs1DSAPrivate(der, key); + else + writePkcs1DSAPublic(der, key); + break; + case 'ecdsa': + if (PrivateKey.isPrivateKey(key)) + writePkcs1ECDSAPrivate(der, key); + else + writePkcs1ECDSAPublic(der, key); + break; + case 'ed25519': + if (PrivateKey.isPrivateKey(key)) + writePkcs1EdDSAPrivate(der, key); + else + writePkcs1EdDSAPublic(der, key); + break; + default: + throw (new Error('Unknown key algo: ' + key.type)); + } + + der.endSequence(); +} + +function writePkcs1RSAPublic(der, key) { + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); +} + +function writePkcs1RSAPrivate(der, key) { + var ver = Buffer.from([0]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); + der.writeBuffer(key.part.d.data, asn1.Ber.Integer); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + if (!key.part.dmodp || !key.part.dmodq) + utils.addRSAMissing(key); + der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer); + der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer); + der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer); +} + +function writePkcs1DSAPrivate(der, key) { + var ver = Buffer.from([0]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); + der.writeBuffer(key.part.y.data, asn1.Ber.Integer); + der.writeBuffer(key.part.x.data, asn1.Ber.Integer); +} + +function writePkcs1DSAPublic(der, key) { + der.writeBuffer(key.part.y.data, asn1.Ber.Integer); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); +} + +function writePkcs1ECDSAPublic(der, key) { + der.startSequence(); + + der.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */ + var curve = key.part.curve.data.toString(); + var curveOid = algs.curves[curve].pkcs8oid; + assert.string(curveOid, 'a known ECDSA named curve'); + der.writeOID(curveOid); + + der.endSequence(); + + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); +} + +function writePkcs1ECDSAPrivate(der, key) { + var ver = Buffer.from([1]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.d.data, asn1.Ber.OctetString); + + der.startSequence(0xa0); + var curve = key.part.curve.data.toString(); + var curveOid = algs.curves[curve].pkcs8oid; + assert.string(curveOid, 'a known ECDSA named curve'); + der.writeOID(curveOid); + der.endSequence(); + + der.startSequence(0xa1); + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); + der.endSequence(); +} + +function writePkcs1EdDSAPrivate(der, key) { + var ver = Buffer.from([1]); + der.writeBuffer(ver, asn1.Ber.Integer); + + der.writeBuffer(key.part.k.data, asn1.Ber.OctetString); + + der.startSequence(0xa0); + der.writeOID('1.3.101.112'); + der.endSequence(); + + der.startSequence(0xa1); + utils.writeBitString(der, key.part.A.data); + der.endSequence(); +} + +function writePkcs1EdDSAPublic(der, key) { + throw (new Error('Public keys are not supported for EdDSA PKCS#1')); +} diff --git a/node_modules/sshpk/lib/formats/pkcs8.js b/node_modules/sshpk/lib/formats/pkcs8.js new file mode 100644 index 000000000..2ca3ca7a2 --- /dev/null +++ b/node_modules/sshpk/lib/formats/pkcs8.js @@ -0,0 +1,631 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + readPkcs8: readPkcs8, + write: write, + writePkcs8: writePkcs8, + pkcs8ToBuffer: pkcs8ToBuffer, + + readECDSACurve: readECDSACurve, + writeECDSACurve: writeECDSACurve +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); + +function read(buf, options) { + return (pem.read(buf, options, 'pkcs8')); +} + +function write(key, options) { + return (pem.write(key, options, 'pkcs8')); +} + +/* Helper to read in a single mpint */ +function readMPInt(der, nm) { + assert.strictEqual(der.peek(), asn1.Ber.Integer, + nm + ' is not an Integer'); + return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); +} + +function readPkcs8(alg, type, der) { + /* Private keys in pkcs#8 format have a weird extra int */ + if (der.peek() === asn1.Ber.Integer) { + assert.strictEqual(type, 'private', + 'unexpected Integer at start of public key'); + der.readString(asn1.Ber.Integer, true); + } + + der.readSequence(); + var next = der.offset + der.length; + + var oid = der.readOID(); + switch (oid) { + case '1.2.840.113549.1.1.1': + der._offset = next; + if (type === 'public') + return (readPkcs8RSAPublic(der)); + else + return (readPkcs8RSAPrivate(der)); + case '1.2.840.10040.4.1': + if (type === 'public') + return (readPkcs8DSAPublic(der)); + else + return (readPkcs8DSAPrivate(der)); + case '1.2.840.10045.2.1': + if (type === 'public') + return (readPkcs8ECDSAPublic(der)); + else + return (readPkcs8ECDSAPrivate(der)); + case '1.3.101.112': + if (type === 'public') { + return (readPkcs8EdDSAPublic(der)); + } else { + return (readPkcs8EdDSAPrivate(der)); + } + case '1.3.101.110': + if (type === 'public') { + return (readPkcs8X25519Public(der)); + } else { + return (readPkcs8X25519Private(der)); + } + default: + throw (new Error('Unknown key type OID ' + oid)); + } +} + +function readPkcs8RSAPublic(der) { + // bit string sequence + der.readSequence(asn1.Ber.BitString); + der.readByte(); + der.readSequence(); + + // modulus + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'exponent'); + + // now, make the key + var key = { + type: 'rsa', + source: der.originalInput, + parts: [ + { name: 'e', data: e }, + { name: 'n', data: n } + ] + }; + + return (new Key(key)); +} + +function readPkcs8RSAPrivate(der) { + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + + var ver = readMPInt(der, 'version'); + assert.equal(ver[0], 0x0, 'unknown RSA private key version'); + + // modulus then public exponent + var n = readMPInt(der, 'modulus'); + var e = readMPInt(der, 'public exponent'); + var d = readMPInt(der, 'private exponent'); + var p = readMPInt(der, 'prime1'); + var q = readMPInt(der, 'prime2'); + var dmodp = readMPInt(der, 'exponent1'); + var dmodq = readMPInt(der, 'exponent2'); + var iqmp = readMPInt(der, 'iqmp'); + + // now, make the key + var key = { + type: 'rsa', + parts: [ + { name: 'n', data: n }, + { name: 'e', data: e }, + { name: 'd', data: d }, + { name: 'iqmp', data: iqmp }, + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'dmodp', data: dmodp }, + { name: 'dmodq', data: dmodq } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs8DSAPublic(der) { + der.readSequence(); + + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + + // bit string sequence + der.readSequence(asn1.Ber.BitString); + der.readByte(); + + var y = readMPInt(der, 'y'); + + // now, make the key + var key = { + type: 'dsa', + parts: [ + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g }, + { name: 'y', data: y } + ] + }; + + return (new Key(key)); +} + +function readPkcs8DSAPrivate(der) { + der.readSequence(); + + var p = readMPInt(der, 'p'); + var q = readMPInt(der, 'q'); + var g = readMPInt(der, 'g'); + + der.readSequence(asn1.Ber.OctetString); + var x = readMPInt(der, 'x'); + + /* The pkcs#8 format does not include the public key */ + var y = utils.calculateDSAPublic(g, p, x); + + var key = { + type: 'dsa', + parts: [ + { name: 'p', data: p }, + { name: 'q', data: q }, + { name: 'g', data: g }, + { name: 'y', data: y }, + { name: 'x', data: x } + ] + }; + + return (new PrivateKey(key)); +} + +function readECDSACurve(der) { + var curveName, curveNames; + var j, c, cd; + + if (der.peek() === asn1.Ber.OID) { + var oid = der.readOID(); + + curveNames = Object.keys(algs.curves); + for (j = 0; j < curveNames.length; ++j) { + c = curveNames[j]; + cd = algs.curves[c]; + if (cd.pkcs8oid === oid) { + curveName = c; + break; + } + } + + } else { + // ECParameters sequence + der.readSequence(); + var version = der.readString(asn1.Ber.Integer, true); + assert.strictEqual(version[0], 1, 'ECDSA key not version 1'); + + var curve = {}; + + // FieldID sequence + der.readSequence(); + var fieldTypeOid = der.readOID(); + assert.strictEqual(fieldTypeOid, '1.2.840.10045.1.1', + 'ECDSA key is not from a prime-field'); + var p = curve.p = utils.mpNormalize( + der.readString(asn1.Ber.Integer, true)); + /* + * p always starts with a 1 bit, so count the zeros to get its + * real size. + */ + curve.size = p.length * 8 - utils.countZeros(p); + + // Curve sequence + der.readSequence(); + curve.a = utils.mpNormalize( + der.readString(asn1.Ber.OctetString, true)); + curve.b = utils.mpNormalize( + der.readString(asn1.Ber.OctetString, true)); + if (der.peek() === asn1.Ber.BitString) + curve.s = der.readString(asn1.Ber.BitString, true); + + // Combined Gx and Gy + curve.G = der.readString(asn1.Ber.OctetString, true); + assert.strictEqual(curve.G[0], 0x4, + 'uncompressed G is required'); + + curve.n = utils.mpNormalize( + der.readString(asn1.Ber.Integer, true)); + curve.h = utils.mpNormalize( + der.readString(asn1.Ber.Integer, true)); + assert.strictEqual(curve.h[0], 0x1, 'a cofactor=1 curve is ' + + 'required'); + + curveNames = Object.keys(algs.curves); + var ks = Object.keys(curve); + for (j = 0; j < curveNames.length; ++j) { + c = curveNames[j]; + cd = algs.curves[c]; + var equal = true; + for (var i = 0; i < ks.length; ++i) { + var k = ks[i]; + if (cd[k] === undefined) + continue; + if (typeof (cd[k]) === 'object' && + cd[k].equals !== undefined) { + if (!cd[k].equals(curve[k])) { + equal = false; + break; + } + } else if (Buffer.isBuffer(cd[k])) { + if (cd[k].toString('binary') + !== curve[k].toString('binary')) { + equal = false; + break; + } + } else { + if (cd[k] !== curve[k]) { + equal = false; + break; + } + } + } + if (equal) { + curveName = c; + break; + } + } + } + return (curveName); +} + +function readPkcs8ECDSAPrivate(der) { + var curveName = readECDSACurve(der); + assert.string(curveName, 'a known elliptic curve'); + + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + + var version = readMPInt(der, 'version'); + assert.equal(version[0], 1, 'unknown version of ECDSA key'); + + var d = der.readString(asn1.Ber.OctetString, true); + var Q; + + if (der.peek() == 0xa0) { + der.readSequence(0xa0); + der._offset += der.length; + } + if (der.peek() == 0xa1) { + der.readSequence(0xa1); + Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + } + + if (Q === undefined) { + var pub = utils.publicFromPrivateECDSA(curveName, d); + Q = pub.part.Q.data; + } + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curveName) }, + { name: 'Q', data: Q }, + { name: 'd', data: d } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs8ECDSAPublic(der) { + var curveName = readECDSACurve(der); + assert.string(curveName, 'a known elliptic curve'); + + var Q = der.readString(asn1.Ber.BitString, true); + Q = utils.ecNormalize(Q); + + var key = { + type: 'ecdsa', + parts: [ + { name: 'curve', data: Buffer.from(curveName) }, + { name: 'Q', data: Q } + ] + }; + + return (new Key(key)); +} + +function readPkcs8EdDSAPublic(der) { + if (der.peek() === 0x00) + der.readByte(); + + var A = utils.readBitString(der); + + var key = { + type: 'ed25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) } + ] + }; + + return (new Key(key)); +} + +function readPkcs8X25519Public(der) { + var A = utils.readBitString(der); + + var key = { + type: 'curve25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) } + ] + }; + + return (new Key(key)); +} + +function readPkcs8EdDSAPrivate(der) { + if (der.peek() === 0x00) + der.readByte(); + + der.readSequence(asn1.Ber.OctetString); + var k = der.readString(asn1.Ber.OctetString, true); + k = utils.zeroPadToLength(k, 32); + + var A; + if (der.peek() === asn1.Ber.BitString) { + A = utils.readBitString(der); + A = utils.zeroPadToLength(A, 32); + } else { + A = utils.calculateED25519Public(k); + } + + var key = { + type: 'ed25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) }, + { name: 'k', data: utils.zeroPadToLength(k, 32) } + ] + }; + + return (new PrivateKey(key)); +} + +function readPkcs8X25519Private(der) { + if (der.peek() === 0x00) + der.readByte(); + + der.readSequence(asn1.Ber.OctetString); + var k = der.readString(asn1.Ber.OctetString, true); + k = utils.zeroPadToLength(k, 32); + + var A = utils.calculateX25519Public(k); + + var key = { + type: 'curve25519', + parts: [ + { name: 'A', data: utils.zeroPadToLength(A, 32) }, + { name: 'k', data: utils.zeroPadToLength(k, 32) } + ] + }; + + return (new PrivateKey(key)); +} + +function pkcs8ToBuffer(key) { + var der = new asn1.BerWriter(); + writePkcs8(der, key); + return (der.buffer); +} + +function writePkcs8(der, key) { + der.startSequence(); + + if (PrivateKey.isPrivateKey(key)) { + var sillyInt = Buffer.from([0]); + der.writeBuffer(sillyInt, asn1.Ber.Integer); + } + + der.startSequence(); + switch (key.type) { + case 'rsa': + der.writeOID('1.2.840.113549.1.1.1'); + if (PrivateKey.isPrivateKey(key)) + writePkcs8RSAPrivate(key, der); + else + writePkcs8RSAPublic(key, der); + break; + case 'dsa': + der.writeOID('1.2.840.10040.4.1'); + if (PrivateKey.isPrivateKey(key)) + writePkcs8DSAPrivate(key, der); + else + writePkcs8DSAPublic(key, der); + break; + case 'ecdsa': + der.writeOID('1.2.840.10045.2.1'); + if (PrivateKey.isPrivateKey(key)) + writePkcs8ECDSAPrivate(key, der); + else + writePkcs8ECDSAPublic(key, der); + break; + case 'ed25519': + der.writeOID('1.3.101.112'); + if (PrivateKey.isPrivateKey(key)) + throw (new Error('Ed25519 private keys in pkcs8 ' + + 'format are not supported')); + writePkcs8EdDSAPublic(key, der); + break; + default: + throw (new Error('Unsupported key type: ' + key.type)); + } + + der.endSequence(); +} + +function writePkcs8RSAPrivate(key, der) { + der.writeNull(); + der.endSequence(); + + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + + var version = Buffer.from([0]); + der.writeBuffer(version, asn1.Ber.Integer); + + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); + der.writeBuffer(key.part.d.data, asn1.Ber.Integer); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + if (!key.part.dmodp || !key.part.dmodq) + utils.addRSAMissing(key); + der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer); + der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer); + der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer); + + der.endSequence(); + der.endSequence(); +} + +function writePkcs8RSAPublic(key, der) { + der.writeNull(); + der.endSequence(); + + der.startSequence(asn1.Ber.BitString); + der.writeByte(0x00); + + der.startSequence(); + der.writeBuffer(key.part.n.data, asn1.Ber.Integer); + der.writeBuffer(key.part.e.data, asn1.Ber.Integer); + der.endSequence(); + + der.endSequence(); +} + +function writePkcs8DSAPrivate(key, der) { + der.startSequence(); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); + der.endSequence(); + + der.endSequence(); + + der.startSequence(asn1.Ber.OctetString); + der.writeBuffer(key.part.x.data, asn1.Ber.Integer); + der.endSequence(); +} + +function writePkcs8DSAPublic(key, der) { + der.startSequence(); + der.writeBuffer(key.part.p.data, asn1.Ber.Integer); + der.writeBuffer(key.part.q.data, asn1.Ber.Integer); + der.writeBuffer(key.part.g.data, asn1.Ber.Integer); + der.endSequence(); + der.endSequence(); + + der.startSequence(asn1.Ber.BitString); + der.writeByte(0x00); + der.writeBuffer(key.part.y.data, asn1.Ber.Integer); + der.endSequence(); +} + +function writeECDSACurve(key, der) { + var curve = algs.curves[key.curve]; + if (curve.pkcs8oid) { + /* This one has a name in pkcs#8, so just write the oid */ + der.writeOID(curve.pkcs8oid); + + } else { + // ECParameters sequence + der.startSequence(); + + var version = Buffer.from([1]); + der.writeBuffer(version, asn1.Ber.Integer); + + // FieldID sequence + der.startSequence(); + der.writeOID('1.2.840.10045.1.1'); // prime-field + der.writeBuffer(curve.p, asn1.Ber.Integer); + der.endSequence(); + + // Curve sequence + der.startSequence(); + var a = curve.p; + if (a[0] === 0x0) + a = a.slice(1); + der.writeBuffer(a, asn1.Ber.OctetString); + der.writeBuffer(curve.b, asn1.Ber.OctetString); + der.writeBuffer(curve.s, asn1.Ber.BitString); + der.endSequence(); + + der.writeBuffer(curve.G, asn1.Ber.OctetString); + der.writeBuffer(curve.n, asn1.Ber.Integer); + var h = curve.h; + if (!h) { + h = Buffer.from([1]); + } + der.writeBuffer(h, asn1.Ber.Integer); + + // ECParameters + der.endSequence(); + } +} + +function writePkcs8ECDSAPublic(key, der) { + writeECDSACurve(key, der); + der.endSequence(); + + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); +} + +function writePkcs8ECDSAPrivate(key, der) { + writeECDSACurve(key, der); + der.endSequence(); + + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + + var version = Buffer.from([1]); + der.writeBuffer(version, asn1.Ber.Integer); + + der.writeBuffer(key.part.d.data, asn1.Ber.OctetString); + + der.startSequence(0xa1); + var Q = utils.ecNormalize(key.part.Q.data, true); + der.writeBuffer(Q, asn1.Ber.BitString); + der.endSequence(); + + der.endSequence(); + der.endSequence(); +} + +function writePkcs8EdDSAPublic(key, der) { + der.endSequence(); + + utils.writeBitString(der, key.part.A.data); +} + +function writePkcs8EdDSAPrivate(key, der) { + der.endSequence(); + + var k = utils.mpNormalize(key.part.k.data, true); + der.startSequence(asn1.Ber.OctetString); + der.writeBuffer(k, asn1.Ber.OctetString); + der.endSequence(); +} diff --git a/node_modules/sshpk/lib/formats/putty.js b/node_modules/sshpk/lib/formats/putty.js new file mode 100644 index 000000000..e7b2add35 --- /dev/null +++ b/node_modules/sshpk/lib/formats/putty.js @@ -0,0 +1,194 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var rfc4253 = require('./rfc4253'); +var Key = require('../key'); +var SSHBuffer = require('../ssh-buffer'); +var crypto = require('crypto'); +var PrivateKey = require('../private-key'); + +var errors = require('../errors'); + +// https://tartarus.org/~simon/putty-prerel-snapshots/htmldoc/AppendixC.html +function read(buf, options) { + var lines = buf.toString('ascii').split(/[\r\n]+/); + var found = false; + var parts; + var si = 0; + var formatVersion; + while (si < lines.length) { + parts = splitHeader(lines[si++]); + if (parts) { + formatVersion = { + 'putty-user-key-file-2': 2, + 'putty-user-key-file-3': 3 + }[parts[0].toLowerCase()]; + if (formatVersion) { + found = true; + break; + } + } + } + if (!found) { + throw (new Error('No PuTTY format first line found')); + } + var alg = parts[1]; + + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'encryption'); + var encryption = parts[1]; + + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'comment'); + var comment = parts[1]; + + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'public-lines'); + var publicLines = parseInt(parts[1], 10); + if (!isFinite(publicLines) || publicLines < 0 || + publicLines > lines.length) { + throw (new Error('Invalid public-lines count')); + } + + var publicBuf = Buffer.from( + lines.slice(si, si + publicLines).join(''), 'base64'); + var keyType = rfc4253.algToKeyType(alg); + var key = rfc4253.read(publicBuf); + if (key.type !== keyType) { + throw (new Error('Outer key algorithm mismatch')); + } + + si += publicLines; + if (lines[si]) { + parts = splitHeader(lines[si++]); + assert.equal(parts[0].toLowerCase(), 'private-lines'); + var privateLines = parseInt(parts[1], 10); + if (!isFinite(privateLines) || privateLines < 0 || + privateLines > lines.length) { + throw (new Error('Invalid private-lines count')); + } + + var privateBuf = Buffer.from( + lines.slice(si, si + privateLines).join(''), 'base64'); + + if (encryption !== 'none' && formatVersion === 3) { + throw new Error('Encrypted keys arenot supported for' + + ' PuTTY format version 3'); + } + + if (encryption === 'aes256-cbc') { + if (!options.passphrase) { + throw (new errors.KeyEncryptedError( + options.filename, 'PEM')); + } + + var iv = Buffer.alloc(16, 0); + var decipher = crypto.createDecipheriv( + 'aes-256-cbc', + derivePPK2EncryptionKey(options.passphrase), + iv); + decipher.setAutoPadding(false); + privateBuf = Buffer.concat([ + decipher.update(privateBuf), decipher.final()]); + } + + key = new PrivateKey(key); + if (key.type !== keyType) { + throw (new Error('Outer key algorithm mismatch')); + } + + var sshbuf = new SSHBuffer({buffer: privateBuf}); + var privateKeyParts; + if (alg === 'ssh-dss') { + privateKeyParts = [ { + name: 'x', + data: sshbuf.readBuffer() + }]; + } else if (alg === 'ssh-rsa') { + privateKeyParts = [ + { name: 'd', data: sshbuf.readBuffer() }, + { name: 'p', data: sshbuf.readBuffer() }, + { name: 'q', data: sshbuf.readBuffer() }, + { name: 'iqmp', data: sshbuf.readBuffer() } + ]; + } else if (alg.match(/^ecdsa-sha2-nistp/)) { + privateKeyParts = [ { + name: 'd', data: sshbuf.readBuffer() + } ]; + } else if (alg === 'ssh-ed25519') { + privateKeyParts = [ { + name: 'k', data: sshbuf.readBuffer() + } ]; + } else { + throw new Error('Unsupported PPK key type: ' + alg); + } + + key = new PrivateKey({ + type: key.type, + parts: key.parts.concat(privateKeyParts) + }); + } + + key.comment = comment; + return (key); +} + +function derivePPK2EncryptionKey(passphrase) { + var hash1 = crypto.createHash('sha1').update(Buffer.concat([ + Buffer.from([0, 0, 0, 0]), + Buffer.from(passphrase) + ])).digest(); + var hash2 = crypto.createHash('sha1').update(Buffer.concat([ + Buffer.from([0, 0, 0, 1]), + Buffer.from(passphrase) + ])).digest(); + return (Buffer.concat([hash1, hash2]).slice(0, 32)); +} + +function splitHeader(line) { + var idx = line.indexOf(':'); + if (idx === -1) + return (null); + var header = line.slice(0, idx); + ++idx; + while (line[idx] === ' ') + ++idx; + var rest = line.slice(idx); + return ([header, rest]); +} + +function write(key, options) { + assert.object(key); + if (!Key.isKey(key)) + throw (new Error('Must be a public key')); + + var alg = rfc4253.keyTypeToAlg(key); + var buf = rfc4253.write(key); + var comment = key.comment || ''; + + var b64 = buf.toString('base64'); + var lines = wrap(b64, 64); + + lines.unshift('Public-Lines: ' + lines.length); + lines.unshift('Comment: ' + comment); + lines.unshift('Encryption: none'); + lines.unshift('PuTTY-User-Key-File-2: ' + alg); + + return (Buffer.from(lines.join('\n') + '\n')); +} + +function wrap(txt, len) { + var lines = []; + var pos = 0; + while (pos < txt.length) { + lines.push(txt.slice(pos, pos + 64)); + pos += 64; + } + return (lines); +} diff --git a/node_modules/sshpk/lib/formats/rfc4253.js b/node_modules/sshpk/lib/formats/rfc4253.js new file mode 100644 index 000000000..52fddcb6b --- /dev/null +++ b/node_modules/sshpk/lib/formats/rfc4253.js @@ -0,0 +1,166 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read.bind(undefined, false, undefined), + readType: read.bind(undefined, false), + write: write, + /* semi-private api, used by sshpk-agent */ + readPartial: read.bind(undefined, true), + + /* shared with ssh format */ + readInternal: read, + keyTypeToAlg: keyTypeToAlg, + algToKeyType: algToKeyType +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var SSHBuffer = require('../ssh-buffer'); + +function algToKeyType(alg) { + assert.string(alg); + if (alg === 'ssh-dss') + return ('dsa'); + else if (alg === 'ssh-rsa') + return ('rsa'); + else if (alg === 'ssh-ed25519') + return ('ed25519'); + else if (alg === 'ssh-curve25519') + return ('curve25519'); + else if (alg.match(/^ecdsa-sha2-/)) + return ('ecdsa'); + else + throw (new Error('Unknown algorithm ' + alg)); +} + +function keyTypeToAlg(key) { + assert.object(key); + if (key.type === 'dsa') + return ('ssh-dss'); + else if (key.type === 'rsa') + return ('ssh-rsa'); + else if (key.type === 'ed25519') + return ('ssh-ed25519'); + else if (key.type === 'curve25519') + return ('ssh-curve25519'); + else if (key.type === 'ecdsa') + return ('ecdsa-sha2-' + key.part.curve.data.toString()); + else + throw (new Error('Unknown key type ' + key.type)); +} + +function read(partial, type, buf, options) { + if (typeof (buf) === 'string') + buf = Buffer.from(buf); + assert.buffer(buf, 'buf'); + + var key = {}; + + var parts = key.parts = []; + var sshbuf = new SSHBuffer({buffer: buf}); + + var alg = sshbuf.readString(); + assert.ok(!sshbuf.atEnd(), 'key must have at least one part'); + + key.type = algToKeyType(alg); + + var partCount = algs.info[key.type].parts.length; + if (type && type === 'private') + partCount = algs.privInfo[key.type].parts.length; + + while (!sshbuf.atEnd() && parts.length < partCount) + parts.push(sshbuf.readPart()); + while (!partial && !sshbuf.atEnd()) + parts.push(sshbuf.readPart()); + + assert.ok(parts.length >= 1, + 'key must have at least one part'); + assert.ok(partial || sshbuf.atEnd(), + 'leftover bytes at end of key'); + + var Constructor = Key; + var algInfo = algs.info[key.type]; + if (type === 'private' || algInfo.parts.length !== parts.length) { + algInfo = algs.privInfo[key.type]; + Constructor = PrivateKey; + } + assert.strictEqual(algInfo.parts.length, parts.length); + + if (key.type === 'ecdsa') { + var res = /^ecdsa-sha2-(.+)$/.exec(alg); + assert.ok(res !== null); + assert.strictEqual(res[1], parts[0].data.toString()); + } + + var normalized = true; + for (var i = 0; i < algInfo.parts.length; ++i) { + var p = parts[i]; + p.name = algInfo.parts[i]; + /* + * OpenSSH stores ed25519 "private" keys as seed + public key + * concat'd together (k followed by A). We want to keep them + * separate for other formats that don't do this. + */ + if (key.type === 'ed25519' && p.name === 'k') + p.data = p.data.slice(0, 32); + + if (p.name !== 'curve' && algInfo.normalize !== false) { + var nd; + if (key.type === 'ed25519') { + nd = utils.zeroPadToLength(p.data, 32); + } else { + nd = utils.mpNormalize(p.data); + } + if (nd.toString('binary') !== + p.data.toString('binary')) { + p.data = nd; + normalized = false; + } + } + } + + if (normalized) + key._rfc4253Cache = sshbuf.toBuffer(); + + if (partial && typeof (partial) === 'object') { + partial.remainder = sshbuf.remainder(); + partial.consumed = sshbuf._offset; + } + + return (new Constructor(key)); +} + +function write(key, options) { + assert.object(key); + + var alg = keyTypeToAlg(key); + var i; + + var algInfo = algs.info[key.type]; + if (PrivateKey.isPrivateKey(key)) + algInfo = algs.privInfo[key.type]; + var parts = algInfo.parts; + + var buf = new SSHBuffer({}); + + buf.writeString(alg); + + for (i = 0; i < parts.length; ++i) { + var data = key.part[parts[i]].data; + if (algInfo.normalize !== false) { + if (key.type === 'ed25519') + data = utils.zeroPadToLength(data, 32); + else + data = utils.mpNormalize(data); + } + if (key.type === 'ed25519' && parts[i] === 'k') + data = Buffer.concat([data, key.part.A.data]); + buf.writeBuffer(data); + } + + return (buf.toBuffer()); +} diff --git a/node_modules/sshpk/lib/formats/ssh-private.js b/node_modules/sshpk/lib/formats/ssh-private.js new file mode 100644 index 000000000..5e7eed887 --- /dev/null +++ b/node_modules/sshpk/lib/formats/ssh-private.js @@ -0,0 +1,262 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read, + readSSHPrivate: readSSHPrivate, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var crypto = require('crypto'); + +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); +var rfc4253 = require('./rfc4253'); +var SSHBuffer = require('../ssh-buffer'); +var errors = require('../errors'); + +var bcrypt; + +function read(buf, options) { + return (pem.read(buf, options)); +} + +var MAGIC = 'openssh-key-v1'; + +function readSSHPrivate(type, buf, options) { + buf = new SSHBuffer({buffer: buf}); + + var magic = buf.readCString(); + assert.strictEqual(magic, MAGIC, 'bad magic string'); + + var cipher = buf.readString(); + var kdf = buf.readString(); + var kdfOpts = buf.readBuffer(); + + var nkeys = buf.readInt(); + if (nkeys !== 1) { + throw (new Error('OpenSSH-format key file contains ' + + 'multiple keys: this is unsupported.')); + } + + var pubKey = buf.readBuffer(); + + if (type === 'public') { + assert.ok(buf.atEnd(), 'excess bytes left after key'); + return (rfc4253.read(pubKey)); + } + + var privKeyBlob = buf.readBuffer(); + assert.ok(buf.atEnd(), 'excess bytes left after key'); + + var kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts }); + switch (kdf) { + case 'none': + if (cipher !== 'none') { + throw (new Error('OpenSSH-format key uses KDF "none" ' + + 'but specifies a cipher other than "none"')); + } + break; + case 'bcrypt': + var salt = kdfOptsBuf.readBuffer(); + var rounds = kdfOptsBuf.readInt(); + var cinf = utils.opensshCipherInfo(cipher); + if (bcrypt === undefined) { + bcrypt = require('bcrypt-pbkdf'); + } + + if (typeof (options.passphrase) === 'string') { + options.passphrase = Buffer.from(options.passphrase, + 'utf-8'); + } + if (!Buffer.isBuffer(options.passphrase)) { + throw (new errors.KeyEncryptedError( + options.filename, 'OpenSSH')); + } + + var pass = new Uint8Array(options.passphrase); + var salti = new Uint8Array(salt); + /* Use the pbkdf to derive both the key and the IV. */ + var out = new Uint8Array(cinf.keySize + cinf.blockSize); + var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length, + out, out.length, rounds); + if (res !== 0) { + throw (new Error('bcrypt_pbkdf function returned ' + + 'failure, parameters invalid')); + } + out = Buffer.from(out); + var ckey = out.slice(0, cinf.keySize); + var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize); + var cipherStream = crypto.createDecipheriv(cinf.opensslName, + ckey, iv); + cipherStream.setAutoPadding(false); + var chunk, chunks = []; + cipherStream.once('error', function (e) { + if (e.toString().indexOf('bad decrypt') !== -1) { + throw (new Error('Incorrect passphrase ' + + 'supplied, could not decrypt key')); + } + throw (e); + }); + cipherStream.write(privKeyBlob); + cipherStream.end(); + while ((chunk = cipherStream.read()) !== null) + chunks.push(chunk); + privKeyBlob = Buffer.concat(chunks); + break; + default: + throw (new Error( + 'OpenSSH-format key uses unknown KDF "' + kdf + '"')); + } + + buf = new SSHBuffer({buffer: privKeyBlob}); + + var checkInt1 = buf.readInt(); + var checkInt2 = buf.readInt(); + if (checkInt1 !== checkInt2) { + throw (new Error('Incorrect passphrase supplied, could not ' + + 'decrypt key')); + } + + var ret = {}; + var key = rfc4253.readInternal(ret, 'private', buf.remainder()); + + buf.skip(ret.consumed); + + var comment = buf.readString(); + key.comment = comment; + + return (key); +} + +function write(key, options) { + var pubKey; + if (PrivateKey.isPrivateKey(key)) + pubKey = key.toPublic(); + else + pubKey = key; + + var cipher = 'none'; + var kdf = 'none'; + var kdfopts = Buffer.alloc(0); + var cinf = { blockSize: 8 }; + var passphrase; + if (options !== undefined) { + passphrase = options.passphrase; + if (typeof (passphrase) === 'string') + passphrase = Buffer.from(passphrase, 'utf-8'); + if (passphrase !== undefined) { + assert.buffer(passphrase, 'options.passphrase'); + assert.optionalString(options.cipher, 'options.cipher'); + cipher = options.cipher; + if (cipher === undefined) + cipher = 'aes128-ctr'; + cinf = utils.opensshCipherInfo(cipher); + kdf = 'bcrypt'; + } + } + + var privBuf; + if (PrivateKey.isPrivateKey(key)) { + privBuf = new SSHBuffer({}); + var checkInt = crypto.randomBytes(4).readUInt32BE(0); + privBuf.writeInt(checkInt); + privBuf.writeInt(checkInt); + privBuf.write(key.toBuffer('rfc4253')); + privBuf.writeString(key.comment || ''); + + var n = 1; + while (privBuf._offset % cinf.blockSize !== 0) + privBuf.writeChar(n++); + privBuf = privBuf.toBuffer(); + } + + switch (kdf) { + case 'none': + break; + case 'bcrypt': + var salt = crypto.randomBytes(16); + var rounds = 16; + var kdfssh = new SSHBuffer({}); + kdfssh.writeBuffer(salt); + kdfssh.writeInt(rounds); + kdfopts = kdfssh.toBuffer(); + + if (bcrypt === undefined) { + bcrypt = require('bcrypt-pbkdf'); + } + var pass = new Uint8Array(passphrase); + var salti = new Uint8Array(salt); + /* Use the pbkdf to derive both the key and the IV. */ + var out = new Uint8Array(cinf.keySize + cinf.blockSize); + var res = bcrypt.pbkdf(pass, pass.length, salti, salti.length, + out, out.length, rounds); + if (res !== 0) { + throw (new Error('bcrypt_pbkdf function returned ' + + 'failure, parameters invalid')); + } + out = Buffer.from(out); + var ckey = out.slice(0, cinf.keySize); + var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize); + + var cipherStream = crypto.createCipheriv(cinf.opensslName, + ckey, iv); + cipherStream.setAutoPadding(false); + var chunk, chunks = []; + cipherStream.once('error', function (e) { + throw (e); + }); + cipherStream.write(privBuf); + cipherStream.end(); + while ((chunk = cipherStream.read()) !== null) + chunks.push(chunk); + privBuf = Buffer.concat(chunks); + break; + default: + throw (new Error('Unsupported kdf ' + kdf)); + } + + var buf = new SSHBuffer({}); + + buf.writeCString(MAGIC); + buf.writeString(cipher); /* cipher */ + buf.writeString(kdf); /* kdf */ + buf.writeBuffer(kdfopts); /* kdfoptions */ + + buf.writeInt(1); /* nkeys */ + buf.writeBuffer(pubKey.toBuffer('rfc4253')); + + if (privBuf) + buf.writeBuffer(privBuf); + + buf = buf.toBuffer(); + + var header; + if (PrivateKey.isPrivateKey(key)) + header = 'OPENSSH PRIVATE KEY'; + else + header = 'OPENSSH PUBLIC KEY'; + + var tmp = buf.toString('base64'); + var len = tmp.length + (tmp.length / 70) + + 18 + 16 + header.length*2 + 10; + buf = Buffer.alloc(len); + var o = 0; + o += buf.write('-----BEGIN ' + header + '-----\n', o); + for (var i = 0; i < tmp.length; ) { + var limit = i + 70; + if (limit > tmp.length) + limit = tmp.length; + o += buf.write(tmp.slice(i, limit), o); + buf[o++] = 10; + i = limit; + } + o += buf.write('-----END ' + header + '-----\n', o); + + return (buf.slice(0, o)); +} diff --git a/node_modules/sshpk/lib/formats/ssh.js b/node_modules/sshpk/lib/formats/ssh.js new file mode 100644 index 000000000..c8e9c9310 --- /dev/null +++ b/node_modules/sshpk/lib/formats/ssh.js @@ -0,0 +1,115 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + read: read, + write: write +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var rfc4253 = require('./rfc4253'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); + +var sshpriv = require('./ssh-private'); + +/*JSSTYLED*/ +var SSHKEY_RE = /^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/]+[=]*)([ \t]+([^ \t][^\n]*[\n]*)?)?$/; +/*JSSTYLED*/ +var SSHKEY_RE2 = /^([a-z0-9-]+)[ \t\n]+([a-zA-Z0-9+\/][a-zA-Z0-9+\/ \t\n=]*)([^a-zA-Z0-9+\/ \t\n=].*)?$/; + +function read(buf, options) { + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + + var trimmed = buf.trim().replace(/[\\\r]/g, ''); + var m = trimmed.match(SSHKEY_RE); + if (!m) + m = trimmed.match(SSHKEY_RE2); + assert.ok(m, 'key must match regex'); + + var type = rfc4253.algToKeyType(m[1]); + var kbuf = Buffer.from(m[2], 'base64'); + + /* + * This is a bit tricky. If we managed to parse the key and locate the + * key comment with the regex, then do a non-partial read and assert + * that we have consumed all bytes. If we couldn't locate the key + * comment, though, there may be whitespace shenanigans going on that + * have conjoined the comment to the rest of the key. We do a partial + * read in this case to try to make the best out of a sorry situation. + */ + var key; + var ret = {}; + if (m[4]) { + try { + key = rfc4253.read(kbuf); + + } catch (e) { + m = trimmed.match(SSHKEY_RE2); + assert.ok(m, 'key must match regex'); + kbuf = Buffer.from(m[2], 'base64'); + key = rfc4253.readInternal(ret, 'public', kbuf); + } + } else { + key = rfc4253.readInternal(ret, 'public', kbuf); + } + + assert.strictEqual(type, key.type); + + if (m[4] && m[4].length > 0) { + key.comment = m[4]; + + } else if (ret.consumed) { + /* + * Now the magic: trying to recover the key comment when it's + * gotten conjoined to the key or otherwise shenanigan'd. + * + * Work out how much base64 we used, then drop all non-base64 + * chars from the beginning up to this point in the the string. + * Then offset in this and try to make up for missing = chars. + */ + var data = m[2] + (m[3] ? m[3] : ''); + var realOffset = Math.ceil(ret.consumed / 3) * 4; + data = data.slice(0, realOffset - 2). /*JSSTYLED*/ + replace(/[^a-zA-Z0-9+\/=]/g, '') + + data.slice(realOffset - 2); + + var padding = ret.consumed % 3; + if (padding > 0 && + data.slice(realOffset - 1, realOffset) !== '=') + realOffset--; + while (data.slice(realOffset, realOffset + 1) === '=') + realOffset++; + + /* Finally, grab what we think is the comment & clean it up. */ + var trailer = data.slice(realOffset); + trailer = trailer.replace(/[\r\n]/g, ' '). + replace(/^\s+/, ''); + if (trailer.match(/^[a-zA-Z0-9]/)) + key.comment = trailer; + } + + return (key); +} + +function write(key, options) { + assert.object(key); + if (!Key.isKey(key)) + throw (new Error('Must be a public key')); + + var parts = []; + var alg = rfc4253.keyTypeToAlg(key); + parts.push(alg); + + var buf = rfc4253.write(key); + parts.push(buf.toString('base64')); + + if (key.comment) + parts.push(key.comment); + + return (Buffer.from(parts.join(' '))); +} diff --git a/node_modules/sshpk/lib/formats/x509-pem.js b/node_modules/sshpk/lib/formats/x509-pem.js new file mode 100644 index 000000000..3155ef0b3 --- /dev/null +++ b/node_modules/sshpk/lib/formats/x509-pem.js @@ -0,0 +1,88 @@ +// Copyright 2016 Joyent, Inc. + +var x509 = require('./x509'); + +module.exports = { + read: read, + verify: x509.verify, + sign: x509.sign, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); +var Identity = require('../identity'); +var Signature = require('../signature'); +var Certificate = require('../certificate'); + +function read(buf, options) { + if (typeof (buf) !== 'string') { + assert.buffer(buf, 'buf'); + buf = buf.toString('ascii'); + } + + var lines = buf.trim().split(/[\r\n]+/g); + + var m; + var si = -1; + while (!m && si < lines.length) { + m = lines[++si].match(/*JSSTYLED*/ + /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/); + } + assert.ok(m, 'invalid PEM header'); + + var m2; + var ei = lines.length; + while (!m2 && ei > 0) { + m2 = lines[--ei].match(/*JSSTYLED*/ + /[-]+[ ]*END CERTIFICATE[ ]*[-]+/); + } + assert.ok(m2, 'invalid PEM footer'); + + lines = lines.slice(si, ei + 1); + + var headers = {}; + while (true) { + lines = lines.slice(1); + m = lines[0].match(/*JSSTYLED*/ + /^([A-Za-z0-9-]+): (.+)$/); + if (!m) + break; + headers[m[1].toLowerCase()] = m[2]; + } + + /* Chop off the first and last lines */ + lines = lines.slice(0, -1).join(''); + buf = Buffer.from(lines, 'base64'); + + return (x509.read(buf, options)); +} + +function write(cert, options) { + var dbuf = x509.write(cert, options); + + var header = 'CERTIFICATE'; + var tmp = dbuf.toString('base64'); + var len = tmp.length + (tmp.length / 64) + + 18 + 16 + header.length*2 + 10; + var buf = Buffer.alloc(len); + var o = 0; + o += buf.write('-----BEGIN ' + header + '-----\n', o); + for (var i = 0; i < tmp.length; ) { + var limit = i + 64; + if (limit > tmp.length) + limit = tmp.length; + o += buf.write(tmp.slice(i, limit), o); + buf[o++] = 10; + i = limit; + } + o += buf.write('-----END ' + header + '-----\n', o); + + return (buf.slice(0, o)); +} diff --git a/node_modules/sshpk/lib/formats/x509.js b/node_modules/sshpk/lib/formats/x509.js new file mode 100644 index 000000000..0144c4449 --- /dev/null +++ b/node_modules/sshpk/lib/formats/x509.js @@ -0,0 +1,752 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = { + read: read, + verify: verify, + sign: sign, + signAsync: signAsync, + write: write +}; + +var assert = require('assert-plus'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('../algs'); +var utils = require('../utils'); +var Key = require('../key'); +var PrivateKey = require('../private-key'); +var pem = require('./pem'); +var Identity = require('../identity'); +var Signature = require('../signature'); +var Certificate = require('../certificate'); +var pkcs8 = require('./pkcs8'); + +/* + * This file is based on RFC5280 (X.509). + */ + +/* Helper to read in a single mpint */ +function readMPInt(der, nm) { + assert.strictEqual(der.peek(), asn1.Ber.Integer, + nm + ' is not an Integer'); + return (utils.mpNormalize(der.readString(asn1.Ber.Integer, true))); +} + +function verify(cert, key) { + var sig = cert.signatures.x509; + assert.object(sig, 'x509 signature'); + + var algParts = sig.algo.split('-'); + if (algParts[0] !== key.type) + return (false); + + var blob = sig.cache; + if (blob === undefined) { + var der = new asn1.BerWriter(); + writeTBSCert(cert, der); + blob = der.buffer; + } + + var verifier = key.createVerify(algParts[1]); + verifier.write(blob); + return (verifier.verify(sig.signature)); +} + +function Local(i) { + return (asn1.Ber.Context | asn1.Ber.Constructor | i); +} + +function Context(i) { + return (asn1.Ber.Context | i); +} + +var SIGN_ALGS = { + 'rsa-md5': '1.2.840.113549.1.1.4', + 'rsa-sha1': '1.2.840.113549.1.1.5', + 'rsa-sha256': '1.2.840.113549.1.1.11', + 'rsa-sha384': '1.2.840.113549.1.1.12', + 'rsa-sha512': '1.2.840.113549.1.1.13', + 'dsa-sha1': '1.2.840.10040.4.3', + 'dsa-sha256': '2.16.840.1.101.3.4.3.2', + 'ecdsa-sha1': '1.2.840.10045.4.1', + 'ecdsa-sha256': '1.2.840.10045.4.3.2', + 'ecdsa-sha384': '1.2.840.10045.4.3.3', + 'ecdsa-sha512': '1.2.840.10045.4.3.4', + 'ed25519-sha512': '1.3.101.112' +}; +Object.keys(SIGN_ALGS).forEach(function (k) { + SIGN_ALGS[SIGN_ALGS[k]] = k; +}); +SIGN_ALGS['1.3.14.3.2.3'] = 'rsa-md5'; +SIGN_ALGS['1.3.14.3.2.29'] = 'rsa-sha1'; + +var EXTS = { + 'issuerKeyId': '2.5.29.35', + 'altName': '2.5.29.17', + 'basicConstraints': '2.5.29.19', + 'keyUsage': '2.5.29.15', + 'extKeyUsage': '2.5.29.37' +}; + +function read(buf, options) { + if (typeof (buf) === 'string') { + buf = Buffer.from(buf, 'binary'); + } + assert.buffer(buf, 'buf'); + + var der = new asn1.BerReader(buf); + + der.readSequence(); + if (Math.abs(der.length - der.remain) > 1) { + throw (new Error('DER sequence does not contain whole byte ' + + 'stream')); + } + + var tbsStart = der.offset; + der.readSequence(); + var sigOffset = der.offset + der.length; + var tbsEnd = sigOffset; + + if (der.peek() === Local(0)) { + der.readSequence(Local(0)); + var version = der.readInt(); + assert.ok(version <= 3, + 'only x.509 versions up to v3 supported'); + } + + var cert = {}; + cert.signatures = {}; + var sig = (cert.signatures.x509 = {}); + sig.extras = {}; + + cert.serial = readMPInt(der, 'serial'); + + der.readSequence(); + var after = der.offset + der.length; + var certAlgOid = der.readOID(); + var certAlg = SIGN_ALGS[certAlgOid]; + if (certAlg === undefined) + throw (new Error('unknown signature algorithm ' + certAlgOid)); + + der._offset = after; + cert.issuer = Identity.parseAsn1(der); + + der.readSequence(); + cert.validFrom = readDate(der); + cert.validUntil = readDate(der); + + cert.subjects = [Identity.parseAsn1(der)]; + + der.readSequence(); + after = der.offset + der.length; + cert.subjectKey = pkcs8.readPkcs8(undefined, 'public', der); + der._offset = after; + + /* issuerUniqueID */ + if (der.peek() === Local(1)) { + der.readSequence(Local(1)); + sig.extras.issuerUniqueID = + buf.slice(der.offset, der.offset + der.length); + der._offset += der.length; + } + + /* subjectUniqueID */ + if (der.peek() === Local(2)) { + der.readSequence(Local(2)); + sig.extras.subjectUniqueID = + buf.slice(der.offset, der.offset + der.length); + der._offset += der.length; + } + + /* extensions */ + if (der.peek() === Local(3)) { + der.readSequence(Local(3)); + var extEnd = der.offset + der.length; + der.readSequence(); + + while (der.offset < extEnd) + readExtension(cert, buf, der); + + assert.strictEqual(der.offset, extEnd); + } + + assert.strictEqual(der.offset, sigOffset); + + der.readSequence(); + after = der.offset + der.length; + var sigAlgOid = der.readOID(); + var sigAlg = SIGN_ALGS[sigAlgOid]; + if (sigAlg === undefined) + throw (new Error('unknown signature algorithm ' + sigAlgOid)); + der._offset = after; + + var sigData = der.readString(asn1.Ber.BitString, true); + if (sigData[0] === 0) + sigData = sigData.slice(1); + var algParts = sigAlg.split('-'); + + sig.signature = Signature.parse(sigData, algParts[0], 'asn1'); + sig.signature.hashAlgorithm = algParts[1]; + sig.algo = sigAlg; + sig.cache = buf.slice(tbsStart, tbsEnd); + + return (new Certificate(cert)); +} + +function readDate(der) { + if (der.peek() === asn1.Ber.UTCTime) { + return (utcTimeToDate(der.readString(asn1.Ber.UTCTime))); + } else if (der.peek() === asn1.Ber.GeneralizedTime) { + return (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime))); + } else { + throw (new Error('Unsupported date format')); + } +} + +function writeDate(der, date) { + if (date.getUTCFullYear() >= 2050 || date.getUTCFullYear() < 1950) { + der.writeString(dateToGTime(date), asn1.Ber.GeneralizedTime); + } else { + der.writeString(dateToUTCTime(date), asn1.Ber.UTCTime); + } +} + +/* RFC5280, section 4.2.1.6 (GeneralName type) */ +var ALTNAME = { + OtherName: Local(0), + RFC822Name: Context(1), + DNSName: Context(2), + X400Address: Local(3), + DirectoryName: Local(4), + EDIPartyName: Local(5), + URI: Context(6), + IPAddress: Context(7), + OID: Context(8) +}; + +/* RFC5280, section 4.2.1.12 (KeyPurposeId) */ +var EXTPURPOSE = { + 'serverAuth': '1.3.6.1.5.5.7.3.1', + 'clientAuth': '1.3.6.1.5.5.7.3.2', + 'codeSigning': '1.3.6.1.5.5.7.3.3', + + /* See https://github.com/joyent/oid-docs/blob/master/root.md */ + 'joyentDocker': '1.3.6.1.4.1.38678.1.4.1', + 'joyentCmon': '1.3.6.1.4.1.38678.1.4.2' +}; +var EXTPURPOSE_REV = {}; +Object.keys(EXTPURPOSE).forEach(function (k) { + EXTPURPOSE_REV[EXTPURPOSE[k]] = k; +}); + +var KEYUSEBITS = [ + 'signature', 'identity', 'keyEncryption', + 'encryption', 'keyAgreement', 'ca', 'crl' +]; + +function readExtension(cert, buf, der) { + der.readSequence(); + var after = der.offset + der.length; + var extId = der.readOID(); + var id; + var sig = cert.signatures.x509; + if (!sig.extras.exts) + sig.extras.exts = []; + + var critical; + if (der.peek() === asn1.Ber.Boolean) + critical = der.readBoolean(); + + switch (extId) { + case (EXTS.basicConstraints): + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + var bcEnd = der.offset + der.length; + var ca = false; + if (der.peek() === asn1.Ber.Boolean) + ca = der.readBoolean(); + if (cert.purposes === undefined) + cert.purposes = []; + if (ca === true) + cert.purposes.push('ca'); + var bc = { oid: extId, critical: critical }; + if (der.offset < bcEnd && der.peek() === asn1.Ber.Integer) + bc.pathLen = der.readInt(); + sig.extras.exts.push(bc); + break; + case (EXTS.extKeyUsage): + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + if (cert.purposes === undefined) + cert.purposes = []; + var ekEnd = der.offset + der.length; + while (der.offset < ekEnd) { + var oid = der.readOID(); + cert.purposes.push(EXTPURPOSE_REV[oid] || oid); + } + /* + * This is a bit of a hack: in the case where we have a cert + * that's only allowed to do serverAuth or clientAuth (and not + * the other), we want to make sure all our Subjects are of + * the right type. But we already parsed our Subjects and + * decided if they were hosts or users earlier (since it appears + * first in the cert). + * + * So we go through and mutate them into the right kind here if + * it doesn't match. This might not be hugely beneficial, as it + * seems that single-purpose certs are not often seen in the + * wild. + */ + if (cert.purposes.indexOf('serverAuth') !== -1 && + cert.purposes.indexOf('clientAuth') === -1) { + cert.subjects.forEach(function (ide) { + if (ide.type !== 'host') { + ide.type = 'host'; + ide.hostname = ide.uid || + ide.email || + ide.components[0].value; + } + }); + } else if (cert.purposes.indexOf('clientAuth') !== -1 && + cert.purposes.indexOf('serverAuth') === -1) { + cert.subjects.forEach(function (ide) { + if (ide.type !== 'user') { + ide.type = 'user'; + ide.uid = ide.hostname || + ide.email || + ide.components[0].value; + } + }); + } + sig.extras.exts.push({ oid: extId, critical: critical }); + break; + case (EXTS.keyUsage): + der.readSequence(asn1.Ber.OctetString); + var bits = der.readString(asn1.Ber.BitString, true); + var setBits = readBitField(bits, KEYUSEBITS); + setBits.forEach(function (bit) { + if (cert.purposes === undefined) + cert.purposes = []; + if (cert.purposes.indexOf(bit) === -1) + cert.purposes.push(bit); + }); + sig.extras.exts.push({ oid: extId, critical: critical, + bits: bits }); + break; + case (EXTS.altName): + der.readSequence(asn1.Ber.OctetString); + der.readSequence(); + var aeEnd = der.offset + der.length; + while (der.offset < aeEnd) { + switch (der.peek()) { + case ALTNAME.OtherName: + case ALTNAME.EDIPartyName: + der.readSequence(); + der._offset += der.length; + break; + case ALTNAME.OID: + der.readOID(ALTNAME.OID); + break; + case ALTNAME.RFC822Name: + /* RFC822 specifies email addresses */ + var email = der.readString(ALTNAME.RFC822Name); + id = Identity.forEmail(email); + if (!cert.subjects[0].equals(id)) + cert.subjects.push(id); + break; + case ALTNAME.DirectoryName: + der.readSequence(ALTNAME.DirectoryName); + id = Identity.parseAsn1(der); + if (!cert.subjects[0].equals(id)) + cert.subjects.push(id); + break; + case ALTNAME.DNSName: + var host = der.readString( + ALTNAME.DNSName); + id = Identity.forHost(host); + if (!cert.subjects[0].equals(id)) + cert.subjects.push(id); + break; + default: + der.readString(der.peek()); + break; + } + } + sig.extras.exts.push({ oid: extId, critical: critical }); + break; + default: + sig.extras.exts.push({ + oid: extId, + critical: critical, + data: der.readString(asn1.Ber.OctetString, true) + }); + break; + } + + der._offset = after; +} + +var UTCTIME_RE = + /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/; +function utcTimeToDate(t) { + var m = t.match(UTCTIME_RE); + assert.ok(m, 'timestamps must be in UTC'); + var d = new Date(); + + var thisYear = d.getUTCFullYear(); + var century = Math.floor(thisYear / 100) * 100; + + var year = parseInt(m[1], 10); + if (thisYear % 100 < 50 && year >= 60) + year += (century - 1); + else + year += century; + d.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10)); + d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10)); + if (m[6] && m[6].length > 0) + d.setUTCSeconds(parseInt(m[6], 10)); + return (d); +} + +var GTIME_RE = + /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/; +function gTimeToDate(t) { + var m = t.match(GTIME_RE); + assert.ok(m); + var d = new Date(); + + d.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1, + parseInt(m[3], 10)); + d.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10)); + if (m[6] && m[6].length > 0) + d.setUTCSeconds(parseInt(m[6], 10)); + return (d); +} + +function zeroPad(n, m) { + if (m === undefined) + m = 2; + var s = '' + n; + while (s.length < m) + s = '0' + s; + return (s); +} + +function dateToUTCTime(d) { + var s = ''; + s += zeroPad(d.getUTCFullYear() % 100); + s += zeroPad(d.getUTCMonth() + 1); + s += zeroPad(d.getUTCDate()); + s += zeroPad(d.getUTCHours()); + s += zeroPad(d.getUTCMinutes()); + s += zeroPad(d.getUTCSeconds()); + s += 'Z'; + return (s); +} + +function dateToGTime(d) { + var s = ''; + s += zeroPad(d.getUTCFullYear(), 4); + s += zeroPad(d.getUTCMonth() + 1); + s += zeroPad(d.getUTCDate()); + s += zeroPad(d.getUTCHours()); + s += zeroPad(d.getUTCMinutes()); + s += zeroPad(d.getUTCSeconds()); + s += 'Z'; + return (s); +} + +function sign(cert, key) { + if (cert.signatures.x509 === undefined) + cert.signatures.x509 = {}; + var sig = cert.signatures.x509; + + sig.algo = key.type + '-' + key.defaultHashAlgorithm(); + if (SIGN_ALGS[sig.algo] === undefined) + return (false); + + var der = new asn1.BerWriter(); + writeTBSCert(cert, der); + var blob = der.buffer; + sig.cache = blob; + + var signer = key.createSign(); + signer.write(blob); + cert.signatures.x509.signature = signer.sign(); + + return (true); +} + +function signAsync(cert, signer, done) { + if (cert.signatures.x509 === undefined) + cert.signatures.x509 = {}; + var sig = cert.signatures.x509; + + var der = new asn1.BerWriter(); + writeTBSCert(cert, der); + var blob = der.buffer; + sig.cache = blob; + + signer(blob, function (err, signature) { + if (err) { + done(err); + return; + } + sig.algo = signature.type + '-' + signature.hashAlgorithm; + if (SIGN_ALGS[sig.algo] === undefined) { + done(new Error('Invalid signing algorithm "' + + sig.algo + '"')); + return; + } + sig.signature = signature; + done(); + }); +} + +function write(cert, options) { + var sig = cert.signatures.x509; + assert.object(sig, 'x509 signature'); + + var der = new asn1.BerWriter(); + der.startSequence(); + if (sig.cache) { + der._ensure(sig.cache.length); + sig.cache.copy(der._buf, der._offset); + der._offset += sig.cache.length; + } else { + writeTBSCert(cert, der); + } + + der.startSequence(); + der.writeOID(SIGN_ALGS[sig.algo]); + if (sig.algo.match(/^rsa-/)) + der.writeNull(); + der.endSequence(); + + var sigData = sig.signature.toBuffer('asn1'); + var data = Buffer.alloc(sigData.length + 1); + data[0] = 0; + sigData.copy(data, 1); + der.writeBuffer(data, asn1.Ber.BitString); + der.endSequence(); + + return (der.buffer); +} + +function writeTBSCert(cert, der) { + var sig = cert.signatures.x509; + assert.object(sig, 'x509 signature'); + + der.startSequence(); + + der.startSequence(Local(0)); + der.writeInt(2); + der.endSequence(); + + der.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer); + + der.startSequence(); + der.writeOID(SIGN_ALGS[sig.algo]); + if (sig.algo.match(/^rsa-/)) + der.writeNull(); + der.endSequence(); + + cert.issuer.toAsn1(der); + + der.startSequence(); + writeDate(der, cert.validFrom); + writeDate(der, cert.validUntil); + der.endSequence(); + + var subject = cert.subjects[0]; + var altNames = cert.subjects.slice(1); + subject.toAsn1(der); + + pkcs8.writePkcs8(der, cert.subjectKey); + + if (sig.extras && sig.extras.issuerUniqueID) { + der.writeBuffer(sig.extras.issuerUniqueID, Local(1)); + } + + if (sig.extras && sig.extras.subjectUniqueID) { + der.writeBuffer(sig.extras.subjectUniqueID, Local(2)); + } + + if (altNames.length > 0 || subject.type === 'host' || + (cert.purposes !== undefined && cert.purposes.length > 0) || + (sig.extras && sig.extras.exts)) { + der.startSequence(Local(3)); + der.startSequence(); + + var exts = []; + if (cert.purposes !== undefined && cert.purposes.length > 0) { + exts.push({ + oid: EXTS.basicConstraints, + critical: true + }); + exts.push({ + oid: EXTS.keyUsage, + critical: true + }); + exts.push({ + oid: EXTS.extKeyUsage, + critical: true + }); + } + exts.push({ oid: EXTS.altName }); + if (sig.extras && sig.extras.exts) + exts = sig.extras.exts; + + for (var i = 0; i < exts.length; ++i) { + der.startSequence(); + der.writeOID(exts[i].oid); + + if (exts[i].critical !== undefined) + der.writeBoolean(exts[i].critical); + + if (exts[i].oid === EXTS.altName) { + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + if (subject.type === 'host') { + der.writeString(subject.hostname, + Context(2)); + } + for (var j = 0; j < altNames.length; ++j) { + if (altNames[j].type === 'host') { + der.writeString( + altNames[j].hostname, + ALTNAME.DNSName); + } else if (altNames[j].type === + 'email') { + der.writeString( + altNames[j].email, + ALTNAME.RFC822Name); + } else { + /* + * Encode anything else as a + * DN style name for now. + */ + der.startSequence( + ALTNAME.DirectoryName); + altNames[j].toAsn1(der); + der.endSequence(); + } + } + der.endSequence(); + der.endSequence(); + } else if (exts[i].oid === EXTS.basicConstraints) { + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + var ca = (cert.purposes.indexOf('ca') !== -1); + var pathLen = exts[i].pathLen; + der.writeBoolean(ca); + if (pathLen !== undefined) + der.writeInt(pathLen); + der.endSequence(); + der.endSequence(); + } else if (exts[i].oid === EXTS.extKeyUsage) { + der.startSequence(asn1.Ber.OctetString); + der.startSequence(); + cert.purposes.forEach(function (purpose) { + if (purpose === 'ca') + return; + if (KEYUSEBITS.indexOf(purpose) !== -1) + return; + var oid = purpose; + if (EXTPURPOSE[purpose] !== undefined) + oid = EXTPURPOSE[purpose]; + der.writeOID(oid); + }); + der.endSequence(); + der.endSequence(); + } else if (exts[i].oid === EXTS.keyUsage) { + der.startSequence(asn1.Ber.OctetString); + /* + * If we parsed this certificate from a byte + * stream (i.e. we didn't generate it in sshpk) + * then we'll have a ".bits" property on the + * ext with the original raw byte contents. + * + * If we have this, use it here instead of + * regenerating it. This guarantees we output + * the same data we parsed, so signatures still + * validate. + */ + if (exts[i].bits !== undefined) { + der.writeBuffer(exts[i].bits, + asn1.Ber.BitString); + } else { + var bits = writeBitField(cert.purposes, + KEYUSEBITS); + der.writeBuffer(bits, + asn1.Ber.BitString); + } + der.endSequence(); + } else { + der.writeBuffer(exts[i].data, + asn1.Ber.OctetString); + } + + der.endSequence(); + } + + der.endSequence(); + der.endSequence(); + } + + der.endSequence(); +} + +/* + * Reads an ASN.1 BER bitfield out of the Buffer produced by doing + * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw + * contents of the BitString tag, which is a count of unused bits followed by + * the bits as a right-padded byte string. + * + * `bits` is the Buffer, `bitIndex` should contain an array of string names + * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec. + * + * Returns an array of Strings, the names of the bits that were set to 1. + */ +function readBitField(bits, bitIndex) { + var bitLen = 8 * (bits.length - 1) - bits[0]; + var setBits = {}; + for (var i = 0; i < bitLen; ++i) { + var byteN = 1 + Math.floor(i / 8); + var bit = 7 - (i % 8); + var mask = 1 << bit; + var bitVal = ((bits[byteN] & mask) !== 0); + var name = bitIndex[i]; + if (bitVal && typeof (name) === 'string') { + setBits[name] = true; + } + } + return (Object.keys(setBits)); +} + +/* + * `setBits` is an array of strings, containing the names for each bit that + * sould be set to 1. `bitIndex` is same as in `readBitField()`. + * + * Returns a Buffer, ready to be written out with `BerWriter#writeString()`. + */ +function writeBitField(setBits, bitIndex) { + var bitLen = bitIndex.length; + var blen = Math.ceil(bitLen / 8); + var unused = blen * 8 - bitLen; + var bits = Buffer.alloc(1 + blen); // zero-filled + bits[0] = unused; + for (var i = 0; i < bitLen; ++i) { + var byteN = 1 + Math.floor(i / 8); + var bit = 7 - (i % 8); + var mask = 1 << bit; + var name = bitIndex[i]; + if (name === undefined) + continue; + var bitVal = (setBits.indexOf(name) !== -1); + if (bitVal) { + bits[byteN] |= mask; + } + } + return (bits); +} diff --git a/node_modules/sshpk/lib/identity.js b/node_modules/sshpk/lib/identity.js new file mode 100644 index 000000000..7d75b6671 --- /dev/null +++ b/node_modules/sshpk/lib/identity.js @@ -0,0 +1,373 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = Identity; + +var assert = require('assert-plus'); +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var errs = require('./errors'); +var util = require('util'); +var utils = require('./utils'); +var asn1 = require('asn1'); +var Buffer = require('safer-buffer').Buffer; + +/*JSSTYLED*/ +var DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\-]{0,62})(?:\.([*]|[a-z0-9][a-z0-9\-]{0,62}))*$/i; + +var oids = {}; +oids.cn = '2.5.4.3'; +oids.o = '2.5.4.10'; +oids.ou = '2.5.4.11'; +oids.l = '2.5.4.7'; +oids.s = '2.5.4.8'; +oids.c = '2.5.4.6'; +oids.sn = '2.5.4.4'; +oids.postalCode = '2.5.4.17'; +oids.serialNumber = '2.5.4.5'; +oids.street = '2.5.4.9'; +oids.x500UniqueIdentifier = '2.5.4.45'; +oids.role = '2.5.4.72'; +oids.telephoneNumber = '2.5.4.20'; +oids.description = '2.5.4.13'; +oids.dc = '0.9.2342.19200300.100.1.25'; +oids.uid = '0.9.2342.19200300.100.1.1'; +oids.mail = '0.9.2342.19200300.100.1.3'; +oids.title = '2.5.4.12'; +oids.gn = '2.5.4.42'; +oids.initials = '2.5.4.43'; +oids.pseudonym = '2.5.4.65'; +oids.emailAddress = '1.2.840.113549.1.9.1'; + +var unoids = {}; +Object.keys(oids).forEach(function (k) { + unoids[oids[k]] = k; +}); + +function Identity(opts) { + var self = this; + assert.object(opts, 'options'); + assert.arrayOfObject(opts.components, 'options.components'); + this.components = opts.components; + this.componentLookup = {}; + this.components.forEach(function (c) { + if (c.name && !c.oid) + c.oid = oids[c.name]; + if (c.oid && !c.name) + c.name = unoids[c.oid]; + if (self.componentLookup[c.name] === undefined) + self.componentLookup[c.name] = []; + self.componentLookup[c.name].push(c); + }); + if (this.componentLookup.cn && this.componentLookup.cn.length > 0) { + this.cn = this.componentLookup.cn[0].value; + } + assert.optionalString(opts.type, 'options.type'); + if (opts.type === undefined) { + if (this.components.length === 1 && + this.componentLookup.cn && + this.componentLookup.cn.length === 1 && + this.componentLookup.cn[0].value.match(DNS_NAME_RE)) { + this.type = 'host'; + this.hostname = this.componentLookup.cn[0].value; + + } else if (this.componentLookup.dc && + this.components.length === this.componentLookup.dc.length) { + this.type = 'host'; + this.hostname = this.componentLookup.dc.map( + function (c) { + return (c.value); + }).join('.'); + + } else if (this.componentLookup.uid && + this.components.length === + this.componentLookup.uid.length) { + this.type = 'user'; + this.uid = this.componentLookup.uid[0].value; + + } else if (this.componentLookup.cn && + this.componentLookup.cn.length === 1 && + this.componentLookup.cn[0].value.match(DNS_NAME_RE)) { + this.type = 'host'; + this.hostname = this.componentLookup.cn[0].value; + + } else if (this.componentLookup.uid && + this.componentLookup.uid.length === 1) { + this.type = 'user'; + this.uid = this.componentLookup.uid[0].value; + + } else if (this.componentLookup.mail && + this.componentLookup.mail.length === 1) { + this.type = 'email'; + this.email = this.componentLookup.mail[0].value; + + } else if (this.componentLookup.cn && + this.componentLookup.cn.length === 1) { + this.type = 'user'; + this.uid = this.componentLookup.cn[0].value; + + } else { + this.type = 'unknown'; + } + } else { + this.type = opts.type; + if (this.type === 'host') + this.hostname = opts.hostname; + else if (this.type === 'user') + this.uid = opts.uid; + else if (this.type === 'email') + this.email = opts.email; + else + throw (new Error('Unknown type ' + this.type)); + } +} + +Identity.prototype.toString = function () { + return (this.components.map(function (c) { + var n = c.name.toUpperCase(); + /*JSSTYLED*/ + n = n.replace(/=/g, '\\='); + var v = c.value; + /*JSSTYLED*/ + v = v.replace(/,/g, '\\,'); + return (n + '=' + v); + }).join(', ')); +}; + +Identity.prototype.get = function (name, asArray) { + assert.string(name, 'name'); + var arr = this.componentLookup[name]; + if (arr === undefined || arr.length === 0) + return (undefined); + if (!asArray && arr.length > 1) + throw (new Error('Multiple values for attribute ' + name)); + if (!asArray) + return (arr[0].value); + return (arr.map(function (c) { + return (c.value); + })); +}; + +Identity.prototype.toArray = function (idx) { + return (this.components.map(function (c) { + return ({ + name: c.name, + value: c.value + }); + })); +}; + +/* + * These are from X.680 -- PrintableString allowed chars are in section 37.4 + * table 8. Spec for IA5Strings is "1,6 + SPACE + DEL" where 1 refers to + * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006 + * (the basic ASCII character set). + */ +/* JSSTYLED */ +var NOT_PRINTABLE = /[^a-zA-Z0-9 '(),+.\/:=?-]/; +/* JSSTYLED */ +var NOT_IA5 = /[^\x00-\x7f]/; + +Identity.prototype.toAsn1 = function (der, tag) { + der.startSequence(tag); + this.components.forEach(function (c) { + der.startSequence(asn1.Ber.Constructor | asn1.Ber.Set); + der.startSequence(); + der.writeOID(c.oid); + /* + * If we fit in a PrintableString, use that. Otherwise use an + * IA5String or UTF8String. + * + * If this identity was parsed from a DN, use the ASN.1 types + * from the original representation (otherwise this might not + * be a full match for the original in some validators). + */ + if (c.asn1type === asn1.Ber.Utf8String || + c.value.match(NOT_IA5)) { + var v = Buffer.from(c.value, 'utf8'); + der.writeBuffer(v, asn1.Ber.Utf8String); + + } else if (c.asn1type === asn1.Ber.IA5String || + c.value.match(NOT_PRINTABLE)) { + der.writeString(c.value, asn1.Ber.IA5String); + + } else { + var type = asn1.Ber.PrintableString; + if (c.asn1type !== undefined) + type = c.asn1type; + der.writeString(c.value, type); + } + der.endSequence(); + der.endSequence(); + }); + der.endSequence(); +}; + +function globMatch(a, b) { + if (a === '**' || b === '**') + return (true); + var aParts = a.split('.'); + var bParts = b.split('.'); + if (aParts.length !== bParts.length) + return (false); + for (var i = 0; i < aParts.length; ++i) { + if (aParts[i] === '*' || bParts[i] === '*') + continue; + if (aParts[i] !== bParts[i]) + return (false); + } + return (true); +} + +Identity.prototype.equals = function (other) { + if (!Identity.isIdentity(other, [1, 0])) + return (false); + if (other.components.length !== this.components.length) + return (false); + for (var i = 0; i < this.components.length; ++i) { + if (this.components[i].oid !== other.components[i].oid) + return (false); + if (!globMatch(this.components[i].value, + other.components[i].value)) { + return (false); + } + } + return (true); +}; + +Identity.forHost = function (hostname) { + assert.string(hostname, 'hostname'); + return (new Identity({ + type: 'host', + hostname: hostname, + components: [ { name: 'cn', value: hostname } ] + })); +}; + +Identity.forUser = function (uid) { + assert.string(uid, 'uid'); + return (new Identity({ + type: 'user', + uid: uid, + components: [ { name: 'uid', value: uid } ] + })); +}; + +Identity.forEmail = function (email) { + assert.string(email, 'email'); + return (new Identity({ + type: 'email', + email: email, + components: [ { name: 'mail', value: email } ] + })); +}; + +Identity.parseDN = function (dn) { + assert.string(dn, 'dn'); + var parts = ['']; + var idx = 0; + var rem = dn; + while (rem.length > 0) { + var m; + /*JSSTYLED*/ + if ((m = /^,/.exec(rem)) !== null) { + parts[++idx] = ''; + rem = rem.slice(m[0].length); + /*JSSTYLED*/ + } else if ((m = /^\\,/.exec(rem)) !== null) { + parts[idx] += ','; + rem = rem.slice(m[0].length); + /*JSSTYLED*/ + } else if ((m = /^\\./.exec(rem)) !== null) { + parts[idx] += m[0]; + rem = rem.slice(m[0].length); + /*JSSTYLED*/ + } else if ((m = /^[^\\,]+/.exec(rem)) !== null) { + parts[idx] += m[0]; + rem = rem.slice(m[0].length); + } else { + throw (new Error('Failed to parse DN')); + } + } + var cmps = parts.map(function (c) { + c = c.trim(); + var eqPos = c.indexOf('='); + while (eqPos > 0 && c.charAt(eqPos - 1) === '\\') + eqPos = c.indexOf('=', eqPos + 1); + if (eqPos === -1) { + throw (new Error('Failed to parse DN')); + } + /*JSSTYLED*/ + var name = c.slice(0, eqPos).toLowerCase().replace(/\\=/g, '='); + var value = c.slice(eqPos + 1); + return ({ name: name, value: value }); + }); + return (new Identity({ components: cmps })); +}; + +Identity.fromArray = function (components) { + assert.arrayOfObject(components, 'components'); + components.forEach(function (cmp) { + assert.object(cmp, 'component'); + assert.string(cmp.name, 'component.name'); + if (!Buffer.isBuffer(cmp.value) && + !(typeof (cmp.value) === 'string')) { + throw (new Error('Invalid component value')); + } + }); + return (new Identity({ components: components })); +}; + +Identity.parseAsn1 = function (der, top) { + var components = []; + der.readSequence(top); + var end = der.offset + der.length; + while (der.offset < end) { + der.readSequence(asn1.Ber.Constructor | asn1.Ber.Set); + var after = der.offset + der.length; + der.readSequence(); + var oid = der.readOID(); + var type = der.peek(); + var value; + switch (type) { + case asn1.Ber.PrintableString: + case asn1.Ber.IA5String: + case asn1.Ber.OctetString: + case asn1.Ber.T61String: + value = der.readString(type); + break; + case asn1.Ber.Utf8String: + value = der.readString(type, true); + value = value.toString('utf8'); + break; + case asn1.Ber.CharacterString: + case asn1.Ber.BMPString: + value = der.readString(type, true); + value = value.toString('utf16le'); + break; + default: + throw (new Error('Unknown asn1 type ' + type)); + } + components.push({ oid: oid, asn1type: type, value: value }); + der._offset = after; + } + der._offset = end; + return (new Identity({ + components: components + })); +}; + +Identity.isIdentity = function (obj, ver) { + return (utils.isCompatible(obj, Identity, ver)); +}; + +/* + * API versions for Identity: + * [1,0] -- initial ver + */ +Identity.prototype._sshpkApiVersion = [1, 0]; + +Identity._oldVersionDetect = function (obj) { + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/index.js b/node_modules/sshpk/lib/index.js new file mode 100644 index 000000000..f76db7918 --- /dev/null +++ b/node_modules/sshpk/lib/index.js @@ -0,0 +1,40 @@ +// Copyright 2015 Joyent, Inc. + +var Key = require('./key'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var PrivateKey = require('./private-key'); +var Certificate = require('./certificate'); +var Identity = require('./identity'); +var errs = require('./errors'); + +module.exports = { + /* top-level classes */ + Key: Key, + parseKey: Key.parse, + Fingerprint: Fingerprint, + parseFingerprint: Fingerprint.parse, + Signature: Signature, + parseSignature: Signature.parse, + PrivateKey: PrivateKey, + parsePrivateKey: PrivateKey.parse, + generatePrivateKey: PrivateKey.generate, + Certificate: Certificate, + parseCertificate: Certificate.parse, + createSelfSignedCertificate: Certificate.createSelfSigned, + createCertificate: Certificate.create, + Identity: Identity, + identityFromDN: Identity.parseDN, + identityForHost: Identity.forHost, + identityForUser: Identity.forUser, + identityForEmail: Identity.forEmail, + identityFromArray: Identity.fromArray, + + /* errors */ + FingerprintFormatError: errs.FingerprintFormatError, + InvalidAlgorithmError: errs.InvalidAlgorithmError, + KeyParseError: errs.KeyParseError, + SignatureParseError: errs.SignatureParseError, + KeyEncryptedError: errs.KeyEncryptedError, + CertificateParseError: errs.CertificateParseError +}; diff --git a/node_modules/sshpk/lib/key.js b/node_modules/sshpk/lib/key.js new file mode 100644 index 000000000..706f83400 --- /dev/null +++ b/node_modules/sshpk/lib/key.js @@ -0,0 +1,294 @@ +// Copyright 2018 Joyent, Inc. + +module.exports = Key; + +var assert = require('assert-plus'); +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var DiffieHellman = require('./dhe').DiffieHellman; +var errs = require('./errors'); +var utils = require('./utils'); +var PrivateKey = require('./private-key'); +var edCompat; + +try { + edCompat = require('./ed-compat'); +} catch (e) { + /* Just continue through, and bail out if we try to use it. */ +} + +var InvalidAlgorithmError = errs.InvalidAlgorithmError; +var KeyParseError = errs.KeyParseError; + +var formats = {}; +formats['auto'] = require('./formats/auto'); +formats['pem'] = require('./formats/pem'); +formats['pkcs1'] = require('./formats/pkcs1'); +formats['pkcs8'] = require('./formats/pkcs8'); +formats['rfc4253'] = require('./formats/rfc4253'); +formats['ssh'] = require('./formats/ssh'); +formats['ssh-private'] = require('./formats/ssh-private'); +formats['openssh'] = formats['ssh-private']; +formats['dnssec'] = require('./formats/dnssec'); +formats['putty'] = require('./formats/putty'); +formats['ppk'] = formats['putty']; + +function Key(opts) { + assert.object(opts, 'options'); + assert.arrayOfObject(opts.parts, 'options.parts'); + assert.string(opts.type, 'options.type'); + assert.optionalString(opts.comment, 'options.comment'); + + var algInfo = algs.info[opts.type]; + if (typeof (algInfo) !== 'object') + throw (new InvalidAlgorithmError(opts.type)); + + var partLookup = {}; + for (var i = 0; i < opts.parts.length; ++i) { + var part = opts.parts[i]; + partLookup[part.name] = part; + } + + this.type = opts.type; + this.parts = opts.parts; + this.part = partLookup; + this.comment = undefined; + this.source = opts.source; + + /* for speeding up hashing/fingerprint operations */ + this._rfc4253Cache = opts._rfc4253Cache; + this._hashCache = {}; + + var sz; + this.curve = undefined; + if (this.type === 'ecdsa') { + var curve = this.part.curve.data.toString(); + this.curve = curve; + sz = algs.curves[curve].size; + } else if (this.type === 'ed25519' || this.type === 'curve25519') { + sz = 256; + this.curve = 'curve25519'; + } else { + var szPart = this.part[algInfo.sizePart]; + sz = szPart.data.length; + sz = sz * 8 - utils.countZeros(szPart.data); + } + this.size = sz; +} + +Key.formats = formats; + +Key.prototype.toBuffer = function (format, options) { + if (format === undefined) + format = 'ssh'; + assert.string(format, 'format'); + assert.object(formats[format], 'formats[format]'); + assert.optionalObject(options, 'options'); + + if (format === 'rfc4253') { + if (this._rfc4253Cache === undefined) + this._rfc4253Cache = formats['rfc4253'].write(this); + return (this._rfc4253Cache); + } + + return (formats[format].write(this, options)); +}; + +Key.prototype.toString = function (format, options) { + return (this.toBuffer(format, options).toString()); +}; + +Key.prototype.hash = function (algo, type) { + assert.string(algo, 'algorithm'); + assert.optionalString(type, 'type'); + if (type === undefined) + type = 'ssh'; + algo = algo.toLowerCase(); + if (algs.hashAlgs[algo] === undefined) + throw (new InvalidAlgorithmError(algo)); + + var cacheKey = algo + '||' + type; + if (this._hashCache[cacheKey]) + return (this._hashCache[cacheKey]); + + var buf; + if (type === 'ssh') { + buf = this.toBuffer('rfc4253'); + } else if (type === 'spki') { + buf = formats.pkcs8.pkcs8ToBuffer(this); + } else { + throw (new Error('Hash type ' + type + ' not supported')); + } + var hash = crypto.createHash(algo).update(buf).digest(); + this._hashCache[cacheKey] = hash; + return (hash); +}; + +Key.prototype.fingerprint = function (algo, type) { + if (algo === undefined) + algo = 'sha256'; + if (type === undefined) + type = 'ssh'; + assert.string(algo, 'algorithm'); + assert.string(type, 'type'); + var opts = { + type: 'key', + hash: this.hash(algo, type), + algorithm: algo, + hashType: type + }; + return (new Fingerprint(opts)); +}; + +Key.prototype.defaultHashAlgorithm = function () { + var hashAlgo = 'sha1'; + if (this.type === 'rsa') + hashAlgo = 'sha256'; + if (this.type === 'dsa' && this.size > 1024) + hashAlgo = 'sha256'; + if (this.type === 'ed25519') + hashAlgo = 'sha512'; + if (this.type === 'ecdsa') { + if (this.size <= 256) + hashAlgo = 'sha256'; + else if (this.size <= 384) + hashAlgo = 'sha384'; + else + hashAlgo = 'sha512'; + } + return (hashAlgo); +}; + +Key.prototype.createVerify = function (hashAlgo) { + if (hashAlgo === undefined) + hashAlgo = this.defaultHashAlgorithm(); + assert.string(hashAlgo, 'hash algorithm'); + + /* ED25519 is not supported by OpenSSL, use a javascript impl. */ + if (this.type === 'ed25519' && edCompat !== undefined) + return (new edCompat.Verifier(this, hashAlgo)); + if (this.type === 'curve25519') + throw (new Error('Curve25519 keys are not suitable for ' + + 'signing or verification')); + + var v, nm, err; + try { + nm = hashAlgo.toUpperCase(); + v = crypto.createVerify(nm); + } catch (e) { + err = e; + } + if (v === undefined || (err instanceof Error && + err.message.match(/Unknown message digest/))) { + nm = 'RSA-'; + nm += hashAlgo.toUpperCase(); + v = crypto.createVerify(nm); + } + assert.ok(v, 'failed to create verifier'); + var oldVerify = v.verify.bind(v); + var key = this.toBuffer('pkcs8'); + var curve = this.curve; + var self = this; + v.verify = function (signature, fmt) { + if (Signature.isSignature(signature, [2, 0])) { + if (signature.type !== self.type) + return (false); + if (signature.hashAlgorithm && + signature.hashAlgorithm !== hashAlgo) + return (false); + if (signature.curve && self.type === 'ecdsa' && + signature.curve !== curve) + return (false); + return (oldVerify(key, signature.toBuffer('asn1'))); + + } else if (typeof (signature) === 'string' || + Buffer.isBuffer(signature)) { + return (oldVerify(key, signature, fmt)); + + /* + * Avoid doing this on valid arguments, walking the prototype + * chain can be quite slow. + */ + } else if (Signature.isSignature(signature, [1, 0])) { + throw (new Error('signature was created by too old ' + + 'a version of sshpk and cannot be verified')); + + } else { + throw (new TypeError('signature must be a string, ' + + 'Buffer, or Signature object')); + } + }; + return (v); +}; + +Key.prototype.createDiffieHellman = function () { + if (this.type === 'rsa') + throw (new Error('RSA keys do not support Diffie-Hellman')); + + return (new DiffieHellman(this)); +}; +Key.prototype.createDH = Key.prototype.createDiffieHellman; + +Key.parse = function (data, format, options) { + if (typeof (data) !== 'string') + assert.buffer(data, 'data'); + if (format === undefined) + format = 'auto'; + assert.string(format, 'format'); + if (typeof (options) === 'string') + options = { filename: options }; + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalString(options.filename, 'options.filename'); + if (options.filename === undefined) + options.filename = '(unnamed)'; + + assert.object(formats[format], 'formats[format]'); + + try { + var k = formats[format].read(data, options); + if (k instanceof PrivateKey) + k = k.toPublic(); + if (!k.comment) + k.comment = options.filename; + return (k); + } catch (e) { + if (e.name === 'KeyEncryptedError') + throw (e); + throw (new KeyParseError(options.filename, format, e)); + } +}; + +Key.isKey = function (obj, ver) { + return (utils.isCompatible(obj, Key, ver)); +}; + +/* + * API versions for Key: + * [1,0] -- initial ver, may take Signature for createVerify or may not + * [1,1] -- added pkcs1, pkcs8 formats + * [1,2] -- added auto, ssh-private, openssh formats + * [1,3] -- added defaultHashAlgorithm + * [1,4] -- added ed support, createDH + * [1,5] -- first explicitly tagged version + * [1,6] -- changed ed25519 part names + * [1,7] -- spki hash types + */ +Key.prototype._sshpkApiVersion = [1, 7]; + +Key._oldVersionDetect = function (obj) { + assert.func(obj.toBuffer); + assert.func(obj.fingerprint); + if (obj.createDH) + return ([1, 4]); + if (obj.defaultHashAlgorithm) + return ([1, 3]); + if (obj.formats['auto']) + return ([1, 2]); + if (obj.formats['pkcs1']) + return ([1, 1]); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/private-key.js b/node_modules/sshpk/lib/private-key.js new file mode 100644 index 000000000..570e05435 --- /dev/null +++ b/node_modules/sshpk/lib/private-key.js @@ -0,0 +1,247 @@ +// Copyright 2017 Joyent, Inc. + +module.exports = PrivateKey; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var Fingerprint = require('./fingerprint'); +var Signature = require('./signature'); +var errs = require('./errors'); +var util = require('util'); +var utils = require('./utils'); +var dhe = require('./dhe'); +var generateECDSA = dhe.generateECDSA; +var generateED25519 = dhe.generateED25519; +var edCompat = require('./ed-compat'); +var nacl = require('tweetnacl'); + +var Key = require('./key'); + +var InvalidAlgorithmError = errs.InvalidAlgorithmError; +var KeyParseError = errs.KeyParseError; +var KeyEncryptedError = errs.KeyEncryptedError; + +var formats = {}; +formats['auto'] = require('./formats/auto'); +formats['pem'] = require('./formats/pem'); +formats['pkcs1'] = require('./formats/pkcs1'); +formats['pkcs8'] = require('./formats/pkcs8'); +formats['rfc4253'] = require('./formats/rfc4253'); +formats['ssh-private'] = require('./formats/ssh-private'); +formats['openssh'] = formats['ssh-private']; +formats['ssh'] = formats['ssh-private']; +formats['dnssec'] = require('./formats/dnssec'); +formats['putty'] = require('./formats/putty'); + +function PrivateKey(opts) { + assert.object(opts, 'options'); + Key.call(this, opts); + + this._pubCache = undefined; +} +util.inherits(PrivateKey, Key); + +PrivateKey.formats = formats; + +PrivateKey.prototype.toBuffer = function (format, options) { + if (format === undefined) + format = 'pkcs1'; + assert.string(format, 'format'); + assert.object(formats[format], 'formats[format]'); + assert.optionalObject(options, 'options'); + + return (formats[format].write(this, options)); +}; + +PrivateKey.prototype.hash = function (algo, type) { + return (this.toPublic().hash(algo, type)); +}; + +PrivateKey.prototype.fingerprint = function (algo, type) { + return (this.toPublic().fingerprint(algo, type)); +}; + +PrivateKey.prototype.toPublic = function () { + if (this._pubCache) + return (this._pubCache); + + var algInfo = algs.info[this.type]; + var pubParts = []; + for (var i = 0; i < algInfo.parts.length; ++i) { + var p = algInfo.parts[i]; + pubParts.push(this.part[p]); + } + + this._pubCache = new Key({ + type: this.type, + source: this, + parts: pubParts + }); + if (this.comment) + this._pubCache.comment = this.comment; + return (this._pubCache); +}; + +PrivateKey.prototype.derive = function (newType) { + assert.string(newType, 'type'); + var priv, pub, pair; + + if (this.type === 'ed25519' && newType === 'curve25519') { + priv = this.part.k.data; + if (priv[0] === 0x00) + priv = priv.slice(1); + + pair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv)); + pub = Buffer.from(pair.publicKey); + + return (new PrivateKey({ + type: 'curve25519', + parts: [ + { name: 'A', data: utils.mpNormalize(pub) }, + { name: 'k', data: utils.mpNormalize(priv) } + ] + })); + } else if (this.type === 'curve25519' && newType === 'ed25519') { + priv = this.part.k.data; + if (priv[0] === 0x00) + priv = priv.slice(1); + + pair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv)); + pub = Buffer.from(pair.publicKey); + + return (new PrivateKey({ + type: 'ed25519', + parts: [ + { name: 'A', data: utils.mpNormalize(pub) }, + { name: 'k', data: utils.mpNormalize(priv) } + ] + })); + } + throw (new Error('Key derivation not supported from ' + this.type + + ' to ' + newType)); +}; + +PrivateKey.prototype.createVerify = function (hashAlgo) { + return (this.toPublic().createVerify(hashAlgo)); +}; + +PrivateKey.prototype.createSign = function (hashAlgo) { + if (hashAlgo === undefined) + hashAlgo = this.defaultHashAlgorithm(); + assert.string(hashAlgo, 'hash algorithm'); + + /* ED25519 is not supported by OpenSSL, use a javascript impl. */ + if (this.type === 'ed25519' && edCompat !== undefined) + return (new edCompat.Signer(this, hashAlgo)); + if (this.type === 'curve25519') + throw (new Error('Curve25519 keys are not suitable for ' + + 'signing or verification')); + + var v, nm, err; + try { + nm = hashAlgo.toUpperCase(); + v = crypto.createSign(nm); + } catch (e) { + err = e; + } + if (v === undefined || (err instanceof Error && + err.message.match(/Unknown message digest/))) { + nm = 'RSA-'; + nm += hashAlgo.toUpperCase(); + v = crypto.createSign(nm); + } + assert.ok(v, 'failed to create verifier'); + var oldSign = v.sign.bind(v); + var key = this.toBuffer('pkcs1'); + var type = this.type; + var curve = this.curve; + v.sign = function () { + var sig = oldSign(key); + if (typeof (sig) === 'string') + sig = Buffer.from(sig, 'binary'); + sig = Signature.parse(sig, type, 'asn1'); + sig.hashAlgorithm = hashAlgo; + sig.curve = curve; + return (sig); + }; + return (v); +}; + +PrivateKey.parse = function (data, format, options) { + if (typeof (data) !== 'string') + assert.buffer(data, 'data'); + if (format === undefined) + format = 'auto'; + assert.string(format, 'format'); + if (typeof (options) === 'string') + options = { filename: options }; + assert.optionalObject(options, 'options'); + if (options === undefined) + options = {}; + assert.optionalString(options.filename, 'options.filename'); + if (options.filename === undefined) + options.filename = '(unnamed)'; + + assert.object(formats[format], 'formats[format]'); + + try { + var k = formats[format].read(data, options); + assert.ok(k instanceof PrivateKey, 'key is not a private key'); + if (!k.comment) + k.comment = options.filename; + return (k); + } catch (e) { + if (e.name === 'KeyEncryptedError') + throw (e); + throw (new KeyParseError(options.filename, format, e)); + } +}; + +PrivateKey.isPrivateKey = function (obj, ver) { + return (utils.isCompatible(obj, PrivateKey, ver)); +}; + +PrivateKey.generate = function (type, options) { + if (options === undefined) + options = {}; + assert.object(options, 'options'); + + switch (type) { + case 'ecdsa': + if (options.curve === undefined) + options.curve = 'nistp256'; + assert.string(options.curve, 'options.curve'); + return (generateECDSA(options.curve)); + case 'ed25519': + return (generateED25519()); + default: + throw (new Error('Key generation not supported with key ' + + 'type "' + type + '"')); + } +}; + +/* + * API versions for PrivateKey: + * [1,0] -- initial ver + * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats + * [1,2] -- added defaultHashAlgorithm + * [1,3] -- added derive, ed, createDH + * [1,4] -- first tagged version + * [1,5] -- changed ed25519 part names and format + * [1,6] -- type arguments for hash() and fingerprint() + */ +PrivateKey.prototype._sshpkApiVersion = [1, 6]; + +PrivateKey._oldVersionDetect = function (obj) { + assert.func(obj.toPublic); + assert.func(obj.createSign); + if (obj.derive) + return ([1, 3]); + if (obj.defaultHashAlgorithm) + return ([1, 2]); + if (obj.formats['auto']) + return ([1, 1]); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/signature.js b/node_modules/sshpk/lib/signature.js new file mode 100644 index 000000000..aa8fdbb87 --- /dev/null +++ b/node_modules/sshpk/lib/signature.js @@ -0,0 +1,314 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = Signature; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var algs = require('./algs'); +var crypto = require('crypto'); +var errs = require('./errors'); +var utils = require('./utils'); +var asn1 = require('asn1'); +var SSHBuffer = require('./ssh-buffer'); + +var InvalidAlgorithmError = errs.InvalidAlgorithmError; +var SignatureParseError = errs.SignatureParseError; + +function Signature(opts) { + assert.object(opts, 'options'); + assert.arrayOfObject(opts.parts, 'options.parts'); + assert.string(opts.type, 'options.type'); + + var partLookup = {}; + for (var i = 0; i < opts.parts.length; ++i) { + var part = opts.parts[i]; + partLookup[part.name] = part; + } + + this.type = opts.type; + this.hashAlgorithm = opts.hashAlgo; + this.curve = opts.curve; + this.parts = opts.parts; + this.part = partLookup; +} + +Signature.prototype.toBuffer = function (format) { + if (format === undefined) + format = 'asn1'; + assert.string(format, 'format'); + + var buf; + var stype = 'ssh-' + this.type; + + switch (this.type) { + case 'rsa': + switch (this.hashAlgorithm) { + case 'sha256': + stype = 'rsa-sha2-256'; + break; + case 'sha512': + stype = 'rsa-sha2-512'; + break; + case 'sha1': + case undefined: + break; + default: + throw (new Error('SSH signature ' + + 'format does not support hash ' + + 'algorithm ' + this.hashAlgorithm)); + } + if (format === 'ssh') { + buf = new SSHBuffer({}); + buf.writeString(stype); + buf.writePart(this.part.sig); + return (buf.toBuffer()); + } else { + return (this.part.sig.data); + } + break; + + case 'ed25519': + if (format === 'ssh') { + buf = new SSHBuffer({}); + buf.writeString(stype); + buf.writePart(this.part.sig); + return (buf.toBuffer()); + } else { + return (this.part.sig.data); + } + break; + + case 'dsa': + case 'ecdsa': + var r, s; + if (format === 'asn1') { + var der = new asn1.BerWriter(); + der.startSequence(); + r = utils.mpNormalize(this.part.r.data); + s = utils.mpNormalize(this.part.s.data); + der.writeBuffer(r, asn1.Ber.Integer); + der.writeBuffer(s, asn1.Ber.Integer); + der.endSequence(); + return (der.buffer); + } else if (format === 'ssh' && this.type === 'dsa') { + buf = new SSHBuffer({}); + buf.writeString('ssh-dss'); + r = this.part.r.data; + if (r.length > 20 && r[0] === 0x00) + r = r.slice(1); + s = this.part.s.data; + if (s.length > 20 && s[0] === 0x00) + s = s.slice(1); + if ((this.hashAlgorithm && + this.hashAlgorithm !== 'sha1') || + r.length + s.length !== 40) { + throw (new Error('OpenSSH only supports ' + + 'DSA signatures with SHA1 hash')); + } + buf.writeBuffer(Buffer.concat([r, s])); + return (buf.toBuffer()); + } else if (format === 'ssh' && this.type === 'ecdsa') { + var inner = new SSHBuffer({}); + r = this.part.r.data; + inner.writeBuffer(r); + inner.writePart(this.part.s); + + buf = new SSHBuffer({}); + /* XXX: find a more proper way to do this? */ + var curve; + if (r[0] === 0x00) + r = r.slice(1); + var sz = r.length * 8; + if (sz === 256) + curve = 'nistp256'; + else if (sz === 384) + curve = 'nistp384'; + else if (sz === 528) + curve = 'nistp521'; + buf.writeString('ecdsa-sha2-' + curve); + buf.writeBuffer(inner.toBuffer()); + return (buf.toBuffer()); + } + throw (new Error('Invalid signature format')); + default: + throw (new Error('Invalid signature data')); + } +}; + +Signature.prototype.toString = function (format) { + assert.optionalString(format, 'format'); + return (this.toBuffer(format).toString('base64')); +}; + +Signature.parse = function (data, type, format) { + if (typeof (data) === 'string') + data = Buffer.from(data, 'base64'); + assert.buffer(data, 'data'); + assert.string(format, 'format'); + assert.string(type, 'type'); + + var opts = {}; + opts.type = type.toLowerCase(); + opts.parts = []; + + try { + assert.ok(data.length > 0, 'signature must not be empty'); + switch (opts.type) { + case 'rsa': + return (parseOneNum(data, type, format, opts)); + case 'ed25519': + return (parseOneNum(data, type, format, opts)); + + case 'dsa': + case 'ecdsa': + if (format === 'asn1') + return (parseDSAasn1(data, type, format, opts)); + else if (opts.type === 'dsa') + return (parseDSA(data, type, format, opts)); + else + return (parseECDSA(data, type, format, opts)); + + default: + throw (new InvalidAlgorithmError(type)); + } + + } catch (e) { + if (e instanceof InvalidAlgorithmError) + throw (e); + throw (new SignatureParseError(type, format, e)); + } +}; + +function parseOneNum(data, type, format, opts) { + if (format === 'ssh') { + try { + var buf = new SSHBuffer({buffer: data}); + var head = buf.readString(); + } catch (e) { + /* fall through */ + } + if (buf !== undefined) { + var msg = 'SSH signature does not match expected ' + + 'type (expected ' + type + ', got ' + head + ')'; + switch (head) { + case 'ssh-rsa': + assert.strictEqual(type, 'rsa', msg); + opts.hashAlgo = 'sha1'; + break; + case 'rsa-sha2-256': + assert.strictEqual(type, 'rsa', msg); + opts.hashAlgo = 'sha256'; + break; + case 'rsa-sha2-512': + assert.strictEqual(type, 'rsa', msg); + opts.hashAlgo = 'sha512'; + break; + case 'ssh-ed25519': + assert.strictEqual(type, 'ed25519', msg); + opts.hashAlgo = 'sha512'; + break; + default: + throw (new Error('Unknown SSH signature ' + + 'type: ' + head)); + } + var sig = buf.readPart(); + assert.ok(buf.atEnd(), 'extra trailing bytes'); + sig.name = 'sig'; + opts.parts.push(sig); + return (new Signature(opts)); + } + } + opts.parts.push({name: 'sig', data: data}); + return (new Signature(opts)); +} + +function parseDSAasn1(data, type, format, opts) { + var der = new asn1.BerReader(data); + der.readSequence(); + var r = der.readString(asn1.Ber.Integer, true); + var s = der.readString(asn1.Ber.Integer, true); + + opts.parts.push({name: 'r', data: utils.mpNormalize(r)}); + opts.parts.push({name: 's', data: utils.mpNormalize(s)}); + + return (new Signature(opts)); +} + +function parseDSA(data, type, format, opts) { + if (data.length != 40) { + var buf = new SSHBuffer({buffer: data}); + var d = buf.readBuffer(); + if (d.toString('ascii') === 'ssh-dss') + d = buf.readBuffer(); + assert.ok(buf.atEnd(), 'extra trailing bytes'); + assert.strictEqual(d.length, 40, 'invalid inner length'); + data = d; + } + opts.parts.push({name: 'r', data: data.slice(0, 20)}); + opts.parts.push({name: 's', data: data.slice(20, 40)}); + return (new Signature(opts)); +} + +function parseECDSA(data, type, format, opts) { + var buf = new SSHBuffer({buffer: data}); + + var r, s; + var inner = buf.readBuffer(); + var stype = inner.toString('ascii'); + if (stype.slice(0, 6) === 'ecdsa-') { + var parts = stype.split('-'); + assert.strictEqual(parts[0], 'ecdsa'); + assert.strictEqual(parts[1], 'sha2'); + opts.curve = parts[2]; + switch (opts.curve) { + case 'nistp256': + opts.hashAlgo = 'sha256'; + break; + case 'nistp384': + opts.hashAlgo = 'sha384'; + break; + case 'nistp521': + opts.hashAlgo = 'sha512'; + break; + default: + throw (new Error('Unsupported ECDSA curve: ' + + opts.curve)); + } + inner = buf.readBuffer(); + assert.ok(buf.atEnd(), 'extra trailing bytes on outer'); + buf = new SSHBuffer({buffer: inner}); + r = buf.readPart(); + } else { + r = {data: inner}; + } + + s = buf.readPart(); + assert.ok(buf.atEnd(), 'extra trailing bytes'); + + r.name = 'r'; + s.name = 's'; + + opts.parts.push(r); + opts.parts.push(s); + return (new Signature(opts)); +} + +Signature.isSignature = function (obj, ver) { + return (utils.isCompatible(obj, Signature, ver)); +}; + +/* + * API versions for Signature: + * [1,0] -- initial ver + * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent + * hashAlgorithm property + * [2,1] -- first tagged version + */ +Signature.prototype._sshpkApiVersion = [2, 1]; + +Signature._oldVersionDetect = function (obj) { + assert.func(obj.toBuffer); + if (obj.hasOwnProperty('hashAlgorithm')) + return ([2, 0]); + return ([1, 0]); +}; diff --git a/node_modules/sshpk/lib/ssh-buffer.js b/node_modules/sshpk/lib/ssh-buffer.js new file mode 100644 index 000000000..1dd286c8d --- /dev/null +++ b/node_modules/sshpk/lib/ssh-buffer.js @@ -0,0 +1,149 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = SSHBuffer; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; + +function SSHBuffer(opts) { + assert.object(opts, 'options'); + if (opts.buffer !== undefined) + assert.buffer(opts.buffer, 'options.buffer'); + + this._size = opts.buffer ? opts.buffer.length : 1024; + this._buffer = opts.buffer || Buffer.alloc(this._size); + this._offset = 0; +} + +SSHBuffer.prototype.toBuffer = function () { + return (this._buffer.slice(0, this._offset)); +}; + +SSHBuffer.prototype.atEnd = function () { + return (this._offset >= this._buffer.length); +}; + +SSHBuffer.prototype.remainder = function () { + return (this._buffer.slice(this._offset)); +}; + +SSHBuffer.prototype.skip = function (n) { + this._offset += n; +}; + +SSHBuffer.prototype.expand = function () { + this._size *= 2; + var buf = Buffer.alloc(this._size); + this._buffer.copy(buf, 0); + this._buffer = buf; +}; + +SSHBuffer.prototype.readPart = function () { + return ({data: this.readBuffer()}); +}; + +SSHBuffer.prototype.readBuffer = function () { + var len = this._buffer.readUInt32BE(this._offset); + this._offset += 4; + assert.ok(this._offset + len <= this._buffer.length, + 'length out of bounds at +0x' + this._offset.toString(16) + + ' (data truncated?)'); + var buf = this._buffer.slice(this._offset, this._offset + len); + this._offset += len; + return (buf); +}; + +SSHBuffer.prototype.readString = function () { + return (this.readBuffer().toString()); +}; + +SSHBuffer.prototype.readCString = function () { + var offset = this._offset; + while (offset < this._buffer.length && + this._buffer[offset] !== 0x00) + offset++; + assert.ok(offset < this._buffer.length, 'c string does not terminate'); + var str = this._buffer.slice(this._offset, offset).toString(); + this._offset = offset + 1; + return (str); +}; + +SSHBuffer.prototype.readInt = function () { + var v = this._buffer.readUInt32BE(this._offset); + this._offset += 4; + return (v); +}; + +SSHBuffer.prototype.readInt64 = function () { + assert.ok(this._offset + 8 < this._buffer.length, + 'buffer not long enough to read Int64'); + var v = this._buffer.slice(this._offset, this._offset + 8); + this._offset += 8; + return (v); +}; + +SSHBuffer.prototype.readChar = function () { + var v = this._buffer[this._offset++]; + return (v); +}; + +SSHBuffer.prototype.writeBuffer = function (buf) { + while (this._offset + 4 + buf.length > this._size) + this.expand(); + this._buffer.writeUInt32BE(buf.length, this._offset); + this._offset += 4; + buf.copy(this._buffer, this._offset); + this._offset += buf.length; +}; + +SSHBuffer.prototype.writeString = function (str) { + this.writeBuffer(Buffer.from(str, 'utf8')); +}; + +SSHBuffer.prototype.writeCString = function (str) { + while (this._offset + 1 + str.length > this._size) + this.expand(); + this._buffer.write(str, this._offset); + this._offset += str.length; + this._buffer[this._offset++] = 0; +}; + +SSHBuffer.prototype.writeInt = function (v) { + while (this._offset + 4 > this._size) + this.expand(); + this._buffer.writeUInt32BE(v, this._offset); + this._offset += 4; +}; + +SSHBuffer.prototype.writeInt64 = function (v) { + assert.buffer(v, 'value'); + if (v.length > 8) { + var lead = v.slice(0, v.length - 8); + for (var i = 0; i < lead.length; ++i) { + assert.strictEqual(lead[i], 0, + 'must fit in 64 bits of precision'); + } + v = v.slice(v.length - 8, v.length); + } + while (this._offset + 8 > this._size) + this.expand(); + v.copy(this._buffer, this._offset); + this._offset += 8; +}; + +SSHBuffer.prototype.writeChar = function (v) { + while (this._offset + 1 > this._size) + this.expand(); + this._buffer[this._offset++] = v; +}; + +SSHBuffer.prototype.writePart = function (p) { + this.writeBuffer(p.data); +}; + +SSHBuffer.prototype.write = function (buf) { + while (this._offset + buf.length > this._size) + this.expand(); + buf.copy(this._buffer, this._offset); + this._offset += buf.length; +}; diff --git a/node_modules/sshpk/lib/utils.js b/node_modules/sshpk/lib/utils.js new file mode 100644 index 000000000..6b83a322d --- /dev/null +++ b/node_modules/sshpk/lib/utils.js @@ -0,0 +1,404 @@ +// Copyright 2015 Joyent, Inc. + +module.exports = { + bufferSplit: bufferSplit, + addRSAMissing: addRSAMissing, + calculateDSAPublic: calculateDSAPublic, + calculateED25519Public: calculateED25519Public, + calculateX25519Public: calculateX25519Public, + mpNormalize: mpNormalize, + mpDenormalize: mpDenormalize, + ecNormalize: ecNormalize, + countZeros: countZeros, + assertCompatible: assertCompatible, + isCompatible: isCompatible, + opensslKeyDeriv: opensslKeyDeriv, + opensshCipherInfo: opensshCipherInfo, + publicFromPrivateECDSA: publicFromPrivateECDSA, + zeroPadToLength: zeroPadToLength, + writeBitString: writeBitString, + readBitString: readBitString, + pbkdf2: pbkdf2 +}; + +var assert = require('assert-plus'); +var Buffer = require('safer-buffer').Buffer; +var PrivateKey = require('./private-key'); +var Key = require('./key'); +var crypto = require('crypto'); +var algs = require('./algs'); +var asn1 = require('asn1'); + +var ec = require('ecc-jsbn/lib/ec'); +var jsbn = require('jsbn').BigInteger; +var nacl = require('tweetnacl'); + +var MAX_CLASS_DEPTH = 3; + +function isCompatible(obj, klass, needVer) { + if (obj === null || typeof (obj) !== 'object') + return (false); + if (needVer === undefined) + needVer = klass.prototype._sshpkApiVersion; + if (obj instanceof klass && + klass.prototype._sshpkApiVersion[0] == needVer[0]) + return (true); + var proto = Object.getPrototypeOf(obj); + var depth = 0; + while (proto.constructor.name !== klass.name) { + proto = Object.getPrototypeOf(proto); + if (!proto || ++depth > MAX_CLASS_DEPTH) + return (false); + } + if (proto.constructor.name !== klass.name) + return (false); + var ver = proto._sshpkApiVersion; + if (ver === undefined) + ver = klass._oldVersionDetect(obj); + if (ver[0] != needVer[0] || ver[1] < needVer[1]) + return (false); + return (true); +} + +function assertCompatible(obj, klass, needVer, name) { + if (name === undefined) + name = 'object'; + assert.ok(obj, name + ' must not be null'); + assert.object(obj, name + ' must be an object'); + if (needVer === undefined) + needVer = klass.prototype._sshpkApiVersion; + if (obj instanceof klass && + klass.prototype._sshpkApiVersion[0] == needVer[0]) + return; + var proto = Object.getPrototypeOf(obj); + var depth = 0; + while (proto.constructor.name !== klass.name) { + proto = Object.getPrototypeOf(proto); + assert.ok(proto && ++depth <= MAX_CLASS_DEPTH, + name + ' must be a ' + klass.name + ' instance'); + } + assert.strictEqual(proto.constructor.name, klass.name, + name + ' must be a ' + klass.name + ' instance'); + var ver = proto._sshpkApiVersion; + if (ver === undefined) + ver = klass._oldVersionDetect(obj); + assert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1], + name + ' must be compatible with ' + klass.name + ' klass ' + + 'version ' + needVer[0] + '.' + needVer[1]); +} + +var CIPHER_LEN = { + 'des-ede3-cbc': { key: 24, iv: 8 }, + 'aes-128-cbc': { key: 16, iv: 16 }, + 'aes-256-cbc': { key: 32, iv: 16 } +}; +var PKCS5_SALT_LEN = 8; + +function opensslKeyDeriv(cipher, salt, passphrase, count) { + assert.buffer(salt, 'salt'); + assert.buffer(passphrase, 'passphrase'); + assert.number(count, 'iteration count'); + + var clen = CIPHER_LEN[cipher]; + assert.object(clen, 'supported cipher'); + + salt = salt.slice(0, PKCS5_SALT_LEN); + + var D, D_prev, bufs; + var material = Buffer.alloc(0); + while (material.length < clen.key + clen.iv) { + bufs = []; + if (D_prev) + bufs.push(D_prev); + bufs.push(passphrase); + bufs.push(salt); + D = Buffer.concat(bufs); + for (var j = 0; j < count; ++j) + D = crypto.createHash('md5').update(D).digest(); + material = Buffer.concat([material, D]); + D_prev = D; + } + + return ({ + key: material.slice(0, clen.key), + iv: material.slice(clen.key, clen.key + clen.iv) + }); +} + +/* See: RFC2898 */ +function pbkdf2(hashAlg, salt, iterations, size, passphrase) { + var hkey = Buffer.alloc(salt.length + 4); + salt.copy(hkey); + + var gen = 0, ts = []; + var i = 1; + while (gen < size) { + var t = T(i++); + gen += t.length; + ts.push(t); + } + return (Buffer.concat(ts).slice(0, size)); + + function T(I) { + hkey.writeUInt32BE(I, hkey.length - 4); + + var hmac = crypto.createHmac(hashAlg, passphrase); + hmac.update(hkey); + + var Ti = hmac.digest(); + var Uc = Ti; + var c = 1; + while (c++ < iterations) { + hmac = crypto.createHmac(hashAlg, passphrase); + hmac.update(Uc); + Uc = hmac.digest(); + for (var x = 0; x < Ti.length; ++x) + Ti[x] ^= Uc[x]; + } + return (Ti); + } +} + +/* Count leading zero bits on a buffer */ +function countZeros(buf) { + var o = 0, obit = 8; + while (o < buf.length) { + var mask = (1 << obit); + if ((buf[o] & mask) === mask) + break; + obit--; + if (obit < 0) { + o++; + obit = 8; + } + } + return (o*8 + (8 - obit) - 1); +} + +function bufferSplit(buf, chr) { + assert.buffer(buf); + assert.string(chr); + + var parts = []; + var lastPart = 0; + var matches = 0; + for (var i = 0; i < buf.length; ++i) { + if (buf[i] === chr.charCodeAt(matches)) + ++matches; + else if (buf[i] === chr.charCodeAt(0)) + matches = 1; + else + matches = 0; + + if (matches >= chr.length) { + var newPart = i + 1; + parts.push(buf.slice(lastPart, newPart - matches)); + lastPart = newPart; + matches = 0; + } + } + if (lastPart <= buf.length) + parts.push(buf.slice(lastPart, buf.length)); + + return (parts); +} + +function ecNormalize(buf, addZero) { + assert.buffer(buf); + if (buf[0] === 0x00 && buf[1] === 0x04) { + if (addZero) + return (buf); + return (buf.slice(1)); + } else if (buf[0] === 0x04) { + if (!addZero) + return (buf); + } else { + while (buf[0] === 0x00) + buf = buf.slice(1); + if (buf[0] === 0x02 || buf[0] === 0x03) + throw (new Error('Compressed elliptic curve points ' + + 'are not supported')); + if (buf[0] !== 0x04) + throw (new Error('Not a valid elliptic curve point')); + if (!addZero) + return (buf); + } + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x0; + buf.copy(b, 1); + return (b); +} + +function readBitString(der, tag) { + if (tag === undefined) + tag = asn1.Ber.BitString; + var buf = der.readString(tag, true); + assert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' + + 'not supported (0x' + buf[0].toString(16) + ')'); + return (buf.slice(1)); +} + +function writeBitString(der, buf, tag) { + if (tag === undefined) + tag = asn1.Ber.BitString; + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x00; + buf.copy(b, 1); + der.writeBuffer(b, tag); +} + +function mpNormalize(buf) { + assert.buffer(buf); + while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00) + buf = buf.slice(1); + if ((buf[0] & 0x80) === 0x80) { + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x00; + buf.copy(b, 1); + buf = b; + } + return (buf); +} + +function mpDenormalize(buf) { + assert.buffer(buf); + while (buf.length > 1 && buf[0] === 0x00) + buf = buf.slice(1); + return (buf); +} + +function zeroPadToLength(buf, len) { + assert.buffer(buf); + assert.number(len); + while (buf.length > len) { + assert.equal(buf[0], 0x00); + buf = buf.slice(1); + } + while (buf.length < len) { + var b = Buffer.alloc(buf.length + 1); + b[0] = 0x00; + buf.copy(b, 1); + buf = b; + } + return (buf); +} + +function bigintToMpBuf(bigint) { + var buf = Buffer.from(bigint.toByteArray()); + buf = mpNormalize(buf); + return (buf); +} + +function calculateDSAPublic(g, p, x) { + assert.buffer(g); + assert.buffer(p); + assert.buffer(x); + g = new jsbn(g); + p = new jsbn(p); + x = new jsbn(x); + var y = g.modPow(x, p); + var ybuf = bigintToMpBuf(y); + return (ybuf); +} + +function calculateED25519Public(k) { + assert.buffer(k); + + var kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k)); + return (Buffer.from(kp.publicKey)); +} + +function calculateX25519Public(k) { + assert.buffer(k); + + var kp = nacl.box.keyPair.fromSeed(new Uint8Array(k)); + return (Buffer.from(kp.publicKey)); +} + +function addRSAMissing(key) { + assert.object(key); + assertCompatible(key, PrivateKey, [1, 1]); + + var d = new jsbn(key.part.d.data); + var buf; + + if (!key.part.dmodp) { + var p = new jsbn(key.part.p.data); + var dmodp = d.mod(p.subtract(1)); + + buf = bigintToMpBuf(dmodp); + key.part.dmodp = {name: 'dmodp', data: buf}; + key.parts.push(key.part.dmodp); + } + if (!key.part.dmodq) { + var q = new jsbn(key.part.q.data); + var dmodq = d.mod(q.subtract(1)); + + buf = bigintToMpBuf(dmodq); + key.part.dmodq = {name: 'dmodq', data: buf}; + key.parts.push(key.part.dmodq); + } +} + +function publicFromPrivateECDSA(curveName, priv) { + assert.string(curveName, 'curveName'); + assert.buffer(priv); + var params = algs.curves[curveName]; + var p = new jsbn(params.p); + var a = new jsbn(params.a); + var b = new jsbn(params.b); + var curve = new ec.ECCurveFp(p, a, b); + var G = curve.decodePointHex(params.G.toString('hex')); + + var d = new jsbn(mpNormalize(priv)); + var pub = G.multiply(d); + pub = Buffer.from(curve.encodePointHex(pub), 'hex'); + + var parts = []; + parts.push({name: 'curve', data: Buffer.from(curveName)}); + parts.push({name: 'Q', data: pub}); + + var key = new Key({type: 'ecdsa', curve: curve, parts: parts}); + return (key); +} + +function opensshCipherInfo(cipher) { + var inf = {}; + switch (cipher) { + case '3des-cbc': + inf.keySize = 24; + inf.blockSize = 8; + inf.opensslName = 'des-ede3-cbc'; + break; + case 'blowfish-cbc': + inf.keySize = 16; + inf.blockSize = 8; + inf.opensslName = 'bf-cbc'; + break; + case 'aes128-cbc': + case 'aes128-ctr': + case 'aes128-gcm@openssh.com': + inf.keySize = 16; + inf.blockSize = 16; + inf.opensslName = 'aes-128-' + cipher.slice(7, 10); + break; + case 'aes192-cbc': + case 'aes192-ctr': + case 'aes192-gcm@openssh.com': + inf.keySize = 24; + inf.blockSize = 16; + inf.opensslName = 'aes-192-' + cipher.slice(7, 10); + break; + case 'aes256-cbc': + case 'aes256-ctr': + case 'aes256-gcm@openssh.com': + inf.keySize = 32; + inf.blockSize = 16; + inf.opensslName = 'aes-256-' + cipher.slice(7, 10); + break; + default: + throw (new Error( + 'Unsupported openssl cipher "' + cipher + '"')); + } + return (inf); +} diff --git a/node_modules/sshpk/man/man1/sshpk-conv.1 b/node_modules/sshpk/man/man1/sshpk-conv.1 new file mode 100644 index 000000000..0887dce27 --- /dev/null +++ b/node_modules/sshpk/man/man1/sshpk-conv.1 @@ -0,0 +1,135 @@ +.TH sshpk\-conv 1 "Jan 2016" sshpk "sshpk Commands" +.SH NAME +.PP +sshpk\-conv \- convert between key formats +.SH SYNOPSYS +.PP +\fB\fCsshpk\-conv\fR \-t FORMAT [FILENAME] [OPTIONS...] +.PP +\fB\fCsshpk\-conv\fR \-i [FILENAME] [OPTIONS...] +.SH DESCRIPTION +.PP +Reads in a public or private key and converts it between different formats, +particularly formats used in the SSH protocol and the well\-known PEM PKCS#1/7 +formats. +.PP +In the second form, with the \fB\fC\-i\fR option given, identifies a key and prints to +stderr information about its nature, size and fingerprint. +.SH EXAMPLES +.PP +Assume the following SSH\-format public key in \fB\fCid_ecdsa.pub\fR: +.PP +.RS +.nf +ecdsa\-sha2\-nistp256 AAAAE2VjZHNhLXNoYTI...9M/4c4= user@host +.fi +.RE +.PP +Identify it with \fB\fC\-i\fR: +.PP +.RS +.nf +$ sshpk\-conv \-i id_ecdsa.pub +id_ecdsa: a 256 bit ECDSA public key +ECDSA curve: nistp256 +Comment: user@host +Fingerprint: + SHA256:vCNX7eUkdvqqW0m4PoxQAZRv+CM4P4fS8+CbliAvS4k + 81:ad:d5:57:e5:6f:7d:a2:93:79:56:af:d7:c0:38:51 +.fi +.RE +.PP +Convert it to \fB\fCpkcs8\fR format, for use with e.g. OpenSSL: +.PP +.RS +.nf +$ sshpk\-conv \-t pkcs8 id_ecdsa +\-\-\-\-\-BEGIN PUBLIC KEY\-\-\-\-\- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAsA4R6N6AS3gzaPBeLjG2ObSgUsR +zOt+kWJoijLnw3ZMYUKmAx+lD0I5XUxdrPcs1vH5f3cn9TvRvO9L0z/hzg== +\-\-\-\-\-END PUBLIC KEY\-\-\-\-\- +.fi +.RE +.PP +Retrieve the public half of a private key: +.PP +.RS +.nf +$ openssl genrsa 2048 | sshpk\-conv \-t ssh \-c foo@bar +ssh\-rsa AAAAB3NzaC1yc2EAAA...koK7 foo@bar +.fi +.RE +.PP +Convert a private key to PKCS#1 (OpenSSL) format from a new\-style OpenSSH key +format (the \fB\fCssh\-keygen \-o\fR format): +.PP +.RS +.nf +$ ssh\-keygen \-o \-f foobar +\&... +$ sshpk\-conv \-p \-t pkcs1 foobar +\-\-\-\-\-BEGIN RSA PRIVATE KEY\-\-\-\-\- +MIIDpAIBAAKCAQEA6T/GYJndb1TRH3+NL.... +\-\-\-\-\-END RSA PRIVATE KEY\-\-\-\-\- +.fi +.RE +.SH OPTIONS +.TP +\fB\fC\-i, \-\-identify\fR +Instead of converting the key, output identifying information about it to +stderr, including its type, size and fingerprints. +.TP +\fB\fC\-p, \-\-private\fR +Treat the key as a private key instead of a public key (the default). If you +supply \fB\fCsshpk\-conv\fR with a private key and do not give this option, it will +extract only the public half of the key from it and work with that. +.TP +\fB\fC\-f PATH, \-\-file=PATH\fR +Input file to take the key from instead of stdin. If a filename is supplied +as a positional argument, it is equivalent to using this option. +.TP +\fB\fC\-o PATH, \-\-out=PATH\fR +Output file name to use instead of stdout. +.PP +\fB\fC\-T FORMAT, \-\-informat=FORMAT\fR +.TP +\fB\fC\-t FORMAT, \-\-outformat=FORMAT\fR +Selects the input and output formats to be used (see FORMATS, below). +.TP +\fB\fC\-c TEXT, \-\-comment=TEXT\fR +Sets the key comment for the output file, if supported. +.SH FORMATS +.PP +Currently supported formats: +.TP +\fB\fCpem, pkcs1\fR +The standard PEM format used by older OpenSSH and most TLS libraries such as +OpenSSL. The classic \fB\fCid_rsa\fR file is usually in this format. It is an ASN.1 +encoded structure, base64\-encoded and placed between PEM headers. +.TP +\fB\fCssh\fR +The SSH public key text format (the format of an \fB\fCid_rsa.pub\fR file). A single +line, containing 3 space separated parts: the key type, key body and optional +key comment. +.TP +\fB\fCpkcs8\fR +A newer PEM format, usually used only for public keys by TLS libraries such +as OpenSSL. The ASN.1 structure is more generic than that of \fB\fCpkcs1\fR\&. +.TP +\fB\fCopenssh\fR +The new \fB\fCssh\-keygen \-o\fR format from OpenSSH. This can be mistaken for a PEM +encoding but is actually an OpenSSH internal format. +.TP +\fB\fCrfc4253\fR +The internal binary format of keys when sent over the wire in the SSH +protocol. This is also the format that the \fB\fCssh\-agent\fR uses in its protocol. +.SH SEE ALSO +.PP +.BR ssh-keygen (1), +.BR openssl (1) +.SH BUGS +.PP +Encrypted (password\-protected) keys are not supported. +.PP +Report bugs at Github +\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/man/man1/sshpk-sign.1 b/node_modules/sshpk/man/man1/sshpk-sign.1 new file mode 100644 index 000000000..749916ba8 --- /dev/null +++ b/node_modules/sshpk/man/man1/sshpk-sign.1 @@ -0,0 +1,81 @@ +.TH sshpk\-sign 1 "Jan 2016" sshpk "sshpk Commands" +.SH NAME +.PP +sshpk\-sign \- sign data using an SSH key +.SH SYNOPSYS +.PP +\fB\fCsshpk\-sign\fR \-i KEYPATH [OPTION...] +.SH DESCRIPTION +.PP +Takes in arbitrary bytes, and signs them using an SSH private key. The key can +be of any type or format supported by the \fB\fCsshpk\fR library, including the +standard OpenSSH formats, as well as PEM PKCS#1 and PKCS#8. +.PP +The signature is printed out in Base64 encoding, unless the \fB\fC\-\-binary\fR or \fB\fC\-b\fR +option is given. +.SH EXAMPLES +.PP +Signing with default settings: +.PP +.RS +.nf +$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa +MEUCIAMdLS/vXrrtWFepwe... +.fi +.RE +.PP +Signing in SSH (RFC 4253) format (rather than the default ASN.1): +.PP +.RS +.nf +$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \-t ssh +AAAAFGVjZHNhLXNoYTIt... +.fi +.RE +.PP +Saving the binary signature to a file: +.PP +.RS +.nf +$ printf 'foo' | sshpk\-sign \-i ~/.ssh/id_ecdsa \\ + \-o signature.bin \-b +$ cat signature.bin | base64 +MEUCIAMdLS/vXrrtWFepwe... +.fi +.RE +.SH OPTIONS +.TP +\fB\fC\-v, \-\-verbose\fR +Print extra information about the key and signature to stderr when signing. +.TP +\fB\fC\-b, \-\-binary\fR +Don't base64\-encode the signature before outputting it. +.TP +\fB\fC\-i KEY, \-\-identity=KEY\fR +Select the key to be used for signing. \fB\fCKEY\fR must be a relative or absolute +filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR library +is supported, including OpenSSH formats and standard PEM PKCS. +.TP +\fB\fC\-f PATH, \-\-file=PATH\fR +Input file to sign instead of stdin. +.TP +\fB\fC\-o PATH, \-\-out=PATH\fR +Output file to save signature in instead of stdout. +.TP +\fB\fC\-H HASH, \-\-hash=HASH\fR +Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR, +\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash +algorithms may be used (e.g. ED25519 keys can only use SHA\-512). +.TP +\fB\fC\-t FORMAT, \-\-format=FORMAT\fR +Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for +ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format +used with TLS and typically the standard in most non\-SSH libraries (e.g. +OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent. +.SH SEE ALSO +.PP +.BR sshpk-verify (1) +.SH BUGS +.PP +Report bugs at Github +\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/man/man1/sshpk-verify.1 b/node_modules/sshpk/man/man1/sshpk-verify.1 new file mode 100644 index 000000000..f79169d27 --- /dev/null +++ b/node_modules/sshpk/man/man1/sshpk-verify.1 @@ -0,0 +1,68 @@ +.TH sshpk\-verify 1 "Jan 2016" sshpk "sshpk Commands" +.SH NAME +.PP +sshpk\-verify \- verify a signature on data using an SSH key +.SH SYNOPSYS +.PP +\fB\fCsshpk\-verify\fR \-i KEYPATH \-s SIGNATURE [OPTION...] +.SH DESCRIPTION +.PP +Takes in arbitrary bytes and a Base64\-encoded signature, and verifies that the +signature was produced by the private half of the given SSH public key. +.SH EXAMPLES +.PP +.RS +.nf +$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s MEUCIQCYp... +OK +$ printf 'foo' | sshpk\-verify \-i ~/.ssh/id_ecdsa \-s GARBAGE... +NOT OK +.fi +.RE +.SH EXIT STATUS +.TP +\fB\fC0\fR +Signature validates and matches the key. +.TP +\fB\fC1\fR +Signature is parseable and the correct length but does not match the key or +otherwise is invalid. +.TP +\fB\fC2\fR +The signature or key could not be parsed. +.TP +\fB\fC3\fR +Invalid commandline options were supplied. +.SH OPTIONS +.TP +\fB\fC\-v, \-\-verbose\fR +Print extra information about the key and signature to stderr when verifying. +.TP +\fB\fC\-i KEY, \-\-identity=KEY\fR +Select the key to be used for verification. \fB\fCKEY\fR must be a relative or +absolute filesystem path to the key file. Any format supported by the \fB\fCsshpk\fR +library is supported, including OpenSSH formats and standard PEM PKCS. +.TP +\fB\fC\-s BASE64, \-\-signature=BASE64\fR +Supplies the base64\-encoded signature to be verified. +.TP +\fB\fC\-f PATH, \-\-file=PATH\fR +Input file to verify instead of stdin. +.TP +\fB\fC\-H HASH, \-\-hash=HASH\fR +Set the hash algorithm to be used for signing. This should be one of \fB\fCsha1\fR, +\fB\fCsha256\fR or \fB\fCsha512\fR\&. Some key types may place restrictions on which hash +algorithms may be used (e.g. ED25519 keys can only use SHA\-512). +.TP +\fB\fC\-t FORMAT, \-\-format=FORMAT\fR +Choose the signature format to use, from \fB\fCasn1\fR, \fB\fCssh\fR or \fB\fCraw\fR (only for +ED25519 signatures). The \fB\fCasn1\fR format is the default, as it is the format +used with TLS and typically the standard in most non\-SSH libraries (e.g. +OpenSSL). The \fB\fCssh\fR format is used in the SSH protocol and by the ssh\-agent. +.SH SEE ALSO +.PP +.BR sshpk-sign (1) +.SH BUGS +.PP +Report bugs at Github +\[la]https://github.com/arekinath/node-sshpk/issues\[ra] diff --git a/node_modules/sshpk/node_modules/assert-plus/AUTHORS b/node_modules/sshpk/node_modules/assert-plus/AUTHORS new file mode 100644 index 000000000..1923524fe --- /dev/null +++ b/node_modules/sshpk/node_modules/assert-plus/AUTHORS @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/node_modules/sshpk/node_modules/assert-plus/CHANGES.md b/node_modules/sshpk/node_modules/assert-plus/CHANGES.md new file mode 100644 index 000000000..57d92bfdb --- /dev/null +++ b/node_modules/sshpk/node_modules/assert-plus/CHANGES.md @@ -0,0 +1,14 @@ +# assert-plus Changelog + +## 1.0.0 + +- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input +- Add assert.finite check. Previous assert.number callers should use this if + they expect Infinity inputs to throw. + +## 0.2.0 + +- Fix `assert.object(null)` so it throws +- Fix optional/arrayOf exports for non-type-of asserts +- Add optiona/arrayOf exports for Stream/Date/Regex/uuid +- Add basic unit test coverage diff --git a/node_modules/sshpk/node_modules/assert-plus/README.md b/node_modules/sshpk/node_modules/assert-plus/README.md new file mode 100644 index 000000000..ec200d161 --- /dev/null +++ b/node_modules/sshpk/node_modules/assert-plus/README.md @@ -0,0 +1,162 @@ +# assert-plus + +This library is a super small wrapper over node's assert module that has two +things: (1) the ability to disable assertions with the environment variable +NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like +`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks +like this: + +```javascript + var assert = require('assert-plus'); + + function fooAccount(options, callback) { + assert.object(options, 'options'); + assert.number(options.id, 'options.id'); + assert.bool(options.isManager, 'options.isManager'); + assert.string(options.name, 'options.name'); + assert.arrayOfString(options.email, 'options.email'); + assert.func(callback, 'callback'); + + // Do stuff + callback(null, {}); + } +``` + +# API + +All methods that *aren't* part of node's core assert API are simply assumed to +take an argument, and then a string 'name' that's not a message; `AssertionError` +will be thrown if the assertion fails with a message like: + + AssertionError: foo (string) is required + at test (/home/mark/work/foo/foo.js:3:9) + at Object. (/home/mark/work/foo/foo.js:15:1) + at Module._compile (module.js:446:26) + at Object..js (module.js:464:10) + at Module.load (module.js:353:31) + at Function._load (module.js:311:12) + at Array.0 (module.js:484:10) + at EventEmitter._tickCallback (node.js:190:38) + +from: + +```javascript + function test(foo) { + assert.string(foo, 'foo'); + } +``` + +There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: + +```javascript + function test(foo) { + assert.arrayOfString(foo, 'foo'); + } +``` + +You can assert IFF an argument is not `undefined` (i.e., an optional arg): + +```javascript + assert.optionalString(foo, 'foo'); +``` + +Lastly, you can opt-out of assertion checking altogether by setting the +environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have +lots of assertions, and don't want to pay `typeof ()` taxes to v8 in +production. Be advised: The standard functions re-exported from `assert` are +also disabled in assert-plus if NDEBUG is specified. Using them directly from +the `assert` module avoids this behavior. + +The complete list of APIs is: + +* assert.array +* assert.bool +* assert.buffer +* assert.func +* assert.number +* assert.finite +* assert.object +* assert.string +* assert.stream +* assert.date +* assert.regexp +* assert.uuid +* assert.arrayOfArray +* assert.arrayOfBool +* assert.arrayOfBuffer +* assert.arrayOfFunc +* assert.arrayOfNumber +* assert.arrayOfFinite +* assert.arrayOfObject +* assert.arrayOfString +* assert.arrayOfStream +* assert.arrayOfDate +* assert.arrayOfRegexp +* assert.arrayOfUuid +* assert.optionalArray +* assert.optionalBool +* assert.optionalBuffer +* assert.optionalFunc +* assert.optionalNumber +* assert.optionalFinite +* assert.optionalObject +* assert.optionalString +* assert.optionalStream +* assert.optionalDate +* assert.optionalRegexp +* assert.optionalUuid +* assert.optionalArrayOfArray +* assert.optionalArrayOfBool +* assert.optionalArrayOfBuffer +* assert.optionalArrayOfFunc +* assert.optionalArrayOfNumber +* assert.optionalArrayOfFinite +* assert.optionalArrayOfObject +* assert.optionalArrayOfString +* assert.optionalArrayOfStream +* assert.optionalArrayOfDate +* assert.optionalArrayOfRegexp +* assert.optionalArrayOfUuid +* assert.AssertionError +* assert.fail +* assert.ok +* assert.equal +* assert.notEqual +* assert.deepEqual +* assert.notDeepEqual +* assert.strictEqual +* assert.notStrictEqual +* assert.throws +* assert.doesNotThrow +* assert.ifError + +# Installation + + npm install assert-plus + +## License + +The MIT License (MIT) +Copyright (c) 2012 Mark Cavage + +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. + +## Bugs + +See . diff --git a/node_modules/sshpk/node_modules/assert-plus/assert.js b/node_modules/sshpk/node_modules/assert-plus/assert.js new file mode 100644 index 000000000..26f944eec --- /dev/null +++ b/node_modules/sshpk/node_modules/assert-plus/assert.js @@ -0,0 +1,211 @@ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg); + } + }, + finite: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/sshpk/node_modules/assert-plus/package.json b/node_modules/sshpk/node_modules/assert-plus/package.json new file mode 100644 index 000000000..40d6a5cd8 --- /dev/null +++ b/node_modules/sshpk/node_modules/assert-plus/package.json @@ -0,0 +1,23 @@ +{ + "author": "Mark Cavage ", + "name": "assert-plus", + "description": "Extra assertions on top of node's assert module", + "version": "1.0.0", + "license": "MIT", + "main": "./assert.js", + "devDependencies": { + "tape": "4.2.2", + "faucet": "0.0.1" + }, + "optionalDependencies": {}, + "scripts": { + "test": "./node_modules/.bin/tape tests/*.js | ./node_modules/.bin/faucet" + }, + "repository": { + "type": "git", + "url": "https://github.com/mcavage/node-assert-plus.git" + }, + "engines": { + "node": ">=0.8" + } +} diff --git a/node_modules/sshpk/package.json b/node_modules/sshpk/package.json new file mode 100644 index 000000000..967a8d3fe --- /dev/null +++ b/node_modules/sshpk/package.json @@ -0,0 +1,60 @@ +{ + "name": "sshpk", + "version": "1.17.0", + "description": "A library for finding and using SSH public keys", + "main": "lib/index.js", + "scripts": { + "test": "tape test/*.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/joyent/node-sshpk.git" + }, + "author": "Joyent, Inc", + "contributors": [ + { + "name": "Dave Eddy", + "email": "dave@daveeddy.com" + }, + { + "name": "Mark Cavage", + "email": "mcavage@gmail.com" + }, + { + "name": "Alex Wilson", + "email": "alex@cooperi.net" + } + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/arekinath/node-sshpk/issues" + }, + "engines": { + "node": ">=0.10.0" + }, + "directories": { + "bin": "./bin", + "lib": "./lib", + "man": "./man/man1" + }, + "homepage": "https://github.com/arekinath/node-sshpk#readme", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "dashdash": "^1.12.0", + "getpass": "^0.1.1", + "safer-buffer": "^2.0.2", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0", + "ecc-jsbn": "~0.1.1", + "bcrypt-pbkdf": "^1.0.0" + }, + "optionalDependencies": { + }, + "devDependencies": { + "tape": "^3.5.0", + "benchmark": "^1.0.0", + "sinon": "^1.17.2", + "temp": "^0.8.2" + } +} diff --git a/node_modules/stringstream/.travis.yml b/node_modules/stringstream/.travis.yml new file mode 100644 index 000000000..f1d0f13c8 --- /dev/null +++ b/node_modules/stringstream/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/node_modules/stringstream/LICENSE.txt b/node_modules/stringstream/LICENSE.txt new file mode 100644 index 000000000..ab861acdc --- /dev/null +++ b/node_modules/stringstream/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (c) 2012 Michael Hart (michael.hart.au@gmail.com) + +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. diff --git a/node_modules/stringstream/README.md b/node_modules/stringstream/README.md new file mode 100644 index 000000000..32fc98255 --- /dev/null +++ b/node_modules/stringstream/README.md @@ -0,0 +1,38 @@ +# Decode streams into strings The Right Way(tm) + +```javascript +var fs = require('fs') +var zlib = require('zlib') +var strs = require('stringstream') + +var utf8Stream = fs.createReadStream('massiveLogFile.gz') + .pipe(zlib.createGunzip()) + .pipe(strs('utf8')) +``` + +No need to deal with `setEncoding()` weirdness, just compose streams +like they were supposed to be! + +Handles input and output encoding: + +```javascript +// Stream from utf8 to hex to base64... Why not, ay. +var hex64Stream = fs.createReadStream('myFile') + .pipe(strs('utf8', 'hex')) + .pipe(strs('hex', 'base64')) +``` + +Also deals with `base64` output correctly by aligning each emitted data +chunk so that there are no dangling `=` characters: + +```javascript +var stream = fs.createReadStream('myFile').pipe(strs('base64')) + +var base64Str = '' + +stream.on('data', function(data) { base64Str += data }) +stream.on('end', function() { + console.log('My base64 encoded file is: ' + base64Str) // Wouldn't work with setEncoding() + console.log('Original file is: ' + new Buffer(base64Str, 'base64')) +}) +``` diff --git a/node_modules/stringstream/example.js b/node_modules/stringstream/example.js new file mode 100644 index 000000000..f82b85edc --- /dev/null +++ b/node_modules/stringstream/example.js @@ -0,0 +1,27 @@ +var fs = require('fs') +var zlib = require('zlib') +var strs = require('stringstream') + +var utf8Stream = fs.createReadStream('massiveLogFile.gz') + .pipe(zlib.createGunzip()) + .pipe(strs('utf8')) + +utf8Stream.pipe(process.stdout) + +// Stream from utf8 to hex to base64... Why not, ay. +var hex64Stream = fs.createReadStream('myFile') + .pipe(strs('utf8', 'hex')) + .pipe(strs('hex', 'base64')) + +hex64Stream.pipe(process.stdout) + +// Deals with base64 correctly by aligning chunks +var stream = fs.createReadStream('myFile').pipe(strs('base64')) + +var base64Str = '' + +stream.on('data', function(data) { base64Str += data }) +stream.on('end', function() { + console.log('My base64 encoded file is: ' + base64Str) // Wouldn't work with setEncoding() + console.log('Original file is: ' + new Buffer(base64Str, 'base64')) +}) diff --git a/node_modules/stringstream/package.json b/node_modules/stringstream/package.json new file mode 100644 index 000000000..09f720c6e --- /dev/null +++ b/node_modules/stringstream/package.json @@ -0,0 +1,18 @@ +{ + "name": "stringstream", + "version": "0.0.6", + "description": "Encode and decode streams into string streams", + "author": "Michael Hart (http://github.com/mhart)", + "main": "stringstream.js", + "keywords": [ + "string", + "stream", + "base64", + "gzip" + ], + "repository": { + "type": "git", + "url": "https://github.com/mhart/StringStream.git" + }, + "license": "MIT" +} diff --git a/node_modules/stringstream/stringstream.js b/node_modules/stringstream/stringstream.js new file mode 100644 index 000000000..6732b9d94 --- /dev/null +++ b/node_modules/stringstream/stringstream.js @@ -0,0 +1,102 @@ +var util = require('util') +var Stream = require('stream') +var StringDecoder = require('string_decoder').StringDecoder + +module.exports = StringStream +module.exports.AlignedStringDecoder = AlignedStringDecoder + +function StringStream(from, to) { + if (!(this instanceof StringStream)) return new StringStream(from, to) + + Stream.call(this) + + if (from == null) from = 'utf8' + + this.readable = this.writable = true + this.paused = false + this.toEncoding = (to == null ? from : to) + this.fromEncoding = (to == null ? '' : from) + this.decoder = new AlignedStringDecoder(this.toEncoding) +} +util.inherits(StringStream, Stream) + +StringStream.prototype.write = function(data) { + if (!this.writable) { + var err = new Error('stream not writable') + err.code = 'EPIPE' + this.emit('error', err) + return false + } + if (this.fromEncoding) { + if (Buffer.isBuffer(data) || typeof data === 'number') data = data.toString() + data = new Buffer(data, this.fromEncoding) + } + var string = this.decoder.write(data) + if (string.length) this.emit('data', string) + return !this.paused +} + +StringStream.prototype.flush = function() { + if (this.decoder.flush) { + var string = this.decoder.flush() + if (string.length) this.emit('data', string) + } +} + +StringStream.prototype.end = function() { + if (!this.writable && !this.readable) return + this.flush() + this.emit('end') + this.writable = this.readable = false + this.destroy() +} + +StringStream.prototype.destroy = function() { + this.decoder = null + this.writable = this.readable = false + this.emit('close') +} + +StringStream.prototype.pause = function() { + this.paused = true +} + +StringStream.prototype.resume = function () { + if (this.paused) this.emit('drain') + this.paused = false +} + +function AlignedStringDecoder(encoding) { + StringDecoder.call(this, encoding) + + switch (this.encoding) { + case 'base64': + this.write = alignedWrite + this.alignedBuffer = new Buffer(3) + this.alignedBytes = 0 + break + } +} +util.inherits(AlignedStringDecoder, StringDecoder) + +AlignedStringDecoder.prototype.flush = function() { + if (!this.alignedBuffer || !this.alignedBytes) return '' + var leftover = this.alignedBuffer.toString(this.encoding, 0, this.alignedBytes) + this.alignedBytes = 0 + return leftover +} + +function alignedWrite(buffer) { + var rem = (this.alignedBytes + buffer.length) % this.alignedBuffer.length + if (!rem && !this.alignedBytes) return buffer.toString(this.encoding) + + var returnBuffer = new Buffer(this.alignedBytes + buffer.length - rem) + + this.alignedBuffer.copy(returnBuffer, 0, 0, this.alignedBytes) + buffer.copy(returnBuffer, this.alignedBytes, 0, buffer.length - rem) + + buffer.copy(this.alignedBuffer, 0, buffer.length - rem, buffer.length) + this.alignedBytes = rem + + return returnBuffer.toString(this.encoding) +} diff --git a/node_modules/strip-indent/index.js b/node_modules/strip-indent/index.js new file mode 100644 index 000000000..c90b2659b --- /dev/null +++ b/node_modules/strip-indent/index.js @@ -0,0 +1,14 @@ +'use strict'; +module.exports = str => { + const match = str.match(/^[ \t]*(?=\S)/gm); + + if (!match) { + return str; + } + + // TODO: use spread operator when targeting Node.js 6 + const indent = Math.min.apply(Math, match.map(x => x.length)); // eslint-disable-line + const re = new RegExp(`^[ \\t]{${indent}}`, 'gm'); + + return indent > 0 ? str.replace(re, '') : str; +}; diff --git a/node_modules/strip-indent/license b/node_modules/strip-indent/license new file mode 100644 index 000000000..654d0bfe9 --- /dev/null +++ b/node_modules/strip-indent/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +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. diff --git a/node_modules/strip-indent/package.json b/node_modules/strip-indent/package.json new file mode 100644 index 000000000..334dc8b7f --- /dev/null +++ b/node_modules/strip-indent/package.json @@ -0,0 +1,41 @@ +{ + "name": "strip-indent", + "version": "2.0.0", + "description": "Strip leading whitespace from each line in a string", + "license": "MIT", + "repository": "sindresorhus/strip-indent", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=4" + }, + "scripts": { + "test": "xo && ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "strip", + "indent", + "indentation", + "normalize", + "remove", + "delete", + "whitespace", + "space", + "tab", + "string", + "str" + ], + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "xo": { + "esnext": true + } +} diff --git a/node_modules/strip-indent/readme.md b/node_modules/strip-indent/readme.md new file mode 100644 index 000000000..db979cd1e --- /dev/null +++ b/node_modules/strip-indent/readme.md @@ -0,0 +1,44 @@ +# strip-indent [![Build Status](https://travis-ci.org/sindresorhus/strip-indent.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-indent) + +> Strip leading whitespace from each line in a string + +The line with the least number of leading whitespace, ignoring empty lines, determines the number to remove. + +Useful for removing redundant indentation. + + +## Install + +``` +$ npm install --save strip-indent +``` + + +## Usage + +```js +const stripIndent = require('strip-indent'); + +const str = '\tunicorn\n\t\tcake'; +/* + unicorn + cake +*/ + +stripIndent('\tunicorn\n\t\tcake'); +/* +unicorn + cake +*/ +``` + + +## Related + +- [strip-indent-cli](https://github.com/sindresorhus/strip-indent-cli) - CLI for this module +- [indent-string](https://github.com/sindresorhus/indent-string) - Indent each line in a string + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/taskgroup/.dependabot/config.yml b/node_modules/taskgroup/.dependabot/config.yml new file mode 100644 index 000000000..dbe73b7fe --- /dev/null +++ b/node_modules/taskgroup/.dependabot/config.yml @@ -0,0 +1,9 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: live + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/taskgroup/.github/FUNDING.yml b/node_modules/taskgroup/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/taskgroup/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/taskgroup/HISTORY.md b/node_modules/taskgroup/HISTORY.md new file mode 100755 index 000000000..5a834737d --- /dev/null +++ b/node_modules/taskgroup/HISTORY.md @@ -0,0 +1,300 @@ +# History + +## v5.5.0 2019 November 11 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v5.4.0 2018 November 20 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://github.com/bevry/editions) using [boundation](https://github.com/bevry/boundation) +- Updated dependencies + +## v5.3.0 2018 July 20 + +- `clearRemaining` now returns the number of dropped items, `clear` continues to be chainable + +## v5.2.0 2018 July 20 + +- state of taskgroup is now updated before user events are emitted, to accurately represent current state + - this splits `itemDoneCallback` into `itemDoneCallbackUpdateState` and `itemDoneCallbackNextState` +- nested events are now all bound at the same time +- `task.add`, `group.add`, and `item.add` are now all emitted at the same time + +## v5.1.0 2018 July 13 + +- Add support for [unbounded](https://github.com/bevry/unbounded) +- If a task completed, but had already completed earlier, we will now try to output the task's source for easier debugging + +## v5.0.2 2018 July 13 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://github.com/bevry/editions) using [boundation](https://github.com/bevry/boundation) +- Updated dependencies + +## v5.0.1 2016 June 13 + +- Added `clear` to `clearRemaining` alias for backwards compatibility between v4 and v5 + +## v5.0.0 2016 June 4 + +- Changes to be impressed by: + + - Dramatic performance improvements + - Improved performance of 10,000 tasks from 13 seconds to 1 seconds + - Improved memory footprint of 10,000 tasks from 130MB to 4MB (taken during completion event) + - Code has moved from CoffeeScript to ESNext + - Documentation is now powered by JSDoc + - Module is published with [Editions](https://github.com/bevry/editions) + +- Changes to be cautious about: + + - Packaging: + - `require('taskgroup')` is no longer the TaskGroup class, you must again do `require('taskgroup').TaskGroup` + - It was too difficult to handle this across multiple environments without polluting scopes + - Task and TaskGroup: + - Once done, the item is now destroyed by default via the `destroyOnceDone` configuration option + - This means to add tasks to an already completed TaskGroup, you will need to set `destroyOnceDone` to `false` + - This will be a silent problem, unless coupled with a `pauseOnError`, `onError` or `onExit` deprecation error + - Running and completed tasks are no longer stored + - Completed items are now destroyed by default via TaskGroup's `destroyDoneItems` configuration option + - If you wish to store them, use the event listeners and disable `destroyDoneItems` + - `destroy()` now operates instantly, including removing all event listeners + - So if you did `.done().destroy().done()` the first done listener would be discarded + - Removed `exit()` method and `exit` configuration option + - They were complex, ambiguous, and undocumented + - `errorOnExcessCompletions` and `destroyOnceDone` configuration options are now provided + - Replaced `onError` and `pauseOnError` configuration options with `abortOnError` for better clarity + - Having two or more configuration options for this ability was overly complex + - Removed `sync` configuration option + - It was complex and only had one use case, which turned out was [better accomplished without it](https://github.com/bevry/safeps/releases/tag/v6.2.0) + - Renamed `includeInResults` configuration option to `storeResult` with improved functionality + - If `destroyOnceDone` is `true`, `storeResult` will default to `false` + - `done()`, `onceDone()`, and `whenDone()` now only listen for upcoming completions, rather than past + - Listening for past completions was too complex and could never guarantee consistent results + - `timeout` configuration option has been removed + - It is actually best and easily accomplished by your own task methods + - Removed configuration options will throw deprecation errors to ease migration + - TaskGroup: + - `results` state property renamed to `result` + - `addGroup()` method is now `addTaskGroup()`, alias provided + - Split `nestedConfig` configuration option into `nestedTaskConfig` and `nestedTaskGroupConfig` + +- Changes to be aware of: + + - Task and TaskGroup: + - `started` event has been split into `pending` and `running` events for more accurate semantics + - Less used public APIs have now been marked as `private` or `public` depending on their use cases + - `getNames` method has been replaced by just `names` getter, which has its own `toString()` method that makes use of the `nameSeparator` configuration option, alias provided + - `getConfig()` method now `config` getter, alias provided + - `isCompleted() method now`completed` getter, alias provided + - `hasStarted()` method now `started` getter, alias provided + - TaskGroup: + - `getTotalItems()` method now `totalItems` getter, alias provided + - `getItemTotals()` method now `itemTotals getter, alias provided + - Task: + - If `domain` configuration option is `true` and domains are not available, an error will result + - More accurate error reporting for `completion` event + - It a state error occurred, but a argument error did not, it is possible this would not be reported to our done listener, this has been resolved + - done listener's error argument will now always be the stored error + - internal `result` storage now is stored without the error/first argument, as that is stored elsewhere + +- People to thank: + + - [Peter Flannery](https://github.com/pflannery) for kickstarting the performance research and making it a priority + +- Issues closed: + - [An unusually large amount of memory usage - issue #19](https://github.com/bevry/taskgroup/issues/19) + - [Disabled optimisation issue: "bad value context for arguments value - issue #12](https://github.com/bevry/taskgroup/issues/12) + +## v4.3.1 2015 December 10 + +- Removed `cyclic.js` as the problem it solved was solved by npm v2 and above + +## v4.3.0 2015 March 15 + +- Now exports the TaskGroup class, of which `Task` and `TaskGroup` are now children +- Added `Task` attribute on the TaskGroup class to allow over-riding of what should be the sub-task class +- Added `TaskGroup` attribute on the TaskGroup class to allow over-riding of what should be the sub-taskgroup class +- Added the `sync` configuration option, which when set to `true` will allow the execution of a Task or TaskGroup to execute synchronously +- Updated dependencies + +## v4.2.1 2015 February 20 + +- Output more information about errors when a task completes twice + +## v4.2.0 2015 February 2 + +- Reintroduced `try...catch` for Node v0.8 and browser environments with a workaround to prevent error suppression + - Thanks to [kksharma1618](https://github.com/kksharma1618) for [issue #17](https://github.com/bevry/taskgroup/issues/17) + - Closes [issue #18](https://github.com/bevry/taskgroup/issues/17) +- You can now ignore all the warnings from the v4.1.0 changelog as the behaviour is more or less the same as v4.0.5 but with added improvements + +## v4.1.0 2015 February 2 + +- This release fixes the errors in completion callbacks being swallowed/lost + - Thanks to [kksharma1618](https://github.com/kksharma1618) for [issue #17](https://github.com/bevry/taskgroup/issues/17) +- The following changes have been made + - We no longer use `try...catch` at all, if you want error catching in your task, you must not disable domains (they are enabled by default) - [why?](https://github.com/bevry/taskgroup/issues/17#issuecomment-72383610) + - We now force exit the domain when the task's method calls its completion callback + - Domains now wrap only the firing of the task's method, rather than the preparation too as before + - Removed superflous check to ensure a task has a method before execution + - Ensured the actual check to ensure a task has a method before execution also checks if the method is actually a function (via checking for `.bind`) as the superflous check did +- This **could** introduce the following issues in the following cases: + - You may get errors that were suppressed before now showing themselves, this is good, but it may cause unexpected things to break loudly that were breaking silently before + - If you have domains disabled and an error is thrown, you will get a different flow of logic than before as the error will be caught in your code, not TaskGroup's + - The domain's flow has improved, but this may cause a different flow than you were expecting previously +- This **will** introduce the following issues in the following cases: + - If you are still on Node v0.8, synchronous errors and perhaps asynchronous errors thrown within your task method will no longer be caught by TaskGroup (due to Node 0.8's crippled domain functionality) and instead will need to be caught by your code either via preferably sent to the task method's completion callback rather than thrown, or via your own try...catch. But please upgrade to Node 0.10 or higher. + - If you are running TaskGroup in a web browser, you will need to catch errors manually or utilise a domain shim (browserify has one by default) - [why?](https://github.com/bevry/taskgroup/issues/18) +- In other words, this release is the most stable yet, but do run your tests (you should always do this) + +## v4.0.5 2014 August 3 + +- Changed an error output to be of error type + +## v4.0.4 2014 August 3 + +- Added the ability to turn off using domains by setting the new task option `domain` to `false` (defaults to `true`) +- Added the ability to turn off using [ambi](https://github.com/bevry/ambi) by setting the new task option `ambi` to `false` (defaults to `true`) + +## v4.0.3 2014 July 11 + +- Use `setImmediate` instead of `nextTick` to avoid `(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.` errors +- Updated dependencies + +## v4.0.2 2014 June 18 + +- Added support for `done`, `whenDone`, `onceDone`, `once`, and `on` configuration options + +## v4.0.1 2014 June 16 + +- Fixed `Recursive process.nextTick detected` error (regression since v4.0.0) + +## v4.0.0 2014 June 16 + +- Significant rewrite with b/c breaks + - Completion listeners should now be accomplished via `.done(listener)` (listens once) or `.whenDone(listener)` (listener persists) + - These methods are promises in that they will execute the listener if the item is already complete + - They listen for the `done` event + - The execution of tasks and groups have had a great deal of investment to ensure execution is intuitive and consistent across different use cases + - Refer to to `src/lib/test/taskgroup-usage-test.coffee` for the guaranteed expectations across different scenarios + - In earlier versions you could use `tasks.exit()` during execution to clear remaning items, stop execution, and exit, you can no longer do this, instead use the completion callback with an error, or call `tasks.clear()` then the completion callback + - Refer to the [new public api docs](http://learn.bevry.me/taskgroup/api) for the latest usage +- Changes + - `complete` event is now `completed`, but you really should be using the new `done` event or the promise methods + - `run` event is now `started` + - A lot of internal variables and methods have had their functionality changed or removed, if a method or variable is not in the [public api](http://learn.bevry.me/taskgroup/api), do not use it + - There is now a default `error` and `completed` listener that will emit the `done` event if there are listeners for it, if there is no `done` event listeners, and an error has occured, we will throw the error + - Tasks and groups will now only receive a default name when required, this is to prevent set names from being over-written by the default + - Adding of tasks and groups to a group instance will now return the group instance rather than the added tasks to ensure chainability, if you want the created tasks, use `.createTask(...)` and `.createGroup(...)` instead, then add the result manually +- Introductions + - `passed`, `failed`, `destroyed` events are new + - Task only + - new `timeout` option that accepts a number of milliseconds to wait before throwing an error + - new `onError` option that defaults to `'exit'` but can also accept `'ignore'` which will ignore duplicated exit errors (useful when combined with timeout event) + - TaskGroup only + - new `onError` option that defaults to `'exit'` but can also accept `'ignore'` which will ignore all task errors + - new `setNestedConfig(config)` and `setNestedTaskConfig(config)` options to set configuration for all children + +## v3.4.0 2014 May 8 + +- Added `context` option for Task, to perform a late bind on the method +- Asynchronous task methods can now accept optional arguments thanks to new [ambi](https://github.com/bevry/ambi) version +- Updated dependencies + +## v3.3.9 2014 May 4 + +- Added [extendonclass](https://github.com/bevry/extendonclass) support +- Added `Task.create` and `TaskGroup.create` helpers +- Will no longer fail if an invalid argument is passed as configuration +- Updated dependencies + +## v3.3.8 2014 February 5 + +- More descriptive error when a task is fired without a method to fire + +## v3.3.7 2014 January 30 + +- Improvements around adding tasks to task groups and passing arguments to Task and TaskGroup constructors + +## v3.3.6 2013 November 29 + +- Properly fixed v3.3.3 issue while maintaining node.js v0.8 and browserify support + - Thanks to [pflannery](https://github.com/pflannery) for [pull request #11](https://github.com/bevry/taskgroup/pull/11) + +## v3.3.5 2013 November 28 + +- Re-added Node.js v0.8 support (regression since v3.3.3) + +## v3.3.4 2013 November 27 + +- Fixed the v3.3.3 fix + +## v3.3.3 2013 November 27 + +- Fixed possible "(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral." error under certain circumstances + +## v3.3.2 2013 November 19 + +- Don't add or create empty tasks and groups + +## v3.3.1 2013 November 6 + +- Fixed child event bubbling by using duck typing (regression since v3.3.0) +- Better error handling on uncaught task exceptions +- Tasks will now get a default name set to ease debugging + +## v3.3.0 2013 November 1 + +- Bindings are now more explicit +- Improved configuration parsing +- Configuration is now accessed via `getConfig()` +- Dropped component.io and bower support, just use ender or browserify + +## v3.2.4 2013 October 27 + +- Re-packaged + +## v3.2.3 2013 September 18 + +- Fixed cyclic dependency problem on windows (since v2.1.3) +- Added bower support + +## v3.2.2 2013 September 18 + +- Component.io compatibility + +## v3.2.1 2013 August 19 + +- Republish with older version of joe dev dependency to try and stop cyclic errors +- Better node 0.8 support when catching thrown errors + +## v3.2.0 2013 August 19 + +- Wrapped Task execution in a domain to catch uncaught errors within the task execution, as well as added checks to ensure the completion callback does not fire multiple times + - These will be reported via the `error` event that the Task will emit + - If the Task is part of a TaskGroup, the TaskGroup will listen for this, kill the TaskGroup and emit an `error` event on the TaskGroup +- Moved from EventEmitter2 to node's own EventEmitter to ensure domain compatibility + +## v3.1.2 2013 April 6 + +- Added `getTotals()` to `TaskGroup` +- Added `complete()` to `Task` + +## v3.1.1 2013 April 5 + +- Fixed task run issue under certain circumstances +- Added `exit(err)` function + +## v3.1.0 2013 April 5 + +- Tasks can now have the arguments that are sent to them customized by the `args` configuration option +- Group inline functions now support an optional completion callback +- Group events for items now have their first argument as the item the event was for + +## v3.0.0 2013 April 5 + +- Significant rewrite and b/c break + +## v2.0.0 2013 March 27 + +- Split from [bal-util](https://github.com/balupton/bal-util) / [bal-util history](https://github.com/balupton/bal-util/blob/master/HISTORY.md#files) diff --git a/node_modules/taskgroup/LICENSE.md b/node_modules/taskgroup/LICENSE.md new file mode 100644 index 000000000..c69ffc0e0 --- /dev/null +++ b/node_modules/taskgroup/LICENSE.md @@ -0,0 +1,24 @@ + + +

      License

      + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

      MIT License

      + +
      +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 (including the next paragraph) 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.
      +
      + + diff --git a/node_modules/taskgroup/README.md b/node_modules/taskgroup/README.md new file mode 100755 index 000000000..4b10b55ff --- /dev/null +++ b/node_modules/taskgroup/README.md @@ -0,0 +1,155 @@ + + +

      TaskGroup

      + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
      +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Group together synchronous and asynchronous tasks and execute them with support for concurrency, naming, and nesting. + + + + + + +

      Install

      + +

      npm

      +
        +
      • Install: npm install --save taskgroup
      • +
      • Require: require('taskgroup')
      • +
      + +

      jspm

      + +``` html + +``` + +

      Editions

      + +

      This package is published with the following editions:

      + +
      • taskgroup aliases taskgroup/index.js which uses Editions to automatically select the correct edition for the consumers environment
      • +
      • taskgroup/source/index.js is esnext source code with require for modules
      • +
      • taskgroup/edition-browsers/index.js is esnext compiled for browsers with require for modules
      • +
      • taskgroup/edition-node-0.8/index.js is esnext compiled for node.js 0.8 with require for modules
      + +

      TypeScript

      + +This project provides its type information via inline JSDoc Comments. To make use of this in TypeScript, set your maxNodeModuleJsDepth compiler option to `5` or thereabouts. You can accomlish this via your `tsconfig.json` file like so: + +``` json +{ + "compilerOptions": { + "maxNodeModuleJsDepth": 5 + } +} +``` + + + + +## Usage + +[Documentation.](https://gitbook.bevry.me/taskgroup/) + +[Technical API Documentation.](http://master.taskgroup.bevry.surge.sh/docs/) + +[Web Demonstration.](http://master.taskgroup.bevry.surge.sh/web/) + + + + +

      History

      + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

      Contribute

      + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      Backers

      + +

      Maintainers

      + +These amazing people are maintaining this project: + + + +

      Sponsors

      + +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

      Contributors

      + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      License

      + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/taskgroup/edition-browsers/index.js b/node_modules/taskgroup/edition-browsers/index.js new file mode 100644 index 000000000..f8f7adf94 --- /dev/null +++ b/node_modules/taskgroup/edition-browsers/index.js @@ -0,0 +1,12 @@ +'use strict'; + +var _require = require('./task.js'), + Task = _require.Task; + +var _require2 = require('./taskgroup.js'), + TaskGroup = _require2.TaskGroup; + +module.exports = { + Task: Task, + TaskGroup: TaskGroup +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-browsers/interface.js b/node_modules/taskgroup/edition-browsers/interface.js new file mode 100644 index 000000000..7028bbf83 --- /dev/null +++ b/node_modules/taskgroup/edition-browsers/interface.js @@ -0,0 +1,255 @@ +'use strict'; +/** +Base class containing common functionality for {@link Task} and {@link TaskGroup}. + +Adds support for the done event while +ensuring that errors are always handled correctly. +It does this by listening to the `error` and `completed` events, +and when the emit, we check if there is a `done` listener: + +- if there is, then emit the done event with the original event arguments +- if there isn't, then output the error to stderr and throw it. + +Sets the following configuration: + +- `nameSeparator` defaults to `' ➞ '`, used to stringify the result of `.names` + +@class BaseInterface +@extends EventEmitter +@constructor +@access private +*/ + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var BaseInterface = +/*#__PURE__*/ +function (_require$EventEmitter) { + _inherits(BaseInterface, _require$EventEmitter); + + function BaseInterface() { + var _this; + + _classCallCheck(this, BaseInterface); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseInterface).call(this)); // Allow extensions of this class to prepare the class instance before anything else fires + + if (_this.prepare) { + _this.prepare(); + } // Set state and config + + + if (_this.state == null) _this.state = {}; + if (_this.config == null) _this.config = {}; + if (_this.config.nameSeparator == null) _this.config.nameSeparator = ' ➞ '; // Generate our listener method that we will beind to different events + // to add support for the `done` event and better error/event handling + + function listener(event) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // Prepare + var error = args[0]; // has done listener, forward to that + + if (this.listeners('done').length !== 0) { + this.emit.apply(this, ['done'].concat(args)); + } // has error, but no done listener and no event listener, throw error + else if (error && this.listeners(event).length === 1) { + if (event === 'error') { + throw error; + } else { + this.emit('error', error); + } + } + } // Listen to the different events without listener + + + _this.on('error', listener.bind(_assertThisInitialized(_this), 'error')); + + _this.on('completed', listener.bind(_assertThisInitialized(_this), 'completed')); // this.on('halted', listener.bind(this, 'halted')) + // ^ @TODO not yet implemented, would be an alternative to pausing + + + return _this; + } + /** + Creates and returns new instance of the current class. + @param {...*} args - The arguments to be forwarded along to the constructor. + @return {BaseInterface} The new instance. + @static + @access public + */ + + + _createClass(BaseInterface, [{ + key: "whenDone", + + /** + Attaches the listener to the `done` event to be emitted each time. + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + value: function whenDone(listener) { + // Attach the listener + this.on('done', listener.bind(this)); // Chain + + return this; + } + /** + Attaches the listener to the `done` event to be emitted only once, then removed to not fire again. + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + + }, { + key: "onceDone", + value: function onceDone(listener) { + // Attach the listener + this.once('done', listener.bind(this)); // Chain + + return this; + } + /** + Alias for {@link BaseInterface#onceDone} + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + + }, { + key: "done", + value: function done(listener) { + return this.onceDone(listener); + } + /** + Gets our name prepended by all of our parents names + @type {Array} + @access public + */ + + }, { + key: "getNames", + // --------------------------------- + // Backwards compatability helpers + value: function getNames(opts) { + return opts && opts.separator ? this.names.join(opts.separator) : this.names; + } + }, { + key: "getConfig", + value: function getConfig() { + return this.config; + } + }, { + key: "getTotalItems", + value: function getTotalItems() { + return this.totalItems; + } + }, { + key: "getItemTotals", + value: function getItemTotals() { + return this.itemTotals; + } + }, { + key: "isCompleted", + value: function isCompleted() { + return this.completed; + } + }, { + key: "hasStarted", + value: function hasStarted() { + return this.started; + } + }, { + key: "addGroup", + value: function addGroup() { + return this.addTaskGroup.apply(this, arguments); + } + }, { + key: "clear", + value: function clear() { + this.clearRemaining.apply(this, arguments); + return this; + } + }, { + key: "names", + get: function get() { + // Fetch + var names = [], + _this$config = this.config, + name = _this$config.name, + parent = _this$config.parent, + nameSeparator = _this$config.nameSeparator; + if (parent) names.push.apply(names, _toConsumableArray(parent.names)); + if (name !== false) names.push(this.name); + + names.toString = function () { + return names.join(nameSeparator); + }; // Return + + + return names; + } + /** + Get the name of our instance. + If the name was never configured, then return the name in the format of `'${this.type} ${Math.random()}'` to output something like `task 0.2123` + @type {String} + @access public + */ + + }, { + key: "name", + get: function get() { + return this.config.name || this.state.name || (this.state.name = "".concat(this.type, " ").concat(Math.random())); + } + }], [{ + key: "create", + value: function create() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return _construct(this, args); + } + }]); + + return BaseInterface; +}(require('events').EventEmitter); // Exports + + +module.exports = { + BaseInterface: BaseInterface +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-browsers/task.js b/node_modules/taskgroup/edition-browsers/task.js new file mode 100644 index 000000000..2a708d7af --- /dev/null +++ b/node_modules/taskgroup/edition-browsers/task.js @@ -0,0 +1,661 @@ +/* eslint no-extra-parens:0 func-style:0 */ +'use strict'; // Imports + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var _require = require('./interface.js'), + BaseInterface = _require.BaseInterface; + +var _require2 = require('./util.js'), + queue = _require2.queue, + domain = _require2.domain; + +var ambi = require('ambi'); + +var extendr = require('extendr'); + +var eachr = require('eachr'); + +var unbounded = require('unbounded'); +/** +Our Task Class + +Available configuration is documented in {@link Task#setConfig}. + +Available events: + +- `pending()` - emitted when execution has been triggered +- `running()` - emitted when the method starts execution +- `failed(error)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(error, ...resultArguments)` - emitted when execution exited, `resultArguments` are the result arguments from the method +- `error(error)` - emtited if an unexpected error occurs without ourself +- `done(error, ...resultArguments)` - emitted when either execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) + +Available internal statuses: + +- `'created'` - execution has not yet started +- `'pending'` - execution has been triggered +- `'running'` - execution of our method has begun +- `'failed'` - execution of our method has failed +- `'passed'` - execution of our method has succeeded +- `'destroyed'` - we've been destroyed and can no longer execute + +@example +const Task = require('taskgroup').Task + +Task.create('my synchronous task', function () { + return 5 +}).done(console.info).run() // [null, 5] + +Task.create('my asynchronous task', function (complete) { + complete(null, 5) +}).done(console.info).run() // [null, 5] + +Task.create('my task that returns an error', function () { + var error = new Error('deliberate error') + return error +}).done(console.info).run() // [Error('deliberator error')] + +Task.create('my task that passes an error', function (complete) { + var error = new Error('deliberate error') + complete(error) +}).done(console.info).run() // [Error('deliberator error')] + +@class Task +@extends BaseInterface +@constructor +@access public +*/ + + +var Task = +/*#__PURE__*/ +function (_BaseInterface) { + _inherits(Task, _BaseInterface); + + function Task() { + var _this2; + + var _this; + + _classCallCheck(this, Task); + + // Initialise BaseInterface + _this = _possibleConstructorReturn(this, _getPrototypeOf(Task).call(this)); // State defaults + + extendr.defaults(_this.state, { + result: null, + error: null, + status: 'created' + }); // Configuration defaults + + extendr.defaults(_this.config, { + // Standard + storeResult: null, + destroyOnceDone: true, + parent: null, + // Unique to Task + method: null, + errorOnExcessCompletions: true, + ambi: true, + domain: null, + args: null + }); // Apply user configuration + + (_this2 = _this).setConfig.apply(_this2, arguments); + + return _this; + } // =================================== + // Typing Helpers + + /** + The type of our class. + Used for the purpose of duck typing + which is needed when working with node virtual machines + as instanceof will not work in those environments. + @type {String} + @default 'task' + @access private + */ + + + _createClass(Task, [{ + key: "resetResult", + // --------------------------------- + // State Changers + + /** + Reset the result. + At this point this method is internal, as it's functionality may change in the future, and it's outside use is not yet confirmed. If you need such an ability, let us know via the issue tracker. + @chainable + @returns {this} + @access private + */ + value: function resetResult() { + this.state.result = null; + return this; + } + /** + Clear the domain + @chainable + @returns {this} + @access private + */ + + }, { + key: "clearDomain", + value: function clearDomain() { + var taskDomain = this.state.taskDomain; + + if (taskDomain) { + taskDomain.exit(); + taskDomain.removeAllListeners(); + this.state.taskDomain = null; + } + + return this; + } // =================================== + // Initialization + + /** + Set the configuration for our instance. + @param {Object} [config] + @param {String} [config.name] - What we would like our name to be, useful for debugging. + @param {Function} [config.done] - Passed to {@link Task#onceDone} (aliases are `onceDone`, and `next`) + @param {Function} [config.whenDone] - Passed to {@link Task#whenDone} + @param {Object} [config.on] - A map of event names linking to listener functions that we would like bounded via {EventEmitter.on} + @param {Object} [config.once] - A map of event names linking to listener functions that we would like bounded via {EventEmitter.once} + @param {Boolean} [config.storeResult] - Whether or not to store the result, if `false` will not store + @param {Boolean} [config.destroyOnceDone=true] - Whether or not to automatically destroy the task once it's done to free up resources + @param {TaskGroup} [config.parent] - A parent {@link TaskGroup} that we may be attached to + @param {Function} [config.method] - The {Function} to execute for our {Task} + @param {Boolean} [config.errorOnExcessCompletions=true] - Whether or not to error if the task completes more than once + @param {Boolean} [config.ambi=true] - Whether or not to use bevry/ambi to determine if the method is asynchronous or synchronous and execute it appropriately + @param {Boolean} [config.domain] - If not `false` will wrap the task execution in a domain to attempt to catch background errors (aka errors that are occuring in other ticks than the initial execution), if `true` will fail if domains aren't available + @param {Array} [config.args] - Arguments that we would like to forward onto our method when we execute it + @chainable + @returns {this} + @access public + */ + + }, { + key: "setConfig", + value: function setConfig() { + var _this3 = this; + + var opts = {}; // Extract the configuration from the arguments + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.forEach(function (arg) { + if (arg == null) return; + + var type = _typeof(arg); + + switch (type) { + case 'string': + opts.name = arg; + break; + + case 'function': + opts.method = arg; + break; + + case 'object': + extendr.deep(opts, arg); + break; + + default: + { + throw new Error("Unknown argument type of [".concat(type, "] given to Task::setConfig()")); + } + } + }); // Apply the configuration directly to our instance + + eachr(opts, function (value, key) { + if (value == null) return; + + switch (key) { + case 'on': + eachr(value, function (value, key) { + if (value) _this3.on(key, value); + }); + break; + + case 'once': + eachr(value, function (value, key) { + if (value) _this3.once(key, value); + }); + break; + + case 'whenDone': + _this3.whenDone(value); + + break; + + case 'onceDone': + case 'done': + case 'next': + _this3.onceDone(value); + + break; + + case 'onError': + case 'pauseOnError': + case 'includeInResults': + case 'sync': + case 'timeout': + case 'exit': + throw new Error("Deprecated configuration property [".concat(key, "] given to Task::setConfig()")); + + default: + _this3.config[key] = value; + break; + } + }); // Chain + + return this; + } // =================================== + // Workflow + + /** + What to do when our task method completes. + Should only ever execute once, if it executes more than once, then we error. + @param {...*} args - The arguments that will be applied to the {@link Task#result} variable. First argument is the {Error} if it exists. + @chainable + @returns {this} + @access private + */ + + }, { + key: "itemCompletionCallback", + value: function itemCompletionCallback() { + // Store the first error + var error = this.state.error; + + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + if (args[0] && !error) { + this.state.error = error = args[0]; + } // Complete for the first (and hopefully only) time + + + if (!this.exited) { + // Apply the result if we want to and it exists + if (this.storeResult) { + this.state.result = args.slice(1); + } + } // Finish up + + + this.finish(); // Chain + + return this; + } + /** + @NOTE Perhaps at some point, we can add abort/exit functionality, but these things have to be considered: + What will happen to currently running items? + What will happen to remaining items? + Should it be two methods? .halt() and .abort(error?) + Should it be a state? + Should it alter the state? + Should it clear or destroy? + What is the definition of pausing with this? + Perhaps we need to update the definition of pausing to be halted instead? + How can we apply this to Task and TaskGroup consistently? + @access private + @returns {void} + */ + + }, { + key: "abort", + value: function abort() { + throw new Error('not yet implemented'); + } + /** + Set our task to the completed state. + @chainable + @returns {this} + @access private + */ + + }, { + key: "finish", + value: function finish() { + var error = this.state.error; // Complete for the first (and hopefully only) time + + if (!this.exited) { + // Set the status and emit depending on success or failure status + var status = error ? 'failed' : 'passed'; + this.state.status = status; + this.emit(status, error); // Notify our listeners we have completed + + var args = [error]; + if (this.state.result) args.push.apply(args, _toConsumableArray(this.state.result)); + this.emit.apply(this, ['completed'].concat(args)); // Prevent the error from persisting + + this.state.error = null; // Destroy if desired + + if (this.config.destroyOnceDone) { + this.destroy(); + } + } // Error as we have already completed before + else if (this.config.errorOnExcessCompletions) { + var source = (this.config.method.unbounded || this.config.method || 'no longer present').toString(); + var completedError = new Error("The task [".concat(this.names, "] just completed, but it had already completed earlier, this is unexpected.\nTask Source: ").concat(source)); + this.emit('error', completedError); + } // Chain + + + return this; + } + /** + Destroy ourself and prevent ourself from executing ever again. + @chainable + @returns {this} + @access public + */ + + }, { + key: "destroy", + value: function destroy() { + // Update our status and notify our listeners + this.state.status = 'destroyed'; + this.emit('destroyed'); // Clear the domain + + this.clearDomain(); // Clear result, in case it keeps references to something + + this.resetResult(); // Remove all listeners + + this.removeAllListeners(); // Chain + + return this; + } + /** + Fire the task method with our config arguments and wrapped in a domain. + @chainable + @returns {this} + @access private + */ + + }, { + key: "fire", + value: function fire() { + var _this4 = this; + + // Prepare + var taskArgs = (this.config.args || []).slice(); + var taskDomain = this.state.taskDomain; + var exitMethod = unbounded.binder.call(this.itemCompletionCallback, this); + var method = this.config.method; // Check that we have a method to fire + + if (!method) { + var error = new Error("The task [".concat(this.names, "] failed to run as no method was defined for it.")); + this.emit('error', error); + return this; + } // Bind method + + + method = unbounded.binder.call(method, this); // Handle domains + + if (domain) { + // Prepare the task domain if we want to and if it doesn't already exist + if (!taskDomain && this.config.domain !== false) { + this.state.taskDomain = taskDomain = domain.create(); + taskDomain.on('error', exitMethod); + } + } else if (this.config.domain === true) { + var _error = new Error("The task [".concat(this.names, "] failed to run as it requested to use domains but domains are not available.")); + + this.emit('error', _error); + return this; + } // Domains, as well as process.nextTick, make it so we can't just use exitMethod directly + // Instead we cover it up like so, to ensure the domain exits, as well to ensure the arguments are passed + + + var completeMethod = function completeMethod() { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + if (taskDomain) { + _this4.clearDomain(); + + taskDomain = null; + exitMethod.apply(void 0, args); + } else { + // Use the next tick workaround to escape the try...catch scope + // Which would otherwise catch errors inside our code when it shouldn't therefore suppressing errors + queue(function () { + exitMethod.apply(void 0, args); + }); + } + }; // Our fire function that will be wrapped in a domain or executed directly + + + var fireMethod = function fireMethod() { + // Execute with ambi if appropriate + if (_this4.config.ambi !== false) { + ambi.apply(void 0, [method].concat(_toConsumableArray(taskArgs))); + } // Otherwise execute directly if appropriate + else { + method.apply(void 0, _toConsumableArray(taskArgs)); + } + }; // Add the competion callback to the arguments our method will receive + + + taskArgs.push(completeMethod); // Notify that we are now running + + this.state.status = 'running'; + this.emit('running'); // Fire the method within the domain if desired, otherwise execute directly + + if (taskDomain) { + taskDomain.run(fireMethod); + } else { + try { + fireMethod(); + } catch (error) { + exitMethod(error); + } + } // Chain + + + return this; + } + /** + Start the execution of the task. + Will emit an `error` event if the task has already started before. + @chainable + @returns {this} + @access public + */ + + }, { + key: "run", + value: function run() { + var _this5 = this; + + // Already started? + if (this.state.status !== 'created') { + var error = new Error("Invalid run status for the Task [".concat(this.names, "], it was [").concat(this.state.status, "] instead of [created].")); + this.emit('error', error); + return this; + } // Put it into pending state + + + this.state.status = 'pending'; + this.emit('pending'); // Queue the actual running so we can give time for the listeners to complete before continuing + + queue(function () { + return _this5.fire(); + }); // Chain + + return this; + } + }, { + key: "type", + get: function get() { + return 'task'; + } + /** + A helper method to check if the passed argument is a {Task} via instanceof and duck typing. + @param {Task} item - The possible instance of the {Task} that we want to check + @return {Boolean} Whether or not the item is a {Task} instance. + @static + @access public + */ + + }, { + key: "events", + // =================================== + // Accessors + + /** + An {Array} of the events that we may emit. + @type {Array} + @default ['events', 'error', 'pending', 'running', 'failed', 'passed', 'completed', 'done', 'destroyed'] + @access protected + */ + get: function get() { + return ['events', 'error', 'pending', 'running', 'failed', 'passed', 'completed', 'done', 'destroyed']; + } + /** + Fetches the interpreted value of storeResult + @type {boolean} + @access private + */ + + }, { + key: "storeResult", + get: function get() { + return this.config.storeResult !== false; + } // ----------------------------------- + // State Accessors + + /** + The first {Error} that has occured. + @type {Error} + @access protected + */ + + }, { + key: "error", + get: function get() { + return this.state.error; + } + /** + A {String} containing our current status. See our {Task} description for available values. + @type {String} + @access protected + */ + + }, { + key: "status", + get: function get() { + return this.state.status; + } + /** + An {Array} representing the returned result or the passed {Arguments} of our method (minus the first error argument). + If no result has occured yet, or we don't care, it is null. + @type {?Array} + @access protected + */ + + }, { + key: "result", + get: function get() { + return this.state.result; + } // --------------------------------- + // Status Accessors + + /** + Have we started execution yet? + @type {Boolean} + @access private + */ + + }, { + key: "started", + get: function get() { + return this.state.status !== 'created'; + } + /** + Have we finished execution yet? + @type {Boolean} + @access private + */ + + }, { + key: "exited", + get: function get() { + switch (this.state.status) { + case 'failed': + case 'passed': + case 'destroyed': + return true; + + default: + return false; + } + } + /** + Have we completed execution yet? + @type {Boolean} + @access private + */ + + }, { + key: "completed", + get: function get() { + switch (this.state.status) { + case 'failed': + case 'passed': + return true; + + default: + return false; + } + } + }], [{ + key: "isTask", + value: function isTask(item) { + return item && item.type === 'task' || item instanceof this; + } + }]); + + return Task; +}(BaseInterface); // Exports + + +module.exports = { + Task: Task +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-browsers/taskgroup.js b/node_modules/taskgroup/edition-browsers/taskgroup.js new file mode 100644 index 000000000..7f8faeada --- /dev/null +++ b/node_modules/taskgroup/edition-browsers/taskgroup.js @@ -0,0 +1,1243 @@ +/* eslint no-extra-parens:0 no-warning-comments:0 */ +'use strict'; // Imports + +function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var _require = require('./interface.js'), + BaseInterface = _require.BaseInterface; + +var _require2 = require('./task.js'), + Task = _require2.Task; + +var _require3 = require('./util.js'), + queue = _require3.queue, + ensureArray = _require3.ensureArray; + +var extendr = require('extendr'); + +var eachr = require('eachr'); + +var unbounded = require('unbounded'); +/** +Our TaskGroup class. + +Available configuration is documented in {@link TaskGroup#setConfig}. + +Available events: + +- `pending()` - emitted when execution has been triggered +- `running()` - emitted when the first item starts execution +- `failed(error)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(error, result)` - emitted when execution exited, `result` is an {?Array} of the result arguments for each item that executed +- `error(error)` - emtited if an unexpected error occured within ourself +- `done(error, result)` - emitted when either the execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) +- `item.*(...)` - bubbled events from an added item +- `task.*(...)` - bubbled events from an added {Task} +- `group.*(...)` - bubbled events from an added {TaskGroup} + +Available internal statuses: + +- `'created'` - execution has not yet started +- `'pending'` - execution has been triggered +- `'running'` - execution of items has begun +- `'failed'` - execution has exited with failure status +- `'passed'` - execution has exited with success status +- `'destroyed'` - we've been destroyed and can no longer execute + +@constructor +@class TaskGroup +@extends BaseInterface +@access public +*/ + + +var TaskGroup = +/*#__PURE__*/ +function (_BaseInterface) { + _inherits(TaskGroup, _BaseInterface); + + function TaskGroup() { + var _this3; + + var _this; + + _classCallCheck(this, TaskGroup); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(TaskGroup).call(this)); // Prepare (used for class extensions) + + if (_this.prepare) { + var _this2; + + (_this2 = _this).prepare.apply(_this2, arguments); + } // State defaults + + + extendr.defaults(_this.state, { + result: null, + error: null, + status: 'created', + itemsRemaining: [], + itemsExecutingCount: 0, + itemsDoneCount: 0 + }); // Configuration defaults + + extendr.defaults(_this.config, { + // Standard + storeResult: null, + destroyOnceDone: true, + parent: null, + // Unique to TaskGroup + method: null, + abortOnError: true, + destroyDoneItems: true, + nestedTaskConfig: {}, + nestedTaskGroupConfig: {}, + emitNestedEvents: false, + concurrency: 1, + run: null + }); // Apply user configuration + + (_this3 = _this).setConfig.apply(_this3, arguments); // Give setConfig enough chance to fire + // Changing this to setImmediate breaks a lot of things + // As tasks inside nested taskgroups will fire in any order + + + queue(unbounded.binder.call(_this.autoRun, _assertThisInitialized(_this))); + return _this; + } // =================================== + // Typing Helpers + + /** + The type of our class. + Used for the purpose of duck typing which is needed when working with node virtual machines + as instanceof will not work in those environments. + @type {String} + @default 'taskgroup' + @access private + */ + + + _createClass(TaskGroup, [{ + key: "resetResult", + // --------------------------------- + // State Changers + + /** + Reset the result. + At this point this method is internal, as it's functionality may change in the future, and it's outside use is not yet confirmed. If you need such an ability, let us know via the issue tracker. + @chainable + @returns {this} + @access private + */ + value: function resetResult() { + this.state.result = null; // Chain + + return this; + } + /** + Remove and destroy the remaining items. + @chainable + @returns {number} the amount of items that were dropped + @access public + */ + + }, { + key: "clearRemaining", + value: function clearRemaining() { + var dropped = 0; + var itemsRemaining = this.state.itemsRemaining; + + while (itemsRemaining.length !== 0) { + itemsRemaining.pop().destroy(); + ++dropped; + } // Return + + + return dropped; + } + /** + Remove and destroy the running items. Here for verboseness. + @chainable + @returns {this} + @access private + */ + + }, { + key: "clearRunning", + value: function clearRunning() { + var error = new Error('Clearing running items is not possible. Instead remaining items and wait for running items to complete.'); + this.emit('error', error); + return this; + } // =================================== + // Initialization + + /** + Autorun ourself under certain conditions. + Those conditions being: + - if we the :method configuration is defined, and we have no :parent + - if we the :run configuration is `true` + Used primarily to cause the :method to fire at the appropriate time when using inline style. + @chainable + @returns {this} + @access private + */ + + }, { + key: "autoRun", + value: function autoRun() { + // Prepare + var method = this.config.method; + var run = this.config.run; // Auto run if we are going the inline style and have no parent + + if (method) { + // Add the function as our first unamed task with the extra arguments + this.addMethod(method); // If we are the topmost group default run to true + + if (!this.config.parent && run == null) { + this.state.run = run = true; + } + } // Auto run if we are configured to + + + if (run) { + this.run(); + } // Chain + + + return this; + } + /** + Set the configuration for our instance. + Despite accepting an {Object} of configuration, we can also accept an {Array} of configuration. + When using an array, a {String} becomes the :name, a {Function} becomes the :method, and an {Object} becomes the :config + @param {Object} [config] + @param {String} [config.name] - What we would like our name to be, useful for debugging + @param {Function} [config.done] - Passed to {@link TaskGroup#onceDone} (aliases are `onceDone`, and `next`) + @param {Function} [config.whenDone] - Passed to {@link TaskGroup#whenDone} + @param {Object} [config.on] - An object of event names linking to listener functions that we would like bounded via {@link EventEmitter#on} + @param {Object} [config.once] - An object of event names linking to listener functions that we would like bounded via {@link EventEmitter#once} + @param {Boolean} [config.storeResult] - Whether or not to store the result, if `false` will not store, defaults to `false` if `destroyOnceDone` is `true` + @param {Boolean} [config.destroyOnceDone=true] - Whether or not we should automatically destroy the {TaskGroup} once done to free up resources + @param {TaskGroup} [config.parent] - A parent {TaskGroup} that we may be attached to + @param {Function} [config.method] - The {Function} to execute for our {TaskGroup} when using inline execution style + @param {Boolean} [config.abortOnError=true] - Whether or not we should abort execution of the {TaskGroup} and exit when an error occurs + @param {Boolean} [config.destroyDoneItems=true] - Whether or not we should automatically destroy done items to free up resources + @param {Object} [config.nestedTaskGroupConfig] - The nested configuration to be applied to all {TaskGroup} descendants of this group + @param {Object} [config.nestedTaskConfig] - The nested configuration to be applied to all {Task} descendants of this group + @param {Boolean} [config.emitNestedEvents=false] - Whether or not we should emit nested item events @TODO remove this, there are not tests for it, can be accomplished via item.add listener like TaskGroupDebug + @param {Number} [config.concurrency=1] - The amount of items that we would like to execute at the same time. Use `0` for unlimited. `1` accomplishes serial execution, everything else accomplishes parallel execution + @param {Boolean} [config.run] - A {Boolean} for whether or not to run the TaskGroup automatically, by default will be enabled if config.method is defined + @param {Array} [config.tasks] - An {Array} of {Task} instances to be added to this group + @param {Array} [config.taskgroups] - An {Array} of {TaskGroup} instances to be added to this group + @param {Array} [config.items] - An {Array} of {Task} and/or {TaskGroup} instances to be added to this group + @chainable + @returns {this} + @access public + */ + + }, { + key: "setConfig", + value: function setConfig() { + var _this4 = this; + + var opts = {}; // Extract the configuration from the arguments + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.forEach(function (arg) { + if (arg == null) return; + + var type = _typeof(arg); + + switch (type) { + case 'string': + opts.name = arg; + break; + + case 'function': + opts.method = arg; + break; + + case 'object': + extendr.deep(opts, arg); // @TODO why deep? + + break; + + default: + { + throw new Error("Unknown argument type of [".concat(type, "] given to TaskGroup::setConfig()")); + } + } + }); // Apply the configuration directly to our instance + + eachr(opts, function (value, key) { + if (value == null) return; + + switch (key) { + case 'on': + eachr(value, function (value, key) { + if (value) _this4.on(key, value); + }); + break; + + case 'once': + eachr(value, function (value, key) { + if (value) _this4.once(key, value); + }); + break; + + case 'whenDone': + _this4.whenDone(value); + + break; + + case 'onceDone': + case 'done': + case 'next': + _this4.done(value); + + break; + + case 'task': + case 'tasks': + _this4.addTasks(value); + + break; + + case 'group': + case 'groups': + case 'taskgroup': + case 'taskgroups': + _this4.addTaskGroups(value); + + break; + + case 'item': + case 'items': + _this4.addItems(value); + + break; + + case 'onError': + case 'pauseOnError': + case 'includeInResults': + case 'sync': + case 'timeout': + case 'exit': + case 'nestedConfig': + throw new Error("Deprecated configuration property [".concat(key, "] given to TaskGroup::setConfig()")); + + default: + _this4.config[key] = value; + break; + } + }); // Chain + + return this; + } + /** + Merge passed configuration into {config.nestedTaskConfig}. + @param {Object} opts - The configuration to merge. + @chainable + @returns {this} + @access public + */ + + }, { + key: "setNestedTaskConfig", + value: function setNestedTaskConfig(opts) { + // Fetch and copy options to the state's nested task configuration + extendr.deep(this.state.nestedTaskConfig, opts); // Chain + + return this; + } + /** + Merge passed configuration into {config.nestedTaskGroupConfig}. + @param {Object} opts - The configuration to merge. + @chainable + @returns {this} + @access public + */ + + }, { + key: "setNestedTaskGroupConfig", + value: function setNestedTaskGroupConfig(opts) { + // Fetch and copy options to the state's nested configuration + extendr.deep(this.state.nestedTaskGroupConfig, opts); // Chain + + return this; + } // =================================== + // Items + // --------------------------------- + // TaskGroup Method + + /** + Prepare the method and it's configuration, and add it as a task to be executed. + @param {Function} method - The function we want to execute as the method of this TaskGroup. + @param {Object} opts - Optional configuration for the task to be created for the method. + @chainable + @returns {this} + @access private + */ + + }, { + key: "addMethod", + value: function addMethod(method) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + method = unbounded.binder.call(method, this); // run the taskgroup method on the group, rather than itself + + method.isTaskGroupMethod = true; + if (!opts.name) opts.name = 'taskgroup method for ' + this.name; + if (!opts.args) opts.args = [this.addTaskGroup.bind(this), this.addTask.bind(this)]; + if (opts.storeResult == null) opts.storeResult = false; // by default, hide result for methods + + this.addTask(method, opts); + return this; + } // --------------------------------- + // Add Item + + /** + Adds a {Task|TaskGroup} instance and configures it from the arguments. + @param {Task|TaskGroup} item - The instance to add. + @param {...*} args - Arguments used to configure the {Task|TaskGroup} instance. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addItem", + value: function addItem(item) { + // Prepare + var me = this; // Only add the item if it exists + + if (!item) return null; // Link our item to ourself + + var itemConfig = { + parent: this + }; // Extract + + var nestedTaskGroupConfig = this.config.nestedTaskGroupConfig; + var nestedTaskConfig = this.config.nestedTaskConfig; + var emitNestedEvents = this.config.emitNestedEvents; + var isTask = Task.isTask(item); + var isTaskGroup = TaskGroup.isTaskGroup(item); // Check + + if (!isTask && !isTaskGroup) { + var error = new Error('Unknown item type'); + this.emit('error', error); + return this; + } // Nested configuration + + + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + if (isTask) item.setConfig.apply(item, [itemConfig, nestedTaskConfig].concat(args));else if (isTaskGroup) item.setConfig.apply(item, [itemConfig, { + nestedTaskConfig: nestedTaskConfig, + nestedTaskGroupConfig: nestedTaskGroupConfig + }, nestedTaskGroupConfig].concat(args)); // Name default + // @todo perhaps this can come after item.add emissions, in case the user wants to set the item name there, + // however that is signficant complexity to test, so for now won't bother + + if (!item.config.name) { + item.config.name = "".concat(item.type, " ").concat(this.totalItems + 1, " for [").concat(this.name, "]"); + } // Store Result Default + // if the item is undecided, then inherit from our decision + // @todo perhaps this can come after item.add emissions, in case the user wants to set the item name there, + // however that is signficant complexity to test, so for now won't bother + + + if (item.config.storeResult == null) { + item.config.storeResult = this.config.storeResult; + } // Add the item + + + this.state.itemsRemaining.push(item); // When the item completes, update our state + + item.done(this.itemDoneCallbackUpdateState.bind(this, item)); // Bubble the nested events if desired + + if (emitNestedEvents) { + item.events.forEach(function (event) { + item.on(event, function () { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + if (isTask) me.emit.apply(me, ["task.".concat(event), item].concat(args));else if (isTaskGroup) me.emit.apply(me, ["task.".concat(event), item].concat(args)); + me.emit.apply(me, ["item.".concat(event), item].concat(args)); + }); + }); + } // Emit + + + if (isTask) this.emit('task.add', item);else if (isTaskGroup) this.emit('group.add', item); + this.emit('item.add', item); // When the item completes, after user events have fired, continue with the next state + + item.done(this.itemDoneCallbackNextState.bind(this, item)); // We may be running and expecting items, if so, fire + // @TODO determine if this should require a new run + + this.fire(); // Chain + + return this; + } + /** + Adds {Task|TaskGroup} instances and configures them from the arguments. + @param {Array} items - Array of {Task|TaskGroup} instances to add to this task group. + @param {...*} args - Arguments used to configure the {Task|TaskGroup} instances. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addItems", + value: function addItems(items) { + var _this5 = this; + + for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + ensureArray(items).forEach(function (item) { + return _this5.addItem.apply(_this5, [item].concat(args)); + }); + return this; + } // --------------------------------- + // Add Task + + /** + Creates a {Task} instance and configures it from the arguments. + If the first argument is already a {Task} instance, then we configure it with the remaining arguments, instead of creating a new {Task} instance. + @param {...*} args - Arguments used to configure the {Task} instance. + @return {Task} + @access public + */ + + }, { + key: "createTask", + value: function createTask() { + // Prepare + var task; // Support receiving an existing task instance + + for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + if (Task.isTask(args[0])) { + var _task; + + task = args[0]; + + (_task = task).setConfig.apply(_task, _toConsumableArray(args.slice(1))); + } // Support receiving arguments to create a task instance + else { + task = _construct(this.Task, args); + } // Return the new task + + + return task; + } + /** + Adds a {Task} instance and configures it from the arguments. + If a {Task} instance is not supplied, a {Task} instance is created from the arguments. + @param {...*} args - Arguments used to configure the {Task} instance. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTask", + value: function addTask() { + var task = this.createTask.apply(this, arguments); + this.addItem(task); + return this; + } + /** + Adds {Task} instances and configures them from the arguments. + @param {Array} items - Array of {Task} instances to add to this task group. + @param {...*} args - Arguments used to configure the {Task} instances. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTasks", + value: function addTasks(items) { + var _this6 = this; + + for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { + args[_key6 - 1] = arguments[_key6]; + } + + ensureArray(items).forEach(function (item) { + return _this6.addTask.apply(_this6, [item].concat(args)); + }); + return this; + } // --------------------------------- + // Add Group + + /** + Creates a {TaskGroup} instance and configures it from the arguments. + If the first argument is already a {TaskGroup} instance, then we configure it with the remaining arguments, instead of creating a new {TaskGroup} instance. + @param {...*} args - Arguments used to configure the {TaskGroup} instance. + @return {TaskGroup} + @access public + */ + + }, { + key: "createTaskGroup", + value: function createTaskGroup() { + // Prepare + var group; // Support receiving an existing group instance + + for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + args[_key7] = arguments[_key7]; + } + + if (TaskGroup.isTaskGroup(args[0])) { + var _group; + + group = args[0]; + + (_group = group).setConfig.apply(_group, _toConsumableArray(args.slice(1))); + } // Support receiving arguments to create a group instance + else { + group = _construct(this.TaskGroup, args); + } // Return the new group + + + return group; + } + /** + Adds a {TaskGroup} instance and configures it from the arguments. + If a {TaskGroup} instance is not supplied, a {TaskGroup} instance is created from the arguments. + @param {...*} args - Arguments used to configure the {TaskGroup} instance. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTaskGroup", + value: function addTaskGroup() { + var group = this.createTaskGroup.apply(this, arguments); + this.addItem(group); + return this; + } + /** + Adds {TaskGroup} instances and configures them from the arguments. + @param {Array} items - Array of {TaskGroup} instances to add to this task group. + @param {...*} args - Arguments used to configure the {TaskGroup} instances. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTaskGroups", + value: function addTaskGroups(items) { + var _this7 = this; + + for (var _len8 = arguments.length, args = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) { + args[_key8 - 1] = arguments[_key8]; + } + + ensureArray(items).forEach(function (item) { + return _this7.addTaskGroup.apply(_this7, [item].concat(args)); + }); + return this; + } // =================================== + // Workflow + + /** + Fire the next items. + @return {Array|false} Either an {Array} of items that were fired or `false` if no items were fired. + @access private + */ + + }, { + key: "fireNextItems", + value: function fireNextItems() { + // Prepare + var items = []; // Fire the next items + + /* eslint no-constant-condition:0 */ + + while (true) { + var item = this.fireNextItem(); + + if (item) { + items.push(item); + } else { + break; + } + } // Return the items or false if no items + + + var result = items.length !== 0 ? items : false; + return result; + } + /** + Fire the next item. + @return {Task|TaskGroup|false} Either the {Task|TaskGroup} item that was fired or `false` if no item was fired. + @access private + */ + + }, { + key: "fireNextItem", + value: function fireNextItem() { + // Prepare + var result = false; // Can we run the next item? + + if (this.shouldFire) { + // Fire the next item + // Update our status and notify our listeners + if (this.state.status !== 'running') { + this.state.status = 'running'; + this.emit('running'); + } // Get the next item and bump the running count + + + var item = this.state.itemsRemaining.shift(); + ++this.state.itemsExecutingCount; + item.run(); // Return the item + + result = item; + } // Return + + + return result; + } + /** + What to do when an item is done. Run before user events. + @chainable + @returns {this} + @param {Task|TaskGroup} item - The item that has completed + @param {...*} args - The arguments that the item completed with. + @access private + */ + + }, { + key: "itemDoneCallbackUpdateState", + value: function itemDoneCallbackUpdateState(item) { + // Prepare + var result = this.state.result; // Update error if it exists + + for (var _len9 = arguments.length, args = new Array(_len9 > 1 ? _len9 - 1 : 0), _key9 = 1; _key9 < _len9; _key9++) { + args[_key9 - 1] = arguments[_key9]; + } + + if (this.config.abortOnError && args[0]) { + if (!this.state.error) { + this.state.error = args[0]; + } + } // Add the result if desired + + + if (this.storeResult && item.storeResult) { + result.push(args); + } // Mark that one less item is running and one more item done + + + --this.state.itemsExecutingCount; + ++this.state.itemsDoneCount; // Chain + + return this; + } + /** + What to do when an item is done. Run after user events. + @chainable + @returns {this} + @param {Task|TaskGroup} item - The item that has completed + @access private + */ + + }, { + key: "itemDoneCallbackNextState", + value: function itemDoneCallbackNextState(item) { + // As we no longer have any use for this item, as it has completed, destroy the item if desired + if (this.config.destroyDoneItems) { + item.destroy(); + } // Fire + + + this.fire(); // Chain + + return this; + } + /** + Set our task to the completed state. + @NOTE This doesn't have to be a separate method, it could just go inside `fire` however, it is nice to have here to keep `fire` simple + @chainable + @returns {this} + @access private + */ + + }, { + key: "finish", + value: function finish() { + // Set and emmit the appropriate status for our error or non-error + var error = this.state.error; + var status = error ? 'failed' : 'passed'; + this.state.status = status; + this.emit(status, error); // Notity our listners we have completed + + var args = [error]; + if (this.state.result) args.push(this.state.result); + this.emit.apply(this, ['completed'].concat(args)); // Prevent the error from persisting + + this.state.error = null; // Destroy if desired + + if (this.config.destroyOnceDone) { + this.destroy(); + } + } + /** + @NOTE Perhaps at some point, we can add abort/exit functionality, but these things have to be considered: + What will happen to currently running items? + What will happen to remaining items? + Should it be two methods? .halt() and .abort(error?) + Should it be a state? + Should it alter the state? + Should it clear or destroy? + What is the definition of pausing with this? + Perhaps we need to update the definition of pausing to be halted instead? + How can we apply this to Task and TaskGroup consistently? + @access private + @returns {void} + */ + + }, { + key: "abort", + value: function abort() { + throw new Error('not yet implemented'); + } + /** + Destroy ourself and prevent ourself from executing ever again. + @chainable + @returns {this} + @access public + */ + + }, { + key: "destroy", + value: function destroy() { + // Update our status and notify our listeners + this.state.status = 'destroyed'; + this.emit('destroyed'); // Clear remaining items to prevent them from running + + this.clearRemaining(); // Clear result + + this.resetResult(); // Remove listeners + + this.removeAllListeners(); // Chain + + return this; + } + /** + Internal: Either execute the reamining items we are not paused, or complete execution by exiting. + @chainable + @returns {this} + @access private + */ + + }, { + key: "fire", + value: function fire() { + // Have we started are not destroyed? + if (this.started && this.state.status !== 'destroyed') { + // Check if we are complete, if so, exit + if (this.completed) { + // Finish up + this.finish(); + } // Otherwise continue firing items if we are wanting to pause + else if (!this.shouldPause) { + this.fireNextItems(); + } + } // Chain + + + return this; + } + /** + Start/restart/resume the execution of the TaskGroup. + @chainable + @returns {this} + @access public + */ + + }, { + key: "run", + value: function run() { + var _this8 = this; + + // Prevent running on destroy + if (this.state.status === 'destroyed') { + var error = new Error("Invalid run status for the TaskGroup [".concat(this.names, "], it was [").concat(this.state.status, "].")); + this.emit('error', error); + return this; + } // Put it into pending state + + + this.state.status = 'pending'; + this.emit('pending'); // Prepare result, if it doesn't exist + + if (this.storeResult && this.state.result == null) { + this.state.result = []; + } // Queue the actual running so we can give time for the listeners to complete before continuing + + + queue(function () { + return _this8.fire(); + }); // Chain + + return this; + } + }, { + key: "type", + get: function get() { + return 'taskgroup'; + } + /** + A helper method to check if the passed argument is a {TaskGroup} via instanceof and duck typing. + @param {TaskGroup} group - The possible instance of the {TaskGroup} that we want to check + @return {Boolean} Whether or not the item is a {TaskGroup} instance. + @static + @access public + */ + + }, { + key: "Task", + + /** + A reference to the {Task} class for use in {@link TaskGroup#createTask} if we want to override it. + @type {Task} + @default Task + @access public + */ + get: function get() { + return Task; + } + /** + A reference to the {TaskGroup} class for use in {@link TaskGroup#createTaskGroup} if we want to override it. + @type {TaskGroup} + @default TaskGroup + @access public + */ + + }, { + key: "TaskGroup", + get: function get() { + return TaskGroup; + } // =================================== + // Accessors + + /** + An {Array} of the events that we may emit. + @type {Array} + @access protected + */ + + }, { + key: "events", + get: function get() { + return ['error', 'pending', 'running', 'passed', 'failed', 'completed', 'done', 'destroyed']; + } + /** + Fetches the interpreted value of storeResult + @type {boolean} + @access private + */ + + }, { + key: "storeResult", + get: function get() { + var _this$config = this.config, + storeResult = _this$config.storeResult, + destroyOnceDone = _this$config.destroyOnceDone; + return storeResult == null ? destroyOnceDone : storeResult !== false; + } // ----------------------------------- + // State Accessors + + /** + The first {Error} that has occured. + @type {Error} + @access protected + */ + + }, { + key: "error", + get: function get() { + return this.state.error; + } + /** + A {String} containing our current status. See our {TaskGroup} description for available values. + @type {String} + @access protected + */ + + }, { + key: "status", + get: function get() { + return this.state.status; + } + /** + An {Array} that contains the result property for each completed {Task} and {TaskGroup}. + If no result has occured yet, or we don't care, it is null. + @type {?Array} + @access protected + */ + + }, { + key: "result", + get: function get() { + return this.state.result; + } // --------------------------------- + // Status Accessors + + /** + Gets the total number of items inside our task group. + @type {Number} + @access public + */ + + }, { + key: "totalItems", + get: function get() { + var remaining = this.state.itemsRemaining.length; + var executing = this.state.itemsExecutingCount; + var done = this.state.itemsDoneCount; + var total = executing + remaining + done; + return total; + } + /** + Gets the total number count of each of our item lists. + Returns an {Object} containg the hashes: + - remaining - A {Number} of the names of the remaining items. + - executing - A {Number} of the names of the executing items. + - done - A {Number} of the names of the done items. + - total - A {Number} of the total items we have. + - result - A {Number} of the total results we have. + @type {Object} + @access public + */ + + }, { + key: "itemTotals", + get: function get() { + var remaining = this.state.itemsRemaining.length; + var executing = this.state.itemsExecutingCount; + var done = this.state.itemsDoneCount; + var result = this.state.result && this.state.result.length; + var total = executing + remaining + done; + return { + remaining: remaining, + executing: executing, + done: done, + total: total, + result: result + }; + } + /** + Whether or not we have any items yet to execute. + @type {Boolean} + @access private + */ + + }, { + key: "hasRemaining", + get: function get() { + return this.state.itemsRemaining.length !== 0; + } + /** + Whether or not we have any running items. + @type {Boolean} + @access private + */ + + }, { + key: "hasRunning", + get: function get() { + return this.state.itemsExecutingCount !== 0; + } + /** + Whether or not we have any items running or remaining. + @type {Boolean} + @access private + */ + + }, { + key: "hasItems", + get: function get() { + return this.hasRunning || this.hasRemaining; + } + /** + Whether or not we have an error. + @type {Boolean} + @access private + */ + + }, { + key: "hasError", + get: function get() { + return this.state.error != null; + } + /** + Whether or not we have an error or a result. + @type {Boolean} + @access private + */ + + }, { + key: "hasResult", + get: function get() { + return this.hasError || this.state.result.length !== 0; + } + /** + Whether or not we have any available slots to execute more items. + @type {Boolean} + @access private + */ + + }, { + key: "hasSlots", + get: function get() { + var concurrency = this.config.concurrency; + return concurrency === 0 || this.state.itemsExecutingCount < concurrency; + } + /** + Whether or not we are capable of firing more items. + This is determined whether or not we are not paused, and we have remaning items, and we have slots able to execute those remaning items. + @type {Boolean} + @access private + */ + + }, { + key: "shouldFire", + get: function get() { + return !this.shouldPause && this.hasRemaining && this.hasSlots; + } + /** + Whether or not we have errord and want to pause when we have an error. + @type {Boolean} + @access private + */ + + }, { + key: "shouldPause", + get: function get() { + return this.config.abortOnError && this.hasError; + } + /** + Whether or not we execution is currently paused. + @type {Boolean} + @access private + */ + + }, { + key: "paused", + get: function get() { + return this.shouldPause && !this.hasRunning; + } + /** + Whether or not we have no running or remaining items left. + @type {Boolean} + @access private + */ + + }, { + key: "empty", + get: function get() { + return !this.hasItems; + } + /** + Whether or not we have finished execution. + @type {Boolean} + @access private + */ + + }, { + key: "exited", + get: function get() { + switch (this.state.status) { + case 'passed': + case 'failed': + case 'destroyed': + return true; + + default: + return false; + } + } + /** + Whether or not we have started execution. + @type {Boolean} + @access private + */ + + }, { + key: "started", + get: function get() { + return this.state.status !== 'created'; + } + /** + Whether or not we execution has completed. + Completion of executed is determined of whether or not we have started, and whether or not we are currently paused or have no remaining and running items left + @type {Boolean} + @access private + */ + + }, { + key: "completed", + get: function get() { + return this.started && (this.paused || this.empty); + } + }], [{ + key: "isTaskGroup", + value: function isTaskGroup(group) { + return group && group.type === 'taskgroup' || group instanceof this; + } + }]); + + return TaskGroup; +}(BaseInterface); // Export + + +module.exports = { + TaskGroup: TaskGroup +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-browsers/util.js b/node_modules/taskgroup/edition-browsers/util.js new file mode 100644 index 000000000..18efffd78 --- /dev/null +++ b/node_modules/taskgroup/edition-browsers/util.js @@ -0,0 +1,35 @@ +/* eslint no-extra-parens:0 */ +'use strict'; // Domains are crippled in the browser and on node 0.8, so don't use domains in those environments + +var domain = process.browser || process.versions.node.substr(0, 3) === '0.8' ? null : require('domain'); // Cross-platform (node 0.10+, node 0.8+, browser) compatible setImmediate + +var queue = (global || window).setImmediate || process && process.nextTick || function (fn) { + setTimeout(fn, 0); +}; // Convert an error to a string + + +function errorToString(error) { + if (!error) { + return null; + } else if (error.stack) { + return error.stack.toString(); + } else if (error.message) { + return error.message.toString(); + } else { + return error.toString(); + } +} // Ensure that the passed array is actually an array + + +function ensureArray(arr) { + if (!Array.isArray(arr)) arr = [arr]; + return arr; +} // Exports + + +module.exports = { + domain: domain, + queue: queue, + errorToString: errorToString, + ensureArray: ensureArray +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-node-0.8/index.js b/node_modules/taskgroup/edition-node-0.8/index.js new file mode 100644 index 000000000..f8f7adf94 --- /dev/null +++ b/node_modules/taskgroup/edition-node-0.8/index.js @@ -0,0 +1,12 @@ +'use strict'; + +var _require = require('./task.js'), + Task = _require.Task; + +var _require2 = require('./taskgroup.js'), + TaskGroup = _require2.TaskGroup; + +module.exports = { + Task: Task, + TaskGroup: TaskGroup +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-node-0.8/interface.js b/node_modules/taskgroup/edition-node-0.8/interface.js new file mode 100644 index 000000000..7028bbf83 --- /dev/null +++ b/node_modules/taskgroup/edition-node-0.8/interface.js @@ -0,0 +1,255 @@ +'use strict'; +/** +Base class containing common functionality for {@link Task} and {@link TaskGroup}. + +Adds support for the done event while +ensuring that errors are always handled correctly. +It does this by listening to the `error` and `completed` events, +and when the emit, we check if there is a `done` listener: + +- if there is, then emit the done event with the original event arguments +- if there isn't, then output the error to stderr and throw it. + +Sets the following configuration: + +- `nameSeparator` defaults to `' ➞ '`, used to stringify the result of `.names` + +@class BaseInterface +@extends EventEmitter +@constructor +@access private +*/ + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var BaseInterface = +/*#__PURE__*/ +function (_require$EventEmitter) { + _inherits(BaseInterface, _require$EventEmitter); + + function BaseInterface() { + var _this; + + _classCallCheck(this, BaseInterface); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseInterface).call(this)); // Allow extensions of this class to prepare the class instance before anything else fires + + if (_this.prepare) { + _this.prepare(); + } // Set state and config + + + if (_this.state == null) _this.state = {}; + if (_this.config == null) _this.config = {}; + if (_this.config.nameSeparator == null) _this.config.nameSeparator = ' ➞ '; // Generate our listener method that we will beind to different events + // to add support for the `done` event and better error/event handling + + function listener(event) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + // Prepare + var error = args[0]; // has done listener, forward to that + + if (this.listeners('done').length !== 0) { + this.emit.apply(this, ['done'].concat(args)); + } // has error, but no done listener and no event listener, throw error + else if (error && this.listeners(event).length === 1) { + if (event === 'error') { + throw error; + } else { + this.emit('error', error); + } + } + } // Listen to the different events without listener + + + _this.on('error', listener.bind(_assertThisInitialized(_this), 'error')); + + _this.on('completed', listener.bind(_assertThisInitialized(_this), 'completed')); // this.on('halted', listener.bind(this, 'halted')) + // ^ @TODO not yet implemented, would be an alternative to pausing + + + return _this; + } + /** + Creates and returns new instance of the current class. + @param {...*} args - The arguments to be forwarded along to the constructor. + @return {BaseInterface} The new instance. + @static + @access public + */ + + + _createClass(BaseInterface, [{ + key: "whenDone", + + /** + Attaches the listener to the `done` event to be emitted each time. + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + value: function whenDone(listener) { + // Attach the listener + this.on('done', listener.bind(this)); // Chain + + return this; + } + /** + Attaches the listener to the `done` event to be emitted only once, then removed to not fire again. + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + + }, { + key: "onceDone", + value: function onceDone(listener) { + // Attach the listener + this.once('done', listener.bind(this)); // Chain + + return this; + } + /** + Alias for {@link BaseInterface#onceDone} + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + + }, { + key: "done", + value: function done(listener) { + return this.onceDone(listener); + } + /** + Gets our name prepended by all of our parents names + @type {Array} + @access public + */ + + }, { + key: "getNames", + // --------------------------------- + // Backwards compatability helpers + value: function getNames(opts) { + return opts && opts.separator ? this.names.join(opts.separator) : this.names; + } + }, { + key: "getConfig", + value: function getConfig() { + return this.config; + } + }, { + key: "getTotalItems", + value: function getTotalItems() { + return this.totalItems; + } + }, { + key: "getItemTotals", + value: function getItemTotals() { + return this.itemTotals; + } + }, { + key: "isCompleted", + value: function isCompleted() { + return this.completed; + } + }, { + key: "hasStarted", + value: function hasStarted() { + return this.started; + } + }, { + key: "addGroup", + value: function addGroup() { + return this.addTaskGroup.apply(this, arguments); + } + }, { + key: "clear", + value: function clear() { + this.clearRemaining.apply(this, arguments); + return this; + } + }, { + key: "names", + get: function get() { + // Fetch + var names = [], + _this$config = this.config, + name = _this$config.name, + parent = _this$config.parent, + nameSeparator = _this$config.nameSeparator; + if (parent) names.push.apply(names, _toConsumableArray(parent.names)); + if (name !== false) names.push(this.name); + + names.toString = function () { + return names.join(nameSeparator); + }; // Return + + + return names; + } + /** + Get the name of our instance. + If the name was never configured, then return the name in the format of `'${this.type} ${Math.random()}'` to output something like `task 0.2123` + @type {String} + @access public + */ + + }, { + key: "name", + get: function get() { + return this.config.name || this.state.name || (this.state.name = "".concat(this.type, " ").concat(Math.random())); + } + }], [{ + key: "create", + value: function create() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return _construct(this, args); + } + }]); + + return BaseInterface; +}(require('events').EventEmitter); // Exports + + +module.exports = { + BaseInterface: BaseInterface +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-node-0.8/task.js b/node_modules/taskgroup/edition-node-0.8/task.js new file mode 100644 index 000000000..2a708d7af --- /dev/null +++ b/node_modules/taskgroup/edition-node-0.8/task.js @@ -0,0 +1,661 @@ +/* eslint no-extra-parens:0 func-style:0 */ +'use strict'; // Imports + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var _require = require('./interface.js'), + BaseInterface = _require.BaseInterface; + +var _require2 = require('./util.js'), + queue = _require2.queue, + domain = _require2.domain; + +var ambi = require('ambi'); + +var extendr = require('extendr'); + +var eachr = require('eachr'); + +var unbounded = require('unbounded'); +/** +Our Task Class + +Available configuration is documented in {@link Task#setConfig}. + +Available events: + +- `pending()` - emitted when execution has been triggered +- `running()` - emitted when the method starts execution +- `failed(error)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(error, ...resultArguments)` - emitted when execution exited, `resultArguments` are the result arguments from the method +- `error(error)` - emtited if an unexpected error occurs without ourself +- `done(error, ...resultArguments)` - emitted when either execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) + +Available internal statuses: + +- `'created'` - execution has not yet started +- `'pending'` - execution has been triggered +- `'running'` - execution of our method has begun +- `'failed'` - execution of our method has failed +- `'passed'` - execution of our method has succeeded +- `'destroyed'` - we've been destroyed and can no longer execute + +@example +const Task = require('taskgroup').Task + +Task.create('my synchronous task', function () { + return 5 +}).done(console.info).run() // [null, 5] + +Task.create('my asynchronous task', function (complete) { + complete(null, 5) +}).done(console.info).run() // [null, 5] + +Task.create('my task that returns an error', function () { + var error = new Error('deliberate error') + return error +}).done(console.info).run() // [Error('deliberator error')] + +Task.create('my task that passes an error', function (complete) { + var error = new Error('deliberate error') + complete(error) +}).done(console.info).run() // [Error('deliberator error')] + +@class Task +@extends BaseInterface +@constructor +@access public +*/ + + +var Task = +/*#__PURE__*/ +function (_BaseInterface) { + _inherits(Task, _BaseInterface); + + function Task() { + var _this2; + + var _this; + + _classCallCheck(this, Task); + + // Initialise BaseInterface + _this = _possibleConstructorReturn(this, _getPrototypeOf(Task).call(this)); // State defaults + + extendr.defaults(_this.state, { + result: null, + error: null, + status: 'created' + }); // Configuration defaults + + extendr.defaults(_this.config, { + // Standard + storeResult: null, + destroyOnceDone: true, + parent: null, + // Unique to Task + method: null, + errorOnExcessCompletions: true, + ambi: true, + domain: null, + args: null + }); // Apply user configuration + + (_this2 = _this).setConfig.apply(_this2, arguments); + + return _this; + } // =================================== + // Typing Helpers + + /** + The type of our class. + Used for the purpose of duck typing + which is needed when working with node virtual machines + as instanceof will not work in those environments. + @type {String} + @default 'task' + @access private + */ + + + _createClass(Task, [{ + key: "resetResult", + // --------------------------------- + // State Changers + + /** + Reset the result. + At this point this method is internal, as it's functionality may change in the future, and it's outside use is not yet confirmed. If you need such an ability, let us know via the issue tracker. + @chainable + @returns {this} + @access private + */ + value: function resetResult() { + this.state.result = null; + return this; + } + /** + Clear the domain + @chainable + @returns {this} + @access private + */ + + }, { + key: "clearDomain", + value: function clearDomain() { + var taskDomain = this.state.taskDomain; + + if (taskDomain) { + taskDomain.exit(); + taskDomain.removeAllListeners(); + this.state.taskDomain = null; + } + + return this; + } // =================================== + // Initialization + + /** + Set the configuration for our instance. + @param {Object} [config] + @param {String} [config.name] - What we would like our name to be, useful for debugging. + @param {Function} [config.done] - Passed to {@link Task#onceDone} (aliases are `onceDone`, and `next`) + @param {Function} [config.whenDone] - Passed to {@link Task#whenDone} + @param {Object} [config.on] - A map of event names linking to listener functions that we would like bounded via {EventEmitter.on} + @param {Object} [config.once] - A map of event names linking to listener functions that we would like bounded via {EventEmitter.once} + @param {Boolean} [config.storeResult] - Whether or not to store the result, if `false` will not store + @param {Boolean} [config.destroyOnceDone=true] - Whether or not to automatically destroy the task once it's done to free up resources + @param {TaskGroup} [config.parent] - A parent {@link TaskGroup} that we may be attached to + @param {Function} [config.method] - The {Function} to execute for our {Task} + @param {Boolean} [config.errorOnExcessCompletions=true] - Whether or not to error if the task completes more than once + @param {Boolean} [config.ambi=true] - Whether or not to use bevry/ambi to determine if the method is asynchronous or synchronous and execute it appropriately + @param {Boolean} [config.domain] - If not `false` will wrap the task execution in a domain to attempt to catch background errors (aka errors that are occuring in other ticks than the initial execution), if `true` will fail if domains aren't available + @param {Array} [config.args] - Arguments that we would like to forward onto our method when we execute it + @chainable + @returns {this} + @access public + */ + + }, { + key: "setConfig", + value: function setConfig() { + var _this3 = this; + + var opts = {}; // Extract the configuration from the arguments + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.forEach(function (arg) { + if (arg == null) return; + + var type = _typeof(arg); + + switch (type) { + case 'string': + opts.name = arg; + break; + + case 'function': + opts.method = arg; + break; + + case 'object': + extendr.deep(opts, arg); + break; + + default: + { + throw new Error("Unknown argument type of [".concat(type, "] given to Task::setConfig()")); + } + } + }); // Apply the configuration directly to our instance + + eachr(opts, function (value, key) { + if (value == null) return; + + switch (key) { + case 'on': + eachr(value, function (value, key) { + if (value) _this3.on(key, value); + }); + break; + + case 'once': + eachr(value, function (value, key) { + if (value) _this3.once(key, value); + }); + break; + + case 'whenDone': + _this3.whenDone(value); + + break; + + case 'onceDone': + case 'done': + case 'next': + _this3.onceDone(value); + + break; + + case 'onError': + case 'pauseOnError': + case 'includeInResults': + case 'sync': + case 'timeout': + case 'exit': + throw new Error("Deprecated configuration property [".concat(key, "] given to Task::setConfig()")); + + default: + _this3.config[key] = value; + break; + } + }); // Chain + + return this; + } // =================================== + // Workflow + + /** + What to do when our task method completes. + Should only ever execute once, if it executes more than once, then we error. + @param {...*} args - The arguments that will be applied to the {@link Task#result} variable. First argument is the {Error} if it exists. + @chainable + @returns {this} + @access private + */ + + }, { + key: "itemCompletionCallback", + value: function itemCompletionCallback() { + // Store the first error + var error = this.state.error; + + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + if (args[0] && !error) { + this.state.error = error = args[0]; + } // Complete for the first (and hopefully only) time + + + if (!this.exited) { + // Apply the result if we want to and it exists + if (this.storeResult) { + this.state.result = args.slice(1); + } + } // Finish up + + + this.finish(); // Chain + + return this; + } + /** + @NOTE Perhaps at some point, we can add abort/exit functionality, but these things have to be considered: + What will happen to currently running items? + What will happen to remaining items? + Should it be two methods? .halt() and .abort(error?) + Should it be a state? + Should it alter the state? + Should it clear or destroy? + What is the definition of pausing with this? + Perhaps we need to update the definition of pausing to be halted instead? + How can we apply this to Task and TaskGroup consistently? + @access private + @returns {void} + */ + + }, { + key: "abort", + value: function abort() { + throw new Error('not yet implemented'); + } + /** + Set our task to the completed state. + @chainable + @returns {this} + @access private + */ + + }, { + key: "finish", + value: function finish() { + var error = this.state.error; // Complete for the first (and hopefully only) time + + if (!this.exited) { + // Set the status and emit depending on success or failure status + var status = error ? 'failed' : 'passed'; + this.state.status = status; + this.emit(status, error); // Notify our listeners we have completed + + var args = [error]; + if (this.state.result) args.push.apply(args, _toConsumableArray(this.state.result)); + this.emit.apply(this, ['completed'].concat(args)); // Prevent the error from persisting + + this.state.error = null; // Destroy if desired + + if (this.config.destroyOnceDone) { + this.destroy(); + } + } // Error as we have already completed before + else if (this.config.errorOnExcessCompletions) { + var source = (this.config.method.unbounded || this.config.method || 'no longer present').toString(); + var completedError = new Error("The task [".concat(this.names, "] just completed, but it had already completed earlier, this is unexpected.\nTask Source: ").concat(source)); + this.emit('error', completedError); + } // Chain + + + return this; + } + /** + Destroy ourself and prevent ourself from executing ever again. + @chainable + @returns {this} + @access public + */ + + }, { + key: "destroy", + value: function destroy() { + // Update our status and notify our listeners + this.state.status = 'destroyed'; + this.emit('destroyed'); // Clear the domain + + this.clearDomain(); // Clear result, in case it keeps references to something + + this.resetResult(); // Remove all listeners + + this.removeAllListeners(); // Chain + + return this; + } + /** + Fire the task method with our config arguments and wrapped in a domain. + @chainable + @returns {this} + @access private + */ + + }, { + key: "fire", + value: function fire() { + var _this4 = this; + + // Prepare + var taskArgs = (this.config.args || []).slice(); + var taskDomain = this.state.taskDomain; + var exitMethod = unbounded.binder.call(this.itemCompletionCallback, this); + var method = this.config.method; // Check that we have a method to fire + + if (!method) { + var error = new Error("The task [".concat(this.names, "] failed to run as no method was defined for it.")); + this.emit('error', error); + return this; + } // Bind method + + + method = unbounded.binder.call(method, this); // Handle domains + + if (domain) { + // Prepare the task domain if we want to and if it doesn't already exist + if (!taskDomain && this.config.domain !== false) { + this.state.taskDomain = taskDomain = domain.create(); + taskDomain.on('error', exitMethod); + } + } else if (this.config.domain === true) { + var _error = new Error("The task [".concat(this.names, "] failed to run as it requested to use domains but domains are not available.")); + + this.emit('error', _error); + return this; + } // Domains, as well as process.nextTick, make it so we can't just use exitMethod directly + // Instead we cover it up like so, to ensure the domain exits, as well to ensure the arguments are passed + + + var completeMethod = function completeMethod() { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + if (taskDomain) { + _this4.clearDomain(); + + taskDomain = null; + exitMethod.apply(void 0, args); + } else { + // Use the next tick workaround to escape the try...catch scope + // Which would otherwise catch errors inside our code when it shouldn't therefore suppressing errors + queue(function () { + exitMethod.apply(void 0, args); + }); + } + }; // Our fire function that will be wrapped in a domain or executed directly + + + var fireMethod = function fireMethod() { + // Execute with ambi if appropriate + if (_this4.config.ambi !== false) { + ambi.apply(void 0, [method].concat(_toConsumableArray(taskArgs))); + } // Otherwise execute directly if appropriate + else { + method.apply(void 0, _toConsumableArray(taskArgs)); + } + }; // Add the competion callback to the arguments our method will receive + + + taskArgs.push(completeMethod); // Notify that we are now running + + this.state.status = 'running'; + this.emit('running'); // Fire the method within the domain if desired, otherwise execute directly + + if (taskDomain) { + taskDomain.run(fireMethod); + } else { + try { + fireMethod(); + } catch (error) { + exitMethod(error); + } + } // Chain + + + return this; + } + /** + Start the execution of the task. + Will emit an `error` event if the task has already started before. + @chainable + @returns {this} + @access public + */ + + }, { + key: "run", + value: function run() { + var _this5 = this; + + // Already started? + if (this.state.status !== 'created') { + var error = new Error("Invalid run status for the Task [".concat(this.names, "], it was [").concat(this.state.status, "] instead of [created].")); + this.emit('error', error); + return this; + } // Put it into pending state + + + this.state.status = 'pending'; + this.emit('pending'); // Queue the actual running so we can give time for the listeners to complete before continuing + + queue(function () { + return _this5.fire(); + }); // Chain + + return this; + } + }, { + key: "type", + get: function get() { + return 'task'; + } + /** + A helper method to check if the passed argument is a {Task} via instanceof and duck typing. + @param {Task} item - The possible instance of the {Task} that we want to check + @return {Boolean} Whether or not the item is a {Task} instance. + @static + @access public + */ + + }, { + key: "events", + // =================================== + // Accessors + + /** + An {Array} of the events that we may emit. + @type {Array} + @default ['events', 'error', 'pending', 'running', 'failed', 'passed', 'completed', 'done', 'destroyed'] + @access protected + */ + get: function get() { + return ['events', 'error', 'pending', 'running', 'failed', 'passed', 'completed', 'done', 'destroyed']; + } + /** + Fetches the interpreted value of storeResult + @type {boolean} + @access private + */ + + }, { + key: "storeResult", + get: function get() { + return this.config.storeResult !== false; + } // ----------------------------------- + // State Accessors + + /** + The first {Error} that has occured. + @type {Error} + @access protected + */ + + }, { + key: "error", + get: function get() { + return this.state.error; + } + /** + A {String} containing our current status. See our {Task} description for available values. + @type {String} + @access protected + */ + + }, { + key: "status", + get: function get() { + return this.state.status; + } + /** + An {Array} representing the returned result or the passed {Arguments} of our method (minus the first error argument). + If no result has occured yet, or we don't care, it is null. + @type {?Array} + @access protected + */ + + }, { + key: "result", + get: function get() { + return this.state.result; + } // --------------------------------- + // Status Accessors + + /** + Have we started execution yet? + @type {Boolean} + @access private + */ + + }, { + key: "started", + get: function get() { + return this.state.status !== 'created'; + } + /** + Have we finished execution yet? + @type {Boolean} + @access private + */ + + }, { + key: "exited", + get: function get() { + switch (this.state.status) { + case 'failed': + case 'passed': + case 'destroyed': + return true; + + default: + return false; + } + } + /** + Have we completed execution yet? + @type {Boolean} + @access private + */ + + }, { + key: "completed", + get: function get() { + switch (this.state.status) { + case 'failed': + case 'passed': + return true; + + default: + return false; + } + } + }], [{ + key: "isTask", + value: function isTask(item) { + return item && item.type === 'task' || item instanceof this; + } + }]); + + return Task; +}(BaseInterface); // Exports + + +module.exports = { + Task: Task +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-node-0.8/taskgroup.js b/node_modules/taskgroup/edition-node-0.8/taskgroup.js new file mode 100644 index 000000000..7f8faeada --- /dev/null +++ b/node_modules/taskgroup/edition-node-0.8/taskgroup.js @@ -0,0 +1,1243 @@ +/* eslint no-extra-parens:0 no-warning-comments:0 */ +'use strict'; // Imports + +function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + +function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +var _require = require('./interface.js'), + BaseInterface = _require.BaseInterface; + +var _require2 = require('./task.js'), + Task = _require2.Task; + +var _require3 = require('./util.js'), + queue = _require3.queue, + ensureArray = _require3.ensureArray; + +var extendr = require('extendr'); + +var eachr = require('eachr'); + +var unbounded = require('unbounded'); +/** +Our TaskGroup class. + +Available configuration is documented in {@link TaskGroup#setConfig}. + +Available events: + +- `pending()` - emitted when execution has been triggered +- `running()` - emitted when the first item starts execution +- `failed(error)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(error, result)` - emitted when execution exited, `result` is an {?Array} of the result arguments for each item that executed +- `error(error)` - emtited if an unexpected error occured within ourself +- `done(error, result)` - emitted when either the execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) +- `item.*(...)` - bubbled events from an added item +- `task.*(...)` - bubbled events from an added {Task} +- `group.*(...)` - bubbled events from an added {TaskGroup} + +Available internal statuses: + +- `'created'` - execution has not yet started +- `'pending'` - execution has been triggered +- `'running'` - execution of items has begun +- `'failed'` - execution has exited with failure status +- `'passed'` - execution has exited with success status +- `'destroyed'` - we've been destroyed and can no longer execute + +@constructor +@class TaskGroup +@extends BaseInterface +@access public +*/ + + +var TaskGroup = +/*#__PURE__*/ +function (_BaseInterface) { + _inherits(TaskGroup, _BaseInterface); + + function TaskGroup() { + var _this3; + + var _this; + + _classCallCheck(this, TaskGroup); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(TaskGroup).call(this)); // Prepare (used for class extensions) + + if (_this.prepare) { + var _this2; + + (_this2 = _this).prepare.apply(_this2, arguments); + } // State defaults + + + extendr.defaults(_this.state, { + result: null, + error: null, + status: 'created', + itemsRemaining: [], + itemsExecutingCount: 0, + itemsDoneCount: 0 + }); // Configuration defaults + + extendr.defaults(_this.config, { + // Standard + storeResult: null, + destroyOnceDone: true, + parent: null, + // Unique to TaskGroup + method: null, + abortOnError: true, + destroyDoneItems: true, + nestedTaskConfig: {}, + nestedTaskGroupConfig: {}, + emitNestedEvents: false, + concurrency: 1, + run: null + }); // Apply user configuration + + (_this3 = _this).setConfig.apply(_this3, arguments); // Give setConfig enough chance to fire + // Changing this to setImmediate breaks a lot of things + // As tasks inside nested taskgroups will fire in any order + + + queue(unbounded.binder.call(_this.autoRun, _assertThisInitialized(_this))); + return _this; + } // =================================== + // Typing Helpers + + /** + The type of our class. + Used for the purpose of duck typing which is needed when working with node virtual machines + as instanceof will not work in those environments. + @type {String} + @default 'taskgroup' + @access private + */ + + + _createClass(TaskGroup, [{ + key: "resetResult", + // --------------------------------- + // State Changers + + /** + Reset the result. + At this point this method is internal, as it's functionality may change in the future, and it's outside use is not yet confirmed. If you need such an ability, let us know via the issue tracker. + @chainable + @returns {this} + @access private + */ + value: function resetResult() { + this.state.result = null; // Chain + + return this; + } + /** + Remove and destroy the remaining items. + @chainable + @returns {number} the amount of items that were dropped + @access public + */ + + }, { + key: "clearRemaining", + value: function clearRemaining() { + var dropped = 0; + var itemsRemaining = this.state.itemsRemaining; + + while (itemsRemaining.length !== 0) { + itemsRemaining.pop().destroy(); + ++dropped; + } // Return + + + return dropped; + } + /** + Remove and destroy the running items. Here for verboseness. + @chainable + @returns {this} + @access private + */ + + }, { + key: "clearRunning", + value: function clearRunning() { + var error = new Error('Clearing running items is not possible. Instead remaining items and wait for running items to complete.'); + this.emit('error', error); + return this; + } // =================================== + // Initialization + + /** + Autorun ourself under certain conditions. + Those conditions being: + - if we the :method configuration is defined, and we have no :parent + - if we the :run configuration is `true` + Used primarily to cause the :method to fire at the appropriate time when using inline style. + @chainable + @returns {this} + @access private + */ + + }, { + key: "autoRun", + value: function autoRun() { + // Prepare + var method = this.config.method; + var run = this.config.run; // Auto run if we are going the inline style and have no parent + + if (method) { + // Add the function as our first unamed task with the extra arguments + this.addMethod(method); // If we are the topmost group default run to true + + if (!this.config.parent && run == null) { + this.state.run = run = true; + } + } // Auto run if we are configured to + + + if (run) { + this.run(); + } // Chain + + + return this; + } + /** + Set the configuration for our instance. + Despite accepting an {Object} of configuration, we can also accept an {Array} of configuration. + When using an array, a {String} becomes the :name, a {Function} becomes the :method, and an {Object} becomes the :config + @param {Object} [config] + @param {String} [config.name] - What we would like our name to be, useful for debugging + @param {Function} [config.done] - Passed to {@link TaskGroup#onceDone} (aliases are `onceDone`, and `next`) + @param {Function} [config.whenDone] - Passed to {@link TaskGroup#whenDone} + @param {Object} [config.on] - An object of event names linking to listener functions that we would like bounded via {@link EventEmitter#on} + @param {Object} [config.once] - An object of event names linking to listener functions that we would like bounded via {@link EventEmitter#once} + @param {Boolean} [config.storeResult] - Whether or not to store the result, if `false` will not store, defaults to `false` if `destroyOnceDone` is `true` + @param {Boolean} [config.destroyOnceDone=true] - Whether or not we should automatically destroy the {TaskGroup} once done to free up resources + @param {TaskGroup} [config.parent] - A parent {TaskGroup} that we may be attached to + @param {Function} [config.method] - The {Function} to execute for our {TaskGroup} when using inline execution style + @param {Boolean} [config.abortOnError=true] - Whether or not we should abort execution of the {TaskGroup} and exit when an error occurs + @param {Boolean} [config.destroyDoneItems=true] - Whether or not we should automatically destroy done items to free up resources + @param {Object} [config.nestedTaskGroupConfig] - The nested configuration to be applied to all {TaskGroup} descendants of this group + @param {Object} [config.nestedTaskConfig] - The nested configuration to be applied to all {Task} descendants of this group + @param {Boolean} [config.emitNestedEvents=false] - Whether or not we should emit nested item events @TODO remove this, there are not tests for it, can be accomplished via item.add listener like TaskGroupDebug + @param {Number} [config.concurrency=1] - The amount of items that we would like to execute at the same time. Use `0` for unlimited. `1` accomplishes serial execution, everything else accomplishes parallel execution + @param {Boolean} [config.run] - A {Boolean} for whether or not to run the TaskGroup automatically, by default will be enabled if config.method is defined + @param {Array} [config.tasks] - An {Array} of {Task} instances to be added to this group + @param {Array} [config.taskgroups] - An {Array} of {TaskGroup} instances to be added to this group + @param {Array} [config.items] - An {Array} of {Task} and/or {TaskGroup} instances to be added to this group + @chainable + @returns {this} + @access public + */ + + }, { + key: "setConfig", + value: function setConfig() { + var _this4 = this; + + var opts = {}; // Extract the configuration from the arguments + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.forEach(function (arg) { + if (arg == null) return; + + var type = _typeof(arg); + + switch (type) { + case 'string': + opts.name = arg; + break; + + case 'function': + opts.method = arg; + break; + + case 'object': + extendr.deep(opts, arg); // @TODO why deep? + + break; + + default: + { + throw new Error("Unknown argument type of [".concat(type, "] given to TaskGroup::setConfig()")); + } + } + }); // Apply the configuration directly to our instance + + eachr(opts, function (value, key) { + if (value == null) return; + + switch (key) { + case 'on': + eachr(value, function (value, key) { + if (value) _this4.on(key, value); + }); + break; + + case 'once': + eachr(value, function (value, key) { + if (value) _this4.once(key, value); + }); + break; + + case 'whenDone': + _this4.whenDone(value); + + break; + + case 'onceDone': + case 'done': + case 'next': + _this4.done(value); + + break; + + case 'task': + case 'tasks': + _this4.addTasks(value); + + break; + + case 'group': + case 'groups': + case 'taskgroup': + case 'taskgroups': + _this4.addTaskGroups(value); + + break; + + case 'item': + case 'items': + _this4.addItems(value); + + break; + + case 'onError': + case 'pauseOnError': + case 'includeInResults': + case 'sync': + case 'timeout': + case 'exit': + case 'nestedConfig': + throw new Error("Deprecated configuration property [".concat(key, "] given to TaskGroup::setConfig()")); + + default: + _this4.config[key] = value; + break; + } + }); // Chain + + return this; + } + /** + Merge passed configuration into {config.nestedTaskConfig}. + @param {Object} opts - The configuration to merge. + @chainable + @returns {this} + @access public + */ + + }, { + key: "setNestedTaskConfig", + value: function setNestedTaskConfig(opts) { + // Fetch and copy options to the state's nested task configuration + extendr.deep(this.state.nestedTaskConfig, opts); // Chain + + return this; + } + /** + Merge passed configuration into {config.nestedTaskGroupConfig}. + @param {Object} opts - The configuration to merge. + @chainable + @returns {this} + @access public + */ + + }, { + key: "setNestedTaskGroupConfig", + value: function setNestedTaskGroupConfig(opts) { + // Fetch and copy options to the state's nested configuration + extendr.deep(this.state.nestedTaskGroupConfig, opts); // Chain + + return this; + } // =================================== + // Items + // --------------------------------- + // TaskGroup Method + + /** + Prepare the method and it's configuration, and add it as a task to be executed. + @param {Function} method - The function we want to execute as the method of this TaskGroup. + @param {Object} opts - Optional configuration for the task to be created for the method. + @chainable + @returns {this} + @access private + */ + + }, { + key: "addMethod", + value: function addMethod(method) { + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + method = unbounded.binder.call(method, this); // run the taskgroup method on the group, rather than itself + + method.isTaskGroupMethod = true; + if (!opts.name) opts.name = 'taskgroup method for ' + this.name; + if (!opts.args) opts.args = [this.addTaskGroup.bind(this), this.addTask.bind(this)]; + if (opts.storeResult == null) opts.storeResult = false; // by default, hide result for methods + + this.addTask(method, opts); + return this; + } // --------------------------------- + // Add Item + + /** + Adds a {Task|TaskGroup} instance and configures it from the arguments. + @param {Task|TaskGroup} item - The instance to add. + @param {...*} args - Arguments used to configure the {Task|TaskGroup} instance. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addItem", + value: function addItem(item) { + // Prepare + var me = this; // Only add the item if it exists + + if (!item) return null; // Link our item to ourself + + var itemConfig = { + parent: this + }; // Extract + + var nestedTaskGroupConfig = this.config.nestedTaskGroupConfig; + var nestedTaskConfig = this.config.nestedTaskConfig; + var emitNestedEvents = this.config.emitNestedEvents; + var isTask = Task.isTask(item); + var isTaskGroup = TaskGroup.isTaskGroup(item); // Check + + if (!isTask && !isTaskGroup) { + var error = new Error('Unknown item type'); + this.emit('error', error); + return this; + } // Nested configuration + + + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + if (isTask) item.setConfig.apply(item, [itemConfig, nestedTaskConfig].concat(args));else if (isTaskGroup) item.setConfig.apply(item, [itemConfig, { + nestedTaskConfig: nestedTaskConfig, + nestedTaskGroupConfig: nestedTaskGroupConfig + }, nestedTaskGroupConfig].concat(args)); // Name default + // @todo perhaps this can come after item.add emissions, in case the user wants to set the item name there, + // however that is signficant complexity to test, so for now won't bother + + if (!item.config.name) { + item.config.name = "".concat(item.type, " ").concat(this.totalItems + 1, " for [").concat(this.name, "]"); + } // Store Result Default + // if the item is undecided, then inherit from our decision + // @todo perhaps this can come after item.add emissions, in case the user wants to set the item name there, + // however that is signficant complexity to test, so for now won't bother + + + if (item.config.storeResult == null) { + item.config.storeResult = this.config.storeResult; + } // Add the item + + + this.state.itemsRemaining.push(item); // When the item completes, update our state + + item.done(this.itemDoneCallbackUpdateState.bind(this, item)); // Bubble the nested events if desired + + if (emitNestedEvents) { + item.events.forEach(function (event) { + item.on(event, function () { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + if (isTask) me.emit.apply(me, ["task.".concat(event), item].concat(args));else if (isTaskGroup) me.emit.apply(me, ["task.".concat(event), item].concat(args)); + me.emit.apply(me, ["item.".concat(event), item].concat(args)); + }); + }); + } // Emit + + + if (isTask) this.emit('task.add', item);else if (isTaskGroup) this.emit('group.add', item); + this.emit('item.add', item); // When the item completes, after user events have fired, continue with the next state + + item.done(this.itemDoneCallbackNextState.bind(this, item)); // We may be running and expecting items, if so, fire + // @TODO determine if this should require a new run + + this.fire(); // Chain + + return this; + } + /** + Adds {Task|TaskGroup} instances and configures them from the arguments. + @param {Array} items - Array of {Task|TaskGroup} instances to add to this task group. + @param {...*} args - Arguments used to configure the {Task|TaskGroup} instances. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addItems", + value: function addItems(items) { + var _this5 = this; + + for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { + args[_key4 - 1] = arguments[_key4]; + } + + ensureArray(items).forEach(function (item) { + return _this5.addItem.apply(_this5, [item].concat(args)); + }); + return this; + } // --------------------------------- + // Add Task + + /** + Creates a {Task} instance and configures it from the arguments. + If the first argument is already a {Task} instance, then we configure it with the remaining arguments, instead of creating a new {Task} instance. + @param {...*} args - Arguments used to configure the {Task} instance. + @return {Task} + @access public + */ + + }, { + key: "createTask", + value: function createTask() { + // Prepare + var task; // Support receiving an existing task instance + + for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + if (Task.isTask(args[0])) { + var _task; + + task = args[0]; + + (_task = task).setConfig.apply(_task, _toConsumableArray(args.slice(1))); + } // Support receiving arguments to create a task instance + else { + task = _construct(this.Task, args); + } // Return the new task + + + return task; + } + /** + Adds a {Task} instance and configures it from the arguments. + If a {Task} instance is not supplied, a {Task} instance is created from the arguments. + @param {...*} args - Arguments used to configure the {Task} instance. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTask", + value: function addTask() { + var task = this.createTask.apply(this, arguments); + this.addItem(task); + return this; + } + /** + Adds {Task} instances and configures them from the arguments. + @param {Array} items - Array of {Task} instances to add to this task group. + @param {...*} args - Arguments used to configure the {Task} instances. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTasks", + value: function addTasks(items) { + var _this6 = this; + + for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { + args[_key6 - 1] = arguments[_key6]; + } + + ensureArray(items).forEach(function (item) { + return _this6.addTask.apply(_this6, [item].concat(args)); + }); + return this; + } // --------------------------------- + // Add Group + + /** + Creates a {TaskGroup} instance and configures it from the arguments. + If the first argument is already a {TaskGroup} instance, then we configure it with the remaining arguments, instead of creating a new {TaskGroup} instance. + @param {...*} args - Arguments used to configure the {TaskGroup} instance. + @return {TaskGroup} + @access public + */ + + }, { + key: "createTaskGroup", + value: function createTaskGroup() { + // Prepare + var group; // Support receiving an existing group instance + + for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + args[_key7] = arguments[_key7]; + } + + if (TaskGroup.isTaskGroup(args[0])) { + var _group; + + group = args[0]; + + (_group = group).setConfig.apply(_group, _toConsumableArray(args.slice(1))); + } // Support receiving arguments to create a group instance + else { + group = _construct(this.TaskGroup, args); + } // Return the new group + + + return group; + } + /** + Adds a {TaskGroup} instance and configures it from the arguments. + If a {TaskGroup} instance is not supplied, a {TaskGroup} instance is created from the arguments. + @param {...*} args - Arguments used to configure the {TaskGroup} instance. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTaskGroup", + value: function addTaskGroup() { + var group = this.createTaskGroup.apply(this, arguments); + this.addItem(group); + return this; + } + /** + Adds {TaskGroup} instances and configures them from the arguments. + @param {Array} items - Array of {TaskGroup} instances to add to this task group. + @param {...*} args - Arguments used to configure the {TaskGroup} instances. + @chainable + @returns {this} + @access public + */ + + }, { + key: "addTaskGroups", + value: function addTaskGroups(items) { + var _this7 = this; + + for (var _len8 = arguments.length, args = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) { + args[_key8 - 1] = arguments[_key8]; + } + + ensureArray(items).forEach(function (item) { + return _this7.addTaskGroup.apply(_this7, [item].concat(args)); + }); + return this; + } // =================================== + // Workflow + + /** + Fire the next items. + @return {Array|false} Either an {Array} of items that were fired or `false` if no items were fired. + @access private + */ + + }, { + key: "fireNextItems", + value: function fireNextItems() { + // Prepare + var items = []; // Fire the next items + + /* eslint no-constant-condition:0 */ + + while (true) { + var item = this.fireNextItem(); + + if (item) { + items.push(item); + } else { + break; + } + } // Return the items or false if no items + + + var result = items.length !== 0 ? items : false; + return result; + } + /** + Fire the next item. + @return {Task|TaskGroup|false} Either the {Task|TaskGroup} item that was fired or `false` if no item was fired. + @access private + */ + + }, { + key: "fireNextItem", + value: function fireNextItem() { + // Prepare + var result = false; // Can we run the next item? + + if (this.shouldFire) { + // Fire the next item + // Update our status and notify our listeners + if (this.state.status !== 'running') { + this.state.status = 'running'; + this.emit('running'); + } // Get the next item and bump the running count + + + var item = this.state.itemsRemaining.shift(); + ++this.state.itemsExecutingCount; + item.run(); // Return the item + + result = item; + } // Return + + + return result; + } + /** + What to do when an item is done. Run before user events. + @chainable + @returns {this} + @param {Task|TaskGroup} item - The item that has completed + @param {...*} args - The arguments that the item completed with. + @access private + */ + + }, { + key: "itemDoneCallbackUpdateState", + value: function itemDoneCallbackUpdateState(item) { + // Prepare + var result = this.state.result; // Update error if it exists + + for (var _len9 = arguments.length, args = new Array(_len9 > 1 ? _len9 - 1 : 0), _key9 = 1; _key9 < _len9; _key9++) { + args[_key9 - 1] = arguments[_key9]; + } + + if (this.config.abortOnError && args[0]) { + if (!this.state.error) { + this.state.error = args[0]; + } + } // Add the result if desired + + + if (this.storeResult && item.storeResult) { + result.push(args); + } // Mark that one less item is running and one more item done + + + --this.state.itemsExecutingCount; + ++this.state.itemsDoneCount; // Chain + + return this; + } + /** + What to do when an item is done. Run after user events. + @chainable + @returns {this} + @param {Task|TaskGroup} item - The item that has completed + @access private + */ + + }, { + key: "itemDoneCallbackNextState", + value: function itemDoneCallbackNextState(item) { + // As we no longer have any use for this item, as it has completed, destroy the item if desired + if (this.config.destroyDoneItems) { + item.destroy(); + } // Fire + + + this.fire(); // Chain + + return this; + } + /** + Set our task to the completed state. + @NOTE This doesn't have to be a separate method, it could just go inside `fire` however, it is nice to have here to keep `fire` simple + @chainable + @returns {this} + @access private + */ + + }, { + key: "finish", + value: function finish() { + // Set and emmit the appropriate status for our error or non-error + var error = this.state.error; + var status = error ? 'failed' : 'passed'; + this.state.status = status; + this.emit(status, error); // Notity our listners we have completed + + var args = [error]; + if (this.state.result) args.push(this.state.result); + this.emit.apply(this, ['completed'].concat(args)); // Prevent the error from persisting + + this.state.error = null; // Destroy if desired + + if (this.config.destroyOnceDone) { + this.destroy(); + } + } + /** + @NOTE Perhaps at some point, we can add abort/exit functionality, but these things have to be considered: + What will happen to currently running items? + What will happen to remaining items? + Should it be two methods? .halt() and .abort(error?) + Should it be a state? + Should it alter the state? + Should it clear or destroy? + What is the definition of pausing with this? + Perhaps we need to update the definition of pausing to be halted instead? + How can we apply this to Task and TaskGroup consistently? + @access private + @returns {void} + */ + + }, { + key: "abort", + value: function abort() { + throw new Error('not yet implemented'); + } + /** + Destroy ourself and prevent ourself from executing ever again. + @chainable + @returns {this} + @access public + */ + + }, { + key: "destroy", + value: function destroy() { + // Update our status and notify our listeners + this.state.status = 'destroyed'; + this.emit('destroyed'); // Clear remaining items to prevent them from running + + this.clearRemaining(); // Clear result + + this.resetResult(); // Remove listeners + + this.removeAllListeners(); // Chain + + return this; + } + /** + Internal: Either execute the reamining items we are not paused, or complete execution by exiting. + @chainable + @returns {this} + @access private + */ + + }, { + key: "fire", + value: function fire() { + // Have we started are not destroyed? + if (this.started && this.state.status !== 'destroyed') { + // Check if we are complete, if so, exit + if (this.completed) { + // Finish up + this.finish(); + } // Otherwise continue firing items if we are wanting to pause + else if (!this.shouldPause) { + this.fireNextItems(); + } + } // Chain + + + return this; + } + /** + Start/restart/resume the execution of the TaskGroup. + @chainable + @returns {this} + @access public + */ + + }, { + key: "run", + value: function run() { + var _this8 = this; + + // Prevent running on destroy + if (this.state.status === 'destroyed') { + var error = new Error("Invalid run status for the TaskGroup [".concat(this.names, "], it was [").concat(this.state.status, "].")); + this.emit('error', error); + return this; + } // Put it into pending state + + + this.state.status = 'pending'; + this.emit('pending'); // Prepare result, if it doesn't exist + + if (this.storeResult && this.state.result == null) { + this.state.result = []; + } // Queue the actual running so we can give time for the listeners to complete before continuing + + + queue(function () { + return _this8.fire(); + }); // Chain + + return this; + } + }, { + key: "type", + get: function get() { + return 'taskgroup'; + } + /** + A helper method to check if the passed argument is a {TaskGroup} via instanceof and duck typing. + @param {TaskGroup} group - The possible instance of the {TaskGroup} that we want to check + @return {Boolean} Whether or not the item is a {TaskGroup} instance. + @static + @access public + */ + + }, { + key: "Task", + + /** + A reference to the {Task} class for use in {@link TaskGroup#createTask} if we want to override it. + @type {Task} + @default Task + @access public + */ + get: function get() { + return Task; + } + /** + A reference to the {TaskGroup} class for use in {@link TaskGroup#createTaskGroup} if we want to override it. + @type {TaskGroup} + @default TaskGroup + @access public + */ + + }, { + key: "TaskGroup", + get: function get() { + return TaskGroup; + } // =================================== + // Accessors + + /** + An {Array} of the events that we may emit. + @type {Array} + @access protected + */ + + }, { + key: "events", + get: function get() { + return ['error', 'pending', 'running', 'passed', 'failed', 'completed', 'done', 'destroyed']; + } + /** + Fetches the interpreted value of storeResult + @type {boolean} + @access private + */ + + }, { + key: "storeResult", + get: function get() { + var _this$config = this.config, + storeResult = _this$config.storeResult, + destroyOnceDone = _this$config.destroyOnceDone; + return storeResult == null ? destroyOnceDone : storeResult !== false; + } // ----------------------------------- + // State Accessors + + /** + The first {Error} that has occured. + @type {Error} + @access protected + */ + + }, { + key: "error", + get: function get() { + return this.state.error; + } + /** + A {String} containing our current status. See our {TaskGroup} description for available values. + @type {String} + @access protected + */ + + }, { + key: "status", + get: function get() { + return this.state.status; + } + /** + An {Array} that contains the result property for each completed {Task} and {TaskGroup}. + If no result has occured yet, or we don't care, it is null. + @type {?Array} + @access protected + */ + + }, { + key: "result", + get: function get() { + return this.state.result; + } // --------------------------------- + // Status Accessors + + /** + Gets the total number of items inside our task group. + @type {Number} + @access public + */ + + }, { + key: "totalItems", + get: function get() { + var remaining = this.state.itemsRemaining.length; + var executing = this.state.itemsExecutingCount; + var done = this.state.itemsDoneCount; + var total = executing + remaining + done; + return total; + } + /** + Gets the total number count of each of our item lists. + Returns an {Object} containg the hashes: + - remaining - A {Number} of the names of the remaining items. + - executing - A {Number} of the names of the executing items. + - done - A {Number} of the names of the done items. + - total - A {Number} of the total items we have. + - result - A {Number} of the total results we have. + @type {Object} + @access public + */ + + }, { + key: "itemTotals", + get: function get() { + var remaining = this.state.itemsRemaining.length; + var executing = this.state.itemsExecutingCount; + var done = this.state.itemsDoneCount; + var result = this.state.result && this.state.result.length; + var total = executing + remaining + done; + return { + remaining: remaining, + executing: executing, + done: done, + total: total, + result: result + }; + } + /** + Whether or not we have any items yet to execute. + @type {Boolean} + @access private + */ + + }, { + key: "hasRemaining", + get: function get() { + return this.state.itemsRemaining.length !== 0; + } + /** + Whether or not we have any running items. + @type {Boolean} + @access private + */ + + }, { + key: "hasRunning", + get: function get() { + return this.state.itemsExecutingCount !== 0; + } + /** + Whether or not we have any items running or remaining. + @type {Boolean} + @access private + */ + + }, { + key: "hasItems", + get: function get() { + return this.hasRunning || this.hasRemaining; + } + /** + Whether or not we have an error. + @type {Boolean} + @access private + */ + + }, { + key: "hasError", + get: function get() { + return this.state.error != null; + } + /** + Whether or not we have an error or a result. + @type {Boolean} + @access private + */ + + }, { + key: "hasResult", + get: function get() { + return this.hasError || this.state.result.length !== 0; + } + /** + Whether or not we have any available slots to execute more items. + @type {Boolean} + @access private + */ + + }, { + key: "hasSlots", + get: function get() { + var concurrency = this.config.concurrency; + return concurrency === 0 || this.state.itemsExecutingCount < concurrency; + } + /** + Whether or not we are capable of firing more items. + This is determined whether or not we are not paused, and we have remaning items, and we have slots able to execute those remaning items. + @type {Boolean} + @access private + */ + + }, { + key: "shouldFire", + get: function get() { + return !this.shouldPause && this.hasRemaining && this.hasSlots; + } + /** + Whether or not we have errord and want to pause when we have an error. + @type {Boolean} + @access private + */ + + }, { + key: "shouldPause", + get: function get() { + return this.config.abortOnError && this.hasError; + } + /** + Whether or not we execution is currently paused. + @type {Boolean} + @access private + */ + + }, { + key: "paused", + get: function get() { + return this.shouldPause && !this.hasRunning; + } + /** + Whether or not we have no running or remaining items left. + @type {Boolean} + @access private + */ + + }, { + key: "empty", + get: function get() { + return !this.hasItems; + } + /** + Whether or not we have finished execution. + @type {Boolean} + @access private + */ + + }, { + key: "exited", + get: function get() { + switch (this.state.status) { + case 'passed': + case 'failed': + case 'destroyed': + return true; + + default: + return false; + } + } + /** + Whether or not we have started execution. + @type {Boolean} + @access private + */ + + }, { + key: "started", + get: function get() { + return this.state.status !== 'created'; + } + /** + Whether or not we execution has completed. + Completion of executed is determined of whether or not we have started, and whether or not we are currently paused or have no remaining and running items left + @type {Boolean} + @access private + */ + + }, { + key: "completed", + get: function get() { + return this.started && (this.paused || this.empty); + } + }], [{ + key: "isTaskGroup", + value: function isTaskGroup(group) { + return group && group.type === 'taskgroup' || group instanceof this; + } + }]); + + return TaskGroup; +}(BaseInterface); // Export + + +module.exports = { + TaskGroup: TaskGroup +}; \ No newline at end of file diff --git a/node_modules/taskgroup/edition-node-0.8/util.js b/node_modules/taskgroup/edition-node-0.8/util.js new file mode 100644 index 000000000..18efffd78 --- /dev/null +++ b/node_modules/taskgroup/edition-node-0.8/util.js @@ -0,0 +1,35 @@ +/* eslint no-extra-parens:0 */ +'use strict'; // Domains are crippled in the browser and on node 0.8, so don't use domains in those environments + +var domain = process.browser || process.versions.node.substr(0, 3) === '0.8' ? null : require('domain'); // Cross-platform (node 0.10+, node 0.8+, browser) compatible setImmediate + +var queue = (global || window).setImmediate || process && process.nextTick || function (fn) { + setTimeout(fn, 0); +}; // Convert an error to a string + + +function errorToString(error) { + if (!error) { + return null; + } else if (error.stack) { + return error.stack.toString(); + } else if (error.message) { + return error.message.toString(); + } else { + return error.toString(); + } +} // Ensure that the passed array is actually an array + + +function ensureArray(arr) { + if (!Array.isArray(arr)) arr = [arr]; + return arr; +} // Exports + + +module.exports = { + domain: domain, + queue: queue, + errorToString: errorToString, + ensureArray: ensureArray +}; \ No newline at end of file diff --git a/node_modules/taskgroup/index.js b/node_modules/taskgroup/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/taskgroup/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/taskgroup/package.json b/node_modules/taskgroup/package.json new file mode 100644 index 000000000..dfb8a37fc --- /dev/null +++ b/node_modules/taskgroup/package.json @@ -0,0 +1,215 @@ +{ + "title": "TaskGroup", + "name": "taskgroup", + "version": "5.5.0", + "description": "Group together synchronous and asynchronous tasks and execute them with support for concurrency, naming, and nesting.", + "homepage": "https://github.com/bevry/taskgroup", + "license": "MIT", + "keywords": [ + "flow", + "control", + "async", + "sync", + "tasks", + "batch", + "concurrency" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + }, + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "crito (https://github.com/crito)", + "Peter Flannery (https://github.com/pflannery)", + "Sean Fridman (http://seanfridman.com)", + "dependabot[bot] (http://github.com/apps/dependabot)" + ], + "bugs": { + "url": "https://github.com/bevry/taskgroup/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/taskgroup.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "esnext compiled for browsers with require for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "esnext compiled for node.js 0.8 with require for modules", + "directory": "edition-node-0.8", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.8 || 0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "main": "index.js", + "browser": "edition-browsers/index.js", + "dependencies": { + "ambi": "3.2.0", + "eachr": "^3.2.0", + "editions": "^2.2.0", + "extendr": "^3.5.0", + "safeps": "7.0.1", + "unbounded": "^1.2.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "assert-helpers": "4.10.0", + "babelify": "^10.0.0", + "browserify": "^16.5.0", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.2.1", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-prettier": "^3.1.1", + "jsdoc": "^3.6.3", + "kava": "^3.1.0", + "minami": "^1.2.3", + "prettier": "^1.19.1", + "projectz": "^1.9.0", + "surge": "^0.21.3", + "valid-directory": "^1.0.0" + }, + "scripts": { + "my:meta:web": "browserify ./web/index.js -t babelify --outfile ./web/index.out.js", + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.8", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.8": "env BABEL_ENV=edition-node-0.8 babel --out-dir ./edition-node-0.8 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz && npm run our:meta:web", + "our:meta:docs": "npm run our:meta:docs:jsdoc", + "our:meta:docs:jsdoc": "rm -Rf ./docs && jsdoc --recurse --pedantic --access all --destination ./docs --package ./package.json --readme ./README.md --template ./node_modules/minami ./source && mv ./docs/$npm_package_name/$npm_package_version/* ./docs/ && rm -Rf ./docs/$npm_package_name/$npm_package_version", + "our:meta:projectz": "projectz compile", + "our:meta:web": "npm run my:meta:web", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": "defaults", + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + }, + "edition-node-0.8": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.8" + }, + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/taskgroup/source/index.js b/node_modules/taskgroup/source/index.js new file mode 100644 index 000000000..cd8573e2c --- /dev/null +++ b/node_modules/taskgroup/source/index.js @@ -0,0 +1,5 @@ +'use strict' + +const { Task } = require('./task.js') +const { TaskGroup } = require('./taskgroup.js') +module.exports = { Task, TaskGroup } diff --git a/node_modules/taskgroup/source/interface.js b/node_modules/taskgroup/source/interface.js new file mode 100644 index 000000000..bd6eadca9 --- /dev/null +++ b/node_modules/taskgroup/source/interface.js @@ -0,0 +1,187 @@ +'use strict' + +/** +Base class containing common functionality for {@link Task} and {@link TaskGroup}. + +Adds support for the done event while +ensuring that errors are always handled correctly. +It does this by listening to the `error` and `completed` events, +and when the emit, we check if there is a `done` listener: + +- if there is, then emit the done event with the original event arguments +- if there isn't, then output the error to stderr and throw it. + +Sets the following configuration: + +- `nameSeparator` defaults to `' ➞ '`, used to stringify the result of `.names` + +@class BaseInterface +@extends EventEmitter +@constructor +@access private +*/ +class BaseInterface extends require('events').EventEmitter { + constructor() { + super() + + // Allow extensions of this class to prepare the class instance before anything else fires + if (this.prepare) { + this.prepare() + } + + // Set state and config + if (this.state == null) this.state = {} + if (this.config == null) this.config = {} + if (this.config.nameSeparator == null) this.config.nameSeparator = ' ➞ ' + + // Generate our listener method that we will beind to different events + // to add support for the `done` event and better error/event handling + function listener(event, ...args) { + // Prepare + const error = args[0] + + // has done listener, forward to that + if (this.listeners('done').length !== 0) { + this.emit('done', ...args) + } + + // has error, but no done listener and no event listener, throw error + else if (error && this.listeners(event).length === 1) { + if (event === 'error') { + throw error + } else { + this.emit('error', error) + } + } + } + + // Listen to the different events without listener + this.on('error', listener.bind(this, 'error')) + this.on('completed', listener.bind(this, 'completed')) + // this.on('halted', listener.bind(this, 'halted')) + // ^ @TODO not yet implemented, would be an alternative to pausing + } + + /** + Creates and returns new instance of the current class. + @param {...*} args - The arguments to be forwarded along to the constructor. + @return {BaseInterface} The new instance. + + @static + @access public + */ + static create(...args) { + return new this(...args) + } + + /** + Attaches the listener to the `done` event to be emitted each time. + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + whenDone(listener) { + // Attach the listener + this.on('done', listener.bind(this)) + + // Chain + return this + } + + /** + Attaches the listener to the `done` event to be emitted only once, then removed to not fire again. + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + onceDone(listener) { + // Attach the listener + this.once('done', listener.bind(this)) + + // Chain + return this + } + + /** + Alias for {@link BaseInterface#onceDone} + @param {Function} listener - Attaches to the `done` event. + @chainable + @returns {BaseInterface} this + @access public + */ + done(listener) { + return this.onceDone(listener) + } + + /** + Gets our name prepended by all of our parents names + @type {Array} + @access public + */ + get names() { + // Fetch + const names = [], + { name, parent, nameSeparator } = this.config + if (parent) names.push(...parent.names) + if (name !== false) names.push(this.name) + names.toString = () => names.join(nameSeparator) + + // Return + return names + } + + /** + Get the name of our instance. + If the name was never configured, then return the name in the format of `'${this.type} ${Math.random()}'` to output something like `task 0.2123` + @type {String} + @access public + */ + get name() { + return ( + this.config.name || + this.state.name || + (this.state.name = `${this.type} ${Math.random()}`) + ) + } + + // --------------------------------- + // Backwards compatability helpers + + getNames(opts) { + return opts && opts.separator ? this.names.join(opts.separator) : this.names + } + + getConfig() { + return this.config + } + + getTotalItems() { + return this.totalItems + } + + getItemTotals() { + return this.itemTotals + } + + isCompleted() { + return this.completed + } + + hasStarted() { + return this.started + } + + addGroup(...args) { + return this.addTaskGroup(...args) + } + + clear(...args) { + this.clearRemaining(...args) + return this + } +} + +// Exports +module.exports = { BaseInterface } diff --git a/node_modules/taskgroup/source/task.js b/node_modules/taskgroup/source/task.js new file mode 100644 index 000000000..614877767 --- /dev/null +++ b/node_modules/taskgroup/source/task.js @@ -0,0 +1,603 @@ +/* eslint no-extra-parens:0 func-style:0 */ +'use strict' + +// Imports +const { BaseInterface } = require('./interface.js') +const { queue, domain } = require('./util.js') +const ambi = require('ambi') +const extendr = require('extendr') +const eachr = require('eachr') +const unbounded = require('unbounded') + +/** +Our Task Class + +Available configuration is documented in {@link Task#setConfig}. + +Available events: + +- `pending()` - emitted when execution has been triggered +- `running()` - emitted when the method starts execution +- `failed(error)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(error, ...resultArguments)` - emitted when execution exited, `resultArguments` are the result arguments from the method +- `error(error)` - emtited if an unexpected error occurs without ourself +- `done(error, ...resultArguments)` - emitted when either execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) + +Available internal statuses: + +- `'created'` - execution has not yet started +- `'pending'` - execution has been triggered +- `'running'` - execution of our method has begun +- `'failed'` - execution of our method has failed +- `'passed'` - execution of our method has succeeded +- `'destroyed'` - we've been destroyed and can no longer execute + +@example +const Task = require('taskgroup').Task + +Task.create('my synchronous task', function () { + return 5 +}).done(console.info).run() // [null, 5] + +Task.create('my asynchronous task', function (complete) { + complete(null, 5) +}).done(console.info).run() // [null, 5] + +Task.create('my task that returns an error', function () { + var error = new Error('deliberate error') + return error +}).done(console.info).run() // [Error('deliberator error')] + +Task.create('my task that passes an error', function (complete) { + var error = new Error('deliberate error') + complete(error) +}).done(console.info).run() // [Error('deliberator error')] + +@class Task +@extends BaseInterface +@constructor +@access public +*/ +class Task extends BaseInterface { + constructor(...args) { + // Initialise BaseInterface + super() + + // State defaults + extendr.defaults(this.state, { + result: null, + error: null, + status: 'created' + }) + + // Configuration defaults + extendr.defaults(this.config, { + // Standard + storeResult: null, + destroyOnceDone: true, + parent: null, + + // Unique to Task + method: null, + errorOnExcessCompletions: true, + ambi: true, + domain: null, + args: null + }) + + // Apply user configuration + this.setConfig(...args) + } + + // =================================== + // Typing Helpers + + /** + The type of our class. + + Used for the purpose of duck typing + which is needed when working with node virtual machines + as instanceof will not work in those environments. + + @type {String} + @default 'task' + @access private + */ + get type() { + return 'task' + } + + /** + A helper method to check if the passed argument is a {Task} via instanceof and duck typing. + @param {Task} item - The possible instance of the {Task} that we want to check + @return {Boolean} Whether or not the item is a {Task} instance. + @static + @access public + */ + static isTask(item) { + return (item && item.type === 'task') || item instanceof this + } + + // =================================== + // Accessors + + /** + An {Array} of the events that we may emit. + @type {Array} + @default ['events', 'error', 'pending', 'running', 'failed', 'passed', 'completed', 'done', 'destroyed'] + @access protected + */ + get events() { + return [ + 'events', + 'error', + 'pending', + 'running', + 'failed', + 'passed', + 'completed', + 'done', + 'destroyed' + ] + } + + /** + Fetches the interpreted value of storeResult + @type {boolean} + @access private + */ + get storeResult() { + return this.config.storeResult !== false + } + + // ----------------------------------- + // State Accessors + + /** + The first {Error} that has occured. + @type {Error} + @access protected + */ + get error() { + return this.state.error + } + + /** + A {String} containing our current status. See our {Task} description for available values. + @type {String} + @access protected + */ + get status() { + return this.state.status + } + + /** + An {Array} representing the returned result or the passed {Arguments} of our method (minus the first error argument). + If no result has occured yet, or we don't care, it is null. + @type {?Array} + @access protected + */ + get result() { + return this.state.result + } + + // --------------------------------- + // Status Accessors + + /** + Have we started execution yet? + @type {Boolean} + @access private + */ + get started() { + return this.state.status !== 'created' + } + + /** + Have we finished execution yet? + @type {Boolean} + @access private + */ + get exited() { + switch (this.state.status) { + case 'failed': + case 'passed': + case 'destroyed': + return true + + default: + return false + } + } + + /** + Have we completed execution yet? + @type {Boolean} + @access private + */ + get completed() { + switch (this.state.status) { + case 'failed': + case 'passed': + return true + + default: + return false + } + } + + // --------------------------------- + // State Changers + + /** + Reset the result. + At this point this method is internal, as it's functionality may change in the future, and it's outside use is not yet confirmed. If you need such an ability, let us know via the issue tracker. + @chainable + @returns {this} + @access private + */ + resetResult() { + this.state.result = null + return this + } + + /** + Clear the domain + @chainable + @returns {this} + @access private + */ + clearDomain() { + const taskDomain = this.state.taskDomain + if (taskDomain) { + taskDomain.exit() + taskDomain.removeAllListeners() + this.state.taskDomain = null + } + return this + } + + // =================================== + // Initialization + + /** + Set the configuration for our instance. + + @param {Object} [config] + + @param {String} [config.name] - What we would like our name to be, useful for debugging. + @param {Function} [config.done] - Passed to {@link Task#onceDone} (aliases are `onceDone`, and `next`) + @param {Function} [config.whenDone] - Passed to {@link Task#whenDone} + @param {Object} [config.on] - A map of event names linking to listener functions that we would like bounded via {EventEmitter.on} + @param {Object} [config.once] - A map of event names linking to listener functions that we would like bounded via {EventEmitter.once} + + @param {Boolean} [config.storeResult] - Whether or not to store the result, if `false` will not store + @param {Boolean} [config.destroyOnceDone=true] - Whether or not to automatically destroy the task once it's done to free up resources + @param {TaskGroup} [config.parent] - A parent {@link TaskGroup} that we may be attached to + + @param {Function} [config.method] - The {Function} to execute for our {Task} + @param {Boolean} [config.errorOnExcessCompletions=true] - Whether or not to error if the task completes more than once + @param {Boolean} [config.ambi=true] - Whether or not to use bevry/ambi to determine if the method is asynchronous or synchronous and execute it appropriately + @param {Boolean} [config.domain] - If not `false` will wrap the task execution in a domain to attempt to catch background errors (aka errors that are occuring in other ticks than the initial execution), if `true` will fail if domains aren't available + @param {Array} [config.args] - Arguments that we would like to forward onto our method when we execute it + + @chainable + @returns {this} + @access public + */ + setConfig(...args) { + const opts = {} + + // Extract the configuration from the arguments + args.forEach(function(arg) { + if (arg == null) return + const type = typeof arg + switch (type) { + case 'string': + opts.name = arg + break + case 'function': + opts.method = arg + break + case 'object': + extendr.deep(opts, arg) + break + default: { + throw new Error( + `Unknown argument type of [${type}] given to Task::setConfig()` + ) + } + } + }) + + // Apply the configuration directly to our instance + eachr(opts, (value, key) => { + if (value == null) return + switch (key) { + case 'on': + eachr(value, (value, key) => { + if (value) this.on(key, value) + }) + break + + case 'once': + eachr(value, (value, key) => { + if (value) this.once(key, value) + }) + break + + case 'whenDone': + this.whenDone(value) + break + + case 'onceDone': + case 'done': + case 'next': + this.onceDone(value) + break + + case 'onError': + case 'pauseOnError': + case 'includeInResults': + case 'sync': + case 'timeout': + case 'exit': + throw new Error( + `Deprecated configuration property [${key}] given to Task::setConfig()` + ) + + default: + this.config[key] = value + break + } + }) + + // Chain + return this + } + + // =================================== + // Workflow + + /** + What to do when our task method completes. + Should only ever execute once, if it executes more than once, then we error. + @param {...*} args - The arguments that will be applied to the {@link Task#result} variable. First argument is the {Error} if it exists. + @chainable + @returns {this} + @access private + */ + itemCompletionCallback(...args) { + // Store the first error + let error = this.state.error + if (args[0] && !error) { + this.state.error = error = args[0] + } + + // Complete for the first (and hopefully only) time + if (!this.exited) { + // Apply the result if we want to and it exists + if (this.storeResult) { + this.state.result = args.slice(1) + } + } + + // Finish up + this.finish() + + // Chain + return this + } + + /** + @NOTE Perhaps at some point, we can add abort/exit functionality, but these things have to be considered: + What will happen to currently running items? + What will happen to remaining items? + Should it be two methods? .halt() and .abort(error?) + Should it be a state? + Should it alter the state? + Should it clear or destroy? + What is the definition of pausing with this? + Perhaps we need to update the definition of pausing to be halted instead? + How can we apply this to Task and TaskGroup consistently? + @access private + @returns {void} + */ + abort() { + throw new Error('not yet implemented') + } + + /** + Set our task to the completed state. + @chainable + @returns {this} + @access private + */ + finish() { + const error = this.state.error + + // Complete for the first (and hopefully only) time + if (!this.exited) { + // Set the status and emit depending on success or failure status + const status = error ? 'failed' : 'passed' + this.state.status = status + this.emit(status, error) + + // Notify our listeners we have completed + const args = [error] + if (this.state.result) args.push(...this.state.result) + this.emit('completed', ...args) + + // Prevent the error from persisting + this.state.error = null + + // Destroy if desired + if (this.config.destroyOnceDone) { + this.destroy() + } + } + + // Error as we have already completed before + else if (this.config.errorOnExcessCompletions) { + const source = ( + this.config.method.unbounded || + this.config.method || + 'no longer present' + ).toString() + const completedError = new Error( + `The task [${this.names}] just completed, but it had already completed earlier, this is unexpected.\nTask Source: ${source}` + ) + this.emit('error', completedError) + } + + // Chain + return this + } + + /** + Destroy ourself and prevent ourself from executing ever again. + @chainable + @returns {this} + @access public + */ + destroy() { + // Update our status and notify our listeners + this.state.status = 'destroyed' + this.emit('destroyed') + + // Clear the domain + this.clearDomain() + + // Clear result, in case it keeps references to something + this.resetResult() + + // Remove all listeners + this.removeAllListeners() + + // Chain + return this + } + + /** + Fire the task method with our config arguments and wrapped in a domain. + @chainable + @returns {this} + @access private + */ + fire() { + // Prepare + const taskArgs = (this.config.args || []).slice() + let taskDomain = this.state.taskDomain + const exitMethod = unbounded.binder.call(this.itemCompletionCallback, this) + let method = this.config.method + + // Check that we have a method to fire + if (!method) { + const error = new Error( + `The task [${this.names}] failed to run as no method was defined for it.` + ) + this.emit('error', error) + return this + } + + // Bind method + method = unbounded.binder.call(method, this) + + // Handle domains + if (domain) { + // Prepare the task domain if we want to and if it doesn't already exist + if (!taskDomain && this.config.domain !== false) { + this.state.taskDomain = taskDomain = domain.create() + taskDomain.on('error', exitMethod) + } + } else if (this.config.domain === true) { + const error = new Error( + `The task [${this.names}] failed to run as it requested to use domains but domains are not available.` + ) + this.emit('error', error) + return this + } + + // Domains, as well as process.nextTick, make it so we can't just use exitMethod directly + // Instead we cover it up like so, to ensure the domain exits, as well to ensure the arguments are passed + const completeMethod = (...args) => { + if (taskDomain) { + this.clearDomain() + taskDomain = null + exitMethod(...args) + } else { + // Use the next tick workaround to escape the try...catch scope + // Which would otherwise catch errors inside our code when it shouldn't therefore suppressing errors + queue(function() { + exitMethod(...args) + }) + } + } + + // Our fire function that will be wrapped in a domain or executed directly + const fireMethod = () => { + // Execute with ambi if appropriate + if (this.config.ambi !== false) { + ambi(method, ...taskArgs) + } + + // Otherwise execute directly if appropriate + else { + method(...taskArgs) + } + } + + // Add the competion callback to the arguments our method will receive + taskArgs.push(completeMethod) + + // Notify that we are now running + this.state.status = 'running' + this.emit('running') + + // Fire the method within the domain if desired, otherwise execute directly + if (taskDomain) { + taskDomain.run(fireMethod) + } else { + try { + fireMethod() + } catch (error) { + exitMethod(error) + } + } + + // Chain + return this + } + + /** + Start the execution of the task. + Will emit an `error` event if the task has already started before. + @chainable + @returns {this} + @access public + */ + run() { + // Already started? + if (this.state.status !== 'created') { + const error = new Error( + `Invalid run status for the Task [${this.names}], it was [${this.state.status}] instead of [created].` + ) + this.emit('error', error) + return this + } + + // Put it into pending state + this.state.status = 'pending' + this.emit('pending') + + // Queue the actual running so we can give time for the listeners to complete before continuing + queue(() => this.fire()) + + // Chain + return this + } +} + +// Exports +module.exports = { Task } diff --git a/node_modules/taskgroup/source/taskgroup.js b/node_modules/taskgroup/source/taskgroup.js new file mode 100644 index 000000000..63f607524 --- /dev/null +++ b/node_modules/taskgroup/source/taskgroup.js @@ -0,0 +1,1104 @@ +/* eslint no-extra-parens:0 no-warning-comments:0 */ +'use strict' + +// Imports +const { BaseInterface } = require('./interface.js') +const { Task } = require('./task.js') +const { queue, ensureArray } = require('./util.js') +const extendr = require('extendr') +const eachr = require('eachr') +const unbounded = require('unbounded') + +/** +Our TaskGroup class. + +Available configuration is documented in {@link TaskGroup#setConfig}. + +Available events: + +- `pending()` - emitted when execution has been triggered +- `running()` - emitted when the first item starts execution +- `failed(error)` - emitted when execution exited with a failure +- `passed()` - emitted when execution exited with a success +- `completed(error, result)` - emitted when execution exited, `result` is an {?Array} of the result arguments for each item that executed +- `error(error)` - emtited if an unexpected error occured within ourself +- `done(error, result)` - emitted when either the execution completes (the `completed` event) or when an unexpected error occurs (the `error` event) +- `item.*(...)` - bubbled events from an added item +- `task.*(...)` - bubbled events from an added {Task} +- `group.*(...)` - bubbled events from an added {TaskGroup} + +Available internal statuses: + +- `'created'` - execution has not yet started +- `'pending'` - execution has been triggered +- `'running'` - execution of items has begun +- `'failed'` - execution has exited with failure status +- `'passed'` - execution has exited with success status +- `'destroyed'` - we've been destroyed and can no longer execute + +@constructor +@class TaskGroup +@extends BaseInterface +@access public +*/ +class TaskGroup extends BaseInterface { + constructor(...args) { + super() + + // Prepare (used for class extensions) + if (this.prepare) { + this.prepare(...args) + } + + // State defaults + extendr.defaults(this.state, { + result: null, + error: null, + status: 'created', + itemsRemaining: [], + itemsExecutingCount: 0, + itemsDoneCount: 0 + }) + + // Configuration defaults + extendr.defaults(this.config, { + // Standard + storeResult: null, + destroyOnceDone: true, + parent: null, + + // Unique to TaskGroup + method: null, + abortOnError: true, + destroyDoneItems: true, + nestedTaskConfig: {}, + nestedTaskGroupConfig: {}, + emitNestedEvents: false, + concurrency: 1, + run: null + }) + + // Apply user configuration + this.setConfig(...args) + + // Give setConfig enough chance to fire + // Changing this to setImmediate breaks a lot of things + // As tasks inside nested taskgroups will fire in any order + queue(unbounded.binder.call(this.autoRun, this)) + } + + // =================================== + // Typing Helpers + + /** + The type of our class. + Used for the purpose of duck typing which is needed when working with node virtual machines + as instanceof will not work in those environments. + @type {String} + @default 'taskgroup' + @access private + */ + get type() { + return 'taskgroup' + } + + /** + A helper method to check if the passed argument is a {TaskGroup} via instanceof and duck typing. + @param {TaskGroup} group - The possible instance of the {TaskGroup} that we want to check + @return {Boolean} Whether or not the item is a {TaskGroup} instance. + @static + @access public + */ + static isTaskGroup(group) { + return (group && group.type === 'taskgroup') || group instanceof this + } + + /** + A reference to the {Task} class for use in {@link TaskGroup#createTask} if we want to override it. + @type {Task} + @default Task + @access public + */ + get Task() { + return Task + } + + /** + A reference to the {TaskGroup} class for use in {@link TaskGroup#createTaskGroup} if we want to override it. + @type {TaskGroup} + @default TaskGroup + @access public + */ + get TaskGroup() { + return TaskGroup + } + + // =================================== + // Accessors + + /** + An {Array} of the events that we may emit. + @type {Array} + @access protected + */ + get events() { + return [ + 'error', + 'pending', + 'running', + 'passed', + 'failed', + 'completed', + 'done', + 'destroyed' + ] + } + + /** + Fetches the interpreted value of storeResult + @type {boolean} + @access private + */ + get storeResult() { + const { storeResult, destroyOnceDone } = this.config + return storeResult == null ? destroyOnceDone : storeResult !== false + } + + // ----------------------------------- + // State Accessors + + /** + The first {Error} that has occured. + @type {Error} + @access protected + */ + get error() { + return this.state.error + } + + /** + A {String} containing our current status. See our {TaskGroup} description for available values. + @type {String} + @access protected + */ + get status() { + return this.state.status + } + + /** + An {Array} that contains the result property for each completed {Task} and {TaskGroup}. + If no result has occured yet, or we don't care, it is null. + @type {?Array} + @access protected + */ + get result() { + return this.state.result + } + + // --------------------------------- + // Status Accessors + + /** + Gets the total number of items inside our task group. + @type {Number} + @access public + */ + get totalItems() { + const remaining = this.state.itemsRemaining.length + const executing = this.state.itemsExecutingCount + const done = this.state.itemsDoneCount + const total = executing + remaining + done + return total + } + + /** + Gets the total number count of each of our item lists. + + Returns an {Object} containg the hashes: + + - remaining - A {Number} of the names of the remaining items. + - executing - A {Number} of the names of the executing items. + - done - A {Number} of the names of the done items. + - total - A {Number} of the total items we have. + - result - A {Number} of the total results we have. + + @type {Object} + @access public + */ + get itemTotals() { + const remaining = this.state.itemsRemaining.length + const executing = this.state.itemsExecutingCount + const done = this.state.itemsDoneCount + const result = this.state.result && this.state.result.length + const total = executing + remaining + done + return { + remaining, + executing, + done, + total, + result + } + } + + /** + Whether or not we have any items yet to execute. + @type {Boolean} + @access private + */ + get hasRemaining() { + return this.state.itemsRemaining.length !== 0 + } + + /** + Whether or not we have any running items. + @type {Boolean} + @access private + */ + get hasRunning() { + return this.state.itemsExecutingCount !== 0 + } + + /** + Whether or not we have any items running or remaining. + @type {Boolean} + @access private + */ + get hasItems() { + return this.hasRunning || this.hasRemaining + } + + /** + Whether or not we have an error. + @type {Boolean} + @access private + */ + get hasError() { + return this.state.error != null + } + + /** + Whether or not we have an error or a result. + @type {Boolean} + @access private + */ + get hasResult() { + return this.hasError || this.state.result.length !== 0 + } + + /** + Whether or not we have any available slots to execute more items. + @type {Boolean} + @access private + */ + get hasSlots() { + const concurrency = this.config.concurrency + return concurrency === 0 || this.state.itemsExecutingCount < concurrency + } + + /** + Whether or not we are capable of firing more items. + This is determined whether or not we are not paused, and we have remaning items, and we have slots able to execute those remaning items. + @type {Boolean} + @access private + */ + get shouldFire() { + return !this.shouldPause && this.hasRemaining && this.hasSlots + } + + /** + Whether or not we have errord and want to pause when we have an error. + @type {Boolean} + @access private + */ + get shouldPause() { + return this.config.abortOnError && this.hasError + } + + /** + Whether or not we execution is currently paused. + @type {Boolean} + @access private + */ + get paused() { + return this.shouldPause && !this.hasRunning + } + + /** + Whether or not we have no running or remaining items left. + @type {Boolean} + @access private + */ + get empty() { + return !this.hasItems + } + + /** + Whether or not we have finished execution. + @type {Boolean} + @access private + */ + get exited() { + switch (this.state.status) { + case 'passed': + case 'failed': + case 'destroyed': + return true + + default: + return false + } + } + + /** + Whether or not we have started execution. + @type {Boolean} + @access private + */ + get started() { + return this.state.status !== 'created' + } + + /** + Whether or not we execution has completed. + Completion of executed is determined of whether or not we have started, and whether or not we are currently paused or have no remaining and running items left + @type {Boolean} + @access private + */ + get completed() { + return this.started && (this.paused || this.empty) + } + + // --------------------------------- + // State Changers + + /** + Reset the result. + At this point this method is internal, as it's functionality may change in the future, and it's outside use is not yet confirmed. If you need such an ability, let us know via the issue tracker. + @chainable + @returns {this} + @access private + */ + resetResult() { + this.state.result = null + + // Chain + return this + } + + /** + Remove and destroy the remaining items. + @chainable + @returns {number} the amount of items that were dropped + @access public + */ + clearRemaining() { + let dropped = 0 + const itemsRemaining = this.state.itemsRemaining + while (itemsRemaining.length !== 0) { + itemsRemaining.pop().destroy() + ++dropped + } + + // Return + return dropped + } + + /** + Remove and destroy the running items. Here for verboseness. + @chainable + @returns {this} + @access private + */ + clearRunning() { + const error = new Error( + 'Clearing running items is not possible. Instead remaining items and wait for running items to complete.' + ) + this.emit('error', error) + return this + } + + // =================================== + // Initialization + + /** + Autorun ourself under certain conditions. + + Those conditions being: + + - if we the :method configuration is defined, and we have no :parent + - if we the :run configuration is `true` + + Used primarily to cause the :method to fire at the appropriate time when using inline style. + + @chainable + @returns {this} + @access private + */ + autoRun() { + // Prepare + const method = this.config.method + let run = this.config.run + + // Auto run if we are going the inline style and have no parent + if (method) { + // Add the function as our first unamed task with the extra arguments + this.addMethod(method) + + // If we are the topmost group default run to true + if (!this.config.parent && run == null) { + this.state.run = run = true + } + } + + // Auto run if we are configured to + if (run) { + this.run() + } + + // Chain + return this + } + + /** + Set the configuration for our instance. + + Despite accepting an {Object} of configuration, we can also accept an {Array} of configuration. + When using an array, a {String} becomes the :name, a {Function} becomes the :method, and an {Object} becomes the :config + + @param {Object} [config] + + @param {String} [config.name] - What we would like our name to be, useful for debugging + @param {Function} [config.done] - Passed to {@link TaskGroup#onceDone} (aliases are `onceDone`, and `next`) + @param {Function} [config.whenDone] - Passed to {@link TaskGroup#whenDone} + @param {Object} [config.on] - An object of event names linking to listener functions that we would like bounded via {@link EventEmitter#on} + @param {Object} [config.once] - An object of event names linking to listener functions that we would like bounded via {@link EventEmitter#once} + + @param {Boolean} [config.storeResult] - Whether or not to store the result, if `false` will not store, defaults to `false` if `destroyOnceDone` is `true` + @param {Boolean} [config.destroyOnceDone=true] - Whether or not we should automatically destroy the {TaskGroup} once done to free up resources + @param {TaskGroup} [config.parent] - A parent {TaskGroup} that we may be attached to + + @param {Function} [config.method] - The {Function} to execute for our {TaskGroup} when using inline execution style + @param {Boolean} [config.abortOnError=true] - Whether or not we should abort execution of the {TaskGroup} and exit when an error occurs + @param {Boolean} [config.destroyDoneItems=true] - Whether or not we should automatically destroy done items to free up resources + @param {Object} [config.nestedTaskGroupConfig] - The nested configuration to be applied to all {TaskGroup} descendants of this group + @param {Object} [config.nestedTaskConfig] - The nested configuration to be applied to all {Task} descendants of this group + @param {Boolean} [config.emitNestedEvents=false] - Whether or not we should emit nested item events @TODO remove this, there are not tests for it, can be accomplished via item.add listener like TaskGroupDebug + @param {Number} [config.concurrency=1] - The amount of items that we would like to execute at the same time. Use `0` for unlimited. `1` accomplishes serial execution, everything else accomplishes parallel execution + @param {Boolean} [config.run] - A {Boolean} for whether or not to run the TaskGroup automatically, by default will be enabled if config.method is defined + + @param {Array} [config.tasks] - An {Array} of {Task} instances to be added to this group + @param {Array} [config.taskgroups] - An {Array} of {TaskGroup} instances to be added to this group + @param {Array} [config.items] - An {Array} of {Task} and/or {TaskGroup} instances to be added to this group + + @chainable + @returns {this} + @access public + */ + setConfig(...args) { + const opts = {} + + // Extract the configuration from the arguments + args.forEach(function(arg) { + if (arg == null) return + const type = typeof arg + switch (type) { + case 'string': + opts.name = arg + break + case 'function': + opts.method = arg + break + case 'object': + extendr.deep(opts, arg) // @TODO why deep? + break + default: { + throw new Error( + `Unknown argument type of [${type}] given to TaskGroup::setConfig()` + ) + } + } + }) + + // Apply the configuration directly to our instance + eachr(opts, (value, key) => { + if (value == null) return + switch (key) { + case 'on': + eachr(value, (value, key) => { + if (value) this.on(key, value) + }) + break + + case 'once': + eachr(value, (value, key) => { + if (value) this.once(key, value) + }) + break + + case 'whenDone': + this.whenDone(value) + break + + case 'onceDone': + case 'done': + case 'next': + this.done(value) + break + + case 'task': + case 'tasks': + this.addTasks(value) + break + + case 'group': + case 'groups': + case 'taskgroup': + case 'taskgroups': + this.addTaskGroups(value) + break + + case 'item': + case 'items': + this.addItems(value) + break + + case 'onError': + case 'pauseOnError': + case 'includeInResults': + case 'sync': + case 'timeout': + case 'exit': + case 'nestedConfig': + throw new Error( + `Deprecated configuration property [${key}] given to TaskGroup::setConfig()` + ) + + default: + this.config[key] = value + break + } + }) + + // Chain + return this + } + + /** + Merge passed configuration into {config.nestedTaskConfig}. + @param {Object} opts - The configuration to merge. + @chainable + @returns {this} + @access public + */ + setNestedTaskConfig(opts) { + // Fetch and copy options to the state's nested task configuration + extendr.deep(this.state.nestedTaskConfig, opts) + + // Chain + return this + } + + /** + Merge passed configuration into {config.nestedTaskGroupConfig}. + @param {Object} opts - The configuration to merge. + @chainable + @returns {this} + @access public + */ + setNestedTaskGroupConfig(opts) { + // Fetch and copy options to the state's nested configuration + extendr.deep(this.state.nestedTaskGroupConfig, opts) + + // Chain + return this + } + + // =================================== + // Items + + // --------------------------------- + // TaskGroup Method + + /** + Prepare the method and it's configuration, and add it as a task to be executed. + @param {Function} method - The function we want to execute as the method of this TaskGroup. + @param {Object} opts - Optional configuration for the task to be created for the method. + @chainable + @returns {this} + @access private + */ + addMethod(method, opts = {}) { + method = unbounded.binder.call(method, this) // run the taskgroup method on the group, rather than itself + method.isTaskGroupMethod = true + if (!opts.name) opts.name = 'taskgroup method for ' + this.name + if (!opts.args) + opts.args = [this.addTaskGroup.bind(this), this.addTask.bind(this)] + if (opts.storeResult == null) opts.storeResult = false // by default, hide result for methods + this.addTask(method, opts) + return this + } + + // --------------------------------- + // Add Item + + /** + Adds a {Task|TaskGroup} instance and configures it from the arguments. + @param {Task|TaskGroup} item - The instance to add. + @param {...*} args - Arguments used to configure the {Task|TaskGroup} instance. + @chainable + @returns {this} + @access public + */ + addItem(item, ...args) { + // Prepare + const me = this + + // Only add the item if it exists + if (!item) return null + + // Link our item to ourself + const itemConfig = { + parent: this + } + + // Extract + const nestedTaskGroupConfig = this.config.nestedTaskGroupConfig + const nestedTaskConfig = this.config.nestedTaskConfig + const emitNestedEvents = this.config.emitNestedEvents + const isTask = Task.isTask(item) + const isTaskGroup = TaskGroup.isTaskGroup(item) + + // Check + if (!isTask && !isTaskGroup) { + const error = new Error('Unknown item type') + this.emit('error', error) + return this + } + + // Nested configuration + if (isTask) item.setConfig(itemConfig, nestedTaskConfig, ...args) + else if (isTaskGroup) + item.setConfig( + itemConfig, + { nestedTaskConfig, nestedTaskGroupConfig }, + nestedTaskGroupConfig, + ...args + ) + + // Name default + // @todo perhaps this can come after item.add emissions, in case the user wants to set the item name there, + // however that is signficant complexity to test, so for now won't bother + if (!item.config.name) { + item.config.name = `${item.type} ${this.totalItems + 1} for [${ + this.name + }]` + } + + // Store Result Default + // if the item is undecided, then inherit from our decision + // @todo perhaps this can come after item.add emissions, in case the user wants to set the item name there, + // however that is signficant complexity to test, so for now won't bother + if (item.config.storeResult == null) { + item.config.storeResult = this.config.storeResult + } + + // Add the item + this.state.itemsRemaining.push(item) + + // When the item completes, update our state + item.done(this.itemDoneCallbackUpdateState.bind(this, item)) + + // Bubble the nested events if desired + if (emitNestedEvents) { + item.events.forEach(function(event) { + item.on(event, function(...args) { + if (isTask) me.emit(`task.${event}`, item, ...args) + else if (isTaskGroup) me.emit(`task.${event}`, item, ...args) + me.emit(`item.${event}`, item, ...args) + }) + }) + } + + // Emit + if (isTask) this.emit('task.add', item) + else if (isTaskGroup) this.emit('group.add', item) + this.emit('item.add', item) + + // When the item completes, after user events have fired, continue with the next state + item.done(this.itemDoneCallbackNextState.bind(this, item)) + + // We may be running and expecting items, if so, fire + // @TODO determine if this should require a new run + this.fire() + + // Chain + return this + } + + /** + Adds {Task|TaskGroup} instances and configures them from the arguments. + @param {Array} items - Array of {Task|TaskGroup} instances to add to this task group. + @param {...*} args - Arguments used to configure the {Task|TaskGroup} instances. + @chainable + @returns {this} + @access public + */ + addItems(items, ...args) { + ensureArray(items).forEach(item => this.addItem(item, ...args)) + return this + } + + // --------------------------------- + // Add Task + + /** + Creates a {Task} instance and configures it from the arguments. + If the first argument is already a {Task} instance, then we configure it with the remaining arguments, instead of creating a new {Task} instance. + @param {...*} args - Arguments used to configure the {Task} instance. + @return {Task} + @access public + */ + createTask(...args) { + // Prepare + let task + + // Support receiving an existing task instance + if (Task.isTask(args[0])) { + task = args[0] + task.setConfig(...args.slice(1)) + } + + // Support receiving arguments to create a task instance + else { + task = new this.Task(...args) + } + + // Return the new task + return task + } + + /** + Adds a {Task} instance and configures it from the arguments. + If a {Task} instance is not supplied, a {Task} instance is created from the arguments. + @param {...*} args - Arguments used to configure the {Task} instance. + @chainable + @returns {this} + @access public + */ + addTask(...args) { + const task = this.createTask(...args) + this.addItem(task) + return this + } + + /** + Adds {Task} instances and configures them from the arguments. + @param {Array} items - Array of {Task} instances to add to this task group. + @param {...*} args - Arguments used to configure the {Task} instances. + @chainable + @returns {this} + @access public + */ + addTasks(items, ...args) { + ensureArray(items).forEach(item => this.addTask(item, ...args)) + return this + } + + // --------------------------------- + // Add Group + + /** + Creates a {TaskGroup} instance and configures it from the arguments. + If the first argument is already a {TaskGroup} instance, then we configure it with the remaining arguments, instead of creating a new {TaskGroup} instance. + @param {...*} args - Arguments used to configure the {TaskGroup} instance. + @return {TaskGroup} + @access public + */ + createTaskGroup(...args) { + // Prepare + let group + + // Support receiving an existing group instance + if (TaskGroup.isTaskGroup(args[0])) { + group = args[0] + group.setConfig(...args.slice(1)) + } + + // Support receiving arguments to create a group instance + else { + group = new this.TaskGroup(...args) + } + + // Return the new group + return group + } + + /** + Adds a {TaskGroup} instance and configures it from the arguments. + If a {TaskGroup} instance is not supplied, a {TaskGroup} instance is created from the arguments. + @param {...*} args - Arguments used to configure the {TaskGroup} instance. + @chainable + @returns {this} + @access public + */ + addTaskGroup(...args) { + const group = this.createTaskGroup(...args) + this.addItem(group) + return this + } + + /** + Adds {TaskGroup} instances and configures them from the arguments. + @param {Array} items - Array of {TaskGroup} instances to add to this task group. + @param {...*} args - Arguments used to configure the {TaskGroup} instances. + @chainable + @returns {this} + @access public + */ + addTaskGroups(items, ...args) { + ensureArray(items).forEach(item => this.addTaskGroup(item, ...args)) + return this + } + + // =================================== + // Workflow + + /** + Fire the next items. + @return {Array|false} Either an {Array} of items that were fired or `false` if no items were fired. + @access private + */ + fireNextItems() { + // Prepare + const items = [] + + // Fire the next items + /* eslint no-constant-condition:0 */ + while (true) { + const item = this.fireNextItem() + if (item) { + items.push(item) + } else { + break + } + } + + // Return the items or false if no items + const result = items.length !== 0 ? items : false + return result + } + + /** + Fire the next item. + @return {Task|TaskGroup|false} Either the {Task|TaskGroup} item that was fired or `false` if no item was fired. + @access private + */ + fireNextItem() { + // Prepare + let result = false + + // Can we run the next item? + if (this.shouldFire) { + // Fire the next item + + // Update our status and notify our listeners + if (this.state.status !== 'running') { + this.state.status = 'running' + this.emit('running') + } + + // Get the next item and bump the running count + const item = this.state.itemsRemaining.shift() + ++this.state.itemsExecutingCount + item.run() + + // Return the item + result = item + } + + // Return + return result + } + + /** + What to do when an item is done. Run before user events. + @chainable + @returns {this} + @param {Task|TaskGroup} item - The item that has completed + @param {...*} args - The arguments that the item completed with. + @access private + */ + itemDoneCallbackUpdateState(item, ...args) { + // Prepare + const result = this.state.result + + // Update error if it exists + if (this.config.abortOnError && args[0]) { + if (!this.state.error) { + this.state.error = args[0] + } + } + + // Add the result if desired + if (this.storeResult && item.storeResult) { + result.push(args) + } + + // Mark that one less item is running and one more item done + --this.state.itemsExecutingCount + ++this.state.itemsDoneCount + + // Chain + return this + } + + /** + What to do when an item is done. Run after user events. + @chainable + @returns {this} + @param {Task|TaskGroup} item - The item that has completed + @access private + */ + itemDoneCallbackNextState(item) { + // As we no longer have any use for this item, as it has completed, destroy the item if desired + if (this.config.destroyDoneItems) { + item.destroy() + } + + // Fire + this.fire() + + // Chain + return this + } + + /** + Set our task to the completed state. + @NOTE This doesn't have to be a separate method, it could just go inside `fire` however, it is nice to have here to keep `fire` simple + @chainable + @returns {this} + @access private + */ + finish() { + // Set and emmit the appropriate status for our error or non-error + const error = this.state.error + const status = error ? 'failed' : 'passed' + this.state.status = status + this.emit(status, error) + + // Notity our listners we have completed + const args = [error] + if (this.state.result) args.push(this.state.result) + this.emit('completed', ...args) + + // Prevent the error from persisting + this.state.error = null + + // Destroy if desired + if (this.config.destroyOnceDone) { + this.destroy() + } + } + + /** + @NOTE Perhaps at some point, we can add abort/exit functionality, but these things have to be considered: + What will happen to currently running items? + What will happen to remaining items? + Should it be two methods? .halt() and .abort(error?) + Should it be a state? + Should it alter the state? + Should it clear or destroy? + What is the definition of pausing with this? + Perhaps we need to update the definition of pausing to be halted instead? + How can we apply this to Task and TaskGroup consistently? + @access private + @returns {void} + */ + abort() { + throw new Error('not yet implemented') + } + + /** + Destroy ourself and prevent ourself from executing ever again. + @chainable + @returns {this} + @access public + */ + destroy() { + // Update our status and notify our listeners + this.state.status = 'destroyed' + this.emit('destroyed') + + // Clear remaining items to prevent them from running + this.clearRemaining() + + // Clear result + this.resetResult() + + // Remove listeners + this.removeAllListeners() + + // Chain + return this + } + + /** + Internal: Either execute the reamining items we are not paused, or complete execution by exiting. + @chainable + @returns {this} + @access private + */ + fire() { + // Have we started are not destroyed? + if (this.started && this.state.status !== 'destroyed') { + // Check if we are complete, if so, exit + if (this.completed) { + // Finish up + this.finish() + } + + // Otherwise continue firing items if we are wanting to pause + else if (!this.shouldPause) { + this.fireNextItems() + } + } + + // Chain + return this + } + + /** + Start/restart/resume the execution of the TaskGroup. + @chainable + @returns {this} + @access public + */ + run() { + // Prevent running on destroy + if (this.state.status === 'destroyed') { + const error = new Error( + `Invalid run status for the TaskGroup [${this.names}], it was [${this.state.status}].` + ) + this.emit('error', error) + return this + } + + // Put it into pending state + this.state.status = 'pending' + this.emit('pending') + + // Prepare result, if it doesn't exist + if (this.storeResult && this.state.result == null) { + this.state.result = [] + } + + // Queue the actual running so we can give time for the listeners to complete before continuing + queue(() => this.fire()) + + // Chain + return this + } +} + +// Export +module.exports = { TaskGroup } diff --git a/node_modules/taskgroup/source/util.js b/node_modules/taskgroup/source/util.js new file mode 100644 index 000000000..96f4359f1 --- /dev/null +++ b/node_modules/taskgroup/source/util.js @@ -0,0 +1,38 @@ +/* eslint no-extra-parens:0 */ +'use strict' + +// Domains are crippled in the browser and on node 0.8, so don't use domains in those environments +const domain = + process.browser || process.versions.node.substr(0, 3) === '0.8' + ? null + : require('domain') + +// Cross-platform (node 0.10+, node 0.8+, browser) compatible setImmediate +const queue = + (global || window).setImmediate || + (process && process.nextTick) || + function(fn) { + setTimeout(fn, 0) + } + +// Convert an error to a string +function errorToString(error) { + if (!error) { + return null + } else if (error.stack) { + return error.stack.toString() + } else if (error.message) { + return error.message.toString() + } else { + return error.toString() + } +} + +// Ensure that the passed array is actually an array +function ensureArray(arr) { + if (!Array.isArray(arr)) arr = [arr] + return arr +} + +// Exports +module.exports = { domain, queue, errorToString, ensureArray } diff --git a/node_modules/toc/.jshintrc b/node_modules/toc/.jshintrc new file mode 100644 index 000000000..8c86fc799 --- /dev/null +++ b/node_modules/toc/.jshintrc @@ -0,0 +1,14 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": true, + "newcap": true, + "noarg": true, + "sub": true, + "undef": true, + "unused": true, + "boss": true, + "eqnull": true, + "node": true +} diff --git a/node_modules/toc/.npmignore b/node_modules/toc/.npmignore new file mode 100644 index 000000000..2ccbe4656 --- /dev/null +++ b/node_modules/toc/.npmignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/node_modules/toc/.travis.yml b/node_modules/toc/.travis.yml new file mode 100644 index 000000000..99caccbb0 --- /dev/null +++ b/node_modules/toc/.travis.yml @@ -0,0 +1,11 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.11" +before_script: + - npm install -g grunt-cli +matrix: + fast_finish: true + allow_failures: + - node_js: "0.11" diff --git a/node_modules/toc/Gruntfile.js b/node_modules/toc/Gruntfile.js new file mode 100644 index 000000000..a456cfa93 --- /dev/null +++ b/node_modules/toc/Gruntfile.js @@ -0,0 +1,48 @@ +'use strict'; + +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + nodeunit: { + files: ['test/**/*_test.js'], + }, + jshint: { + options: { + jshintrc: '.jshintrc' + }, + gruntfile: { + src: 'Gruntfile.js' + }, + lib: { + src: ['lib/**/*.js'] + }, + test: { + src: ['test/**/*.js'] + }, + }, + watch: { + gruntfile: { + files: '<%= jshint.gruntfile.src %>', + tasks: ['jshint:gruntfile'] + }, + lib: { + files: ['<%= jshint.lib.src %>'], + tasks: ['jshint:lib', 'nodeunit'] + }, + test: { + files: ['<%= jshint.test.src %>', 'test/fixtures/*.html'], + tasks: ['jshint:test', 'nodeunit'] + }, + }, + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-nodeunit'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + grunt.registerTask('test', ['jshint', 'nodeunit']); + grunt.registerTask('default', ['test']); + +}; diff --git a/node_modules/toc/LICENSE-MIT b/node_modules/toc/LICENSE-MIT new file mode 100644 index 000000000..bb2aad6dc --- /dev/null +++ b/node_modules/toc/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) 2013 "Cowboy" Ben Alman + +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. diff --git a/node_modules/toc/README.md b/node_modules/toc/README.md new file mode 100644 index 000000000..62b837b54 --- /dev/null +++ b/node_modules/toc/README.md @@ -0,0 +1,107 @@ +# toc [![Build Status](https://secure.travis-ci.org/cowboy/node-toc.png?branch=master)](http://travis-ci.org/cowboy/node-toc) + +Linkify HTML headers and generate a TOC. + +## Getting Started +Install the module with: `npm install toc` + +```js +var toc = require('toc'); +``` + +## Documentation + +### toc.untag +Strip HTML tags from a string. + +```js +var stripped = toc.untag(html); +``` + +### toc.anchor +Convert a string of text into something URL-friendly and not too fugly. + +```js +var anchor = toc.anchor(arbitraryText); +``` + + +### toc.unique +Get a unique name and store the returned name in names for future unique-name-gettingness. + +```js +var names = {}; +var guaranteedUniqueAnchor1 = toc.unique(names, toc.anchor(arbitraryText)); +var guaranteedUniqueAnchor2 = toc.unique(names, toc.anchor(arbitraryText)); +``` + + +### toc.process +Anchorize all headers and inline a generated TOC, returning processed HTML. + +```js +var htmlWithAnchorsAndTOC = toc.process(html [, options]); +``` + +#### options + +* **placeholder** - `RegExp` - Used to match TOC placeholder. Defaults to `//gi`. +* _Because this method calls the `toc.anchorize` and `toc.toc` methods internally, their options may be specified as well._ + + +### toc.anchorize +Parse HTML, returning an array of header objects and anchorized HTML. + +```js +var obj = toc.anchorize(html [, options]); +``` + +#### options + +* **headers** - `RegExp` - Used to match HTML headers. Defaults to `/]*)>([\s\S]+?)<\/h\1>/gi`. +* **tocMin** - `Number` - Min header level to add to TOC. Defaults to `2`. +* **tocMax** - `Number` - Max header level to add to TOC. Defaults to `6`. +* **anchorMin** - `Number` - Min header level to anchorize. Defaults to `2`. +* **anchorMax** - `Number` - Max header level to anchorize. Defaults to `6`. +* **header** - `String` | `Function` - Lodash template string or function used to anchorize a header. + + +### toc.toc +Generate TOC HTML from an array of header objects. + +```js +var obj = toc.toc(headers [, options]); +``` + +#### options + +* **openUL** - `String` | `Function` - Lodash template string or function used to generate the TOC. +* **closeUL** - `String` | `Function` - Lodash template string or function used to generate the TOC. +* **openLI** - `String` | `Function` - Lodash template string or function used to generate the TOC. +* **closeLI** - `String` | `Function` - Lodash template string or function used to generate the TOC. +* **TOC** - `String` | `Function` - Lodash template string or function used to wrap the generated TOC. + + +## Examples + +The default HTML is pretty awesome, but you can customize the hell out of the generated HTML, eg. + +```js +var processedHTML = toc.process(unprocessedHTML, { + header: '<%= attrs %> id="<%= anchor %>"><%= header %>>', + TOC: '
      <%= toc %>
      ', + openUL: '
        ', + closeUL: '
      ', + openLI: '
    3. <%= text %>', + closeLI: '
    4. ', +}); +``` + +## Contributing +In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). + +## Release History +2014-02-28 - v0.4.0 - Updated a bunch of dependencies. Functionality shouldn't change, and all test pass, but YMMV. +2013-03-08 - v0.3.0 - Separated `.process` method internals into `.anchorize` and `.toc` methods. Renamed `toc` template option to `TOC`. +2013-03-07 - v0.2.0 - Second official release. Minor changes. +2013-03-07 - v0.1.0 - First official release. diff --git a/node_modules/toc/lib/toc.js b/node_modules/toc/lib/toc.js new file mode 100644 index 000000000..118e8eebc --- /dev/null +++ b/node_modules/toc/lib/toc.js @@ -0,0 +1,177 @@ +/* + * toc + * https://github.com/cowboy/node-toc + * + * Copyright (c) 2013 "Cowboy" Ben Alman + * Licensed under the MIT license. + */ + +'use strict'; + +var _ = require('lodash'); + +var toc = exports; + +// Default options. +toc.defaults = { + // DEFAULTS FOR toc.process() + // + // RegExp to replace with generated TOC. + placeholder: //gi, + + // DEFAULTS FOR toc.anchorize() + // + // Match H? headers and all their contents. + headers: /]*)>([\s\S]+?)<\/h\1>/gi, + // Min and max headers to add to TOC. + tocMin: 2, + tocMax: 6, + // Min and max headers to anchorize. + anchorMin: 2, + anchorMax: 6, + // Anchorized header template. + header: '<%= attrs %>><%= header %>>', + + // DEFAULTS FOR toc.toc() + // + // TOC part templates. + openUL: '
        ', + closeUL: '
      ', + openLI: '
    5. <%= text %>', + // openLI: '
    6. <%= text %> (<%= depth %> / H<%= level %>)', + closeLI: '
    7. ', + // Main TOC template. + TOC: '
      <%= toc %>
      ', +}; + +// Strip HTML tags from a string. +toc.untag = function(s) { + return s.replace(/<[^>]*>/g, ''); +}; + +// Convert a string of text into something URL-friendly and not too fugly. +toc.anchor = function(s) { + var slug = require('slug'); + var entities = require('entities'); + + s = toc.untag(s); + s = s.toLowerCase(); + s = entities.decode(s); + s = s.replace(/['"!]|[\.]+$/g, ''); + s = slug(s); + s = s.replace(/[:\(\)]+/gi, '-'); + s = s.replace(/[\s\-]*([\.])[\s\-]*/g, '$1'); + s = s.replace(/-+/g, '-'); + s = s.replace(/^-+|-+$/g, ''); + return s; +}; + +// Get a unique name and store the returned name in names for future +// unique-name-gettingness. +toc.unique = function(names, name) { + var result = name; + var count = 0; + while (names[result]) { + result = name + (--count); + } + names[result] = true; + return result; +}; + +// Compile specified lodash string template properties into functions. +function normalize(options, templates) { + // Options override defaults and toc methods. + var result = _.defaults({}, options, toc, toc.defaults); + // Remove "core" methods from result object. + ['defaults', 'process', 'anchorize', 'toc'].forEach(function(prop) { + delete result[prop]; + }); + // Compile Lodash string templates into functions. + (templates || []).forEach(function(tmpl) { + if (typeof result[tmpl] === 'string') { + result[tmpl] = _.template(result[tmpl]); + } + }); + return result; +} + +// Anchorize all headers and inline a generated TOC, returning processed HTML. +toc.process = function(src, options) { + // Get anchorized HTML and headers array. + var anchorized = toc.anchorize(src, options); + // Generate TOC from headers array. + var tocHtml = toc.toc(anchorized.headers, options); + // Insert the generated TOC into the anchorized HTML. + return anchorized.html.replace(normalize(options).placeholder, tocHtml); +}; + +// Parse HTML, returning an array of header objects and anchorized HTML. +toc.anchorize = function(src, options) { + // Normalize options and compile template(s). + options = normalize(options, ['header']); + // Process HTML, "anchorizing" headers as-specified. + var headers = []; + var names = {}; + var html = src.replace(options.headers, function(all, level, attrs, header) { + level = Number(level); + var tocLevel = level >= options.tocMin && level <= options.tocMax; + var anchorLevel = level >= options.anchorMin && level <= options.anchorMax; + var data; + if (tocLevel || anchorLevel) { + // This data is passed into the specified "header" template function. + data = { + // The header level number in ... + level: level, + // Any attributes in the open H? tag. + attrs: attrs, + // Header HTML contents. + header: header, + // Un-tagged header HTML contents. + text: options.untag(header), + // Unique anchor name for this header. + anchor: options.unique(names, options.anchor(header)), + // All HTML (including tags) matched by the "headers" RegExp. + all: all, + }; + } + if (tocLevel) { + headers.push(data); + } + return anchorLevel ? options.header(data) : all; + }); + + return { + src: src, + html: html, + headers: headers, + }; +}; + +// Generate TOC HTML from an array of header objects. +toc.toc = function(headers, options) { + // Normalize options and compile template(s). + options = normalize(options, ['TOC', 'openUL', 'closeUL', 'openLI', 'closeLI']); + + // Build TOC. + var cursor = 0; + var levels = []; + var tocs = ['']; + headers.forEach(function(header) { + while (header.level < levels[0]) { + levels.shift(); + cursor++; + } + if (levels.length === 0 || header.level > levels[0]) { + levels.unshift(header.level); + header.depth = levels.length; + tocs[cursor] += options.openUL(header); + tocs.push(options.closeLI(header) + options.closeUL(header)); + } else { + header.depth = levels.length; + tocs[cursor] += options.closeLI(header); + } + tocs[cursor] += options.openLI(header); + }); + + return options.TOC({toc: tocs.join('')}); +}; diff --git a/node_modules/toc/node_modules/entities/LICENSE b/node_modules/toc/node_modules/entities/LICENSE new file mode 100644 index 000000000..c464f863e --- /dev/null +++ b/node_modules/toc/node_modules/entities/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +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. + +THIS 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 HOLDER 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, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/toc/node_modules/entities/compile.js b/node_modules/toc/node_modules/entities/compile.js new file mode 100644 index 000000000..d547fa1dd --- /dev/null +++ b/node_modules/toc/node_modules/entities/compile.js @@ -0,0 +1,64 @@ +var modes = ["XML", "HTML4", "HTML5"]; + +modes.reduce(function(prev, name, i){ + var obj = require("./entities/" + name.toLowerCase() + ".json"); + + if(prev){ + Object.keys(prev).forEach(function(name){ + obj[name] = prev[name]; + }); + } + + var inverse = getInverse(obj); + + module.exports[name] = { + strict: getStrictReplacer(obj), + //there is no non-strict mode for XML + normal: i === 0 ? null : getReplacer(obj), + inverse: getInverseReplacer(inverse), + inverseObj: inverse, + obj: obj + }; + + return obj; +}, null); + +function sortDesc(a, b){ + return a < b ? 1 : -1; +} + +function getReplacer(obj){ + var keys = Object.keys(obj).sort(sortDesc); + var re = keys.join("|")//.replace(/(\w+);\|\1/g, "$1;?"); + + // also match hex and char codes + re += "|#[xX][\\da-fA-F]+;?|#\\d+;?"; + + return new RegExp("&(?:" + re + ")", "g"); +} + +function getStrictReplacer(obj){ + var keys = Object.keys(obj).sort(sortDesc).filter(RegExp.prototype.test, /;$/); + var re = keys.map(function(name){ + return name.slice(0, -1); //remove trailing semicolon + }).join("|"); + + // also match hex and char codes + re += "|#[xX][\\da-fA-F]+|#\\d+"; + + return new RegExp("&(?:" + re + ");", "g"); +} + +function getInverse(obj){ + return Object.keys(obj).filter(function(name){ + //prefer identifiers with a semicolon + return name.substr(-1) === ";" || obj[name + ";"] !== obj[name]; + }).reduce(function(inverse, name){ + inverse[obj[name]] = name; + return inverse; + }, {}); +} + +function getInverseReplacer(inverse){ + return new RegExp("\\" + Object.keys(inverse).sort().join("|\\"), "g"); +} diff --git a/node_modules/toc/node_modules/entities/entities/html4.json b/node_modules/toc/node_modules/entities/entities/html4.json new file mode 100644 index 000000000..0253d1aa9 --- /dev/null +++ b/node_modules/toc/node_modules/entities/entities/html4.json @@ -0,0 +1 @@ +{"Aacute;":"\u00C1","Aacute":"\u00C1","aacute;":"\u00E1","aacute":"\u00E1","Acirc;":"\u00C2","Acirc":"\u00C2","acirc;":"\u00E2","acirc":"\u00E2","acute;":"\u00B4","acute":"\u00B4","AElig;":"\u00C6","AElig":"\u00C6","aelig;":"\u00E6","aelig":"\u00E6","Agrave;":"\u00C0","Agrave":"\u00C0","agrave;":"\u00E0","agrave":"\u00E0","alefsym;":"\u2135","Alpha;":"\u0391","alpha;":"\u03B1","amp":"\u0026","and;":"\u2227","ang;":"\u2220","apos":"\u0027","Aring;":"\u00C5","Aring":"\u00C5","aring;":"\u00E5","aring":"\u00E5","asymp;":"\u2248","Atilde;":"\u00C3","Atilde":"\u00C3","atilde;":"\u00E3","atilde":"\u00E3","Auml;":"\u00C4","Auml":"\u00C4","auml;":"\u00E4","auml":"\u00E4","bdquo;":"\u201E","Beta;":"\u0392","beta;":"\u03B2","brvbar;":"\u00A6","brvbar":"\u00A6","bull;":"\u2022","cap;":"\u2229","Ccedil;":"\u00C7","Ccedil":"\u00C7","ccedil;":"\u00E7","ccedil":"\u00E7","cedil;":"\u00B8","cedil":"\u00B8","cent;":"\u00A2","cent":"\u00A2","Chi;":"\u03A7","chi;":"\u03C7","circ;":"\u02C6","clubs;":"\u2663","cong;":"\u2245","copy;":"\u00A9","copy":"\u00A9","crarr;":"\u21B5","cup;":"\u222A","curren;":"\u00A4","curren":"\u00A4","dagger;":"\u2020","Dagger;":"\u2021","darr;":"\u2193","dArr;":"\u21D3","deg;":"\u00B0","deg":"\u00B0","Delta;":"\u0394","delta;":"\u03B4","diams;":"\u2666","divide;":"\u00F7","divide":"\u00F7","Eacute;":"\u00C9","Eacute":"\u00C9","eacute;":"\u00E9","eacute":"\u00E9","Ecirc;":"\u00CA","Ecirc":"\u00CA","ecirc;":"\u00EA","ecirc":"\u00EA","Egrave;":"\u00C8","Egrave":"\u00C8","egrave;":"\u00E8","egrave":"\u00E8","empty;":"\u2205","emsp;":"\u2003","ensp;":"\u2002","Epsilon;":"\u0395","epsilon;":"\u03B5","equiv;":"\u2261","Eta;":"\u0397","eta;":"\u03B7","ETH;":"\u00D0","ETH":"\u00D0","eth;":"\u00F0","eth":"\u00F0","Euml;":"\u00CB","Euml":"\u00CB","euml;":"\u00EB","euml":"\u00EB","euro;":"\u20AC","exist;":"\u2203","fnof;":"\u0192","forall;":"\u2200","frac12;":"\u00BD","frac12":"\u00BD","frac14;":"\u00BC","frac14":"\u00BC","frac34;":"\u00BE","frac34":"\u00BE","frasl;":"\u2044","Gamma;":"\u0393","gamma;":"\u03B3","ge;":"\u2265","gt":"\u003E","harr;":"\u2194","hArr;":"\u21D4","hearts;":"\u2665","hellip;":"\u2026","Iacute;":"\u00CD","Iacute":"\u00CD","iacute;":"\u00ED","iacute":"\u00ED","Icirc;":"\u00CE","Icirc":"\u00CE","icirc;":"\u00EE","icirc":"\u00EE","iexcl;":"\u00A1","iexcl":"\u00A1","Igrave;":"\u00CC","Igrave":"\u00CC","igrave;":"\u00EC","igrave":"\u00EC","image;":"\u2111","infin;":"\u221E","int;":"\u222B","Iota;":"\u0399","iota;":"\u03B9","iquest;":"\u00BF","iquest":"\u00BF","isin;":"\u2208","Iuml;":"\u00CF","Iuml":"\u00CF","iuml;":"\u00EF","iuml":"\u00EF","Kappa;":"\u039A","kappa;":"\u03BA","Lambda;":"\u039B","lambda;":"\u03BB","lang;":"\u27E8","laquo;":"\u00AB","laquo":"\u00AB","larr;":"\u2190","lArr;":"\u21D0","lceil;":"\u2308","ldquo;":"\u201C","le;":"\u2264","lfloor;":"\u230A","lowast;":"\u2217","loz;":"\u25CA","lrm;":"\u200E","lsaquo;":"\u2039","lsquo;":"\u2018","lt":"\u003C","macr;":"\u00AF","macr":"\u00AF","mdash;":"\u2014","micro;":"\u00B5","micro":"\u00B5","middot;":"\u00B7","middot":"\u00B7","minus;":"\u2212","Mu;":"\u039C","mu;":"\u03BC","nabla;":"\u2207","nbsp;":"\u00A0","nbsp":"\u00A0","ndash;":"\u2013","ne;":"\u2260","ni;":"\u220B","not;":"\u00AC","not":"\u00AC","notin;":"\u2209","nsub;":"\u2284","Ntilde;":"\u00D1","Ntilde":"\u00D1","ntilde;":"\u00F1","ntilde":"\u00F1","Nu;":"\u039D","nu;":"\u03BD","Oacute;":"\u00D3","Oacute":"\u00D3","oacute;":"\u00F3","oacute":"\u00F3","Ocirc;":"\u00D4","Ocirc":"\u00D4","ocirc;":"\u00F4","ocirc":"\u00F4","OElig;":"\u0152","oelig;":"\u0153","Ograve;":"\u00D2","Ograve":"\u00D2","ograve;":"\u00F2","ograve":"\u00F2","oline;":"\u203E","Omega;":"\u03A9","omega;":"\u03C9","Omicron;":"\u039F","omicron;":"\u03BF","oplus;":"\u2295","or;":"\u2228","ordf;":"\u00AA","ordf":"\u00AA","ordm;":"\u00BA","ordm":"\u00BA","Oslash;":"\u00D8","Oslash":"\u00D8","oslash;":"\u00F8","oslash":"\u00F8","Otilde;":"\u00D5","Otilde":"\u00D5","otilde;":"\u00F5","otilde":"\u00F5","otimes;":"\u2297","Ouml;":"\u00D6","Ouml":"\u00D6","ouml;":"\u00F6","ouml":"\u00F6","para;":"\u00B6","para":"\u00B6","part;":"\u2202","permil;":"\u2030","perp;":"\u22A5","Phi;":"\u03A6","phi;":"\u03C6","Pi;":"\u03A0","pi;":"\u03C0","piv;":"\u03D6","plusmn;":"\u00B1","plusmn":"\u00B1","pound;":"\u00A3","pound":"\u00A3","prime;":"\u2032","Prime;":"\u2033","prod;":"\u220F","prop;":"\u221D","Psi;":"\u03A8","psi;":"\u03C8","quot":"\u0022","radic;":"\u221A","rang;":"\u27E9","raquo;":"\u00BB","raquo":"\u00BB","rarr;":"\u2192","rArr;":"\u21D2","rceil;":"\u2309","rdquo;":"\u201D","real;":"\u211C","reg;":"\u00AE","reg":"\u00AE","rfloor;":"\u230B","Rho;":"\u03A1","rho;":"\u03C1","rlm;":"\u200F","rsaquo;":"\u203A","rsquo;":"\u2019","sbquo;":"\u201A","Scaron;":"\u0160","scaron;":"\u0161","sdot;":"\u22C5","sect;":"\u00A7","sect":"\u00A7","shy;":"\u00AD","shy":"\u00AD","Sigma;":"\u03A3","sigma;":"\u03C3","sigmaf;":"\u03C2","sim;":"\u223C","spades;":"\u2660","sub;":"\u2282","sube;":"\u2286","sum;":"\u2211","sup1;":"\u00B9","sup1":"\u00B9","sup2;":"\u00B2","sup2":"\u00B2","sup3;":"\u00B3","sup3":"\u00B3","sup;":"\u2283","supe;":"\u2287","szlig;":"\u00DF","szlig":"\u00DF","Tau;":"\u03A4","tau;":"\u03C4","there4;":"\u2234","Theta;":"\u0398","theta;":"\u03B8","thetasym;":"\u03D1","thinsp;":"\u2009","THORN;":"\u00DE","THORN":"\u00DE","thorn;":"\u00FE","thorn":"\u00FE","tilde;":"\u02DC","times;":"\u00D7","times":"\u00D7","trade;":"\u2122","Uacute;":"\u00DA","Uacute":"\u00DA","uacute;":"\u00FA","uacute":"\u00FA","uarr;":"\u2191","uArr;":"\u21D1","Ucirc;":"\u00DB","Ucirc":"\u00DB","ucirc;":"\u00FB","ucirc":"\u00FB","Ugrave;":"\u00D9","Ugrave":"\u00D9","ugrave;":"\u00F9","ugrave":"\u00F9","uml;":"\u00A8","uml":"\u00A8","upsih;":"\u03D2","Upsilon;":"\u03A5","upsilon;":"\u03C5","Uuml;":"\u00DC","Uuml":"\u00DC","uuml;":"\u00FC","uuml":"\u00FC","weierp;":"\u2118","Xi;":"\u039E","xi;":"\u03BE","Yacute;":"\u00DD","Yacute":"\u00DD","yacute;":"\u00FD","yacute":"\u00FD","yen;":"\u00A5","yen":"\u00A5","yuml;":"\u00FF","yuml":"\u00FF","Yuml;":"\u0178","Zeta;":"\u0396","zeta;":"\u03B6","zwj;":"\u200D","zwnj;":"\u200C"} \ No newline at end of file diff --git a/node_modules/toc/node_modules/entities/entities/html5.json b/node_modules/toc/node_modules/entities/entities/html5.json new file mode 100644 index 000000000..61dd35aa1 --- /dev/null +++ b/node_modules/toc/node_modules/entities/entities/html5.json @@ -0,0 +1 @@ +{"Abreve;":"\u0102","abreve;":"\u0103","ac;":"\u223E","acd;":"\u223F","acE;":"\u223E\u0333","Acy;":"\u0410","acy;":"\u0430","af;":"\u2061","Afr;":"\uD835\uDD04","afr;":"\uD835\uDD1E","aleph;":"\u2135","Amacr;":"\u0100","amacr;":"\u0101","amalg;":"\u2A3F","AMP;":"\u0026","AMP":"\u0026","andand;":"\u2A55","And;":"\u2A53","andd;":"\u2A5C","andslope;":"\u2A58","andv;":"\u2A5A","ange;":"\u29A4","angle;":"\u2220","angmsdaa;":"\u29A8","angmsdab;":"\u29A9","angmsdac;":"\u29AA","angmsdad;":"\u29AB","angmsdae;":"\u29AC","angmsdaf;":"\u29AD","angmsdag;":"\u29AE","angmsdah;":"\u29AF","angmsd;":"\u2221","angrt;":"\u221F","angrtvb;":"\u22BE","angrtvbd;":"\u299D","angsph;":"\u2222","angst;":"\u00C5","angzarr;":"\u237C","Aogon;":"\u0104","aogon;":"\u0105","Aopf;":"\uD835\uDD38","aopf;":"\uD835\uDD52","apacir;":"\u2A6F","ap;":"\u2248","apE;":"\u2A70","ape;":"\u224A","apid;":"\u224B","ApplyFunction;":"\u2061","approx;":"\u2248","approxeq;":"\u224A","Ascr;":"\uD835\uDC9C","ascr;":"\uD835\uDCB6","Assign;":"\u2254","ast;":"\u002A","asympeq;":"\u224D","awconint;":"\u2233","awint;":"\u2A11","backcong;":"\u224C","backepsilon;":"\u03F6","backprime;":"\u2035","backsim;":"\u223D","backsimeq;":"\u22CD","Backslash;":"\u2216","Barv;":"\u2AE7","barvee;":"\u22BD","barwed;":"\u2305","Barwed;":"\u2306","barwedge;":"\u2305","bbrk;":"\u23B5","bbrktbrk;":"\u23B6","bcong;":"\u224C","Bcy;":"\u0411","bcy;":"\u0431","becaus;":"\u2235","because;":"\u2235","Because;":"\u2235","bemptyv;":"\u29B0","bepsi;":"\u03F6","bernou;":"\u212C","Bernoullis;":"\u212C","beth;":"\u2136","between;":"\u226C","Bfr;":"\uD835\uDD05","bfr;":"\uD835\uDD1F","bigcap;":"\u22C2","bigcirc;":"\u25EF","bigcup;":"\u22C3","bigodot;":"\u2A00","bigoplus;":"\u2A01","bigotimes;":"\u2A02","bigsqcup;":"\u2A06","bigstar;":"\u2605","bigtriangledown;":"\u25BD","bigtriangleup;":"\u25B3","biguplus;":"\u2A04","bigvee;":"\u22C1","bigwedge;":"\u22C0","bkarow;":"\u290D","blacklozenge;":"\u29EB","blacksquare;":"\u25AA","blacktriangle;":"\u25B4","blacktriangledown;":"\u25BE","blacktriangleleft;":"\u25C2","blacktriangleright;":"\u25B8","blank;":"\u2423","blk12;":"\u2592","blk14;":"\u2591","blk34;":"\u2593","block;":"\u2588","bne;":"\u003D\u20E5","bnequiv;":"\u2261\u20E5","bNot;":"\u2AED","bnot;":"\u2310","Bopf;":"\uD835\uDD39","bopf;":"\uD835\uDD53","bot;":"\u22A5","bottom;":"\u22A5","bowtie;":"\u22C8","boxbox;":"\u29C9","boxdl;":"\u2510","boxdL;":"\u2555","boxDl;":"\u2556","boxDL;":"\u2557","boxdr;":"\u250C","boxdR;":"\u2552","boxDr;":"\u2553","boxDR;":"\u2554","boxh;":"\u2500","boxH;":"\u2550","boxhd;":"\u252C","boxHd;":"\u2564","boxhD;":"\u2565","boxHD;":"\u2566","boxhu;":"\u2534","boxHu;":"\u2567","boxhU;":"\u2568","boxHU;":"\u2569","boxminus;":"\u229F","boxplus;":"\u229E","boxtimes;":"\u22A0","boxul;":"\u2518","boxuL;":"\u255B","boxUl;":"\u255C","boxUL;":"\u255D","boxur;":"\u2514","boxuR;":"\u2558","boxUr;":"\u2559","boxUR;":"\u255A","boxv;":"\u2502","boxV;":"\u2551","boxvh;":"\u253C","boxvH;":"\u256A","boxVh;":"\u256B","boxVH;":"\u256C","boxvl;":"\u2524","boxvL;":"\u2561","boxVl;":"\u2562","boxVL;":"\u2563","boxvr;":"\u251C","boxvR;":"\u255E","boxVr;":"\u255F","boxVR;":"\u2560","bprime;":"\u2035","breve;":"\u02D8","Breve;":"\u02D8","bscr;":"\uD835\uDCB7","Bscr;":"\u212C","bsemi;":"\u204F","bsim;":"\u223D","bsime;":"\u22CD","bsolb;":"\u29C5","bsol;":"\u005C","bsolhsub;":"\u27C8","bullet;":"\u2022","bump;":"\u224E","bumpE;":"\u2AAE","bumpe;":"\u224F","Bumpeq;":"\u224E","bumpeq;":"\u224F","Cacute;":"\u0106","cacute;":"\u0107","capand;":"\u2A44","capbrcup;":"\u2A49","capcap;":"\u2A4B","Cap;":"\u22D2","capcup;":"\u2A47","capdot;":"\u2A40","CapitalDifferentialD;":"\u2145","caps;":"\u2229\uFE00","caret;":"\u2041","caron;":"\u02C7","Cayleys;":"\u212D","ccaps;":"\u2A4D","Ccaron;":"\u010C","ccaron;":"\u010D","Ccirc;":"\u0108","ccirc;":"\u0109","Cconint;":"\u2230","ccups;":"\u2A4C","ccupssm;":"\u2A50","Cdot;":"\u010A","cdot;":"\u010B","Cedilla;":"\u00B8","cemptyv;":"\u29B2","centerdot;":"\u00B7","CenterDot;":"\u00B7","cfr;":"\uD835\uDD20","Cfr;":"\u212D","CHcy;":"\u0427","chcy;":"\u0447","check;":"\u2713","checkmark;":"\u2713","circeq;":"\u2257","circlearrowleft;":"\u21BA","circlearrowright;":"\u21BB","circledast;":"\u229B","circledcirc;":"\u229A","circleddash;":"\u229D","CircleDot;":"\u2299","circledR;":"\u00AE","circledS;":"\u24C8","CircleMinus;":"\u2296","CirclePlus;":"\u2295","CircleTimes;":"\u2297","cir;":"\u25CB","cirE;":"\u29C3","cire;":"\u2257","cirfnint;":"\u2A10","cirmid;":"\u2AEF","cirscir;":"\u29C2","ClockwiseContourIntegral;":"\u2232","CloseCurlyDoubleQuote;":"\u201D","CloseCurlyQuote;":"\u2019","clubsuit;":"\u2663","colon;":"\u003A","Colon;":"\u2237","Colone;":"\u2A74","colone;":"\u2254","coloneq;":"\u2254","comma;":"\u002C","commat;":"\u0040","comp;":"\u2201","compfn;":"\u2218","complement;":"\u2201","complexes;":"\u2102","congdot;":"\u2A6D","Congruent;":"\u2261","conint;":"\u222E","Conint;":"\u222F","ContourIntegral;":"\u222E","copf;":"\uD835\uDD54","Copf;":"\u2102","coprod;":"\u2210","Coproduct;":"\u2210","COPY;":"\u00A9","COPY":"\u00A9","copysr;":"\u2117","CounterClockwiseContourIntegral;":"\u2233","cross;":"\u2717","Cross;":"\u2A2F","Cscr;":"\uD835\uDC9E","cscr;":"\uD835\uDCB8","csub;":"\u2ACF","csube;":"\u2AD1","csup;":"\u2AD0","csupe;":"\u2AD2","ctdot;":"\u22EF","cudarrl;":"\u2938","cudarrr;":"\u2935","cuepr;":"\u22DE","cuesc;":"\u22DF","cularr;":"\u21B6","cularrp;":"\u293D","cupbrcap;":"\u2A48","cupcap;":"\u2A46","CupCap;":"\u224D","Cup;":"\u22D3","cupcup;":"\u2A4A","cupdot;":"\u228D","cupor;":"\u2A45","cups;":"\u222A\uFE00","curarr;":"\u21B7","curarrm;":"\u293C","curlyeqprec;":"\u22DE","curlyeqsucc;":"\u22DF","curlyvee;":"\u22CE","curlywedge;":"\u22CF","curvearrowleft;":"\u21B6","curvearrowright;":"\u21B7","cuvee;":"\u22CE","cuwed;":"\u22CF","cwconint;":"\u2232","cwint;":"\u2231","cylcty;":"\u232D","daleth;":"\u2138","Darr;":"\u21A1","dash;":"\u2010","Dashv;":"\u2AE4","dashv;":"\u22A3","dbkarow;":"\u290F","dblac;":"\u02DD","Dcaron;":"\u010E","dcaron;":"\u010F","Dcy;":"\u0414","dcy;":"\u0434","ddagger;":"\u2021","ddarr;":"\u21CA","DD;":"\u2145","dd;":"\u2146","DDotrahd;":"\u2911","ddotseq;":"\u2A77","Del;":"\u2207","demptyv;":"\u29B1","dfisht;":"\u297F","Dfr;":"\uD835\uDD07","dfr;":"\uD835\uDD21","dHar;":"\u2965","dharl;":"\u21C3","dharr;":"\u21C2","DiacriticalAcute;":"\u00B4","DiacriticalDot;":"\u02D9","DiacriticalDoubleAcute;":"\u02DD","DiacriticalGrave;":"\u0060","DiacriticalTilde;":"\u02DC","diam;":"\u22C4","diamond;":"\u22C4","Diamond;":"\u22C4","diamondsuit;":"\u2666","die;":"\u00A8","DifferentialD;":"\u2146","digamma;":"\u03DD","disin;":"\u22F2","div;":"\u00F7","divideontimes;":"\u22C7","divonx;":"\u22C7","DJcy;":"\u0402","djcy;":"\u0452","dlcorn;":"\u231E","dlcrop;":"\u230D","dollar;":"\u0024","Dopf;":"\uD835\uDD3B","dopf;":"\uD835\uDD55","Dot;":"\u00A8","dot;":"\u02D9","DotDot;":"\u20DC","doteq;":"\u2250","doteqdot;":"\u2251","DotEqual;":"\u2250","dotminus;":"\u2238","dotplus;":"\u2214","dotsquare;":"\u22A1","doublebarwedge;":"\u2306","DoubleContourIntegral;":"\u222F","DoubleDot;":"\u00A8","DoubleDownArrow;":"\u21D3","DoubleLeftArrow;":"\u21D0","DoubleLeftRightArrow;":"\u21D4","DoubleLeftTee;":"\u2AE4","DoubleLongLeftArrow;":"\u27F8","DoubleLongLeftRightArrow;":"\u27FA","DoubleLongRightArrow;":"\u27F9","DoubleRightArrow;":"\u21D2","DoubleRightTee;":"\u22A8","DoubleUpArrow;":"\u21D1","DoubleUpDownArrow;":"\u21D5","DoubleVerticalBar;":"\u2225","DownArrowBar;":"\u2913","downarrow;":"\u2193","DownArrow;":"\u2193","Downarrow;":"\u21D3","DownArrowUpArrow;":"\u21F5","DownBreve;":"\u0311","downdownarrows;":"\u21CA","downharpoonleft;":"\u21C3","downharpoonright;":"\u21C2","DownLeftRightVector;":"\u2950","DownLeftTeeVector;":"\u295E","DownLeftVectorBar;":"\u2956","DownLeftVector;":"\u21BD","DownRightTeeVector;":"\u295F","DownRightVectorBar;":"\u2957","DownRightVector;":"\u21C1","DownTeeArrow;":"\u21A7","DownTee;":"\u22A4","drbkarow;":"\u2910","drcorn;":"\u231F","drcrop;":"\u230C","Dscr;":"\uD835\uDC9F","dscr;":"\uD835\uDCB9","DScy;":"\u0405","dscy;":"\u0455","dsol;":"\u29F6","Dstrok;":"\u0110","dstrok;":"\u0111","dtdot;":"\u22F1","dtri;":"\u25BF","dtrif;":"\u25BE","duarr;":"\u21F5","duhar;":"\u296F","dwangle;":"\u29A6","DZcy;":"\u040F","dzcy;":"\u045F","dzigrarr;":"\u27FF","easter;":"\u2A6E","Ecaron;":"\u011A","ecaron;":"\u011B","ecir;":"\u2256","ecolon;":"\u2255","Ecy;":"\u042D","ecy;":"\u044D","eDDot;":"\u2A77","Edot;":"\u0116","edot;":"\u0117","eDot;":"\u2251","ee;":"\u2147","efDot;":"\u2252","Efr;":"\uD835\uDD08","efr;":"\uD835\uDD22","eg;":"\u2A9A","egs;":"\u2A96","egsdot;":"\u2A98","el;":"\u2A99","Element;":"\u2208","elinters;":"\u23E7","ell;":"\u2113","els;":"\u2A95","elsdot;":"\u2A97","Emacr;":"\u0112","emacr;":"\u0113","emptyset;":"\u2205","EmptySmallSquare;":"\u25FB","emptyv;":"\u2205","EmptyVerySmallSquare;":"\u25AB","emsp13;":"\u2004","emsp14;":"\u2005","ENG;":"\u014A","eng;":"\u014B","Eogon;":"\u0118","eogon;":"\u0119","Eopf;":"\uD835\uDD3C","eopf;":"\uD835\uDD56","epar;":"\u22D5","eparsl;":"\u29E3","eplus;":"\u2A71","epsi;":"\u03B5","epsiv;":"\u03F5","eqcirc;":"\u2256","eqcolon;":"\u2255","eqsim;":"\u2242","eqslantgtr;":"\u2A96","eqslantless;":"\u2A95","Equal;":"\u2A75","equals;":"\u003D","EqualTilde;":"\u2242","equest;":"\u225F","Equilibrium;":"\u21CC","equivDD;":"\u2A78","eqvparsl;":"\u29E5","erarr;":"\u2971","erDot;":"\u2253","escr;":"\u212F","Escr;":"\u2130","esdot;":"\u2250","Esim;":"\u2A73","esim;":"\u2242","excl;":"\u0021","Exists;":"\u2203","expectation;":"\u2130","exponentiale;":"\u2147","ExponentialE;":"\u2147","fallingdotseq;":"\u2252","Fcy;":"\u0424","fcy;":"\u0444","female;":"\u2640","ffilig;":"\uFB03","fflig;":"\uFB00","ffllig;":"\uFB04","Ffr;":"\uD835\uDD09","ffr;":"\uD835\uDD23","filig;":"\uFB01","FilledSmallSquare;":"\u25FC","FilledVerySmallSquare;":"\u25AA","fjlig;":"\u0066\u006A","flat;":"\u266D","fllig;":"\uFB02","fltns;":"\u25B1","Fopf;":"\uD835\uDD3D","fopf;":"\uD835\uDD57","ForAll;":"\u2200","fork;":"\u22D4","forkv;":"\u2AD9","Fouriertrf;":"\u2131","fpartint;":"\u2A0D","frac13;":"\u2153","frac15;":"\u2155","frac16;":"\u2159","frac18;":"\u215B","frac23;":"\u2154","frac25;":"\u2156","frac35;":"\u2157","frac38;":"\u215C","frac45;":"\u2158","frac56;":"\u215A","frac58;":"\u215D","frac78;":"\u215E","frown;":"\u2322","fscr;":"\uD835\uDCBB","Fscr;":"\u2131","gacute;":"\u01F5","Gammad;":"\u03DC","gammad;":"\u03DD","gap;":"\u2A86","Gbreve;":"\u011E","gbreve;":"\u011F","Gcedil;":"\u0122","Gcirc;":"\u011C","gcirc;":"\u011D","Gcy;":"\u0413","gcy;":"\u0433","Gdot;":"\u0120","gdot;":"\u0121","gE;":"\u2267","gEl;":"\u2A8C","gel;":"\u22DB","geq;":"\u2265","geqq;":"\u2267","geqslant;":"\u2A7E","gescc;":"\u2AA9","ges;":"\u2A7E","gesdot;":"\u2A80","gesdoto;":"\u2A82","gesdotol;":"\u2A84","gesl;":"\u22DB\uFE00","gesles;":"\u2A94","Gfr;":"\uD835\uDD0A","gfr;":"\uD835\uDD24","gg;":"\u226B","Gg;":"\u22D9","ggg;":"\u22D9","gimel;":"\u2137","GJcy;":"\u0403","gjcy;":"\u0453","gla;":"\u2AA5","gl;":"\u2277","glE;":"\u2A92","glj;":"\u2AA4","gnap;":"\u2A8A","gnapprox;":"\u2A8A","gne;":"\u2A88","gnE;":"\u2269","gneq;":"\u2A88","gneqq;":"\u2269","gnsim;":"\u22E7","Gopf;":"\uD835\uDD3E","gopf;":"\uD835\uDD58","grave;":"\u0060","GreaterEqual;":"\u2265","GreaterEqualLess;":"\u22DB","GreaterFullEqual;":"\u2267","GreaterGreater;":"\u2AA2","GreaterLess;":"\u2277","GreaterSlantEqual;":"\u2A7E","GreaterTilde;":"\u2273","Gscr;":"\uD835\uDCA2","gscr;":"\u210A","gsim;":"\u2273","gsime;":"\u2A8E","gsiml;":"\u2A90","gtcc;":"\u2AA7","gtcir;":"\u2A7A","GT;":"\u003E","GT":"\u003E","Gt;":"\u226B","gtdot;":"\u22D7","gtlPar;":"\u2995","gtquest;":"\u2A7C","gtrapprox;":"\u2A86","gtrarr;":"\u2978","gtrdot;":"\u22D7","gtreqless;":"\u22DB","gtreqqless;":"\u2A8C","gtrless;":"\u2277","gtrsim;":"\u2273","gvertneqq;":"\u2269\uFE00","gvnE;":"\u2269\uFE00","Hacek;":"\u02C7","hairsp;":"\u200A","half;":"\u00BD","hamilt;":"\u210B","HARDcy;":"\u042A","hardcy;":"\u044A","harrcir;":"\u2948","harrw;":"\u21AD","Hat;":"\u005E","hbar;":"\u210F","Hcirc;":"\u0124","hcirc;":"\u0125","heartsuit;":"\u2665","hercon;":"\u22B9","hfr;":"\uD835\uDD25","Hfr;":"\u210C","HilbertSpace;":"\u210B","hksearow;":"\u2925","hkswarow;":"\u2926","hoarr;":"\u21FF","homtht;":"\u223B","hookleftarrow;":"\u21A9","hookrightarrow;":"\u21AA","hopf;":"\uD835\uDD59","Hopf;":"\u210D","horbar;":"\u2015","HorizontalLine;":"\u2500","hscr;":"\uD835\uDCBD","Hscr;":"\u210B","hslash;":"\u210F","Hstrok;":"\u0126","hstrok;":"\u0127","HumpDownHump;":"\u224E","HumpEqual;":"\u224F","hybull;":"\u2043","hyphen;":"\u2010","ic;":"\u2063","Icy;":"\u0418","icy;":"\u0438","Idot;":"\u0130","IEcy;":"\u0415","iecy;":"\u0435","iff;":"\u21D4","ifr;":"\uD835\uDD26","Ifr;":"\u2111","ii;":"\u2148","iiiint;":"\u2A0C","iiint;":"\u222D","iinfin;":"\u29DC","iiota;":"\u2129","IJlig;":"\u0132","ijlig;":"\u0133","Imacr;":"\u012A","imacr;":"\u012B","ImaginaryI;":"\u2148","imagline;":"\u2110","imagpart;":"\u2111","imath;":"\u0131","Im;":"\u2111","imof;":"\u22B7","imped;":"\u01B5","Implies;":"\u21D2","incare;":"\u2105","in;":"\u2208","infintie;":"\u29DD","inodot;":"\u0131","intcal;":"\u22BA","Int;":"\u222C","integers;":"\u2124","Integral;":"\u222B","intercal;":"\u22BA","Intersection;":"\u22C2","intlarhk;":"\u2A17","intprod;":"\u2A3C","InvisibleComma;":"\u2063","InvisibleTimes;":"\u2062","IOcy;":"\u0401","iocy;":"\u0451","Iogon;":"\u012E","iogon;":"\u012F","Iopf;":"\uD835\uDD40","iopf;":"\uD835\uDD5A","iprod;":"\u2A3C","iscr;":"\uD835\uDCBE","Iscr;":"\u2110","isindot;":"\u22F5","isinE;":"\u22F9","isins;":"\u22F4","isinsv;":"\u22F3","isinv;":"\u2208","it;":"\u2062","Itilde;":"\u0128","itilde;":"\u0129","Iukcy;":"\u0406","iukcy;":"\u0456","Jcirc;":"\u0134","jcirc;":"\u0135","Jcy;":"\u0419","jcy;":"\u0439","Jfr;":"\uD835\uDD0D","jfr;":"\uD835\uDD27","jmath;":"\u0237","Jopf;":"\uD835\uDD41","jopf;":"\uD835\uDD5B","Jscr;":"\uD835\uDCA5","jscr;":"\uD835\uDCBF","Jsercy;":"\u0408","jsercy;":"\u0458","Jukcy;":"\u0404","jukcy;":"\u0454","kappav;":"\u03F0","Kcedil;":"\u0136","kcedil;":"\u0137","Kcy;":"\u041A","kcy;":"\u043A","Kfr;":"\uD835\uDD0E","kfr;":"\uD835\uDD28","kgreen;":"\u0138","KHcy;":"\u0425","khcy;":"\u0445","KJcy;":"\u040C","kjcy;":"\u045C","Kopf;":"\uD835\uDD42","kopf;":"\uD835\uDD5C","Kscr;":"\uD835\uDCA6","kscr;":"\uD835\uDCC0","lAarr;":"\u21DA","Lacute;":"\u0139","lacute;":"\u013A","laemptyv;":"\u29B4","lagran;":"\u2112","Lang;":"\u27EA","langd;":"\u2991","langle;":"\u27E8","lap;":"\u2A85","Laplacetrf;":"\u2112","larrb;":"\u21E4","larrbfs;":"\u291F","Larr;":"\u219E","larrfs;":"\u291D","larrhk;":"\u21A9","larrlp;":"\u21AB","larrpl;":"\u2939","larrsim;":"\u2973","larrtl;":"\u21A2","latail;":"\u2919","lAtail;":"\u291B","lat;":"\u2AAB","late;":"\u2AAD","lates;":"\u2AAD\uFE00","lbarr;":"\u290C","lBarr;":"\u290E","lbbrk;":"\u2772","lbrace;":"\u007B","lbrack;":"\u005B","lbrke;":"\u298B","lbrksld;":"\u298F","lbrkslu;":"\u298D","Lcaron;":"\u013D","lcaron;":"\u013E","Lcedil;":"\u013B","lcedil;":"\u013C","lcub;":"\u007B","Lcy;":"\u041B","lcy;":"\u043B","ldca;":"\u2936","ldquor;":"\u201E","ldrdhar;":"\u2967","ldrushar;":"\u294B","ldsh;":"\u21B2","lE;":"\u2266","LeftAngleBracket;":"\u27E8","LeftArrowBar;":"\u21E4","leftarrow;":"\u2190","LeftArrow;":"\u2190","Leftarrow;":"\u21D0","LeftArrowRightArrow;":"\u21C6","leftarrowtail;":"\u21A2","LeftCeiling;":"\u2308","LeftDoubleBracket;":"\u27E6","LeftDownTeeVector;":"\u2961","LeftDownVectorBar;":"\u2959","LeftDownVector;":"\u21C3","LeftFloor;":"\u230A","leftharpoondown;":"\u21BD","leftharpoonup;":"\u21BC","leftleftarrows;":"\u21C7","leftrightarrow;":"\u2194","LeftRightArrow;":"\u2194","Leftrightarrow;":"\u21D4","leftrightarrows;":"\u21C6","leftrightharpoons;":"\u21CB","leftrightsquigarrow;":"\u21AD","LeftRightVector;":"\u294E","LeftTeeArrow;":"\u21A4","LeftTee;":"\u22A3","LeftTeeVector;":"\u295A","leftthreetimes;":"\u22CB","LeftTriangleBar;":"\u29CF","LeftTriangle;":"\u22B2","LeftTriangleEqual;":"\u22B4","LeftUpDownVector;":"\u2951","LeftUpTeeVector;":"\u2960","LeftUpVectorBar;":"\u2958","LeftUpVector;":"\u21BF","LeftVectorBar;":"\u2952","LeftVector;":"\u21BC","lEg;":"\u2A8B","leg;":"\u22DA","leq;":"\u2264","leqq;":"\u2266","leqslant;":"\u2A7D","lescc;":"\u2AA8","les;":"\u2A7D","lesdot;":"\u2A7F","lesdoto;":"\u2A81","lesdotor;":"\u2A83","lesg;":"\u22DA\uFE00","lesges;":"\u2A93","lessapprox;":"\u2A85","lessdot;":"\u22D6","lesseqgtr;":"\u22DA","lesseqqgtr;":"\u2A8B","LessEqualGreater;":"\u22DA","LessFullEqual;":"\u2266","LessGreater;":"\u2276","lessgtr;":"\u2276","LessLess;":"\u2AA1","lesssim;":"\u2272","LessSlantEqual;":"\u2A7D","LessTilde;":"\u2272","lfisht;":"\u297C","Lfr;":"\uD835\uDD0F","lfr;":"\uD835\uDD29","lg;":"\u2276","lgE;":"\u2A91","lHar;":"\u2962","lhard;":"\u21BD","lharu;":"\u21BC","lharul;":"\u296A","lhblk;":"\u2584","LJcy;":"\u0409","ljcy;":"\u0459","llarr;":"\u21C7","ll;":"\u226A","Ll;":"\u22D8","llcorner;":"\u231E","Lleftarrow;":"\u21DA","llhard;":"\u296B","lltri;":"\u25FA","Lmidot;":"\u013F","lmidot;":"\u0140","lmoustache;":"\u23B0","lmoust;":"\u23B0","lnap;":"\u2A89","lnapprox;":"\u2A89","lne;":"\u2A87","lnE;":"\u2268","lneq;":"\u2A87","lneqq;":"\u2268","lnsim;":"\u22E6","loang;":"\u27EC","loarr;":"\u21FD","lobrk;":"\u27E6","longleftarrow;":"\u27F5","LongLeftArrow;":"\u27F5","Longleftarrow;":"\u27F8","longleftrightarrow;":"\u27F7","LongLeftRightArrow;":"\u27F7","Longleftrightarrow;":"\u27FA","longmapsto;":"\u27FC","longrightarrow;":"\u27F6","LongRightArrow;":"\u27F6","Longrightarrow;":"\u27F9","looparrowleft;":"\u21AB","looparrowright;":"\u21AC","lopar;":"\u2985","Lopf;":"\uD835\uDD43","lopf;":"\uD835\uDD5D","loplus;":"\u2A2D","lotimes;":"\u2A34","lowbar;":"\u005F","LowerLeftArrow;":"\u2199","LowerRightArrow;":"\u2198","lozenge;":"\u25CA","lozf;":"\u29EB","lpar;":"\u0028","lparlt;":"\u2993","lrarr;":"\u21C6","lrcorner;":"\u231F","lrhar;":"\u21CB","lrhard;":"\u296D","lrtri;":"\u22BF","lscr;":"\uD835\uDCC1","Lscr;":"\u2112","lsh;":"\u21B0","Lsh;":"\u21B0","lsim;":"\u2272","lsime;":"\u2A8D","lsimg;":"\u2A8F","lsqb;":"\u005B","lsquor;":"\u201A","Lstrok;":"\u0141","lstrok;":"\u0142","ltcc;":"\u2AA6","ltcir;":"\u2A79","LT;":"\u003C","LT":"\u003C","Lt;":"\u226A","ltdot;":"\u22D6","lthree;":"\u22CB","ltimes;":"\u22C9","ltlarr;":"\u2976","ltquest;":"\u2A7B","ltri;":"\u25C3","ltrie;":"\u22B4","ltrif;":"\u25C2","ltrPar;":"\u2996","lurdshar;":"\u294A","luruhar;":"\u2966","lvertneqq;":"\u2268\uFE00","lvnE;":"\u2268\uFE00","male;":"\u2642","malt;":"\u2720","maltese;":"\u2720","Map;":"\u2905","map;":"\u21A6","mapsto;":"\u21A6","mapstodown;":"\u21A7","mapstoleft;":"\u21A4","mapstoup;":"\u21A5","marker;":"\u25AE","mcomma;":"\u2A29","Mcy;":"\u041C","mcy;":"\u043C","mDDot;":"\u223A","measuredangle;":"\u2221","MediumSpace;":"\u205F","Mellintrf;":"\u2133","Mfr;":"\uD835\uDD10","mfr;":"\uD835\uDD2A","mho;":"\u2127","midast;":"\u002A","midcir;":"\u2AF0","mid;":"\u2223","minusb;":"\u229F","minusd;":"\u2238","minusdu;":"\u2A2A","MinusPlus;":"\u2213","mlcp;":"\u2ADB","mldr;":"\u2026","mnplus;":"\u2213","models;":"\u22A7","Mopf;":"\uD835\uDD44","mopf;":"\uD835\uDD5E","mp;":"\u2213","mscr;":"\uD835\uDCC2","Mscr;":"\u2133","mstpos;":"\u223E","multimap;":"\u22B8","mumap;":"\u22B8","Nacute;":"\u0143","nacute;":"\u0144","nang;":"\u2220\u20D2","nap;":"\u2249","napE;":"\u2A70\u0338","napid;":"\u224B\u0338","napos;":"\u0149","napprox;":"\u2249","natural;":"\u266E","naturals;":"\u2115","natur;":"\u266E","nbump;":"\u224E\u0338","nbumpe;":"\u224F\u0338","ncap;":"\u2A43","Ncaron;":"\u0147","ncaron;":"\u0148","Ncedil;":"\u0145","ncedil;":"\u0146","ncong;":"\u2247","ncongdot;":"\u2A6D\u0338","ncup;":"\u2A42","Ncy;":"\u041D","ncy;":"\u043D","nearhk;":"\u2924","nearr;":"\u2197","neArr;":"\u21D7","nearrow;":"\u2197","nedot;":"\u2250\u0338","NegativeMediumSpace;":"\u200B","NegativeThickSpace;":"\u200B","NegativeThinSpace;":"\u200B","NegativeVeryThinSpace;":"\u200B","nequiv;":"\u2262","nesear;":"\u2928","nesim;":"\u2242\u0338","NestedGreaterGreater;":"\u226B","NestedLessLess;":"\u226A","NewLine;":"\u000A","nexist;":"\u2204","nexists;":"\u2204","Nfr;":"\uD835\uDD11","nfr;":"\uD835\uDD2B","ngE;":"\u2267\u0338","nge;":"\u2271","ngeq;":"\u2271","ngeqq;":"\u2267\u0338","ngeqslant;":"\u2A7E\u0338","nges;":"\u2A7E\u0338","nGg;":"\u22D9\u0338","ngsim;":"\u2275","nGt;":"\u226B\u20D2","ngt;":"\u226F","ngtr;":"\u226F","nGtv;":"\u226B\u0338","nharr;":"\u21AE","nhArr;":"\u21CE","nhpar;":"\u2AF2","nis;":"\u22FC","nisd;":"\u22FA","niv;":"\u220B","NJcy;":"\u040A","njcy;":"\u045A","nlarr;":"\u219A","nlArr;":"\u21CD","nldr;":"\u2025","nlE;":"\u2266\u0338","nle;":"\u2270","nleftarrow;":"\u219A","nLeftarrow;":"\u21CD","nleftrightarrow;":"\u21AE","nLeftrightarrow;":"\u21CE","nleq;":"\u2270","nleqq;":"\u2266\u0338","nleqslant;":"\u2A7D\u0338","nles;":"\u2A7D\u0338","nless;":"\u226E","nLl;":"\u22D8\u0338","nlsim;":"\u2274","nLt;":"\u226A\u20D2","nlt;":"\u226E","nltri;":"\u22EA","nltrie;":"\u22EC","nLtv;":"\u226A\u0338","nmid;":"\u2224","NoBreak;":"\u2060","NonBreakingSpace;":"\u00A0","nopf;":"\uD835\uDD5F","Nopf;":"\u2115","Not;":"\u2AEC","NotCongruent;":"\u2262","NotCupCap;":"\u226D","NotDoubleVerticalBar;":"\u2226","NotElement;":"\u2209","NotEqual;":"\u2260","NotEqualTilde;":"\u2242\u0338","NotExists;":"\u2204","NotGreater;":"\u226F","NotGreaterEqual;":"\u2271","NotGreaterFullEqual;":"\u2267\u0338","NotGreaterGreater;":"\u226B\u0338","NotGreaterLess;":"\u2279","NotGreaterSlantEqual;":"\u2A7E\u0338","NotGreaterTilde;":"\u2275","NotHumpDownHump;":"\u224E\u0338","NotHumpEqual;":"\u224F\u0338","notindot;":"\u22F5\u0338","notinE;":"\u22F9\u0338","notinva;":"\u2209","notinvb;":"\u22F7","notinvc;":"\u22F6","NotLeftTriangleBar;":"\u29CF\u0338","NotLeftTriangle;":"\u22EA","NotLeftTriangleEqual;":"\u22EC","NotLess;":"\u226E","NotLessEqual;":"\u2270","NotLessGreater;":"\u2278","NotLessLess;":"\u226A\u0338","NotLessSlantEqual;":"\u2A7D\u0338","NotLessTilde;":"\u2274","NotNestedGreaterGreater;":"\u2AA2\u0338","NotNestedLessLess;":"\u2AA1\u0338","notni;":"\u220C","notniva;":"\u220C","notnivb;":"\u22FE","notnivc;":"\u22FD","NotPrecedes;":"\u2280","NotPrecedesEqual;":"\u2AAF\u0338","NotPrecedesSlantEqual;":"\u22E0","NotReverseElement;":"\u220C","NotRightTriangleBar;":"\u29D0\u0338","NotRightTriangle;":"\u22EB","NotRightTriangleEqual;":"\u22ED","NotSquareSubset;":"\u228F\u0338","NotSquareSubsetEqual;":"\u22E2","NotSquareSuperset;":"\u2290\u0338","NotSquareSupersetEqual;":"\u22E3","NotSubset;":"\u2282\u20D2","NotSubsetEqual;":"\u2288","NotSucceeds;":"\u2281","NotSucceedsEqual;":"\u2AB0\u0338","NotSucceedsSlantEqual;":"\u22E1","NotSucceedsTilde;":"\u227F\u0338","NotSuperset;":"\u2283\u20D2","NotSupersetEqual;":"\u2289","NotTilde;":"\u2241","NotTildeEqual;":"\u2244","NotTildeFullEqual;":"\u2247","NotTildeTilde;":"\u2249","NotVerticalBar;":"\u2224","nparallel;":"\u2226","npar;":"\u2226","nparsl;":"\u2AFD\u20E5","npart;":"\u2202\u0338","npolint;":"\u2A14","npr;":"\u2280","nprcue;":"\u22E0","nprec;":"\u2280","npreceq;":"\u2AAF\u0338","npre;":"\u2AAF\u0338","nrarrc;":"\u2933\u0338","nrarr;":"\u219B","nrArr;":"\u21CF","nrarrw;":"\u219D\u0338","nrightarrow;":"\u219B","nRightarrow;":"\u21CF","nrtri;":"\u22EB","nrtrie;":"\u22ED","nsc;":"\u2281","nsccue;":"\u22E1","nsce;":"\u2AB0\u0338","Nscr;":"\uD835\uDCA9","nscr;":"\uD835\uDCC3","nshortmid;":"\u2224","nshortparallel;":"\u2226","nsim;":"\u2241","nsime;":"\u2244","nsimeq;":"\u2244","nsmid;":"\u2224","nspar;":"\u2226","nsqsube;":"\u22E2","nsqsupe;":"\u22E3","nsubE;":"\u2AC5\u0338","nsube;":"\u2288","nsubset;":"\u2282\u20D2","nsubseteq;":"\u2288","nsubseteqq;":"\u2AC5\u0338","nsucc;":"\u2281","nsucceq;":"\u2AB0\u0338","nsup;":"\u2285","nsupE;":"\u2AC6\u0338","nsupe;":"\u2289","nsupset;":"\u2283\u20D2","nsupseteq;":"\u2289","nsupseteqq;":"\u2AC6\u0338","ntgl;":"\u2279","ntlg;":"\u2278","ntriangleleft;":"\u22EA","ntrianglelefteq;":"\u22EC","ntriangleright;":"\u22EB","ntrianglerighteq;":"\u22ED","num;":"\u0023","numero;":"\u2116","numsp;":"\u2007","nvap;":"\u224D\u20D2","nvdash;":"\u22AC","nvDash;":"\u22AD","nVdash;":"\u22AE","nVDash;":"\u22AF","nvge;":"\u2265\u20D2","nvgt;":"\u003E\u20D2","nvHarr;":"\u2904","nvinfin;":"\u29DE","nvlArr;":"\u2902","nvle;":"\u2264\u20D2","nvlt;":"\u003C\u20D2","nvltrie;":"\u22B4\u20D2","nvrArr;":"\u2903","nvrtrie;":"\u22B5\u20D2","nvsim;":"\u223C\u20D2","nwarhk;":"\u2923","nwarr;":"\u2196","nwArr;":"\u21D6","nwarrow;":"\u2196","nwnear;":"\u2927","oast;":"\u229B","ocir;":"\u229A","Ocy;":"\u041E","ocy;":"\u043E","odash;":"\u229D","Odblac;":"\u0150","odblac;":"\u0151","odiv;":"\u2A38","odot;":"\u2299","odsold;":"\u29BC","ofcir;":"\u29BF","Ofr;":"\uD835\uDD12","ofr;":"\uD835\uDD2C","ogon;":"\u02DB","ogt;":"\u29C1","ohbar;":"\u29B5","ohm;":"\u03A9","oint;":"\u222E","olarr;":"\u21BA","olcir;":"\u29BE","olcross;":"\u29BB","olt;":"\u29C0","Omacr;":"\u014C","omacr;":"\u014D","omid;":"\u29B6","ominus;":"\u2296","Oopf;":"\uD835\uDD46","oopf;":"\uD835\uDD60","opar;":"\u29B7","OpenCurlyDoubleQuote;":"\u201C","OpenCurlyQuote;":"\u2018","operp;":"\u29B9","orarr;":"\u21BB","Or;":"\u2A54","ord;":"\u2A5D","order;":"\u2134","orderof;":"\u2134","origof;":"\u22B6","oror;":"\u2A56","orslope;":"\u2A57","orv;":"\u2A5B","oS;":"\u24C8","Oscr;":"\uD835\uDCAA","oscr;":"\u2134","osol;":"\u2298","otimesas;":"\u2A36","Otimes;":"\u2A37","ovbar;":"\u233D","OverBar;":"\u203E","OverBrace;":"\u23DE","OverBracket;":"\u23B4","OverParenthesis;":"\u23DC","parallel;":"\u2225","par;":"\u2225","parsim;":"\u2AF3","parsl;":"\u2AFD","PartialD;":"\u2202","Pcy;":"\u041F","pcy;":"\u043F","percnt;":"\u0025","period;":"\u002E","pertenk;":"\u2031","Pfr;":"\uD835\uDD13","pfr;":"\uD835\uDD2D","phiv;":"\u03D5","phmmat;":"\u2133","phone;":"\u260E","pitchfork;":"\u22D4","planck;":"\u210F","planckh;":"\u210E","plankv;":"\u210F","plusacir;":"\u2A23","plusb;":"\u229E","pluscir;":"\u2A22","plus;":"\u002B","plusdo;":"\u2214","plusdu;":"\u2A25","pluse;":"\u2A72","PlusMinus;":"\u00B1","plussim;":"\u2A26","plustwo;":"\u2A27","pm;":"\u00B1","Poincareplane;":"\u210C","pointint;":"\u2A15","popf;":"\uD835\uDD61","Popf;":"\u2119","prap;":"\u2AB7","Pr;":"\u2ABB","pr;":"\u227A","prcue;":"\u227C","precapprox;":"\u2AB7","prec;":"\u227A","preccurlyeq;":"\u227C","Precedes;":"\u227A","PrecedesEqual;":"\u2AAF","PrecedesSlantEqual;":"\u227C","PrecedesTilde;":"\u227E","preceq;":"\u2AAF","precnapprox;":"\u2AB9","precneqq;":"\u2AB5","precnsim;":"\u22E8","pre;":"\u2AAF","prE;":"\u2AB3","precsim;":"\u227E","primes;":"\u2119","prnap;":"\u2AB9","prnE;":"\u2AB5","prnsim;":"\u22E8","Product;":"\u220F","profalar;":"\u232E","profline;":"\u2312","profsurf;":"\u2313","Proportional;":"\u221D","Proportion;":"\u2237","propto;":"\u221D","prsim;":"\u227E","prurel;":"\u22B0","Pscr;":"\uD835\uDCAB","pscr;":"\uD835\uDCC5","puncsp;":"\u2008","Qfr;":"\uD835\uDD14","qfr;":"\uD835\uDD2E","qint;":"\u2A0C","qopf;":"\uD835\uDD62","Qopf;":"\u211A","qprime;":"\u2057","Qscr;":"\uD835\uDCAC","qscr;":"\uD835\uDCC6","quaternions;":"\u210D","quatint;":"\u2A16","quest;":"\u003F","questeq;":"\u225F","QUOT;":"\u0022","QUOT":"\u0022","rAarr;":"\u21DB","race;":"\u223D\u0331","Racute;":"\u0154","racute;":"\u0155","raemptyv;":"\u29B3","Rang;":"\u27EB","rangd;":"\u2992","range;":"\u29A5","rangle;":"\u27E9","rarrap;":"\u2975","rarrb;":"\u21E5","rarrbfs;":"\u2920","rarrc;":"\u2933","Rarr;":"\u21A0","rarrfs;":"\u291E","rarrhk;":"\u21AA","rarrlp;":"\u21AC","rarrpl;":"\u2945","rarrsim;":"\u2974","Rarrtl;":"\u2916","rarrtl;":"\u21A3","rarrw;":"\u219D","ratail;":"\u291A","rAtail;":"\u291C","ratio;":"\u2236","rationals;":"\u211A","rbarr;":"\u290D","rBarr;":"\u290F","RBarr;":"\u2910","rbbrk;":"\u2773","rbrace;":"\u007D","rbrack;":"\u005D","rbrke;":"\u298C","rbrksld;":"\u298E","rbrkslu;":"\u2990","Rcaron;":"\u0158","rcaron;":"\u0159","Rcedil;":"\u0156","rcedil;":"\u0157","rcub;":"\u007D","Rcy;":"\u0420","rcy;":"\u0440","rdca;":"\u2937","rdldhar;":"\u2969","rdquor;":"\u201D","rdsh;":"\u21B3","realine;":"\u211B","realpart;":"\u211C","reals;":"\u211D","Re;":"\u211C","rect;":"\u25AD","REG;":"\u00AE","REG":"\u00AE","ReverseElement;":"\u220B","ReverseEquilibrium;":"\u21CB","ReverseUpEquilibrium;":"\u296F","rfisht;":"\u297D","rfr;":"\uD835\uDD2F","Rfr;":"\u211C","rHar;":"\u2964","rhard;":"\u21C1","rharu;":"\u21C0","rharul;":"\u296C","rhov;":"\u03F1","RightAngleBracket;":"\u27E9","RightArrowBar;":"\u21E5","rightarrow;":"\u2192","RightArrow;":"\u2192","Rightarrow;":"\u21D2","RightArrowLeftArrow;":"\u21C4","rightarrowtail;":"\u21A3","RightCeiling;":"\u2309","RightDoubleBracket;":"\u27E7","RightDownTeeVector;":"\u295D","RightDownVectorBar;":"\u2955","RightDownVector;":"\u21C2","RightFloor;":"\u230B","rightharpoondown;":"\u21C1","rightharpoonup;":"\u21C0","rightleftarrows;":"\u21C4","rightleftharpoons;":"\u21CC","rightrightarrows;":"\u21C9","rightsquigarrow;":"\u219D","RightTeeArrow;":"\u21A6","RightTee;":"\u22A2","RightTeeVector;":"\u295B","rightthreetimes;":"\u22CC","RightTriangleBar;":"\u29D0","RightTriangle;":"\u22B3","RightTriangleEqual;":"\u22B5","RightUpDownVector;":"\u294F","RightUpTeeVector;":"\u295C","RightUpVectorBar;":"\u2954","RightUpVector;":"\u21BE","RightVectorBar;":"\u2953","RightVector;":"\u21C0","ring;":"\u02DA","risingdotseq;":"\u2253","rlarr;":"\u21C4","rlhar;":"\u21CC","rmoustache;":"\u23B1","rmoust;":"\u23B1","rnmid;":"\u2AEE","roang;":"\u27ED","roarr;":"\u21FE","robrk;":"\u27E7","ropar;":"\u2986","ropf;":"\uD835\uDD63","Ropf;":"\u211D","roplus;":"\u2A2E","rotimes;":"\u2A35","RoundImplies;":"\u2970","rpar;":"\u0029","rpargt;":"\u2994","rppolint;":"\u2A12","rrarr;":"\u21C9","Rrightarrow;":"\u21DB","rscr;":"\uD835\uDCC7","Rscr;":"\u211B","rsh;":"\u21B1","Rsh;":"\u21B1","rsqb;":"\u005D","rsquor;":"\u2019","rthree;":"\u22CC","rtimes;":"\u22CA","rtri;":"\u25B9","rtrie;":"\u22B5","rtrif;":"\u25B8","rtriltri;":"\u29CE","RuleDelayed;":"\u29F4","ruluhar;":"\u2968","rx;":"\u211E","Sacute;":"\u015A","sacute;":"\u015B","scap;":"\u2AB8","Sc;":"\u2ABC","sc;":"\u227B","sccue;":"\u227D","sce;":"\u2AB0","scE;":"\u2AB4","Scedil;":"\u015E","scedil;":"\u015F","Scirc;":"\u015C","scirc;":"\u015D","scnap;":"\u2ABA","scnE;":"\u2AB6","scnsim;":"\u22E9","scpolint;":"\u2A13","scsim;":"\u227F","Scy;":"\u0421","scy;":"\u0441","sdotb;":"\u22A1","sdote;":"\u2A66","searhk;":"\u2925","searr;":"\u2198","seArr;":"\u21D8","searrow;":"\u2198","semi;":"\u003B","seswar;":"\u2929","setminus;":"\u2216","setmn;":"\u2216","sext;":"\u2736","Sfr;":"\uD835\uDD16","sfr;":"\uD835\uDD30","sfrown;":"\u2322","sharp;":"\u266F","SHCHcy;":"\u0429","shchcy;":"\u0449","SHcy;":"\u0428","shcy;":"\u0448","ShortDownArrow;":"\u2193","ShortLeftArrow;":"\u2190","shortmid;":"\u2223","shortparallel;":"\u2225","ShortRightArrow;":"\u2192","ShortUpArrow;":"\u2191","sigmav;":"\u03C2","simdot;":"\u2A6A","sime;":"\u2243","simeq;":"\u2243","simg;":"\u2A9E","simgE;":"\u2AA0","siml;":"\u2A9D","simlE;":"\u2A9F","simne;":"\u2246","simplus;":"\u2A24","simrarr;":"\u2972","slarr;":"\u2190","SmallCircle;":"\u2218","smallsetminus;":"\u2216","smashp;":"\u2A33","smeparsl;":"\u29E4","smid;":"\u2223","smile;":"\u2323","smt;":"\u2AAA","smte;":"\u2AAC","smtes;":"\u2AAC\uFE00","SOFTcy;":"\u042C","softcy;":"\u044C","solbar;":"\u233F","solb;":"\u29C4","sol;":"\u002F","Sopf;":"\uD835\uDD4A","sopf;":"\uD835\uDD64","spadesuit;":"\u2660","spar;":"\u2225","sqcap;":"\u2293","sqcaps;":"\u2293\uFE00","sqcup;":"\u2294","sqcups;":"\u2294\uFE00","Sqrt;":"\u221A","sqsub;":"\u228F","sqsube;":"\u2291","sqsubset;":"\u228F","sqsubseteq;":"\u2291","sqsup;":"\u2290","sqsupe;":"\u2292","sqsupset;":"\u2290","sqsupseteq;":"\u2292","square;":"\u25A1","Square;":"\u25A1","SquareIntersection;":"\u2293","SquareSubset;":"\u228F","SquareSubsetEqual;":"\u2291","SquareSuperset;":"\u2290","SquareSupersetEqual;":"\u2292","SquareUnion;":"\u2294","squarf;":"\u25AA","squ;":"\u25A1","squf;":"\u25AA","srarr;":"\u2192","Sscr;":"\uD835\uDCAE","sscr;":"\uD835\uDCC8","ssetmn;":"\u2216","ssmile;":"\u2323","sstarf;":"\u22C6","Star;":"\u22C6","star;":"\u2606","starf;":"\u2605","straightepsilon;":"\u03F5","straightphi;":"\u03D5","strns;":"\u00AF","Sub;":"\u22D0","subdot;":"\u2ABD","subE;":"\u2AC5","subedot;":"\u2AC3","submult;":"\u2AC1","subnE;":"\u2ACB","subne;":"\u228A","subplus;":"\u2ABF","subrarr;":"\u2979","subset;":"\u2282","Subset;":"\u22D0","subseteq;":"\u2286","subseteqq;":"\u2AC5","SubsetEqual;":"\u2286","subsetneq;":"\u228A","subsetneqq;":"\u2ACB","subsim;":"\u2AC7","subsub;":"\u2AD5","subsup;":"\u2AD3","succapprox;":"\u2AB8","succ;":"\u227B","succcurlyeq;":"\u227D","Succeeds;":"\u227B","SucceedsEqual;":"\u2AB0","SucceedsSlantEqual;":"\u227D","SucceedsTilde;":"\u227F","succeq;":"\u2AB0","succnapprox;":"\u2ABA","succneqq;":"\u2AB6","succnsim;":"\u22E9","succsim;":"\u227F","SuchThat;":"\u220B","Sum;":"\u2211","sung;":"\u266A","Sup;":"\u22D1","supdot;":"\u2ABE","supdsub;":"\u2AD8","supE;":"\u2AC6","supedot;":"\u2AC4","Superset;":"\u2283","SupersetEqual;":"\u2287","suphsol;":"\u27C9","suphsub;":"\u2AD7","suplarr;":"\u297B","supmult;":"\u2AC2","supnE;":"\u2ACC","supne;":"\u228B","supplus;":"\u2AC0","supset;":"\u2283","Supset;":"\u22D1","supseteq;":"\u2287","supseteqq;":"\u2AC6","supsetneq;":"\u228B","supsetneqq;":"\u2ACC","supsim;":"\u2AC8","supsub;":"\u2AD4","supsup;":"\u2AD6","swarhk;":"\u2926","swarr;":"\u2199","swArr;":"\u21D9","swarrow;":"\u2199","swnwar;":"\u292A","Tab;":"\u0009","target;":"\u2316","tbrk;":"\u23B4","Tcaron;":"\u0164","tcaron;":"\u0165","Tcedil;":"\u0162","tcedil;":"\u0163","Tcy;":"\u0422","tcy;":"\u0442","tdot;":"\u20DB","telrec;":"\u2315","Tfr;":"\uD835\uDD17","tfr;":"\uD835\uDD31","therefore;":"\u2234","Therefore;":"\u2234","thetav;":"\u03D1","thickapprox;":"\u2248","thicksim;":"\u223C","ThickSpace;":"\u205F\u200A","ThinSpace;":"\u2009","thkap;":"\u2248","thksim;":"\u223C","Tilde;":"\u223C","TildeEqual;":"\u2243","TildeFullEqual;":"\u2245","TildeTilde;":"\u2248","timesbar;":"\u2A31","timesb;":"\u22A0","timesd;":"\u2A30","tint;":"\u222D","toea;":"\u2928","topbot;":"\u2336","topcir;":"\u2AF1","top;":"\u22A4","Topf;":"\uD835\uDD4B","topf;":"\uD835\uDD65","topfork;":"\u2ADA","tosa;":"\u2929","tprime;":"\u2034","TRADE;":"\u2122","triangle;":"\u25B5","triangledown;":"\u25BF","triangleleft;":"\u25C3","trianglelefteq;":"\u22B4","triangleq;":"\u225C","triangleright;":"\u25B9","trianglerighteq;":"\u22B5","tridot;":"\u25EC","trie;":"\u225C","triminus;":"\u2A3A","TripleDot;":"\u20DB","triplus;":"\u2A39","trisb;":"\u29CD","tritime;":"\u2A3B","trpezium;":"\u23E2","Tscr;":"\uD835\uDCAF","tscr;":"\uD835\uDCC9","TScy;":"\u0426","tscy;":"\u0446","TSHcy;":"\u040B","tshcy;":"\u045B","Tstrok;":"\u0166","tstrok;":"\u0167","twixt;":"\u226C","twoheadleftarrow;":"\u219E","twoheadrightarrow;":"\u21A0","Uarr;":"\u219F","Uarrocir;":"\u2949","Ubrcy;":"\u040E","ubrcy;":"\u045E","Ubreve;":"\u016C","ubreve;":"\u016D","Ucy;":"\u0423","ucy;":"\u0443","udarr;":"\u21C5","Udblac;":"\u0170","udblac;":"\u0171","udhar;":"\u296E","ufisht;":"\u297E","Ufr;":"\uD835\uDD18","ufr;":"\uD835\uDD32","uHar;":"\u2963","uharl;":"\u21BF","uharr;":"\u21BE","uhblk;":"\u2580","ulcorn;":"\u231C","ulcorner;":"\u231C","ulcrop;":"\u230F","ultri;":"\u25F8","Umacr;":"\u016A","umacr;":"\u016B","UnderBar;":"\u005F","UnderBrace;":"\u23DF","UnderBracket;":"\u23B5","UnderParenthesis;":"\u23DD","Union;":"\u22C3","UnionPlus;":"\u228E","Uogon;":"\u0172","uogon;":"\u0173","Uopf;":"\uD835\uDD4C","uopf;":"\uD835\uDD66","UpArrowBar;":"\u2912","uparrow;":"\u2191","UpArrow;":"\u2191","Uparrow;":"\u21D1","UpArrowDownArrow;":"\u21C5","updownarrow;":"\u2195","UpDownArrow;":"\u2195","Updownarrow;":"\u21D5","UpEquilibrium;":"\u296E","upharpoonleft;":"\u21BF","upharpoonright;":"\u21BE","uplus;":"\u228E","UpperLeftArrow;":"\u2196","UpperRightArrow;":"\u2197","upsi;":"\u03C5","Upsi;":"\u03D2","UpTeeArrow;":"\u21A5","UpTee;":"\u22A5","upuparrows;":"\u21C8","urcorn;":"\u231D","urcorner;":"\u231D","urcrop;":"\u230E","Uring;":"\u016E","uring;":"\u016F","urtri;":"\u25F9","Uscr;":"\uD835\uDCB0","uscr;":"\uD835\uDCCA","utdot;":"\u22F0","Utilde;":"\u0168","utilde;":"\u0169","utri;":"\u25B5","utrif;":"\u25B4","uuarr;":"\u21C8","uwangle;":"\u29A7","vangrt;":"\u299C","varepsilon;":"\u03F5","varkappa;":"\u03F0","varnothing;":"\u2205","varphi;":"\u03D5","varpi;":"\u03D6","varpropto;":"\u221D","varr;":"\u2195","vArr;":"\u21D5","varrho;":"\u03F1","varsigma;":"\u03C2","varsubsetneq;":"\u228A\uFE00","varsubsetneqq;":"\u2ACB\uFE00","varsupsetneq;":"\u228B\uFE00","varsupsetneqq;":"\u2ACC\uFE00","vartheta;":"\u03D1","vartriangleleft;":"\u22B2","vartriangleright;":"\u22B3","vBar;":"\u2AE8","Vbar;":"\u2AEB","vBarv;":"\u2AE9","Vcy;":"\u0412","vcy;":"\u0432","vdash;":"\u22A2","vDash;":"\u22A8","Vdash;":"\u22A9","VDash;":"\u22AB","Vdashl;":"\u2AE6","veebar;":"\u22BB","vee;":"\u2228","Vee;":"\u22C1","veeeq;":"\u225A","vellip;":"\u22EE","verbar;":"\u007C","Verbar;":"\u2016","vert;":"\u007C","Vert;":"\u2016","VerticalBar;":"\u2223","VerticalLine;":"\u007C","VerticalSeparator;":"\u2758","VerticalTilde;":"\u2240","VeryThinSpace;":"\u200A","Vfr;":"\uD835\uDD19","vfr;":"\uD835\uDD33","vltri;":"\u22B2","vnsub;":"\u2282\u20D2","vnsup;":"\u2283\u20D2","Vopf;":"\uD835\uDD4D","vopf;":"\uD835\uDD67","vprop;":"\u221D","vrtri;":"\u22B3","Vscr;":"\uD835\uDCB1","vscr;":"\uD835\uDCCB","vsubnE;":"\u2ACB\uFE00","vsubne;":"\u228A\uFE00","vsupnE;":"\u2ACC\uFE00","vsupne;":"\u228B\uFE00","Vvdash;":"\u22AA","vzigzag;":"\u299A","Wcirc;":"\u0174","wcirc;":"\u0175","wedbar;":"\u2A5F","wedge;":"\u2227","Wedge;":"\u22C0","wedgeq;":"\u2259","Wfr;":"\uD835\uDD1A","wfr;":"\uD835\uDD34","Wopf;":"\uD835\uDD4E","wopf;":"\uD835\uDD68","wp;":"\u2118","wr;":"\u2240","wreath;":"\u2240","Wscr;":"\uD835\uDCB2","wscr;":"\uD835\uDCCC","xcap;":"\u22C2","xcirc;":"\u25EF","xcup;":"\u22C3","xdtri;":"\u25BD","Xfr;":"\uD835\uDD1B","xfr;":"\uD835\uDD35","xharr;":"\u27F7","xhArr;":"\u27FA","xlarr;":"\u27F5","xlArr;":"\u27F8","xmap;":"\u27FC","xnis;":"\u22FB","xodot;":"\u2A00","Xopf;":"\uD835\uDD4F","xopf;":"\uD835\uDD69","xoplus;":"\u2A01","xotime;":"\u2A02","xrarr;":"\u27F6","xrArr;":"\u27F9","Xscr;":"\uD835\uDCB3","xscr;":"\uD835\uDCCD","xsqcup;":"\u2A06","xuplus;":"\u2A04","xutri;":"\u25B3","xvee;":"\u22C1","xwedge;":"\u22C0","YAcy;":"\u042F","yacy;":"\u044F","Ycirc;":"\u0176","ycirc;":"\u0177","Ycy;":"\u042B","ycy;":"\u044B","Yfr;":"\uD835\uDD1C","yfr;":"\uD835\uDD36","YIcy;":"\u0407","yicy;":"\u0457","Yopf;":"\uD835\uDD50","yopf;":"\uD835\uDD6A","Yscr;":"\uD835\uDCB4","yscr;":"\uD835\uDCCE","YUcy;":"\u042E","yucy;":"\u044E","Zacute;":"\u0179","zacute;":"\u017A","Zcaron;":"\u017D","zcaron;":"\u017E","Zcy;":"\u0417","zcy;":"\u0437","Zdot;":"\u017B","zdot;":"\u017C","zeetrf;":"\u2128","ZeroWidthSpace;":"\u200B","zfr;":"\uD835\uDD37","Zfr;":"\u2128","ZHcy;":"\u0416","zhcy;":"\u0436","zigrarr;":"\u21DD","zopf;":"\uD835\uDD6B","Zopf;":"\u2124","Zscr;":"\uD835\uDCB5","zscr;":"\uD835\uDCCF"} \ No newline at end of file diff --git a/node_modules/toc/node_modules/entities/entities/xml.json b/node_modules/toc/node_modules/entities/entities/xml.json new file mode 100644 index 000000000..b6e781c1e --- /dev/null +++ b/node_modules/toc/node_modules/entities/entities/xml.json @@ -0,0 +1 @@ +{"amp;":"\u0026","apos;":"\u0027","gt;":"\u003e","lt;":"\u003c","quot;":"\u0022"} \ No newline at end of file diff --git a/node_modules/toc/node_modules/entities/index.js b/node_modules/toc/node_modules/entities/index.js new file mode 100644 index 000000000..84705412c --- /dev/null +++ b/node_modules/toc/node_modules/entities/index.js @@ -0,0 +1,99 @@ +var compiled = require("./compile.js"), + modes = ["XML", "HTML4", "HTML5"]; + +var levels = modes.map(function(name, i){ + var obj = compiled[name], + strict = genReplaceFunc(obj.strict, getStrictReplacer(obj.obj)), + //there is no non-strict mode for XML + normal = i === 0 ? strict : genReplaceFunc(obj.normal, getReplacer(obj.obj)), + inverse = getInverse(obj.inverseObj, obj.inverse); + + exports["decode" + name + "Strict"] = strict; + exports["decode" + name] = normal; + exports["encode" + name] = inverse; + + return { + strict: strict, + normal: normal, + inverse: inverse + }; +}); + +var decode = levels.map(function(l){ return l.normal; }), + decodeStrict = levels.map(function(l){ return l.strict; }), + encode = levels.map(function(l){ return l.inverse; }); + +exports.decode = function(data, level){ + if(!(level >= 0 && level < 3)) level = 0; + return decode[level](data); +}; +exports.decodeStrict = function(data, level){ + if(!(level >= 0 && level < 3)) level = 0; + return decodeStrict[level](data); +}; +exports.encode = function(data, level){ + if(!(level >= 0 && level < 3)) level = 0; + return encode[level](data); +}; + +function getReplacer(obj){ + return function normalReplacer(name){ + if(name.charAt(1) === "#"){ + if(name.charAt(2).toLowerCase() === "x"){ + return codePointToSymbol(parseInt(name.substr(3), 16)); + } + return codePointToSymbol(parseInt(name.substr(2), 10)); + } + return obj[name.substr(1)]; + }; +} + +function codePointToSymbol(entity){ + return String.fromCharCode(entity); //TODO +} + +function getStrictReplacer(obj){ + return function strictReplacer(name){ + if(name.charAt(1) === "#"){ + if(name.charAt(2).toLowerCase() === "x"){ + return String.fromCharCode(parseInt(name.substr(3), 16)); + } + return String.fromCharCode(parseInt(name.substr(2), 10)); + } + return obj[name.substr(1)]; + }; +} + +var re_nonASCII = /[^\0-\x7F]/g, + re_astralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + +function nonUTF8Replacer(c){ + return "&#x" + c.charCodeAt(0).toString(16).toUpperCase() + ";"; +} + +function astralReplacer(c){ + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = c.charCodeAt(0); + var low = c.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return "&#x" + codePoint.toString(16).toUpperCase() + ";"; +} + +function getInverse(inverse, re){ + function func(name){ + return "&" + inverse[name]; + } + + return function(data){ + return data + .replace(re, func) + .replace(re_astralSymbols, astralReplacer) + .replace(re_nonASCII, nonUTF8Replacer); + }; +} + +function genReplaceFunc(regex, func){ + return function(data){ + return data.replace(regex, func); + }; +} diff --git a/node_modules/toc/node_modules/entities/package.json b/node_modules/toc/node_modules/entities/package.json new file mode 100644 index 000000000..e2c1e5eee --- /dev/null +++ b/node_modules/toc/node_modules/entities/package.json @@ -0,0 +1,27 @@ +{ + "name": "entities", + "version": "0.5.0", + "description": "Encode & decode XML/HTML entities with ease", + "author": "Felix Boehm ", + "keywords": [ + "html", + "xml", + "entity", + "encoding" + ], + "main": "./index.js", + "directories": { + "test": "test" + }, + "devDependencies": { + "mocha": "~1.9.0" + }, + "scripts": { + "test": "mocha" + }, + "repository": { + "type": "git", + "url": "git://github.com/fb55/node-entities.git" + }, + "license": "BSD-like" +} diff --git a/node_modules/toc/node_modules/entities/readme.md b/node_modules/toc/node_modules/entities/readme.md new file mode 100644 index 000000000..ebd87df34 --- /dev/null +++ b/node_modules/toc/node_modules/entities/readme.md @@ -0,0 +1,27 @@ +#entities + +En- & decoder for XML/HTML entities. + +####Features: +* Focussed on ___speed___ +* Supports three levels of entities: __XML__, __HTML4__ & __HTML5__ + * Supports _char code_ entities (eg. `U`) + +##How to… + +###…install `entities` + + npm i entities + +###…use `entities` + +```javascript +//encoding +require("entities").encode( data[, level]); +//decoding +require("entities").decode( data[, level]); +``` + +The `level` attribute indicates what level of entities should be decoded (0 = XML, 1 = HTML4 and 2 = HTML5). The default is 0 (read: XML). + +There are also methods to access the level directly. Just append the name of the level to the action and you're ready to go (e.g. `encodeHTML4(data)`, `decodeXML(data)`). diff --git a/node_modules/toc/node_modules/entities/test/mocha.opts b/node_modules/toc/node_modules/entities/test/mocha.opts new file mode 100644 index 000000000..af53e2422 --- /dev/null +++ b/node_modules/toc/node_modules/entities/test/mocha.opts @@ -0,0 +1,2 @@ +--check-leaks +--reporter spec diff --git a/node_modules/toc/node_modules/entities/test/test.js b/node_modules/toc/node_modules/entities/test/test.js new file mode 100644 index 000000000..af988b21b --- /dev/null +++ b/node_modules/toc/node_modules/entities/test/test.js @@ -0,0 +1,140 @@ +var assert = require("assert"), + path = require("path"), + entities = require('../'); + +describe("Encode->decode test", function(){ + var testcases = [ + { + input: "asdf & ÿ ü '", + xml: "asdf & ÿ ü '", + html4: "asdf & ÿ ü '", + html5: "asdf & ÿ ü '" + }, { + input: "&", + xml: "&#38;", + html4: "&#38;", + html5: "&#38;" + }, + ]; + testcases.forEach(function(tc) { + var encodedXML = entities.encodeXML(tc.input); + it("should XML encode " + tc.input, function(){ + assert.equal(encodedXML, tc.xml); + }); + it("should default to XML encode " + tc.input, function(){ + assert.equal(entities.encode(tc.input), tc.xml); + }); + it("should XML decode " + encodedXML, function(){ + assert.equal(entities.decodeXML(encodedXML), tc.input); + }); + it("should default to XML encode " + encodedXML, function(){ + assert.equal(entities.decode(encodedXML), tc.input); + }); + it("should default strict to XML encode " + encodedXML, function(){ + assert.equal(entities.decodeStrict(encodedXML), tc.input); + }); + + var encodedHTML4 = entities.encodeHTML4(tc.input); + it("should HTML4 encode " + tc.input, function(){ + assert.equal(encodedHTML4, tc.html4); + }); + it("should HTML4 decode " + encodedHTML4, function(){ + assert.equal(entities.decodeHTML4(encodedHTML4), tc.input); + }); + + var encodedHTML5 = entities.encodeHTML5(tc.input); + it("should HTML5 encode " + tc.input, function(){ + assert.equal(encodedHTML5, tc.html5); + }); + it("should HTML5 decode " + encodedHTML5, function(){ + assert.equal(entities.decodeHTML5(encodedHTML5), tc.input); + }); + }); +}); + +describe("Decode test", function(){ + var testcases = [ + { input: "&amp;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: "&#x26;", output: "&" }, + { input: "&#X26;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: "&#38;", output: "&" }, + { input: ":", output: ":" }, + { input: ":", output: ":" }, + { input: ":", output: ":" }, + { input: ":", output: ":" } + ]; + testcases.forEach(function(tc) { + it("should XML decode " + tc.input, function(){ + assert.equal(entities.decodeXML(tc.input), tc.output); + }); + it("should HTML4 decode " + tc.input, function(){ + assert.equal(entities.decodeHTML4(tc.input), tc.output); + }); + it("should HTML5 decode " + tc.input, function(){ + assert.equal(entities.decodeHTML5(tc.input), tc.output); + }); + }); +}); + +var levels = ["xml", "html4", "html5"]; + +describe("Documents", function(){ + levels + .map(function(n){ return path.join("..", "entities", n); }) + .map(require) + .forEach(function(doc, i){ + describe("Decode", function(){ + it(levels[i], function(){ + Object.keys(doc).forEach(function(e){ + for(var l = i; l < levels.length; l++){ + assert.equal(entities.decode("&" + e, l), doc[e]); + } + }); + }); + }); + + describe("Decode strict", function(){ + it(levels[i], function(){ + Object.keys(doc).forEach(function(e){ + if(e.substr(-1) !== ";"){ + assert.equal(entities.decodeStrict("&" + e, i), "&" + e); + return; + } + for(var l = i; l < levels.length; l++){ + assert.equal(entities.decodeStrict("&" + e, l), doc[e]); + } + }); + }); + }); + + describe("Encode", function(){ + it(levels[i], function(){ + Object.keys(doc).forEach(function(e){ + if(e.substr(-1) !== ";") return; + for(var l = i; l < levels.length; l++){ + assert.equal(entities.decode(entities.encode(doc[e], l), l), doc[e]); + } + }); + }); + }); + }); +}); + +var astral = { + "1D306": "\uD834\uDF06", + "1D11E": "\uD834\uDD1E" +}; + +describe("Astral entities", function(){ + Object.keys(astral).forEach(function(c){ + /*it("should decode " + astral[c], function(){ + assert.equal(entities.decode("&#x" + c + ";"), astral[c]); + });*/ + it("should encode " + astral[c], function(){ + assert.equal(entities.encode(astral[c]), "&#x" + c + ";"); + }); + }); +}); diff --git a/node_modules/toc/node_modules/lodash/LICENSE.txt b/node_modules/toc/node_modules/lodash/LICENSE.txt new file mode 100644 index 000000000..49869bbab --- /dev/null +++ b/node_modules/toc/node_modules/lodash/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +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/node_modules/toc/node_modules/lodash/README.md b/node_modules/toc/node_modules/lodash/README.md new file mode 100644 index 000000000..86b063677 --- /dev/null +++ b/node_modules/toc/node_modules/lodash/README.md @@ -0,0 +1,145 @@ +# Lo-Dash v2.4.2 +A utility library delivering consistency, [customization](https://lodash.com/custom-builds), [performance](https://lodash.com/benchmarks), & [extras](https://lodash.com/#features). + +## Download + +Check out our [wiki]([https://github.com/lodash/lodash/wiki/build-differences]) for details over the differences between builds. + +* Modern builds perfect for newer browsers/environments:
      +[Development](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.js) & +[Production](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.min.js) + +* Compatibility builds for older environment support too:
      +[Development](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.compat.js) & +[Production](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.compat.min.js) + +* Underscore builds to use as a drop-in replacement:
      +[Development](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.underscore.js) & +[Production](https://raw.github.com/lodash/lodash/2.4.2/dist/lodash.underscore.min.js) + +CDN copies are available on [cdnjs](http://cdnjs.com/libraries/lodash.js/) & [jsDelivr](http://www.jsdelivr.com/#!lodash). For smaller file sizes, create [custom builds](https://lodash.com/custom-builds) with only the features needed. + +Love modules? We’ve got you covered with [lodash-amd](https://npmjs.org/package/lodash-amd), [lodash-es6](https://github.com/lodash/lodash-es6), [lodash-node](https://npmjs.org/package/lodash-node), & [npm packages](https://npmjs.org/browse/keyword/lodash-modularized) per method. + +## Dive in + +There’s plenty of **[documentation](https://lodash.com/docs)**, [unit tests](https://lodash.com/tests), & [benchmarks](https://lodash.com/benchmarks).
      +Check out DevDocs as a fast, organized, & searchable interface for our documentation. + +The full changelog for this release is available on our [wiki](https://github.com/lodash/lodash/wiki/Changelog).
      +A list of upcoming features is available on our [roadmap](https://github.com/lodash/lodash/wiki/Roadmap). + +## Installation & usage + +In browsers: + +```html + +``` + +Using [`npm`](http://npmjs.org/): + +```bash +npm i --save lodash + +{sudo} npm i -g lodash +npm ln lodash +``` + +In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/): + +```js +var _ = require('lodash'); +// or as Underscore +var _ = require('lodash/dist/lodash.underscore'); +``` + +**Notes:** + * Don’t assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL + * If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory *before* requiring it + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('lodash.js'); +``` + +In an AMD loader: + +```js +require({ + 'packages': [ + { 'name': 'lodash', 'location': 'path/to/lodash', 'main': 'lodash' } + ] +}, +['lodash'], function(_) { + console.log(_.VERSION); +}); +``` + +## Resources + + * Podcasts + - [JavaScript Jabber](http://javascriptjabber.com/079-jsj-lo-dash-with-john-david-dalton/) + + * Posts + - [Say “Hello” to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/) + - [Custom builds in Lo-Dash 2.0](http://kitcambridge.be/blog/custom-builds-in-lo-dash-2-dot-0/) + + * Videos + - [Introduction](https://vimeo.com/44154599) + - [Origins](https://vimeo.com/44154600) + - [Optimizations & builds](https://vimeo.com/44154601) + - [Native method use](https://vimeo.com/48576012) + - [Testing](https://vimeo.com/45865290) + - [CascadiaJS ’12](http://www.youtube.com/watch?v=dpPy4f_SeEk) + + A list of other community created podcasts, posts, & videos is available on our [wiki](https://github.com/lodash/lodash/wiki/Resources). + +## Features + + * AMD loader support ([curl](https://github.com/cujojs/curl), [dojo](http://dojotoolkit.org/), [requirejs](http://requirejs.org/), etc.) + * [_(…)](https://lodash.com/docs#_) supports intuitive chaining + * [_.at](https://lodash.com/docs#at) for cherry-picking collection values + * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods + * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects + * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects + * [_.constant](https://lodash.com/docs#constant) & [_.property](https://lodash.com/docs#property) function generators for composing functions + * [_.contains](https://lodash.com/docs#contains) accepts a `fromIndex` + * [_.create](https://lodash.com/docs#create) for easier object inheritance + * [_.createCallback](https://lodash.com/docs#createCallback) for extending callbacks in methods & mixins + * [_.curry](https://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions + * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) accept additional `options` for more control + * [_.findIndex](https://lodash.com/docs#findIndex) & [_.findKey](https://lodash.com/docs#findKey) for finding indexes & keys + * [_.forEach](https://lodash.com/docs#forEach) is chainable & supports exiting early + * [_.forIn](https://lodash.com/docs#forIn) for iterating own & inherited properties + * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties + * [_.isPlainObject](https://lodash.com/docs#isPlainObject) for checking if values are created by `Object` + * [_.mapValues](https://lodash.com/docs#mapValues) for [mapping](https://lodash.com/docs#map) values to an object + * [_.memoize](https://lodash.com/docs#memoize) exposes the `cache` of memoized functions + * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend) + * [_.noop](https://lodash.com/docs#noop) for function placeholders + * [_.now](https://lodash.com/docs#now) as a cross-browser `Date.now` alternative + * [_.parseInt](https://lodash.com/docs#parseInt) for consistent behavior + * [_.pull](https://lodash.com/docs#pull) & [_.remove](https://lodash.com/docs#remove) for mutating arrays + * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers + * [_.runInContext](https://lodash.com/docs#runInContext) for easier mocking + * [_.sortBy](https://lodash.com/docs#sortBy) supports sorting by multiple properties + * [_.support](https://lodash.com/docs#support) for flagging environment features + * [_.template](https://lodash.com/docs#template) supports [*“imports”*](https://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals) + * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects + * [_.where](https://lodash.com/docs#where) supports deep object comparisons + * [_.xor](https://lodash.com/docs#xor) as a companion to [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union) + * [_.zip](https://lodash.com/docs#zip) is capable of unzipping values + * [_.omit](https://lodash.com/docs#omit), [_.pick](https://lodash.com/docs#pick), & + [more](https://lodash.com/docs "_.assign, _.clone, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept callbacks + * [_.contains](https://lodash.com/docs#contains), [_.toArray](https://lodash.com/docs#toArray), & + [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.forEachRight, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.where") accept strings + * [_.filter](https://lodash.com/docs#filter), [_.map](https://lodash.com/docs#map), & + [more](https://lodash.com/docs "_.countBy, _.every, _.find, _.findKey, _.findLast, _.findLastIndex, _.findLastKey, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluck”* & *“_.where”* shorthands + * [_.findLast](https://lodash.com/docs#findLast), [_.findLastIndex](https://lodash.com/docs#findLastIndex), & + [more](https://lodash.com/docs "_.findLastKey, _.forEachRight, _.forInRight, _.forOwnRight, _.partialRight") right-associative methods + +## Support + +Tested in Chrome 5~31, Firefox 2~25, IE 6-11, Opera 9.25-17, Safari 3-7, Node.js 0.6.21-0.10.22, Narwhal 0.3.2, PhantomJS 1.9.2, RingoJS 0.9, & Rhino 1.7RC5. diff --git a/node_modules/toc/node_modules/lodash/dist/lodash.compat.js b/node_modules/toc/node_modules/lodash/dist/lodash.compat.js new file mode 100644 index 000000000..4d35185f8 --- /dev/null +++ b/node_modules/toc/node_modules/lodash/dist/lodash.compat.js @@ -0,0 +1,7158 @@ +/** + * @license + * Lo-Dash 2.4.2 (Custom Build) + * Build: `lodash -o ./dist/lodash.compat.js` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre ES5 environments */ + var undefined; + + /** Used to pool arrays and objects used internally */ + var arrayPool = [], + objectPool = []; + + /** Used to generate unique IDs */ + var idCounter = 0; + + /** Used internally to indicate various things */ + var indicatorObject = {}; + + /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */ + var keyPrefix = +new Date + ''; + + /** Used as the size when optimizations are enabled for large arrays */ + var largeArraySize = 75; + + /** Used as the max size of the `arrayPool` and `objectPool` */ + var maxPoolSize = 40; + + /** Used to detect and test whitespace */ + var whitespace = ( + // whitespace + ' \t\x0B\f\xA0\ufeff' + + + // line terminators + '\n\r\u2028\u2029' + + + // unicode category "Zs" space separators + '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' + ); + + /** Used to match empty string literals in compiled template source */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** + * Used to match ES6 template delimiters + * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match regexp flags from their coerced string values */ + var reFlags = /\w*$/; + + /** Used to detected named functions */ + var reFuncName = /^\s*function[ \n\r\t]+\w/; + + /** Used to match "interpolate" template delimiters */ + var reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match leading whitespace and zeros to be removed */ + var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)'); + + /** Used to ensure capturing order of template delimiters */ + var reNoMatch = /($^)/; + + /** Used to detect functions containing a `this` reference */ + var reThis = /\bthis\b/; + + /** Used to match unescaped characters in compiled string literals */ + var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; + + /** Used to assign default `context` object properties */ + var contextProps = [ + 'Array', 'Boolean', 'Date', 'Error', 'Function', 'Math', 'Number', 'Object', + 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN', + 'parseInt', 'setTimeout' + ]; + + /** Used to fix the JScript [[DontEnum]] bug */ + var shadowedProps = [ + 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', + 'toLocaleString', 'toString', 'valueOf' + ]; + + /** Used to make template sourceURLs easier to identify */ + var templateCounter = 0; + + /** `Object#toString` result shortcuts */ + var argsClass = '[object Arguments]', + arrayClass = '[object Array]', + boolClass = '[object Boolean]', + dateClass = '[object Date]', + errorClass = '[object Error]', + funcClass = '[object Function]', + numberClass = '[object Number]', + objectClass = '[object Object]', + regexpClass = '[object RegExp]', + stringClass = '[object String]'; + + /** Used to identify object classifications that `_.clone` supports */ + var cloneableClasses = {}; + cloneableClasses[funcClass] = false; + cloneableClasses[argsClass] = cloneableClasses[arrayClass] = + cloneableClasses[boolClass] = cloneableClasses[dateClass] = + cloneableClasses[numberClass] = cloneableClasses[objectClass] = + cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; + + /** Used as an internal `_.debounce` options object */ + var debounceOptions = { + 'leading': false, + 'maxWait': 0, + 'trailing': false + }; + + /** Used as the property descriptor for `__bindData__` */ + var descriptor = { + 'configurable': false, + 'enumerable': false, + 'value': null, + 'writable': false + }; + + /** Used as the data object for `iteratorTemplate` */ + var iteratorData = { + 'args': '', + 'array': null, + 'bottom': '', + 'firstArg': '', + 'init': '', + 'keys': null, + 'loop': '', + 'shadowedProps': null, + 'support': null, + 'top': '', + 'useHas': false + }; + + /** Used to determine if values are of the language type Object */ + var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false + }; + + /** Used to escape characters for inclusion in compiled string literals */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Used as a reference to the global object */ + var root = (objectTypes[typeof window] && window) || this; + + /** Detect free variable `exports` */ + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + /** Detect free variable `module` */ + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports` */ + var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; + + /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ + var freeGlobal = objectTypes[typeof global] && global; + if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `_.indexOf` without support for binary searches + * or `fromIndex` constraints. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value or `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + var index = (fromIndex || 0) - 1, + length = array ? array.length : 0; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * An implementation of `_.contains` for cache objects that mimics the return + * signature of `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache object to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ + function cacheIndexOf(cache, value) { + var type = typeof value; + cache = cache.cache; + + if (type == 'boolean' || value == null) { + return cache[value] ? 0 : -1; + } + if (type != 'number' && type != 'string') { + type = 'object'; + } + var key = type == 'number' ? value : keyPrefix + value; + cache = (cache = cache[type]) && cache[key]; + + return type == 'object' + ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1) + : (cache ? 0 : -1); + } + + /** + * Adds a given value to the corresponding cache object. + * + * @private + * @param {*} value The value to add to the cache. + */ + function cachePush(value) { + var cache = this.cache, + type = typeof value; + + if (type == 'boolean' || value == null) { + cache[value] = true; + } else { + if (type != 'number' && type != 'string') { + type = 'object'; + } + var key = type == 'number' ? value : keyPrefix + value, + typeCache = cache[type] || (cache[type] = {}); + + if (type == 'object') { + (typeCache[key] || (typeCache[key] = [])).push(value); + } else { + typeCache[key] = true; + } + } + } + + /** + * Used by `_.max` and `_.min` as the default callback when a given + * collection is a string value. + * + * @private + * @param {string} value The character to inspect. + * @returns {number} Returns the code unit of given character. + */ + function charAtCallback(value) { + return value.charCodeAt(0); + } + + /** + * Used by `sortBy` to compare transformed `collection` elements, stable sorting + * them in ascending order. + * + * @private + * @param {Object} a The object to compare to `b`. + * @param {Object} b The object to compare to `a`. + * @returns {number} Returns the sort order indicator of `1` or `-1`. + */ + function compareAscending(a, b) { + var ac = a.criteria, + bc = b.criteria, + index = -1, + length = ac.length; + + while (++index < length) { + var value = ac[index], + other = bc[index]; + + if (value !== other) { + if (value > other || typeof value == 'undefined') { + return 1; + } + if (value < other || typeof other == 'undefined') { + return -1; + } + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to return the same value for + // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247 + // + // This also ensures a stable sort in V8 and other engines. + // See http://code.google.com/p/v8/issues/detail?id=90 + return a.index - b.index; + } + + /** + * Creates a cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [array=[]] The array to search. + * @returns {null|Object} Returns the cache object or `null` if caching should not be used. + */ + function createCache(array) { + var index = -1, + length = array.length, + first = array[0], + mid = array[(length / 2) | 0], + last = array[length - 1]; + + if (first && typeof first == 'object' && + mid && typeof mid == 'object' && last && typeof last == 'object') { + return false; + } + var cache = getObject(); + cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; + + var result = getObject(); + result.array = array; + result.cache = cache; + result.push = cachePush; + + while (++index < length) { + result.push(array[index]); + } + return result; + } + + /** + * Used by `template` to escape characters for inclusion in compiled + * string literals. + * + * @private + * @param {string} match The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(match) { + return '\\' + stringEscapes[match]; + } + + /** + * Gets an array from the array pool or creates a new one if the pool is empty. + * + * @private + * @returns {Array} The array from the pool. + */ + function getArray() { + return arrayPool.pop() || []; + } + + /** + * Gets an object from the object pool or creates a new one if the pool is empty. + * + * @private + * @returns {Object} The object from the pool. + */ + function getObject() { + return objectPool.pop() || { + 'array': null, + 'cache': null, + 'criteria': null, + 'false': false, + 'index': 0, + 'null': false, + 'number': null, + 'object': null, + 'push': null, + 'string': null, + 'true': false, + 'undefined': false, + 'value': null + }; + } + + /** + * Checks if `value` is a DOM node in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`. + */ + function isNode(value) { + // IE < 9 presents DOM nodes as `Object` objects except they have `toString` + // methods that are `typeof` "string" and still can coerce nodes to strings + return typeof value.toString != 'function' && typeof (value + '') == 'string'; + } + + /** + * Releases the given array back to the array pool. + * + * @private + * @param {Array} [array] The array to release. + */ + function releaseArray(array) { + array.length = 0; + if (arrayPool.length < maxPoolSize) { + arrayPool.push(array); + } + } + + /** + * Releases the given object back to the object pool. + * + * @private + * @param {Object} [object] The object to release. + */ + function releaseObject(object) { + var cache = object.cache; + if (cache) { + releaseObject(cache); + } + object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null; + if (objectPool.length < maxPoolSize) { + objectPool.push(object); + } + } + + /** + * Slices the `collection` from the `start` index up to, but not including, + * the `end` index. + * + * Note: This function is used instead of `Array#slice` to support node lists + * in IE < 9 and to ensure dense arrays are returned. + * + * @private + * @param {Array|Object|string} collection The collection to slice. + * @param {number} start The start index. + * @param {number} end The end index. + * @returns {Array} Returns the new array. + */ + function slice(array, start, end) { + start || (start = 0); + if (typeof end == 'undefined') { + end = array ? array.length : 0; + } + var index = -1, + length = end - start || 0, + result = Array(length < 0 ? 0 : length); + + while (++index < length) { + result[index] = array[start + index]; + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new `lodash` function using the given context object. + * + * @static + * @memberOf _ + * @category Utilities + * @param {Object} [context=root] The context object. + * @returns {Function} Returns the `lodash` function. + */ + function runInContext(context) { + // Avoid issues with some ES3 environments that attempt to use values, named + // after built-in constructors like `Object`, for the creation of literals. + // ES5 clears this up by stating that literals must use built-in constructors. + // See http://es5.github.io/#x11.1.5. + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + + /** Native constructor references */ + var Array = context.Array, + Boolean = context.Boolean, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Number = context.Number, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** + * Used for `Array` method references. + * + * Normally `Array.prototype` would suffice, however, using an array literal + * avoids issues in Narwhal. + */ + var arrayRef = []; + + /** Used for native method references */ + var errorProto = Error.prototype, + objectProto = Object.prototype, + stringProto = String.prototype; + + /** Used to restore the original `_` reference in `noConflict` */ + var oldDash = context._; + + /** Used to resolve the internal [[Class]] of values */ + var toString = objectProto.toString; + + /** Used to detect if a method is native */ + var reNative = RegExp('^' + + String(toString) + .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + .replace(/toString| for [^\]]+/g, '.*?') + '$' + ); + + /** Native method shortcuts */ + var ceil = Math.ceil, + clearTimeout = context.clearTimeout, + floor = Math.floor, + fnToString = Function.prototype.toString, + getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, + hasOwnProperty = objectProto.hasOwnProperty, + push = arrayRef.push, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + setTimeout = context.setTimeout, + splice = arrayRef.splice, + unshift = arrayRef.unshift; + + /** Used to set meta data on functions */ + var defineProperty = (function() { + // IE 8 only accepts DOM elements + try { + var o = {}, + func = isNative(func = Object.defineProperty) && func, + result = func(o, o, o) && func; + } catch(e) { } + return result; + }()); + + /* Native method shortcuts for methods with the same name as other `lodash` methods */ + var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate, + nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, + nativeIsFinite = context.isFinite, + nativeIsNaN = context.isNaN, + nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, + nativeMax = Math.max, + nativeMin = Math.min, + nativeParseInt = context.parseInt, + nativeRandom = Math.random; + + /** Used to lookup a built-in constructor by [[Class]] */ + var ctorByClass = {}; + ctorByClass[arrayClass] = Array; + ctorByClass[boolClass] = Boolean; + ctorByClass[dateClass] = Date; + ctorByClass[funcClass] = Function; + ctorByClass[objectClass] = Object; + ctorByClass[numberClass] = Number; + ctorByClass[regexpClass] = RegExp; + ctorByClass[stringClass] = String; + + /** Used to avoid iterating non-enumerable properties in IE < 9 */ + var nonEnumProps = {}; + nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true }; + nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true }; + nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true }; + nonEnumProps[objectClass] = { 'constructor': true }; + + (function() { + var length = shadowedProps.length; + while (length--) { + var key = shadowedProps[length]; + for (var className in nonEnumProps) { + if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) { + nonEnumProps[className][key] = false; + } + } + } + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps the given value to enable intuitive + * method chaining. + * + * In addition to Lo-Dash methods, wrappers also have the following `Array` methods: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, + * and `unshift` + * + * Chaining is supported in custom builds as long as the `value` method is + * implicitly or explicitly included in the build. + * + * The chainable wrapper functions are: + * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, + * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`, + * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, + * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, + * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, + * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`, + * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`, + * and `zip` + * + * The non-chainable wrapper functions are: + * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`, + * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, + * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, + * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`, + * `template`, `unescape`, `uniqueId`, and `value` + * + * The wrapper functions `first` and `last` return wrapped values when `n` is + * provided, otherwise they return unwrapped values. + * + * Explicit chaining can be enabled by using the `_.chain` method. + * + * @name _ + * @constructor + * @category Chaining + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns a `lodash` instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(sum, num) { + * return sum + num; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(num) { + * return num * num; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor + return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__')) + ? value + : new lodashWrapper(value); + } + + /** + * A fast path for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap in a `lodash` instance. + * @param {boolean} chainAll A flag to enable chaining for all methods + * @returns {Object} Returns a `lodash` instance. + */ + function lodashWrapper(value, chainAll) { + this.__chain__ = !!chainAll; + this.__wrapped__ = value; + } + // ensure `new lodashWrapper` is an instance of `lodash` + lodashWrapper.prototype = lodash.prototype; + + /** + * An object used to flag environments features. + * + * @static + * @memberOf _ + * @type Object + */ + var support = lodash.support = {}; + + (function() { + var ctor = function() { this.x = 1; }, + object = { '0': 1, 'length': 1 }, + props = []; + + ctor.prototype = { 'valueOf': 1, 'y': 1 }; + for (var key in new ctor) { props.push(key); } + for (key in arguments) { } + + /** + * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). + * + * @memberOf _.support + * @type boolean + */ + support.argsClass = toString.call(arguments) == argsClass; + + /** + * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5). + * + * @memberOf _.support + * @type boolean + */ + support.argsObject = arguments.constructor == Object && !(arguments instanceof Array); + + /** + * Detect if `name` or `message` properties of `Error.prototype` are + * enumerable by default. (IE < 9, Safari < 5.1) + * + * @memberOf _.support + * @type boolean + */ + support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name'); + + /** + * Detect if `prototype` properties are enumerable by default. + * + * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 + * (if the prototype or a property on the prototype has been set) + * incorrectly sets a function's `prototype` property [[Enumerable]] + * value to `true`. + * + * @memberOf _.support + * @type boolean + */ + support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype'); + + /** + * Detect if functions can be decompiled by `Function#toString` + * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). + * + * @memberOf _.support + * @type boolean + */ + support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext); + + /** + * Detect if `Function#name` is supported (all but IE). + * + * @memberOf _.support + * @type boolean + */ + support.funcNames = typeof Function.name == 'string'; + + /** + * Detect if `arguments` object indexes are non-enumerable + * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). + * + * @memberOf _.support + * @type boolean + */ + support.nonEnumArgs = key != 0; + + /** + * Detect if properties shadowing those on `Object.prototype` are non-enumerable. + * + * In IE < 9 an objects own properties, shadowing non-enumerable ones, are + * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug). + * + * @memberOf _.support + * @type boolean + */ + support.nonEnumShadows = !/valueOf/.test(props); + + /** + * Detect if own properties are iterated after inherited properties (all but IE < 9). + * + * @memberOf _.support + * @type boolean + */ + support.ownLast = props[0] != 'x'; + + /** + * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. + * + * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()` + * and `splice()` functions that fail to remove the last element, `value[0]`, + * of array-like objects even though the `length` property is set to `0`. + * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` + * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. + * + * @memberOf _.support + * @type boolean + */ + support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]); + + /** + * Detect lack of support for accessing string characters by index. + * + * IE < 8 can't access characters by index and IE 8 can only access + * characters by index on string literals. + * + * @memberOf _.support + * @type boolean + */ + support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx'; + + /** + * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9) + * and that the JS engine errors when attempting to coerce an object to + * a string without a `toString` function. + * + * @memberOf _.support + * @type boolean + */ + try { + support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + '')); + } catch(e) { + support.nodeClass = true; + } + }(1)); + + /** + * By default, the template delimiters used by Lo-Dash are similar to those in + * embedded Ruby (ERB). Change the following template settings to use alternative + * delimiters. + * + * @static + * @memberOf _ + * @type Object + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'escape': /<%-([\s\S]+?)%>/g, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'evaluate': /<%([\s\S]+?)%>/g, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type string + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type Object + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type Function + */ + '_': lodash + } + }; + + /*--------------------------------------------------------------------------*/ + + /** + * The template used to create iterator functions. + * + * @private + * @param {Object} data The data object used to populate the text. + * @returns {string} Returns the interpolated text. + */ + var iteratorTemplate = function(obj) { + + var __p = 'var index, iterable = ' + + (obj.firstArg) + + ', result = ' + + (obj.init) + + ';\nif (!iterable) return result;\n' + + (obj.top) + + ';'; + if (obj.array) { + __p += '\nvar length = iterable.length; index = -1;\nif (' + + (obj.array) + + ') { '; + if (support.unindexedChars) { + __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } '; + } + __p += '\n while (++index < length) {\n ' + + (obj.loop) + + ';\n }\n}\nelse { '; + } else if (support.nonEnumArgs) { + __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' + + (obj.loop) + + ';\n }\n } else { '; + } + + if (support.enumPrototypes) { + __p += '\n var skipProto = typeof iterable == \'function\';\n '; + } + + if (support.enumErrorProps) { + __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n '; + } + + var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); } + + if (obj.useHas && obj.keys) { + __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n'; + if (conditions.length) { + __p += ' if (' + + (conditions.join(' && ')) + + ') {\n '; + } + __p += + (obj.loop) + + '; '; + if (conditions.length) { + __p += '\n }'; + } + __p += '\n } '; + } else { + __p += '\n for (index in iterable) {\n'; + if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) { + __p += ' if (' + + (conditions.join(' && ')) + + ') {\n '; + } + __p += + (obj.loop) + + '; '; + if (conditions.length) { + __p += '\n }'; + } + __p += '\n } '; + if (support.nonEnumShadows) { + __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n '; + for (k = 0; k < 7; k++) { + __p += '\n index = \'' + + (obj.shadowedProps[k]) + + '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))'; + if (!obj.useHas) { + __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])'; + } + __p += ') {\n ' + + (obj.loop) + + ';\n } '; + } + __p += '\n } '; + } + + } + + if (obj.array || support.nonEnumArgs) { + __p += '\n}'; + } + __p += + (obj.bottom) + + ';\nreturn result'; + + return __p + }; + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `_.bind` that creates the bound function and + * sets its meta data. + * + * @private + * @param {Array} bindData The bind data array. + * @returns {Function} Returns the new bound function. + */ + function baseBind(bindData) { + var func = bindData[0], + partialArgs = bindData[2], + thisArg = bindData[4]; + + function bound() { + // `Function#bind` spec + // http://es5.github.io/#x15.3.4.5 + if (partialArgs) { + // avoid `arguments` object deoptimizations by using `slice` instead + // of `Array.prototype.slice.call` and not assigning `arguments` to a + // variable as a ternary expression + var args = slice(partialArgs); + push.apply(args, arguments); + } + // mimic the constructor's `return` behavior + // http://es5.github.io/#x13.2.2 + if (this instanceof bound) { + // ensure `new bound` is an instance of `func` + var thisBinding = baseCreate(func.prototype), + result = func.apply(thisBinding, args || arguments); + return isObject(result) ? result : thisBinding; + } + return func.apply(thisArg, args || arguments); + } + setBindData(bound, bindData); + return bound; + } + + /** + * The base implementation of `_.clone` without argument juggling or support + * for `thisArg` binding. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep=false] Specify a deep clone. + * @param {Function} [callback] The function to customize cloning values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, callback, stackA, stackB) { + if (callback) { + var result = callback(value); + if (typeof result != 'undefined') { + return result; + } + } + // inspect [[Class]] + var isObj = isObject(value); + if (isObj) { + var className = toString.call(value); + if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) { + return value; + } + var ctor = ctorByClass[className]; + switch (className) { + case boolClass: + case dateClass: + return new ctor(+value); + + case numberClass: + case stringClass: + return new ctor(value); + + case regexpClass: + result = ctor(value.source, reFlags.exec(value)); + result.lastIndex = value.lastIndex; + return result; + } + } else { + return value; + } + var isArr = isArray(value); + if (isDeep) { + // check for circular references and return corresponding clone + var initedStack = !stackA; + stackA || (stackA = getArray()); + stackB || (stackB = getArray()); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + result = isArr ? ctor(value.length) : {}; + } + else { + result = isArr ? slice(value) : assign({}, value); + } + // add array properties assigned by `RegExp#exec` + if (isArr) { + if (hasOwnProperty.call(value, 'index')) { + result.index = value.index; + } + if (hasOwnProperty.call(value, 'input')) { + result.input = value.input; + } + } + // exit for shallow clone + if (!isDeep) { + return result; + } + // add the source value to the stack of traversed objects + // and associate it with its clone + stackA.push(value); + stackB.push(result); + + // recursively populate clone (susceptible to call stack limits) + (isArr ? baseEach : forOwn)(value, function(objValue, key) { + result[key] = baseClone(objValue, isDeep, callback, stackA, stackB); + }); + + if (initedStack) { + releaseArray(stackA); + releaseArray(stackB); + } + return result; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + function baseCreate(prototype, properties) { + return isObject(prototype) ? nativeCreate(prototype) : {}; + } + // fallback for browsers without `Object.create` + if (!nativeCreate) { + baseCreate = (function() { + function Object() {} + return function(prototype) { + if (isObject(prototype)) { + Object.prototype = prototype; + var result = new Object; + Object.prototype = null; + } + return result || context.Object(); + }; + }()); + } + + /** + * The base implementation of `_.createCallback` without support for creating + * "_.pluck" or "_.where" style callbacks. + * + * @private + * @param {*} [func=identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of the created callback. + * @param {number} [argCount] The number of arguments the callback accepts. + * @returns {Function} Returns a callback function. + */ + function baseCreateCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + // exit early for no `thisArg` or already bound by `Function#bind` + if (typeof thisArg == 'undefined' || !('prototype' in func)) { + return func; + } + var bindData = func.__bindData__; + if (typeof bindData == 'undefined') { + if (support.funcNames) { + bindData = !func.name; + } + bindData = bindData || !support.funcDecomp; + if (!bindData) { + var source = fnToString.call(func); + if (!support.funcNames) { + bindData = !reFuncName.test(source); + } + if (!bindData) { + // checks if `func` references the `this` keyword and stores the result + bindData = reThis.test(source); + setBindData(func, bindData); + } + } + } + // exit early if there are no `this` references or `func` is bound + if (bindData === false || (bindData !== true && bindData[1] & 1)) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 2: return function(a, b) { + return func.call(thisArg, a, b); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + } + return bind(func, thisArg); + } + + /** + * The base implementation of `createWrapper` that creates the wrapper and + * sets its meta data. + * + * @private + * @param {Array} bindData The bind data array. + * @returns {Function} Returns the new function. + */ + function baseCreateWrapper(bindData) { + var func = bindData[0], + bitmask = bindData[1], + partialArgs = bindData[2], + partialRightArgs = bindData[3], + thisArg = bindData[4], + arity = bindData[5]; + + var isBind = bitmask & 1, + isBindKey = bitmask & 2, + isCurry = bitmask & 4, + isCurryBound = bitmask & 8, + key = func; + + function bound() { + var thisBinding = isBind ? thisArg : this; + if (partialArgs) { + var args = slice(partialArgs); + push.apply(args, arguments); + } + if (partialRightArgs || isCurry) { + args || (args = slice(arguments)); + if (partialRightArgs) { + push.apply(args, partialRightArgs); + } + if (isCurry && args.length < arity) { + bitmask |= 16 & ~32; + return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); + } + } + args || (args = arguments); + if (isBindKey) { + func = thisBinding[key]; + } + if (this instanceof bound) { + thisBinding = baseCreate(func.prototype); + var result = func.apply(thisBinding, args); + return isObject(result) ? result : thisBinding; + } + return func.apply(thisBinding, args); + } + setBindData(bound, bindData); + return bound; + } + + /** + * The base implementation of `_.difference` that accepts a single array + * of values to exclude. + * + * @private + * @param {Array} array The array to process. + * @param {Array} [values] The array of values to exclude. + * @returns {Array} Returns a new array of filtered values. + */ + function baseDifference(array, values) { + var index = -1, + indexOf = getIndexOf(), + length = array ? array.length : 0, + isLarge = length >= largeArraySize && indexOf === baseIndexOf, + result = []; + + if (isLarge) { + var cache = createCache(values); + if (cache) { + indexOf = cacheIndexOf; + values = cache; + } else { + isLarge = false; + } + } + while (++index < length) { + var value = array[index]; + if (indexOf(values, value) < 0) { + result.push(value); + } + } + if (isLarge) { + releaseObject(values); + } + return result; + } + + /** + * The base implementation of `_.flatten` without support for callback + * shorthands or `thisArg` binding. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. + * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects. + * @param {number} [fromIndex=0] The index to start from. + * @returns {Array} Returns a new flattened array. + */ + function baseFlatten(array, isShallow, isStrict, fromIndex) { + var index = (fromIndex || 0) - 1, + length = array ? array.length : 0, + result = []; + + while (++index < length) { + var value = array[index]; + + if (value && typeof value == 'object' && typeof value.length == 'number' + && (isArray(value) || isArguments(value))) { + // recursively flatten arrays (susceptible to call stack limits) + if (!isShallow) { + value = baseFlatten(value, isShallow, isStrict); + } + var valIndex = -1, + valLength = value.length, + resIndex = result.length; + + result.length += valLength; + while (++valIndex < valLength) { + result[resIndex++] = value[valIndex]; + } + } else if (!isStrict) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.isEqual`, without support for `thisArg` binding, + * that allows partial "_.where" style comparisons. + * + * @private + * @param {*} a The value to compare. + * @param {*} b The other value to compare. + * @param {Function} [callback] The function to customize comparing values. + * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `a` objects. + * @param {Array} [stackB=[]] Tracks traversed `b` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(a, b, callback, isWhere, stackA, stackB) { + // used to indicate that when comparing objects, `a` has at least the properties of `b` + if (callback) { + var result = callback(a, b); + if (typeof result != 'undefined') { + return !!result; + } + } + // exit early for identical values + if (a === b) { + // treat `+0` vs. `-0` as not equal + return a !== 0 || (1 / a == 1 / b); + } + var type = typeof a, + otherType = typeof b; + + // exit early for unlike primitive values + if (a === a && + !(a && objectTypes[type]) && + !(b && objectTypes[otherType])) { + return false; + } + // exit early for `null` and `undefined` avoiding ES3's Function#call behavior + // http://es5.github.io/#x15.3.4.4 + if (a == null || b == null) { + return a === b; + } + // compare [[Class]] names + var className = toString.call(a), + otherClass = toString.call(b); + + if (className == argsClass) { + className = objectClass; + } + if (otherClass == argsClass) { + otherClass = objectClass; + } + if (className != otherClass) { + return false; + } + switch (className) { + case boolClass: + case dateClass: + // coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal + return +a == +b; + + case numberClass: + // treat `NaN` vs. `NaN` as equal + return (a != +a) + ? b != +b + // but treat `+0` vs. `-0` as not equal + : (a == 0 ? (1 / a == 1 / b) : a == +b); + + case regexpClass: + case stringClass: + // coerce regexes to strings (http://es5.github.io/#x15.10.6.4) + // treat string primitives and their corresponding object instances as equal + return a == String(b); + } + var isArr = className == arrayClass; + if (!isArr) { + // unwrap any `lodash` wrapped values + var aWrapped = hasOwnProperty.call(a, '__wrapped__'), + bWrapped = hasOwnProperty.call(b, '__wrapped__'); + + if (aWrapped || bWrapped) { + return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB); + } + // exit for functions and DOM nodes + if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) { + return false; + } + // in older versions of Opera, `arguments` objects have `Array` constructors + var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor, + ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor; + + // non `Object` object instances with different constructors are not equal + if (ctorA != ctorB && + !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) && + ('constructor' in a && 'constructor' in b) + ) { + return false; + } + } + // assume cyclic structures are equal + // the algorithm for detecting cyclic structures is adapted from ES 5.1 + // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3) + var initedStack = !stackA; + stackA || (stackA = getArray()); + stackB || (stackB = getArray()); + + var length = stackA.length; + while (length--) { + if (stackA[length] == a) { + return stackB[length] == b; + } + } + var size = 0; + result = true; + + // add `a` and `b` to the stack of traversed objects + stackA.push(a); + stackB.push(b); + + // recursively compare objects and arrays (susceptible to call stack limits) + if (isArr) { + // compare lengths to determine if a deep comparison is necessary + length = a.length; + size = b.length; + result = size == length; + + if (result || isWhere) { + // deep compare the contents, ignoring non-numeric properties + while (size--) { + var index = length, + value = b[size]; + + if (isWhere) { + while (index--) { + if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) { + break; + } + } + } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) { + break; + } + } + } + } + else { + // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys` + // which, in this case, is more costly + forIn(b, function(value, key, b) { + if (hasOwnProperty.call(b, key)) { + // count the number of properties. + size++; + // deep compare each property value. + return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB)); + } + }); + + if (result && !isWhere) { + // ensure both objects have the same number of properties + forIn(a, function(value, key, a) { + if (hasOwnProperty.call(a, key)) { + // `size` will be `-1` if `a` has more properties than `b` + return (result = --size > -1); + } + }); + } + } + stackA.pop(); + stackB.pop(); + + if (initedStack) { + releaseArray(stackA); + releaseArray(stackB); + } + return result; + } + + /** + * The base implementation of `_.merge` without argument juggling or support + * for `thisArg` binding. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [callback] The function to customize merging properties. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + */ + function baseMerge(object, source, callback, stackA, stackB) { + (isArray(source) ? forEach : forOwn)(source, function(source, key) { + var found, + isArr, + result = source, + value = object[key]; + + if (source && ((isArr = isArray(source)) || isPlainObject(source))) { + // avoid merging previously merged cyclic sources + var stackLength = stackA.length; + while (stackLength--) { + if ((found = stackA[stackLength] == source)) { + value = stackB[stackLength]; + break; + } + } + if (!found) { + var isShallow; + if (callback) { + result = callback(value, source); + if ((isShallow = typeof result != 'undefined')) { + value = result; + } + } + if (!isShallow) { + value = isArr + ? (isArray(value) ? value : []) + : (isPlainObject(value) ? value : {}); + } + // add `source` and associated `value` to the stack of traversed objects + stackA.push(source); + stackB.push(value); + + // recursively merge objects and arrays (susceptible to call stack limits) + if (!isShallow) { + baseMerge(value, source, callback, stackA, stackB); + } + } + } + else { + if (callback) { + result = callback(value, source); + if (typeof result == 'undefined') { + result = source; + } + } + if (typeof result != 'undefined') { + value = result; + } + } + object[key] = value; + }); + } + + /** + * The base implementation of `_.random` without argument juggling or support + * for returning floating-point numbers. + * + * @private + * @param {number} min The minimum possible value. + * @param {number} max The maximum possible value. + * @returns {number} Returns a random number. + */ + function baseRandom(min, max) { + return min + floor(nativeRandom() * (max - min + 1)); + } + + /** + * The base implementation of `_.uniq` without support for callback shorthands + * or `thisArg` binding. + * + * @private + * @param {Array} array The array to process. + * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. + * @param {Function} [callback] The function called per iteration. + * @returns {Array} Returns a duplicate-value-free array. + */ + function baseUniq(array, isSorted, callback) { + var index = -1, + indexOf = getIndexOf(), + length = array ? array.length : 0, + result = []; + + var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf, + seen = (callback || isLarge) ? getArray() : result; + + if (isLarge) { + var cache = createCache(seen); + indexOf = cacheIndexOf; + seen = cache; + } + while (++index < length) { + var value = array[index], + computed = callback ? callback(value, index, array) : value; + + if (isSorted + ? !index || seen[seen.length - 1] !== computed + : indexOf(seen, computed) < 0 + ) { + if (callback || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + if (isLarge) { + releaseArray(seen.array); + releaseObject(seen); + } else if (callback) { + releaseArray(seen); + } + return result; + } + + /** + * Creates a function that aggregates a collection, creating an object composed + * of keys generated from the results of running each element of the collection + * through a callback. The given `setter` function sets the keys and values + * of the composed object. + * + * @private + * @param {Function} setter The setter function. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter) { + return function(collection, callback, thisArg) { + var result = {}; + callback = lodash.createCallback(callback, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + setter(result, value, callback(value, index, collection), collection); + } + } else { + baseEach(collection, function(value, key, collection) { + setter(result, value, callback(value, key, collection), collection); + }); + } + return result; + }; + } + + /** + * Creates a function that, when called, either curries or invokes `func` + * with an optional `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of method flags to compose. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` + * 8 - `_.curry` (bound) + * 16 - `_.partial` + * 32 - `_.partialRight` + * @param {Array} [partialArgs] An array of arguments to prepend to those + * provided to the new function. + * @param {Array} [partialRightArgs] An array of arguments to append to those + * provided to the new function. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new function. + */ + function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { + var isBind = bitmask & 1, + isBindKey = bitmask & 2, + isCurry = bitmask & 4, + isCurryBound = bitmask & 8, + isPartial = bitmask & 16, + isPartialRight = bitmask & 32; + + if (!isBindKey && !isFunction(func)) { + throw new TypeError; + } + if (isPartial && !partialArgs.length) { + bitmask &= ~16; + isPartial = partialArgs = false; + } + if (isPartialRight && !partialRightArgs.length) { + bitmask &= ~32; + isPartialRight = partialRightArgs = false; + } + var bindData = func && func.__bindData__; + if (bindData && bindData !== true) { + // clone `bindData` + bindData = slice(bindData); + if (bindData[2]) { + bindData[2] = slice(bindData[2]); + } + if (bindData[3]) { + bindData[3] = slice(bindData[3]); + } + // set `thisBinding` is not previously bound + if (isBind && !(bindData[1] & 1)) { + bindData[4] = thisArg; + } + // set if previously bound but not currently (subsequent curried functions) + if (!isBind && bindData[1] & 1) { + bitmask |= 8; + } + // set curried arity if not yet set + if (isCurry && !(bindData[1] & 4)) { + bindData[5] = arity; + } + // append partial left arguments + if (isPartial) { + push.apply(bindData[2] || (bindData[2] = []), partialArgs); + } + // append partial right arguments + if (isPartialRight) { + unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs); + } + // merge flags + bindData[1] |= bitmask; + return createWrapper.apply(null, bindData); + } + // fast path for `_.bind` + var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; + return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); + } + + /** + * Creates compiled iteration functions. + * + * @private + * @param {...Object} [options] The compile options object(s). + * @param {string} [options.array] Code to determine if the iterable is an array or array-like. + * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop. + * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration. + * @param {string} [options.args] A comma separated string of iteration function arguments. + * @param {string} [options.top] Code to execute before the iteration branches. + * @param {string} [options.loop] Code to execute in the object loop. + * @param {string} [options.bottom] Code to execute after the iteration branches. + * @returns {Function} Returns the compiled function. + */ + function createIterator() { + // data properties + iteratorData.shadowedProps = shadowedProps; + + // iterator options + iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = ''; + iteratorData.init = 'iterable'; + iteratorData.useHas = true; + + // merge options into a template data object + for (var object, index = 0; object = arguments[index]; index++) { + for (var key in object) { + iteratorData[key] = object[key]; + } + } + var args = iteratorData.args; + iteratorData.firstArg = /^[^,]+/.exec(args)[0]; + + // create the function factory + var factory = Function( + 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + + 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + + 'objectTypes, nonEnumProps, stringClass, stringProto, toString', + 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}' + ); + + // return the compiled function + return factory( + baseCreateCallback, errorClass, errorProto, hasOwnProperty, + indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto, + objectTypes, nonEnumProps, stringClass, stringProto, toString + ); + } + + /** + * Used by `escape` to convert characters to HTML entities. + * + * @private + * @param {string} match The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(match) { + return htmlEscapes[match]; + } + + /** + * Gets the appropriate "indexOf" function. If the `_.indexOf` method is + * customized, this method returns the custom method, otherwise it returns + * the `baseIndexOf` function. + * + * @private + * @returns {Function} Returns the "indexOf" function. + */ + function getIndexOf() { + var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result; + return result; + } + + /** + * Checks if `value` is a native function. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a native function, else `false`. + */ + function isNative(value) { + return typeof value == 'function' && reNative.test(value); + } + + /** + * Sets `this` binding data on a given function. + * + * @private + * @param {Function} func The function to set data on. + * @param {Array} value The data array to set. + */ + var setBindData = !defineProperty ? noop : function(func, value) { + descriptor.value = value; + defineProperty(func, '__bindData__', descriptor); + descriptor.value = null; + }; + + /** + * A fallback implementation of `isPlainObject` which checks if a given value + * is an object created by the `Object` constructor, assuming objects created + * by the `Object` constructor have no inherited enumerable properties and that + * there are no `Object.prototype` extensions. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + */ + function shimIsPlainObject(value) { + var ctor, + result; + + // avoid non Object objects, `arguments` objects, and DOM elements + if (!(value && toString.call(value) == objectClass) || + (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) || + (!support.argsClass && isArguments(value)) || + (!support.nodeClass && isNode(value))) { + return false; + } + // IE < 9 iterates inherited properties before own properties. If the first + // iterated property is an object's own property then there are no inherited + // enumerable properties. + if (support.ownLast) { + forIn(value, function(value, key, object) { + result = hasOwnProperty.call(object, key); + return false; + }); + return result !== false; + } + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + forIn(value, function(value, key) { + result = key; + }); + return typeof result == 'undefined' || hasOwnProperty.call(value, result); + } + + /** + * Used by `unescape` to convert HTML entities to characters. + * + * @private + * @param {string} match The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(match) { + return htmlUnescapes[match]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Checks if `value` is an `arguments` object. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`. + * @example + * + * (function() { return _.isArguments(arguments); })(1, 2, 3); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + return value && typeof value == 'object' && typeof value.length == 'number' && + toString.call(value) == argsClass || false; + } + // fallback for browsers that can't detect `arguments` objects by [[Class]] + if (!support.argsClass) { + isArguments = function(value) { + return value && typeof value == 'object' && typeof value.length == 'number' && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false; + }; + } + + /** + * Checks if `value` is an array. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an array, else `false`. + * @example + * + * (function() { return _.isArray(arguments); })(); + * // => false + * + * _.isArray([1, 2, 3]); + * // => true + */ + var isArray = nativeIsArray || function(value) { + return value && typeof value == 'object' && typeof value.length == 'number' && + toString.call(value) == arrayClass || false; + }; + + /** + * A fallback implementation of `Object.keys` which produces an array of the + * given object's own enumerable property names. + * + * @private + * @type Function + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + */ + var shimKeys = createIterator({ + 'args': 'object', + 'init': '[]', + 'top': 'if (!(objectTypes[typeof object])) return result', + 'loop': 'result.push(index)' + }); + + /** + * Creates an array composed of the own enumerable property names of an object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + * @example + * + * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); + * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) + */ + var keys = !nativeKeys ? shimKeys : function(object) { + if (!isObject(object)) { + return []; + } + if ((support.enumPrototypes && typeof object == 'function') || + (support.nonEnumArgs && object.length && isArguments(object))) { + return shimKeys(object); + } + return nativeKeys(object); + }; + + /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ + var eachIteratorOptions = { + 'args': 'collection, callback, thisArg', + 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)", + 'array': "typeof length == 'number'", + 'keys': keys, + 'loop': 'if (callback(iterable[index], index, collection) === false) return result' + }; + + /** Reusable iterator options for `assign` and `defaults` */ + var defaultsIteratorOptions = { + 'args': 'object, source, guard', + 'top': + 'var args = arguments,\n' + + ' argsIndex = 0,\n' + + " argsLength = typeof guard == 'number' ? 2 : args.length;\n" + + 'while (++argsIndex < argsLength) {\n' + + ' iterable = args[argsIndex];\n' + + ' if (iterable && objectTypes[typeof iterable]) {', + 'keys': keys, + 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]", + 'bottom': ' }\n}' + }; + + /** Reusable iterator options for `forIn` and `forOwn` */ + var forOwnIteratorOptions = { + 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top, + 'array': false + }; + + /** + * Used to convert characters to HTML entities: + * + * Though the `>` character is escaped for symmetry, characters like `>` and `/` + * don't require escaping in HTML and have no special meaning unless they're part + * of a tag or an unquoted attribute value. + * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") + */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to convert HTML entities to characters */ + var htmlUnescapes = invert(htmlEscapes); + + /** Used to match HTML entities and HTML characters */ + var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'), + reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g'); + + /** + * A function compiled to iterate `arguments` objects, arrays, objects, and + * strings consistenly across environments, executing the callback for each + * element in the collection. The callback is bound to `thisArg` and invoked + * with three arguments; (value, index|key, collection). Callbacks may exit + * iteration early by explicitly returning `false`. + * + * @private + * @type Function + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array|Object|string} Returns `collection`. + */ + var baseEach = createIterator(eachIteratorOptions); + + /*--------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources will overwrite property assignments of previous + * sources. If a callback is provided it will be executed to produce the + * assigned values. The callback is bound to `thisArg` and invoked with two + * arguments; (objectValue, sourceValue). + * + * @static + * @memberOf _ + * @type Function + * @alias extend + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param {Function} [callback] The function to customize assigning values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the destination object. + * @example + * + * _.assign({ 'name': 'fred' }, { 'employer': 'slate' }); + * // => { 'name': 'fred', 'employer': 'slate' } + * + * var defaults = _.partialRight(_.assign, function(a, b) { + * return typeof a == 'undefined' ? b : a; + * }); + * + * var object = { 'name': 'barney' }; + * defaults(object, { 'name': 'fred', 'employer': 'slate' }); + * // => { 'name': 'barney', 'employer': 'slate' } + */ + var assign = createIterator(defaultsIteratorOptions, { + 'top': + defaultsIteratorOptions.top.replace(';', + ';\n' + + "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" + + ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' + + "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" + + ' callback = args[--argsLength];\n' + + '}' + ), + 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]' + }); + + /** + * Creates a clone of `value`. If `isDeep` is `true` nested objects will also + * be cloned, otherwise they will be assigned by reference. If a callback + * is provided it will be executed to produce the cloned values. If the + * callback returns `undefined` cloning will be handled by the method instead. + * The callback is bound to `thisArg` and invoked with one argument; (value). + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to clone. + * @param {boolean} [isDeep=false] Specify a deep clone. + * @param {Function} [callback] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the cloned value. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * var shallow = _.clone(characters); + * shallow[0] === characters[0]; + * // => true + * + * var deep = _.clone(characters, true); + * deep[0] === characters[0]; + * // => false + * + * _.mixin({ + * 'clone': _.partialRight(_.clone, function(value) { + * return _.isElement(value) ? value.cloneNode(false) : undefined; + * }) + * }); + * + * var clone = _.clone(document.body); + * clone.childNodes.length; + * // => 0 + */ + function clone(value, isDeep, callback, thisArg) { + // allows working with "Collections" methods without using their `index` + // and `collection` arguments for `isDeep` and `callback` + if (typeof isDeep != 'boolean' && isDeep != null) { + thisArg = callback; + callback = isDeep; + isDeep = false; + } + return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); + } + + /** + * Creates a deep clone of `value`. If a callback is provided it will be + * executed to produce the cloned values. If the callback returns `undefined` + * cloning will be handled by the method instead. The callback is bound to + * `thisArg` and invoked with one argument; (value). + * + * Note: This method is loosely based on the structured clone algorithm. Functions + * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and + * objects created by constructors other than `Object` are cloned to plain `Object` objects. + * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to deep clone. + * @param {Function} [callback] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * var deep = _.cloneDeep(characters); + * deep[0] === characters[0]; + * // => false + * + * var view = { + * 'label': 'docs', + * 'node': element + * }; + * + * var clone = _.cloneDeep(view, function(value) { + * return _.isElement(value) ? value.cloneNode(true) : undefined; + * }); + * + * clone.node == view.node; + * // => false + */ + function cloneDeep(value, callback, thisArg) { + return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); + } + + /** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? assign(result, properties) : result; + } + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional defaults of the same property will be ignored. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param- {Object} [guard] Allows working with `_.reduce` without using its + * `key` and `object` arguments as sources. + * @returns {Object} Returns the destination object. + * @example + * + * var object = { 'name': 'barney' }; + * _.defaults(object, { 'name': 'fred', 'employer': 'slate' }); + * // => { 'name': 'barney', 'employer': 'slate' } + */ + var defaults = createIterator(defaultsIteratorOptions); + + /** + * This method is like `_.findIndex` except that it returns the key of the + * first element that passes the callback check, instead of the element itself. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to search. + * @param {Function|Object|string} [callback=identity] The function called per + * iteration. If a property name or object is provided it will be used to + * create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {string|undefined} Returns the key of the found element, else `undefined`. + * @example + * + * var characters = { + * 'barney': { 'age': 36, 'blocked': false }, + * 'fred': { 'age': 40, 'blocked': true }, + * 'pebbles': { 'age': 1, 'blocked': false } + * }; + * + * _.findKey(characters, function(chr) { + * return chr.age < 40; + * }); + * // => 'barney' (property order is not guaranteed across environments) + * + * // using "_.where" callback shorthand + * _.findKey(characters, { 'age': 1 }); + * // => 'pebbles' + * + * // using "_.pluck" callback shorthand + * _.findKey(characters, 'blocked'); + * // => 'fred' + */ + function findKey(object, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + forOwn(object, function(value, key, object) { + if (callback(value, key, object)) { + result = key; + return false; + } + }); + return result; + } + + /** + * This method is like `_.findKey` except that it iterates over elements + * of a `collection` in the opposite order. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to search. + * @param {Function|Object|string} [callback=identity] The function called per + * iteration. If a property name or object is provided it will be used to + * create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {string|undefined} Returns the key of the found element, else `undefined`. + * @example + * + * var characters = { + * 'barney': { 'age': 36, 'blocked': true }, + * 'fred': { 'age': 40, 'blocked': false }, + * 'pebbles': { 'age': 1, 'blocked': true } + * }; + * + * _.findLastKey(characters, function(chr) { + * return chr.age < 40; + * }); + * // => returns `pebbles`, assuming `_.findKey` returns `barney` + * + * // using "_.where" callback shorthand + * _.findLastKey(characters, { 'age': 40 }); + * // => 'fred' + * + * // using "_.pluck" callback shorthand + * _.findLastKey(characters, 'blocked'); + * // => 'pebbles' + */ + function findLastKey(object, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + forOwnRight(object, function(value, key, object) { + if (callback(value, key, object)) { + result = key; + return false; + } + }); + return result; + } + + /** + * Iterates over own and inherited enumerable properties of an object, + * executing the callback for each property. The callback is bound to `thisArg` + * and invoked with three arguments; (value, key, object). Callbacks may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * Shape.prototype.move = function(x, y) { + * this.x += x; + * this.y += y; + * }; + * + * _.forIn(new Shape, function(value, key) { + * console.log(key); + * }); + * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments) + */ + var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, { + 'useHas': false + }); + + /** + * This method is like `_.forIn` except that it iterates over elements + * of a `collection` in the opposite order. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * Shape.prototype.move = function(x, y) { + * this.x += x; + * this.y += y; + * }; + * + * _.forInRight(new Shape, function(value, key) { + * console.log(key); + * }); + * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move' + */ + function forInRight(object, callback, thisArg) { + var pairs = []; + + forIn(object, function(value, key) { + pairs.push(key, value); + }); + + var length = pairs.length; + callback = baseCreateCallback(callback, thisArg, 3); + while (length--) { + if (callback(pairs[length--], pairs[length], object) === false) { + break; + } + } + return object; + } + + /** + * Iterates over own enumerable properties of an object, executing the callback + * for each property. The callback is bound to `thisArg` and invoked with three + * arguments; (value, key, object). Callbacks may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { + * console.log(key); + * }); + * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) + */ + var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions); + + /** + * This method is like `_.forOwn` except that it iterates over elements + * of a `collection` in the opposite order. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { + * console.log(key); + * }); + * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length' + */ + function forOwnRight(object, callback, thisArg) { + var props = keys(object), + length = props.length; + + callback = baseCreateCallback(callback, thisArg, 3); + while (length--) { + var key = props[length]; + if (callback(object[key], key, object) === false) { + break; + } + } + return object; + } + + /** + * Creates a sorted array of property names of all enumerable properties, + * own and inherited, of `object` that have function values. + * + * @static + * @memberOf _ + * @alias methods + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names that have function values. + * @example + * + * _.functions(_); + * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] + */ + function functions(object) { + var result = []; + forIn(object, function(value, key) { + if (isFunction(value)) { + result.push(key); + } + }); + return result.sort(); + } + + /** + * Checks if the specified property name exists as a direct property of `object`, + * instead of an inherited property. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @param {string} key The name of the property to check. + * @returns {boolean} Returns `true` if key is a direct property, else `false`. + * @example + * + * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b'); + * // => true + */ + function has(object, key) { + return object ? hasOwnProperty.call(object, key) : false; + } + + /** + * Creates an object composed of the inverted keys and values of the given object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to invert. + * @returns {Object} Returns the created inverted object. + * @example + * + * _.invert({ 'first': 'fred', 'second': 'barney' }); + * // => { 'fred': 'first', 'barney': 'second' } + */ + function invert(object) { + var index = -1, + props = keys(object), + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index]; + result[object[key]] = key; + } + return result; + } + + /** + * Checks if `value` is a boolean value. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`. + * @example + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + value && typeof value == 'object' && toString.call(value) == boolClass || false; + } + + /** + * Checks if `value` is a date. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a date, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + */ + function isDate(value) { + return value && typeof value == 'object' && toString.call(value) == dateClass || false; + } + + /** + * Checks if `value` is a DOM element. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + */ + function isElement(value) { + return value && value.nodeType === 1 || false; + } + + /** + * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a + * length of `0` and objects with no own enumerable properties are considered + * "empty". + * + * @static + * @memberOf _ + * @category Objects + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if the `value` is empty, else `false`. + * @example + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({}); + * // => true + * + * _.isEmpty(''); + * // => true + */ + function isEmpty(value) { + var result = true; + if (!value) { + return result; + } + var className = toString.call(value), + length = value.length; + + if ((className == arrayClass || className == stringClass || + (support.argsClass ? className == argsClass : isArguments(value))) || + (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { + return !length; + } + forOwn(value, function() { + return (result = false); + }); + return result; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent to each other. If a callback is provided it will be executed + * to compare values. If the callback returns `undefined` comparisons will + * be handled by the method instead. The callback is bound to `thisArg` and + * invoked with two arguments; (a, b). + * + * @static + * @memberOf _ + * @category Objects + * @param {*} a The value to compare. + * @param {*} b The other value to compare. + * @param {Function} [callback] The function to customize comparing values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'name': 'fred' }; + * var copy = { 'name': 'fred' }; + * + * object == copy; + * // => false + * + * _.isEqual(object, copy); + * // => true + * + * var words = ['hello', 'goodbye']; + * var otherWords = ['hi', 'goodbye']; + * + * _.isEqual(words, otherWords, function(a, b) { + * var reGreet = /^(?:hello|hi)$/i, + * aGreet = _.isString(a) && reGreet.test(a), + * bGreet = _.isString(b) && reGreet.test(b); + * + * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined; + * }); + * // => true + */ + function isEqual(a, b, callback, thisArg) { + return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2)); + } + + /** + * Checks if `value` is, or can be coerced to, a finite number. + * + * Note: This is not the same as native `isFinite` which will return true for + * booleans and empty strings. See http://es5.github.io/#x15.1.2.5. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is finite, else `false`. + * @example + * + * _.isFinite(-101); + * // => true + * + * _.isFinite('10'); + * // => true + * + * _.isFinite(true); + * // => false + * + * _.isFinite(''); + * // => false + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); + } + + /** + * Checks if `value` is a function. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + */ + function isFunction(value) { + return typeof value == 'function'; + } + // fallback for older versions of Chrome and Safari + if (isFunction(/x/)) { + isFunction = function(value) { + return typeof value == 'function' && toString.call(value) == funcClass; + }; + } + + /** + * Checks if `value` is the language type of Object. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ + function isObject(value) { + // check if the value is the ECMAScript language type of Object + // http://es5.github.io/#x8 + // and avoid a V8 bug + // http://code.google.com/p/v8/issues/detail?id=2291 + return !!(value && objectTypes[typeof value]); + } + + /** + * Checks if `value` is `NaN`. + * + * Note: This is not the same as native `isNaN` which will return `true` for + * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // `NaN` as a primitive is the only value that is not equal to itself + // (perform the [[Class]] check first to avoid errors with some host objects in IE) + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(undefined); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is a number. + * + * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a number, else `false`. + * @example + * + * _.isNumber(8.4 * 5); + * // => true + */ + function isNumber(value) { + return typeof value == 'number' || + value && typeof value == 'object' && toString.call(value) == numberClass || false; + } + + /** + * Checks if `value` is an object created by the `Object` constructor. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * _.isPlainObject(new Shape); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + */ + var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { + if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) { + return false; + } + var valueOf = value.valueOf, + objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); + + return objProto + ? (value == objProto || getPrototypeOf(value) == objProto) + : shimIsPlainObject(value); + }; + + /** + * Checks if `value` is a regular expression. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`. + * @example + * + * _.isRegExp(/fred/); + * // => true + */ + function isRegExp(value) { + return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false; + } + + /** + * Checks if `value` is a string. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a string, else `false`. + * @example + * + * _.isString('fred'); + * // => true + */ + function isString(value) { + return typeof value == 'string' || + value && typeof value == 'object' && toString.call(value) == stringClass || false; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + */ + function isUndefined(value) { + return typeof value == 'undefined'; + } + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through the callback. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, key, object). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new object with values of the results of each `callback` execution. + * @example + * + * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; }); + * // => { 'a': 3, 'b': 6, 'c': 9 } + * + * var characters = { + * 'fred': { 'name': 'fred', 'age': 40 }, + * 'pebbles': { 'name': 'pebbles', 'age': 1 } + * }; + * + * // using "_.pluck" callback shorthand + * _.mapValues(characters, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } + */ + function mapValues(object, callback, thisArg) { + var result = {}; + callback = lodash.createCallback(callback, thisArg, 3); + + forOwn(object, function(value, key, object) { + result[key] = callback(value, key, object); + }); + return result; + } + + /** + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * will overwrite property assignments of previous sources. If a callback is + * provided it will be executed to produce the merged values of the destination + * and source properties. If the callback returns `undefined` merging will + * be handled by the method instead. The callback is bound to `thisArg` and + * invoked with two arguments; (objectValue, sourceValue). + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param {Function} [callback] The function to customize merging properties. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the destination object. + * @example + * + * var names = { + * 'characters': [ + * { 'name': 'barney' }, + * { 'name': 'fred' } + * ] + * }; + * + * var ages = { + * 'characters': [ + * { 'age': 36 }, + * { 'age': 40 } + * ] + * }; + * + * _.merge(names, ages); + * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] } + * + * var food = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var otherFood = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(food, otherFood, function(a, b) { + * return _.isArray(a) ? a.concat(b) : undefined; + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] } + */ + function merge(object) { + var args = arguments, + length = 2; + + if (!isObject(object)) { + return object; + } + // allows working with `_.reduce` and `_.reduceRight` without using + // their `index` and `collection` arguments + if (typeof args[2] != 'number') { + length = args.length; + } + if (length > 3 && typeof args[length - 2] == 'function') { + var callback = baseCreateCallback(args[--length - 1], args[length--], 2); + } else if (length > 2 && typeof args[length - 1] == 'function') { + callback = args[--length]; + } + var sources = slice(arguments, 1, length), + index = -1, + stackA = getArray(), + stackB = getArray(); + + while (++index < length) { + baseMerge(object, sources[index], callback, stackA, stackB); + } + releaseArray(stackA); + releaseArray(stackB); + return object; + } + + /** + * Creates a shallow clone of `object` excluding the specified properties. + * Property names may be specified as individual arguments or as arrays of + * property names. If a callback is provided it will be executed for each + * property of `object` omitting the properties the callback returns truey + * for. The callback is bound to `thisArg` and invoked with three arguments; + * (value, key, object). + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The source object. + * @param {Function|...string|string[]} [callback] The properties to omit or the + * function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns an object without the omitted properties. + * @example + * + * _.omit({ 'name': 'fred', 'age': 40 }, 'age'); + * // => { 'name': 'fred' } + * + * _.omit({ 'name': 'fred', 'age': 40 }, function(value) { + * return typeof value == 'number'; + * }); + * // => { 'name': 'fred' } + */ + function omit(object, callback, thisArg) { + var result = {}; + if (typeof callback != 'function') { + var props = []; + forIn(object, function(value, key) { + props.push(key); + }); + props = baseDifference(props, baseFlatten(arguments, true, false, 1)); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + result[key] = object[key]; + } + } else { + callback = lodash.createCallback(callback, thisArg, 3); + forIn(object, function(value, key, object) { + if (!callback(value, key, object)) { + result[key] = value; + } + }); + } + return result; + } + + /** + * Creates a two dimensional array of an object's key-value pairs, + * i.e. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments) + */ + function pairs(object) { + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; + } + + /** + * Creates a shallow clone of `object` composed of the specified properties. + * Property names may be specified as individual arguments or as arrays of + * property names. If a callback is provided it will be executed for each + * property of `object` picking the properties the callback returns truey + * for. The callback is bound to `thisArg` and invoked with three arguments; + * (value, key, object). + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The source object. + * @param {Function|...string|string[]} [callback] The function called per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns an object composed of the picked properties. + * @example + * + * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name'); + * // => { 'name': 'fred' } + * + * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) { + * return key.charAt(0) != '_'; + * }); + * // => { 'name': 'fred' } + */ + function pick(object, callback, thisArg) { + var result = {}; + if (typeof callback != 'function') { + var index = -1, + props = baseFlatten(arguments, true, false, 1), + length = isObject(object) ? props.length : 0; + + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } + } + } else { + callback = lodash.createCallback(callback, thisArg, 3); + forIn(object, function(value, key, object) { + if (callback(value, key, object)) { + result[key] = value; + } + }); + } + return result; + } + + /** + * An alternative to `_.reduce` this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable properties through a callback, with each callback execution + * potentially mutating the `accumulator` object. The callback is bound to + * `thisArg` and invoked with four arguments; (accumulator, value, key, object). + * Callbacks may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Array|Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the accumulated value. + * @example + * + * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) { + * num *= num; + * if (num % 2) { + * return result.push(num) < 3; + * } + * }); + * // => [1, 9, 25] + * + * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { + * result[key] = num * 3; + * }); + * // => { 'a': 3, 'b': 6, 'c': 9 } + */ + function transform(object, callback, accumulator, thisArg) { + var isArr = isArray(object); + if (accumulator == null) { + if (isArr) { + accumulator = []; + } else { + var ctor = object && object.constructor, + proto = ctor && ctor.prototype; + + accumulator = baseCreate(proto); + } + } + if (callback) { + callback = lodash.createCallback(callback, thisArg, 4); + (isArr ? baseEach : forOwn)(object, function(value, index, object) { + return callback(accumulator, value, index, object); + }); + } + return accumulator; + } + + /** + * Creates an array composed of the own enumerable property values of `object`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property values. + * @example + * + * _.values({ 'one': 1, 'two': 2, 'three': 3 }); + * // => [1, 2, 3] (property order is not guaranteed across environments) + */ + function values(object) { + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Creates an array of elements from the specified indexes, or keys, of the + * `collection`. Indexes may be specified as individual arguments or as arrays + * of indexes. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [index] The indexes of `collection` + * to retrieve, specified as individual indexes or arrays of indexes. + * @returns {Array} Returns a new array of elements corresponding to the + * provided indexes. + * @example + * + * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]); + * // => ['a', 'c', 'e'] + * + * _.at(['fred', 'barney', 'pebbles'], 0, 2); + * // => ['fred', 'pebbles'] + */ + function at(collection) { + var args = arguments, + index = -1, + props = baseFlatten(args, true, false, 1), + length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length, + result = Array(length); + + if (support.unindexedChars && isString(collection)) { + collection = collection.split(''); + } + while(++index < length) { + result[index] = collection[props[index]]; + } + return result; + } + + /** + * Checks if a given value is present in a collection using strict equality + * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the + * offset from the end of the collection. + * + * @static + * @memberOf _ + * @alias include + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {*} target The value to check for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {boolean} Returns `true` if the `target` element is found, else `false`. + * @example + * + * _.contains([1, 2, 3], 1); + * // => true + * + * _.contains([1, 2, 3], 1, 2); + * // => false + * + * _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.contains('pebbles', 'eb'); + * // => true + */ + function contains(collection, target, fromIndex) { + var index = -1, + indexOf = getIndexOf(), + length = collection ? collection.length : 0, + result = false; + + fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; + if (isArray(collection)) { + result = indexOf(collection, target, fromIndex) > -1; + } else if (typeof length == 'number') { + result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1; + } else { + baseEach(collection, function(value) { + if (++index >= fromIndex) { + return !(result = value === target); + } + }); + } + return result; + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through the callback. The corresponding value + * of each key is the number of times the key was returned by the callback. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1); + }); + + /** + * Checks if the given callback returns truey value for **all** elements of + * a collection. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {boolean} Returns `true` if all elements passed the callback check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes']); + * // => false + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * // using "_.pluck" callback shorthand + * _.every(characters, 'age'); + * // => true + * + * // using "_.where" callback shorthand + * _.every(characters, { 'age': 36 }); + * // => false + */ + function every(collection, callback, thisArg) { + var result = true; + callback = lodash.createCallback(callback, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + if (!(result = !!callback(collection[index], index, collection))) { + break; + } + } + } else { + baseEach(collection, function(value, index, collection) { + return (result = !!callback(value, index, collection)); + }); + } + return result; + } + + /** + * Iterates over elements of a collection, returning an array of all elements + * the callback returns truey for. The callback is bound to `thisArg` and + * invoked with three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of elements that passed the callback check. + * @example + * + * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); + * // => [2, 4, 6] + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true } + * ]; + * + * // using "_.pluck" callback shorthand + * _.filter(characters, 'blocked'); + * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] + * + * // using "_.where" callback shorthand + * _.filter(characters, { 'age': 36 }); + * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] + */ + function filter(collection, callback, thisArg) { + var result = []; + callback = lodash.createCallback(callback, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + if (callback(value, index, collection)) { + result.push(value); + } + } + } else { + baseEach(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result.push(value); + } + }); + } + return result; + } + + /** + * Iterates over elements of a collection, returning the first element that + * the callback returns truey for. The callback is bound to `thisArg` and + * invoked with three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias detect, findWhere + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the found element, else `undefined`. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true }, + * { 'name': 'pebbles', 'age': 1, 'blocked': false } + * ]; + * + * _.find(characters, function(chr) { + * return chr.age < 40; + * }); + * // => { 'name': 'barney', 'age': 36, 'blocked': false } + * + * // using "_.where" callback shorthand + * _.find(characters, { 'age': 1 }); + * // => { 'name': 'pebbles', 'age': 1, 'blocked': false } + * + * // using "_.pluck" callback shorthand + * _.find(characters, 'blocked'); + * // => { 'name': 'fred', 'age': 40, 'blocked': true } + */ + function find(collection, callback, thisArg) { + callback = lodash.createCallback(callback, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + if (callback(value, index, collection)) { + return value; + } + } + } else { + var result; + baseEach(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result = value; + return false; + } + }); + return result; + } + } + + /** + * This method is like `_.find` except that it iterates over elements + * of a `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the found element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(num) { + * return num % 2 == 1; + * }); + * // => 3 + */ + function findLast(collection, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + forEachRight(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result = value; + return false; + } + }); + return result; + } + + /** + * Iterates over elements of a collection, executing the callback for each + * element. The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). Callbacks may exit iteration early by + * explicitly returning `false`. + * + * Note: As with other "Collections" methods, objects with a `length` property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); + * // => logs each number and returns '1,2,3' + * + * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); + * // => logs each number and returns the object (property order is not guaranteed across environments) + */ + function forEach(collection, callback, thisArg) { + if (callback && typeof thisArg == 'undefined' && isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + if (callback(collection[index], index, collection) === false) { + break; + } + } + } else { + baseEach(collection, callback, thisArg); + } + return collection; + } + + /** + * This method is like `_.forEach` except that it iterates over elements + * of a `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(','); + * // => logs each number from right to left and returns '3,2,1' + */ + function forEachRight(collection, callback, thisArg) { + var iterable = collection, + length = collection ? collection.length : 0; + + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + if (isArray(collection)) { + while (length--) { + if (callback(collection[length], length, collection) === false) { + break; + } + } + } else { + if (typeof length != 'number') { + var props = keys(collection); + length = props.length; + } else if (support.unindexedChars && isString(collection)) { + iterable = collection.split(''); + } + baseEach(collection, function(value, key, collection) { + key = props ? props[--length] : --length; + return callback(iterable[key], key, collection); + }); + } + return collection; + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of a collection through the callback. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false` + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using "_.pluck" callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of the collection through the given callback. The corresponding + * value of each key is the last element responsible for generating the key. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keys = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keys, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ + var indexBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Invokes the method named by `methodName` on each element in the `collection` + * returning an array of the results of each invoked method. Additional arguments + * will be provided to each invoked method. If `methodName` is a function it + * will be invoked for, and `this` bound to, each element in the `collection`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|string} methodName The name of the method to invoke or + * the function invoked per iteration. + * @param {...*} [arg] Arguments to invoke the method with. + * @returns {Array} Returns a new array of the results of each invoked method. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + function invoke(collection, methodName) { + var args = slice(arguments, 2), + index = -1, + isFunc = typeof methodName == 'function', + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + forEach(collection, function(value) { + result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args); + }); + return result; + } + + /** + * Creates an array of values by running each element in the collection + * through the callback. The callback is bound to `thisArg` and invoked with + * three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias collect + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of the results of each `callback` execution. + * @example + * + * _.map([1, 2, 3], function(num) { return num * 3; }); + * // => [3, 6, 9] + * + * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); + * // => [3, 6, 9] (property order is not guaranteed across environments) + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * // using "_.pluck" callback shorthand + * _.map(characters, 'name'); + * // => ['barney', 'fred'] + */ + function map(collection, callback, thisArg) { + var index = -1, + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + callback = lodash.createCallback(callback, thisArg, 3); + if (isArray(collection)) { + while (++index < length) { + result[index] = callback(collection[index], index, collection); + } + } else { + baseEach(collection, function(value, key, collection) { + result[++index] = callback(value, key, collection); + }); + } + return result; + } + + /** + * Retrieves the maximum value of a collection. If the collection is empty or + * falsey `-Infinity` is returned. If a callback is provided it will be executed + * for each value in the collection to generate the criterion by which the value + * is ranked. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * _.max(characters, function(chr) { return chr.age; }); + * // => { 'name': 'fred', 'age': 40 }; + * + * // using "_.pluck" callback shorthand + * _.max(characters, 'age'); + * // => { 'name': 'fred', 'age': 40 }; + */ + function max(collection, callback, thisArg) { + var computed = -Infinity, + result = computed; + + // allows working with functions like `_.map` without using + // their `index` argument as a callback + if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { + callback = null; + } + if (callback == null && isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + if (value > result) { + result = value; + } + } + } else { + callback = (callback == null && isString(collection)) + ? charAtCallback + : lodash.createCallback(callback, thisArg, 3); + + baseEach(collection, function(value, index, collection) { + var current = callback(value, index, collection); + if (current > computed) { + computed = current; + result = value; + } + }); + } + return result; + } + + /** + * Retrieves the minimum value of a collection. If the collection is empty or + * falsey `Infinity` is returned. If a callback is provided it will be executed + * for each value in the collection to generate the criterion by which the value + * is ranked. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * _.min(characters, function(chr) { return chr.age; }); + * // => { 'name': 'barney', 'age': 36 }; + * + * // using "_.pluck" callback shorthand + * _.min(characters, 'age'); + * // => { 'name': 'barney', 'age': 36 }; + */ + function min(collection, callback, thisArg) { + var computed = Infinity, + result = computed; + + // allows working with functions like `_.map` without using + // their `index` argument as a callback + if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { + callback = null; + } + if (callback == null && isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + if (value < result) { + result = value; + } + } + } else { + callback = (callback == null && isString(collection)) + ? charAtCallback + : lodash.createCallback(callback, thisArg, 3); + + baseEach(collection, function(value, index, collection) { + var current = callback(value, index, collection); + if (current < computed) { + computed = current; + result = value; + } + }); + } + return result; + } + + /** + * Retrieves the value of a specified property from all elements in the collection. + * + * @static + * @memberOf _ + * @type Function + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {string} property The name of the property to pluck. + * @returns {Array} Returns a new array of property values. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * _.pluck(characters, 'name'); + * // => ['barney', 'fred'] + */ + var pluck = map; + + /** + * Reduces a collection to a value which is the accumulated result of running + * each element in the collection through the callback, where each successive + * callback execution consumes the return value of the previous execution. If + * `accumulator` is not provided the first element of the collection will be + * used as the initial `accumulator` value. The callback is bound to `thisArg` + * and invoked with four arguments; (accumulator, value, index|key, collection). + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [accumulator] Initial value of the accumulator. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the accumulated value. + * @example + * + * var sum = _.reduce([1, 2, 3], function(sum, num) { + * return sum + num; + * }); + * // => 6 + * + * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { + * result[key] = num * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6, 'c': 9 } + */ + function reduce(collection, callback, accumulator, thisArg) { + var noaccum = arguments.length < 3; + callback = lodash.createCallback(callback, thisArg, 4); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + if (noaccum) { + accumulator = collection[++index]; + } + while (++index < length) { + accumulator = callback(accumulator, collection[index], index, collection); + } + } else { + baseEach(collection, function(value, index, collection) { + accumulator = noaccum + ? (noaccum = false, value) + : callback(accumulator, value, index, collection) + }); + } + return accumulator; + } + + /** + * This method is like `_.reduce` except that it iterates over elements + * of a `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [accumulator] Initial value of the accumulator. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the accumulated value. + * @example + * + * var list = [[0, 1], [2, 3], [4, 5]]; + * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, callback, accumulator, thisArg) { + var noaccum = arguments.length < 3; + callback = lodash.createCallback(callback, thisArg, 4); + forEachRight(collection, function(value, index, collection) { + accumulator = noaccum + ? (noaccum = false, value) + : callback(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The opposite of `_.filter` this method returns the elements of a + * collection that the callback does **not** return truey for. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of elements that failed the callback check. + * @example + * + * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); + * // => [1, 3, 5] + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true } + * ]; + * + * // using "_.pluck" callback shorthand + * _.reject(characters, 'blocked'); + * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] + * + * // using "_.where" callback shorthand + * _.reject(characters, { 'age': 36 }); + * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] + */ + function reject(collection, callback, thisArg) { + callback = lodash.createCallback(callback, thisArg, 3); + return filter(collection, function(value, index, collection) { + return !callback(value, index, collection); + }); + } + + /** + * Retrieves a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Allows working with functions like `_.map` + * without using their `index` arguments as `n`. + * @returns {Array} Returns the random sample(s) of `collection`. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ + function sample(collection, n, guard) { + if (collection && typeof collection.length != 'number') { + collection = values(collection); + } else if (support.unindexedChars && isString(collection)) { + collection = collection.split(''); + } + if (n == null || guard) { + return collection ? collection[baseRandom(0, collection.length - 1)] : undefined; + } + var result = shuffle(collection); + result.length = nativeMin(nativeMax(0, n), result.length); + return result; + } + + /** + * Creates an array of shuffled values, using a version of the Fisher-Yates + * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns a new shuffled collection. + * @example + * + * _.shuffle([1, 2, 3, 4, 5, 6]); + * // => [4, 1, 6, 3, 5, 2] + */ + function shuffle(collection) { + var index = -1, + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + forEach(collection, function(value) { + var rand = baseRandom(0, ++index); + result[index] = result[rand]; + result[rand] = value; + }); + return result; + } + + /** + * Gets the size of the `collection` by returning `collection.length` for arrays + * and array-like objects or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns `collection.length` or number of own enumerable properties. + * @example + * + * _.size([1, 2]); + * // => 2 + * + * _.size({ 'one': 1, 'two': 2, 'three': 3 }); + * // => 3 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + var length = collection ? collection.length : 0; + return typeof length == 'number' ? length : keys(collection).length; + } + + /** + * Checks if the callback returns a truey value for **any** element of a + * collection. The function returns as soon as it finds a passing value and + * does not iterate over the entire collection. The callback is bound to + * `thisArg` and invoked with three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {boolean} Returns `true` if any element passed the callback check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true } + * ]; + * + * // using "_.pluck" callback shorthand + * _.some(characters, 'blocked'); + * // => true + * + * // using "_.where" callback shorthand + * _.some(characters, { 'age': 1 }); + * // => false + */ + function some(collection, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + if ((result = callback(collection[index], index, collection))) { + break; + } + } + } else { + baseEach(collection, function(value, index, collection) { + return !(result = callback(value, index, collection)); + }); + } + return !!result; + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through the callback. This method + * performs a stable sort, that is, it will preserve the original sort order + * of equal elements. The callback is bound to `thisArg` and invoked with + * three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an array of property names is provided for `callback` the collection + * will be sorted by each property value. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of sorted elements. + * @example + * + * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math); + * // => [3, 1, 2] + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 }, + * { 'name': 'barney', 'age': 26 }, + * { 'name': 'fred', 'age': 30 } + * ]; + * + * // using "_.pluck" callback shorthand + * _.map(_.sortBy(characters, 'age'), _.values); + * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]] + * + * // sorting by multiple properties + * _.map(_.sortBy(characters, ['name', 'age']), _.values); + * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]] + */ + function sortBy(collection, callback, thisArg) { + var index = -1, + isArr = isArray(callback), + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + if (!isArr) { + callback = lodash.createCallback(callback, thisArg, 3); + } + forEach(collection, function(value, key, collection) { + var object = result[++index] = getObject(); + if (isArr) { + object.criteria = map(callback, function(key) { return value[key]; }); + } else { + (object.criteria = getArray())[0] = callback(value, key, collection); + } + object.index = index; + object.value = value; + }); + + length = result.length; + result.sort(compareAscending); + while (length--) { + var object = result[length]; + result[length] = object.value; + if (!isArr) { + releaseArray(object.criteria); + } + releaseObject(object); + } + return result; + } + + /** + * Converts the `collection` to an array. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to convert. + * @returns {Array} Returns the new converted array. + * @example + * + * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4); + * // => [2, 3, 4] + */ + function toArray(collection) { + if (collection && typeof collection.length == 'number') { + return (support.unindexedChars && isString(collection)) + ? collection.split('') + : slice(collection); + } + return values(collection); + } + + /** + * Performs a deep comparison of each element in a `collection` to the given + * `properties` object, returning an array of all elements that have equivalent + * property values. + * + * @static + * @memberOf _ + * @type Function + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Object} props The object of property values to filter by. + * @returns {Array} Returns a new array of elements that have the given properties. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }, + * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.where(characters, { 'age': 36 }); + * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }] + * + * _.where(characters, { 'pets': ['dino'] }); + * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }] + */ + var where = filter; + + /*--------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are all falsey. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to compact. + * @returns {Array} Returns a new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result.push(value); + } + } + return result; + } + + /** + * Creates an array excluding all values of the provided arrays using strict + * equality for comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to process. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns a new array of filtered values. + * @example + * + * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); + * // => [1, 3, 4] + */ + function difference(array) { + return baseDifference(array, baseFlatten(arguments, true, true, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element that passes the callback check, instead of the element itself. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true }, + * { 'name': 'pebbles', 'age': 1, 'blocked': false } + * ]; + * + * _.findIndex(characters, function(chr) { + * return chr.age < 20; + * }); + * // => 2 + * + * // using "_.where" callback shorthand + * _.findIndex(characters, { 'age': 36 }); + * // => 0 + * + * // using "_.pluck" callback shorthand + * _.findIndex(characters, 'blocked'); + * // => 1 + */ + function findIndex(array, callback, thisArg) { + var index = -1, + length = array ? array.length : 0; + + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length) { + if (callback(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of a `collection` from right to left. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': true }, + * { 'name': 'fred', 'age': 40, 'blocked': false }, + * { 'name': 'pebbles', 'age': 1, 'blocked': true } + * ]; + * + * _.findLastIndex(characters, function(chr) { + * return chr.age > 30; + * }); + * // => 1 + * + * // using "_.where" callback shorthand + * _.findLastIndex(characters, { 'age': 36 }); + * // => 0 + * + * // using "_.pluck" callback shorthand + * _.findLastIndex(characters, 'blocked'); + * // => 2 + */ + function findLastIndex(array, callback, thisArg) { + var length = array ? array.length : 0; + callback = lodash.createCallback(callback, thisArg, 3); + while (length--) { + if (callback(array[length], length, array)) { + return length; + } + } + return -1; + } + + /** + * Gets the first element or first `n` elements of an array. If a callback + * is provided elements at the beginning of the array are returned as long + * as the callback returns truey. The callback is bound to `thisArg` and + * invoked with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias head, take + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback] The function called + * per element or the number of elements to return. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the first element(s) of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([1, 2, 3], 2); + * // => [1, 2] + * + * _.first([1, 2, 3], function(num) { + * return num < 3; + * }); + * // => [1, 2] + * + * var characters = [ + * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.first(characters, 'blocked'); + * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }] + * + * // using "_.where" callback shorthand + * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name'); + * // => ['barney', 'fred'] + */ + function first(array, callback, thisArg) { + var n = 0, + length = array ? array.length : 0; + + if (typeof callback != 'number' && callback != null) { + var index = -1; + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length && callback(array[index], index, array)) { + n++; + } + } else { + n = callback; + if (n == null || thisArg) { + return array ? array[0] : undefined; + } + } + return slice(array, 0, nativeMin(nativeMax(0, n), length)); + } + + /** + * Flattens a nested array (the nesting can be to any depth). If `isShallow` + * is truey, the array will only be flattened a single level. If a callback + * is provided each element of the array is passed through the callback before + * flattening. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to flatten. + * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new flattened array. + * @example + * + * _.flatten([1, [2], [3, [[4]]]]); + * // => [1, 2, 3, 4]; + * + * _.flatten([1, [2], [3, [[4]]]], true); + * // => [1, 2, 3, [[4]]]; + * + * var characters = [ + * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] }, + * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } + * ]; + * + * // using "_.pluck" callback shorthand + * _.flatten(characters, 'pets'); + * // => ['hoppy', 'baby puss', 'dino'] + */ + function flatten(array, isShallow, callback, thisArg) { + // juggle arguments + if (typeof isShallow != 'boolean' && isShallow != null) { + thisArg = callback; + callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow; + isShallow = false; + } + if (callback != null) { + array = map(array, callback, thisArg); + } + return baseFlatten(array, isShallow); + } + + /** + * Gets the index at which the first occurrence of `value` is found using + * strict equality for comparisons, i.e. `===`. If the array is already sorted + * providing `true` for `fromIndex` will run a faster binary search. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value or `-1`. + * @example + * + * _.indexOf([1, 2, 3, 1, 2, 3], 2); + * // => 1 + * + * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); + * // => 4 + * + * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); + * // => 2 + */ + function indexOf(array, value, fromIndex) { + if (typeof fromIndex == 'number') { + var length = array ? array.length : 0; + fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0); + } else if (fromIndex) { + var index = sortedIndex(array, value); + return array[index] === value ? index : -1; + } + return baseIndexOf(array, value, fromIndex); + } + + /** + * Gets all but the last element or last `n` elements of an array. If a + * callback is provided elements at the end of the array are excluded from + * the result as long as the callback returns truey. The callback is bound + * to `thisArg` and invoked with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback=1] The function called + * per element or the number of elements to exclude. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + * + * _.initial([1, 2, 3], 2); + * // => [1] + * + * _.initial([1, 2, 3], function(num) { + * return num > 1; + * }); + * // => [1] + * + * var characters = [ + * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.initial(characters, 'blocked'); + * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }] + * + * // using "_.where" callback shorthand + * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name'); + * // => ['barney', 'fred'] + */ + function initial(array, callback, thisArg) { + var n = 0, + length = array ? array.length : 0; + + if (typeof callback != 'number' && callback != null) { + var index = length; + callback = lodash.createCallback(callback, thisArg, 3); + while (index-- && callback(array[index], index, array)) { + n++; + } + } else { + n = (callback == null || thisArg) ? 1 : callback || n; + } + return slice(array, 0, nativeMin(nativeMax(0, length - n), length)); + } + + /** + * Creates an array of unique values present in all provided arrays using + * strict equality for comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {...Array} [array] The arrays to inspect. + * @returns {Array} Returns an array of shared values. + * @example + * + * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]); + * // => [1, 2] + */ + function intersection() { + var args = [], + argsIndex = -1, + argsLength = arguments.length, + caches = getArray(), + indexOf = getIndexOf(), + trustIndexOf = indexOf === baseIndexOf, + seen = getArray(); + + while (++argsIndex < argsLength) { + var value = arguments[argsIndex]; + if (isArray(value) || isArguments(value)) { + args.push(value); + caches.push(trustIndexOf && value.length >= largeArraySize && + createCache(argsIndex ? args[argsIndex] : seen)); + } + } + var array = args[0], + index = -1, + length = array ? array.length : 0, + result = []; + + outer: + while (++index < length) { + var cache = caches[0]; + value = array[index]; + + if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) { + argsIndex = argsLength; + (cache || seen).push(value); + while (--argsIndex) { + cache = caches[argsIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) { + continue outer; + } + } + result.push(value); + } + } + while (argsLength--) { + cache = caches[argsLength]; + if (cache) { + releaseObject(cache); + } + } + releaseArray(caches); + releaseArray(seen); + return result; + } + + /** + * Gets the last element or last `n` elements of an array. If a callback is + * provided elements at the end of the array are returned as long as the + * callback returns truey. The callback is bound to `thisArg` and invoked + * with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback] The function called + * per element or the number of elements to return. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the last element(s) of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + * + * _.last([1, 2, 3], 2); + * // => [2, 3] + * + * _.last([1, 2, 3], function(num) { + * return num > 1; + * }); + * // => [2, 3] + * + * var characters = [ + * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.pluck(_.last(characters, 'blocked'), 'name'); + * // => ['fred', 'pebbles'] + * + * // using "_.where" callback shorthand + * _.last(characters, { 'employer': 'na' }); + * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] + */ + function last(array, callback, thisArg) { + var n = 0, + length = array ? array.length : 0; + + if (typeof callback != 'number' && callback != null) { + var index = length; + callback = lodash.createCallback(callback, thisArg, 3); + while (index-- && callback(array[index], index, array)) { + n++; + } + } else { + n = callback; + if (n == null || thisArg) { + return array ? array[length - 1] : undefined; + } + } + return slice(array, nativeMax(0, length - n)); + } + + /** + * Gets the index at which the last occurrence of `value` is found using strict + * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used + * as the offset from the end of the collection. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value or `-1`. + * @example + * + * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); + * // => 4 + * + * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var index = array ? array.length : 0; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1; + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all provided values from the given array using strict equality for + * comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to modify. + * @param {...*} [value] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + function pull(array) { + var args = arguments, + argsIndex = 0, + argsLength = args.length, + length = array ? array.length : 0; + + while (++argsIndex < argsLength) { + var index = -1, + value = args[argsIndex]; + while (++index < length) { + if (array[index] === value) { + splice.call(array, index--, 1); + length--; + } + } + } + return array; + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to but not including `end`. If `start` is less than `stop` a + * zero-length range is created unless a negative `step` is specified. + * + * @static + * @memberOf _ + * @category Arrays + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns a new range array. + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + function range(start, end, step) { + start = +start || 0; + step = typeof step == 'number' ? step : (+step || 1); + + if (end == null) { + end = start; + start = 0; + } + // use `Array(length)` so engines like Chakra and V8 avoid slower modes + // http://youtu.be/XAqIpGU8ZZk#t=17m25s + var index = -1, + length = nativeMax(0, ceil((end - start) / (step || 1))), + result = Array(length); + + while (++index < length) { + result[index] = start; + start += step; + } + return result; + } + + /** + * Removes all elements from an array that the callback returns truey for + * and returns an array of removed elements. The callback is bound to `thisArg` + * and invoked with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to modify. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4, 5, 6]; + * var evens = _.remove(array, function(num) { return num % 2 == 0; }); + * + * console.log(array); + * // => [1, 3, 5] + * + * console.log(evens); + * // => [2, 4, 6] + */ + function remove(array, callback, thisArg) { + var index = -1, + length = array ? array.length : 0, + result = []; + + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (callback(value, index, array)) { + result.push(value); + splice.call(array, index--, 1); + length--; + } + } + return result; + } + + /** + * The opposite of `_.initial` this method gets all but the first element or + * first `n` elements of an array. If a callback function is provided elements + * at the beginning of the array are excluded from the result as long as the + * callback returns truey. The callback is bound to `thisArg` and invoked + * with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias drop, tail + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback=1] The function called + * per element or the number of elements to exclude. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + * + * _.rest([1, 2, 3], 2); + * // => [3] + * + * _.rest([1, 2, 3], function(num) { + * return num < 3; + * }); + * // => [3] + * + * var characters = [ + * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.pluck(_.rest(characters, 'blocked'), 'name'); + * // => ['fred', 'pebbles'] + * + * // using "_.where" callback shorthand + * _.rest(characters, { 'employer': 'slate' }); + * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] + */ + function rest(array, callback, thisArg) { + if (typeof callback != 'number' && callback != null) { + var n = 0, + index = -1, + length = array ? array.length : 0; + + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length && callback(array[index], index, array)) { + n++; + } + } else { + n = (callback == null || thisArg) ? 1 : nativeMax(0, callback); + } + return slice(array, n); + } + + /** + * Uses a binary search to determine the smallest index at which a value + * should be inserted into a given sorted array in order to maintain the sort + * order of the array. If a callback is provided it will be executed for + * `value` and each element of `array` to compute their sort ranking. The + * callback is bound to `thisArg` and invoked with one argument; (value). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([20, 30, 50], 40); + * // => 2 + * + * // using "_.pluck" callback shorthand + * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 2 + * + * var dict = { + * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } + * }; + * + * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { + * return dict.wordToNumber[word]; + * }); + * // => 2 + * + * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { + * return this.wordToNumber[word]; + * }, dict); + * // => 2 + */ + function sortedIndex(array, value, callback, thisArg) { + var low = 0, + high = array ? array.length : low; + + // explicitly reference `identity` for better inlining in Firefox + callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity; + value = callback(value); + + while (low < high) { + var mid = (low + high) >>> 1; + (callback(array[mid]) < value) + ? low = mid + 1 + : high = mid; + } + return low; + } + + /** + * Creates an array of unique values, in order, of the provided arrays using + * strict equality for comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {...Array} [array] The arrays to inspect. + * @returns {Array} Returns an array of combined values. + * @example + * + * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]); + * // => [1, 2, 3, 5, 4] + */ + function union() { + return baseUniq(baseFlatten(arguments, true, true)); + } + + /** + * Creates a duplicate-value-free version of an array using strict equality + * for comparisons, i.e. `===`. If the array is sorted, providing + * `true` for `isSorted` will use a faster algorithm. If a callback is provided + * each element of `array` is passed through the callback before uniqueness + * is computed. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Arrays + * @param {Array} array The array to process. + * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a duplicate-value-free array. + * @example + * + * _.uniq([1, 2, 1, 3, 1]); + * // => [1, 2, 3] + * + * _.uniq([1, 1, 2, 2, 3], true); + * // => [1, 2, 3] + * + * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); + * // => ['A', 'b', 'C'] + * + * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math); + * // => [1, 2.5, 3] + * + * // using "_.pluck" callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniq(array, isSorted, callback, thisArg) { + // juggle arguments + if (typeof isSorted != 'boolean' && isSorted != null) { + thisArg = callback; + callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted; + isSorted = false; + } + if (callback != null) { + callback = lodash.createCallback(callback, thisArg, 3); + } + return baseUniq(array, isSorted, callback); + } + + /** + * Creates an array excluding all provided values using strict equality for + * comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to filter. + * @param {...*} [value] The values to exclude. + * @returns {Array} Returns a new array of filtered values. + * @example + * + * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); + * // => [2, 3, 4] + */ + function without(array) { + return baseDifference(array, slice(arguments, 1)); + } + + /** + * Creates an array that is the symmetric difference of the provided arrays. + * See http://en.wikipedia.org/wiki/Symmetric_difference. + * + * @static + * @memberOf _ + * @category Arrays + * @param {...Array} [array] The arrays to inspect. + * @returns {Array} Returns an array of values. + * @example + * + * _.xor([1, 2, 3], [5, 2, 1, 4]); + * // => [3, 5, 4] + * + * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]); + * // => [1, 4, 5] + */ + function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArray(array) || isArguments(array)) { + var result = result + ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result))) + : array; + } + } + return result || []; + } + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second + * elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @alias unzip + * @category Arrays + * @param {...Array} [array] Arrays to process. + * @returns {Array} Returns a new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + function zip() { + var array = arguments.length > 1 ? arguments : arguments[0], + index = -1, + length = array ? max(pluck(array, 'length')) : 0, + result = Array(length < 0 ? 0 : length); + + while (++index < length) { + result[index] = pluck(array, index); + } + return result; + } + + /** + * Creates an object composed from arrays of `keys` and `values`. Provide + * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]` + * or two arrays, one of `keys` and one of corresponding `values`. + * + * @static + * @memberOf _ + * @alias object + * @category Arrays + * @param {Array} keys The array of keys. + * @param {Array} [values=[]] The array of values. + * @returns {Object} Returns an object composed of the given keys and + * corresponding values. + * @example + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ + function zipObject(keys, values) { + var index = -1, + length = keys ? keys.length : 0, + result = {}; + + if (!values && length && !isArray(keys[0])) { + values = []; + } + while (++index < length) { + var key = keys[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a function that executes `func`, with the `this` binding and + * arguments of the created function, only after being called `n` times. + * + * @static + * @memberOf _ + * @category Functions + * @param {number} n The number of times the function must be called before + * `func` is executed. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('Done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'Done saving!', after all saves have completed + */ + function after(n, func) { + if (!isFunction(func)) { + throw new TypeError; + } + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that, when called, invokes `func` with the `this` + * binding of `thisArg` and prepends any additional `bind` arguments to those + * provided to the bound function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var func = function(greeting) { + * return greeting + ' ' + this.name; + * }; + * + * func = _.bind(func, { 'name': 'fred' }, 'hi'); + * func(); + * // => 'hi fred' + */ + function bind(func, thisArg) { + return arguments.length > 2 + ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) + : createWrapper(func, 1, null, null, thisArg); + } + + /** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all the function properties + * of `object` will be bound. + * + * @static + * @memberOf _ + * @category Functions + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...string} [methodName] The object method names to + * bind, specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { console.log('clicked ' + this.label); } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs', when the button is clicked + */ + function bindAll(object) { + var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object), + index = -1, + length = funcs.length; + + while (++index < length) { + var key = funcs[index]; + object[key] = createWrapper(object[key], 1, null, null, object); + } + return object; + } + + /** + * Creates a function that, when called, invokes the method at `object[key]` + * and prepends any additional `bindKey` arguments to those provided to the bound + * function. This method differs from `_.bind` by allowing bound functions to + * reference methods that will be redefined or don't yet exist. + * See http://michaux.ca/articles/lazy-function-definition-pattern. + * + * @static + * @memberOf _ + * @category Functions + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'name': 'fred', + * 'greet': function(greeting) { + * return greeting + ' ' + this.name; + * } + * }; + * + * var func = _.bindKey(object, 'greet', 'hi'); + * func(); + * // => 'hi fred' + * + * object.greet = function(greeting) { + * return greeting + 'ya ' + this.name + '!'; + * }; + * + * func(); + * // => 'hiya fred!' + */ + function bindKey(object, key) { + return arguments.length > 2 + ? createWrapper(key, 19, slice(arguments, 2), null, object) + : createWrapper(key, 3, null, null, object); + } + + /** + * Creates a function that is the composition of the provided functions, + * where each function consumes the return value of the function that follows. + * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`. + * Each function is executed with the `this` binding of the composed function. + * + * @static + * @memberOf _ + * @category Functions + * @param {...Function} [func] Functions to compose. + * @returns {Function} Returns the new composed function. + * @example + * + * var realNameMap = { + * 'pebbles': 'penelope' + * }; + * + * var format = function(name) { + * name = realNameMap[name.toLowerCase()] || name; + * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); + * }; + * + * var greet = function(formatted) { + * return 'Hiya ' + formatted + '!'; + * }; + * + * var welcome = _.compose(greet, format); + * welcome('pebbles'); + * // => 'Hiya Penelope!' + */ + function compose() { + var funcs = arguments, + length = funcs.length; + + while (length--) { + if (!isFunction(funcs[length])) { + throw new TypeError; + } + } + return function() { + var args = arguments, + length = funcs.length; + + while (length--) { + args = [funcs[length].apply(this, args)]; + } + return args[0]; + }; + } + + /** + * Creates a function which accepts one or more arguments of `func` that when + * invoked either executes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` can be specified + * if `func.length` is not sufficient. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @returns {Function} Returns the new curried function. + * @example + * + * var curried = _.curry(function(a, b, c) { + * console.log(a + b + c); + * }); + * + * curried(1)(2)(3); + * // => 6 + * + * curried(1, 2)(3); + * // => 6 + * + * curried(1, 2, 3); + * // => 6 + */ + function curry(func, arity) { + arity = typeof arity == 'number' ? arity : (+arity || func.length); + return createWrapper(func, 4, null, null, null, arity); + } + + /** + * Creates a function that will delay the execution of `func` until after + * `wait` milliseconds have elapsed since the last time it was invoked. + * Provide an options object to indicate that `func` should be invoked on + * the leading and/or trailing edge of the `wait` timeout. Subsequent calls + * to the debounced function will return the result of the last `func` call. + * + * Note: If `leading` and `trailing` options are `true` `func` will be called + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to debounce. + * @param {number} wait The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called. + * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * var lazyLayout = _.debounce(calculateLayout, 150); + * jQuery(window).on('resize', lazyLayout); + * + * // execute `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * }); + * + * // ensure `batchLog` is executed once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * source.addEventListener('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * }, false); + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (!isFunction(func)) { + throw new TypeError; + } + wait = nativeMax(0, wait) || 0; + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = options.leading; + maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0); + trailing = 'trailing' in options ? options.trailing : trailing; + } + var delayed = function() { + var remaining = wait - (now() - stamp); + if (remaining <= 0) { + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + var isCalled = trailingCall; + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + } + } else { + timeoutId = setTimeout(delayed, remaining); + } + }; + + var maxDelayed = function() { + if (timeoutId) { + clearTimeout(timeoutId); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (trailing || (maxWait !== wait)) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + } + }; + + return function() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + return result; + }; + } + + /** + * Defers executing the `func` function until the current call stack has cleared. + * Additional arguments will be provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to defer. + * @param {...*} [arg] Arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { console.log(text); }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ + function defer(func) { + if (!isFunction(func)) { + throw new TypeError; + } + var args = slice(arguments, 1); + return setTimeout(function() { func.apply(undefined, args); }, 1); + } + + /** + * Executes the `func` function after `wait` milliseconds. Additional arguments + * will be provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay execution. + * @param {...*} [arg] Arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { console.log(text); }, 1000, 'later'); + * // => logs 'later' after one second + */ + function delay(func, wait) { + if (!isFunction(func)) { + throw new TypeError; + } + var args = slice(arguments, 2); + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it will be used to determine the cache key for storing the result + * based on the arguments provided to the memoized function. By default, the + * first argument provided to the memoized function is used as the cache key. + * The `func` is executed with the `this` binding of the memoized function. + * The result cache is exposed as the `cache` property on the memoized function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] A function used to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var fibonacci = _.memoize(function(n) { + * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); + * }); + * + * fibonacci(9) + * // => 34 + * + * var data = { + * 'fred': { 'name': 'fred', 'age': 40 }, + * 'pebbles': { 'name': 'pebbles', 'age': 1 } + * }; + * + * // modifying the result cache + * var get = _.memoize(function(name) { return data[name]; }, _.identity); + * get('pebbles'); + * // => { 'name': 'pebbles', 'age': 1 } + * + * get.cache.pebbles.name = 'penelope'; + * get('pebbles'); + * // => { 'name': 'penelope', 'age': 1 } + */ + function memoize(func, resolver) { + if (!isFunction(func)) { + throw new TypeError; + } + var memoized = function() { + var cache = memoized.cache, + key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0]; + + return hasOwnProperty.call(cache, key) + ? cache[key] + : (cache[key] = func.apply(this, arguments)); + } + memoized.cache = {}; + return memoized; + } + + /** + * Creates a function that is restricted to execute `func` once. Repeat calls to + * the function will return the value of the first call. The `func` is executed + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` executes `createApplication` once + */ + function once(func) { + var ran, + result; + + if (!isFunction(func)) { + throw new TypeError; + } + return function() { + if (ran) { + return result; + } + ran = true; + result = func.apply(this, arguments); + + // clear the `func` variable so the function may be garbage collected + func = null; + return result; + }; + } + + /** + * Creates a function that, when called, invokes `func` with any additional + * `partial` arguments prepended to those provided to the new function. This + * method is similar to `_.bind` except it does **not** alter the `this` binding. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { return greeting + ' ' + name; }; + * var hi = _.partial(greet, 'hi'); + * hi('fred'); + * // => 'hi fred' + */ + function partial(func) { + return createWrapper(func, 16, slice(arguments, 1)); + } + + /** + * This method is like `_.partial` except that `partial` arguments are + * appended to those provided to the new function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var defaultsDeep = _.partialRight(_.merge, _.defaults); + * + * var options = { + * 'variable': 'data', + * 'imports': { 'jq': $ } + * }; + * + * defaultsDeep(options, _.templateSettings); + * + * options.variable + * // => 'data' + * + * options.imports + * // => { '_': _, 'jq': $ } + */ + function partialRight(func) { + return createWrapper(func, 32, null, slice(arguments, 1)); + } + + /** + * Creates a function that, when executed, will only call the `func` function + * at most once per every `wait` milliseconds. Provide an options object to + * indicate that `func` should be invoked on the leading and/or trailing edge + * of the `wait` timeout. Subsequent calls to the throttled function will + * return the result of the last `func` call. + * + * Note: If `leading` and `trailing` options are `true` `func` will be called + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to throttle. + * @param {number} wait The number of milliseconds to throttle executions to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * var throttled = _.throttle(updatePosition, 100); + * jQuery(window).on('scroll', throttled); + * + * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (!isFunction(func)) { + throw new TypeError; + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? options.leading : leading; + trailing = 'trailing' in options ? options.trailing : trailing; + } + debounceOptions.leading = leading; + debounceOptions.maxWait = wait; + debounceOptions.trailing = trailing; + + return debounce(func, wait, debounceOptions); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Additional arguments provided to the function are appended + * to those provided to the wrapper function. The wrapper is executed with + * the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Functions + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

      ' + func(text) + '

      '; + * }); + * + * p('Fred, Wilma, & Pebbles'); + * // => '

      Fred, Wilma, & Pebbles

      ' + */ + function wrap(value, wrapper) { + return createWrapper(wrapper, 16, [value]); + } + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'name': 'fred' }; + * var getter = _.constant(object); + * getter() === object; + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + /** + * Produces a callback bound to an optional `thisArg`. If `func` is a property + * name the created callback will return the property value for a given element. + * If `func` is an object the created callback will return `true` for elements + * that contain the equivalent object properties, otherwise it will return `false`. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} [func=identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of the created callback. + * @param {number} [argCount] The number of arguments the callback accepts. + * @returns {Function} Returns a callback function. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * // wrap to create custom callback shorthands + * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) { + * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback); + * return !match ? func(callback, thisArg) : function(object) { + * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3]; + * }; + * }); + * + * _.filter(characters, 'age__gt38'); + * // => [{ 'name': 'fred', 'age': 40 }] + */ + function createCallback(func, thisArg, argCount) { + var type = typeof func; + if (func == null || type == 'function') { + return baseCreateCallback(func, thisArg, argCount); + } + // handle "_.pluck" style callback shorthands + if (type != 'object') { + return property(func); + } + var props = keys(func), + key = props[0], + a = func[key]; + + // handle "_.where" style callback shorthands + if (props.length == 1 && a === a && !isObject(a)) { + // fast path the common case of providing an object with a single + // property containing a primitive value + return function(object) { + var b = object[key]; + return a === b && (a !== 0 || (1 / a == 1 / b)); + }; + } + return function(object) { + var length = props.length, + result = false; + + while (length--) { + if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) { + break; + } + } + return result; + }; + } + + /** + * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their + * corresponding HTML entities. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} string The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('Fred, Wilma, & Pebbles'); + * // => 'Fred, Wilma, & Pebbles' + */ + function escape(string) { + return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar); + } + + /** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'name': 'fred' }; + * _.identity(object) === object; + * // => true + */ + function identity(value) { + return value; + } + + /** + * Adds function properties of a source object to the destination object. + * If `object` is a function methods will be added to its prototype as well. + * + * @static + * @memberOf _ + * @category Utilities + * @param {Function|Object} [object=lodash] object The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added are chainable. + * @example + * + * function capitalize(string) { + * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); + * } + * + * _.mixin({ 'capitalize': capitalize }); + * _.capitalize('fred'); + * // => 'Fred' + * + * _('fred').capitalize().value(); + * // => 'Fred' + * + * _.mixin({ 'capitalize': capitalize }, { 'chain': false }); + * _('fred').capitalize(); + * // => 'Fred' + */ + function mixin(object, source, options) { + var chain = true, + methodNames = source && functions(source); + + if (!source || (!options && !methodNames.length)) { + if (options == null) { + options = source; + } + ctor = lodashWrapper; + source = object; + object = lodash; + methodNames = functions(source); + } + if (options === false) { + chain = false; + } else if (isObject(options) && 'chain' in options) { + chain = options.chain; + } + var ctor = object, + isFunc = isFunction(ctor); + + forEach(methodNames, function(methodName) { + var func = object[methodName] = source[methodName]; + if (isFunc) { + ctor.prototype[methodName] = function() { + var chainAll = this.__chain__, + value = this.__wrapped__, + args = [value]; + + push.apply(args, arguments); + var result = func.apply(object, args); + if (chain || chainAll) { + if (value === result && isObject(result)) { + return this; + } + result = new ctor(result); + result.__chain__ = chainAll; + } + return result; + }; + } + }); + } + + /** + * Reverts the '_' variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @memberOf _ + * @category Utilities + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + context._ = oldDash; + return this; + } + + /** + * A no-operation function. + * + * @static + * @memberOf _ + * @category Utilities + * @example + * + * var object = { 'name': 'fred' }; + * _.noop(object) === undefined; + * // => true + */ + function noop() { + // no operation performed + } + + /** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Utilities + * @example + * + * var stamp = _.now(); + * _.defer(function() { console.log(_.now() - stamp); }); + * // => logs the number of milliseconds it took for the deferred function to be called + */ + var now = isNative(now = Date.now) && now || function() { + return new Date().getTime(); + }; + + /** + * Converts the given value into an integer of the specified radix. + * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the + * `value` is a hexadecimal, in which case a `radix` of `16` is used. + * + * Note: This method avoids differences in native ES3 and ES5 `parseInt` + * implementations. See http://es5.github.io/#E. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} value The value to parse. + * @param {number} [radix] The radix used to interpret the value to parse. + * @returns {number} Returns the new integer value. + * @example + * + * _.parseInt('08'); + * // => 8 + */ + var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) { + // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt` + return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0); + }; + + /** + * Creates a "_.pluck" style function, which returns the `key` value of a + * given object. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} key The name of the property to retrieve. + * @returns {Function} Returns the new function. + * @example + * + * var characters = [ + * { 'name': 'fred', 'age': 40 }, + * { 'name': 'barney', 'age': 36 } + * ]; + * + * var getName = _.property('name'); + * + * _.map(characters, getName); + * // => ['barney', 'fred'] + * + * _.sortBy(characters, getName); + * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] + */ + function property(key) { + return function(object) { + return object[key]; + }; + } + + /** + * Produces a random number between `min` and `max` (inclusive). If only one + * argument is provided a number between `0` and the given number will be + * returned. If `floating` is truey or either `min` or `max` are floats a + * floating-point number will be returned instead of an integer. + * + * @static + * @memberOf _ + * @category Utilities + * @param {number} [min=0] The minimum possible value. + * @param {number} [max=1] The maximum possible value. + * @param {boolean} [floating=false] Specify returning a floating-point number. + * @returns {number} Returns a random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(min, max, floating) { + var noMin = min == null, + noMax = max == null; + + if (floating == null) { + if (typeof min == 'boolean' && noMax) { + floating = min; + min = 1; + } + else if (!noMax && typeof max == 'boolean') { + floating = max; + noMax = true; + } + } + if (noMin && noMax) { + max = 1; + } + min = +min || 0; + if (noMax) { + max = min; + min = 0; + } else { + max = +max || 0; + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom(); + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max); + } + return baseRandom(min, max); + } + + /** + * Resolves the value of property `key` on `object`. If `key` is a function + * it will be invoked with the `this` binding of `object` and its result returned, + * else the property value is returned. If `object` is falsey then `undefined` + * is returned. + * + * @static + * @memberOf _ + * @category Utilities + * @param {Object} object The object to inspect. + * @param {string} key The name of the property to resolve. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { + * 'cheese': 'crumpets', + * 'stuff': function() { + * return 'nonsense'; + * } + * }; + * + * _.result(object, 'cheese'); + * // => 'crumpets' + * + * _.result(object, 'stuff'); + * // => 'nonsense' + */ + function result(object, key) { + if (object) { + var value = object[key]; + return isFunction(value) ? object[key]() : value; + } + } + + /** + * A micro-templating method that handles arbitrary delimiters, preserves + * whitespace, and correctly escapes quotes within interpolated code. + * + * Note: In the development build, `_.template` utilizes sourceURLs for easier + * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl + * + * For more information on precompiling templates see: + * https://lodash.com/custom-builds + * + * For more information on Chrome extension sandboxes see: + * http://developer.chrome.com/stable/extensions/sandboxingEval.html + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} text The template text. + * @param {Object} data The data object used to populate the text. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as local variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [sourceURL] The sourceURL of the template's compiled source. + * @param {string} [variable] The data object variable name. + * @returns {Function|string} Returns a compiled function when no `data` object + * is given, else it returns the interpolated text. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= name %>'); + * compiled({ 'name': 'fred' }); + * // => 'hello fred' + * + * // using the "escape" delimiter to escape HTML in data property values + * _.template('<%- value %>', { 'value': ' + + + or + + var nacl = require('tweetnacl'); + nacl.util = require('tweetnacl-util'); + + However it is recommended to use better packages that have wider + compatibility and better performance. Functions from `nacl.util` were never + intended to be robust solution for string conversion and were included for + convenience: cryptography library is not the right place for them. + + Currently calling these functions will throw error pointing to + `tweetnacl-util-js` (in the next version this error message will be removed). + +* Improved detection of available random number generators, making it possible + to use `nacl.randomBytes` and related functions in Web Workers without + changes. + +* Changes to testing (see README). + + +v0.13.3 +------- + +No code changes. + +* Reverted license field in package.json to "Public domain". + +* Fixed typo in README. + + +v0.13.2 +------- + +* Fixed undefined variable bug in fast version of Poly1305. No worries, this + bug was *never* triggered. + +* Specified CC0 public domain dedication. + +* Updated development dependencies. + + +v0.13.1 +------- + +* Exclude `crypto` and `buffer` modules from browserify builds. + + +v0.13.0 +------- + +* Made `nacl-fast` the default version in NPM package. Now + `require("tweetnacl")` will use fast version; to get the original version, + use `require("tweetnacl/nacl.js")`. + +* Cleanup temporary array after generating random bytes. + + +v0.12.2 +------- + +* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, + `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. + + +v0.12.1 +------- + +* Significantly improved performance of Salsa20 (~1.5x faster) and + Poly1305 (~3.5x faster) in `nacl-fast` version. + + +v0.12.0 +------- + +* Instead of using the given secret key directly, TweetNaCl.js now copies it to + a new array in `nacl.box.keyPair.fromSecretKey` and + `nacl.sign.keyPair.fromSecretKey`. + + +v0.11.2 +------- + +* Added new constant: `nacl.sign.seedLength`. + + +v0.11.1 +------- + +* Even faster hash for both short and long inputs (in `nacl-fast`). + + +v0.11.0 +------- + +* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs + deterministically from a 32-byte seed. (It behaves like + [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) + `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) + +* Fast version now has an improved hash implementation that is 2x-5x faster. + +* Fixed benchmarks, which may have produced incorrect measurements. + + +v0.10.1 +------- + +* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. + + +v0.10.0 +------- + +* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal + with signed messages, and new `nacl.sign.detached` and + `nacl.sign.detached.verify` are available. + + Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a + message and "detached" signature. This was unlike NaCl's API, which dealt with + signed messages (concatenation of signature and message). + + The new API is: + + nacl.sign(message, secretKey) -> signedMessage + nacl.sign.open(signedMessage, publicKey) -> message | null + + Since detached signatures are common, two new API functions were introduced: + + nacl.sign.detached(message, secretKey) -> signature + nacl.sign.detached.verify(message, signature, publicKey) -> true | false + + (Note that it's `verify`, not `open`, and it returns a boolean value, unlike + `open`, which returns an "unsigned" message.) + +* NPM package now comes without `test` directory to keep it small. + + +v0.9.2 +------ + +* Improved documentation. +* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 + bytes in Poly1305 (and thus, secretbox and box). However this has no impact + in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit + indexes, and most implementations won't allocate more than a gigabyte or so. + (Obviously, there are no tests for the correctness of implementation.) Also, + it's not recommended to use messages that large without splitting them into + smaller packets anyway. + + +v0.9.1 +------ + +* Initial release diff --git a/node_modules/tweetnacl/LICENSE b/node_modules/tweetnacl/LICENSE new file mode 100644 index 000000000..cf1ab25da --- /dev/null +++ b/node_modules/tweetnacl/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to diff --git a/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..a8eb4a9a9 --- /dev/null +++ b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +# Important! + +If your contribution is not trivial (not a typo fix, etc.), we can only accept +it if you dedicate your copyright for the contribution to the public domain. +Make sure you understand what it means (see http://unlicense.org/)! If you +agree, please add yourself to AUTHORS.md file, and include the following text +to your pull request description or a comment in it: + +------------------------------------------------------------------------------ + + I dedicate any and all copyright interest in this software to the + public domain. I make this dedication for the benefit of the public at + large and to the detriment of my heirs and successors. I intend this + dedication to be an overt act of relinquishment in perpetuity of all + present and future rights to this software under copyright law. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. diff --git a/node_modules/tweetnacl/README.md b/node_modules/tweetnacl/README.md new file mode 100644 index 000000000..ffb6871d3 --- /dev/null +++ b/node_modules/tweetnacl/README.md @@ -0,0 +1,459 @@ +TweetNaCl.js +============ + +Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) +to JavaScript for modern browsers and Node.js. Public domain. + +[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) +](https://travis-ci.org/dchest/tweetnacl-js) + +Demo: + +**:warning: The library is stable and API is frozen, however it has not been +independently reviewed. If you can help reviewing it, please [contact +me](mailto:dmitry@codingrobots.com).** + +Documentation +============= + +* [Overview](#overview) +* [Installation](#installation) +* [Usage](#usage) + * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) + * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) + * [Scalar multiplication](#scalar-multiplication) + * [Signatures](#signatures) + * [Hashing](#hashing) + * [Random bytes generation](#random-bytes-generation) + * [Constant-time comparison](#constant-time-comparison) +* [System requirements](#system-requirements) +* [Development and testing](#development-and-testing) +* [Benchmarks](#benchmarks) +* [Contributors](#contributors) +* [Who uses it](#who-uses-it) + + +Overview +-------- + +The primary goal of this project is to produce a translation of TweetNaCl to +JavaScript which is as close as possible to the original C implementation, plus +a thin layer of idiomatic high-level API on top of it. + +There are two versions, you can use either of them: + +* `nacl.js` is the port of TweetNaCl with minimum differences from the + original + high-level API. + +* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with + faster versions. + + +Installation +------------ + +You can install TweetNaCl.js via a package manager: + +[Bower](http://bower.io): + + $ bower install tweetnacl + +[NPM](https://www.npmjs.org/): + + $ npm install tweetnacl + +or [download source code](https://github.com/dchest/tweetnacl-js/releases). + + +Usage +----- + +All API functions accept and return bytes as `Uint8Array`s. If you need to +encode or decode strings, use functions from + or one of the more robust codec +packages. + +In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you +can freely pass them to TweetNaCl.js functions as arguments. The returned +objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to +convert them manually; make sure to convert using copying: `new Buffer(array)`, +instead of sharing: `new Buffer(array.buffer)`, because some functions return +subarrays of their buffers. + + +### Public-key authenticated encryption (box) + +Implements *curve25519-xsalsa20-poly1305*. + +#### nacl.box.keyPair() + +Generates a new random key pair for box and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 32-byte secret key + } + + +#### nacl.box.keyPair.fromSecretKey(secretKey) + +Returns a key pair for box with public key corresponding to the given secret +key. + +#### nacl.box(message, nonce, theirPublicKey, mySecretKey) + +Encrypt and authenticates message using peer's public key, our secret key, and +the given nonce, which must be unique for each distinct message for a key pair. + +Returns an encrypted and authenticated message, which is +`nacl.box.overheadLength` longer than the original message. + +#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) + +Authenticates and decrypts the given box with peer's public key, our secret +key, and the given nonce. + +Returns the original message, or `false` if authentication fails. + +#### nacl.box.before(theirPublicKey, mySecretKey) + +Returns a precomputed shared key which can be used in `nacl.box.after` and +`nacl.box.open.after`. + +#### nacl.box.after(message, nonce, sharedKey) + +Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.open.after(box, nonce, sharedKey) + +Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.publicKeyLength = 32 + +Length of public key in bytes. + +#### nacl.box.secretKeyLength = 32 + +Length of secret key in bytes. + +#### nacl.box.sharedKeyLength = 32 + +Length of precomputed shared key in bytes. + +#### nacl.box.nonceLength = 24 + +Length of nonce in bytes. + +#### nacl.box.overheadLength = 16 + +Length of overhead added to box compared to original message. + + +### Secret-key authenticated encryption (secretbox) + +Implements *xsalsa20-poly1305*. + +#### nacl.secretbox(message, nonce, key) + +Encrypt and authenticates message using the key and the nonce. The nonce must +be unique for each distinct message for this key. + +Returns an encrypted and authenticated message, which is +`nacl.secretbox.overheadLength` longer than the original message. + +#### nacl.secretbox.open(box, nonce, key) + +Authenticates and decrypts the given secret box using the key and the nonce. + +Returns the original message, or `false` if authentication fails. + +#### nacl.secretbox.keyLength = 32 + +Length of key in bytes. + +#### nacl.secretbox.nonceLength = 24 + +Length of nonce in bytes. + +#### nacl.secretbox.overheadLength = 16 + +Length of overhead added to secret box compared to original message. + + +### Scalar multiplication + +Implements *curve25519*. + +#### nacl.scalarMult(n, p) + +Multiplies an integer `n` by a group element `p` and returns the resulting +group element. + +#### nacl.scalarMult.base(n) + +Multiplies an integer `n` by a standard group element and returns the resulting +group element. + +#### nacl.scalarMult.scalarLength = 32 + +Length of scalar in bytes. + +#### nacl.scalarMult.groupElementLength = 32 + +Length of group element in bytes. + + +### Signatures + +Implements [ed25519](http://ed25519.cr.yp.to). + +#### nacl.sign.keyPair() + +Generates new random key pair for signing and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 64-byte secret key + } + +#### nacl.sign.keyPair.fromSecretKey(secretKey) + +Returns a signing key pair with public key corresponding to the given +64-byte secret key. The secret key must have been generated by +`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. + +#### nacl.sign.keyPair.fromSeed(seed) + +Returns a new signing key pair generated deterministically from a 32-byte seed. +The seed must contain enough entropy to be secure. This method is not +recommended for general use: instead, use `nacl.sign.keyPair` to generate a new +key pair from a random seed. + +#### nacl.sign(message, secretKey) + +Signs the message using the secret key and returns a signed message. + +#### nacl.sign.open(signedMessage, publicKey) + +Verifies the signed message and returns the message without signature. + +Returns `null` if verification failed. + +#### nacl.sign.detached(message, secretKey) + +Signs the message using the secret key and returns a signature. + +#### nacl.sign.detached.verify(message, signature, publicKey) + +Verifies the signature for the message and returns `true` if verification +succeeded or `false` if it failed. + +#### nacl.sign.publicKeyLength = 32 + +Length of signing public key in bytes. + +#### nacl.sign.secretKeyLength = 64 + +Length of signing secret key in bytes. + +#### nacl.sign.seedLength = 32 + +Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. + +#### nacl.sign.signatureLength = 64 + +Length of signature in bytes. + + +### Hashing + +Implements *SHA-512*. + +#### nacl.hash(message) + +Returns SHA-512 hash of the message. + +#### nacl.hash.hashLength = 64 + +Length of hash in bytes. + + +### Random bytes generation + +#### nacl.randomBytes(length) + +Returns a `Uint8Array` of the given length containing random bytes of +cryptographic quality. + +**Implementation note** + +TweetNaCl.js uses the following methods to generate random bytes, +depending on the platform it runs on: + +* `window.crypto.getRandomValues` (WebCrypto standard) +* `window.msCrypto.getRandomValues` (Internet Explorer 11) +* `crypto.randomBytes` (Node.js) + +If the platform doesn't provide a suitable PRNG, the following functions, +which require random numbers, will throw exception: + +* `nacl.randomBytes` +* `nacl.box.keyPair` +* `nacl.sign.keyPair` + +Other functions are deterministic and will continue working. + +If a platform you are targeting doesn't implement secure random number +generator, but you somehow have a cryptographically-strong source of entropy +(not `Math.random`!), and you know what you are doing, you can plug it into +TweetNaCl.js like this: + + nacl.setPRNG(function(x, n) { + // ... copy n random bytes into x ... + }); + +Note that `nacl.setPRNG` *completely replaces* internal random byte generator +with the one provided. + + +### Constant-time comparison + +#### nacl.verify(x, y) + +Compares `x` and `y` in constant time and returns `true` if their lengths are +non-zero and equal, and their contents are equal. + +Returns `false` if either of the arguments has zero length, or arguments have +different lengths, or their contents differ. + + +System requirements +------------------- + +TweetNaCl.js supports modern browsers that have a cryptographically secure +pseudorandom number generator and typed arrays, including the latest versions +of: + +* Chrome +* Firefox +* Safari (Mac, iOS) +* Internet Explorer 11 + +Other systems: + +* Node.js + + +Development and testing +------------------------ + +Install NPM modules needed for development: + + $ npm install + +To build minified versions: + + $ npm run build + +Tests use minified version, so make sure to rebuild it every time you change +`nacl.js` or `nacl-fast.js`. + +### Testing + +To run tests in Node.js: + + $ npm run test-node + +By default all tests described here work on `nacl.min.js`. To test other +versions, set environment variable `NACL_SRC` to the file name you want to test. +For example, the following command will test fast minified version: + + $ NACL_SRC=nacl-fast.min.js npm run test-node + +To run full suite of tests in Node.js, including comparing outputs of +JavaScript port to outputs of the original C version: + + $ npm run test-node-all + +To prepare tests for browsers: + + $ npm run build-test-browser + +and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to +run them. + +To run headless browser tests with `tape-run` (powered by Electron): + + $ npm run test-browser + +(If you get `Error: spawn ENOENT`, install *xvfb*: `sudo apt-get install xvfb`.) + +To run tests in both Node and Electron: + + $ npm test + +### Benchmarking + +To run benchmarks in Node.js: + + $ npm run bench + $ NACL_SRC=nacl-fast.min.js npm run bench + +To run benchmarks in a browser, open `test/benchmark/bench.html` (or +`test/benchmark/bench-fast.html`). + + +Benchmarks +---------- + +For reference, here are benchmarks from MacBook Pro (Retina, 13-inch, Mid 2014) +laptop with 2.6 GHz Intel Core i5 CPU (Intel) in Chrome 53/OS X and Xiaomi Redmi +Note 3 smartphone with 1.8 GHz Qualcomm Snapdragon 650 64-bit CPU (ARM) in +Chrome 52/Android: + +| | nacl.js Intel | nacl-fast.js Intel | nacl.js ARM | nacl-fast.js ARM | +| ------------- |:-------------:|:-------------------:|:-------------:|:-----------------:| +| salsa20 | 1.3 MB/s | 128 MB/s | 0.4 MB/s | 43 MB/s | +| poly1305 | 13 MB/s | 171 MB/s | 4 MB/s | 52 MB/s | +| hash | 4 MB/s | 34 MB/s | 0.9 MB/s | 12 MB/s | +| secretbox 1K | 1113 op/s | 57583 op/s | 334 op/s | 14227 op/s | +| box 1K | 145 op/s | 718 op/s | 37 op/s | 368 op/s | +| scalarMult | 171 op/s | 733 op/s | 56 op/s | 380 op/s | +| sign | 77 op/s | 200 op/s | 20 op/s | 61 op/s | +| sign.open | 39 op/s | 102 op/s | 11 op/s | 31 op/s | + +(You can run benchmarks on your devices by clicking on the links at the bottom +of the [home page](https://tweetnacl.js.org)). + +In short, with *nacl-fast.js* and 1024-byte messages you can expect to encrypt and +authenticate more than 57000 messages per second on a typical laptop or more than +14000 messages per second on a $170 smartphone, sign about 200 and verify 100 +messages per second on a laptop or 60 and 30 messages per second on a smartphone, +per CPU core (with Web Workers you can do these operations in parallel), +which is good enough for most applications. + + +Contributors +------------ + +See AUTHORS.md file. + + +Third-party libraries based on TweetNaCl.js +------------------------------------------- + +* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation +* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption +* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) +* [chloride](https://github.com/dominictarr/chloride) - unified API for various NaCl modules + + +Who uses it +----------- + +Some notable users of TweetNaCl.js: + +* [miniLock](http://minilock.io/) +* [Stellar](https://www.stellar.org/) diff --git a/node_modules/tweetnacl/nacl-fast.js b/node_modules/tweetnacl/nacl-fast.js new file mode 100644 index 000000000..5e4562fe8 --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.js @@ -0,0 +1,2388 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +// TODO: Completely remove this in v0.15. +if (!nacl.util) { + nacl.util = {}; + nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { + throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); + }; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl-fast.min.js b/node_modules/tweetnacl/nacl-fast.min.js new file mode 100644 index 000000000..8bc47daa0 --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.min.js @@ -0,0 +1,2 @@ +!function(r){"use strict";function t(r,t,n,e){r[t]=n>>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function n(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function e(r,t,e,o){return n(r,t,e,o,16)}function o(r,t,e,o){return n(r,t,e,o,32)}function i(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;d=d+i|0,U=U+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+c|0,B=B+u|0,S=S+y|0,K=K+l|0,T=T+w|0,Y=Y+p|0,k=k+v|0,L=L+b|0,z=z+g|0,R=R+_|0,P=P+A|0,r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=U>>>0&255,r[5]=U>>>8&255,r[6]=U>>>16&255,r[7]=U>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=K>>>0&255,r[33]=K>>>8&255,r[34]=K>>>16&255,r[35]=K>>>24&255,r[36]=T>>>0&255,r[37]=T>>>8&255,r[38]=T>>>16&255,r[39]=T>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=k>>>0&255,r[45]=k>>>8&255,r[46]=k>>>16&255,r[47]=k>>>24&255,r[48]=L>>>0&255,r[49]=L>>>8&255,r[50]=L>>>16&255,r[51]=L>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}function h(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=m>>>0&255,r[5]=m>>>8&255,r[6]=m>>>16&255,r[7]=m>>>24&255,r[8]=Y>>>0&255,r[9]=Y>>>8&255,r[10]=Y>>>16&255,r[11]=Y>>>24&255,r[12]=P>>>0&255,r[13]=P>>>8&255,r[14]=P>>>16&255,r[15]=P>>>24&255,r[16]=B>>>0&255,r[17]=B>>>8&255,r[18]=B>>>16&255,r[19]=B>>>24&255,r[20]=S>>>0&255,r[21]=S>>>8&255,r[22]=S>>>16&255,r[23]=S>>>24&255,r[24]=K>>>0&255,r[25]=K>>>8&255,r[26]=K>>>16&255,r[27]=K>>>24&255,r[28]=T>>>0&255,r[29]=T>>>8&255,r[30]=T>>>16&255,r[31]=T>>>24&255}function a(r,t,n,e){i(r,t,n,e)}function f(r,t,n,e){h(r,t,n,e)}function s(r,t,n,e,o,i,h){var f,s,c=new Uint8Array(16),u=new Uint8Array(64);for(s=0;s<16;s++)c[s]=0;for(s=0;s<8;s++)c[s]=i[s];for(;o>=64;){for(a(u,c,h,ur),s=0;s<64;s++)r[t+s]=n[e+s]^u[s];for(f=1,s=8;s<16;s++)f=f+(255&c[s])|0,c[s]=255&f,f>>>=8;o-=64,t+=64,e+=64}if(o>0)for(a(u,c,h,ur),s=0;s=64;){for(a(s,f,o,ur),h=0;h<64;h++)r[t+h]=s[h];for(i=1,h=8;h<16;h++)i=i+(255&f[h])|0,f[h]=255&i,i>>>=8;n-=64,t+=64}if(n>0)for(a(s,f,o,ur),h=0;h>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,_(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function d(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return A(n,r),A(e,t),o(n,0,e,0)}function U(r){var t=new Uint8Array(32);return A(t,r),1&t[0]}function E(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function x(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function M(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function m(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,c=0,u=0,y=0,l=0,w=0,p=0,v=0,b=0,g=0,_=0,A=0,d=0,U=0,E=0,x=0,M=0,m=0,B=0,S=0,K=0,T=0,Y=0,k=0,L=0,z=0,R=0,P=n[0],O=n[1],N=n[2],C=n[3],F=n[4],I=n[5],G=n[6],Z=n[7],j=n[8],q=n[9],V=n[10],X=n[11],D=n[12],H=n[13],J=n[14],Q=n[15];e=t[0],i+=e*P,h+=e*O,a+=e*N,f+=e*C,s+=e*F,c+=e*I,u+=e*G,y+=e*Z,l+=e*j,w+=e*q,p+=e*V,v+=e*X,b+=e*D,g+=e*H,_+=e*J,A+=e*Q,e=t[1],h+=e*P,a+=e*O,f+=e*N,s+=e*C,c+=e*F,u+=e*I,y+=e*G,l+=e*Z,w+=e*j,p+=e*q,v+=e*V,b+=e*X,g+=e*D,_+=e*H,A+=e*J,d+=e*Q,e=t[2],a+=e*P,f+=e*O,s+=e*N,c+=e*C,u+=e*F,y+=e*I,l+=e*G,w+=e*Z,p+=e*j,v+=e*q,b+=e*V,g+=e*X,_+=e*D,A+=e*H,d+=e*J,U+=e*Q,e=t[3],f+=e*P,s+=e*O,c+=e*N,u+=e*C,y+=e*F,l+=e*I,w+=e*G,p+=e*Z,v+=e*j,b+=e*q,g+=e*V,_+=e*X,A+=e*D,d+=e*H,U+=e*J,E+=e*Q,e=t[4],s+=e*P,c+=e*O,u+=e*N,y+=e*C,l+=e*F,w+=e*I,p+=e*G,v+=e*Z,b+=e*j,g+=e*q,_+=e*V,A+=e*X,d+=e*D,U+=e*H,E+=e*J,x+=e*Q,e=t[5],c+=e*P,u+=e*O,y+=e*N,l+=e*C,w+=e*F,p+=e*I,v+=e*G,b+=e*Z,g+=e*j,_+=e*q,A+=e*V,d+=e*X,U+=e*D,E+=e*H,x+=e*J,M+=e*Q,e=t[6],u+=e*P,y+=e*O,l+=e*N,w+=e*C,p+=e*F,v+=e*I,b+=e*G,g+=e*Z,_+=e*j,A+=e*q,d+=e*V,U+=e*X,E+=e*D,x+=e*H,M+=e*J,m+=e*Q,e=t[7],y+=e*P,l+=e*O,w+=e*N,p+=e*C,v+=e*F,b+=e*I,g+=e*G,_+=e*Z,A+=e*j,d+=e*q,U+=e*V,E+=e*X,x+=e*D,M+=e*H,m+=e*J,B+=e*Q,e=t[8],l+=e*P,w+=e*O,p+=e*N,v+=e*C,b+=e*F,g+=e*I,_+=e*G,A+=e*Z,d+=e*j,U+=e*q,E+=e*V,x+=e*X,M+=e*D,m+=e*H,B+=e*J,S+=e*Q,e=t[9],w+=e*P,p+=e*O,v+=e*N,b+=e*C,g+=e*F,_+=e*I,A+=e*G,d+=e*Z,U+=e*j,E+=e*q,x+=e*V,M+=e*X,m+=e*D,B+=e*H,S+=e*J,K+=e*Q,e=t[10],p+=e*P,v+=e*O,b+=e*N,g+=e*C,_+=e*F,A+=e*I,d+=e*G,U+=e*Z,E+=e*j,x+=e*q,M+=e*V,m+=e*X,B+=e*D,S+=e*H,K+=e*J,T+=e*Q,e=t[11],v+=e*P,b+=e*O,g+=e*N,_+=e*C,A+=e*F,d+=e*I,U+=e*G,E+=e*Z,x+=e*j,M+=e*q,m+=e*V,B+=e*X;S+=e*D;K+=e*H,T+=e*J,Y+=e*Q,e=t[12],b+=e*P,g+=e*O,_+=e*N,A+=e*C,d+=e*F,U+=e*I,E+=e*G,x+=e*Z,M+=e*j,m+=e*q,B+=e*V,S+=e*X,K+=e*D,T+=e*H,Y+=e*J,k+=e*Q,e=t[13],g+=e*P,_+=e*O,A+=e*N,d+=e*C,U+=e*F,E+=e*I,x+=e*G,M+=e*Z,m+=e*j,B+=e*q,S+=e*V,K+=e*X,T+=e*D,Y+=e*H,k+=e*J,L+=e*Q,e=t[14],_+=e*P,A+=e*O,d+=e*N,U+=e*C,E+=e*F,x+=e*I,M+=e*G,m+=e*Z,B+=e*j,S+=e*q,K+=e*V,T+=e*X,Y+=e*D,k+=e*H,L+=e*J,z+=e*Q,e=t[15],A+=e*P,d+=e*O,U+=e*N,E+=e*C,x+=e*F,M+=e*I,m+=e*G,B+=e*Z,S+=e*j,K+=e*q,T+=e*V,Y+=e*X,k+=e*D,L+=e*H,z+=e*J,R+=e*Q,i+=38*d,h+=38*U,a+=38*E,f+=38*x,s+=38*M,c+=38*m,u+=38*B,y+=38*S,l+=38*K,w+=38*T,p+=38*Y,v+=38*k,b+=38*L,g+=38*z,_+=38*R,o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=c,r[6]=u,r[7]=y,r[8]=l,r[9]=w,r[10]=p,r[11]=v,r[12]=b,r[13]=g;r[14]=_;r[15]=A}function B(r,t){m(r,t,t)}function S(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=253;n>=0;n--)B(e,e),2!==n&&4!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function K(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=250;n>=0;n--)B(e,e),1!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function T(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=$(),f=$(),s=$(),c=$(),u=$(),y=$();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,E(h,n),o=0;o<16;o++)f[o]=h[o],c[o]=a[o]=s[o]=0;for(a[0]=c[0]=1,o=254;o>=0;--o)e=i[o>>>3]>>>(7&o)&1,_(a,f,e),_(s,c,e),x(u,a,s),M(a,a,s),x(s,f,c),M(f,f,c),B(c,u),B(y,a),m(a,s,a),m(s,f,u),x(u,a,s),M(a,a,s),B(f,a),M(s,c,y),m(a,s,ir),x(a,a,c),m(s,s,a),m(a,c,y),m(c,f,h),B(f,u),_(a,f,e),_(s,c,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=c[o];var l=h.subarray(32),w=h.subarray(16);return S(l,l),m(w,w,l),A(r,w),0}function Y(r,t){return T(r,t,nr)}function k(r,t){return rr(t,32),Y(r,t)}function L(r,t,n){var e=new Uint8Array(32);return T(e,n,t),f(r,tr,e,ur)}function z(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),lr(r,t,n,e,h)}function R(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),wr(r,t,n,e,h)}function P(r,t,n,e){for(var o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U,E,x,M,m,B,S,K,T=new Int32Array(16),Y=new Int32Array(16),k=r[0],L=r[1],z=r[2],R=r[3],P=r[4],O=r[5],N=r[6],C=r[7],F=t[0],I=t[1],G=t[2],Z=t[3],j=t[4],q=t[5],V=t[6],X=t[7],D=0;e>=128;){for(U=0;U<16;U++)E=8*U+D,T[U]=n[E+0]<<24|n[E+1]<<16|n[E+2]<<8|n[E+3],Y[U]=n[E+4]<<24|n[E+5]<<16|n[E+6]<<8|n[E+7];for(U=0;U<80;U++)if(o=k,i=L,h=z,a=R,f=P,s=O,c=N,u=C,y=F,l=I,w=G,p=Z,v=j,b=q,g=V,_=X,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(P>>>14|j<<18)^(P>>>18|j<<14)^(j>>>9|P<<23),M=(j>>>14|P<<18)^(j>>>18|P<<14)^(P>>>9|j<<23),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=P&O^~P&N,M=j&q^~j&V,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=pr[2*U],M=pr[2*U+1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=T[U%16],M=Y[U%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,A=65535&S|K<<16,d=65535&m|B<<16,x=A,M=d,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(k>>>28|F<<4)^(F>>>2|k<<30)^(F>>>7|k<<25),M=(F>>>28|k<<4)^(k>>>2|F<<30)^(k>>>7|F<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=k&L^k&z^L&z,M=F&I^F&G^I&G,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,u=65535&S|K<<16,_=65535&m|B<<16,x=a,M=p,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=A,M=d,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,a=65535&S|K<<16,p=65535&m|B<<16,L=o,z=i,R=h,P=a,O=f,N=s,C=c,k=u,I=y,G=l,Z=w,j=p,q=v,V=b,X=g,F=_,U%16===15)for(E=0;E<16;E++)x=T[E],M=Y[E],m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=T[(E+9)%16],M=Y[(E+9)%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+1)%16],d=Y[(E+1)%16],x=(A>>>1|d<<31)^(A>>>8|d<<24)^A>>>7,M=(d>>>1|A<<31)^(d>>>8|A<<24)^(d>>>7|A<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+14)%16],d=Y[(E+14)%16],x=(A>>>19|d<<13)^(d>>>29|A<<3)^A>>>6,M=(d>>>19|A<<13)^(A>>>29|d<<3)^(d>>>6|A<<26),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,T[E]=65535&S|K<<16,Y[E]=65535&m|B<<16;x=k,M=F,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[0],M=t[0],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[0]=k=65535&S|K<<16,t[0]=F=65535&m|B<<16,x=L,M=I,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[1],M=t[1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[1]=L=65535&S|K<<16,t[1]=I=65535&m|B<<16,x=z,M=G,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[2],M=t[2],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[2]=z=65535&S|K<<16,t[2]=G=65535&m|B<<16,x=R,M=Z,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[3],M=t[3],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[3]=R=65535&S|K<<16,t[3]=Z=65535&m|B<<16,x=P,M=j,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[4],M=t[4],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[4]=P=65535&S|K<<16,t[4]=j=65535&m|B<<16,x=O,M=q,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[5],M=t[5],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[5]=O=65535&S|K<<16,t[5]=q=65535&m|B<<16,x=N,M=V,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[6],M=t[6],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[6]=N=65535&S|K<<16,t[6]=V=65535&m|B<<16,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[7],M=t[7],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[7]=C=65535&S|K<<16,t[7]=X=65535&m|B<<16,D+=128,e-=128}return e}function O(r,n,e){var o,i=new Int32Array(8),h=new Int32Array(8),a=new Uint8Array(256),f=e;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,h[0]=4089235720,h[1]=2227873595,h[2]=4271175723,h[3]=1595750129,h[4]=2917565137,h[5]=725511199,h[6]=4215389547,h[7]=327033209,P(i,h,n,e),e%=128,o=0;o=0;--o)e=n[o/8|0]>>(7&o)&1,C(r,t,e),N(t,r),N(r,r),C(r,t,e)}function G(r,t){var n=[$(),$(),$(),$()];b(n[0],fr),b(n[1],sr),b(n[2],or),m(n[3],fr,sr),I(r,n,t)}function Z(r,t,n){var e,o=new Uint8Array(64),i=[$(),$(),$(),$()];for(n||rr(t,32),O(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,G(i,o),F(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}function j(r,t){var n,e,o,i;for(e=63;e>=32;--e){for(n=0,o=e-32,i=e-12;o>8,t[o]-=256*n;t[o]+=n,t[e]=0}for(n=0,o=0;o<32;o++)t[o]+=n-(t[31]>>4)*vr[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*vr[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function q(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;j(r,n)}function V(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),c=[$(),$(),$(),$()];O(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var u=n+64;for(o=0;o>7&&M(r[0],er,r[0]),m(r[3],r[0],r[1]),0)}function D(r,t,n,e){var i,h,a=new Uint8Array(32),f=new Uint8Array(64),s=[$(),$(),$(),$()],c=[$(),$(),$(),$()];if(h=-1,n<64)return-1;if(X(c,e))return-1;for(i=0;i>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};yr.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],K=this.h[6],T=this.h[7],Y=this.h[8],k=this.h[9],L=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],O=this.r[4],N=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],G=this.r[9];n>=16;)e=255&r[t+0]|(255&r[t+1])<<8,E+=8191&e,o=255&r[t+2]|(255&r[t+3])<<8,x+=8191&(e>>>13|o<<3),i=255&r[t+4]|(255&r[t+5])<<8,M+=8191&(o>>>10|i<<6),h=255&r[t+6]|(255&r[t+7])<<8,m+=8191&(i>>>7|h<<9),a=255&r[t+8]|(255&r[t+9])<<8,B+=8191&(h>>>4|a<<12),S+=a>>>1&8191,f=255&r[t+10]|(255&r[t+11])<<8,K+=8191&(a>>>14|f<<2),s=255&r[t+12]|(255&r[t+13])<<8,T+=8191&(f>>>11|s<<5),c=255&r[t+14]|(255&r[t+15])<<8,Y+=8191&(s>>>8|c<<8),k+=c>>>5|U,u=0,y=u,y+=E*L,y+=x*(5*G),y+=M*(5*I),y+=m*(5*F),y+=B*(5*C),u=y>>>13,y&=8191,y+=S*(5*N),y+=K*(5*O),y+=T*(5*P),y+=Y*(5*R),y+=k*(5*z),u+=y>>>13,y&=8191,l=u,l+=E*z,l+=x*L,l+=M*(5*G),l+=m*(5*I),l+=B*(5*F),u=l>>>13,l&=8191,l+=S*(5*C),l+=K*(5*N),l+=T*(5*O),l+=Y*(5*P),l+=k*(5*R),u+=l>>>13,l&=8191,w=u,w+=E*R,w+=x*z,w+=M*L,w+=m*(5*G),w+=B*(5*I),u=w>>>13,w&=8191,w+=S*(5*F),w+=K*(5*C),w+=T*(5*N),w+=Y*(5*O),w+=k*(5*P),u+=w>>>13,w&=8191,p=u,p+=E*P,p+=x*R,p+=M*z,p+=m*L,p+=B*(5*G),u=p>>>13,p&=8191,p+=S*(5*I),p+=K*(5*F),p+=T*(5*C),p+=Y*(5*N),p+=k*(5*O),u+=p>>>13,p&=8191,v=u,v+=E*O,v+=x*P,v+=M*R,v+=m*z,v+=B*L,u=v>>>13,v&=8191,v+=S*(5*G),v+=K*(5*I),v+=T*(5*F),v+=Y*(5*C),v+=k*(5*N),u+=v>>>13,v&=8191,b=u,b+=E*N,b+=x*O,b+=M*P,b+=m*R,b+=B*z,u=b>>>13,b&=8191,b+=S*L,b+=K*(5*G),b+=T*(5*I),b+=Y*(5*F),b+=k*(5*C),u+=b>>>13,b&=8191,g=u,g+=E*C,g+=x*N,g+=M*O,g+=m*P,g+=B*R,u=g>>>13,g&=8191,g+=S*z,g+=K*L,g+=T*(5*G),g+=Y*(5*I),g+=k*(5*F),u+=g>>>13,g&=8191,_=u,_+=E*F,_+=x*C,_+=M*N,_+=m*O,_+=B*P,u=_>>>13,_&=8191,_+=S*R,_+=K*z,_+=T*L,_+=Y*(5*G),_+=k*(5*I),u+=_>>>13,_&=8191,A=u,A+=E*I,A+=x*F,A+=M*C,A+=m*N,A+=B*O,u=A>>>13,A&=8191,A+=S*P,A+=K*R,A+=T*z,A+=Y*L,A+=k*(5*G),u+=A>>>13,A&=8191,d=u,d+=E*G,d+=x*I,d+=M*F,d+=m*C,d+=B*N,u=d>>>13,d&=8191,d+=S*O,d+=K*P,d+=T*R,d+=Y*z,d+=k*L,u+=d>>>13,d&=8191,u=(u<<2)+u|0,u=u+y|0,y=8191&u,u>>>=13,l+=u,E=y,x=l,M=w,m=p,B=v,S=b,K=g,T=_,Y=A,k=d,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=K,this.h[7]=T,this.h[8]=Y,this.h[9]=k},yr.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},yr.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(o=16-this.leftover,o>n&&(o=n),e=0;e=16&&(o=n-n%16,this.blocks(r,t,o),t+=o,n-=o),n){for(e=0;e=0},r.sign.keyPair=function(){var r=new Uint8Array(Tr),t=new Uint8Array(Yr);return Z(r,t),{publicKey:r,secretKey:t}},r.sign.keyPair.fromSecretKey=function(r){if(Q(r),r.length!==Yr)throw new Error("bad secret key size");for(var t=new Uint8Array(Tr),n=0;n void): void; +} diff --git a/node_modules/tweetnacl/nacl.js b/node_modules/tweetnacl/nacl.js new file mode 100644 index 000000000..f72dd78d1 --- /dev/null +++ b/node_modules/tweetnacl/nacl.js @@ -0,0 +1,1175 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function L32(x, c) { return (x << c) | (x >>> (32 - c)); } + +function ld32(x, i) { + var u = x[i+3] & 0xff; + u = (u<<8)|(x[i+2] & 0xff); + u = (u<<8)|(x[i+1] & 0xff); + return (u<<8)|(x[i+0] & 0xff); +} + +function dl64(x, i) { + var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; + var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; + return new u64(h, l); +} + +function st32(x, j, u) { + var i; + for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } +} + +function ts64(x, i, u) { + x[i] = (u.hi >> 24) & 0xff; + x[i+1] = (u.hi >> 16) & 0xff; + x[i+2] = (u.hi >> 8) & 0xff; + x[i+3] = u.hi & 0xff; + x[i+4] = (u.lo >> 24) & 0xff; + x[i+5] = (u.lo >> 16) & 0xff; + x[i+6] = (u.lo >> 8) & 0xff; + x[i+7] = u.lo & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core(out,inp,k,c,h) { + var w = new Uint32Array(16), x = new Uint32Array(16), + y = new Uint32Array(16), t = new Uint32Array(4); + var i, j, m; + + for (i = 0; i < 4; i++) { + x[5*i] = ld32(c, 4*i); + x[1+i] = ld32(k, 4*i); + x[6+i] = ld32(inp, 4*i); + x[11+i] = ld32(k, 16+4*i); + } + + for (i = 0; i < 16; i++) y[i] = x[i]; + + for (i = 0; i < 20; i++) { + for (j = 0; j < 4; j++) { + for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; + t[1] ^= L32((t[0]+t[3])|0, 7); + t[2] ^= L32((t[1]+t[0])|0, 9); + t[3] ^= L32((t[2]+t[1])|0,13); + t[0] ^= L32((t[3]+t[2])|0,18); + for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; + } + for (m = 0; m < 16; m++) x[m] = w[m]; + } + + if (h) { + for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; + for (i = 0; i < 4; i++) { + x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; + x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; + } + for (i = 0; i < 4; i++) { + st32(out,4*i,x[5*i]); + st32(out,16+4*i,x[6+i]); + } + } else { + for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); + } +} + +function crypto_core_salsa20(out,inp,k,c) { + core(out,inp,k,c,false); + return 0; +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core(out,inp,k,c,true); + return 0; +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + if (!b) return 0; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + if (m) mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,d,n,k) { + return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); +} + +function add1305(h, c) { + var j, u = 0; + for (j = 0; j < 17; j++) { + u = (u + ((h[j] + c[j]) | 0)) | 0; + h[j] = u & 255; + u >>>= 8; + } +} + +var minusp = new Uint32Array([ + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 +]); + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s, i, j, u; + var x = new Uint32Array(17), r = new Uint32Array(17), + h = new Uint32Array(17), c = new Uint32Array(17), + g = new Uint32Array(17); + for (j = 0; j < 17; j++) r[j]=h[j]=0; + for (j = 0; j < 16; j++) r[j]=k[j]; + r[3]&=15; + r[4]&=252; + r[7]&=15; + r[8]&=252; + r[11]&=15; + r[12]&=252; + r[15]&=15; + + while (n > 0) { + for (j = 0; j < 17; j++) c[j] = 0; + for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; + c[j] = 1; + mpos += j; n -= j; + add1305(h,c); + for (i = 0; i < 17; i++) { + x[i] = 0; + for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; + } + for (i = 0; i < 17; i++) h[i] = x[i]; + u = 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u & 3; + u = (5 * (u >>> 2)) | 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u; + } + + for (j = 0; j < 17; j++) g[j] = h[j]; + add1305(h,minusp); + s = (-(h[16] >>> 7) | 0); + for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); + + for (j = 0; j < 16; j++) c[j] = k[j + 16]; + c[16] = 0; + add1305(h,c); + for (j = 0; j < 16; j++) out[outpos+j] = h[j]; + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var c; + var i; + for (i = 0; i < 16; i++) { + o[i] += 65536; + c = Math.floor(o[i] / 65536); + o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); + o[i] -= (c * 65536); + } +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; +} + +function Z(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; +} + +function M(o, a, b) { + var i, j, t = new Float64Array(31); + for (i = 0; i < 31; i++) t[i] = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + t[i+j] += a[i] * b[j]; + } + } + for (i = 0; i < 15; i++) { + t[i] += 38 * t[i+16]; + } + for (i = 0; i < 16; i++) o[i] = t[i]; + car25519(o); + car25519(o); +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +function add64() { + var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; + for (i = 0; i < arguments.length; i++) { + l = arguments[i].lo; + h = arguments[i].hi; + a += (l & m16); b += (l >>> 16); + c += (h & m16); d += (h >>> 16); + } + + b += (a >>> 16); + c += (b >>> 16); + d += (c >>> 16); + + return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); +} + +function shr64(x, c) { + return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); +} + +function xor64() { + var l = 0, h = 0, i; + for (i = 0; i < arguments.length; i++) { + l ^= arguments[i].lo; + h ^= arguments[i].hi; + } + return new u64(h, l); +} + +function R(x, c) { + var h, l, c1 = 32 - c; + if (c < 32) { + h = (x.hi >>> c) | (x.lo << c1); + l = (x.lo >>> c) | (x.hi << c1); + } else if (c < 64) { + h = (x.lo >>> c) | (x.hi << c1); + l = (x.hi >>> c) | (x.lo << c1); + } + return new u64(h, l); +} + +function Ch(x, y, z) { + var h = (x.hi & y.hi) ^ (~x.hi & z.hi), + l = (x.lo & y.lo) ^ (~x.lo & z.lo); + return new u64(h, l); +} + +function Maj(x, y, z) { + var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), + l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); + return new u64(h, l); +} + +function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } +function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } +function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } +function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } + +var K = [ + new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), + new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), + new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), + new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), + new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), + new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), + new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), + new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), + new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), + new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), + new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), + new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), + new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), + new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), + new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), + new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), + new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), + new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), + new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), + new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), + new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), + new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), + new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), + new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), + new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), + new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), + new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), + new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), + new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), + new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), + new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), + new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), + new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), + new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), + new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), + new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), + new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), + new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), + new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), + new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) +]; + +function crypto_hashblocks(x, m, n) { + var z = [], b = [], a = [], w = [], t, i, j; + + for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); + for (i = 0; i < 80; i++) { + for (j = 0; j < 8; j++) b[j] = a[j]; + t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); + b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); + b[3] = add64(b[3], t); + for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); + } + } + } + + for (i = 0; i < 8; i++) { + a[i] = add64(a[i], z[i]); + z[i] = a[i]; + } + + pos += 128; + n -= 128; + } + + for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); + return n; +} + +var iv = new Uint8Array([ + 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, + 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, + 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, + 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, + 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, + 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, + 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, + 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 +]); + +function crypto_hash(out, m, n) { + var h = new Uint8Array(64), x = new Uint8Array(256); + var i, b = n; + + for (i = 0; i < 64; i++) h[i] = iv[i]; + + crypto_hashblocks(h, m, n); + n %= 128; + + for (i = 0; i < 256; i++) x[i] = 0; + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); + crypto_hashblocks(h, x, n); + + for (i = 0; i < 64; i++) out[i] = h[i]; + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + mlen = -1; + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +// TODO: Completely remove this in v0.15. +if (!nacl.util) { + nacl.util = {}; + nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { + throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); + }; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl.min.js b/node_modules/tweetnacl/nacl.min.js new file mode 100644 index 000000000..4484974e6 --- /dev/null +++ b/node_modules/tweetnacl/nacl.min.js @@ -0,0 +1 @@ +!function(r){"use strict";function n(r,n){return r<>>32-n}function e(r,n){var e=255&r[n+3];return e=e<<8|255&r[n+2],e=e<<8|255&r[n+1],e<<8|255&r[n+0]}function t(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new sr(e,t)}function o(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function i(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function a(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function f(r,n,e,t){return a(r,n,e,t,16)}function u(r,n,e,t){return a(r,n,e,t,32)}function c(r,t,i,a,f){var u,c,w,y=new Uint32Array(16),l=new Uint32Array(16),s=new Uint32Array(16),h=new Uint32Array(4);for(u=0;u<4;u++)l[5*u]=e(a,4*u),l[1+u]=e(i,4*u),l[6+u]=e(t,4*u),l[11+u]=e(i,16+4*u);for(u=0;u<16;u++)s[u]=l[u];for(u=0;u<20;u++){for(c=0;c<4;c++){for(w=0;w<4;w++)h[w]=l[(5*c+4*w)%16];for(h[1]^=n(h[0]+h[3]|0,7),h[2]^=n(h[1]+h[0]|0,9),h[3]^=n(h[2]+h[1]|0,13),h[0]^=n(h[3]+h[2]|0,18),w=0;w<4;w++)y[4*c+(c+w)%4]=h[w]}for(w=0;w<16;w++)l[w]=y[w]}if(f){for(u=0;u<16;u++)l[u]=l[u]+s[u]|0;for(u=0;u<4;u++)l[5*u]=l[5*u]-e(a,4*u)|0,l[6+u]=l[6+u]-e(t,4*u)|0;for(u=0;u<4;u++)o(r,4*u,l[5*u]),o(r,16+4*u,l[6+u])}else for(u=0;u<16;u++)o(r,4*u,l[u]+s[u]|0)}function w(r,n,e,t){return c(r,n,e,t,!1),0}function y(r,n,e,t){return c(r,n,e,t,!0),0}function l(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),y=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;o>=64;){for(w(y,c,a,Br),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^y[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(o>0)for(w(y,c,a,Br),u=0;u>>=8}function b(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;o>0;){for(u=0;u<17;u++)s[u]=0;for(u=0;u<16&&u>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(v(l,Sr),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,v(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function p(r,n,e,t,o,i){var a=new Uint8Array(16);return b(a,0,e,t,o,i),f(r,n,a,0)}function _(r,n,e,t,o){var i;if(e<32)return-1;for(g(r,0,n,0,e,t,o),b(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function A(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(h(a,0,32,t,o),0!==p(n,16,n,32,e-32,a))return-1;for(g(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function U(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function E(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function d(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function x(r,n){var e,t,o,i=hr(),a=hr();for(e=0;e<16;e++)a[e]=n[e];for(E(a),E(a),E(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,d(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function m(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return x(e,r),x(t,n),u(e,0,t,0)}function B(r){var n=new Uint8Array(32);return x(n,r),1&n[0]}function S(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function K(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function T(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function Y(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];E(r),E(r)}function L(r,n){Y(r,n,n)}function k(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=253;e>=0;e--)L(t,t),2!==e&&4!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function z(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=250;e>=0;e--)L(t,t),1!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function R(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=hr(),u=hr(),c=hr(),w=hr(),y=hr(),l=hr();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,S(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;o>=0;--o)t=i[o>>>3]>>>(7&o)&1,d(f,u,t),d(c,w,t),K(y,f,c),T(f,f,c),K(c,u,w),T(u,u,w),L(w,y),L(l,f),Y(f,c,f),Y(c,u,y),K(y,f,c),T(f,f,c),L(u,f),T(c,w,l),Y(f,c,Ar),K(f,f,w),Y(c,c,f),Y(f,w,l),Y(w,u,a),L(u,y),d(f,u,t),d(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return k(s,s),Y(h,h,s),x(r,h),0}function P(r,n){return R(r,n,br)}function O(r,n){return gr(n,32),P(r,n)}function F(r,n,e){var t=new Uint8Array(32);return R(t,e,n),y(r,vr,t,Br)}function N(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Kr(r,n,e,t,a)}function C(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Tr(r,n,e,t,a)}function M(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=n&f,a+=n>>>16;return o+=t>>>16,i+=o>>>16,a+=i>>>16,new sr(i&f|a<<16,t&f|o<<16)}function G(r,n){return new sr(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function Z(){var r,n=0,e=0;for(r=0;r>>n|r.lo<>>n|r.hi<>>n|r.hi<>>n|r.lo<=128;){for(a=0;a<16;a++)y[a]=t(n,8*a+l);for(a=0;a<80;a++){for(f=0;f<8;f++)c[f]=w[f];for(o=M(w[7],X(w[4]),q(w[4],w[5],w[6]),Yr[a],y[a%16]),c[7]=M(o,V(w[0]),I(w[0],w[1],w[2])),c[3]=M(c[3],o),f=0;f<8;f++)w[(f+1)%8]=c[f];if(a%16===15)for(f=0;f<16;f++)y[f]=M(y[f],y[(f+9)%16],D(y[(f+1)%16]),H(y[(f+14)%16]))}for(a=0;a<8;a++)w[a]=M(w[a],u[a]),u[a]=w[a];l+=128,e-=128}for(a=0;a<8;a++)i(r,8*a,u[a]);return e}function Q(r,n,e){var t,o=new Uint8Array(64),a=new Uint8Array(256),f=e;for(t=0;t<64;t++)o[t]=Lr[t];for(J(o,n,e),e%=128,t=0;t<256;t++)a[t]=0;for(t=0;t=0;--o)t=e[o/8|0]>>(7&o)&1,$(r,n,t),W(n,r),W(r,r),$(r,n,t)}function er(r,n){var e=[hr(),hr(),hr(),hr()];U(e[0],dr),U(e[1],xr),U(e[2],_r),Y(e[3],dr,xr),nr(r,e,n)}function tr(r,n,e){var t,o=new Uint8Array(64),i=[hr(),hr(),hr(),hr()];for(e||gr(n,32),Q(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),rr(r,i),t=0;t<32;t++)n[t+32]=r[t];return 0}function or(r,n){var e,t,o,i;for(t=63;t>=32;--t){for(e=0,o=t-32,i=t-12;o>8,n[o]-=256*e;n[o]+=e,n[t]=0}for(e=0,o=0;o<32;o++)n[o]+=e-(n[31]>>4)*kr[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*kr[o];for(t=0;t<32;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function ir(r){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=r[n];for(n=0;n<64;n++)r[n]=0;or(r,e)}function ar(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[hr(),hr(),hr(),hr()];Q(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;o>7&&T(r[0],pr,r[0]),Y(r[3],r[0],r[1]),0)}function ur(r,n,e,t){var o,i,a=new Uint8Array(32),f=new Uint8Array(64),c=[hr(),hr(),hr(),hr()],w=[hr(),hr(),hr(),hr()];if(i=-1,e<64)return-1;if(fr(w,t))return-1;for(o=0;o=0},r.sign.keyPair=function(){var r=new Uint8Array(Vr),n=new Uint8Array(Xr);return tr(r,n),{publicKey:r,secretKey:n}},r.sign.keyPair.fromSecretKey=function(r){if(yr(r),r.length!==Xr)throw new Error("bad secret key size");for(var n=new Uint8Array(Vr),e=0;e/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", + "test": "npm run test-node-all && npm run test-browser", + "bench": "node test/benchmark/bench.js", + "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/dchest/tweetnacl-js.git" + }, + "keywords": [ + "crypto", + "cryptography", + "curve25519", + "ed25519", + "encrypt", + "hash", + "key", + "nacl", + "poly1305", + "public", + "salsa20", + "signatures" + ], + "author": "TweetNaCl-js contributors", + "license": "Unlicense", + "bugs": { + "url": "https://github.com/dchest/tweetnacl-js/issues" + }, + "homepage": "https://tweetnacl.js.org", + "devDependencies": { + "browserify": "^13.0.0", + "eslint": "^2.2.0", + "faucet": "^0.0.1", + "tap-browser-color": "^0.1.2", + "tape": "^4.4.0", + "tape-run": "^2.1.3", + "tweetnacl-util": "^0.13.3", + "uglify-js": "^2.6.1" + }, + "browser": { + "buffer": false, + "crypto": false + } +} diff --git a/node_modules/typechecker/.dependabot/config.yml b/node_modules/typechecker/.dependabot/config.yml new file mode 100644 index 000000000..f8efa6f77 --- /dev/null +++ b/node_modules/typechecker/.dependabot/config.yml @@ -0,0 +1,9 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: weekly + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/typechecker/.github/FUNDING.yml b/node_modules/typechecker/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/typechecker/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/typechecker/HISTORY.md b/node_modules/typechecker/HISTORY.md new file mode 100755 index 000000000..3f4e0b858 --- /dev/null +++ b/node_modules/typechecker/HISTORY.md @@ -0,0 +1,139 @@ +# History + +## v4.11.0 2019 November 18 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.10.0 2019 November 18 + +- Converted to TypeScript +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.9.0 2019 November 13 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.8.0 2019 November 8 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.7.0 2018 December 7 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.6.0 2018 September 8 + +- Fixed the false positive of `function(AnArgumentWithAnUpperCaseFirstLetter){}` being detected as a class by `isClass` and `isConventionalClass` +- Swapped flow type annotation with typescript jsdoc annotations +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v4.5.0 2018 February 17 + +- asynchronous functions are now detected as functions, before there was no support for them + - `getType(async function () {})` now returns `function` + - `isFunction(async function () {})` returns `true` + - `isAsyncFunction(async function () {})` returns `true` + - `isSyncFunction(async function () {})` returns `false` + - Thanks to [David Kebler](https://github.com/dkebler) for [issue #17](https://github.com/bevry/typechecker/issues/17) + +## v4.4.1 2017 January 18 + +- Made custom type map argument in `getType` actually work + - Thanks to [David Kebler](https://github.com/dkebler) for [issue #15](https://github.com/bevry/typechecker/issues/15) + +## v4.4.0 2016 November 11 + +- Use `require` over `import` +- More efficient `isObject` check + - Fixes `isObject` and `isPlainObject` not returning booleans in some cases + - Thanks to [athlordJojo](https://github.com/athlordJojo) for [issue #12](https://github.com/bevry/typechecker/issues/12) +- More comprehensive native vs conventional class tests +- Updated base files + - Removes docs being contained in npm package + - Thanks to [Adam Demasi](https://github.com/kirb) for [issue #14](https://github.com/bevry/typechecker/issues/14) +- Updated dependencies + +## v4.3.0 2016 March 21 + +- Removed `getTypes` as it was ambiguous, internal and no one external used it +- Exposed `typeMap` which links types to the methods that check for them, used by `getType` + +## v4.2.1 2016 March 20 + +- Fixed packing issue + +## v4.2.0 2016 March 20 + +- Now defined as individual methods +- Repackaged + +## v4.1.0 2016 January 15 + +- Now defined as a class with static methods instead of an object with functions as that is essentially what it is +- Repackaged + +## v4.0.1 2015 December 9 + +- Updated base files +- Updated dependencies + +## v4.0.0 2015 September 21 + +- Added new `map` and `weakmap` types that the `getType` method can now return +- Added the methods: + - `isMap` (checks for Map instance) + - `isWeakMap` (checks for WeakMap instance) + +## v3.0.0 2015 August 27 + +- Added new `class` type that the `getType` method can now return +- Added the methods: + - `isClass` (checks for native and conventional classes) + - `isNativeClass` (checks for native ES6 classes) + - `isConventionalClass` (checks for functions that start with a capital letter) +- Anonymous compiled/non-native classes may be detected as functions instead of as classes. If you rely on class detection, be aware of this, and document this to your users accordingly. + +## v2.1.0 2015 August 26 + +- Fixed `isEmpty` - it use to return the opposite of what was empty +- Converted from CoffeeScript to ES6+ +- Updated base files +- Everything is now tested thoroughly + +## v2.0.8 2013 November 1 + +- Dropped component.io and bower support, just use ender or browserify + +## v2.0.7 2013 October 27 + +- Re-packaged + +## v2.0.6 2013 September 18 + +- Fixed node release (since v2.0.5) +- Fixed bower release (since v2.0.4) + +## v2.0.5 2013 September 18 + +- Fixed node release (since v2.0.4) + +## v2.0.4 2013 September 18 + +- Fixed cyclic dependency problem on windows (since v2.0.3) +- Added bower support + +## v2.0.3 2013 September 18 + +- Attempt at fixing circular dependency infinite loop (since v2.0.2) + +## v2.0.2 2013 September 18 + +- Added component.io support + +## v2.0.1 2013 March 27 + +- Fixed some package.json properties + +## v2.0.0 2013 March 27 + +- Split typeChecker from [bal-util](https://github.com/balupton/bal-util) diff --git a/node_modules/typechecker/LICENSE.md b/node_modules/typechecker/LICENSE.md new file mode 100644 index 000000000..c69ffc0e0 --- /dev/null +++ b/node_modules/typechecker/LICENSE.md @@ -0,0 +1,24 @@ + + +

      License

      + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

      MIT License

      + +
      +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 (including the next paragraph) 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.
      +
      + + diff --git a/node_modules/typechecker/README.md b/node_modules/typechecker/README.md new file mode 100755 index 000000000..8d02baf3d --- /dev/null +++ b/node_modules/typechecker/README.md @@ -0,0 +1,147 @@ + + +

      TypeChecker

      + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
      +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Utilities to get and check variable types (isString, isPlainObject, isRegExp, etc) + + + + +## Why? + +Why should I use this instead of say `instanceof`? + +Under certain circumstances `instanceof` may not return the correct results. This occurs with [node's vm module](http://nodejs.org/api/vm.html#vm_globals) especially, and circumstances where an object's prototype has been dereferenced from the original. As such, for basic `==` and `===` checks (like `a === null`), you're fine not using this, but for checks when you would have done `instanceof` (like `err instanceof Error`), you should try to use this instead. Plus things like `isEmpty`, `isEmptyObject` and `isPlainObject` are darn useful! + + +## Usage + +[API Documentation](http://master.typechecker.bevry.surge.sh/docs/) + + + + +

      Install

      + +

      npm

      +
        +
      • Install: npm install --save typechecker
      • +
      • Require: require('typechecker')
      • +
      + +

      jspm

      + +``` html + +``` + +

      Editions

      + +

      This package is published with the following editions:

      + +
      • typechecker aliases typechecker/index.js which uses Editions to automatically select the correct edition for the consumers environment
      • +
      • typechecker/source/index.ts is typescript source code with import for modules
      • +
      • typechecker/edition-browsers/index.js is typescript compiled for browsers with import for modules
      • +
      • typechecker/edition-node-13/index.js is typescript compiled for node.js 13 with require for modules
      • +
      • typechecker/edition-node-0.8/index.js is typescript compiled for node.js 0.8 with require for modules
      + + + + + + +

      History

      + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

      Contribute

      + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      Backers

      + +

      Maintainers

      + +These amazing people are maintaining this project: + + + +

      Sponsors

      + +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

      Contributors

      + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      License

      + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/typechecker/edition-browsers/index.js b/node_modules/typechecker/edition-browsers/index.js new file mode 100755 index 000000000..8aeeff0c2 --- /dev/null +++ b/node_modules/typechecker/edition-browsers/index.js @@ -0,0 +1,195 @@ +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/* eslint quote-props:0 */ +// Prepare +var isClassRegex = /^class\s|^function\s+[A-Z]/; +var isConventionalClassRegex = /^function\s+[A-Z]/; +var isNativeClassRegex = /^class\s/; +/** Determines if the passed value is of a specific type */ + +// ----------------------------------- +// Values + +/** Get the object type string */ +export function getObjectType(value) { + return Object.prototype.toString.call(value); +} +/** Checks to see if a value is an object */ + +export function isObject(value) { + // null is object, hence the extra check + return value !== null && _typeof(value) === 'object'; +} +/** Checks to see if a value is an object and only an object */ + +export function isPlainObject(value) { + /* eslint no-proto:0 */ + return isObject(value) && value.__proto__ === Object.prototype; +} +/** Checks to see if a value is empty */ + +export function isEmpty(value) { + return value == null; +} +/** + * Is empty object */ + +export function isEmptyObject(value) { + // We could use Object.keys, but this is more effecient + for (var key in value) { + if (value.hasOwnProperty(key)) { + return false; + } + } + + return true; +} +/** + * Is ES6+ class */ + +export function isNativeClass(value) { + // NOTE TO DEVELOPER: If any of this changes, isClass must also be updated + return typeof value === 'function' && isNativeClassRegex.test(value.toString()); +} +/** + * Is Conventional Class + export * Looks for function with capital first letter MyClass + * First letter is the 9th character + * If changed, isClass must also be updated */ + +export function isConventionalClass(value) { + return typeof value === 'function' && isConventionalClassRegex.test(value.toString()); +} +export // There use to be code here that checked for CoffeeScript's "function _Class" at index 0 (which was sound) +// But it would also check for Babel's __classCallCheck anywhere in the function, which wasn't sound +// as somewhere in the function, another class could be defined, which would provide a false positive +// So instead, proxied classes are ignored, as we can't guarantee their accuracy, would also be an ever growing set +// ----------------------------------- +// Types + +/** + * Is Class */ +function isClass(value) { + return typeof value === 'function' && isClassRegex.test(value.toString()); +} +/** Checks to see if a value is an error */ + +export function isError(value) { + return value instanceof Error; +} +/** Checks to see if a value is a date */ + +export function isDate(value) { + return getObjectType(value) === '[object Date]'; +} +/** Checks to see if a value is an arguments object */ + +export function isArguments(value) { + return getObjectType(value) === '[object Arguments]'; +} +/** + export * Checks to see if a value is a function but not an asynchronous function */ + +export function isSyncFunction(value) { + return getObjectType(value) === '[object Function]'; +} +/** Checks to see if a value is an asynchronous function */ + +export function isAsyncFunction(value) { + return getObjectType(value) === '[object AsyncFunction]'; +} +/** Checks to see if a value is a function */ + +export function isFunction(value) { + return isSyncFunction(value) || isAsyncFunction(value); +} +/** Checks to see if a value is an regex */ + +export function isRegExp(value) { + return getObjectType(value) === '[object RegExp]'; +} +/** Checks to see if a value is an array */ + +export function isArray(value) { + return typeof Array.isArray === 'function' && Array.isArray(value) || getObjectType(value) === '[object Array]'; +} +/** Checks to see if a valule is a number */ + +export function isNumber(value) { + return typeof value === 'number' || getObjectType(value) === '[object Number]'; +} +/** Checks to see if a value is a string */ + +export function isString(value) { + return typeof value === 'string' || getObjectType(value) === '[object String]'; +} +/** Checks to see if a valule is a boolean */ + +export function isBoolean(value) { + return value === true || value === false || getObjectType(value) === '[object Boolean]'; +} +/** Checks to see if a value is null */ + +export function isNull(value) { + return value === null; +} +/** Checks to see if a value is undefined */ + +export function isUndefined(value) { + return typeof value === 'undefined'; +} +/** Checks to see if a value is a Map */ + +export function isMap(value) { + return getObjectType(value) === '[object Map]'; +} +/** Checks to see if a value is a WeakMap */ + +export function isWeakMap(value) { + return getObjectType(value) === '[object WeakMap]'; +} // ----------------------------------- +// General + +/** + * The default {@link TypeMap} for {@link getType}. + export * AsyncFunction and SyncFunction are missing, as they are more specific types that people can detect afterwards. + * @readonly + */ + +export var typeMap = Object.freeze({ + array: isArray, + boolean: isBoolean, + date: isDate, + error: isError, + class: isClass, + function: isFunction, + null: isNull, + number: isNumber, + regexp: isRegExp, + string: isString, + undefined: isUndefined, + map: isMap, + weakmap: isWeakMap, + object: isObject +}); +/** + * Cycle through the passed {@link TypeMap} testing the value, returning the first type that passes, otherwise `null`. + * @param value the value to test + * @param customTypeMap defaults to {@link typeMap} + */ + +export function getType(value) { + var customTypeMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : typeMap; + + // Cycle through our type map + for (var key in customTypeMap) { + if (customTypeMap.hasOwnProperty(key)) { + if (customTypeMap[key](value)) { + return key; + } + } + } // No type was successful + + + return null; +} \ No newline at end of file diff --git a/node_modules/typechecker/edition-node-0.8/index.js b/node_modules/typechecker/edition-node-0.8/index.js new file mode 100755 index 000000000..9fb4a1f66 --- /dev/null +++ b/node_modules/typechecker/edition-node-0.8/index.js @@ -0,0 +1,251 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getObjectType = getObjectType; +exports.isObject = isObject; +exports.isPlainObject = isPlainObject; +exports.isEmpty = isEmpty; +exports.isEmptyObject = isEmptyObject; +exports.isNativeClass = isNativeClass; +exports.isConventionalClass = isConventionalClass; +exports.isClass = isClass; +exports.isError = isError; +exports.isDate = isDate; +exports.isArguments = isArguments; +exports.isSyncFunction = isSyncFunction; +exports.isAsyncFunction = isAsyncFunction; +exports.isFunction = isFunction; +exports.isRegExp = isRegExp; +exports.isArray = isArray; +exports.isNumber = isNumber; +exports.isString = isString; +exports.isBoolean = isBoolean; +exports.isNull = isNull; +exports.isUndefined = isUndefined; +exports.isMap = isMap; +exports.isWeakMap = isWeakMap; +exports.getType = getType; +exports.typeMap = void 0; + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/* eslint quote-props:0 */ +// Prepare +var isClassRegex = /^class\s|^function\s+[A-Z]/; +var isConventionalClassRegex = /^function\s+[A-Z]/; +var isNativeClassRegex = /^class\s/; +/** Determines if the passed value is of a specific type */ + +// ----------------------------------- +// Values + +/** Get the object type string */ +function getObjectType(value) { + return Object.prototype.toString.call(value); +} +/** Checks to see if a value is an object */ + + +function isObject(value) { + // null is object, hence the extra check + return value !== null && _typeof(value) === 'object'; +} +/** Checks to see if a value is an object and only an object */ + + +function isPlainObject(value) { + /* eslint no-proto:0 */ + return isObject(value) && value.__proto__ === Object.prototype; +} +/** Checks to see if a value is empty */ + + +function isEmpty(value) { + return value == null; +} +/** + * Is empty object */ + + +function isEmptyObject(value) { + // We could use Object.keys, but this is more effecient + for (var key in value) { + if (value.hasOwnProperty(key)) { + return false; + } + } + + return true; +} +/** + * Is ES6+ class */ + + +function isNativeClass(value) { + // NOTE TO DEVELOPER: If any of this changes, isClass must also be updated + return typeof value === 'function' && isNativeClassRegex.test(value.toString()); +} +/** + * Is Conventional Class + export * Looks for function with capital first letter MyClass + * First letter is the 9th character + * If changed, isClass must also be updated */ + + +function isConventionalClass(value) { + return typeof value === 'function' && isConventionalClassRegex.test(value.toString()); +} + +// There use to be code here that checked for CoffeeScript's "function _Class" at index 0 (which was sound) +// But it would also check for Babel's __classCallCheck anywhere in the function, which wasn't sound +// as somewhere in the function, another class could be defined, which would provide a false positive +// So instead, proxied classes are ignored, as we can't guarantee their accuracy, would also be an ever growing set +// ----------------------------------- +// Types + +/** + * Is Class */ +function isClass(value) { + return typeof value === 'function' && isClassRegex.test(value.toString()); +} +/** Checks to see if a value is an error */ + + +function isError(value) { + return value instanceof Error; +} +/** Checks to see if a value is a date */ + + +function isDate(value) { + return getObjectType(value) === '[object Date]'; +} +/** Checks to see if a value is an arguments object */ + + +function isArguments(value) { + return getObjectType(value) === '[object Arguments]'; +} +/** + export * Checks to see if a value is a function but not an asynchronous function */ + + +function isSyncFunction(value) { + return getObjectType(value) === '[object Function]'; +} +/** Checks to see if a value is an asynchronous function */ + + +function isAsyncFunction(value) { + return getObjectType(value) === '[object AsyncFunction]'; +} +/** Checks to see if a value is a function */ + + +function isFunction(value) { + return isSyncFunction(value) || isAsyncFunction(value); +} +/** Checks to see if a value is an regex */ + + +function isRegExp(value) { + return getObjectType(value) === '[object RegExp]'; +} +/** Checks to see if a value is an array */ + + +function isArray(value) { + return typeof Array.isArray === 'function' && Array.isArray(value) || getObjectType(value) === '[object Array]'; +} +/** Checks to see if a valule is a number */ + + +function isNumber(value) { + return typeof value === 'number' || getObjectType(value) === '[object Number]'; +} +/** Checks to see if a value is a string */ + + +function isString(value) { + return typeof value === 'string' || getObjectType(value) === '[object String]'; +} +/** Checks to see if a valule is a boolean */ + + +function isBoolean(value) { + return value === true || value === false || getObjectType(value) === '[object Boolean]'; +} +/** Checks to see if a value is null */ + + +function isNull(value) { + return value === null; +} +/** Checks to see if a value is undefined */ + + +function isUndefined(value) { + return typeof value === 'undefined'; +} +/** Checks to see if a value is a Map */ + + +function isMap(value) { + return getObjectType(value) === '[object Map]'; +} +/** Checks to see if a value is a WeakMap */ + + +function isWeakMap(value) { + return getObjectType(value) === '[object WeakMap]'; +} // ----------------------------------- +// General + +/** + * The default {@link TypeMap} for {@link getType}. + export * AsyncFunction and SyncFunction are missing, as they are more specific types that people can detect afterwards. + * @readonly + */ + + +var typeMap = Object.freeze({ + array: isArray, + "boolean": isBoolean, + date: isDate, + error: isError, + "class": isClass, + "function": isFunction, + "null": isNull, + number: isNumber, + regexp: isRegExp, + string: isString, + undefined: isUndefined, + map: isMap, + weakmap: isWeakMap, + object: isObject +}); +/** + * Cycle through the passed {@link TypeMap} testing the value, returning the first type that passes, otherwise `null`. + * @param value the value to test + * @param customTypeMap defaults to {@link typeMap} + */ + +exports.typeMap = typeMap; + +function getType(value) { + var customTypeMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : typeMap; + + // Cycle through our type map + for (var key in customTypeMap) { + if (customTypeMap.hasOwnProperty(key)) { + if (customTypeMap[key](value)) { + return key; + } + } + } // No type was successful + + + return null; +} \ No newline at end of file diff --git a/node_modules/typechecker/edition-node-13/index.js b/node_modules/typechecker/edition-node-13/index.js new file mode 100755 index 000000000..374654828 --- /dev/null +++ b/node_modules/typechecker/edition-node-13/index.js @@ -0,0 +1,247 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getObjectType = getObjectType; +exports.isObject = isObject; +exports.isPlainObject = isPlainObject; +exports.isEmpty = isEmpty; +exports.isEmptyObject = isEmptyObject; +exports.isNativeClass = isNativeClass; +exports.isConventionalClass = isConventionalClass; +exports.isClass = isClass; +exports.isError = isError; +exports.isDate = isDate; +exports.isArguments = isArguments; +exports.isSyncFunction = isSyncFunction; +exports.isAsyncFunction = isAsyncFunction; +exports.isFunction = isFunction; +exports.isRegExp = isRegExp; +exports.isArray = isArray; +exports.isNumber = isNumber; +exports.isString = isString; +exports.isBoolean = isBoolean; +exports.isNull = isNull; +exports.isUndefined = isUndefined; +exports.isMap = isMap; +exports.isWeakMap = isWeakMap; +exports.getType = getType; +exports.typeMap = void 0; + +/* eslint quote-props:0 */ +// Prepare +const isClassRegex = /^class\s|^function\s+[A-Z]/; +const isConventionalClassRegex = /^function\s+[A-Z]/; +const isNativeClassRegex = /^class\s/; +/** Determines if the passed value is of a specific type */ + +// ----------------------------------- +// Values + +/** Get the object type string */ +function getObjectType(value) { + return Object.prototype.toString.call(value); +} +/** Checks to see if a value is an object */ + + +function isObject(value) { + // null is object, hence the extra check + return value !== null && typeof value === 'object'; +} +/** Checks to see if a value is an object and only an object */ + + +function isPlainObject(value) { + /* eslint no-proto:0 */ + return isObject(value) && value.__proto__ === Object.prototype; +} +/** Checks to see if a value is empty */ + + +function isEmpty(value) { + return value == null; +} +/** + * Is empty object */ + + +function isEmptyObject(value) { + // We could use Object.keys, but this is more effecient + for (const key in value) { + if (value.hasOwnProperty(key)) { + return false; + } + } + + return true; +} +/** + * Is ES6+ class */ + + +function isNativeClass(value) { + // NOTE TO DEVELOPER: If any of this changes, isClass must also be updated + return typeof value === 'function' && isNativeClassRegex.test(value.toString()); +} +/** + * Is Conventional Class + export * Looks for function with capital first letter MyClass + * First letter is the 9th character + * If changed, isClass must also be updated */ + + +function isConventionalClass(value) { + return typeof value === 'function' && isConventionalClassRegex.test(value.toString()); +} + +// There use to be code here that checked for CoffeeScript's "function _Class" at index 0 (which was sound) +// But it would also check for Babel's __classCallCheck anywhere in the function, which wasn't sound +// as somewhere in the function, another class could be defined, which would provide a false positive +// So instead, proxied classes are ignored, as we can't guarantee their accuracy, would also be an ever growing set +// ----------------------------------- +// Types + +/** + * Is Class */ +function isClass(value) { + return typeof value === 'function' && isClassRegex.test(value.toString()); +} +/** Checks to see if a value is an error */ + + +function isError(value) { + return value instanceof Error; +} +/** Checks to see if a value is a date */ + + +function isDate(value) { + return getObjectType(value) === '[object Date]'; +} +/** Checks to see if a value is an arguments object */ + + +function isArguments(value) { + return getObjectType(value) === '[object Arguments]'; +} +/** + export * Checks to see if a value is a function but not an asynchronous function */ + + +function isSyncFunction(value) { + return getObjectType(value) === '[object Function]'; +} +/** Checks to see if a value is an asynchronous function */ + + +function isAsyncFunction(value) { + return getObjectType(value) === '[object AsyncFunction]'; +} +/** Checks to see if a value is a function */ + + +function isFunction(value) { + return isSyncFunction(value) || isAsyncFunction(value); +} +/** Checks to see if a value is an regex */ + + +function isRegExp(value) { + return getObjectType(value) === '[object RegExp]'; +} +/** Checks to see if a value is an array */ + + +function isArray(value) { + return typeof Array.isArray === 'function' && Array.isArray(value) || getObjectType(value) === '[object Array]'; +} +/** Checks to see if a valule is a number */ + + +function isNumber(value) { + return typeof value === 'number' || getObjectType(value) === '[object Number]'; +} +/** Checks to see if a value is a string */ + + +function isString(value) { + return typeof value === 'string' || getObjectType(value) === '[object String]'; +} +/** Checks to see if a valule is a boolean */ + + +function isBoolean(value) { + return value === true || value === false || getObjectType(value) === '[object Boolean]'; +} +/** Checks to see if a value is null */ + + +function isNull(value) { + return value === null; +} +/** Checks to see if a value is undefined */ + + +function isUndefined(value) { + return typeof value === 'undefined'; +} +/** Checks to see if a value is a Map */ + + +function isMap(value) { + return getObjectType(value) === '[object Map]'; +} +/** Checks to see if a value is a WeakMap */ + + +function isWeakMap(value) { + return getObjectType(value) === '[object WeakMap]'; +} // ----------------------------------- +// General + +/** + * The default {@link TypeMap} for {@link getType}. + export * AsyncFunction and SyncFunction are missing, as they are more specific types that people can detect afterwards. + * @readonly + */ + + +const typeMap = Object.freeze({ + array: isArray, + boolean: isBoolean, + date: isDate, + error: isError, + class: isClass, + function: isFunction, + null: isNull, + number: isNumber, + regexp: isRegExp, + string: isString, + undefined: isUndefined, + map: isMap, + weakmap: isWeakMap, + object: isObject +}); +/** + * Cycle through the passed {@link TypeMap} testing the value, returning the first type that passes, otherwise `null`. + * @param value the value to test + * @param customTypeMap defaults to {@link typeMap} + */ + +exports.typeMap = typeMap; + +function getType(value, customTypeMap = typeMap) { + // Cycle through our type map + for (const key in customTypeMap) { + if (customTypeMap.hasOwnProperty(key)) { + if (customTypeMap[key](value)) { + return key; + } + } + } // No type was successful + + + return null; +} \ No newline at end of file diff --git a/node_modules/typechecker/fixtures/async.js b/node_modules/typechecker/fixtures/async.js new file mode 100644 index 000000000..17d209ac1 --- /dev/null +++ b/node_modules/typechecker/fixtures/async.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = async function AsyncFunction() {} diff --git a/node_modules/typechecker/fixtures/classes-compiled.js b/node_modules/typechecker/fixtures/classes-compiled.js new file mode 100644 index 000000000..8bbd0c617 --- /dev/null +++ b/node_modules/typechecker/fixtures/classes-compiled.js @@ -0,0 +1,104 @@ +'use strict'; + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var A = function A() { + _classCallCheck(this, A); +}; + +var a = function a() { + _classCallCheck(this, a); +}; + +var b = function b() { + _classCallCheck(this, b); +}; + +var C = +/*#__PURE__*/ +function (_A) { + _inherits(C, _A); + + function C() { + _classCallCheck(this, C); + + return _possibleConstructorReturn(this, _getPrototypeOf(C).apply(this, arguments)); + } + + return C; +}(A); + +var D = +/*#__PURE__*/ +function () { + function D() { + _classCallCheck(this, D); + } + + _createClass(D, [{ + key: "z", + value: function z() { + return this; + } + }]); + + return D; +}(); + +var E = +/*#__PURE__*/ +function (_D) { + _inherits(E, _D); + + function E() { + _classCallCheck(this, E); + + return _possibleConstructorReturn(this, _getPrototypeOf(E).apply(this, arguments)); + } + + return E; +}(D); + +var F = +/*#__PURE__*/ +function (_E) { + _inherits(F, _E); + + function F() { + var _this; + + _classCallCheck(this, F); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(F).call(this)); + _this.greeting = 'hello'; + return _this; + } + + return F; +}(E); + +module.exports = { + A: A, + a: a, + b: b, + C: C, + D: D, + E: E, + F: F +}; \ No newline at end of file diff --git a/node_modules/typechecker/fixtures/classes.js b/node_modules/typechecker/fixtures/classes.js new file mode 100644 index 000000000..6c200194a --- /dev/null +++ b/node_modules/typechecker/fixtures/classes.js @@ -0,0 +1,21 @@ +'use strict' + +class A {} +class a {} +const b = class {} +class C extends A {} + +class D { + z() { + return this + } +} +class E extends D {} +class F extends E { + constructor() { + super() + this.greeting = 'hello' + } +} + +module.exports = { A, a, b, C, D, E, F } diff --git a/node_modules/typechecker/fixtures/map.js b/node_modules/typechecker/fixtures/map.js new file mode 100644 index 000000000..f7e0c5403 --- /dev/null +++ b/node_modules/typechecker/fixtures/map.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = new Map() diff --git a/node_modules/typechecker/fixtures/weakmap.js b/node_modules/typechecker/fixtures/weakmap.js new file mode 100644 index 000000000..5fdf4cc1a --- /dev/null +++ b/node_modules/typechecker/fixtures/weakmap.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = new WeakMap() diff --git a/node_modules/typechecker/index.js b/node_modules/typechecker/index.js new file mode 100644 index 000000000..89f948fc0 --- /dev/null +++ b/node_modules/typechecker/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.ts") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/typechecker/package.json b/node_modules/typechecker/package.json new file mode 100644 index 000000000..58da28f83 --- /dev/null +++ b/node_modules/typechecker/package.json @@ -0,0 +1,268 @@ +{ + "title": "TypeChecker", + "name": "typechecker", + "version": "4.11.0", + "description": "Utilities to get and check variable types (isString, isPlainObject, isRegExp, etc)", + "homepage": "https://github.com/bevry/typechecker", + "license": "MIT", + "keywords": [ + "types", + "type", + "check", + "getType", + "isPlainObject", + "isEmpty", + "isEmptyObject", + "isNativeClass", + "isConventionalClass", + "isClass", + "isObject", + "isError", + "isDate", + "isArguments", + "isFunction", + "isRegExp", + "isArray", + "isNumber", + "isString", + "isBoolean", + "isNull", + "isUndefined", + "isMap", + "isWeakMap" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": "https://bevry.me/fund", + "author": "2013+ Bevry Pty Ltd (http://bevry.me), 2011-2012 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Joe Gesualdo (joegesualdo.com)", + "Sean Fridman (http://seanfridman.com)", + "Matt Bierner (http://mattbierner.com)", + "dependabot-preview[bot] (http://github.com/apps/dependabot-preview)" + ], + "bugs": { + "url": "https://github.com/bevry/typechecker/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/typechecker.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "typescript source code with import for modules", + "directory": "source", + "entry": "index.ts", + "tags": [ + "typescript", + "import" + ], + "engines": false + }, + { + "description": "typescript compiled for browsers with import for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "import" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "typescript compiled for node.js 13 with require for modules", + "directory": "edition-node-13", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "typescript compiled for node.js 0.8 with require for modules", + "directory": "edition-node-0.8", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.8 || 0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "types": "source/index.ts", + "main": "index.js", + "browser": "edition-browsers/index.js", + "module": "edition-browsers/index.js", + "dependencies": { + "editions": "^2.2.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-class-properties": "^7.7.0", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/plugin-proposal-optional-chaining": "^7.6.0", + "@babel/preset-env": "^7.7.1", + "@babel/preset-typescript": "^7.7.2", + "@typescript-eslint/eslint-plugin": "^2.7.0", + "@typescript-eslint/parser": "^2.7.0", + "assert-helpers": "4.10.0", + "babel-plugin-add-module-exports": "^1.0.2", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.3.0", + "eslint-config-prettier": "^6.6.0", + "eslint-plugin-prettier": "^3.1.1", + "kava": "3.2.0", + "prettier": "^1.19.1", + "projectz": "^1.10.0", + "surge": "^0.21.3", + "typedoc": "^0.15.2", + "typescript": "^3.7.2", + "valid-directory": "^1.1.1" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.8 && npm run our:compile:edition-node-13", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --extensions \".ts,.tsx\" --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.8": "env BABEL_ENV=edition-node-0.8 babel --extensions \".ts,.tsx\" --out-dir ./edition-node-0.8 ./source", + "our:compile:edition-node-13": "env BABEL_ENV=edition-node-13 babel --extensions \".ts,.tsx\" --out-dir ./edition-node-13 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:docs && npm run our:meta:projectz", + "our:meta:docs": "npm run our:meta:docs:typedoc", + "our:meta:docs:typedoc": "rm -Rf ./docs && typedoc --mode file --exclude '**/+(*test*|node_modules)' --excludeExternals --name \"$npm_package_name\" --readme ./README.md --out ./docs ./source", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier && npm run our:verify:typescript", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "our:verify:typescript": "tsc --noEmit --project .", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "sourceType": "module", + "presets": [ + [ + "@babel/preset-env", + { + "targets": "defaults", + "modules": false + } + ], + "@babel/preset-typescript" + ], + "plugins": [ + "@babel/proposal-object-rest-spread", + "@babel/plugin-proposal-optional-chaining", + "@babel/proposal-class-properties", + "add-module-exports" + ] + }, + "edition-node-13": { + "sourceType": "module", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "13" + }, + "modules": "commonjs" + } + ], + "@babel/preset-typescript" + ], + "plugins": [ + "@babel/proposal-object-rest-spread", + "@babel/plugin-proposal-optional-chaining", + "@babel/proposal-class-properties", + "add-module-exports" + ] + }, + "edition-node-0.8": { + "sourceType": "module", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.8" + }, + "modules": "commonjs" + } + ], + "@babel/preset-typescript" + ], + "plugins": [ + "@babel/proposal-object-rest-spread", + "@babel/plugin-proposal-optional-chaining", + "@babel/proposal-class-properties", + "add-module-exports" + ] + } + } + } +} diff --git a/node_modules/typechecker/source/index.ts b/node_modules/typechecker/source/index.ts new file mode 100755 index 000000000..26b742840 --- /dev/null +++ b/node_modules/typechecker/source/index.ts @@ -0,0 +1,218 @@ +/* eslint quote-props:0 */ + +// Prepare +const isClassRegex = /^class\s|^function\s+[A-Z]/ +const isConventionalClassRegex = /^function\s+[A-Z]/ +const isNativeClassRegex = /^class\s/ + +/** Determines if the passed value is of a specific type */ +export type TypeTester = (value: any) => boolean + +/** + * The interface for a type mapping (key => function) to use for {@link getType}. + export * The key represents the name of the type. The function represents the {@link TypeTester test method}. + * The map should be ordered by testing preference, with more specific tests first. + * If a test returns true, it is selected, and the key is returned as the type. + */ +export interface TypeMap { + [type: string]: TypeTester +} + +// ----------------------------------- +// Values + +/** Get the object type string */ +export function getObjectType(value?: any): string { + return Object.prototype.toString.call(value) +} + +/** Checks to see if a value is an object */ +export function isObject(value?: any): boolean { + // null is object, hence the extra check + return value !== null && typeof value === 'object' +} + +/** Checks to see if a value is an object and only an object */ +export function isPlainObject(value?: any): boolean { + /* eslint no-proto:0 */ + return isObject(value) && value.__proto__ === Object.prototype +} + +/** Checks to see if a value is empty */ +export function isEmpty(value?: any): boolean { + return value == null +} + +/** + * Is empty object */ +export function isEmptyObject(value: object): boolean { + // We could use Object.keys, but this is more effecient + for (const key in value) { + if (value.hasOwnProperty(key)) { + return false + } + } + return true +} + +/** + * Is ES6+ class */ +export function isNativeClass(value?: any): boolean { + // NOTE TO DEVELOPER: If any of this changes, isClass must also be updated + return ( + typeof value === 'function' && isNativeClassRegex.test(value.toString()) + ) +} + +/** + * Is Conventional Class + export * Looks for function with capital first letter MyClass + * First letter is the 9th character + * If changed, isClass must also be updated */ +export function isConventionalClass(value?: any): boolean { + return ( + typeof value === 'function' && + isConventionalClassRegex.test(value.toString()) + ) +} + +export // There use to be code here that checked for CoffeeScript's "function _Class" at index 0 (which was sound) +// But it would also check for Babel's __classCallCheck anywhere in the function, which wasn't sound +// as somewhere in the function, another class could be defined, which would provide a false positive +// So instead, proxied classes are ignored, as we can't guarantee their accuracy, would also be an ever growing set + +// ----------------------------------- +// Types + +/** + * Is Class */ +function isClass(value?: any): boolean { + return typeof value === 'function' && isClassRegex.test(value.toString()) +} + +/** Checks to see if a value is an error */ +export function isError(value?: any): boolean { + return value instanceof Error +} + +/** Checks to see if a value is a date */ +export function isDate(value?: any): boolean { + return getObjectType(value) === '[object Date]' +} + +/** Checks to see if a value is an arguments object */ +export function isArguments(value?: any): boolean { + return getObjectType(value) === '[object Arguments]' +} + +/** + export * Checks to see if a value is a function but not an asynchronous function */ +export function isSyncFunction(value?: any): boolean { + return getObjectType(value) === '[object Function]' +} + +/** Checks to see if a value is an asynchronous function */ +export function isAsyncFunction(value?: any): boolean { + return getObjectType(value) === '[object AsyncFunction]' +} + +/** Checks to see if a value is a function */ +export function isFunction(value?: any): boolean { + return isSyncFunction(value) || isAsyncFunction(value) +} + +/** Checks to see if a value is an regex */ +export function isRegExp(value?: any): boolean { + return getObjectType(value) === '[object RegExp]' +} + +/** Checks to see if a value is an array */ +export function isArray(value?: any): boolean { + return ( + (typeof Array.isArray === 'function' && Array.isArray(value)) || + getObjectType(value) === '[object Array]' + ) +} + +/** Checks to see if a valule is a number */ +export function isNumber(value?: any): boolean { + return typeof value === 'number' || getObjectType(value) === '[object Number]' +} + +/** Checks to see if a value is a string */ +export function isString(value?: any): boolean { + return typeof value === 'string' || getObjectType(value) === '[object String]' +} + +/** Checks to see if a valule is a boolean */ +export function isBoolean(value?: any): boolean { + return ( + value === true || + value === false || + getObjectType(value) === '[object Boolean]' + ) +} + +/** Checks to see if a value is null */ +export function isNull(value?: any): boolean { + return value === null +} + +/** Checks to see if a value is undefined */ +export function isUndefined(value?: any): boolean { + return typeof value === 'undefined' +} + +/** Checks to see if a value is a Map */ +export function isMap(value?: any): boolean { + return getObjectType(value) === '[object Map]' +} + +/** Checks to see if a value is a WeakMap */ +export function isWeakMap(value?: any): boolean { + return getObjectType(value) === '[object WeakMap]' +} + +// ----------------------------------- +// General + +/** + * The default {@link TypeMap} for {@link getType}. + export * AsyncFunction and SyncFunction are missing, as they are more specific types that people can detect afterwards. + * @readonly + */ +export const typeMap: TypeMap = Object.freeze({ + array: isArray, + boolean: isBoolean, + date: isDate, + error: isError, + class: isClass, + function: isFunction, + null: isNull, + number: isNumber, + regexp: isRegExp, + string: isString, + undefined: isUndefined, + map: isMap, + weakmap: isWeakMap, + object: isObject +} as TypeMap) + +/** + * Cycle through the passed {@link TypeMap} testing the value, returning the first type that passes, otherwise `null`. + * @param value the value to test + * @param customTypeMap defaults to {@link typeMap} + */ +export function getType(value: any, customTypeMap = typeMap): string | null { + // Cycle through our type map + for (const key in customTypeMap) { + if (customTypeMap.hasOwnProperty(key)) { + if (customTypeMap[key](value)) { + return key + } + } + } + + // No type was successful + return null +} diff --git a/node_modules/typechecker/tsconfig.json b/node_modules/typechecker/tsconfig.json new file mode 100644 index 000000000..3207f137c --- /dev/null +++ b/node_modules/typechecker/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "allowJs": true, + "esModuleInterop": true, + "isolatedModules": true, + "maxNodeModuleJsDepth": 5, + "moduleResolution": "node", + "noEmit": true, + "strict": true, + "target": "esnext" + }, + "include": [ + "source" + ] +} diff --git a/node_modules/uc.micro/CHANGELOG.md b/node_modules/uc.micro/CHANGELOG.md new file mode 100644 index 000000000..974a9690e --- /dev/null +++ b/node_modules/uc.micro/CHANGELOG.md @@ -0,0 +1,52 @@ +1.0.6 / 2019-01-31 +------------------ + +- Unicode update to 10.0.0. +- Fixed `Z` content (added missed line and paragraph seperators), #10. + + +1.0.5 / 2018-01-26 +------------------ + +- Remove outdated license info from readme (missed in previous update). + + +1.0.4 / 2018-01-26 +------------------ + +- Unicode update to 10.0.0. +- Clarified license, should be MIT, #6. + + +1.0.3 / 2016-09-14 +------------------ + +- Unicode update to 9.0.0. +- Rewrite update script (use npm instead of Makefile). +- Added integrity tests. + + +1.0.2 / 2015-06-24 +------------------ + +- License info clarify, #3. + + +1.0.1 / 2015-05-30 +------------------ + +- Update to Unicode 8.+. +- Also automatically fix possible ReDOS in `Any`, if source used to generate + patterns like `(Any)+`. + + +1.0.0 / 2015-03-10 +------------------ + +- Export all in index.js. + + +0.1.0 / 2015-02-22 +------------------ + +- First release. diff --git a/node_modules/uc.micro/LICENSE.txt b/node_modules/uc.micro/LICENSE.txt new file mode 100644 index 000000000..a41e0a7ef --- /dev/null +++ b/node_modules/uc.micro/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +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. diff --git a/node_modules/uc.micro/README.md b/node_modules/uc.micro/README.md new file mode 100644 index 000000000..3c555ea7c --- /dev/null +++ b/node_modules/uc.micro/README.md @@ -0,0 +1,14 @@ +# uc.micro + +[![Build Status](https://img.shields.io/travis/markdown-it/uc.micro/master.svg?style=flat)](https://travis-ci.org/markdown-it/uc.micro) +[![NPM version](https://img.shields.io/npm/v/uc.micro.svg?style=flat)](https://www.npmjs.org/package/uc.micro) + +> Micro subset of unicode data files for [markdown-it](https://github.com/markdown-it) projects. + +Content of this repo is autogenerated from `unicode-` package, +maintained by [Mathias Bynens](https://github.com/mathiasbynens). + +That's just a proxy to reduce dependencies/install size. + +**This package content is ONLY for [markdown-it](https://github.com/markdown-it) +projects needs. Don't ask to extend it!** diff --git a/node_modules/uc.micro/categories/Cc/regex.js b/node_modules/uc.micro/categories/Cc/regex.js new file mode 100644 index 000000000..99be991fe --- /dev/null +++ b/node_modules/uc.micro/categories/Cc/regex.js @@ -0,0 +1 @@ +module.exports=/[\0-\x1F\x7F-\x9F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Cf/regex.js b/node_modules/uc.micro/categories/Cf/regex.js new file mode 100644 index 000000000..e89eff621 --- /dev/null +++ b/node_modules/uc.micro/categories/Cf/regex.js @@ -0,0 +1 @@ +module.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/P/regex.js b/node_modules/uc.micro/categories/P/regex.js new file mode 100644 index 000000000..7e18fa732 --- /dev/null +++ b/node_modules/uc.micro/categories/P/regex.js @@ -0,0 +1 @@ +module.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Z/regex.js b/node_modules/uc.micro/categories/Z/regex.js new file mode 100644 index 000000000..76976a4d9 --- /dev/null +++ b/node_modules/uc.micro/categories/Z/regex.js @@ -0,0 +1 @@ +module.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ \ No newline at end of file diff --git a/node_modules/uc.micro/index.js b/node_modules/uc.micro/index.js new file mode 100644 index 000000000..03b6d4ab3 --- /dev/null +++ b/node_modules/uc.micro/index.js @@ -0,0 +1,7 @@ +'use strict'; + +exports.Any = require('./properties/Any/regex'); +exports.Cc = require('./categories/Cc/regex'); +exports.Cf = require('./categories/Cf/regex'); +exports.P = require('./categories/P/regex'); +exports.Z = require('./categories/Z/regex'); diff --git a/node_modules/uc.micro/package.json b/node_modules/uc.micro/package.json new file mode 100644 index 000000000..798e4bba9 --- /dev/null +++ b/node_modules/uc.micro/package.json @@ -0,0 +1,21 @@ +{ + "name": "uc.micro", + "version": "1.0.6", + "description": "Micro subset of unicode data files for markdown-it projects.", + "repository": "markdown-it/uc.micro", + "license": "MIT", + "files": [ + "categories/", + "properties/", + "index.js" + ], + "scripts": { + "test": "mocha", + "update": "node update.js && npm test" + }, + "devDependencies": { + "mocha": "^5.0.0", + "shelljs": "^0.8.1", + "unicode-11.0.0": "^0.7.8" + } +} diff --git a/node_modules/uc.micro/properties/Any/regex.js b/node_modules/uc.micro/properties/Any/regex.js new file mode 100644 index 000000000..22afa15ac --- /dev/null +++ b/node_modules/uc.micro/properties/Any/regex.js @@ -0,0 +1 @@ +module.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ \ No newline at end of file diff --git a/node_modules/unbounded/.dependabot/config.yml b/node_modules/unbounded/.dependabot/config.yml new file mode 100644 index 000000000..69a808b79 --- /dev/null +++ b/node_modules/unbounded/.dependabot/config.yml @@ -0,0 +1,9 @@ +version: 1 +update_configs: + - package_manager: javascript + directory: / + update_schedule: daily + automerged_updates: + - match: + dependency_type: all + update_type: all diff --git a/node_modules/unbounded/.github/FUNDING.yml b/node_modules/unbounded/.github/FUNDING.yml new file mode 100644 index 000000000..25ab9dc01 --- /dev/null +++ b/node_modules/unbounded/.github/FUNDING.yml @@ -0,0 +1,6 @@ +github: [balupton] +patreon: bevry +open_collective: bevry +ko_fi: balupton +liberapay: bevry +custom: ['https://bevry.me/fund'] \ No newline at end of file diff --git a/node_modules/unbounded/HISTORY.md b/node_modules/unbounded/HISTORY.md new file mode 100644 index 000000000..229dc03d3 --- /dev/null +++ b/node_modules/unbounded/HISTORY.md @@ -0,0 +1,17 @@ +# History + +## v1.3.0 2019 November 13 + +- Updated dependencies, [base files](https://github.com/bevry/base), and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.2.0 2019 January 1 + +- Updated [base files](https://github.com/bevry/base) and [editions](https://editions.bevry.me) using [boundation](https://github.com/bevry/boundation) + +## v1.1.0 2018 July 13 + +- Exports `define` for manually specifying the `unbounded` property + +## v1.0.0 2018 July 13 + +- Initial working version diff --git a/node_modules/unbounded/LICENSE.md b/node_modules/unbounded/LICENSE.md new file mode 100644 index 000000000..33e54b456 --- /dev/null +++ b/node_modules/unbounded/LICENSE.md @@ -0,0 +1,23 @@ + + +

      License

      + +Unless stated otherwise all works are: + +
      • Copyright © 2018+ Benjamin Lupton
      + +and licensed under: + + + +

      MIT License

      + +
      +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 (including the next paragraph) 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.
      +
      + + diff --git a/node_modules/unbounded/README.md b/node_modules/unbounded/README.md new file mode 100644 index 000000000..754646661 --- /dev/null +++ b/node_modules/unbounded/README.md @@ -0,0 +1,162 @@ + + +

      unbounded

      + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
      +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + + + + + + +Function.prototype.bind replacement that provides an `unbounded` hidden property on the returned bounded function, that contains the original unbounded function + + + + + + +

      Install

      + +

      npm

      +
        +
      • Install: npm install --save unbounded
      • +
      • Require: require('unbounded')
      • +
      + +

      jspm

      + +``` html + +``` + +

      Editions

      + +

      This package is published with the following editions:

      + +
      • unbounded aliases unbounded/index.js which uses Editions to automatically select the correct edition for the consumers environment
      • +
      • unbounded/source/index.js is esnext source code with require for modules
      • +
      • unbounded/edition-browsers/index.js is esnext compiled for browsers with require for modules
      • +
      • unbounded/edition-node-0.8/index.js is esnext compiled for node.js 0.8 with require for modules
      + + + + +## Usage + +This package functions like [`Function.prototype.bind`](https://devdocs.io/javascript/global_objects/function/bind), however it exposes a hidden `unbounded` property on the returned bounded function that contains the original unbounded function. + +This is very useful as it means you can do `(fn.unbounded || fn).length` to always get the correct amount of arguments, or `(fn.unbounded || fn).toString()` to always get the source code of any function instead of getting `function () { [native code] }` for bounded functions. + +You can use unbounded via `require('unbounded').binder` like so: + +``` javascript +const {binder} = require('unbounded') +const context = { hello: 'world' } +function a () { + return this.hello +} +const b = binder.call(a, context) +equal(b(), context.hello, 'context was correct') +equal(b.unbounded, a, 'unbounded was correct') +``` + +Or you can patch `Function.prototype.bind` directly: + +``` javascript +require('unbounded').patch() +const context = { hello: 'world' } +function a () { + return this.hello +} +const b = a.bind(context) +equal(b(), context.hello, 'context was correct') +equal(b.unbounded, a, 'unbounded was correct') +``` + + + + +

      History

      + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

      Contribute

      + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      Backers

      + +

      Maintainers

      + +These amazing people are maintaining this project: + + + +

      Sponsors

      + +No sponsors yet! Will you be the first? + +Patreon donate button +Flattr donate button +Liberapay donate button +Buy Me A Coffee donate button +Open Collective donate button +crypto donate button +PayPal donate button +Wishlist browse button + +

      Contributors

      + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      License

      + +Unless stated otherwise all works are: + +
      • Copyright © 2018+ Benjamin Lupton
      + +and licensed under: + + + + diff --git a/node_modules/unbounded/edition-browsers/index.js b/node_modules/unbounded/edition-browsers/index.js new file mode 100644 index 000000000..101384365 --- /dev/null +++ b/node_modules/unbounded/edition-browsers/index.js @@ -0,0 +1,42 @@ +'use strict'; + +var bind = Function.prototype.bind; + +function define(bounded, unbounded) { + if (bounded.unbounded !== unbounded) { + Object.defineProperty(bounded, 'unbounded', { + value: unbounded.unbounded || unbounded, + enumerable: false, + configurable: false, + writable: false + }); + } + + return bounded; +} + +function binder() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var bounded = bind.apply(this, args); + define(bounded, this); + return bounded; +} + +function patch() { + if (Function.prototype.bind !== binder) { + /* eslint no-extend-native:0 */ + Function.prototype.bind = binder; + } + + return module.exports; +} + +module.exports = { + bind: bind, + binder: binder, + patch: patch, + define: define +}; \ No newline at end of file diff --git a/node_modules/unbounded/edition-node-0.8/index.js b/node_modules/unbounded/edition-node-0.8/index.js new file mode 100644 index 000000000..101384365 --- /dev/null +++ b/node_modules/unbounded/edition-node-0.8/index.js @@ -0,0 +1,42 @@ +'use strict'; + +var bind = Function.prototype.bind; + +function define(bounded, unbounded) { + if (bounded.unbounded !== unbounded) { + Object.defineProperty(bounded, 'unbounded', { + value: unbounded.unbounded || unbounded, + enumerable: false, + configurable: false, + writable: false + }); + } + + return bounded; +} + +function binder() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var bounded = bind.apply(this, args); + define(bounded, this); + return bounded; +} + +function patch() { + if (Function.prototype.bind !== binder) { + /* eslint no-extend-native:0 */ + Function.prototype.bind = binder; + } + + return module.exports; +} + +module.exports = { + bind: bind, + binder: binder, + patch: patch, + define: define +}; \ No newline at end of file diff --git a/node_modules/unbounded/index.js b/node_modules/unbounded/index.js new file mode 100644 index 000000000..708280eb2 --- /dev/null +++ b/node_modules/unbounded/index.js @@ -0,0 +1,4 @@ +'use strict' + +/** @type {typeof import("./source/index.js") } */ +module.exports = require('editions').requirePackage(__dirname, require) diff --git a/node_modules/unbounded/package.json b/node_modules/unbounded/package.json new file mode 100644 index 000000000..94dc41c49 --- /dev/null +++ b/node_modules/unbounded/package.json @@ -0,0 +1,191 @@ +{ + "name": "unbounded", + "version": "1.3.0", + "description": "Function.prototype.bind replacement that provides an `unbounded` hidden property on the returned bounded function, that contains the original unbounded function", + "homepage": "https://github.com/bevry/unbounded", + "license": "MIT", + "keywords": [ + "bind", + "binded", + "unbound", + "unbounded", + "function" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "patreon", + "flattr", + "liberapay", + "buymeacoffee", + "opencollective", + "crypto", + "paypal", + "wishlist" + ], + "config": { + "buymeacoffeeUsername": "balupton", + "cryptoURL": "https://bevry.me/crypto", + "flattrUsername": "balupton", + "liberapayUsername": "bevry", + "opencollectiveUsername": "bevry", + "patreonUsername": "bevry", + "paypalURL": "https://bevry.me/paypal", + "wishlistURL": "https://bevry.me/wishlist", + "travisTLD": "com" + } + }, + "funding": "https://bevry.me/fund", + "author": "2018+ Benjamin Lupton ", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)" + ], + "bugs": { + "url": "https://github.com/bevry/unbounded/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/bevry/unbounded.git" + }, + "engines": { + "node": ">=0.8" + }, + "editions": [ + { + "description": "esnext source code with require for modules", + "directory": "source", + "entry": "index.js", + "tags": [ + "javascript", + "esnext", + "require" + ], + "engines": { + "node": "6 || 8 || 10 || 12 || 13", + "browsers": false + } + }, + { + "description": "esnext compiled for browsers with require for modules", + "directory": "edition-browsers", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": false, + "browsers": "defaults" + } + }, + { + "description": "esnext compiled for node.js 0.8 with require for modules", + "directory": "edition-node-0.8", + "entry": "index.js", + "tags": [ + "javascript", + "require" + ], + "engines": { + "node": "0.8 || 0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13", + "browsers": false + } + } + ], + "main": "index.js", + "browser": "edition-browsers/index.js", + "dependencies": { + "editions": "^2.2.0" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "assert-helpers": "4.10.0", + "eslint": "^6.6.0", + "eslint-config-bevry": "^1.2.1", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-prettier": "^3.1.1", + "kava": "^3.2.0", + "prettier": "^1.19.1", + "projectz": "^1.10.0", + "valid-directory": "^1.0.0" + }, + "scripts": { + "our:clean": "rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next", + "our:compile": "npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.8", + "our:compile:edition-browsers": "env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source", + "our:compile:edition-node-0.8": "env BABEL_ENV=edition-node-0.8 babel --out-dir ./edition-node-0.8 ./source", + "our:deploy": "echo no need for this project", + "our:meta": "npm run our:meta:projectz", + "our:meta:projectz": "projectz compile", + "our:release": "npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push", + "our:release:check-changelog": "cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)", + "our:release:check-dirty": "git diff --exit-code", + "our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta", + "our:release:push": "git push origin master && git push origin --tags", + "our:release:tag": "export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"", + "our:setup": "npm run our:setup:install", + "our:setup:install": "npm install", + "our:test": "npm run our:verify && npm test", + "our:verify": "npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier", + "our:verify:directory": "npx valid-directory", + "our:verify:eslint": "eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source", + "our:verify:prettier": "prettier --write ./source/**", + "test": "node ./test.js" + }, + "eslintConfig": { + "extends": [ + "bevry" + ] + }, + "prettier": { + "semi": false, + "singleQuote": true + }, + "babel": { + "env": { + "edition-browsers": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": "defaults", + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + }, + "edition-node-0.8": { + "sourceType": "script", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "0.8" + }, + "modules": "commonjs" + } + ] + ], + "plugins": [ + "@babel/proposal-object-rest-spread" + ] + } + } + } +} diff --git a/node_modules/unbounded/source/index.js b/node_modules/unbounded/source/index.js new file mode 100644 index 000000000..0960a6bcf --- /dev/null +++ b/node_modules/unbounded/source/index.js @@ -0,0 +1,31 @@ +'use strict' + +const bind = Function.prototype.bind + +function define(bounded, unbounded) { + if (bounded.unbounded !== unbounded) { + Object.defineProperty(bounded, 'unbounded', { + value: unbounded.unbounded || unbounded, + enumerable: false, + configurable: false, + writable: false + }) + } + return bounded +} + +function binder(...args) { + const bounded = bind.apply(this, args) + define(bounded, this) + return bounded +} + +function patch() { + if (Function.prototype.bind !== binder) { + /* eslint no-extend-native:0 */ + Function.prototype.bind = binder + } + return module.exports +} + +module.exports = { bind, binder, patch, define } diff --git a/node_modules/unicode/.travis.yml b/node_modules/unicode/.travis.yml new file mode 100644 index 000000000..ea8987f47 --- /dev/null +++ b/node_modules/unicode/.travis.yml @@ -0,0 +1,6 @@ +before_script: "npm install --dev" +script: "npm test" +language: node_js +node_js: + - 0.8 + - 0.10 diff --git a/node_modules/unicode/LICENSE b/node_modules/unicode/LICENSE new file mode 100644 index 000000000..cb711c46a --- /dev/null +++ b/node_modules/unicode/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2014 ▟ ▖▟ ▖(dodo) + +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. diff --git a/node_modules/unicode/README.md b/node_modules/unicode/README.md new file mode 100644 index 000000000..ade3f8aa1 --- /dev/null +++ b/node_modules/unicode/README.md @@ -0,0 +1,33 @@ +# unicode lookup table + +provides data from https://unicode.org/Public/UNIDATA/UnicodeData.txt for [nodejs](http://nodejs.org). + + +## install + +```bash +npm install unicode +``` + +## example + +```bash +master//node-unicodetable » node +> require('unicode/category/So')["♥".charCodeAt(0)] +{ value: '2665', + name: 'BLACK HEART SUIT', + category: 'So', + class: '0', + bidirectional_category: 'ON', + mapping: '', + decimal_digit_value: '', + digit_value: '', + numeric_value: '', + mirrored: 'N', + unicode_name: '', + comment: '', + uppercase_mapping: '', + lowercase_mapping: '', + titlecase_mapping: '', + symbol: '♥' } +``` diff --git a/node_modules/unicode/category/Cc.js b/node_modules/unicode/category/Cc.js new file mode 100644 index 000000000..92108e885 --- /dev/null +++ b/node_modules/unicode/category/Cc.js @@ -0,0 +1 @@ +module.exports={0:{"value":"0000","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NULL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x00"},1:{"value":"0001","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"START OF HEADING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x01"},2:{"value":"0002","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"START OF TEXT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x02"},3:{"value":"0003","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"END OF TEXT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x03"},4:{"value":"0004","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"END OF TRANSMISSION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x04"},5:{"value":"0005","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ENQUIRY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x05"},6:{"value":"0006","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ACKNOWLEDGE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x06"},7:{"value":"0007","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BELL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x07"},8:{"value":"0008","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BACKSPACE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x08"},9:{"value":"0009","name":"","category":"Cc","class":"0","bidirectional_category":"S","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CHARACTER TABULATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x09"},10:{"value":"000A","name":"","category":"Cc","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LINE FEED (LF)","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x0A"},11:{"value":"000B","name":"","category":"Cc","class":"0","bidirectional_category":"S","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LINE TABULATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x0B"},12:{"value":"000C","name":"","category":"Cc","class":"0","bidirectional_category":"WS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORM FEED (FF)","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x0C"},13:{"value":"000D","name":"","category":"Cc","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CARRIAGE RETURN (CR)","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x0D"},14:{"value":"000E","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SHIFT OUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x0E"},15:{"value":"000F","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SHIFT IN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x0F"},16:{"value":"0010","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DATA LINK ESCAPE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x10"},17:{"value":"0011","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEVICE CONTROL ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x11"},18:{"value":"0012","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEVICE CONTROL TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x12"},19:{"value":"0013","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEVICE CONTROL THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x13"},20:{"value":"0014","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEVICE CONTROL FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x14"},21:{"value":"0015","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NEGATIVE ACKNOWLEDGE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x15"},22:{"value":"0016","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SYNCHRONOUS IDLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x16"},23:{"value":"0017","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"END OF TRANSMISSION BLOCK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x17"},24:{"value":"0018","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CANCEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x18"},25:{"value":"0019","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"END OF MEDIUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x19"},26:{"value":"001A","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SUBSTITUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x1A"},27:{"value":"001B","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ESCAPE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x1B"},28:{"value":"001C","name":"","category":"Cc","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"INFORMATION SEPARATOR FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x1C"},29:{"value":"001D","name":"","category":"Cc","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"INFORMATION SEPARATOR THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x1D"},30:{"value":"001E","name":"","category":"Cc","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"INFORMATION SEPARATOR TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x1E"},31:{"value":"001F","name":"","category":"Cc","class":"0","bidirectional_category":"S","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"INFORMATION SEPARATOR ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x1F"},127:{"value":"007F","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DELETE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x7F"},128:{"value":"0080","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x80"},129:{"value":"0081","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x81"},130:{"value":"0082","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BREAK PERMITTED HERE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x82"},131:{"value":"0083","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NO BREAK HERE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x83"},132:{"value":"0084","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x84"},133:{"value":"0085","name":"","category":"Cc","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NEXT LINE (NEL)","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x85"},134:{"value":"0086","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"START OF SELECTED AREA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x86"},135:{"value":"0087","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"END OF SELECTED AREA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x87"},136:{"value":"0088","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CHARACTER TABULATION SET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x88"},137:{"value":"0089","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CHARACTER TABULATION WITH JUSTIFICATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x89"},138:{"value":"008A","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LINE TABULATION SET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x8A"},139:{"value":"008B","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARTIAL LINE FORWARD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x8B"},140:{"value":"008C","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARTIAL LINE BACKWARD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x8C"},141:{"value":"008D","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"REVERSE LINE FEED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x8D"},142:{"value":"008E","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SINGLE SHIFT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x8E"},143:{"value":"008F","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SINGLE SHIFT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x8F"},144:{"value":"0090","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEVICE CONTROL STRING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x90"},145:{"value":"0091","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PRIVATE USE ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x91"},146:{"value":"0092","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PRIVATE USE TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x92"},147:{"value":"0093","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SET TRANSMIT STATE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x93"},148:{"value":"0094","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CANCEL CHARACTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x94"},149:{"value":"0095","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MESSAGE WAITING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x95"},150:{"value":"0096","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"START OF GUARDED AREA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x96"},151:{"value":"0097","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"END OF GUARDED AREA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x97"},152:{"value":"0098","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"START OF STRING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x98"},153:{"value":"0099","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x99"},154:{"value":"009A","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SINGLE CHARACTER INTRODUCER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x9A"},155:{"value":"009B","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CONTROL SEQUENCE INTRODUCER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x9B"},156:{"value":"009C","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"STRING TERMINATOR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x9C"},157:{"value":"009D","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OPERATING SYSTEM COMMAND","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x9D"},158:{"value":"009E","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PRIVACY MESSAGE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x9E"},159:{"value":"009F","name":"","category":"Cc","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"APPLICATION PROGRAM COMMAND","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x9F"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Cf.js b/node_modules/unicode/category/Cf.js new file mode 100644 index 000000000..8e768adb1 --- /dev/null +++ b/node_modules/unicode/category/Cf.js @@ -0,0 +1 @@ +module.exports={173:{"value":"00AD","name":"SOFT HYPHEN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xAD"},1536:{"value":"0600","name":"ARABIC NUMBER SIGN","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0600"},1537:{"value":"0601","name":"ARABIC SIGN SANAH","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0601"},1538:{"value":"0602","name":"ARABIC FOOTNOTE MARKER","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0602"},1539:{"value":"0603","name":"ARABIC SIGN SAFHA","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0603"},1540:{"value":"0604","name":"ARABIC SIGN SAMVAT","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0604"},1541:{"value":"0605","name":"ARABIC NUMBER MARK ABOVE","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0605"},1564:{"value":"061C","name":"ARABIC LETTER MARK","category":"Cf","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u061C"},1757:{"value":"06DD","name":"ARABIC END OF AYAH","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06DD"},1807:{"value":"070F","name":"SYRIAC ABBREVIATION MARK","category":"Cf","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u070F"},2192:{"value":"0890","name":"ARABIC POUND MARK ABOVE","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0890"},2193:{"value":"0891","name":"ARABIC PIASTRE MARK ABOVE","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0891"},2274:{"value":"08E2","name":"ARABIC DISPUTED END OF AYAH","category":"Cf","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E2"},6158:{"value":"180E","name":"MONGOLIAN VOWEL SEPARATOR","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u180E"},8203:{"value":"200B","name":"ZERO WIDTH SPACE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u200B"},8204:{"value":"200C","name":"ZERO WIDTH NON-JOINER","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u200C"},8205:{"value":"200D","name":"ZERO WIDTH JOINER","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u200D"},8206:{"value":"200E","name":"LEFT-TO-RIGHT MARK","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u200E"},8207:{"value":"200F","name":"RIGHT-TO-LEFT MARK","category":"Cf","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u200F"},8234:{"value":"202A","name":"LEFT-TO-RIGHT EMBEDDING","category":"Cf","class":"0","bidirectional_category":"LRE","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u202A"},8235:{"value":"202B","name":"RIGHT-TO-LEFT EMBEDDING","category":"Cf","class":"0","bidirectional_category":"RLE","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u202B"},8236:{"value":"202C","name":"POP DIRECTIONAL FORMATTING","category":"Cf","class":"0","bidirectional_category":"PDF","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u202C"},8237:{"value":"202D","name":"LEFT-TO-RIGHT OVERRIDE","category":"Cf","class":"0","bidirectional_category":"LRO","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u202D"},8238:{"value":"202E","name":"RIGHT-TO-LEFT OVERRIDE","category":"Cf","class":"0","bidirectional_category":"RLO","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u202E"},8288:{"value":"2060","name":"WORD JOINER","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2060"},8289:{"value":"2061","name":"FUNCTION APPLICATION","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2061"},8290:{"value":"2062","name":"INVISIBLE TIMES","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2062"},8291:{"value":"2063","name":"INVISIBLE SEPARATOR","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2063"},8292:{"value":"2064","name":"INVISIBLE PLUS","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2064"},8294:{"value":"2066","name":"LEFT-TO-RIGHT ISOLATE","category":"Cf","class":"0","bidirectional_category":"LRI","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2066"},8295:{"value":"2067","name":"RIGHT-TO-LEFT ISOLATE","category":"Cf","class":"0","bidirectional_category":"RLI","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2067"},8296:{"value":"2068","name":"FIRST STRONG ISOLATE","category":"Cf","class":"0","bidirectional_category":"FSI","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2068"},8297:{"value":"2069","name":"POP DIRECTIONAL ISOLATE","category":"Cf","class":"0","bidirectional_category":"PDI","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2069"},8298:{"value":"206A","name":"INHIBIT SYMMETRIC SWAPPING","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u206A"},8299:{"value":"206B","name":"ACTIVATE SYMMETRIC SWAPPING","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u206B"},8300:{"value":"206C","name":"INHIBIT ARABIC FORM SHAPING","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u206C"},8301:{"value":"206D","name":"ACTIVATE ARABIC FORM SHAPING","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u206D"},8302:{"value":"206E","name":"NATIONAL DIGIT SHAPES","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u206E"},8303:{"value":"206F","name":"NOMINAL DIGIT SHAPES","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u206F"},65279:{"value":"FEFF","name":"ZERO WIDTH NO-BREAK SPACE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BYTE ORDER MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEFF"},65529:{"value":"FFF9","name":"INTERLINEAR ANNOTATION ANCHOR","category":"Cf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFF9"},65530:{"value":"FFFA","name":"INTERLINEAR ANNOTATION SEPARATOR","category":"Cf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFFA"},65531:{"value":"FFFB","name":"INTERLINEAR ANNOTATION TERMINATOR","category":"Cf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFFB"},69821:{"value":"110BD","name":"KAITHI NUMBER SIGN","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcbd"},69837:{"value":"110CD","name":"KAITHI NUMBER SIGN ABOVE","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udccd"},78896:{"value":"13430","name":"EGYPTIAN HIEROGLYPH VERTICAL JOINER","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc30"},78897:{"value":"13431","name":"EGYPTIAN HIEROGLYPH HORIZONTAL JOINER","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc31"},78898:{"value":"13432","name":"EGYPTIAN HIEROGLYPH INSERT AT TOP START","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc32"},78899:{"value":"13433","name":"EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc33"},78900:{"value":"13434","name":"EGYPTIAN HIEROGLYPH INSERT AT TOP END","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc34"},78901:{"value":"13435","name":"EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc35"},78902:{"value":"13436","name":"EGYPTIAN HIEROGLYPH OVERLAY MIDDLE","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc36"},78903:{"value":"13437","name":"EGYPTIAN HIEROGLYPH BEGIN SEGMENT","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc37"},78904:{"value":"13438","name":"EGYPTIAN HIEROGLYPH END SEGMENT","category":"Cf","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc38"},113824:{"value":"1BCA0","name":"SHORTHAND FORMAT LETTER OVERLAP","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udca0"},113825:{"value":"1BCA1","name":"SHORTHAND FORMAT CONTINUING OVERLAP","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udca1"},113826:{"value":"1BCA2","name":"SHORTHAND FORMAT DOWN STEP","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udca2"},113827:{"value":"1BCA3","name":"SHORTHAND FORMAT UP STEP","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udca3"},119155:{"value":"1D173","name":"MUSICAL SYMBOL BEGIN BEAM","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd73"},119156:{"value":"1D174","name":"MUSICAL SYMBOL END BEAM","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd74"},119157:{"value":"1D175","name":"MUSICAL SYMBOL BEGIN TIE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd75"},119158:{"value":"1D176","name":"MUSICAL SYMBOL END TIE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd76"},119159:{"value":"1D177","name":"MUSICAL SYMBOL BEGIN SLUR","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd77"},119160:{"value":"1D178","name":"MUSICAL SYMBOL END SLUR","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd78"},119161:{"value":"1D179","name":"MUSICAL SYMBOL BEGIN PHRASE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd79"},119162:{"value":"1D17A","name":"MUSICAL SYMBOL END PHRASE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd7a"},917505:{"value":"E0001","name":"LANGUAGE TAG","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc01"},917536:{"value":"E0020","name":"TAG SPACE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc20"},917537:{"value":"E0021","name":"TAG EXCLAMATION MARK","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc21"},917538:{"value":"E0022","name":"TAG QUOTATION MARK","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc22"},917539:{"value":"E0023","name":"TAG NUMBER SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc23"},917540:{"value":"E0024","name":"TAG DOLLAR SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc24"},917541:{"value":"E0025","name":"TAG PERCENT SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc25"},917542:{"value":"E0026","name":"TAG AMPERSAND","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc26"},917543:{"value":"E0027","name":"TAG APOSTROPHE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc27"},917544:{"value":"E0028","name":"TAG LEFT PARENTHESIS","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc28"},917545:{"value":"E0029","name":"TAG RIGHT PARENTHESIS","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc29"},917546:{"value":"E002A","name":"TAG ASTERISK","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc2a"},917547:{"value":"E002B","name":"TAG PLUS SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc2b"},917548:{"value":"E002C","name":"TAG COMMA","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc2c"},917549:{"value":"E002D","name":"TAG HYPHEN-MINUS","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc2d"},917550:{"value":"E002E","name":"TAG FULL STOP","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc2e"},917551:{"value":"E002F","name":"TAG SOLIDUS","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc2f"},917552:{"value":"E0030","name":"TAG DIGIT ZERO","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc30"},917553:{"value":"E0031","name":"TAG DIGIT ONE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc31"},917554:{"value":"E0032","name":"TAG DIGIT TWO","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc32"},917555:{"value":"E0033","name":"TAG DIGIT THREE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc33"},917556:{"value":"E0034","name":"TAG DIGIT FOUR","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc34"},917557:{"value":"E0035","name":"TAG DIGIT FIVE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc35"},917558:{"value":"E0036","name":"TAG DIGIT SIX","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc36"},917559:{"value":"E0037","name":"TAG DIGIT SEVEN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc37"},917560:{"value":"E0038","name":"TAG DIGIT EIGHT","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc38"},917561:{"value":"E0039","name":"TAG DIGIT NINE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc39"},917562:{"value":"E003A","name":"TAG COLON","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc3a"},917563:{"value":"E003B","name":"TAG SEMICOLON","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc3b"},917564:{"value":"E003C","name":"TAG LESS-THAN SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc3c"},917565:{"value":"E003D","name":"TAG EQUALS SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc3d"},917566:{"value":"E003E","name":"TAG GREATER-THAN SIGN","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc3e"},917567:{"value":"E003F","name":"TAG QUESTION MARK","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc3f"},917568:{"value":"E0040","name":"TAG COMMERCIAL AT","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc40"},917569:{"value":"E0041","name":"TAG LATIN CAPITAL LETTER A","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc41"},917570:{"value":"E0042","name":"TAG LATIN CAPITAL LETTER B","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc42"},917571:{"value":"E0043","name":"TAG LATIN CAPITAL LETTER C","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc43"},917572:{"value":"E0044","name":"TAG LATIN CAPITAL LETTER D","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc44"},917573:{"value":"E0045","name":"TAG LATIN CAPITAL LETTER E","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc45"},917574:{"value":"E0046","name":"TAG LATIN CAPITAL LETTER F","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc46"},917575:{"value":"E0047","name":"TAG LATIN CAPITAL LETTER G","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc47"},917576:{"value":"E0048","name":"TAG LATIN CAPITAL LETTER H","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc48"},917577:{"value":"E0049","name":"TAG LATIN CAPITAL LETTER I","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc49"},917578:{"value":"E004A","name":"TAG LATIN CAPITAL LETTER J","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc4a"},917579:{"value":"E004B","name":"TAG LATIN CAPITAL LETTER K","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc4b"},917580:{"value":"E004C","name":"TAG LATIN CAPITAL LETTER L","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc4c"},917581:{"value":"E004D","name":"TAG LATIN CAPITAL LETTER M","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc4d"},917582:{"value":"E004E","name":"TAG LATIN CAPITAL LETTER N","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc4e"},917583:{"value":"E004F","name":"TAG LATIN CAPITAL LETTER O","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc4f"},917584:{"value":"E0050","name":"TAG LATIN CAPITAL LETTER P","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc50"},917585:{"value":"E0051","name":"TAG LATIN CAPITAL LETTER Q","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc51"},917586:{"value":"E0052","name":"TAG LATIN CAPITAL LETTER R","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc52"},917587:{"value":"E0053","name":"TAG LATIN CAPITAL LETTER S","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc53"},917588:{"value":"E0054","name":"TAG LATIN CAPITAL LETTER T","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc54"},917589:{"value":"E0055","name":"TAG LATIN CAPITAL LETTER U","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc55"},917590:{"value":"E0056","name":"TAG LATIN CAPITAL LETTER V","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc56"},917591:{"value":"E0057","name":"TAG LATIN CAPITAL LETTER W","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc57"},917592:{"value":"E0058","name":"TAG LATIN CAPITAL LETTER X","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc58"},917593:{"value":"E0059","name":"TAG LATIN CAPITAL LETTER Y","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc59"},917594:{"value":"E005A","name":"TAG LATIN CAPITAL LETTER Z","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc5a"},917595:{"value":"E005B","name":"TAG LEFT SQUARE BRACKET","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc5b"},917596:{"value":"E005C","name":"TAG REVERSE SOLIDUS","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc5c"},917597:{"value":"E005D","name":"TAG RIGHT SQUARE BRACKET","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc5d"},917598:{"value":"E005E","name":"TAG CIRCUMFLEX ACCENT","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc5e"},917599:{"value":"E005F","name":"TAG LOW LINE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc5f"},917600:{"value":"E0060","name":"TAG GRAVE ACCENT","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc60"},917601:{"value":"E0061","name":"TAG LATIN SMALL LETTER A","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc61"},917602:{"value":"E0062","name":"TAG LATIN SMALL LETTER B","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc62"},917603:{"value":"E0063","name":"TAG LATIN SMALL LETTER C","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc63"},917604:{"value":"E0064","name":"TAG LATIN SMALL LETTER D","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc64"},917605:{"value":"E0065","name":"TAG LATIN SMALL LETTER E","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc65"},917606:{"value":"E0066","name":"TAG LATIN SMALL LETTER F","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc66"},917607:{"value":"E0067","name":"TAG LATIN SMALL LETTER G","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc67"},917608:{"value":"E0068","name":"TAG LATIN SMALL LETTER H","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc68"},917609:{"value":"E0069","name":"TAG LATIN SMALL LETTER I","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc69"},917610:{"value":"E006A","name":"TAG LATIN SMALL LETTER J","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc6a"},917611:{"value":"E006B","name":"TAG LATIN SMALL LETTER K","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc6b"},917612:{"value":"E006C","name":"TAG LATIN SMALL LETTER L","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc6c"},917613:{"value":"E006D","name":"TAG LATIN SMALL LETTER M","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc6d"},917614:{"value":"E006E","name":"TAG LATIN SMALL LETTER N","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc6e"},917615:{"value":"E006F","name":"TAG LATIN SMALL LETTER O","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc6f"},917616:{"value":"E0070","name":"TAG LATIN SMALL LETTER P","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc70"},917617:{"value":"E0071","name":"TAG LATIN SMALL LETTER Q","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc71"},917618:{"value":"E0072","name":"TAG LATIN SMALL LETTER R","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc72"},917619:{"value":"E0073","name":"TAG LATIN SMALL LETTER S","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc73"},917620:{"value":"E0074","name":"TAG LATIN SMALL LETTER T","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc74"},917621:{"value":"E0075","name":"TAG LATIN SMALL LETTER U","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc75"},917622:{"value":"E0076","name":"TAG LATIN SMALL LETTER V","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc76"},917623:{"value":"E0077","name":"TAG LATIN SMALL LETTER W","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc77"},917624:{"value":"E0078","name":"TAG LATIN SMALL LETTER X","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc78"},917625:{"value":"E0079","name":"TAG LATIN SMALL LETTER Y","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc79"},917626:{"value":"E007A","name":"TAG LATIN SMALL LETTER Z","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc7a"},917627:{"value":"E007B","name":"TAG LEFT CURLY BRACKET","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc7b"},917628:{"value":"E007C","name":"TAG VERTICAL LINE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc7c"},917629:{"value":"E007D","name":"TAG RIGHT CURLY BRACKET","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc7d"},917630:{"value":"E007E","name":"TAG TILDE","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc7e"},917631:{"value":"E007F","name":"CANCEL TAG","category":"Cf","class":"0","bidirectional_category":"BN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udc7f"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Co.js b/node_modules/unicode/category/Co.js new file mode 100644 index 000000000..e423af8e6 --- /dev/null +++ b/node_modules/unicode/category/Co.js @@ -0,0 +1 @@ +module.exports={57344:{"value":"E000","name":"","category":"Co","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uE000"},63743:{"value":"F8FF","name":"","category":"Co","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF8FF"},983040:{"value":"F0000","name":"","category":"Co","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb80\udc00"},1048573:{"value":"FFFFD","name":"","category":"Co","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udbbf\udffd"},1048576:{"value":"100000","name":"","category":"Co","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udbc0\udc00"},1114109:{"value":"10FFFD","name":"","category":"Co","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udbff\udffd"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Cs.js b/node_modules/unicode/category/Cs.js new file mode 100644 index 000000000..e121f4744 --- /dev/null +++ b/node_modules/unicode/category/Cs.js @@ -0,0 +1 @@ +module.exports={55296:{"value":"D800","name":"","category":"Cs","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD800"},56191:{"value":"DB7F","name":"","category":"Cs","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uDB7F"},56192:{"value":"DB80","name":"","category":"Cs","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uDB80"},56319:{"value":"DBFF","name":"","category":"Cs","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uDBFF"},56320:{"value":"DC00","name":"","category":"Cs","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uDC00"},57343:{"value":"DFFF","name":"","category":"Cs","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uDFFF"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Ll.js b/node_modules/unicode/category/Ll.js new file mode 100644 index 000000000..acd16b0e6 --- /dev/null +++ b/node_modules/unicode/category/Ll.js @@ -0,0 +1 @@ +module.exports={97:{"value":"0061","name":"LATIN SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0041","lowercase_mapping":"","titlecase_mapping":"0041","symbol":"\x61"},98:{"value":"0062","name":"LATIN SMALL LETTER B","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0042","lowercase_mapping":"","titlecase_mapping":"0042","symbol":"\x62"},99:{"value":"0063","name":"LATIN SMALL LETTER C","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0043","lowercase_mapping":"","titlecase_mapping":"0043","symbol":"\x63"},100:{"value":"0064","name":"LATIN SMALL LETTER D","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0044","lowercase_mapping":"","titlecase_mapping":"0044","symbol":"\x64"},101:{"value":"0065","name":"LATIN SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0045","lowercase_mapping":"","titlecase_mapping":"0045","symbol":"\x65"},102:{"value":"0066","name":"LATIN SMALL LETTER F","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0046","lowercase_mapping":"","titlecase_mapping":"0046","symbol":"\x66"},103:{"value":"0067","name":"LATIN SMALL LETTER G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0047","lowercase_mapping":"","titlecase_mapping":"0047","symbol":"\x67"},104:{"value":"0068","name":"LATIN SMALL LETTER H","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0048","lowercase_mapping":"","titlecase_mapping":"0048","symbol":"\x68"},105:{"value":"0069","name":"LATIN SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0049","lowercase_mapping":"","titlecase_mapping":"0049","symbol":"\x69"},106:{"value":"006A","name":"LATIN SMALL LETTER J","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"004A","lowercase_mapping":"","titlecase_mapping":"004A","symbol":"\x6A"},107:{"value":"006B","name":"LATIN SMALL LETTER K","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"004B","lowercase_mapping":"","titlecase_mapping":"004B","symbol":"\x6B"},108:{"value":"006C","name":"LATIN SMALL LETTER L","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"004C","lowercase_mapping":"","titlecase_mapping":"004C","symbol":"\x6C"},109:{"value":"006D","name":"LATIN SMALL LETTER M","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"004D","lowercase_mapping":"","titlecase_mapping":"004D","symbol":"\x6D"},110:{"value":"006E","name":"LATIN SMALL LETTER N","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"004E","lowercase_mapping":"","titlecase_mapping":"004E","symbol":"\x6E"},111:{"value":"006F","name":"LATIN SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"004F","lowercase_mapping":"","titlecase_mapping":"004F","symbol":"\x6F"},112:{"value":"0070","name":"LATIN SMALL LETTER P","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0050","lowercase_mapping":"","titlecase_mapping":"0050","symbol":"\x70"},113:{"value":"0071","name":"LATIN SMALL LETTER Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0051","lowercase_mapping":"","titlecase_mapping":"0051","symbol":"\x71"},114:{"value":"0072","name":"LATIN SMALL LETTER R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0052","lowercase_mapping":"","titlecase_mapping":"0052","symbol":"\x72"},115:{"value":"0073","name":"LATIN SMALL LETTER S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0053","lowercase_mapping":"","titlecase_mapping":"0053","symbol":"\x73"},116:{"value":"0074","name":"LATIN SMALL LETTER T","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0054","lowercase_mapping":"","titlecase_mapping":"0054","symbol":"\x74"},117:{"value":"0075","name":"LATIN SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0055","lowercase_mapping":"","titlecase_mapping":"0055","symbol":"\x75"},118:{"value":"0076","name":"LATIN SMALL LETTER V","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0056","lowercase_mapping":"","titlecase_mapping":"0056","symbol":"\x76"},119:{"value":"0077","name":"LATIN SMALL LETTER W","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0057","lowercase_mapping":"","titlecase_mapping":"0057","symbol":"\x77"},120:{"value":"0078","name":"LATIN SMALL LETTER X","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0058","lowercase_mapping":"","titlecase_mapping":"0058","symbol":"\x78"},121:{"value":"0079","name":"LATIN SMALL LETTER Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0059","lowercase_mapping":"","titlecase_mapping":"0059","symbol":"\x79"},122:{"value":"007A","name":"LATIN SMALL LETTER Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"005A","lowercase_mapping":"","titlecase_mapping":"005A","symbol":"\x7A"},181:{"value":"00B5","name":"MICRO SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"039C","lowercase_mapping":"","titlecase_mapping":"039C","symbol":"\xB5"},223:{"value":"00DF","name":"LATIN SMALL LETTER SHARP S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xDF"},224:{"value":"00E0","name":"LATIN SMALL LETTER A WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A GRAVE","comment":"","uppercase_mapping":"00C0","lowercase_mapping":"","titlecase_mapping":"00C0","symbol":"\xE0"},225:{"value":"00E1","name":"LATIN SMALL LETTER A WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A ACUTE","comment":"","uppercase_mapping":"00C1","lowercase_mapping":"","titlecase_mapping":"00C1","symbol":"\xE1"},226:{"value":"00E2","name":"LATIN SMALL LETTER A WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A CIRCUMFLEX","comment":"","uppercase_mapping":"00C2","lowercase_mapping":"","titlecase_mapping":"00C2","symbol":"\xE2"},227:{"value":"00E3","name":"LATIN SMALL LETTER A WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A TILDE","comment":"","uppercase_mapping":"00C3","lowercase_mapping":"","titlecase_mapping":"00C3","symbol":"\xE3"},228:{"value":"00E4","name":"LATIN SMALL LETTER A WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A DIAERESIS","comment":"","uppercase_mapping":"00C4","lowercase_mapping":"","titlecase_mapping":"00C4","symbol":"\xE4"},229:{"value":"00E5","name":"LATIN SMALL LETTER A WITH RING ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A RING","comment":"","uppercase_mapping":"00C5","lowercase_mapping":"","titlecase_mapping":"00C5","symbol":"\xE5"},230:{"value":"00E6","name":"LATIN SMALL LETTER AE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A E","comment":"","uppercase_mapping":"00C6","lowercase_mapping":"","titlecase_mapping":"00C6","symbol":"\xE6"},231:{"value":"00E7","name":"LATIN SMALL LETTER C WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0063 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C CEDILLA","comment":"","uppercase_mapping":"00C7","lowercase_mapping":"","titlecase_mapping":"00C7","symbol":"\xE7"},232:{"value":"00E8","name":"LATIN SMALL LETTER E WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E GRAVE","comment":"","uppercase_mapping":"00C8","lowercase_mapping":"","titlecase_mapping":"00C8","symbol":"\xE8"},233:{"value":"00E9","name":"LATIN SMALL LETTER E WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E ACUTE","comment":"","uppercase_mapping":"00C9","lowercase_mapping":"","titlecase_mapping":"00C9","symbol":"\xE9"},234:{"value":"00EA","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E CIRCUMFLEX","comment":"","uppercase_mapping":"00CA","lowercase_mapping":"","titlecase_mapping":"00CA","symbol":"\xEA"},235:{"value":"00EB","name":"LATIN SMALL LETTER E WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E DIAERESIS","comment":"","uppercase_mapping":"00CB","lowercase_mapping":"","titlecase_mapping":"00CB","symbol":"\xEB"},236:{"value":"00EC","name":"LATIN SMALL LETTER I WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I GRAVE","comment":"","uppercase_mapping":"00CC","lowercase_mapping":"","titlecase_mapping":"00CC","symbol":"\xEC"},237:{"value":"00ED","name":"LATIN SMALL LETTER I WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I ACUTE","comment":"","uppercase_mapping":"00CD","lowercase_mapping":"","titlecase_mapping":"00CD","symbol":"\xED"},238:{"value":"00EE","name":"LATIN SMALL LETTER I WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I CIRCUMFLEX","comment":"","uppercase_mapping":"00CE","lowercase_mapping":"","titlecase_mapping":"00CE","symbol":"\xEE"},239:{"value":"00EF","name":"LATIN SMALL LETTER I WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I DIAERESIS","comment":"","uppercase_mapping":"00CF","lowercase_mapping":"","titlecase_mapping":"00CF","symbol":"\xEF"},240:{"value":"00F0","name":"LATIN SMALL LETTER ETH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"00D0","lowercase_mapping":"","titlecase_mapping":"00D0","symbol":"\xF0"},241:{"value":"00F1","name":"LATIN SMALL LETTER N WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N TILDE","comment":"","uppercase_mapping":"00D1","lowercase_mapping":"","titlecase_mapping":"00D1","symbol":"\xF1"},242:{"value":"00F2","name":"LATIN SMALL LETTER O WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O GRAVE","comment":"","uppercase_mapping":"00D2","lowercase_mapping":"","titlecase_mapping":"00D2","symbol":"\xF2"},243:{"value":"00F3","name":"LATIN SMALL LETTER O WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O ACUTE","comment":"","uppercase_mapping":"00D3","lowercase_mapping":"","titlecase_mapping":"00D3","symbol":"\xF3"},244:{"value":"00F4","name":"LATIN SMALL LETTER O WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O CIRCUMFLEX","comment":"","uppercase_mapping":"00D4","lowercase_mapping":"","titlecase_mapping":"00D4","symbol":"\xF4"},245:{"value":"00F5","name":"LATIN SMALL LETTER O WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O TILDE","comment":"","uppercase_mapping":"00D5","lowercase_mapping":"","titlecase_mapping":"00D5","symbol":"\xF5"},246:{"value":"00F6","name":"LATIN SMALL LETTER O WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O DIAERESIS","comment":"","uppercase_mapping":"00D6","lowercase_mapping":"","titlecase_mapping":"00D6","symbol":"\xF6"},248:{"value":"00F8","name":"LATIN SMALL LETTER O WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O SLASH","comment":"","uppercase_mapping":"00D8","lowercase_mapping":"","titlecase_mapping":"00D8","symbol":"\xF8"},249:{"value":"00F9","name":"LATIN SMALL LETTER U WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U GRAVE","comment":"","uppercase_mapping":"00D9","lowercase_mapping":"","titlecase_mapping":"00D9","symbol":"\xF9"},250:{"value":"00FA","name":"LATIN SMALL LETTER U WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U ACUTE","comment":"","uppercase_mapping":"00DA","lowercase_mapping":"","titlecase_mapping":"00DA","symbol":"\xFA"},251:{"value":"00FB","name":"LATIN SMALL LETTER U WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U CIRCUMFLEX","comment":"","uppercase_mapping":"00DB","lowercase_mapping":"","titlecase_mapping":"00DB","symbol":"\xFB"},252:{"value":"00FC","name":"LATIN SMALL LETTER U WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U DIAERESIS","comment":"","uppercase_mapping":"00DC","lowercase_mapping":"","titlecase_mapping":"00DC","symbol":"\xFC"},253:{"value":"00FD","name":"LATIN SMALL LETTER Y WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Y ACUTE","comment":"","uppercase_mapping":"00DD","lowercase_mapping":"","titlecase_mapping":"00DD","symbol":"\xFD"},254:{"value":"00FE","name":"LATIN SMALL LETTER THORN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"00DE","lowercase_mapping":"","titlecase_mapping":"00DE","symbol":"\xFE"},255:{"value":"00FF","name":"LATIN SMALL LETTER Y WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Y DIAERESIS","comment":"","uppercase_mapping":"0178","lowercase_mapping":"","titlecase_mapping":"0178","symbol":"\xFF"},257:{"value":"0101","name":"LATIN SMALL LETTER A WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A MACRON","comment":"","uppercase_mapping":"0100","lowercase_mapping":"","titlecase_mapping":"0100","symbol":"\u0101"},259:{"value":"0103","name":"LATIN SMALL LETTER A WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A BREVE","comment":"","uppercase_mapping":"0102","lowercase_mapping":"","titlecase_mapping":"0102","symbol":"\u0103"},261:{"value":"0105","name":"LATIN SMALL LETTER A WITH OGONEK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A OGONEK","comment":"","uppercase_mapping":"0104","lowercase_mapping":"","titlecase_mapping":"0104","symbol":"\u0105"},263:{"value":"0107","name":"LATIN SMALL LETTER C WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0063 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C ACUTE","comment":"","uppercase_mapping":"0106","lowercase_mapping":"","titlecase_mapping":"0106","symbol":"\u0107"},265:{"value":"0109","name":"LATIN SMALL LETTER C WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0063 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C CIRCUMFLEX","comment":"","uppercase_mapping":"0108","lowercase_mapping":"","titlecase_mapping":"0108","symbol":"\u0109"},267:{"value":"010B","name":"LATIN SMALL LETTER C WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0063 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C DOT","comment":"","uppercase_mapping":"010A","lowercase_mapping":"","titlecase_mapping":"010A","symbol":"\u010B"},269:{"value":"010D","name":"LATIN SMALL LETTER C WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0063 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C HACEK","comment":"","uppercase_mapping":"010C","lowercase_mapping":"","titlecase_mapping":"010C","symbol":"\u010D"},271:{"value":"010F","name":"LATIN SMALL LETTER D WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0064 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D HACEK","comment":"","uppercase_mapping":"010E","lowercase_mapping":"","titlecase_mapping":"010E","symbol":"\u010F"},273:{"value":"0111","name":"LATIN SMALL LETTER D WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D BAR","comment":"","uppercase_mapping":"0110","lowercase_mapping":"","titlecase_mapping":"0110","symbol":"\u0111"},275:{"value":"0113","name":"LATIN SMALL LETTER E WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E MACRON","comment":"","uppercase_mapping":"0112","lowercase_mapping":"","titlecase_mapping":"0112","symbol":"\u0113"},277:{"value":"0115","name":"LATIN SMALL LETTER E WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E BREVE","comment":"","uppercase_mapping":"0114","lowercase_mapping":"","titlecase_mapping":"0114","symbol":"\u0115"},279:{"value":"0117","name":"LATIN SMALL LETTER E WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E DOT","comment":"","uppercase_mapping":"0116","lowercase_mapping":"","titlecase_mapping":"0116","symbol":"\u0117"},281:{"value":"0119","name":"LATIN SMALL LETTER E WITH OGONEK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E OGONEK","comment":"","uppercase_mapping":"0118","lowercase_mapping":"","titlecase_mapping":"0118","symbol":"\u0119"},283:{"value":"011B","name":"LATIN SMALL LETTER E WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER E HACEK","comment":"","uppercase_mapping":"011A","lowercase_mapping":"","titlecase_mapping":"011A","symbol":"\u011B"},285:{"value":"011D","name":"LATIN SMALL LETTER G WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G CIRCUMFLEX","comment":"","uppercase_mapping":"011C","lowercase_mapping":"","titlecase_mapping":"011C","symbol":"\u011D"},287:{"value":"011F","name":"LATIN SMALL LETTER G WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G BREVE","comment":"","uppercase_mapping":"011E","lowercase_mapping":"","titlecase_mapping":"011E","symbol":"\u011F"},289:{"value":"0121","name":"LATIN SMALL LETTER G WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G DOT","comment":"","uppercase_mapping":"0120","lowercase_mapping":"","titlecase_mapping":"0120","symbol":"\u0121"},291:{"value":"0123","name":"LATIN SMALL LETTER G WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G CEDILLA","comment":"","uppercase_mapping":"0122","lowercase_mapping":"","titlecase_mapping":"0122","symbol":"\u0123"},293:{"value":"0125","name":"LATIN SMALL LETTER H WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER H CIRCUMFLEX","comment":"","uppercase_mapping":"0124","lowercase_mapping":"","titlecase_mapping":"0124","symbol":"\u0125"},295:{"value":"0127","name":"LATIN SMALL LETTER H WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER H BAR","comment":"","uppercase_mapping":"0126","lowercase_mapping":"","titlecase_mapping":"0126","symbol":"\u0127"},297:{"value":"0129","name":"LATIN SMALL LETTER I WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I TILDE","comment":"","uppercase_mapping":"0128","lowercase_mapping":"","titlecase_mapping":"0128","symbol":"\u0129"},299:{"value":"012B","name":"LATIN SMALL LETTER I WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I MACRON","comment":"","uppercase_mapping":"012A","lowercase_mapping":"","titlecase_mapping":"012A","symbol":"\u012B"},301:{"value":"012D","name":"LATIN SMALL LETTER I WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I BREVE","comment":"","uppercase_mapping":"012C","lowercase_mapping":"","titlecase_mapping":"012C","symbol":"\u012D"},303:{"value":"012F","name":"LATIN SMALL LETTER I WITH OGONEK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I OGONEK","comment":"","uppercase_mapping":"012E","lowercase_mapping":"","titlecase_mapping":"012E","symbol":"\u012F"},305:{"value":"0131","name":"LATIN SMALL LETTER DOTLESS I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0049","lowercase_mapping":"","titlecase_mapping":"0049","symbol":"\u0131"},307:{"value":"0133","name":"LATIN SMALL LIGATURE IJ","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I J","comment":"","uppercase_mapping":"0132","lowercase_mapping":"","titlecase_mapping":"0132","symbol":"\u0133"},309:{"value":"0135","name":"LATIN SMALL LETTER J WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006A 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER J CIRCUMFLEX","comment":"","uppercase_mapping":"0134","lowercase_mapping":"","titlecase_mapping":"0134","symbol":"\u0135"},311:{"value":"0137","name":"LATIN SMALL LETTER K WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006B 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER K CEDILLA","comment":"","uppercase_mapping":"0136","lowercase_mapping":"","titlecase_mapping":"0136","symbol":"\u0137"},312:{"value":"0138","name":"LATIN SMALL LETTER KRA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0138"},314:{"value":"013A","name":"LATIN SMALL LETTER L WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006C 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L ACUTE","comment":"","uppercase_mapping":"0139","lowercase_mapping":"","titlecase_mapping":"0139","symbol":"\u013A"},316:{"value":"013C","name":"LATIN SMALL LETTER L WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006C 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L CEDILLA","comment":"","uppercase_mapping":"013B","lowercase_mapping":"","titlecase_mapping":"013B","symbol":"\u013C"},318:{"value":"013E","name":"LATIN SMALL LETTER L WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006C 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L HACEK","comment":"","uppercase_mapping":"013D","lowercase_mapping":"","titlecase_mapping":"013D","symbol":"\u013E"},320:{"value":"0140","name":"LATIN SMALL LETTER L WITH MIDDLE DOT","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C 00B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"013F","lowercase_mapping":"","titlecase_mapping":"013F","symbol":"\u0140"},322:{"value":"0142","name":"LATIN SMALL LETTER L WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L SLASH","comment":"","uppercase_mapping":"0141","lowercase_mapping":"","titlecase_mapping":"0141","symbol":"\u0142"},324:{"value":"0144","name":"LATIN SMALL LETTER N WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N ACUTE","comment":"","uppercase_mapping":"0143","lowercase_mapping":"","titlecase_mapping":"0143","symbol":"\u0144"},326:{"value":"0146","name":"LATIN SMALL LETTER N WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N CEDILLA","comment":"","uppercase_mapping":"0145","lowercase_mapping":"","titlecase_mapping":"0145","symbol":"\u0146"},328:{"value":"0148","name":"LATIN SMALL LETTER N WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N HACEK","comment":"","uppercase_mapping":"0147","lowercase_mapping":"","titlecase_mapping":"0147","symbol":"\u0148"},329:{"value":"0149","name":"LATIN SMALL LETTER N PRECEDED BY APOSTROPHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 02BC 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER APOSTROPHE N","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0149"},331:{"value":"014B","name":"LATIN SMALL LETTER ENG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"014A","lowercase_mapping":"","titlecase_mapping":"014A","symbol":"\u014B"},333:{"value":"014D","name":"LATIN SMALL LETTER O WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O MACRON","comment":"","uppercase_mapping":"014C","lowercase_mapping":"","titlecase_mapping":"014C","symbol":"\u014D"},335:{"value":"014F","name":"LATIN SMALL LETTER O WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O BREVE","comment":"","uppercase_mapping":"014E","lowercase_mapping":"","titlecase_mapping":"014E","symbol":"\u014F"},337:{"value":"0151","name":"LATIN SMALL LETTER O WITH DOUBLE ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O DOUBLE ACUTE","comment":"","uppercase_mapping":"0150","lowercase_mapping":"","titlecase_mapping":"0150","symbol":"\u0151"},339:{"value":"0153","name":"LATIN SMALL LIGATURE OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O E","comment":"","uppercase_mapping":"0152","lowercase_mapping":"","titlecase_mapping":"0152","symbol":"\u0153"},341:{"value":"0155","name":"LATIN SMALL LETTER R WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER R ACUTE","comment":"","uppercase_mapping":"0154","lowercase_mapping":"","titlecase_mapping":"0154","symbol":"\u0155"},343:{"value":"0157","name":"LATIN SMALL LETTER R WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER R CEDILLA","comment":"","uppercase_mapping":"0156","lowercase_mapping":"","titlecase_mapping":"0156","symbol":"\u0157"},345:{"value":"0159","name":"LATIN SMALL LETTER R WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER R HACEK","comment":"","uppercase_mapping":"0158","lowercase_mapping":"","titlecase_mapping":"0158","symbol":"\u0159"},347:{"value":"015B","name":"LATIN SMALL LETTER S WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER S ACUTE","comment":"","uppercase_mapping":"015A","lowercase_mapping":"","titlecase_mapping":"015A","symbol":"\u015B"},349:{"value":"015D","name":"LATIN SMALL LETTER S WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER S CIRCUMFLEX","comment":"","uppercase_mapping":"015C","lowercase_mapping":"","titlecase_mapping":"015C","symbol":"\u015D"},351:{"value":"015F","name":"LATIN SMALL LETTER S WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER S CEDILLA","comment":"","uppercase_mapping":"015E","lowercase_mapping":"","titlecase_mapping":"015E","symbol":"\u015F"},353:{"value":"0161","name":"LATIN SMALL LETTER S WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER S HACEK","comment":"","uppercase_mapping":"0160","lowercase_mapping":"","titlecase_mapping":"0160","symbol":"\u0161"},355:{"value":"0163","name":"LATIN SMALL LETTER T WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T CEDILLA","comment":"","uppercase_mapping":"0162","lowercase_mapping":"","titlecase_mapping":"0162","symbol":"\u0163"},357:{"value":"0165","name":"LATIN SMALL LETTER T WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T HACEK","comment":"","uppercase_mapping":"0164","lowercase_mapping":"","titlecase_mapping":"0164","symbol":"\u0165"},359:{"value":"0167","name":"LATIN SMALL LETTER T WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T BAR","comment":"","uppercase_mapping":"0166","lowercase_mapping":"","titlecase_mapping":"0166","symbol":"\u0167"},361:{"value":"0169","name":"LATIN SMALL LETTER U WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U TILDE","comment":"","uppercase_mapping":"0168","lowercase_mapping":"","titlecase_mapping":"0168","symbol":"\u0169"},363:{"value":"016B","name":"LATIN SMALL LETTER U WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U MACRON","comment":"","uppercase_mapping":"016A","lowercase_mapping":"","titlecase_mapping":"016A","symbol":"\u016B"},365:{"value":"016D","name":"LATIN SMALL LETTER U WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U BREVE","comment":"","uppercase_mapping":"016C","lowercase_mapping":"","titlecase_mapping":"016C","symbol":"\u016D"},367:{"value":"016F","name":"LATIN SMALL LETTER U WITH RING ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U RING","comment":"","uppercase_mapping":"016E","lowercase_mapping":"","titlecase_mapping":"016E","symbol":"\u016F"},369:{"value":"0171","name":"LATIN SMALL LETTER U WITH DOUBLE ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U DOUBLE ACUTE","comment":"","uppercase_mapping":"0170","lowercase_mapping":"","titlecase_mapping":"0170","symbol":"\u0171"},371:{"value":"0173","name":"LATIN SMALL LETTER U WITH OGONEK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U OGONEK","comment":"","uppercase_mapping":"0172","lowercase_mapping":"","titlecase_mapping":"0172","symbol":"\u0173"},373:{"value":"0175","name":"LATIN SMALL LETTER W WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER W CIRCUMFLEX","comment":"","uppercase_mapping":"0174","lowercase_mapping":"","titlecase_mapping":"0174","symbol":"\u0175"},375:{"value":"0177","name":"LATIN SMALL LETTER Y WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Y CIRCUMFLEX","comment":"","uppercase_mapping":"0176","lowercase_mapping":"","titlecase_mapping":"0176","symbol":"\u0177"},378:{"value":"017A","name":"LATIN SMALL LETTER Z WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"007A 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Z ACUTE","comment":"","uppercase_mapping":"0179","lowercase_mapping":"","titlecase_mapping":"0179","symbol":"\u017A"},380:{"value":"017C","name":"LATIN SMALL LETTER Z WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"007A 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Z DOT","comment":"","uppercase_mapping":"017B","lowercase_mapping":"","titlecase_mapping":"017B","symbol":"\u017C"},382:{"value":"017E","name":"LATIN SMALL LETTER Z WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"007A 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Z HACEK","comment":"","uppercase_mapping":"017D","lowercase_mapping":"","titlecase_mapping":"017D","symbol":"\u017E"},383:{"value":"017F","name":"LATIN SMALL LETTER LONG S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0053","lowercase_mapping":"","titlecase_mapping":"0053","symbol":"\u017F"},384:{"value":"0180","name":"LATIN SMALL LETTER B WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER B BAR","comment":"","uppercase_mapping":"0243","lowercase_mapping":"","titlecase_mapping":"0243","symbol":"\u0180"},387:{"value":"0183","name":"LATIN SMALL LETTER B WITH TOPBAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER B TOPBAR","comment":"","uppercase_mapping":"0182","lowercase_mapping":"","titlecase_mapping":"0182","symbol":"\u0183"},389:{"value":"0185","name":"LATIN SMALL LETTER TONE SIX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0184","lowercase_mapping":"","titlecase_mapping":"0184","symbol":"\u0185"},392:{"value":"0188","name":"LATIN SMALL LETTER C WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C HOOK","comment":"","uppercase_mapping":"0187","lowercase_mapping":"","titlecase_mapping":"0187","symbol":"\u0188"},396:{"value":"018C","name":"LATIN SMALL LETTER D WITH TOPBAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D TOPBAR","comment":"","uppercase_mapping":"018B","lowercase_mapping":"","titlecase_mapping":"018B","symbol":"\u018C"},397:{"value":"018D","name":"LATIN SMALL LETTER TURNED DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u018D"},402:{"value":"0192","name":"LATIN SMALL LETTER F WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER SCRIPT F","comment":"","uppercase_mapping":"0191","lowercase_mapping":"","titlecase_mapping":"0191","symbol":"\u0192"},405:{"value":"0195","name":"LATIN SMALL LETTER HV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER H V","comment":"","uppercase_mapping":"01F6","lowercase_mapping":"","titlecase_mapping":"01F6","symbol":"\u0195"},409:{"value":"0199","name":"LATIN SMALL LETTER K WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER K HOOK","comment":"","uppercase_mapping":"0198","lowercase_mapping":"","titlecase_mapping":"0198","symbol":"\u0199"},410:{"value":"019A","name":"LATIN SMALL LETTER L WITH BAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER BARRED L","comment":"","uppercase_mapping":"023D","lowercase_mapping":"","titlecase_mapping":"023D","symbol":"\u019A"},411:{"value":"019B","name":"LATIN SMALL LETTER LAMBDA WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER BARRED LAMBDA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u019B"},414:{"value":"019E","name":"LATIN SMALL LETTER N WITH LONG RIGHT LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0220","lowercase_mapping":"","titlecase_mapping":"0220","symbol":"\u019E"},417:{"value":"01A1","name":"LATIN SMALL LETTER O WITH HORN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 031B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O HORN","comment":"","uppercase_mapping":"01A0","lowercase_mapping":"","titlecase_mapping":"01A0","symbol":"\u01A1"},419:{"value":"01A3","name":"LATIN SMALL LETTER OI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O I","comment":"","uppercase_mapping":"01A2","lowercase_mapping":"","titlecase_mapping":"01A2","symbol":"\u01A3"},421:{"value":"01A5","name":"LATIN SMALL LETTER P WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER P HOOK","comment":"","uppercase_mapping":"01A4","lowercase_mapping":"","titlecase_mapping":"01A4","symbol":"\u01A5"},424:{"value":"01A8","name":"LATIN SMALL LETTER TONE TWO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01A7","lowercase_mapping":"","titlecase_mapping":"01A7","symbol":"\u01A8"},426:{"value":"01AA","name":"LATIN LETTER REVERSED ESH LOOP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01AA"},427:{"value":"01AB","name":"LATIN SMALL LETTER T WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T PALATAL HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01AB"},429:{"value":"01AD","name":"LATIN SMALL LETTER T WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T HOOK","comment":"","uppercase_mapping":"01AC","lowercase_mapping":"","titlecase_mapping":"01AC","symbol":"\u01AD"},432:{"value":"01B0","name":"LATIN SMALL LETTER U WITH HORN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 031B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U HORN","comment":"","uppercase_mapping":"01AF","lowercase_mapping":"","titlecase_mapping":"01AF","symbol":"\u01B0"},436:{"value":"01B4","name":"LATIN SMALL LETTER Y WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Y HOOK","comment":"","uppercase_mapping":"01B3","lowercase_mapping":"","titlecase_mapping":"01B3","symbol":"\u01B4"},438:{"value":"01B6","name":"LATIN SMALL LETTER Z WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Z BAR","comment":"","uppercase_mapping":"01B5","lowercase_mapping":"","titlecase_mapping":"01B5","symbol":"\u01B6"},441:{"value":"01B9","name":"LATIN SMALL LETTER EZH REVERSED","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER REVERSED YOGH","comment":"","uppercase_mapping":"01B8","lowercase_mapping":"","titlecase_mapping":"01B8","symbol":"\u01B9"},442:{"value":"01BA","name":"LATIN SMALL LETTER EZH WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER YOGH WITH TAIL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01BA"},445:{"value":"01BD","name":"LATIN SMALL LETTER TONE FIVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01BC","lowercase_mapping":"","titlecase_mapping":"01BC","symbol":"\u01BD"},446:{"value":"01BE","name":"LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER INVERTED GLOTTAL STOP BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01BE"},447:{"value":"01BF","name":"LATIN LETTER WYNN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01F7","lowercase_mapping":"","titlecase_mapping":"01F7","symbol":"\u01BF"},454:{"value":"01C6","name":"LATIN SMALL LETTER DZ WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064 017E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D Z HACEK","comment":"","uppercase_mapping":"01C4","lowercase_mapping":"","titlecase_mapping":"01C5","symbol":"\u01C6"},457:{"value":"01C9","name":"LATIN SMALL LETTER LJ","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L J","comment":"","uppercase_mapping":"01C7","lowercase_mapping":"","titlecase_mapping":"01C8","symbol":"\u01C9"},460:{"value":"01CC","name":"LATIN SMALL LETTER NJ","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N J","comment":"","uppercase_mapping":"01CA","lowercase_mapping":"","titlecase_mapping":"01CB","symbol":"\u01CC"},462:{"value":"01CE","name":"LATIN SMALL LETTER A WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A HACEK","comment":"","uppercase_mapping":"01CD","lowercase_mapping":"","titlecase_mapping":"01CD","symbol":"\u01CE"},464:{"value":"01D0","name":"LATIN SMALL LETTER I WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER I HACEK","comment":"","uppercase_mapping":"01CF","lowercase_mapping":"","titlecase_mapping":"01CF","symbol":"\u01D0"},466:{"value":"01D2","name":"LATIN SMALL LETTER O WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O HACEK","comment":"","uppercase_mapping":"01D1","lowercase_mapping":"","titlecase_mapping":"01D1","symbol":"\u01D2"},468:{"value":"01D4","name":"LATIN SMALL LETTER U WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U HACEK","comment":"","uppercase_mapping":"01D3","lowercase_mapping":"","titlecase_mapping":"01D3","symbol":"\u01D4"},470:{"value":"01D6","name":"LATIN SMALL LETTER U WITH DIAERESIS AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00FC 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U DIAERESIS MACRON","comment":"","uppercase_mapping":"01D5","lowercase_mapping":"","titlecase_mapping":"01D5","symbol":"\u01D6"},472:{"value":"01D8","name":"LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00FC 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U DIAERESIS ACUTE","comment":"","uppercase_mapping":"01D7","lowercase_mapping":"","titlecase_mapping":"01D7","symbol":"\u01D8"},474:{"value":"01DA","name":"LATIN SMALL LETTER U WITH DIAERESIS AND CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00FC 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U DIAERESIS HACEK","comment":"","uppercase_mapping":"01D9","lowercase_mapping":"","titlecase_mapping":"01D9","symbol":"\u01DA"},476:{"value":"01DC","name":"LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00FC 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER U DIAERESIS GRAVE","comment":"","uppercase_mapping":"01DB","lowercase_mapping":"","titlecase_mapping":"01DB","symbol":"\u01DC"},477:{"value":"01DD","name":"LATIN SMALL LETTER TURNED E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"018E","lowercase_mapping":"","titlecase_mapping":"018E","symbol":"\u01DD"},479:{"value":"01DF","name":"LATIN SMALL LETTER A WITH DIAERESIS AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E4 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A DIAERESIS MACRON","comment":"","uppercase_mapping":"01DE","lowercase_mapping":"","titlecase_mapping":"01DE","symbol":"\u01DF"},481:{"value":"01E1","name":"LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0227 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A DOT MACRON","comment":"","uppercase_mapping":"01E0","lowercase_mapping":"","titlecase_mapping":"01E0","symbol":"\u01E1"},483:{"value":"01E3","name":"LATIN SMALL LETTER AE WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E6 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER A E MACRON","comment":"","uppercase_mapping":"01E2","lowercase_mapping":"","titlecase_mapping":"01E2","symbol":"\u01E3"},485:{"value":"01E5","name":"LATIN SMALL LETTER G WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G BAR","comment":"","uppercase_mapping":"01E4","lowercase_mapping":"","titlecase_mapping":"01E4","symbol":"\u01E5"},487:{"value":"01E7","name":"LATIN SMALL LETTER G WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G HACEK","comment":"","uppercase_mapping":"01E6","lowercase_mapping":"","titlecase_mapping":"01E6","symbol":"\u01E7"},489:{"value":"01E9","name":"LATIN SMALL LETTER K WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006B 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER K HACEK","comment":"","uppercase_mapping":"01E8","lowercase_mapping":"","titlecase_mapping":"01E8","symbol":"\u01E9"},491:{"value":"01EB","name":"LATIN SMALL LETTER O WITH OGONEK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O OGONEK","comment":"","uppercase_mapping":"01EA","lowercase_mapping":"","titlecase_mapping":"01EA","symbol":"\u01EB"},493:{"value":"01ED","name":"LATIN SMALL LETTER O WITH OGONEK AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01EB 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER O OGONEK MACRON","comment":"","uppercase_mapping":"01EC","lowercase_mapping":"","titlecase_mapping":"01EC","symbol":"\u01ED"},495:{"value":"01EF","name":"LATIN SMALL LETTER EZH WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0292 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER YOGH HACEK","comment":"","uppercase_mapping":"01EE","lowercase_mapping":"","titlecase_mapping":"01EE","symbol":"\u01EF"},496:{"value":"01F0","name":"LATIN SMALL LETTER J WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006A 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER J HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01F0"},499:{"value":"01F3","name":"LATIN SMALL LETTER DZ","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01F1","lowercase_mapping":"","titlecase_mapping":"01F2","symbol":"\u01F3"},501:{"value":"01F5","name":"LATIN SMALL LETTER G WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01F4","lowercase_mapping":"","titlecase_mapping":"01F4","symbol":"\u01F5"},505:{"value":"01F9","name":"LATIN SMALL LETTER N WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01F8","lowercase_mapping":"","titlecase_mapping":"01F8","symbol":"\u01F9"},507:{"value":"01FB","name":"LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01FA","lowercase_mapping":"","titlecase_mapping":"01FA","symbol":"\u01FB"},509:{"value":"01FD","name":"LATIN SMALL LETTER AE WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E6 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01FC","lowercase_mapping":"","titlecase_mapping":"01FC","symbol":"\u01FD"},511:{"value":"01FF","name":"LATIN SMALL LETTER O WITH STROKE AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F8 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01FE","lowercase_mapping":"","titlecase_mapping":"01FE","symbol":"\u01FF"},513:{"value":"0201","name":"LATIN SMALL LETTER A WITH DOUBLE GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0200","lowercase_mapping":"","titlecase_mapping":"0200","symbol":"\u0201"},515:{"value":"0203","name":"LATIN SMALL LETTER A WITH INVERTED BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0202","lowercase_mapping":"","titlecase_mapping":"0202","symbol":"\u0203"},517:{"value":"0205","name":"LATIN SMALL LETTER E WITH DOUBLE GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0204","lowercase_mapping":"","titlecase_mapping":"0204","symbol":"\u0205"},519:{"value":"0207","name":"LATIN SMALL LETTER E WITH INVERTED BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0206","lowercase_mapping":"","titlecase_mapping":"0206","symbol":"\u0207"},521:{"value":"0209","name":"LATIN SMALL LETTER I WITH DOUBLE GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0208","lowercase_mapping":"","titlecase_mapping":"0208","symbol":"\u0209"},523:{"value":"020B","name":"LATIN SMALL LETTER I WITH INVERTED BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"020A","lowercase_mapping":"","titlecase_mapping":"020A","symbol":"\u020B"},525:{"value":"020D","name":"LATIN SMALL LETTER O WITH DOUBLE GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"020C","lowercase_mapping":"","titlecase_mapping":"020C","symbol":"\u020D"},527:{"value":"020F","name":"LATIN SMALL LETTER O WITH INVERTED BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"020E","lowercase_mapping":"","titlecase_mapping":"020E","symbol":"\u020F"},529:{"value":"0211","name":"LATIN SMALL LETTER R WITH DOUBLE GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0210","lowercase_mapping":"","titlecase_mapping":"0210","symbol":"\u0211"},531:{"value":"0213","name":"LATIN SMALL LETTER R WITH INVERTED BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0212","lowercase_mapping":"","titlecase_mapping":"0212","symbol":"\u0213"},533:{"value":"0215","name":"LATIN SMALL LETTER U WITH DOUBLE GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0214","lowercase_mapping":"","titlecase_mapping":"0214","symbol":"\u0215"},535:{"value":"0217","name":"LATIN SMALL LETTER U WITH INVERTED BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0216","lowercase_mapping":"","titlecase_mapping":"0216","symbol":"\u0217"},537:{"value":"0219","name":"LATIN SMALL LETTER S WITH COMMA BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 0326","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0218","lowercase_mapping":"","titlecase_mapping":"0218","symbol":"\u0219"},539:{"value":"021B","name":"LATIN SMALL LETTER T WITH COMMA BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 0326","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"021A","lowercase_mapping":"","titlecase_mapping":"021A","symbol":"\u021B"},541:{"value":"021D","name":"LATIN SMALL LETTER YOGH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"021C","lowercase_mapping":"","titlecase_mapping":"021C","symbol":"\u021D"},543:{"value":"021F","name":"LATIN SMALL LETTER H WITH CARON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"021E","lowercase_mapping":"","titlecase_mapping":"021E","symbol":"\u021F"},545:{"value":"0221","name":"LATIN SMALL LETTER D WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0221"},547:{"value":"0223","name":"LATIN SMALL LETTER OU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0222","lowercase_mapping":"","titlecase_mapping":"0222","symbol":"\u0223"},549:{"value":"0225","name":"LATIN SMALL LETTER Z WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0224","lowercase_mapping":"","titlecase_mapping":"0224","symbol":"\u0225"},551:{"value":"0227","name":"LATIN SMALL LETTER A WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0226","lowercase_mapping":"","titlecase_mapping":"0226","symbol":"\u0227"},553:{"value":"0229","name":"LATIN SMALL LETTER E WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0228","lowercase_mapping":"","titlecase_mapping":"0228","symbol":"\u0229"},555:{"value":"022B","name":"LATIN SMALL LETTER O WITH DIAERESIS AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F6 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"022A","lowercase_mapping":"","titlecase_mapping":"022A","symbol":"\u022B"},557:{"value":"022D","name":"LATIN SMALL LETTER O WITH TILDE AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F5 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"022C","lowercase_mapping":"","titlecase_mapping":"022C","symbol":"\u022D"},559:{"value":"022F","name":"LATIN SMALL LETTER O WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"022E","lowercase_mapping":"","titlecase_mapping":"022E","symbol":"\u022F"},561:{"value":"0231","name":"LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"022F 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0230","lowercase_mapping":"","titlecase_mapping":"0230","symbol":"\u0231"},563:{"value":"0233","name":"LATIN SMALL LETTER Y WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0232","lowercase_mapping":"","titlecase_mapping":"0232","symbol":"\u0233"},564:{"value":"0234","name":"LATIN SMALL LETTER L WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0234"},565:{"value":"0235","name":"LATIN SMALL LETTER N WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0235"},566:{"value":"0236","name":"LATIN SMALL LETTER T WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0236"},567:{"value":"0237","name":"LATIN SMALL LETTER DOTLESS J","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0237"},568:{"value":"0238","name":"LATIN SMALL LETTER DB DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0238"},569:{"value":"0239","name":"LATIN SMALL LETTER QP DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0239"},572:{"value":"023C","name":"LATIN SMALL LETTER C WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"023B","lowercase_mapping":"","titlecase_mapping":"023B","symbol":"\u023C"},575:{"value":"023F","name":"LATIN SMALL LETTER S WITH SWASH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C7E","lowercase_mapping":"","titlecase_mapping":"2C7E","symbol":"\u023F"},576:{"value":"0240","name":"LATIN SMALL LETTER Z WITH SWASH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C7F","lowercase_mapping":"","titlecase_mapping":"2C7F","symbol":"\u0240"},578:{"value":"0242","name":"LATIN SMALL LETTER GLOTTAL STOP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0241","lowercase_mapping":"","titlecase_mapping":"0241","symbol":"\u0242"},583:{"value":"0247","name":"LATIN SMALL LETTER E WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0246","lowercase_mapping":"","titlecase_mapping":"0246","symbol":"\u0247"},585:{"value":"0249","name":"LATIN SMALL LETTER J WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0248","lowercase_mapping":"","titlecase_mapping":"0248","symbol":"\u0249"},587:{"value":"024B","name":"LATIN SMALL LETTER Q WITH HOOK TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"024A","lowercase_mapping":"","titlecase_mapping":"024A","symbol":"\u024B"},589:{"value":"024D","name":"LATIN SMALL LETTER R WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"024C","lowercase_mapping":"","titlecase_mapping":"024C","symbol":"\u024D"},591:{"value":"024F","name":"LATIN SMALL LETTER Y WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"024E","lowercase_mapping":"","titlecase_mapping":"024E","symbol":"\u024F"},592:{"value":"0250","name":"LATIN SMALL LETTER TURNED A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C6F","lowercase_mapping":"","titlecase_mapping":"2C6F","symbol":"\u0250"},593:{"value":"0251","name":"LATIN SMALL LETTER ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER SCRIPT A","comment":"","uppercase_mapping":"2C6D","lowercase_mapping":"","titlecase_mapping":"2C6D","symbol":"\u0251"},594:{"value":"0252","name":"LATIN SMALL LETTER TURNED ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER TURNED SCRIPT A","comment":"","uppercase_mapping":"2C70","lowercase_mapping":"","titlecase_mapping":"2C70","symbol":"\u0252"},595:{"value":"0253","name":"LATIN SMALL LETTER B WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER B HOOK","comment":"","uppercase_mapping":"0181","lowercase_mapping":"","titlecase_mapping":"0181","symbol":"\u0253"},596:{"value":"0254","name":"LATIN SMALL LETTER OPEN O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0186","lowercase_mapping":"","titlecase_mapping":"0186","symbol":"\u0254"},597:{"value":"0255","name":"LATIN SMALL LETTER C WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER C CURL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0255"},598:{"value":"0256","name":"LATIN SMALL LETTER D WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D RETROFLEX HOOK","comment":"","uppercase_mapping":"0189","lowercase_mapping":"","titlecase_mapping":"0189","symbol":"\u0256"},599:{"value":"0257","name":"LATIN SMALL LETTER D WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D HOOK","comment":"","uppercase_mapping":"018A","lowercase_mapping":"","titlecase_mapping":"018A","symbol":"\u0257"},600:{"value":"0258","name":"LATIN SMALL LETTER REVERSED E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0258"},601:{"value":"0259","name":"LATIN SMALL LETTER SCHWA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"018F","lowercase_mapping":"","titlecase_mapping":"018F","symbol":"\u0259"},602:{"value":"025A","name":"LATIN SMALL LETTER SCHWA WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER SCHWA HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u025A"},603:{"value":"025B","name":"LATIN SMALL LETTER OPEN E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER EPSILON","comment":"","uppercase_mapping":"0190","lowercase_mapping":"","titlecase_mapping":"0190","symbol":"\u025B"},604:{"value":"025C","name":"LATIN SMALL LETTER REVERSED OPEN E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER REVERSED EPSILON","comment":"","uppercase_mapping":"A7AB","lowercase_mapping":"","titlecase_mapping":"A7AB","symbol":"\u025C"},605:{"value":"025D","name":"LATIN SMALL LETTER REVERSED OPEN E WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER REVERSED EPSILON HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u025D"},606:{"value":"025E","name":"LATIN SMALL LETTER CLOSED REVERSED OPEN E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER CLOSED REVERSED EPSILON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u025E"},607:{"value":"025F","name":"LATIN SMALL LETTER DOTLESS J WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER DOTLESS J BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u025F"},608:{"value":"0260","name":"LATIN SMALL LETTER G WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER G HOOK","comment":"","uppercase_mapping":"0193","lowercase_mapping":"","titlecase_mapping":"0193","symbol":"\u0260"},609:{"value":"0261","name":"LATIN SMALL LETTER SCRIPT G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7AC","lowercase_mapping":"","titlecase_mapping":"A7AC","symbol":"\u0261"},610:{"value":"0262","name":"LATIN LETTER SMALL CAPITAL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0262"},611:{"value":"0263","name":"LATIN SMALL LETTER GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0194","lowercase_mapping":"","titlecase_mapping":"0194","symbol":"\u0263"},612:{"value":"0264","name":"LATIN SMALL LETTER RAMS HORN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER BABY GAMMA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0264"},613:{"value":"0265","name":"LATIN SMALL LETTER TURNED H","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A78D","lowercase_mapping":"","titlecase_mapping":"A78D","symbol":"\u0265"},614:{"value":"0266","name":"LATIN SMALL LETTER H WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER H HOOK","comment":"","uppercase_mapping":"A7AA","lowercase_mapping":"","titlecase_mapping":"A7AA","symbol":"\u0266"},615:{"value":"0267","name":"LATIN SMALL LETTER HENG WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER HENG HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0267"},616:{"value":"0268","name":"LATIN SMALL LETTER I WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER BARRED I","comment":"","uppercase_mapping":"0197","lowercase_mapping":"","titlecase_mapping":"0197","symbol":"\u0268"},617:{"value":"0269","name":"LATIN SMALL LETTER IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0196","lowercase_mapping":"","titlecase_mapping":"0196","symbol":"\u0269"},618:{"value":"026A","name":"LATIN LETTER SMALL CAPITAL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7AE","lowercase_mapping":"","titlecase_mapping":"A7AE","symbol":"\u026A"},619:{"value":"026B","name":"LATIN SMALL LETTER L WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C62","lowercase_mapping":"","titlecase_mapping":"2C62","symbol":"\u026B"},620:{"value":"026C","name":"LATIN SMALL LETTER L WITH BELT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L BELT","comment":"","uppercase_mapping":"A7AD","lowercase_mapping":"","titlecase_mapping":"A7AD","symbol":"\u026C"},621:{"value":"026D","name":"LATIN SMALL LETTER L WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L RETROFLEX HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u026D"},622:{"value":"026E","name":"LATIN SMALL LETTER LEZH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER L YOGH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u026E"},623:{"value":"026F","name":"LATIN SMALL LETTER TURNED M","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"019C","lowercase_mapping":"","titlecase_mapping":"019C","symbol":"\u026F"},624:{"value":"0270","name":"LATIN SMALL LETTER TURNED M WITH LONG LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0270"},625:{"value":"0271","name":"LATIN SMALL LETTER M WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER M HOOK","comment":"","uppercase_mapping":"2C6E","lowercase_mapping":"","titlecase_mapping":"2C6E","symbol":"\u0271"},626:{"value":"0272","name":"LATIN SMALL LETTER N WITH LEFT HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N HOOK","comment":"","uppercase_mapping":"019D","lowercase_mapping":"","titlecase_mapping":"019D","symbol":"\u0272"},627:{"value":"0273","name":"LATIN SMALL LETTER N WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER N RETROFLEX HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0273"},628:{"value":"0274","name":"LATIN LETTER SMALL CAPITAL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0274"},629:{"value":"0275","name":"LATIN SMALL LETTER BARRED O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"019F","lowercase_mapping":"","titlecase_mapping":"019F","symbol":"\u0275"},630:{"value":"0276","name":"LATIN LETTER SMALL CAPITAL OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER SMALL CAPITAL O E","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0276"},631:{"value":"0277","name":"LATIN SMALL LETTER CLOSED OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0277"},632:{"value":"0278","name":"LATIN SMALL LETTER PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0278"},633:{"value":"0279","name":"LATIN SMALL LETTER TURNED R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0279"},634:{"value":"027A","name":"LATIN SMALL LETTER TURNED R WITH LONG LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u027A"},635:{"value":"027B","name":"LATIN SMALL LETTER TURNED R WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER TURNED R HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u027B"},636:{"value":"027C","name":"LATIN SMALL LETTER R WITH LONG LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u027C"},637:{"value":"027D","name":"LATIN SMALL LETTER R WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER R HOOK","comment":"","uppercase_mapping":"2C64","lowercase_mapping":"","titlecase_mapping":"2C64","symbol":"\u027D"},638:{"value":"027E","name":"LATIN SMALL LETTER R WITH FISHHOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER FISHHOOK R","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u027E"},639:{"value":"027F","name":"LATIN SMALL LETTER REVERSED R WITH FISHHOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER REVERSED FISHHOOK R","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u027F"},640:{"value":"0280","name":"LATIN LETTER SMALL CAPITAL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01A6","lowercase_mapping":"","titlecase_mapping":"01A6","symbol":"\u0280"},641:{"value":"0281","name":"LATIN LETTER SMALL CAPITAL INVERTED R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0281"},642:{"value":"0282","name":"LATIN SMALL LETTER S WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER S HOOK","comment":"","uppercase_mapping":"A7C5","lowercase_mapping":"","titlecase_mapping":"A7C5","symbol":"\u0282"},643:{"value":"0283","name":"LATIN SMALL LETTER ESH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01A9","lowercase_mapping":"","titlecase_mapping":"01A9","symbol":"\u0283"},644:{"value":"0284","name":"LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER DOTLESS J BAR HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0284"},645:{"value":"0285","name":"LATIN SMALL LETTER SQUAT REVERSED ESH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0285"},646:{"value":"0286","name":"LATIN SMALL LETTER ESH WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER ESH CURL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0286"},647:{"value":"0287","name":"LATIN SMALL LETTER TURNED T","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7B1","lowercase_mapping":"","titlecase_mapping":"A7B1","symbol":"\u0287"},648:{"value":"0288","name":"LATIN SMALL LETTER T WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T RETROFLEX HOOK","comment":"","uppercase_mapping":"01AE","lowercase_mapping":"","titlecase_mapping":"01AE","symbol":"\u0288"},649:{"value":"0289","name":"LATIN SMALL LETTER U BAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0244","lowercase_mapping":"","titlecase_mapping":"0244","symbol":"\u0289"},650:{"value":"028A","name":"LATIN SMALL LETTER UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01B1","lowercase_mapping":"","titlecase_mapping":"01B1","symbol":"\u028A"},651:{"value":"028B","name":"LATIN SMALL LETTER V WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER SCRIPT V","comment":"","uppercase_mapping":"01B2","lowercase_mapping":"","titlecase_mapping":"01B2","symbol":"\u028B"},652:{"value":"028C","name":"LATIN SMALL LETTER TURNED V","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0245","lowercase_mapping":"","titlecase_mapping":"0245","symbol":"\u028C"},653:{"value":"028D","name":"LATIN SMALL LETTER TURNED W","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u028D"},654:{"value":"028E","name":"LATIN SMALL LETTER TURNED Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u028E"},655:{"value":"028F","name":"LATIN LETTER SMALL CAPITAL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u028F"},656:{"value":"0290","name":"LATIN SMALL LETTER Z WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Z RETROFLEX HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0290"},657:{"value":"0291","name":"LATIN SMALL LETTER Z WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Z CURL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0291"},658:{"value":"0292","name":"LATIN SMALL LETTER EZH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER YOGH","comment":"","uppercase_mapping":"01B7","lowercase_mapping":"","titlecase_mapping":"01B7","symbol":"\u0292"},659:{"value":"0293","name":"LATIN SMALL LETTER EZH WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER YOGH CURL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0293"},661:{"value":"0295","name":"LATIN LETTER PHARYNGEAL VOICED FRICATIVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER REVERSED GLOTTAL STOP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0295"},662:{"value":"0296","name":"LATIN LETTER INVERTED GLOTTAL STOP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0296"},663:{"value":"0297","name":"LATIN LETTER STRETCHED C","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0297"},664:{"value":"0298","name":"LATIN LETTER BILABIAL CLICK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER BULLSEYE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0298"},665:{"value":"0299","name":"LATIN LETTER SMALL CAPITAL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0299"},666:{"value":"029A","name":"LATIN SMALL LETTER CLOSED OPEN E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER CLOSED EPSILON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u029A"},667:{"value":"029B","name":"LATIN LETTER SMALL CAPITAL G WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER SMALL CAPITAL G HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u029B"},668:{"value":"029C","name":"LATIN LETTER SMALL CAPITAL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u029C"},669:{"value":"029D","name":"LATIN SMALL LETTER J WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER CROSSED-TAIL J","comment":"","uppercase_mapping":"A7B2","lowercase_mapping":"","titlecase_mapping":"A7B2","symbol":"\u029D"},670:{"value":"029E","name":"LATIN SMALL LETTER TURNED K","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7B0","lowercase_mapping":"","titlecase_mapping":"A7B0","symbol":"\u029E"},671:{"value":"029F","name":"LATIN LETTER SMALL CAPITAL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u029F"},672:{"value":"02A0","name":"LATIN SMALL LETTER Q WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER Q HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A0"},673:{"value":"02A1","name":"LATIN LETTER GLOTTAL STOP WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER GLOTTAL STOP BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A1"},674:{"value":"02A2","name":"LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER REVERSED GLOTTAL STOP BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A2"},675:{"value":"02A3","name":"LATIN SMALL LETTER DZ DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D Z","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A3"},676:{"value":"02A4","name":"LATIN SMALL LETTER DEZH DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D YOGH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A4"},677:{"value":"02A5","name":"LATIN SMALL LETTER DZ DIGRAPH WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER D Z CURL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A5"},678:{"value":"02A6","name":"LATIN SMALL LETTER TS DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T S","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A6"},679:{"value":"02A7","name":"LATIN SMALL LETTER TESH DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T ESH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A7"},680:{"value":"02A8","name":"LATIN SMALL LETTER TC DIGRAPH WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN SMALL LETTER T C CURL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A8"},681:{"value":"02A9","name":"LATIN SMALL LETTER FENG DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02A9"},682:{"value":"02AA","name":"LATIN SMALL LETTER LS DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02AA"},683:{"value":"02AB","name":"LATIN SMALL LETTER LZ DIGRAPH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02AB"},684:{"value":"02AC","name":"LATIN LETTER BILABIAL PERCUSSIVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02AC"},685:{"value":"02AD","name":"LATIN LETTER BIDENTAL PERCUSSIVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02AD"},686:{"value":"02AE","name":"LATIN SMALL LETTER TURNED H WITH FISHHOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02AE"},687:{"value":"02AF","name":"LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02AF"},881:{"value":"0371","name":"GREEK SMALL LETTER HETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0370","lowercase_mapping":"","titlecase_mapping":"0370","symbol":"\u0371"},883:{"value":"0373","name":"GREEK SMALL LETTER ARCHAIC SAMPI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0372","lowercase_mapping":"","titlecase_mapping":"0372","symbol":"\u0373"},887:{"value":"0377","name":"GREEK SMALL LETTER PAMPHYLIAN DIGAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0376","lowercase_mapping":"","titlecase_mapping":"0376","symbol":"\u0377"},891:{"value":"037B","name":"GREEK SMALL REVERSED LUNATE SIGMA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03FD","lowercase_mapping":"","titlecase_mapping":"03FD","symbol":"\u037B"},892:{"value":"037C","name":"GREEK SMALL DOTTED LUNATE SIGMA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03FE","lowercase_mapping":"","titlecase_mapping":"03FE","symbol":"\u037C"},893:{"value":"037D","name":"GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03FF","lowercase_mapping":"","titlecase_mapping":"03FF","symbol":"\u037D"},912:{"value":"0390","name":"GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CA 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER IOTA DIAERESIS TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0390"},940:{"value":"03AC","name":"GREEK SMALL LETTER ALPHA WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER ALPHA TONOS","comment":"","uppercase_mapping":"0386","lowercase_mapping":"","titlecase_mapping":"0386","symbol":"\u03AC"},941:{"value":"03AD","name":"GREEK SMALL LETTER EPSILON WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER EPSILON TONOS","comment":"","uppercase_mapping":"0388","lowercase_mapping":"","titlecase_mapping":"0388","symbol":"\u03AD"},942:{"value":"03AE","name":"GREEK SMALL LETTER ETA WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B7 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER ETA TONOS","comment":"","uppercase_mapping":"0389","lowercase_mapping":"","titlecase_mapping":"0389","symbol":"\u03AE"},943:{"value":"03AF","name":"GREEK SMALL LETTER IOTA WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER IOTA TONOS","comment":"","uppercase_mapping":"038A","lowercase_mapping":"","titlecase_mapping":"038A","symbol":"\u03AF"},944:{"value":"03B0","name":"GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CB 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER UPSILON DIAERESIS TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u03B0"},945:{"value":"03B1","name":"GREEK SMALL LETTER ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0391","lowercase_mapping":"","titlecase_mapping":"0391","symbol":"\u03B1"},946:{"value":"03B2","name":"GREEK SMALL LETTER BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0392","lowercase_mapping":"","titlecase_mapping":"0392","symbol":"\u03B2"},947:{"value":"03B3","name":"GREEK SMALL LETTER GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0393","lowercase_mapping":"","titlecase_mapping":"0393","symbol":"\u03B3"},948:{"value":"03B4","name":"GREEK SMALL LETTER DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0394","lowercase_mapping":"","titlecase_mapping":"0394","symbol":"\u03B4"},949:{"value":"03B5","name":"GREEK SMALL LETTER EPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0395","lowercase_mapping":"","titlecase_mapping":"0395","symbol":"\u03B5"},950:{"value":"03B6","name":"GREEK SMALL LETTER ZETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0396","lowercase_mapping":"","titlecase_mapping":"0396","symbol":"\u03B6"},951:{"value":"03B7","name":"GREEK SMALL LETTER ETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0397","lowercase_mapping":"","titlecase_mapping":"0397","symbol":"\u03B7"},952:{"value":"03B8","name":"GREEK SMALL LETTER THETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0398","lowercase_mapping":"","titlecase_mapping":"0398","symbol":"\u03B8"},953:{"value":"03B9","name":"GREEK SMALL LETTER IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0399","lowercase_mapping":"","titlecase_mapping":"0399","symbol":"\u03B9"},954:{"value":"03BA","name":"GREEK SMALL LETTER KAPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"039A","lowercase_mapping":"","titlecase_mapping":"039A","symbol":"\u03BA"},955:{"value":"03BB","name":"GREEK SMALL LETTER LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER LAMBDA","comment":"","uppercase_mapping":"039B","lowercase_mapping":"","titlecase_mapping":"039B","symbol":"\u03BB"},956:{"value":"03BC","name":"GREEK SMALL LETTER MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"039C","lowercase_mapping":"","titlecase_mapping":"039C","symbol":"\u03BC"},957:{"value":"03BD","name":"GREEK SMALL LETTER NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"039D","lowercase_mapping":"","titlecase_mapping":"039D","symbol":"\u03BD"},958:{"value":"03BE","name":"GREEK SMALL LETTER XI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"039E","lowercase_mapping":"","titlecase_mapping":"039E","symbol":"\u03BE"},959:{"value":"03BF","name":"GREEK SMALL LETTER OMICRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"039F","lowercase_mapping":"","titlecase_mapping":"039F","symbol":"\u03BF"},960:{"value":"03C0","name":"GREEK SMALL LETTER PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A0","lowercase_mapping":"","titlecase_mapping":"03A0","symbol":"\u03C0"},961:{"value":"03C1","name":"GREEK SMALL LETTER RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A1","lowercase_mapping":"","titlecase_mapping":"03A1","symbol":"\u03C1"},962:{"value":"03C2","name":"GREEK SMALL LETTER FINAL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A3","lowercase_mapping":"","titlecase_mapping":"03A3","symbol":"\u03C2"},963:{"value":"03C3","name":"GREEK SMALL LETTER SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A3","lowercase_mapping":"","titlecase_mapping":"03A3","symbol":"\u03C3"},964:{"value":"03C4","name":"GREEK SMALL LETTER TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A4","lowercase_mapping":"","titlecase_mapping":"03A4","symbol":"\u03C4"},965:{"value":"03C5","name":"GREEK SMALL LETTER UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A5","lowercase_mapping":"","titlecase_mapping":"03A5","symbol":"\u03C5"},966:{"value":"03C6","name":"GREEK SMALL LETTER PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A6","lowercase_mapping":"","titlecase_mapping":"03A6","symbol":"\u03C6"},967:{"value":"03C7","name":"GREEK SMALL LETTER CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A7","lowercase_mapping":"","titlecase_mapping":"03A7","symbol":"\u03C7"},968:{"value":"03C8","name":"GREEK SMALL LETTER PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A8","lowercase_mapping":"","titlecase_mapping":"03A8","symbol":"\u03C8"},969:{"value":"03C9","name":"GREEK SMALL LETTER OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03A9","lowercase_mapping":"","titlecase_mapping":"03A9","symbol":"\u03C9"},970:{"value":"03CA","name":"GREEK SMALL LETTER IOTA WITH DIALYTIKA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER IOTA DIAERESIS","comment":"","uppercase_mapping":"03AA","lowercase_mapping":"","titlecase_mapping":"03AA","symbol":"\u03CA"},971:{"value":"03CB","name":"GREEK SMALL LETTER UPSILON WITH DIALYTIKA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER UPSILON DIAERESIS","comment":"","uppercase_mapping":"03AB","lowercase_mapping":"","titlecase_mapping":"03AB","symbol":"\u03CB"},972:{"value":"03CC","name":"GREEK SMALL LETTER OMICRON WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03BF 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER OMICRON TONOS","comment":"","uppercase_mapping":"038C","lowercase_mapping":"","titlecase_mapping":"038C","symbol":"\u03CC"},973:{"value":"03CD","name":"GREEK SMALL LETTER UPSILON WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER UPSILON TONOS","comment":"","uppercase_mapping":"038E","lowercase_mapping":"","titlecase_mapping":"038E","symbol":"\u03CD"},974:{"value":"03CE","name":"GREEK SMALL LETTER OMEGA WITH TONOS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C9 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER OMEGA TONOS","comment":"","uppercase_mapping":"038F","lowercase_mapping":"","titlecase_mapping":"038F","symbol":"\u03CE"},976:{"value":"03D0","name":"GREEK BETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER CURLED BETA","comment":"","uppercase_mapping":"0392","lowercase_mapping":"","titlecase_mapping":"0392","symbol":"\u03D0"},977:{"value":"03D1","name":"GREEK THETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER SCRIPT THETA","comment":"","uppercase_mapping":"0398","lowercase_mapping":"","titlecase_mapping":"0398","symbol":"\u03D1"},981:{"value":"03D5","name":"GREEK PHI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER SCRIPT PHI","comment":"","uppercase_mapping":"03A6","lowercase_mapping":"","titlecase_mapping":"03A6","symbol":"\u03D5"},982:{"value":"03D6","name":"GREEK PI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER OMEGA PI","comment":"","uppercase_mapping":"03A0","lowercase_mapping":"","titlecase_mapping":"03A0","symbol":"\u03D6"},983:{"value":"03D7","name":"GREEK KAI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03CF","lowercase_mapping":"","titlecase_mapping":"03CF","symbol":"\u03D7"},985:{"value":"03D9","name":"GREEK SMALL LETTER ARCHAIC KOPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03D8","lowercase_mapping":"","titlecase_mapping":"03D8","symbol":"\u03D9"},987:{"value":"03DB","name":"GREEK SMALL LETTER STIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03DA","lowercase_mapping":"","titlecase_mapping":"03DA","symbol":"\u03DB"},989:{"value":"03DD","name":"GREEK SMALL LETTER DIGAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03DC","lowercase_mapping":"","titlecase_mapping":"03DC","symbol":"\u03DD"},991:{"value":"03DF","name":"GREEK SMALL LETTER KOPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03DE","lowercase_mapping":"","titlecase_mapping":"03DE","symbol":"\u03DF"},993:{"value":"03E1","name":"GREEK SMALL LETTER SAMPI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03E0","lowercase_mapping":"","titlecase_mapping":"03E0","symbol":"\u03E1"},995:{"value":"03E3","name":"COPTIC SMALL LETTER SHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER SHEI","comment":"","uppercase_mapping":"03E2","lowercase_mapping":"","titlecase_mapping":"03E2","symbol":"\u03E3"},997:{"value":"03E5","name":"COPTIC SMALL LETTER FEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER FEI","comment":"","uppercase_mapping":"03E4","lowercase_mapping":"","titlecase_mapping":"03E4","symbol":"\u03E5"},999:{"value":"03E7","name":"COPTIC SMALL LETTER KHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER KHEI","comment":"","uppercase_mapping":"03E6","lowercase_mapping":"","titlecase_mapping":"03E6","symbol":"\u03E7"},1001:{"value":"03E9","name":"COPTIC SMALL LETTER HORI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER HORI","comment":"","uppercase_mapping":"03E8","lowercase_mapping":"","titlecase_mapping":"03E8","symbol":"\u03E9"},1003:{"value":"03EB","name":"COPTIC SMALL LETTER GANGIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER GANGIA","comment":"","uppercase_mapping":"03EA","lowercase_mapping":"","titlecase_mapping":"03EA","symbol":"\u03EB"},1005:{"value":"03ED","name":"COPTIC SMALL LETTER SHIMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER SHIMA","comment":"","uppercase_mapping":"03EC","lowercase_mapping":"","titlecase_mapping":"03EC","symbol":"\u03ED"},1007:{"value":"03EF","name":"COPTIC SMALL LETTER DEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER DEI","comment":"","uppercase_mapping":"03EE","lowercase_mapping":"","titlecase_mapping":"03EE","symbol":"\u03EF"},1008:{"value":"03F0","name":"GREEK KAPPA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER SCRIPT KAPPA","comment":"","uppercase_mapping":"039A","lowercase_mapping":"","titlecase_mapping":"039A","symbol":"\u03F0"},1009:{"value":"03F1","name":"GREEK RHO SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER TAILED RHO","comment":"","uppercase_mapping":"03A1","lowercase_mapping":"","titlecase_mapping":"03A1","symbol":"\u03F1"},1010:{"value":"03F2","name":"GREEK LUNATE SIGMA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SMALL LETTER LUNATE SIGMA","comment":"","uppercase_mapping":"03F9","lowercase_mapping":"","titlecase_mapping":"03F9","symbol":"\u03F2"},1011:{"value":"03F3","name":"GREEK LETTER YOT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"037F","lowercase_mapping":"","titlecase_mapping":"037F","symbol":"\u03F3"},1013:{"value":"03F5","name":"GREEK LUNATE EPSILON SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0395","lowercase_mapping":"","titlecase_mapping":"0395","symbol":"\u03F5"},1016:{"value":"03F8","name":"GREEK SMALL LETTER SHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03F7","lowercase_mapping":"","titlecase_mapping":"03F7","symbol":"\u03F8"},1019:{"value":"03FB","name":"GREEK SMALL LETTER SAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"03FA","lowercase_mapping":"","titlecase_mapping":"03FA","symbol":"\u03FB"},1020:{"value":"03FC","name":"GREEK RHO WITH STROKE SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u03FC"},1072:{"value":"0430","name":"CYRILLIC SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0410","lowercase_mapping":"","titlecase_mapping":"0410","symbol":"\u0430"},1073:{"value":"0431","name":"CYRILLIC SMALL LETTER BE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0411","lowercase_mapping":"","titlecase_mapping":"0411","symbol":"\u0431"},1074:{"value":"0432","name":"CYRILLIC SMALL LETTER VE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0412","lowercase_mapping":"","titlecase_mapping":"0412","symbol":"\u0432"},1075:{"value":"0433","name":"CYRILLIC SMALL LETTER GHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER GE","comment":"","uppercase_mapping":"0413","lowercase_mapping":"","titlecase_mapping":"0413","symbol":"\u0433"},1076:{"value":"0434","name":"CYRILLIC SMALL LETTER DE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0414","lowercase_mapping":"","titlecase_mapping":"0414","symbol":"\u0434"},1077:{"value":"0435","name":"CYRILLIC SMALL LETTER IE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0415","lowercase_mapping":"","titlecase_mapping":"0415","symbol":"\u0435"},1078:{"value":"0436","name":"CYRILLIC SMALL LETTER ZHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0416","lowercase_mapping":"","titlecase_mapping":"0416","symbol":"\u0436"},1079:{"value":"0437","name":"CYRILLIC SMALL LETTER ZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0417","lowercase_mapping":"","titlecase_mapping":"0417","symbol":"\u0437"},1080:{"value":"0438","name":"CYRILLIC SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER II","comment":"","uppercase_mapping":"0418","lowercase_mapping":"","titlecase_mapping":"0418","symbol":"\u0438"},1081:{"value":"0439","name":"CYRILLIC SMALL LETTER SHORT I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0438 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER SHORT II","comment":"","uppercase_mapping":"0419","lowercase_mapping":"","titlecase_mapping":"0419","symbol":"\u0439"},1082:{"value":"043A","name":"CYRILLIC SMALL LETTER KA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041A","lowercase_mapping":"","titlecase_mapping":"041A","symbol":"\u043A"},1083:{"value":"043B","name":"CYRILLIC SMALL LETTER EL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041B","lowercase_mapping":"","titlecase_mapping":"041B","symbol":"\u043B"},1084:{"value":"043C","name":"CYRILLIC SMALL LETTER EM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041C","lowercase_mapping":"","titlecase_mapping":"041C","symbol":"\u043C"},1085:{"value":"043D","name":"CYRILLIC SMALL LETTER EN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041D","lowercase_mapping":"","titlecase_mapping":"041D","symbol":"\u043D"},1086:{"value":"043E","name":"CYRILLIC SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041E","lowercase_mapping":"","titlecase_mapping":"041E","symbol":"\u043E"},1087:{"value":"043F","name":"CYRILLIC SMALL LETTER PE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041F","lowercase_mapping":"","titlecase_mapping":"041F","symbol":"\u043F"},1088:{"value":"0440","name":"CYRILLIC SMALL LETTER ER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0420","lowercase_mapping":"","titlecase_mapping":"0420","symbol":"\u0440"},1089:{"value":"0441","name":"CYRILLIC SMALL LETTER ES","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0421","lowercase_mapping":"","titlecase_mapping":"0421","symbol":"\u0441"},1090:{"value":"0442","name":"CYRILLIC SMALL LETTER TE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0422","lowercase_mapping":"","titlecase_mapping":"0422","symbol":"\u0442"},1091:{"value":"0443","name":"CYRILLIC SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0423","lowercase_mapping":"","titlecase_mapping":"0423","symbol":"\u0443"},1092:{"value":"0444","name":"CYRILLIC SMALL LETTER EF","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0424","lowercase_mapping":"","titlecase_mapping":"0424","symbol":"\u0444"},1093:{"value":"0445","name":"CYRILLIC SMALL LETTER HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER KHA","comment":"","uppercase_mapping":"0425","lowercase_mapping":"","titlecase_mapping":"0425","symbol":"\u0445"},1094:{"value":"0446","name":"CYRILLIC SMALL LETTER TSE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0426","lowercase_mapping":"","titlecase_mapping":"0426","symbol":"\u0446"},1095:{"value":"0447","name":"CYRILLIC SMALL LETTER CHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0427","lowercase_mapping":"","titlecase_mapping":"0427","symbol":"\u0447"},1096:{"value":"0448","name":"CYRILLIC SMALL LETTER SHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0428","lowercase_mapping":"","titlecase_mapping":"0428","symbol":"\u0448"},1097:{"value":"0449","name":"CYRILLIC SMALL LETTER SHCHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0429","lowercase_mapping":"","titlecase_mapping":"0429","symbol":"\u0449"},1098:{"value":"044A","name":"CYRILLIC SMALL LETTER HARD SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"042A","lowercase_mapping":"","titlecase_mapping":"042A","symbol":"\u044A"},1099:{"value":"044B","name":"CYRILLIC SMALL LETTER YERU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER YERI","comment":"","uppercase_mapping":"042B","lowercase_mapping":"","titlecase_mapping":"042B","symbol":"\u044B"},1100:{"value":"044C","name":"CYRILLIC SMALL LETTER SOFT SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"042C","lowercase_mapping":"","titlecase_mapping":"042C","symbol":"\u044C"},1101:{"value":"044D","name":"CYRILLIC SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER REVERSED E","comment":"","uppercase_mapping":"042D","lowercase_mapping":"","titlecase_mapping":"042D","symbol":"\u044D"},1102:{"value":"044E","name":"CYRILLIC SMALL LETTER YU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER IU","comment":"","uppercase_mapping":"042E","lowercase_mapping":"","titlecase_mapping":"042E","symbol":"\u044E"},1103:{"value":"044F","name":"CYRILLIC SMALL LETTER YA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER IA","comment":"","uppercase_mapping":"042F","lowercase_mapping":"","titlecase_mapping":"042F","symbol":"\u044F"},1104:{"value":"0450","name":"CYRILLIC SMALL LETTER IE WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0435 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0400","lowercase_mapping":"","titlecase_mapping":"0400","symbol":"\u0450"},1105:{"value":"0451","name":"CYRILLIC SMALL LETTER IO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0435 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0401","lowercase_mapping":"","titlecase_mapping":"0401","symbol":"\u0451"},1106:{"value":"0452","name":"CYRILLIC SMALL LETTER DJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0402","lowercase_mapping":"","titlecase_mapping":"0402","symbol":"\u0452"},1107:{"value":"0453","name":"CYRILLIC SMALL LETTER GJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0433 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0403","lowercase_mapping":"","titlecase_mapping":"0403","symbol":"\u0453"},1108:{"value":"0454","name":"CYRILLIC SMALL LETTER UKRAINIAN IE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER E","comment":"","uppercase_mapping":"0404","lowercase_mapping":"","titlecase_mapping":"0404","symbol":"\u0454"},1109:{"value":"0455","name":"CYRILLIC SMALL LETTER DZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0405","lowercase_mapping":"","titlecase_mapping":"0405","symbol":"\u0455"},1110:{"value":"0456","name":"CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER I","comment":"","uppercase_mapping":"0406","lowercase_mapping":"","titlecase_mapping":"0406","symbol":"\u0456"},1111:{"value":"0457","name":"CYRILLIC SMALL LETTER YI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0456 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0407","lowercase_mapping":"","titlecase_mapping":"0407","symbol":"\u0457"},1112:{"value":"0458","name":"CYRILLIC SMALL LETTER JE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0408","lowercase_mapping":"","titlecase_mapping":"0408","symbol":"\u0458"},1113:{"value":"0459","name":"CYRILLIC SMALL LETTER LJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0409","lowercase_mapping":"","titlecase_mapping":"0409","symbol":"\u0459"},1114:{"value":"045A","name":"CYRILLIC SMALL LETTER NJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"040A","lowercase_mapping":"","titlecase_mapping":"040A","symbol":"\u045A"},1115:{"value":"045B","name":"CYRILLIC SMALL LETTER TSHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"040B","lowercase_mapping":"","titlecase_mapping":"040B","symbol":"\u045B"},1116:{"value":"045C","name":"CYRILLIC SMALL LETTER KJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"043A 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"040C","lowercase_mapping":"","titlecase_mapping":"040C","symbol":"\u045C"},1117:{"value":"045D","name":"CYRILLIC SMALL LETTER I WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0438 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"040D","lowercase_mapping":"","titlecase_mapping":"040D","symbol":"\u045D"},1118:{"value":"045E","name":"CYRILLIC SMALL LETTER SHORT U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0443 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"040E","lowercase_mapping":"","titlecase_mapping":"040E","symbol":"\u045E"},1119:{"value":"045F","name":"CYRILLIC SMALL LETTER DZHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"040F","lowercase_mapping":"","titlecase_mapping":"040F","symbol":"\u045F"},1121:{"value":"0461","name":"CYRILLIC SMALL LETTER OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0460","lowercase_mapping":"","titlecase_mapping":"0460","symbol":"\u0461"},1123:{"value":"0463","name":"CYRILLIC SMALL LETTER YAT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0462","lowercase_mapping":"","titlecase_mapping":"0462","symbol":"\u0463"},1125:{"value":"0465","name":"CYRILLIC SMALL LETTER IOTIFIED E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0464","lowercase_mapping":"","titlecase_mapping":"0464","symbol":"\u0465"},1127:{"value":"0467","name":"CYRILLIC SMALL LETTER LITTLE YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0466","lowercase_mapping":"","titlecase_mapping":"0466","symbol":"\u0467"},1129:{"value":"0469","name":"CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0468","lowercase_mapping":"","titlecase_mapping":"0468","symbol":"\u0469"},1131:{"value":"046B","name":"CYRILLIC SMALL LETTER BIG YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"046A","lowercase_mapping":"","titlecase_mapping":"046A","symbol":"\u046B"},1133:{"value":"046D","name":"CYRILLIC SMALL LETTER IOTIFIED BIG YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"046C","lowercase_mapping":"","titlecase_mapping":"046C","symbol":"\u046D"},1135:{"value":"046F","name":"CYRILLIC SMALL LETTER KSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"046E","lowercase_mapping":"","titlecase_mapping":"046E","symbol":"\u046F"},1137:{"value":"0471","name":"CYRILLIC SMALL LETTER PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0470","lowercase_mapping":"","titlecase_mapping":"0470","symbol":"\u0471"},1139:{"value":"0473","name":"CYRILLIC SMALL LETTER FITA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0472","lowercase_mapping":"","titlecase_mapping":"0472","symbol":"\u0473"},1141:{"value":"0475","name":"CYRILLIC SMALL LETTER IZHITSA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0474","lowercase_mapping":"","titlecase_mapping":"0474","symbol":"\u0475"},1143:{"value":"0477","name":"CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0475 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE","comment":"","uppercase_mapping":"0476","lowercase_mapping":"","titlecase_mapping":"0476","symbol":"\u0477"},1145:{"value":"0479","name":"CYRILLIC SMALL LETTER UK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER UK DIGRAPH","comment":"","uppercase_mapping":"0478","lowercase_mapping":"","titlecase_mapping":"0478","symbol":"\u0479"},1147:{"value":"047B","name":"CYRILLIC SMALL LETTER ROUND OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"047A","lowercase_mapping":"","titlecase_mapping":"047A","symbol":"\u047B"},1149:{"value":"047D","name":"CYRILLIC SMALL LETTER OMEGA WITH TITLO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER OMEGA TITLO","comment":"","uppercase_mapping":"047C","lowercase_mapping":"","titlecase_mapping":"047C","symbol":"\u047D"},1151:{"value":"047F","name":"CYRILLIC SMALL LETTER OT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"047E","lowercase_mapping":"","titlecase_mapping":"047E","symbol":"\u047F"},1153:{"value":"0481","name":"CYRILLIC SMALL LETTER KOPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0480","lowercase_mapping":"","titlecase_mapping":"0480","symbol":"\u0481"},1163:{"value":"048B","name":"CYRILLIC SMALL LETTER SHORT I WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"048A","lowercase_mapping":"","titlecase_mapping":"048A","symbol":"\u048B"},1165:{"value":"048D","name":"CYRILLIC SMALL LETTER SEMISOFT SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"048C","lowercase_mapping":"","titlecase_mapping":"048C","symbol":"\u048D"},1167:{"value":"048F","name":"CYRILLIC SMALL LETTER ER WITH TICK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"048E","lowercase_mapping":"","titlecase_mapping":"048E","symbol":"\u048F"},1169:{"value":"0491","name":"CYRILLIC SMALL LETTER GHE WITH UPTURN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER GE WITH UPTURN","comment":"","uppercase_mapping":"0490","lowercase_mapping":"","titlecase_mapping":"0490","symbol":"\u0491"},1171:{"value":"0493","name":"CYRILLIC SMALL LETTER GHE WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER GE BAR","comment":"","uppercase_mapping":"0492","lowercase_mapping":"","titlecase_mapping":"0492","symbol":"\u0493"},1173:{"value":"0495","name":"CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER GE HOOK","comment":"","uppercase_mapping":"0494","lowercase_mapping":"","titlecase_mapping":"0494","symbol":"\u0495"},1175:{"value":"0497","name":"CYRILLIC SMALL LETTER ZHE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"0496","lowercase_mapping":"","titlecase_mapping":"0496","symbol":"\u0497"},1177:{"value":"0499","name":"CYRILLIC SMALL LETTER ZE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER ZE CEDILLA","comment":"","uppercase_mapping":"0498","lowercase_mapping":"","titlecase_mapping":"0498","symbol":"\u0499"},1179:{"value":"049B","name":"CYRILLIC SMALL LETTER KA WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"049A","lowercase_mapping":"","titlecase_mapping":"049A","symbol":"\u049B"},1181:{"value":"049D","name":"CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER KA VERTICAL BAR","comment":"","uppercase_mapping":"049C","lowercase_mapping":"","titlecase_mapping":"049C","symbol":"\u049D"},1183:{"value":"049F","name":"CYRILLIC SMALL LETTER KA WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER KA BAR","comment":"","uppercase_mapping":"049E","lowercase_mapping":"","titlecase_mapping":"049E","symbol":"\u049F"},1185:{"value":"04A1","name":"CYRILLIC SMALL LETTER BASHKIR KA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER REVERSED GE KA","comment":"","uppercase_mapping":"04A0","lowercase_mapping":"","titlecase_mapping":"04A0","symbol":"\u04A1"},1187:{"value":"04A3","name":"CYRILLIC SMALL LETTER EN WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"04A2","lowercase_mapping":"","titlecase_mapping":"04A2","symbol":"\u04A3"},1189:{"value":"04A5","name":"CYRILLIC SMALL LIGATURE EN GHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER EN GE","comment":"","uppercase_mapping":"04A4","lowercase_mapping":"","titlecase_mapping":"04A4","symbol":"\u04A5"},1191:{"value":"04A7","name":"CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER PE HOOK","comment":"","uppercase_mapping":"04A6","lowercase_mapping":"","titlecase_mapping":"04A6","symbol":"\u04A7"},1193:{"value":"04A9","name":"CYRILLIC SMALL LETTER ABKHASIAN HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER O HOOK","comment":"","uppercase_mapping":"04A8","lowercase_mapping":"","titlecase_mapping":"04A8","symbol":"\u04A9"},1195:{"value":"04AB","name":"CYRILLIC SMALL LETTER ES WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER ES CEDILLA","comment":"","uppercase_mapping":"04AA","lowercase_mapping":"","titlecase_mapping":"04AA","symbol":"\u04AB"},1197:{"value":"04AD","name":"CYRILLIC SMALL LETTER TE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"04AC","lowercase_mapping":"","titlecase_mapping":"04AC","symbol":"\u04AD"},1199:{"value":"04AF","name":"CYRILLIC SMALL LETTER STRAIGHT U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04AE","lowercase_mapping":"","titlecase_mapping":"04AE","symbol":"\u04AF"},1201:{"value":"04B1","name":"CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER STRAIGHT U BAR","comment":"","uppercase_mapping":"04B0","lowercase_mapping":"","titlecase_mapping":"04B0","symbol":"\u04B1"},1203:{"value":"04B3","name":"CYRILLIC SMALL LETTER HA WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"04B2","lowercase_mapping":"","titlecase_mapping":"04B2","symbol":"\u04B3"},1205:{"value":"04B5","name":"CYRILLIC SMALL LIGATURE TE TSE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER TE TSE","comment":"","uppercase_mapping":"04B4","lowercase_mapping":"","titlecase_mapping":"04B4","symbol":"\u04B5"},1207:{"value":"04B7","name":"CYRILLIC SMALL LETTER CHE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"04B6","lowercase_mapping":"","titlecase_mapping":"04B6","symbol":"\u04B7"},1209:{"value":"04B9","name":"CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER CHE VERTICAL BAR","comment":"","uppercase_mapping":"04B8","lowercase_mapping":"","titlecase_mapping":"04B8","symbol":"\u04B9"},1211:{"value":"04BB","name":"CYRILLIC SMALL LETTER SHHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER H","comment":"","uppercase_mapping":"04BA","lowercase_mapping":"","titlecase_mapping":"04BA","symbol":"\u04BB"},1213:{"value":"04BD","name":"CYRILLIC SMALL LETTER ABKHASIAN CHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER IE HOOK","comment":"","uppercase_mapping":"04BC","lowercase_mapping":"","titlecase_mapping":"04BC","symbol":"\u04BD"},1215:{"value":"04BF","name":"CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER IE HOOK OGONEK","comment":"","uppercase_mapping":"04BE","lowercase_mapping":"","titlecase_mapping":"04BE","symbol":"\u04BF"},1218:{"value":"04C2","name":"CYRILLIC SMALL LETTER ZHE WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0436 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER SHORT ZHE","comment":"","uppercase_mapping":"04C1","lowercase_mapping":"","titlecase_mapping":"04C1","symbol":"\u04C2"},1220:{"value":"04C4","name":"CYRILLIC SMALL LETTER KA WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER KA HOOK","comment":"","uppercase_mapping":"04C3","lowercase_mapping":"","titlecase_mapping":"04C3","symbol":"\u04C4"},1222:{"value":"04C6","name":"CYRILLIC SMALL LETTER EL WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04C5","lowercase_mapping":"","titlecase_mapping":"04C5","symbol":"\u04C6"},1224:{"value":"04C8","name":"CYRILLIC SMALL LETTER EN WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER EN HOOK","comment":"","uppercase_mapping":"04C7","lowercase_mapping":"","titlecase_mapping":"04C7","symbol":"\u04C8"},1226:{"value":"04CA","name":"CYRILLIC SMALL LETTER EN WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04C9","lowercase_mapping":"","titlecase_mapping":"04C9","symbol":"\u04CA"},1228:{"value":"04CC","name":"CYRILLIC SMALL LETTER KHAKASSIAN CHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER","comment":"","uppercase_mapping":"04CB","lowercase_mapping":"","titlecase_mapping":"04CB","symbol":"\u04CC"},1230:{"value":"04CE","name":"CYRILLIC SMALL LETTER EM WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04CD","lowercase_mapping":"","titlecase_mapping":"04CD","symbol":"\u04CE"},1231:{"value":"04CF","name":"CYRILLIC SMALL LETTER PALOCHKA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04C0","lowercase_mapping":"","titlecase_mapping":"04C0","symbol":"\u04CF"},1233:{"value":"04D1","name":"CYRILLIC SMALL LETTER A WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0430 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04D0","lowercase_mapping":"","titlecase_mapping":"04D0","symbol":"\u04D1"},1235:{"value":"04D3","name":"CYRILLIC SMALL LETTER A WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0430 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04D2","lowercase_mapping":"","titlecase_mapping":"04D2","symbol":"\u04D3"},1237:{"value":"04D5","name":"CYRILLIC SMALL LIGATURE A IE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04D4","lowercase_mapping":"","titlecase_mapping":"04D4","symbol":"\u04D5"},1239:{"value":"04D7","name":"CYRILLIC SMALL LETTER IE WITH BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0435 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04D6","lowercase_mapping":"","titlecase_mapping":"04D6","symbol":"\u04D7"},1241:{"value":"04D9","name":"CYRILLIC SMALL LETTER SCHWA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04D8","lowercase_mapping":"","titlecase_mapping":"04D8","symbol":"\u04D9"},1243:{"value":"04DB","name":"CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"04D9 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04DA","lowercase_mapping":"","titlecase_mapping":"04DA","symbol":"\u04DB"},1245:{"value":"04DD","name":"CYRILLIC SMALL LETTER ZHE WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0436 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04DC","lowercase_mapping":"","titlecase_mapping":"04DC","symbol":"\u04DD"},1247:{"value":"04DF","name":"CYRILLIC SMALL LETTER ZE WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0437 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04DE","lowercase_mapping":"","titlecase_mapping":"04DE","symbol":"\u04DF"},1249:{"value":"04E1","name":"CYRILLIC SMALL LETTER ABKHASIAN DZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04E0","lowercase_mapping":"","titlecase_mapping":"04E0","symbol":"\u04E1"},1251:{"value":"04E3","name":"CYRILLIC SMALL LETTER I WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0438 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04E2","lowercase_mapping":"","titlecase_mapping":"04E2","symbol":"\u04E3"},1253:{"value":"04E5","name":"CYRILLIC SMALL LETTER I WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0438 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04E4","lowercase_mapping":"","titlecase_mapping":"04E4","symbol":"\u04E5"},1255:{"value":"04E7","name":"CYRILLIC SMALL LETTER O WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"043E 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04E6","lowercase_mapping":"","titlecase_mapping":"04E6","symbol":"\u04E7"},1257:{"value":"04E9","name":"CYRILLIC SMALL LETTER BARRED O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04E8","lowercase_mapping":"","titlecase_mapping":"04E8","symbol":"\u04E9"},1259:{"value":"04EB","name":"CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"04E9 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04EA","lowercase_mapping":"","titlecase_mapping":"04EA","symbol":"\u04EB"},1261:{"value":"04ED","name":"CYRILLIC SMALL LETTER E WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"044D 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04EC","lowercase_mapping":"","titlecase_mapping":"04EC","symbol":"\u04ED"},1263:{"value":"04EF","name":"CYRILLIC SMALL LETTER U WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0443 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04EE","lowercase_mapping":"","titlecase_mapping":"04EE","symbol":"\u04EF"},1265:{"value":"04F1","name":"CYRILLIC SMALL LETTER U WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0443 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04F0","lowercase_mapping":"","titlecase_mapping":"04F0","symbol":"\u04F1"},1267:{"value":"04F3","name":"CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0443 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04F2","lowercase_mapping":"","titlecase_mapping":"04F2","symbol":"\u04F3"},1269:{"value":"04F5","name":"CYRILLIC SMALL LETTER CHE WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0447 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04F4","lowercase_mapping":"","titlecase_mapping":"04F4","symbol":"\u04F5"},1271:{"value":"04F7","name":"CYRILLIC SMALL LETTER GHE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04F6","lowercase_mapping":"","titlecase_mapping":"04F6","symbol":"\u04F7"},1273:{"value":"04F9","name":"CYRILLIC SMALL LETTER YERU WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"044B 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04F8","lowercase_mapping":"","titlecase_mapping":"04F8","symbol":"\u04F9"},1275:{"value":"04FB","name":"CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04FA","lowercase_mapping":"","titlecase_mapping":"04FA","symbol":"\u04FB"},1277:{"value":"04FD","name":"CYRILLIC SMALL LETTER HA WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04FC","lowercase_mapping":"","titlecase_mapping":"04FC","symbol":"\u04FD"},1279:{"value":"04FF","name":"CYRILLIC SMALL LETTER HA WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"04FE","lowercase_mapping":"","titlecase_mapping":"04FE","symbol":"\u04FF"},1281:{"value":"0501","name":"CYRILLIC SMALL LETTER KOMI DE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0500","lowercase_mapping":"","titlecase_mapping":"0500","symbol":"\u0501"},1283:{"value":"0503","name":"CYRILLIC SMALL LETTER KOMI DJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0502","lowercase_mapping":"","titlecase_mapping":"0502","symbol":"\u0503"},1285:{"value":"0505","name":"CYRILLIC SMALL LETTER KOMI ZJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0504","lowercase_mapping":"","titlecase_mapping":"0504","symbol":"\u0505"},1287:{"value":"0507","name":"CYRILLIC SMALL LETTER KOMI DZJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0506","lowercase_mapping":"","titlecase_mapping":"0506","symbol":"\u0507"},1289:{"value":"0509","name":"CYRILLIC SMALL LETTER KOMI LJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0508","lowercase_mapping":"","titlecase_mapping":"0508","symbol":"\u0509"},1291:{"value":"050B","name":"CYRILLIC SMALL LETTER KOMI NJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"050A","lowercase_mapping":"","titlecase_mapping":"050A","symbol":"\u050B"},1293:{"value":"050D","name":"CYRILLIC SMALL LETTER KOMI SJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"050C","lowercase_mapping":"","titlecase_mapping":"050C","symbol":"\u050D"},1295:{"value":"050F","name":"CYRILLIC SMALL LETTER KOMI TJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"050E","lowercase_mapping":"","titlecase_mapping":"050E","symbol":"\u050F"},1297:{"value":"0511","name":"CYRILLIC SMALL LETTER REVERSED ZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0510","lowercase_mapping":"","titlecase_mapping":"0510","symbol":"\u0511"},1299:{"value":"0513","name":"CYRILLIC SMALL LETTER EL WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0512","lowercase_mapping":"","titlecase_mapping":"0512","symbol":"\u0513"},1301:{"value":"0515","name":"CYRILLIC SMALL LETTER LHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0514","lowercase_mapping":"","titlecase_mapping":"0514","symbol":"\u0515"},1303:{"value":"0517","name":"CYRILLIC SMALL LETTER RHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0516","lowercase_mapping":"","titlecase_mapping":"0516","symbol":"\u0517"},1305:{"value":"0519","name":"CYRILLIC SMALL LETTER YAE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0518","lowercase_mapping":"","titlecase_mapping":"0518","symbol":"\u0519"},1307:{"value":"051B","name":"CYRILLIC SMALL LETTER QA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"051A","lowercase_mapping":"","titlecase_mapping":"051A","symbol":"\u051B"},1309:{"value":"051D","name":"CYRILLIC SMALL LETTER WE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"051C","lowercase_mapping":"","titlecase_mapping":"051C","symbol":"\u051D"},1311:{"value":"051F","name":"CYRILLIC SMALL LETTER ALEUT KA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"051E","lowercase_mapping":"","titlecase_mapping":"051E","symbol":"\u051F"},1313:{"value":"0521","name":"CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0520","lowercase_mapping":"","titlecase_mapping":"0520","symbol":"\u0521"},1315:{"value":"0523","name":"CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0522","lowercase_mapping":"","titlecase_mapping":"0522","symbol":"\u0523"},1317:{"value":"0525","name":"CYRILLIC SMALL LETTER PE WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0524","lowercase_mapping":"","titlecase_mapping":"0524","symbol":"\u0525"},1319:{"value":"0527","name":"CYRILLIC SMALL LETTER SHHA WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0526","lowercase_mapping":"","titlecase_mapping":"0526","symbol":"\u0527"},1321:{"value":"0529","name":"CYRILLIC SMALL LETTER EN WITH LEFT HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0528","lowercase_mapping":"","titlecase_mapping":"0528","symbol":"\u0529"},1323:{"value":"052B","name":"CYRILLIC SMALL LETTER DZZHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"052A","lowercase_mapping":"","titlecase_mapping":"052A","symbol":"\u052B"},1325:{"value":"052D","name":"CYRILLIC SMALL LETTER DCHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"052C","lowercase_mapping":"","titlecase_mapping":"052C","symbol":"\u052D"},1327:{"value":"052F","name":"CYRILLIC SMALL LETTER EL WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"052E","lowercase_mapping":"","titlecase_mapping":"052E","symbol":"\u052F"},1376:{"value":"0560","name":"ARMENIAN SMALL LETTER TURNED AYB","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0560"},1377:{"value":"0561","name":"ARMENIAN SMALL LETTER AYB","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0531","lowercase_mapping":"","titlecase_mapping":"0531","symbol":"\u0561"},1378:{"value":"0562","name":"ARMENIAN SMALL LETTER BEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0532","lowercase_mapping":"","titlecase_mapping":"0532","symbol":"\u0562"},1379:{"value":"0563","name":"ARMENIAN SMALL LETTER GIM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0533","lowercase_mapping":"","titlecase_mapping":"0533","symbol":"\u0563"},1380:{"value":"0564","name":"ARMENIAN SMALL LETTER DA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0534","lowercase_mapping":"","titlecase_mapping":"0534","symbol":"\u0564"},1381:{"value":"0565","name":"ARMENIAN SMALL LETTER ECH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0535","lowercase_mapping":"","titlecase_mapping":"0535","symbol":"\u0565"},1382:{"value":"0566","name":"ARMENIAN SMALL LETTER ZA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0536","lowercase_mapping":"","titlecase_mapping":"0536","symbol":"\u0566"},1383:{"value":"0567","name":"ARMENIAN SMALL LETTER EH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0537","lowercase_mapping":"","titlecase_mapping":"0537","symbol":"\u0567"},1384:{"value":"0568","name":"ARMENIAN SMALL LETTER ET","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0538","lowercase_mapping":"","titlecase_mapping":"0538","symbol":"\u0568"},1385:{"value":"0569","name":"ARMENIAN SMALL LETTER TO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0539","lowercase_mapping":"","titlecase_mapping":"0539","symbol":"\u0569"},1386:{"value":"056A","name":"ARMENIAN SMALL LETTER ZHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"053A","lowercase_mapping":"","titlecase_mapping":"053A","symbol":"\u056A"},1387:{"value":"056B","name":"ARMENIAN SMALL LETTER INI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"053B","lowercase_mapping":"","titlecase_mapping":"053B","symbol":"\u056B"},1388:{"value":"056C","name":"ARMENIAN SMALL LETTER LIWN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"053C","lowercase_mapping":"","titlecase_mapping":"053C","symbol":"\u056C"},1389:{"value":"056D","name":"ARMENIAN SMALL LETTER XEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"053D","lowercase_mapping":"","titlecase_mapping":"053D","symbol":"\u056D"},1390:{"value":"056E","name":"ARMENIAN SMALL LETTER CA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"053E","lowercase_mapping":"","titlecase_mapping":"053E","symbol":"\u056E"},1391:{"value":"056F","name":"ARMENIAN SMALL LETTER KEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"053F","lowercase_mapping":"","titlecase_mapping":"053F","symbol":"\u056F"},1392:{"value":"0570","name":"ARMENIAN SMALL LETTER HO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0540","lowercase_mapping":"","titlecase_mapping":"0540","symbol":"\u0570"},1393:{"value":"0571","name":"ARMENIAN SMALL LETTER JA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0541","lowercase_mapping":"","titlecase_mapping":"0541","symbol":"\u0571"},1394:{"value":"0572","name":"ARMENIAN SMALL LETTER GHAD","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARMENIAN SMALL LETTER LAD","comment":"","uppercase_mapping":"0542","lowercase_mapping":"","titlecase_mapping":"0542","symbol":"\u0572"},1395:{"value":"0573","name":"ARMENIAN SMALL LETTER CHEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0543","lowercase_mapping":"","titlecase_mapping":"0543","symbol":"\u0573"},1396:{"value":"0574","name":"ARMENIAN SMALL LETTER MEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0544","lowercase_mapping":"","titlecase_mapping":"0544","symbol":"\u0574"},1397:{"value":"0575","name":"ARMENIAN SMALL LETTER YI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0545","lowercase_mapping":"","titlecase_mapping":"0545","symbol":"\u0575"},1398:{"value":"0576","name":"ARMENIAN SMALL LETTER NOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0546","lowercase_mapping":"","titlecase_mapping":"0546","symbol":"\u0576"},1399:{"value":"0577","name":"ARMENIAN SMALL LETTER SHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0547","lowercase_mapping":"","titlecase_mapping":"0547","symbol":"\u0577"},1400:{"value":"0578","name":"ARMENIAN SMALL LETTER VO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0548","lowercase_mapping":"","titlecase_mapping":"0548","symbol":"\u0578"},1401:{"value":"0579","name":"ARMENIAN SMALL LETTER CHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0549","lowercase_mapping":"","titlecase_mapping":"0549","symbol":"\u0579"},1402:{"value":"057A","name":"ARMENIAN SMALL LETTER PEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"054A","lowercase_mapping":"","titlecase_mapping":"054A","symbol":"\u057A"},1403:{"value":"057B","name":"ARMENIAN SMALL LETTER JHEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"054B","lowercase_mapping":"","titlecase_mapping":"054B","symbol":"\u057B"},1404:{"value":"057C","name":"ARMENIAN SMALL LETTER RA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"054C","lowercase_mapping":"","titlecase_mapping":"054C","symbol":"\u057C"},1405:{"value":"057D","name":"ARMENIAN SMALL LETTER SEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"054D","lowercase_mapping":"","titlecase_mapping":"054D","symbol":"\u057D"},1406:{"value":"057E","name":"ARMENIAN SMALL LETTER VEW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"054E","lowercase_mapping":"","titlecase_mapping":"054E","symbol":"\u057E"},1407:{"value":"057F","name":"ARMENIAN SMALL LETTER TIWN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"054F","lowercase_mapping":"","titlecase_mapping":"054F","symbol":"\u057F"},1408:{"value":"0580","name":"ARMENIAN SMALL LETTER REH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0550","lowercase_mapping":"","titlecase_mapping":"0550","symbol":"\u0580"},1409:{"value":"0581","name":"ARMENIAN SMALL LETTER CO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0551","lowercase_mapping":"","titlecase_mapping":"0551","symbol":"\u0581"},1410:{"value":"0582","name":"ARMENIAN SMALL LETTER YIWN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0552","lowercase_mapping":"","titlecase_mapping":"0552","symbol":"\u0582"},1411:{"value":"0583","name":"ARMENIAN SMALL LETTER PIWR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0553","lowercase_mapping":"","titlecase_mapping":"0553","symbol":"\u0583"},1412:{"value":"0584","name":"ARMENIAN SMALL LETTER KEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0554","lowercase_mapping":"","titlecase_mapping":"0554","symbol":"\u0584"},1413:{"value":"0585","name":"ARMENIAN SMALL LETTER OH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0555","lowercase_mapping":"","titlecase_mapping":"0555","symbol":"\u0585"},1414:{"value":"0586","name":"ARMENIAN SMALL LETTER FEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0556","lowercase_mapping":"","titlecase_mapping":"0556","symbol":"\u0586"},1415:{"value":"0587","name":"ARMENIAN SMALL LIGATURE ECH YIWN","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0565 0582","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0587"},1416:{"value":"0588","name":"ARMENIAN SMALL LETTER YI WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0588"},4304:{"value":"10D0","name":"GEORGIAN LETTER AN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER AN","comment":"","uppercase_mapping":"1C90","lowercase_mapping":"","titlecase_mapping":"10D0","symbol":"\u10D0"},4305:{"value":"10D1","name":"GEORGIAN LETTER BAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER BAN","comment":"","uppercase_mapping":"1C91","lowercase_mapping":"","titlecase_mapping":"10D1","symbol":"\u10D1"},4306:{"value":"10D2","name":"GEORGIAN LETTER GAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER GAN","comment":"","uppercase_mapping":"1C92","lowercase_mapping":"","titlecase_mapping":"10D2","symbol":"\u10D2"},4307:{"value":"10D3","name":"GEORGIAN LETTER DON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER DON","comment":"","uppercase_mapping":"1C93","lowercase_mapping":"","titlecase_mapping":"10D3","symbol":"\u10D3"},4308:{"value":"10D4","name":"GEORGIAN LETTER EN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER EN","comment":"","uppercase_mapping":"1C94","lowercase_mapping":"","titlecase_mapping":"10D4","symbol":"\u10D4"},4309:{"value":"10D5","name":"GEORGIAN LETTER VIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER VIN","comment":"","uppercase_mapping":"1C95","lowercase_mapping":"","titlecase_mapping":"10D5","symbol":"\u10D5"},4310:{"value":"10D6","name":"GEORGIAN LETTER ZEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER ZEN","comment":"","uppercase_mapping":"1C96","lowercase_mapping":"","titlecase_mapping":"10D6","symbol":"\u10D6"},4311:{"value":"10D7","name":"GEORGIAN LETTER TAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER TAN","comment":"","uppercase_mapping":"1C97","lowercase_mapping":"","titlecase_mapping":"10D7","symbol":"\u10D7"},4312:{"value":"10D8","name":"GEORGIAN LETTER IN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER IN","comment":"","uppercase_mapping":"1C98","lowercase_mapping":"","titlecase_mapping":"10D8","symbol":"\u10D8"},4313:{"value":"10D9","name":"GEORGIAN LETTER KAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER KAN","comment":"","uppercase_mapping":"1C99","lowercase_mapping":"","titlecase_mapping":"10D9","symbol":"\u10D9"},4314:{"value":"10DA","name":"GEORGIAN LETTER LAS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER LAS","comment":"","uppercase_mapping":"1C9A","lowercase_mapping":"","titlecase_mapping":"10DA","symbol":"\u10DA"},4315:{"value":"10DB","name":"GEORGIAN LETTER MAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER MAN","comment":"","uppercase_mapping":"1C9B","lowercase_mapping":"","titlecase_mapping":"10DB","symbol":"\u10DB"},4316:{"value":"10DC","name":"GEORGIAN LETTER NAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER NAR","comment":"","uppercase_mapping":"1C9C","lowercase_mapping":"","titlecase_mapping":"10DC","symbol":"\u10DC"},4317:{"value":"10DD","name":"GEORGIAN LETTER ON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER ON","comment":"","uppercase_mapping":"1C9D","lowercase_mapping":"","titlecase_mapping":"10DD","symbol":"\u10DD"},4318:{"value":"10DE","name":"GEORGIAN LETTER PAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER PAR","comment":"","uppercase_mapping":"1C9E","lowercase_mapping":"","titlecase_mapping":"10DE","symbol":"\u10DE"},4319:{"value":"10DF","name":"GEORGIAN LETTER ZHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER ZHAR","comment":"","uppercase_mapping":"1C9F","lowercase_mapping":"","titlecase_mapping":"10DF","symbol":"\u10DF"},4320:{"value":"10E0","name":"GEORGIAN LETTER RAE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER RAE","comment":"","uppercase_mapping":"1CA0","lowercase_mapping":"","titlecase_mapping":"10E0","symbol":"\u10E0"},4321:{"value":"10E1","name":"GEORGIAN LETTER SAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER SAN","comment":"","uppercase_mapping":"1CA1","lowercase_mapping":"","titlecase_mapping":"10E1","symbol":"\u10E1"},4322:{"value":"10E2","name":"GEORGIAN LETTER TAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER TAR","comment":"","uppercase_mapping":"1CA2","lowercase_mapping":"","titlecase_mapping":"10E2","symbol":"\u10E2"},4323:{"value":"10E3","name":"GEORGIAN LETTER UN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER UN","comment":"","uppercase_mapping":"1CA3","lowercase_mapping":"","titlecase_mapping":"10E3","symbol":"\u10E3"},4324:{"value":"10E4","name":"GEORGIAN LETTER PHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER PHAR","comment":"","uppercase_mapping":"1CA4","lowercase_mapping":"","titlecase_mapping":"10E4","symbol":"\u10E4"},4325:{"value":"10E5","name":"GEORGIAN LETTER KHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER KHAR","comment":"","uppercase_mapping":"1CA5","lowercase_mapping":"","titlecase_mapping":"10E5","symbol":"\u10E5"},4326:{"value":"10E6","name":"GEORGIAN LETTER GHAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER GHAN","comment":"","uppercase_mapping":"1CA6","lowercase_mapping":"","titlecase_mapping":"10E6","symbol":"\u10E6"},4327:{"value":"10E7","name":"GEORGIAN LETTER QAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER QAR","comment":"","uppercase_mapping":"1CA7","lowercase_mapping":"","titlecase_mapping":"10E7","symbol":"\u10E7"},4328:{"value":"10E8","name":"GEORGIAN LETTER SHIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER SHIN","comment":"","uppercase_mapping":"1CA8","lowercase_mapping":"","titlecase_mapping":"10E8","symbol":"\u10E8"},4329:{"value":"10E9","name":"GEORGIAN LETTER CHIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER CHIN","comment":"","uppercase_mapping":"1CA9","lowercase_mapping":"","titlecase_mapping":"10E9","symbol":"\u10E9"},4330:{"value":"10EA","name":"GEORGIAN LETTER CAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER CAN","comment":"","uppercase_mapping":"1CAA","lowercase_mapping":"","titlecase_mapping":"10EA","symbol":"\u10EA"},4331:{"value":"10EB","name":"GEORGIAN LETTER JIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER JIL","comment":"","uppercase_mapping":"1CAB","lowercase_mapping":"","titlecase_mapping":"10EB","symbol":"\u10EB"},4332:{"value":"10EC","name":"GEORGIAN LETTER CIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER CIL","comment":"","uppercase_mapping":"1CAC","lowercase_mapping":"","titlecase_mapping":"10EC","symbol":"\u10EC"},4333:{"value":"10ED","name":"GEORGIAN LETTER CHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER CHAR","comment":"","uppercase_mapping":"1CAD","lowercase_mapping":"","titlecase_mapping":"10ED","symbol":"\u10ED"},4334:{"value":"10EE","name":"GEORGIAN LETTER XAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER XAN","comment":"","uppercase_mapping":"1CAE","lowercase_mapping":"","titlecase_mapping":"10EE","symbol":"\u10EE"},4335:{"value":"10EF","name":"GEORGIAN LETTER JHAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER JHAN","comment":"","uppercase_mapping":"1CAF","lowercase_mapping":"","titlecase_mapping":"10EF","symbol":"\u10EF"},4336:{"value":"10F0","name":"GEORGIAN LETTER HAE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER HAE","comment":"","uppercase_mapping":"1CB0","lowercase_mapping":"","titlecase_mapping":"10F0","symbol":"\u10F0"},4337:{"value":"10F1","name":"GEORGIAN LETTER HE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER HE","comment":"","uppercase_mapping":"1CB1","lowercase_mapping":"","titlecase_mapping":"10F1","symbol":"\u10F1"},4338:{"value":"10F2","name":"GEORGIAN LETTER HIE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER HIE","comment":"","uppercase_mapping":"1CB2","lowercase_mapping":"","titlecase_mapping":"10F2","symbol":"\u10F2"},4339:{"value":"10F3","name":"GEORGIAN LETTER WE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER WE","comment":"","uppercase_mapping":"1CB3","lowercase_mapping":"","titlecase_mapping":"10F3","symbol":"\u10F3"},4340:{"value":"10F4","name":"GEORGIAN LETTER HAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER HAR","comment":"","uppercase_mapping":"1CB4","lowercase_mapping":"","titlecase_mapping":"10F4","symbol":"\u10F4"},4341:{"value":"10F5","name":"GEORGIAN LETTER HOE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER HOE","comment":"","uppercase_mapping":"1CB5","lowercase_mapping":"","titlecase_mapping":"10F5","symbol":"\u10F5"},4342:{"value":"10F6","name":"GEORGIAN LETTER FI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GEORGIAN SMALL LETTER FI","comment":"","uppercase_mapping":"1CB6","lowercase_mapping":"","titlecase_mapping":"10F6","symbol":"\u10F6"},4343:{"value":"10F7","name":"GEORGIAN LETTER YN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CB7","lowercase_mapping":"","titlecase_mapping":"10F7","symbol":"\u10F7"},4344:{"value":"10F8","name":"GEORGIAN LETTER ELIFI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CB8","lowercase_mapping":"","titlecase_mapping":"10F8","symbol":"\u10F8"},4345:{"value":"10F9","name":"GEORGIAN LETTER TURNED GAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CB9","lowercase_mapping":"","titlecase_mapping":"10F9","symbol":"\u10F9"},4346:{"value":"10FA","name":"GEORGIAN LETTER AIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CBA","lowercase_mapping":"","titlecase_mapping":"10FA","symbol":"\u10FA"},4349:{"value":"10FD","name":"GEORGIAN LETTER AEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CBD","lowercase_mapping":"","titlecase_mapping":"10FD","symbol":"\u10FD"},4350:{"value":"10FE","name":"GEORGIAN LETTER HARD SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CBE","lowercase_mapping":"","titlecase_mapping":"10FE","symbol":"\u10FE"},4351:{"value":"10FF","name":"GEORGIAN LETTER LABIAL SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1CBF","lowercase_mapping":"","titlecase_mapping":"10FF","symbol":"\u10FF"},5112:{"value":"13F8","name":"CHEROKEE SMALL LETTER YE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13F0","lowercase_mapping":"","titlecase_mapping":"13F0","symbol":"\u13F8"},5113:{"value":"13F9","name":"CHEROKEE SMALL LETTER YI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13F1","lowercase_mapping":"","titlecase_mapping":"13F1","symbol":"\u13F9"},5114:{"value":"13FA","name":"CHEROKEE SMALL LETTER YO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13F2","lowercase_mapping":"","titlecase_mapping":"13F2","symbol":"\u13FA"},5115:{"value":"13FB","name":"CHEROKEE SMALL LETTER YU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13F3","lowercase_mapping":"","titlecase_mapping":"13F3","symbol":"\u13FB"},5116:{"value":"13FC","name":"CHEROKEE SMALL LETTER YV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13F4","lowercase_mapping":"","titlecase_mapping":"13F4","symbol":"\u13FC"},5117:{"value":"13FD","name":"CHEROKEE SMALL LETTER MV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13F5","lowercase_mapping":"","titlecase_mapping":"13F5","symbol":"\u13FD"},7296:{"value":"1C80","name":"CYRILLIC SMALL LETTER ROUNDED VE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0412","lowercase_mapping":"","titlecase_mapping":"0412","symbol":"\u1C80"},7297:{"value":"1C81","name":"CYRILLIC SMALL LETTER LONG-LEGGED DE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0414","lowercase_mapping":"","titlecase_mapping":"0414","symbol":"\u1C81"},7298:{"value":"1C82","name":"CYRILLIC SMALL LETTER NARROW O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"041E","lowercase_mapping":"","titlecase_mapping":"041E","symbol":"\u1C82"},7299:{"value":"1C83","name":"CYRILLIC SMALL LETTER WIDE ES","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0421","lowercase_mapping":"","titlecase_mapping":"0421","symbol":"\u1C83"},7300:{"value":"1C84","name":"CYRILLIC SMALL LETTER TALL TE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0422","lowercase_mapping":"","titlecase_mapping":"0422","symbol":"\u1C84"},7301:{"value":"1C85","name":"CYRILLIC SMALL LETTER THREE-LEGGED TE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0422","lowercase_mapping":"","titlecase_mapping":"0422","symbol":"\u1C85"},7302:{"value":"1C86","name":"CYRILLIC SMALL LETTER TALL HARD SIGN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"042A","lowercase_mapping":"","titlecase_mapping":"042A","symbol":"\u1C86"},7303:{"value":"1C87","name":"CYRILLIC SMALL LETTER TALL YAT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0462","lowercase_mapping":"","titlecase_mapping":"0462","symbol":"\u1C87"},7304:{"value":"1C88","name":"CYRILLIC SMALL LETTER UNBLENDED UK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A64A","lowercase_mapping":"","titlecase_mapping":"A64A","symbol":"\u1C88"},7424:{"value":"1D00","name":"LATIN LETTER SMALL CAPITAL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D00"},7425:{"value":"1D01","name":"LATIN LETTER SMALL CAPITAL AE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D01"},7426:{"value":"1D02","name":"LATIN SMALL LETTER TURNED AE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D02"},7427:{"value":"1D03","name":"LATIN LETTER SMALL CAPITAL BARRED B","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D03"},7428:{"value":"1D04","name":"LATIN LETTER SMALL CAPITAL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D04"},7429:{"value":"1D05","name":"LATIN LETTER SMALL CAPITAL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D05"},7430:{"value":"1D06","name":"LATIN LETTER SMALL CAPITAL ETH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D06"},7431:{"value":"1D07","name":"LATIN LETTER SMALL CAPITAL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D07"},7432:{"value":"1D08","name":"LATIN SMALL LETTER TURNED OPEN E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D08"},7433:{"value":"1D09","name":"LATIN SMALL LETTER TURNED I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D09"},7434:{"value":"1D0A","name":"LATIN LETTER SMALL CAPITAL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D0A"},7435:{"value":"1D0B","name":"LATIN LETTER SMALL CAPITAL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D0B"},7436:{"value":"1D0C","name":"LATIN LETTER SMALL CAPITAL L WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D0C"},7437:{"value":"1D0D","name":"LATIN LETTER SMALL CAPITAL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D0D"},7438:{"value":"1D0E","name":"LATIN LETTER SMALL CAPITAL REVERSED N","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D0E"},7439:{"value":"1D0F","name":"LATIN LETTER SMALL CAPITAL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D0F"},7440:{"value":"1D10","name":"LATIN LETTER SMALL CAPITAL OPEN O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D10"},7441:{"value":"1D11","name":"LATIN SMALL LETTER SIDEWAYS O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D11"},7442:{"value":"1D12","name":"LATIN SMALL LETTER SIDEWAYS OPEN O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D12"},7443:{"value":"1D13","name":"LATIN SMALL LETTER SIDEWAYS O WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D13"},7444:{"value":"1D14","name":"LATIN SMALL LETTER TURNED OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D14"},7445:{"value":"1D15","name":"LATIN LETTER SMALL CAPITAL OU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D15"},7446:{"value":"1D16","name":"LATIN SMALL LETTER TOP HALF O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D16"},7447:{"value":"1D17","name":"LATIN SMALL LETTER BOTTOM HALF O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D17"},7448:{"value":"1D18","name":"LATIN LETTER SMALL CAPITAL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D18"},7449:{"value":"1D19","name":"LATIN LETTER SMALL CAPITAL REVERSED R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D19"},7450:{"value":"1D1A","name":"LATIN LETTER SMALL CAPITAL TURNED R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D1A"},7451:{"value":"1D1B","name":"LATIN LETTER SMALL CAPITAL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D1B"},7452:{"value":"1D1C","name":"LATIN LETTER SMALL CAPITAL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D1C"},7453:{"value":"1D1D","name":"LATIN SMALL LETTER SIDEWAYS U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D1D"},7454:{"value":"1D1E","name":"LATIN SMALL LETTER SIDEWAYS DIAERESIZED U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D1E"},7455:{"value":"1D1F","name":"LATIN SMALL LETTER SIDEWAYS TURNED M","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D1F"},7456:{"value":"1D20","name":"LATIN LETTER SMALL CAPITAL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D20"},7457:{"value":"1D21","name":"LATIN LETTER SMALL CAPITAL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D21"},7458:{"value":"1D22","name":"LATIN LETTER SMALL CAPITAL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D22"},7459:{"value":"1D23","name":"LATIN LETTER SMALL CAPITAL EZH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D23"},7460:{"value":"1D24","name":"LATIN LETTER VOICED LARYNGEAL SPIRANT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D24"},7461:{"value":"1D25","name":"LATIN LETTER AIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D25"},7462:{"value":"1D26","name":"GREEK LETTER SMALL CAPITAL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D26"},7463:{"value":"1D27","name":"GREEK LETTER SMALL CAPITAL LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D27"},7464:{"value":"1D28","name":"GREEK LETTER SMALL CAPITAL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D28"},7465:{"value":"1D29","name":"GREEK LETTER SMALL CAPITAL RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D29"},7466:{"value":"1D2A","name":"GREEK LETTER SMALL CAPITAL PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D2A"},7467:{"value":"1D2B","name":"CYRILLIC LETTER SMALL CAPITAL EL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D2B"},7531:{"value":"1D6B","name":"LATIN SMALL LETTER UE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D6B"},7532:{"value":"1D6C","name":"LATIN SMALL LETTER B WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D6C"},7533:{"value":"1D6D","name":"LATIN SMALL LETTER D WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D6D"},7534:{"value":"1D6E","name":"LATIN SMALL LETTER F WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D6E"},7535:{"value":"1D6F","name":"LATIN SMALL LETTER M WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D6F"},7536:{"value":"1D70","name":"LATIN SMALL LETTER N WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D70"},7537:{"value":"1D71","name":"LATIN SMALL LETTER P WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D71"},7538:{"value":"1D72","name":"LATIN SMALL LETTER R WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D72"},7539:{"value":"1D73","name":"LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D73"},7540:{"value":"1D74","name":"LATIN SMALL LETTER S WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D74"},7541:{"value":"1D75","name":"LATIN SMALL LETTER T WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D75"},7542:{"value":"1D76","name":"LATIN SMALL LETTER Z WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D76"},7543:{"value":"1D77","name":"LATIN SMALL LETTER TURNED G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D77"},7545:{"value":"1D79","name":"LATIN SMALL LETTER INSULAR G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A77D","lowercase_mapping":"","titlecase_mapping":"A77D","symbol":"\u1D79"},7546:{"value":"1D7A","name":"LATIN SMALL LETTER TH WITH STRIKETHROUGH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D7A"},7547:{"value":"1D7B","name":"LATIN SMALL CAPITAL LETTER I WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D7B"},7548:{"value":"1D7C","name":"LATIN SMALL LETTER IOTA WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D7C"},7549:{"value":"1D7D","name":"LATIN SMALL LETTER P WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C63","lowercase_mapping":"","titlecase_mapping":"2C63","symbol":"\u1D7D"},7550:{"value":"1D7E","name":"LATIN SMALL CAPITAL LETTER U WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D7E"},7551:{"value":"1D7F","name":"LATIN SMALL LETTER UPSILON WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D7F"},7552:{"value":"1D80","name":"LATIN SMALL LETTER B WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D80"},7553:{"value":"1D81","name":"LATIN SMALL LETTER D WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D81"},7554:{"value":"1D82","name":"LATIN SMALL LETTER F WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D82"},7555:{"value":"1D83","name":"LATIN SMALL LETTER G WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D83"},7556:{"value":"1D84","name":"LATIN SMALL LETTER K WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D84"},7557:{"value":"1D85","name":"LATIN SMALL LETTER L WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D85"},7558:{"value":"1D86","name":"LATIN SMALL LETTER M WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D86"},7559:{"value":"1D87","name":"LATIN SMALL LETTER N WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D87"},7560:{"value":"1D88","name":"LATIN SMALL LETTER P WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D88"},7561:{"value":"1D89","name":"LATIN SMALL LETTER R WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D89"},7562:{"value":"1D8A","name":"LATIN SMALL LETTER S WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D8A"},7563:{"value":"1D8B","name":"LATIN SMALL LETTER ESH WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D8B"},7564:{"value":"1D8C","name":"LATIN SMALL LETTER V WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D8C"},7565:{"value":"1D8D","name":"LATIN SMALL LETTER X WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D8D"},7566:{"value":"1D8E","name":"LATIN SMALL LETTER Z WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7C6","lowercase_mapping":"","titlecase_mapping":"A7C6","symbol":"\u1D8E"},7567:{"value":"1D8F","name":"LATIN SMALL LETTER A WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D8F"},7568:{"value":"1D90","name":"LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D90"},7569:{"value":"1D91","name":"LATIN SMALL LETTER D WITH HOOK AND TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D91"},7570:{"value":"1D92","name":"LATIN SMALL LETTER E WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D92"},7571:{"value":"1D93","name":"LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D93"},7572:{"value":"1D94","name":"LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D94"},7573:{"value":"1D95","name":"LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D95"},7574:{"value":"1D96","name":"LATIN SMALL LETTER I WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D96"},7575:{"value":"1D97","name":"LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D97"},7576:{"value":"1D98","name":"LATIN SMALL LETTER ESH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D98"},7577:{"value":"1D99","name":"LATIN SMALL LETTER U WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D99"},7578:{"value":"1D9A","name":"LATIN SMALL LETTER EZH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D9A"},7681:{"value":"1E01","name":"LATIN SMALL LETTER A WITH RING BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0325","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E00","lowercase_mapping":"","titlecase_mapping":"1E00","symbol":"\u1E01"},7683:{"value":"1E03","name":"LATIN SMALL LETTER B WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0062 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E02","lowercase_mapping":"","titlecase_mapping":"1E02","symbol":"\u1E03"},7685:{"value":"1E05","name":"LATIN SMALL LETTER B WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0062 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E04","lowercase_mapping":"","titlecase_mapping":"1E04","symbol":"\u1E05"},7687:{"value":"1E07","name":"LATIN SMALL LETTER B WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0062 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E06","lowercase_mapping":"","titlecase_mapping":"1E06","symbol":"\u1E07"},7689:{"value":"1E09","name":"LATIN SMALL LETTER C WITH CEDILLA AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E7 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E08","lowercase_mapping":"","titlecase_mapping":"1E08","symbol":"\u1E09"},7691:{"value":"1E0B","name":"LATIN SMALL LETTER D WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0064 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E0A","lowercase_mapping":"","titlecase_mapping":"1E0A","symbol":"\u1E0B"},7693:{"value":"1E0D","name":"LATIN SMALL LETTER D WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0064 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E0C","lowercase_mapping":"","titlecase_mapping":"1E0C","symbol":"\u1E0D"},7695:{"value":"1E0F","name":"LATIN SMALL LETTER D WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0064 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E0E","lowercase_mapping":"","titlecase_mapping":"1E0E","symbol":"\u1E0F"},7697:{"value":"1E11","name":"LATIN SMALL LETTER D WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0064 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E10","lowercase_mapping":"","titlecase_mapping":"1E10","symbol":"\u1E11"},7699:{"value":"1E13","name":"LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0064 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E12","lowercase_mapping":"","titlecase_mapping":"1E12","symbol":"\u1E13"},7701:{"value":"1E15","name":"LATIN SMALL LETTER E WITH MACRON AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0113 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E14","lowercase_mapping":"","titlecase_mapping":"1E14","symbol":"\u1E15"},7703:{"value":"1E17","name":"LATIN SMALL LETTER E WITH MACRON AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0113 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E16","lowercase_mapping":"","titlecase_mapping":"1E16","symbol":"\u1E17"},7705:{"value":"1E19","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E18","lowercase_mapping":"","titlecase_mapping":"1E18","symbol":"\u1E19"},7707:{"value":"1E1B","name":"LATIN SMALL LETTER E WITH TILDE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0330","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E1A","lowercase_mapping":"","titlecase_mapping":"1E1A","symbol":"\u1E1B"},7709:{"value":"1E1D","name":"LATIN SMALL LETTER E WITH CEDILLA AND BREVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0229 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E1C","lowercase_mapping":"","titlecase_mapping":"1E1C","symbol":"\u1E1D"},7711:{"value":"1E1F","name":"LATIN SMALL LETTER F WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0066 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E1E","lowercase_mapping":"","titlecase_mapping":"1E1E","symbol":"\u1E1F"},7713:{"value":"1E21","name":"LATIN SMALL LETTER G WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0067 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E20","lowercase_mapping":"","titlecase_mapping":"1E20","symbol":"\u1E21"},7715:{"value":"1E23","name":"LATIN SMALL LETTER H WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E22","lowercase_mapping":"","titlecase_mapping":"1E22","symbol":"\u1E23"},7717:{"value":"1E25","name":"LATIN SMALL LETTER H WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E24","lowercase_mapping":"","titlecase_mapping":"1E24","symbol":"\u1E25"},7719:{"value":"1E27","name":"LATIN SMALL LETTER H WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E26","lowercase_mapping":"","titlecase_mapping":"1E26","symbol":"\u1E27"},7721:{"value":"1E29","name":"LATIN SMALL LETTER H WITH CEDILLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E28","lowercase_mapping":"","titlecase_mapping":"1E28","symbol":"\u1E29"},7723:{"value":"1E2B","name":"LATIN SMALL LETTER H WITH BREVE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 032E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E2A","lowercase_mapping":"","titlecase_mapping":"1E2A","symbol":"\u1E2B"},7725:{"value":"1E2D","name":"LATIN SMALL LETTER I WITH TILDE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0330","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E2C","lowercase_mapping":"","titlecase_mapping":"1E2C","symbol":"\u1E2D"},7727:{"value":"1E2F","name":"LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00EF 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E2E","lowercase_mapping":"","titlecase_mapping":"1E2E","symbol":"\u1E2F"},7729:{"value":"1E31","name":"LATIN SMALL LETTER K WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006B 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E30","lowercase_mapping":"","titlecase_mapping":"1E30","symbol":"\u1E31"},7731:{"value":"1E33","name":"LATIN SMALL LETTER K WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006B 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E32","lowercase_mapping":"","titlecase_mapping":"1E32","symbol":"\u1E33"},7733:{"value":"1E35","name":"LATIN SMALL LETTER K WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006B 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E34","lowercase_mapping":"","titlecase_mapping":"1E34","symbol":"\u1E35"},7735:{"value":"1E37","name":"LATIN SMALL LETTER L WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006C 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E36","lowercase_mapping":"","titlecase_mapping":"1E36","symbol":"\u1E37"},7737:{"value":"1E39","name":"LATIN SMALL LETTER L WITH DOT BELOW AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1E37 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E38","lowercase_mapping":"","titlecase_mapping":"1E38","symbol":"\u1E39"},7739:{"value":"1E3B","name":"LATIN SMALL LETTER L WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006C 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E3A","lowercase_mapping":"","titlecase_mapping":"1E3A","symbol":"\u1E3B"},7741:{"value":"1E3D","name":"LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006C 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E3C","lowercase_mapping":"","titlecase_mapping":"1E3C","symbol":"\u1E3D"},7743:{"value":"1E3F","name":"LATIN SMALL LETTER M WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006D 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E3E","lowercase_mapping":"","titlecase_mapping":"1E3E","symbol":"\u1E3F"},7745:{"value":"1E41","name":"LATIN SMALL LETTER M WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006D 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E40","lowercase_mapping":"","titlecase_mapping":"1E40","symbol":"\u1E41"},7747:{"value":"1E43","name":"LATIN SMALL LETTER M WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006D 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E42","lowercase_mapping":"","titlecase_mapping":"1E42","symbol":"\u1E43"},7749:{"value":"1E45","name":"LATIN SMALL LETTER N WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E44","lowercase_mapping":"","titlecase_mapping":"1E44","symbol":"\u1E45"},7751:{"value":"1E47","name":"LATIN SMALL LETTER N WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E46","lowercase_mapping":"","titlecase_mapping":"1E46","symbol":"\u1E47"},7753:{"value":"1E49","name":"LATIN SMALL LETTER N WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E48","lowercase_mapping":"","titlecase_mapping":"1E48","symbol":"\u1E49"},7755:{"value":"1E4B","name":"LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006E 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E4A","lowercase_mapping":"","titlecase_mapping":"1E4A","symbol":"\u1E4B"},7757:{"value":"1E4D","name":"LATIN SMALL LETTER O WITH TILDE AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E4C","lowercase_mapping":"","titlecase_mapping":"1E4C","symbol":"\u1E4D"},7759:{"value":"1E4F","name":"LATIN SMALL LETTER O WITH TILDE AND DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F5 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E4E","lowercase_mapping":"","titlecase_mapping":"1E4E","symbol":"\u1E4F"},7761:{"value":"1E51","name":"LATIN SMALL LETTER O WITH MACRON AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"014D 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E50","lowercase_mapping":"","titlecase_mapping":"1E50","symbol":"\u1E51"},7763:{"value":"1E53","name":"LATIN SMALL LETTER O WITH MACRON AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"014D 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E52","lowercase_mapping":"","titlecase_mapping":"1E52","symbol":"\u1E53"},7765:{"value":"1E55","name":"LATIN SMALL LETTER P WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0070 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E54","lowercase_mapping":"","titlecase_mapping":"1E54","symbol":"\u1E55"},7767:{"value":"1E57","name":"LATIN SMALL LETTER P WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0070 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E56","lowercase_mapping":"","titlecase_mapping":"1E56","symbol":"\u1E57"},7769:{"value":"1E59","name":"LATIN SMALL LETTER R WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E58","lowercase_mapping":"","titlecase_mapping":"1E58","symbol":"\u1E59"},7771:{"value":"1E5B","name":"LATIN SMALL LETTER R WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E5A","lowercase_mapping":"","titlecase_mapping":"1E5A","symbol":"\u1E5B"},7773:{"value":"1E5D","name":"LATIN SMALL LETTER R WITH DOT BELOW AND MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1E5B 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E5C","lowercase_mapping":"","titlecase_mapping":"1E5C","symbol":"\u1E5D"},7775:{"value":"1E5F","name":"LATIN SMALL LETTER R WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0072 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E5E","lowercase_mapping":"","titlecase_mapping":"1E5E","symbol":"\u1E5F"},7777:{"value":"1E61","name":"LATIN SMALL LETTER S WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E60","lowercase_mapping":"","titlecase_mapping":"1E60","symbol":"\u1E61"},7779:{"value":"1E63","name":"LATIN SMALL LETTER S WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0073 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E62","lowercase_mapping":"","titlecase_mapping":"1E62","symbol":"\u1E63"},7781:{"value":"1E65","name":"LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"015B 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E64","lowercase_mapping":"","titlecase_mapping":"1E64","symbol":"\u1E65"},7783:{"value":"1E67","name":"LATIN SMALL LETTER S WITH CARON AND DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0161 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E66","lowercase_mapping":"","titlecase_mapping":"1E66","symbol":"\u1E67"},7785:{"value":"1E69","name":"LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1E63 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E68","lowercase_mapping":"","titlecase_mapping":"1E68","symbol":"\u1E69"},7787:{"value":"1E6B","name":"LATIN SMALL LETTER T WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E6A","lowercase_mapping":"","titlecase_mapping":"1E6A","symbol":"\u1E6B"},7789:{"value":"1E6D","name":"LATIN SMALL LETTER T WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E6C","lowercase_mapping":"","titlecase_mapping":"1E6C","symbol":"\u1E6D"},7791:{"value":"1E6F","name":"LATIN SMALL LETTER T WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E6E","lowercase_mapping":"","titlecase_mapping":"1E6E","symbol":"\u1E6F"},7793:{"value":"1E71","name":"LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E70","lowercase_mapping":"","titlecase_mapping":"1E70","symbol":"\u1E71"},7795:{"value":"1E73","name":"LATIN SMALL LETTER U WITH DIAERESIS BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0324","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E72","lowercase_mapping":"","titlecase_mapping":"1E72","symbol":"\u1E73"},7797:{"value":"1E75","name":"LATIN SMALL LETTER U WITH TILDE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0330","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E74","lowercase_mapping":"","titlecase_mapping":"1E74","symbol":"\u1E75"},7799:{"value":"1E77","name":"LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E76","lowercase_mapping":"","titlecase_mapping":"1E76","symbol":"\u1E77"},7801:{"value":"1E79","name":"LATIN SMALL LETTER U WITH TILDE AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0169 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E78","lowercase_mapping":"","titlecase_mapping":"1E78","symbol":"\u1E79"},7803:{"value":"1E7B","name":"LATIN SMALL LETTER U WITH MACRON AND DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"016B 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E7A","lowercase_mapping":"","titlecase_mapping":"1E7A","symbol":"\u1E7B"},7805:{"value":"1E7D","name":"LATIN SMALL LETTER V WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0076 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E7C","lowercase_mapping":"","titlecase_mapping":"1E7C","symbol":"\u1E7D"},7807:{"value":"1E7F","name":"LATIN SMALL LETTER V WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0076 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E7E","lowercase_mapping":"","titlecase_mapping":"1E7E","symbol":"\u1E7F"},7809:{"value":"1E81","name":"LATIN SMALL LETTER W WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E80","lowercase_mapping":"","titlecase_mapping":"1E80","symbol":"\u1E81"},7811:{"value":"1E83","name":"LATIN SMALL LETTER W WITH ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E82","lowercase_mapping":"","titlecase_mapping":"1E82","symbol":"\u1E83"},7813:{"value":"1E85","name":"LATIN SMALL LETTER W WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E84","lowercase_mapping":"","titlecase_mapping":"1E84","symbol":"\u1E85"},7815:{"value":"1E87","name":"LATIN SMALL LETTER W WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E86","lowercase_mapping":"","titlecase_mapping":"1E86","symbol":"\u1E87"},7817:{"value":"1E89","name":"LATIN SMALL LETTER W WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E88","lowercase_mapping":"","titlecase_mapping":"1E88","symbol":"\u1E89"},7819:{"value":"1E8B","name":"LATIN SMALL LETTER X WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0078 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E8A","lowercase_mapping":"","titlecase_mapping":"1E8A","symbol":"\u1E8B"},7821:{"value":"1E8D","name":"LATIN SMALL LETTER X WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0078 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E8C","lowercase_mapping":"","titlecase_mapping":"1E8C","symbol":"\u1E8D"},7823:{"value":"1E8F","name":"LATIN SMALL LETTER Y WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E8E","lowercase_mapping":"","titlecase_mapping":"1E8E","symbol":"\u1E8F"},7825:{"value":"1E91","name":"LATIN SMALL LETTER Z WITH CIRCUMFLEX","category":"Ll","class":"0","bidirectional_category":"L","mapping":"007A 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90","lowercase_mapping":"","titlecase_mapping":"1E90","symbol":"\u1E91"},7827:{"value":"1E93","name":"LATIN SMALL LETTER Z WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"007A 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E92","lowercase_mapping":"","titlecase_mapping":"1E92","symbol":"\u1E93"},7829:{"value":"1E95","name":"LATIN SMALL LETTER Z WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"007A 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E94","lowercase_mapping":"","titlecase_mapping":"1E94","symbol":"\u1E95"},7830:{"value":"1E96","name":"LATIN SMALL LETTER H WITH LINE BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0068 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E96"},7831:{"value":"1E97","name":"LATIN SMALL LETTER T WITH DIAERESIS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0074 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E97"},7832:{"value":"1E98","name":"LATIN SMALL LETTER W WITH RING ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0077 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E98"},7833:{"value":"1E99","name":"LATIN SMALL LETTER Y WITH RING ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E99"},7834:{"value":"1E9A","name":"LATIN SMALL LETTER A WITH RIGHT HALF RING","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061 02BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E9A"},7835:{"value":"1E9B","name":"LATIN SMALL LETTER LONG S WITH DOT ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"017F 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E60","lowercase_mapping":"","titlecase_mapping":"1E60","symbol":"\u1E9B"},7836:{"value":"1E9C","name":"LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E9C"},7837:{"value":"1E9D","name":"LATIN SMALL LETTER LONG S WITH HIGH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E9D"},7839:{"value":"1E9F","name":"LATIN SMALL LETTER DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1E9F"},7841:{"value":"1EA1","name":"LATIN SMALL LETTER A WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EA0","lowercase_mapping":"","titlecase_mapping":"1EA0","symbol":"\u1EA1"},7843:{"value":"1EA3","name":"LATIN SMALL LETTER A WITH HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0061 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EA2","lowercase_mapping":"","titlecase_mapping":"1EA2","symbol":"\u1EA3"},7845:{"value":"1EA5","name":"LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E2 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EA4","lowercase_mapping":"","titlecase_mapping":"1EA4","symbol":"\u1EA5"},7847:{"value":"1EA7","name":"LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E2 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EA6","lowercase_mapping":"","titlecase_mapping":"1EA6","symbol":"\u1EA7"},7849:{"value":"1EA9","name":"LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E2 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EA8","lowercase_mapping":"","titlecase_mapping":"1EA8","symbol":"\u1EA9"},7851:{"value":"1EAB","name":"LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00E2 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EAA","lowercase_mapping":"","titlecase_mapping":"1EAA","symbol":"\u1EAB"},7853:{"value":"1EAD","name":"LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1EA1 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EAC","lowercase_mapping":"","titlecase_mapping":"1EAC","symbol":"\u1EAD"},7855:{"value":"1EAF","name":"LATIN SMALL LETTER A WITH BREVE AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0103 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EAE","lowercase_mapping":"","titlecase_mapping":"1EAE","symbol":"\u1EAF"},7857:{"value":"1EB1","name":"LATIN SMALL LETTER A WITH BREVE AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0103 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EB0","lowercase_mapping":"","titlecase_mapping":"1EB0","symbol":"\u1EB1"},7859:{"value":"1EB3","name":"LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0103 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EB2","lowercase_mapping":"","titlecase_mapping":"1EB2","symbol":"\u1EB3"},7861:{"value":"1EB5","name":"LATIN SMALL LETTER A WITH BREVE AND TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0103 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EB4","lowercase_mapping":"","titlecase_mapping":"1EB4","symbol":"\u1EB5"},7863:{"value":"1EB7","name":"LATIN SMALL LETTER A WITH BREVE AND DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1EA1 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EB6","lowercase_mapping":"","titlecase_mapping":"1EB6","symbol":"\u1EB7"},7865:{"value":"1EB9","name":"LATIN SMALL LETTER E WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EB8","lowercase_mapping":"","titlecase_mapping":"1EB8","symbol":"\u1EB9"},7867:{"value":"1EBB","name":"LATIN SMALL LETTER E WITH HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EBA","lowercase_mapping":"","titlecase_mapping":"1EBA","symbol":"\u1EBB"},7869:{"value":"1EBD","name":"LATIN SMALL LETTER E WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0065 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EBC","lowercase_mapping":"","titlecase_mapping":"1EBC","symbol":"\u1EBD"},7871:{"value":"1EBF","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00EA 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EBE","lowercase_mapping":"","titlecase_mapping":"1EBE","symbol":"\u1EBF"},7873:{"value":"1EC1","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00EA 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EC0","lowercase_mapping":"","titlecase_mapping":"1EC0","symbol":"\u1EC1"},7875:{"value":"1EC3","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00EA 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EC2","lowercase_mapping":"","titlecase_mapping":"1EC2","symbol":"\u1EC3"},7877:{"value":"1EC5","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00EA 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EC4","lowercase_mapping":"","titlecase_mapping":"1EC4","symbol":"\u1EC5"},7879:{"value":"1EC7","name":"LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1EB9 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EC6","lowercase_mapping":"","titlecase_mapping":"1EC6","symbol":"\u1EC7"},7881:{"value":"1EC9","name":"LATIN SMALL LETTER I WITH HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EC8","lowercase_mapping":"","titlecase_mapping":"1EC8","symbol":"\u1EC9"},7883:{"value":"1ECB","name":"LATIN SMALL LETTER I WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0069 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ECA","lowercase_mapping":"","titlecase_mapping":"1ECA","symbol":"\u1ECB"},7885:{"value":"1ECD","name":"LATIN SMALL LETTER O WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ECC","lowercase_mapping":"","titlecase_mapping":"1ECC","symbol":"\u1ECD"},7887:{"value":"1ECF","name":"LATIN SMALL LETTER O WITH HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"006F 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ECE","lowercase_mapping":"","titlecase_mapping":"1ECE","symbol":"\u1ECF"},7889:{"value":"1ED1","name":"LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F4 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ED0","lowercase_mapping":"","titlecase_mapping":"1ED0","symbol":"\u1ED1"},7891:{"value":"1ED3","name":"LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F4 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ED2","lowercase_mapping":"","titlecase_mapping":"1ED2","symbol":"\u1ED3"},7893:{"value":"1ED5","name":"LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F4 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ED4","lowercase_mapping":"","titlecase_mapping":"1ED4","symbol":"\u1ED5"},7895:{"value":"1ED7","name":"LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"00F4 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ED6","lowercase_mapping":"","titlecase_mapping":"1ED6","symbol":"\u1ED7"},7897:{"value":"1ED9","name":"LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1ECD 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1ED8","lowercase_mapping":"","titlecase_mapping":"1ED8","symbol":"\u1ED9"},7899:{"value":"1EDB","name":"LATIN SMALL LETTER O WITH HORN AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01A1 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EDA","lowercase_mapping":"","titlecase_mapping":"1EDA","symbol":"\u1EDB"},7901:{"value":"1EDD","name":"LATIN SMALL LETTER O WITH HORN AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01A1 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EDC","lowercase_mapping":"","titlecase_mapping":"1EDC","symbol":"\u1EDD"},7903:{"value":"1EDF","name":"LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01A1 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EDE","lowercase_mapping":"","titlecase_mapping":"1EDE","symbol":"\u1EDF"},7905:{"value":"1EE1","name":"LATIN SMALL LETTER O WITH HORN AND TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01A1 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EE0","lowercase_mapping":"","titlecase_mapping":"1EE0","symbol":"\u1EE1"},7907:{"value":"1EE3","name":"LATIN SMALL LETTER O WITH HORN AND DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01A1 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EE2","lowercase_mapping":"","titlecase_mapping":"1EE2","symbol":"\u1EE3"},7909:{"value":"1EE5","name":"LATIN SMALL LETTER U WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EE4","lowercase_mapping":"","titlecase_mapping":"1EE4","symbol":"\u1EE5"},7911:{"value":"1EE7","name":"LATIN SMALL LETTER U WITH HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0075 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EE6","lowercase_mapping":"","titlecase_mapping":"1EE6","symbol":"\u1EE7"},7913:{"value":"1EE9","name":"LATIN SMALL LETTER U WITH HORN AND ACUTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01B0 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EE8","lowercase_mapping":"","titlecase_mapping":"1EE8","symbol":"\u1EE9"},7915:{"value":"1EEB","name":"LATIN SMALL LETTER U WITH HORN AND GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01B0 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EEA","lowercase_mapping":"","titlecase_mapping":"1EEA","symbol":"\u1EEB"},7917:{"value":"1EED","name":"LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01B0 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EEC","lowercase_mapping":"","titlecase_mapping":"1EEC","symbol":"\u1EED"},7919:{"value":"1EEF","name":"LATIN SMALL LETTER U WITH HORN AND TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01B0 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EEE","lowercase_mapping":"","titlecase_mapping":"1EEE","symbol":"\u1EEF"},7921:{"value":"1EF1","name":"LATIN SMALL LETTER U WITH HORN AND DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"01B0 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EF0","lowercase_mapping":"","titlecase_mapping":"1EF0","symbol":"\u1EF1"},7923:{"value":"1EF3","name":"LATIN SMALL LETTER Y WITH GRAVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EF2","lowercase_mapping":"","titlecase_mapping":"1EF2","symbol":"\u1EF3"},7925:{"value":"1EF5","name":"LATIN SMALL LETTER Y WITH DOT BELOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EF4","lowercase_mapping":"","titlecase_mapping":"1EF4","symbol":"\u1EF5"},7927:{"value":"1EF7","name":"LATIN SMALL LETTER Y WITH HOOK ABOVE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EF6","lowercase_mapping":"","titlecase_mapping":"1EF6","symbol":"\u1EF7"},7929:{"value":"1EF9","name":"LATIN SMALL LETTER Y WITH TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0079 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EF8","lowercase_mapping":"","titlecase_mapping":"1EF8","symbol":"\u1EF9"},7931:{"value":"1EFB","name":"LATIN SMALL LETTER MIDDLE-WELSH LL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EFA","lowercase_mapping":"","titlecase_mapping":"1EFA","symbol":"\u1EFB"},7933:{"value":"1EFD","name":"LATIN SMALL LETTER MIDDLE-WELSH V","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EFC","lowercase_mapping":"","titlecase_mapping":"1EFC","symbol":"\u1EFD"},7935:{"value":"1EFF","name":"LATIN SMALL LETTER Y WITH LOOP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1EFE","lowercase_mapping":"","titlecase_mapping":"1EFE","symbol":"\u1EFF"},7936:{"value":"1F00","name":"GREEK SMALL LETTER ALPHA WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F08","lowercase_mapping":"","titlecase_mapping":"1F08","symbol":"\u1F00"},7937:{"value":"1F01","name":"GREEK SMALL LETTER ALPHA WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F09","lowercase_mapping":"","titlecase_mapping":"1F09","symbol":"\u1F01"},7938:{"value":"1F02","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F00 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F0A","lowercase_mapping":"","titlecase_mapping":"1F0A","symbol":"\u1F02"},7939:{"value":"1F03","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F01 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F0B","lowercase_mapping":"","titlecase_mapping":"1F0B","symbol":"\u1F03"},7940:{"value":"1F04","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F00 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F0C","lowercase_mapping":"","titlecase_mapping":"1F0C","symbol":"\u1F04"},7941:{"value":"1F05","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F01 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F0D","lowercase_mapping":"","titlecase_mapping":"1F0D","symbol":"\u1F05"},7942:{"value":"1F06","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F00 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F0E","lowercase_mapping":"","titlecase_mapping":"1F0E","symbol":"\u1F06"},7943:{"value":"1F07","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F01 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F0F","lowercase_mapping":"","titlecase_mapping":"1F0F","symbol":"\u1F07"},7952:{"value":"1F10","name":"GREEK SMALL LETTER EPSILON WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B5 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F18","lowercase_mapping":"","titlecase_mapping":"1F18","symbol":"\u1F10"},7953:{"value":"1F11","name":"GREEK SMALL LETTER EPSILON WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B5 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F19","lowercase_mapping":"","titlecase_mapping":"1F19","symbol":"\u1F11"},7954:{"value":"1F12","name":"GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F10 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F1A","lowercase_mapping":"","titlecase_mapping":"1F1A","symbol":"\u1F12"},7955:{"value":"1F13","name":"GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F11 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F1B","lowercase_mapping":"","titlecase_mapping":"1F1B","symbol":"\u1F13"},7956:{"value":"1F14","name":"GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F10 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F1C","lowercase_mapping":"","titlecase_mapping":"1F1C","symbol":"\u1F14"},7957:{"value":"1F15","name":"GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F11 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F1D","lowercase_mapping":"","titlecase_mapping":"1F1D","symbol":"\u1F15"},7968:{"value":"1F20","name":"GREEK SMALL LETTER ETA WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B7 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F28","lowercase_mapping":"","titlecase_mapping":"1F28","symbol":"\u1F20"},7969:{"value":"1F21","name":"GREEK SMALL LETTER ETA WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B7 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F29","lowercase_mapping":"","titlecase_mapping":"1F29","symbol":"\u1F21"},7970:{"value":"1F22","name":"GREEK SMALL LETTER ETA WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F20 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F2A","lowercase_mapping":"","titlecase_mapping":"1F2A","symbol":"\u1F22"},7971:{"value":"1F23","name":"GREEK SMALL LETTER ETA WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F21 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F2B","lowercase_mapping":"","titlecase_mapping":"1F2B","symbol":"\u1F23"},7972:{"value":"1F24","name":"GREEK SMALL LETTER ETA WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F20 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F2C","lowercase_mapping":"","titlecase_mapping":"1F2C","symbol":"\u1F24"},7973:{"value":"1F25","name":"GREEK SMALL LETTER ETA WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F21 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F2D","lowercase_mapping":"","titlecase_mapping":"1F2D","symbol":"\u1F25"},7974:{"value":"1F26","name":"GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F20 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F2E","lowercase_mapping":"","titlecase_mapping":"1F2E","symbol":"\u1F26"},7975:{"value":"1F27","name":"GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F21 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F2F","lowercase_mapping":"","titlecase_mapping":"1F2F","symbol":"\u1F27"},7984:{"value":"1F30","name":"GREEK SMALL LETTER IOTA WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F38","lowercase_mapping":"","titlecase_mapping":"1F38","symbol":"\u1F30"},7985:{"value":"1F31","name":"GREEK SMALL LETTER IOTA WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F39","lowercase_mapping":"","titlecase_mapping":"1F39","symbol":"\u1F31"},7986:{"value":"1F32","name":"GREEK SMALL LETTER IOTA WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F30 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F3A","lowercase_mapping":"","titlecase_mapping":"1F3A","symbol":"\u1F32"},7987:{"value":"1F33","name":"GREEK SMALL LETTER IOTA WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F31 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F3B","lowercase_mapping":"","titlecase_mapping":"1F3B","symbol":"\u1F33"},7988:{"value":"1F34","name":"GREEK SMALL LETTER IOTA WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F30 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F3C","lowercase_mapping":"","titlecase_mapping":"1F3C","symbol":"\u1F34"},7989:{"value":"1F35","name":"GREEK SMALL LETTER IOTA WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F31 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F3D","lowercase_mapping":"","titlecase_mapping":"1F3D","symbol":"\u1F35"},7990:{"value":"1F36","name":"GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F30 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F3E","lowercase_mapping":"","titlecase_mapping":"1F3E","symbol":"\u1F36"},7991:{"value":"1F37","name":"GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F31 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F3F","lowercase_mapping":"","titlecase_mapping":"1F3F","symbol":"\u1F37"},8000:{"value":"1F40","name":"GREEK SMALL LETTER OMICRON WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03BF 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F48","lowercase_mapping":"","titlecase_mapping":"1F48","symbol":"\u1F40"},8001:{"value":"1F41","name":"GREEK SMALL LETTER OMICRON WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03BF 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F49","lowercase_mapping":"","titlecase_mapping":"1F49","symbol":"\u1F41"},8002:{"value":"1F42","name":"GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F40 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F4A","lowercase_mapping":"","titlecase_mapping":"1F4A","symbol":"\u1F42"},8003:{"value":"1F43","name":"GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F41 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F4B","lowercase_mapping":"","titlecase_mapping":"1F4B","symbol":"\u1F43"},8004:{"value":"1F44","name":"GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F40 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F4C","lowercase_mapping":"","titlecase_mapping":"1F4C","symbol":"\u1F44"},8005:{"value":"1F45","name":"GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F41 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F4D","lowercase_mapping":"","titlecase_mapping":"1F4D","symbol":"\u1F45"},8016:{"value":"1F50","name":"GREEK SMALL LETTER UPSILON WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1F50"},8017:{"value":"1F51","name":"GREEK SMALL LETTER UPSILON WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F59","lowercase_mapping":"","titlecase_mapping":"1F59","symbol":"\u1F51"},8018:{"value":"1F52","name":"GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F50 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1F52"},8019:{"value":"1F53","name":"GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F51 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F5B","lowercase_mapping":"","titlecase_mapping":"1F5B","symbol":"\u1F53"},8020:{"value":"1F54","name":"GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F50 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1F54"},8021:{"value":"1F55","name":"GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F51 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F5D","lowercase_mapping":"","titlecase_mapping":"1F5D","symbol":"\u1F55"},8022:{"value":"1F56","name":"GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F50 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1F56"},8023:{"value":"1F57","name":"GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F51 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F5F","lowercase_mapping":"","titlecase_mapping":"1F5F","symbol":"\u1F57"},8032:{"value":"1F60","name":"GREEK SMALL LETTER OMEGA WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C9 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F68","lowercase_mapping":"","titlecase_mapping":"1F68","symbol":"\u1F60"},8033:{"value":"1F61","name":"GREEK SMALL LETTER OMEGA WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C9 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F69","lowercase_mapping":"","titlecase_mapping":"1F69","symbol":"\u1F61"},8034:{"value":"1F62","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F60 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F6A","lowercase_mapping":"","titlecase_mapping":"1F6A","symbol":"\u1F62"},8035:{"value":"1F63","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F61 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F6B","lowercase_mapping":"","titlecase_mapping":"1F6B","symbol":"\u1F63"},8036:{"value":"1F64","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F60 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F6C","lowercase_mapping":"","titlecase_mapping":"1F6C","symbol":"\u1F64"},8037:{"value":"1F65","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F61 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F6D","lowercase_mapping":"","titlecase_mapping":"1F6D","symbol":"\u1F65"},8038:{"value":"1F66","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F60 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F6E","lowercase_mapping":"","titlecase_mapping":"1F6E","symbol":"\u1F66"},8039:{"value":"1F67","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F61 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F6F","lowercase_mapping":"","titlecase_mapping":"1F6F","symbol":"\u1F67"},8048:{"value":"1F70","name":"GREEK SMALL LETTER ALPHA WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FBA","lowercase_mapping":"","titlecase_mapping":"1FBA","symbol":"\u1F70"},8049:{"value":"1F71","name":"GREEK SMALL LETTER ALPHA WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FBB","lowercase_mapping":"","titlecase_mapping":"1FBB","symbol":"\u1F71"},8050:{"value":"1F72","name":"GREEK SMALL LETTER EPSILON WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B5 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FC8","lowercase_mapping":"","titlecase_mapping":"1FC8","symbol":"\u1F72"},8051:{"value":"1F73","name":"GREEK SMALL LETTER EPSILON WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FC9","lowercase_mapping":"","titlecase_mapping":"1FC9","symbol":"\u1F73"},8052:{"value":"1F74","name":"GREEK SMALL LETTER ETA WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B7 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FCA","lowercase_mapping":"","titlecase_mapping":"1FCA","symbol":"\u1F74"},8053:{"value":"1F75","name":"GREEK SMALL LETTER ETA WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03AE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FCB","lowercase_mapping":"","titlecase_mapping":"1FCB","symbol":"\u1F75"},8054:{"value":"1F76","name":"GREEK SMALL LETTER IOTA WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FDA","lowercase_mapping":"","titlecase_mapping":"1FDA","symbol":"\u1F76"},8055:{"value":"1F77","name":"GREEK SMALL LETTER IOTA WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FDB","lowercase_mapping":"","titlecase_mapping":"1FDB","symbol":"\u1F77"},8056:{"value":"1F78","name":"GREEK SMALL LETTER OMICRON WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03BF 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FF8","lowercase_mapping":"","titlecase_mapping":"1FF8","symbol":"\u1F78"},8057:{"value":"1F79","name":"GREEK SMALL LETTER OMICRON WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FF9","lowercase_mapping":"","titlecase_mapping":"1FF9","symbol":"\u1F79"},8058:{"value":"1F7A","name":"GREEK SMALL LETTER UPSILON WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FEA","lowercase_mapping":"","titlecase_mapping":"1FEA","symbol":"\u1F7A"},8059:{"value":"1F7B","name":"GREEK SMALL LETTER UPSILON WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FEB","lowercase_mapping":"","titlecase_mapping":"1FEB","symbol":"\u1F7B"},8060:{"value":"1F7C","name":"GREEK SMALL LETTER OMEGA WITH VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C9 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FFA","lowercase_mapping":"","titlecase_mapping":"1FFA","symbol":"\u1F7C"},8061:{"value":"1F7D","name":"GREEK SMALL LETTER OMEGA WITH OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FFB","lowercase_mapping":"","titlecase_mapping":"1FFB","symbol":"\u1F7D"},8064:{"value":"1F80","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F00 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F88","lowercase_mapping":"","titlecase_mapping":"1F88","symbol":"\u1F80"},8065:{"value":"1F81","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F01 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F89","lowercase_mapping":"","titlecase_mapping":"1F89","symbol":"\u1F81"},8066:{"value":"1F82","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F02 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F8A","lowercase_mapping":"","titlecase_mapping":"1F8A","symbol":"\u1F82"},8067:{"value":"1F83","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F03 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F8B","lowercase_mapping":"","titlecase_mapping":"1F8B","symbol":"\u1F83"},8068:{"value":"1F84","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F04 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F8C","lowercase_mapping":"","titlecase_mapping":"1F8C","symbol":"\u1F84"},8069:{"value":"1F85","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F05 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F8D","lowercase_mapping":"","titlecase_mapping":"1F8D","symbol":"\u1F85"},8070:{"value":"1F86","name":"GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F06 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F8E","lowercase_mapping":"","titlecase_mapping":"1F8E","symbol":"\u1F86"},8071:{"value":"1F87","name":"GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F07 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F8F","lowercase_mapping":"","titlecase_mapping":"1F8F","symbol":"\u1F87"},8080:{"value":"1F90","name":"GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F20 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F98","lowercase_mapping":"","titlecase_mapping":"1F98","symbol":"\u1F90"},8081:{"value":"1F91","name":"GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F21 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F99","lowercase_mapping":"","titlecase_mapping":"1F99","symbol":"\u1F91"},8082:{"value":"1F92","name":"GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F22 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F9A","lowercase_mapping":"","titlecase_mapping":"1F9A","symbol":"\u1F92"},8083:{"value":"1F93","name":"GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F23 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F9B","lowercase_mapping":"","titlecase_mapping":"1F9B","symbol":"\u1F93"},8084:{"value":"1F94","name":"GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F24 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F9C","lowercase_mapping":"","titlecase_mapping":"1F9C","symbol":"\u1F94"},8085:{"value":"1F95","name":"GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F25 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F9D","lowercase_mapping":"","titlecase_mapping":"1F9D","symbol":"\u1F95"},8086:{"value":"1F96","name":"GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F26 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F9E","lowercase_mapping":"","titlecase_mapping":"1F9E","symbol":"\u1F96"},8087:{"value":"1F97","name":"GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F27 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1F9F","lowercase_mapping":"","titlecase_mapping":"1F9F","symbol":"\u1F97"},8096:{"value":"1FA0","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F60 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FA8","lowercase_mapping":"","titlecase_mapping":"1FA8","symbol":"\u1FA0"},8097:{"value":"1FA1","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F61 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FA9","lowercase_mapping":"","titlecase_mapping":"1FA9","symbol":"\u1FA1"},8098:{"value":"1FA2","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F62 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FAA","lowercase_mapping":"","titlecase_mapping":"1FAA","symbol":"\u1FA2"},8099:{"value":"1FA3","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F63 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FAB","lowercase_mapping":"","titlecase_mapping":"1FAB","symbol":"\u1FA3"},8100:{"value":"1FA4","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F64 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FAC","lowercase_mapping":"","titlecase_mapping":"1FAC","symbol":"\u1FA4"},8101:{"value":"1FA5","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F65 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FAD","lowercase_mapping":"","titlecase_mapping":"1FAD","symbol":"\u1FA5"},8102:{"value":"1FA6","name":"GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F66 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FAE","lowercase_mapping":"","titlecase_mapping":"1FAE","symbol":"\u1FA6"},8103:{"value":"1FA7","name":"GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F67 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FAF","lowercase_mapping":"","titlecase_mapping":"1FAF","symbol":"\u1FA7"},8112:{"value":"1FB0","name":"GREEK SMALL LETTER ALPHA WITH VRACHY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FB8","lowercase_mapping":"","titlecase_mapping":"1FB8","symbol":"\u1FB0"},8113:{"value":"1FB1","name":"GREEK SMALL LETTER ALPHA WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FB9","lowercase_mapping":"","titlecase_mapping":"1FB9","symbol":"\u1FB1"},8114:{"value":"1FB2","name":"GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F70 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FB2"},8115:{"value":"1FB3","name":"GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FBC","lowercase_mapping":"","titlecase_mapping":"1FBC","symbol":"\u1FB3"},8116:{"value":"1FB4","name":"GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03AC 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FB4"},8118:{"value":"1FB6","name":"GREEK SMALL LETTER ALPHA WITH PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B1 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FB6"},8119:{"value":"1FB7","name":"GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1FB6 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FB7"},8126:{"value":"1FBE","name":"GREEK PROSGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"0399","lowercase_mapping":"","titlecase_mapping":"0399","symbol":"\u1FBE"},8130:{"value":"1FC2","name":"GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F74 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FC2"},8131:{"value":"1FC3","name":"GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B7 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FCC","lowercase_mapping":"","titlecase_mapping":"1FCC","symbol":"\u1FC3"},8132:{"value":"1FC4","name":"GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03AE 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FC4"},8134:{"value":"1FC6","name":"GREEK SMALL LETTER ETA WITH PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B7 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FC6"},8135:{"value":"1FC7","name":"GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1FC6 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FC7"},8144:{"value":"1FD0","name":"GREEK SMALL LETTER IOTA WITH VRACHY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FD8","lowercase_mapping":"","titlecase_mapping":"1FD8","symbol":"\u1FD0"},8145:{"value":"1FD1","name":"GREEK SMALL LETTER IOTA WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FD9","lowercase_mapping":"","titlecase_mapping":"1FD9","symbol":"\u1FD1"},8146:{"value":"1FD2","name":"GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CA 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FD2"},8147:{"value":"1FD3","name":"GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"0390","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FD3"},8150:{"value":"1FD6","name":"GREEK SMALL LETTER IOTA WITH PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B9 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FD6"},8151:{"value":"1FD7","name":"GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CA 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FD7"},8160:{"value":"1FE0","name":"GREEK SMALL LETTER UPSILON WITH VRACHY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FE8","lowercase_mapping":"","titlecase_mapping":"1FE8","symbol":"\u1FE0"},8161:{"value":"1FE1","name":"GREEK SMALL LETTER UPSILON WITH MACRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FE9","lowercase_mapping":"","titlecase_mapping":"1FE9","symbol":"\u1FE1"},8162:{"value":"1FE2","name":"GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CB 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FE2"},8163:{"value":"1FE3","name":"GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03B0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FE3"},8164:{"value":"1FE4","name":"GREEK SMALL LETTER RHO WITH PSILI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C1 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FE4"},8165:{"value":"1FE5","name":"GREEK SMALL LETTER RHO WITH DASIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C1 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FEC","lowercase_mapping":"","titlecase_mapping":"1FEC","symbol":"\u1FE5"},8166:{"value":"1FE6","name":"GREEK SMALL LETTER UPSILON WITH PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C5 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FE6"},8167:{"value":"1FE7","name":"GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CB 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FE7"},8178:{"value":"1FF2","name":"GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1F7C 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FF2"},8179:{"value":"1FF3","name":"GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C9 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1FFC","lowercase_mapping":"","titlecase_mapping":"1FFC","symbol":"\u1FF3"},8180:{"value":"1FF4","name":"GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03CE 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FF4"},8182:{"value":"1FF6","name":"GREEK SMALL LETTER OMEGA WITH PERISPOMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"03C9 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FF6"},8183:{"value":"1FF7","name":"GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"1FF6 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FF7"},8458:{"value":"210A","name":"SCRIPT SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u210A"},8462:{"value":"210E","name":"PLANCK CONSTANT","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u210E"},8463:{"value":"210F","name":"PLANCK CONSTANT OVER TWO PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0127","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PLANCK CONSTANT OVER 2 PI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u210F"},8467:{"value":"2113","name":"SCRIPT SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2113"},8495:{"value":"212F","name":"SCRIPT SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u212F"},8500:{"value":"2134","name":"SCRIPT SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2134"},8505:{"value":"2139","name":"INFORMATION SOURCE","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2139"},8508:{"value":"213C","name":"DOUBLE-STRUCK SMALL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u213C"},8509:{"value":"213D","name":"DOUBLE-STRUCK SMALL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u213D"},8518:{"value":"2146","name":"DOUBLE-STRUCK ITALIC SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2146"},8519:{"value":"2147","name":"DOUBLE-STRUCK ITALIC SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2147"},8520:{"value":"2148","name":"DOUBLE-STRUCK ITALIC SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2148"},8521:{"value":"2149","name":"DOUBLE-STRUCK ITALIC SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2149"},8526:{"value":"214E","name":"TURNED SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2132","lowercase_mapping":"","titlecase_mapping":"2132","symbol":"\u214E"},8580:{"value":"2184","name":"LATIN SMALL LETTER REVERSED C","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2183","lowercase_mapping":"","titlecase_mapping":"2183","symbol":"\u2184"},11312:{"value":"2C30","name":"GLAGOLITIC SMALL LETTER AZU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C00","lowercase_mapping":"","titlecase_mapping":"2C00","symbol":"\u2C30"},11313:{"value":"2C31","name":"GLAGOLITIC SMALL LETTER BUKY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C01","lowercase_mapping":"","titlecase_mapping":"2C01","symbol":"\u2C31"},11314:{"value":"2C32","name":"GLAGOLITIC SMALL LETTER VEDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C02","lowercase_mapping":"","titlecase_mapping":"2C02","symbol":"\u2C32"},11315:{"value":"2C33","name":"GLAGOLITIC SMALL LETTER GLAGOLI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C03","lowercase_mapping":"","titlecase_mapping":"2C03","symbol":"\u2C33"},11316:{"value":"2C34","name":"GLAGOLITIC SMALL LETTER DOBRO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C04","lowercase_mapping":"","titlecase_mapping":"2C04","symbol":"\u2C34"},11317:{"value":"2C35","name":"GLAGOLITIC SMALL LETTER YESTU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C05","lowercase_mapping":"","titlecase_mapping":"2C05","symbol":"\u2C35"},11318:{"value":"2C36","name":"GLAGOLITIC SMALL LETTER ZHIVETE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C06","lowercase_mapping":"","titlecase_mapping":"2C06","symbol":"\u2C36"},11319:{"value":"2C37","name":"GLAGOLITIC SMALL LETTER DZELO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C07","lowercase_mapping":"","titlecase_mapping":"2C07","symbol":"\u2C37"},11320:{"value":"2C38","name":"GLAGOLITIC SMALL LETTER ZEMLJA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C08","lowercase_mapping":"","titlecase_mapping":"2C08","symbol":"\u2C38"},11321:{"value":"2C39","name":"GLAGOLITIC SMALL LETTER IZHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C09","lowercase_mapping":"","titlecase_mapping":"2C09","symbol":"\u2C39"},11322:{"value":"2C3A","name":"GLAGOLITIC SMALL LETTER INITIAL IZHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C0A","lowercase_mapping":"","titlecase_mapping":"2C0A","symbol":"\u2C3A"},11323:{"value":"2C3B","name":"GLAGOLITIC SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C0B","lowercase_mapping":"","titlecase_mapping":"2C0B","symbol":"\u2C3B"},11324:{"value":"2C3C","name":"GLAGOLITIC SMALL LETTER DJERVI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C0C","lowercase_mapping":"","titlecase_mapping":"2C0C","symbol":"\u2C3C"},11325:{"value":"2C3D","name":"GLAGOLITIC SMALL LETTER KAKO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C0D","lowercase_mapping":"","titlecase_mapping":"2C0D","symbol":"\u2C3D"},11326:{"value":"2C3E","name":"GLAGOLITIC SMALL LETTER LJUDIJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C0E","lowercase_mapping":"","titlecase_mapping":"2C0E","symbol":"\u2C3E"},11327:{"value":"2C3F","name":"GLAGOLITIC SMALL LETTER MYSLITE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C0F","lowercase_mapping":"","titlecase_mapping":"2C0F","symbol":"\u2C3F"},11328:{"value":"2C40","name":"GLAGOLITIC SMALL LETTER NASHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C10","lowercase_mapping":"","titlecase_mapping":"2C10","symbol":"\u2C40"},11329:{"value":"2C41","name":"GLAGOLITIC SMALL LETTER ONU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C11","lowercase_mapping":"","titlecase_mapping":"2C11","symbol":"\u2C41"},11330:{"value":"2C42","name":"GLAGOLITIC SMALL LETTER POKOJI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C12","lowercase_mapping":"","titlecase_mapping":"2C12","symbol":"\u2C42"},11331:{"value":"2C43","name":"GLAGOLITIC SMALL LETTER RITSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C13","lowercase_mapping":"","titlecase_mapping":"2C13","symbol":"\u2C43"},11332:{"value":"2C44","name":"GLAGOLITIC SMALL LETTER SLOVO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C14","lowercase_mapping":"","titlecase_mapping":"2C14","symbol":"\u2C44"},11333:{"value":"2C45","name":"GLAGOLITIC SMALL LETTER TVRIDO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C15","lowercase_mapping":"","titlecase_mapping":"2C15","symbol":"\u2C45"},11334:{"value":"2C46","name":"GLAGOLITIC SMALL LETTER UKU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C16","lowercase_mapping":"","titlecase_mapping":"2C16","symbol":"\u2C46"},11335:{"value":"2C47","name":"GLAGOLITIC SMALL LETTER FRITU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C17","lowercase_mapping":"","titlecase_mapping":"2C17","symbol":"\u2C47"},11336:{"value":"2C48","name":"GLAGOLITIC SMALL LETTER HERU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C18","lowercase_mapping":"","titlecase_mapping":"2C18","symbol":"\u2C48"},11337:{"value":"2C49","name":"GLAGOLITIC SMALL LETTER OTU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C19","lowercase_mapping":"","titlecase_mapping":"2C19","symbol":"\u2C49"},11338:{"value":"2C4A","name":"GLAGOLITIC SMALL LETTER PE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C1A","lowercase_mapping":"","titlecase_mapping":"2C1A","symbol":"\u2C4A"},11339:{"value":"2C4B","name":"GLAGOLITIC SMALL LETTER SHTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C1B","lowercase_mapping":"","titlecase_mapping":"2C1B","symbol":"\u2C4B"},11340:{"value":"2C4C","name":"GLAGOLITIC SMALL LETTER TSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C1C","lowercase_mapping":"","titlecase_mapping":"2C1C","symbol":"\u2C4C"},11341:{"value":"2C4D","name":"GLAGOLITIC SMALL LETTER CHRIVI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C1D","lowercase_mapping":"","titlecase_mapping":"2C1D","symbol":"\u2C4D"},11342:{"value":"2C4E","name":"GLAGOLITIC SMALL LETTER SHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C1E","lowercase_mapping":"","titlecase_mapping":"2C1E","symbol":"\u2C4E"},11343:{"value":"2C4F","name":"GLAGOLITIC SMALL LETTER YERU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C1F","lowercase_mapping":"","titlecase_mapping":"2C1F","symbol":"\u2C4F"},11344:{"value":"2C50","name":"GLAGOLITIC SMALL LETTER YERI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C20","lowercase_mapping":"","titlecase_mapping":"2C20","symbol":"\u2C50"},11345:{"value":"2C51","name":"GLAGOLITIC SMALL LETTER YATI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C21","lowercase_mapping":"","titlecase_mapping":"2C21","symbol":"\u2C51"},11346:{"value":"2C52","name":"GLAGOLITIC SMALL LETTER SPIDERY HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C22","lowercase_mapping":"","titlecase_mapping":"2C22","symbol":"\u2C52"},11347:{"value":"2C53","name":"GLAGOLITIC SMALL LETTER YU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C23","lowercase_mapping":"","titlecase_mapping":"2C23","symbol":"\u2C53"},11348:{"value":"2C54","name":"GLAGOLITIC SMALL LETTER SMALL YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C24","lowercase_mapping":"","titlecase_mapping":"2C24","symbol":"\u2C54"},11349:{"value":"2C55","name":"GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C25","lowercase_mapping":"","titlecase_mapping":"2C25","symbol":"\u2C55"},11350:{"value":"2C56","name":"GLAGOLITIC SMALL LETTER YO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C26","lowercase_mapping":"","titlecase_mapping":"2C26","symbol":"\u2C56"},11351:{"value":"2C57","name":"GLAGOLITIC SMALL LETTER IOTATED SMALL YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C27","lowercase_mapping":"","titlecase_mapping":"2C27","symbol":"\u2C57"},11352:{"value":"2C58","name":"GLAGOLITIC SMALL LETTER BIG YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C28","lowercase_mapping":"","titlecase_mapping":"2C28","symbol":"\u2C58"},11353:{"value":"2C59","name":"GLAGOLITIC SMALL LETTER IOTATED BIG YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C29","lowercase_mapping":"","titlecase_mapping":"2C29","symbol":"\u2C59"},11354:{"value":"2C5A","name":"GLAGOLITIC SMALL LETTER FITA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C2A","lowercase_mapping":"","titlecase_mapping":"2C2A","symbol":"\u2C5A"},11355:{"value":"2C5B","name":"GLAGOLITIC SMALL LETTER IZHITSA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C2B","lowercase_mapping":"","titlecase_mapping":"2C2B","symbol":"\u2C5B"},11356:{"value":"2C5C","name":"GLAGOLITIC SMALL LETTER SHTAPIC","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C2C","lowercase_mapping":"","titlecase_mapping":"2C2C","symbol":"\u2C5C"},11357:{"value":"2C5D","name":"GLAGOLITIC SMALL LETTER TROKUTASTI A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C2D","lowercase_mapping":"","titlecase_mapping":"2C2D","symbol":"\u2C5D"},11358:{"value":"2C5E","name":"GLAGOLITIC SMALL LETTER LATINATE MYSLITE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C2E","lowercase_mapping":"","titlecase_mapping":"2C2E","symbol":"\u2C5E"},11359:{"value":"2C5F","name":"GLAGOLITIC SMALL LETTER CAUDATE CHRIVI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C2F","lowercase_mapping":"","titlecase_mapping":"2C2F","symbol":"\u2C5F"},11361:{"value":"2C61","name":"LATIN SMALL LETTER L WITH DOUBLE BAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C60","lowercase_mapping":"","titlecase_mapping":"2C60","symbol":"\u2C61"},11365:{"value":"2C65","name":"LATIN SMALL LETTER A WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"023A","lowercase_mapping":"","titlecase_mapping":"023A","symbol":"\u2C65"},11366:{"value":"2C66","name":"LATIN SMALL LETTER T WITH DIAGONAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"023E","lowercase_mapping":"","titlecase_mapping":"023E","symbol":"\u2C66"},11368:{"value":"2C68","name":"LATIN SMALL LETTER H WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C67","lowercase_mapping":"","titlecase_mapping":"2C67","symbol":"\u2C68"},11370:{"value":"2C6A","name":"LATIN SMALL LETTER K WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C69","lowercase_mapping":"","titlecase_mapping":"2C69","symbol":"\u2C6A"},11372:{"value":"2C6C","name":"LATIN SMALL LETTER Z WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C6B","lowercase_mapping":"","titlecase_mapping":"2C6B","symbol":"\u2C6C"},11377:{"value":"2C71","name":"LATIN SMALL LETTER V WITH RIGHT HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C71"},11379:{"value":"2C73","name":"LATIN SMALL LETTER W WITH HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C72","lowercase_mapping":"","titlecase_mapping":"2C72","symbol":"\u2C73"},11380:{"value":"2C74","name":"LATIN SMALL LETTER V WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C74"},11382:{"value":"2C76","name":"LATIN SMALL LETTER HALF H","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C75","lowercase_mapping":"","titlecase_mapping":"2C75","symbol":"\u2C76"},11383:{"value":"2C77","name":"LATIN SMALL LETTER TAILLESS PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C77"},11384:{"value":"2C78","name":"LATIN SMALL LETTER E WITH NOTCH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C78"},11385:{"value":"2C79","name":"LATIN SMALL LETTER TURNED R WITH TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C79"},11386:{"value":"2C7A","name":"LATIN SMALL LETTER O WITH LOW RING INSIDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C7A"},11387:{"value":"2C7B","name":"LATIN LETTER SMALL CAPITAL TURNED E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C7B"},11393:{"value":"2C81","name":"COPTIC SMALL LETTER ALFA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C80","lowercase_mapping":"","titlecase_mapping":"2C80","symbol":"\u2C81"},11395:{"value":"2C83","name":"COPTIC SMALL LETTER VIDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C82","lowercase_mapping":"","titlecase_mapping":"2C82","symbol":"\u2C83"},11397:{"value":"2C85","name":"COPTIC SMALL LETTER GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C84","lowercase_mapping":"","titlecase_mapping":"2C84","symbol":"\u2C85"},11399:{"value":"2C87","name":"COPTIC SMALL LETTER DALDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C86","lowercase_mapping":"","titlecase_mapping":"2C86","symbol":"\u2C87"},11401:{"value":"2C89","name":"COPTIC SMALL LETTER EIE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C88","lowercase_mapping":"","titlecase_mapping":"2C88","symbol":"\u2C89"},11403:{"value":"2C8B","name":"COPTIC SMALL LETTER SOU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C8A","lowercase_mapping":"","titlecase_mapping":"2C8A","symbol":"\u2C8B"},11405:{"value":"2C8D","name":"COPTIC SMALL LETTER ZATA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C8C","lowercase_mapping":"","titlecase_mapping":"2C8C","symbol":"\u2C8D"},11407:{"value":"2C8F","name":"COPTIC SMALL LETTER HATE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C8E","lowercase_mapping":"","titlecase_mapping":"2C8E","symbol":"\u2C8F"},11409:{"value":"2C91","name":"COPTIC SMALL LETTER THETHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C90","lowercase_mapping":"","titlecase_mapping":"2C90","symbol":"\u2C91"},11411:{"value":"2C93","name":"COPTIC SMALL LETTER IAUDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C92","lowercase_mapping":"","titlecase_mapping":"2C92","symbol":"\u2C93"},11413:{"value":"2C95","name":"COPTIC SMALL LETTER KAPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C94","lowercase_mapping":"","titlecase_mapping":"2C94","symbol":"\u2C95"},11415:{"value":"2C97","name":"COPTIC SMALL LETTER LAULA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C96","lowercase_mapping":"","titlecase_mapping":"2C96","symbol":"\u2C97"},11417:{"value":"2C99","name":"COPTIC SMALL LETTER MI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C98","lowercase_mapping":"","titlecase_mapping":"2C98","symbol":"\u2C99"},11419:{"value":"2C9B","name":"COPTIC SMALL LETTER NI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C9A","lowercase_mapping":"","titlecase_mapping":"2C9A","symbol":"\u2C9B"},11421:{"value":"2C9D","name":"COPTIC SMALL LETTER KSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C9C","lowercase_mapping":"","titlecase_mapping":"2C9C","symbol":"\u2C9D"},11423:{"value":"2C9F","name":"COPTIC SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2C9E","lowercase_mapping":"","titlecase_mapping":"2C9E","symbol":"\u2C9F"},11425:{"value":"2CA1","name":"COPTIC SMALL LETTER PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CA0","lowercase_mapping":"","titlecase_mapping":"2CA0","symbol":"\u2CA1"},11427:{"value":"2CA3","name":"COPTIC SMALL LETTER RO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CA2","lowercase_mapping":"","titlecase_mapping":"2CA2","symbol":"\u2CA3"},11429:{"value":"2CA5","name":"COPTIC SMALL LETTER SIMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CA4","lowercase_mapping":"","titlecase_mapping":"2CA4","symbol":"\u2CA5"},11431:{"value":"2CA7","name":"COPTIC SMALL LETTER TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CA6","lowercase_mapping":"","titlecase_mapping":"2CA6","symbol":"\u2CA7"},11433:{"value":"2CA9","name":"COPTIC SMALL LETTER UA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CA8","lowercase_mapping":"","titlecase_mapping":"2CA8","symbol":"\u2CA9"},11435:{"value":"2CAB","name":"COPTIC SMALL LETTER FI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CAA","lowercase_mapping":"","titlecase_mapping":"2CAA","symbol":"\u2CAB"},11437:{"value":"2CAD","name":"COPTIC SMALL LETTER KHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CAC","lowercase_mapping":"","titlecase_mapping":"2CAC","symbol":"\u2CAD"},11439:{"value":"2CAF","name":"COPTIC SMALL LETTER PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CAE","lowercase_mapping":"","titlecase_mapping":"2CAE","symbol":"\u2CAF"},11441:{"value":"2CB1","name":"COPTIC SMALL LETTER OOU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CB0","lowercase_mapping":"","titlecase_mapping":"2CB0","symbol":"\u2CB1"},11443:{"value":"2CB3","name":"COPTIC SMALL LETTER DIALECT-P ALEF","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CB2","lowercase_mapping":"","titlecase_mapping":"2CB2","symbol":"\u2CB3"},11445:{"value":"2CB5","name":"COPTIC SMALL LETTER OLD COPTIC AIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CB4","lowercase_mapping":"","titlecase_mapping":"2CB4","symbol":"\u2CB5"},11447:{"value":"2CB7","name":"COPTIC SMALL LETTER CRYPTOGRAMMIC EIE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CB6","lowercase_mapping":"","titlecase_mapping":"2CB6","symbol":"\u2CB7"},11449:{"value":"2CB9","name":"COPTIC SMALL LETTER DIALECT-P KAPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CB8","lowercase_mapping":"","titlecase_mapping":"2CB8","symbol":"\u2CB9"},11451:{"value":"2CBB","name":"COPTIC SMALL LETTER DIALECT-P NI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CBA","lowercase_mapping":"","titlecase_mapping":"2CBA","symbol":"\u2CBB"},11453:{"value":"2CBD","name":"COPTIC SMALL LETTER CRYPTOGRAMMIC NI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CBC","lowercase_mapping":"","titlecase_mapping":"2CBC","symbol":"\u2CBD"},11455:{"value":"2CBF","name":"COPTIC SMALL LETTER OLD COPTIC OOU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CBE","lowercase_mapping":"","titlecase_mapping":"2CBE","symbol":"\u2CBF"},11457:{"value":"2CC1","name":"COPTIC SMALL LETTER SAMPI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CC0","lowercase_mapping":"","titlecase_mapping":"2CC0","symbol":"\u2CC1"},11459:{"value":"2CC3","name":"COPTIC SMALL LETTER CROSSED SHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CC2","lowercase_mapping":"","titlecase_mapping":"2CC2","symbol":"\u2CC3"},11461:{"value":"2CC5","name":"COPTIC SMALL LETTER OLD COPTIC SHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CC4","lowercase_mapping":"","titlecase_mapping":"2CC4","symbol":"\u2CC5"},11463:{"value":"2CC7","name":"COPTIC SMALL LETTER OLD COPTIC ESH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CC6","lowercase_mapping":"","titlecase_mapping":"2CC6","symbol":"\u2CC7"},11465:{"value":"2CC9","name":"COPTIC SMALL LETTER AKHMIMIC KHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CC8","lowercase_mapping":"","titlecase_mapping":"2CC8","symbol":"\u2CC9"},11467:{"value":"2CCB","name":"COPTIC SMALL LETTER DIALECT-P HORI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CCA","lowercase_mapping":"","titlecase_mapping":"2CCA","symbol":"\u2CCB"},11469:{"value":"2CCD","name":"COPTIC SMALL LETTER OLD COPTIC HORI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CCC","lowercase_mapping":"","titlecase_mapping":"2CCC","symbol":"\u2CCD"},11471:{"value":"2CCF","name":"COPTIC SMALL LETTER OLD COPTIC HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CCE","lowercase_mapping":"","titlecase_mapping":"2CCE","symbol":"\u2CCF"},11473:{"value":"2CD1","name":"COPTIC SMALL LETTER L-SHAPED HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CD0","lowercase_mapping":"","titlecase_mapping":"2CD0","symbol":"\u2CD1"},11475:{"value":"2CD3","name":"COPTIC SMALL LETTER OLD COPTIC HEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CD2","lowercase_mapping":"","titlecase_mapping":"2CD2","symbol":"\u2CD3"},11477:{"value":"2CD5","name":"COPTIC SMALL LETTER OLD COPTIC HAT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CD4","lowercase_mapping":"","titlecase_mapping":"2CD4","symbol":"\u2CD5"},11479:{"value":"2CD7","name":"COPTIC SMALL LETTER OLD COPTIC GANGIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CD6","lowercase_mapping":"","titlecase_mapping":"2CD6","symbol":"\u2CD7"},11481:{"value":"2CD9","name":"COPTIC SMALL LETTER OLD COPTIC DJA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CD8","lowercase_mapping":"","titlecase_mapping":"2CD8","symbol":"\u2CD9"},11483:{"value":"2CDB","name":"COPTIC SMALL LETTER OLD COPTIC SHIMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CDA","lowercase_mapping":"","titlecase_mapping":"2CDA","symbol":"\u2CDB"},11485:{"value":"2CDD","name":"COPTIC SMALL LETTER OLD NUBIAN SHIMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CDC","lowercase_mapping":"","titlecase_mapping":"2CDC","symbol":"\u2CDD"},11487:{"value":"2CDF","name":"COPTIC SMALL LETTER OLD NUBIAN NGI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CDE","lowercase_mapping":"","titlecase_mapping":"2CDE","symbol":"\u2CDF"},11489:{"value":"2CE1","name":"COPTIC SMALL LETTER OLD NUBIAN NYI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CE0","lowercase_mapping":"","titlecase_mapping":"2CE0","symbol":"\u2CE1"},11491:{"value":"2CE3","name":"COPTIC SMALL LETTER OLD NUBIAN WAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CE2","lowercase_mapping":"","titlecase_mapping":"2CE2","symbol":"\u2CE3"},11492:{"value":"2CE4","name":"COPTIC SYMBOL KAI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CE4"},11500:{"value":"2CEC","name":"COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CEB","lowercase_mapping":"","titlecase_mapping":"2CEB","symbol":"\u2CEC"},11502:{"value":"2CEE","name":"COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CED","lowercase_mapping":"","titlecase_mapping":"2CED","symbol":"\u2CEE"},11507:{"value":"2CF3","name":"COPTIC SMALL LETTER BOHAIRIC KHEI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2CF2","lowercase_mapping":"","titlecase_mapping":"2CF2","symbol":"\u2CF3"},11520:{"value":"2D00","name":"GEORGIAN SMALL LETTER AN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A0","lowercase_mapping":"","titlecase_mapping":"10A0","symbol":"\u2D00"},11521:{"value":"2D01","name":"GEORGIAN SMALL LETTER BAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A1","lowercase_mapping":"","titlecase_mapping":"10A1","symbol":"\u2D01"},11522:{"value":"2D02","name":"GEORGIAN SMALL LETTER GAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A2","lowercase_mapping":"","titlecase_mapping":"10A2","symbol":"\u2D02"},11523:{"value":"2D03","name":"GEORGIAN SMALL LETTER DON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A3","lowercase_mapping":"","titlecase_mapping":"10A3","symbol":"\u2D03"},11524:{"value":"2D04","name":"GEORGIAN SMALL LETTER EN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A4","lowercase_mapping":"","titlecase_mapping":"10A4","symbol":"\u2D04"},11525:{"value":"2D05","name":"GEORGIAN SMALL LETTER VIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A5","lowercase_mapping":"","titlecase_mapping":"10A5","symbol":"\u2D05"},11526:{"value":"2D06","name":"GEORGIAN SMALL LETTER ZEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A6","lowercase_mapping":"","titlecase_mapping":"10A6","symbol":"\u2D06"},11527:{"value":"2D07","name":"GEORGIAN SMALL LETTER TAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A7","lowercase_mapping":"","titlecase_mapping":"10A7","symbol":"\u2D07"},11528:{"value":"2D08","name":"GEORGIAN SMALL LETTER IN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A8","lowercase_mapping":"","titlecase_mapping":"10A8","symbol":"\u2D08"},11529:{"value":"2D09","name":"GEORGIAN SMALL LETTER KAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10A9","lowercase_mapping":"","titlecase_mapping":"10A9","symbol":"\u2D09"},11530:{"value":"2D0A","name":"GEORGIAN SMALL LETTER LAS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10AA","lowercase_mapping":"","titlecase_mapping":"10AA","symbol":"\u2D0A"},11531:{"value":"2D0B","name":"GEORGIAN SMALL LETTER MAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10AB","lowercase_mapping":"","titlecase_mapping":"10AB","symbol":"\u2D0B"},11532:{"value":"2D0C","name":"GEORGIAN SMALL LETTER NAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10AC","lowercase_mapping":"","titlecase_mapping":"10AC","symbol":"\u2D0C"},11533:{"value":"2D0D","name":"GEORGIAN SMALL LETTER ON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10AD","lowercase_mapping":"","titlecase_mapping":"10AD","symbol":"\u2D0D"},11534:{"value":"2D0E","name":"GEORGIAN SMALL LETTER PAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10AE","lowercase_mapping":"","titlecase_mapping":"10AE","symbol":"\u2D0E"},11535:{"value":"2D0F","name":"GEORGIAN SMALL LETTER ZHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10AF","lowercase_mapping":"","titlecase_mapping":"10AF","symbol":"\u2D0F"},11536:{"value":"2D10","name":"GEORGIAN SMALL LETTER RAE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B0","lowercase_mapping":"","titlecase_mapping":"10B0","symbol":"\u2D10"},11537:{"value":"2D11","name":"GEORGIAN SMALL LETTER SAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B1","lowercase_mapping":"","titlecase_mapping":"10B1","symbol":"\u2D11"},11538:{"value":"2D12","name":"GEORGIAN SMALL LETTER TAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B2","lowercase_mapping":"","titlecase_mapping":"10B2","symbol":"\u2D12"},11539:{"value":"2D13","name":"GEORGIAN SMALL LETTER UN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B3","lowercase_mapping":"","titlecase_mapping":"10B3","symbol":"\u2D13"},11540:{"value":"2D14","name":"GEORGIAN SMALL LETTER PHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B4","lowercase_mapping":"","titlecase_mapping":"10B4","symbol":"\u2D14"},11541:{"value":"2D15","name":"GEORGIAN SMALL LETTER KHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B5","lowercase_mapping":"","titlecase_mapping":"10B5","symbol":"\u2D15"},11542:{"value":"2D16","name":"GEORGIAN SMALL LETTER GHAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B6","lowercase_mapping":"","titlecase_mapping":"10B6","symbol":"\u2D16"},11543:{"value":"2D17","name":"GEORGIAN SMALL LETTER QAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B7","lowercase_mapping":"","titlecase_mapping":"10B7","symbol":"\u2D17"},11544:{"value":"2D18","name":"GEORGIAN SMALL LETTER SHIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B8","lowercase_mapping":"","titlecase_mapping":"10B8","symbol":"\u2D18"},11545:{"value":"2D19","name":"GEORGIAN SMALL LETTER CHIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10B9","lowercase_mapping":"","titlecase_mapping":"10B9","symbol":"\u2D19"},11546:{"value":"2D1A","name":"GEORGIAN SMALL LETTER CAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10BA","lowercase_mapping":"","titlecase_mapping":"10BA","symbol":"\u2D1A"},11547:{"value":"2D1B","name":"GEORGIAN SMALL LETTER JIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10BB","lowercase_mapping":"","titlecase_mapping":"10BB","symbol":"\u2D1B"},11548:{"value":"2D1C","name":"GEORGIAN SMALL LETTER CIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10BC","lowercase_mapping":"","titlecase_mapping":"10BC","symbol":"\u2D1C"},11549:{"value":"2D1D","name":"GEORGIAN SMALL LETTER CHAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10BD","lowercase_mapping":"","titlecase_mapping":"10BD","symbol":"\u2D1D"},11550:{"value":"2D1E","name":"GEORGIAN SMALL LETTER XAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10BE","lowercase_mapping":"","titlecase_mapping":"10BE","symbol":"\u2D1E"},11551:{"value":"2D1F","name":"GEORGIAN SMALL LETTER JHAN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10BF","lowercase_mapping":"","titlecase_mapping":"10BF","symbol":"\u2D1F"},11552:{"value":"2D20","name":"GEORGIAN SMALL LETTER HAE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C0","lowercase_mapping":"","titlecase_mapping":"10C0","symbol":"\u2D20"},11553:{"value":"2D21","name":"GEORGIAN SMALL LETTER HE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C1","lowercase_mapping":"","titlecase_mapping":"10C1","symbol":"\u2D21"},11554:{"value":"2D22","name":"GEORGIAN SMALL LETTER HIE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C2","lowercase_mapping":"","titlecase_mapping":"10C2","symbol":"\u2D22"},11555:{"value":"2D23","name":"GEORGIAN SMALL LETTER WE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C3","lowercase_mapping":"","titlecase_mapping":"10C3","symbol":"\u2D23"},11556:{"value":"2D24","name":"GEORGIAN SMALL LETTER HAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C4","lowercase_mapping":"","titlecase_mapping":"10C4","symbol":"\u2D24"},11557:{"value":"2D25","name":"GEORGIAN SMALL LETTER HOE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C5","lowercase_mapping":"","titlecase_mapping":"10C5","symbol":"\u2D25"},11559:{"value":"2D27","name":"GEORGIAN SMALL LETTER YN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C7","lowercase_mapping":"","titlecase_mapping":"10C7","symbol":"\u2D27"},11565:{"value":"2D2D","name":"GEORGIAN SMALL LETTER AEN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CD","lowercase_mapping":"","titlecase_mapping":"10CD","symbol":"\u2D2D"},42561:{"value":"A641","name":"CYRILLIC SMALL LETTER ZEMLYA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A640","lowercase_mapping":"","titlecase_mapping":"A640","symbol":"\uA641"},42563:{"value":"A643","name":"CYRILLIC SMALL LETTER DZELO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A642","lowercase_mapping":"","titlecase_mapping":"A642","symbol":"\uA643"},42565:{"value":"A645","name":"CYRILLIC SMALL LETTER REVERSED DZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A644","lowercase_mapping":"","titlecase_mapping":"A644","symbol":"\uA645"},42567:{"value":"A647","name":"CYRILLIC SMALL LETTER IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A646","lowercase_mapping":"","titlecase_mapping":"A646","symbol":"\uA647"},42569:{"value":"A649","name":"CYRILLIC SMALL LETTER DJERV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A648","lowercase_mapping":"","titlecase_mapping":"A648","symbol":"\uA649"},42571:{"value":"A64B","name":"CYRILLIC SMALL LETTER MONOGRAPH UK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A64A","lowercase_mapping":"","titlecase_mapping":"A64A","symbol":"\uA64B"},42573:{"value":"A64D","name":"CYRILLIC SMALL LETTER BROAD OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A64C","lowercase_mapping":"","titlecase_mapping":"A64C","symbol":"\uA64D"},42575:{"value":"A64F","name":"CYRILLIC SMALL LETTER NEUTRAL YER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A64E","lowercase_mapping":"","titlecase_mapping":"A64E","symbol":"\uA64F"},42577:{"value":"A651","name":"CYRILLIC SMALL LETTER YERU WITH BACK YER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A650","lowercase_mapping":"","titlecase_mapping":"A650","symbol":"\uA651"},42579:{"value":"A653","name":"CYRILLIC SMALL LETTER IOTIFIED YAT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A652","lowercase_mapping":"","titlecase_mapping":"A652","symbol":"\uA653"},42581:{"value":"A655","name":"CYRILLIC SMALL LETTER REVERSED YU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A654","lowercase_mapping":"","titlecase_mapping":"A654","symbol":"\uA655"},42583:{"value":"A657","name":"CYRILLIC SMALL LETTER IOTIFIED A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A656","lowercase_mapping":"","titlecase_mapping":"A656","symbol":"\uA657"},42585:{"value":"A659","name":"CYRILLIC SMALL LETTER CLOSED LITTLE YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A658","lowercase_mapping":"","titlecase_mapping":"A658","symbol":"\uA659"},42587:{"value":"A65B","name":"CYRILLIC SMALL LETTER BLENDED YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A65A","lowercase_mapping":"","titlecase_mapping":"A65A","symbol":"\uA65B"},42589:{"value":"A65D","name":"CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A65C","lowercase_mapping":"","titlecase_mapping":"A65C","symbol":"\uA65D"},42591:{"value":"A65F","name":"CYRILLIC SMALL LETTER YN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A65E","lowercase_mapping":"","titlecase_mapping":"A65E","symbol":"\uA65F"},42593:{"value":"A661","name":"CYRILLIC SMALL LETTER REVERSED TSE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A660","lowercase_mapping":"","titlecase_mapping":"A660","symbol":"\uA661"},42595:{"value":"A663","name":"CYRILLIC SMALL LETTER SOFT DE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A662","lowercase_mapping":"","titlecase_mapping":"A662","symbol":"\uA663"},42597:{"value":"A665","name":"CYRILLIC SMALL LETTER SOFT EL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A664","lowercase_mapping":"","titlecase_mapping":"A664","symbol":"\uA665"},42599:{"value":"A667","name":"CYRILLIC SMALL LETTER SOFT EM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A666","lowercase_mapping":"","titlecase_mapping":"A666","symbol":"\uA667"},42601:{"value":"A669","name":"CYRILLIC SMALL LETTER MONOCULAR O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A668","lowercase_mapping":"","titlecase_mapping":"A668","symbol":"\uA669"},42603:{"value":"A66B","name":"CYRILLIC SMALL LETTER BINOCULAR O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A66A","lowercase_mapping":"","titlecase_mapping":"A66A","symbol":"\uA66B"},42605:{"value":"A66D","name":"CYRILLIC SMALL LETTER DOUBLE MONOCULAR O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A66C","lowercase_mapping":"","titlecase_mapping":"A66C","symbol":"\uA66D"},42625:{"value":"A681","name":"CYRILLIC SMALL LETTER DWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A680","lowercase_mapping":"","titlecase_mapping":"A680","symbol":"\uA681"},42627:{"value":"A683","name":"CYRILLIC SMALL LETTER DZWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A682","lowercase_mapping":"","titlecase_mapping":"A682","symbol":"\uA683"},42629:{"value":"A685","name":"CYRILLIC SMALL LETTER ZHWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A684","lowercase_mapping":"","titlecase_mapping":"A684","symbol":"\uA685"},42631:{"value":"A687","name":"CYRILLIC SMALL LETTER CCHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A686","lowercase_mapping":"","titlecase_mapping":"A686","symbol":"\uA687"},42633:{"value":"A689","name":"CYRILLIC SMALL LETTER DZZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A688","lowercase_mapping":"","titlecase_mapping":"A688","symbol":"\uA689"},42635:{"value":"A68B","name":"CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A68A","lowercase_mapping":"","titlecase_mapping":"A68A","symbol":"\uA68B"},42637:{"value":"A68D","name":"CYRILLIC SMALL LETTER TWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A68C","lowercase_mapping":"","titlecase_mapping":"A68C","symbol":"\uA68D"},42639:{"value":"A68F","name":"CYRILLIC SMALL LETTER TSWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A68E","lowercase_mapping":"","titlecase_mapping":"A68E","symbol":"\uA68F"},42641:{"value":"A691","name":"CYRILLIC SMALL LETTER TSSE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A690","lowercase_mapping":"","titlecase_mapping":"A690","symbol":"\uA691"},42643:{"value":"A693","name":"CYRILLIC SMALL LETTER TCHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A692","lowercase_mapping":"","titlecase_mapping":"A692","symbol":"\uA693"},42645:{"value":"A695","name":"CYRILLIC SMALL LETTER HWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A694","lowercase_mapping":"","titlecase_mapping":"A694","symbol":"\uA695"},42647:{"value":"A697","name":"CYRILLIC SMALL LETTER SHWE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A696","lowercase_mapping":"","titlecase_mapping":"A696","symbol":"\uA697"},42649:{"value":"A699","name":"CYRILLIC SMALL LETTER DOUBLE O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A698","lowercase_mapping":"","titlecase_mapping":"A698","symbol":"\uA699"},42651:{"value":"A69B","name":"CYRILLIC SMALL LETTER CROSSED O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A69A","lowercase_mapping":"","titlecase_mapping":"A69A","symbol":"\uA69B"},42787:{"value":"A723","name":"LATIN SMALL LETTER EGYPTOLOGICAL ALEF","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A722","lowercase_mapping":"","titlecase_mapping":"A722","symbol":"\uA723"},42789:{"value":"A725","name":"LATIN SMALL LETTER EGYPTOLOGICAL AIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A724","lowercase_mapping":"","titlecase_mapping":"A724","symbol":"\uA725"},42791:{"value":"A727","name":"LATIN SMALL LETTER HENG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A726","lowercase_mapping":"","titlecase_mapping":"A726","symbol":"\uA727"},42793:{"value":"A729","name":"LATIN SMALL LETTER TZ","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A728","lowercase_mapping":"","titlecase_mapping":"A728","symbol":"\uA729"},42795:{"value":"A72B","name":"LATIN SMALL LETTER TRESILLO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A72A","lowercase_mapping":"","titlecase_mapping":"A72A","symbol":"\uA72B"},42797:{"value":"A72D","name":"LATIN SMALL LETTER CUATRILLO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A72C","lowercase_mapping":"","titlecase_mapping":"A72C","symbol":"\uA72D"},42799:{"value":"A72F","name":"LATIN SMALL LETTER CUATRILLO WITH COMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A72E","lowercase_mapping":"","titlecase_mapping":"A72E","symbol":"\uA72F"},42800:{"value":"A730","name":"LATIN LETTER SMALL CAPITAL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA730"},42801:{"value":"A731","name":"LATIN LETTER SMALL CAPITAL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA731"},42803:{"value":"A733","name":"LATIN SMALL LETTER AA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A732","lowercase_mapping":"","titlecase_mapping":"A732","symbol":"\uA733"},42805:{"value":"A735","name":"LATIN SMALL LETTER AO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A734","lowercase_mapping":"","titlecase_mapping":"A734","symbol":"\uA735"},42807:{"value":"A737","name":"LATIN SMALL LETTER AU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A736","lowercase_mapping":"","titlecase_mapping":"A736","symbol":"\uA737"},42809:{"value":"A739","name":"LATIN SMALL LETTER AV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A738","lowercase_mapping":"","titlecase_mapping":"A738","symbol":"\uA739"},42811:{"value":"A73B","name":"LATIN SMALL LETTER AV WITH HORIZONTAL BAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A73A","lowercase_mapping":"","titlecase_mapping":"A73A","symbol":"\uA73B"},42813:{"value":"A73D","name":"LATIN SMALL LETTER AY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A73C","lowercase_mapping":"","titlecase_mapping":"A73C","symbol":"\uA73D"},42815:{"value":"A73F","name":"LATIN SMALL LETTER REVERSED C WITH DOT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A73E","lowercase_mapping":"","titlecase_mapping":"A73E","symbol":"\uA73F"},42817:{"value":"A741","name":"LATIN SMALL LETTER K WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A740","lowercase_mapping":"","titlecase_mapping":"A740","symbol":"\uA741"},42819:{"value":"A743","name":"LATIN SMALL LETTER K WITH DIAGONAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A742","lowercase_mapping":"","titlecase_mapping":"A742","symbol":"\uA743"},42821:{"value":"A745","name":"LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A744","lowercase_mapping":"","titlecase_mapping":"A744","symbol":"\uA745"},42823:{"value":"A747","name":"LATIN SMALL LETTER BROKEN L","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A746","lowercase_mapping":"","titlecase_mapping":"A746","symbol":"\uA747"},42825:{"value":"A749","name":"LATIN SMALL LETTER L WITH HIGH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A748","lowercase_mapping":"","titlecase_mapping":"A748","symbol":"\uA749"},42827:{"value":"A74B","name":"LATIN SMALL LETTER O WITH LONG STROKE OVERLAY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A74A","lowercase_mapping":"","titlecase_mapping":"A74A","symbol":"\uA74B"},42829:{"value":"A74D","name":"LATIN SMALL LETTER O WITH LOOP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A74C","lowercase_mapping":"","titlecase_mapping":"A74C","symbol":"\uA74D"},42831:{"value":"A74F","name":"LATIN SMALL LETTER OO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A74E","lowercase_mapping":"","titlecase_mapping":"A74E","symbol":"\uA74F"},42833:{"value":"A751","name":"LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A750","lowercase_mapping":"","titlecase_mapping":"A750","symbol":"\uA751"},42835:{"value":"A753","name":"LATIN SMALL LETTER P WITH FLOURISH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A752","lowercase_mapping":"","titlecase_mapping":"A752","symbol":"\uA753"},42837:{"value":"A755","name":"LATIN SMALL LETTER P WITH SQUIRREL TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A754","lowercase_mapping":"","titlecase_mapping":"A754","symbol":"\uA755"},42839:{"value":"A757","name":"LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A756","lowercase_mapping":"","titlecase_mapping":"A756","symbol":"\uA757"},42841:{"value":"A759","name":"LATIN SMALL LETTER Q WITH DIAGONAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A758","lowercase_mapping":"","titlecase_mapping":"A758","symbol":"\uA759"},42843:{"value":"A75B","name":"LATIN SMALL LETTER R ROTUNDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A75A","lowercase_mapping":"","titlecase_mapping":"A75A","symbol":"\uA75B"},42845:{"value":"A75D","name":"LATIN SMALL LETTER RUM ROTUNDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A75C","lowercase_mapping":"","titlecase_mapping":"A75C","symbol":"\uA75D"},42847:{"value":"A75F","name":"LATIN SMALL LETTER V WITH DIAGONAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A75E","lowercase_mapping":"","titlecase_mapping":"A75E","symbol":"\uA75F"},42849:{"value":"A761","name":"LATIN SMALL LETTER VY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A760","lowercase_mapping":"","titlecase_mapping":"A760","symbol":"\uA761"},42851:{"value":"A763","name":"LATIN SMALL LETTER VISIGOTHIC Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A762","lowercase_mapping":"","titlecase_mapping":"A762","symbol":"\uA763"},42853:{"value":"A765","name":"LATIN SMALL LETTER THORN WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A764","lowercase_mapping":"","titlecase_mapping":"A764","symbol":"\uA765"},42855:{"value":"A767","name":"LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A766","lowercase_mapping":"","titlecase_mapping":"A766","symbol":"\uA767"},42857:{"value":"A769","name":"LATIN SMALL LETTER VEND","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A768","lowercase_mapping":"","titlecase_mapping":"A768","symbol":"\uA769"},42859:{"value":"A76B","name":"LATIN SMALL LETTER ET","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A76A","lowercase_mapping":"","titlecase_mapping":"A76A","symbol":"\uA76B"},42861:{"value":"A76D","name":"LATIN SMALL LETTER IS","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A76C","lowercase_mapping":"","titlecase_mapping":"A76C","symbol":"\uA76D"},42863:{"value":"A76F","name":"LATIN SMALL LETTER CON","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A76E","lowercase_mapping":"","titlecase_mapping":"A76E","symbol":"\uA76F"},42865:{"value":"A771","name":"LATIN SMALL LETTER DUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA771"},42866:{"value":"A772","name":"LATIN SMALL LETTER LUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA772"},42867:{"value":"A773","name":"LATIN SMALL LETTER MUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA773"},42868:{"value":"A774","name":"LATIN SMALL LETTER NUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA774"},42869:{"value":"A775","name":"LATIN SMALL LETTER RUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA775"},42870:{"value":"A776","name":"LATIN LETTER SMALL CAPITAL RUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA776"},42871:{"value":"A777","name":"LATIN SMALL LETTER TUM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA777"},42872:{"value":"A778","name":"LATIN SMALL LETTER UM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA778"},42874:{"value":"A77A","name":"LATIN SMALL LETTER INSULAR D","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A779","lowercase_mapping":"","titlecase_mapping":"A779","symbol":"\uA77A"},42876:{"value":"A77C","name":"LATIN SMALL LETTER INSULAR F","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A77B","lowercase_mapping":"","titlecase_mapping":"A77B","symbol":"\uA77C"},42879:{"value":"A77F","name":"LATIN SMALL LETTER TURNED INSULAR G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A77E","lowercase_mapping":"","titlecase_mapping":"A77E","symbol":"\uA77F"},42881:{"value":"A781","name":"LATIN SMALL LETTER TURNED L","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A780","lowercase_mapping":"","titlecase_mapping":"A780","symbol":"\uA781"},42883:{"value":"A783","name":"LATIN SMALL LETTER INSULAR R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A782","lowercase_mapping":"","titlecase_mapping":"A782","symbol":"\uA783"},42885:{"value":"A785","name":"LATIN SMALL LETTER INSULAR S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A784","lowercase_mapping":"","titlecase_mapping":"A784","symbol":"\uA785"},42887:{"value":"A787","name":"LATIN SMALL LETTER INSULAR T","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A786","lowercase_mapping":"","titlecase_mapping":"A786","symbol":"\uA787"},42892:{"value":"A78C","name":"LATIN SMALL LETTER SALTILLO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A78B","lowercase_mapping":"","titlecase_mapping":"A78B","symbol":"\uA78C"},42894:{"value":"A78E","name":"LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA78E"},42897:{"value":"A791","name":"LATIN SMALL LETTER N WITH DESCENDER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A790","lowercase_mapping":"","titlecase_mapping":"A790","symbol":"\uA791"},42899:{"value":"A793","name":"LATIN SMALL LETTER C WITH BAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A792","lowercase_mapping":"","titlecase_mapping":"A792","symbol":"\uA793"},42900:{"value":"A794","name":"LATIN SMALL LETTER C WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7C4","lowercase_mapping":"","titlecase_mapping":"A7C4","symbol":"\uA794"},42901:{"value":"A795","name":"LATIN SMALL LETTER H WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA795"},42903:{"value":"A797","name":"LATIN SMALL LETTER B WITH FLOURISH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A796","lowercase_mapping":"","titlecase_mapping":"A796","symbol":"\uA797"},42905:{"value":"A799","name":"LATIN SMALL LETTER F WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A798","lowercase_mapping":"","titlecase_mapping":"A798","symbol":"\uA799"},42907:{"value":"A79B","name":"LATIN SMALL LETTER VOLAPUK AE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A79A","lowercase_mapping":"","titlecase_mapping":"A79A","symbol":"\uA79B"},42909:{"value":"A79D","name":"LATIN SMALL LETTER VOLAPUK OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A79C","lowercase_mapping":"","titlecase_mapping":"A79C","symbol":"\uA79D"},42911:{"value":"A79F","name":"LATIN SMALL LETTER VOLAPUK UE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A79E","lowercase_mapping":"","titlecase_mapping":"A79E","symbol":"\uA79F"},42913:{"value":"A7A1","name":"LATIN SMALL LETTER G WITH OBLIQUE STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7A0","lowercase_mapping":"","titlecase_mapping":"A7A0","symbol":"\uA7A1"},42915:{"value":"A7A3","name":"LATIN SMALL LETTER K WITH OBLIQUE STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7A2","lowercase_mapping":"","titlecase_mapping":"A7A2","symbol":"\uA7A3"},42917:{"value":"A7A5","name":"LATIN SMALL LETTER N WITH OBLIQUE STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7A4","lowercase_mapping":"","titlecase_mapping":"A7A4","symbol":"\uA7A5"},42919:{"value":"A7A7","name":"LATIN SMALL LETTER R WITH OBLIQUE STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7A6","lowercase_mapping":"","titlecase_mapping":"A7A6","symbol":"\uA7A7"},42921:{"value":"A7A9","name":"LATIN SMALL LETTER S WITH OBLIQUE STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7A8","lowercase_mapping":"","titlecase_mapping":"A7A8","symbol":"\uA7A9"},42927:{"value":"A7AF","name":"LATIN LETTER SMALL CAPITAL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7AF"},42933:{"value":"A7B5","name":"LATIN SMALL LETTER BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7B4","lowercase_mapping":"","titlecase_mapping":"A7B4","symbol":"\uA7B5"},42935:{"value":"A7B7","name":"LATIN SMALL LETTER OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7B6","lowercase_mapping":"","titlecase_mapping":"A7B6","symbol":"\uA7B7"},42937:{"value":"A7B9","name":"LATIN SMALL LETTER U WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7B8","lowercase_mapping":"","titlecase_mapping":"A7B8","symbol":"\uA7B9"},42939:{"value":"A7BB","name":"LATIN SMALL LETTER GLOTTAL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7BA","lowercase_mapping":"","titlecase_mapping":"A7BA","symbol":"\uA7BB"},42941:{"value":"A7BD","name":"LATIN SMALL LETTER GLOTTAL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7BC","lowercase_mapping":"","titlecase_mapping":"A7BC","symbol":"\uA7BD"},42943:{"value":"A7BF","name":"LATIN SMALL LETTER GLOTTAL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7BE","lowercase_mapping":"","titlecase_mapping":"A7BE","symbol":"\uA7BF"},42945:{"value":"A7C1","name":"LATIN SMALL LETTER OLD POLISH O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7C0","lowercase_mapping":"","titlecase_mapping":"A7C0","symbol":"\uA7C1"},42947:{"value":"A7C3","name":"LATIN SMALL LETTER ANGLICANA W","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7C2","lowercase_mapping":"","titlecase_mapping":"A7C2","symbol":"\uA7C3"},42952:{"value":"A7C8","name":"LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7C7","lowercase_mapping":"","titlecase_mapping":"A7C7","symbol":"\uA7C8"},42954:{"value":"A7CA","name":"LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7C9","lowercase_mapping":"","titlecase_mapping":"A7C9","symbol":"\uA7CA"},42961:{"value":"A7D1","name":"LATIN SMALL LETTER CLOSED INSULAR G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7D0","lowercase_mapping":"","titlecase_mapping":"A7D0","symbol":"\uA7D1"},42963:{"value":"A7D3","name":"LATIN SMALL LETTER DOUBLE THORN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7D3"},42965:{"value":"A7D5","name":"LATIN SMALL LETTER DOUBLE WYNN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7D5"},42967:{"value":"A7D7","name":"LATIN SMALL LETTER MIDDLE SCOTS S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7D6","lowercase_mapping":"","titlecase_mapping":"A7D6","symbol":"\uA7D7"},42969:{"value":"A7D9","name":"LATIN SMALL LETTER SIGMOID S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7D8","lowercase_mapping":"","titlecase_mapping":"A7D8","symbol":"\uA7D9"},42998:{"value":"A7F6","name":"LATIN SMALL LETTER REVERSED HALF H","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7F5","lowercase_mapping":"","titlecase_mapping":"A7F5","symbol":"\uA7F6"},43002:{"value":"A7FA","name":"LATIN LETTER SMALL CAPITAL TURNED M","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7FA"},43824:{"value":"AB30","name":"LATIN SMALL LETTER BARRED ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB30"},43825:{"value":"AB31","name":"LATIN SMALL LETTER A REVERSED-SCHWA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB31"},43826:{"value":"AB32","name":"LATIN SMALL LETTER BLACKLETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB32"},43827:{"value":"AB33","name":"LATIN SMALL LETTER BARRED E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB33"},43828:{"value":"AB34","name":"LATIN SMALL LETTER E WITH FLOURISH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB34"},43829:{"value":"AB35","name":"LATIN SMALL LETTER LENIS F","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB35"},43830:{"value":"AB36","name":"LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB36"},43831:{"value":"AB37","name":"LATIN SMALL LETTER L WITH INVERTED LAZY S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB37"},43832:{"value":"AB38","name":"LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB38"},43833:{"value":"AB39","name":"LATIN SMALL LETTER L WITH MIDDLE RING","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB39"},43834:{"value":"AB3A","name":"LATIN SMALL LETTER M WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB3A"},43835:{"value":"AB3B","name":"LATIN SMALL LETTER N WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB3B"},43836:{"value":"AB3C","name":"LATIN SMALL LETTER ENG WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB3C"},43837:{"value":"AB3D","name":"LATIN SMALL LETTER BLACKLETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB3D"},43838:{"value":"AB3E","name":"LATIN SMALL LETTER BLACKLETTER O WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB3E"},43839:{"value":"AB3F","name":"LATIN SMALL LETTER OPEN O WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB3F"},43840:{"value":"AB40","name":"LATIN SMALL LETTER INVERTED OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB40"},43841:{"value":"AB41","name":"LATIN SMALL LETTER TURNED OE WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB41"},43842:{"value":"AB42","name":"LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB42"},43843:{"value":"AB43","name":"LATIN SMALL LETTER TURNED O OPEN-O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB43"},43844:{"value":"AB44","name":"LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB44"},43845:{"value":"AB45","name":"LATIN SMALL LETTER STIRRUP R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB45"},43846:{"value":"AB46","name":"LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB46"},43847:{"value":"AB47","name":"LATIN SMALL LETTER R WITHOUT HANDLE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB47"},43848:{"value":"AB48","name":"LATIN SMALL LETTER DOUBLE R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB48"},43849:{"value":"AB49","name":"LATIN SMALL LETTER R WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB49"},43850:{"value":"AB4A","name":"LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB4A"},43851:{"value":"AB4B","name":"LATIN SMALL LETTER SCRIPT R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB4B"},43852:{"value":"AB4C","name":"LATIN SMALL LETTER SCRIPT R WITH RING","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB4C"},43853:{"value":"AB4D","name":"LATIN SMALL LETTER BASELINE ESH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB4D"},43854:{"value":"AB4E","name":"LATIN SMALL LETTER U WITH SHORT RIGHT LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB4E"},43855:{"value":"AB4F","name":"LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB4F"},43856:{"value":"AB50","name":"LATIN SMALL LETTER UI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB50"},43857:{"value":"AB51","name":"LATIN SMALL LETTER TURNED UI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB51"},43858:{"value":"AB52","name":"LATIN SMALL LETTER U WITH LEFT HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB52"},43859:{"value":"AB53","name":"LATIN SMALL LETTER CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"A7B3","lowercase_mapping":"","titlecase_mapping":"A7B3","symbol":"\uAB53"},43860:{"value":"AB54","name":"LATIN SMALL LETTER CHI WITH LOW RIGHT RING","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB54"},43861:{"value":"AB55","name":"LATIN SMALL LETTER CHI WITH LOW LEFT SERIF","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB55"},43862:{"value":"AB56","name":"LATIN SMALL LETTER X WITH LOW RIGHT RING","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB56"},43863:{"value":"AB57","name":"LATIN SMALL LETTER X WITH LONG LEFT LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB57"},43864:{"value":"AB58","name":"LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB58"},43865:{"value":"AB59","name":"LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB59"},43866:{"value":"AB5A","name":"LATIN SMALL LETTER Y WITH SHORT RIGHT LEG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB5A"},43872:{"value":"AB60","name":"LATIN SMALL LETTER SAKHA YAT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB60"},43873:{"value":"AB61","name":"LATIN SMALL LETTER IOTIFIED E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB61"},43874:{"value":"AB62","name":"LATIN SMALL LETTER OPEN OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB62"},43875:{"value":"AB63","name":"LATIN SMALL LETTER UO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB63"},43876:{"value":"AB64","name":"LATIN SMALL LETTER INVERTED ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB64"},43877:{"value":"AB65","name":"GREEK LETTER SMALL CAPITAL OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB65"},43878:{"value":"AB66","name":"LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB66"},43879:{"value":"AB67","name":"LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB67"},43880:{"value":"AB68","name":"LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB68"},43888:{"value":"AB70","name":"CHEROKEE SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A0","lowercase_mapping":"","titlecase_mapping":"13A0","symbol":"\uAB70"},43889:{"value":"AB71","name":"CHEROKEE SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A1","lowercase_mapping":"","titlecase_mapping":"13A1","symbol":"\uAB71"},43890:{"value":"AB72","name":"CHEROKEE SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A2","lowercase_mapping":"","titlecase_mapping":"13A2","symbol":"\uAB72"},43891:{"value":"AB73","name":"CHEROKEE SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A3","lowercase_mapping":"","titlecase_mapping":"13A3","symbol":"\uAB73"},43892:{"value":"AB74","name":"CHEROKEE SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A4","lowercase_mapping":"","titlecase_mapping":"13A4","symbol":"\uAB74"},43893:{"value":"AB75","name":"CHEROKEE SMALL LETTER V","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A5","lowercase_mapping":"","titlecase_mapping":"13A5","symbol":"\uAB75"},43894:{"value":"AB76","name":"CHEROKEE SMALL LETTER GA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A6","lowercase_mapping":"","titlecase_mapping":"13A6","symbol":"\uAB76"},43895:{"value":"AB77","name":"CHEROKEE SMALL LETTER KA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A7","lowercase_mapping":"","titlecase_mapping":"13A7","symbol":"\uAB77"},43896:{"value":"AB78","name":"CHEROKEE SMALL LETTER GE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A8","lowercase_mapping":"","titlecase_mapping":"13A8","symbol":"\uAB78"},43897:{"value":"AB79","name":"CHEROKEE SMALL LETTER GI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13A9","lowercase_mapping":"","titlecase_mapping":"13A9","symbol":"\uAB79"},43898:{"value":"AB7A","name":"CHEROKEE SMALL LETTER GO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13AA","lowercase_mapping":"","titlecase_mapping":"13AA","symbol":"\uAB7A"},43899:{"value":"AB7B","name":"CHEROKEE SMALL LETTER GU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13AB","lowercase_mapping":"","titlecase_mapping":"13AB","symbol":"\uAB7B"},43900:{"value":"AB7C","name":"CHEROKEE SMALL LETTER GV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13AC","lowercase_mapping":"","titlecase_mapping":"13AC","symbol":"\uAB7C"},43901:{"value":"AB7D","name":"CHEROKEE SMALL LETTER HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13AD","lowercase_mapping":"","titlecase_mapping":"13AD","symbol":"\uAB7D"},43902:{"value":"AB7E","name":"CHEROKEE SMALL LETTER HE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13AE","lowercase_mapping":"","titlecase_mapping":"13AE","symbol":"\uAB7E"},43903:{"value":"AB7F","name":"CHEROKEE SMALL LETTER HI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13AF","lowercase_mapping":"","titlecase_mapping":"13AF","symbol":"\uAB7F"},43904:{"value":"AB80","name":"CHEROKEE SMALL LETTER HO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B0","lowercase_mapping":"","titlecase_mapping":"13B0","symbol":"\uAB80"},43905:{"value":"AB81","name":"CHEROKEE SMALL LETTER HU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B1","lowercase_mapping":"","titlecase_mapping":"13B1","symbol":"\uAB81"},43906:{"value":"AB82","name":"CHEROKEE SMALL LETTER HV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B2","lowercase_mapping":"","titlecase_mapping":"13B2","symbol":"\uAB82"},43907:{"value":"AB83","name":"CHEROKEE SMALL LETTER LA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B3","lowercase_mapping":"","titlecase_mapping":"13B3","symbol":"\uAB83"},43908:{"value":"AB84","name":"CHEROKEE SMALL LETTER LE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B4","lowercase_mapping":"","titlecase_mapping":"13B4","symbol":"\uAB84"},43909:{"value":"AB85","name":"CHEROKEE SMALL LETTER LI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B5","lowercase_mapping":"","titlecase_mapping":"13B5","symbol":"\uAB85"},43910:{"value":"AB86","name":"CHEROKEE SMALL LETTER LO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B6","lowercase_mapping":"","titlecase_mapping":"13B6","symbol":"\uAB86"},43911:{"value":"AB87","name":"CHEROKEE SMALL LETTER LU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B7","lowercase_mapping":"","titlecase_mapping":"13B7","symbol":"\uAB87"},43912:{"value":"AB88","name":"CHEROKEE SMALL LETTER LV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B8","lowercase_mapping":"","titlecase_mapping":"13B8","symbol":"\uAB88"},43913:{"value":"AB89","name":"CHEROKEE SMALL LETTER MA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13B9","lowercase_mapping":"","titlecase_mapping":"13B9","symbol":"\uAB89"},43914:{"value":"AB8A","name":"CHEROKEE SMALL LETTER ME","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13BA","lowercase_mapping":"","titlecase_mapping":"13BA","symbol":"\uAB8A"},43915:{"value":"AB8B","name":"CHEROKEE SMALL LETTER MI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13BB","lowercase_mapping":"","titlecase_mapping":"13BB","symbol":"\uAB8B"},43916:{"value":"AB8C","name":"CHEROKEE SMALL LETTER MO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13BC","lowercase_mapping":"","titlecase_mapping":"13BC","symbol":"\uAB8C"},43917:{"value":"AB8D","name":"CHEROKEE SMALL LETTER MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13BD","lowercase_mapping":"","titlecase_mapping":"13BD","symbol":"\uAB8D"},43918:{"value":"AB8E","name":"CHEROKEE SMALL LETTER NA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13BE","lowercase_mapping":"","titlecase_mapping":"13BE","symbol":"\uAB8E"},43919:{"value":"AB8F","name":"CHEROKEE SMALL LETTER HNA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13BF","lowercase_mapping":"","titlecase_mapping":"13BF","symbol":"\uAB8F"},43920:{"value":"AB90","name":"CHEROKEE SMALL LETTER NAH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C0","lowercase_mapping":"","titlecase_mapping":"13C0","symbol":"\uAB90"},43921:{"value":"AB91","name":"CHEROKEE SMALL LETTER NE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C1","lowercase_mapping":"","titlecase_mapping":"13C1","symbol":"\uAB91"},43922:{"value":"AB92","name":"CHEROKEE SMALL LETTER NI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C2","lowercase_mapping":"","titlecase_mapping":"13C2","symbol":"\uAB92"},43923:{"value":"AB93","name":"CHEROKEE SMALL LETTER NO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C3","lowercase_mapping":"","titlecase_mapping":"13C3","symbol":"\uAB93"},43924:{"value":"AB94","name":"CHEROKEE SMALL LETTER NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C4","lowercase_mapping":"","titlecase_mapping":"13C4","symbol":"\uAB94"},43925:{"value":"AB95","name":"CHEROKEE SMALL LETTER NV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C5","lowercase_mapping":"","titlecase_mapping":"13C5","symbol":"\uAB95"},43926:{"value":"AB96","name":"CHEROKEE SMALL LETTER QUA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C6","lowercase_mapping":"","titlecase_mapping":"13C6","symbol":"\uAB96"},43927:{"value":"AB97","name":"CHEROKEE SMALL LETTER QUE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C7","lowercase_mapping":"","titlecase_mapping":"13C7","symbol":"\uAB97"},43928:{"value":"AB98","name":"CHEROKEE SMALL LETTER QUI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C8","lowercase_mapping":"","titlecase_mapping":"13C8","symbol":"\uAB98"},43929:{"value":"AB99","name":"CHEROKEE SMALL LETTER QUO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13C9","lowercase_mapping":"","titlecase_mapping":"13C9","symbol":"\uAB99"},43930:{"value":"AB9A","name":"CHEROKEE SMALL LETTER QUU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13CA","lowercase_mapping":"","titlecase_mapping":"13CA","symbol":"\uAB9A"},43931:{"value":"AB9B","name":"CHEROKEE SMALL LETTER QUV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13CB","lowercase_mapping":"","titlecase_mapping":"13CB","symbol":"\uAB9B"},43932:{"value":"AB9C","name":"CHEROKEE SMALL LETTER SA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13CC","lowercase_mapping":"","titlecase_mapping":"13CC","symbol":"\uAB9C"},43933:{"value":"AB9D","name":"CHEROKEE SMALL LETTER S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13CD","lowercase_mapping":"","titlecase_mapping":"13CD","symbol":"\uAB9D"},43934:{"value":"AB9E","name":"CHEROKEE SMALL LETTER SE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13CE","lowercase_mapping":"","titlecase_mapping":"13CE","symbol":"\uAB9E"},43935:{"value":"AB9F","name":"CHEROKEE SMALL LETTER SI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13CF","lowercase_mapping":"","titlecase_mapping":"13CF","symbol":"\uAB9F"},43936:{"value":"ABA0","name":"CHEROKEE SMALL LETTER SO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D0","lowercase_mapping":"","titlecase_mapping":"13D0","symbol":"\uABA0"},43937:{"value":"ABA1","name":"CHEROKEE SMALL LETTER SU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D1","lowercase_mapping":"","titlecase_mapping":"13D1","symbol":"\uABA1"},43938:{"value":"ABA2","name":"CHEROKEE SMALL LETTER SV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D2","lowercase_mapping":"","titlecase_mapping":"13D2","symbol":"\uABA2"},43939:{"value":"ABA3","name":"CHEROKEE SMALL LETTER DA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D3","lowercase_mapping":"","titlecase_mapping":"13D3","symbol":"\uABA3"},43940:{"value":"ABA4","name":"CHEROKEE SMALL LETTER TA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D4","lowercase_mapping":"","titlecase_mapping":"13D4","symbol":"\uABA4"},43941:{"value":"ABA5","name":"CHEROKEE SMALL LETTER DE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D5","lowercase_mapping":"","titlecase_mapping":"13D5","symbol":"\uABA5"},43942:{"value":"ABA6","name":"CHEROKEE SMALL LETTER TE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D6","lowercase_mapping":"","titlecase_mapping":"13D6","symbol":"\uABA6"},43943:{"value":"ABA7","name":"CHEROKEE SMALL LETTER DI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D7","lowercase_mapping":"","titlecase_mapping":"13D7","symbol":"\uABA7"},43944:{"value":"ABA8","name":"CHEROKEE SMALL LETTER TI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D8","lowercase_mapping":"","titlecase_mapping":"13D8","symbol":"\uABA8"},43945:{"value":"ABA9","name":"CHEROKEE SMALL LETTER DO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13D9","lowercase_mapping":"","titlecase_mapping":"13D9","symbol":"\uABA9"},43946:{"value":"ABAA","name":"CHEROKEE SMALL LETTER DU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13DA","lowercase_mapping":"","titlecase_mapping":"13DA","symbol":"\uABAA"},43947:{"value":"ABAB","name":"CHEROKEE SMALL LETTER DV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13DB","lowercase_mapping":"","titlecase_mapping":"13DB","symbol":"\uABAB"},43948:{"value":"ABAC","name":"CHEROKEE SMALL LETTER DLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13DC","lowercase_mapping":"","titlecase_mapping":"13DC","symbol":"\uABAC"},43949:{"value":"ABAD","name":"CHEROKEE SMALL LETTER TLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13DD","lowercase_mapping":"","titlecase_mapping":"13DD","symbol":"\uABAD"},43950:{"value":"ABAE","name":"CHEROKEE SMALL LETTER TLE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13DE","lowercase_mapping":"","titlecase_mapping":"13DE","symbol":"\uABAE"},43951:{"value":"ABAF","name":"CHEROKEE SMALL LETTER TLI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13DF","lowercase_mapping":"","titlecase_mapping":"13DF","symbol":"\uABAF"},43952:{"value":"ABB0","name":"CHEROKEE SMALL LETTER TLO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E0","lowercase_mapping":"","titlecase_mapping":"13E0","symbol":"\uABB0"},43953:{"value":"ABB1","name":"CHEROKEE SMALL LETTER TLU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E1","lowercase_mapping":"","titlecase_mapping":"13E1","symbol":"\uABB1"},43954:{"value":"ABB2","name":"CHEROKEE SMALL LETTER TLV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E2","lowercase_mapping":"","titlecase_mapping":"13E2","symbol":"\uABB2"},43955:{"value":"ABB3","name":"CHEROKEE SMALL LETTER TSA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E3","lowercase_mapping":"","titlecase_mapping":"13E3","symbol":"\uABB3"},43956:{"value":"ABB4","name":"CHEROKEE SMALL LETTER TSE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E4","lowercase_mapping":"","titlecase_mapping":"13E4","symbol":"\uABB4"},43957:{"value":"ABB5","name":"CHEROKEE SMALL LETTER TSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E5","lowercase_mapping":"","titlecase_mapping":"13E5","symbol":"\uABB5"},43958:{"value":"ABB6","name":"CHEROKEE SMALL LETTER TSO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E6","lowercase_mapping":"","titlecase_mapping":"13E6","symbol":"\uABB6"},43959:{"value":"ABB7","name":"CHEROKEE SMALL LETTER TSU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E7","lowercase_mapping":"","titlecase_mapping":"13E7","symbol":"\uABB7"},43960:{"value":"ABB8","name":"CHEROKEE SMALL LETTER TSV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E8","lowercase_mapping":"","titlecase_mapping":"13E8","symbol":"\uABB8"},43961:{"value":"ABB9","name":"CHEROKEE SMALL LETTER WA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13E9","lowercase_mapping":"","titlecase_mapping":"13E9","symbol":"\uABB9"},43962:{"value":"ABBA","name":"CHEROKEE SMALL LETTER WE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13EA","lowercase_mapping":"","titlecase_mapping":"13EA","symbol":"\uABBA"},43963:{"value":"ABBB","name":"CHEROKEE SMALL LETTER WI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13EB","lowercase_mapping":"","titlecase_mapping":"13EB","symbol":"\uABBB"},43964:{"value":"ABBC","name":"CHEROKEE SMALL LETTER WO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13EC","lowercase_mapping":"","titlecase_mapping":"13EC","symbol":"\uABBC"},43965:{"value":"ABBD","name":"CHEROKEE SMALL LETTER WU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13ED","lowercase_mapping":"","titlecase_mapping":"13ED","symbol":"\uABBD"},43966:{"value":"ABBE","name":"CHEROKEE SMALL LETTER WV","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13EE","lowercase_mapping":"","titlecase_mapping":"13EE","symbol":"\uABBE"},43967:{"value":"ABBF","name":"CHEROKEE SMALL LETTER YA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"13EF","lowercase_mapping":"","titlecase_mapping":"13EF","symbol":"\uABBF"},64256:{"value":"FB00","name":"LATIN SMALL LIGATURE FF","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB00"},64257:{"value":"FB01","name":"LATIN SMALL LIGATURE FI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB01"},64258:{"value":"FB02","name":"LATIN SMALL LIGATURE FL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB02"},64259:{"value":"FB03","name":"LATIN SMALL LIGATURE FFI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066 0066 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB03"},64260:{"value":"FB04","name":"LATIN SMALL LIGATURE FFL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066 0066 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB04"},64261:{"value":"FB05","name":"LATIN SMALL LIGATURE LONG S T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 017F 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB05"},64262:{"value":"FB06","name":"LATIN SMALL LIGATURE ST","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB06"},64275:{"value":"FB13","name":"ARMENIAN SMALL LIGATURE MEN NOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0574 0576","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB13"},64276:{"value":"FB14","name":"ARMENIAN SMALL LIGATURE MEN ECH","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0574 0565","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB14"},64277:{"value":"FB15","name":"ARMENIAN SMALL LIGATURE MEN INI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0574 056B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB15"},64278:{"value":"FB16","name":"ARMENIAN SMALL LIGATURE VEW NOW","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 057E 0576","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB16"},64279:{"value":"FB17","name":"ARMENIAN SMALL LIGATURE MEN XEH","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0574 056D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB17"},65345:{"value":"FF41","name":"FULLWIDTH LATIN SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF21","lowercase_mapping":"","titlecase_mapping":"FF21","symbol":"\uFF41"},65346:{"value":"FF42","name":"FULLWIDTH LATIN SMALL LETTER B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF22","lowercase_mapping":"","titlecase_mapping":"FF22","symbol":"\uFF42"},65347:{"value":"FF43","name":"FULLWIDTH LATIN SMALL LETTER C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF23","lowercase_mapping":"","titlecase_mapping":"FF23","symbol":"\uFF43"},65348:{"value":"FF44","name":"FULLWIDTH LATIN SMALL LETTER D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF24","lowercase_mapping":"","titlecase_mapping":"FF24","symbol":"\uFF44"},65349:{"value":"FF45","name":"FULLWIDTH LATIN SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF25","lowercase_mapping":"","titlecase_mapping":"FF25","symbol":"\uFF45"},65350:{"value":"FF46","name":"FULLWIDTH LATIN SMALL LETTER F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF26","lowercase_mapping":"","titlecase_mapping":"FF26","symbol":"\uFF46"},65351:{"value":"FF47","name":"FULLWIDTH LATIN SMALL LETTER G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF27","lowercase_mapping":"","titlecase_mapping":"FF27","symbol":"\uFF47"},65352:{"value":"FF48","name":"FULLWIDTH LATIN SMALL LETTER H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF28","lowercase_mapping":"","titlecase_mapping":"FF28","symbol":"\uFF48"},65353:{"value":"FF49","name":"FULLWIDTH LATIN SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF29","lowercase_mapping":"","titlecase_mapping":"FF29","symbol":"\uFF49"},65354:{"value":"FF4A","name":"FULLWIDTH LATIN SMALL LETTER J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF2A","lowercase_mapping":"","titlecase_mapping":"FF2A","symbol":"\uFF4A"},65355:{"value":"FF4B","name":"FULLWIDTH LATIN SMALL LETTER K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF2B","lowercase_mapping":"","titlecase_mapping":"FF2B","symbol":"\uFF4B"},65356:{"value":"FF4C","name":"FULLWIDTH LATIN SMALL LETTER L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF2C","lowercase_mapping":"","titlecase_mapping":"FF2C","symbol":"\uFF4C"},65357:{"value":"FF4D","name":"FULLWIDTH LATIN SMALL LETTER M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF2D","lowercase_mapping":"","titlecase_mapping":"FF2D","symbol":"\uFF4D"},65358:{"value":"FF4E","name":"FULLWIDTH LATIN SMALL LETTER N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF2E","lowercase_mapping":"","titlecase_mapping":"FF2E","symbol":"\uFF4E"},65359:{"value":"FF4F","name":"FULLWIDTH LATIN SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF2F","lowercase_mapping":"","titlecase_mapping":"FF2F","symbol":"\uFF4F"},65360:{"value":"FF50","name":"FULLWIDTH LATIN SMALL LETTER P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF30","lowercase_mapping":"","titlecase_mapping":"FF30","symbol":"\uFF50"},65361:{"value":"FF51","name":"FULLWIDTH LATIN SMALL LETTER Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF31","lowercase_mapping":"","titlecase_mapping":"FF31","symbol":"\uFF51"},65362:{"value":"FF52","name":"FULLWIDTH LATIN SMALL LETTER R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF32","lowercase_mapping":"","titlecase_mapping":"FF32","symbol":"\uFF52"},65363:{"value":"FF53","name":"FULLWIDTH LATIN SMALL LETTER S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF33","lowercase_mapping":"","titlecase_mapping":"FF33","symbol":"\uFF53"},65364:{"value":"FF54","name":"FULLWIDTH LATIN SMALL LETTER T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF34","lowercase_mapping":"","titlecase_mapping":"FF34","symbol":"\uFF54"},65365:{"value":"FF55","name":"FULLWIDTH LATIN SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF35","lowercase_mapping":"","titlecase_mapping":"FF35","symbol":"\uFF55"},65366:{"value":"FF56","name":"FULLWIDTH LATIN SMALL LETTER V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF36","lowercase_mapping":"","titlecase_mapping":"FF36","symbol":"\uFF56"},65367:{"value":"FF57","name":"FULLWIDTH LATIN SMALL LETTER W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF37","lowercase_mapping":"","titlecase_mapping":"FF37","symbol":"\uFF57"},65368:{"value":"FF58","name":"FULLWIDTH LATIN SMALL LETTER X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF38","lowercase_mapping":"","titlecase_mapping":"FF38","symbol":"\uFF58"},65369:{"value":"FF59","name":"FULLWIDTH LATIN SMALL LETTER Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF39","lowercase_mapping":"","titlecase_mapping":"FF39","symbol":"\uFF59"},65370:{"value":"FF5A","name":"FULLWIDTH LATIN SMALL LETTER Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"FF3A","lowercase_mapping":"","titlecase_mapping":"FF3A","symbol":"\uFF5A"},66600:{"value":"10428","name":"DESERET SMALL LETTER LONG I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10400","lowercase_mapping":"","titlecase_mapping":"10400","symbol":"\ud801\udc28"},66601:{"value":"10429","name":"DESERET SMALL LETTER LONG E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10401","lowercase_mapping":"","titlecase_mapping":"10401","symbol":"\ud801\udc29"},66602:{"value":"1042A","name":"DESERET SMALL LETTER LONG A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10402","lowercase_mapping":"","titlecase_mapping":"10402","symbol":"\ud801\udc2a"},66603:{"value":"1042B","name":"DESERET SMALL LETTER LONG AH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10403","lowercase_mapping":"","titlecase_mapping":"10403","symbol":"\ud801\udc2b"},66604:{"value":"1042C","name":"DESERET SMALL LETTER LONG O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10404","lowercase_mapping":"","titlecase_mapping":"10404","symbol":"\ud801\udc2c"},66605:{"value":"1042D","name":"DESERET SMALL LETTER LONG OO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10405","lowercase_mapping":"","titlecase_mapping":"10405","symbol":"\ud801\udc2d"},66606:{"value":"1042E","name":"DESERET SMALL LETTER SHORT I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10406","lowercase_mapping":"","titlecase_mapping":"10406","symbol":"\ud801\udc2e"},66607:{"value":"1042F","name":"DESERET SMALL LETTER SHORT E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10407","lowercase_mapping":"","titlecase_mapping":"10407","symbol":"\ud801\udc2f"},66608:{"value":"10430","name":"DESERET SMALL LETTER SHORT A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10408","lowercase_mapping":"","titlecase_mapping":"10408","symbol":"\ud801\udc30"},66609:{"value":"10431","name":"DESERET SMALL LETTER SHORT AH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10409","lowercase_mapping":"","titlecase_mapping":"10409","symbol":"\ud801\udc31"},66610:{"value":"10432","name":"DESERET SMALL LETTER SHORT O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1040A","lowercase_mapping":"","titlecase_mapping":"1040A","symbol":"\ud801\udc32"},66611:{"value":"10433","name":"DESERET SMALL LETTER SHORT OO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1040B","lowercase_mapping":"","titlecase_mapping":"1040B","symbol":"\ud801\udc33"},66612:{"value":"10434","name":"DESERET SMALL LETTER AY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1040C","lowercase_mapping":"","titlecase_mapping":"1040C","symbol":"\ud801\udc34"},66613:{"value":"10435","name":"DESERET SMALL LETTER OW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1040D","lowercase_mapping":"","titlecase_mapping":"1040D","symbol":"\ud801\udc35"},66614:{"value":"10436","name":"DESERET SMALL LETTER WU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1040E","lowercase_mapping":"","titlecase_mapping":"1040E","symbol":"\ud801\udc36"},66615:{"value":"10437","name":"DESERET SMALL LETTER YEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1040F","lowercase_mapping":"","titlecase_mapping":"1040F","symbol":"\ud801\udc37"},66616:{"value":"10438","name":"DESERET SMALL LETTER H","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10410","lowercase_mapping":"","titlecase_mapping":"10410","symbol":"\ud801\udc38"},66617:{"value":"10439","name":"DESERET SMALL LETTER PEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10411","lowercase_mapping":"","titlecase_mapping":"10411","symbol":"\ud801\udc39"},66618:{"value":"1043A","name":"DESERET SMALL LETTER BEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10412","lowercase_mapping":"","titlecase_mapping":"10412","symbol":"\ud801\udc3a"},66619:{"value":"1043B","name":"DESERET SMALL LETTER TEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10413","lowercase_mapping":"","titlecase_mapping":"10413","symbol":"\ud801\udc3b"},66620:{"value":"1043C","name":"DESERET SMALL LETTER DEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10414","lowercase_mapping":"","titlecase_mapping":"10414","symbol":"\ud801\udc3c"},66621:{"value":"1043D","name":"DESERET SMALL LETTER CHEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10415","lowercase_mapping":"","titlecase_mapping":"10415","symbol":"\ud801\udc3d"},66622:{"value":"1043E","name":"DESERET SMALL LETTER JEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10416","lowercase_mapping":"","titlecase_mapping":"10416","symbol":"\ud801\udc3e"},66623:{"value":"1043F","name":"DESERET SMALL LETTER KAY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10417","lowercase_mapping":"","titlecase_mapping":"10417","symbol":"\ud801\udc3f"},66624:{"value":"10440","name":"DESERET SMALL LETTER GAY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10418","lowercase_mapping":"","titlecase_mapping":"10418","symbol":"\ud801\udc40"},66625:{"value":"10441","name":"DESERET SMALL LETTER EF","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10419","lowercase_mapping":"","titlecase_mapping":"10419","symbol":"\ud801\udc41"},66626:{"value":"10442","name":"DESERET SMALL LETTER VEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1041A","lowercase_mapping":"","titlecase_mapping":"1041A","symbol":"\ud801\udc42"},66627:{"value":"10443","name":"DESERET SMALL LETTER ETH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1041B","lowercase_mapping":"","titlecase_mapping":"1041B","symbol":"\ud801\udc43"},66628:{"value":"10444","name":"DESERET SMALL LETTER THEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1041C","lowercase_mapping":"","titlecase_mapping":"1041C","symbol":"\ud801\udc44"},66629:{"value":"10445","name":"DESERET SMALL LETTER ES","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1041D","lowercase_mapping":"","titlecase_mapping":"1041D","symbol":"\ud801\udc45"},66630:{"value":"10446","name":"DESERET SMALL LETTER ZEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1041E","lowercase_mapping":"","titlecase_mapping":"1041E","symbol":"\ud801\udc46"},66631:{"value":"10447","name":"DESERET SMALL LETTER ESH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1041F","lowercase_mapping":"","titlecase_mapping":"1041F","symbol":"\ud801\udc47"},66632:{"value":"10448","name":"DESERET SMALL LETTER ZHEE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10420","lowercase_mapping":"","titlecase_mapping":"10420","symbol":"\ud801\udc48"},66633:{"value":"10449","name":"DESERET SMALL LETTER ER","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10421","lowercase_mapping":"","titlecase_mapping":"10421","symbol":"\ud801\udc49"},66634:{"value":"1044A","name":"DESERET SMALL LETTER EL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10422","lowercase_mapping":"","titlecase_mapping":"10422","symbol":"\ud801\udc4a"},66635:{"value":"1044B","name":"DESERET SMALL LETTER EM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10423","lowercase_mapping":"","titlecase_mapping":"10423","symbol":"\ud801\udc4b"},66636:{"value":"1044C","name":"DESERET SMALL LETTER EN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10424","lowercase_mapping":"","titlecase_mapping":"10424","symbol":"\ud801\udc4c"},66637:{"value":"1044D","name":"DESERET SMALL LETTER ENG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10425","lowercase_mapping":"","titlecase_mapping":"10425","symbol":"\ud801\udc4d"},66638:{"value":"1044E","name":"DESERET SMALL LETTER OI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10426","lowercase_mapping":"","titlecase_mapping":"10426","symbol":"\ud801\udc4e"},66639:{"value":"1044F","name":"DESERET SMALL LETTER EW","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10427","lowercase_mapping":"","titlecase_mapping":"10427","symbol":"\ud801\udc4f"},66776:{"value":"104D8","name":"OSAGE SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B0","lowercase_mapping":"","titlecase_mapping":"104B0","symbol":"\ud801\udcd8"},66777:{"value":"104D9","name":"OSAGE SMALL LETTER AI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B1","lowercase_mapping":"","titlecase_mapping":"104B1","symbol":"\ud801\udcd9"},66778:{"value":"104DA","name":"OSAGE SMALL LETTER AIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B2","lowercase_mapping":"","titlecase_mapping":"104B2","symbol":"\ud801\udcda"},66779:{"value":"104DB","name":"OSAGE SMALL LETTER AH","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B3","lowercase_mapping":"","titlecase_mapping":"104B3","symbol":"\ud801\udcdb"},66780:{"value":"104DC","name":"OSAGE SMALL LETTER BRA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B4","lowercase_mapping":"","titlecase_mapping":"104B4","symbol":"\ud801\udcdc"},66781:{"value":"104DD","name":"OSAGE SMALL LETTER CHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B5","lowercase_mapping":"","titlecase_mapping":"104B5","symbol":"\ud801\udcdd"},66782:{"value":"104DE","name":"OSAGE SMALL LETTER EHCHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B6","lowercase_mapping":"","titlecase_mapping":"104B6","symbol":"\ud801\udcde"},66783:{"value":"104DF","name":"OSAGE SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B7","lowercase_mapping":"","titlecase_mapping":"104B7","symbol":"\ud801\udcdf"},66784:{"value":"104E0","name":"OSAGE SMALL LETTER EIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B8","lowercase_mapping":"","titlecase_mapping":"104B8","symbol":"\ud801\udce0"},66785:{"value":"104E1","name":"OSAGE SMALL LETTER HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104B9","lowercase_mapping":"","titlecase_mapping":"104B9","symbol":"\ud801\udce1"},66786:{"value":"104E2","name":"OSAGE SMALL LETTER HYA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104BA","lowercase_mapping":"","titlecase_mapping":"104BA","symbol":"\ud801\udce2"},66787:{"value":"104E3","name":"OSAGE SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104BB","lowercase_mapping":"","titlecase_mapping":"104BB","symbol":"\ud801\udce3"},66788:{"value":"104E4","name":"OSAGE SMALL LETTER KA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104BC","lowercase_mapping":"","titlecase_mapping":"104BC","symbol":"\ud801\udce4"},66789:{"value":"104E5","name":"OSAGE SMALL LETTER EHKA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104BD","lowercase_mapping":"","titlecase_mapping":"104BD","symbol":"\ud801\udce5"},66790:{"value":"104E6","name":"OSAGE SMALL LETTER KYA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104BE","lowercase_mapping":"","titlecase_mapping":"104BE","symbol":"\ud801\udce6"},66791:{"value":"104E7","name":"OSAGE SMALL LETTER LA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104BF","lowercase_mapping":"","titlecase_mapping":"104BF","symbol":"\ud801\udce7"},66792:{"value":"104E8","name":"OSAGE SMALL LETTER MA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C0","lowercase_mapping":"","titlecase_mapping":"104C0","symbol":"\ud801\udce8"},66793:{"value":"104E9","name":"OSAGE SMALL LETTER NA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C1","lowercase_mapping":"","titlecase_mapping":"104C1","symbol":"\ud801\udce9"},66794:{"value":"104EA","name":"OSAGE SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C2","lowercase_mapping":"","titlecase_mapping":"104C2","symbol":"\ud801\udcea"},66795:{"value":"104EB","name":"OSAGE SMALL LETTER OIN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C3","lowercase_mapping":"","titlecase_mapping":"104C3","symbol":"\ud801\udceb"},66796:{"value":"104EC","name":"OSAGE SMALL LETTER PA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C4","lowercase_mapping":"","titlecase_mapping":"104C4","symbol":"\ud801\udcec"},66797:{"value":"104ED","name":"OSAGE SMALL LETTER EHPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C5","lowercase_mapping":"","titlecase_mapping":"104C5","symbol":"\ud801\udced"},66798:{"value":"104EE","name":"OSAGE SMALL LETTER SA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C6","lowercase_mapping":"","titlecase_mapping":"104C6","symbol":"\ud801\udcee"},66799:{"value":"104EF","name":"OSAGE SMALL LETTER SHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C7","lowercase_mapping":"","titlecase_mapping":"104C7","symbol":"\ud801\udcef"},66800:{"value":"104F0","name":"OSAGE SMALL LETTER TA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C8","lowercase_mapping":"","titlecase_mapping":"104C8","symbol":"\ud801\udcf0"},66801:{"value":"104F1","name":"OSAGE SMALL LETTER EHTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104C9","lowercase_mapping":"","titlecase_mapping":"104C9","symbol":"\ud801\udcf1"},66802:{"value":"104F2","name":"OSAGE SMALL LETTER TSA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104CA","lowercase_mapping":"","titlecase_mapping":"104CA","symbol":"\ud801\udcf2"},66803:{"value":"104F3","name":"OSAGE SMALL LETTER EHTSA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104CB","lowercase_mapping":"","titlecase_mapping":"104CB","symbol":"\ud801\udcf3"},66804:{"value":"104F4","name":"OSAGE SMALL LETTER TSHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104CC","lowercase_mapping":"","titlecase_mapping":"104CC","symbol":"\ud801\udcf4"},66805:{"value":"104F5","name":"OSAGE SMALL LETTER DHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104CD","lowercase_mapping":"","titlecase_mapping":"104CD","symbol":"\ud801\udcf5"},66806:{"value":"104F6","name":"OSAGE SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104CE","lowercase_mapping":"","titlecase_mapping":"104CE","symbol":"\ud801\udcf6"},66807:{"value":"104F7","name":"OSAGE SMALL LETTER WA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104CF","lowercase_mapping":"","titlecase_mapping":"104CF","symbol":"\ud801\udcf7"},66808:{"value":"104F8","name":"OSAGE SMALL LETTER KHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104D0","lowercase_mapping":"","titlecase_mapping":"104D0","symbol":"\ud801\udcf8"},66809:{"value":"104F9","name":"OSAGE SMALL LETTER GHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104D1","lowercase_mapping":"","titlecase_mapping":"104D1","symbol":"\ud801\udcf9"},66810:{"value":"104FA","name":"OSAGE SMALL LETTER ZA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104D2","lowercase_mapping":"","titlecase_mapping":"104D2","symbol":"\ud801\udcfa"},66811:{"value":"104FB","name":"OSAGE SMALL LETTER ZHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"104D3","lowercase_mapping":"","titlecase_mapping":"104D3","symbol":"\ud801\udcfb"},66967:{"value":"10597","name":"VITHKUQI SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10570","lowercase_mapping":"","titlecase_mapping":"10570","symbol":"\ud801\udd97"},66968:{"value":"10598","name":"VITHKUQI SMALL LETTER BBE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10571","lowercase_mapping":"","titlecase_mapping":"10571","symbol":"\ud801\udd98"},66969:{"value":"10599","name":"VITHKUQI SMALL LETTER BE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10572","lowercase_mapping":"","titlecase_mapping":"10572","symbol":"\ud801\udd99"},66970:{"value":"1059A","name":"VITHKUQI SMALL LETTER CE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10573","lowercase_mapping":"","titlecase_mapping":"10573","symbol":"\ud801\udd9a"},66971:{"value":"1059B","name":"VITHKUQI SMALL LETTER CHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10574","lowercase_mapping":"","titlecase_mapping":"10574","symbol":"\ud801\udd9b"},66972:{"value":"1059C","name":"VITHKUQI SMALL LETTER DE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10575","lowercase_mapping":"","titlecase_mapping":"10575","symbol":"\ud801\udd9c"},66973:{"value":"1059D","name":"VITHKUQI SMALL LETTER DHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10576","lowercase_mapping":"","titlecase_mapping":"10576","symbol":"\ud801\udd9d"},66974:{"value":"1059E","name":"VITHKUQI SMALL LETTER EI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10577","lowercase_mapping":"","titlecase_mapping":"10577","symbol":"\ud801\udd9e"},66975:{"value":"1059F","name":"VITHKUQI SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10578","lowercase_mapping":"","titlecase_mapping":"10578","symbol":"\ud801\udd9f"},66976:{"value":"105A0","name":"VITHKUQI SMALL LETTER FE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10579","lowercase_mapping":"","titlecase_mapping":"10579","symbol":"\ud801\udda0"},66977:{"value":"105A1","name":"VITHKUQI SMALL LETTER GA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1057A","lowercase_mapping":"","titlecase_mapping":"1057A","symbol":"\ud801\udda1"},66979:{"value":"105A3","name":"VITHKUQI SMALL LETTER HA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1057C","lowercase_mapping":"","titlecase_mapping":"1057C","symbol":"\ud801\udda3"},66980:{"value":"105A4","name":"VITHKUQI SMALL LETTER HHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1057D","lowercase_mapping":"","titlecase_mapping":"1057D","symbol":"\ud801\udda4"},66981:{"value":"105A5","name":"VITHKUQI SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1057E","lowercase_mapping":"","titlecase_mapping":"1057E","symbol":"\ud801\udda5"},66982:{"value":"105A6","name":"VITHKUQI SMALL LETTER IJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1057F","lowercase_mapping":"","titlecase_mapping":"1057F","symbol":"\ud801\udda6"},66983:{"value":"105A7","name":"VITHKUQI SMALL LETTER JE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10580","lowercase_mapping":"","titlecase_mapping":"10580","symbol":"\ud801\udda7"},66984:{"value":"105A8","name":"VITHKUQI SMALL LETTER KA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10581","lowercase_mapping":"","titlecase_mapping":"10581","symbol":"\ud801\udda8"},66985:{"value":"105A9","name":"VITHKUQI SMALL LETTER LA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10582","lowercase_mapping":"","titlecase_mapping":"10582","symbol":"\ud801\udda9"},66986:{"value":"105AA","name":"VITHKUQI SMALL LETTER LLA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10583","lowercase_mapping":"","titlecase_mapping":"10583","symbol":"\ud801\uddaa"},66987:{"value":"105AB","name":"VITHKUQI SMALL LETTER ME","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10584","lowercase_mapping":"","titlecase_mapping":"10584","symbol":"\ud801\uddab"},66988:{"value":"105AC","name":"VITHKUQI SMALL LETTER NE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10585","lowercase_mapping":"","titlecase_mapping":"10585","symbol":"\ud801\uddac"},66989:{"value":"105AD","name":"VITHKUQI SMALL LETTER NJE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10586","lowercase_mapping":"","titlecase_mapping":"10586","symbol":"\ud801\uddad"},66990:{"value":"105AE","name":"VITHKUQI SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10587","lowercase_mapping":"","titlecase_mapping":"10587","symbol":"\ud801\uddae"},66991:{"value":"105AF","name":"VITHKUQI SMALL LETTER PE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10588","lowercase_mapping":"","titlecase_mapping":"10588","symbol":"\ud801\uddaf"},66992:{"value":"105B0","name":"VITHKUQI SMALL LETTER QA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10589","lowercase_mapping":"","titlecase_mapping":"10589","symbol":"\ud801\uddb0"},66993:{"value":"105B1","name":"VITHKUQI SMALL LETTER RE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1058A","lowercase_mapping":"","titlecase_mapping":"1058A","symbol":"\ud801\uddb1"},66995:{"value":"105B3","name":"VITHKUQI SMALL LETTER SE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1058C","lowercase_mapping":"","titlecase_mapping":"1058C","symbol":"\ud801\uddb3"},66996:{"value":"105B4","name":"VITHKUQI SMALL LETTER SHE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1058D","lowercase_mapping":"","titlecase_mapping":"1058D","symbol":"\ud801\uddb4"},66997:{"value":"105B5","name":"VITHKUQI SMALL LETTER TE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1058E","lowercase_mapping":"","titlecase_mapping":"1058E","symbol":"\ud801\uddb5"},66998:{"value":"105B6","name":"VITHKUQI SMALL LETTER THE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1058F","lowercase_mapping":"","titlecase_mapping":"1058F","symbol":"\ud801\uddb6"},66999:{"value":"105B7","name":"VITHKUQI SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10590","lowercase_mapping":"","titlecase_mapping":"10590","symbol":"\ud801\uddb7"},67000:{"value":"105B8","name":"VITHKUQI SMALL LETTER VE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10591","lowercase_mapping":"","titlecase_mapping":"10591","symbol":"\ud801\uddb8"},67001:{"value":"105B9","name":"VITHKUQI SMALL LETTER XE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10592","lowercase_mapping":"","titlecase_mapping":"10592","symbol":"\ud801\uddb9"},67003:{"value":"105BB","name":"VITHKUQI SMALL LETTER Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10594","lowercase_mapping":"","titlecase_mapping":"10594","symbol":"\ud801\uddbb"},67004:{"value":"105BC","name":"VITHKUQI SMALL LETTER ZE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10595","lowercase_mapping":"","titlecase_mapping":"10595","symbol":"\ud801\uddbc"},68800:{"value":"10CC0","name":"OLD HUNGARIAN SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C80","lowercase_mapping":"","titlecase_mapping":"10C80","symbol":"\ud803\udcc0"},68801:{"value":"10CC1","name":"OLD HUNGARIAN SMALL LETTER AA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C81","lowercase_mapping":"","titlecase_mapping":"10C81","symbol":"\ud803\udcc1"},68802:{"value":"10CC2","name":"OLD HUNGARIAN SMALL LETTER EB","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C82","lowercase_mapping":"","titlecase_mapping":"10C82","symbol":"\ud803\udcc2"},68803:{"value":"10CC3","name":"OLD HUNGARIAN SMALL LETTER AMB","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C83","lowercase_mapping":"","titlecase_mapping":"10C83","symbol":"\ud803\udcc3"},68804:{"value":"10CC4","name":"OLD HUNGARIAN SMALL LETTER EC","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C84","lowercase_mapping":"","titlecase_mapping":"10C84","symbol":"\ud803\udcc4"},68805:{"value":"10CC5","name":"OLD HUNGARIAN SMALL LETTER ENC","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C85","lowercase_mapping":"","titlecase_mapping":"10C85","symbol":"\ud803\udcc5"},68806:{"value":"10CC6","name":"OLD HUNGARIAN SMALL LETTER ECS","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C86","lowercase_mapping":"","titlecase_mapping":"10C86","symbol":"\ud803\udcc6"},68807:{"value":"10CC7","name":"OLD HUNGARIAN SMALL LETTER ED","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C87","lowercase_mapping":"","titlecase_mapping":"10C87","symbol":"\ud803\udcc7"},68808:{"value":"10CC8","name":"OLD HUNGARIAN SMALL LETTER AND","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C88","lowercase_mapping":"","titlecase_mapping":"10C88","symbol":"\ud803\udcc8"},68809:{"value":"10CC9","name":"OLD HUNGARIAN SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C89","lowercase_mapping":"","titlecase_mapping":"10C89","symbol":"\ud803\udcc9"},68810:{"value":"10CCA","name":"OLD HUNGARIAN SMALL LETTER CLOSE E","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C8A","lowercase_mapping":"","titlecase_mapping":"10C8A","symbol":"\ud803\udcca"},68811:{"value":"10CCB","name":"OLD HUNGARIAN SMALL LETTER EE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C8B","lowercase_mapping":"","titlecase_mapping":"10C8B","symbol":"\ud803\udccb"},68812:{"value":"10CCC","name":"OLD HUNGARIAN SMALL LETTER EF","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C8C","lowercase_mapping":"","titlecase_mapping":"10C8C","symbol":"\ud803\udccc"},68813:{"value":"10CCD","name":"OLD HUNGARIAN SMALL LETTER EG","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C8D","lowercase_mapping":"","titlecase_mapping":"10C8D","symbol":"\ud803\udccd"},68814:{"value":"10CCE","name":"OLD HUNGARIAN SMALL LETTER EGY","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C8E","lowercase_mapping":"","titlecase_mapping":"10C8E","symbol":"\ud803\udcce"},68815:{"value":"10CCF","name":"OLD HUNGARIAN SMALL LETTER EH","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C8F","lowercase_mapping":"","titlecase_mapping":"10C8F","symbol":"\ud803\udccf"},68816:{"value":"10CD0","name":"OLD HUNGARIAN SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C90","lowercase_mapping":"","titlecase_mapping":"10C90","symbol":"\ud803\udcd0"},68817:{"value":"10CD1","name":"OLD HUNGARIAN SMALL LETTER II","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C91","lowercase_mapping":"","titlecase_mapping":"10C91","symbol":"\ud803\udcd1"},68818:{"value":"10CD2","name":"OLD HUNGARIAN SMALL LETTER EJ","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C92","lowercase_mapping":"","titlecase_mapping":"10C92","symbol":"\ud803\udcd2"},68819:{"value":"10CD3","name":"OLD HUNGARIAN SMALL LETTER EK","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C93","lowercase_mapping":"","titlecase_mapping":"10C93","symbol":"\ud803\udcd3"},68820:{"value":"10CD4","name":"OLD HUNGARIAN SMALL LETTER AK","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C94","lowercase_mapping":"","titlecase_mapping":"10C94","symbol":"\ud803\udcd4"},68821:{"value":"10CD5","name":"OLD HUNGARIAN SMALL LETTER UNK","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C95","lowercase_mapping":"","titlecase_mapping":"10C95","symbol":"\ud803\udcd5"},68822:{"value":"10CD6","name":"OLD HUNGARIAN SMALL LETTER EL","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C96","lowercase_mapping":"","titlecase_mapping":"10C96","symbol":"\ud803\udcd6"},68823:{"value":"10CD7","name":"OLD HUNGARIAN SMALL LETTER ELY","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C97","lowercase_mapping":"","titlecase_mapping":"10C97","symbol":"\ud803\udcd7"},68824:{"value":"10CD8","name":"OLD HUNGARIAN SMALL LETTER EM","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C98","lowercase_mapping":"","titlecase_mapping":"10C98","symbol":"\ud803\udcd8"},68825:{"value":"10CD9","name":"OLD HUNGARIAN SMALL LETTER EN","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C99","lowercase_mapping":"","titlecase_mapping":"10C99","symbol":"\ud803\udcd9"},68826:{"value":"10CDA","name":"OLD HUNGARIAN SMALL LETTER ENY","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C9A","lowercase_mapping":"","titlecase_mapping":"10C9A","symbol":"\ud803\udcda"},68827:{"value":"10CDB","name":"OLD HUNGARIAN SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C9B","lowercase_mapping":"","titlecase_mapping":"10C9B","symbol":"\ud803\udcdb"},68828:{"value":"10CDC","name":"OLD HUNGARIAN SMALL LETTER OO","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C9C","lowercase_mapping":"","titlecase_mapping":"10C9C","symbol":"\ud803\udcdc"},68829:{"value":"10CDD","name":"OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C9D","lowercase_mapping":"","titlecase_mapping":"10C9D","symbol":"\ud803\udcdd"},68830:{"value":"10CDE","name":"OLD HUNGARIAN SMALL LETTER RUDIMENTA OE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C9E","lowercase_mapping":"","titlecase_mapping":"10C9E","symbol":"\ud803\udcde"},68831:{"value":"10CDF","name":"OLD HUNGARIAN SMALL LETTER OEE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10C9F","lowercase_mapping":"","titlecase_mapping":"10C9F","symbol":"\ud803\udcdf"},68832:{"value":"10CE0","name":"OLD HUNGARIAN SMALL LETTER EP","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA0","lowercase_mapping":"","titlecase_mapping":"10CA0","symbol":"\ud803\udce0"},68833:{"value":"10CE1","name":"OLD HUNGARIAN SMALL LETTER EMP","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA1","lowercase_mapping":"","titlecase_mapping":"10CA1","symbol":"\ud803\udce1"},68834:{"value":"10CE2","name":"OLD HUNGARIAN SMALL LETTER ER","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA2","lowercase_mapping":"","titlecase_mapping":"10CA2","symbol":"\ud803\udce2"},68835:{"value":"10CE3","name":"OLD HUNGARIAN SMALL LETTER SHORT ER","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA3","lowercase_mapping":"","titlecase_mapping":"10CA3","symbol":"\ud803\udce3"},68836:{"value":"10CE4","name":"OLD HUNGARIAN SMALL LETTER ES","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA4","lowercase_mapping":"","titlecase_mapping":"10CA4","symbol":"\ud803\udce4"},68837:{"value":"10CE5","name":"OLD HUNGARIAN SMALL LETTER ESZ","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA5","lowercase_mapping":"","titlecase_mapping":"10CA5","symbol":"\ud803\udce5"},68838:{"value":"10CE6","name":"OLD HUNGARIAN SMALL LETTER ET","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA6","lowercase_mapping":"","titlecase_mapping":"10CA6","symbol":"\ud803\udce6"},68839:{"value":"10CE7","name":"OLD HUNGARIAN SMALL LETTER ENT","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA7","lowercase_mapping":"","titlecase_mapping":"10CA7","symbol":"\ud803\udce7"},68840:{"value":"10CE8","name":"OLD HUNGARIAN SMALL LETTER ETY","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA8","lowercase_mapping":"","titlecase_mapping":"10CA8","symbol":"\ud803\udce8"},68841:{"value":"10CE9","name":"OLD HUNGARIAN SMALL LETTER ECH","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CA9","lowercase_mapping":"","titlecase_mapping":"10CA9","symbol":"\ud803\udce9"},68842:{"value":"10CEA","name":"OLD HUNGARIAN SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CAA","lowercase_mapping":"","titlecase_mapping":"10CAA","symbol":"\ud803\udcea"},68843:{"value":"10CEB","name":"OLD HUNGARIAN SMALL LETTER UU","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CAB","lowercase_mapping":"","titlecase_mapping":"10CAB","symbol":"\ud803\udceb"},68844:{"value":"10CEC","name":"OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CAC","lowercase_mapping":"","titlecase_mapping":"10CAC","symbol":"\ud803\udcec"},68845:{"value":"10CED","name":"OLD HUNGARIAN SMALL LETTER RUDIMENTA UE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CAD","lowercase_mapping":"","titlecase_mapping":"10CAD","symbol":"\ud803\udced"},68846:{"value":"10CEE","name":"OLD HUNGARIAN SMALL LETTER EV","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CAE","lowercase_mapping":"","titlecase_mapping":"10CAE","symbol":"\ud803\udcee"},68847:{"value":"10CEF","name":"OLD HUNGARIAN SMALL LETTER EZ","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CAF","lowercase_mapping":"","titlecase_mapping":"10CAF","symbol":"\ud803\udcef"},68848:{"value":"10CF0","name":"OLD HUNGARIAN SMALL LETTER EZS","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CB0","lowercase_mapping":"","titlecase_mapping":"10CB0","symbol":"\ud803\udcf0"},68849:{"value":"10CF1","name":"OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CB1","lowercase_mapping":"","titlecase_mapping":"10CB1","symbol":"\ud803\udcf1"},68850:{"value":"10CF2","name":"OLD HUNGARIAN SMALL LETTER US","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"10CB2","lowercase_mapping":"","titlecase_mapping":"10CB2","symbol":"\ud803\udcf2"},71872:{"value":"118C0","name":"WARANG CITI SMALL LETTER NGAA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A0","lowercase_mapping":"","titlecase_mapping":"118A0","symbol":"\ud806\udcc0"},71873:{"value":"118C1","name":"WARANG CITI SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A1","lowercase_mapping":"","titlecase_mapping":"118A1","symbol":"\ud806\udcc1"},71874:{"value":"118C2","name":"WARANG CITI SMALL LETTER WI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A2","lowercase_mapping":"","titlecase_mapping":"118A2","symbol":"\ud806\udcc2"},71875:{"value":"118C3","name":"WARANG CITI SMALL LETTER YU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A3","lowercase_mapping":"","titlecase_mapping":"118A3","symbol":"\ud806\udcc3"},71876:{"value":"118C4","name":"WARANG CITI SMALL LETTER YA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A4","lowercase_mapping":"","titlecase_mapping":"118A4","symbol":"\ud806\udcc4"},71877:{"value":"118C5","name":"WARANG CITI SMALL LETTER YO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A5","lowercase_mapping":"","titlecase_mapping":"118A5","symbol":"\ud806\udcc5"},71878:{"value":"118C6","name":"WARANG CITI SMALL LETTER II","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A6","lowercase_mapping":"","titlecase_mapping":"118A6","symbol":"\ud806\udcc6"},71879:{"value":"118C7","name":"WARANG CITI SMALL LETTER UU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A7","lowercase_mapping":"","titlecase_mapping":"118A7","symbol":"\ud806\udcc7"},71880:{"value":"118C8","name":"WARANG CITI SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A8","lowercase_mapping":"","titlecase_mapping":"118A8","symbol":"\ud806\udcc8"},71881:{"value":"118C9","name":"WARANG CITI SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118A9","lowercase_mapping":"","titlecase_mapping":"118A9","symbol":"\ud806\udcc9"},71882:{"value":"118CA","name":"WARANG CITI SMALL LETTER ANG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118AA","lowercase_mapping":"","titlecase_mapping":"118AA","symbol":"\ud806\udcca"},71883:{"value":"118CB","name":"WARANG CITI SMALL LETTER GA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118AB","lowercase_mapping":"","titlecase_mapping":"118AB","symbol":"\ud806\udccb"},71884:{"value":"118CC","name":"WARANG CITI SMALL LETTER KO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118AC","lowercase_mapping":"","titlecase_mapping":"118AC","symbol":"\ud806\udccc"},71885:{"value":"118CD","name":"WARANG CITI SMALL LETTER ENY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118AD","lowercase_mapping":"","titlecase_mapping":"118AD","symbol":"\ud806\udccd"},71886:{"value":"118CE","name":"WARANG CITI SMALL LETTER YUJ","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118AE","lowercase_mapping":"","titlecase_mapping":"118AE","symbol":"\ud806\udcce"},71887:{"value":"118CF","name":"WARANG CITI SMALL LETTER UC","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118AF","lowercase_mapping":"","titlecase_mapping":"118AF","symbol":"\ud806\udccf"},71888:{"value":"118D0","name":"WARANG CITI SMALL LETTER ENN","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B0","lowercase_mapping":"","titlecase_mapping":"118B0","symbol":"\ud806\udcd0"},71889:{"value":"118D1","name":"WARANG CITI SMALL LETTER ODD","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B1","lowercase_mapping":"","titlecase_mapping":"118B1","symbol":"\ud806\udcd1"},71890:{"value":"118D2","name":"WARANG CITI SMALL LETTER TTE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B2","lowercase_mapping":"","titlecase_mapping":"118B2","symbol":"\ud806\udcd2"},71891:{"value":"118D3","name":"WARANG CITI SMALL LETTER NUNG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B3","lowercase_mapping":"","titlecase_mapping":"118B3","symbol":"\ud806\udcd3"},71892:{"value":"118D4","name":"WARANG CITI SMALL LETTER DA","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B4","lowercase_mapping":"","titlecase_mapping":"118B4","symbol":"\ud806\udcd4"},71893:{"value":"118D5","name":"WARANG CITI SMALL LETTER AT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B5","lowercase_mapping":"","titlecase_mapping":"118B5","symbol":"\ud806\udcd5"},71894:{"value":"118D6","name":"WARANG CITI SMALL LETTER AM","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B6","lowercase_mapping":"","titlecase_mapping":"118B6","symbol":"\ud806\udcd6"},71895:{"value":"118D7","name":"WARANG CITI SMALL LETTER BU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B7","lowercase_mapping":"","titlecase_mapping":"118B7","symbol":"\ud806\udcd7"},71896:{"value":"118D8","name":"WARANG CITI SMALL LETTER PU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B8","lowercase_mapping":"","titlecase_mapping":"118B8","symbol":"\ud806\udcd8"},71897:{"value":"118D9","name":"WARANG CITI SMALL LETTER HIYO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118B9","lowercase_mapping":"","titlecase_mapping":"118B9","symbol":"\ud806\udcd9"},71898:{"value":"118DA","name":"WARANG CITI SMALL LETTER HOLO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118BA","lowercase_mapping":"","titlecase_mapping":"118BA","symbol":"\ud806\udcda"},71899:{"value":"118DB","name":"WARANG CITI SMALL LETTER HORR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118BB","lowercase_mapping":"","titlecase_mapping":"118BB","symbol":"\ud806\udcdb"},71900:{"value":"118DC","name":"WARANG CITI SMALL LETTER HAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118BC","lowercase_mapping":"","titlecase_mapping":"118BC","symbol":"\ud806\udcdc"},71901:{"value":"118DD","name":"WARANG CITI SMALL LETTER SSUU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118BD","lowercase_mapping":"","titlecase_mapping":"118BD","symbol":"\ud806\udcdd"},71902:{"value":"118DE","name":"WARANG CITI SMALL LETTER SII","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118BE","lowercase_mapping":"","titlecase_mapping":"118BE","symbol":"\ud806\udcde"},71903:{"value":"118DF","name":"WARANG CITI SMALL LETTER VIYO","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"118BF","lowercase_mapping":"","titlecase_mapping":"118BF","symbol":"\ud806\udcdf"},93792:{"value":"16E60","name":"MEDEFAIDRIN SMALL LETTER M","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E40","lowercase_mapping":"","titlecase_mapping":"16E40","symbol":"\ud81b\ude60"},93793:{"value":"16E61","name":"MEDEFAIDRIN SMALL LETTER S","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E41","lowercase_mapping":"","titlecase_mapping":"16E41","symbol":"\ud81b\ude61"},93794:{"value":"16E62","name":"MEDEFAIDRIN SMALL LETTER V","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E42","lowercase_mapping":"","titlecase_mapping":"16E42","symbol":"\ud81b\ude62"},93795:{"value":"16E63","name":"MEDEFAIDRIN SMALL LETTER W","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E43","lowercase_mapping":"","titlecase_mapping":"16E43","symbol":"\ud81b\ude63"},93796:{"value":"16E64","name":"MEDEFAIDRIN SMALL LETTER ATIU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E44","lowercase_mapping":"","titlecase_mapping":"16E44","symbol":"\ud81b\ude64"},93797:{"value":"16E65","name":"MEDEFAIDRIN SMALL LETTER Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E45","lowercase_mapping":"","titlecase_mapping":"16E45","symbol":"\ud81b\ude65"},93798:{"value":"16E66","name":"MEDEFAIDRIN SMALL LETTER KP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E46","lowercase_mapping":"","titlecase_mapping":"16E46","symbol":"\ud81b\ude66"},93799:{"value":"16E67","name":"MEDEFAIDRIN SMALL LETTER P","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E47","lowercase_mapping":"","titlecase_mapping":"16E47","symbol":"\ud81b\ude67"},93800:{"value":"16E68","name":"MEDEFAIDRIN SMALL LETTER T","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E48","lowercase_mapping":"","titlecase_mapping":"16E48","symbol":"\ud81b\ude68"},93801:{"value":"16E69","name":"MEDEFAIDRIN SMALL LETTER G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E49","lowercase_mapping":"","titlecase_mapping":"16E49","symbol":"\ud81b\ude69"},93802:{"value":"16E6A","name":"MEDEFAIDRIN SMALL LETTER F","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E4A","lowercase_mapping":"","titlecase_mapping":"16E4A","symbol":"\ud81b\ude6a"},93803:{"value":"16E6B","name":"MEDEFAIDRIN SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E4B","lowercase_mapping":"","titlecase_mapping":"16E4B","symbol":"\ud81b\ude6b"},93804:{"value":"16E6C","name":"MEDEFAIDRIN SMALL LETTER K","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E4C","lowercase_mapping":"","titlecase_mapping":"16E4C","symbol":"\ud81b\ude6c"},93805:{"value":"16E6D","name":"MEDEFAIDRIN SMALL LETTER A","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E4D","lowercase_mapping":"","titlecase_mapping":"16E4D","symbol":"\ud81b\ude6d"},93806:{"value":"16E6E","name":"MEDEFAIDRIN SMALL LETTER J","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E4E","lowercase_mapping":"","titlecase_mapping":"16E4E","symbol":"\ud81b\ude6e"},93807:{"value":"16E6F","name":"MEDEFAIDRIN SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E4F","lowercase_mapping":"","titlecase_mapping":"16E4F","symbol":"\ud81b\ude6f"},93808:{"value":"16E70","name":"MEDEFAIDRIN SMALL LETTER B","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E50","lowercase_mapping":"","titlecase_mapping":"16E50","symbol":"\ud81b\ude70"},93809:{"value":"16E71","name":"MEDEFAIDRIN SMALL LETTER C","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E51","lowercase_mapping":"","titlecase_mapping":"16E51","symbol":"\ud81b\ude71"},93810:{"value":"16E72","name":"MEDEFAIDRIN SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E52","lowercase_mapping":"","titlecase_mapping":"16E52","symbol":"\ud81b\ude72"},93811:{"value":"16E73","name":"MEDEFAIDRIN SMALL LETTER YU","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E53","lowercase_mapping":"","titlecase_mapping":"16E53","symbol":"\ud81b\ude73"},93812:{"value":"16E74","name":"MEDEFAIDRIN SMALL LETTER L","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E54","lowercase_mapping":"","titlecase_mapping":"16E54","symbol":"\ud81b\ude74"},93813:{"value":"16E75","name":"MEDEFAIDRIN SMALL LETTER Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E55","lowercase_mapping":"","titlecase_mapping":"16E55","symbol":"\ud81b\ude75"},93814:{"value":"16E76","name":"MEDEFAIDRIN SMALL LETTER HP","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E56","lowercase_mapping":"","titlecase_mapping":"16E56","symbol":"\ud81b\ude76"},93815:{"value":"16E77","name":"MEDEFAIDRIN SMALL LETTER NY","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E57","lowercase_mapping":"","titlecase_mapping":"16E57","symbol":"\ud81b\ude77"},93816:{"value":"16E78","name":"MEDEFAIDRIN SMALL LETTER X","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E58","lowercase_mapping":"","titlecase_mapping":"16E58","symbol":"\ud81b\ude78"},93817:{"value":"16E79","name":"MEDEFAIDRIN SMALL LETTER D","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E59","lowercase_mapping":"","titlecase_mapping":"16E59","symbol":"\ud81b\ude79"},93818:{"value":"16E7A","name":"MEDEFAIDRIN SMALL LETTER OE","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E5A","lowercase_mapping":"","titlecase_mapping":"16E5A","symbol":"\ud81b\ude7a"},93819:{"value":"16E7B","name":"MEDEFAIDRIN SMALL LETTER N","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E5B","lowercase_mapping":"","titlecase_mapping":"16E5B","symbol":"\ud81b\ude7b"},93820:{"value":"16E7C","name":"MEDEFAIDRIN SMALL LETTER R","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E5C","lowercase_mapping":"","titlecase_mapping":"16E5C","symbol":"\ud81b\ude7c"},93821:{"value":"16E7D","name":"MEDEFAIDRIN SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E5D","lowercase_mapping":"","titlecase_mapping":"16E5D","symbol":"\ud81b\ude7d"},93822:{"value":"16E7E","name":"MEDEFAIDRIN SMALL LETTER AI","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E5E","lowercase_mapping":"","titlecase_mapping":"16E5E","symbol":"\ud81b\ude7e"},93823:{"value":"16E7F","name":"MEDEFAIDRIN SMALL LETTER Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"16E5F","lowercase_mapping":"","titlecase_mapping":"16E5F","symbol":"\ud81b\ude7f"},119834:{"value":"1D41A","name":"MATHEMATICAL BOLD SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc1a"},119835:{"value":"1D41B","name":"MATHEMATICAL BOLD SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc1b"},119836:{"value":"1D41C","name":"MATHEMATICAL BOLD SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc1c"},119837:{"value":"1D41D","name":"MATHEMATICAL BOLD SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc1d"},119838:{"value":"1D41E","name":"MATHEMATICAL BOLD SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc1e"},119839:{"value":"1D41F","name":"MATHEMATICAL BOLD SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc1f"},119840:{"value":"1D420","name":"MATHEMATICAL BOLD SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc20"},119841:{"value":"1D421","name":"MATHEMATICAL BOLD SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc21"},119842:{"value":"1D422","name":"MATHEMATICAL BOLD SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc22"},119843:{"value":"1D423","name":"MATHEMATICAL BOLD SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc23"},119844:{"value":"1D424","name":"MATHEMATICAL BOLD SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc24"},119845:{"value":"1D425","name":"MATHEMATICAL BOLD SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc25"},119846:{"value":"1D426","name":"MATHEMATICAL BOLD SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc26"},119847:{"value":"1D427","name":"MATHEMATICAL BOLD SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc27"},119848:{"value":"1D428","name":"MATHEMATICAL BOLD SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc28"},119849:{"value":"1D429","name":"MATHEMATICAL BOLD SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc29"},119850:{"value":"1D42A","name":"MATHEMATICAL BOLD SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc2a"},119851:{"value":"1D42B","name":"MATHEMATICAL BOLD SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc2b"},119852:{"value":"1D42C","name":"MATHEMATICAL BOLD SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc2c"},119853:{"value":"1D42D","name":"MATHEMATICAL BOLD SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc2d"},119854:{"value":"1D42E","name":"MATHEMATICAL BOLD SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc2e"},119855:{"value":"1D42F","name":"MATHEMATICAL BOLD SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc2f"},119856:{"value":"1D430","name":"MATHEMATICAL BOLD SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc30"},119857:{"value":"1D431","name":"MATHEMATICAL BOLD SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc31"},119858:{"value":"1D432","name":"MATHEMATICAL BOLD SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc32"},119859:{"value":"1D433","name":"MATHEMATICAL BOLD SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc33"},119886:{"value":"1D44E","name":"MATHEMATICAL ITALIC SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc4e"},119887:{"value":"1D44F","name":"MATHEMATICAL ITALIC SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc4f"},119888:{"value":"1D450","name":"MATHEMATICAL ITALIC SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc50"},119889:{"value":"1D451","name":"MATHEMATICAL ITALIC SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc51"},119890:{"value":"1D452","name":"MATHEMATICAL ITALIC SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc52"},119891:{"value":"1D453","name":"MATHEMATICAL ITALIC SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc53"},119892:{"value":"1D454","name":"MATHEMATICAL ITALIC SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc54"},119894:{"value":"1D456","name":"MATHEMATICAL ITALIC SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc56"},119895:{"value":"1D457","name":"MATHEMATICAL ITALIC SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc57"},119896:{"value":"1D458","name":"MATHEMATICAL ITALIC SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc58"},119897:{"value":"1D459","name":"MATHEMATICAL ITALIC SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc59"},119898:{"value":"1D45A","name":"MATHEMATICAL ITALIC SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc5a"},119899:{"value":"1D45B","name":"MATHEMATICAL ITALIC SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc5b"},119900:{"value":"1D45C","name":"MATHEMATICAL ITALIC SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc5c"},119901:{"value":"1D45D","name":"MATHEMATICAL ITALIC SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc5d"},119902:{"value":"1D45E","name":"MATHEMATICAL ITALIC SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc5e"},119903:{"value":"1D45F","name":"MATHEMATICAL ITALIC SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc5f"},119904:{"value":"1D460","name":"MATHEMATICAL ITALIC SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc60"},119905:{"value":"1D461","name":"MATHEMATICAL ITALIC SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc61"},119906:{"value":"1D462","name":"MATHEMATICAL ITALIC SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc62"},119907:{"value":"1D463","name":"MATHEMATICAL ITALIC SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc63"},119908:{"value":"1D464","name":"MATHEMATICAL ITALIC SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc64"},119909:{"value":"1D465","name":"MATHEMATICAL ITALIC SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc65"},119910:{"value":"1D466","name":"MATHEMATICAL ITALIC SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc66"},119911:{"value":"1D467","name":"MATHEMATICAL ITALIC SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc67"},119938:{"value":"1D482","name":"MATHEMATICAL BOLD ITALIC SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc82"},119939:{"value":"1D483","name":"MATHEMATICAL BOLD ITALIC SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc83"},119940:{"value":"1D484","name":"MATHEMATICAL BOLD ITALIC SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc84"},119941:{"value":"1D485","name":"MATHEMATICAL BOLD ITALIC SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc85"},119942:{"value":"1D486","name":"MATHEMATICAL BOLD ITALIC SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc86"},119943:{"value":"1D487","name":"MATHEMATICAL BOLD ITALIC SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc87"},119944:{"value":"1D488","name":"MATHEMATICAL BOLD ITALIC SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc88"},119945:{"value":"1D489","name":"MATHEMATICAL BOLD ITALIC SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc89"},119946:{"value":"1D48A","name":"MATHEMATICAL BOLD ITALIC SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc8a"},119947:{"value":"1D48B","name":"MATHEMATICAL BOLD ITALIC SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc8b"},119948:{"value":"1D48C","name":"MATHEMATICAL BOLD ITALIC SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc8c"},119949:{"value":"1D48D","name":"MATHEMATICAL BOLD ITALIC SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc8d"},119950:{"value":"1D48E","name":"MATHEMATICAL BOLD ITALIC SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc8e"},119951:{"value":"1D48F","name":"MATHEMATICAL BOLD ITALIC SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc8f"},119952:{"value":"1D490","name":"MATHEMATICAL BOLD ITALIC SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc90"},119953:{"value":"1D491","name":"MATHEMATICAL BOLD ITALIC SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc91"},119954:{"value":"1D492","name":"MATHEMATICAL BOLD ITALIC SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc92"},119955:{"value":"1D493","name":"MATHEMATICAL BOLD ITALIC SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc93"},119956:{"value":"1D494","name":"MATHEMATICAL BOLD ITALIC SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc94"},119957:{"value":"1D495","name":"MATHEMATICAL BOLD ITALIC SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc95"},119958:{"value":"1D496","name":"MATHEMATICAL BOLD ITALIC SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc96"},119959:{"value":"1D497","name":"MATHEMATICAL BOLD ITALIC SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc97"},119960:{"value":"1D498","name":"MATHEMATICAL BOLD ITALIC SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc98"},119961:{"value":"1D499","name":"MATHEMATICAL BOLD ITALIC SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc99"},119962:{"value":"1D49A","name":"MATHEMATICAL BOLD ITALIC SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc9a"},119963:{"value":"1D49B","name":"MATHEMATICAL BOLD ITALIC SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc9b"},119990:{"value":"1D4B6","name":"MATHEMATICAL SCRIPT SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb6"},119991:{"value":"1D4B7","name":"MATHEMATICAL SCRIPT SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb7"},119992:{"value":"1D4B8","name":"MATHEMATICAL SCRIPT SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb8"},119993:{"value":"1D4B9","name":"MATHEMATICAL SCRIPT SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb9"},119995:{"value":"1D4BB","name":"MATHEMATICAL SCRIPT SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcbb"},119997:{"value":"1D4BD","name":"MATHEMATICAL SCRIPT SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcbd"},119998:{"value":"1D4BE","name":"MATHEMATICAL SCRIPT SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcbe"},119999:{"value":"1D4BF","name":"MATHEMATICAL SCRIPT SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcbf"},120000:{"value":"1D4C0","name":"MATHEMATICAL SCRIPT SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc0"},120001:{"value":"1D4C1","name":"MATHEMATICAL SCRIPT SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc1"},120002:{"value":"1D4C2","name":"MATHEMATICAL SCRIPT SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc2"},120003:{"value":"1D4C3","name":"MATHEMATICAL SCRIPT SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc3"},120005:{"value":"1D4C5","name":"MATHEMATICAL SCRIPT SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc5"},120006:{"value":"1D4C6","name":"MATHEMATICAL SCRIPT SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc6"},120007:{"value":"1D4C7","name":"MATHEMATICAL SCRIPT SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc7"},120008:{"value":"1D4C8","name":"MATHEMATICAL SCRIPT SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc8"},120009:{"value":"1D4C9","name":"MATHEMATICAL SCRIPT SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcc9"},120010:{"value":"1D4CA","name":"MATHEMATICAL SCRIPT SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcca"},120011:{"value":"1D4CB","name":"MATHEMATICAL SCRIPT SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udccb"},120012:{"value":"1D4CC","name":"MATHEMATICAL SCRIPT SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udccc"},120013:{"value":"1D4CD","name":"MATHEMATICAL SCRIPT SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udccd"},120014:{"value":"1D4CE","name":"MATHEMATICAL SCRIPT SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcce"},120015:{"value":"1D4CF","name":"MATHEMATICAL SCRIPT SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udccf"},120042:{"value":"1D4EA","name":"MATHEMATICAL BOLD SCRIPT SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcea"},120043:{"value":"1D4EB","name":"MATHEMATICAL BOLD SCRIPT SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udceb"},120044:{"value":"1D4EC","name":"MATHEMATICAL BOLD SCRIPT SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcec"},120045:{"value":"1D4ED","name":"MATHEMATICAL BOLD SCRIPT SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udced"},120046:{"value":"1D4EE","name":"MATHEMATICAL BOLD SCRIPT SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcee"},120047:{"value":"1D4EF","name":"MATHEMATICAL BOLD SCRIPT SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcef"},120048:{"value":"1D4F0","name":"MATHEMATICAL BOLD SCRIPT SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf0"},120049:{"value":"1D4F1","name":"MATHEMATICAL BOLD SCRIPT SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf1"},120050:{"value":"1D4F2","name":"MATHEMATICAL BOLD SCRIPT SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf2"},120051:{"value":"1D4F3","name":"MATHEMATICAL BOLD SCRIPT SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf3"},120052:{"value":"1D4F4","name":"MATHEMATICAL BOLD SCRIPT SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf4"},120053:{"value":"1D4F5","name":"MATHEMATICAL BOLD SCRIPT SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf5"},120054:{"value":"1D4F6","name":"MATHEMATICAL BOLD SCRIPT SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf6"},120055:{"value":"1D4F7","name":"MATHEMATICAL BOLD SCRIPT SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf7"},120056:{"value":"1D4F8","name":"MATHEMATICAL BOLD SCRIPT SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf8"},120057:{"value":"1D4F9","name":"MATHEMATICAL BOLD SCRIPT SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcf9"},120058:{"value":"1D4FA","name":"MATHEMATICAL BOLD SCRIPT SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcfa"},120059:{"value":"1D4FB","name":"MATHEMATICAL BOLD SCRIPT SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcfb"},120060:{"value":"1D4FC","name":"MATHEMATICAL BOLD SCRIPT SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcfc"},120061:{"value":"1D4FD","name":"MATHEMATICAL BOLD SCRIPT SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcfd"},120062:{"value":"1D4FE","name":"MATHEMATICAL BOLD SCRIPT SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcfe"},120063:{"value":"1D4FF","name":"MATHEMATICAL BOLD SCRIPT SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcff"},120064:{"value":"1D500","name":"MATHEMATICAL BOLD SCRIPT SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd00"},120065:{"value":"1D501","name":"MATHEMATICAL BOLD SCRIPT SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd01"},120066:{"value":"1D502","name":"MATHEMATICAL BOLD SCRIPT SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd02"},120067:{"value":"1D503","name":"MATHEMATICAL BOLD SCRIPT SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd03"},120094:{"value":"1D51E","name":"MATHEMATICAL FRAKTUR SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd1e"},120095:{"value":"1D51F","name":"MATHEMATICAL FRAKTUR SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd1f"},120096:{"value":"1D520","name":"MATHEMATICAL FRAKTUR SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd20"},120097:{"value":"1D521","name":"MATHEMATICAL FRAKTUR SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd21"},120098:{"value":"1D522","name":"MATHEMATICAL FRAKTUR SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd22"},120099:{"value":"1D523","name":"MATHEMATICAL FRAKTUR SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd23"},120100:{"value":"1D524","name":"MATHEMATICAL FRAKTUR SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd24"},120101:{"value":"1D525","name":"MATHEMATICAL FRAKTUR SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd25"},120102:{"value":"1D526","name":"MATHEMATICAL FRAKTUR SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd26"},120103:{"value":"1D527","name":"MATHEMATICAL FRAKTUR SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd27"},120104:{"value":"1D528","name":"MATHEMATICAL FRAKTUR SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd28"},120105:{"value":"1D529","name":"MATHEMATICAL FRAKTUR SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd29"},120106:{"value":"1D52A","name":"MATHEMATICAL FRAKTUR SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd2a"},120107:{"value":"1D52B","name":"MATHEMATICAL FRAKTUR SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd2b"},120108:{"value":"1D52C","name":"MATHEMATICAL FRAKTUR SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd2c"},120109:{"value":"1D52D","name":"MATHEMATICAL FRAKTUR SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd2d"},120110:{"value":"1D52E","name":"MATHEMATICAL FRAKTUR SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd2e"},120111:{"value":"1D52F","name":"MATHEMATICAL FRAKTUR SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd2f"},120112:{"value":"1D530","name":"MATHEMATICAL FRAKTUR SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd30"},120113:{"value":"1D531","name":"MATHEMATICAL FRAKTUR SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd31"},120114:{"value":"1D532","name":"MATHEMATICAL FRAKTUR SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd32"},120115:{"value":"1D533","name":"MATHEMATICAL FRAKTUR SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd33"},120116:{"value":"1D534","name":"MATHEMATICAL FRAKTUR SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd34"},120117:{"value":"1D535","name":"MATHEMATICAL FRAKTUR SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd35"},120118:{"value":"1D536","name":"MATHEMATICAL FRAKTUR SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd36"},120119:{"value":"1D537","name":"MATHEMATICAL FRAKTUR SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd37"},120146:{"value":"1D552","name":"MATHEMATICAL DOUBLE-STRUCK SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd52"},120147:{"value":"1D553","name":"MATHEMATICAL DOUBLE-STRUCK SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd53"},120148:{"value":"1D554","name":"MATHEMATICAL DOUBLE-STRUCK SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd54"},120149:{"value":"1D555","name":"MATHEMATICAL DOUBLE-STRUCK SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd55"},120150:{"value":"1D556","name":"MATHEMATICAL DOUBLE-STRUCK SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd56"},120151:{"value":"1D557","name":"MATHEMATICAL DOUBLE-STRUCK SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd57"},120152:{"value":"1D558","name":"MATHEMATICAL DOUBLE-STRUCK SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd58"},120153:{"value":"1D559","name":"MATHEMATICAL DOUBLE-STRUCK SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd59"},120154:{"value":"1D55A","name":"MATHEMATICAL DOUBLE-STRUCK SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd5a"},120155:{"value":"1D55B","name":"MATHEMATICAL DOUBLE-STRUCK SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd5b"},120156:{"value":"1D55C","name":"MATHEMATICAL DOUBLE-STRUCK SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd5c"},120157:{"value":"1D55D","name":"MATHEMATICAL DOUBLE-STRUCK SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd5d"},120158:{"value":"1D55E","name":"MATHEMATICAL DOUBLE-STRUCK SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd5e"},120159:{"value":"1D55F","name":"MATHEMATICAL DOUBLE-STRUCK SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd5f"},120160:{"value":"1D560","name":"MATHEMATICAL DOUBLE-STRUCK SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd60"},120161:{"value":"1D561","name":"MATHEMATICAL DOUBLE-STRUCK SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd61"},120162:{"value":"1D562","name":"MATHEMATICAL DOUBLE-STRUCK SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd62"},120163:{"value":"1D563","name":"MATHEMATICAL DOUBLE-STRUCK SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd63"},120164:{"value":"1D564","name":"MATHEMATICAL DOUBLE-STRUCK SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd64"},120165:{"value":"1D565","name":"MATHEMATICAL DOUBLE-STRUCK SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd65"},120166:{"value":"1D566","name":"MATHEMATICAL DOUBLE-STRUCK SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd66"},120167:{"value":"1D567","name":"MATHEMATICAL DOUBLE-STRUCK SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd67"},120168:{"value":"1D568","name":"MATHEMATICAL DOUBLE-STRUCK SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd68"},120169:{"value":"1D569","name":"MATHEMATICAL DOUBLE-STRUCK SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd69"},120170:{"value":"1D56A","name":"MATHEMATICAL DOUBLE-STRUCK SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd6a"},120171:{"value":"1D56B","name":"MATHEMATICAL DOUBLE-STRUCK SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd6b"},120198:{"value":"1D586","name":"MATHEMATICAL BOLD FRAKTUR SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd86"},120199:{"value":"1D587","name":"MATHEMATICAL BOLD FRAKTUR SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd87"},120200:{"value":"1D588","name":"MATHEMATICAL BOLD FRAKTUR SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd88"},120201:{"value":"1D589","name":"MATHEMATICAL BOLD FRAKTUR SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd89"},120202:{"value":"1D58A","name":"MATHEMATICAL BOLD FRAKTUR SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd8a"},120203:{"value":"1D58B","name":"MATHEMATICAL BOLD FRAKTUR SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd8b"},120204:{"value":"1D58C","name":"MATHEMATICAL BOLD FRAKTUR SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd8c"},120205:{"value":"1D58D","name":"MATHEMATICAL BOLD FRAKTUR SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd8d"},120206:{"value":"1D58E","name":"MATHEMATICAL BOLD FRAKTUR SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd8e"},120207:{"value":"1D58F","name":"MATHEMATICAL BOLD FRAKTUR SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd8f"},120208:{"value":"1D590","name":"MATHEMATICAL BOLD FRAKTUR SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd90"},120209:{"value":"1D591","name":"MATHEMATICAL BOLD FRAKTUR SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd91"},120210:{"value":"1D592","name":"MATHEMATICAL BOLD FRAKTUR SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd92"},120211:{"value":"1D593","name":"MATHEMATICAL BOLD FRAKTUR SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd93"},120212:{"value":"1D594","name":"MATHEMATICAL BOLD FRAKTUR SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd94"},120213:{"value":"1D595","name":"MATHEMATICAL BOLD FRAKTUR SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd95"},120214:{"value":"1D596","name":"MATHEMATICAL BOLD FRAKTUR SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd96"},120215:{"value":"1D597","name":"MATHEMATICAL BOLD FRAKTUR SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd97"},120216:{"value":"1D598","name":"MATHEMATICAL BOLD FRAKTUR SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd98"},120217:{"value":"1D599","name":"MATHEMATICAL BOLD FRAKTUR SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd99"},120218:{"value":"1D59A","name":"MATHEMATICAL BOLD FRAKTUR SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd9a"},120219:{"value":"1D59B","name":"MATHEMATICAL BOLD FRAKTUR SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd9b"},120220:{"value":"1D59C","name":"MATHEMATICAL BOLD FRAKTUR SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd9c"},120221:{"value":"1D59D","name":"MATHEMATICAL BOLD FRAKTUR SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd9d"},120222:{"value":"1D59E","name":"MATHEMATICAL BOLD FRAKTUR SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd9e"},120223:{"value":"1D59F","name":"MATHEMATICAL BOLD FRAKTUR SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd9f"},120250:{"value":"1D5BA","name":"MATHEMATICAL SANS-SERIF SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddba"},120251:{"value":"1D5BB","name":"MATHEMATICAL SANS-SERIF SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddbb"},120252:{"value":"1D5BC","name":"MATHEMATICAL SANS-SERIF SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddbc"},120253:{"value":"1D5BD","name":"MATHEMATICAL SANS-SERIF SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddbd"},120254:{"value":"1D5BE","name":"MATHEMATICAL SANS-SERIF SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddbe"},120255:{"value":"1D5BF","name":"MATHEMATICAL SANS-SERIF SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddbf"},120256:{"value":"1D5C0","name":"MATHEMATICAL SANS-SERIF SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc0"},120257:{"value":"1D5C1","name":"MATHEMATICAL SANS-SERIF SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc1"},120258:{"value":"1D5C2","name":"MATHEMATICAL SANS-SERIF SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc2"},120259:{"value":"1D5C3","name":"MATHEMATICAL SANS-SERIF SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc3"},120260:{"value":"1D5C4","name":"MATHEMATICAL SANS-SERIF SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc4"},120261:{"value":"1D5C5","name":"MATHEMATICAL SANS-SERIF SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc5"},120262:{"value":"1D5C6","name":"MATHEMATICAL SANS-SERIF SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc6"},120263:{"value":"1D5C7","name":"MATHEMATICAL SANS-SERIF SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc7"},120264:{"value":"1D5C8","name":"MATHEMATICAL SANS-SERIF SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc8"},120265:{"value":"1D5C9","name":"MATHEMATICAL SANS-SERIF SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddc9"},120266:{"value":"1D5CA","name":"MATHEMATICAL SANS-SERIF SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddca"},120267:{"value":"1D5CB","name":"MATHEMATICAL SANS-SERIF SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddcb"},120268:{"value":"1D5CC","name":"MATHEMATICAL SANS-SERIF SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddcc"},120269:{"value":"1D5CD","name":"MATHEMATICAL SANS-SERIF SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddcd"},120270:{"value":"1D5CE","name":"MATHEMATICAL SANS-SERIF SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddce"},120271:{"value":"1D5CF","name":"MATHEMATICAL SANS-SERIF SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddcf"},120272:{"value":"1D5D0","name":"MATHEMATICAL SANS-SERIF SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd0"},120273:{"value":"1D5D1","name":"MATHEMATICAL SANS-SERIF SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd1"},120274:{"value":"1D5D2","name":"MATHEMATICAL SANS-SERIF SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd2"},120275:{"value":"1D5D3","name":"MATHEMATICAL SANS-SERIF SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd3"},120302:{"value":"1D5EE","name":"MATHEMATICAL SANS-SERIF BOLD SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddee"},120303:{"value":"1D5EF","name":"MATHEMATICAL SANS-SERIF BOLD SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddef"},120304:{"value":"1D5F0","name":"MATHEMATICAL SANS-SERIF BOLD SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf0"},120305:{"value":"1D5F1","name":"MATHEMATICAL SANS-SERIF BOLD SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf1"},120306:{"value":"1D5F2","name":"MATHEMATICAL SANS-SERIF BOLD SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf2"},120307:{"value":"1D5F3","name":"MATHEMATICAL SANS-SERIF BOLD SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf3"},120308:{"value":"1D5F4","name":"MATHEMATICAL SANS-SERIF BOLD SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf4"},120309:{"value":"1D5F5","name":"MATHEMATICAL SANS-SERIF BOLD SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf5"},120310:{"value":"1D5F6","name":"MATHEMATICAL SANS-SERIF BOLD SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf6"},120311:{"value":"1D5F7","name":"MATHEMATICAL SANS-SERIF BOLD SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf7"},120312:{"value":"1D5F8","name":"MATHEMATICAL SANS-SERIF BOLD SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf8"},120313:{"value":"1D5F9","name":"MATHEMATICAL SANS-SERIF BOLD SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddf9"},120314:{"value":"1D5FA","name":"MATHEMATICAL SANS-SERIF BOLD SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddfa"},120315:{"value":"1D5FB","name":"MATHEMATICAL SANS-SERIF BOLD SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddfb"},120316:{"value":"1D5FC","name":"MATHEMATICAL SANS-SERIF BOLD SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddfc"},120317:{"value":"1D5FD","name":"MATHEMATICAL SANS-SERIF BOLD SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddfd"},120318:{"value":"1D5FE","name":"MATHEMATICAL SANS-SERIF BOLD SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddfe"},120319:{"value":"1D5FF","name":"MATHEMATICAL SANS-SERIF BOLD SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddff"},120320:{"value":"1D600","name":"MATHEMATICAL SANS-SERIF BOLD SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude00"},120321:{"value":"1D601","name":"MATHEMATICAL SANS-SERIF BOLD SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude01"},120322:{"value":"1D602","name":"MATHEMATICAL SANS-SERIF BOLD SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude02"},120323:{"value":"1D603","name":"MATHEMATICAL SANS-SERIF BOLD SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude03"},120324:{"value":"1D604","name":"MATHEMATICAL SANS-SERIF BOLD SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude04"},120325:{"value":"1D605","name":"MATHEMATICAL SANS-SERIF BOLD SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude05"},120326:{"value":"1D606","name":"MATHEMATICAL SANS-SERIF BOLD SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude06"},120327:{"value":"1D607","name":"MATHEMATICAL SANS-SERIF BOLD SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude07"},120354:{"value":"1D622","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude22"},120355:{"value":"1D623","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude23"},120356:{"value":"1D624","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude24"},120357:{"value":"1D625","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude25"},120358:{"value":"1D626","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude26"},120359:{"value":"1D627","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude27"},120360:{"value":"1D628","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude28"},120361:{"value":"1D629","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude29"},120362:{"value":"1D62A","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude2a"},120363:{"value":"1D62B","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude2b"},120364:{"value":"1D62C","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude2c"},120365:{"value":"1D62D","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude2d"},120366:{"value":"1D62E","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude2e"},120367:{"value":"1D62F","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude2f"},120368:{"value":"1D630","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude30"},120369:{"value":"1D631","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude31"},120370:{"value":"1D632","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude32"},120371:{"value":"1D633","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude33"},120372:{"value":"1D634","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude34"},120373:{"value":"1D635","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude35"},120374:{"value":"1D636","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude36"},120375:{"value":"1D637","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude37"},120376:{"value":"1D638","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude38"},120377:{"value":"1D639","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude39"},120378:{"value":"1D63A","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude3a"},120379:{"value":"1D63B","name":"MATHEMATICAL SANS-SERIF ITALIC SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude3b"},120406:{"value":"1D656","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude56"},120407:{"value":"1D657","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude57"},120408:{"value":"1D658","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude58"},120409:{"value":"1D659","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude59"},120410:{"value":"1D65A","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude5a"},120411:{"value":"1D65B","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude5b"},120412:{"value":"1D65C","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude5c"},120413:{"value":"1D65D","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude5d"},120414:{"value":"1D65E","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude5e"},120415:{"value":"1D65F","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude5f"},120416:{"value":"1D660","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude60"},120417:{"value":"1D661","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude61"},120418:{"value":"1D662","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude62"},120419:{"value":"1D663","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude63"},120420:{"value":"1D664","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude64"},120421:{"value":"1D665","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude65"},120422:{"value":"1D666","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude66"},120423:{"value":"1D667","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude67"},120424:{"value":"1D668","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude68"},120425:{"value":"1D669","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude69"},120426:{"value":"1D66A","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude6a"},120427:{"value":"1D66B","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude6b"},120428:{"value":"1D66C","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude6c"},120429:{"value":"1D66D","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude6d"},120430:{"value":"1D66E","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude6e"},120431:{"value":"1D66F","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude6f"},120458:{"value":"1D68A","name":"MATHEMATICAL MONOSPACE SMALL A","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude8a"},120459:{"value":"1D68B","name":"MATHEMATICAL MONOSPACE SMALL B","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude8b"},120460:{"value":"1D68C","name":"MATHEMATICAL MONOSPACE SMALL C","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude8c"},120461:{"value":"1D68D","name":"MATHEMATICAL MONOSPACE SMALL D","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude8d"},120462:{"value":"1D68E","name":"MATHEMATICAL MONOSPACE SMALL E","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude8e"},120463:{"value":"1D68F","name":"MATHEMATICAL MONOSPACE SMALL F","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude8f"},120464:{"value":"1D690","name":"MATHEMATICAL MONOSPACE SMALL G","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude90"},120465:{"value":"1D691","name":"MATHEMATICAL MONOSPACE SMALL H","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude91"},120466:{"value":"1D692","name":"MATHEMATICAL MONOSPACE SMALL I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude92"},120467:{"value":"1D693","name":"MATHEMATICAL MONOSPACE SMALL J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude93"},120468:{"value":"1D694","name":"MATHEMATICAL MONOSPACE SMALL K","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude94"},120469:{"value":"1D695","name":"MATHEMATICAL MONOSPACE SMALL L","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude95"},120470:{"value":"1D696","name":"MATHEMATICAL MONOSPACE SMALL M","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude96"},120471:{"value":"1D697","name":"MATHEMATICAL MONOSPACE SMALL N","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude97"},120472:{"value":"1D698","name":"MATHEMATICAL MONOSPACE SMALL O","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude98"},120473:{"value":"1D699","name":"MATHEMATICAL MONOSPACE SMALL P","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude99"},120474:{"value":"1D69A","name":"MATHEMATICAL MONOSPACE SMALL Q","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude9a"},120475:{"value":"1D69B","name":"MATHEMATICAL MONOSPACE SMALL R","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude9b"},120476:{"value":"1D69C","name":"MATHEMATICAL MONOSPACE SMALL S","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude9c"},120477:{"value":"1D69D","name":"MATHEMATICAL MONOSPACE SMALL T","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude9d"},120478:{"value":"1D69E","name":"MATHEMATICAL MONOSPACE SMALL U","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude9e"},120479:{"value":"1D69F","name":"MATHEMATICAL MONOSPACE SMALL V","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude9f"},120480:{"value":"1D6A0","name":"MATHEMATICAL MONOSPACE SMALL W","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea0"},120481:{"value":"1D6A1","name":"MATHEMATICAL MONOSPACE SMALL X","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea1"},120482:{"value":"1D6A2","name":"MATHEMATICAL MONOSPACE SMALL Y","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea2"},120483:{"value":"1D6A3","name":"MATHEMATICAL MONOSPACE SMALL Z","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea3"},120484:{"value":"1D6A4","name":"MATHEMATICAL ITALIC SMALL DOTLESS I","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0131","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea4"},120485:{"value":"1D6A5","name":"MATHEMATICAL ITALIC SMALL DOTLESS J","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 0237","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea5"},120514:{"value":"1D6C2","name":"MATHEMATICAL BOLD SMALL ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec2"},120515:{"value":"1D6C3","name":"MATHEMATICAL BOLD SMALL BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec3"},120516:{"value":"1D6C4","name":"MATHEMATICAL BOLD SMALL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec4"},120517:{"value":"1D6C5","name":"MATHEMATICAL BOLD SMALL DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec5"},120518:{"value":"1D6C6","name":"MATHEMATICAL BOLD SMALL EPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec6"},120519:{"value":"1D6C7","name":"MATHEMATICAL BOLD SMALL ZETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec7"},120520:{"value":"1D6C8","name":"MATHEMATICAL BOLD SMALL ETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec8"},120521:{"value":"1D6C9","name":"MATHEMATICAL BOLD SMALL THETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec9"},120522:{"value":"1D6CA","name":"MATHEMATICAL BOLD SMALL IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeca"},120523:{"value":"1D6CB","name":"MATHEMATICAL BOLD SMALL KAPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udecb"},120524:{"value":"1D6CC","name":"MATHEMATICAL BOLD SMALL LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udecc"},120525:{"value":"1D6CD","name":"MATHEMATICAL BOLD SMALL MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udecd"},120526:{"value":"1D6CE","name":"MATHEMATICAL BOLD SMALL NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udece"},120527:{"value":"1D6CF","name":"MATHEMATICAL BOLD SMALL XI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udecf"},120528:{"value":"1D6D0","name":"MATHEMATICAL BOLD SMALL OMICRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded0"},120529:{"value":"1D6D1","name":"MATHEMATICAL BOLD SMALL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded1"},120530:{"value":"1D6D2","name":"MATHEMATICAL BOLD SMALL RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded2"},120531:{"value":"1D6D3","name":"MATHEMATICAL BOLD SMALL FINAL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded3"},120532:{"value":"1D6D4","name":"MATHEMATICAL BOLD SMALL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded4"},120533:{"value":"1D6D5","name":"MATHEMATICAL BOLD SMALL TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded5"},120534:{"value":"1D6D6","name":"MATHEMATICAL BOLD SMALL UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded6"},120535:{"value":"1D6D7","name":"MATHEMATICAL BOLD SMALL PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded7"},120536:{"value":"1D6D8","name":"MATHEMATICAL BOLD SMALL CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded8"},120537:{"value":"1D6D9","name":"MATHEMATICAL BOLD SMALL PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uded9"},120538:{"value":"1D6DA","name":"MATHEMATICAL BOLD SMALL OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeda"},120540:{"value":"1D6DC","name":"MATHEMATICAL BOLD EPSILON SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udedc"},120541:{"value":"1D6DD","name":"MATHEMATICAL BOLD THETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udedd"},120542:{"value":"1D6DE","name":"MATHEMATICAL BOLD KAPPA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udede"},120543:{"value":"1D6DF","name":"MATHEMATICAL BOLD PHI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udedf"},120544:{"value":"1D6E0","name":"MATHEMATICAL BOLD RHO SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee0"},120545:{"value":"1D6E1","name":"MATHEMATICAL BOLD PI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee1"},120572:{"value":"1D6FC","name":"MATHEMATICAL ITALIC SMALL ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udefc"},120573:{"value":"1D6FD","name":"MATHEMATICAL ITALIC SMALL BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udefd"},120574:{"value":"1D6FE","name":"MATHEMATICAL ITALIC SMALL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udefe"},120575:{"value":"1D6FF","name":"MATHEMATICAL ITALIC SMALL DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeff"},120576:{"value":"1D700","name":"MATHEMATICAL ITALIC SMALL EPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf00"},120577:{"value":"1D701","name":"MATHEMATICAL ITALIC SMALL ZETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf01"},120578:{"value":"1D702","name":"MATHEMATICAL ITALIC SMALL ETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf02"},120579:{"value":"1D703","name":"MATHEMATICAL ITALIC SMALL THETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf03"},120580:{"value":"1D704","name":"MATHEMATICAL ITALIC SMALL IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf04"},120581:{"value":"1D705","name":"MATHEMATICAL ITALIC SMALL KAPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf05"},120582:{"value":"1D706","name":"MATHEMATICAL ITALIC SMALL LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf06"},120583:{"value":"1D707","name":"MATHEMATICAL ITALIC SMALL MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf07"},120584:{"value":"1D708","name":"MATHEMATICAL ITALIC SMALL NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf08"},120585:{"value":"1D709","name":"MATHEMATICAL ITALIC SMALL XI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf09"},120586:{"value":"1D70A","name":"MATHEMATICAL ITALIC SMALL OMICRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf0a"},120587:{"value":"1D70B","name":"MATHEMATICAL ITALIC SMALL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf0b"},120588:{"value":"1D70C","name":"MATHEMATICAL ITALIC SMALL RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf0c"},120589:{"value":"1D70D","name":"MATHEMATICAL ITALIC SMALL FINAL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf0d"},120590:{"value":"1D70E","name":"MATHEMATICAL ITALIC SMALL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf0e"},120591:{"value":"1D70F","name":"MATHEMATICAL ITALIC SMALL TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf0f"},120592:{"value":"1D710","name":"MATHEMATICAL ITALIC SMALL UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf10"},120593:{"value":"1D711","name":"MATHEMATICAL ITALIC SMALL PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf11"},120594:{"value":"1D712","name":"MATHEMATICAL ITALIC SMALL CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf12"},120595:{"value":"1D713","name":"MATHEMATICAL ITALIC SMALL PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf13"},120596:{"value":"1D714","name":"MATHEMATICAL ITALIC SMALL OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf14"},120598:{"value":"1D716","name":"MATHEMATICAL ITALIC EPSILON SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf16"},120599:{"value":"1D717","name":"MATHEMATICAL ITALIC THETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf17"},120600:{"value":"1D718","name":"MATHEMATICAL ITALIC KAPPA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf18"},120601:{"value":"1D719","name":"MATHEMATICAL ITALIC PHI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf19"},120602:{"value":"1D71A","name":"MATHEMATICAL ITALIC RHO SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf1a"},120603:{"value":"1D71B","name":"MATHEMATICAL ITALIC PI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf1b"},120630:{"value":"1D736","name":"MATHEMATICAL BOLD ITALIC SMALL ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf36"},120631:{"value":"1D737","name":"MATHEMATICAL BOLD ITALIC SMALL BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf37"},120632:{"value":"1D738","name":"MATHEMATICAL BOLD ITALIC SMALL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf38"},120633:{"value":"1D739","name":"MATHEMATICAL BOLD ITALIC SMALL DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf39"},120634:{"value":"1D73A","name":"MATHEMATICAL BOLD ITALIC SMALL EPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf3a"},120635:{"value":"1D73B","name":"MATHEMATICAL BOLD ITALIC SMALL ZETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf3b"},120636:{"value":"1D73C","name":"MATHEMATICAL BOLD ITALIC SMALL ETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf3c"},120637:{"value":"1D73D","name":"MATHEMATICAL BOLD ITALIC SMALL THETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf3d"},120638:{"value":"1D73E","name":"MATHEMATICAL BOLD ITALIC SMALL IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf3e"},120639:{"value":"1D73F","name":"MATHEMATICAL BOLD ITALIC SMALL KAPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf3f"},120640:{"value":"1D740","name":"MATHEMATICAL BOLD ITALIC SMALL LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf40"},120641:{"value":"1D741","name":"MATHEMATICAL BOLD ITALIC SMALL MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf41"},120642:{"value":"1D742","name":"MATHEMATICAL BOLD ITALIC SMALL NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf42"},120643:{"value":"1D743","name":"MATHEMATICAL BOLD ITALIC SMALL XI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf43"},120644:{"value":"1D744","name":"MATHEMATICAL BOLD ITALIC SMALL OMICRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf44"},120645:{"value":"1D745","name":"MATHEMATICAL BOLD ITALIC SMALL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf45"},120646:{"value":"1D746","name":"MATHEMATICAL BOLD ITALIC SMALL RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf46"},120647:{"value":"1D747","name":"MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf47"},120648:{"value":"1D748","name":"MATHEMATICAL BOLD ITALIC SMALL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf48"},120649:{"value":"1D749","name":"MATHEMATICAL BOLD ITALIC SMALL TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf49"},120650:{"value":"1D74A","name":"MATHEMATICAL BOLD ITALIC SMALL UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf4a"},120651:{"value":"1D74B","name":"MATHEMATICAL BOLD ITALIC SMALL PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf4b"},120652:{"value":"1D74C","name":"MATHEMATICAL BOLD ITALIC SMALL CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf4c"},120653:{"value":"1D74D","name":"MATHEMATICAL BOLD ITALIC SMALL PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf4d"},120654:{"value":"1D74E","name":"MATHEMATICAL BOLD ITALIC SMALL OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf4e"},120656:{"value":"1D750","name":"MATHEMATICAL BOLD ITALIC EPSILON SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf50"},120657:{"value":"1D751","name":"MATHEMATICAL BOLD ITALIC THETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf51"},120658:{"value":"1D752","name":"MATHEMATICAL BOLD ITALIC KAPPA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf52"},120659:{"value":"1D753","name":"MATHEMATICAL BOLD ITALIC PHI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf53"},120660:{"value":"1D754","name":"MATHEMATICAL BOLD ITALIC RHO SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf54"},120661:{"value":"1D755","name":"MATHEMATICAL BOLD ITALIC PI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf55"},120688:{"value":"1D770","name":"MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf70"},120689:{"value":"1D771","name":"MATHEMATICAL SANS-SERIF BOLD SMALL BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf71"},120690:{"value":"1D772","name":"MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf72"},120691:{"value":"1D773","name":"MATHEMATICAL SANS-SERIF BOLD SMALL DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf73"},120692:{"value":"1D774","name":"MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf74"},120693:{"value":"1D775","name":"MATHEMATICAL SANS-SERIF BOLD SMALL ZETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf75"},120694:{"value":"1D776","name":"MATHEMATICAL SANS-SERIF BOLD SMALL ETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf76"},120695:{"value":"1D777","name":"MATHEMATICAL SANS-SERIF BOLD SMALL THETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf77"},120696:{"value":"1D778","name":"MATHEMATICAL SANS-SERIF BOLD SMALL IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf78"},120697:{"value":"1D779","name":"MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf79"},120698:{"value":"1D77A","name":"MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf7a"},120699:{"value":"1D77B","name":"MATHEMATICAL SANS-SERIF BOLD SMALL MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf7b"},120700:{"value":"1D77C","name":"MATHEMATICAL SANS-SERIF BOLD SMALL NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf7c"},120701:{"value":"1D77D","name":"MATHEMATICAL SANS-SERIF BOLD SMALL XI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf7d"},120702:{"value":"1D77E","name":"MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf7e"},120703:{"value":"1D77F","name":"MATHEMATICAL SANS-SERIF BOLD SMALL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf7f"},120704:{"value":"1D780","name":"MATHEMATICAL SANS-SERIF BOLD SMALL RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf80"},120705:{"value":"1D781","name":"MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf81"},120706:{"value":"1D782","name":"MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf82"},120707:{"value":"1D783","name":"MATHEMATICAL SANS-SERIF BOLD SMALL TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf83"},120708:{"value":"1D784","name":"MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf84"},120709:{"value":"1D785","name":"MATHEMATICAL SANS-SERIF BOLD SMALL PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf85"},120710:{"value":"1D786","name":"MATHEMATICAL SANS-SERIF BOLD SMALL CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf86"},120711:{"value":"1D787","name":"MATHEMATICAL SANS-SERIF BOLD SMALL PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf87"},120712:{"value":"1D788","name":"MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf88"},120714:{"value":"1D78A","name":"MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf8a"},120715:{"value":"1D78B","name":"MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf8b"},120716:{"value":"1D78C","name":"MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf8c"},120717:{"value":"1D78D","name":"MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf8d"},120718:{"value":"1D78E","name":"MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf8e"},120719:{"value":"1D78F","name":"MATHEMATICAL SANS-SERIF BOLD PI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf8f"},120746:{"value":"1D7AA","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfaa"},120747:{"value":"1D7AB","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfab"},120748:{"value":"1D7AC","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfac"},120749:{"value":"1D7AD","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfad"},120750:{"value":"1D7AE","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfae"},120751:{"value":"1D7AF","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfaf"},120752:{"value":"1D7B0","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb0"},120753:{"value":"1D7B1","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb1"},120754:{"value":"1D7B2","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb2"},120755:{"value":"1D7B3","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb3"},120756:{"value":"1D7B4","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb4"},120757:{"value":"1D7B5","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb5"},120758:{"value":"1D7B6","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb6"},120759:{"value":"1D7B7","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb7"},120760:{"value":"1D7B8","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb8"},120761:{"value":"1D7B9","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfb9"},120762:{"value":"1D7BA","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfba"},120763:{"value":"1D7BB","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfbb"},120764:{"value":"1D7BC","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfbc"},120765:{"value":"1D7BD","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfbd"},120766:{"value":"1D7BE","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfbe"},120767:{"value":"1D7BF","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfbf"},120768:{"value":"1D7C0","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc0"},120769:{"value":"1D7C1","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc1"},120770:{"value":"1D7C2","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc2"},120772:{"value":"1D7C4","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc4"},120773:{"value":"1D7C5","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc5"},120774:{"value":"1D7C6","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc6"},120775:{"value":"1D7C7","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc7"},120776:{"value":"1D7C8","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc8"},120777:{"value":"1D7C9","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03D6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc9"},120779:{"value":"1D7CB","name":"MATHEMATICAL BOLD SMALL DIGAMMA","category":"Ll","class":"0","bidirectional_category":"L","mapping":" 03DD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfcb"},122624:{"value":"1DF00","name":"LATIN SMALL LETTER FENG DIGRAPH WITH TRILL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf00"},122625:{"value":"1DF01","name":"LATIN SMALL LETTER REVERSED SCRIPT G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf01"},122626:{"value":"1DF02","name":"LATIN LETTER SMALL CAPITAL TURNED G","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf02"},122627:{"value":"1DF03","name":"LATIN SMALL LETTER REVERSED K","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf03"},122628:{"value":"1DF04","name":"LATIN LETTER SMALL CAPITAL L WITH BELT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf04"},122629:{"value":"1DF05","name":"LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf05"},122630:{"value":"1DF06","name":"LATIN SMALL LETTER TURNED Y WITH BELT","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf06"},122631:{"value":"1DF07","name":"LATIN SMALL LETTER REVERSED ENG","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf07"},122632:{"value":"1DF08","name":"LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf08"},122633:{"value":"1DF09","name":"LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf09"},122635:{"value":"1DF0B","name":"LATIN SMALL LETTER ESH WITH DOUBLE BAR","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf0b"},122636:{"value":"1DF0C","name":"LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf0c"},122637:{"value":"1DF0D","name":"LATIN SMALL LETTER TURNED T WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf0d"},122638:{"value":"1DF0E","name":"LATIN LETTER INVERTED GLOTTAL STOP WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf0e"},122639:{"value":"1DF0F","name":"LATIN LETTER STRETCHED C WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf0f"},122640:{"value":"1DF10","name":"LATIN LETTER SMALL CAPITAL TURNED K","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf10"},122641:{"value":"1DF11","name":"LATIN SMALL LETTER L WITH FISHHOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf11"},122642:{"value":"1DF12","name":"LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf12"},122643:{"value":"1DF13","name":"LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf13"},122644:{"value":"1DF14","name":"LATIN SMALL LETTER ENG WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf14"},122645:{"value":"1DF15","name":"LATIN SMALL LETTER TURNED R WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf15"},122646:{"value":"1DF16","name":"LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf16"},122647:{"value":"1DF17","name":"LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf17"},122648:{"value":"1DF18","name":"LATIN SMALL LETTER EZH WITH PALATAL HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf18"},122649:{"value":"1DF19","name":"LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf19"},122650:{"value":"1DF1A","name":"LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf1a"},122651:{"value":"1DF1B","name":"LATIN SMALL LETTER O WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf1b"},122652:{"value":"1DF1C","name":"LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf1c"},122653:{"value":"1DF1D","name":"LATIN SMALL LETTER C WITH RETROFLEX HOOK","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf1d"},122654:{"value":"1DF1E","name":"LATIN SMALL LETTER S WITH CURL","category":"Ll","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf1e"},125218:{"value":"1E922","name":"ADLAM SMALL LETTER ALIF","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E900","lowercase_mapping":"","titlecase_mapping":"1E900","symbol":"\ud83a\udd22"},125219:{"value":"1E923","name":"ADLAM SMALL LETTER DAALI","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E901","lowercase_mapping":"","titlecase_mapping":"1E901","symbol":"\ud83a\udd23"},125220:{"value":"1E924","name":"ADLAM SMALL LETTER LAAM","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E902","lowercase_mapping":"","titlecase_mapping":"1E902","symbol":"\ud83a\udd24"},125221:{"value":"1E925","name":"ADLAM SMALL LETTER MIIM","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E903","lowercase_mapping":"","titlecase_mapping":"1E903","symbol":"\ud83a\udd25"},125222:{"value":"1E926","name":"ADLAM SMALL LETTER BA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E904","lowercase_mapping":"","titlecase_mapping":"1E904","symbol":"\ud83a\udd26"},125223:{"value":"1E927","name":"ADLAM SMALL LETTER SINNYIIYHE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E905","lowercase_mapping":"","titlecase_mapping":"1E905","symbol":"\ud83a\udd27"},125224:{"value":"1E928","name":"ADLAM SMALL LETTER PE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E906","lowercase_mapping":"","titlecase_mapping":"1E906","symbol":"\ud83a\udd28"},125225:{"value":"1E929","name":"ADLAM SMALL LETTER BHE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E907","lowercase_mapping":"","titlecase_mapping":"1E907","symbol":"\ud83a\udd29"},125226:{"value":"1E92A","name":"ADLAM SMALL LETTER RA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E908","lowercase_mapping":"","titlecase_mapping":"1E908","symbol":"\ud83a\udd2a"},125227:{"value":"1E92B","name":"ADLAM SMALL LETTER E","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E909","lowercase_mapping":"","titlecase_mapping":"1E909","symbol":"\ud83a\udd2b"},125228:{"value":"1E92C","name":"ADLAM SMALL LETTER FA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90A","lowercase_mapping":"","titlecase_mapping":"1E90A","symbol":"\ud83a\udd2c"},125229:{"value":"1E92D","name":"ADLAM SMALL LETTER I","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90B","lowercase_mapping":"","titlecase_mapping":"1E90B","symbol":"\ud83a\udd2d"},125230:{"value":"1E92E","name":"ADLAM SMALL LETTER O","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90C","lowercase_mapping":"","titlecase_mapping":"1E90C","symbol":"\ud83a\udd2e"},125231:{"value":"1E92F","name":"ADLAM SMALL LETTER DHA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90D","lowercase_mapping":"","titlecase_mapping":"1E90D","symbol":"\ud83a\udd2f"},125232:{"value":"1E930","name":"ADLAM SMALL LETTER YHE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90E","lowercase_mapping":"","titlecase_mapping":"1E90E","symbol":"\ud83a\udd30"},125233:{"value":"1E931","name":"ADLAM SMALL LETTER WAW","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E90F","lowercase_mapping":"","titlecase_mapping":"1E90F","symbol":"\ud83a\udd31"},125234:{"value":"1E932","name":"ADLAM SMALL LETTER NUN","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E910","lowercase_mapping":"","titlecase_mapping":"1E910","symbol":"\ud83a\udd32"},125235:{"value":"1E933","name":"ADLAM SMALL LETTER KAF","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E911","lowercase_mapping":"","titlecase_mapping":"1E911","symbol":"\ud83a\udd33"},125236:{"value":"1E934","name":"ADLAM SMALL LETTER YA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E912","lowercase_mapping":"","titlecase_mapping":"1E912","symbol":"\ud83a\udd34"},125237:{"value":"1E935","name":"ADLAM SMALL LETTER U","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E913","lowercase_mapping":"","titlecase_mapping":"1E913","symbol":"\ud83a\udd35"},125238:{"value":"1E936","name":"ADLAM SMALL LETTER JIIM","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E914","lowercase_mapping":"","titlecase_mapping":"1E914","symbol":"\ud83a\udd36"},125239:{"value":"1E937","name":"ADLAM SMALL LETTER CHI","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E915","lowercase_mapping":"","titlecase_mapping":"1E915","symbol":"\ud83a\udd37"},125240:{"value":"1E938","name":"ADLAM SMALL LETTER HA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E916","lowercase_mapping":"","titlecase_mapping":"1E916","symbol":"\ud83a\udd38"},125241:{"value":"1E939","name":"ADLAM SMALL LETTER QAAF","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E917","lowercase_mapping":"","titlecase_mapping":"1E917","symbol":"\ud83a\udd39"},125242:{"value":"1E93A","name":"ADLAM SMALL LETTER GA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E918","lowercase_mapping":"","titlecase_mapping":"1E918","symbol":"\ud83a\udd3a"},125243:{"value":"1E93B","name":"ADLAM SMALL LETTER NYA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E919","lowercase_mapping":"","titlecase_mapping":"1E919","symbol":"\ud83a\udd3b"},125244:{"value":"1E93C","name":"ADLAM SMALL LETTER TU","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E91A","lowercase_mapping":"","titlecase_mapping":"1E91A","symbol":"\ud83a\udd3c"},125245:{"value":"1E93D","name":"ADLAM SMALL LETTER NHA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E91B","lowercase_mapping":"","titlecase_mapping":"1E91B","symbol":"\ud83a\udd3d"},125246:{"value":"1E93E","name":"ADLAM SMALL LETTER VA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E91C","lowercase_mapping":"","titlecase_mapping":"1E91C","symbol":"\ud83a\udd3e"},125247:{"value":"1E93F","name":"ADLAM SMALL LETTER KHA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E91D","lowercase_mapping":"","titlecase_mapping":"1E91D","symbol":"\ud83a\udd3f"},125248:{"value":"1E940","name":"ADLAM SMALL LETTER GBE","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E91E","lowercase_mapping":"","titlecase_mapping":"1E91E","symbol":"\ud83a\udd40"},125249:{"value":"1E941","name":"ADLAM SMALL LETTER ZAL","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E91F","lowercase_mapping":"","titlecase_mapping":"1E91F","symbol":"\ud83a\udd41"},125250:{"value":"1E942","name":"ADLAM SMALL LETTER KPO","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E920","lowercase_mapping":"","titlecase_mapping":"1E920","symbol":"\ud83a\udd42"},125251:{"value":"1E943","name":"ADLAM SMALL LETTER SHA","category":"Ll","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"1E921","lowercase_mapping":"","titlecase_mapping":"1E921","symbol":"\ud83a\udd43"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Lm.js b/node_modules/unicode/category/Lm.js new file mode 100644 index 000000000..da44a74a2 --- /dev/null +++ b/node_modules/unicode/category/Lm.js @@ -0,0 +1 @@ +module.exports={688:{"value":"02B0","name":"MODIFIER LETTER SMALL H","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B0"},689:{"value":"02B1","name":"MODIFIER LETTER SMALL H WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0266","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER SMALL H HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B1"},690:{"value":"02B2","name":"MODIFIER LETTER SMALL J","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B2"},691:{"value":"02B3","name":"MODIFIER LETTER SMALL R","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B3"},692:{"value":"02B4","name":"MODIFIER LETTER SMALL TURNED R","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0279","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B4"},693:{"value":"02B5","name":"MODIFIER LETTER SMALL TURNED R WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 027B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER SMALL TURNED R HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B5"},694:{"value":"02B6","name":"MODIFIER LETTER SMALL CAPITAL INVERTED R","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0281","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B6"},695:{"value":"02B7","name":"MODIFIER LETTER SMALL W","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B7"},696:{"value":"02B8","name":"MODIFIER LETTER SMALL Y","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B8"},697:{"value":"02B9","name":"MODIFIER LETTER PRIME","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02B9"},698:{"value":"02BA","name":"MODIFIER LETTER DOUBLE PRIME","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02BA"},699:{"value":"02BB","name":"MODIFIER LETTER TURNED COMMA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02BB"},700:{"value":"02BC","name":"MODIFIER LETTER APOSTROPHE","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02BC"},701:{"value":"02BD","name":"MODIFIER LETTER REVERSED COMMA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02BD"},702:{"value":"02BE","name":"MODIFIER LETTER RIGHT HALF RING","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02BE"},703:{"value":"02BF","name":"MODIFIER LETTER LEFT HALF RING","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02BF"},704:{"value":"02C0","name":"MODIFIER LETTER GLOTTAL STOP","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C0"},705:{"value":"02C1","name":"MODIFIER LETTER REVERSED GLOTTAL STOP","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C1"},710:{"value":"02C6","name":"MODIFIER LETTER CIRCUMFLEX ACCENT","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C6"},711:{"value":"02C7","name":"CARON","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C7"},712:{"value":"02C8","name":"MODIFIER LETTER VERTICAL LINE","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C8"},713:{"value":"02C9","name":"MODIFIER LETTER MACRON","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C9"},714:{"value":"02CA","name":"MODIFIER LETTER ACUTE ACCENT","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02CA"},715:{"value":"02CB","name":"MODIFIER LETTER GRAVE ACCENT","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02CB"},716:{"value":"02CC","name":"MODIFIER LETTER LOW VERTICAL LINE","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02CC"},717:{"value":"02CD","name":"MODIFIER LETTER LOW MACRON","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02CD"},718:{"value":"02CE","name":"MODIFIER LETTER LOW GRAVE ACCENT","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER LOW GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02CE"},719:{"value":"02CF","name":"MODIFIER LETTER LOW ACUTE ACCENT","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER LOW ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02CF"},720:{"value":"02D0","name":"MODIFIER LETTER TRIANGULAR COLON","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D0"},721:{"value":"02D1","name":"MODIFIER LETTER HALF TRIANGULAR COLON","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D1"},736:{"value":"02E0","name":"MODIFIER LETTER SMALL GAMMA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0263","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E0"},737:{"value":"02E1","name":"MODIFIER LETTER SMALL L","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E1"},738:{"value":"02E2","name":"MODIFIER LETTER SMALL S","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E2"},739:{"value":"02E3","name":"MODIFIER LETTER SMALL X","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E3"},740:{"value":"02E4","name":"MODIFIER LETTER SMALL REVERSED GLOTTAL STOP","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0295","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E4"},748:{"value":"02EC","name":"MODIFIER LETTER VOICING","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02EC"},750:{"value":"02EE","name":"MODIFIER LETTER DOUBLE APOSTROPHE","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02EE"},884:{"value":"0374","name":"GREEK NUMERAL SIGN","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"02B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK UPPER NUMERAL SIGN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0374"},890:{"value":"037A","name":"GREEK YPOGEGRAMMENI","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0020 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SPACING IOTA BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u037A"},1369:{"value":"0559","name":"ARMENIAN MODIFIER LETTER LEFT HALF RING","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0559"},1600:{"value":"0640","name":"ARABIC TATWEEL","category":"Lm","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0640"},1765:{"value":"06E5","name":"ARABIC SMALL WAW","category":"Lm","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E5"},1766:{"value":"06E6","name":"ARABIC SMALL YEH","category":"Lm","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E6"},2036:{"value":"07F4","name":"NKO HIGH TONE APOSTROPHE","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F4"},2037:{"value":"07F5","name":"NKO LOW TONE APOSTROPHE","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F5"},2042:{"value":"07FA","name":"NKO LAJANYALAN","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07FA"},2074:{"value":"081A","name":"SAMARITAN MODIFIER LETTER EPENTHETIC YUT","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u081A"},2084:{"value":"0824","name":"SAMARITAN MODIFIER LETTER SHORT A","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0824"},2088:{"value":"0828","name":"SAMARITAN MODIFIER LETTER I","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0828"},2249:{"value":"08C9","name":"ARABIC SMALL FARSI YEH","category":"Lm","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C9"},2417:{"value":"0971","name":"DEVANAGARI SIGN HIGH SPACING DOT","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0971"},3654:{"value":"0E46","name":"THAI CHARACTER MAIYAMOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI MAI YAMOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E46"},3782:{"value":"0EC6","name":"LAO KO LA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC6"},4348:{"value":"10FC","name":"MODIFIER LETTER GEORGIAN NAR","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 10DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u10FC"},6103:{"value":"17D7","name":"KHMER SIGN LEK TOO","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D7"},6211:{"value":"1843","name":"MONGOLIAN LETTER TODO LONG VOWEL SIGN","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1843"},6823:{"value":"1AA7","name":"TAI THAM SIGN MAI YAMOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA7"},7288:{"value":"1C78","name":"OL CHIKI MU TTUDDAG","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C78"},7289:{"value":"1C79","name":"OL CHIKI GAAHLAA TTUDDAAG","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C79"},7290:{"value":"1C7A","name":"OL CHIKI MU-GAAHLAA TTUDDAAG","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C7A"},7291:{"value":"1C7B","name":"OL CHIKI RELAA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C7B"},7292:{"value":"1C7C","name":"OL CHIKI PHAARKAA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C7C"},7293:{"value":"1C7D","name":"OL CHIKI AHAD","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C7D"},7468:{"value":"1D2C","name":"MODIFIER LETTER CAPITAL A","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D2C"},7469:{"value":"1D2D","name":"MODIFIER LETTER CAPITAL AE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 00C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D2D"},7470:{"value":"1D2E","name":"MODIFIER LETTER CAPITAL B","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D2E"},7471:{"value":"1D2F","name":"MODIFIER LETTER CAPITAL BARRED B","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D2F"},7472:{"value":"1D30","name":"MODIFIER LETTER CAPITAL D","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D30"},7473:{"value":"1D31","name":"MODIFIER LETTER CAPITAL E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D31"},7474:{"value":"1D32","name":"MODIFIER LETTER CAPITAL REVERSED E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 018E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D32"},7475:{"value":"1D33","name":"MODIFIER LETTER CAPITAL G","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D33"},7476:{"value":"1D34","name":"MODIFIER LETTER CAPITAL H","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D34"},7477:{"value":"1D35","name":"MODIFIER LETTER CAPITAL I","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D35"},7478:{"value":"1D36","name":"MODIFIER LETTER CAPITAL J","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D36"},7479:{"value":"1D37","name":"MODIFIER LETTER CAPITAL K","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D37"},7480:{"value":"1D38","name":"MODIFIER LETTER CAPITAL L","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D38"},7481:{"value":"1D39","name":"MODIFIER LETTER CAPITAL M","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D39"},7482:{"value":"1D3A","name":"MODIFIER LETTER CAPITAL N","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D3A"},7483:{"value":"1D3B","name":"MODIFIER LETTER CAPITAL REVERSED N","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D3B"},7484:{"value":"1D3C","name":"MODIFIER LETTER CAPITAL O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D3C"},7485:{"value":"1D3D","name":"MODIFIER LETTER CAPITAL OU","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0222","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D3D"},7486:{"value":"1D3E","name":"MODIFIER LETTER CAPITAL P","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D3E"},7487:{"value":"1D3F","name":"MODIFIER LETTER CAPITAL R","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D3F"},7488:{"value":"1D40","name":"MODIFIER LETTER CAPITAL T","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D40"},7489:{"value":"1D41","name":"MODIFIER LETTER CAPITAL U","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D41"},7490:{"value":"1D42","name":"MODIFIER LETTER CAPITAL W","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D42"},7491:{"value":"1D43","name":"MODIFIER LETTER SMALL A","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D43"},7492:{"value":"1D44","name":"MODIFIER LETTER SMALL TURNED A","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0250","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D44"},7493:{"value":"1D45","name":"MODIFIER LETTER SMALL ALPHA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0251","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D45"},7494:{"value":"1D46","name":"MODIFIER LETTER SMALL TURNED AE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D02","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D46"},7495:{"value":"1D47","name":"MODIFIER LETTER SMALL B","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D47"},7496:{"value":"1D48","name":"MODIFIER LETTER SMALL D","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D48"},7497:{"value":"1D49","name":"MODIFIER LETTER SMALL E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D49"},7498:{"value":"1D4A","name":"MODIFIER LETTER SMALL SCHWA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0259","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D4A"},7499:{"value":"1D4B","name":"MODIFIER LETTER SMALL OPEN E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 025B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D4B"},7500:{"value":"1D4C","name":"MODIFIER LETTER SMALL TURNED OPEN E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 025C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D4C"},7501:{"value":"1D4D","name":"MODIFIER LETTER SMALL G","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D4D"},7502:{"value":"1D4E","name":"MODIFIER LETTER SMALL TURNED I","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D4E"},7503:{"value":"1D4F","name":"MODIFIER LETTER SMALL K","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D4F"},7504:{"value":"1D50","name":"MODIFIER LETTER SMALL M","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D50"},7505:{"value":"1D51","name":"MODIFIER LETTER SMALL ENG","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 014B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D51"},7506:{"value":"1D52","name":"MODIFIER LETTER SMALL O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D52"},7507:{"value":"1D53","name":"MODIFIER LETTER SMALL OPEN O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0254","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D53"},7508:{"value":"1D54","name":"MODIFIER LETTER SMALL TOP HALF O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D16","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D54"},7509:{"value":"1D55","name":"MODIFIER LETTER SMALL BOTTOM HALF O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D17","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D55"},7510:{"value":"1D56","name":"MODIFIER LETTER SMALL P","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D56"},7511:{"value":"1D57","name":"MODIFIER LETTER SMALL T","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D57"},7512:{"value":"1D58","name":"MODIFIER LETTER SMALL U","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D58"},7513:{"value":"1D59","name":"MODIFIER LETTER SMALL SIDEWAYS U","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D1D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D59"},7514:{"value":"1D5A","name":"MODIFIER LETTER SMALL TURNED M","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 026F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D5A"},7515:{"value":"1D5B","name":"MODIFIER LETTER SMALL V","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D5B"},7516:{"value":"1D5C","name":"MODIFIER LETTER SMALL AIN","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D25","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D5C"},7517:{"value":"1D5D","name":"MODIFIER LETTER SMALL BETA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D5D"},7518:{"value":"1D5E","name":"MODIFIER LETTER SMALL GREEK GAMMA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D5E"},7519:{"value":"1D5F","name":"MODIFIER LETTER SMALL DELTA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D5F"},7520:{"value":"1D60","name":"MODIFIER LETTER SMALL GREEK PHI","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D60"},7521:{"value":"1D61","name":"MODIFIER LETTER SMALL CHI","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D61"},7522:{"value":"1D62","name":"LATIN SUBSCRIPT SMALL LETTER I","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D62"},7523:{"value":"1D63","name":"LATIN SUBSCRIPT SMALL LETTER R","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D63"},7524:{"value":"1D64","name":"LATIN SUBSCRIPT SMALL LETTER U","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D64"},7525:{"value":"1D65","name":"LATIN SUBSCRIPT SMALL LETTER V","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D65"},7526:{"value":"1D66","name":"GREEK SUBSCRIPT SMALL LETTER BETA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D66"},7527:{"value":"1D67","name":"GREEK SUBSCRIPT SMALL LETTER GAMMA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D67"},7528:{"value":"1D68","name":"GREEK SUBSCRIPT SMALL LETTER RHO","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D68"},7529:{"value":"1D69","name":"GREEK SUBSCRIPT SMALL LETTER PHI","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D69"},7530:{"value":"1D6A","name":"GREEK SUBSCRIPT SMALL LETTER CHI","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D6A"},7544:{"value":"1D78","name":"MODIFIER LETTER CYRILLIC EN","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 043D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D78"},7579:{"value":"1D9B","name":"MODIFIER LETTER SMALL TURNED ALPHA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0252","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D9B"},7580:{"value":"1D9C","name":"MODIFIER LETTER SMALL C","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D9C"},7581:{"value":"1D9D","name":"MODIFIER LETTER SMALL C WITH CURL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0255","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D9D"},7582:{"value":"1D9E","name":"MODIFIER LETTER SMALL ETH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 00F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D9E"},7583:{"value":"1D9F","name":"MODIFIER LETTER SMALL REVERSED OPEN E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 025C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1D9F"},7584:{"value":"1DA0","name":"MODIFIER LETTER SMALL F","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA0"},7585:{"value":"1DA1","name":"MODIFIER LETTER SMALL DOTLESS J WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 025F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA1"},7586:{"value":"1DA2","name":"MODIFIER LETTER SMALL SCRIPT G","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0261","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA2"},7587:{"value":"1DA3","name":"MODIFIER LETTER SMALL TURNED H","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0265","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA3"},7588:{"value":"1DA4","name":"MODIFIER LETTER SMALL I WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0268","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA4"},7589:{"value":"1DA5","name":"MODIFIER LETTER SMALL IOTA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0269","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA5"},7590:{"value":"1DA6","name":"MODIFIER LETTER SMALL CAPITAL I","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 026A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA6"},7591:{"value":"1DA7","name":"MODIFIER LETTER SMALL CAPITAL I WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D7B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA7"},7592:{"value":"1DA8","name":"MODIFIER LETTER SMALL J WITH CROSSED-TAIL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 029D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA8"},7593:{"value":"1DA9","name":"MODIFIER LETTER SMALL L WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 026D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DA9"},7594:{"value":"1DAA","name":"MODIFIER LETTER SMALL L WITH PALATAL HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D85","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DAA"},7595:{"value":"1DAB","name":"MODIFIER LETTER SMALL CAPITAL L","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 029F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DAB"},7596:{"value":"1DAC","name":"MODIFIER LETTER SMALL M WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0271","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DAC"},7597:{"value":"1DAD","name":"MODIFIER LETTER SMALL TURNED M WITH LONG LEG","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0270","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DAD"},7598:{"value":"1DAE","name":"MODIFIER LETTER SMALL N WITH LEFT HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0272","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DAE"},7599:{"value":"1DAF","name":"MODIFIER LETTER SMALL N WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0273","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DAF"},7600:{"value":"1DB0","name":"MODIFIER LETTER SMALL CAPITAL N","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0274","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB0"},7601:{"value":"1DB1","name":"MODIFIER LETTER SMALL BARRED O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0275","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB1"},7602:{"value":"1DB2","name":"MODIFIER LETTER SMALL PHI","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0278","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB2"},7603:{"value":"1DB3","name":"MODIFIER LETTER SMALL S WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0282","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB3"},7604:{"value":"1DB4","name":"MODIFIER LETTER SMALL ESH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0283","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB4"},7605:{"value":"1DB5","name":"MODIFIER LETTER SMALL T WITH PALATAL HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 01AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB5"},7606:{"value":"1DB6","name":"MODIFIER LETTER SMALL U BAR","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0289","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB6"},7607:{"value":"1DB7","name":"MODIFIER LETTER SMALL UPSILON","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 028A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB7"},7608:{"value":"1DB8","name":"MODIFIER LETTER SMALL CAPITAL U","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D1C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB8"},7609:{"value":"1DB9","name":"MODIFIER LETTER SMALL V WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 028B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DB9"},7610:{"value":"1DBA","name":"MODIFIER LETTER SMALL TURNED V","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 028C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DBA"},7611:{"value":"1DBB","name":"MODIFIER LETTER SMALL Z","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DBB"},7612:{"value":"1DBC","name":"MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0290","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DBC"},7613:{"value":"1DBD","name":"MODIFIER LETTER SMALL Z WITH CURL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0291","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DBD"},7614:{"value":"1DBE","name":"MODIFIER LETTER SMALL EZH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0292","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DBE"},7615:{"value":"1DBF","name":"MODIFIER LETTER SMALL THETA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 03B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DBF"},8305:{"value":"2071","name":"SUPERSCRIPT LATIN SMALL LETTER I","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2071"},8319:{"value":"207F","name":"SUPERSCRIPT LATIN SMALL LETTER N","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u207F"},8336:{"value":"2090","name":"LATIN SUBSCRIPT SMALL LETTER A","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2090"},8337:{"value":"2091","name":"LATIN SUBSCRIPT SMALL LETTER E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2091"},8338:{"value":"2092","name":"LATIN SUBSCRIPT SMALL LETTER O","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2092"},8339:{"value":"2093","name":"LATIN SUBSCRIPT SMALL LETTER X","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2093"},8340:{"value":"2094","name":"LATIN SUBSCRIPT SMALL LETTER SCHWA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0259","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2094"},8341:{"value":"2095","name":"LATIN SUBSCRIPT SMALL LETTER H","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2095"},8342:{"value":"2096","name":"LATIN SUBSCRIPT SMALL LETTER K","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2096"},8343:{"value":"2097","name":"LATIN SUBSCRIPT SMALL LETTER L","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2097"},8344:{"value":"2098","name":"LATIN SUBSCRIPT SMALL LETTER M","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2098"},8345:{"value":"2099","name":"LATIN SUBSCRIPT SMALL LETTER N","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2099"},8346:{"value":"209A","name":"LATIN SUBSCRIPT SMALL LETTER P","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u209A"},8347:{"value":"209B","name":"LATIN SUBSCRIPT SMALL LETTER S","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u209B"},8348:{"value":"209C","name":"LATIN SUBSCRIPT SMALL LETTER T","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u209C"},11388:{"value":"2C7C","name":"LATIN SUBSCRIPT SMALL LETTER J","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C7C"},11389:{"value":"2C7D","name":"MODIFIER LETTER CAPITAL V","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2C7D"},11631:{"value":"2D6F","name":"TIFINAGH MODIFIER LETTER LABIALIZATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 2D61","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D6F"},11823:{"value":"2E2F","name":"VERTICAL TILDE","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E2F"},12293:{"value":"3005","name":"IDEOGRAPHIC ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3005"},12337:{"value":"3031","name":"VERTICAL KANA REPEAT MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3031"},12338:{"value":"3032","name":"VERTICAL KANA REPEAT WITH VOICED SOUND MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3032"},12339:{"value":"3033","name":"VERTICAL KANA REPEAT MARK UPPER HALF","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3033"},12340:{"value":"3034","name":"VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3034"},12341:{"value":"3035","name":"VERTICAL KANA REPEAT MARK LOWER HALF","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3035"},12347:{"value":"303B","name":"VERTICAL IDEOGRAPHIC ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u303B"},12445:{"value":"309D","name":"HIRAGANA ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u309D"},12446:{"value":"309E","name":"HIRAGANA VOICED ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"309D 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u309E"},12540:{"value":"30FC","name":"KATAKANA-HIRAGANA PROLONGED SOUND MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30FC"},12541:{"value":"30FD","name":"KATAKANA ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30FD"},12542:{"value":"30FE","name":"KATAKANA VOICED ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"30FD 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30FE"},40981:{"value":"A015","name":"YI SYLLABLE WU","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA015"},42232:{"value":"A4F8","name":"LISU LETTER TONE MYA TI","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F8"},42233:{"value":"A4F9","name":"LISU LETTER TONE NA PO","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F9"},42234:{"value":"A4FA","name":"LISU LETTER TONE MYA CYA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4FA"},42235:{"value":"A4FB","name":"LISU LETTER TONE MYA BO","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4FB"},42236:{"value":"A4FC","name":"LISU LETTER TONE MYA NA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4FC"},42237:{"value":"A4FD","name":"LISU LETTER TONE MYA JEU","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4FD"},42508:{"value":"A60C","name":"VAI SYLLABLE LENGTHENER","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA60C"},42623:{"value":"A67F","name":"CYRILLIC PAYEROK","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA67F"},42652:{"value":"A69C","name":"MODIFIER LETTER CYRILLIC HARD SIGN","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 044A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA69C"},42653:{"value":"A69D","name":"MODIFIER LETTER CYRILLIC SOFT SIGN","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 044C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA69D"},42775:{"value":"A717","name":"MODIFIER LETTER DOT VERTICAL BAR","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA717"},42776:{"value":"A718","name":"MODIFIER LETTER DOT SLASH","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA718"},42777:{"value":"A719","name":"MODIFIER LETTER DOT HORIZONTAL BAR","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA719"},42778:{"value":"A71A","name":"MODIFIER LETTER LOWER RIGHT CORNER ANGLE","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA71A"},42779:{"value":"A71B","name":"MODIFIER LETTER RAISED UP ARROW","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA71B"},42780:{"value":"A71C","name":"MODIFIER LETTER RAISED DOWN ARROW","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA71C"},42781:{"value":"A71D","name":"MODIFIER LETTER RAISED EXCLAMATION MARK","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA71D"},42782:{"value":"A71E","name":"MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA71E"},42783:{"value":"A71F","name":"MODIFIER LETTER LOW INVERTED EXCLAMATION MARK","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA71F"},42864:{"value":"A770","name":"MODIFIER LETTER US","category":"Lm","class":"0","bidirectional_category":"L","mapping":" A76F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA770"},42888:{"value":"A788","name":"MODIFIER LETTER LOW CIRCUMFLEX ACCENT","category":"Lm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA788"},42994:{"value":"A7F2","name":"MODIFIER LETTER CAPITAL C","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7F2"},42995:{"value":"A7F3","name":"MODIFIER LETTER CAPITAL F","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7F3"},42996:{"value":"A7F4","name":"MODIFIER LETTER CAPITAL Q","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7F4"},43000:{"value":"A7F8","name":"MODIFIER LETTER CAPITAL H WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0126","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7F8"},43001:{"value":"A7F9","name":"MODIFIER LETTER SMALL LIGATURE OE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0153","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7F9"},43471:{"value":"A9CF","name":"JAVANESE PANGRANGKEP","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9CF"},43494:{"value":"A9E6","name":"MYANMAR MODIFIER LETTER SHAN REDUPLICATION","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E6"},43632:{"value":"AA70","name":"MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA70"},43741:{"value":"AADD","name":"TAI VIET SYMBOL SAM","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAADD"},43763:{"value":"AAF3","name":"MEETEI MAYEK SYLLABLE REPETITION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF3"},43764:{"value":"AAF4","name":"MEETEI MAYEK WORD REPETITION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF4"},43868:{"value":"AB5C","name":"MODIFIER LETTER SMALL HENG","category":"Lm","class":"0","bidirectional_category":"L","mapping":" A727","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB5C"},43869:{"value":"AB5D","name":"MODIFIER LETTER SMALL L WITH INVERTED LAZY S","category":"Lm","class":"0","bidirectional_category":"L","mapping":" AB37","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB5D"},43870:{"value":"AB5E","name":"MODIFIER LETTER SMALL L WITH MIDDLE TILDE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 026B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB5E"},43871:{"value":"AB5F","name":"MODIFIER LETTER SMALL U WITH LEFT HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" AB52","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB5F"},43881:{"value":"AB69","name":"MODIFIER LETTER SMALL TURNED W","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 028D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB69"},65392:{"value":"FF70","name":"HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF70"},65438:{"value":"FF9E","name":"HALFWIDTH KATAKANA VOICED SOUND MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF9E"},65439:{"value":"FF9F","name":"HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF9F"},67456:{"value":"10780","name":"MODIFIER LETTER SMALL CAPITAL AA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf80"},67457:{"value":"10781","name":"MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf81"},67458:{"value":"10782","name":"MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf82"},67459:{"value":"10783","name":"MODIFIER LETTER SMALL AE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 00E6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf83"},67460:{"value":"10784","name":"MODIFIER LETTER SMALL CAPITAL B","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0299","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf84"},67461:{"value":"10785","name":"MODIFIER LETTER SMALL B WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0253","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf85"},67463:{"value":"10787","name":"MODIFIER LETTER SMALL DZ DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf87"},67464:{"value":"10788","name":"MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" AB66","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf88"},67465:{"value":"10789","name":"MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf89"},67466:{"value":"1078A","name":"MODIFIER LETTER SMALL DEZH DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf8a"},67467:{"value":"1078B","name":"MODIFIER LETTER SMALL D WITH TAIL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0256","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf8b"},67468:{"value":"1078C","name":"MODIFIER LETTER SMALL D WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0257","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf8c"},67469:{"value":"1078D","name":"MODIFIER LETTER SMALL D WITH HOOK AND TAIL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1D91","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf8d"},67470:{"value":"1078E","name":"MODIFIER LETTER SMALL REVERSED E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0258","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf8e"},67471:{"value":"1078F","name":"MODIFIER LETTER SMALL CLOSED REVERSED OPEN E","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 025E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf8f"},67472:{"value":"10790","name":"MODIFIER LETTER SMALL FENG DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf90"},67473:{"value":"10791","name":"MODIFIER LETTER SMALL RAMS HORN","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0264","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf91"},67474:{"value":"10792","name":"MODIFIER LETTER SMALL CAPITAL G","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0262","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf92"},67475:{"value":"10793","name":"MODIFIER LETTER SMALL G WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0260","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf93"},67476:{"value":"10794","name":"MODIFIER LETTER SMALL CAPITAL G WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 029B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf94"},67477:{"value":"10795","name":"MODIFIER LETTER SMALL H WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0127","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf95"},67478:{"value":"10796","name":"MODIFIER LETTER SMALL CAPITAL H","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 029C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf96"},67479:{"value":"10797","name":"MODIFIER LETTER SMALL HENG WITH HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0267","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf97"},67480:{"value":"10798","name":"MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0284","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf98"},67481:{"value":"10799","name":"MODIFIER LETTER SMALL LS DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02AA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf99"},67482:{"value":"1079A","name":"MODIFIER LETTER SMALL LZ DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf9a"},67483:{"value":"1079B","name":"MODIFIER LETTER SMALL L WITH BELT","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 026C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf9b"},67484:{"value":"1079C","name":"MODIFIER LETTER SMALL CAPITAL L WITH BELT","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1DF04","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf9c"},67485:{"value":"1079D","name":"MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT","category":"Lm","class":"0","bidirectional_category":"L","mapping":" A78E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf9d"},67486:{"value":"1079E","name":"MODIFIER LETTER SMALL LEZH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 026E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf9e"},67487:{"value":"1079F","name":"MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1DF05","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf9f"},67488:{"value":"107A0","name":"MODIFIER LETTER SMALL TURNED Y","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 028E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa0"},67489:{"value":"107A1","name":"MODIFIER LETTER SMALL TURNED Y WITH BELT","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1DF06","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa1"},67490:{"value":"107A2","name":"MODIFIER LETTER SMALL O WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 00F8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa2"},67491:{"value":"107A3","name":"MODIFIER LETTER SMALL CAPITAL OE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0276","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa3"},67492:{"value":"107A4","name":"MODIFIER LETTER SMALL CLOSED OMEGA","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0277","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa4"},67493:{"value":"107A5","name":"MODIFIER LETTER SMALL Q","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa5"},67494:{"value":"107A6","name":"MODIFIER LETTER SMALL TURNED R WITH LONG LEG","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 027A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa6"},67495:{"value":"107A7","name":"MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1DF08","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa7"},67496:{"value":"107A8","name":"MODIFIER LETTER SMALL R WITH TAIL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 027D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa8"},67497:{"value":"107A9","name":"MODIFIER LETTER SMALL R WITH FISHHOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 027E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfa9"},67498:{"value":"107AA","name":"MODIFIER LETTER SMALL CAPITAL R","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0280","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfaa"},67499:{"value":"107AB","name":"MODIFIER LETTER SMALL TC DIGRAPH WITH CURL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfab"},67500:{"value":"107AC","name":"MODIFIER LETTER SMALL TS DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfac"},67501:{"value":"107AD","name":"MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" AB67","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfad"},67502:{"value":"107AE","name":"MODIFIER LETTER SMALL TESH DIGRAPH","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfae"},67503:{"value":"107AF","name":"MODIFIER LETTER SMALL T WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0288","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfaf"},67504:{"value":"107B0","name":"MODIFIER LETTER SMALL V WITH RIGHT HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 2C71","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb0"},67506:{"value":"107B2","name":"MODIFIER LETTER SMALL CAPITAL Y","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 028F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb2"},67507:{"value":"107B3","name":"MODIFIER LETTER GLOTTAL STOP WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb3"},67508:{"value":"107B4","name":"MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 02A2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb4"},67509:{"value":"107B5","name":"MODIFIER LETTER BILABIAL CLICK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 0298","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb5"},67510:{"value":"107B6","name":"MODIFIER LETTER DENTAL CLICK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 01C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb6"},67511:{"value":"107B7","name":"MODIFIER LETTER LATERAL CLICK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 01C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb7"},67512:{"value":"107B8","name":"MODIFIER LETTER ALVEOLAR CLICK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 01C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb8"},67513:{"value":"107B9","name":"MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1DF0A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfb9"},67514:{"value":"107BA","name":"MODIFIER LETTER SMALL S WITH CURL","category":"Lm","class":"0","bidirectional_category":"L","mapping":" 1DF1E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udfba"},92992:{"value":"16B40","name":"PAHAWH HMONG SIGN VOS SEEV","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf40"},92993:{"value":"16B41","name":"PAHAWH HMONG SIGN MEEJ SUAB","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf41"},92994:{"value":"16B42","name":"PAHAWH HMONG SIGN VOS NRUA","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf42"},92995:{"value":"16B43","name":"PAHAWH HMONG SIGN IB YAM","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf43"},94099:{"value":"16F93","name":"MIAO LETTER TONE-2","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf93"},94100:{"value":"16F94","name":"MIAO LETTER TONE-3","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf94"},94101:{"value":"16F95","name":"MIAO LETTER TONE-4","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf95"},94102:{"value":"16F96","name":"MIAO LETTER TONE-5","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf96"},94103:{"value":"16F97","name":"MIAO LETTER TONE-6","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf97"},94104:{"value":"16F98","name":"MIAO LETTER TONE-7","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf98"},94105:{"value":"16F99","name":"MIAO LETTER TONE-8","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf99"},94106:{"value":"16F9A","name":"MIAO LETTER REFORMED TONE-1","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf9a"},94107:{"value":"16F9B","name":"MIAO LETTER REFORMED TONE-2","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf9b"},94108:{"value":"16F9C","name":"MIAO LETTER REFORMED TONE-4","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf9c"},94109:{"value":"16F9D","name":"MIAO LETTER REFORMED TONE-5","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf9d"},94110:{"value":"16F9E","name":"MIAO LETTER REFORMED TONE-6","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf9e"},94111:{"value":"16F9F","name":"MIAO LETTER REFORMED TONE-8","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf9f"},94176:{"value":"16FE0","name":"TANGUT ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udfe0"},94177:{"value":"16FE1","name":"NUSHU ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udfe1"},94179:{"value":"16FE3","name":"OLD CHINESE ITERATION MARK","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udfe3"},110576:{"value":"1AFF0","name":"KATAKANA LETTER MINNAN TONE-2","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff0"},110577:{"value":"1AFF1","name":"KATAKANA LETTER MINNAN TONE-3","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff1"},110578:{"value":"1AFF2","name":"KATAKANA LETTER MINNAN TONE-4","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff2"},110579:{"value":"1AFF3","name":"KATAKANA LETTER MINNAN TONE-5","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff3"},110581:{"value":"1AFF5","name":"KATAKANA LETTER MINNAN TONE-7","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff5"},110582:{"value":"1AFF6","name":"KATAKANA LETTER MINNAN TONE-8","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff6"},110583:{"value":"1AFF7","name":"KATAKANA LETTER MINNAN NASALIZED TONE-1","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff7"},110584:{"value":"1AFF8","name":"KATAKANA LETTER MINNAN NASALIZED TONE-2","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff8"},110585:{"value":"1AFF9","name":"KATAKANA LETTER MINNAN NASALIZED TONE-3","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udff9"},110586:{"value":"1AFFA","name":"KATAKANA LETTER MINNAN NASALIZED TONE-4","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udffa"},110587:{"value":"1AFFB","name":"KATAKANA LETTER MINNAN NASALIZED TONE-5","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udffb"},110589:{"value":"1AFFD","name":"KATAKANA LETTER MINNAN NASALIZED TONE-7","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udffd"},110590:{"value":"1AFFE","name":"KATAKANA LETTER MINNAN NASALIZED TONE-8","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82b\udffe"},123191:{"value":"1E137","name":"NYIAKENG PUACHUE HMONG SIGN FOR PERSON","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd37"},123192:{"value":"1E138","name":"NYIAKENG PUACHUE HMONG SIGN FOR THING","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd38"},123193:{"value":"1E139","name":"NYIAKENG PUACHUE HMONG SIGN FOR LOCATION","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd39"},123194:{"value":"1E13A","name":"NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd3a"},123195:{"value":"1E13B","name":"NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd3b"},123196:{"value":"1E13C","name":"NYIAKENG PUACHUE HMONG SIGN XW XW","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd3c"},123197:{"value":"1E13D","name":"NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER","category":"Lm","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd3d"},125259:{"value":"1E94B","name":"ADLAM NASALIZATION MARK","category":"Lm","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd4b"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Lo.js b/node_modules/unicode/category/Lo.js new file mode 100644 index 000000000..ab25d05de --- /dev/null +++ b/node_modules/unicode/category/Lo.js @@ -0,0 +1 @@ +module.exports={170:{"value":"00AA","name":"FEMININE ORDINAL INDICATOR","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xAA"},186:{"value":"00BA","name":"MASCULINE ORDINAL INDICATOR","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xBA"},443:{"value":"01BB","name":"LATIN LETTER TWO WITH STROKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER TWO BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01BB"},448:{"value":"01C0","name":"LATIN LETTER DENTAL CLICK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER PIPE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01C0"},449:{"value":"01C1","name":"LATIN LETTER LATERAL CLICK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER DOUBLE PIPE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01C1"},450:{"value":"01C2","name":"LATIN LETTER ALVEOLAR CLICK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER PIPE DOUBLE BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01C2"},451:{"value":"01C3","name":"LATIN LETTER RETROFLEX CLICK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER EXCLAMATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u01C3"},660:{"value":"0294","name":"LATIN LETTER GLOTTAL STOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0294"},1488:{"value":"05D0","name":"HEBREW LETTER ALEF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D0"},1489:{"value":"05D1","name":"HEBREW LETTER BET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D1"},1490:{"value":"05D2","name":"HEBREW LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D2"},1491:{"value":"05D3","name":"HEBREW LETTER DALET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D3"},1492:{"value":"05D4","name":"HEBREW LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D4"},1493:{"value":"05D5","name":"HEBREW LETTER VAV","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D5"},1494:{"value":"05D6","name":"HEBREW LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D6"},1495:{"value":"05D7","name":"HEBREW LETTER HET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D7"},1496:{"value":"05D8","name":"HEBREW LETTER TET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D8"},1497:{"value":"05D9","name":"HEBREW LETTER YOD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05D9"},1498:{"value":"05DA","name":"HEBREW LETTER FINAL KAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05DA"},1499:{"value":"05DB","name":"HEBREW LETTER KAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05DB"},1500:{"value":"05DC","name":"HEBREW LETTER LAMED","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05DC"},1501:{"value":"05DD","name":"HEBREW LETTER FINAL MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05DD"},1502:{"value":"05DE","name":"HEBREW LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05DE"},1503:{"value":"05DF","name":"HEBREW LETTER FINAL NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05DF"},1504:{"value":"05E0","name":"HEBREW LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E0"},1505:{"value":"05E1","name":"HEBREW LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E1"},1506:{"value":"05E2","name":"HEBREW LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E2"},1507:{"value":"05E3","name":"HEBREW LETTER FINAL PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E3"},1508:{"value":"05E4","name":"HEBREW LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E4"},1509:{"value":"05E5","name":"HEBREW LETTER FINAL TSADI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E5"},1510:{"value":"05E6","name":"HEBREW LETTER TSADI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E6"},1511:{"value":"05E7","name":"HEBREW LETTER QOF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E7"},1512:{"value":"05E8","name":"HEBREW LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E8"},1513:{"value":"05E9","name":"HEBREW LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05E9"},1514:{"value":"05EA","name":"HEBREW LETTER TAV","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05EA"},1519:{"value":"05EF","name":"HEBREW YOD TRIANGLE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05EF"},1520:{"value":"05F0","name":"HEBREW LIGATURE YIDDISH DOUBLE VAV","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEBREW LETTER DOUBLE VAV","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05F0"},1521:{"value":"05F1","name":"HEBREW LIGATURE YIDDISH VAV YOD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEBREW LETTER VAV YOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05F1"},1522:{"value":"05F2","name":"HEBREW LIGATURE YIDDISH DOUBLE YOD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEBREW LETTER DOUBLE YOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05F2"},1568:{"value":"0620","name":"ARABIC LETTER KASHMIRI YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0620"},1569:{"value":"0621","name":"ARABIC LETTER HAMZA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0621"},1570:{"value":"0622","name":"ARABIC LETTER ALEF WITH MADDA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"0627 0653","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER MADDAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0622"},1571:{"value":"0623","name":"ARABIC LETTER ALEF WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"0627 0654","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0623"},1572:{"value":"0624","name":"ARABIC LETTER WAW WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"0648 0654","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON WAW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0624"},1573:{"value":"0625","name":"ARABIC LETTER ALEF WITH HAMZA BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"0627 0655","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH UNDER ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0625"},1574:{"value":"0626","name":"ARABIC LETTER YEH WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"064A 0654","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0626"},1575:{"value":"0627","name":"ARABIC LETTER ALEF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0627"},1576:{"value":"0628","name":"ARABIC LETTER BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER BAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0628"},1577:{"value":"0629","name":"ARABIC LETTER TEH MARBUTA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA MARBUTAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0629"},1578:{"value":"062A","name":"ARABIC LETTER TEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u062A"},1579:{"value":"062B","name":"ARABIC LETTER THEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER THAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u062B"},1580:{"value":"062C","name":"ARABIC LETTER JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u062C"},1581:{"value":"062D","name":"ARABIC LETTER HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u062D"},1582:{"value":"062E","name":"ARABIC LETTER KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER KHAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u062E"},1583:{"value":"062F","name":"ARABIC LETTER DAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u062F"},1584:{"value":"0630","name":"ARABIC LETTER THAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0630"},1585:{"value":"0631","name":"ARABIC LETTER REH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0631"},1586:{"value":"0632","name":"ARABIC LETTER ZAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0632"},1587:{"value":"0633","name":"ARABIC LETTER SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0633"},1588:{"value":"0634","name":"ARABIC LETTER SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0634"},1589:{"value":"0635","name":"ARABIC LETTER SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0635"},1590:{"value":"0636","name":"ARABIC LETTER DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0636"},1591:{"value":"0637","name":"ARABIC LETTER TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0637"},1592:{"value":"0638","name":"ARABIC LETTER ZAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0638"},1593:{"value":"0639","name":"ARABIC LETTER AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0639"},1594:{"value":"063A","name":"ARABIC LETTER GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u063A"},1595:{"value":"063B","name":"ARABIC LETTER KEHEH WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u063B"},1596:{"value":"063C","name":"ARABIC LETTER KEHEH WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u063C"},1597:{"value":"063D","name":"ARABIC LETTER FARSI YEH WITH INVERTED V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u063D"},1598:{"value":"063E","name":"ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u063E"},1599:{"value":"063F","name":"ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u063F"},1601:{"value":"0641","name":"ARABIC LETTER FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0641"},1602:{"value":"0642","name":"ARABIC LETTER QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0642"},1603:{"value":"0643","name":"ARABIC LETTER KAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0643"},1604:{"value":"0644","name":"ARABIC LETTER LAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0644"},1605:{"value":"0645","name":"ARABIC LETTER MEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0645"},1606:{"value":"0646","name":"ARABIC LETTER NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0646"},1607:{"value":"0647","name":"ARABIC LETTER HEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0647"},1608:{"value":"0648","name":"ARABIC LETTER WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0648"},1609:{"value":"0649","name":"ARABIC LETTER ALEF MAKSURA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER ALEF MAQSURAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0649"},1610:{"value":"064A","name":"ARABIC LETTER YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u064A"},1646:{"value":"066E","name":"ARABIC LETTER DOTLESS BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u066E"},1647:{"value":"066F","name":"ARABIC LETTER DOTLESS QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u066F"},1649:{"value":"0671","name":"ARABIC LETTER ALEF WASLA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAT WASL ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0671"},1650:{"value":"0672","name":"ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAVY HAMZAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0672"},1651:{"value":"0673","name":"ARABIC LETTER ALEF WITH WAVY HAMZA BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAVY HAMZAH UNDER ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0673"},1652:{"value":"0674","name":"ARABIC LETTER HIGH HAMZA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HIGH HAMZAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0674"},1653:{"value":"0675","name":"ARABIC LETTER HIGH HAMZA ALEF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627 0674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HIGH HAMZAH ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0675"},1654:{"value":"0676","name":"ARABIC LETTER HIGH HAMZA WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648 0674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HIGH HAMZAH WAW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0676"},1655:{"value":"0677","name":"ARABIC LETTER U WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C7 0674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0677"},1656:{"value":"0678","name":"ARABIC LETTER HIGH HAMZA YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HIGH HAMZAH YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0678"},1657:{"value":"0679","name":"ARABIC LETTER TTEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA WITH SMALL TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0679"},1658:{"value":"067A","name":"ARABIC LETTER TTEHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u067A"},1659:{"value":"067B","name":"ARABIC LETTER BEEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u067B"},1660:{"value":"067C","name":"ARABIC LETTER TEH WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA WITH RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u067C"},1661:{"value":"067D","name":"ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u067D"},1662:{"value":"067E","name":"ARABIC LETTER PEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA WITH THREE DOTS BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u067E"},1663:{"value":"067F","name":"ARABIC LETTER TEHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA WITH FOUR DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u067F"},1664:{"value":"0680","name":"ARABIC LETTER BEHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER BAA WITH FOUR DOTS BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0680"},1665:{"value":"0681","name":"ARABIC LETTER HAH WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON HAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0681"},1666:{"value":"0682","name":"ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0682"},1667:{"value":"0683","name":"ARABIC LETTER NYEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA WITH MIDDLE TWO DOTS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0683"},1668:{"value":"0684","name":"ARABIC LETTER DYEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0684"},1669:{"value":"0685","name":"ARABIC LETTER HAH WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA WITH THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0685"},1670:{"value":"0686","name":"ARABIC LETTER TCHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0686"},1671:{"value":"0687","name":"ARABIC LETTER TCHEHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAA WITH MIDDLE FOUR DOTS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0687"},1672:{"value":"0688","name":"ARABIC LETTER DDAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DAL WITH SMALL TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0688"},1673:{"value":"0689","name":"ARABIC LETTER DAL WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0689"},1674:{"value":"068A","name":"ARABIC LETTER DAL WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u068A"},1675:{"value":"068B","name":"ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u068B"},1676:{"value":"068C","name":"ARABIC LETTER DAHAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DAL WITH TWO DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u068C"},1677:{"value":"068D","name":"ARABIC LETTER DDAHAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DAL WITH TWO DOTS BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u068D"},1678:{"value":"068E","name":"ARABIC LETTER DUL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DAL WITH THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u068E"},1679:{"value":"068F","name":"ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u068F"},1680:{"value":"0690","name":"ARABIC LETTER DAL WITH FOUR DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0690"},1681:{"value":"0691","name":"ARABIC LETTER RREH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH SMALL TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0691"},1682:{"value":"0692","name":"ARABIC LETTER REH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH SMALL V","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0692"},1683:{"value":"0693","name":"ARABIC LETTER REH WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0693"},1684:{"value":"0694","name":"ARABIC LETTER REH WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH DOT BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0694"},1685:{"value":"0695","name":"ARABIC LETTER REH WITH SMALL V BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH SMALL V BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0695"},1686:{"value":"0696","name":"ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0696"},1687:{"value":"0697","name":"ARABIC LETTER REH WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH TWO DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0697"},1688:{"value":"0698","name":"ARABIC LETTER JEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0698"},1689:{"value":"0699","name":"ARABIC LETTER REH WITH FOUR DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER RA WITH FOUR DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0699"},1690:{"value":"069A","name":"ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u069A"},1691:{"value":"069B","name":"ARABIC LETTER SEEN WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u069B"},1692:{"value":"069C","name":"ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u069C"},1693:{"value":"069D","name":"ARABIC LETTER SAD WITH TWO DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u069D"},1694:{"value":"069E","name":"ARABIC LETTER SAD WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u069E"},1695:{"value":"069F","name":"ARABIC LETTER TAH WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u069F"},1696:{"value":"06A0","name":"ARABIC LETTER AIN WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A0"},1697:{"value":"06A1","name":"ARABIC LETTER DOTLESS FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DOTLESS FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A1"},1698:{"value":"06A2","name":"ARABIC LETTER FEH WITH DOT MOVED BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER FA WITH DOT MOVED BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A2"},1699:{"value":"06A3","name":"ARABIC LETTER FEH WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER FA WITH DOT BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A3"},1700:{"value":"06A4","name":"ARABIC LETTER VEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER FA WITH THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A4"},1701:{"value":"06A5","name":"ARABIC LETTER FEH WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER FA WITH THREE DOTS BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A5"},1702:{"value":"06A6","name":"ARABIC LETTER PEHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER FA WITH FOUR DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A6"},1703:{"value":"06A7","name":"ARABIC LETTER QAF WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A7"},1704:{"value":"06A8","name":"ARABIC LETTER QAF WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A8"},1705:{"value":"06A9","name":"ARABIC LETTER KEHEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER OPEN CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06A9"},1706:{"value":"06AA","name":"ARABIC LETTER SWASH KAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER SWASH CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06AA"},1707:{"value":"06AB","name":"ARABIC LETTER KAF WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER CAF WITH RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06AB"},1708:{"value":"06AC","name":"ARABIC LETTER KAF WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER CAF WITH DOT ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06AC"},1709:{"value":"06AD","name":"ARABIC LETTER NG","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER CAF WITH THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06AD"},1710:{"value":"06AE","name":"ARABIC LETTER KAF WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER CAF WITH THREE DOTS BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06AE"},1711:{"value":"06AF","name":"ARABIC LETTER GAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06AF"},1712:{"value":"06B0","name":"ARABIC LETTER GAF WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B0"},1713:{"value":"06B1","name":"ARABIC LETTER NGOEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER GAF WITH TWO DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B1"},1714:{"value":"06B2","name":"ARABIC LETTER GAF WITH TWO DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B2"},1715:{"value":"06B3","name":"ARABIC LETTER GUEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B3"},1716:{"value":"06B4","name":"ARABIC LETTER GAF WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B4"},1717:{"value":"06B5","name":"ARABIC LETTER LAM WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B5"},1718:{"value":"06B6","name":"ARABIC LETTER LAM WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B6"},1719:{"value":"06B7","name":"ARABIC LETTER LAM WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B7"},1720:{"value":"06B8","name":"ARABIC LETTER LAM WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B8"},1721:{"value":"06B9","name":"ARABIC LETTER NOON WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06B9"},1722:{"value":"06BA","name":"ARABIC LETTER NOON GHUNNA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DOTLESS NOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06BA"},1723:{"value":"06BB","name":"ARABIC LETTER RNOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DOTLESS NOON WITH SMALL TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06BB"},1724:{"value":"06BC","name":"ARABIC LETTER NOON WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06BC"},1725:{"value":"06BD","name":"ARABIC LETTER NOON WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06BD"},1726:{"value":"06BE","name":"ARABIC LETTER HEH DOACHASHMEE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER KNOTTED HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06BE"},1727:{"value":"06BF","name":"ARABIC LETTER TCHEH WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06BF"},1728:{"value":"06C0","name":"ARABIC LETTER HEH WITH YEH ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"06D5 0654","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C0"},1729:{"value":"06C1","name":"ARABIC LETTER HEH GOAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HA GOAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C1"},1730:{"value":"06C2","name":"ARABIC LETTER HEH GOAL WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"06C1 0654","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON HA GOAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C2"},1731:{"value":"06C3","name":"ARABIC LETTER TEH MARBUTA GOAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER TAA MARBUTAH GOAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C3"},1732:{"value":"06C4","name":"ARABIC LETTER WAW WITH RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C4"},1733:{"value":"06C5","name":"ARABIC LETTER KIRGHIZ OE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAW WITH BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C5"},1734:{"value":"06C6","name":"ARABIC LETTER OE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAW WITH SMALL V","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C6"},1735:{"value":"06C7","name":"ARABIC LETTER U","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAW WITH DAMMAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C7"},1736:{"value":"06C8","name":"ARABIC LETTER YU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAW WITH ALEF ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C8"},1737:{"value":"06C9","name":"ARABIC LETTER KIRGHIZ YU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAW WITH INVERTED SMALL V","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06C9"},1738:{"value":"06CA","name":"ARABIC LETTER WAW WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06CA"},1739:{"value":"06CB","name":"ARABIC LETTER VE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER WAW WITH THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06CB"},1740:{"value":"06CC","name":"ARABIC LETTER FARSI YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER DOTLESS YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06CC"},1741:{"value":"06CD","name":"ARABIC LETTER YEH WITH TAIL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER YA WITH TAIL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06CD"},1742:{"value":"06CE","name":"ARABIC LETTER YEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER YA WITH SMALL V","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06CE"},1743:{"value":"06CF","name":"ARABIC LETTER WAW WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06CF"},1744:{"value":"06D0","name":"ARABIC LETTER E","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D0"},1745:{"value":"06D1","name":"ARABIC LETTER YEH WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER YA WITH THREE DOTS BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D1"},1746:{"value":"06D2","name":"ARABIC LETTER YEH BARREE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER YA BARREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D2"},1747:{"value":"06D3","name":"ARABIC LETTER YEH BARREE WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"06D2 0654","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER HAMZAH ON YA BARREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D3"},1749:{"value":"06D5","name":"ARABIC LETTER AE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D5"},1774:{"value":"06EE","name":"ARABIC LETTER DAL WITH INVERTED V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06EE"},1775:{"value":"06EF","name":"ARABIC LETTER REH WITH INVERTED V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06EF"},1786:{"value":"06FA","name":"ARABIC LETTER SHEEN WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06FA"},1787:{"value":"06FB","name":"ARABIC LETTER DAD WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06FB"},1788:{"value":"06FC","name":"ARABIC LETTER GHAIN WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06FC"},1791:{"value":"06FF","name":"ARABIC LETTER HEH WITH INVERTED V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06FF"},1808:{"value":"0710","name":"SYRIAC LETTER ALAPH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0710"},1810:{"value":"0712","name":"SYRIAC LETTER BETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0712"},1811:{"value":"0713","name":"SYRIAC LETTER GAMAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0713"},1812:{"value":"0714","name":"SYRIAC LETTER GAMAL GARSHUNI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0714"},1813:{"value":"0715","name":"SYRIAC LETTER DALATH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0715"},1814:{"value":"0716","name":"SYRIAC LETTER DOTLESS DALATH RISH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0716"},1815:{"value":"0717","name":"SYRIAC LETTER HE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0717"},1816:{"value":"0718","name":"SYRIAC LETTER WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0718"},1817:{"value":"0719","name":"SYRIAC LETTER ZAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0719"},1818:{"value":"071A","name":"SYRIAC LETTER HETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u071A"},1819:{"value":"071B","name":"SYRIAC LETTER TETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u071B"},1820:{"value":"071C","name":"SYRIAC LETTER TETH GARSHUNI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u071C"},1821:{"value":"071D","name":"SYRIAC LETTER YUDH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u071D"},1822:{"value":"071E","name":"SYRIAC LETTER YUDH HE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u071E"},1823:{"value":"071F","name":"SYRIAC LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u071F"},1824:{"value":"0720","name":"SYRIAC LETTER LAMADH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0720"},1825:{"value":"0721","name":"SYRIAC LETTER MIM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0721"},1826:{"value":"0722","name":"SYRIAC LETTER NUN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0722"},1827:{"value":"0723","name":"SYRIAC LETTER SEMKATH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0723"},1828:{"value":"0724","name":"SYRIAC LETTER FINAL SEMKATH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0724"},1829:{"value":"0725","name":"SYRIAC LETTER E","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0725"},1830:{"value":"0726","name":"SYRIAC LETTER PE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0726"},1831:{"value":"0727","name":"SYRIAC LETTER REVERSED PE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0727"},1832:{"value":"0728","name":"SYRIAC LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0728"},1833:{"value":"0729","name":"SYRIAC LETTER QAPH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0729"},1834:{"value":"072A","name":"SYRIAC LETTER RISH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u072A"},1835:{"value":"072B","name":"SYRIAC LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u072B"},1836:{"value":"072C","name":"SYRIAC LETTER TAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u072C"},1837:{"value":"072D","name":"SYRIAC LETTER PERSIAN BHETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u072D"},1838:{"value":"072E","name":"SYRIAC LETTER PERSIAN GHAMAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u072E"},1839:{"value":"072F","name":"SYRIAC LETTER PERSIAN DHALATH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u072F"},1869:{"value":"074D","name":"SYRIAC LETTER SOGDIAN ZHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u074D"},1870:{"value":"074E","name":"SYRIAC LETTER SOGDIAN KHAPH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u074E"},1871:{"value":"074F","name":"SYRIAC LETTER SOGDIAN FE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u074F"},1872:{"value":"0750","name":"ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0750"},1873:{"value":"0751","name":"ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0751"},1874:{"value":"0752","name":"ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0752"},1875:{"value":"0753","name":"ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0753"},1876:{"value":"0754","name":"ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0754"},1877:{"value":"0755","name":"ARABIC LETTER BEH WITH INVERTED SMALL V BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0755"},1878:{"value":"0756","name":"ARABIC LETTER BEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0756"},1879:{"value":"0757","name":"ARABIC LETTER HAH WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0757"},1880:{"value":"0758","name":"ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0758"},1881:{"value":"0759","name":"ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0759"},1882:{"value":"075A","name":"ARABIC LETTER DAL WITH INVERTED SMALL V BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u075A"},1883:{"value":"075B","name":"ARABIC LETTER REH WITH STROKE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u075B"},1884:{"value":"075C","name":"ARABIC LETTER SEEN WITH FOUR DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u075C"},1885:{"value":"075D","name":"ARABIC LETTER AIN WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u075D"},1886:{"value":"075E","name":"ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u075E"},1887:{"value":"075F","name":"ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u075F"},1888:{"value":"0760","name":"ARABIC LETTER FEH WITH TWO DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0760"},1889:{"value":"0761","name":"ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0761"},1890:{"value":"0762","name":"ARABIC LETTER KEHEH WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0762"},1891:{"value":"0763","name":"ARABIC LETTER KEHEH WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0763"},1892:{"value":"0764","name":"ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0764"},1893:{"value":"0765","name":"ARABIC LETTER MEEM WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0765"},1894:{"value":"0766","name":"ARABIC LETTER MEEM WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0766"},1895:{"value":"0767","name":"ARABIC LETTER NOON WITH TWO DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0767"},1896:{"value":"0768","name":"ARABIC LETTER NOON WITH SMALL TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0768"},1897:{"value":"0769","name":"ARABIC LETTER NOON WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0769"},1898:{"value":"076A","name":"ARABIC LETTER LAM WITH BAR","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u076A"},1899:{"value":"076B","name":"ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u076B"},1900:{"value":"076C","name":"ARABIC LETTER REH WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u076C"},1901:{"value":"076D","name":"ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u076D"},1902:{"value":"076E","name":"ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u076E"},1903:{"value":"076F","name":"ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u076F"},1904:{"value":"0770","name":"ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0770"},1905:{"value":"0771","name":"ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0771"},1906:{"value":"0772","name":"ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0772"},1907:{"value":"0773","name":"ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0773"},1908:{"value":"0774","name":"ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0774"},1909:{"value":"0775","name":"ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0775"},1910:{"value":"0776","name":"ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0776"},1911:{"value":"0777","name":"ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0777"},1912:{"value":"0778","name":"ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0778"},1913:{"value":"0779","name":"ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0779"},1914:{"value":"077A","name":"ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u077A"},1915:{"value":"077B","name":"ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u077B"},1916:{"value":"077C","name":"ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u077C"},1917:{"value":"077D","name":"ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u077D"},1918:{"value":"077E","name":"ARABIC LETTER SEEN WITH INVERTED V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u077E"},1919:{"value":"077F","name":"ARABIC LETTER KAF WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u077F"},1920:{"value":"0780","name":"THAANA LETTER HAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0780"},1921:{"value":"0781","name":"THAANA LETTER SHAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0781"},1922:{"value":"0782","name":"THAANA LETTER NOONU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0782"},1923:{"value":"0783","name":"THAANA LETTER RAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0783"},1924:{"value":"0784","name":"THAANA LETTER BAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0784"},1925:{"value":"0785","name":"THAANA LETTER LHAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0785"},1926:{"value":"0786","name":"THAANA LETTER KAAFU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0786"},1927:{"value":"0787","name":"THAANA LETTER ALIFU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0787"},1928:{"value":"0788","name":"THAANA LETTER VAAVU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0788"},1929:{"value":"0789","name":"THAANA LETTER MEEMU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0789"},1930:{"value":"078A","name":"THAANA LETTER FAAFU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u078A"},1931:{"value":"078B","name":"THAANA LETTER DHAALU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u078B"},1932:{"value":"078C","name":"THAANA LETTER THAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u078C"},1933:{"value":"078D","name":"THAANA LETTER LAAMU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u078D"},1934:{"value":"078E","name":"THAANA LETTER GAAFU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u078E"},1935:{"value":"078F","name":"THAANA LETTER GNAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u078F"},1936:{"value":"0790","name":"THAANA LETTER SEENU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0790"},1937:{"value":"0791","name":"THAANA LETTER DAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0791"},1938:{"value":"0792","name":"THAANA LETTER ZAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0792"},1939:{"value":"0793","name":"THAANA LETTER TAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0793"},1940:{"value":"0794","name":"THAANA LETTER YAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0794"},1941:{"value":"0795","name":"THAANA LETTER PAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0795"},1942:{"value":"0796","name":"THAANA LETTER JAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0796"},1943:{"value":"0797","name":"THAANA LETTER CHAVIYANI","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0797"},1944:{"value":"0798","name":"THAANA LETTER TTAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0798"},1945:{"value":"0799","name":"THAANA LETTER HHAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0799"},1946:{"value":"079A","name":"THAANA LETTER KHAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u079A"},1947:{"value":"079B","name":"THAANA LETTER THAALU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u079B"},1948:{"value":"079C","name":"THAANA LETTER ZAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u079C"},1949:{"value":"079D","name":"THAANA LETTER SHEENU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u079D"},1950:{"value":"079E","name":"THAANA LETTER SAADHU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u079E"},1951:{"value":"079F","name":"THAANA LETTER DAADHU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u079F"},1952:{"value":"07A0","name":"THAANA LETTER TO","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A0"},1953:{"value":"07A1","name":"THAANA LETTER ZO","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A1"},1954:{"value":"07A2","name":"THAANA LETTER AINU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A2"},1955:{"value":"07A3","name":"THAANA LETTER GHAINU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A3"},1956:{"value":"07A4","name":"THAANA LETTER QAAFU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A4"},1957:{"value":"07A5","name":"THAANA LETTER WAAVU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A5"},1969:{"value":"07B1","name":"THAANA LETTER NAA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07B1"},1994:{"value":"07CA","name":"NKO LETTER A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07CA"},1995:{"value":"07CB","name":"NKO LETTER EE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07CB"},1996:{"value":"07CC","name":"NKO LETTER I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07CC"},1997:{"value":"07CD","name":"NKO LETTER E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07CD"},1998:{"value":"07CE","name":"NKO LETTER U","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07CE"},1999:{"value":"07CF","name":"NKO LETTER OO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07CF"},2000:{"value":"07D0","name":"NKO LETTER O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D0"},2001:{"value":"07D1","name":"NKO LETTER DAGBASINNA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D1"},2002:{"value":"07D2","name":"NKO LETTER N","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D2"},2003:{"value":"07D3","name":"NKO LETTER BA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D3"},2004:{"value":"07D4","name":"NKO LETTER PA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D4"},2005:{"value":"07D5","name":"NKO LETTER TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D5"},2006:{"value":"07D6","name":"NKO LETTER JA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D6"},2007:{"value":"07D7","name":"NKO LETTER CHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D7"},2008:{"value":"07D8","name":"NKO LETTER DA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D8"},2009:{"value":"07D9","name":"NKO LETTER RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07D9"},2010:{"value":"07DA","name":"NKO LETTER RRA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07DA"},2011:{"value":"07DB","name":"NKO LETTER SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07DB"},2012:{"value":"07DC","name":"NKO LETTER GBA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07DC"},2013:{"value":"07DD","name":"NKO LETTER FA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07DD"},2014:{"value":"07DE","name":"NKO LETTER KA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07DE"},2015:{"value":"07DF","name":"NKO LETTER LA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07DF"},2016:{"value":"07E0","name":"NKO LETTER NA WOLOSO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E0"},2017:{"value":"07E1","name":"NKO LETTER MA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E1"},2018:{"value":"07E2","name":"NKO LETTER NYA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E2"},2019:{"value":"07E3","name":"NKO LETTER NA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E3"},2020:{"value":"07E4","name":"NKO LETTER HA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E4"},2021:{"value":"07E5","name":"NKO LETTER WA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E5"},2022:{"value":"07E6","name":"NKO LETTER YA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E6"},2023:{"value":"07E7","name":"NKO LETTER NYA WOLOSO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E7"},2024:{"value":"07E8","name":"NKO LETTER JONA JA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E8"},2025:{"value":"07E9","name":"NKO LETTER JONA CHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07E9"},2026:{"value":"07EA","name":"NKO LETTER JONA RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07EA"},2048:{"value":"0800","name":"SAMARITAN LETTER ALAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0800"},2049:{"value":"0801","name":"SAMARITAN LETTER BIT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0801"},2050:{"value":"0802","name":"SAMARITAN LETTER GAMAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0802"},2051:{"value":"0803","name":"SAMARITAN LETTER DALAT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0803"},2052:{"value":"0804","name":"SAMARITAN LETTER IY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0804"},2053:{"value":"0805","name":"SAMARITAN LETTER BAA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0805"},2054:{"value":"0806","name":"SAMARITAN LETTER ZEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0806"},2055:{"value":"0807","name":"SAMARITAN LETTER IT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0807"},2056:{"value":"0808","name":"SAMARITAN LETTER TIT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0808"},2057:{"value":"0809","name":"SAMARITAN LETTER YUT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0809"},2058:{"value":"080A","name":"SAMARITAN LETTER KAAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u080A"},2059:{"value":"080B","name":"SAMARITAN LETTER LABAT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u080B"},2060:{"value":"080C","name":"SAMARITAN LETTER MIM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u080C"},2061:{"value":"080D","name":"SAMARITAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u080D"},2062:{"value":"080E","name":"SAMARITAN LETTER SINGAAT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u080E"},2063:{"value":"080F","name":"SAMARITAN LETTER IN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u080F"},2064:{"value":"0810","name":"SAMARITAN LETTER FI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0810"},2065:{"value":"0811","name":"SAMARITAN LETTER TSAADIY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0811"},2066:{"value":"0812","name":"SAMARITAN LETTER QUF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0812"},2067:{"value":"0813","name":"SAMARITAN LETTER RISH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0813"},2068:{"value":"0814","name":"SAMARITAN LETTER SHAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0814"},2069:{"value":"0815","name":"SAMARITAN LETTER TAAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0815"},2112:{"value":"0840","name":"MANDAIC LETTER HALQA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0840"},2113:{"value":"0841","name":"MANDAIC LETTER AB","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0841"},2114:{"value":"0842","name":"MANDAIC LETTER AG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0842"},2115:{"value":"0843","name":"MANDAIC LETTER AD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0843"},2116:{"value":"0844","name":"MANDAIC LETTER AH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0844"},2117:{"value":"0845","name":"MANDAIC LETTER USHENNA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0845"},2118:{"value":"0846","name":"MANDAIC LETTER AZ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0846"},2119:{"value":"0847","name":"MANDAIC LETTER IT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0847"},2120:{"value":"0848","name":"MANDAIC LETTER ATT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0848"},2121:{"value":"0849","name":"MANDAIC LETTER AKSA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0849"},2122:{"value":"084A","name":"MANDAIC LETTER AK","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u084A"},2123:{"value":"084B","name":"MANDAIC LETTER AL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u084B"},2124:{"value":"084C","name":"MANDAIC LETTER AM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u084C"},2125:{"value":"084D","name":"MANDAIC LETTER AN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u084D"},2126:{"value":"084E","name":"MANDAIC LETTER AS","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u084E"},2127:{"value":"084F","name":"MANDAIC LETTER IN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u084F"},2128:{"value":"0850","name":"MANDAIC LETTER AP","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0850"},2129:{"value":"0851","name":"MANDAIC LETTER ASZ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0851"},2130:{"value":"0852","name":"MANDAIC LETTER AQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0852"},2131:{"value":"0853","name":"MANDAIC LETTER AR","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0853"},2132:{"value":"0854","name":"MANDAIC LETTER ASH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0854"},2133:{"value":"0855","name":"MANDAIC LETTER AT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0855"},2134:{"value":"0856","name":"MANDAIC LETTER DUSHENNA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0856"},2135:{"value":"0857","name":"MANDAIC LETTER KAD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0857"},2136:{"value":"0858","name":"MANDAIC LETTER AIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0858"},2144:{"value":"0860","name":"SYRIAC LETTER MALAYALAM NGA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0860"},2145:{"value":"0861","name":"SYRIAC LETTER MALAYALAM JA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0861"},2146:{"value":"0862","name":"SYRIAC LETTER MALAYALAM NYA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0862"},2147:{"value":"0863","name":"SYRIAC LETTER MALAYALAM TTA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0863"},2148:{"value":"0864","name":"SYRIAC LETTER MALAYALAM NNA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0864"},2149:{"value":"0865","name":"SYRIAC LETTER MALAYALAM NNNA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0865"},2150:{"value":"0866","name":"SYRIAC LETTER MALAYALAM BHA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0866"},2151:{"value":"0867","name":"SYRIAC LETTER MALAYALAM RA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0867"},2152:{"value":"0868","name":"SYRIAC LETTER MALAYALAM LLA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0868"},2153:{"value":"0869","name":"SYRIAC LETTER MALAYALAM LLLA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0869"},2154:{"value":"086A","name":"SYRIAC LETTER MALAYALAM SSA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u086A"},2160:{"value":"0870","name":"ARABIC LETTER ALEF WITH ATTACHED FATHA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0870"},2161:{"value":"0871","name":"ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0871"},2162:{"value":"0872","name":"ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0872"},2163:{"value":"0873","name":"ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0873"},2164:{"value":"0874","name":"ARABIC LETTER ALEF WITH ATTACHED KASRA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0874"},2165:{"value":"0875","name":"ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0875"},2166:{"value":"0876","name":"ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0876"},2167:{"value":"0877","name":"ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0877"},2168:{"value":"0878","name":"ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0878"},2169:{"value":"0879","name":"ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0879"},2170:{"value":"087A","name":"ARABIC LETTER ALEF WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u087A"},2171:{"value":"087B","name":"ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u087B"},2172:{"value":"087C","name":"ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u087C"},2173:{"value":"087D","name":"ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u087D"},2174:{"value":"087E","name":"ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u087E"},2175:{"value":"087F","name":"ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u087F"},2176:{"value":"0880","name":"ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0880"},2177:{"value":"0881","name":"ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0881"},2178:{"value":"0882","name":"ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0882"},2179:{"value":"0883","name":"ARABIC TATWEEL WITH OVERSTRUCK HAMZA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0883"},2180:{"value":"0884","name":"ARABIC TATWEEL WITH OVERSTRUCK WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0884"},2181:{"value":"0885","name":"ARABIC TATWEEL WITH TWO DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0885"},2182:{"value":"0886","name":"ARABIC LETTER THIN YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0886"},2183:{"value":"0887","name":"ARABIC BASELINE ROUND DOT","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0887"},2185:{"value":"0889","name":"ARABIC LETTER NOON WITH INVERTED SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0889"},2186:{"value":"088A","name":"ARABIC LETTER HAH WITH INVERTED SMALL V BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u088A"},2187:{"value":"088B","name":"ARABIC LETTER TAH WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u088B"},2188:{"value":"088C","name":"ARABIC LETTER TAH WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u088C"},2189:{"value":"088D","name":"ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u088D"},2190:{"value":"088E","name":"ARABIC VERTICAL TAIL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u088E"},2208:{"value":"08A0","name":"ARABIC LETTER BEH WITH SMALL V BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A0"},2209:{"value":"08A1","name":"ARABIC LETTER BEH WITH HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A1"},2210:{"value":"08A2","name":"ARABIC LETTER JEEM WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A2"},2211:{"value":"08A3","name":"ARABIC LETTER TAH WITH TWO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A3"},2212:{"value":"08A4","name":"ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A4"},2213:{"value":"08A5","name":"ARABIC LETTER QAF WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A5"},2214:{"value":"08A6","name":"ARABIC LETTER LAM WITH DOUBLE BAR","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A6"},2215:{"value":"08A7","name":"ARABIC LETTER MEEM WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A7"},2216:{"value":"08A8","name":"ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A8"},2217:{"value":"08A9","name":"ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08A9"},2218:{"value":"08AA","name":"ARABIC LETTER REH WITH LOOP","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08AA"},2219:{"value":"08AB","name":"ARABIC LETTER WAW WITH DOT WITHIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08AB"},2220:{"value":"08AC","name":"ARABIC LETTER ROHINGYA YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08AC"},2221:{"value":"08AD","name":"ARABIC LETTER LOW ALEF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08AD"},2222:{"value":"08AE","name":"ARABIC LETTER DAL WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08AE"},2223:{"value":"08AF","name":"ARABIC LETTER SAD WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08AF"},2224:{"value":"08B0","name":"ARABIC LETTER GAF WITH INVERTED STROKE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B0"},2225:{"value":"08B1","name":"ARABIC LETTER STRAIGHT WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B1"},2226:{"value":"08B2","name":"ARABIC LETTER ZAIN WITH INVERTED V ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B2"},2227:{"value":"08B3","name":"ARABIC LETTER AIN WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B3"},2228:{"value":"08B4","name":"ARABIC LETTER KAF WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B4"},2229:{"value":"08B5","name":"ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B5"},2230:{"value":"08B6","name":"ARABIC LETTER BEH WITH SMALL MEEM ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B6"},2231:{"value":"08B7","name":"ARABIC LETTER PEH WITH SMALL MEEM ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B7"},2232:{"value":"08B8","name":"ARABIC LETTER TEH WITH SMALL TEH ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B8"},2233:{"value":"08B9","name":"ARABIC LETTER REH WITH SMALL NOON ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08B9"},2234:{"value":"08BA","name":"ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08BA"},2235:{"value":"08BB","name":"ARABIC LETTER AFRICAN FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08BB"},2236:{"value":"08BC","name":"ARABIC LETTER AFRICAN QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08BC"},2237:{"value":"08BD","name":"ARABIC LETTER AFRICAN NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08BD"},2238:{"value":"08BE","name":"ARABIC LETTER PEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08BE"},2239:{"value":"08BF","name":"ARABIC LETTER TEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08BF"},2240:{"value":"08C0","name":"ARABIC LETTER TTEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C0"},2241:{"value":"08C1","name":"ARABIC LETTER TCHEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C1"},2242:{"value":"08C2","name":"ARABIC LETTER KEHEH WITH SMALL V","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C2"},2243:{"value":"08C3","name":"ARABIC LETTER GHAIN WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C3"},2244:{"value":"08C4","name":"ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C4"},2245:{"value":"08C5","name":"ARABIC LETTER JEEM WITH THREE DOTS ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C5"},2246:{"value":"08C6","name":"ARABIC LETTER JEEM WITH THREE DOTS BELOW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C6"},2247:{"value":"08C7","name":"ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C7"},2248:{"value":"08C8","name":"ARABIC LETTER GRAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08C8"},2308:{"value":"0904","name":"DEVANAGARI LETTER SHORT A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0904"},2309:{"value":"0905","name":"DEVANAGARI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0905"},2310:{"value":"0906","name":"DEVANAGARI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0906"},2311:{"value":"0907","name":"DEVANAGARI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0907"},2312:{"value":"0908","name":"DEVANAGARI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0908"},2313:{"value":"0909","name":"DEVANAGARI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0909"},2314:{"value":"090A","name":"DEVANAGARI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u090A"},2315:{"value":"090B","name":"DEVANAGARI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u090B"},2316:{"value":"090C","name":"DEVANAGARI LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u090C"},2317:{"value":"090D","name":"DEVANAGARI LETTER CANDRA E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u090D"},2318:{"value":"090E","name":"DEVANAGARI LETTER SHORT E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u090E"},2319:{"value":"090F","name":"DEVANAGARI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u090F"},2320:{"value":"0910","name":"DEVANAGARI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0910"},2321:{"value":"0911","name":"DEVANAGARI LETTER CANDRA O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0911"},2322:{"value":"0912","name":"DEVANAGARI LETTER SHORT O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0912"},2323:{"value":"0913","name":"DEVANAGARI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0913"},2324:{"value":"0914","name":"DEVANAGARI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0914"},2325:{"value":"0915","name":"DEVANAGARI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0915"},2326:{"value":"0916","name":"DEVANAGARI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0916"},2327:{"value":"0917","name":"DEVANAGARI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0917"},2328:{"value":"0918","name":"DEVANAGARI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0918"},2329:{"value":"0919","name":"DEVANAGARI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0919"},2330:{"value":"091A","name":"DEVANAGARI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u091A"},2331:{"value":"091B","name":"DEVANAGARI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u091B"},2332:{"value":"091C","name":"DEVANAGARI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u091C"},2333:{"value":"091D","name":"DEVANAGARI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u091D"},2334:{"value":"091E","name":"DEVANAGARI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u091E"},2335:{"value":"091F","name":"DEVANAGARI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u091F"},2336:{"value":"0920","name":"DEVANAGARI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0920"},2337:{"value":"0921","name":"DEVANAGARI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0921"},2338:{"value":"0922","name":"DEVANAGARI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0922"},2339:{"value":"0923","name":"DEVANAGARI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0923"},2340:{"value":"0924","name":"DEVANAGARI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0924"},2341:{"value":"0925","name":"DEVANAGARI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0925"},2342:{"value":"0926","name":"DEVANAGARI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0926"},2343:{"value":"0927","name":"DEVANAGARI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0927"},2344:{"value":"0928","name":"DEVANAGARI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0928"},2345:{"value":"0929","name":"DEVANAGARI LETTER NNNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0928 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0929"},2346:{"value":"092A","name":"DEVANAGARI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u092A"},2347:{"value":"092B","name":"DEVANAGARI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u092B"},2348:{"value":"092C","name":"DEVANAGARI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u092C"},2349:{"value":"092D","name":"DEVANAGARI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u092D"},2350:{"value":"092E","name":"DEVANAGARI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u092E"},2351:{"value":"092F","name":"DEVANAGARI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u092F"},2352:{"value":"0930","name":"DEVANAGARI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0930"},2353:{"value":"0931","name":"DEVANAGARI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0930 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0931"},2354:{"value":"0932","name":"DEVANAGARI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0932"},2355:{"value":"0933","name":"DEVANAGARI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0933"},2356:{"value":"0934","name":"DEVANAGARI LETTER LLLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0933 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0934"},2357:{"value":"0935","name":"DEVANAGARI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0935"},2358:{"value":"0936","name":"DEVANAGARI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0936"},2359:{"value":"0937","name":"DEVANAGARI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0937"},2360:{"value":"0938","name":"DEVANAGARI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0938"},2361:{"value":"0939","name":"DEVANAGARI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0939"},2365:{"value":"093D","name":"DEVANAGARI SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u093D"},2384:{"value":"0950","name":"DEVANAGARI OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0950"},2392:{"value":"0958","name":"DEVANAGARI LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0915 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0958"},2393:{"value":"0959","name":"DEVANAGARI LETTER KHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0916 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0959"},2394:{"value":"095A","name":"DEVANAGARI LETTER GHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0917 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u095A"},2395:{"value":"095B","name":"DEVANAGARI LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"091C 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u095B"},2396:{"value":"095C","name":"DEVANAGARI LETTER DDDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0921 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u095C"},2397:{"value":"095D","name":"DEVANAGARI LETTER RHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0922 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u095D"},2398:{"value":"095E","name":"DEVANAGARI LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"092B 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u095E"},2399:{"value":"095F","name":"DEVANAGARI LETTER YYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"092F 093C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u095F"},2400:{"value":"0960","name":"DEVANAGARI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0960"},2401:{"value":"0961","name":"DEVANAGARI LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0961"},2418:{"value":"0972","name":"DEVANAGARI LETTER CANDRA A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0972"},2419:{"value":"0973","name":"DEVANAGARI LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0973"},2420:{"value":"0974","name":"DEVANAGARI LETTER OOE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0974"},2421:{"value":"0975","name":"DEVANAGARI LETTER AW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0975"},2422:{"value":"0976","name":"DEVANAGARI LETTER UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0976"},2423:{"value":"0977","name":"DEVANAGARI LETTER UUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0977"},2424:{"value":"0978","name":"DEVANAGARI LETTER MARWARI DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0978"},2425:{"value":"0979","name":"DEVANAGARI LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0979"},2426:{"value":"097A","name":"DEVANAGARI LETTER HEAVY YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u097A"},2427:{"value":"097B","name":"DEVANAGARI LETTER GGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u097B"},2428:{"value":"097C","name":"DEVANAGARI LETTER JJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u097C"},2429:{"value":"097D","name":"DEVANAGARI LETTER GLOTTAL STOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u097D"},2430:{"value":"097E","name":"DEVANAGARI LETTER DDDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u097E"},2431:{"value":"097F","name":"DEVANAGARI LETTER BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u097F"},2432:{"value":"0980","name":"BENGALI ANJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0980"},2437:{"value":"0985","name":"BENGALI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0985"},2438:{"value":"0986","name":"BENGALI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0986"},2439:{"value":"0987","name":"BENGALI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0987"},2440:{"value":"0988","name":"BENGALI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0988"},2441:{"value":"0989","name":"BENGALI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0989"},2442:{"value":"098A","name":"BENGALI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u098A"},2443:{"value":"098B","name":"BENGALI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u098B"},2444:{"value":"098C","name":"BENGALI LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u098C"},2447:{"value":"098F","name":"BENGALI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u098F"},2448:{"value":"0990","name":"BENGALI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0990"},2451:{"value":"0993","name":"BENGALI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0993"},2452:{"value":"0994","name":"BENGALI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0994"},2453:{"value":"0995","name":"BENGALI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0995"},2454:{"value":"0996","name":"BENGALI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0996"},2455:{"value":"0997","name":"BENGALI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0997"},2456:{"value":"0998","name":"BENGALI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0998"},2457:{"value":"0999","name":"BENGALI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0999"},2458:{"value":"099A","name":"BENGALI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u099A"},2459:{"value":"099B","name":"BENGALI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u099B"},2460:{"value":"099C","name":"BENGALI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u099C"},2461:{"value":"099D","name":"BENGALI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u099D"},2462:{"value":"099E","name":"BENGALI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u099E"},2463:{"value":"099F","name":"BENGALI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u099F"},2464:{"value":"09A0","name":"BENGALI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A0"},2465:{"value":"09A1","name":"BENGALI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A1"},2466:{"value":"09A2","name":"BENGALI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A2"},2467:{"value":"09A3","name":"BENGALI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A3"},2468:{"value":"09A4","name":"BENGALI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A4"},2469:{"value":"09A5","name":"BENGALI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A5"},2470:{"value":"09A6","name":"BENGALI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A6"},2471:{"value":"09A7","name":"BENGALI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A7"},2472:{"value":"09A8","name":"BENGALI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09A8"},2474:{"value":"09AA","name":"BENGALI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09AA"},2475:{"value":"09AB","name":"BENGALI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09AB"},2476:{"value":"09AC","name":"BENGALI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09AC"},2477:{"value":"09AD","name":"BENGALI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09AD"},2478:{"value":"09AE","name":"BENGALI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09AE"},2479:{"value":"09AF","name":"BENGALI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09AF"},2480:{"value":"09B0","name":"BENGALI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09B0"},2482:{"value":"09B2","name":"BENGALI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09B2"},2486:{"value":"09B6","name":"BENGALI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09B6"},2487:{"value":"09B7","name":"BENGALI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09B7"},2488:{"value":"09B8","name":"BENGALI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09B8"},2489:{"value":"09B9","name":"BENGALI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09B9"},2493:{"value":"09BD","name":"BENGALI SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09BD"},2510:{"value":"09CE","name":"BENGALI LETTER KHANDA TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09CE"},2524:{"value":"09DC","name":"BENGALI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"09A1 09BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09DC"},2525:{"value":"09DD","name":"BENGALI LETTER RHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"09A2 09BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09DD"},2527:{"value":"09DF","name":"BENGALI LETTER YYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"09AF 09BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09DF"},2528:{"value":"09E0","name":"BENGALI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E0"},2529:{"value":"09E1","name":"BENGALI LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E1"},2544:{"value":"09F0","name":"BENGALI LETTER RA WITH MIDDLE DIAGONAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F0"},2545:{"value":"09F1","name":"BENGALI LETTER RA WITH LOWER DIAGONAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BENGALI LETTER VA WITH LOWER DIAGONAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F1"},2556:{"value":"09FC","name":"BENGALI LETTER VEDIC ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09FC"},2565:{"value":"0A05","name":"GURMUKHI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A05"},2566:{"value":"0A06","name":"GURMUKHI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A06"},2567:{"value":"0A07","name":"GURMUKHI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A07"},2568:{"value":"0A08","name":"GURMUKHI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A08"},2569:{"value":"0A09","name":"GURMUKHI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A09"},2570:{"value":"0A0A","name":"GURMUKHI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A0A"},2575:{"value":"0A0F","name":"GURMUKHI LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A0F"},2576:{"value":"0A10","name":"GURMUKHI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A10"},2579:{"value":"0A13","name":"GURMUKHI LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A13"},2580:{"value":"0A14","name":"GURMUKHI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A14"},2581:{"value":"0A15","name":"GURMUKHI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A15"},2582:{"value":"0A16","name":"GURMUKHI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A16"},2583:{"value":"0A17","name":"GURMUKHI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A17"},2584:{"value":"0A18","name":"GURMUKHI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A18"},2585:{"value":"0A19","name":"GURMUKHI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A19"},2586:{"value":"0A1A","name":"GURMUKHI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A1A"},2587:{"value":"0A1B","name":"GURMUKHI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A1B"},2588:{"value":"0A1C","name":"GURMUKHI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A1C"},2589:{"value":"0A1D","name":"GURMUKHI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A1D"},2590:{"value":"0A1E","name":"GURMUKHI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A1E"},2591:{"value":"0A1F","name":"GURMUKHI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A1F"},2592:{"value":"0A20","name":"GURMUKHI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A20"},2593:{"value":"0A21","name":"GURMUKHI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A21"},2594:{"value":"0A22","name":"GURMUKHI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A22"},2595:{"value":"0A23","name":"GURMUKHI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A23"},2596:{"value":"0A24","name":"GURMUKHI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A24"},2597:{"value":"0A25","name":"GURMUKHI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A25"},2598:{"value":"0A26","name":"GURMUKHI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A26"},2599:{"value":"0A27","name":"GURMUKHI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A27"},2600:{"value":"0A28","name":"GURMUKHI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A28"},2602:{"value":"0A2A","name":"GURMUKHI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A2A"},2603:{"value":"0A2B","name":"GURMUKHI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A2B"},2604:{"value":"0A2C","name":"GURMUKHI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A2C"},2605:{"value":"0A2D","name":"GURMUKHI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A2D"},2606:{"value":"0A2E","name":"GURMUKHI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A2E"},2607:{"value":"0A2F","name":"GURMUKHI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A2F"},2608:{"value":"0A30","name":"GURMUKHI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A30"},2610:{"value":"0A32","name":"GURMUKHI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A32"},2611:{"value":"0A33","name":"GURMUKHI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0A32 0A3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A33"},2613:{"value":"0A35","name":"GURMUKHI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A35"},2614:{"value":"0A36","name":"GURMUKHI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0A38 0A3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A36"},2616:{"value":"0A38","name":"GURMUKHI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A38"},2617:{"value":"0A39","name":"GURMUKHI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A39"},2649:{"value":"0A59","name":"GURMUKHI LETTER KHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0A16 0A3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A59"},2650:{"value":"0A5A","name":"GURMUKHI LETTER GHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0A17 0A3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A5A"},2651:{"value":"0A5B","name":"GURMUKHI LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0A1C 0A3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A5B"},2652:{"value":"0A5C","name":"GURMUKHI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A5C"},2654:{"value":"0A5E","name":"GURMUKHI LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0A2B 0A3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A5E"},2674:{"value":"0A72","name":"GURMUKHI IRI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A72"},2675:{"value":"0A73","name":"GURMUKHI URA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A73"},2676:{"value":"0A74","name":"GURMUKHI EK ONKAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A74"},2693:{"value":"0A85","name":"GUJARATI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A85"},2694:{"value":"0A86","name":"GUJARATI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A86"},2695:{"value":"0A87","name":"GUJARATI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A87"},2696:{"value":"0A88","name":"GUJARATI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A88"},2697:{"value":"0A89","name":"GUJARATI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A89"},2698:{"value":"0A8A","name":"GUJARATI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A8A"},2699:{"value":"0A8B","name":"GUJARATI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A8B"},2700:{"value":"0A8C","name":"GUJARATI LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A8C"},2701:{"value":"0A8D","name":"GUJARATI VOWEL CANDRA E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A8D"},2703:{"value":"0A8F","name":"GUJARATI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A8F"},2704:{"value":"0A90","name":"GUJARATI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A90"},2705:{"value":"0A91","name":"GUJARATI VOWEL CANDRA O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A91"},2707:{"value":"0A93","name":"GUJARATI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A93"},2708:{"value":"0A94","name":"GUJARATI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A94"},2709:{"value":"0A95","name":"GUJARATI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A95"},2710:{"value":"0A96","name":"GUJARATI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A96"},2711:{"value":"0A97","name":"GUJARATI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A97"},2712:{"value":"0A98","name":"GUJARATI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A98"},2713:{"value":"0A99","name":"GUJARATI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A99"},2714:{"value":"0A9A","name":"GUJARATI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A9A"},2715:{"value":"0A9B","name":"GUJARATI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A9B"},2716:{"value":"0A9C","name":"GUJARATI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A9C"},2717:{"value":"0A9D","name":"GUJARATI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A9D"},2718:{"value":"0A9E","name":"GUJARATI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A9E"},2719:{"value":"0A9F","name":"GUJARATI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A9F"},2720:{"value":"0AA0","name":"GUJARATI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA0"},2721:{"value":"0AA1","name":"GUJARATI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA1"},2722:{"value":"0AA2","name":"GUJARATI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA2"},2723:{"value":"0AA3","name":"GUJARATI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA3"},2724:{"value":"0AA4","name":"GUJARATI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA4"},2725:{"value":"0AA5","name":"GUJARATI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA5"},2726:{"value":"0AA6","name":"GUJARATI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA6"},2727:{"value":"0AA7","name":"GUJARATI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA7"},2728:{"value":"0AA8","name":"GUJARATI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AA8"},2730:{"value":"0AAA","name":"GUJARATI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AAA"},2731:{"value":"0AAB","name":"GUJARATI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AAB"},2732:{"value":"0AAC","name":"GUJARATI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AAC"},2733:{"value":"0AAD","name":"GUJARATI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AAD"},2734:{"value":"0AAE","name":"GUJARATI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AAE"},2735:{"value":"0AAF","name":"GUJARATI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AAF"},2736:{"value":"0AB0","name":"GUJARATI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB0"},2738:{"value":"0AB2","name":"GUJARATI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB2"},2739:{"value":"0AB3","name":"GUJARATI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB3"},2741:{"value":"0AB5","name":"GUJARATI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB5"},2742:{"value":"0AB6","name":"GUJARATI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB6"},2743:{"value":"0AB7","name":"GUJARATI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB7"},2744:{"value":"0AB8","name":"GUJARATI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB8"},2745:{"value":"0AB9","name":"GUJARATI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AB9"},2749:{"value":"0ABD","name":"GUJARATI SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ABD"},2768:{"value":"0AD0","name":"GUJARATI OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AD0"},2784:{"value":"0AE0","name":"GUJARATI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE0"},2785:{"value":"0AE1","name":"GUJARATI LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE1"},2809:{"value":"0AF9","name":"GUJARATI LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AF9"},2821:{"value":"0B05","name":"ORIYA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B05"},2822:{"value":"0B06","name":"ORIYA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B06"},2823:{"value":"0B07","name":"ORIYA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B07"},2824:{"value":"0B08","name":"ORIYA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B08"},2825:{"value":"0B09","name":"ORIYA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B09"},2826:{"value":"0B0A","name":"ORIYA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B0A"},2827:{"value":"0B0B","name":"ORIYA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B0B"},2828:{"value":"0B0C","name":"ORIYA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B0C"},2831:{"value":"0B0F","name":"ORIYA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B0F"},2832:{"value":"0B10","name":"ORIYA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B10"},2835:{"value":"0B13","name":"ORIYA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B13"},2836:{"value":"0B14","name":"ORIYA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B14"},2837:{"value":"0B15","name":"ORIYA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B15"},2838:{"value":"0B16","name":"ORIYA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B16"},2839:{"value":"0B17","name":"ORIYA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B17"},2840:{"value":"0B18","name":"ORIYA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B18"},2841:{"value":"0B19","name":"ORIYA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B19"},2842:{"value":"0B1A","name":"ORIYA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B1A"},2843:{"value":"0B1B","name":"ORIYA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B1B"},2844:{"value":"0B1C","name":"ORIYA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B1C"},2845:{"value":"0B1D","name":"ORIYA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B1D"},2846:{"value":"0B1E","name":"ORIYA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B1E"},2847:{"value":"0B1F","name":"ORIYA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B1F"},2848:{"value":"0B20","name":"ORIYA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B20"},2849:{"value":"0B21","name":"ORIYA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B21"},2850:{"value":"0B22","name":"ORIYA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B22"},2851:{"value":"0B23","name":"ORIYA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B23"},2852:{"value":"0B24","name":"ORIYA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B24"},2853:{"value":"0B25","name":"ORIYA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B25"},2854:{"value":"0B26","name":"ORIYA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B26"},2855:{"value":"0B27","name":"ORIYA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B27"},2856:{"value":"0B28","name":"ORIYA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B28"},2858:{"value":"0B2A","name":"ORIYA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B2A"},2859:{"value":"0B2B","name":"ORIYA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B2B"},2860:{"value":"0B2C","name":"ORIYA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B2C"},2861:{"value":"0B2D","name":"ORIYA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B2D"},2862:{"value":"0B2E","name":"ORIYA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B2E"},2863:{"value":"0B2F","name":"ORIYA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B2F"},2864:{"value":"0B30","name":"ORIYA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B30"},2866:{"value":"0B32","name":"ORIYA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B32"},2867:{"value":"0B33","name":"ORIYA LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B33"},2869:{"value":"0B35","name":"ORIYA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B35"},2870:{"value":"0B36","name":"ORIYA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B36"},2871:{"value":"0B37","name":"ORIYA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B37"},2872:{"value":"0B38","name":"ORIYA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B38"},2873:{"value":"0B39","name":"ORIYA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B39"},2877:{"value":"0B3D","name":"ORIYA SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B3D"},2908:{"value":"0B5C","name":"ORIYA LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0B21 0B3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B5C"},2909:{"value":"0B5D","name":"ORIYA LETTER RHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0B22 0B3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B5D"},2911:{"value":"0B5F","name":"ORIYA LETTER YYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B5F"},2912:{"value":"0B60","name":"ORIYA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B60"},2913:{"value":"0B61","name":"ORIYA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B61"},2929:{"value":"0B71","name":"ORIYA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B71"},2947:{"value":"0B83","name":"TAMIL SIGN VISARGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B83"},2949:{"value":"0B85","name":"TAMIL LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B85"},2950:{"value":"0B86","name":"TAMIL LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B86"},2951:{"value":"0B87","name":"TAMIL LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B87"},2952:{"value":"0B88","name":"TAMIL LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B88"},2953:{"value":"0B89","name":"TAMIL LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B89"},2954:{"value":"0B8A","name":"TAMIL LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B8A"},2958:{"value":"0B8E","name":"TAMIL LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B8E"},2959:{"value":"0B8F","name":"TAMIL LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B8F"},2960:{"value":"0B90","name":"TAMIL LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B90"},2962:{"value":"0B92","name":"TAMIL LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B92"},2963:{"value":"0B93","name":"TAMIL LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B93"},2964:{"value":"0B94","name":"TAMIL LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0B92 0BD7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B94"},2965:{"value":"0B95","name":"TAMIL LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B95"},2969:{"value":"0B99","name":"TAMIL LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B99"},2970:{"value":"0B9A","name":"TAMIL LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B9A"},2972:{"value":"0B9C","name":"TAMIL LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B9C"},2974:{"value":"0B9E","name":"TAMIL LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B9E"},2975:{"value":"0B9F","name":"TAMIL LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B9F"},2979:{"value":"0BA3","name":"TAMIL LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BA3"},2980:{"value":"0BA4","name":"TAMIL LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BA4"},2984:{"value":"0BA8","name":"TAMIL LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BA8"},2985:{"value":"0BA9","name":"TAMIL LETTER NNNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BA9"},2986:{"value":"0BAA","name":"TAMIL LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BAA"},2990:{"value":"0BAE","name":"TAMIL LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BAE"},2991:{"value":"0BAF","name":"TAMIL LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BAF"},2992:{"value":"0BB0","name":"TAMIL LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB0"},2993:{"value":"0BB1","name":"TAMIL LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB1"},2994:{"value":"0BB2","name":"TAMIL LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB2"},2995:{"value":"0BB3","name":"TAMIL LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB3"},2996:{"value":"0BB4","name":"TAMIL LETTER LLLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB4"},2997:{"value":"0BB5","name":"TAMIL LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB5"},2998:{"value":"0BB6","name":"TAMIL LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB6"},2999:{"value":"0BB7","name":"TAMIL LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB7"},3000:{"value":"0BB8","name":"TAMIL LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB8"},3001:{"value":"0BB9","name":"TAMIL LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BB9"},3024:{"value":"0BD0","name":"TAMIL OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BD0"},3077:{"value":"0C05","name":"TELUGU LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C05"},3078:{"value":"0C06","name":"TELUGU LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C06"},3079:{"value":"0C07","name":"TELUGU LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C07"},3080:{"value":"0C08","name":"TELUGU LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C08"},3081:{"value":"0C09","name":"TELUGU LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C09"},3082:{"value":"0C0A","name":"TELUGU LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C0A"},3083:{"value":"0C0B","name":"TELUGU LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C0B"},3084:{"value":"0C0C","name":"TELUGU LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C0C"},3086:{"value":"0C0E","name":"TELUGU LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C0E"},3087:{"value":"0C0F","name":"TELUGU LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C0F"},3088:{"value":"0C10","name":"TELUGU LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C10"},3090:{"value":"0C12","name":"TELUGU LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C12"},3091:{"value":"0C13","name":"TELUGU LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C13"},3092:{"value":"0C14","name":"TELUGU LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C14"},3093:{"value":"0C15","name":"TELUGU LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C15"},3094:{"value":"0C16","name":"TELUGU LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C16"},3095:{"value":"0C17","name":"TELUGU LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C17"},3096:{"value":"0C18","name":"TELUGU LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C18"},3097:{"value":"0C19","name":"TELUGU LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C19"},3098:{"value":"0C1A","name":"TELUGU LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C1A"},3099:{"value":"0C1B","name":"TELUGU LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C1B"},3100:{"value":"0C1C","name":"TELUGU LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C1C"},3101:{"value":"0C1D","name":"TELUGU LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C1D"},3102:{"value":"0C1E","name":"TELUGU LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C1E"},3103:{"value":"0C1F","name":"TELUGU LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C1F"},3104:{"value":"0C20","name":"TELUGU LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C20"},3105:{"value":"0C21","name":"TELUGU LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C21"},3106:{"value":"0C22","name":"TELUGU LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C22"},3107:{"value":"0C23","name":"TELUGU LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C23"},3108:{"value":"0C24","name":"TELUGU LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C24"},3109:{"value":"0C25","name":"TELUGU LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C25"},3110:{"value":"0C26","name":"TELUGU LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C26"},3111:{"value":"0C27","name":"TELUGU LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C27"},3112:{"value":"0C28","name":"TELUGU LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C28"},3114:{"value":"0C2A","name":"TELUGU LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C2A"},3115:{"value":"0C2B","name":"TELUGU LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C2B"},3116:{"value":"0C2C","name":"TELUGU LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C2C"},3117:{"value":"0C2D","name":"TELUGU LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C2D"},3118:{"value":"0C2E","name":"TELUGU LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C2E"},3119:{"value":"0C2F","name":"TELUGU LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C2F"},3120:{"value":"0C30","name":"TELUGU LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C30"},3121:{"value":"0C31","name":"TELUGU LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C31"},3122:{"value":"0C32","name":"TELUGU LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C32"},3123:{"value":"0C33","name":"TELUGU LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C33"},3124:{"value":"0C34","name":"TELUGU LETTER LLLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C34"},3125:{"value":"0C35","name":"TELUGU LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C35"},3126:{"value":"0C36","name":"TELUGU LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C36"},3127:{"value":"0C37","name":"TELUGU LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C37"},3128:{"value":"0C38","name":"TELUGU LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C38"},3129:{"value":"0C39","name":"TELUGU LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C39"},3133:{"value":"0C3D","name":"TELUGU SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C3D"},3160:{"value":"0C58","name":"TELUGU LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C58"},3161:{"value":"0C59","name":"TELUGU LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C59"},3162:{"value":"0C5A","name":"TELUGU LETTER RRRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C5A"},3165:{"value":"0C5D","name":"TELUGU LETTER NAKAARA POLLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C5D"},3168:{"value":"0C60","name":"TELUGU LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C60"},3169:{"value":"0C61","name":"TELUGU LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C61"},3200:{"value":"0C80","name":"KANNADA SIGN SPACING CANDRABINDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C80"},3205:{"value":"0C85","name":"KANNADA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C85"},3206:{"value":"0C86","name":"KANNADA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C86"},3207:{"value":"0C87","name":"KANNADA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C87"},3208:{"value":"0C88","name":"KANNADA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C88"},3209:{"value":"0C89","name":"KANNADA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C89"},3210:{"value":"0C8A","name":"KANNADA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C8A"},3211:{"value":"0C8B","name":"KANNADA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C8B"},3212:{"value":"0C8C","name":"KANNADA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C8C"},3214:{"value":"0C8E","name":"KANNADA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C8E"},3215:{"value":"0C8F","name":"KANNADA LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C8F"},3216:{"value":"0C90","name":"KANNADA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C90"},3218:{"value":"0C92","name":"KANNADA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C92"},3219:{"value":"0C93","name":"KANNADA LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C93"},3220:{"value":"0C94","name":"KANNADA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C94"},3221:{"value":"0C95","name":"KANNADA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C95"},3222:{"value":"0C96","name":"KANNADA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C96"},3223:{"value":"0C97","name":"KANNADA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C97"},3224:{"value":"0C98","name":"KANNADA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C98"},3225:{"value":"0C99","name":"KANNADA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C99"},3226:{"value":"0C9A","name":"KANNADA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C9A"},3227:{"value":"0C9B","name":"KANNADA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C9B"},3228:{"value":"0C9C","name":"KANNADA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C9C"},3229:{"value":"0C9D","name":"KANNADA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C9D"},3230:{"value":"0C9E","name":"KANNADA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C9E"},3231:{"value":"0C9F","name":"KANNADA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C9F"},3232:{"value":"0CA0","name":"KANNADA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA0"},3233:{"value":"0CA1","name":"KANNADA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA1"},3234:{"value":"0CA2","name":"KANNADA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA2"},3235:{"value":"0CA3","name":"KANNADA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA3"},3236:{"value":"0CA4","name":"KANNADA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA4"},3237:{"value":"0CA5","name":"KANNADA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA5"},3238:{"value":"0CA6","name":"KANNADA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA6"},3239:{"value":"0CA7","name":"KANNADA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA7"},3240:{"value":"0CA8","name":"KANNADA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CA8"},3242:{"value":"0CAA","name":"KANNADA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CAA"},3243:{"value":"0CAB","name":"KANNADA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CAB"},3244:{"value":"0CAC","name":"KANNADA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CAC"},3245:{"value":"0CAD","name":"KANNADA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CAD"},3246:{"value":"0CAE","name":"KANNADA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CAE"},3247:{"value":"0CAF","name":"KANNADA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CAF"},3248:{"value":"0CB0","name":"KANNADA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB0"},3249:{"value":"0CB1","name":"KANNADA LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB1"},3250:{"value":"0CB2","name":"KANNADA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB2"},3251:{"value":"0CB3","name":"KANNADA LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB3"},3253:{"value":"0CB5","name":"KANNADA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB5"},3254:{"value":"0CB6","name":"KANNADA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB6"},3255:{"value":"0CB7","name":"KANNADA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB7"},3256:{"value":"0CB8","name":"KANNADA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB8"},3257:{"value":"0CB9","name":"KANNADA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CB9"},3261:{"value":"0CBD","name":"KANNADA SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CBD"},3293:{"value":"0CDD","name":"KANNADA LETTER NAKAARA POLLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CDD"},3294:{"value":"0CDE","name":"KANNADA LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CDE"},3296:{"value":"0CE0","name":"KANNADA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE0"},3297:{"value":"0CE1","name":"KANNADA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE1"},3313:{"value":"0CF1","name":"KANNADA SIGN JIHVAMULIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CF1"},3314:{"value":"0CF2","name":"KANNADA SIGN UPADHMANIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CF2"},3332:{"value":"0D04","name":"MALAYALAM LETTER VEDIC ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D04"},3333:{"value":"0D05","name":"MALAYALAM LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D05"},3334:{"value":"0D06","name":"MALAYALAM LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D06"},3335:{"value":"0D07","name":"MALAYALAM LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D07"},3336:{"value":"0D08","name":"MALAYALAM LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D08"},3337:{"value":"0D09","name":"MALAYALAM LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D09"},3338:{"value":"0D0A","name":"MALAYALAM LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D0A"},3339:{"value":"0D0B","name":"MALAYALAM LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D0B"},3340:{"value":"0D0C","name":"MALAYALAM LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D0C"},3342:{"value":"0D0E","name":"MALAYALAM LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D0E"},3343:{"value":"0D0F","name":"MALAYALAM LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D0F"},3344:{"value":"0D10","name":"MALAYALAM LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D10"},3346:{"value":"0D12","name":"MALAYALAM LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D12"},3347:{"value":"0D13","name":"MALAYALAM LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D13"},3348:{"value":"0D14","name":"MALAYALAM LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D14"},3349:{"value":"0D15","name":"MALAYALAM LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D15"},3350:{"value":"0D16","name":"MALAYALAM LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D16"},3351:{"value":"0D17","name":"MALAYALAM LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D17"},3352:{"value":"0D18","name":"MALAYALAM LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D18"},3353:{"value":"0D19","name":"MALAYALAM LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D19"},3354:{"value":"0D1A","name":"MALAYALAM LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D1A"},3355:{"value":"0D1B","name":"MALAYALAM LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D1B"},3356:{"value":"0D1C","name":"MALAYALAM LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D1C"},3357:{"value":"0D1D","name":"MALAYALAM LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D1D"},3358:{"value":"0D1E","name":"MALAYALAM LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D1E"},3359:{"value":"0D1F","name":"MALAYALAM LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D1F"},3360:{"value":"0D20","name":"MALAYALAM LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D20"},3361:{"value":"0D21","name":"MALAYALAM LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D21"},3362:{"value":"0D22","name":"MALAYALAM LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D22"},3363:{"value":"0D23","name":"MALAYALAM LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D23"},3364:{"value":"0D24","name":"MALAYALAM LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D24"},3365:{"value":"0D25","name":"MALAYALAM LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D25"},3366:{"value":"0D26","name":"MALAYALAM LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D26"},3367:{"value":"0D27","name":"MALAYALAM LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D27"},3368:{"value":"0D28","name":"MALAYALAM LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D28"},3369:{"value":"0D29","name":"MALAYALAM LETTER NNNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D29"},3370:{"value":"0D2A","name":"MALAYALAM LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D2A"},3371:{"value":"0D2B","name":"MALAYALAM LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D2B"},3372:{"value":"0D2C","name":"MALAYALAM LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D2C"},3373:{"value":"0D2D","name":"MALAYALAM LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D2D"},3374:{"value":"0D2E","name":"MALAYALAM LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D2E"},3375:{"value":"0D2F","name":"MALAYALAM LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D2F"},3376:{"value":"0D30","name":"MALAYALAM LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D30"},3377:{"value":"0D31","name":"MALAYALAM LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D31"},3378:{"value":"0D32","name":"MALAYALAM LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D32"},3379:{"value":"0D33","name":"MALAYALAM LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D33"},3380:{"value":"0D34","name":"MALAYALAM LETTER LLLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D34"},3381:{"value":"0D35","name":"MALAYALAM LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D35"},3382:{"value":"0D36","name":"MALAYALAM LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D36"},3383:{"value":"0D37","name":"MALAYALAM LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D37"},3384:{"value":"0D38","name":"MALAYALAM LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D38"},3385:{"value":"0D39","name":"MALAYALAM LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D39"},3386:{"value":"0D3A","name":"MALAYALAM LETTER TTTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D3A"},3389:{"value":"0D3D","name":"MALAYALAM SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D3D"},3406:{"value":"0D4E","name":"MALAYALAM LETTER DOT REPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D4E"},3412:{"value":"0D54","name":"MALAYALAM LETTER CHILLU M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D54"},3413:{"value":"0D55","name":"MALAYALAM LETTER CHILLU Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D55"},3414:{"value":"0D56","name":"MALAYALAM LETTER CHILLU LLL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D56"},3423:{"value":"0D5F","name":"MALAYALAM LETTER ARCHAIC II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D5F"},3424:{"value":"0D60","name":"MALAYALAM LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D60"},3425:{"value":"0D61","name":"MALAYALAM LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D61"},3450:{"value":"0D7A","name":"MALAYALAM LETTER CHILLU NN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D7A"},3451:{"value":"0D7B","name":"MALAYALAM LETTER CHILLU N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D7B"},3452:{"value":"0D7C","name":"MALAYALAM LETTER CHILLU RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D7C"},3453:{"value":"0D7D","name":"MALAYALAM LETTER CHILLU L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D7D"},3454:{"value":"0D7E","name":"MALAYALAM LETTER CHILLU LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D7E"},3455:{"value":"0D7F","name":"MALAYALAM LETTER CHILLU K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D7F"},3461:{"value":"0D85","name":"SINHALA LETTER AYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D85"},3462:{"value":"0D86","name":"SINHALA LETTER AAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D86"},3463:{"value":"0D87","name":"SINHALA LETTER AEYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D87"},3464:{"value":"0D88","name":"SINHALA LETTER AEEYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D88"},3465:{"value":"0D89","name":"SINHALA LETTER IYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D89"},3466:{"value":"0D8A","name":"SINHALA LETTER IIYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D8A"},3467:{"value":"0D8B","name":"SINHALA LETTER UYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D8B"},3468:{"value":"0D8C","name":"SINHALA LETTER UUYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D8C"},3469:{"value":"0D8D","name":"SINHALA LETTER IRUYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D8D"},3470:{"value":"0D8E","name":"SINHALA LETTER IRUUYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D8E"},3471:{"value":"0D8F","name":"SINHALA LETTER ILUYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D8F"},3472:{"value":"0D90","name":"SINHALA LETTER ILUUYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D90"},3473:{"value":"0D91","name":"SINHALA LETTER EYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D91"},3474:{"value":"0D92","name":"SINHALA LETTER EEYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D92"},3475:{"value":"0D93","name":"SINHALA LETTER AIYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D93"},3476:{"value":"0D94","name":"SINHALA LETTER OYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D94"},3477:{"value":"0D95","name":"SINHALA LETTER OOYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D95"},3478:{"value":"0D96","name":"SINHALA LETTER AUYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D96"},3482:{"value":"0D9A","name":"SINHALA LETTER ALPAPRAANA KAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D9A"},3483:{"value":"0D9B","name":"SINHALA LETTER MAHAAPRAANA KAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D9B"},3484:{"value":"0D9C","name":"SINHALA LETTER ALPAPRAANA GAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D9C"},3485:{"value":"0D9D","name":"SINHALA LETTER MAHAAPRAANA GAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D9D"},3486:{"value":"0D9E","name":"SINHALA LETTER KANTAJA NAASIKYAYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D9E"},3487:{"value":"0D9F","name":"SINHALA LETTER SANYAKA GAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D9F"},3488:{"value":"0DA0","name":"SINHALA LETTER ALPAPRAANA CAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA0"},3489:{"value":"0DA1","name":"SINHALA LETTER MAHAAPRAANA CAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA1"},3490:{"value":"0DA2","name":"SINHALA LETTER ALPAPRAANA JAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA2"},3491:{"value":"0DA3","name":"SINHALA LETTER MAHAAPRAANA JAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA3"},3492:{"value":"0DA4","name":"SINHALA LETTER TAALUJA NAASIKYAYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA4"},3493:{"value":"0DA5","name":"SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA5"},3494:{"value":"0DA6","name":"SINHALA LETTER SANYAKA JAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA6"},3495:{"value":"0DA7","name":"SINHALA LETTER ALPAPRAANA TTAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA7"},3496:{"value":"0DA8","name":"SINHALA LETTER MAHAAPRAANA TTAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA8"},3497:{"value":"0DA9","name":"SINHALA LETTER ALPAPRAANA DDAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DA9"},3498:{"value":"0DAA","name":"SINHALA LETTER MAHAAPRAANA DDAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DAA"},3499:{"value":"0DAB","name":"SINHALA LETTER MUURDHAJA NAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DAB"},3500:{"value":"0DAC","name":"SINHALA LETTER SANYAKA DDAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DAC"},3501:{"value":"0DAD","name":"SINHALA LETTER ALPAPRAANA TAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DAD"},3502:{"value":"0DAE","name":"SINHALA LETTER MAHAAPRAANA TAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DAE"},3503:{"value":"0DAF","name":"SINHALA LETTER ALPAPRAANA DAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DAF"},3504:{"value":"0DB0","name":"SINHALA LETTER MAHAAPRAANA DAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB0"},3505:{"value":"0DB1","name":"SINHALA LETTER DANTAJA NAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB1"},3507:{"value":"0DB3","name":"SINHALA LETTER SANYAKA DAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB3"},3508:{"value":"0DB4","name":"SINHALA LETTER ALPAPRAANA PAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB4"},3509:{"value":"0DB5","name":"SINHALA LETTER MAHAAPRAANA PAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB5"},3510:{"value":"0DB6","name":"SINHALA LETTER ALPAPRAANA BAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB6"},3511:{"value":"0DB7","name":"SINHALA LETTER MAHAAPRAANA BAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB7"},3512:{"value":"0DB8","name":"SINHALA LETTER MAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB8"},3513:{"value":"0DB9","name":"SINHALA LETTER AMBA BAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DB9"},3514:{"value":"0DBA","name":"SINHALA LETTER YAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DBA"},3515:{"value":"0DBB","name":"SINHALA LETTER RAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DBB"},3517:{"value":"0DBD","name":"SINHALA LETTER DANTAJA LAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DBD"},3520:{"value":"0DC0","name":"SINHALA LETTER VAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC0"},3521:{"value":"0DC1","name":"SINHALA LETTER TAALUJA SAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC1"},3522:{"value":"0DC2","name":"SINHALA LETTER MUURDHAJA SAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC2"},3523:{"value":"0DC3","name":"SINHALA LETTER DANTAJA SAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC3"},3524:{"value":"0DC4","name":"SINHALA LETTER HAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC4"},3525:{"value":"0DC5","name":"SINHALA LETTER MUURDHAJA LAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC5"},3526:{"value":"0DC6","name":"SINHALA LETTER FAYANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DC6"},3585:{"value":"0E01","name":"THAI CHARACTER KO KAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER KO KAI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E01"},3586:{"value":"0E02","name":"THAI CHARACTER KHO KHAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER KHO KHAI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E02"},3587:{"value":"0E03","name":"THAI CHARACTER KHO KHUAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER KHO KHUAT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E03"},3588:{"value":"0E04","name":"THAI CHARACTER KHO KHWAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER KHO KHWAI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E04"},3589:{"value":"0E05","name":"THAI CHARACTER KHO KHON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER KHO KHON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E05"},3590:{"value":"0E06","name":"THAI CHARACTER KHO RAKHANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER KHO RAKHANG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E06"},3591:{"value":"0E07","name":"THAI CHARACTER NGO NGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER NGO NGU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E07"},3592:{"value":"0E08","name":"THAI CHARACTER CHO CHAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER CHO CHAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E08"},3593:{"value":"0E09","name":"THAI CHARACTER CHO CHING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER CHO CHING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E09"},3594:{"value":"0E0A","name":"THAI CHARACTER CHO CHANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER CHO CHANG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E0A"},3595:{"value":"0E0B","name":"THAI CHARACTER SO SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER SO SO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E0B"},3596:{"value":"0E0C","name":"THAI CHARACTER CHO CHOE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER CHO CHOE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E0C"},3597:{"value":"0E0D","name":"THAI CHARACTER YO YING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER YO YING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E0D"},3598:{"value":"0E0E","name":"THAI CHARACTER DO CHADA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER DO CHADA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E0E"},3599:{"value":"0E0F","name":"THAI CHARACTER TO PATAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER TO PATAK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E0F"},3600:{"value":"0E10","name":"THAI CHARACTER THO THAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER THO THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E10"},3601:{"value":"0E11","name":"THAI CHARACTER THO NANGMONTHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER THO NANGMONTHO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E11"},3602:{"value":"0E12","name":"THAI CHARACTER THO PHUTHAO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER THO PHUTHAO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E12"},3603:{"value":"0E13","name":"THAI CHARACTER NO NEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER NO NEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E13"},3604:{"value":"0E14","name":"THAI CHARACTER DO DEK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER DO DEK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E14"},3605:{"value":"0E15","name":"THAI CHARACTER TO TAO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER TO TAO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E15"},3606:{"value":"0E16","name":"THAI CHARACTER THO THUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER THO THUNG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E16"},3607:{"value":"0E17","name":"THAI CHARACTER THO THAHAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER THO THAHAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E17"},3608:{"value":"0E18","name":"THAI CHARACTER THO THONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER THO THONG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E18"},3609:{"value":"0E19","name":"THAI CHARACTER NO NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER NO NU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E19"},3610:{"value":"0E1A","name":"THAI CHARACTER BO BAIMAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER BO BAIMAI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E1A"},3611:{"value":"0E1B","name":"THAI CHARACTER PO PLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER PO PLA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E1B"},3612:{"value":"0E1C","name":"THAI CHARACTER PHO PHUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER PHO PHUNG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E1C"},3613:{"value":"0E1D","name":"THAI CHARACTER FO FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER FO FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E1D"},3614:{"value":"0E1E","name":"THAI CHARACTER PHO PHAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER PHO PHAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E1E"},3615:{"value":"0E1F","name":"THAI CHARACTER FO FAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER FO FAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E1F"},3616:{"value":"0E20","name":"THAI CHARACTER PHO SAMPHAO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER PHO SAMPHAO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E20"},3617:{"value":"0E21","name":"THAI CHARACTER MO MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER MO MA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E21"},3618:{"value":"0E22","name":"THAI CHARACTER YO YAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER YO YAK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E22"},3619:{"value":"0E23","name":"THAI CHARACTER RO RUA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER RO RUA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E23"},3620:{"value":"0E24","name":"THAI CHARACTER RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER RU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E24"},3621:{"value":"0E25","name":"THAI CHARACTER LO LING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER LO LING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E25"},3622:{"value":"0E26","name":"THAI CHARACTER LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER LU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E26"},3623:{"value":"0E27","name":"THAI CHARACTER WO WAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER WO WAEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E27"},3624:{"value":"0E28","name":"THAI CHARACTER SO SALA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER SO SALA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E28"},3625:{"value":"0E29","name":"THAI CHARACTER SO RUSI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER SO RUSI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E29"},3626:{"value":"0E2A","name":"THAI CHARACTER SO SUA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER SO SUA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E2A"},3627:{"value":"0E2B","name":"THAI CHARACTER HO HIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER HO HIP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E2B"},3628:{"value":"0E2C","name":"THAI CHARACTER LO CHULA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER LO CHULA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E2C"},3629:{"value":"0E2D","name":"THAI CHARACTER O ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER O ANG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E2D"},3630:{"value":"0E2E","name":"THAI CHARACTER HO NOKHUK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LETTER HO NOK HUK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E2E"},3631:{"value":"0E2F","name":"THAI CHARACTER PAIYANNOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI PAI YAN NOI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E2F"},3632:{"value":"0E30","name":"THAI CHARACTER SARA A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA A","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E30"},3634:{"value":"0E32","name":"THAI CHARACTER SARA AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA AA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E32"},3635:{"value":"0E33","name":"THAI CHARACTER SARA AM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 0E4D 0E32","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA AM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E33"},3648:{"value":"0E40","name":"THAI CHARACTER SARA E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA E","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E40"},3649:{"value":"0E41","name":"THAI CHARACTER SARA AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA AE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E41"},3650:{"value":"0E42","name":"THAI CHARACTER SARA O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA O","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E42"},3651:{"value":"0E43","name":"THAI CHARACTER SARA AI MAIMUAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA MAI MUAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E43"},3652:{"value":"0E44","name":"THAI CHARACTER SARA AI MAIMALAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA MAI MALAI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E44"},3653:{"value":"0E45","name":"THAI CHARACTER LAKKHANGYAO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI LAK KHANG YAO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E45"},3713:{"value":"0E81","name":"LAO LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E81"},3714:{"value":"0E82","name":"LAO LETTER KHO SUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E82"},3716:{"value":"0E84","name":"LAO LETTER KHO TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E84"},3718:{"value":"0E86","name":"LAO LETTER PALI GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E86"},3719:{"value":"0E87","name":"LAO LETTER NGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E87"},3720:{"value":"0E88","name":"LAO LETTER CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E88"},3721:{"value":"0E89","name":"LAO LETTER PALI CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E89"},3722:{"value":"0E8A","name":"LAO LETTER SO TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E8A"},3724:{"value":"0E8C","name":"LAO LETTER PALI JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E8C"},3725:{"value":"0E8D","name":"LAO LETTER NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E8D"},3726:{"value":"0E8E","name":"LAO LETTER PALI NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E8E"},3727:{"value":"0E8F","name":"LAO LETTER PALI TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E8F"},3728:{"value":"0E90","name":"LAO LETTER PALI TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E90"},3729:{"value":"0E91","name":"LAO LETTER PALI DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E91"},3730:{"value":"0E92","name":"LAO LETTER PALI DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E92"},3731:{"value":"0E93","name":"LAO LETTER PALI NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E93"},3732:{"value":"0E94","name":"LAO LETTER DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E94"},3733:{"value":"0E95","name":"LAO LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E95"},3734:{"value":"0E96","name":"LAO LETTER THO SUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E96"},3735:{"value":"0E97","name":"LAO LETTER THO TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E97"},3736:{"value":"0E98","name":"LAO LETTER PALI DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E98"},3737:{"value":"0E99","name":"LAO LETTER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E99"},3738:{"value":"0E9A","name":"LAO LETTER BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E9A"},3739:{"value":"0E9B","name":"LAO LETTER PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E9B"},3740:{"value":"0E9C","name":"LAO LETTER PHO SUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E9C"},3741:{"value":"0E9D","name":"LAO LETTER FO TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E9D"},3742:{"value":"0E9E","name":"LAO LETTER PHO TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E9E"},3743:{"value":"0E9F","name":"LAO LETTER FO SUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E9F"},3744:{"value":"0EA0","name":"LAO LETTER PALI BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA0"},3745:{"value":"0EA1","name":"LAO LETTER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA1"},3746:{"value":"0EA2","name":"LAO LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA2"},3747:{"value":"0EA3","name":"LAO LETTER LO LING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA3"},3749:{"value":"0EA5","name":"LAO LETTER LO LOOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA5"},3751:{"value":"0EA7","name":"LAO LETTER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA7"},3752:{"value":"0EA8","name":"LAO LETTER SANSKRIT SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA8"},3753:{"value":"0EA9","name":"LAO LETTER SANSKRIT SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EA9"},3754:{"value":"0EAA","name":"LAO LETTER SO SUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EAA"},3755:{"value":"0EAB","name":"LAO LETTER HO SUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EAB"},3756:{"value":"0EAC","name":"LAO LETTER PALI LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EAC"},3757:{"value":"0EAD","name":"LAO LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EAD"},3758:{"value":"0EAE","name":"LAO LETTER HO TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EAE"},3759:{"value":"0EAF","name":"LAO ELLIPSIS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EAF"},3760:{"value":"0EB0","name":"LAO VOWEL SIGN A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB0"},3762:{"value":"0EB2","name":"LAO VOWEL SIGN AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB2"},3763:{"value":"0EB3","name":"LAO VOWEL SIGN AM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 0ECD 0EB2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB3"},3773:{"value":"0EBD","name":"LAO SEMIVOWEL SIGN NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EBD"},3776:{"value":"0EC0","name":"LAO VOWEL SIGN E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC0"},3777:{"value":"0EC1","name":"LAO VOWEL SIGN EI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC1"},3778:{"value":"0EC2","name":"LAO VOWEL SIGN O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC2"},3779:{"value":"0EC3","name":"LAO VOWEL SIGN AY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC3"},3780:{"value":"0EC4","name":"LAO VOWEL SIGN AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC4"},3804:{"value":"0EDC","name":"LAO HO NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 0EAB 0E99","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EDC"},3805:{"value":"0EDD","name":"LAO HO MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 0EAB 0EA1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EDD"},3806:{"value":"0EDE","name":"LAO LETTER KHMU GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EDE"},3807:{"value":"0EDF","name":"LAO LETTER KHMU NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EDF"},3840:{"value":"0F00","name":"TIBETAN SYLLABLE OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F00"},3904:{"value":"0F40","name":"TIBETAN LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F40"},3905:{"value":"0F41","name":"TIBETAN LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F41"},3906:{"value":"0F42","name":"TIBETAN LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F42"},3907:{"value":"0F43","name":"TIBETAN LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0F42 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F43"},3908:{"value":"0F44","name":"TIBETAN LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F44"},3909:{"value":"0F45","name":"TIBETAN LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F45"},3910:{"value":"0F46","name":"TIBETAN LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F46"},3911:{"value":"0F47","name":"TIBETAN LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F47"},3913:{"value":"0F49","name":"TIBETAN LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F49"},3914:{"value":"0F4A","name":"TIBETAN LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LETTER REVERSED TA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F4A"},3915:{"value":"0F4B","name":"TIBETAN LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LETTER REVERSED THA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F4B"},3916:{"value":"0F4C","name":"TIBETAN LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LETTER REVERSED DA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F4C"},3917:{"value":"0F4D","name":"TIBETAN LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0F4C 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F4D"},3918:{"value":"0F4E","name":"TIBETAN LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LETTER REVERSED NA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F4E"},3919:{"value":"0F4F","name":"TIBETAN LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F4F"},3920:{"value":"0F50","name":"TIBETAN LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F50"},3921:{"value":"0F51","name":"TIBETAN LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F51"},3922:{"value":"0F52","name":"TIBETAN LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0F51 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F52"},3923:{"value":"0F53","name":"TIBETAN LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F53"},3924:{"value":"0F54","name":"TIBETAN LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F54"},3925:{"value":"0F55","name":"TIBETAN LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F55"},3926:{"value":"0F56","name":"TIBETAN LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F56"},3927:{"value":"0F57","name":"TIBETAN LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0F56 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F57"},3928:{"value":"0F58","name":"TIBETAN LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F58"},3929:{"value":"0F59","name":"TIBETAN LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F59"},3930:{"value":"0F5A","name":"TIBETAN LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F5A"},3931:{"value":"0F5B","name":"TIBETAN LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F5B"},3932:{"value":"0F5C","name":"TIBETAN LETTER DZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0F5B 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F5C"},3933:{"value":"0F5D","name":"TIBETAN LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F5D"},3934:{"value":"0F5E","name":"TIBETAN LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F5E"},3935:{"value":"0F5F","name":"TIBETAN LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F5F"},3936:{"value":"0F60","name":"TIBETAN LETTER -A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LETTER AA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F60"},3937:{"value":"0F61","name":"TIBETAN LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F61"},3938:{"value":"0F62","name":"TIBETAN LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F62"},3939:{"value":"0F63","name":"TIBETAN LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F63"},3940:{"value":"0F64","name":"TIBETAN LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F64"},3941:{"value":"0F65","name":"TIBETAN LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LETTER REVERSED SHA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F65"},3942:{"value":"0F66","name":"TIBETAN LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F66"},3943:{"value":"0F67","name":"TIBETAN LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F67"},3944:{"value":"0F68","name":"TIBETAN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F68"},3945:{"value":"0F69","name":"TIBETAN LETTER KSSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"0F40 0FB5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F69"},3946:{"value":"0F6A","name":"TIBETAN LETTER FIXED-FORM RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F6A"},3947:{"value":"0F6B","name":"TIBETAN LETTER KKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F6B"},3948:{"value":"0F6C","name":"TIBETAN LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F6C"},3976:{"value":"0F88","name":"TIBETAN SIGN LCE TSA CAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F88"},3977:{"value":"0F89","name":"TIBETAN SIGN MCHU CAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F89"},3978:{"value":"0F8A","name":"TIBETAN SIGN GRU CAN RGYINGS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F8A"},3979:{"value":"0F8B","name":"TIBETAN SIGN GRU MED RGYINGS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F8B"},3980:{"value":"0F8C","name":"TIBETAN SIGN INVERTED MCHU CAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F8C"},4096:{"value":"1000","name":"MYANMAR LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1000"},4097:{"value":"1001","name":"MYANMAR LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1001"},4098:{"value":"1002","name":"MYANMAR LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1002"},4099:{"value":"1003","name":"MYANMAR LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1003"},4100:{"value":"1004","name":"MYANMAR LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1004"},4101:{"value":"1005","name":"MYANMAR LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1005"},4102:{"value":"1006","name":"MYANMAR LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1006"},4103:{"value":"1007","name":"MYANMAR LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1007"},4104:{"value":"1008","name":"MYANMAR LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1008"},4105:{"value":"1009","name":"MYANMAR LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1009"},4106:{"value":"100A","name":"MYANMAR LETTER NNYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u100A"},4107:{"value":"100B","name":"MYANMAR LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u100B"},4108:{"value":"100C","name":"MYANMAR LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u100C"},4109:{"value":"100D","name":"MYANMAR LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u100D"},4110:{"value":"100E","name":"MYANMAR LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u100E"},4111:{"value":"100F","name":"MYANMAR LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u100F"},4112:{"value":"1010","name":"MYANMAR LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1010"},4113:{"value":"1011","name":"MYANMAR LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1011"},4114:{"value":"1012","name":"MYANMAR LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1012"},4115:{"value":"1013","name":"MYANMAR LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1013"},4116:{"value":"1014","name":"MYANMAR LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1014"},4117:{"value":"1015","name":"MYANMAR LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1015"},4118:{"value":"1016","name":"MYANMAR LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1016"},4119:{"value":"1017","name":"MYANMAR LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1017"},4120:{"value":"1018","name":"MYANMAR LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1018"},4121:{"value":"1019","name":"MYANMAR LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1019"},4122:{"value":"101A","name":"MYANMAR LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u101A"},4123:{"value":"101B","name":"MYANMAR LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u101B"},4124:{"value":"101C","name":"MYANMAR LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u101C"},4125:{"value":"101D","name":"MYANMAR LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u101D"},4126:{"value":"101E","name":"MYANMAR LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u101E"},4127:{"value":"101F","name":"MYANMAR LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u101F"},4128:{"value":"1020","name":"MYANMAR LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1020"},4129:{"value":"1021","name":"MYANMAR LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1021"},4130:{"value":"1022","name":"MYANMAR LETTER SHAN A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1022"},4131:{"value":"1023","name":"MYANMAR LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1023"},4132:{"value":"1024","name":"MYANMAR LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1024"},4133:{"value":"1025","name":"MYANMAR LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1025"},4134:{"value":"1026","name":"MYANMAR LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1025 102E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1026"},4135:{"value":"1027","name":"MYANMAR LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1027"},4136:{"value":"1028","name":"MYANMAR LETTER MON E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1028"},4137:{"value":"1029","name":"MYANMAR LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1029"},4138:{"value":"102A","name":"MYANMAR LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u102A"},4159:{"value":"103F","name":"MYANMAR LETTER GREAT SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u103F"},4176:{"value":"1050","name":"MYANMAR LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1050"},4177:{"value":"1051","name":"MYANMAR LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1051"},4178:{"value":"1052","name":"MYANMAR LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1052"},4179:{"value":"1053","name":"MYANMAR LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1053"},4180:{"value":"1054","name":"MYANMAR LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1054"},4181:{"value":"1055","name":"MYANMAR LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1055"},4186:{"value":"105A","name":"MYANMAR LETTER MON NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u105A"},4187:{"value":"105B","name":"MYANMAR LETTER MON JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u105B"},4188:{"value":"105C","name":"MYANMAR LETTER MON BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u105C"},4189:{"value":"105D","name":"MYANMAR LETTER MON BBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u105D"},4193:{"value":"1061","name":"MYANMAR LETTER SGAW KAREN SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1061"},4197:{"value":"1065","name":"MYANMAR LETTER WESTERN PWO KAREN THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1065"},4198:{"value":"1066","name":"MYANMAR LETTER WESTERN PWO KAREN PWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1066"},4206:{"value":"106E","name":"MYANMAR LETTER EASTERN PWO KAREN NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u106E"},4207:{"value":"106F","name":"MYANMAR LETTER EASTERN PWO KAREN YWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u106F"},4208:{"value":"1070","name":"MYANMAR LETTER EASTERN PWO KAREN GHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1070"},4213:{"value":"1075","name":"MYANMAR LETTER SHAN KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1075"},4214:{"value":"1076","name":"MYANMAR LETTER SHAN KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1076"},4215:{"value":"1077","name":"MYANMAR LETTER SHAN GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1077"},4216:{"value":"1078","name":"MYANMAR LETTER SHAN CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1078"},4217:{"value":"1079","name":"MYANMAR LETTER SHAN ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1079"},4218:{"value":"107A","name":"MYANMAR LETTER SHAN NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u107A"},4219:{"value":"107B","name":"MYANMAR LETTER SHAN DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u107B"},4220:{"value":"107C","name":"MYANMAR LETTER SHAN NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u107C"},4221:{"value":"107D","name":"MYANMAR LETTER SHAN PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u107D"},4222:{"value":"107E","name":"MYANMAR LETTER SHAN FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u107E"},4223:{"value":"107F","name":"MYANMAR LETTER SHAN BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u107F"},4224:{"value":"1080","name":"MYANMAR LETTER SHAN THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1080"},4225:{"value":"1081","name":"MYANMAR LETTER SHAN HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1081"},4238:{"value":"108E","name":"MYANMAR LETTER RUMAI PALAUNG FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u108E"},4352:{"value":"1100","name":"HANGUL CHOSEONG KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1100"},4353:{"value":"1101","name":"HANGUL CHOSEONG SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1101"},4354:{"value":"1102","name":"HANGUL CHOSEONG NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1102"},4355:{"value":"1103","name":"HANGUL CHOSEONG TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1103"},4356:{"value":"1104","name":"HANGUL CHOSEONG SSANGTIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1104"},4357:{"value":"1105","name":"HANGUL CHOSEONG RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1105"},4358:{"value":"1106","name":"HANGUL CHOSEONG MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1106"},4359:{"value":"1107","name":"HANGUL CHOSEONG PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1107"},4360:{"value":"1108","name":"HANGUL CHOSEONG SSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1108"},4361:{"value":"1109","name":"HANGUL CHOSEONG SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1109"},4362:{"value":"110A","name":"HANGUL CHOSEONG SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u110A"},4363:{"value":"110B","name":"HANGUL CHOSEONG IEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u110B"},4364:{"value":"110C","name":"HANGUL CHOSEONG CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u110C"},4365:{"value":"110D","name":"HANGUL CHOSEONG SSANGCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u110D"},4366:{"value":"110E","name":"HANGUL CHOSEONG CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u110E"},4367:{"value":"110F","name":"HANGUL CHOSEONG KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u110F"},4368:{"value":"1110","name":"HANGUL CHOSEONG THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1110"},4369:{"value":"1111","name":"HANGUL CHOSEONG PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1111"},4370:{"value":"1112","name":"HANGUL CHOSEONG HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1112"},4371:{"value":"1113","name":"HANGUL CHOSEONG NIEUN-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1113"},4372:{"value":"1114","name":"HANGUL CHOSEONG SSANGNIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1114"},4373:{"value":"1115","name":"HANGUL CHOSEONG NIEUN-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1115"},4374:{"value":"1116","name":"HANGUL CHOSEONG NIEUN-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1116"},4375:{"value":"1117","name":"HANGUL CHOSEONG TIKEUT-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1117"},4376:{"value":"1118","name":"HANGUL CHOSEONG RIEUL-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1118"},4377:{"value":"1119","name":"HANGUL CHOSEONG SSANGRIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1119"},4378:{"value":"111A","name":"HANGUL CHOSEONG RIEUL-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u111A"},4379:{"value":"111B","name":"HANGUL CHOSEONG KAPYEOUNRIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u111B"},4380:{"value":"111C","name":"HANGUL CHOSEONG MIEUM-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u111C"},4381:{"value":"111D","name":"HANGUL CHOSEONG KAPYEOUNMIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u111D"},4382:{"value":"111E","name":"HANGUL CHOSEONG PIEUP-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u111E"},4383:{"value":"111F","name":"HANGUL CHOSEONG PIEUP-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u111F"},4384:{"value":"1120","name":"HANGUL CHOSEONG PIEUP-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1120"},4385:{"value":"1121","name":"HANGUL CHOSEONG PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1121"},4386:{"value":"1122","name":"HANGUL CHOSEONG PIEUP-SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1122"},4387:{"value":"1123","name":"HANGUL CHOSEONG PIEUP-SIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1123"},4388:{"value":"1124","name":"HANGUL CHOSEONG PIEUP-SIOS-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1124"},4389:{"value":"1125","name":"HANGUL CHOSEONG PIEUP-SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1125"},4390:{"value":"1126","name":"HANGUL CHOSEONG PIEUP-SIOS-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1126"},4391:{"value":"1127","name":"HANGUL CHOSEONG PIEUP-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1127"},4392:{"value":"1128","name":"HANGUL CHOSEONG PIEUP-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1128"},4393:{"value":"1129","name":"HANGUL CHOSEONG PIEUP-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1129"},4394:{"value":"112A","name":"HANGUL CHOSEONG PIEUP-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u112A"},4395:{"value":"112B","name":"HANGUL CHOSEONG KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u112B"},4396:{"value":"112C","name":"HANGUL CHOSEONG KAPYEOUNSSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u112C"},4397:{"value":"112D","name":"HANGUL CHOSEONG SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u112D"},4398:{"value":"112E","name":"HANGUL CHOSEONG SIOS-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u112E"},4399:{"value":"112F","name":"HANGUL CHOSEONG SIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u112F"},4400:{"value":"1130","name":"HANGUL CHOSEONG SIOS-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1130"},4401:{"value":"1131","name":"HANGUL CHOSEONG SIOS-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1131"},4402:{"value":"1132","name":"HANGUL CHOSEONG SIOS-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1132"},4403:{"value":"1133","name":"HANGUL CHOSEONG SIOS-PIEUP-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1133"},4404:{"value":"1134","name":"HANGUL CHOSEONG SIOS-SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1134"},4405:{"value":"1135","name":"HANGUL CHOSEONG SIOS-IEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1135"},4406:{"value":"1136","name":"HANGUL CHOSEONG SIOS-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1136"},4407:{"value":"1137","name":"HANGUL CHOSEONG SIOS-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1137"},4408:{"value":"1138","name":"HANGUL CHOSEONG SIOS-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1138"},4409:{"value":"1139","name":"HANGUL CHOSEONG SIOS-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1139"},4410:{"value":"113A","name":"HANGUL CHOSEONG SIOS-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u113A"},4411:{"value":"113B","name":"HANGUL CHOSEONG SIOS-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u113B"},4412:{"value":"113C","name":"HANGUL CHOSEONG CHITUEUMSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u113C"},4413:{"value":"113D","name":"HANGUL CHOSEONG CHITUEUMSSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u113D"},4414:{"value":"113E","name":"HANGUL CHOSEONG CEONGCHIEUMSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u113E"},4415:{"value":"113F","name":"HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u113F"},4416:{"value":"1140","name":"HANGUL CHOSEONG PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1140"},4417:{"value":"1141","name":"HANGUL CHOSEONG IEUNG-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1141"},4418:{"value":"1142","name":"HANGUL CHOSEONG IEUNG-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1142"},4419:{"value":"1143","name":"HANGUL CHOSEONG IEUNG-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1143"},4420:{"value":"1144","name":"HANGUL CHOSEONG IEUNG-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1144"},4421:{"value":"1145","name":"HANGUL CHOSEONG IEUNG-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1145"},4422:{"value":"1146","name":"HANGUL CHOSEONG IEUNG-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1146"},4423:{"value":"1147","name":"HANGUL CHOSEONG SSANGIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1147"},4424:{"value":"1148","name":"HANGUL CHOSEONG IEUNG-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1148"},4425:{"value":"1149","name":"HANGUL CHOSEONG IEUNG-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1149"},4426:{"value":"114A","name":"HANGUL CHOSEONG IEUNG-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u114A"},4427:{"value":"114B","name":"HANGUL CHOSEONG IEUNG-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u114B"},4428:{"value":"114C","name":"HANGUL CHOSEONG YESIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u114C"},4429:{"value":"114D","name":"HANGUL CHOSEONG CIEUC-IEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u114D"},4430:{"value":"114E","name":"HANGUL CHOSEONG CHITUEUMCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u114E"},4431:{"value":"114F","name":"HANGUL CHOSEONG CHITUEUMSSANGCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u114F"},4432:{"value":"1150","name":"HANGUL CHOSEONG CEONGCHIEUMCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1150"},4433:{"value":"1151","name":"HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1151"},4434:{"value":"1152","name":"HANGUL CHOSEONG CHIEUCH-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1152"},4435:{"value":"1153","name":"HANGUL CHOSEONG CHIEUCH-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1153"},4436:{"value":"1154","name":"HANGUL CHOSEONG CHITUEUMCHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1154"},4437:{"value":"1155","name":"HANGUL CHOSEONG CEONGCHIEUMCHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1155"},4438:{"value":"1156","name":"HANGUL CHOSEONG PHIEUPH-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1156"},4439:{"value":"1157","name":"HANGUL CHOSEONG KAPYEOUNPHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1157"},4440:{"value":"1158","name":"HANGUL CHOSEONG SSANGHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1158"},4441:{"value":"1159","name":"HANGUL CHOSEONG YEORINHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1159"},4442:{"value":"115A","name":"HANGUL CHOSEONG KIYEOK-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u115A"},4443:{"value":"115B","name":"HANGUL CHOSEONG NIEUN-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u115B"},4444:{"value":"115C","name":"HANGUL CHOSEONG NIEUN-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u115C"},4445:{"value":"115D","name":"HANGUL CHOSEONG NIEUN-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u115D"},4446:{"value":"115E","name":"HANGUL CHOSEONG TIKEUT-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u115E"},4447:{"value":"115F","name":"HANGUL CHOSEONG FILLER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u115F"},4448:{"value":"1160","name":"HANGUL JUNGSEONG FILLER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1160"},4449:{"value":"1161","name":"HANGUL JUNGSEONG A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1161"},4450:{"value":"1162","name":"HANGUL JUNGSEONG AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1162"},4451:{"value":"1163","name":"HANGUL JUNGSEONG YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1163"},4452:{"value":"1164","name":"HANGUL JUNGSEONG YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1164"},4453:{"value":"1165","name":"HANGUL JUNGSEONG EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1165"},4454:{"value":"1166","name":"HANGUL JUNGSEONG E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1166"},4455:{"value":"1167","name":"HANGUL JUNGSEONG YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1167"},4456:{"value":"1168","name":"HANGUL JUNGSEONG YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1168"},4457:{"value":"1169","name":"HANGUL JUNGSEONG O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1169"},4458:{"value":"116A","name":"HANGUL JUNGSEONG WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u116A"},4459:{"value":"116B","name":"HANGUL JUNGSEONG WAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u116B"},4460:{"value":"116C","name":"HANGUL JUNGSEONG OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u116C"},4461:{"value":"116D","name":"HANGUL JUNGSEONG YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u116D"},4462:{"value":"116E","name":"HANGUL JUNGSEONG U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u116E"},4463:{"value":"116F","name":"HANGUL JUNGSEONG WEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u116F"},4464:{"value":"1170","name":"HANGUL JUNGSEONG WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1170"},4465:{"value":"1171","name":"HANGUL JUNGSEONG WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1171"},4466:{"value":"1172","name":"HANGUL JUNGSEONG YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1172"},4467:{"value":"1173","name":"HANGUL JUNGSEONG EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1173"},4468:{"value":"1174","name":"HANGUL JUNGSEONG YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1174"},4469:{"value":"1175","name":"HANGUL JUNGSEONG I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1175"},4470:{"value":"1176","name":"HANGUL JUNGSEONG A-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1176"},4471:{"value":"1177","name":"HANGUL JUNGSEONG A-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1177"},4472:{"value":"1178","name":"HANGUL JUNGSEONG YA-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1178"},4473:{"value":"1179","name":"HANGUL JUNGSEONG YA-YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1179"},4474:{"value":"117A","name":"HANGUL JUNGSEONG EO-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u117A"},4475:{"value":"117B","name":"HANGUL JUNGSEONG EO-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u117B"},4476:{"value":"117C","name":"HANGUL JUNGSEONG EO-EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u117C"},4477:{"value":"117D","name":"HANGUL JUNGSEONG YEO-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u117D"},4478:{"value":"117E","name":"HANGUL JUNGSEONG YEO-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u117E"},4479:{"value":"117F","name":"HANGUL JUNGSEONG O-EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u117F"},4480:{"value":"1180","name":"HANGUL JUNGSEONG O-E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1180"},4481:{"value":"1181","name":"HANGUL JUNGSEONG O-YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1181"},4482:{"value":"1182","name":"HANGUL JUNGSEONG O-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1182"},4483:{"value":"1183","name":"HANGUL JUNGSEONG O-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1183"},4484:{"value":"1184","name":"HANGUL JUNGSEONG YO-YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1184"},4485:{"value":"1185","name":"HANGUL JUNGSEONG YO-YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1185"},4486:{"value":"1186","name":"HANGUL JUNGSEONG YO-YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1186"},4487:{"value":"1187","name":"HANGUL JUNGSEONG YO-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1187"},4488:{"value":"1188","name":"HANGUL JUNGSEONG YO-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1188"},4489:{"value":"1189","name":"HANGUL JUNGSEONG U-A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1189"},4490:{"value":"118A","name":"HANGUL JUNGSEONG U-AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u118A"},4491:{"value":"118B","name":"HANGUL JUNGSEONG U-EO-EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u118B"},4492:{"value":"118C","name":"HANGUL JUNGSEONG U-YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u118C"},4493:{"value":"118D","name":"HANGUL JUNGSEONG U-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u118D"},4494:{"value":"118E","name":"HANGUL JUNGSEONG YU-A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u118E"},4495:{"value":"118F","name":"HANGUL JUNGSEONG YU-EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u118F"},4496:{"value":"1190","name":"HANGUL JUNGSEONG YU-E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1190"},4497:{"value":"1191","name":"HANGUL JUNGSEONG YU-YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1191"},4498:{"value":"1192","name":"HANGUL JUNGSEONG YU-YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1192"},4499:{"value":"1193","name":"HANGUL JUNGSEONG YU-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1193"},4500:{"value":"1194","name":"HANGUL JUNGSEONG YU-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1194"},4501:{"value":"1195","name":"HANGUL JUNGSEONG EU-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1195"},4502:{"value":"1196","name":"HANGUL JUNGSEONG EU-EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1196"},4503:{"value":"1197","name":"HANGUL JUNGSEONG YI-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1197"},4504:{"value":"1198","name":"HANGUL JUNGSEONG I-A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1198"},4505:{"value":"1199","name":"HANGUL JUNGSEONG I-YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1199"},4506:{"value":"119A","name":"HANGUL JUNGSEONG I-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u119A"},4507:{"value":"119B","name":"HANGUL JUNGSEONG I-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u119B"},4508:{"value":"119C","name":"HANGUL JUNGSEONG I-EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u119C"},4509:{"value":"119D","name":"HANGUL JUNGSEONG I-ARAEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u119D"},4510:{"value":"119E","name":"HANGUL JUNGSEONG ARAEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u119E"},4511:{"value":"119F","name":"HANGUL JUNGSEONG ARAEA-EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u119F"},4512:{"value":"11A0","name":"HANGUL JUNGSEONG ARAEA-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A0"},4513:{"value":"11A1","name":"HANGUL JUNGSEONG ARAEA-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A1"},4514:{"value":"11A2","name":"HANGUL JUNGSEONG SSANGARAEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A2"},4515:{"value":"11A3","name":"HANGUL JUNGSEONG A-EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A3"},4516:{"value":"11A4","name":"HANGUL JUNGSEONG YA-U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A4"},4517:{"value":"11A5","name":"HANGUL JUNGSEONG YEO-YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A5"},4518:{"value":"11A6","name":"HANGUL JUNGSEONG O-YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A6"},4519:{"value":"11A7","name":"HANGUL JUNGSEONG O-YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A7"},4520:{"value":"11A8","name":"HANGUL JONGSEONG KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A8"},4521:{"value":"11A9","name":"HANGUL JONGSEONG SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11A9"},4522:{"value":"11AA","name":"HANGUL JONGSEONG KIYEOK-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11AA"},4523:{"value":"11AB","name":"HANGUL JONGSEONG NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11AB"},4524:{"value":"11AC","name":"HANGUL JONGSEONG NIEUN-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11AC"},4525:{"value":"11AD","name":"HANGUL JONGSEONG NIEUN-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11AD"},4526:{"value":"11AE","name":"HANGUL JONGSEONG TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11AE"},4527:{"value":"11AF","name":"HANGUL JONGSEONG RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11AF"},4528:{"value":"11B0","name":"HANGUL JONGSEONG RIEUL-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B0"},4529:{"value":"11B1","name":"HANGUL JONGSEONG RIEUL-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B1"},4530:{"value":"11B2","name":"HANGUL JONGSEONG RIEUL-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B2"},4531:{"value":"11B3","name":"HANGUL JONGSEONG RIEUL-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B3"},4532:{"value":"11B4","name":"HANGUL JONGSEONG RIEUL-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B4"},4533:{"value":"11B5","name":"HANGUL JONGSEONG RIEUL-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B5"},4534:{"value":"11B6","name":"HANGUL JONGSEONG RIEUL-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B6"},4535:{"value":"11B7","name":"HANGUL JONGSEONG MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B7"},4536:{"value":"11B8","name":"HANGUL JONGSEONG PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B8"},4537:{"value":"11B9","name":"HANGUL JONGSEONG PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11B9"},4538:{"value":"11BA","name":"HANGUL JONGSEONG SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11BA"},4539:{"value":"11BB","name":"HANGUL JONGSEONG SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11BB"},4540:{"value":"11BC","name":"HANGUL JONGSEONG IEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11BC"},4541:{"value":"11BD","name":"HANGUL JONGSEONG CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11BD"},4542:{"value":"11BE","name":"HANGUL JONGSEONG CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11BE"},4543:{"value":"11BF","name":"HANGUL JONGSEONG KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11BF"},4544:{"value":"11C0","name":"HANGUL JONGSEONG THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C0"},4545:{"value":"11C1","name":"HANGUL JONGSEONG PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C1"},4546:{"value":"11C2","name":"HANGUL JONGSEONG HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C2"},4547:{"value":"11C3","name":"HANGUL JONGSEONG KIYEOK-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C3"},4548:{"value":"11C4","name":"HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C4"},4549:{"value":"11C5","name":"HANGUL JONGSEONG NIEUN-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C5"},4550:{"value":"11C6","name":"HANGUL JONGSEONG NIEUN-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C6"},4551:{"value":"11C7","name":"HANGUL JONGSEONG NIEUN-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C7"},4552:{"value":"11C8","name":"HANGUL JONGSEONG NIEUN-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C8"},4553:{"value":"11C9","name":"HANGUL JONGSEONG NIEUN-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11C9"},4554:{"value":"11CA","name":"HANGUL JONGSEONG TIKEUT-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11CA"},4555:{"value":"11CB","name":"HANGUL JONGSEONG TIKEUT-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11CB"},4556:{"value":"11CC","name":"HANGUL JONGSEONG RIEUL-KIYEOK-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11CC"},4557:{"value":"11CD","name":"HANGUL JONGSEONG RIEUL-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11CD"},4558:{"value":"11CE","name":"HANGUL JONGSEONG RIEUL-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11CE"},4559:{"value":"11CF","name":"HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11CF"},4560:{"value":"11D0","name":"HANGUL JONGSEONG SSANGRIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D0"},4561:{"value":"11D1","name":"HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D1"},4562:{"value":"11D2","name":"HANGUL JONGSEONG RIEUL-MIEUM-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D2"},4563:{"value":"11D3","name":"HANGUL JONGSEONG RIEUL-PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D3"},4564:{"value":"11D4","name":"HANGUL JONGSEONG RIEUL-PIEUP-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D4"},4565:{"value":"11D5","name":"HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D5"},4566:{"value":"11D6","name":"HANGUL JONGSEONG RIEUL-SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D6"},4567:{"value":"11D7","name":"HANGUL JONGSEONG RIEUL-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D7"},4568:{"value":"11D8","name":"HANGUL JONGSEONG RIEUL-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D8"},4569:{"value":"11D9","name":"HANGUL JONGSEONG RIEUL-YEORINHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11D9"},4570:{"value":"11DA","name":"HANGUL JONGSEONG MIEUM-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11DA"},4571:{"value":"11DB","name":"HANGUL JONGSEONG MIEUM-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11DB"},4572:{"value":"11DC","name":"HANGUL JONGSEONG MIEUM-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11DC"},4573:{"value":"11DD","name":"HANGUL JONGSEONG MIEUM-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11DD"},4574:{"value":"11DE","name":"HANGUL JONGSEONG MIEUM-SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11DE"},4575:{"value":"11DF","name":"HANGUL JONGSEONG MIEUM-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11DF"},4576:{"value":"11E0","name":"HANGUL JONGSEONG MIEUM-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E0"},4577:{"value":"11E1","name":"HANGUL JONGSEONG MIEUM-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E1"},4578:{"value":"11E2","name":"HANGUL JONGSEONG KAPYEOUNMIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E2"},4579:{"value":"11E3","name":"HANGUL JONGSEONG PIEUP-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E3"},4580:{"value":"11E4","name":"HANGUL JONGSEONG PIEUP-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E4"},4581:{"value":"11E5","name":"HANGUL JONGSEONG PIEUP-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E5"},4582:{"value":"11E6","name":"HANGUL JONGSEONG KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E6"},4583:{"value":"11E7","name":"HANGUL JONGSEONG SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E7"},4584:{"value":"11E8","name":"HANGUL JONGSEONG SIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E8"},4585:{"value":"11E9","name":"HANGUL JONGSEONG SIOS-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11E9"},4586:{"value":"11EA","name":"HANGUL JONGSEONG SIOS-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11EA"},4587:{"value":"11EB","name":"HANGUL JONGSEONG PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11EB"},4588:{"value":"11EC","name":"HANGUL JONGSEONG IEUNG-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11EC"},4589:{"value":"11ED","name":"HANGUL JONGSEONG IEUNG-SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11ED"},4590:{"value":"11EE","name":"HANGUL JONGSEONG SSANGIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11EE"},4591:{"value":"11EF","name":"HANGUL JONGSEONG IEUNG-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11EF"},4592:{"value":"11F0","name":"HANGUL JONGSEONG YESIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F0"},4593:{"value":"11F1","name":"HANGUL JONGSEONG YESIEUNG-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F1"},4594:{"value":"11F2","name":"HANGUL JONGSEONG YESIEUNG-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F2"},4595:{"value":"11F3","name":"HANGUL JONGSEONG PHIEUPH-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F3"},4596:{"value":"11F4","name":"HANGUL JONGSEONG KAPYEOUNPHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F4"},4597:{"value":"11F5","name":"HANGUL JONGSEONG HIEUH-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F5"},4598:{"value":"11F6","name":"HANGUL JONGSEONG HIEUH-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F6"},4599:{"value":"11F7","name":"HANGUL JONGSEONG HIEUH-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F7"},4600:{"value":"11F8","name":"HANGUL JONGSEONG HIEUH-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F8"},4601:{"value":"11F9","name":"HANGUL JONGSEONG YEORINHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11F9"},4602:{"value":"11FA","name":"HANGUL JONGSEONG KIYEOK-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11FA"},4603:{"value":"11FB","name":"HANGUL JONGSEONG KIYEOK-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11FB"},4604:{"value":"11FC","name":"HANGUL JONGSEONG KIYEOK-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11FC"},4605:{"value":"11FD","name":"HANGUL JONGSEONG KIYEOK-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11FD"},4606:{"value":"11FE","name":"HANGUL JONGSEONG KIYEOK-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11FE"},4607:{"value":"11FF","name":"HANGUL JONGSEONG SSANGNIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u11FF"},4608:{"value":"1200","name":"ETHIOPIC SYLLABLE HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1200"},4609:{"value":"1201","name":"ETHIOPIC SYLLABLE HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1201"},4610:{"value":"1202","name":"ETHIOPIC SYLLABLE HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1202"},4611:{"value":"1203","name":"ETHIOPIC SYLLABLE HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1203"},4612:{"value":"1204","name":"ETHIOPIC SYLLABLE HEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1204"},4613:{"value":"1205","name":"ETHIOPIC SYLLABLE HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1205"},4614:{"value":"1206","name":"ETHIOPIC SYLLABLE HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1206"},4615:{"value":"1207","name":"ETHIOPIC SYLLABLE HOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1207"},4616:{"value":"1208","name":"ETHIOPIC SYLLABLE LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1208"},4617:{"value":"1209","name":"ETHIOPIC SYLLABLE LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1209"},4618:{"value":"120A","name":"ETHIOPIC SYLLABLE LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u120A"},4619:{"value":"120B","name":"ETHIOPIC SYLLABLE LAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u120B"},4620:{"value":"120C","name":"ETHIOPIC SYLLABLE LEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u120C"},4621:{"value":"120D","name":"ETHIOPIC SYLLABLE LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u120D"},4622:{"value":"120E","name":"ETHIOPIC SYLLABLE LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u120E"},4623:{"value":"120F","name":"ETHIOPIC SYLLABLE LWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u120F"},4624:{"value":"1210","name":"ETHIOPIC SYLLABLE HHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1210"},4625:{"value":"1211","name":"ETHIOPIC SYLLABLE HHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1211"},4626:{"value":"1212","name":"ETHIOPIC SYLLABLE HHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1212"},4627:{"value":"1213","name":"ETHIOPIC SYLLABLE HHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1213"},4628:{"value":"1214","name":"ETHIOPIC SYLLABLE HHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1214"},4629:{"value":"1215","name":"ETHIOPIC SYLLABLE HHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1215"},4630:{"value":"1216","name":"ETHIOPIC SYLLABLE HHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1216"},4631:{"value":"1217","name":"ETHIOPIC SYLLABLE HHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1217"},4632:{"value":"1218","name":"ETHIOPIC SYLLABLE MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1218"},4633:{"value":"1219","name":"ETHIOPIC SYLLABLE MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1219"},4634:{"value":"121A","name":"ETHIOPIC SYLLABLE MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u121A"},4635:{"value":"121B","name":"ETHIOPIC SYLLABLE MAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u121B"},4636:{"value":"121C","name":"ETHIOPIC SYLLABLE MEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u121C"},4637:{"value":"121D","name":"ETHIOPIC SYLLABLE ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u121D"},4638:{"value":"121E","name":"ETHIOPIC SYLLABLE MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u121E"},4639:{"value":"121F","name":"ETHIOPIC SYLLABLE MWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u121F"},4640:{"value":"1220","name":"ETHIOPIC SYLLABLE SZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1220"},4641:{"value":"1221","name":"ETHIOPIC SYLLABLE SZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1221"},4642:{"value":"1222","name":"ETHIOPIC SYLLABLE SZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1222"},4643:{"value":"1223","name":"ETHIOPIC SYLLABLE SZAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1223"},4644:{"value":"1224","name":"ETHIOPIC SYLLABLE SZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1224"},4645:{"value":"1225","name":"ETHIOPIC SYLLABLE SZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1225"},4646:{"value":"1226","name":"ETHIOPIC SYLLABLE SZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1226"},4647:{"value":"1227","name":"ETHIOPIC SYLLABLE SZWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1227"},4648:{"value":"1228","name":"ETHIOPIC SYLLABLE RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1228"},4649:{"value":"1229","name":"ETHIOPIC SYLLABLE RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1229"},4650:{"value":"122A","name":"ETHIOPIC SYLLABLE RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u122A"},4651:{"value":"122B","name":"ETHIOPIC SYLLABLE RAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u122B"},4652:{"value":"122C","name":"ETHIOPIC SYLLABLE REE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u122C"},4653:{"value":"122D","name":"ETHIOPIC SYLLABLE RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u122D"},4654:{"value":"122E","name":"ETHIOPIC SYLLABLE RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u122E"},4655:{"value":"122F","name":"ETHIOPIC SYLLABLE RWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u122F"},4656:{"value":"1230","name":"ETHIOPIC SYLLABLE SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1230"},4657:{"value":"1231","name":"ETHIOPIC SYLLABLE SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1231"},4658:{"value":"1232","name":"ETHIOPIC SYLLABLE SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1232"},4659:{"value":"1233","name":"ETHIOPIC SYLLABLE SAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1233"},4660:{"value":"1234","name":"ETHIOPIC SYLLABLE SEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1234"},4661:{"value":"1235","name":"ETHIOPIC SYLLABLE SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1235"},4662:{"value":"1236","name":"ETHIOPIC SYLLABLE SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1236"},4663:{"value":"1237","name":"ETHIOPIC SYLLABLE SWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1237"},4664:{"value":"1238","name":"ETHIOPIC SYLLABLE SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1238"},4665:{"value":"1239","name":"ETHIOPIC SYLLABLE SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1239"},4666:{"value":"123A","name":"ETHIOPIC SYLLABLE SHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u123A"},4667:{"value":"123B","name":"ETHIOPIC SYLLABLE SHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u123B"},4668:{"value":"123C","name":"ETHIOPIC SYLLABLE SHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u123C"},4669:{"value":"123D","name":"ETHIOPIC SYLLABLE SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u123D"},4670:{"value":"123E","name":"ETHIOPIC SYLLABLE SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u123E"},4671:{"value":"123F","name":"ETHIOPIC SYLLABLE SHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u123F"},4672:{"value":"1240","name":"ETHIOPIC SYLLABLE QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1240"},4673:{"value":"1241","name":"ETHIOPIC SYLLABLE QU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1241"},4674:{"value":"1242","name":"ETHIOPIC SYLLABLE QI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1242"},4675:{"value":"1243","name":"ETHIOPIC SYLLABLE QAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1243"},4676:{"value":"1244","name":"ETHIOPIC SYLLABLE QEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1244"},4677:{"value":"1245","name":"ETHIOPIC SYLLABLE QE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1245"},4678:{"value":"1246","name":"ETHIOPIC SYLLABLE QO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1246"},4679:{"value":"1247","name":"ETHIOPIC SYLLABLE QOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1247"},4680:{"value":"1248","name":"ETHIOPIC SYLLABLE QWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1248"},4682:{"value":"124A","name":"ETHIOPIC SYLLABLE QWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u124A"},4683:{"value":"124B","name":"ETHIOPIC SYLLABLE QWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u124B"},4684:{"value":"124C","name":"ETHIOPIC SYLLABLE QWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u124C"},4685:{"value":"124D","name":"ETHIOPIC SYLLABLE QWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u124D"},4688:{"value":"1250","name":"ETHIOPIC SYLLABLE QHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1250"},4689:{"value":"1251","name":"ETHIOPIC SYLLABLE QHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1251"},4690:{"value":"1252","name":"ETHIOPIC SYLLABLE QHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1252"},4691:{"value":"1253","name":"ETHIOPIC SYLLABLE QHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1253"},4692:{"value":"1254","name":"ETHIOPIC SYLLABLE QHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1254"},4693:{"value":"1255","name":"ETHIOPIC SYLLABLE QHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1255"},4694:{"value":"1256","name":"ETHIOPIC SYLLABLE QHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1256"},4696:{"value":"1258","name":"ETHIOPIC SYLLABLE QHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1258"},4698:{"value":"125A","name":"ETHIOPIC SYLLABLE QHWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u125A"},4699:{"value":"125B","name":"ETHIOPIC SYLLABLE QHWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u125B"},4700:{"value":"125C","name":"ETHIOPIC SYLLABLE QHWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u125C"},4701:{"value":"125D","name":"ETHIOPIC SYLLABLE QHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u125D"},4704:{"value":"1260","name":"ETHIOPIC SYLLABLE BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1260"},4705:{"value":"1261","name":"ETHIOPIC SYLLABLE BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1261"},4706:{"value":"1262","name":"ETHIOPIC SYLLABLE BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1262"},4707:{"value":"1263","name":"ETHIOPIC SYLLABLE BAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1263"},4708:{"value":"1264","name":"ETHIOPIC SYLLABLE BEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1264"},4709:{"value":"1265","name":"ETHIOPIC SYLLABLE BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1265"},4710:{"value":"1266","name":"ETHIOPIC SYLLABLE BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1266"},4711:{"value":"1267","name":"ETHIOPIC SYLLABLE BWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1267"},4712:{"value":"1268","name":"ETHIOPIC SYLLABLE VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1268"},4713:{"value":"1269","name":"ETHIOPIC SYLLABLE VU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1269"},4714:{"value":"126A","name":"ETHIOPIC SYLLABLE VI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u126A"},4715:{"value":"126B","name":"ETHIOPIC SYLLABLE VAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u126B"},4716:{"value":"126C","name":"ETHIOPIC SYLLABLE VEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u126C"},4717:{"value":"126D","name":"ETHIOPIC SYLLABLE VE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u126D"},4718:{"value":"126E","name":"ETHIOPIC SYLLABLE VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u126E"},4719:{"value":"126F","name":"ETHIOPIC SYLLABLE VWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u126F"},4720:{"value":"1270","name":"ETHIOPIC SYLLABLE TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1270"},4721:{"value":"1271","name":"ETHIOPIC SYLLABLE TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1271"},4722:{"value":"1272","name":"ETHIOPIC SYLLABLE TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1272"},4723:{"value":"1273","name":"ETHIOPIC SYLLABLE TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1273"},4724:{"value":"1274","name":"ETHIOPIC SYLLABLE TEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1274"},4725:{"value":"1275","name":"ETHIOPIC SYLLABLE TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1275"},4726:{"value":"1276","name":"ETHIOPIC SYLLABLE TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1276"},4727:{"value":"1277","name":"ETHIOPIC SYLLABLE TWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1277"},4728:{"value":"1278","name":"ETHIOPIC SYLLABLE CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1278"},4729:{"value":"1279","name":"ETHIOPIC SYLLABLE CU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1279"},4730:{"value":"127A","name":"ETHIOPIC SYLLABLE CI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u127A"},4731:{"value":"127B","name":"ETHIOPIC SYLLABLE CAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u127B"},4732:{"value":"127C","name":"ETHIOPIC SYLLABLE CEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u127C"},4733:{"value":"127D","name":"ETHIOPIC SYLLABLE CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u127D"},4734:{"value":"127E","name":"ETHIOPIC SYLLABLE CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u127E"},4735:{"value":"127F","name":"ETHIOPIC SYLLABLE CWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u127F"},4736:{"value":"1280","name":"ETHIOPIC SYLLABLE XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1280"},4737:{"value":"1281","name":"ETHIOPIC SYLLABLE XU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1281"},4738:{"value":"1282","name":"ETHIOPIC SYLLABLE XI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1282"},4739:{"value":"1283","name":"ETHIOPIC SYLLABLE XAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1283"},4740:{"value":"1284","name":"ETHIOPIC SYLLABLE XEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1284"},4741:{"value":"1285","name":"ETHIOPIC SYLLABLE XE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1285"},4742:{"value":"1286","name":"ETHIOPIC SYLLABLE XO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1286"},4743:{"value":"1287","name":"ETHIOPIC SYLLABLE XOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1287"},4744:{"value":"1288","name":"ETHIOPIC SYLLABLE XWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1288"},4746:{"value":"128A","name":"ETHIOPIC SYLLABLE XWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u128A"},4747:{"value":"128B","name":"ETHIOPIC SYLLABLE XWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u128B"},4748:{"value":"128C","name":"ETHIOPIC SYLLABLE XWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u128C"},4749:{"value":"128D","name":"ETHIOPIC SYLLABLE XWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u128D"},4752:{"value":"1290","name":"ETHIOPIC SYLLABLE NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1290"},4753:{"value":"1291","name":"ETHIOPIC SYLLABLE NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1291"},4754:{"value":"1292","name":"ETHIOPIC SYLLABLE NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1292"},4755:{"value":"1293","name":"ETHIOPIC SYLLABLE NAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1293"},4756:{"value":"1294","name":"ETHIOPIC SYLLABLE NEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1294"},4757:{"value":"1295","name":"ETHIOPIC SYLLABLE NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1295"},4758:{"value":"1296","name":"ETHIOPIC SYLLABLE NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1296"},4759:{"value":"1297","name":"ETHIOPIC SYLLABLE NWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1297"},4760:{"value":"1298","name":"ETHIOPIC SYLLABLE NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1298"},4761:{"value":"1299","name":"ETHIOPIC SYLLABLE NYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1299"},4762:{"value":"129A","name":"ETHIOPIC SYLLABLE NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u129A"},4763:{"value":"129B","name":"ETHIOPIC SYLLABLE NYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u129B"},4764:{"value":"129C","name":"ETHIOPIC SYLLABLE NYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u129C"},4765:{"value":"129D","name":"ETHIOPIC SYLLABLE NYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u129D"},4766:{"value":"129E","name":"ETHIOPIC SYLLABLE NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u129E"},4767:{"value":"129F","name":"ETHIOPIC SYLLABLE NYWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u129F"},4768:{"value":"12A0","name":"ETHIOPIC SYLLABLE GLOTTAL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A0"},4769:{"value":"12A1","name":"ETHIOPIC SYLLABLE GLOTTAL U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A1"},4770:{"value":"12A2","name":"ETHIOPIC SYLLABLE GLOTTAL I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A2"},4771:{"value":"12A3","name":"ETHIOPIC SYLLABLE GLOTTAL AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A3"},4772:{"value":"12A4","name":"ETHIOPIC SYLLABLE GLOTTAL EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A4"},4773:{"value":"12A5","name":"ETHIOPIC SYLLABLE GLOTTAL E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A5"},4774:{"value":"12A6","name":"ETHIOPIC SYLLABLE GLOTTAL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A6"},4775:{"value":"12A7","name":"ETHIOPIC SYLLABLE GLOTTAL WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A7"},4776:{"value":"12A8","name":"ETHIOPIC SYLLABLE KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A8"},4777:{"value":"12A9","name":"ETHIOPIC SYLLABLE KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12A9"},4778:{"value":"12AA","name":"ETHIOPIC SYLLABLE KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12AA"},4779:{"value":"12AB","name":"ETHIOPIC SYLLABLE KAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12AB"},4780:{"value":"12AC","name":"ETHIOPIC SYLLABLE KEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12AC"},4781:{"value":"12AD","name":"ETHIOPIC SYLLABLE KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12AD"},4782:{"value":"12AE","name":"ETHIOPIC SYLLABLE KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12AE"},4783:{"value":"12AF","name":"ETHIOPIC SYLLABLE KOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12AF"},4784:{"value":"12B0","name":"ETHIOPIC SYLLABLE KWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B0"},4786:{"value":"12B2","name":"ETHIOPIC SYLLABLE KWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B2"},4787:{"value":"12B3","name":"ETHIOPIC SYLLABLE KWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B3"},4788:{"value":"12B4","name":"ETHIOPIC SYLLABLE KWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B4"},4789:{"value":"12B5","name":"ETHIOPIC SYLLABLE KWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B5"},4792:{"value":"12B8","name":"ETHIOPIC SYLLABLE KXA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B8"},4793:{"value":"12B9","name":"ETHIOPIC SYLLABLE KXU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12B9"},4794:{"value":"12BA","name":"ETHIOPIC SYLLABLE KXI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12BA"},4795:{"value":"12BB","name":"ETHIOPIC SYLLABLE KXAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12BB"},4796:{"value":"12BC","name":"ETHIOPIC SYLLABLE KXEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12BC"},4797:{"value":"12BD","name":"ETHIOPIC SYLLABLE KXE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12BD"},4798:{"value":"12BE","name":"ETHIOPIC SYLLABLE KXO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12BE"},4800:{"value":"12C0","name":"ETHIOPIC SYLLABLE KXWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C0"},4802:{"value":"12C2","name":"ETHIOPIC SYLLABLE KXWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C2"},4803:{"value":"12C3","name":"ETHIOPIC SYLLABLE KXWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C3"},4804:{"value":"12C4","name":"ETHIOPIC SYLLABLE KXWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C4"},4805:{"value":"12C5","name":"ETHIOPIC SYLLABLE KXWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C5"},4808:{"value":"12C8","name":"ETHIOPIC SYLLABLE WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C8"},4809:{"value":"12C9","name":"ETHIOPIC SYLLABLE WU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12C9"},4810:{"value":"12CA","name":"ETHIOPIC SYLLABLE WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12CA"},4811:{"value":"12CB","name":"ETHIOPIC SYLLABLE WAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12CB"},4812:{"value":"12CC","name":"ETHIOPIC SYLLABLE WEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12CC"},4813:{"value":"12CD","name":"ETHIOPIC SYLLABLE WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12CD"},4814:{"value":"12CE","name":"ETHIOPIC SYLLABLE WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12CE"},4815:{"value":"12CF","name":"ETHIOPIC SYLLABLE WOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12CF"},4816:{"value":"12D0","name":"ETHIOPIC SYLLABLE PHARYNGEAL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D0"},4817:{"value":"12D1","name":"ETHIOPIC SYLLABLE PHARYNGEAL U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D1"},4818:{"value":"12D2","name":"ETHIOPIC SYLLABLE PHARYNGEAL I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D2"},4819:{"value":"12D3","name":"ETHIOPIC SYLLABLE PHARYNGEAL AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D3"},4820:{"value":"12D4","name":"ETHIOPIC SYLLABLE PHARYNGEAL EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D4"},4821:{"value":"12D5","name":"ETHIOPIC SYLLABLE PHARYNGEAL E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D5"},4822:{"value":"12D6","name":"ETHIOPIC SYLLABLE PHARYNGEAL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D6"},4824:{"value":"12D8","name":"ETHIOPIC SYLLABLE ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D8"},4825:{"value":"12D9","name":"ETHIOPIC SYLLABLE ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12D9"},4826:{"value":"12DA","name":"ETHIOPIC SYLLABLE ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12DA"},4827:{"value":"12DB","name":"ETHIOPIC SYLLABLE ZAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12DB"},4828:{"value":"12DC","name":"ETHIOPIC SYLLABLE ZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12DC"},4829:{"value":"12DD","name":"ETHIOPIC SYLLABLE ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12DD"},4830:{"value":"12DE","name":"ETHIOPIC SYLLABLE ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12DE"},4831:{"value":"12DF","name":"ETHIOPIC SYLLABLE ZWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12DF"},4832:{"value":"12E0","name":"ETHIOPIC SYLLABLE ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E0"},4833:{"value":"12E1","name":"ETHIOPIC SYLLABLE ZHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E1"},4834:{"value":"12E2","name":"ETHIOPIC SYLLABLE ZHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E2"},4835:{"value":"12E3","name":"ETHIOPIC SYLLABLE ZHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E3"},4836:{"value":"12E4","name":"ETHIOPIC SYLLABLE ZHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E4"},4837:{"value":"12E5","name":"ETHIOPIC SYLLABLE ZHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E5"},4838:{"value":"12E6","name":"ETHIOPIC SYLLABLE ZHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E6"},4839:{"value":"12E7","name":"ETHIOPIC SYLLABLE ZHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E7"},4840:{"value":"12E8","name":"ETHIOPIC SYLLABLE YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E8"},4841:{"value":"12E9","name":"ETHIOPIC SYLLABLE YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12E9"},4842:{"value":"12EA","name":"ETHIOPIC SYLLABLE YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12EA"},4843:{"value":"12EB","name":"ETHIOPIC SYLLABLE YAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12EB"},4844:{"value":"12EC","name":"ETHIOPIC SYLLABLE YEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12EC"},4845:{"value":"12ED","name":"ETHIOPIC SYLLABLE YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12ED"},4846:{"value":"12EE","name":"ETHIOPIC SYLLABLE YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12EE"},4847:{"value":"12EF","name":"ETHIOPIC SYLLABLE YOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12EF"},4848:{"value":"12F0","name":"ETHIOPIC SYLLABLE DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F0"},4849:{"value":"12F1","name":"ETHIOPIC SYLLABLE DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F1"},4850:{"value":"12F2","name":"ETHIOPIC SYLLABLE DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F2"},4851:{"value":"12F3","name":"ETHIOPIC SYLLABLE DAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F3"},4852:{"value":"12F4","name":"ETHIOPIC SYLLABLE DEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F4"},4853:{"value":"12F5","name":"ETHIOPIC SYLLABLE DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F5"},4854:{"value":"12F6","name":"ETHIOPIC SYLLABLE DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F6"},4855:{"value":"12F7","name":"ETHIOPIC SYLLABLE DWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F7"},4856:{"value":"12F8","name":"ETHIOPIC SYLLABLE DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F8"},4857:{"value":"12F9","name":"ETHIOPIC SYLLABLE DDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12F9"},4858:{"value":"12FA","name":"ETHIOPIC SYLLABLE DDI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12FA"},4859:{"value":"12FB","name":"ETHIOPIC SYLLABLE DDAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12FB"},4860:{"value":"12FC","name":"ETHIOPIC SYLLABLE DDEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12FC"},4861:{"value":"12FD","name":"ETHIOPIC SYLLABLE DDE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12FD"},4862:{"value":"12FE","name":"ETHIOPIC SYLLABLE DDO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12FE"},4863:{"value":"12FF","name":"ETHIOPIC SYLLABLE DDWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u12FF"},4864:{"value":"1300","name":"ETHIOPIC SYLLABLE JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1300"},4865:{"value":"1301","name":"ETHIOPIC SYLLABLE JU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1301"},4866:{"value":"1302","name":"ETHIOPIC SYLLABLE JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1302"},4867:{"value":"1303","name":"ETHIOPIC SYLLABLE JAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1303"},4868:{"value":"1304","name":"ETHIOPIC SYLLABLE JEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1304"},4869:{"value":"1305","name":"ETHIOPIC SYLLABLE JE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1305"},4870:{"value":"1306","name":"ETHIOPIC SYLLABLE JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1306"},4871:{"value":"1307","name":"ETHIOPIC SYLLABLE JWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1307"},4872:{"value":"1308","name":"ETHIOPIC SYLLABLE GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1308"},4873:{"value":"1309","name":"ETHIOPIC SYLLABLE GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1309"},4874:{"value":"130A","name":"ETHIOPIC SYLLABLE GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u130A"},4875:{"value":"130B","name":"ETHIOPIC SYLLABLE GAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u130B"},4876:{"value":"130C","name":"ETHIOPIC SYLLABLE GEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u130C"},4877:{"value":"130D","name":"ETHIOPIC SYLLABLE GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u130D"},4878:{"value":"130E","name":"ETHIOPIC SYLLABLE GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u130E"},4879:{"value":"130F","name":"ETHIOPIC SYLLABLE GOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u130F"},4880:{"value":"1310","name":"ETHIOPIC SYLLABLE GWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1310"},4882:{"value":"1312","name":"ETHIOPIC SYLLABLE GWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1312"},4883:{"value":"1313","name":"ETHIOPIC SYLLABLE GWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1313"},4884:{"value":"1314","name":"ETHIOPIC SYLLABLE GWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1314"},4885:{"value":"1315","name":"ETHIOPIC SYLLABLE GWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1315"},4888:{"value":"1318","name":"ETHIOPIC SYLLABLE GGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1318"},4889:{"value":"1319","name":"ETHIOPIC SYLLABLE GGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1319"},4890:{"value":"131A","name":"ETHIOPIC SYLLABLE GGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u131A"},4891:{"value":"131B","name":"ETHIOPIC SYLLABLE GGAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u131B"},4892:{"value":"131C","name":"ETHIOPIC SYLLABLE GGEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u131C"},4893:{"value":"131D","name":"ETHIOPIC SYLLABLE GGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u131D"},4894:{"value":"131E","name":"ETHIOPIC SYLLABLE GGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u131E"},4895:{"value":"131F","name":"ETHIOPIC SYLLABLE GGWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u131F"},4896:{"value":"1320","name":"ETHIOPIC SYLLABLE THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1320"},4897:{"value":"1321","name":"ETHIOPIC SYLLABLE THU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1321"},4898:{"value":"1322","name":"ETHIOPIC SYLLABLE THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1322"},4899:{"value":"1323","name":"ETHIOPIC SYLLABLE THAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1323"},4900:{"value":"1324","name":"ETHIOPIC SYLLABLE THEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1324"},4901:{"value":"1325","name":"ETHIOPIC SYLLABLE THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1325"},4902:{"value":"1326","name":"ETHIOPIC SYLLABLE THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1326"},4903:{"value":"1327","name":"ETHIOPIC SYLLABLE THWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1327"},4904:{"value":"1328","name":"ETHIOPIC SYLLABLE CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1328"},4905:{"value":"1329","name":"ETHIOPIC SYLLABLE CHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1329"},4906:{"value":"132A","name":"ETHIOPIC SYLLABLE CHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u132A"},4907:{"value":"132B","name":"ETHIOPIC SYLLABLE CHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u132B"},4908:{"value":"132C","name":"ETHIOPIC SYLLABLE CHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u132C"},4909:{"value":"132D","name":"ETHIOPIC SYLLABLE CHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u132D"},4910:{"value":"132E","name":"ETHIOPIC SYLLABLE CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u132E"},4911:{"value":"132F","name":"ETHIOPIC SYLLABLE CHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u132F"},4912:{"value":"1330","name":"ETHIOPIC SYLLABLE PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1330"},4913:{"value":"1331","name":"ETHIOPIC SYLLABLE PHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1331"},4914:{"value":"1332","name":"ETHIOPIC SYLLABLE PHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1332"},4915:{"value":"1333","name":"ETHIOPIC SYLLABLE PHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1333"},4916:{"value":"1334","name":"ETHIOPIC SYLLABLE PHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1334"},4917:{"value":"1335","name":"ETHIOPIC SYLLABLE PHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1335"},4918:{"value":"1336","name":"ETHIOPIC SYLLABLE PHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1336"},4919:{"value":"1337","name":"ETHIOPIC SYLLABLE PHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1337"},4920:{"value":"1338","name":"ETHIOPIC SYLLABLE TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1338"},4921:{"value":"1339","name":"ETHIOPIC SYLLABLE TSU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1339"},4922:{"value":"133A","name":"ETHIOPIC SYLLABLE TSI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u133A"},4923:{"value":"133B","name":"ETHIOPIC SYLLABLE TSAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u133B"},4924:{"value":"133C","name":"ETHIOPIC SYLLABLE TSEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u133C"},4925:{"value":"133D","name":"ETHIOPIC SYLLABLE TSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u133D"},4926:{"value":"133E","name":"ETHIOPIC SYLLABLE TSO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u133E"},4927:{"value":"133F","name":"ETHIOPIC SYLLABLE TSWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u133F"},4928:{"value":"1340","name":"ETHIOPIC SYLLABLE TZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1340"},4929:{"value":"1341","name":"ETHIOPIC SYLLABLE TZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1341"},4930:{"value":"1342","name":"ETHIOPIC SYLLABLE TZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1342"},4931:{"value":"1343","name":"ETHIOPIC SYLLABLE TZAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1343"},4932:{"value":"1344","name":"ETHIOPIC SYLLABLE TZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1344"},4933:{"value":"1345","name":"ETHIOPIC SYLLABLE TZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1345"},4934:{"value":"1346","name":"ETHIOPIC SYLLABLE TZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1346"},4935:{"value":"1347","name":"ETHIOPIC SYLLABLE TZOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1347"},4936:{"value":"1348","name":"ETHIOPIC SYLLABLE FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1348"},4937:{"value":"1349","name":"ETHIOPIC SYLLABLE FU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1349"},4938:{"value":"134A","name":"ETHIOPIC SYLLABLE FI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u134A"},4939:{"value":"134B","name":"ETHIOPIC SYLLABLE FAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u134B"},4940:{"value":"134C","name":"ETHIOPIC SYLLABLE FEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u134C"},4941:{"value":"134D","name":"ETHIOPIC SYLLABLE FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u134D"},4942:{"value":"134E","name":"ETHIOPIC SYLLABLE FO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u134E"},4943:{"value":"134F","name":"ETHIOPIC SYLLABLE FWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u134F"},4944:{"value":"1350","name":"ETHIOPIC SYLLABLE PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1350"},4945:{"value":"1351","name":"ETHIOPIC SYLLABLE PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1351"},4946:{"value":"1352","name":"ETHIOPIC SYLLABLE PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1352"},4947:{"value":"1353","name":"ETHIOPIC SYLLABLE PAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1353"},4948:{"value":"1354","name":"ETHIOPIC SYLLABLE PEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1354"},4949:{"value":"1355","name":"ETHIOPIC SYLLABLE PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1355"},4950:{"value":"1356","name":"ETHIOPIC SYLLABLE PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1356"},4951:{"value":"1357","name":"ETHIOPIC SYLLABLE PWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1357"},4952:{"value":"1358","name":"ETHIOPIC SYLLABLE RYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1358"},4953:{"value":"1359","name":"ETHIOPIC SYLLABLE MYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1359"},4954:{"value":"135A","name":"ETHIOPIC SYLLABLE FYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u135A"},4992:{"value":"1380","name":"ETHIOPIC SYLLABLE SEBATBEIT MWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1380"},4993:{"value":"1381","name":"ETHIOPIC SYLLABLE MWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1381"},4994:{"value":"1382","name":"ETHIOPIC SYLLABLE MWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1382"},4995:{"value":"1383","name":"ETHIOPIC SYLLABLE MWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1383"},4996:{"value":"1384","name":"ETHIOPIC SYLLABLE SEBATBEIT BWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1384"},4997:{"value":"1385","name":"ETHIOPIC SYLLABLE BWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1385"},4998:{"value":"1386","name":"ETHIOPIC SYLLABLE BWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1386"},4999:{"value":"1387","name":"ETHIOPIC SYLLABLE BWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1387"},5000:{"value":"1388","name":"ETHIOPIC SYLLABLE SEBATBEIT FWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1388"},5001:{"value":"1389","name":"ETHIOPIC SYLLABLE FWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1389"},5002:{"value":"138A","name":"ETHIOPIC SYLLABLE FWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u138A"},5003:{"value":"138B","name":"ETHIOPIC SYLLABLE FWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u138B"},5004:{"value":"138C","name":"ETHIOPIC SYLLABLE SEBATBEIT PWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u138C"},5005:{"value":"138D","name":"ETHIOPIC SYLLABLE PWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u138D"},5006:{"value":"138E","name":"ETHIOPIC SYLLABLE PWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u138E"},5007:{"value":"138F","name":"ETHIOPIC SYLLABLE PWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u138F"},5121:{"value":"1401","name":"CANADIAN SYLLABICS E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1401"},5122:{"value":"1402","name":"CANADIAN SYLLABICS AAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1402"},5123:{"value":"1403","name":"CANADIAN SYLLABICS I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1403"},5124:{"value":"1404","name":"CANADIAN SYLLABICS II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1404"},5125:{"value":"1405","name":"CANADIAN SYLLABICS O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1405"},5126:{"value":"1406","name":"CANADIAN SYLLABICS OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1406"},5127:{"value":"1407","name":"CANADIAN SYLLABICS Y-CREE OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1407"},5128:{"value":"1408","name":"CANADIAN SYLLABICS CARRIER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1408"},5129:{"value":"1409","name":"CANADIAN SYLLABICS CARRIER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1409"},5130:{"value":"140A","name":"CANADIAN SYLLABICS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u140A"},5131:{"value":"140B","name":"CANADIAN SYLLABICS AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u140B"},5132:{"value":"140C","name":"CANADIAN SYLLABICS WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u140C"},5133:{"value":"140D","name":"CANADIAN SYLLABICS WEST-CREE WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u140D"},5134:{"value":"140E","name":"CANADIAN SYLLABICS WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u140E"},5135:{"value":"140F","name":"CANADIAN SYLLABICS WEST-CREE WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u140F"},5136:{"value":"1410","name":"CANADIAN SYLLABICS WII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1410"},5137:{"value":"1411","name":"CANADIAN SYLLABICS WEST-CREE WII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1411"},5138:{"value":"1412","name":"CANADIAN SYLLABICS WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1412"},5139:{"value":"1413","name":"CANADIAN SYLLABICS WEST-CREE WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1413"},5140:{"value":"1414","name":"CANADIAN SYLLABICS WOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1414"},5141:{"value":"1415","name":"CANADIAN SYLLABICS WEST-CREE WOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1415"},5142:{"value":"1416","name":"CANADIAN SYLLABICS NASKAPI WOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1416"},5143:{"value":"1417","name":"CANADIAN SYLLABICS WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1417"},5144:{"value":"1418","name":"CANADIAN SYLLABICS WEST-CREE WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1418"},5145:{"value":"1419","name":"CANADIAN SYLLABICS WAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1419"},5146:{"value":"141A","name":"CANADIAN SYLLABICS WEST-CREE WAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u141A"},5147:{"value":"141B","name":"CANADIAN SYLLABICS NASKAPI WAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u141B"},5148:{"value":"141C","name":"CANADIAN SYLLABICS AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u141C"},5149:{"value":"141D","name":"CANADIAN SYLLABICS Y-CREE W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u141D"},5150:{"value":"141E","name":"CANADIAN SYLLABICS GLOTTAL STOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u141E"},5151:{"value":"141F","name":"CANADIAN SYLLABICS FINAL ACUTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u141F"},5152:{"value":"1420","name":"CANADIAN SYLLABICS FINAL GRAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1420"},5153:{"value":"1421","name":"CANADIAN SYLLABICS FINAL BOTTOM HALF RING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1421"},5154:{"value":"1422","name":"CANADIAN SYLLABICS FINAL TOP HALF RING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1422"},5155:{"value":"1423","name":"CANADIAN SYLLABICS FINAL RIGHT HALF RING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1423"},5156:{"value":"1424","name":"CANADIAN SYLLABICS FINAL RING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1424"},5157:{"value":"1425","name":"CANADIAN SYLLABICS FINAL DOUBLE ACUTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1425"},5158:{"value":"1426","name":"CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1426"},5159:{"value":"1427","name":"CANADIAN SYLLABICS FINAL MIDDLE DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1427"},5160:{"value":"1428","name":"CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1428"},5161:{"value":"1429","name":"CANADIAN SYLLABICS FINAL PLUS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1429"},5162:{"value":"142A","name":"CANADIAN SYLLABICS FINAL DOWN TACK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u142A"},5163:{"value":"142B","name":"CANADIAN SYLLABICS EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u142B"},5164:{"value":"142C","name":"CANADIAN SYLLABICS IN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u142C"},5165:{"value":"142D","name":"CANADIAN SYLLABICS ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u142D"},5166:{"value":"142E","name":"CANADIAN SYLLABICS AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u142E"},5167:{"value":"142F","name":"CANADIAN SYLLABICS PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u142F"},5168:{"value":"1430","name":"CANADIAN SYLLABICS PAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1430"},5169:{"value":"1431","name":"CANADIAN SYLLABICS PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1431"},5170:{"value":"1432","name":"CANADIAN SYLLABICS PII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1432"},5171:{"value":"1433","name":"CANADIAN SYLLABICS PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1433"},5172:{"value":"1434","name":"CANADIAN SYLLABICS POO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1434"},5173:{"value":"1435","name":"CANADIAN SYLLABICS Y-CREE POO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1435"},5174:{"value":"1436","name":"CANADIAN SYLLABICS CARRIER HEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1436"},5175:{"value":"1437","name":"CANADIAN SYLLABICS CARRIER HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1437"},5176:{"value":"1438","name":"CANADIAN SYLLABICS PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1438"},5177:{"value":"1439","name":"CANADIAN SYLLABICS PAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1439"},5178:{"value":"143A","name":"CANADIAN SYLLABICS PWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u143A"},5179:{"value":"143B","name":"CANADIAN SYLLABICS WEST-CREE PWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u143B"},5180:{"value":"143C","name":"CANADIAN SYLLABICS PWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u143C"},5181:{"value":"143D","name":"CANADIAN SYLLABICS WEST-CREE PWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u143D"},5182:{"value":"143E","name":"CANADIAN SYLLABICS PWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u143E"},5183:{"value":"143F","name":"CANADIAN SYLLABICS WEST-CREE PWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u143F"},5184:{"value":"1440","name":"CANADIAN SYLLABICS PWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1440"},5185:{"value":"1441","name":"CANADIAN SYLLABICS WEST-CREE PWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1441"},5186:{"value":"1442","name":"CANADIAN SYLLABICS PWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1442"},5187:{"value":"1443","name":"CANADIAN SYLLABICS WEST-CREE PWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1443"},5188:{"value":"1444","name":"CANADIAN SYLLABICS PWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1444"},5189:{"value":"1445","name":"CANADIAN SYLLABICS WEST-CREE PWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1445"},5190:{"value":"1446","name":"CANADIAN SYLLABICS PWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1446"},5191:{"value":"1447","name":"CANADIAN SYLLABICS WEST-CREE PWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1447"},5192:{"value":"1448","name":"CANADIAN SYLLABICS Y-CREE PWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1448"},5193:{"value":"1449","name":"CANADIAN SYLLABICS P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1449"},5194:{"value":"144A","name":"CANADIAN SYLLABICS WEST-CREE P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u144A"},5195:{"value":"144B","name":"CANADIAN SYLLABICS CARRIER H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u144B"},5196:{"value":"144C","name":"CANADIAN SYLLABICS TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u144C"},5197:{"value":"144D","name":"CANADIAN SYLLABICS TAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u144D"},5198:{"value":"144E","name":"CANADIAN SYLLABICS TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u144E"},5199:{"value":"144F","name":"CANADIAN SYLLABICS TII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u144F"},5200:{"value":"1450","name":"CANADIAN SYLLABICS TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1450"},5201:{"value":"1451","name":"CANADIAN SYLLABICS TOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1451"},5202:{"value":"1452","name":"CANADIAN SYLLABICS Y-CREE TOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1452"},5203:{"value":"1453","name":"CANADIAN SYLLABICS CARRIER DEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1453"},5204:{"value":"1454","name":"CANADIAN SYLLABICS CARRIER DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1454"},5205:{"value":"1455","name":"CANADIAN SYLLABICS TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1455"},5206:{"value":"1456","name":"CANADIAN SYLLABICS TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1456"},5207:{"value":"1457","name":"CANADIAN SYLLABICS TWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1457"},5208:{"value":"1458","name":"CANADIAN SYLLABICS WEST-CREE TWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1458"},5209:{"value":"1459","name":"CANADIAN SYLLABICS TWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1459"},5210:{"value":"145A","name":"CANADIAN SYLLABICS WEST-CREE TWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u145A"},5211:{"value":"145B","name":"CANADIAN SYLLABICS TWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u145B"},5212:{"value":"145C","name":"CANADIAN SYLLABICS WEST-CREE TWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u145C"},5213:{"value":"145D","name":"CANADIAN SYLLABICS TWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u145D"},5214:{"value":"145E","name":"CANADIAN SYLLABICS WEST-CREE TWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u145E"},5215:{"value":"145F","name":"CANADIAN SYLLABICS TWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u145F"},5216:{"value":"1460","name":"CANADIAN SYLLABICS WEST-CREE TWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1460"},5217:{"value":"1461","name":"CANADIAN SYLLABICS TWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1461"},5218:{"value":"1462","name":"CANADIAN SYLLABICS WEST-CREE TWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1462"},5219:{"value":"1463","name":"CANADIAN SYLLABICS TWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1463"},5220:{"value":"1464","name":"CANADIAN SYLLABICS WEST-CREE TWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1464"},5221:{"value":"1465","name":"CANADIAN SYLLABICS NASKAPI TWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1465"},5222:{"value":"1466","name":"CANADIAN SYLLABICS T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1466"},5223:{"value":"1467","name":"CANADIAN SYLLABICS TTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1467"},5224:{"value":"1468","name":"CANADIAN SYLLABICS TTI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1468"},5225:{"value":"1469","name":"CANADIAN SYLLABICS TTO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1469"},5226:{"value":"146A","name":"CANADIAN SYLLABICS TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u146A"},5227:{"value":"146B","name":"CANADIAN SYLLABICS KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u146B"},5228:{"value":"146C","name":"CANADIAN SYLLABICS KAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u146C"},5229:{"value":"146D","name":"CANADIAN SYLLABICS KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u146D"},5230:{"value":"146E","name":"CANADIAN SYLLABICS KII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u146E"},5231:{"value":"146F","name":"CANADIAN SYLLABICS KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u146F"},5232:{"value":"1470","name":"CANADIAN SYLLABICS KOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1470"},5233:{"value":"1471","name":"CANADIAN SYLLABICS Y-CREE KOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1471"},5234:{"value":"1472","name":"CANADIAN SYLLABICS KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1472"},5235:{"value":"1473","name":"CANADIAN SYLLABICS KAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1473"},5236:{"value":"1474","name":"CANADIAN SYLLABICS KWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1474"},5237:{"value":"1475","name":"CANADIAN SYLLABICS WEST-CREE KWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1475"},5238:{"value":"1476","name":"CANADIAN SYLLABICS KWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1476"},5239:{"value":"1477","name":"CANADIAN SYLLABICS WEST-CREE KWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1477"},5240:{"value":"1478","name":"CANADIAN SYLLABICS KWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1478"},5241:{"value":"1479","name":"CANADIAN SYLLABICS WEST-CREE KWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1479"},5242:{"value":"147A","name":"CANADIAN SYLLABICS KWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u147A"},5243:{"value":"147B","name":"CANADIAN SYLLABICS WEST-CREE KWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u147B"},5244:{"value":"147C","name":"CANADIAN SYLLABICS KWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u147C"},5245:{"value":"147D","name":"CANADIAN SYLLABICS WEST-CREE KWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u147D"},5246:{"value":"147E","name":"CANADIAN SYLLABICS KWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u147E"},5247:{"value":"147F","name":"CANADIAN SYLLABICS WEST-CREE KWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u147F"},5248:{"value":"1480","name":"CANADIAN SYLLABICS KWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1480"},5249:{"value":"1481","name":"CANADIAN SYLLABICS WEST-CREE KWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1481"},5250:{"value":"1482","name":"CANADIAN SYLLABICS NASKAPI KWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1482"},5251:{"value":"1483","name":"CANADIAN SYLLABICS K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1483"},5252:{"value":"1484","name":"CANADIAN SYLLABICS KW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1484"},5253:{"value":"1485","name":"CANADIAN SYLLABICS SOUTH-SLAVEY KEH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1485"},5254:{"value":"1486","name":"CANADIAN SYLLABICS SOUTH-SLAVEY KIH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1486"},5255:{"value":"1487","name":"CANADIAN SYLLABICS SOUTH-SLAVEY KOH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1487"},5256:{"value":"1488","name":"CANADIAN SYLLABICS SOUTH-SLAVEY KAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1488"},5257:{"value":"1489","name":"CANADIAN SYLLABICS CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1489"},5258:{"value":"148A","name":"CANADIAN SYLLABICS CAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u148A"},5259:{"value":"148B","name":"CANADIAN SYLLABICS CI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u148B"},5260:{"value":"148C","name":"CANADIAN SYLLABICS CII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u148C"},5261:{"value":"148D","name":"CANADIAN SYLLABICS CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u148D"},5262:{"value":"148E","name":"CANADIAN SYLLABICS COO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u148E"},5263:{"value":"148F","name":"CANADIAN SYLLABICS Y-CREE COO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u148F"},5264:{"value":"1490","name":"CANADIAN SYLLABICS CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1490"},5265:{"value":"1491","name":"CANADIAN SYLLABICS CAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1491"},5266:{"value":"1492","name":"CANADIAN SYLLABICS CWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1492"},5267:{"value":"1493","name":"CANADIAN SYLLABICS WEST-CREE CWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1493"},5268:{"value":"1494","name":"CANADIAN SYLLABICS CWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1494"},5269:{"value":"1495","name":"CANADIAN SYLLABICS WEST-CREE CWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1495"},5270:{"value":"1496","name":"CANADIAN SYLLABICS CWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1496"},5271:{"value":"1497","name":"CANADIAN SYLLABICS WEST-CREE CWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1497"},5272:{"value":"1498","name":"CANADIAN SYLLABICS CWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1498"},5273:{"value":"1499","name":"CANADIAN SYLLABICS WEST-CREE CWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1499"},5274:{"value":"149A","name":"CANADIAN SYLLABICS CWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u149A"},5275:{"value":"149B","name":"CANADIAN SYLLABICS WEST-CREE CWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u149B"},5276:{"value":"149C","name":"CANADIAN SYLLABICS CWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u149C"},5277:{"value":"149D","name":"CANADIAN SYLLABICS WEST-CREE CWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u149D"},5278:{"value":"149E","name":"CANADIAN SYLLABICS CWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u149E"},5279:{"value":"149F","name":"CANADIAN SYLLABICS WEST-CREE CWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u149F"},5280:{"value":"14A0","name":"CANADIAN SYLLABICS NASKAPI CWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A0"},5281:{"value":"14A1","name":"CANADIAN SYLLABICS C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A1"},5282:{"value":"14A2","name":"CANADIAN SYLLABICS SAYISI TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A2"},5283:{"value":"14A3","name":"CANADIAN SYLLABICS ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A3"},5284:{"value":"14A4","name":"CANADIAN SYLLABICS MAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A4"},5285:{"value":"14A5","name":"CANADIAN SYLLABICS MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A5"},5286:{"value":"14A6","name":"CANADIAN SYLLABICS MII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A6"},5287:{"value":"14A7","name":"CANADIAN SYLLABICS MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A7"},5288:{"value":"14A8","name":"CANADIAN SYLLABICS MOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A8"},5289:{"value":"14A9","name":"CANADIAN SYLLABICS Y-CREE MOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14A9"},5290:{"value":"14AA","name":"CANADIAN SYLLABICS MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14AA"},5291:{"value":"14AB","name":"CANADIAN SYLLABICS MAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14AB"},5292:{"value":"14AC","name":"CANADIAN SYLLABICS MWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14AC"},5293:{"value":"14AD","name":"CANADIAN SYLLABICS WEST-CREE MWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14AD"},5294:{"value":"14AE","name":"CANADIAN SYLLABICS MWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14AE"},5295:{"value":"14AF","name":"CANADIAN SYLLABICS WEST-CREE MWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14AF"},5296:{"value":"14B0","name":"CANADIAN SYLLABICS MWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B0"},5297:{"value":"14B1","name":"CANADIAN SYLLABICS WEST-CREE MWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B1"},5298:{"value":"14B2","name":"CANADIAN SYLLABICS MWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B2"},5299:{"value":"14B3","name":"CANADIAN SYLLABICS WEST-CREE MWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B3"},5300:{"value":"14B4","name":"CANADIAN SYLLABICS MWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B4"},5301:{"value":"14B5","name":"CANADIAN SYLLABICS WEST-CREE MWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B5"},5302:{"value":"14B6","name":"CANADIAN SYLLABICS MWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B6"},5303:{"value":"14B7","name":"CANADIAN SYLLABICS WEST-CREE MWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B7"},5304:{"value":"14B8","name":"CANADIAN SYLLABICS MWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B8"},5305:{"value":"14B9","name":"CANADIAN SYLLABICS WEST-CREE MWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14B9"},5306:{"value":"14BA","name":"CANADIAN SYLLABICS NASKAPI MWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14BA"},5307:{"value":"14BB","name":"CANADIAN SYLLABICS M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14BB"},5308:{"value":"14BC","name":"CANADIAN SYLLABICS WEST-CREE M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14BC"},5309:{"value":"14BD","name":"CANADIAN SYLLABICS MH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14BD"},5310:{"value":"14BE","name":"CANADIAN SYLLABICS ATHAPASCAN M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14BE"},5311:{"value":"14BF","name":"CANADIAN SYLLABICS SAYISI M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14BF"},5312:{"value":"14C0","name":"CANADIAN SYLLABICS NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C0"},5313:{"value":"14C1","name":"CANADIAN SYLLABICS NAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C1"},5314:{"value":"14C2","name":"CANADIAN SYLLABICS NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C2"},5315:{"value":"14C3","name":"CANADIAN SYLLABICS NII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C3"},5316:{"value":"14C4","name":"CANADIAN SYLLABICS NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C4"},5317:{"value":"14C5","name":"CANADIAN SYLLABICS NOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C5"},5318:{"value":"14C6","name":"CANADIAN SYLLABICS Y-CREE NOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C6"},5319:{"value":"14C7","name":"CANADIAN SYLLABICS NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C7"},5320:{"value":"14C8","name":"CANADIAN SYLLABICS NAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C8"},5321:{"value":"14C9","name":"CANADIAN SYLLABICS NWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14C9"},5322:{"value":"14CA","name":"CANADIAN SYLLABICS WEST-CREE NWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14CA"},5323:{"value":"14CB","name":"CANADIAN SYLLABICS NWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14CB"},5324:{"value":"14CC","name":"CANADIAN SYLLABICS WEST-CREE NWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14CC"},5325:{"value":"14CD","name":"CANADIAN SYLLABICS NWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14CD"},5326:{"value":"14CE","name":"CANADIAN SYLLABICS WEST-CREE NWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14CE"},5327:{"value":"14CF","name":"CANADIAN SYLLABICS NASKAPI NWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14CF"},5328:{"value":"14D0","name":"CANADIAN SYLLABICS N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D0"},5329:{"value":"14D1","name":"CANADIAN SYLLABICS CARRIER NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D1"},5330:{"value":"14D2","name":"CANADIAN SYLLABICS NH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D2"},5331:{"value":"14D3","name":"CANADIAN SYLLABICS LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D3"},5332:{"value":"14D4","name":"CANADIAN SYLLABICS LAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D4"},5333:{"value":"14D5","name":"CANADIAN SYLLABICS LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D5"},5334:{"value":"14D6","name":"CANADIAN SYLLABICS LII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D6"},5335:{"value":"14D7","name":"CANADIAN SYLLABICS LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D7"},5336:{"value":"14D8","name":"CANADIAN SYLLABICS LOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D8"},5337:{"value":"14D9","name":"CANADIAN SYLLABICS Y-CREE LOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14D9"},5338:{"value":"14DA","name":"CANADIAN SYLLABICS LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14DA"},5339:{"value":"14DB","name":"CANADIAN SYLLABICS LAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14DB"},5340:{"value":"14DC","name":"CANADIAN SYLLABICS LWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14DC"},5341:{"value":"14DD","name":"CANADIAN SYLLABICS WEST-CREE LWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14DD"},5342:{"value":"14DE","name":"CANADIAN SYLLABICS LWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14DE"},5343:{"value":"14DF","name":"CANADIAN SYLLABICS WEST-CREE LWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14DF"},5344:{"value":"14E0","name":"CANADIAN SYLLABICS LWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E0"},5345:{"value":"14E1","name":"CANADIAN SYLLABICS WEST-CREE LWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E1"},5346:{"value":"14E2","name":"CANADIAN SYLLABICS LWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E2"},5347:{"value":"14E3","name":"CANADIAN SYLLABICS WEST-CREE LWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E3"},5348:{"value":"14E4","name":"CANADIAN SYLLABICS LWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E4"},5349:{"value":"14E5","name":"CANADIAN SYLLABICS WEST-CREE LWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E5"},5350:{"value":"14E6","name":"CANADIAN SYLLABICS LWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E6"},5351:{"value":"14E7","name":"CANADIAN SYLLABICS WEST-CREE LWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E7"},5352:{"value":"14E8","name":"CANADIAN SYLLABICS LWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E8"},5353:{"value":"14E9","name":"CANADIAN SYLLABICS WEST-CREE LWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14E9"},5354:{"value":"14EA","name":"CANADIAN SYLLABICS L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14EA"},5355:{"value":"14EB","name":"CANADIAN SYLLABICS WEST-CREE L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14EB"},5356:{"value":"14EC","name":"CANADIAN SYLLABICS MEDIAL L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14EC"},5357:{"value":"14ED","name":"CANADIAN SYLLABICS SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14ED"},5358:{"value":"14EE","name":"CANADIAN SYLLABICS SAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14EE"},5359:{"value":"14EF","name":"CANADIAN SYLLABICS SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14EF"},5360:{"value":"14F0","name":"CANADIAN SYLLABICS SII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F0"},5361:{"value":"14F1","name":"CANADIAN SYLLABICS SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F1"},5362:{"value":"14F2","name":"CANADIAN SYLLABICS SOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F2"},5363:{"value":"14F3","name":"CANADIAN SYLLABICS Y-CREE SOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F3"},5364:{"value":"14F4","name":"CANADIAN SYLLABICS SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F4"},5365:{"value":"14F5","name":"CANADIAN SYLLABICS SAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F5"},5366:{"value":"14F6","name":"CANADIAN SYLLABICS SWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F6"},5367:{"value":"14F7","name":"CANADIAN SYLLABICS WEST-CREE SWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F7"},5368:{"value":"14F8","name":"CANADIAN SYLLABICS SWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F8"},5369:{"value":"14F9","name":"CANADIAN SYLLABICS WEST-CREE SWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14F9"},5370:{"value":"14FA","name":"CANADIAN SYLLABICS SWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14FA"},5371:{"value":"14FB","name":"CANADIAN SYLLABICS WEST-CREE SWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14FB"},5372:{"value":"14FC","name":"CANADIAN SYLLABICS SWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14FC"},5373:{"value":"14FD","name":"CANADIAN SYLLABICS WEST-CREE SWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14FD"},5374:{"value":"14FE","name":"CANADIAN SYLLABICS SWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14FE"},5375:{"value":"14FF","name":"CANADIAN SYLLABICS WEST-CREE SWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u14FF"},5376:{"value":"1500","name":"CANADIAN SYLLABICS SWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1500"},5377:{"value":"1501","name":"CANADIAN SYLLABICS WEST-CREE SWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1501"},5378:{"value":"1502","name":"CANADIAN SYLLABICS SWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1502"},5379:{"value":"1503","name":"CANADIAN SYLLABICS WEST-CREE SWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1503"},5380:{"value":"1504","name":"CANADIAN SYLLABICS NASKAPI SWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1504"},5381:{"value":"1505","name":"CANADIAN SYLLABICS S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1505"},5382:{"value":"1506","name":"CANADIAN SYLLABICS ATHAPASCAN S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1506"},5383:{"value":"1507","name":"CANADIAN SYLLABICS SW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1507"},5384:{"value":"1508","name":"CANADIAN SYLLABICS BLACKFOOT S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1508"},5385:{"value":"1509","name":"CANADIAN SYLLABICS MOOSE-CREE SK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1509"},5386:{"value":"150A","name":"CANADIAN SYLLABICS NASKAPI SKW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u150A"},5387:{"value":"150B","name":"CANADIAN SYLLABICS NASKAPI S-W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u150B"},5388:{"value":"150C","name":"CANADIAN SYLLABICS NASKAPI SPWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u150C"},5389:{"value":"150D","name":"CANADIAN SYLLABICS NASKAPI STWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u150D"},5390:{"value":"150E","name":"CANADIAN SYLLABICS NASKAPI SKWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u150E"},5391:{"value":"150F","name":"CANADIAN SYLLABICS NASKAPI SCWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u150F"},5392:{"value":"1510","name":"CANADIAN SYLLABICS SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1510"},5393:{"value":"1511","name":"CANADIAN SYLLABICS SHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1511"},5394:{"value":"1512","name":"CANADIAN SYLLABICS SHII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1512"},5395:{"value":"1513","name":"CANADIAN SYLLABICS SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1513"},5396:{"value":"1514","name":"CANADIAN SYLLABICS SHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1514"},5397:{"value":"1515","name":"CANADIAN SYLLABICS SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1515"},5398:{"value":"1516","name":"CANADIAN SYLLABICS SHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1516"},5399:{"value":"1517","name":"CANADIAN SYLLABICS SHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1517"},5400:{"value":"1518","name":"CANADIAN SYLLABICS WEST-CREE SHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1518"},5401:{"value":"1519","name":"CANADIAN SYLLABICS SHWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1519"},5402:{"value":"151A","name":"CANADIAN SYLLABICS WEST-CREE SHWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u151A"},5403:{"value":"151B","name":"CANADIAN SYLLABICS SHWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u151B"},5404:{"value":"151C","name":"CANADIAN SYLLABICS WEST-CREE SHWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u151C"},5405:{"value":"151D","name":"CANADIAN SYLLABICS SHWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u151D"},5406:{"value":"151E","name":"CANADIAN SYLLABICS WEST-CREE SHWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u151E"},5407:{"value":"151F","name":"CANADIAN SYLLABICS SHWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u151F"},5408:{"value":"1520","name":"CANADIAN SYLLABICS WEST-CREE SHWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1520"},5409:{"value":"1521","name":"CANADIAN SYLLABICS SHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1521"},5410:{"value":"1522","name":"CANADIAN SYLLABICS WEST-CREE SHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1522"},5411:{"value":"1523","name":"CANADIAN SYLLABICS SHWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1523"},5412:{"value":"1524","name":"CANADIAN SYLLABICS WEST-CREE SHWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1524"},5413:{"value":"1525","name":"CANADIAN SYLLABICS SH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1525"},5414:{"value":"1526","name":"CANADIAN SYLLABICS YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1526"},5415:{"value":"1527","name":"CANADIAN SYLLABICS YAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1527"},5416:{"value":"1528","name":"CANADIAN SYLLABICS YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1528"},5417:{"value":"1529","name":"CANADIAN SYLLABICS YII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1529"},5418:{"value":"152A","name":"CANADIAN SYLLABICS YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u152A"},5419:{"value":"152B","name":"CANADIAN SYLLABICS YOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u152B"},5420:{"value":"152C","name":"CANADIAN SYLLABICS Y-CREE YOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u152C"},5421:{"value":"152D","name":"CANADIAN SYLLABICS YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u152D"},5422:{"value":"152E","name":"CANADIAN SYLLABICS YAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u152E"},5423:{"value":"152F","name":"CANADIAN SYLLABICS YWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u152F"},5424:{"value":"1530","name":"CANADIAN SYLLABICS WEST-CREE YWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1530"},5425:{"value":"1531","name":"CANADIAN SYLLABICS YWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1531"},5426:{"value":"1532","name":"CANADIAN SYLLABICS WEST-CREE YWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1532"},5427:{"value":"1533","name":"CANADIAN SYLLABICS YWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1533"},5428:{"value":"1534","name":"CANADIAN SYLLABICS WEST-CREE YWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1534"},5429:{"value":"1535","name":"CANADIAN SYLLABICS YWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1535"},5430:{"value":"1536","name":"CANADIAN SYLLABICS WEST-CREE YWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1536"},5431:{"value":"1537","name":"CANADIAN SYLLABICS YWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1537"},5432:{"value":"1538","name":"CANADIAN SYLLABICS WEST-CREE YWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1538"},5433:{"value":"1539","name":"CANADIAN SYLLABICS YWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1539"},5434:{"value":"153A","name":"CANADIAN SYLLABICS WEST-CREE YWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u153A"},5435:{"value":"153B","name":"CANADIAN SYLLABICS YWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u153B"},5436:{"value":"153C","name":"CANADIAN SYLLABICS WEST-CREE YWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u153C"},5437:{"value":"153D","name":"CANADIAN SYLLABICS NASKAPI YWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u153D"},5438:{"value":"153E","name":"CANADIAN SYLLABICS Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u153E"},5439:{"value":"153F","name":"CANADIAN SYLLABICS BIBLE-CREE Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u153F"},5440:{"value":"1540","name":"CANADIAN SYLLABICS WEST-CREE Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1540"},5441:{"value":"1541","name":"CANADIAN SYLLABICS SAYISI YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1541"},5442:{"value":"1542","name":"CANADIAN SYLLABICS RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1542"},5443:{"value":"1543","name":"CANADIAN SYLLABICS R-CREE RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1543"},5444:{"value":"1544","name":"CANADIAN SYLLABICS WEST-CREE LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1544"},5445:{"value":"1545","name":"CANADIAN SYLLABICS RAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1545"},5446:{"value":"1546","name":"CANADIAN SYLLABICS RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1546"},5447:{"value":"1547","name":"CANADIAN SYLLABICS RII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1547"},5448:{"value":"1548","name":"CANADIAN SYLLABICS RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1548"},5449:{"value":"1549","name":"CANADIAN SYLLABICS ROO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1549"},5450:{"value":"154A","name":"CANADIAN SYLLABICS WEST-CREE LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u154A"},5451:{"value":"154B","name":"CANADIAN SYLLABICS RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u154B"},5452:{"value":"154C","name":"CANADIAN SYLLABICS RAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u154C"},5453:{"value":"154D","name":"CANADIAN SYLLABICS WEST-CREE LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u154D"},5454:{"value":"154E","name":"CANADIAN SYLLABICS RWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u154E"},5455:{"value":"154F","name":"CANADIAN SYLLABICS WEST-CREE RWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u154F"},5456:{"value":"1550","name":"CANADIAN SYLLABICS R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1550"},5457:{"value":"1551","name":"CANADIAN SYLLABICS WEST-CREE R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1551"},5458:{"value":"1552","name":"CANADIAN SYLLABICS MEDIAL R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1552"},5459:{"value":"1553","name":"CANADIAN SYLLABICS FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1553"},5460:{"value":"1554","name":"CANADIAN SYLLABICS FAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1554"},5461:{"value":"1555","name":"CANADIAN SYLLABICS FI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1555"},5462:{"value":"1556","name":"CANADIAN SYLLABICS FII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1556"},5463:{"value":"1557","name":"CANADIAN SYLLABICS FO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1557"},5464:{"value":"1558","name":"CANADIAN SYLLABICS FOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1558"},5465:{"value":"1559","name":"CANADIAN SYLLABICS FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1559"},5466:{"value":"155A","name":"CANADIAN SYLLABICS FAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u155A"},5467:{"value":"155B","name":"CANADIAN SYLLABICS FWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u155B"},5468:{"value":"155C","name":"CANADIAN SYLLABICS WEST-CREE FWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u155C"},5469:{"value":"155D","name":"CANADIAN SYLLABICS F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u155D"},5470:{"value":"155E","name":"CANADIAN SYLLABICS THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u155E"},5471:{"value":"155F","name":"CANADIAN SYLLABICS N-CREE THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u155F"},5472:{"value":"1560","name":"CANADIAN SYLLABICS THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1560"},5473:{"value":"1561","name":"CANADIAN SYLLABICS N-CREE THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1561"},5474:{"value":"1562","name":"CANADIAN SYLLABICS THII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1562"},5475:{"value":"1563","name":"CANADIAN SYLLABICS N-CREE THII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1563"},5476:{"value":"1564","name":"CANADIAN SYLLABICS THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1564"},5477:{"value":"1565","name":"CANADIAN SYLLABICS THOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1565"},5478:{"value":"1566","name":"CANADIAN SYLLABICS THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1566"},5479:{"value":"1567","name":"CANADIAN SYLLABICS THAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1567"},5480:{"value":"1568","name":"CANADIAN SYLLABICS THWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1568"},5481:{"value":"1569","name":"CANADIAN SYLLABICS WEST-CREE THWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1569"},5482:{"value":"156A","name":"CANADIAN SYLLABICS TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u156A"},5483:{"value":"156B","name":"CANADIAN SYLLABICS TTHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u156B"},5484:{"value":"156C","name":"CANADIAN SYLLABICS TTHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u156C"},5485:{"value":"156D","name":"CANADIAN SYLLABICS TTHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u156D"},5486:{"value":"156E","name":"CANADIAN SYLLABICS TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u156E"},5487:{"value":"156F","name":"CANADIAN SYLLABICS TTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u156F"},5488:{"value":"1570","name":"CANADIAN SYLLABICS TYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1570"},5489:{"value":"1571","name":"CANADIAN SYLLABICS TYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1571"},5490:{"value":"1572","name":"CANADIAN SYLLABICS TYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1572"},5491:{"value":"1573","name":"CANADIAN SYLLABICS TYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1573"},5492:{"value":"1574","name":"CANADIAN SYLLABICS NUNAVIK HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1574"},5493:{"value":"1575","name":"CANADIAN SYLLABICS NUNAVIK HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1575"},5494:{"value":"1576","name":"CANADIAN SYLLABICS NUNAVIK HII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1576"},5495:{"value":"1577","name":"CANADIAN SYLLABICS NUNAVIK HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1577"},5496:{"value":"1578","name":"CANADIAN SYLLABICS NUNAVIK HOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1578"},5497:{"value":"1579","name":"CANADIAN SYLLABICS NUNAVIK HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1579"},5498:{"value":"157A","name":"CANADIAN SYLLABICS NUNAVIK HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u157A"},5499:{"value":"157B","name":"CANADIAN SYLLABICS NUNAVIK H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u157B"},5500:{"value":"157C","name":"CANADIAN SYLLABICS NUNAVUT H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u157C"},5501:{"value":"157D","name":"CANADIAN SYLLABICS HK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u157D"},5502:{"value":"157E","name":"CANADIAN SYLLABICS QAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u157E"},5503:{"value":"157F","name":"CANADIAN SYLLABICS QI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u157F"},5504:{"value":"1580","name":"CANADIAN SYLLABICS QII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1580"},5505:{"value":"1581","name":"CANADIAN SYLLABICS QO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1581"},5506:{"value":"1582","name":"CANADIAN SYLLABICS QOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1582"},5507:{"value":"1583","name":"CANADIAN SYLLABICS QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1583"},5508:{"value":"1584","name":"CANADIAN SYLLABICS QAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1584"},5509:{"value":"1585","name":"CANADIAN SYLLABICS Q","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1585"},5510:{"value":"1586","name":"CANADIAN SYLLABICS TLHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1586"},5511:{"value":"1587","name":"CANADIAN SYLLABICS TLHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1587"},5512:{"value":"1588","name":"CANADIAN SYLLABICS TLHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1588"},5513:{"value":"1589","name":"CANADIAN SYLLABICS TLHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1589"},5514:{"value":"158A","name":"CANADIAN SYLLABICS WEST-CREE RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u158A"},5515:{"value":"158B","name":"CANADIAN SYLLABICS WEST-CREE RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u158B"},5516:{"value":"158C","name":"CANADIAN SYLLABICS WEST-CREE RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u158C"},5517:{"value":"158D","name":"CANADIAN SYLLABICS WEST-CREE RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u158D"},5518:{"value":"158E","name":"CANADIAN SYLLABICS NGAAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u158E"},5519:{"value":"158F","name":"CANADIAN SYLLABICS NGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u158F"},5520:{"value":"1590","name":"CANADIAN SYLLABICS NGII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1590"},5521:{"value":"1591","name":"CANADIAN SYLLABICS NGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1591"},5522:{"value":"1592","name":"CANADIAN SYLLABICS NGOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1592"},5523:{"value":"1593","name":"CANADIAN SYLLABICS NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1593"},5524:{"value":"1594","name":"CANADIAN SYLLABICS NGAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1594"},5525:{"value":"1595","name":"CANADIAN SYLLABICS NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1595"},5526:{"value":"1596","name":"CANADIAN SYLLABICS NNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1596"},5527:{"value":"1597","name":"CANADIAN SYLLABICS SAYISI SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1597"},5528:{"value":"1598","name":"CANADIAN SYLLABICS SAYISI SHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1598"},5529:{"value":"1599","name":"CANADIAN SYLLABICS SAYISI SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1599"},5530:{"value":"159A","name":"CANADIAN SYLLABICS SAYISI SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u159A"},5531:{"value":"159B","name":"CANADIAN SYLLABICS WOODS-CREE THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u159B"},5532:{"value":"159C","name":"CANADIAN SYLLABICS WOODS-CREE THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u159C"},5533:{"value":"159D","name":"CANADIAN SYLLABICS WOODS-CREE THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u159D"},5534:{"value":"159E","name":"CANADIAN SYLLABICS WOODS-CREE THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u159E"},5535:{"value":"159F","name":"CANADIAN SYLLABICS WOODS-CREE TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u159F"},5536:{"value":"15A0","name":"CANADIAN SYLLABICS LHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A0"},5537:{"value":"15A1","name":"CANADIAN SYLLABICS LHII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A1"},5538:{"value":"15A2","name":"CANADIAN SYLLABICS LHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A2"},5539:{"value":"15A3","name":"CANADIAN SYLLABICS LHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A3"},5540:{"value":"15A4","name":"CANADIAN SYLLABICS LHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A4"},5541:{"value":"15A5","name":"CANADIAN SYLLABICS LHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A5"},5542:{"value":"15A6","name":"CANADIAN SYLLABICS LH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A6"},5543:{"value":"15A7","name":"CANADIAN SYLLABICS TH-CREE THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A7"},5544:{"value":"15A8","name":"CANADIAN SYLLABICS TH-CREE THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A8"},5545:{"value":"15A9","name":"CANADIAN SYLLABICS TH-CREE THII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15A9"},5546:{"value":"15AA","name":"CANADIAN SYLLABICS TH-CREE THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15AA"},5547:{"value":"15AB","name":"CANADIAN SYLLABICS TH-CREE THOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15AB"},5548:{"value":"15AC","name":"CANADIAN SYLLABICS TH-CREE THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15AC"},5549:{"value":"15AD","name":"CANADIAN SYLLABICS TH-CREE THAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15AD"},5550:{"value":"15AE","name":"CANADIAN SYLLABICS TH-CREE TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15AE"},5551:{"value":"15AF","name":"CANADIAN SYLLABICS AIVILIK B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15AF"},5552:{"value":"15B0","name":"CANADIAN SYLLABICS BLACKFOOT E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B0"},5553:{"value":"15B1","name":"CANADIAN SYLLABICS BLACKFOOT I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B1"},5554:{"value":"15B2","name":"CANADIAN SYLLABICS BLACKFOOT O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B2"},5555:{"value":"15B3","name":"CANADIAN SYLLABICS BLACKFOOT A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B3"},5556:{"value":"15B4","name":"CANADIAN SYLLABICS BLACKFOOT WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B4"},5557:{"value":"15B5","name":"CANADIAN SYLLABICS BLACKFOOT WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B5"},5558:{"value":"15B6","name":"CANADIAN SYLLABICS BLACKFOOT WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B6"},5559:{"value":"15B7","name":"CANADIAN SYLLABICS BLACKFOOT WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B7"},5560:{"value":"15B8","name":"CANADIAN SYLLABICS BLACKFOOT NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B8"},5561:{"value":"15B9","name":"CANADIAN SYLLABICS BLACKFOOT NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15B9"},5562:{"value":"15BA","name":"CANADIAN SYLLABICS BLACKFOOT NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15BA"},5563:{"value":"15BB","name":"CANADIAN SYLLABICS BLACKFOOT NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15BB"},5564:{"value":"15BC","name":"CANADIAN SYLLABICS BLACKFOOT KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15BC"},5565:{"value":"15BD","name":"CANADIAN SYLLABICS BLACKFOOT KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15BD"},5566:{"value":"15BE","name":"CANADIAN SYLLABICS BLACKFOOT KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15BE"},5567:{"value":"15BF","name":"CANADIAN SYLLABICS BLACKFOOT KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15BF"},5568:{"value":"15C0","name":"CANADIAN SYLLABICS SAYISI HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C0"},5569:{"value":"15C1","name":"CANADIAN SYLLABICS SAYISI HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C1"},5570:{"value":"15C2","name":"CANADIAN SYLLABICS SAYISI HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C2"},5571:{"value":"15C3","name":"CANADIAN SYLLABICS SAYISI HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C3"},5572:{"value":"15C4","name":"CANADIAN SYLLABICS CARRIER GHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C4"},5573:{"value":"15C5","name":"CANADIAN SYLLABICS CARRIER GHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C5"},5574:{"value":"15C6","name":"CANADIAN SYLLABICS CARRIER GHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C6"},5575:{"value":"15C7","name":"CANADIAN SYLLABICS CARRIER GHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C7"},5576:{"value":"15C8","name":"CANADIAN SYLLABICS CARRIER GHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C8"},5577:{"value":"15C9","name":"CANADIAN SYLLABICS CARRIER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15C9"},5578:{"value":"15CA","name":"CANADIAN SYLLABICS CARRIER RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15CA"},5579:{"value":"15CB","name":"CANADIAN SYLLABICS CARRIER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15CB"},5580:{"value":"15CC","name":"CANADIAN SYLLABICS CARRIER RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15CC"},5581:{"value":"15CD","name":"CANADIAN SYLLABICS CARRIER REE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15CD"},5582:{"value":"15CE","name":"CANADIAN SYLLABICS CARRIER RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15CE"},5583:{"value":"15CF","name":"CANADIAN SYLLABICS CARRIER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15CF"},5584:{"value":"15D0","name":"CANADIAN SYLLABICS CARRIER WU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D0"},5585:{"value":"15D1","name":"CANADIAN SYLLABICS CARRIER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D1"},5586:{"value":"15D2","name":"CANADIAN SYLLABICS CARRIER WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D2"},5587:{"value":"15D3","name":"CANADIAN SYLLABICS CARRIER WEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D3"},5588:{"value":"15D4","name":"CANADIAN SYLLABICS CARRIER WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D4"},5589:{"value":"15D5","name":"CANADIAN SYLLABICS CARRIER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D5"},5590:{"value":"15D6","name":"CANADIAN SYLLABICS CARRIER HWU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D6"},5591:{"value":"15D7","name":"CANADIAN SYLLABICS CARRIER HWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D7"},5592:{"value":"15D8","name":"CANADIAN SYLLABICS CARRIER HWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D8"},5593:{"value":"15D9","name":"CANADIAN SYLLABICS CARRIER HWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15D9"},5594:{"value":"15DA","name":"CANADIAN SYLLABICS CARRIER HWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15DA"},5595:{"value":"15DB","name":"CANADIAN SYLLABICS CARRIER HWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15DB"},5596:{"value":"15DC","name":"CANADIAN SYLLABICS CARRIER THU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15DC"},5597:{"value":"15DD","name":"CANADIAN SYLLABICS CARRIER THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15DD"},5598:{"value":"15DE","name":"CANADIAN SYLLABICS CARRIER THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15DE"},5599:{"value":"15DF","name":"CANADIAN SYLLABICS CARRIER THEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15DF"},5600:{"value":"15E0","name":"CANADIAN SYLLABICS CARRIER THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E0"},5601:{"value":"15E1","name":"CANADIAN SYLLABICS CARRIER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E1"},5602:{"value":"15E2","name":"CANADIAN SYLLABICS CARRIER TTU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E2"},5603:{"value":"15E3","name":"CANADIAN SYLLABICS CARRIER TTO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E3"},5604:{"value":"15E4","name":"CANADIAN SYLLABICS CARRIER TTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E4"},5605:{"value":"15E5","name":"CANADIAN SYLLABICS CARRIER TTEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E5"},5606:{"value":"15E6","name":"CANADIAN SYLLABICS CARRIER TTI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E6"},5607:{"value":"15E7","name":"CANADIAN SYLLABICS CARRIER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E7"},5608:{"value":"15E8","name":"CANADIAN SYLLABICS CARRIER PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E8"},5609:{"value":"15E9","name":"CANADIAN SYLLABICS CARRIER PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15E9"},5610:{"value":"15EA","name":"CANADIAN SYLLABICS CARRIER PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15EA"},5611:{"value":"15EB","name":"CANADIAN SYLLABICS CARRIER PEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15EB"},5612:{"value":"15EC","name":"CANADIAN SYLLABICS CARRIER PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15EC"},5613:{"value":"15ED","name":"CANADIAN SYLLABICS CARRIER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15ED"},5614:{"value":"15EE","name":"CANADIAN SYLLABICS CARRIER P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15EE"},5615:{"value":"15EF","name":"CANADIAN SYLLABICS CARRIER GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15EF"},5616:{"value":"15F0","name":"CANADIAN SYLLABICS CARRIER GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F0"},5617:{"value":"15F1","name":"CANADIAN SYLLABICS CARRIER GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F1"},5618:{"value":"15F2","name":"CANADIAN SYLLABICS CARRIER GEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F2"},5619:{"value":"15F3","name":"CANADIAN SYLLABICS CARRIER GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F3"},5620:{"value":"15F4","name":"CANADIAN SYLLABICS CARRIER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F4"},5621:{"value":"15F5","name":"CANADIAN SYLLABICS CARRIER KHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F5"},5622:{"value":"15F6","name":"CANADIAN SYLLABICS CARRIER KHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F6"},5623:{"value":"15F7","name":"CANADIAN SYLLABICS CARRIER KHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F7"},5624:{"value":"15F8","name":"CANADIAN SYLLABICS CARRIER KHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F8"},5625:{"value":"15F9","name":"CANADIAN SYLLABICS CARRIER KHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15F9"},5626:{"value":"15FA","name":"CANADIAN SYLLABICS CARRIER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15FA"},5627:{"value":"15FB","name":"CANADIAN SYLLABICS CARRIER KKU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15FB"},5628:{"value":"15FC","name":"CANADIAN SYLLABICS CARRIER KKO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15FC"},5629:{"value":"15FD","name":"CANADIAN SYLLABICS CARRIER KKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15FD"},5630:{"value":"15FE","name":"CANADIAN SYLLABICS CARRIER KKEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15FE"},5631:{"value":"15FF","name":"CANADIAN SYLLABICS CARRIER KKI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u15FF"},5632:{"value":"1600","name":"CANADIAN SYLLABICS CARRIER KKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1600"},5633:{"value":"1601","name":"CANADIAN SYLLABICS CARRIER KK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1601"},5634:{"value":"1602","name":"CANADIAN SYLLABICS CARRIER NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1602"},5635:{"value":"1603","name":"CANADIAN SYLLABICS CARRIER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1603"},5636:{"value":"1604","name":"CANADIAN SYLLABICS CARRIER NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1604"},5637:{"value":"1605","name":"CANADIAN SYLLABICS CARRIER NEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1605"},5638:{"value":"1606","name":"CANADIAN SYLLABICS CARRIER NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1606"},5639:{"value":"1607","name":"CANADIAN SYLLABICS CARRIER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1607"},5640:{"value":"1608","name":"CANADIAN SYLLABICS CARRIER MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1608"},5641:{"value":"1609","name":"CANADIAN SYLLABICS CARRIER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1609"},5642:{"value":"160A","name":"CANADIAN SYLLABICS CARRIER ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u160A"},5643:{"value":"160B","name":"CANADIAN SYLLABICS CARRIER MEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u160B"},5644:{"value":"160C","name":"CANADIAN SYLLABICS CARRIER MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u160C"},5645:{"value":"160D","name":"CANADIAN SYLLABICS CARRIER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u160D"},5646:{"value":"160E","name":"CANADIAN SYLLABICS CARRIER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u160E"},5647:{"value":"160F","name":"CANADIAN SYLLABICS CARRIER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u160F"},5648:{"value":"1610","name":"CANADIAN SYLLABICS CARRIER YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1610"},5649:{"value":"1611","name":"CANADIAN SYLLABICS CARRIER YEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1611"},5650:{"value":"1612","name":"CANADIAN SYLLABICS CARRIER YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1612"},5651:{"value":"1613","name":"CANADIAN SYLLABICS CARRIER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1613"},5652:{"value":"1614","name":"CANADIAN SYLLABICS CARRIER JU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1614"},5653:{"value":"1615","name":"CANADIAN SYLLABICS SAYISI JU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1615"},5654:{"value":"1616","name":"CANADIAN SYLLABICS CARRIER JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1616"},5655:{"value":"1617","name":"CANADIAN SYLLABICS CARRIER JE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1617"},5656:{"value":"1618","name":"CANADIAN SYLLABICS CARRIER JEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1618"},5657:{"value":"1619","name":"CANADIAN SYLLABICS CARRIER JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1619"},5658:{"value":"161A","name":"CANADIAN SYLLABICS SAYISI JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u161A"},5659:{"value":"161B","name":"CANADIAN SYLLABICS CARRIER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u161B"},5660:{"value":"161C","name":"CANADIAN SYLLABICS CARRIER JJU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u161C"},5661:{"value":"161D","name":"CANADIAN SYLLABICS CARRIER JJO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u161D"},5662:{"value":"161E","name":"CANADIAN SYLLABICS CARRIER JJE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u161E"},5663:{"value":"161F","name":"CANADIAN SYLLABICS CARRIER JJEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u161F"},5664:{"value":"1620","name":"CANADIAN SYLLABICS CARRIER JJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1620"},5665:{"value":"1621","name":"CANADIAN SYLLABICS CARRIER JJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1621"},5666:{"value":"1622","name":"CANADIAN SYLLABICS CARRIER LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1622"},5667:{"value":"1623","name":"CANADIAN SYLLABICS CARRIER LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1623"},5668:{"value":"1624","name":"CANADIAN SYLLABICS CARRIER LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1624"},5669:{"value":"1625","name":"CANADIAN SYLLABICS CARRIER LEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1625"},5670:{"value":"1626","name":"CANADIAN SYLLABICS CARRIER LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1626"},5671:{"value":"1627","name":"CANADIAN SYLLABICS CARRIER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1627"},5672:{"value":"1628","name":"CANADIAN SYLLABICS CARRIER DLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1628"},5673:{"value":"1629","name":"CANADIAN SYLLABICS CARRIER DLO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1629"},5674:{"value":"162A","name":"CANADIAN SYLLABICS CARRIER DLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u162A"},5675:{"value":"162B","name":"CANADIAN SYLLABICS CARRIER DLEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u162B"},5676:{"value":"162C","name":"CANADIAN SYLLABICS CARRIER DLI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u162C"},5677:{"value":"162D","name":"CANADIAN SYLLABICS CARRIER DLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u162D"},5678:{"value":"162E","name":"CANADIAN SYLLABICS CARRIER LHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u162E"},5679:{"value":"162F","name":"CANADIAN SYLLABICS CARRIER LHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u162F"},5680:{"value":"1630","name":"CANADIAN SYLLABICS CARRIER LHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1630"},5681:{"value":"1631","name":"CANADIAN SYLLABICS CARRIER LHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1631"},5682:{"value":"1632","name":"CANADIAN SYLLABICS CARRIER LHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1632"},5683:{"value":"1633","name":"CANADIAN SYLLABICS CARRIER LHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1633"},5684:{"value":"1634","name":"CANADIAN SYLLABICS CARRIER TLHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1634"},5685:{"value":"1635","name":"CANADIAN SYLLABICS CARRIER TLHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1635"},5686:{"value":"1636","name":"CANADIAN SYLLABICS CARRIER TLHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1636"},5687:{"value":"1637","name":"CANADIAN SYLLABICS CARRIER TLHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1637"},5688:{"value":"1638","name":"CANADIAN SYLLABICS CARRIER TLHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1638"},5689:{"value":"1639","name":"CANADIAN SYLLABICS CARRIER TLHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1639"},5690:{"value":"163A","name":"CANADIAN SYLLABICS CARRIER TLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u163A"},5691:{"value":"163B","name":"CANADIAN SYLLABICS CARRIER TLO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u163B"},5692:{"value":"163C","name":"CANADIAN SYLLABICS CARRIER TLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u163C"},5693:{"value":"163D","name":"CANADIAN SYLLABICS CARRIER TLEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u163D"},5694:{"value":"163E","name":"CANADIAN SYLLABICS CARRIER TLI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u163E"},5695:{"value":"163F","name":"CANADIAN SYLLABICS CARRIER TLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u163F"},5696:{"value":"1640","name":"CANADIAN SYLLABICS CARRIER ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1640"},5697:{"value":"1641","name":"CANADIAN SYLLABICS CARRIER ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1641"},5698:{"value":"1642","name":"CANADIAN SYLLABICS CARRIER ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1642"},5699:{"value":"1643","name":"CANADIAN SYLLABICS CARRIER ZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1643"},5700:{"value":"1644","name":"CANADIAN SYLLABICS CARRIER ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1644"},5701:{"value":"1645","name":"CANADIAN SYLLABICS CARRIER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1645"},5702:{"value":"1646","name":"CANADIAN SYLLABICS CARRIER Z","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1646"},5703:{"value":"1647","name":"CANADIAN SYLLABICS CARRIER INITIAL Z","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1647"},5704:{"value":"1648","name":"CANADIAN SYLLABICS CARRIER DZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1648"},5705:{"value":"1649","name":"CANADIAN SYLLABICS CARRIER DZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1649"},5706:{"value":"164A","name":"CANADIAN SYLLABICS CARRIER DZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u164A"},5707:{"value":"164B","name":"CANADIAN SYLLABICS CARRIER DZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u164B"},5708:{"value":"164C","name":"CANADIAN SYLLABICS CARRIER DZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u164C"},5709:{"value":"164D","name":"CANADIAN SYLLABICS CARRIER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u164D"},5710:{"value":"164E","name":"CANADIAN SYLLABICS CARRIER SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u164E"},5711:{"value":"164F","name":"CANADIAN SYLLABICS CARRIER SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u164F"},5712:{"value":"1650","name":"CANADIAN SYLLABICS CARRIER SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1650"},5713:{"value":"1651","name":"CANADIAN SYLLABICS CARRIER SEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1651"},5714:{"value":"1652","name":"CANADIAN SYLLABICS CARRIER SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1652"},5715:{"value":"1653","name":"CANADIAN SYLLABICS CARRIER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1653"},5716:{"value":"1654","name":"CANADIAN SYLLABICS CARRIER SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1654"},5717:{"value":"1655","name":"CANADIAN SYLLABICS CARRIER SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1655"},5718:{"value":"1656","name":"CANADIAN SYLLABICS CARRIER SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1656"},5719:{"value":"1657","name":"CANADIAN SYLLABICS CARRIER SHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1657"},5720:{"value":"1658","name":"CANADIAN SYLLABICS CARRIER SHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1658"},5721:{"value":"1659","name":"CANADIAN SYLLABICS CARRIER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1659"},5722:{"value":"165A","name":"CANADIAN SYLLABICS CARRIER SH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u165A"},5723:{"value":"165B","name":"CANADIAN SYLLABICS CARRIER TSU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u165B"},5724:{"value":"165C","name":"CANADIAN SYLLABICS CARRIER TSO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u165C"},5725:{"value":"165D","name":"CANADIAN SYLLABICS CARRIER TSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u165D"},5726:{"value":"165E","name":"CANADIAN SYLLABICS CARRIER TSEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u165E"},5727:{"value":"165F","name":"CANADIAN SYLLABICS CARRIER TSI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u165F"},5728:{"value":"1660","name":"CANADIAN SYLLABICS CARRIER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1660"},5729:{"value":"1661","name":"CANADIAN SYLLABICS CARRIER CHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1661"},5730:{"value":"1662","name":"CANADIAN SYLLABICS CARRIER CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1662"},5731:{"value":"1663","name":"CANADIAN SYLLABICS CARRIER CHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1663"},5732:{"value":"1664","name":"CANADIAN SYLLABICS CARRIER CHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1664"},5733:{"value":"1665","name":"CANADIAN SYLLABICS CARRIER CHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1665"},5734:{"value":"1666","name":"CANADIAN SYLLABICS CARRIER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1666"},5735:{"value":"1667","name":"CANADIAN SYLLABICS CARRIER TTSU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1667"},5736:{"value":"1668","name":"CANADIAN SYLLABICS CARRIER TTSO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1668"},5737:{"value":"1669","name":"CANADIAN SYLLABICS CARRIER TTSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1669"},5738:{"value":"166A","name":"CANADIAN SYLLABICS CARRIER TTSEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u166A"},5739:{"value":"166B","name":"CANADIAN SYLLABICS CARRIER TTSI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u166B"},5740:{"value":"166C","name":"CANADIAN SYLLABICS CARRIER TTSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u166C"},5743:{"value":"166F","name":"CANADIAN SYLLABICS QAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u166F"},5744:{"value":"1670","name":"CANADIAN SYLLABICS NGAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1670"},5745:{"value":"1671","name":"CANADIAN SYLLABICS NNGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1671"},5746:{"value":"1672","name":"CANADIAN SYLLABICS NNGII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1672"},5747:{"value":"1673","name":"CANADIAN SYLLABICS NNGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1673"},5748:{"value":"1674","name":"CANADIAN SYLLABICS NNGOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1674"},5749:{"value":"1675","name":"CANADIAN SYLLABICS NNGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1675"},5750:{"value":"1676","name":"CANADIAN SYLLABICS NNGAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1676"},5751:{"value":"1677","name":"CANADIAN SYLLABICS WOODS-CREE THWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1677"},5752:{"value":"1678","name":"CANADIAN SYLLABICS WOODS-CREE THWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1678"},5753:{"value":"1679","name":"CANADIAN SYLLABICS WOODS-CREE THWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1679"},5754:{"value":"167A","name":"CANADIAN SYLLABICS WOODS-CREE THWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u167A"},5755:{"value":"167B","name":"CANADIAN SYLLABICS WOODS-CREE THWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u167B"},5756:{"value":"167C","name":"CANADIAN SYLLABICS WOODS-CREE THWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u167C"},5757:{"value":"167D","name":"CANADIAN SYLLABICS WOODS-CREE THWAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u167D"},5758:{"value":"167E","name":"CANADIAN SYLLABICS WOODS-CREE FINAL TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u167E"},5759:{"value":"167F","name":"CANADIAN SYLLABICS BLACKFOOT W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u167F"},5761:{"value":"1681","name":"OGHAM LETTER BEITH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1681"},5762:{"value":"1682","name":"OGHAM LETTER LUIS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1682"},5763:{"value":"1683","name":"OGHAM LETTER FEARN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1683"},5764:{"value":"1684","name":"OGHAM LETTER SAIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1684"},5765:{"value":"1685","name":"OGHAM LETTER NION","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1685"},5766:{"value":"1686","name":"OGHAM LETTER UATH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1686"},5767:{"value":"1687","name":"OGHAM LETTER DAIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1687"},5768:{"value":"1688","name":"OGHAM LETTER TINNE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1688"},5769:{"value":"1689","name":"OGHAM LETTER COLL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1689"},5770:{"value":"168A","name":"OGHAM LETTER CEIRT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u168A"},5771:{"value":"168B","name":"OGHAM LETTER MUIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u168B"},5772:{"value":"168C","name":"OGHAM LETTER GORT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u168C"},5773:{"value":"168D","name":"OGHAM LETTER NGEADAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u168D"},5774:{"value":"168E","name":"OGHAM LETTER STRAIF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u168E"},5775:{"value":"168F","name":"OGHAM LETTER RUIS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u168F"},5776:{"value":"1690","name":"OGHAM LETTER AILM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1690"},5777:{"value":"1691","name":"OGHAM LETTER ONN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1691"},5778:{"value":"1692","name":"OGHAM LETTER UR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1692"},5779:{"value":"1693","name":"OGHAM LETTER EADHADH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1693"},5780:{"value":"1694","name":"OGHAM LETTER IODHADH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1694"},5781:{"value":"1695","name":"OGHAM LETTER EABHADH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1695"},5782:{"value":"1696","name":"OGHAM LETTER OR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1696"},5783:{"value":"1697","name":"OGHAM LETTER UILLEANN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1697"},5784:{"value":"1698","name":"OGHAM LETTER IFIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1698"},5785:{"value":"1699","name":"OGHAM LETTER EAMHANCHOLL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1699"},5786:{"value":"169A","name":"OGHAM LETTER PEITH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u169A"},5792:{"value":"16A0","name":"RUNIC LETTER FEHU FEOH FE F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A0"},5793:{"value":"16A1","name":"RUNIC LETTER V","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A1"},5794:{"value":"16A2","name":"RUNIC LETTER URUZ UR U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A2"},5795:{"value":"16A3","name":"RUNIC LETTER YR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A3"},5796:{"value":"16A4","name":"RUNIC LETTER Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A4"},5797:{"value":"16A5","name":"RUNIC LETTER W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A5"},5798:{"value":"16A6","name":"RUNIC LETTER THURISAZ THURS THORN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A6"},5799:{"value":"16A7","name":"RUNIC LETTER ETH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A7"},5800:{"value":"16A8","name":"RUNIC LETTER ANSUZ A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A8"},5801:{"value":"16A9","name":"RUNIC LETTER OS O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16A9"},5802:{"value":"16AA","name":"RUNIC LETTER AC A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16AA"},5803:{"value":"16AB","name":"RUNIC LETTER AESC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16AB"},5804:{"value":"16AC","name":"RUNIC LETTER LONG-BRANCH-OSS O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16AC"},5805:{"value":"16AD","name":"RUNIC LETTER SHORT-TWIG-OSS O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16AD"},5806:{"value":"16AE","name":"RUNIC LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16AE"},5807:{"value":"16AF","name":"RUNIC LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16AF"},5808:{"value":"16B0","name":"RUNIC LETTER ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B0"},5809:{"value":"16B1","name":"RUNIC LETTER RAIDO RAD REID R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B1"},5810:{"value":"16B2","name":"RUNIC LETTER KAUNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B2"},5811:{"value":"16B3","name":"RUNIC LETTER CEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B3"},5812:{"value":"16B4","name":"RUNIC LETTER KAUN K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B4"},5813:{"value":"16B5","name":"RUNIC LETTER G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B5"},5814:{"value":"16B6","name":"RUNIC LETTER ENG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B6"},5815:{"value":"16B7","name":"RUNIC LETTER GEBO GYFU G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B7"},5816:{"value":"16B8","name":"RUNIC LETTER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B8"},5817:{"value":"16B9","name":"RUNIC LETTER WUNJO WYNN W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16B9"},5818:{"value":"16BA","name":"RUNIC LETTER HAGLAZ H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16BA"},5819:{"value":"16BB","name":"RUNIC LETTER HAEGL H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16BB"},5820:{"value":"16BC","name":"RUNIC LETTER LONG-BRANCH-HAGALL H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16BC"},5821:{"value":"16BD","name":"RUNIC LETTER SHORT-TWIG-HAGALL H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16BD"},5822:{"value":"16BE","name":"RUNIC LETTER NAUDIZ NYD NAUD N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16BE"},5823:{"value":"16BF","name":"RUNIC LETTER SHORT-TWIG-NAUD N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16BF"},5824:{"value":"16C0","name":"RUNIC LETTER DOTTED-N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C0"},5825:{"value":"16C1","name":"RUNIC LETTER ISAZ IS ISS I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C1"},5826:{"value":"16C2","name":"RUNIC LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C2"},5827:{"value":"16C3","name":"RUNIC LETTER JERAN J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C3"},5828:{"value":"16C4","name":"RUNIC LETTER GER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C4"},5829:{"value":"16C5","name":"RUNIC LETTER LONG-BRANCH-AR AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C5"},5830:{"value":"16C6","name":"RUNIC LETTER SHORT-TWIG-AR A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C6"},5831:{"value":"16C7","name":"RUNIC LETTER IWAZ EOH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C7"},5832:{"value":"16C8","name":"RUNIC LETTER PERTHO PEORTH P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C8"},5833:{"value":"16C9","name":"RUNIC LETTER ALGIZ EOLHX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16C9"},5834:{"value":"16CA","name":"RUNIC LETTER SOWILO S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16CA"},5835:{"value":"16CB","name":"RUNIC LETTER SIGEL LONG-BRANCH-SOL S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16CB"},5836:{"value":"16CC","name":"RUNIC LETTER SHORT-TWIG-SOL S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16CC"},5837:{"value":"16CD","name":"RUNIC LETTER C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16CD"},5838:{"value":"16CE","name":"RUNIC LETTER Z","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16CE"},5839:{"value":"16CF","name":"RUNIC LETTER TIWAZ TIR TYR T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16CF"},5840:{"value":"16D0","name":"RUNIC LETTER SHORT-TWIG-TYR T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D0"},5841:{"value":"16D1","name":"RUNIC LETTER D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D1"},5842:{"value":"16D2","name":"RUNIC LETTER BERKANAN BEORC BJARKAN B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D2"},5843:{"value":"16D3","name":"RUNIC LETTER SHORT-TWIG-BJARKAN B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D3"},5844:{"value":"16D4","name":"RUNIC LETTER DOTTED-P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D4"},5845:{"value":"16D5","name":"RUNIC LETTER OPEN-P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D5"},5846:{"value":"16D6","name":"RUNIC LETTER EHWAZ EH E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D6"},5847:{"value":"16D7","name":"RUNIC LETTER MANNAZ MAN M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D7"},5848:{"value":"16D8","name":"RUNIC LETTER LONG-BRANCH-MADR M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D8"},5849:{"value":"16D9","name":"RUNIC LETTER SHORT-TWIG-MADR M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16D9"},5850:{"value":"16DA","name":"RUNIC LETTER LAUKAZ LAGU LOGR L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16DA"},5851:{"value":"16DB","name":"RUNIC LETTER DOTTED-L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16DB"},5852:{"value":"16DC","name":"RUNIC LETTER INGWAZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16DC"},5853:{"value":"16DD","name":"RUNIC LETTER ING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16DD"},5854:{"value":"16DE","name":"RUNIC LETTER DAGAZ DAEG D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16DE"},5855:{"value":"16DF","name":"RUNIC LETTER OTHALAN ETHEL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16DF"},5856:{"value":"16E0","name":"RUNIC LETTER EAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E0"},5857:{"value":"16E1","name":"RUNIC LETTER IOR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E1"},5858:{"value":"16E2","name":"RUNIC LETTER CWEORTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E2"},5859:{"value":"16E3","name":"RUNIC LETTER CALC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E3"},5860:{"value":"16E4","name":"RUNIC LETTER CEALC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E4"},5861:{"value":"16E5","name":"RUNIC LETTER STAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E5"},5862:{"value":"16E6","name":"RUNIC LETTER LONG-BRANCH-YR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E6"},5863:{"value":"16E7","name":"RUNIC LETTER SHORT-TWIG-YR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E7"},5864:{"value":"16E8","name":"RUNIC LETTER ICELANDIC-YR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E8"},5865:{"value":"16E9","name":"RUNIC LETTER Q","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16E9"},5866:{"value":"16EA","name":"RUNIC LETTER X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16EA"},5873:{"value":"16F1","name":"RUNIC LETTER K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F1"},5874:{"value":"16F2","name":"RUNIC LETTER SH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F2"},5875:{"value":"16F3","name":"RUNIC LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F3"},5876:{"value":"16F4","name":"RUNIC LETTER FRANKS CASKET OS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F4"},5877:{"value":"16F5","name":"RUNIC LETTER FRANKS CASKET IS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F5"},5878:{"value":"16F6","name":"RUNIC LETTER FRANKS CASKET EH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F6"},5879:{"value":"16F7","name":"RUNIC LETTER FRANKS CASKET AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F7"},5880:{"value":"16F8","name":"RUNIC LETTER FRANKS CASKET AESC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F8"},5888:{"value":"1700","name":"TAGALOG LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1700"},5889:{"value":"1701","name":"TAGALOG LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1701"},5890:{"value":"1702","name":"TAGALOG LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1702"},5891:{"value":"1703","name":"TAGALOG LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1703"},5892:{"value":"1704","name":"TAGALOG LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1704"},5893:{"value":"1705","name":"TAGALOG LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1705"},5894:{"value":"1706","name":"TAGALOG LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1706"},5895:{"value":"1707","name":"TAGALOG LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1707"},5896:{"value":"1708","name":"TAGALOG LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1708"},5897:{"value":"1709","name":"TAGALOG LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1709"},5898:{"value":"170A","name":"TAGALOG LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u170A"},5899:{"value":"170B","name":"TAGALOG LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u170B"},5900:{"value":"170C","name":"TAGALOG LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u170C"},5901:{"value":"170D","name":"TAGALOG LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u170D"},5902:{"value":"170E","name":"TAGALOG LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u170E"},5903:{"value":"170F","name":"TAGALOG LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u170F"},5904:{"value":"1710","name":"TAGALOG LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1710"},5905:{"value":"1711","name":"TAGALOG LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1711"},5919:{"value":"171F","name":"TAGALOG LETTER ARCHAIC RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u171F"},5920:{"value":"1720","name":"HANUNOO LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1720"},5921:{"value":"1721","name":"HANUNOO LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1721"},5922:{"value":"1722","name":"HANUNOO LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1722"},5923:{"value":"1723","name":"HANUNOO LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1723"},5924:{"value":"1724","name":"HANUNOO LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1724"},5925:{"value":"1725","name":"HANUNOO LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1725"},5926:{"value":"1726","name":"HANUNOO LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1726"},5927:{"value":"1727","name":"HANUNOO LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1727"},5928:{"value":"1728","name":"HANUNOO LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1728"},5929:{"value":"1729","name":"HANUNOO LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1729"},5930:{"value":"172A","name":"HANUNOO LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u172A"},5931:{"value":"172B","name":"HANUNOO LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u172B"},5932:{"value":"172C","name":"HANUNOO LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u172C"},5933:{"value":"172D","name":"HANUNOO LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u172D"},5934:{"value":"172E","name":"HANUNOO LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u172E"},5935:{"value":"172F","name":"HANUNOO LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u172F"},5936:{"value":"1730","name":"HANUNOO LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1730"},5937:{"value":"1731","name":"HANUNOO LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1731"},5952:{"value":"1740","name":"BUHID LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1740"},5953:{"value":"1741","name":"BUHID LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1741"},5954:{"value":"1742","name":"BUHID LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1742"},5955:{"value":"1743","name":"BUHID LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1743"},5956:{"value":"1744","name":"BUHID LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1744"},5957:{"value":"1745","name":"BUHID LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1745"},5958:{"value":"1746","name":"BUHID LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1746"},5959:{"value":"1747","name":"BUHID LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1747"},5960:{"value":"1748","name":"BUHID LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1748"},5961:{"value":"1749","name":"BUHID LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1749"},5962:{"value":"174A","name":"BUHID LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u174A"},5963:{"value":"174B","name":"BUHID LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u174B"},5964:{"value":"174C","name":"BUHID LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u174C"},5965:{"value":"174D","name":"BUHID LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u174D"},5966:{"value":"174E","name":"BUHID LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u174E"},5967:{"value":"174F","name":"BUHID LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u174F"},5968:{"value":"1750","name":"BUHID LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1750"},5969:{"value":"1751","name":"BUHID LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1751"},5984:{"value":"1760","name":"TAGBANWA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1760"},5985:{"value":"1761","name":"TAGBANWA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1761"},5986:{"value":"1762","name":"TAGBANWA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1762"},5987:{"value":"1763","name":"TAGBANWA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1763"},5988:{"value":"1764","name":"TAGBANWA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1764"},5989:{"value":"1765","name":"TAGBANWA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1765"},5990:{"value":"1766","name":"TAGBANWA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1766"},5991:{"value":"1767","name":"TAGBANWA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1767"},5992:{"value":"1768","name":"TAGBANWA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1768"},5993:{"value":"1769","name":"TAGBANWA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1769"},5994:{"value":"176A","name":"TAGBANWA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u176A"},5995:{"value":"176B","name":"TAGBANWA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u176B"},5996:{"value":"176C","name":"TAGBANWA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u176C"},5998:{"value":"176E","name":"TAGBANWA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u176E"},5999:{"value":"176F","name":"TAGBANWA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u176F"},6000:{"value":"1770","name":"TAGBANWA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1770"},6016:{"value":"1780","name":"KHMER LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1780"},6017:{"value":"1781","name":"KHMER LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1781"},6018:{"value":"1782","name":"KHMER LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1782"},6019:{"value":"1783","name":"KHMER LETTER KHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1783"},6020:{"value":"1784","name":"KHMER LETTER NGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1784"},6021:{"value":"1785","name":"KHMER LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1785"},6022:{"value":"1786","name":"KHMER LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1786"},6023:{"value":"1787","name":"KHMER LETTER CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1787"},6024:{"value":"1788","name":"KHMER LETTER CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1788"},6025:{"value":"1789","name":"KHMER LETTER NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1789"},6026:{"value":"178A","name":"KHMER LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u178A"},6027:{"value":"178B","name":"KHMER LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u178B"},6028:{"value":"178C","name":"KHMER LETTER DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u178C"},6029:{"value":"178D","name":"KHMER LETTER TTHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u178D"},6030:{"value":"178E","name":"KHMER LETTER NNO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u178E"},6031:{"value":"178F","name":"KHMER LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u178F"},6032:{"value":"1790","name":"KHMER LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1790"},6033:{"value":"1791","name":"KHMER LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1791"},6034:{"value":"1792","name":"KHMER LETTER THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1792"},6035:{"value":"1793","name":"KHMER LETTER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1793"},6036:{"value":"1794","name":"KHMER LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1794"},6037:{"value":"1795","name":"KHMER LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1795"},6038:{"value":"1796","name":"KHMER LETTER PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1796"},6039:{"value":"1797","name":"KHMER LETTER PHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1797"},6040:{"value":"1798","name":"KHMER LETTER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1798"},6041:{"value":"1799","name":"KHMER LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1799"},6042:{"value":"179A","name":"KHMER LETTER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u179A"},6043:{"value":"179B","name":"KHMER LETTER LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u179B"},6044:{"value":"179C","name":"KHMER LETTER VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u179C"},6045:{"value":"179D","name":"KHMER LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u179D"},6046:{"value":"179E","name":"KHMER LETTER SSO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u179E"},6047:{"value":"179F","name":"KHMER LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u179F"},6048:{"value":"17A0","name":"KHMER LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A0"},6049:{"value":"17A1","name":"KHMER LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A1"},6050:{"value":"17A2","name":"KHMER LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A2"},6051:{"value":"17A3","name":"KHMER INDEPENDENT VOWEL QAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A3"},6052:{"value":"17A4","name":"KHMER INDEPENDENT VOWEL QAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A4"},6053:{"value":"17A5","name":"KHMER INDEPENDENT VOWEL QI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A5"},6054:{"value":"17A6","name":"KHMER INDEPENDENT VOWEL QII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A6"},6055:{"value":"17A7","name":"KHMER INDEPENDENT VOWEL QU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A7"},6056:{"value":"17A8","name":"KHMER INDEPENDENT VOWEL QUK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A8"},6057:{"value":"17A9","name":"KHMER INDEPENDENT VOWEL QUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17A9"},6058:{"value":"17AA","name":"KHMER INDEPENDENT VOWEL QUUV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17AA"},6059:{"value":"17AB","name":"KHMER INDEPENDENT VOWEL RY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17AB"},6060:{"value":"17AC","name":"KHMER INDEPENDENT VOWEL RYY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17AC"},6061:{"value":"17AD","name":"KHMER INDEPENDENT VOWEL LY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17AD"},6062:{"value":"17AE","name":"KHMER INDEPENDENT VOWEL LYY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17AE"},6063:{"value":"17AF","name":"KHMER INDEPENDENT VOWEL QE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17AF"},6064:{"value":"17B0","name":"KHMER INDEPENDENT VOWEL QAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B0"},6065:{"value":"17B1","name":"KHMER INDEPENDENT VOWEL QOO TYPE ONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B1"},6066:{"value":"17B2","name":"KHMER INDEPENDENT VOWEL QOO TYPE TWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B2"},6067:{"value":"17B3","name":"KHMER INDEPENDENT VOWEL QAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B3"},6108:{"value":"17DC","name":"KHMER SIGN AVAKRAHASANYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17DC"},6176:{"value":"1820","name":"MONGOLIAN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1820"},6177:{"value":"1821","name":"MONGOLIAN LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1821"},6178:{"value":"1822","name":"MONGOLIAN LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1822"},6179:{"value":"1823","name":"MONGOLIAN LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1823"},6180:{"value":"1824","name":"MONGOLIAN LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1824"},6181:{"value":"1825","name":"MONGOLIAN LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1825"},6182:{"value":"1826","name":"MONGOLIAN LETTER UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1826"},6183:{"value":"1827","name":"MONGOLIAN LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1827"},6184:{"value":"1828","name":"MONGOLIAN LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1828"},6185:{"value":"1829","name":"MONGOLIAN LETTER ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1829"},6186:{"value":"182A","name":"MONGOLIAN LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u182A"},6187:{"value":"182B","name":"MONGOLIAN LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u182B"},6188:{"value":"182C","name":"MONGOLIAN LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u182C"},6189:{"value":"182D","name":"MONGOLIAN LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u182D"},6190:{"value":"182E","name":"MONGOLIAN LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u182E"},6191:{"value":"182F","name":"MONGOLIAN LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u182F"},6192:{"value":"1830","name":"MONGOLIAN LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1830"},6193:{"value":"1831","name":"MONGOLIAN LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1831"},6194:{"value":"1832","name":"MONGOLIAN LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1832"},6195:{"value":"1833","name":"MONGOLIAN LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1833"},6196:{"value":"1834","name":"MONGOLIAN LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1834"},6197:{"value":"1835","name":"MONGOLIAN LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1835"},6198:{"value":"1836","name":"MONGOLIAN LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1836"},6199:{"value":"1837","name":"MONGOLIAN LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1837"},6200:{"value":"1838","name":"MONGOLIAN LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1838"},6201:{"value":"1839","name":"MONGOLIAN LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1839"},6202:{"value":"183A","name":"MONGOLIAN LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u183A"},6203:{"value":"183B","name":"MONGOLIAN LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u183B"},6204:{"value":"183C","name":"MONGOLIAN LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u183C"},6205:{"value":"183D","name":"MONGOLIAN LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u183D"},6206:{"value":"183E","name":"MONGOLIAN LETTER HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u183E"},6207:{"value":"183F","name":"MONGOLIAN LETTER ZRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u183F"},6208:{"value":"1840","name":"MONGOLIAN LETTER LHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1840"},6209:{"value":"1841","name":"MONGOLIAN LETTER ZHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1841"},6210:{"value":"1842","name":"MONGOLIAN LETTER CHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1842"},6212:{"value":"1844","name":"MONGOLIAN LETTER TODO E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1844"},6213:{"value":"1845","name":"MONGOLIAN LETTER TODO I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1845"},6214:{"value":"1846","name":"MONGOLIAN LETTER TODO O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1846"},6215:{"value":"1847","name":"MONGOLIAN LETTER TODO U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1847"},6216:{"value":"1848","name":"MONGOLIAN LETTER TODO OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1848"},6217:{"value":"1849","name":"MONGOLIAN LETTER TODO UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1849"},6218:{"value":"184A","name":"MONGOLIAN LETTER TODO ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u184A"},6219:{"value":"184B","name":"MONGOLIAN LETTER TODO BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u184B"},6220:{"value":"184C","name":"MONGOLIAN LETTER TODO PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u184C"},6221:{"value":"184D","name":"MONGOLIAN LETTER TODO QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u184D"},6222:{"value":"184E","name":"MONGOLIAN LETTER TODO GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u184E"},6223:{"value":"184F","name":"MONGOLIAN LETTER TODO MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u184F"},6224:{"value":"1850","name":"MONGOLIAN LETTER TODO TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1850"},6225:{"value":"1851","name":"MONGOLIAN LETTER TODO DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1851"},6226:{"value":"1852","name":"MONGOLIAN LETTER TODO CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1852"},6227:{"value":"1853","name":"MONGOLIAN LETTER TODO JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1853"},6228:{"value":"1854","name":"MONGOLIAN LETTER TODO TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1854"},6229:{"value":"1855","name":"MONGOLIAN LETTER TODO YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1855"},6230:{"value":"1856","name":"MONGOLIAN LETTER TODO WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1856"},6231:{"value":"1857","name":"MONGOLIAN LETTER TODO KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1857"},6232:{"value":"1858","name":"MONGOLIAN LETTER TODO GAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1858"},6233:{"value":"1859","name":"MONGOLIAN LETTER TODO HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1859"},6234:{"value":"185A","name":"MONGOLIAN LETTER TODO JIA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u185A"},6235:{"value":"185B","name":"MONGOLIAN LETTER TODO NIA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u185B"},6236:{"value":"185C","name":"MONGOLIAN LETTER TODO DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u185C"},6237:{"value":"185D","name":"MONGOLIAN LETTER SIBE E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u185D"},6238:{"value":"185E","name":"MONGOLIAN LETTER SIBE I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u185E"},6239:{"value":"185F","name":"MONGOLIAN LETTER SIBE IY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u185F"},6240:{"value":"1860","name":"MONGOLIAN LETTER SIBE UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1860"},6241:{"value":"1861","name":"MONGOLIAN LETTER SIBE U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1861"},6242:{"value":"1862","name":"MONGOLIAN LETTER SIBE ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1862"},6243:{"value":"1863","name":"MONGOLIAN LETTER SIBE KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1863"},6244:{"value":"1864","name":"MONGOLIAN LETTER SIBE GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1864"},6245:{"value":"1865","name":"MONGOLIAN LETTER SIBE HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1865"},6246:{"value":"1866","name":"MONGOLIAN LETTER SIBE PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1866"},6247:{"value":"1867","name":"MONGOLIAN LETTER SIBE SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1867"},6248:{"value":"1868","name":"MONGOLIAN LETTER SIBE TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1868"},6249:{"value":"1869","name":"MONGOLIAN LETTER SIBE DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1869"},6250:{"value":"186A","name":"MONGOLIAN LETTER SIBE JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u186A"},6251:{"value":"186B","name":"MONGOLIAN LETTER SIBE FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u186B"},6252:{"value":"186C","name":"MONGOLIAN LETTER SIBE GAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u186C"},6253:{"value":"186D","name":"MONGOLIAN LETTER SIBE HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u186D"},6254:{"value":"186E","name":"MONGOLIAN LETTER SIBE TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u186E"},6255:{"value":"186F","name":"MONGOLIAN LETTER SIBE ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u186F"},6256:{"value":"1870","name":"MONGOLIAN LETTER SIBE RAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1870"},6257:{"value":"1871","name":"MONGOLIAN LETTER SIBE CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1871"},6258:{"value":"1872","name":"MONGOLIAN LETTER SIBE ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1872"},6259:{"value":"1873","name":"MONGOLIAN LETTER MANCHU I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1873"},6260:{"value":"1874","name":"MONGOLIAN LETTER MANCHU KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1874"},6261:{"value":"1875","name":"MONGOLIAN LETTER MANCHU RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1875"},6262:{"value":"1876","name":"MONGOLIAN LETTER MANCHU FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1876"},6263:{"value":"1877","name":"MONGOLIAN LETTER MANCHU ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1877"},6264:{"value":"1878","name":"MONGOLIAN LETTER CHA WITH TWO DOTS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1878"},6272:{"value":"1880","name":"MONGOLIAN LETTER ALI GALI ANUSVARA ONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1880"},6273:{"value":"1881","name":"MONGOLIAN LETTER ALI GALI VISARGA ONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1881"},6274:{"value":"1882","name":"MONGOLIAN LETTER ALI GALI DAMARU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1882"},6275:{"value":"1883","name":"MONGOLIAN LETTER ALI GALI UBADAMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1883"},6276:{"value":"1884","name":"MONGOLIAN LETTER ALI GALI INVERTED UBADAMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1884"},6279:{"value":"1887","name":"MONGOLIAN LETTER ALI GALI A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1887"},6280:{"value":"1888","name":"MONGOLIAN LETTER ALI GALI I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1888"},6281:{"value":"1889","name":"MONGOLIAN LETTER ALI GALI KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1889"},6282:{"value":"188A","name":"MONGOLIAN LETTER ALI GALI NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u188A"},6283:{"value":"188B","name":"MONGOLIAN LETTER ALI GALI CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u188B"},6284:{"value":"188C","name":"MONGOLIAN LETTER ALI GALI TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u188C"},6285:{"value":"188D","name":"MONGOLIAN LETTER ALI GALI TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u188D"},6286:{"value":"188E","name":"MONGOLIAN LETTER ALI GALI DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u188E"},6287:{"value":"188F","name":"MONGOLIAN LETTER ALI GALI NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u188F"},6288:{"value":"1890","name":"MONGOLIAN LETTER ALI GALI TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1890"},6289:{"value":"1891","name":"MONGOLIAN LETTER ALI GALI DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1891"},6290:{"value":"1892","name":"MONGOLIAN LETTER ALI GALI PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1892"},6291:{"value":"1893","name":"MONGOLIAN LETTER ALI GALI PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1893"},6292:{"value":"1894","name":"MONGOLIAN LETTER ALI GALI SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1894"},6293:{"value":"1895","name":"MONGOLIAN LETTER ALI GALI ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1895"},6294:{"value":"1896","name":"MONGOLIAN LETTER ALI GALI ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1896"},6295:{"value":"1897","name":"MONGOLIAN LETTER ALI GALI AH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1897"},6296:{"value":"1898","name":"MONGOLIAN LETTER TODO ALI GALI TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1898"},6297:{"value":"1899","name":"MONGOLIAN LETTER TODO ALI GALI ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1899"},6298:{"value":"189A","name":"MONGOLIAN LETTER MANCHU ALI GALI GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u189A"},6299:{"value":"189B","name":"MONGOLIAN LETTER MANCHU ALI GALI NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u189B"},6300:{"value":"189C","name":"MONGOLIAN LETTER MANCHU ALI GALI CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u189C"},6301:{"value":"189D","name":"MONGOLIAN LETTER MANCHU ALI GALI JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u189D"},6302:{"value":"189E","name":"MONGOLIAN LETTER MANCHU ALI GALI TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u189E"},6303:{"value":"189F","name":"MONGOLIAN LETTER MANCHU ALI GALI DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u189F"},6304:{"value":"18A0","name":"MONGOLIAN LETTER MANCHU ALI GALI TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A0"},6305:{"value":"18A1","name":"MONGOLIAN LETTER MANCHU ALI GALI DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A1"},6306:{"value":"18A2","name":"MONGOLIAN LETTER MANCHU ALI GALI SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A2"},6307:{"value":"18A3","name":"MONGOLIAN LETTER MANCHU ALI GALI CYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A3"},6308:{"value":"18A4","name":"MONGOLIAN LETTER MANCHU ALI GALI ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A4"},6309:{"value":"18A5","name":"MONGOLIAN LETTER MANCHU ALI GALI ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A5"},6310:{"value":"18A6","name":"MONGOLIAN LETTER ALI GALI HALF U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A6"},6311:{"value":"18A7","name":"MONGOLIAN LETTER ALI GALI HALF YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A7"},6312:{"value":"18A8","name":"MONGOLIAN LETTER MANCHU ALI GALI BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A8"},6314:{"value":"18AA","name":"MONGOLIAN LETTER MANCHU ALI GALI LHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18AA"},6320:{"value":"18B0","name":"CANADIAN SYLLABICS OY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B0"},6321:{"value":"18B1","name":"CANADIAN SYLLABICS AY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B1"},6322:{"value":"18B2","name":"CANADIAN SYLLABICS AAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B2"},6323:{"value":"18B3","name":"CANADIAN SYLLABICS WAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B3"},6324:{"value":"18B4","name":"CANADIAN SYLLABICS POY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B4"},6325:{"value":"18B5","name":"CANADIAN SYLLABICS PAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B5"},6326:{"value":"18B6","name":"CANADIAN SYLLABICS PWOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B6"},6327:{"value":"18B7","name":"CANADIAN SYLLABICS TAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B7"},6328:{"value":"18B8","name":"CANADIAN SYLLABICS KAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B8"},6329:{"value":"18B9","name":"CANADIAN SYLLABICS KWAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18B9"},6330:{"value":"18BA","name":"CANADIAN SYLLABICS MAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18BA"},6331:{"value":"18BB","name":"CANADIAN SYLLABICS NOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18BB"},6332:{"value":"18BC","name":"CANADIAN SYLLABICS NAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18BC"},6333:{"value":"18BD","name":"CANADIAN SYLLABICS LAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18BD"},6334:{"value":"18BE","name":"CANADIAN SYLLABICS SOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18BE"},6335:{"value":"18BF","name":"CANADIAN SYLLABICS SAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18BF"},6336:{"value":"18C0","name":"CANADIAN SYLLABICS SHOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C0"},6337:{"value":"18C1","name":"CANADIAN SYLLABICS SHAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C1"},6338:{"value":"18C2","name":"CANADIAN SYLLABICS SHWOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C2"},6339:{"value":"18C3","name":"CANADIAN SYLLABICS YOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C3"},6340:{"value":"18C4","name":"CANADIAN SYLLABICS YAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C4"},6341:{"value":"18C5","name":"CANADIAN SYLLABICS RAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C5"},6342:{"value":"18C6","name":"CANADIAN SYLLABICS NWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C6"},6343:{"value":"18C7","name":"CANADIAN SYLLABICS OJIBWAY NWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C7"},6344:{"value":"18C8","name":"CANADIAN SYLLABICS NWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C8"},6345:{"value":"18C9","name":"CANADIAN SYLLABICS OJIBWAY NWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18C9"},6346:{"value":"18CA","name":"CANADIAN SYLLABICS NWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18CA"},6347:{"value":"18CB","name":"CANADIAN SYLLABICS OJIBWAY NWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18CB"},6348:{"value":"18CC","name":"CANADIAN SYLLABICS NWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18CC"},6349:{"value":"18CD","name":"CANADIAN SYLLABICS OJIBWAY NWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18CD"},6350:{"value":"18CE","name":"CANADIAN SYLLABICS RWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18CE"},6351:{"value":"18CF","name":"CANADIAN SYLLABICS RWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18CF"},6352:{"value":"18D0","name":"CANADIAN SYLLABICS RWII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D0"},6353:{"value":"18D1","name":"CANADIAN SYLLABICS RWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D1"},6354:{"value":"18D2","name":"CANADIAN SYLLABICS RWOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D2"},6355:{"value":"18D3","name":"CANADIAN SYLLABICS RWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D3"},6356:{"value":"18D4","name":"CANADIAN SYLLABICS OJIBWAY P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D4"},6357:{"value":"18D5","name":"CANADIAN SYLLABICS OJIBWAY T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D5"},6358:{"value":"18D6","name":"CANADIAN SYLLABICS OJIBWAY K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D6"},6359:{"value":"18D7","name":"CANADIAN SYLLABICS OJIBWAY C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D7"},6360:{"value":"18D8","name":"CANADIAN SYLLABICS OJIBWAY M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D8"},6361:{"value":"18D9","name":"CANADIAN SYLLABICS OJIBWAY N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18D9"},6362:{"value":"18DA","name":"CANADIAN SYLLABICS OJIBWAY S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18DA"},6363:{"value":"18DB","name":"CANADIAN SYLLABICS OJIBWAY SH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18DB"},6364:{"value":"18DC","name":"CANADIAN SYLLABICS EASTERN W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18DC"},6365:{"value":"18DD","name":"CANADIAN SYLLABICS WESTERN W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18DD"},6366:{"value":"18DE","name":"CANADIAN SYLLABICS FINAL SMALL RING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18DE"},6367:{"value":"18DF","name":"CANADIAN SYLLABICS FINAL RAISED DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18DF"},6368:{"value":"18E0","name":"CANADIAN SYLLABICS R-CREE RWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E0"},6369:{"value":"18E1","name":"CANADIAN SYLLABICS WEST-CREE LOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E1"},6370:{"value":"18E2","name":"CANADIAN SYLLABICS WEST-CREE LAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E2"},6371:{"value":"18E3","name":"CANADIAN SYLLABICS THWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E3"},6372:{"value":"18E4","name":"CANADIAN SYLLABICS THWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E4"},6373:{"value":"18E5","name":"CANADIAN SYLLABICS TTHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E5"},6374:{"value":"18E6","name":"CANADIAN SYLLABICS TTHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E6"},6375:{"value":"18E7","name":"CANADIAN SYLLABICS TTHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E7"},6376:{"value":"18E8","name":"CANADIAN SYLLABICS TLHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E8"},6377:{"value":"18E9","name":"CANADIAN SYLLABICS TLHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18E9"},6378:{"value":"18EA","name":"CANADIAN SYLLABICS SAYISI SHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18EA"},6379:{"value":"18EB","name":"CANADIAN SYLLABICS SAYISI SHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18EB"},6380:{"value":"18EC","name":"CANADIAN SYLLABICS SAYISI HOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18EC"},6381:{"value":"18ED","name":"CANADIAN SYLLABICS CARRIER GWU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18ED"},6382:{"value":"18EE","name":"CANADIAN SYLLABICS CARRIER DENE GEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18EE"},6383:{"value":"18EF","name":"CANADIAN SYLLABICS CARRIER GAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18EF"},6384:{"value":"18F0","name":"CANADIAN SYLLABICS CARRIER GWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18F0"},6385:{"value":"18F1","name":"CANADIAN SYLLABICS SAYISI JUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18F1"},6386:{"value":"18F2","name":"CANADIAN SYLLABICS CARRIER JWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18F2"},6387:{"value":"18F3","name":"CANADIAN SYLLABICS BEAVER DENE L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18F3"},6388:{"value":"18F4","name":"CANADIAN SYLLABICS BEAVER DENE R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18F4"},6389:{"value":"18F5","name":"CANADIAN SYLLABICS CARRIER DENTAL S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18F5"},6400:{"value":"1900","name":"LIMBU VOWEL-CARRIER LETTER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1900"},6401:{"value":"1901","name":"LIMBU LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1901"},6402:{"value":"1902","name":"LIMBU LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1902"},6403:{"value":"1903","name":"LIMBU LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1903"},6404:{"value":"1904","name":"LIMBU LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1904"},6405:{"value":"1905","name":"LIMBU LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1905"},6406:{"value":"1906","name":"LIMBU LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1906"},6407:{"value":"1907","name":"LIMBU LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1907"},6408:{"value":"1908","name":"LIMBU LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1908"},6409:{"value":"1909","name":"LIMBU LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1909"},6410:{"value":"190A","name":"LIMBU LETTER YAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u190A"},6411:{"value":"190B","name":"LIMBU LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u190B"},6412:{"value":"190C","name":"LIMBU LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u190C"},6413:{"value":"190D","name":"LIMBU LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u190D"},6414:{"value":"190E","name":"LIMBU LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u190E"},6415:{"value":"190F","name":"LIMBU LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u190F"},6416:{"value":"1910","name":"LIMBU LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1910"},6417:{"value":"1911","name":"LIMBU LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1911"},6418:{"value":"1912","name":"LIMBU LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1912"},6419:{"value":"1913","name":"LIMBU LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1913"},6420:{"value":"1914","name":"LIMBU LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1914"},6421:{"value":"1915","name":"LIMBU LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1915"},6422:{"value":"1916","name":"LIMBU LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1916"},6423:{"value":"1917","name":"LIMBU LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1917"},6424:{"value":"1918","name":"LIMBU LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1918"},6425:{"value":"1919","name":"LIMBU LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1919"},6426:{"value":"191A","name":"LIMBU LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u191A"},6427:{"value":"191B","name":"LIMBU LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u191B"},6428:{"value":"191C","name":"LIMBU LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u191C"},6429:{"value":"191D","name":"LIMBU LETTER GYAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u191D"},6430:{"value":"191E","name":"LIMBU LETTER TRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u191E"},6480:{"value":"1950","name":"TAI LE LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1950"},6481:{"value":"1951","name":"TAI LE LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1951"},6482:{"value":"1952","name":"TAI LE LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1952"},6483:{"value":"1953","name":"TAI LE LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1953"},6484:{"value":"1954","name":"TAI LE LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1954"},6485:{"value":"1955","name":"TAI LE LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1955"},6486:{"value":"1956","name":"TAI LE LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1956"},6487:{"value":"1957","name":"TAI LE LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1957"},6488:{"value":"1958","name":"TAI LE LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1958"},6489:{"value":"1959","name":"TAI LE LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1959"},6490:{"value":"195A","name":"TAI LE LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u195A"},6491:{"value":"195B","name":"TAI LE LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u195B"},6492:{"value":"195C","name":"TAI LE LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u195C"},6493:{"value":"195D","name":"TAI LE LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u195D"},6494:{"value":"195E","name":"TAI LE LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u195E"},6495:{"value":"195F","name":"TAI LE LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u195F"},6496:{"value":"1960","name":"TAI LE LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1960"},6497:{"value":"1961","name":"TAI LE LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1961"},6498:{"value":"1962","name":"TAI LE LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1962"},6499:{"value":"1963","name":"TAI LE LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1963"},6500:{"value":"1964","name":"TAI LE LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1964"},6501:{"value":"1965","name":"TAI LE LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1965"},6502:{"value":"1966","name":"TAI LE LETTER EH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1966"},6503:{"value":"1967","name":"TAI LE LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1967"},6504:{"value":"1968","name":"TAI LE LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1968"},6505:{"value":"1969","name":"TAI LE LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1969"},6506:{"value":"196A","name":"TAI LE LETTER UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u196A"},6507:{"value":"196B","name":"TAI LE LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u196B"},6508:{"value":"196C","name":"TAI LE LETTER AUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u196C"},6509:{"value":"196D","name":"TAI LE LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u196D"},6512:{"value":"1970","name":"TAI LE LETTER TONE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1970"},6513:{"value":"1971","name":"TAI LE LETTER TONE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1971"},6514:{"value":"1972","name":"TAI LE LETTER TONE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1972"},6515:{"value":"1973","name":"TAI LE LETTER TONE-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1973"},6516:{"value":"1974","name":"TAI LE LETTER TONE-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1974"},6528:{"value":"1980","name":"NEW TAI LUE LETTER HIGH QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1980"},6529:{"value":"1981","name":"NEW TAI LUE LETTER LOW QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1981"},6530:{"value":"1982","name":"NEW TAI LUE LETTER HIGH KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1982"},6531:{"value":"1983","name":"NEW TAI LUE LETTER HIGH XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1983"},6532:{"value":"1984","name":"NEW TAI LUE LETTER HIGH NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1984"},6533:{"value":"1985","name":"NEW TAI LUE LETTER LOW KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1985"},6534:{"value":"1986","name":"NEW TAI LUE LETTER LOW XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1986"},6535:{"value":"1987","name":"NEW TAI LUE LETTER LOW NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1987"},6536:{"value":"1988","name":"NEW TAI LUE LETTER HIGH TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1988"},6537:{"value":"1989","name":"NEW TAI LUE LETTER HIGH SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1989"},6538:{"value":"198A","name":"NEW TAI LUE LETTER HIGH YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u198A"},6539:{"value":"198B","name":"NEW TAI LUE LETTER LOW TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u198B"},6540:{"value":"198C","name":"NEW TAI LUE LETTER LOW SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u198C"},6541:{"value":"198D","name":"NEW TAI LUE LETTER LOW YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u198D"},6542:{"value":"198E","name":"NEW TAI LUE LETTER HIGH TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u198E"},6543:{"value":"198F","name":"NEW TAI LUE LETTER HIGH THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u198F"},6544:{"value":"1990","name":"NEW TAI LUE LETTER HIGH NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1990"},6545:{"value":"1991","name":"NEW TAI LUE LETTER LOW TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1991"},6546:{"value":"1992","name":"NEW TAI LUE LETTER LOW THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1992"},6547:{"value":"1993","name":"NEW TAI LUE LETTER LOW NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1993"},6548:{"value":"1994","name":"NEW TAI LUE LETTER HIGH PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1994"},6549:{"value":"1995","name":"NEW TAI LUE LETTER HIGH PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1995"},6550:{"value":"1996","name":"NEW TAI LUE LETTER HIGH MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1996"},6551:{"value":"1997","name":"NEW TAI LUE LETTER LOW PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1997"},6552:{"value":"1998","name":"NEW TAI LUE LETTER LOW PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1998"},6553:{"value":"1999","name":"NEW TAI LUE LETTER LOW MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1999"},6554:{"value":"199A","name":"NEW TAI LUE LETTER HIGH FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u199A"},6555:{"value":"199B","name":"NEW TAI LUE LETTER HIGH VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u199B"},6556:{"value":"199C","name":"NEW TAI LUE LETTER HIGH LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u199C"},6557:{"value":"199D","name":"NEW TAI LUE LETTER LOW FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u199D"},6558:{"value":"199E","name":"NEW TAI LUE LETTER LOW VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u199E"},6559:{"value":"199F","name":"NEW TAI LUE LETTER LOW LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u199F"},6560:{"value":"19A0","name":"NEW TAI LUE LETTER HIGH HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A0"},6561:{"value":"19A1","name":"NEW TAI LUE LETTER HIGH DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A1"},6562:{"value":"19A2","name":"NEW TAI LUE LETTER HIGH BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A2"},6563:{"value":"19A3","name":"NEW TAI LUE LETTER LOW HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A3"},6564:{"value":"19A4","name":"NEW TAI LUE LETTER LOW DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A4"},6565:{"value":"19A5","name":"NEW TAI LUE LETTER LOW BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A5"},6566:{"value":"19A6","name":"NEW TAI LUE LETTER HIGH KVA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A6"},6567:{"value":"19A7","name":"NEW TAI LUE LETTER HIGH XVA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A7"},6568:{"value":"19A8","name":"NEW TAI LUE LETTER LOW KVA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A8"},6569:{"value":"19A9","name":"NEW TAI LUE LETTER LOW XVA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19A9"},6570:{"value":"19AA","name":"NEW TAI LUE LETTER HIGH SUA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19AA"},6571:{"value":"19AB","name":"NEW TAI LUE LETTER LOW SUA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19AB"},6576:{"value":"19B0","name":"NEW TAI LUE VOWEL SIGN VOWEL SHORTENER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B0"},6577:{"value":"19B1","name":"NEW TAI LUE VOWEL SIGN AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B1"},6578:{"value":"19B2","name":"NEW TAI LUE VOWEL SIGN II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B2"},6579:{"value":"19B3","name":"NEW TAI LUE VOWEL SIGN U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B3"},6580:{"value":"19B4","name":"NEW TAI LUE VOWEL SIGN UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B4"},6581:{"value":"19B5","name":"NEW TAI LUE VOWEL SIGN E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B5"},6582:{"value":"19B6","name":"NEW TAI LUE VOWEL SIGN AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B6"},6583:{"value":"19B7","name":"NEW TAI LUE VOWEL SIGN O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B7"},6584:{"value":"19B8","name":"NEW TAI LUE VOWEL SIGN OA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B8"},6585:{"value":"19B9","name":"NEW TAI LUE VOWEL SIGN UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19B9"},6586:{"value":"19BA","name":"NEW TAI LUE VOWEL SIGN AY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19BA"},6587:{"value":"19BB","name":"NEW TAI LUE VOWEL SIGN AAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19BB"},6588:{"value":"19BC","name":"NEW TAI LUE VOWEL SIGN UY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19BC"},6589:{"value":"19BD","name":"NEW TAI LUE VOWEL SIGN OY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19BD"},6590:{"value":"19BE","name":"NEW TAI LUE VOWEL SIGN OAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19BE"},6591:{"value":"19BF","name":"NEW TAI LUE VOWEL SIGN UEY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19BF"},6592:{"value":"19C0","name":"NEW TAI LUE VOWEL SIGN IY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C0"},6593:{"value":"19C1","name":"NEW TAI LUE LETTER FINAL V","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C1"},6594:{"value":"19C2","name":"NEW TAI LUE LETTER FINAL NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C2"},6595:{"value":"19C3","name":"NEW TAI LUE LETTER FINAL N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C3"},6596:{"value":"19C4","name":"NEW TAI LUE LETTER FINAL M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C4"},6597:{"value":"19C5","name":"NEW TAI LUE LETTER FINAL K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C5"},6598:{"value":"19C6","name":"NEW TAI LUE LETTER FINAL D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C6"},6599:{"value":"19C7","name":"NEW TAI LUE LETTER FINAL B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C7"},6600:{"value":"19C8","name":"NEW TAI LUE TONE MARK-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C8"},6601:{"value":"19C9","name":"NEW TAI LUE TONE MARK-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19C9"},6656:{"value":"1A00","name":"BUGINESE LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A00"},6657:{"value":"1A01","name":"BUGINESE LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A01"},6658:{"value":"1A02","name":"BUGINESE LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A02"},6659:{"value":"1A03","name":"BUGINESE LETTER NGKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A03"},6660:{"value":"1A04","name":"BUGINESE LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A04"},6661:{"value":"1A05","name":"BUGINESE LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A05"},6662:{"value":"1A06","name":"BUGINESE LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A06"},6663:{"value":"1A07","name":"BUGINESE LETTER MPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A07"},6664:{"value":"1A08","name":"BUGINESE LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A08"},6665:{"value":"1A09","name":"BUGINESE LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A09"},6666:{"value":"1A0A","name":"BUGINESE LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A0A"},6667:{"value":"1A0B","name":"BUGINESE LETTER NRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A0B"},6668:{"value":"1A0C","name":"BUGINESE LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A0C"},6669:{"value":"1A0D","name":"BUGINESE LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A0D"},6670:{"value":"1A0E","name":"BUGINESE LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A0E"},6671:{"value":"1A0F","name":"BUGINESE LETTER NYCA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A0F"},6672:{"value":"1A10","name":"BUGINESE LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A10"},6673:{"value":"1A11","name":"BUGINESE LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A11"},6674:{"value":"1A12","name":"BUGINESE LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A12"},6675:{"value":"1A13","name":"BUGINESE LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A13"},6676:{"value":"1A14","name":"BUGINESE LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A14"},6677:{"value":"1A15","name":"BUGINESE LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A15"},6678:{"value":"1A16","name":"BUGINESE LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A16"},6688:{"value":"1A20","name":"TAI THAM LETTER HIGH KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A20"},6689:{"value":"1A21","name":"TAI THAM LETTER HIGH KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A21"},6690:{"value":"1A22","name":"TAI THAM LETTER HIGH KXA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A22"},6691:{"value":"1A23","name":"TAI THAM LETTER LOW KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A23"},6692:{"value":"1A24","name":"TAI THAM LETTER LOW KXA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A24"},6693:{"value":"1A25","name":"TAI THAM LETTER LOW KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A25"},6694:{"value":"1A26","name":"TAI THAM LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A26"},6695:{"value":"1A27","name":"TAI THAM LETTER HIGH CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A27"},6696:{"value":"1A28","name":"TAI THAM LETTER HIGH CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A28"},6697:{"value":"1A29","name":"TAI THAM LETTER LOW CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A29"},6698:{"value":"1A2A","name":"TAI THAM LETTER LOW SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A2A"},6699:{"value":"1A2B","name":"TAI THAM LETTER LOW CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A2B"},6700:{"value":"1A2C","name":"TAI THAM LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A2C"},6701:{"value":"1A2D","name":"TAI THAM LETTER RATA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A2D"},6702:{"value":"1A2E","name":"TAI THAM LETTER HIGH RATHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A2E"},6703:{"value":"1A2F","name":"TAI THAM LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A2F"},6704:{"value":"1A30","name":"TAI THAM LETTER LOW RATHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A30"},6705:{"value":"1A31","name":"TAI THAM LETTER RANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A31"},6706:{"value":"1A32","name":"TAI THAM LETTER HIGH TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A32"},6707:{"value":"1A33","name":"TAI THAM LETTER HIGH THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A33"},6708:{"value":"1A34","name":"TAI THAM LETTER LOW TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A34"},6709:{"value":"1A35","name":"TAI THAM LETTER LOW THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A35"},6710:{"value":"1A36","name":"TAI THAM LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A36"},6711:{"value":"1A37","name":"TAI THAM LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A37"},6712:{"value":"1A38","name":"TAI THAM LETTER HIGH PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A38"},6713:{"value":"1A39","name":"TAI THAM LETTER HIGH PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A39"},6714:{"value":"1A3A","name":"TAI THAM LETTER HIGH FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A3A"},6715:{"value":"1A3B","name":"TAI THAM LETTER LOW PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A3B"},6716:{"value":"1A3C","name":"TAI THAM LETTER LOW FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A3C"},6717:{"value":"1A3D","name":"TAI THAM LETTER LOW PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A3D"},6718:{"value":"1A3E","name":"TAI THAM LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A3E"},6719:{"value":"1A3F","name":"TAI THAM LETTER LOW YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A3F"},6720:{"value":"1A40","name":"TAI THAM LETTER HIGH YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A40"},6721:{"value":"1A41","name":"TAI THAM LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A41"},6722:{"value":"1A42","name":"TAI THAM LETTER RUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A42"},6723:{"value":"1A43","name":"TAI THAM LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A43"},6724:{"value":"1A44","name":"TAI THAM LETTER LUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A44"},6725:{"value":"1A45","name":"TAI THAM LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A45"},6726:{"value":"1A46","name":"TAI THAM LETTER HIGH SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A46"},6727:{"value":"1A47","name":"TAI THAM LETTER HIGH SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A47"},6728:{"value":"1A48","name":"TAI THAM LETTER HIGH SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A48"},6729:{"value":"1A49","name":"TAI THAM LETTER HIGH HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A49"},6730:{"value":"1A4A","name":"TAI THAM LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A4A"},6731:{"value":"1A4B","name":"TAI THAM LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A4B"},6732:{"value":"1A4C","name":"TAI THAM LETTER LOW HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A4C"},6733:{"value":"1A4D","name":"TAI THAM LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A4D"},6734:{"value":"1A4E","name":"TAI THAM LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A4E"},6735:{"value":"1A4F","name":"TAI THAM LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A4F"},6736:{"value":"1A50","name":"TAI THAM LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A50"},6737:{"value":"1A51","name":"TAI THAM LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A51"},6738:{"value":"1A52","name":"TAI THAM LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A52"},6739:{"value":"1A53","name":"TAI THAM LETTER LAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A53"},6740:{"value":"1A54","name":"TAI THAM LETTER GREAT SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A54"},6917:{"value":"1B05","name":"BALINESE LETTER AKARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B05"},6918:{"value":"1B06","name":"BALINESE LETTER AKARA TEDUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1B05 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B06"},6919:{"value":"1B07","name":"BALINESE LETTER IKARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B07"},6920:{"value":"1B08","name":"BALINESE LETTER IKARA TEDUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1B07 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B08"},6921:{"value":"1B09","name":"BALINESE LETTER UKARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B09"},6922:{"value":"1B0A","name":"BALINESE LETTER UKARA TEDUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1B09 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B0A"},6923:{"value":"1B0B","name":"BALINESE LETTER RA REPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B0B"},6924:{"value":"1B0C","name":"BALINESE LETTER RA REPA TEDUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1B0B 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B0C"},6925:{"value":"1B0D","name":"BALINESE LETTER LA LENGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B0D"},6926:{"value":"1B0E","name":"BALINESE LETTER LA LENGA TEDUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1B0D 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B0E"},6927:{"value":"1B0F","name":"BALINESE LETTER EKARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B0F"},6928:{"value":"1B10","name":"BALINESE LETTER AIKARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B10"},6929:{"value":"1B11","name":"BALINESE LETTER OKARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B11"},6930:{"value":"1B12","name":"BALINESE LETTER OKARA TEDUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1B11 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B12"},6931:{"value":"1B13","name":"BALINESE LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B13"},6932:{"value":"1B14","name":"BALINESE LETTER KA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B14"},6933:{"value":"1B15","name":"BALINESE LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B15"},6934:{"value":"1B16","name":"BALINESE LETTER GA GORA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B16"},6935:{"value":"1B17","name":"BALINESE LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B17"},6936:{"value":"1B18","name":"BALINESE LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B18"},6937:{"value":"1B19","name":"BALINESE LETTER CA LACA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B19"},6938:{"value":"1B1A","name":"BALINESE LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B1A"},6939:{"value":"1B1B","name":"BALINESE LETTER JA JERA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B1B"},6940:{"value":"1B1C","name":"BALINESE LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B1C"},6941:{"value":"1B1D","name":"BALINESE LETTER TA LATIK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B1D"},6942:{"value":"1B1E","name":"BALINESE LETTER TA MURDA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B1E"},6943:{"value":"1B1F","name":"BALINESE LETTER DA MURDA ALPAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B1F"},6944:{"value":"1B20","name":"BALINESE LETTER DA MURDA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B20"},6945:{"value":"1B21","name":"BALINESE LETTER NA RAMBAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B21"},6946:{"value":"1B22","name":"BALINESE LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B22"},6947:{"value":"1B23","name":"BALINESE LETTER TA TAWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B23"},6948:{"value":"1B24","name":"BALINESE LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B24"},6949:{"value":"1B25","name":"BALINESE LETTER DA MADU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B25"},6950:{"value":"1B26","name":"BALINESE LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B26"},6951:{"value":"1B27","name":"BALINESE LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B27"},6952:{"value":"1B28","name":"BALINESE LETTER PA KAPAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B28"},6953:{"value":"1B29","name":"BALINESE LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B29"},6954:{"value":"1B2A","name":"BALINESE LETTER BA KEMBANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B2A"},6955:{"value":"1B2B","name":"BALINESE LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B2B"},6956:{"value":"1B2C","name":"BALINESE LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B2C"},6957:{"value":"1B2D","name":"BALINESE LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B2D"},6958:{"value":"1B2E","name":"BALINESE LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B2E"},6959:{"value":"1B2F","name":"BALINESE LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B2F"},6960:{"value":"1B30","name":"BALINESE LETTER SA SAGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B30"},6961:{"value":"1B31","name":"BALINESE LETTER SA SAPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B31"},6962:{"value":"1B32","name":"BALINESE LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B32"},6963:{"value":"1B33","name":"BALINESE LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B33"},6981:{"value":"1B45","name":"BALINESE LETTER KAF SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B45"},6982:{"value":"1B46","name":"BALINESE LETTER KHOT SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B46"},6983:{"value":"1B47","name":"BALINESE LETTER TZIR SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B47"},6984:{"value":"1B48","name":"BALINESE LETTER EF SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B48"},6985:{"value":"1B49","name":"BALINESE LETTER VE SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B49"},6986:{"value":"1B4A","name":"BALINESE LETTER ZAL SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B4A"},6987:{"value":"1B4B","name":"BALINESE LETTER ASYURA SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B4B"},6988:{"value":"1B4C","name":"BALINESE LETTER ARCHAIC JNYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B4C"},7043:{"value":"1B83","name":"SUNDANESE LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B83"},7044:{"value":"1B84","name":"SUNDANESE LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B84"},7045:{"value":"1B85","name":"SUNDANESE LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B85"},7046:{"value":"1B86","name":"SUNDANESE LETTER AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B86"},7047:{"value":"1B87","name":"SUNDANESE LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B87"},7048:{"value":"1B88","name":"SUNDANESE LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B88"},7049:{"value":"1B89","name":"SUNDANESE LETTER EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B89"},7050:{"value":"1B8A","name":"SUNDANESE LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B8A"},7051:{"value":"1B8B","name":"SUNDANESE LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B8B"},7052:{"value":"1B8C","name":"SUNDANESE LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B8C"},7053:{"value":"1B8D","name":"SUNDANESE LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B8D"},7054:{"value":"1B8E","name":"SUNDANESE LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B8E"},7055:{"value":"1B8F","name":"SUNDANESE LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B8F"},7056:{"value":"1B90","name":"SUNDANESE LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B90"},7057:{"value":"1B91","name":"SUNDANESE LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B91"},7058:{"value":"1B92","name":"SUNDANESE LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B92"},7059:{"value":"1B93","name":"SUNDANESE LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B93"},7060:{"value":"1B94","name":"SUNDANESE LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B94"},7061:{"value":"1B95","name":"SUNDANESE LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B95"},7062:{"value":"1B96","name":"SUNDANESE LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B96"},7063:{"value":"1B97","name":"SUNDANESE LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B97"},7064:{"value":"1B98","name":"SUNDANESE LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B98"},7065:{"value":"1B99","name":"SUNDANESE LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B99"},7066:{"value":"1B9A","name":"SUNDANESE LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B9A"},7067:{"value":"1B9B","name":"SUNDANESE LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B9B"},7068:{"value":"1B9C","name":"SUNDANESE LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B9C"},7069:{"value":"1B9D","name":"SUNDANESE LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B9D"},7070:{"value":"1B9E","name":"SUNDANESE LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B9E"},7071:{"value":"1B9F","name":"SUNDANESE LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B9F"},7072:{"value":"1BA0","name":"SUNDANESE LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA0"},7086:{"value":"1BAE","name":"SUNDANESE LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BAE"},7087:{"value":"1BAF","name":"SUNDANESE LETTER SYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BAF"},7098:{"value":"1BBA","name":"SUNDANESE AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BBA"},7099:{"value":"1BBB","name":"SUNDANESE LETTER REU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BBB"},7100:{"value":"1BBC","name":"SUNDANESE LETTER LEU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BBC"},7101:{"value":"1BBD","name":"SUNDANESE LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BBD"},7102:{"value":"1BBE","name":"SUNDANESE LETTER FINAL K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BBE"},7103:{"value":"1BBF","name":"SUNDANESE LETTER FINAL M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BBF"},7104:{"value":"1BC0","name":"BATAK LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC0"},7105:{"value":"1BC1","name":"BATAK LETTER SIMALUNGUN A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC1"},7106:{"value":"1BC2","name":"BATAK LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC2"},7107:{"value":"1BC3","name":"BATAK LETTER SIMALUNGUN HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC3"},7108:{"value":"1BC4","name":"BATAK LETTER MANDAILING HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC4"},7109:{"value":"1BC5","name":"BATAK LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC5"},7110:{"value":"1BC6","name":"BATAK LETTER KARO BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC6"},7111:{"value":"1BC7","name":"BATAK LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC7"},7112:{"value":"1BC8","name":"BATAK LETTER SIMALUNGUN PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC8"},7113:{"value":"1BC9","name":"BATAK LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BC9"},7114:{"value":"1BCA","name":"BATAK LETTER MANDAILING NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BCA"},7115:{"value":"1BCB","name":"BATAK LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BCB"},7116:{"value":"1BCC","name":"BATAK LETTER SIMALUNGUN WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BCC"},7117:{"value":"1BCD","name":"BATAK LETTER PAKPAK WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BCD"},7118:{"value":"1BCE","name":"BATAK LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BCE"},7119:{"value":"1BCF","name":"BATAK LETTER SIMALUNGUN GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BCF"},7120:{"value":"1BD0","name":"BATAK LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD0"},7121:{"value":"1BD1","name":"BATAK LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD1"},7122:{"value":"1BD2","name":"BATAK LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD2"},7123:{"value":"1BD3","name":"BATAK LETTER SIMALUNGUN RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD3"},7124:{"value":"1BD4","name":"BATAK LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD4"},7125:{"value":"1BD5","name":"BATAK LETTER SIMALUNGUN MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD5"},7126:{"value":"1BD6","name":"BATAK LETTER SOUTHERN TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD6"},7127:{"value":"1BD7","name":"BATAK LETTER NORTHERN TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD7"},7128:{"value":"1BD8","name":"BATAK LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD8"},7129:{"value":"1BD9","name":"BATAK LETTER SIMALUNGUN SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BD9"},7130:{"value":"1BDA","name":"BATAK LETTER MANDAILING SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BDA"},7131:{"value":"1BDB","name":"BATAK LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BDB"},7132:{"value":"1BDC","name":"BATAK LETTER SIMALUNGUN YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BDC"},7133:{"value":"1BDD","name":"BATAK LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BDD"},7134:{"value":"1BDE","name":"BATAK LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BDE"},7135:{"value":"1BDF","name":"BATAK LETTER SIMALUNGUN LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BDF"},7136:{"value":"1BE0","name":"BATAK LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE0"},7137:{"value":"1BE1","name":"BATAK LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE1"},7138:{"value":"1BE2","name":"BATAK LETTER NDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE2"},7139:{"value":"1BE3","name":"BATAK LETTER MBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE3"},7140:{"value":"1BE4","name":"BATAK LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE4"},7141:{"value":"1BE5","name":"BATAK LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE5"},7168:{"value":"1C00","name":"LEPCHA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C00"},7169:{"value":"1C01","name":"LEPCHA LETTER KLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C01"},7170:{"value":"1C02","name":"LEPCHA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C02"},7171:{"value":"1C03","name":"LEPCHA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C03"},7172:{"value":"1C04","name":"LEPCHA LETTER GLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C04"},7173:{"value":"1C05","name":"LEPCHA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C05"},7174:{"value":"1C06","name":"LEPCHA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C06"},7175:{"value":"1C07","name":"LEPCHA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C07"},7176:{"value":"1C08","name":"LEPCHA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C08"},7177:{"value":"1C09","name":"LEPCHA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C09"},7178:{"value":"1C0A","name":"LEPCHA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C0A"},7179:{"value":"1C0B","name":"LEPCHA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C0B"},7180:{"value":"1C0C","name":"LEPCHA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C0C"},7181:{"value":"1C0D","name":"LEPCHA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C0D"},7182:{"value":"1C0E","name":"LEPCHA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C0E"},7183:{"value":"1C0F","name":"LEPCHA LETTER PLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C0F"},7184:{"value":"1C10","name":"LEPCHA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C10"},7185:{"value":"1C11","name":"LEPCHA LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C11"},7186:{"value":"1C12","name":"LEPCHA LETTER FLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C12"},7187:{"value":"1C13","name":"LEPCHA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C13"},7188:{"value":"1C14","name":"LEPCHA LETTER BLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C14"},7189:{"value":"1C15","name":"LEPCHA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C15"},7190:{"value":"1C16","name":"LEPCHA LETTER MLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C16"},7191:{"value":"1C17","name":"LEPCHA LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C17"},7192:{"value":"1C18","name":"LEPCHA LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C18"},7193:{"value":"1C19","name":"LEPCHA LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C19"},7194:{"value":"1C1A","name":"LEPCHA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C1A"},7195:{"value":"1C1B","name":"LEPCHA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C1B"},7196:{"value":"1C1C","name":"LEPCHA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C1C"},7197:{"value":"1C1D","name":"LEPCHA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C1D"},7198:{"value":"1C1E","name":"LEPCHA LETTER HLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C1E"},7199:{"value":"1C1F","name":"LEPCHA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C1F"},7200:{"value":"1C20","name":"LEPCHA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C20"},7201:{"value":"1C21","name":"LEPCHA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C21"},7202:{"value":"1C22","name":"LEPCHA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C22"},7203:{"value":"1C23","name":"LEPCHA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C23"},7245:{"value":"1C4D","name":"LEPCHA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C4D"},7246:{"value":"1C4E","name":"LEPCHA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C4E"},7247:{"value":"1C4F","name":"LEPCHA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C4F"},7258:{"value":"1C5A","name":"OL CHIKI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C5A"},7259:{"value":"1C5B","name":"OL CHIKI LETTER AT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C5B"},7260:{"value":"1C5C","name":"OL CHIKI LETTER AG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C5C"},7261:{"value":"1C5D","name":"OL CHIKI LETTER ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C5D"},7262:{"value":"1C5E","name":"OL CHIKI LETTER AL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C5E"},7263:{"value":"1C5F","name":"OL CHIKI LETTER LAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C5F"},7264:{"value":"1C60","name":"OL CHIKI LETTER AAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C60"},7265:{"value":"1C61","name":"OL CHIKI LETTER AAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C61"},7266:{"value":"1C62","name":"OL CHIKI LETTER AAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C62"},7267:{"value":"1C63","name":"OL CHIKI LETTER AAW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C63"},7268:{"value":"1C64","name":"OL CHIKI LETTER LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C64"},7269:{"value":"1C65","name":"OL CHIKI LETTER IS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C65"},7270:{"value":"1C66","name":"OL CHIKI LETTER IH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C66"},7271:{"value":"1C67","name":"OL CHIKI LETTER INY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C67"},7272:{"value":"1C68","name":"OL CHIKI LETTER IR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C68"},7273:{"value":"1C69","name":"OL CHIKI LETTER LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C69"},7274:{"value":"1C6A","name":"OL CHIKI LETTER UC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C6A"},7275:{"value":"1C6B","name":"OL CHIKI LETTER UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C6B"},7276:{"value":"1C6C","name":"OL CHIKI LETTER UNN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C6C"},7277:{"value":"1C6D","name":"OL CHIKI LETTER UY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C6D"},7278:{"value":"1C6E","name":"OL CHIKI LETTER LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C6E"},7279:{"value":"1C6F","name":"OL CHIKI LETTER EP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C6F"},7280:{"value":"1C70","name":"OL CHIKI LETTER EDD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C70"},7281:{"value":"1C71","name":"OL CHIKI LETTER EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C71"},7282:{"value":"1C72","name":"OL CHIKI LETTER ERR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C72"},7283:{"value":"1C73","name":"OL CHIKI LETTER LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C73"},7284:{"value":"1C74","name":"OL CHIKI LETTER OTT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C74"},7285:{"value":"1C75","name":"OL CHIKI LETTER OB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C75"},7286:{"value":"1C76","name":"OL CHIKI LETTER OV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C76"},7287:{"value":"1C77","name":"OL CHIKI LETTER OH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C77"},7401:{"value":"1CE9","name":"VEDIC SIGN ANUSVARA ANTARGOMUKHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE9"},7402:{"value":"1CEA","name":"VEDIC SIGN ANUSVARA BAHIRGOMUKHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CEA"},7403:{"value":"1CEB","name":"VEDIC SIGN ANUSVARA VAMAGOMUKHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CEB"},7404:{"value":"1CEC","name":"VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CEC"},7406:{"value":"1CEE","name":"VEDIC SIGN HEXIFORM LONG ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CEE"},7407:{"value":"1CEF","name":"VEDIC SIGN LONG ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CEF"},7408:{"value":"1CF0","name":"VEDIC SIGN RTHANG LONG ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF0"},7409:{"value":"1CF1","name":"VEDIC SIGN ANUSVARA UBHAYATO MUKHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF1"},7410:{"value":"1CF2","name":"VEDIC SIGN ARDHAVISARGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF2"},7411:{"value":"1CF3","name":"VEDIC SIGN ROTATED ARDHAVISARGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF3"},7413:{"value":"1CF5","name":"VEDIC SIGN JIHVAMULIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF5"},7414:{"value":"1CF6","name":"VEDIC SIGN UPADHMANIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF6"},7418:{"value":"1CFA","name":"VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CFA"},8501:{"value":"2135","name":"ALEF SYMBOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 05D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FIRST TRANSFINITE CARDINAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2135"},8502:{"value":"2136","name":"BET SYMBOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 05D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SECOND TRANSFINITE CARDINAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2136"},8503:{"value":"2137","name":"GIMEL SYMBOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 05D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THIRD TRANSFINITE CARDINAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2137"},8504:{"value":"2138","name":"DALET SYMBOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 05D3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FOURTH TRANSFINITE CARDINAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2138"},11568:{"value":"2D30","name":"TIFINAGH LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D30"},11569:{"value":"2D31","name":"TIFINAGH LETTER YAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D31"},11570:{"value":"2D32","name":"TIFINAGH LETTER YABH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D32"},11571:{"value":"2D33","name":"TIFINAGH LETTER YAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D33"},11572:{"value":"2D34","name":"TIFINAGH LETTER YAGHH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D34"},11573:{"value":"2D35","name":"TIFINAGH LETTER BERBER ACADEMY YAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D35"},11574:{"value":"2D36","name":"TIFINAGH LETTER YAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D36"},11575:{"value":"2D37","name":"TIFINAGH LETTER YAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D37"},11576:{"value":"2D38","name":"TIFINAGH LETTER YADH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D38"},11577:{"value":"2D39","name":"TIFINAGH LETTER YADD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D39"},11578:{"value":"2D3A","name":"TIFINAGH LETTER YADDH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D3A"},11579:{"value":"2D3B","name":"TIFINAGH LETTER YEY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D3B"},11580:{"value":"2D3C","name":"TIFINAGH LETTER YAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D3C"},11581:{"value":"2D3D","name":"TIFINAGH LETTER YAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D3D"},11582:{"value":"2D3E","name":"TIFINAGH LETTER TUAREG YAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D3E"},11583:{"value":"2D3F","name":"TIFINAGH LETTER YAKHH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D3F"},11584:{"value":"2D40","name":"TIFINAGH LETTER YAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D40"},11585:{"value":"2D41","name":"TIFINAGH LETTER BERBER ACADEMY YAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D41"},11586:{"value":"2D42","name":"TIFINAGH LETTER TUAREG YAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D42"},11587:{"value":"2D43","name":"TIFINAGH LETTER YAHH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D43"},11588:{"value":"2D44","name":"TIFINAGH LETTER YAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D44"},11589:{"value":"2D45","name":"TIFINAGH LETTER YAKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D45"},11590:{"value":"2D46","name":"TIFINAGH LETTER TUAREG YAKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D46"},11591:{"value":"2D47","name":"TIFINAGH LETTER YAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D47"},11592:{"value":"2D48","name":"TIFINAGH LETTER TUAREG YAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D48"},11593:{"value":"2D49","name":"TIFINAGH LETTER YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D49"},11594:{"value":"2D4A","name":"TIFINAGH LETTER YAZH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D4A"},11595:{"value":"2D4B","name":"TIFINAGH LETTER AHAGGAR YAZH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D4B"},11596:{"value":"2D4C","name":"TIFINAGH LETTER TUAREG YAZH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D4C"},11597:{"value":"2D4D","name":"TIFINAGH LETTER YAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D4D"},11598:{"value":"2D4E","name":"TIFINAGH LETTER YAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D4E"},11599:{"value":"2D4F","name":"TIFINAGH LETTER YAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D4F"},11600:{"value":"2D50","name":"TIFINAGH LETTER TUAREG YAGN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D50"},11601:{"value":"2D51","name":"TIFINAGH LETTER TUAREG YANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D51"},11602:{"value":"2D52","name":"TIFINAGH LETTER YAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D52"},11603:{"value":"2D53","name":"TIFINAGH LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D53"},11604:{"value":"2D54","name":"TIFINAGH LETTER YAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D54"},11605:{"value":"2D55","name":"TIFINAGH LETTER YARR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D55"},11606:{"value":"2D56","name":"TIFINAGH LETTER YAGH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D56"},11607:{"value":"2D57","name":"TIFINAGH LETTER TUAREG YAGH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D57"},11608:{"value":"2D58","name":"TIFINAGH LETTER AYER YAGH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D58"},11609:{"value":"2D59","name":"TIFINAGH LETTER YAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D59"},11610:{"value":"2D5A","name":"TIFINAGH LETTER YASS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D5A"},11611:{"value":"2D5B","name":"TIFINAGH LETTER YASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D5B"},11612:{"value":"2D5C","name":"TIFINAGH LETTER YAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D5C"},11613:{"value":"2D5D","name":"TIFINAGH LETTER YATH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D5D"},11614:{"value":"2D5E","name":"TIFINAGH LETTER YACH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D5E"},11615:{"value":"2D5F","name":"TIFINAGH LETTER YATT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D5F"},11616:{"value":"2D60","name":"TIFINAGH LETTER YAV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D60"},11617:{"value":"2D61","name":"TIFINAGH LETTER YAW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D61"},11618:{"value":"2D62","name":"TIFINAGH LETTER YAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D62"},11619:{"value":"2D63","name":"TIFINAGH LETTER YAZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D63"},11620:{"value":"2D64","name":"TIFINAGH LETTER TAWELLEMET YAZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D64"},11621:{"value":"2D65","name":"TIFINAGH LETTER YAZZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D65"},11622:{"value":"2D66","name":"TIFINAGH LETTER YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D66"},11623:{"value":"2D67","name":"TIFINAGH LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D67"},11648:{"value":"2D80","name":"ETHIOPIC SYLLABLE LOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D80"},11649:{"value":"2D81","name":"ETHIOPIC SYLLABLE MOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D81"},11650:{"value":"2D82","name":"ETHIOPIC SYLLABLE ROA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D82"},11651:{"value":"2D83","name":"ETHIOPIC SYLLABLE SOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D83"},11652:{"value":"2D84","name":"ETHIOPIC SYLLABLE SHOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D84"},11653:{"value":"2D85","name":"ETHIOPIC SYLLABLE BOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D85"},11654:{"value":"2D86","name":"ETHIOPIC SYLLABLE TOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D86"},11655:{"value":"2D87","name":"ETHIOPIC SYLLABLE COA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D87"},11656:{"value":"2D88","name":"ETHIOPIC SYLLABLE NOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D88"},11657:{"value":"2D89","name":"ETHIOPIC SYLLABLE NYOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D89"},11658:{"value":"2D8A","name":"ETHIOPIC SYLLABLE GLOTTAL OA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D8A"},11659:{"value":"2D8B","name":"ETHIOPIC SYLLABLE ZOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D8B"},11660:{"value":"2D8C","name":"ETHIOPIC SYLLABLE DOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D8C"},11661:{"value":"2D8D","name":"ETHIOPIC SYLLABLE DDOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D8D"},11662:{"value":"2D8E","name":"ETHIOPIC SYLLABLE JOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D8E"},11663:{"value":"2D8F","name":"ETHIOPIC SYLLABLE THOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D8F"},11664:{"value":"2D90","name":"ETHIOPIC SYLLABLE CHOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D90"},11665:{"value":"2D91","name":"ETHIOPIC SYLLABLE PHOA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D91"},11666:{"value":"2D92","name":"ETHIOPIC SYLLABLE POA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D92"},11667:{"value":"2D93","name":"ETHIOPIC SYLLABLE GGWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D93"},11668:{"value":"2D94","name":"ETHIOPIC SYLLABLE GGWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D94"},11669:{"value":"2D95","name":"ETHIOPIC SYLLABLE GGWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D95"},11670:{"value":"2D96","name":"ETHIOPIC SYLLABLE GGWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D96"},11680:{"value":"2DA0","name":"ETHIOPIC SYLLABLE SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA0"},11681:{"value":"2DA1","name":"ETHIOPIC SYLLABLE SSU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA1"},11682:{"value":"2DA2","name":"ETHIOPIC SYLLABLE SSI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA2"},11683:{"value":"2DA3","name":"ETHIOPIC SYLLABLE SSAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA3"},11684:{"value":"2DA4","name":"ETHIOPIC SYLLABLE SSEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA4"},11685:{"value":"2DA5","name":"ETHIOPIC SYLLABLE SSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA5"},11686:{"value":"2DA6","name":"ETHIOPIC SYLLABLE SSO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA6"},11688:{"value":"2DA8","name":"ETHIOPIC SYLLABLE CCA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA8"},11689:{"value":"2DA9","name":"ETHIOPIC SYLLABLE CCU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DA9"},11690:{"value":"2DAA","name":"ETHIOPIC SYLLABLE CCI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DAA"},11691:{"value":"2DAB","name":"ETHIOPIC SYLLABLE CCAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DAB"},11692:{"value":"2DAC","name":"ETHIOPIC SYLLABLE CCEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DAC"},11693:{"value":"2DAD","name":"ETHIOPIC SYLLABLE CCE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DAD"},11694:{"value":"2DAE","name":"ETHIOPIC SYLLABLE CCO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DAE"},11696:{"value":"2DB0","name":"ETHIOPIC SYLLABLE ZZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB0"},11697:{"value":"2DB1","name":"ETHIOPIC SYLLABLE ZZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB1"},11698:{"value":"2DB2","name":"ETHIOPIC SYLLABLE ZZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB2"},11699:{"value":"2DB3","name":"ETHIOPIC SYLLABLE ZZAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB3"},11700:{"value":"2DB4","name":"ETHIOPIC SYLLABLE ZZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB4"},11701:{"value":"2DB5","name":"ETHIOPIC SYLLABLE ZZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB5"},11702:{"value":"2DB6","name":"ETHIOPIC SYLLABLE ZZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB6"},11704:{"value":"2DB8","name":"ETHIOPIC SYLLABLE CCHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB8"},11705:{"value":"2DB9","name":"ETHIOPIC SYLLABLE CCHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DB9"},11706:{"value":"2DBA","name":"ETHIOPIC SYLLABLE CCHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DBA"},11707:{"value":"2DBB","name":"ETHIOPIC SYLLABLE CCHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DBB"},11708:{"value":"2DBC","name":"ETHIOPIC SYLLABLE CCHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DBC"},11709:{"value":"2DBD","name":"ETHIOPIC SYLLABLE CCHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DBD"},11710:{"value":"2DBE","name":"ETHIOPIC SYLLABLE CCHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DBE"},11712:{"value":"2DC0","name":"ETHIOPIC SYLLABLE QYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC0"},11713:{"value":"2DC1","name":"ETHIOPIC SYLLABLE QYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC1"},11714:{"value":"2DC2","name":"ETHIOPIC SYLLABLE QYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC2"},11715:{"value":"2DC3","name":"ETHIOPIC SYLLABLE QYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC3"},11716:{"value":"2DC4","name":"ETHIOPIC SYLLABLE QYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC4"},11717:{"value":"2DC5","name":"ETHIOPIC SYLLABLE QYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC5"},11718:{"value":"2DC6","name":"ETHIOPIC SYLLABLE QYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC6"},11720:{"value":"2DC8","name":"ETHIOPIC SYLLABLE KYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC8"},11721:{"value":"2DC9","name":"ETHIOPIC SYLLABLE KYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DC9"},11722:{"value":"2DCA","name":"ETHIOPIC SYLLABLE KYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DCA"},11723:{"value":"2DCB","name":"ETHIOPIC SYLLABLE KYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DCB"},11724:{"value":"2DCC","name":"ETHIOPIC SYLLABLE KYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DCC"},11725:{"value":"2DCD","name":"ETHIOPIC SYLLABLE KYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DCD"},11726:{"value":"2DCE","name":"ETHIOPIC SYLLABLE KYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DCE"},11728:{"value":"2DD0","name":"ETHIOPIC SYLLABLE XYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD0"},11729:{"value":"2DD1","name":"ETHIOPIC SYLLABLE XYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD1"},11730:{"value":"2DD2","name":"ETHIOPIC SYLLABLE XYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD2"},11731:{"value":"2DD3","name":"ETHIOPIC SYLLABLE XYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD3"},11732:{"value":"2DD4","name":"ETHIOPIC SYLLABLE XYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD4"},11733:{"value":"2DD5","name":"ETHIOPIC SYLLABLE XYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD5"},11734:{"value":"2DD6","name":"ETHIOPIC SYLLABLE XYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD6"},11736:{"value":"2DD8","name":"ETHIOPIC SYLLABLE GYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD8"},11737:{"value":"2DD9","name":"ETHIOPIC SYLLABLE GYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DD9"},11738:{"value":"2DDA","name":"ETHIOPIC SYLLABLE GYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DDA"},11739:{"value":"2DDB","name":"ETHIOPIC SYLLABLE GYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DDB"},11740:{"value":"2DDC","name":"ETHIOPIC SYLLABLE GYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DDC"},11741:{"value":"2DDD","name":"ETHIOPIC SYLLABLE GYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DDD"},11742:{"value":"2DDE","name":"ETHIOPIC SYLLABLE GYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DDE"},12294:{"value":"3006","name":"IDEOGRAPHIC CLOSING MARK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3006"},12348:{"value":"303C","name":"MASU MARK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u303C"},12353:{"value":"3041","name":"HIRAGANA LETTER SMALL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3041"},12354:{"value":"3042","name":"HIRAGANA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3042"},12355:{"value":"3043","name":"HIRAGANA LETTER SMALL I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3043"},12356:{"value":"3044","name":"HIRAGANA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3044"},12357:{"value":"3045","name":"HIRAGANA LETTER SMALL U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3045"},12358:{"value":"3046","name":"HIRAGANA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3046"},12359:{"value":"3047","name":"HIRAGANA LETTER SMALL E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3047"},12360:{"value":"3048","name":"HIRAGANA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3048"},12361:{"value":"3049","name":"HIRAGANA LETTER SMALL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3049"},12362:{"value":"304A","name":"HIRAGANA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u304A"},12363:{"value":"304B","name":"HIRAGANA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u304B"},12364:{"value":"304C","name":"HIRAGANA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"304B 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u304C"},12365:{"value":"304D","name":"HIRAGANA LETTER KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u304D"},12366:{"value":"304E","name":"HIRAGANA LETTER GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"304D 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u304E"},12367:{"value":"304F","name":"HIRAGANA LETTER KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u304F"},12368:{"value":"3050","name":"HIRAGANA LETTER GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"304F 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3050"},12369:{"value":"3051","name":"HIRAGANA LETTER KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3051"},12370:{"value":"3052","name":"HIRAGANA LETTER GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3051 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3052"},12371:{"value":"3053","name":"HIRAGANA LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3053"},12372:{"value":"3054","name":"HIRAGANA LETTER GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3053 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3054"},12373:{"value":"3055","name":"HIRAGANA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3055"},12374:{"value":"3056","name":"HIRAGANA LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3055 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3056"},12375:{"value":"3057","name":"HIRAGANA LETTER SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3057"},12376:{"value":"3058","name":"HIRAGANA LETTER ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3057 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3058"},12377:{"value":"3059","name":"HIRAGANA LETTER SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3059"},12378:{"value":"305A","name":"HIRAGANA LETTER ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3059 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u305A"},12379:{"value":"305B","name":"HIRAGANA LETTER SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u305B"},12380:{"value":"305C","name":"HIRAGANA LETTER ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"305B 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u305C"},12381:{"value":"305D","name":"HIRAGANA LETTER SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u305D"},12382:{"value":"305E","name":"HIRAGANA LETTER ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"305D 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u305E"},12383:{"value":"305F","name":"HIRAGANA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u305F"},12384:{"value":"3060","name":"HIRAGANA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"305F 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3060"},12385:{"value":"3061","name":"HIRAGANA LETTER TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3061"},12386:{"value":"3062","name":"HIRAGANA LETTER DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3061 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3062"},12387:{"value":"3063","name":"HIRAGANA LETTER SMALL TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3063"},12388:{"value":"3064","name":"HIRAGANA LETTER TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3064"},12389:{"value":"3065","name":"HIRAGANA LETTER DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3064 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3065"},12390:{"value":"3066","name":"HIRAGANA LETTER TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3066"},12391:{"value":"3067","name":"HIRAGANA LETTER DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3066 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3067"},12392:{"value":"3068","name":"HIRAGANA LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3068"},12393:{"value":"3069","name":"HIRAGANA LETTER DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3068 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3069"},12394:{"value":"306A","name":"HIRAGANA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u306A"},12395:{"value":"306B","name":"HIRAGANA LETTER NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u306B"},12396:{"value":"306C","name":"HIRAGANA LETTER NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u306C"},12397:{"value":"306D","name":"HIRAGANA LETTER NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u306D"},12398:{"value":"306E","name":"HIRAGANA LETTER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u306E"},12399:{"value":"306F","name":"HIRAGANA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u306F"},12400:{"value":"3070","name":"HIRAGANA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"306F 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3070"},12401:{"value":"3071","name":"HIRAGANA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"306F 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3071"},12402:{"value":"3072","name":"HIRAGANA LETTER HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3072"},12403:{"value":"3073","name":"HIRAGANA LETTER BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3072 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3073"},12404:{"value":"3074","name":"HIRAGANA LETTER PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3072 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3074"},12405:{"value":"3075","name":"HIRAGANA LETTER HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3075"},12406:{"value":"3076","name":"HIRAGANA LETTER BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3075 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3076"},12407:{"value":"3077","name":"HIRAGANA LETTER PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3075 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3077"},12408:{"value":"3078","name":"HIRAGANA LETTER HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3078"},12409:{"value":"3079","name":"HIRAGANA LETTER BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3078 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3079"},12410:{"value":"307A","name":"HIRAGANA LETTER PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3078 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u307A"},12411:{"value":"307B","name":"HIRAGANA LETTER HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u307B"},12412:{"value":"307C","name":"HIRAGANA LETTER BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"307B 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u307C"},12413:{"value":"307D","name":"HIRAGANA LETTER PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"307B 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u307D"},12414:{"value":"307E","name":"HIRAGANA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u307E"},12415:{"value":"307F","name":"HIRAGANA LETTER MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u307F"},12416:{"value":"3080","name":"HIRAGANA LETTER MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3080"},12417:{"value":"3081","name":"HIRAGANA LETTER ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3081"},12418:{"value":"3082","name":"HIRAGANA LETTER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3082"},12419:{"value":"3083","name":"HIRAGANA LETTER SMALL YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3083"},12420:{"value":"3084","name":"HIRAGANA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3084"},12421:{"value":"3085","name":"HIRAGANA LETTER SMALL YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3085"},12422:{"value":"3086","name":"HIRAGANA LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3086"},12423:{"value":"3087","name":"HIRAGANA LETTER SMALL YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3087"},12424:{"value":"3088","name":"HIRAGANA LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3088"},12425:{"value":"3089","name":"HIRAGANA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3089"},12426:{"value":"308A","name":"HIRAGANA LETTER RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u308A"},12427:{"value":"308B","name":"HIRAGANA LETTER RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u308B"},12428:{"value":"308C","name":"HIRAGANA LETTER RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u308C"},12429:{"value":"308D","name":"HIRAGANA LETTER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u308D"},12430:{"value":"308E","name":"HIRAGANA LETTER SMALL WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u308E"},12431:{"value":"308F","name":"HIRAGANA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u308F"},12432:{"value":"3090","name":"HIRAGANA LETTER WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3090"},12433:{"value":"3091","name":"HIRAGANA LETTER WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3091"},12434:{"value":"3092","name":"HIRAGANA LETTER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3092"},12435:{"value":"3093","name":"HIRAGANA LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3093"},12436:{"value":"3094","name":"HIRAGANA LETTER VU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3046 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3094"},12437:{"value":"3095","name":"HIRAGANA LETTER SMALL KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3095"},12438:{"value":"3096","name":"HIRAGANA LETTER SMALL KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3096"},12447:{"value":"309F","name":"HIRAGANA DIGRAPH YORI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3088 308A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u309F"},12449:{"value":"30A1","name":"KATAKANA LETTER SMALL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A1"},12450:{"value":"30A2","name":"KATAKANA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A2"},12451:{"value":"30A3","name":"KATAKANA LETTER SMALL I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A3"},12452:{"value":"30A4","name":"KATAKANA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A4"},12453:{"value":"30A5","name":"KATAKANA LETTER SMALL U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A5"},12454:{"value":"30A6","name":"KATAKANA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A6"},12455:{"value":"30A7","name":"KATAKANA LETTER SMALL E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A7"},12456:{"value":"30A8","name":"KATAKANA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A8"},12457:{"value":"30A9","name":"KATAKANA LETTER SMALL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A9"},12458:{"value":"30AA","name":"KATAKANA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30AA"},12459:{"value":"30AB","name":"KATAKANA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30AB"},12460:{"value":"30AC","name":"KATAKANA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30AB 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30AC"},12461:{"value":"30AD","name":"KATAKANA LETTER KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30AD"},12462:{"value":"30AE","name":"KATAKANA LETTER GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30AD 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30AE"},12463:{"value":"30AF","name":"KATAKANA LETTER KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30AF"},12464:{"value":"30B0","name":"KATAKANA LETTER GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30AF 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B0"},12465:{"value":"30B1","name":"KATAKANA LETTER KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B1"},12466:{"value":"30B2","name":"KATAKANA LETTER GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30B1 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B2"},12467:{"value":"30B3","name":"KATAKANA LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B3"},12468:{"value":"30B4","name":"KATAKANA LETTER GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30B3 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B4"},12469:{"value":"30B5","name":"KATAKANA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B5"},12470:{"value":"30B6","name":"KATAKANA LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30B5 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B6"},12471:{"value":"30B7","name":"KATAKANA LETTER SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B7"},12472:{"value":"30B8","name":"KATAKANA LETTER ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30B7 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B8"},12473:{"value":"30B9","name":"KATAKANA LETTER SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30B9"},12474:{"value":"30BA","name":"KATAKANA LETTER ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30B9 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30BA"},12475:{"value":"30BB","name":"KATAKANA LETTER SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30BB"},12476:{"value":"30BC","name":"KATAKANA LETTER ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30BB 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30BC"},12477:{"value":"30BD","name":"KATAKANA LETTER SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30BD"},12478:{"value":"30BE","name":"KATAKANA LETTER ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30BD 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30BE"},12479:{"value":"30BF","name":"KATAKANA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30BF"},12480:{"value":"30C0","name":"KATAKANA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30BF 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C0"},12481:{"value":"30C1","name":"KATAKANA LETTER TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C1"},12482:{"value":"30C2","name":"KATAKANA LETTER DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30C1 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C2"},12483:{"value":"30C3","name":"KATAKANA LETTER SMALL TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C3"},12484:{"value":"30C4","name":"KATAKANA LETTER TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C4"},12485:{"value":"30C5","name":"KATAKANA LETTER DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30C4 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C5"},12486:{"value":"30C6","name":"KATAKANA LETTER TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C6"},12487:{"value":"30C7","name":"KATAKANA LETTER DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30C6 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C7"},12488:{"value":"30C8","name":"KATAKANA LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C8"},12489:{"value":"30C9","name":"KATAKANA LETTER DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30C8 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30C9"},12490:{"value":"30CA","name":"KATAKANA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30CA"},12491:{"value":"30CB","name":"KATAKANA LETTER NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30CB"},12492:{"value":"30CC","name":"KATAKANA LETTER NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30CC"},12493:{"value":"30CD","name":"KATAKANA LETTER NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30CD"},12494:{"value":"30CE","name":"KATAKANA LETTER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30CE"},12495:{"value":"30CF","name":"KATAKANA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30CF"},12496:{"value":"30D0","name":"KATAKANA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30CF 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D0"},12497:{"value":"30D1","name":"KATAKANA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30CF 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D1"},12498:{"value":"30D2","name":"KATAKANA LETTER HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D2"},12499:{"value":"30D3","name":"KATAKANA LETTER BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30D2 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D3"},12500:{"value":"30D4","name":"KATAKANA LETTER PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30D2 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D4"},12501:{"value":"30D5","name":"KATAKANA LETTER HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D5"},12502:{"value":"30D6","name":"KATAKANA LETTER BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30D5 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D6"},12503:{"value":"30D7","name":"KATAKANA LETTER PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30D5 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D7"},12504:{"value":"30D8","name":"KATAKANA LETTER HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D8"},12505:{"value":"30D9","name":"KATAKANA LETTER BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30D8 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30D9"},12506:{"value":"30DA","name":"KATAKANA LETTER PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30D8 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30DA"},12507:{"value":"30DB","name":"KATAKANA LETTER HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30DB"},12508:{"value":"30DC","name":"KATAKANA LETTER BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30DB 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30DC"},12509:{"value":"30DD","name":"KATAKANA LETTER PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30DB 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30DD"},12510:{"value":"30DE","name":"KATAKANA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30DE"},12511:{"value":"30DF","name":"KATAKANA LETTER MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30DF"},12512:{"value":"30E0","name":"KATAKANA LETTER MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E0"},12513:{"value":"30E1","name":"KATAKANA LETTER ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E1"},12514:{"value":"30E2","name":"KATAKANA LETTER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E2"},12515:{"value":"30E3","name":"KATAKANA LETTER SMALL YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E3"},12516:{"value":"30E4","name":"KATAKANA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E4"},12517:{"value":"30E5","name":"KATAKANA LETTER SMALL YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E5"},12518:{"value":"30E6","name":"KATAKANA LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E6"},12519:{"value":"30E7","name":"KATAKANA LETTER SMALL YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E7"},12520:{"value":"30E8","name":"KATAKANA LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E8"},12521:{"value":"30E9","name":"KATAKANA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30E9"},12522:{"value":"30EA","name":"KATAKANA LETTER RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30EA"},12523:{"value":"30EB","name":"KATAKANA LETTER RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30EB"},12524:{"value":"30EC","name":"KATAKANA LETTER RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30EC"},12525:{"value":"30ED","name":"KATAKANA LETTER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30ED"},12526:{"value":"30EE","name":"KATAKANA LETTER SMALL WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30EE"},12527:{"value":"30EF","name":"KATAKANA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30EF"},12528:{"value":"30F0","name":"KATAKANA LETTER WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F0"},12529:{"value":"30F1","name":"KATAKANA LETTER WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F1"},12530:{"value":"30F2","name":"KATAKANA LETTER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F2"},12531:{"value":"30F3","name":"KATAKANA LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F3"},12532:{"value":"30F4","name":"KATAKANA LETTER VU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30A6 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F4"},12533:{"value":"30F5","name":"KATAKANA LETTER SMALL KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F5"},12534:{"value":"30F6","name":"KATAKANA LETTER SMALL KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F6"},12535:{"value":"30F7","name":"KATAKANA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30EF 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F7"},12536:{"value":"30F8","name":"KATAKANA LETTER VI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30F0 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F8"},12537:{"value":"30F9","name":"KATAKANA LETTER VE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30F1 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30F9"},12538:{"value":"30FA","name":"KATAKANA LETTER VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"30F2 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30FA"},12543:{"value":"30FF","name":"KATAKANA DIGRAPH KOTO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30B3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30FF"},12549:{"value":"3105","name":"BOPOMOFO LETTER B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3105"},12550:{"value":"3106","name":"BOPOMOFO LETTER P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3106"},12551:{"value":"3107","name":"BOPOMOFO LETTER M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3107"},12552:{"value":"3108","name":"BOPOMOFO LETTER F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3108"},12553:{"value":"3109","name":"BOPOMOFO LETTER D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3109"},12554:{"value":"310A","name":"BOPOMOFO LETTER T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u310A"},12555:{"value":"310B","name":"BOPOMOFO LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u310B"},12556:{"value":"310C","name":"BOPOMOFO LETTER L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u310C"},12557:{"value":"310D","name":"BOPOMOFO LETTER G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u310D"},12558:{"value":"310E","name":"BOPOMOFO LETTER K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u310E"},12559:{"value":"310F","name":"BOPOMOFO LETTER H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u310F"},12560:{"value":"3110","name":"BOPOMOFO LETTER J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3110"},12561:{"value":"3111","name":"BOPOMOFO LETTER Q","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3111"},12562:{"value":"3112","name":"BOPOMOFO LETTER X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3112"},12563:{"value":"3113","name":"BOPOMOFO LETTER ZH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3113"},12564:{"value":"3114","name":"BOPOMOFO LETTER CH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3114"},12565:{"value":"3115","name":"BOPOMOFO LETTER SH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3115"},12566:{"value":"3116","name":"BOPOMOFO LETTER R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3116"},12567:{"value":"3117","name":"BOPOMOFO LETTER Z","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3117"},12568:{"value":"3118","name":"BOPOMOFO LETTER C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3118"},12569:{"value":"3119","name":"BOPOMOFO LETTER S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3119"},12570:{"value":"311A","name":"BOPOMOFO LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u311A"},12571:{"value":"311B","name":"BOPOMOFO LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u311B"},12572:{"value":"311C","name":"BOPOMOFO LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u311C"},12573:{"value":"311D","name":"BOPOMOFO LETTER EH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u311D"},12574:{"value":"311E","name":"BOPOMOFO LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u311E"},12575:{"value":"311F","name":"BOPOMOFO LETTER EI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u311F"},12576:{"value":"3120","name":"BOPOMOFO LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3120"},12577:{"value":"3121","name":"BOPOMOFO LETTER OU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3121"},12578:{"value":"3122","name":"BOPOMOFO LETTER AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3122"},12579:{"value":"3123","name":"BOPOMOFO LETTER EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3123"},12580:{"value":"3124","name":"BOPOMOFO LETTER ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3124"},12581:{"value":"3125","name":"BOPOMOFO LETTER ENG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3125"},12582:{"value":"3126","name":"BOPOMOFO LETTER ER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3126"},12583:{"value":"3127","name":"BOPOMOFO LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3127"},12584:{"value":"3128","name":"BOPOMOFO LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3128"},12585:{"value":"3129","name":"BOPOMOFO LETTER IU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3129"},12586:{"value":"312A","name":"BOPOMOFO LETTER V","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u312A"},12587:{"value":"312B","name":"BOPOMOFO LETTER NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u312B"},12588:{"value":"312C","name":"BOPOMOFO LETTER GN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u312C"},12589:{"value":"312D","name":"BOPOMOFO LETTER IH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u312D"},12590:{"value":"312E","name":"BOPOMOFO LETTER O WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u312E"},12591:{"value":"312F","name":"BOPOMOFO LETTER NN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u312F"},12593:{"value":"3131","name":"HANGUL LETTER KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1100","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3131"},12594:{"value":"3132","name":"HANGUL LETTER SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1101","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3132"},12595:{"value":"3133","name":"HANGUL LETTER KIYEOK-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11AA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER GIYEOG SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3133"},12596:{"value":"3134","name":"HANGUL LETTER NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1102","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3134"},12597:{"value":"3135","name":"HANGUL LETTER NIEUN-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NIEUN JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3135"},12598:{"value":"3136","name":"HANGUL LETTER NIEUN-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NIEUN HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3136"},12599:{"value":"3137","name":"HANGUL LETTER TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1103","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3137"},12600:{"value":"3138","name":"HANGUL LETTER SSANGTIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1104","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3138"},12601:{"value":"3139","name":"HANGUL LETTER RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1105","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3139"},12602:{"value":"313A","name":"HANGUL LETTER RIEUL-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11B0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u313A"},12603:{"value":"313B","name":"HANGUL LETTER RIEUL-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL MIEUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u313B"},12604:{"value":"313C","name":"HANGUL LETTER RIEUL-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u313C"},12605:{"value":"313D","name":"HANGUL LETTER RIEUL-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u313D"},12606:{"value":"313E","name":"HANGUL LETTER RIEUL-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u313E"},12607:{"value":"313F","name":"HANGUL LETTER RIEUL-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL PIEUP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u313F"},12608:{"value":"3140","name":"HANGUL LETTER RIEUL-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 111A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3140"},12609:{"value":"3141","name":"HANGUL LETTER MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1106","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3141"},12610:{"value":"3142","name":"HANGUL LETTER PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1107","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3142"},12611:{"value":"3143","name":"HANGUL LETTER SSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1108","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3143"},12612:{"value":"3144","name":"HANGUL LETTER PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1121","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3144"},12613:{"value":"3145","name":"HANGUL LETTER SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1109","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3145"},12614:{"value":"3146","name":"HANGUL LETTER SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 110A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3146"},12615:{"value":"3147","name":"HANGUL LETTER IEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 110B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3147"},12616:{"value":"3148","name":"HANGUL LETTER CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 110C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3148"},12617:{"value":"3149","name":"HANGUL LETTER SSANGCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 110D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3149"},12618:{"value":"314A","name":"HANGUL LETTER CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 110E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER CIEUC","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u314A"},12619:{"value":"314B","name":"HANGUL LETTER KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 110F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER KIYEOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u314B"},12620:{"value":"314C","name":"HANGUL LETTER THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1110","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u314C"},12621:{"value":"314D","name":"HANGUL LETTER PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1111","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER PIEUP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u314D"},12622:{"value":"314E","name":"HANGUL LETTER HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1112","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u314E"},12623:{"value":"314F","name":"HANGUL LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u314F"},12624:{"value":"3150","name":"HANGUL LETTER AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1162","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3150"},12625:{"value":"3151","name":"HANGUL LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1163","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3151"},12626:{"value":"3152","name":"HANGUL LETTER YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1164","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3152"},12627:{"value":"3153","name":"HANGUL LETTER EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1165","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3153"},12628:{"value":"3154","name":"HANGUL LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1166","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3154"},12629:{"value":"3155","name":"HANGUL LETTER YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1167","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3155"},12630:{"value":"3156","name":"HANGUL LETTER YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1168","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3156"},12631:{"value":"3157","name":"HANGUL LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1169","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3157"},12632:{"value":"3158","name":"HANGUL LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 116A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3158"},12633:{"value":"3159","name":"HANGUL LETTER WAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 116B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3159"},12634:{"value":"315A","name":"HANGUL LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 116C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u315A"},12635:{"value":"315B","name":"HANGUL LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 116D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u315B"},12636:{"value":"315C","name":"HANGUL LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 116E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u315C"},12637:{"value":"315D","name":"HANGUL LETTER WEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 116F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u315D"},12638:{"value":"315E","name":"HANGUL LETTER WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1170","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u315E"},12639:{"value":"315F","name":"HANGUL LETTER WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1171","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u315F"},12640:{"value":"3160","name":"HANGUL LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1172","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3160"},12641:{"value":"3161","name":"HANGUL LETTER EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1173","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3161"},12642:{"value":"3162","name":"HANGUL LETTER YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1174","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3162"},12643:{"value":"3163","name":"HANGUL LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1175","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3163"},12644:{"value":"3164","name":"HANGUL FILLER","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1160","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL CAE OM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3164"},12645:{"value":"3165","name":"HANGUL LETTER SSANGNIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1114","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG NIEUN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3165"},12646:{"value":"3166","name":"HANGUL LETTER NIEUN-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1115","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NIEUN DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3166"},12647:{"value":"3167","name":"HANGUL LETTER NIEUN-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NIEUN SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3167"},12648:{"value":"3168","name":"HANGUL LETTER NIEUN-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NIEUN BAN CHI EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3168"},12649:{"value":"3169","name":"HANGUL LETTER RIEUL-KIYEOK-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL GIYEOG SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3169"},12650:{"value":"316A","name":"HANGUL LETTER RIEUL-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u316A"},12651:{"value":"316B","name":"HANGUL LETTER RIEUL-PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11D3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL BIEUB SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u316B"},12652:{"value":"316C","name":"HANGUL LETTER RIEUL-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11D7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL BAN CHI EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u316C"},12653:{"value":"316D","name":"HANGUL LETTER RIEUL-YEORINHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11D9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER LIEUL YEOLIN HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u316D"},12654:{"value":"316E","name":"HANGUL LETTER MIEUM-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 111C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER MIEUM BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u316E"},12655:{"value":"316F","name":"HANGUL LETTER MIEUM-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11DD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER MIEUM SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u316F"},12656:{"value":"3170","name":"HANGUL LETTER MIEUM-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB BAN CHI EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3170"},12657:{"value":"3171","name":"HANGUL LETTER KAPYEOUNMIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 111D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER MIEUM SUN GYEONG EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3171"},12658:{"value":"3172","name":"HANGUL LETTER PIEUP-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 111E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3172"},12659:{"value":"3173","name":"HANGUL LETTER PIEUP-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1120","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3173"},12660:{"value":"3174","name":"HANGUL LETTER PIEUP-SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1122","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB SIOS GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3174"},12661:{"value":"3175","name":"HANGUL LETTER PIEUP-SIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1123","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB SIOS DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3175"},12662:{"value":"3176","name":"HANGUL LETTER PIEUP-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1127","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3176"},12663:{"value":"3177","name":"HANGUL LETTER PIEUP-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1129","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3177"},12664:{"value":"3178","name":"HANGUL LETTER KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 112B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BIEUB SUN GYEONG EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3178"},12665:{"value":"3179","name":"HANGUL LETTER KAPYEOUNSSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 112C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG BIEUB SUN GYEONG EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3179"},12666:{"value":"317A","name":"HANGUL LETTER SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 112D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SIOS GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u317A"},12667:{"value":"317B","name":"HANGUL LETTER SIOS-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 112E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SIOS NIEUN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u317B"},12668:{"value":"317C","name":"HANGUL LETTER SIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 112F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SIOS DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u317C"},12669:{"value":"317D","name":"HANGUL LETTER SIOS-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1132","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SIOS BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u317D"},12670:{"value":"317E","name":"HANGUL LETTER SIOS-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1136","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SIOS JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u317E"},12671:{"value":"317F","name":"HANGUL LETTER PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1140","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER BAN CHI EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u317F"},12672:{"value":"3180","name":"HANGUL LETTER SSANGIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1147","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG IEUNG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3180"},12673:{"value":"3181","name":"HANGUL LETTER YESIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 114C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NGIEUNG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3181"},12674:{"value":"3182","name":"HANGUL LETTER YESIEUNG-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NGIEUNG SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3182"},12675:{"value":"3183","name":"HANGUL LETTER YESIEUNG-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER NGIEUNG BAN CHI EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3183"},12676:{"value":"3184","name":"HANGUL LETTER KAPYEOUNPHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1157","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER PIEUP SUN GYEONG EUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3184"},12677:{"value":"3185","name":"HANGUL LETTER SSANGHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1158","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER SSANG HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3185"},12678:{"value":"3186","name":"HANGUL LETTER YEORINHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1159","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YEOLIN HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3186"},12679:{"value":"3187","name":"HANGUL LETTER YO-YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1184","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YOYA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3187"},12680:{"value":"3188","name":"HANGUL LETTER YO-YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1185","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YOYAE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3188"},12681:{"value":"3189","name":"HANGUL LETTER YO-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1188","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YOI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3189"},12682:{"value":"318A","name":"HANGUL LETTER YU-YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1191","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YUYEO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u318A"},12683:{"value":"318B","name":"HANGUL LETTER YU-YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1192","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YUYE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u318B"},12684:{"value":"318C","name":"HANGUL LETTER YU-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 1194","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER YUI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u318C"},12685:{"value":"318D","name":"HANGUL LETTER ARAEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 119E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER ALAE A","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u318D"},12686:{"value":"318E","name":"HANGUL LETTER ARAEAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 11A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HANGUL LETTER ALAE AE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u318E"},12704:{"value":"31A0","name":"BOPOMOFO LETTER BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A0"},12705:{"value":"31A1","name":"BOPOMOFO LETTER ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A1"},12706:{"value":"31A2","name":"BOPOMOFO LETTER JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A2"},12707:{"value":"31A3","name":"BOPOMOFO LETTER GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A3"},12708:{"value":"31A4","name":"BOPOMOFO LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A4"},12709:{"value":"31A5","name":"BOPOMOFO LETTER ENN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A5"},12710:{"value":"31A6","name":"BOPOMOFO LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A6"},12711:{"value":"31A7","name":"BOPOMOFO LETTER ONN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A7"},12712:{"value":"31A8","name":"BOPOMOFO LETTER IR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A8"},12713:{"value":"31A9","name":"BOPOMOFO LETTER ANN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31A9"},12714:{"value":"31AA","name":"BOPOMOFO LETTER INN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31AA"},12715:{"value":"31AB","name":"BOPOMOFO LETTER UNN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31AB"},12716:{"value":"31AC","name":"BOPOMOFO LETTER IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31AC"},12717:{"value":"31AD","name":"BOPOMOFO LETTER NGG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31AD"},12718:{"value":"31AE","name":"BOPOMOFO LETTER AINN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31AE"},12719:{"value":"31AF","name":"BOPOMOFO LETTER AUNN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31AF"},12720:{"value":"31B0","name":"BOPOMOFO LETTER AM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B0"},12721:{"value":"31B1","name":"BOPOMOFO LETTER OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B1"},12722:{"value":"31B2","name":"BOPOMOFO LETTER ONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B2"},12723:{"value":"31B3","name":"BOPOMOFO LETTER INNN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B3"},12724:{"value":"31B4","name":"BOPOMOFO FINAL LETTER P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B4"},12725:{"value":"31B5","name":"BOPOMOFO FINAL LETTER T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B5"},12726:{"value":"31B6","name":"BOPOMOFO FINAL LETTER K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B6"},12727:{"value":"31B7","name":"BOPOMOFO FINAL LETTER H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B7"},12728:{"value":"31B8","name":"BOPOMOFO LETTER GH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B8"},12729:{"value":"31B9","name":"BOPOMOFO LETTER LH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31B9"},12730:{"value":"31BA","name":"BOPOMOFO LETTER ZY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31BA"},12731:{"value":"31BB","name":"BOPOMOFO FINAL LETTER G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31BB"},12732:{"value":"31BC","name":"BOPOMOFO LETTER GW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31BC"},12733:{"value":"31BD","name":"BOPOMOFO LETTER KW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31BD"},12734:{"value":"31BE","name":"BOPOMOFO LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31BE"},12735:{"value":"31BF","name":"BOPOMOFO LETTER AH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31BF"},12784:{"value":"31F0","name":"KATAKANA LETTER SMALL KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F0"},12785:{"value":"31F1","name":"KATAKANA LETTER SMALL SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F1"},12786:{"value":"31F2","name":"KATAKANA LETTER SMALL SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F2"},12787:{"value":"31F3","name":"KATAKANA LETTER SMALL TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F3"},12788:{"value":"31F4","name":"KATAKANA LETTER SMALL NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F4"},12789:{"value":"31F5","name":"KATAKANA LETTER SMALL HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F5"},12790:{"value":"31F6","name":"KATAKANA LETTER SMALL HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F6"},12791:{"value":"31F7","name":"KATAKANA LETTER SMALL HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F7"},12792:{"value":"31F8","name":"KATAKANA LETTER SMALL HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F8"},12793:{"value":"31F9","name":"KATAKANA LETTER SMALL HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31F9"},12794:{"value":"31FA","name":"KATAKANA LETTER SMALL MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31FA"},12795:{"value":"31FB","name":"KATAKANA LETTER SMALL RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31FB"},12796:{"value":"31FC","name":"KATAKANA LETTER SMALL RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31FC"},12797:{"value":"31FD","name":"KATAKANA LETTER SMALL RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31FD"},12798:{"value":"31FE","name":"KATAKANA LETTER SMALL RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31FE"},12799:{"value":"31FF","name":"KATAKANA LETTER SMALL RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31FF"},13312:{"value":"3400","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3400"},19903:{"value":"4DBF","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DBF"},19968:{"value":"4E00","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4E00"},40959:{"value":"9FFF","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u9FFF"},40960:{"value":"A000","name":"YI SYLLABLE IT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA000"},40961:{"value":"A001","name":"YI SYLLABLE IX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA001"},40962:{"value":"A002","name":"YI SYLLABLE I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA002"},40963:{"value":"A003","name":"YI SYLLABLE IP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA003"},40964:{"value":"A004","name":"YI SYLLABLE IET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA004"},40965:{"value":"A005","name":"YI SYLLABLE IEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA005"},40966:{"value":"A006","name":"YI SYLLABLE IE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA006"},40967:{"value":"A007","name":"YI SYLLABLE IEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA007"},40968:{"value":"A008","name":"YI SYLLABLE AT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA008"},40969:{"value":"A009","name":"YI SYLLABLE AX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA009"},40970:{"value":"A00A","name":"YI SYLLABLE A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA00A"},40971:{"value":"A00B","name":"YI SYLLABLE AP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA00B"},40972:{"value":"A00C","name":"YI SYLLABLE UOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA00C"},40973:{"value":"A00D","name":"YI SYLLABLE UO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA00D"},40974:{"value":"A00E","name":"YI SYLLABLE UOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA00E"},40975:{"value":"A00F","name":"YI SYLLABLE OT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA00F"},40976:{"value":"A010","name":"YI SYLLABLE OX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA010"},40977:{"value":"A011","name":"YI SYLLABLE O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA011"},40978:{"value":"A012","name":"YI SYLLABLE OP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA012"},40979:{"value":"A013","name":"YI SYLLABLE EX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA013"},40980:{"value":"A014","name":"YI SYLLABLE E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA014"},40982:{"value":"A016","name":"YI SYLLABLE BIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA016"},40983:{"value":"A017","name":"YI SYLLABLE BIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA017"},40984:{"value":"A018","name":"YI SYLLABLE BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA018"},40985:{"value":"A019","name":"YI SYLLABLE BIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA019"},40986:{"value":"A01A","name":"YI SYLLABLE BIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA01A"},40987:{"value":"A01B","name":"YI SYLLABLE BIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA01B"},40988:{"value":"A01C","name":"YI SYLLABLE BIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA01C"},40989:{"value":"A01D","name":"YI SYLLABLE BIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA01D"},40990:{"value":"A01E","name":"YI SYLLABLE BAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA01E"},40991:{"value":"A01F","name":"YI SYLLABLE BAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA01F"},40992:{"value":"A020","name":"YI SYLLABLE BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA020"},40993:{"value":"A021","name":"YI SYLLABLE BAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA021"},40994:{"value":"A022","name":"YI SYLLABLE BUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA022"},40995:{"value":"A023","name":"YI SYLLABLE BUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA023"},40996:{"value":"A024","name":"YI SYLLABLE BUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA024"},40997:{"value":"A025","name":"YI SYLLABLE BOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA025"},40998:{"value":"A026","name":"YI SYLLABLE BOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA026"},40999:{"value":"A027","name":"YI SYLLABLE BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA027"},41000:{"value":"A028","name":"YI SYLLABLE BOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA028"},41001:{"value":"A029","name":"YI SYLLABLE BEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA029"},41002:{"value":"A02A","name":"YI SYLLABLE BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA02A"},41003:{"value":"A02B","name":"YI SYLLABLE BEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA02B"},41004:{"value":"A02C","name":"YI SYLLABLE BUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA02C"},41005:{"value":"A02D","name":"YI SYLLABLE BUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA02D"},41006:{"value":"A02E","name":"YI SYLLABLE BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA02E"},41007:{"value":"A02F","name":"YI SYLLABLE BUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA02F"},41008:{"value":"A030","name":"YI SYLLABLE BURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA030"},41009:{"value":"A031","name":"YI SYLLABLE BUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA031"},41010:{"value":"A032","name":"YI SYLLABLE BYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA032"},41011:{"value":"A033","name":"YI SYLLABLE BYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA033"},41012:{"value":"A034","name":"YI SYLLABLE BY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA034"},41013:{"value":"A035","name":"YI SYLLABLE BYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA035"},41014:{"value":"A036","name":"YI SYLLABLE BYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA036"},41015:{"value":"A037","name":"YI SYLLABLE BYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA037"},41016:{"value":"A038","name":"YI SYLLABLE PIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA038"},41017:{"value":"A039","name":"YI SYLLABLE PIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA039"},41018:{"value":"A03A","name":"YI SYLLABLE PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA03A"},41019:{"value":"A03B","name":"YI SYLLABLE PIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA03B"},41020:{"value":"A03C","name":"YI SYLLABLE PIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA03C"},41021:{"value":"A03D","name":"YI SYLLABLE PIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA03D"},41022:{"value":"A03E","name":"YI SYLLABLE PIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA03E"},41023:{"value":"A03F","name":"YI SYLLABLE PAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA03F"},41024:{"value":"A040","name":"YI SYLLABLE PAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA040"},41025:{"value":"A041","name":"YI SYLLABLE PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA041"},41026:{"value":"A042","name":"YI SYLLABLE PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA042"},41027:{"value":"A043","name":"YI SYLLABLE PUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA043"},41028:{"value":"A044","name":"YI SYLLABLE PUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA044"},41029:{"value":"A045","name":"YI SYLLABLE PUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA045"},41030:{"value":"A046","name":"YI SYLLABLE POT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA046"},41031:{"value":"A047","name":"YI SYLLABLE POX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA047"},41032:{"value":"A048","name":"YI SYLLABLE PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA048"},41033:{"value":"A049","name":"YI SYLLABLE POP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA049"},41034:{"value":"A04A","name":"YI SYLLABLE PUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA04A"},41035:{"value":"A04B","name":"YI SYLLABLE PUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA04B"},41036:{"value":"A04C","name":"YI SYLLABLE PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA04C"},41037:{"value":"A04D","name":"YI SYLLABLE PUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA04D"},41038:{"value":"A04E","name":"YI SYLLABLE PURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA04E"},41039:{"value":"A04F","name":"YI SYLLABLE PUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA04F"},41040:{"value":"A050","name":"YI SYLLABLE PYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA050"},41041:{"value":"A051","name":"YI SYLLABLE PYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA051"},41042:{"value":"A052","name":"YI SYLLABLE PY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA052"},41043:{"value":"A053","name":"YI SYLLABLE PYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA053"},41044:{"value":"A054","name":"YI SYLLABLE PYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA054"},41045:{"value":"A055","name":"YI SYLLABLE PYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA055"},41046:{"value":"A056","name":"YI SYLLABLE BBIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA056"},41047:{"value":"A057","name":"YI SYLLABLE BBIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA057"},41048:{"value":"A058","name":"YI SYLLABLE BBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA058"},41049:{"value":"A059","name":"YI SYLLABLE BBIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA059"},41050:{"value":"A05A","name":"YI SYLLABLE BBIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA05A"},41051:{"value":"A05B","name":"YI SYLLABLE BBIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA05B"},41052:{"value":"A05C","name":"YI SYLLABLE BBIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA05C"},41053:{"value":"A05D","name":"YI SYLLABLE BBIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA05D"},41054:{"value":"A05E","name":"YI SYLLABLE BBAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA05E"},41055:{"value":"A05F","name":"YI SYLLABLE BBAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA05F"},41056:{"value":"A060","name":"YI SYLLABLE BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA060"},41057:{"value":"A061","name":"YI SYLLABLE BBAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA061"},41058:{"value":"A062","name":"YI SYLLABLE BBUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA062"},41059:{"value":"A063","name":"YI SYLLABLE BBUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA063"},41060:{"value":"A064","name":"YI SYLLABLE BBUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA064"},41061:{"value":"A065","name":"YI SYLLABLE BBOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA065"},41062:{"value":"A066","name":"YI SYLLABLE BBOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA066"},41063:{"value":"A067","name":"YI SYLLABLE BBO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA067"},41064:{"value":"A068","name":"YI SYLLABLE BBOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA068"},41065:{"value":"A069","name":"YI SYLLABLE BBEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA069"},41066:{"value":"A06A","name":"YI SYLLABLE BBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA06A"},41067:{"value":"A06B","name":"YI SYLLABLE BBEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA06B"},41068:{"value":"A06C","name":"YI SYLLABLE BBUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA06C"},41069:{"value":"A06D","name":"YI SYLLABLE BBUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA06D"},41070:{"value":"A06E","name":"YI SYLLABLE BBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA06E"},41071:{"value":"A06F","name":"YI SYLLABLE BBUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA06F"},41072:{"value":"A070","name":"YI SYLLABLE BBURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA070"},41073:{"value":"A071","name":"YI SYLLABLE BBUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA071"},41074:{"value":"A072","name":"YI SYLLABLE BBYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA072"},41075:{"value":"A073","name":"YI SYLLABLE BBYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA073"},41076:{"value":"A074","name":"YI SYLLABLE BBY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA074"},41077:{"value":"A075","name":"YI SYLLABLE BBYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA075"},41078:{"value":"A076","name":"YI SYLLABLE NBIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA076"},41079:{"value":"A077","name":"YI SYLLABLE NBIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA077"},41080:{"value":"A078","name":"YI SYLLABLE NBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA078"},41081:{"value":"A079","name":"YI SYLLABLE NBIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA079"},41082:{"value":"A07A","name":"YI SYLLABLE NBIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA07A"},41083:{"value":"A07B","name":"YI SYLLABLE NBIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA07B"},41084:{"value":"A07C","name":"YI SYLLABLE NBIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA07C"},41085:{"value":"A07D","name":"YI SYLLABLE NBAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA07D"},41086:{"value":"A07E","name":"YI SYLLABLE NBAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA07E"},41087:{"value":"A07F","name":"YI SYLLABLE NBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA07F"},41088:{"value":"A080","name":"YI SYLLABLE NBAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA080"},41089:{"value":"A081","name":"YI SYLLABLE NBOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA081"},41090:{"value":"A082","name":"YI SYLLABLE NBOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA082"},41091:{"value":"A083","name":"YI SYLLABLE NBO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA083"},41092:{"value":"A084","name":"YI SYLLABLE NBOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA084"},41093:{"value":"A085","name":"YI SYLLABLE NBUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA085"},41094:{"value":"A086","name":"YI SYLLABLE NBUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA086"},41095:{"value":"A087","name":"YI SYLLABLE NBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA087"},41096:{"value":"A088","name":"YI SYLLABLE NBUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA088"},41097:{"value":"A089","name":"YI SYLLABLE NBURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA089"},41098:{"value":"A08A","name":"YI SYLLABLE NBUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA08A"},41099:{"value":"A08B","name":"YI SYLLABLE NBYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA08B"},41100:{"value":"A08C","name":"YI SYLLABLE NBYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA08C"},41101:{"value":"A08D","name":"YI SYLLABLE NBY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA08D"},41102:{"value":"A08E","name":"YI SYLLABLE NBYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA08E"},41103:{"value":"A08F","name":"YI SYLLABLE NBYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA08F"},41104:{"value":"A090","name":"YI SYLLABLE NBYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA090"},41105:{"value":"A091","name":"YI SYLLABLE HMIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA091"},41106:{"value":"A092","name":"YI SYLLABLE HMIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA092"},41107:{"value":"A093","name":"YI SYLLABLE HMI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA093"},41108:{"value":"A094","name":"YI SYLLABLE HMIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA094"},41109:{"value":"A095","name":"YI SYLLABLE HMIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA095"},41110:{"value":"A096","name":"YI SYLLABLE HMIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA096"},41111:{"value":"A097","name":"YI SYLLABLE HMIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA097"},41112:{"value":"A098","name":"YI SYLLABLE HMAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA098"},41113:{"value":"A099","name":"YI SYLLABLE HMAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA099"},41114:{"value":"A09A","name":"YI SYLLABLE HMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA09A"},41115:{"value":"A09B","name":"YI SYLLABLE HMAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA09B"},41116:{"value":"A09C","name":"YI SYLLABLE HMUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA09C"},41117:{"value":"A09D","name":"YI SYLLABLE HMUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA09D"},41118:{"value":"A09E","name":"YI SYLLABLE HMUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA09E"},41119:{"value":"A09F","name":"YI SYLLABLE HMOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA09F"},41120:{"value":"A0A0","name":"YI SYLLABLE HMOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A0"},41121:{"value":"A0A1","name":"YI SYLLABLE HMO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A1"},41122:{"value":"A0A2","name":"YI SYLLABLE HMOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A2"},41123:{"value":"A0A3","name":"YI SYLLABLE HMUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A3"},41124:{"value":"A0A4","name":"YI SYLLABLE HMUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A4"},41125:{"value":"A0A5","name":"YI SYLLABLE HMU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A5"},41126:{"value":"A0A6","name":"YI SYLLABLE HMUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A6"},41127:{"value":"A0A7","name":"YI SYLLABLE HMURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A7"},41128:{"value":"A0A8","name":"YI SYLLABLE HMUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A8"},41129:{"value":"A0A9","name":"YI SYLLABLE HMYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0A9"},41130:{"value":"A0AA","name":"YI SYLLABLE HMY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0AA"},41131:{"value":"A0AB","name":"YI SYLLABLE HMYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0AB"},41132:{"value":"A0AC","name":"YI SYLLABLE HMYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0AC"},41133:{"value":"A0AD","name":"YI SYLLABLE HMYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0AD"},41134:{"value":"A0AE","name":"YI SYLLABLE MIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0AE"},41135:{"value":"A0AF","name":"YI SYLLABLE MIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0AF"},41136:{"value":"A0B0","name":"YI SYLLABLE MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B0"},41137:{"value":"A0B1","name":"YI SYLLABLE MIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B1"},41138:{"value":"A0B2","name":"YI SYLLABLE MIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B2"},41139:{"value":"A0B3","name":"YI SYLLABLE MIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B3"},41140:{"value":"A0B4","name":"YI SYLLABLE MIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B4"},41141:{"value":"A0B5","name":"YI SYLLABLE MAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B5"},41142:{"value":"A0B6","name":"YI SYLLABLE MAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B6"},41143:{"value":"A0B7","name":"YI SYLLABLE MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B7"},41144:{"value":"A0B8","name":"YI SYLLABLE MAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B8"},41145:{"value":"A0B9","name":"YI SYLLABLE MUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0B9"},41146:{"value":"A0BA","name":"YI SYLLABLE MUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0BA"},41147:{"value":"A0BB","name":"YI SYLLABLE MUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0BB"},41148:{"value":"A0BC","name":"YI SYLLABLE MUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0BC"},41149:{"value":"A0BD","name":"YI SYLLABLE MOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0BD"},41150:{"value":"A0BE","name":"YI SYLLABLE MOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0BE"},41151:{"value":"A0BF","name":"YI SYLLABLE MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0BF"},41152:{"value":"A0C0","name":"YI SYLLABLE MOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C0"},41153:{"value":"A0C1","name":"YI SYLLABLE MEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C1"},41154:{"value":"A0C2","name":"YI SYLLABLE ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C2"},41155:{"value":"A0C3","name":"YI SYLLABLE MUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C3"},41156:{"value":"A0C4","name":"YI SYLLABLE MUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C4"},41157:{"value":"A0C5","name":"YI SYLLABLE MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C5"},41158:{"value":"A0C6","name":"YI SYLLABLE MUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C6"},41159:{"value":"A0C7","name":"YI SYLLABLE MURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C7"},41160:{"value":"A0C8","name":"YI SYLLABLE MUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C8"},41161:{"value":"A0C9","name":"YI SYLLABLE MYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0C9"},41162:{"value":"A0CA","name":"YI SYLLABLE MYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0CA"},41163:{"value":"A0CB","name":"YI SYLLABLE MY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0CB"},41164:{"value":"A0CC","name":"YI SYLLABLE MYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0CC"},41165:{"value":"A0CD","name":"YI SYLLABLE FIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0CD"},41166:{"value":"A0CE","name":"YI SYLLABLE FIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0CE"},41167:{"value":"A0CF","name":"YI SYLLABLE FI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0CF"},41168:{"value":"A0D0","name":"YI SYLLABLE FIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D0"},41169:{"value":"A0D1","name":"YI SYLLABLE FAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D1"},41170:{"value":"A0D2","name":"YI SYLLABLE FAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D2"},41171:{"value":"A0D3","name":"YI SYLLABLE FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D3"},41172:{"value":"A0D4","name":"YI SYLLABLE FAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D4"},41173:{"value":"A0D5","name":"YI SYLLABLE FOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D5"},41174:{"value":"A0D6","name":"YI SYLLABLE FO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D6"},41175:{"value":"A0D7","name":"YI SYLLABLE FOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D7"},41176:{"value":"A0D8","name":"YI SYLLABLE FUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D8"},41177:{"value":"A0D9","name":"YI SYLLABLE FUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0D9"},41178:{"value":"A0DA","name":"YI SYLLABLE FU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0DA"},41179:{"value":"A0DB","name":"YI SYLLABLE FUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0DB"},41180:{"value":"A0DC","name":"YI SYLLABLE FURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0DC"},41181:{"value":"A0DD","name":"YI SYLLABLE FUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0DD"},41182:{"value":"A0DE","name":"YI SYLLABLE FYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0DE"},41183:{"value":"A0DF","name":"YI SYLLABLE FYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0DF"},41184:{"value":"A0E0","name":"YI SYLLABLE FY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E0"},41185:{"value":"A0E1","name":"YI SYLLABLE FYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E1"},41186:{"value":"A0E2","name":"YI SYLLABLE VIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E2"},41187:{"value":"A0E3","name":"YI SYLLABLE VIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E3"},41188:{"value":"A0E4","name":"YI SYLLABLE VI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E4"},41189:{"value":"A0E5","name":"YI SYLLABLE VIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E5"},41190:{"value":"A0E6","name":"YI SYLLABLE VIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E6"},41191:{"value":"A0E7","name":"YI SYLLABLE VIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E7"},41192:{"value":"A0E8","name":"YI SYLLABLE VIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E8"},41193:{"value":"A0E9","name":"YI SYLLABLE VIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0E9"},41194:{"value":"A0EA","name":"YI SYLLABLE VAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0EA"},41195:{"value":"A0EB","name":"YI SYLLABLE VAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0EB"},41196:{"value":"A0EC","name":"YI SYLLABLE VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0EC"},41197:{"value":"A0ED","name":"YI SYLLABLE VAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0ED"},41198:{"value":"A0EE","name":"YI SYLLABLE VOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0EE"},41199:{"value":"A0EF","name":"YI SYLLABLE VOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0EF"},41200:{"value":"A0F0","name":"YI SYLLABLE VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F0"},41201:{"value":"A0F1","name":"YI SYLLABLE VOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F1"},41202:{"value":"A0F2","name":"YI SYLLABLE VEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F2"},41203:{"value":"A0F3","name":"YI SYLLABLE VEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F3"},41204:{"value":"A0F4","name":"YI SYLLABLE VUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F4"},41205:{"value":"A0F5","name":"YI SYLLABLE VUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F5"},41206:{"value":"A0F6","name":"YI SYLLABLE VU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F6"},41207:{"value":"A0F7","name":"YI SYLLABLE VUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F7"},41208:{"value":"A0F8","name":"YI SYLLABLE VURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F8"},41209:{"value":"A0F9","name":"YI SYLLABLE VUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0F9"},41210:{"value":"A0FA","name":"YI SYLLABLE VYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0FA"},41211:{"value":"A0FB","name":"YI SYLLABLE VYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0FB"},41212:{"value":"A0FC","name":"YI SYLLABLE VY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0FC"},41213:{"value":"A0FD","name":"YI SYLLABLE VYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0FD"},41214:{"value":"A0FE","name":"YI SYLLABLE VYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0FE"},41215:{"value":"A0FF","name":"YI SYLLABLE VYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA0FF"},41216:{"value":"A100","name":"YI SYLLABLE DIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA100"},41217:{"value":"A101","name":"YI SYLLABLE DIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA101"},41218:{"value":"A102","name":"YI SYLLABLE DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA102"},41219:{"value":"A103","name":"YI SYLLABLE DIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA103"},41220:{"value":"A104","name":"YI SYLLABLE DIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA104"},41221:{"value":"A105","name":"YI SYLLABLE DIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA105"},41222:{"value":"A106","name":"YI SYLLABLE DIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA106"},41223:{"value":"A107","name":"YI SYLLABLE DAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA107"},41224:{"value":"A108","name":"YI SYLLABLE DAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA108"},41225:{"value":"A109","name":"YI SYLLABLE DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA109"},41226:{"value":"A10A","name":"YI SYLLABLE DAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA10A"},41227:{"value":"A10B","name":"YI SYLLABLE DUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA10B"},41228:{"value":"A10C","name":"YI SYLLABLE DUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA10C"},41229:{"value":"A10D","name":"YI SYLLABLE DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA10D"},41230:{"value":"A10E","name":"YI SYLLABLE DOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA10E"},41231:{"value":"A10F","name":"YI SYLLABLE DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA10F"},41232:{"value":"A110","name":"YI SYLLABLE DOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA110"},41233:{"value":"A111","name":"YI SYLLABLE DEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA111"},41234:{"value":"A112","name":"YI SYLLABLE DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA112"},41235:{"value":"A113","name":"YI SYLLABLE DEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA113"},41236:{"value":"A114","name":"YI SYLLABLE DUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA114"},41237:{"value":"A115","name":"YI SYLLABLE DUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA115"},41238:{"value":"A116","name":"YI SYLLABLE DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA116"},41239:{"value":"A117","name":"YI SYLLABLE DUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA117"},41240:{"value":"A118","name":"YI SYLLABLE DURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA118"},41241:{"value":"A119","name":"YI SYLLABLE DUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA119"},41242:{"value":"A11A","name":"YI SYLLABLE TIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA11A"},41243:{"value":"A11B","name":"YI SYLLABLE TIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA11B"},41244:{"value":"A11C","name":"YI SYLLABLE TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA11C"},41245:{"value":"A11D","name":"YI SYLLABLE TIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA11D"},41246:{"value":"A11E","name":"YI SYLLABLE TIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA11E"},41247:{"value":"A11F","name":"YI SYLLABLE TIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA11F"},41248:{"value":"A120","name":"YI SYLLABLE TIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA120"},41249:{"value":"A121","name":"YI SYLLABLE TAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA121"},41250:{"value":"A122","name":"YI SYLLABLE TAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA122"},41251:{"value":"A123","name":"YI SYLLABLE TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA123"},41252:{"value":"A124","name":"YI SYLLABLE TAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA124"},41253:{"value":"A125","name":"YI SYLLABLE TUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA125"},41254:{"value":"A126","name":"YI SYLLABLE TUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA126"},41255:{"value":"A127","name":"YI SYLLABLE TUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA127"},41256:{"value":"A128","name":"YI SYLLABLE TUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA128"},41257:{"value":"A129","name":"YI SYLLABLE TOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA129"},41258:{"value":"A12A","name":"YI SYLLABLE TOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA12A"},41259:{"value":"A12B","name":"YI SYLLABLE TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA12B"},41260:{"value":"A12C","name":"YI SYLLABLE TOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA12C"},41261:{"value":"A12D","name":"YI SYLLABLE TEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA12D"},41262:{"value":"A12E","name":"YI SYLLABLE TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA12E"},41263:{"value":"A12F","name":"YI SYLLABLE TEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA12F"},41264:{"value":"A130","name":"YI SYLLABLE TUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA130"},41265:{"value":"A131","name":"YI SYLLABLE TUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA131"},41266:{"value":"A132","name":"YI SYLLABLE TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA132"},41267:{"value":"A133","name":"YI SYLLABLE TUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA133"},41268:{"value":"A134","name":"YI SYLLABLE TURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA134"},41269:{"value":"A135","name":"YI SYLLABLE TUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA135"},41270:{"value":"A136","name":"YI SYLLABLE DDIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA136"},41271:{"value":"A137","name":"YI SYLLABLE DDIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA137"},41272:{"value":"A138","name":"YI SYLLABLE DDI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA138"},41273:{"value":"A139","name":"YI SYLLABLE DDIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA139"},41274:{"value":"A13A","name":"YI SYLLABLE DDIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA13A"},41275:{"value":"A13B","name":"YI SYLLABLE DDIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA13B"},41276:{"value":"A13C","name":"YI SYLLABLE DDIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA13C"},41277:{"value":"A13D","name":"YI SYLLABLE DDAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA13D"},41278:{"value":"A13E","name":"YI SYLLABLE DDAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA13E"},41279:{"value":"A13F","name":"YI SYLLABLE DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA13F"},41280:{"value":"A140","name":"YI SYLLABLE DDAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA140"},41281:{"value":"A141","name":"YI SYLLABLE DDUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA141"},41282:{"value":"A142","name":"YI SYLLABLE DDUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA142"},41283:{"value":"A143","name":"YI SYLLABLE DDUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA143"},41284:{"value":"A144","name":"YI SYLLABLE DDOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA144"},41285:{"value":"A145","name":"YI SYLLABLE DDOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA145"},41286:{"value":"A146","name":"YI SYLLABLE DDO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA146"},41287:{"value":"A147","name":"YI SYLLABLE DDOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA147"},41288:{"value":"A148","name":"YI SYLLABLE DDEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA148"},41289:{"value":"A149","name":"YI SYLLABLE DDE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA149"},41290:{"value":"A14A","name":"YI SYLLABLE DDEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA14A"},41291:{"value":"A14B","name":"YI SYLLABLE DDUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA14B"},41292:{"value":"A14C","name":"YI SYLLABLE DDUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA14C"},41293:{"value":"A14D","name":"YI SYLLABLE DDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA14D"},41294:{"value":"A14E","name":"YI SYLLABLE DDUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA14E"},41295:{"value":"A14F","name":"YI SYLLABLE DDURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA14F"},41296:{"value":"A150","name":"YI SYLLABLE DDUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA150"},41297:{"value":"A151","name":"YI SYLLABLE NDIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA151"},41298:{"value":"A152","name":"YI SYLLABLE NDIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA152"},41299:{"value":"A153","name":"YI SYLLABLE NDI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA153"},41300:{"value":"A154","name":"YI SYLLABLE NDIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA154"},41301:{"value":"A155","name":"YI SYLLABLE NDIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA155"},41302:{"value":"A156","name":"YI SYLLABLE NDIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA156"},41303:{"value":"A157","name":"YI SYLLABLE NDAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA157"},41304:{"value":"A158","name":"YI SYLLABLE NDAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA158"},41305:{"value":"A159","name":"YI SYLLABLE NDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA159"},41306:{"value":"A15A","name":"YI SYLLABLE NDAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA15A"},41307:{"value":"A15B","name":"YI SYLLABLE NDOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA15B"},41308:{"value":"A15C","name":"YI SYLLABLE NDOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA15C"},41309:{"value":"A15D","name":"YI SYLLABLE NDO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA15D"},41310:{"value":"A15E","name":"YI SYLLABLE NDOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA15E"},41311:{"value":"A15F","name":"YI SYLLABLE NDEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA15F"},41312:{"value":"A160","name":"YI SYLLABLE NDE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA160"},41313:{"value":"A161","name":"YI SYLLABLE NDEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA161"},41314:{"value":"A162","name":"YI SYLLABLE NDUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA162"},41315:{"value":"A163","name":"YI SYLLABLE NDUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA163"},41316:{"value":"A164","name":"YI SYLLABLE NDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA164"},41317:{"value":"A165","name":"YI SYLLABLE NDUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA165"},41318:{"value":"A166","name":"YI SYLLABLE NDURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA166"},41319:{"value":"A167","name":"YI SYLLABLE NDUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA167"},41320:{"value":"A168","name":"YI SYLLABLE HNIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA168"},41321:{"value":"A169","name":"YI SYLLABLE HNIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA169"},41322:{"value":"A16A","name":"YI SYLLABLE HNI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA16A"},41323:{"value":"A16B","name":"YI SYLLABLE HNIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA16B"},41324:{"value":"A16C","name":"YI SYLLABLE HNIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA16C"},41325:{"value":"A16D","name":"YI SYLLABLE HNIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA16D"},41326:{"value":"A16E","name":"YI SYLLABLE HNIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA16E"},41327:{"value":"A16F","name":"YI SYLLABLE HNIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA16F"},41328:{"value":"A170","name":"YI SYLLABLE HNAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA170"},41329:{"value":"A171","name":"YI SYLLABLE HNAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA171"},41330:{"value":"A172","name":"YI SYLLABLE HNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA172"},41331:{"value":"A173","name":"YI SYLLABLE HNAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA173"},41332:{"value":"A174","name":"YI SYLLABLE HNUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA174"},41333:{"value":"A175","name":"YI SYLLABLE HNUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA175"},41334:{"value":"A176","name":"YI SYLLABLE HNOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA176"},41335:{"value":"A177","name":"YI SYLLABLE HNOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA177"},41336:{"value":"A178","name":"YI SYLLABLE HNOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA178"},41337:{"value":"A179","name":"YI SYLLABLE HNEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA179"},41338:{"value":"A17A","name":"YI SYLLABLE HNE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA17A"},41339:{"value":"A17B","name":"YI SYLLABLE HNEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA17B"},41340:{"value":"A17C","name":"YI SYLLABLE HNUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA17C"},41341:{"value":"A17D","name":"YI SYLLABLE NIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA17D"},41342:{"value":"A17E","name":"YI SYLLABLE NIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA17E"},41343:{"value":"A17F","name":"YI SYLLABLE NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA17F"},41344:{"value":"A180","name":"YI SYLLABLE NIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA180"},41345:{"value":"A181","name":"YI SYLLABLE NIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA181"},41346:{"value":"A182","name":"YI SYLLABLE NIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA182"},41347:{"value":"A183","name":"YI SYLLABLE NIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA183"},41348:{"value":"A184","name":"YI SYLLABLE NAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA184"},41349:{"value":"A185","name":"YI SYLLABLE NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA185"},41350:{"value":"A186","name":"YI SYLLABLE NAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA186"},41351:{"value":"A187","name":"YI SYLLABLE NUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA187"},41352:{"value":"A188","name":"YI SYLLABLE NUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA188"},41353:{"value":"A189","name":"YI SYLLABLE NUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA189"},41354:{"value":"A18A","name":"YI SYLLABLE NOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA18A"},41355:{"value":"A18B","name":"YI SYLLABLE NOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA18B"},41356:{"value":"A18C","name":"YI SYLLABLE NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA18C"},41357:{"value":"A18D","name":"YI SYLLABLE NOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA18D"},41358:{"value":"A18E","name":"YI SYLLABLE NEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA18E"},41359:{"value":"A18F","name":"YI SYLLABLE NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA18F"},41360:{"value":"A190","name":"YI SYLLABLE NEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA190"},41361:{"value":"A191","name":"YI SYLLABLE NUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA191"},41362:{"value":"A192","name":"YI SYLLABLE NUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA192"},41363:{"value":"A193","name":"YI SYLLABLE NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA193"},41364:{"value":"A194","name":"YI SYLLABLE NUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA194"},41365:{"value":"A195","name":"YI SYLLABLE NURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA195"},41366:{"value":"A196","name":"YI SYLLABLE NUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA196"},41367:{"value":"A197","name":"YI SYLLABLE HLIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA197"},41368:{"value":"A198","name":"YI SYLLABLE HLIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA198"},41369:{"value":"A199","name":"YI SYLLABLE HLI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA199"},41370:{"value":"A19A","name":"YI SYLLABLE HLIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA19A"},41371:{"value":"A19B","name":"YI SYLLABLE HLIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA19B"},41372:{"value":"A19C","name":"YI SYLLABLE HLIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA19C"},41373:{"value":"A19D","name":"YI SYLLABLE HLIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA19D"},41374:{"value":"A19E","name":"YI SYLLABLE HLAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA19E"},41375:{"value":"A19F","name":"YI SYLLABLE HLAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA19F"},41376:{"value":"A1A0","name":"YI SYLLABLE HLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A0"},41377:{"value":"A1A1","name":"YI SYLLABLE HLAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A1"},41378:{"value":"A1A2","name":"YI SYLLABLE HLUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A2"},41379:{"value":"A1A3","name":"YI SYLLABLE HLUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A3"},41380:{"value":"A1A4","name":"YI SYLLABLE HLUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A4"},41381:{"value":"A1A5","name":"YI SYLLABLE HLOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A5"},41382:{"value":"A1A6","name":"YI SYLLABLE HLO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A6"},41383:{"value":"A1A7","name":"YI SYLLABLE HLOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A7"},41384:{"value":"A1A8","name":"YI SYLLABLE HLEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A8"},41385:{"value":"A1A9","name":"YI SYLLABLE HLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1A9"},41386:{"value":"A1AA","name":"YI SYLLABLE HLEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1AA"},41387:{"value":"A1AB","name":"YI SYLLABLE HLUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1AB"},41388:{"value":"A1AC","name":"YI SYLLABLE HLUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1AC"},41389:{"value":"A1AD","name":"YI SYLLABLE HLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1AD"},41390:{"value":"A1AE","name":"YI SYLLABLE HLUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1AE"},41391:{"value":"A1AF","name":"YI SYLLABLE HLURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1AF"},41392:{"value":"A1B0","name":"YI SYLLABLE HLUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B0"},41393:{"value":"A1B1","name":"YI SYLLABLE HLYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B1"},41394:{"value":"A1B2","name":"YI SYLLABLE HLYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B2"},41395:{"value":"A1B3","name":"YI SYLLABLE HLY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B3"},41396:{"value":"A1B4","name":"YI SYLLABLE HLYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B4"},41397:{"value":"A1B5","name":"YI SYLLABLE HLYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B5"},41398:{"value":"A1B6","name":"YI SYLLABLE HLYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B6"},41399:{"value":"A1B7","name":"YI SYLLABLE LIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B7"},41400:{"value":"A1B8","name":"YI SYLLABLE LIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B8"},41401:{"value":"A1B9","name":"YI SYLLABLE LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1B9"},41402:{"value":"A1BA","name":"YI SYLLABLE LIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1BA"},41403:{"value":"A1BB","name":"YI SYLLABLE LIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1BB"},41404:{"value":"A1BC","name":"YI SYLLABLE LIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1BC"},41405:{"value":"A1BD","name":"YI SYLLABLE LIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1BD"},41406:{"value":"A1BE","name":"YI SYLLABLE LIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1BE"},41407:{"value":"A1BF","name":"YI SYLLABLE LAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1BF"},41408:{"value":"A1C0","name":"YI SYLLABLE LAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C0"},41409:{"value":"A1C1","name":"YI SYLLABLE LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C1"},41410:{"value":"A1C2","name":"YI SYLLABLE LAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C2"},41411:{"value":"A1C3","name":"YI SYLLABLE LUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C3"},41412:{"value":"A1C4","name":"YI SYLLABLE LUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C4"},41413:{"value":"A1C5","name":"YI SYLLABLE LUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C5"},41414:{"value":"A1C6","name":"YI SYLLABLE LUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C6"},41415:{"value":"A1C7","name":"YI SYLLABLE LOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C7"},41416:{"value":"A1C8","name":"YI SYLLABLE LOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C8"},41417:{"value":"A1C9","name":"YI SYLLABLE LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1C9"},41418:{"value":"A1CA","name":"YI SYLLABLE LOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1CA"},41419:{"value":"A1CB","name":"YI SYLLABLE LEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1CB"},41420:{"value":"A1CC","name":"YI SYLLABLE LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1CC"},41421:{"value":"A1CD","name":"YI SYLLABLE LEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1CD"},41422:{"value":"A1CE","name":"YI SYLLABLE LUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1CE"},41423:{"value":"A1CF","name":"YI SYLLABLE LUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1CF"},41424:{"value":"A1D0","name":"YI SYLLABLE LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D0"},41425:{"value":"A1D1","name":"YI SYLLABLE LUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D1"},41426:{"value":"A1D2","name":"YI SYLLABLE LURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D2"},41427:{"value":"A1D3","name":"YI SYLLABLE LUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D3"},41428:{"value":"A1D4","name":"YI SYLLABLE LYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D4"},41429:{"value":"A1D5","name":"YI SYLLABLE LYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D5"},41430:{"value":"A1D6","name":"YI SYLLABLE LY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D6"},41431:{"value":"A1D7","name":"YI SYLLABLE LYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D7"},41432:{"value":"A1D8","name":"YI SYLLABLE LYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D8"},41433:{"value":"A1D9","name":"YI SYLLABLE LYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1D9"},41434:{"value":"A1DA","name":"YI SYLLABLE GIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1DA"},41435:{"value":"A1DB","name":"YI SYLLABLE GIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1DB"},41436:{"value":"A1DC","name":"YI SYLLABLE GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1DC"},41437:{"value":"A1DD","name":"YI SYLLABLE GIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1DD"},41438:{"value":"A1DE","name":"YI SYLLABLE GIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1DE"},41439:{"value":"A1DF","name":"YI SYLLABLE GIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1DF"},41440:{"value":"A1E0","name":"YI SYLLABLE GIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E0"},41441:{"value":"A1E1","name":"YI SYLLABLE GIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E1"},41442:{"value":"A1E2","name":"YI SYLLABLE GAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E2"},41443:{"value":"A1E3","name":"YI SYLLABLE GAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E3"},41444:{"value":"A1E4","name":"YI SYLLABLE GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E4"},41445:{"value":"A1E5","name":"YI SYLLABLE GAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E5"},41446:{"value":"A1E6","name":"YI SYLLABLE GUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E6"},41447:{"value":"A1E7","name":"YI SYLLABLE GUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E7"},41448:{"value":"A1E8","name":"YI SYLLABLE GUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E8"},41449:{"value":"A1E9","name":"YI SYLLABLE GUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1E9"},41450:{"value":"A1EA","name":"YI SYLLABLE GOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1EA"},41451:{"value":"A1EB","name":"YI SYLLABLE GOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1EB"},41452:{"value":"A1EC","name":"YI SYLLABLE GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1EC"},41453:{"value":"A1ED","name":"YI SYLLABLE GOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1ED"},41454:{"value":"A1EE","name":"YI SYLLABLE GET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1EE"},41455:{"value":"A1EF","name":"YI SYLLABLE GEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1EF"},41456:{"value":"A1F0","name":"YI SYLLABLE GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F0"},41457:{"value":"A1F1","name":"YI SYLLABLE GEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F1"},41458:{"value":"A1F2","name":"YI SYLLABLE GUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F2"},41459:{"value":"A1F3","name":"YI SYLLABLE GUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F3"},41460:{"value":"A1F4","name":"YI SYLLABLE GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F4"},41461:{"value":"A1F5","name":"YI SYLLABLE GUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F5"},41462:{"value":"A1F6","name":"YI SYLLABLE GURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F6"},41463:{"value":"A1F7","name":"YI SYLLABLE GUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F7"},41464:{"value":"A1F8","name":"YI SYLLABLE KIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F8"},41465:{"value":"A1F9","name":"YI SYLLABLE KIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1F9"},41466:{"value":"A1FA","name":"YI SYLLABLE KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1FA"},41467:{"value":"A1FB","name":"YI SYLLABLE KIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1FB"},41468:{"value":"A1FC","name":"YI SYLLABLE KIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1FC"},41469:{"value":"A1FD","name":"YI SYLLABLE KIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1FD"},41470:{"value":"A1FE","name":"YI SYLLABLE KIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1FE"},41471:{"value":"A1FF","name":"YI SYLLABLE KAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA1FF"},41472:{"value":"A200","name":"YI SYLLABLE KAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA200"},41473:{"value":"A201","name":"YI SYLLABLE KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA201"},41474:{"value":"A202","name":"YI SYLLABLE KAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA202"},41475:{"value":"A203","name":"YI SYLLABLE KUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA203"},41476:{"value":"A204","name":"YI SYLLABLE KUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA204"},41477:{"value":"A205","name":"YI SYLLABLE KUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA205"},41478:{"value":"A206","name":"YI SYLLABLE KOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA206"},41479:{"value":"A207","name":"YI SYLLABLE KOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA207"},41480:{"value":"A208","name":"YI SYLLABLE KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA208"},41481:{"value":"A209","name":"YI SYLLABLE KOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA209"},41482:{"value":"A20A","name":"YI SYLLABLE KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA20A"},41483:{"value":"A20B","name":"YI SYLLABLE KEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA20B"},41484:{"value":"A20C","name":"YI SYLLABLE KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA20C"},41485:{"value":"A20D","name":"YI SYLLABLE KEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA20D"},41486:{"value":"A20E","name":"YI SYLLABLE KUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA20E"},41487:{"value":"A20F","name":"YI SYLLABLE KUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA20F"},41488:{"value":"A210","name":"YI SYLLABLE KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA210"},41489:{"value":"A211","name":"YI SYLLABLE KUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA211"},41490:{"value":"A212","name":"YI SYLLABLE KURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA212"},41491:{"value":"A213","name":"YI SYLLABLE KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA213"},41492:{"value":"A214","name":"YI SYLLABLE GGIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA214"},41493:{"value":"A215","name":"YI SYLLABLE GGIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA215"},41494:{"value":"A216","name":"YI SYLLABLE GGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA216"},41495:{"value":"A217","name":"YI SYLLABLE GGIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA217"},41496:{"value":"A218","name":"YI SYLLABLE GGIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA218"},41497:{"value":"A219","name":"YI SYLLABLE GGIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA219"},41498:{"value":"A21A","name":"YI SYLLABLE GGAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA21A"},41499:{"value":"A21B","name":"YI SYLLABLE GGAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA21B"},41500:{"value":"A21C","name":"YI SYLLABLE GGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA21C"},41501:{"value":"A21D","name":"YI SYLLABLE GGAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA21D"},41502:{"value":"A21E","name":"YI SYLLABLE GGUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA21E"},41503:{"value":"A21F","name":"YI SYLLABLE GGUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA21F"},41504:{"value":"A220","name":"YI SYLLABLE GGUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA220"},41505:{"value":"A221","name":"YI SYLLABLE GGUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA221"},41506:{"value":"A222","name":"YI SYLLABLE GGOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA222"},41507:{"value":"A223","name":"YI SYLLABLE GGOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA223"},41508:{"value":"A224","name":"YI SYLLABLE GGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA224"},41509:{"value":"A225","name":"YI SYLLABLE GGOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA225"},41510:{"value":"A226","name":"YI SYLLABLE GGET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA226"},41511:{"value":"A227","name":"YI SYLLABLE GGEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA227"},41512:{"value":"A228","name":"YI SYLLABLE GGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA228"},41513:{"value":"A229","name":"YI SYLLABLE GGEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA229"},41514:{"value":"A22A","name":"YI SYLLABLE GGUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA22A"},41515:{"value":"A22B","name":"YI SYLLABLE GGUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA22B"},41516:{"value":"A22C","name":"YI SYLLABLE GGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA22C"},41517:{"value":"A22D","name":"YI SYLLABLE GGUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA22D"},41518:{"value":"A22E","name":"YI SYLLABLE GGURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA22E"},41519:{"value":"A22F","name":"YI SYLLABLE GGUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA22F"},41520:{"value":"A230","name":"YI SYLLABLE MGIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA230"},41521:{"value":"A231","name":"YI SYLLABLE MGIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA231"},41522:{"value":"A232","name":"YI SYLLABLE MGAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA232"},41523:{"value":"A233","name":"YI SYLLABLE MGAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA233"},41524:{"value":"A234","name":"YI SYLLABLE MGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA234"},41525:{"value":"A235","name":"YI SYLLABLE MGAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA235"},41526:{"value":"A236","name":"YI SYLLABLE MGUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA236"},41527:{"value":"A237","name":"YI SYLLABLE MGUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA237"},41528:{"value":"A238","name":"YI SYLLABLE MGUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA238"},41529:{"value":"A239","name":"YI SYLLABLE MGOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA239"},41530:{"value":"A23A","name":"YI SYLLABLE MGOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA23A"},41531:{"value":"A23B","name":"YI SYLLABLE MGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA23B"},41532:{"value":"A23C","name":"YI SYLLABLE MGOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA23C"},41533:{"value":"A23D","name":"YI SYLLABLE MGEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA23D"},41534:{"value":"A23E","name":"YI SYLLABLE MGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA23E"},41535:{"value":"A23F","name":"YI SYLLABLE MGEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA23F"},41536:{"value":"A240","name":"YI SYLLABLE MGUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA240"},41537:{"value":"A241","name":"YI SYLLABLE MGUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA241"},41538:{"value":"A242","name":"YI SYLLABLE MGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA242"},41539:{"value":"A243","name":"YI SYLLABLE MGUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA243"},41540:{"value":"A244","name":"YI SYLLABLE MGURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA244"},41541:{"value":"A245","name":"YI SYLLABLE MGUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA245"},41542:{"value":"A246","name":"YI SYLLABLE HXIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA246"},41543:{"value":"A247","name":"YI SYLLABLE HXIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA247"},41544:{"value":"A248","name":"YI SYLLABLE HXI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA248"},41545:{"value":"A249","name":"YI SYLLABLE HXIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA249"},41546:{"value":"A24A","name":"YI SYLLABLE HXIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA24A"},41547:{"value":"A24B","name":"YI SYLLABLE HXIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA24B"},41548:{"value":"A24C","name":"YI SYLLABLE HXIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA24C"},41549:{"value":"A24D","name":"YI SYLLABLE HXIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA24D"},41550:{"value":"A24E","name":"YI SYLLABLE HXAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA24E"},41551:{"value":"A24F","name":"YI SYLLABLE HXAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA24F"},41552:{"value":"A250","name":"YI SYLLABLE HXA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA250"},41553:{"value":"A251","name":"YI SYLLABLE HXAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA251"},41554:{"value":"A252","name":"YI SYLLABLE HXUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA252"},41555:{"value":"A253","name":"YI SYLLABLE HXUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA253"},41556:{"value":"A254","name":"YI SYLLABLE HXUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA254"},41557:{"value":"A255","name":"YI SYLLABLE HXUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA255"},41558:{"value":"A256","name":"YI SYLLABLE HXOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA256"},41559:{"value":"A257","name":"YI SYLLABLE HXOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA257"},41560:{"value":"A258","name":"YI SYLLABLE HXO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA258"},41561:{"value":"A259","name":"YI SYLLABLE HXOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA259"},41562:{"value":"A25A","name":"YI SYLLABLE HXEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA25A"},41563:{"value":"A25B","name":"YI SYLLABLE HXE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA25B"},41564:{"value":"A25C","name":"YI SYLLABLE HXEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA25C"},41565:{"value":"A25D","name":"YI SYLLABLE NGIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA25D"},41566:{"value":"A25E","name":"YI SYLLABLE NGIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA25E"},41567:{"value":"A25F","name":"YI SYLLABLE NGIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA25F"},41568:{"value":"A260","name":"YI SYLLABLE NGAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA260"},41569:{"value":"A261","name":"YI SYLLABLE NGAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA261"},41570:{"value":"A262","name":"YI SYLLABLE NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA262"},41571:{"value":"A263","name":"YI SYLLABLE NGAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA263"},41572:{"value":"A264","name":"YI SYLLABLE NGUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA264"},41573:{"value":"A265","name":"YI SYLLABLE NGUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA265"},41574:{"value":"A266","name":"YI SYLLABLE NGUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA266"},41575:{"value":"A267","name":"YI SYLLABLE NGOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA267"},41576:{"value":"A268","name":"YI SYLLABLE NGOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA268"},41577:{"value":"A269","name":"YI SYLLABLE NGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA269"},41578:{"value":"A26A","name":"YI SYLLABLE NGOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA26A"},41579:{"value":"A26B","name":"YI SYLLABLE NGEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA26B"},41580:{"value":"A26C","name":"YI SYLLABLE NGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA26C"},41581:{"value":"A26D","name":"YI SYLLABLE NGEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA26D"},41582:{"value":"A26E","name":"YI SYLLABLE HIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA26E"},41583:{"value":"A26F","name":"YI SYLLABLE HIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA26F"},41584:{"value":"A270","name":"YI SYLLABLE HIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA270"},41585:{"value":"A271","name":"YI SYLLABLE HAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA271"},41586:{"value":"A272","name":"YI SYLLABLE HAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA272"},41587:{"value":"A273","name":"YI SYLLABLE HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA273"},41588:{"value":"A274","name":"YI SYLLABLE HAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA274"},41589:{"value":"A275","name":"YI SYLLABLE HUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA275"},41590:{"value":"A276","name":"YI SYLLABLE HUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA276"},41591:{"value":"A277","name":"YI SYLLABLE HUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA277"},41592:{"value":"A278","name":"YI SYLLABLE HUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA278"},41593:{"value":"A279","name":"YI SYLLABLE HOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA279"},41594:{"value":"A27A","name":"YI SYLLABLE HOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA27A"},41595:{"value":"A27B","name":"YI SYLLABLE HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA27B"},41596:{"value":"A27C","name":"YI SYLLABLE HOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA27C"},41597:{"value":"A27D","name":"YI SYLLABLE HEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA27D"},41598:{"value":"A27E","name":"YI SYLLABLE HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA27E"},41599:{"value":"A27F","name":"YI SYLLABLE HEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA27F"},41600:{"value":"A280","name":"YI SYLLABLE WAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA280"},41601:{"value":"A281","name":"YI SYLLABLE WAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA281"},41602:{"value":"A282","name":"YI SYLLABLE WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA282"},41603:{"value":"A283","name":"YI SYLLABLE WAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA283"},41604:{"value":"A284","name":"YI SYLLABLE WUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA284"},41605:{"value":"A285","name":"YI SYLLABLE WUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA285"},41606:{"value":"A286","name":"YI SYLLABLE WUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA286"},41607:{"value":"A287","name":"YI SYLLABLE WOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA287"},41608:{"value":"A288","name":"YI SYLLABLE WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA288"},41609:{"value":"A289","name":"YI SYLLABLE WOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA289"},41610:{"value":"A28A","name":"YI SYLLABLE WEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA28A"},41611:{"value":"A28B","name":"YI SYLLABLE WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA28B"},41612:{"value":"A28C","name":"YI SYLLABLE WEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA28C"},41613:{"value":"A28D","name":"YI SYLLABLE ZIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA28D"},41614:{"value":"A28E","name":"YI SYLLABLE ZIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA28E"},41615:{"value":"A28F","name":"YI SYLLABLE ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA28F"},41616:{"value":"A290","name":"YI SYLLABLE ZIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA290"},41617:{"value":"A291","name":"YI SYLLABLE ZIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA291"},41618:{"value":"A292","name":"YI SYLLABLE ZIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA292"},41619:{"value":"A293","name":"YI SYLLABLE ZIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA293"},41620:{"value":"A294","name":"YI SYLLABLE ZAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA294"},41621:{"value":"A295","name":"YI SYLLABLE ZAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA295"},41622:{"value":"A296","name":"YI SYLLABLE ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA296"},41623:{"value":"A297","name":"YI SYLLABLE ZAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA297"},41624:{"value":"A298","name":"YI SYLLABLE ZUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA298"},41625:{"value":"A299","name":"YI SYLLABLE ZUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA299"},41626:{"value":"A29A","name":"YI SYLLABLE ZUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA29A"},41627:{"value":"A29B","name":"YI SYLLABLE ZOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA29B"},41628:{"value":"A29C","name":"YI SYLLABLE ZOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA29C"},41629:{"value":"A29D","name":"YI SYLLABLE ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA29D"},41630:{"value":"A29E","name":"YI SYLLABLE ZOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA29E"},41631:{"value":"A29F","name":"YI SYLLABLE ZEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA29F"},41632:{"value":"A2A0","name":"YI SYLLABLE ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A0"},41633:{"value":"A2A1","name":"YI SYLLABLE ZEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A1"},41634:{"value":"A2A2","name":"YI SYLLABLE ZUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A2"},41635:{"value":"A2A3","name":"YI SYLLABLE ZUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A3"},41636:{"value":"A2A4","name":"YI SYLLABLE ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A4"},41637:{"value":"A2A5","name":"YI SYLLABLE ZUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A5"},41638:{"value":"A2A6","name":"YI SYLLABLE ZURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A6"},41639:{"value":"A2A7","name":"YI SYLLABLE ZUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A7"},41640:{"value":"A2A8","name":"YI SYLLABLE ZYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A8"},41641:{"value":"A2A9","name":"YI SYLLABLE ZYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2A9"},41642:{"value":"A2AA","name":"YI SYLLABLE ZY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2AA"},41643:{"value":"A2AB","name":"YI SYLLABLE ZYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2AB"},41644:{"value":"A2AC","name":"YI SYLLABLE ZYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2AC"},41645:{"value":"A2AD","name":"YI SYLLABLE ZYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2AD"},41646:{"value":"A2AE","name":"YI SYLLABLE CIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2AE"},41647:{"value":"A2AF","name":"YI SYLLABLE CIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2AF"},41648:{"value":"A2B0","name":"YI SYLLABLE CI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B0"},41649:{"value":"A2B1","name":"YI SYLLABLE CIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B1"},41650:{"value":"A2B2","name":"YI SYLLABLE CIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B2"},41651:{"value":"A2B3","name":"YI SYLLABLE CIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B3"},41652:{"value":"A2B4","name":"YI SYLLABLE CIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B4"},41653:{"value":"A2B5","name":"YI SYLLABLE CIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B5"},41654:{"value":"A2B6","name":"YI SYLLABLE CAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B6"},41655:{"value":"A2B7","name":"YI SYLLABLE CAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B7"},41656:{"value":"A2B8","name":"YI SYLLABLE CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B8"},41657:{"value":"A2B9","name":"YI SYLLABLE CAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2B9"},41658:{"value":"A2BA","name":"YI SYLLABLE CUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2BA"},41659:{"value":"A2BB","name":"YI SYLLABLE CUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2BB"},41660:{"value":"A2BC","name":"YI SYLLABLE CUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2BC"},41661:{"value":"A2BD","name":"YI SYLLABLE COT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2BD"},41662:{"value":"A2BE","name":"YI SYLLABLE COX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2BE"},41663:{"value":"A2BF","name":"YI SYLLABLE CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2BF"},41664:{"value":"A2C0","name":"YI SYLLABLE COP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C0"},41665:{"value":"A2C1","name":"YI SYLLABLE CEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C1"},41666:{"value":"A2C2","name":"YI SYLLABLE CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C2"},41667:{"value":"A2C3","name":"YI SYLLABLE CEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C3"},41668:{"value":"A2C4","name":"YI SYLLABLE CUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C4"},41669:{"value":"A2C5","name":"YI SYLLABLE CUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C5"},41670:{"value":"A2C6","name":"YI SYLLABLE CU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C6"},41671:{"value":"A2C7","name":"YI SYLLABLE CUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C7"},41672:{"value":"A2C8","name":"YI SYLLABLE CURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C8"},41673:{"value":"A2C9","name":"YI SYLLABLE CUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2C9"},41674:{"value":"A2CA","name":"YI SYLLABLE CYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2CA"},41675:{"value":"A2CB","name":"YI SYLLABLE CYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2CB"},41676:{"value":"A2CC","name":"YI SYLLABLE CY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2CC"},41677:{"value":"A2CD","name":"YI SYLLABLE CYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2CD"},41678:{"value":"A2CE","name":"YI SYLLABLE CYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2CE"},41679:{"value":"A2CF","name":"YI SYLLABLE CYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2CF"},41680:{"value":"A2D0","name":"YI SYLLABLE ZZIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D0"},41681:{"value":"A2D1","name":"YI SYLLABLE ZZIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D1"},41682:{"value":"A2D2","name":"YI SYLLABLE ZZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D2"},41683:{"value":"A2D3","name":"YI SYLLABLE ZZIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D3"},41684:{"value":"A2D4","name":"YI SYLLABLE ZZIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D4"},41685:{"value":"A2D5","name":"YI SYLLABLE ZZIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D5"},41686:{"value":"A2D6","name":"YI SYLLABLE ZZIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D6"},41687:{"value":"A2D7","name":"YI SYLLABLE ZZIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D7"},41688:{"value":"A2D8","name":"YI SYLLABLE ZZAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D8"},41689:{"value":"A2D9","name":"YI SYLLABLE ZZAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2D9"},41690:{"value":"A2DA","name":"YI SYLLABLE ZZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2DA"},41691:{"value":"A2DB","name":"YI SYLLABLE ZZAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2DB"},41692:{"value":"A2DC","name":"YI SYLLABLE ZZOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2DC"},41693:{"value":"A2DD","name":"YI SYLLABLE ZZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2DD"},41694:{"value":"A2DE","name":"YI SYLLABLE ZZOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2DE"},41695:{"value":"A2DF","name":"YI SYLLABLE ZZEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2DF"},41696:{"value":"A2E0","name":"YI SYLLABLE ZZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E0"},41697:{"value":"A2E1","name":"YI SYLLABLE ZZEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E1"},41698:{"value":"A2E2","name":"YI SYLLABLE ZZUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E2"},41699:{"value":"A2E3","name":"YI SYLLABLE ZZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E3"},41700:{"value":"A2E4","name":"YI SYLLABLE ZZUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E4"},41701:{"value":"A2E5","name":"YI SYLLABLE ZZURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E5"},41702:{"value":"A2E6","name":"YI SYLLABLE ZZUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E6"},41703:{"value":"A2E7","name":"YI SYLLABLE ZZYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E7"},41704:{"value":"A2E8","name":"YI SYLLABLE ZZYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E8"},41705:{"value":"A2E9","name":"YI SYLLABLE ZZY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2E9"},41706:{"value":"A2EA","name":"YI SYLLABLE ZZYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2EA"},41707:{"value":"A2EB","name":"YI SYLLABLE ZZYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2EB"},41708:{"value":"A2EC","name":"YI SYLLABLE ZZYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2EC"},41709:{"value":"A2ED","name":"YI SYLLABLE NZIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2ED"},41710:{"value":"A2EE","name":"YI SYLLABLE NZIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2EE"},41711:{"value":"A2EF","name":"YI SYLLABLE NZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2EF"},41712:{"value":"A2F0","name":"YI SYLLABLE NZIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F0"},41713:{"value":"A2F1","name":"YI SYLLABLE NZIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F1"},41714:{"value":"A2F2","name":"YI SYLLABLE NZIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F2"},41715:{"value":"A2F3","name":"YI SYLLABLE NZIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F3"},41716:{"value":"A2F4","name":"YI SYLLABLE NZAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F4"},41717:{"value":"A2F5","name":"YI SYLLABLE NZAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F5"},41718:{"value":"A2F6","name":"YI SYLLABLE NZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F6"},41719:{"value":"A2F7","name":"YI SYLLABLE NZAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F7"},41720:{"value":"A2F8","name":"YI SYLLABLE NZUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F8"},41721:{"value":"A2F9","name":"YI SYLLABLE NZUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2F9"},41722:{"value":"A2FA","name":"YI SYLLABLE NZOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2FA"},41723:{"value":"A2FB","name":"YI SYLLABLE NZOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2FB"},41724:{"value":"A2FC","name":"YI SYLLABLE NZEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2FC"},41725:{"value":"A2FD","name":"YI SYLLABLE NZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2FD"},41726:{"value":"A2FE","name":"YI SYLLABLE NZUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2FE"},41727:{"value":"A2FF","name":"YI SYLLABLE NZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA2FF"},41728:{"value":"A300","name":"YI SYLLABLE NZUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA300"},41729:{"value":"A301","name":"YI SYLLABLE NZURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA301"},41730:{"value":"A302","name":"YI SYLLABLE NZUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA302"},41731:{"value":"A303","name":"YI SYLLABLE NZYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA303"},41732:{"value":"A304","name":"YI SYLLABLE NZYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA304"},41733:{"value":"A305","name":"YI SYLLABLE NZY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA305"},41734:{"value":"A306","name":"YI SYLLABLE NZYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA306"},41735:{"value":"A307","name":"YI SYLLABLE NZYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA307"},41736:{"value":"A308","name":"YI SYLLABLE NZYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA308"},41737:{"value":"A309","name":"YI SYLLABLE SIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA309"},41738:{"value":"A30A","name":"YI SYLLABLE SIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA30A"},41739:{"value":"A30B","name":"YI SYLLABLE SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA30B"},41740:{"value":"A30C","name":"YI SYLLABLE SIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA30C"},41741:{"value":"A30D","name":"YI SYLLABLE SIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA30D"},41742:{"value":"A30E","name":"YI SYLLABLE SIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA30E"},41743:{"value":"A30F","name":"YI SYLLABLE SIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA30F"},41744:{"value":"A310","name":"YI SYLLABLE SAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA310"},41745:{"value":"A311","name":"YI SYLLABLE SAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA311"},41746:{"value":"A312","name":"YI SYLLABLE SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA312"},41747:{"value":"A313","name":"YI SYLLABLE SAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA313"},41748:{"value":"A314","name":"YI SYLLABLE SUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA314"},41749:{"value":"A315","name":"YI SYLLABLE SUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA315"},41750:{"value":"A316","name":"YI SYLLABLE SUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA316"},41751:{"value":"A317","name":"YI SYLLABLE SOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA317"},41752:{"value":"A318","name":"YI SYLLABLE SOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA318"},41753:{"value":"A319","name":"YI SYLLABLE SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA319"},41754:{"value":"A31A","name":"YI SYLLABLE SOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA31A"},41755:{"value":"A31B","name":"YI SYLLABLE SEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA31B"},41756:{"value":"A31C","name":"YI SYLLABLE SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA31C"},41757:{"value":"A31D","name":"YI SYLLABLE SEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA31D"},41758:{"value":"A31E","name":"YI SYLLABLE SUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA31E"},41759:{"value":"A31F","name":"YI SYLLABLE SUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA31F"},41760:{"value":"A320","name":"YI SYLLABLE SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA320"},41761:{"value":"A321","name":"YI SYLLABLE SUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA321"},41762:{"value":"A322","name":"YI SYLLABLE SURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA322"},41763:{"value":"A323","name":"YI SYLLABLE SUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA323"},41764:{"value":"A324","name":"YI SYLLABLE SYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA324"},41765:{"value":"A325","name":"YI SYLLABLE SYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA325"},41766:{"value":"A326","name":"YI SYLLABLE SY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA326"},41767:{"value":"A327","name":"YI SYLLABLE SYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA327"},41768:{"value":"A328","name":"YI SYLLABLE SYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA328"},41769:{"value":"A329","name":"YI SYLLABLE SYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA329"},41770:{"value":"A32A","name":"YI SYLLABLE SSIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA32A"},41771:{"value":"A32B","name":"YI SYLLABLE SSIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA32B"},41772:{"value":"A32C","name":"YI SYLLABLE SSI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA32C"},41773:{"value":"A32D","name":"YI SYLLABLE SSIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA32D"},41774:{"value":"A32E","name":"YI SYLLABLE SSIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA32E"},41775:{"value":"A32F","name":"YI SYLLABLE SSIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA32F"},41776:{"value":"A330","name":"YI SYLLABLE SSIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA330"},41777:{"value":"A331","name":"YI SYLLABLE SSAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA331"},41778:{"value":"A332","name":"YI SYLLABLE SSAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA332"},41779:{"value":"A333","name":"YI SYLLABLE SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA333"},41780:{"value":"A334","name":"YI SYLLABLE SSAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA334"},41781:{"value":"A335","name":"YI SYLLABLE SSOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA335"},41782:{"value":"A336","name":"YI SYLLABLE SSOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA336"},41783:{"value":"A337","name":"YI SYLLABLE SSO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA337"},41784:{"value":"A338","name":"YI SYLLABLE SSOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA338"},41785:{"value":"A339","name":"YI SYLLABLE SSEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA339"},41786:{"value":"A33A","name":"YI SYLLABLE SSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA33A"},41787:{"value":"A33B","name":"YI SYLLABLE SSEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA33B"},41788:{"value":"A33C","name":"YI SYLLABLE SSUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA33C"},41789:{"value":"A33D","name":"YI SYLLABLE SSUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA33D"},41790:{"value":"A33E","name":"YI SYLLABLE SSU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA33E"},41791:{"value":"A33F","name":"YI SYLLABLE SSUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA33F"},41792:{"value":"A340","name":"YI SYLLABLE SSYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA340"},41793:{"value":"A341","name":"YI SYLLABLE SSYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA341"},41794:{"value":"A342","name":"YI SYLLABLE SSY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA342"},41795:{"value":"A343","name":"YI SYLLABLE SSYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA343"},41796:{"value":"A344","name":"YI SYLLABLE SSYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA344"},41797:{"value":"A345","name":"YI SYLLABLE SSYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA345"},41798:{"value":"A346","name":"YI SYLLABLE ZHAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA346"},41799:{"value":"A347","name":"YI SYLLABLE ZHAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA347"},41800:{"value":"A348","name":"YI SYLLABLE ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA348"},41801:{"value":"A349","name":"YI SYLLABLE ZHAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA349"},41802:{"value":"A34A","name":"YI SYLLABLE ZHUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA34A"},41803:{"value":"A34B","name":"YI SYLLABLE ZHUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA34B"},41804:{"value":"A34C","name":"YI SYLLABLE ZHUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA34C"},41805:{"value":"A34D","name":"YI SYLLABLE ZHOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA34D"},41806:{"value":"A34E","name":"YI SYLLABLE ZHOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA34E"},41807:{"value":"A34F","name":"YI SYLLABLE ZHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA34F"},41808:{"value":"A350","name":"YI SYLLABLE ZHOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA350"},41809:{"value":"A351","name":"YI SYLLABLE ZHET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA351"},41810:{"value":"A352","name":"YI SYLLABLE ZHEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA352"},41811:{"value":"A353","name":"YI SYLLABLE ZHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA353"},41812:{"value":"A354","name":"YI SYLLABLE ZHEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA354"},41813:{"value":"A355","name":"YI SYLLABLE ZHUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA355"},41814:{"value":"A356","name":"YI SYLLABLE ZHUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA356"},41815:{"value":"A357","name":"YI SYLLABLE ZHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA357"},41816:{"value":"A358","name":"YI SYLLABLE ZHUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA358"},41817:{"value":"A359","name":"YI SYLLABLE ZHURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA359"},41818:{"value":"A35A","name":"YI SYLLABLE ZHUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA35A"},41819:{"value":"A35B","name":"YI SYLLABLE ZHYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA35B"},41820:{"value":"A35C","name":"YI SYLLABLE ZHYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA35C"},41821:{"value":"A35D","name":"YI SYLLABLE ZHY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA35D"},41822:{"value":"A35E","name":"YI SYLLABLE ZHYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA35E"},41823:{"value":"A35F","name":"YI SYLLABLE ZHYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA35F"},41824:{"value":"A360","name":"YI SYLLABLE ZHYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA360"},41825:{"value":"A361","name":"YI SYLLABLE CHAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA361"},41826:{"value":"A362","name":"YI SYLLABLE CHAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA362"},41827:{"value":"A363","name":"YI SYLLABLE CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA363"},41828:{"value":"A364","name":"YI SYLLABLE CHAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA364"},41829:{"value":"A365","name":"YI SYLLABLE CHUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA365"},41830:{"value":"A366","name":"YI SYLLABLE CHUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA366"},41831:{"value":"A367","name":"YI SYLLABLE CHUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA367"},41832:{"value":"A368","name":"YI SYLLABLE CHUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA368"},41833:{"value":"A369","name":"YI SYLLABLE CHOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA369"},41834:{"value":"A36A","name":"YI SYLLABLE CHOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA36A"},41835:{"value":"A36B","name":"YI SYLLABLE CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA36B"},41836:{"value":"A36C","name":"YI SYLLABLE CHOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA36C"},41837:{"value":"A36D","name":"YI SYLLABLE CHET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA36D"},41838:{"value":"A36E","name":"YI SYLLABLE CHEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA36E"},41839:{"value":"A36F","name":"YI SYLLABLE CHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA36F"},41840:{"value":"A370","name":"YI SYLLABLE CHEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA370"},41841:{"value":"A371","name":"YI SYLLABLE CHUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA371"},41842:{"value":"A372","name":"YI SYLLABLE CHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA372"},41843:{"value":"A373","name":"YI SYLLABLE CHUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA373"},41844:{"value":"A374","name":"YI SYLLABLE CHURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA374"},41845:{"value":"A375","name":"YI SYLLABLE CHUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA375"},41846:{"value":"A376","name":"YI SYLLABLE CHYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA376"},41847:{"value":"A377","name":"YI SYLLABLE CHYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA377"},41848:{"value":"A378","name":"YI SYLLABLE CHY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA378"},41849:{"value":"A379","name":"YI SYLLABLE CHYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA379"},41850:{"value":"A37A","name":"YI SYLLABLE CHYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA37A"},41851:{"value":"A37B","name":"YI SYLLABLE CHYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA37B"},41852:{"value":"A37C","name":"YI SYLLABLE RRAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA37C"},41853:{"value":"A37D","name":"YI SYLLABLE RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA37D"},41854:{"value":"A37E","name":"YI SYLLABLE RRUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA37E"},41855:{"value":"A37F","name":"YI SYLLABLE RRUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA37F"},41856:{"value":"A380","name":"YI SYLLABLE RROT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA380"},41857:{"value":"A381","name":"YI SYLLABLE RROX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA381"},41858:{"value":"A382","name":"YI SYLLABLE RRO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA382"},41859:{"value":"A383","name":"YI SYLLABLE RROP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA383"},41860:{"value":"A384","name":"YI SYLLABLE RRET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA384"},41861:{"value":"A385","name":"YI SYLLABLE RREX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA385"},41862:{"value":"A386","name":"YI SYLLABLE RRE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA386"},41863:{"value":"A387","name":"YI SYLLABLE RREP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA387"},41864:{"value":"A388","name":"YI SYLLABLE RRUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA388"},41865:{"value":"A389","name":"YI SYLLABLE RRUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA389"},41866:{"value":"A38A","name":"YI SYLLABLE RRU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA38A"},41867:{"value":"A38B","name":"YI SYLLABLE RRUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA38B"},41868:{"value":"A38C","name":"YI SYLLABLE RRURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA38C"},41869:{"value":"A38D","name":"YI SYLLABLE RRUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA38D"},41870:{"value":"A38E","name":"YI SYLLABLE RRYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA38E"},41871:{"value":"A38F","name":"YI SYLLABLE RRYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA38F"},41872:{"value":"A390","name":"YI SYLLABLE RRY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA390"},41873:{"value":"A391","name":"YI SYLLABLE RRYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA391"},41874:{"value":"A392","name":"YI SYLLABLE RRYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA392"},41875:{"value":"A393","name":"YI SYLLABLE RRYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA393"},41876:{"value":"A394","name":"YI SYLLABLE NRAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA394"},41877:{"value":"A395","name":"YI SYLLABLE NRAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA395"},41878:{"value":"A396","name":"YI SYLLABLE NRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA396"},41879:{"value":"A397","name":"YI SYLLABLE NRAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA397"},41880:{"value":"A398","name":"YI SYLLABLE NROX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA398"},41881:{"value":"A399","name":"YI SYLLABLE NRO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA399"},41882:{"value":"A39A","name":"YI SYLLABLE NROP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA39A"},41883:{"value":"A39B","name":"YI SYLLABLE NRET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA39B"},41884:{"value":"A39C","name":"YI SYLLABLE NREX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA39C"},41885:{"value":"A39D","name":"YI SYLLABLE NRE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA39D"},41886:{"value":"A39E","name":"YI SYLLABLE NREP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA39E"},41887:{"value":"A39F","name":"YI SYLLABLE NRUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA39F"},41888:{"value":"A3A0","name":"YI SYLLABLE NRUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A0"},41889:{"value":"A3A1","name":"YI SYLLABLE NRU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A1"},41890:{"value":"A3A2","name":"YI SYLLABLE NRUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A2"},41891:{"value":"A3A3","name":"YI SYLLABLE NRURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A3"},41892:{"value":"A3A4","name":"YI SYLLABLE NRUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A4"},41893:{"value":"A3A5","name":"YI SYLLABLE NRYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A5"},41894:{"value":"A3A6","name":"YI SYLLABLE NRYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A6"},41895:{"value":"A3A7","name":"YI SYLLABLE NRY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A7"},41896:{"value":"A3A8","name":"YI SYLLABLE NRYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A8"},41897:{"value":"A3A9","name":"YI SYLLABLE NRYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3A9"},41898:{"value":"A3AA","name":"YI SYLLABLE NRYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3AA"},41899:{"value":"A3AB","name":"YI SYLLABLE SHAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3AB"},41900:{"value":"A3AC","name":"YI SYLLABLE SHAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3AC"},41901:{"value":"A3AD","name":"YI SYLLABLE SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3AD"},41902:{"value":"A3AE","name":"YI SYLLABLE SHAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3AE"},41903:{"value":"A3AF","name":"YI SYLLABLE SHUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3AF"},41904:{"value":"A3B0","name":"YI SYLLABLE SHUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B0"},41905:{"value":"A3B1","name":"YI SYLLABLE SHUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B1"},41906:{"value":"A3B2","name":"YI SYLLABLE SHOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B2"},41907:{"value":"A3B3","name":"YI SYLLABLE SHOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B3"},41908:{"value":"A3B4","name":"YI SYLLABLE SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B4"},41909:{"value":"A3B5","name":"YI SYLLABLE SHOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B5"},41910:{"value":"A3B6","name":"YI SYLLABLE SHET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B6"},41911:{"value":"A3B7","name":"YI SYLLABLE SHEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B7"},41912:{"value":"A3B8","name":"YI SYLLABLE SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B8"},41913:{"value":"A3B9","name":"YI SYLLABLE SHEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3B9"},41914:{"value":"A3BA","name":"YI SYLLABLE SHUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3BA"},41915:{"value":"A3BB","name":"YI SYLLABLE SHUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3BB"},41916:{"value":"A3BC","name":"YI SYLLABLE SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3BC"},41917:{"value":"A3BD","name":"YI SYLLABLE SHUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3BD"},41918:{"value":"A3BE","name":"YI SYLLABLE SHURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3BE"},41919:{"value":"A3BF","name":"YI SYLLABLE SHUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3BF"},41920:{"value":"A3C0","name":"YI SYLLABLE SHYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C0"},41921:{"value":"A3C1","name":"YI SYLLABLE SHYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C1"},41922:{"value":"A3C2","name":"YI SYLLABLE SHY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C2"},41923:{"value":"A3C3","name":"YI SYLLABLE SHYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C3"},41924:{"value":"A3C4","name":"YI SYLLABLE SHYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C4"},41925:{"value":"A3C5","name":"YI SYLLABLE SHYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C5"},41926:{"value":"A3C6","name":"YI SYLLABLE RAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C6"},41927:{"value":"A3C7","name":"YI SYLLABLE RAX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C7"},41928:{"value":"A3C8","name":"YI SYLLABLE RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C8"},41929:{"value":"A3C9","name":"YI SYLLABLE RAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3C9"},41930:{"value":"A3CA","name":"YI SYLLABLE RUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3CA"},41931:{"value":"A3CB","name":"YI SYLLABLE RUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3CB"},41932:{"value":"A3CC","name":"YI SYLLABLE RUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3CC"},41933:{"value":"A3CD","name":"YI SYLLABLE ROT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3CD"},41934:{"value":"A3CE","name":"YI SYLLABLE ROX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3CE"},41935:{"value":"A3CF","name":"YI SYLLABLE RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3CF"},41936:{"value":"A3D0","name":"YI SYLLABLE ROP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D0"},41937:{"value":"A3D1","name":"YI SYLLABLE REX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D1"},41938:{"value":"A3D2","name":"YI SYLLABLE RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D2"},41939:{"value":"A3D3","name":"YI SYLLABLE REP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D3"},41940:{"value":"A3D4","name":"YI SYLLABLE RUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D4"},41941:{"value":"A3D5","name":"YI SYLLABLE RUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D5"},41942:{"value":"A3D6","name":"YI SYLLABLE RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D6"},41943:{"value":"A3D7","name":"YI SYLLABLE RUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D7"},41944:{"value":"A3D8","name":"YI SYLLABLE RURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D8"},41945:{"value":"A3D9","name":"YI SYLLABLE RUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3D9"},41946:{"value":"A3DA","name":"YI SYLLABLE RYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3DA"},41947:{"value":"A3DB","name":"YI SYLLABLE RYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3DB"},41948:{"value":"A3DC","name":"YI SYLLABLE RY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3DC"},41949:{"value":"A3DD","name":"YI SYLLABLE RYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3DD"},41950:{"value":"A3DE","name":"YI SYLLABLE RYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3DE"},41951:{"value":"A3DF","name":"YI SYLLABLE RYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3DF"},41952:{"value":"A3E0","name":"YI SYLLABLE JIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E0"},41953:{"value":"A3E1","name":"YI SYLLABLE JIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E1"},41954:{"value":"A3E2","name":"YI SYLLABLE JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E2"},41955:{"value":"A3E3","name":"YI SYLLABLE JIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E3"},41956:{"value":"A3E4","name":"YI SYLLABLE JIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E4"},41957:{"value":"A3E5","name":"YI SYLLABLE JIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E5"},41958:{"value":"A3E6","name":"YI SYLLABLE JIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E6"},41959:{"value":"A3E7","name":"YI SYLLABLE JIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E7"},41960:{"value":"A3E8","name":"YI SYLLABLE JUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E8"},41961:{"value":"A3E9","name":"YI SYLLABLE JUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3E9"},41962:{"value":"A3EA","name":"YI SYLLABLE JUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3EA"},41963:{"value":"A3EB","name":"YI SYLLABLE JUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3EB"},41964:{"value":"A3EC","name":"YI SYLLABLE JOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3EC"},41965:{"value":"A3ED","name":"YI SYLLABLE JOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3ED"},41966:{"value":"A3EE","name":"YI SYLLABLE JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3EE"},41967:{"value":"A3EF","name":"YI SYLLABLE JOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3EF"},41968:{"value":"A3F0","name":"YI SYLLABLE JUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F0"},41969:{"value":"A3F1","name":"YI SYLLABLE JUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F1"},41970:{"value":"A3F2","name":"YI SYLLABLE JU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F2"},41971:{"value":"A3F3","name":"YI SYLLABLE JUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F3"},41972:{"value":"A3F4","name":"YI SYLLABLE JURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F4"},41973:{"value":"A3F5","name":"YI SYLLABLE JUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F5"},41974:{"value":"A3F6","name":"YI SYLLABLE JYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F6"},41975:{"value":"A3F7","name":"YI SYLLABLE JYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F7"},41976:{"value":"A3F8","name":"YI SYLLABLE JY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F8"},41977:{"value":"A3F9","name":"YI SYLLABLE JYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3F9"},41978:{"value":"A3FA","name":"YI SYLLABLE JYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3FA"},41979:{"value":"A3FB","name":"YI SYLLABLE JYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3FB"},41980:{"value":"A3FC","name":"YI SYLLABLE QIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3FC"},41981:{"value":"A3FD","name":"YI SYLLABLE QIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3FD"},41982:{"value":"A3FE","name":"YI SYLLABLE QI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3FE"},41983:{"value":"A3FF","name":"YI SYLLABLE QIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA3FF"},41984:{"value":"A400","name":"YI SYLLABLE QIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA400"},41985:{"value":"A401","name":"YI SYLLABLE QIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA401"},41986:{"value":"A402","name":"YI SYLLABLE QIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA402"},41987:{"value":"A403","name":"YI SYLLABLE QIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA403"},41988:{"value":"A404","name":"YI SYLLABLE QUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA404"},41989:{"value":"A405","name":"YI SYLLABLE QUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA405"},41990:{"value":"A406","name":"YI SYLLABLE QUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA406"},41991:{"value":"A407","name":"YI SYLLABLE QUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA407"},41992:{"value":"A408","name":"YI SYLLABLE QOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA408"},41993:{"value":"A409","name":"YI SYLLABLE QOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA409"},41994:{"value":"A40A","name":"YI SYLLABLE QO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA40A"},41995:{"value":"A40B","name":"YI SYLLABLE QOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA40B"},41996:{"value":"A40C","name":"YI SYLLABLE QUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA40C"},41997:{"value":"A40D","name":"YI SYLLABLE QUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA40D"},41998:{"value":"A40E","name":"YI SYLLABLE QU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA40E"},41999:{"value":"A40F","name":"YI SYLLABLE QUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA40F"},42000:{"value":"A410","name":"YI SYLLABLE QURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA410"},42001:{"value":"A411","name":"YI SYLLABLE QUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA411"},42002:{"value":"A412","name":"YI SYLLABLE QYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA412"},42003:{"value":"A413","name":"YI SYLLABLE QYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA413"},42004:{"value":"A414","name":"YI SYLLABLE QY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA414"},42005:{"value":"A415","name":"YI SYLLABLE QYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA415"},42006:{"value":"A416","name":"YI SYLLABLE QYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA416"},42007:{"value":"A417","name":"YI SYLLABLE QYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA417"},42008:{"value":"A418","name":"YI SYLLABLE JJIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA418"},42009:{"value":"A419","name":"YI SYLLABLE JJIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA419"},42010:{"value":"A41A","name":"YI SYLLABLE JJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA41A"},42011:{"value":"A41B","name":"YI SYLLABLE JJIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA41B"},42012:{"value":"A41C","name":"YI SYLLABLE JJIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA41C"},42013:{"value":"A41D","name":"YI SYLLABLE JJIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA41D"},42014:{"value":"A41E","name":"YI SYLLABLE JJIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA41E"},42015:{"value":"A41F","name":"YI SYLLABLE JJIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA41F"},42016:{"value":"A420","name":"YI SYLLABLE JJUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA420"},42017:{"value":"A421","name":"YI SYLLABLE JJUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA421"},42018:{"value":"A422","name":"YI SYLLABLE JJUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA422"},42019:{"value":"A423","name":"YI SYLLABLE JJOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA423"},42020:{"value":"A424","name":"YI SYLLABLE JJOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA424"},42021:{"value":"A425","name":"YI SYLLABLE JJO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA425"},42022:{"value":"A426","name":"YI SYLLABLE JJOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA426"},42023:{"value":"A427","name":"YI SYLLABLE JJUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA427"},42024:{"value":"A428","name":"YI SYLLABLE JJUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA428"},42025:{"value":"A429","name":"YI SYLLABLE JJU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA429"},42026:{"value":"A42A","name":"YI SYLLABLE JJUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA42A"},42027:{"value":"A42B","name":"YI SYLLABLE JJURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA42B"},42028:{"value":"A42C","name":"YI SYLLABLE JJUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA42C"},42029:{"value":"A42D","name":"YI SYLLABLE JJYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA42D"},42030:{"value":"A42E","name":"YI SYLLABLE JJYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA42E"},42031:{"value":"A42F","name":"YI SYLLABLE JJY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA42F"},42032:{"value":"A430","name":"YI SYLLABLE JJYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA430"},42033:{"value":"A431","name":"YI SYLLABLE NJIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA431"},42034:{"value":"A432","name":"YI SYLLABLE NJIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA432"},42035:{"value":"A433","name":"YI SYLLABLE NJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA433"},42036:{"value":"A434","name":"YI SYLLABLE NJIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA434"},42037:{"value":"A435","name":"YI SYLLABLE NJIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA435"},42038:{"value":"A436","name":"YI SYLLABLE NJIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA436"},42039:{"value":"A437","name":"YI SYLLABLE NJIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA437"},42040:{"value":"A438","name":"YI SYLLABLE NJIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA438"},42041:{"value":"A439","name":"YI SYLLABLE NJUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA439"},42042:{"value":"A43A","name":"YI SYLLABLE NJUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA43A"},42043:{"value":"A43B","name":"YI SYLLABLE NJOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA43B"},42044:{"value":"A43C","name":"YI SYLLABLE NJOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA43C"},42045:{"value":"A43D","name":"YI SYLLABLE NJO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA43D"},42046:{"value":"A43E","name":"YI SYLLABLE NJOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA43E"},42047:{"value":"A43F","name":"YI SYLLABLE NJUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA43F"},42048:{"value":"A440","name":"YI SYLLABLE NJU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA440"},42049:{"value":"A441","name":"YI SYLLABLE NJUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA441"},42050:{"value":"A442","name":"YI SYLLABLE NJURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA442"},42051:{"value":"A443","name":"YI SYLLABLE NJUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA443"},42052:{"value":"A444","name":"YI SYLLABLE NJYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA444"},42053:{"value":"A445","name":"YI SYLLABLE NJYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA445"},42054:{"value":"A446","name":"YI SYLLABLE NJY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA446"},42055:{"value":"A447","name":"YI SYLLABLE NJYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA447"},42056:{"value":"A448","name":"YI SYLLABLE NJYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA448"},42057:{"value":"A449","name":"YI SYLLABLE NJYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA449"},42058:{"value":"A44A","name":"YI SYLLABLE NYIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA44A"},42059:{"value":"A44B","name":"YI SYLLABLE NYIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA44B"},42060:{"value":"A44C","name":"YI SYLLABLE NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA44C"},42061:{"value":"A44D","name":"YI SYLLABLE NYIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA44D"},42062:{"value":"A44E","name":"YI SYLLABLE NYIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA44E"},42063:{"value":"A44F","name":"YI SYLLABLE NYIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA44F"},42064:{"value":"A450","name":"YI SYLLABLE NYIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA450"},42065:{"value":"A451","name":"YI SYLLABLE NYIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA451"},42066:{"value":"A452","name":"YI SYLLABLE NYUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA452"},42067:{"value":"A453","name":"YI SYLLABLE NYUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA453"},42068:{"value":"A454","name":"YI SYLLABLE NYUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA454"},42069:{"value":"A455","name":"YI SYLLABLE NYOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA455"},42070:{"value":"A456","name":"YI SYLLABLE NYOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA456"},42071:{"value":"A457","name":"YI SYLLABLE NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA457"},42072:{"value":"A458","name":"YI SYLLABLE NYOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA458"},42073:{"value":"A459","name":"YI SYLLABLE NYUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA459"},42074:{"value":"A45A","name":"YI SYLLABLE NYUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA45A"},42075:{"value":"A45B","name":"YI SYLLABLE NYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA45B"},42076:{"value":"A45C","name":"YI SYLLABLE NYUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA45C"},42077:{"value":"A45D","name":"YI SYLLABLE XIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA45D"},42078:{"value":"A45E","name":"YI SYLLABLE XIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA45E"},42079:{"value":"A45F","name":"YI SYLLABLE XI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA45F"},42080:{"value":"A460","name":"YI SYLLABLE XIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA460"},42081:{"value":"A461","name":"YI SYLLABLE XIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA461"},42082:{"value":"A462","name":"YI SYLLABLE XIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA462"},42083:{"value":"A463","name":"YI SYLLABLE XIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA463"},42084:{"value":"A464","name":"YI SYLLABLE XIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA464"},42085:{"value":"A465","name":"YI SYLLABLE XUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA465"},42086:{"value":"A466","name":"YI SYLLABLE XUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA466"},42087:{"value":"A467","name":"YI SYLLABLE XOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA467"},42088:{"value":"A468","name":"YI SYLLABLE XOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA468"},42089:{"value":"A469","name":"YI SYLLABLE XO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA469"},42090:{"value":"A46A","name":"YI SYLLABLE XOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA46A"},42091:{"value":"A46B","name":"YI SYLLABLE XYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA46B"},42092:{"value":"A46C","name":"YI SYLLABLE XYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA46C"},42093:{"value":"A46D","name":"YI SYLLABLE XY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA46D"},42094:{"value":"A46E","name":"YI SYLLABLE XYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA46E"},42095:{"value":"A46F","name":"YI SYLLABLE XYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA46F"},42096:{"value":"A470","name":"YI SYLLABLE XYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA470"},42097:{"value":"A471","name":"YI SYLLABLE YIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA471"},42098:{"value":"A472","name":"YI SYLLABLE YIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA472"},42099:{"value":"A473","name":"YI SYLLABLE YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA473"},42100:{"value":"A474","name":"YI SYLLABLE YIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA474"},42101:{"value":"A475","name":"YI SYLLABLE YIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA475"},42102:{"value":"A476","name":"YI SYLLABLE YIEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA476"},42103:{"value":"A477","name":"YI SYLLABLE YIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA477"},42104:{"value":"A478","name":"YI SYLLABLE YIEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA478"},42105:{"value":"A479","name":"YI SYLLABLE YUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA479"},42106:{"value":"A47A","name":"YI SYLLABLE YUOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA47A"},42107:{"value":"A47B","name":"YI SYLLABLE YUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA47B"},42108:{"value":"A47C","name":"YI SYLLABLE YUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA47C"},42109:{"value":"A47D","name":"YI SYLLABLE YOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA47D"},42110:{"value":"A47E","name":"YI SYLLABLE YOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA47E"},42111:{"value":"A47F","name":"YI SYLLABLE YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA47F"},42112:{"value":"A480","name":"YI SYLLABLE YOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA480"},42113:{"value":"A481","name":"YI SYLLABLE YUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA481"},42114:{"value":"A482","name":"YI SYLLABLE YUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA482"},42115:{"value":"A483","name":"YI SYLLABLE YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA483"},42116:{"value":"A484","name":"YI SYLLABLE YUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA484"},42117:{"value":"A485","name":"YI SYLLABLE YURX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA485"},42118:{"value":"A486","name":"YI SYLLABLE YUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA486"},42119:{"value":"A487","name":"YI SYLLABLE YYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA487"},42120:{"value":"A488","name":"YI SYLLABLE YYX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA488"},42121:{"value":"A489","name":"YI SYLLABLE YY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA489"},42122:{"value":"A48A","name":"YI SYLLABLE YYP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA48A"},42123:{"value":"A48B","name":"YI SYLLABLE YYRX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA48B"},42124:{"value":"A48C","name":"YI SYLLABLE YYR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA48C"},42192:{"value":"A4D0","name":"LISU LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D0"},42193:{"value":"A4D1","name":"LISU LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D1"},42194:{"value":"A4D2","name":"LISU LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D2"},42195:{"value":"A4D3","name":"LISU LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D3"},42196:{"value":"A4D4","name":"LISU LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D4"},42197:{"value":"A4D5","name":"LISU LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D5"},42198:{"value":"A4D6","name":"LISU LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D6"},42199:{"value":"A4D7","name":"LISU LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D7"},42200:{"value":"A4D8","name":"LISU LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D8"},42201:{"value":"A4D9","name":"LISU LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4D9"},42202:{"value":"A4DA","name":"LISU LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4DA"},42203:{"value":"A4DB","name":"LISU LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4DB"},42204:{"value":"A4DC","name":"LISU LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4DC"},42205:{"value":"A4DD","name":"LISU LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4DD"},42206:{"value":"A4DE","name":"LISU LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4DE"},42207:{"value":"A4DF","name":"LISU LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4DF"},42208:{"value":"A4E0","name":"LISU LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E0"},42209:{"value":"A4E1","name":"LISU LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E1"},42210:{"value":"A4E2","name":"LISU LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E2"},42211:{"value":"A4E3","name":"LISU LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E3"},42212:{"value":"A4E4","name":"LISU LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E4"},42213:{"value":"A4E5","name":"LISU LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E5"},42214:{"value":"A4E6","name":"LISU LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E6"},42215:{"value":"A4E7","name":"LISU LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E7"},42216:{"value":"A4E8","name":"LISU LETTER HHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E8"},42217:{"value":"A4E9","name":"LISU LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4E9"},42218:{"value":"A4EA","name":"LISU LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4EA"},42219:{"value":"A4EB","name":"LISU LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4EB"},42220:{"value":"A4EC","name":"LISU LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4EC"},42221:{"value":"A4ED","name":"LISU LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4ED"},42222:{"value":"A4EE","name":"LISU LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4EE"},42223:{"value":"A4EF","name":"LISU LETTER AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4EF"},42224:{"value":"A4F0","name":"LISU LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F0"},42225:{"value":"A4F1","name":"LISU LETTER EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F1"},42226:{"value":"A4F2","name":"LISU LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F2"},42227:{"value":"A4F3","name":"LISU LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F3"},42228:{"value":"A4F4","name":"LISU LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F4"},42229:{"value":"A4F5","name":"LISU LETTER UE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F5"},42230:{"value":"A4F6","name":"LISU LETTER UH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F6"},42231:{"value":"A4F7","name":"LISU LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4F7"},42240:{"value":"A500","name":"VAI SYLLABLE EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA500"},42241:{"value":"A501","name":"VAI SYLLABLE EEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA501"},42242:{"value":"A502","name":"VAI SYLLABLE HEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA502"},42243:{"value":"A503","name":"VAI SYLLABLE WEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA503"},42244:{"value":"A504","name":"VAI SYLLABLE WEEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA504"},42245:{"value":"A505","name":"VAI SYLLABLE PEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA505"},42246:{"value":"A506","name":"VAI SYLLABLE BHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA506"},42247:{"value":"A507","name":"VAI SYLLABLE BEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA507"},42248:{"value":"A508","name":"VAI SYLLABLE MBEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA508"},42249:{"value":"A509","name":"VAI SYLLABLE KPEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA509"},42250:{"value":"A50A","name":"VAI SYLLABLE MGBEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA50A"},42251:{"value":"A50B","name":"VAI SYLLABLE GBEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA50B"},42252:{"value":"A50C","name":"VAI SYLLABLE FEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA50C"},42253:{"value":"A50D","name":"VAI SYLLABLE VEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA50D"},42254:{"value":"A50E","name":"VAI SYLLABLE TEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA50E"},42255:{"value":"A50F","name":"VAI SYLLABLE THEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA50F"},42256:{"value":"A510","name":"VAI SYLLABLE DHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA510"},42257:{"value":"A511","name":"VAI SYLLABLE DHHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA511"},42258:{"value":"A512","name":"VAI SYLLABLE LEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA512"},42259:{"value":"A513","name":"VAI SYLLABLE REE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA513"},42260:{"value":"A514","name":"VAI SYLLABLE DEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA514"},42261:{"value":"A515","name":"VAI SYLLABLE NDEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA515"},42262:{"value":"A516","name":"VAI SYLLABLE SEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA516"},42263:{"value":"A517","name":"VAI SYLLABLE SHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA517"},42264:{"value":"A518","name":"VAI SYLLABLE ZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA518"},42265:{"value":"A519","name":"VAI SYLLABLE ZHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA519"},42266:{"value":"A51A","name":"VAI SYLLABLE CEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA51A"},42267:{"value":"A51B","name":"VAI SYLLABLE JEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA51B"},42268:{"value":"A51C","name":"VAI SYLLABLE NJEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA51C"},42269:{"value":"A51D","name":"VAI SYLLABLE YEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA51D"},42270:{"value":"A51E","name":"VAI SYLLABLE KEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA51E"},42271:{"value":"A51F","name":"VAI SYLLABLE NGGEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA51F"},42272:{"value":"A520","name":"VAI SYLLABLE GEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA520"},42273:{"value":"A521","name":"VAI SYLLABLE MEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA521"},42274:{"value":"A522","name":"VAI SYLLABLE NEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA522"},42275:{"value":"A523","name":"VAI SYLLABLE NYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA523"},42276:{"value":"A524","name":"VAI SYLLABLE I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA524"},42277:{"value":"A525","name":"VAI SYLLABLE IN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA525"},42278:{"value":"A526","name":"VAI SYLLABLE HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA526"},42279:{"value":"A527","name":"VAI SYLLABLE HIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA527"},42280:{"value":"A528","name":"VAI SYLLABLE WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA528"},42281:{"value":"A529","name":"VAI SYLLABLE WIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA529"},42282:{"value":"A52A","name":"VAI SYLLABLE PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA52A"},42283:{"value":"A52B","name":"VAI SYLLABLE BHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA52B"},42284:{"value":"A52C","name":"VAI SYLLABLE BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA52C"},42285:{"value":"A52D","name":"VAI SYLLABLE MBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA52D"},42286:{"value":"A52E","name":"VAI SYLLABLE KPI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA52E"},42287:{"value":"A52F","name":"VAI SYLLABLE MGBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA52F"},42288:{"value":"A530","name":"VAI SYLLABLE GBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA530"},42289:{"value":"A531","name":"VAI SYLLABLE FI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA531"},42290:{"value":"A532","name":"VAI SYLLABLE VI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA532"},42291:{"value":"A533","name":"VAI SYLLABLE TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA533"},42292:{"value":"A534","name":"VAI SYLLABLE THI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA534"},42293:{"value":"A535","name":"VAI SYLLABLE DHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA535"},42294:{"value":"A536","name":"VAI SYLLABLE DHHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA536"},42295:{"value":"A537","name":"VAI SYLLABLE LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA537"},42296:{"value":"A538","name":"VAI SYLLABLE RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA538"},42297:{"value":"A539","name":"VAI SYLLABLE DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA539"},42298:{"value":"A53A","name":"VAI SYLLABLE NDI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA53A"},42299:{"value":"A53B","name":"VAI SYLLABLE SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA53B"},42300:{"value":"A53C","name":"VAI SYLLABLE SHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA53C"},42301:{"value":"A53D","name":"VAI SYLLABLE ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA53D"},42302:{"value":"A53E","name":"VAI SYLLABLE ZHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA53E"},42303:{"value":"A53F","name":"VAI SYLLABLE CI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA53F"},42304:{"value":"A540","name":"VAI SYLLABLE JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA540"},42305:{"value":"A541","name":"VAI SYLLABLE NJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA541"},42306:{"value":"A542","name":"VAI SYLLABLE YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA542"},42307:{"value":"A543","name":"VAI SYLLABLE KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA543"},42308:{"value":"A544","name":"VAI SYLLABLE NGGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA544"},42309:{"value":"A545","name":"VAI SYLLABLE GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA545"},42310:{"value":"A546","name":"VAI SYLLABLE MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA546"},42311:{"value":"A547","name":"VAI SYLLABLE NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA547"},42312:{"value":"A548","name":"VAI SYLLABLE NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA548"},42313:{"value":"A549","name":"VAI SYLLABLE A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA549"},42314:{"value":"A54A","name":"VAI SYLLABLE AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA54A"},42315:{"value":"A54B","name":"VAI SYLLABLE NGAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA54B"},42316:{"value":"A54C","name":"VAI SYLLABLE HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA54C"},42317:{"value":"A54D","name":"VAI SYLLABLE HAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA54D"},42318:{"value":"A54E","name":"VAI SYLLABLE WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA54E"},42319:{"value":"A54F","name":"VAI SYLLABLE WAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA54F"},42320:{"value":"A550","name":"VAI SYLLABLE PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA550"},42321:{"value":"A551","name":"VAI SYLLABLE BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA551"},42322:{"value":"A552","name":"VAI SYLLABLE BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA552"},42323:{"value":"A553","name":"VAI SYLLABLE MBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA553"},42324:{"value":"A554","name":"VAI SYLLABLE KPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA554"},42325:{"value":"A555","name":"VAI SYLLABLE KPAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA555"},42326:{"value":"A556","name":"VAI SYLLABLE MGBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA556"},42327:{"value":"A557","name":"VAI SYLLABLE GBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA557"},42328:{"value":"A558","name":"VAI SYLLABLE FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA558"},42329:{"value":"A559","name":"VAI SYLLABLE VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA559"},42330:{"value":"A55A","name":"VAI SYLLABLE TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA55A"},42331:{"value":"A55B","name":"VAI SYLLABLE THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA55B"},42332:{"value":"A55C","name":"VAI SYLLABLE DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA55C"},42333:{"value":"A55D","name":"VAI SYLLABLE DHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA55D"},42334:{"value":"A55E","name":"VAI SYLLABLE LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA55E"},42335:{"value":"A55F","name":"VAI SYLLABLE RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA55F"},42336:{"value":"A560","name":"VAI SYLLABLE DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA560"},42337:{"value":"A561","name":"VAI SYLLABLE NDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA561"},42338:{"value":"A562","name":"VAI SYLLABLE SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA562"},42339:{"value":"A563","name":"VAI SYLLABLE SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA563"},42340:{"value":"A564","name":"VAI SYLLABLE ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA564"},42341:{"value":"A565","name":"VAI SYLLABLE ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA565"},42342:{"value":"A566","name":"VAI SYLLABLE CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA566"},42343:{"value":"A567","name":"VAI SYLLABLE JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA567"},42344:{"value":"A568","name":"VAI SYLLABLE NJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA568"},42345:{"value":"A569","name":"VAI SYLLABLE YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA569"},42346:{"value":"A56A","name":"VAI SYLLABLE KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA56A"},42347:{"value":"A56B","name":"VAI SYLLABLE KAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA56B"},42348:{"value":"A56C","name":"VAI SYLLABLE NGGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA56C"},42349:{"value":"A56D","name":"VAI SYLLABLE GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA56D"},42350:{"value":"A56E","name":"VAI SYLLABLE MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA56E"},42351:{"value":"A56F","name":"VAI SYLLABLE NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA56F"},42352:{"value":"A570","name":"VAI SYLLABLE NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA570"},42353:{"value":"A571","name":"VAI SYLLABLE OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA571"},42354:{"value":"A572","name":"VAI SYLLABLE OON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA572"},42355:{"value":"A573","name":"VAI SYLLABLE HOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA573"},42356:{"value":"A574","name":"VAI SYLLABLE WOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA574"},42357:{"value":"A575","name":"VAI SYLLABLE WOON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA575"},42358:{"value":"A576","name":"VAI SYLLABLE POO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA576"},42359:{"value":"A577","name":"VAI SYLLABLE BHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA577"},42360:{"value":"A578","name":"VAI SYLLABLE BOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA578"},42361:{"value":"A579","name":"VAI SYLLABLE MBOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA579"},42362:{"value":"A57A","name":"VAI SYLLABLE KPOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA57A"},42363:{"value":"A57B","name":"VAI SYLLABLE MGBOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA57B"},42364:{"value":"A57C","name":"VAI SYLLABLE GBOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA57C"},42365:{"value":"A57D","name":"VAI SYLLABLE FOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA57D"},42366:{"value":"A57E","name":"VAI SYLLABLE VOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA57E"},42367:{"value":"A57F","name":"VAI SYLLABLE TOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA57F"},42368:{"value":"A580","name":"VAI SYLLABLE THOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA580"},42369:{"value":"A581","name":"VAI SYLLABLE DHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA581"},42370:{"value":"A582","name":"VAI SYLLABLE DHHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA582"},42371:{"value":"A583","name":"VAI SYLLABLE LOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA583"},42372:{"value":"A584","name":"VAI SYLLABLE ROO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA584"},42373:{"value":"A585","name":"VAI SYLLABLE DOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA585"},42374:{"value":"A586","name":"VAI SYLLABLE NDOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA586"},42375:{"value":"A587","name":"VAI SYLLABLE SOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA587"},42376:{"value":"A588","name":"VAI SYLLABLE SHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA588"},42377:{"value":"A589","name":"VAI SYLLABLE ZOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA589"},42378:{"value":"A58A","name":"VAI SYLLABLE ZHOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA58A"},42379:{"value":"A58B","name":"VAI SYLLABLE COO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA58B"},42380:{"value":"A58C","name":"VAI SYLLABLE JOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA58C"},42381:{"value":"A58D","name":"VAI SYLLABLE NJOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA58D"},42382:{"value":"A58E","name":"VAI SYLLABLE YOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA58E"},42383:{"value":"A58F","name":"VAI SYLLABLE KOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA58F"},42384:{"value":"A590","name":"VAI SYLLABLE NGGOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA590"},42385:{"value":"A591","name":"VAI SYLLABLE GOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA591"},42386:{"value":"A592","name":"VAI SYLLABLE MOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA592"},42387:{"value":"A593","name":"VAI SYLLABLE NOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA593"},42388:{"value":"A594","name":"VAI SYLLABLE NYOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA594"},42389:{"value":"A595","name":"VAI SYLLABLE U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA595"},42390:{"value":"A596","name":"VAI SYLLABLE UN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA596"},42391:{"value":"A597","name":"VAI SYLLABLE HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA597"},42392:{"value":"A598","name":"VAI SYLLABLE HUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA598"},42393:{"value":"A599","name":"VAI SYLLABLE WU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA599"},42394:{"value":"A59A","name":"VAI SYLLABLE WUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA59A"},42395:{"value":"A59B","name":"VAI SYLLABLE PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA59B"},42396:{"value":"A59C","name":"VAI SYLLABLE BHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA59C"},42397:{"value":"A59D","name":"VAI SYLLABLE BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA59D"},42398:{"value":"A59E","name":"VAI SYLLABLE MBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA59E"},42399:{"value":"A59F","name":"VAI SYLLABLE KPU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA59F"},42400:{"value":"A5A0","name":"VAI SYLLABLE MGBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A0"},42401:{"value":"A5A1","name":"VAI SYLLABLE GBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A1"},42402:{"value":"A5A2","name":"VAI SYLLABLE FU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A2"},42403:{"value":"A5A3","name":"VAI SYLLABLE VU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A3"},42404:{"value":"A5A4","name":"VAI SYLLABLE TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A4"},42405:{"value":"A5A5","name":"VAI SYLLABLE THU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A5"},42406:{"value":"A5A6","name":"VAI SYLLABLE DHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A6"},42407:{"value":"A5A7","name":"VAI SYLLABLE DHHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A7"},42408:{"value":"A5A8","name":"VAI SYLLABLE LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A8"},42409:{"value":"A5A9","name":"VAI SYLLABLE RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5A9"},42410:{"value":"A5AA","name":"VAI SYLLABLE DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5AA"},42411:{"value":"A5AB","name":"VAI SYLLABLE NDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5AB"},42412:{"value":"A5AC","name":"VAI SYLLABLE SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5AC"},42413:{"value":"A5AD","name":"VAI SYLLABLE SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5AD"},42414:{"value":"A5AE","name":"VAI SYLLABLE ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5AE"},42415:{"value":"A5AF","name":"VAI SYLLABLE ZHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5AF"},42416:{"value":"A5B0","name":"VAI SYLLABLE CU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B0"},42417:{"value":"A5B1","name":"VAI SYLLABLE JU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B1"},42418:{"value":"A5B2","name":"VAI SYLLABLE NJU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B2"},42419:{"value":"A5B3","name":"VAI SYLLABLE YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B3"},42420:{"value":"A5B4","name":"VAI SYLLABLE KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B4"},42421:{"value":"A5B5","name":"VAI SYLLABLE NGGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B5"},42422:{"value":"A5B6","name":"VAI SYLLABLE GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B6"},42423:{"value":"A5B7","name":"VAI SYLLABLE MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B7"},42424:{"value":"A5B8","name":"VAI SYLLABLE NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B8"},42425:{"value":"A5B9","name":"VAI SYLLABLE NYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5B9"},42426:{"value":"A5BA","name":"VAI SYLLABLE O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5BA"},42427:{"value":"A5BB","name":"VAI SYLLABLE ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5BB"},42428:{"value":"A5BC","name":"VAI SYLLABLE NGON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5BC"},42429:{"value":"A5BD","name":"VAI SYLLABLE HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5BD"},42430:{"value":"A5BE","name":"VAI SYLLABLE HON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5BE"},42431:{"value":"A5BF","name":"VAI SYLLABLE WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5BF"},42432:{"value":"A5C0","name":"VAI SYLLABLE WON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C0"},42433:{"value":"A5C1","name":"VAI SYLLABLE PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C1"},42434:{"value":"A5C2","name":"VAI SYLLABLE BHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C2"},42435:{"value":"A5C3","name":"VAI SYLLABLE BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C3"},42436:{"value":"A5C4","name":"VAI SYLLABLE MBO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C4"},42437:{"value":"A5C5","name":"VAI SYLLABLE KPO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C5"},42438:{"value":"A5C6","name":"VAI SYLLABLE MGBO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C6"},42439:{"value":"A5C7","name":"VAI SYLLABLE GBO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C7"},42440:{"value":"A5C8","name":"VAI SYLLABLE GBON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C8"},42441:{"value":"A5C9","name":"VAI SYLLABLE FO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5C9"},42442:{"value":"A5CA","name":"VAI SYLLABLE VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5CA"},42443:{"value":"A5CB","name":"VAI SYLLABLE TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5CB"},42444:{"value":"A5CC","name":"VAI SYLLABLE THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5CC"},42445:{"value":"A5CD","name":"VAI SYLLABLE DHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5CD"},42446:{"value":"A5CE","name":"VAI SYLLABLE DHHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5CE"},42447:{"value":"A5CF","name":"VAI SYLLABLE LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5CF"},42448:{"value":"A5D0","name":"VAI SYLLABLE RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D0"},42449:{"value":"A5D1","name":"VAI SYLLABLE DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D1"},42450:{"value":"A5D2","name":"VAI SYLLABLE NDO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D2"},42451:{"value":"A5D3","name":"VAI SYLLABLE SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D3"},42452:{"value":"A5D4","name":"VAI SYLLABLE SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D4"},42453:{"value":"A5D5","name":"VAI SYLLABLE ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D5"},42454:{"value":"A5D6","name":"VAI SYLLABLE ZHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D6"},42455:{"value":"A5D7","name":"VAI SYLLABLE CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D7"},42456:{"value":"A5D8","name":"VAI SYLLABLE JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D8"},42457:{"value":"A5D9","name":"VAI SYLLABLE NJO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5D9"},42458:{"value":"A5DA","name":"VAI SYLLABLE YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5DA"},42459:{"value":"A5DB","name":"VAI SYLLABLE KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5DB"},42460:{"value":"A5DC","name":"VAI SYLLABLE NGGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5DC"},42461:{"value":"A5DD","name":"VAI SYLLABLE GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5DD"},42462:{"value":"A5DE","name":"VAI SYLLABLE MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5DE"},42463:{"value":"A5DF","name":"VAI SYLLABLE NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5DF"},42464:{"value":"A5E0","name":"VAI SYLLABLE NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E0"},42465:{"value":"A5E1","name":"VAI SYLLABLE E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E1"},42466:{"value":"A5E2","name":"VAI SYLLABLE EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E2"},42467:{"value":"A5E3","name":"VAI SYLLABLE NGEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E3"},42468:{"value":"A5E4","name":"VAI SYLLABLE HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E4"},42469:{"value":"A5E5","name":"VAI SYLLABLE HEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E5"},42470:{"value":"A5E6","name":"VAI SYLLABLE WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E6"},42471:{"value":"A5E7","name":"VAI SYLLABLE WEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E7"},42472:{"value":"A5E8","name":"VAI SYLLABLE PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E8"},42473:{"value":"A5E9","name":"VAI SYLLABLE BHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5E9"},42474:{"value":"A5EA","name":"VAI SYLLABLE BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5EA"},42475:{"value":"A5EB","name":"VAI SYLLABLE MBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5EB"},42476:{"value":"A5EC","name":"VAI SYLLABLE KPE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5EC"},42477:{"value":"A5ED","name":"VAI SYLLABLE KPEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5ED"},42478:{"value":"A5EE","name":"VAI SYLLABLE MGBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5EE"},42479:{"value":"A5EF","name":"VAI SYLLABLE GBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5EF"},42480:{"value":"A5F0","name":"VAI SYLLABLE GBEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F0"},42481:{"value":"A5F1","name":"VAI SYLLABLE FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F1"},42482:{"value":"A5F2","name":"VAI SYLLABLE VE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F2"},42483:{"value":"A5F3","name":"VAI SYLLABLE TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F3"},42484:{"value":"A5F4","name":"VAI SYLLABLE THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F4"},42485:{"value":"A5F5","name":"VAI SYLLABLE DHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F5"},42486:{"value":"A5F6","name":"VAI SYLLABLE DHHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F6"},42487:{"value":"A5F7","name":"VAI SYLLABLE LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F7"},42488:{"value":"A5F8","name":"VAI SYLLABLE RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F8"},42489:{"value":"A5F9","name":"VAI SYLLABLE DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5F9"},42490:{"value":"A5FA","name":"VAI SYLLABLE NDE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5FA"},42491:{"value":"A5FB","name":"VAI SYLLABLE SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5FB"},42492:{"value":"A5FC","name":"VAI SYLLABLE SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5FC"},42493:{"value":"A5FD","name":"VAI SYLLABLE ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5FD"},42494:{"value":"A5FE","name":"VAI SYLLABLE ZHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5FE"},42495:{"value":"A5FF","name":"VAI SYLLABLE CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA5FF"},42496:{"value":"A600","name":"VAI SYLLABLE JE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA600"},42497:{"value":"A601","name":"VAI SYLLABLE NJE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA601"},42498:{"value":"A602","name":"VAI SYLLABLE YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA602"},42499:{"value":"A603","name":"VAI SYLLABLE KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA603"},42500:{"value":"A604","name":"VAI SYLLABLE NGGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA604"},42501:{"value":"A605","name":"VAI SYLLABLE NGGEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA605"},42502:{"value":"A606","name":"VAI SYLLABLE GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA606"},42503:{"value":"A607","name":"VAI SYLLABLE GEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA607"},42504:{"value":"A608","name":"VAI SYLLABLE ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA608"},42505:{"value":"A609","name":"VAI SYLLABLE NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA609"},42506:{"value":"A60A","name":"VAI SYLLABLE NYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA60A"},42507:{"value":"A60B","name":"VAI SYLLABLE NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA60B"},42512:{"value":"A610","name":"VAI SYLLABLE NDOLE FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA610"},42513:{"value":"A611","name":"VAI SYLLABLE NDOLE KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA611"},42514:{"value":"A612","name":"VAI SYLLABLE NDOLE SOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA612"},42515:{"value":"A613","name":"VAI SYMBOL FEENG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA613"},42516:{"value":"A614","name":"VAI SYMBOL KEENG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA614"},42517:{"value":"A615","name":"VAI SYMBOL TING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA615"},42518:{"value":"A616","name":"VAI SYMBOL NII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA616"},42519:{"value":"A617","name":"VAI SYMBOL BANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA617"},42520:{"value":"A618","name":"VAI SYMBOL FAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA618"},42521:{"value":"A619","name":"VAI SYMBOL TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA619"},42522:{"value":"A61A","name":"VAI SYMBOL DANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA61A"},42523:{"value":"A61B","name":"VAI SYMBOL DOONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA61B"},42524:{"value":"A61C","name":"VAI SYMBOL KUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA61C"},42525:{"value":"A61D","name":"VAI SYMBOL TONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA61D"},42526:{"value":"A61E","name":"VAI SYMBOL DO-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA61E"},42527:{"value":"A61F","name":"VAI SYMBOL JONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA61F"},42538:{"value":"A62A","name":"VAI SYLLABLE NDOLE MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA62A"},42539:{"value":"A62B","name":"VAI SYLLABLE NDOLE DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA62B"},42606:{"value":"A66E","name":"CYRILLIC LETTER MULTIOCULAR O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA66E"},42656:{"value":"A6A0","name":"BAMUM LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A0"},42657:{"value":"A6A1","name":"BAMUM LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A1"},42658:{"value":"A6A2","name":"BAMUM LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A2"},42659:{"value":"A6A3","name":"BAMUM LETTER KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A3"},42660:{"value":"A6A4","name":"BAMUM LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A4"},42661:{"value":"A6A5","name":"BAMUM LETTER REE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A5"},42662:{"value":"A6A6","name":"BAMUM LETTER TAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A6"},42663:{"value":"A6A7","name":"BAMUM LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A7"},42664:{"value":"A6A8","name":"BAMUM LETTER NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A8"},42665:{"value":"A6A9","name":"BAMUM LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6A9"},42666:{"value":"A6AA","name":"BAMUM LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6AA"},42667:{"value":"A6AB","name":"BAMUM LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6AB"},42668:{"value":"A6AC","name":"BAMUM LETTER RII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6AC"},42669:{"value":"A6AD","name":"BAMUM LETTER RIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6AD"},42670:{"value":"A6AE","name":"BAMUM LETTER LEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6AE"},42671:{"value":"A6AF","name":"BAMUM LETTER MEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6AF"},42672:{"value":"A6B0","name":"BAMUM LETTER TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B0"},42673:{"value":"A6B1","name":"BAMUM LETTER NDAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B1"},42674:{"value":"A6B2","name":"BAMUM LETTER NJAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B2"},42675:{"value":"A6B3","name":"BAMUM LETTER M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B3"},42676:{"value":"A6B4","name":"BAMUM LETTER SUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B4"},42677:{"value":"A6B5","name":"BAMUM LETTER MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B5"},42678:{"value":"A6B6","name":"BAMUM LETTER SHII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B6"},42679:{"value":"A6B7","name":"BAMUM LETTER SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B7"},42680:{"value":"A6B8","name":"BAMUM LETTER SHEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B8"},42681:{"value":"A6B9","name":"BAMUM LETTER SEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6B9"},42682:{"value":"A6BA","name":"BAMUM LETTER KYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6BA"},42683:{"value":"A6BB","name":"BAMUM LETTER KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6BB"},42684:{"value":"A6BC","name":"BAMUM LETTER NUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6BC"},42685:{"value":"A6BD","name":"BAMUM LETTER NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6BD"},42686:{"value":"A6BE","name":"BAMUM LETTER NJUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6BE"},42687:{"value":"A6BF","name":"BAMUM LETTER YOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6BF"},42688:{"value":"A6C0","name":"BAMUM LETTER SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C0"},42689:{"value":"A6C1","name":"BAMUM LETTER YUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C1"},42690:{"value":"A6C2","name":"BAMUM LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C2"},42691:{"value":"A6C3","name":"BAMUM LETTER NSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C3"},42692:{"value":"A6C4","name":"BAMUM LETTER KEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C4"},42693:{"value":"A6C5","name":"BAMUM LETTER PEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C5"},42694:{"value":"A6C6","name":"BAMUM LETTER NJEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C6"},42695:{"value":"A6C7","name":"BAMUM LETTER NTEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C7"},42696:{"value":"A6C8","name":"BAMUM LETTER PUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C8"},42697:{"value":"A6C9","name":"BAMUM LETTER WUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6C9"},42698:{"value":"A6CA","name":"BAMUM LETTER PEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6CA"},42699:{"value":"A6CB","name":"BAMUM LETTER FEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6CB"},42700:{"value":"A6CC","name":"BAMUM LETTER RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6CC"},42701:{"value":"A6CD","name":"BAMUM LETTER LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6CD"},42702:{"value":"A6CE","name":"BAMUM LETTER MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6CE"},42703:{"value":"A6CF","name":"BAMUM LETTER NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6CF"},42704:{"value":"A6D0","name":"BAMUM LETTER REUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D0"},42705:{"value":"A6D1","name":"BAMUM LETTER RAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D1"},42706:{"value":"A6D2","name":"BAMUM LETTER KEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D2"},42707:{"value":"A6D3","name":"BAMUM LETTER NGKWAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D3"},42708:{"value":"A6D4","name":"BAMUM LETTER NGGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D4"},42709:{"value":"A6D5","name":"BAMUM LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D5"},42710:{"value":"A6D6","name":"BAMUM LETTER SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D6"},42711:{"value":"A6D7","name":"BAMUM LETTER PUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D7"},42712:{"value":"A6D8","name":"BAMUM LETTER FU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D8"},42713:{"value":"A6D9","name":"BAMUM LETTER FOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6D9"},42714:{"value":"A6DA","name":"BAMUM LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6DA"},42715:{"value":"A6DB","name":"BAMUM LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6DB"},42716:{"value":"A6DC","name":"BAMUM LETTER LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6DC"},42717:{"value":"A6DD","name":"BAMUM LETTER PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6DD"},42718:{"value":"A6DE","name":"BAMUM LETTER LOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6DE"},42719:{"value":"A6DF","name":"BAMUM LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6DF"},42720:{"value":"A6E0","name":"BAMUM LETTER MBEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E0"},42721:{"value":"A6E1","name":"BAMUM LETTER REN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E1"},42722:{"value":"A6E2","name":"BAMUM LETTER MEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E2"},42723:{"value":"A6E3","name":"BAMUM LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E3"},42724:{"value":"A6E4","name":"BAMUM LETTER TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E4"},42725:{"value":"A6E5","name":"BAMUM LETTER KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E5"},42895:{"value":"A78F","name":"LATIN LETTER SINOLOGICAL DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA78F"},42999:{"value":"A7F7","name":"LATIN EPIGRAPHIC LETTER SIDEWAYS I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7F7"},43003:{"value":"A7FB","name":"LATIN EPIGRAPHIC LETTER REVERSED F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7FB"},43004:{"value":"A7FC","name":"LATIN EPIGRAPHIC LETTER REVERSED P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7FC"},43005:{"value":"A7FD","name":"LATIN EPIGRAPHIC LETTER INVERTED M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7FD"},43006:{"value":"A7FE","name":"LATIN EPIGRAPHIC LETTER I LONGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7FE"},43007:{"value":"A7FF","name":"LATIN EPIGRAPHIC LETTER ARCHAIC M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA7FF"},43008:{"value":"A800","name":"SYLOTI NAGRI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA800"},43009:{"value":"A801","name":"SYLOTI NAGRI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA801"},43011:{"value":"A803","name":"SYLOTI NAGRI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA803"},43012:{"value":"A804","name":"SYLOTI NAGRI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA804"},43013:{"value":"A805","name":"SYLOTI NAGRI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA805"},43015:{"value":"A807","name":"SYLOTI NAGRI LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA807"},43016:{"value":"A808","name":"SYLOTI NAGRI LETTER KHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA808"},43017:{"value":"A809","name":"SYLOTI NAGRI LETTER GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA809"},43018:{"value":"A80A","name":"SYLOTI NAGRI LETTER GHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA80A"},43020:{"value":"A80C","name":"SYLOTI NAGRI LETTER CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA80C"},43021:{"value":"A80D","name":"SYLOTI NAGRI LETTER CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA80D"},43022:{"value":"A80E","name":"SYLOTI NAGRI LETTER JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA80E"},43023:{"value":"A80F","name":"SYLOTI NAGRI LETTER JHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA80F"},43024:{"value":"A810","name":"SYLOTI NAGRI LETTER TTO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA810"},43025:{"value":"A811","name":"SYLOTI NAGRI LETTER TTHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA811"},43026:{"value":"A812","name":"SYLOTI NAGRI LETTER DDO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA812"},43027:{"value":"A813","name":"SYLOTI NAGRI LETTER DDHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA813"},43028:{"value":"A814","name":"SYLOTI NAGRI LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA814"},43029:{"value":"A815","name":"SYLOTI NAGRI LETTER THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA815"},43030:{"value":"A816","name":"SYLOTI NAGRI LETTER DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA816"},43031:{"value":"A817","name":"SYLOTI NAGRI LETTER DHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA817"},43032:{"value":"A818","name":"SYLOTI NAGRI LETTER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA818"},43033:{"value":"A819","name":"SYLOTI NAGRI LETTER PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA819"},43034:{"value":"A81A","name":"SYLOTI NAGRI LETTER PHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA81A"},43035:{"value":"A81B","name":"SYLOTI NAGRI LETTER BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA81B"},43036:{"value":"A81C","name":"SYLOTI NAGRI LETTER BHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA81C"},43037:{"value":"A81D","name":"SYLOTI NAGRI LETTER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA81D"},43038:{"value":"A81E","name":"SYLOTI NAGRI LETTER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA81E"},43039:{"value":"A81F","name":"SYLOTI NAGRI LETTER LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA81F"},43040:{"value":"A820","name":"SYLOTI NAGRI LETTER RRO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA820"},43041:{"value":"A821","name":"SYLOTI NAGRI LETTER SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA821"},43042:{"value":"A822","name":"SYLOTI NAGRI LETTER HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA822"},43072:{"value":"A840","name":"PHAGS-PA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA840"},43073:{"value":"A841","name":"PHAGS-PA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA841"},43074:{"value":"A842","name":"PHAGS-PA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA842"},43075:{"value":"A843","name":"PHAGS-PA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA843"},43076:{"value":"A844","name":"PHAGS-PA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA844"},43077:{"value":"A845","name":"PHAGS-PA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA845"},43078:{"value":"A846","name":"PHAGS-PA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA846"},43079:{"value":"A847","name":"PHAGS-PA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA847"},43080:{"value":"A848","name":"PHAGS-PA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA848"},43081:{"value":"A849","name":"PHAGS-PA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA849"},43082:{"value":"A84A","name":"PHAGS-PA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA84A"},43083:{"value":"A84B","name":"PHAGS-PA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA84B"},43084:{"value":"A84C","name":"PHAGS-PA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA84C"},43085:{"value":"A84D","name":"PHAGS-PA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA84D"},43086:{"value":"A84E","name":"PHAGS-PA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA84E"},43087:{"value":"A84F","name":"PHAGS-PA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA84F"},43088:{"value":"A850","name":"PHAGS-PA LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA850"},43089:{"value":"A851","name":"PHAGS-PA LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA851"},43090:{"value":"A852","name":"PHAGS-PA LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA852"},43091:{"value":"A853","name":"PHAGS-PA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA853"},43092:{"value":"A854","name":"PHAGS-PA LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA854"},43093:{"value":"A855","name":"PHAGS-PA LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA855"},43094:{"value":"A856","name":"PHAGS-PA LETTER SMALL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA856"},43095:{"value":"A857","name":"PHAGS-PA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA857"},43096:{"value":"A858","name":"PHAGS-PA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA858"},43097:{"value":"A859","name":"PHAGS-PA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA859"},43098:{"value":"A85A","name":"PHAGS-PA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA85A"},43099:{"value":"A85B","name":"PHAGS-PA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA85B"},43100:{"value":"A85C","name":"PHAGS-PA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA85C"},43101:{"value":"A85D","name":"PHAGS-PA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA85D"},43102:{"value":"A85E","name":"PHAGS-PA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA85E"},43103:{"value":"A85F","name":"PHAGS-PA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA85F"},43104:{"value":"A860","name":"PHAGS-PA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA860"},43105:{"value":"A861","name":"PHAGS-PA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA861"},43106:{"value":"A862","name":"PHAGS-PA LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA862"},43107:{"value":"A863","name":"PHAGS-PA LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA863"},43108:{"value":"A864","name":"PHAGS-PA LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA864"},43109:{"value":"A865","name":"PHAGS-PA LETTER GGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA865"},43110:{"value":"A866","name":"PHAGS-PA LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA866"},43111:{"value":"A867","name":"PHAGS-PA SUBJOINED LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA867"},43112:{"value":"A868","name":"PHAGS-PA SUBJOINED LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA868"},43113:{"value":"A869","name":"PHAGS-PA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA869"},43114:{"value":"A86A","name":"PHAGS-PA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA86A"},43115:{"value":"A86B","name":"PHAGS-PA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA86B"},43116:{"value":"A86C","name":"PHAGS-PA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA86C"},43117:{"value":"A86D","name":"PHAGS-PA LETTER ALTERNATE YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA86D"},43118:{"value":"A86E","name":"PHAGS-PA LETTER VOICELESS SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA86E"},43119:{"value":"A86F","name":"PHAGS-PA LETTER VOICED HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA86F"},43120:{"value":"A870","name":"PHAGS-PA LETTER ASPIRATED FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA870"},43121:{"value":"A871","name":"PHAGS-PA SUBJOINED LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA871"},43122:{"value":"A872","name":"PHAGS-PA SUPERFIXED LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA872"},43123:{"value":"A873","name":"PHAGS-PA LETTER CANDRABINDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA873"},43138:{"value":"A882","name":"SAURASHTRA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA882"},43139:{"value":"A883","name":"SAURASHTRA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA883"},43140:{"value":"A884","name":"SAURASHTRA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA884"},43141:{"value":"A885","name":"SAURASHTRA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA885"},43142:{"value":"A886","name":"SAURASHTRA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA886"},43143:{"value":"A887","name":"SAURASHTRA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA887"},43144:{"value":"A888","name":"SAURASHTRA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA888"},43145:{"value":"A889","name":"SAURASHTRA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA889"},43146:{"value":"A88A","name":"SAURASHTRA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA88A"},43147:{"value":"A88B","name":"SAURASHTRA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA88B"},43148:{"value":"A88C","name":"SAURASHTRA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA88C"},43149:{"value":"A88D","name":"SAURASHTRA LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA88D"},43150:{"value":"A88E","name":"SAURASHTRA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA88E"},43151:{"value":"A88F","name":"SAURASHTRA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA88F"},43152:{"value":"A890","name":"SAURASHTRA LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA890"},43153:{"value":"A891","name":"SAURASHTRA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA891"},43154:{"value":"A892","name":"SAURASHTRA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA892"},43155:{"value":"A893","name":"SAURASHTRA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA893"},43156:{"value":"A894","name":"SAURASHTRA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA894"},43157:{"value":"A895","name":"SAURASHTRA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA895"},43158:{"value":"A896","name":"SAURASHTRA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA896"},43159:{"value":"A897","name":"SAURASHTRA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA897"},43160:{"value":"A898","name":"SAURASHTRA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA898"},43161:{"value":"A899","name":"SAURASHTRA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA899"},43162:{"value":"A89A","name":"SAURASHTRA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA89A"},43163:{"value":"A89B","name":"SAURASHTRA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA89B"},43164:{"value":"A89C","name":"SAURASHTRA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA89C"},43165:{"value":"A89D","name":"SAURASHTRA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA89D"},43166:{"value":"A89E","name":"SAURASHTRA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA89E"},43167:{"value":"A89F","name":"SAURASHTRA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA89F"},43168:{"value":"A8A0","name":"SAURASHTRA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A0"},43169:{"value":"A8A1","name":"SAURASHTRA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A1"},43170:{"value":"A8A2","name":"SAURASHTRA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A2"},43171:{"value":"A8A3","name":"SAURASHTRA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A3"},43172:{"value":"A8A4","name":"SAURASHTRA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A4"},43173:{"value":"A8A5","name":"SAURASHTRA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A5"},43174:{"value":"A8A6","name":"SAURASHTRA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A6"},43175:{"value":"A8A7","name":"SAURASHTRA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A7"},43176:{"value":"A8A8","name":"SAURASHTRA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A8"},43177:{"value":"A8A9","name":"SAURASHTRA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8A9"},43178:{"value":"A8AA","name":"SAURASHTRA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8AA"},43179:{"value":"A8AB","name":"SAURASHTRA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8AB"},43180:{"value":"A8AC","name":"SAURASHTRA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8AC"},43181:{"value":"A8AD","name":"SAURASHTRA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8AD"},43182:{"value":"A8AE","name":"SAURASHTRA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8AE"},43183:{"value":"A8AF","name":"SAURASHTRA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8AF"},43184:{"value":"A8B0","name":"SAURASHTRA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B0"},43185:{"value":"A8B1","name":"SAURASHTRA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B1"},43186:{"value":"A8B2","name":"SAURASHTRA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B2"},43187:{"value":"A8B3","name":"SAURASHTRA LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B3"},43250:{"value":"A8F2","name":"DEVANAGARI SIGN SPACING CANDRABINDU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F2"},43251:{"value":"A8F3","name":"DEVANAGARI SIGN CANDRABINDU VIRAMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F3"},43252:{"value":"A8F4","name":"DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F4"},43253:{"value":"A8F5","name":"DEVANAGARI SIGN CANDRABINDU TWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F5"},43254:{"value":"A8F6","name":"DEVANAGARI SIGN CANDRABINDU THREE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F6"},43255:{"value":"A8F7","name":"DEVANAGARI SIGN CANDRABINDU AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F7"},43259:{"value":"A8FB","name":"DEVANAGARI HEADSTROKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8FB"},43261:{"value":"A8FD","name":"DEVANAGARI JAIN OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8FD"},43262:{"value":"A8FE","name":"DEVANAGARI LETTER AY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8FE"},43274:{"value":"A90A","name":"KAYAH LI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA90A"},43275:{"value":"A90B","name":"KAYAH LI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA90B"},43276:{"value":"A90C","name":"KAYAH LI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA90C"},43277:{"value":"A90D","name":"KAYAH LI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA90D"},43278:{"value":"A90E","name":"KAYAH LI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA90E"},43279:{"value":"A90F","name":"KAYAH LI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA90F"},43280:{"value":"A910","name":"KAYAH LI LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA910"},43281:{"value":"A911","name":"KAYAH LI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA911"},43282:{"value":"A912","name":"KAYAH LI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA912"},43283:{"value":"A913","name":"KAYAH LI LETTER HTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA913"},43284:{"value":"A914","name":"KAYAH LI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA914"},43285:{"value":"A915","name":"KAYAH LI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA915"},43286:{"value":"A916","name":"KAYAH LI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA916"},43287:{"value":"A917","name":"KAYAH LI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA917"},43288:{"value":"A918","name":"KAYAH LI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA918"},43289:{"value":"A919","name":"KAYAH LI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA919"},43290:{"value":"A91A","name":"KAYAH LI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA91A"},43291:{"value":"A91B","name":"KAYAH LI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA91B"},43292:{"value":"A91C","name":"KAYAH LI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA91C"},43293:{"value":"A91D","name":"KAYAH LI LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA91D"},43294:{"value":"A91E","name":"KAYAH LI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA91E"},43295:{"value":"A91F","name":"KAYAH LI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA91F"},43296:{"value":"A920","name":"KAYAH LI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA920"},43297:{"value":"A921","name":"KAYAH LI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA921"},43298:{"value":"A922","name":"KAYAH LI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA922"},43299:{"value":"A923","name":"KAYAH LI LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA923"},43300:{"value":"A924","name":"KAYAH LI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA924"},43301:{"value":"A925","name":"KAYAH LI LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA925"},43312:{"value":"A930","name":"REJANG LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA930"},43313:{"value":"A931","name":"REJANG LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA931"},43314:{"value":"A932","name":"REJANG LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA932"},43315:{"value":"A933","name":"REJANG LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA933"},43316:{"value":"A934","name":"REJANG LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA934"},43317:{"value":"A935","name":"REJANG LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA935"},43318:{"value":"A936","name":"REJANG LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA936"},43319:{"value":"A937","name":"REJANG LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA937"},43320:{"value":"A938","name":"REJANG LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA938"},43321:{"value":"A939","name":"REJANG LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA939"},43322:{"value":"A93A","name":"REJANG LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA93A"},43323:{"value":"A93B","name":"REJANG LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA93B"},43324:{"value":"A93C","name":"REJANG LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA93C"},43325:{"value":"A93D","name":"REJANG LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA93D"},43326:{"value":"A93E","name":"REJANG LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA93E"},43327:{"value":"A93F","name":"REJANG LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA93F"},43328:{"value":"A940","name":"REJANG LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA940"},43329:{"value":"A941","name":"REJANG LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA941"},43330:{"value":"A942","name":"REJANG LETTER MBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA942"},43331:{"value":"A943","name":"REJANG LETTER NGGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA943"},43332:{"value":"A944","name":"REJANG LETTER NDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA944"},43333:{"value":"A945","name":"REJANG LETTER NYJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA945"},43334:{"value":"A946","name":"REJANG LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA946"},43360:{"value":"A960","name":"HANGUL CHOSEONG TIKEUT-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA960"},43361:{"value":"A961","name":"HANGUL CHOSEONG TIKEUT-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA961"},43362:{"value":"A962","name":"HANGUL CHOSEONG TIKEUT-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA962"},43363:{"value":"A963","name":"HANGUL CHOSEONG TIKEUT-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA963"},43364:{"value":"A964","name":"HANGUL CHOSEONG RIEUL-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA964"},43365:{"value":"A965","name":"HANGUL CHOSEONG RIEUL-SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA965"},43366:{"value":"A966","name":"HANGUL CHOSEONG RIEUL-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA966"},43367:{"value":"A967","name":"HANGUL CHOSEONG RIEUL-SSANGTIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA967"},43368:{"value":"A968","name":"HANGUL CHOSEONG RIEUL-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA968"},43369:{"value":"A969","name":"HANGUL CHOSEONG RIEUL-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA969"},43370:{"value":"A96A","name":"HANGUL CHOSEONG RIEUL-SSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA96A"},43371:{"value":"A96B","name":"HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA96B"},43372:{"value":"A96C","name":"HANGUL CHOSEONG RIEUL-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA96C"},43373:{"value":"A96D","name":"HANGUL CHOSEONG RIEUL-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA96D"},43374:{"value":"A96E","name":"HANGUL CHOSEONG RIEUL-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA96E"},43375:{"value":"A96F","name":"HANGUL CHOSEONG MIEUM-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA96F"},43376:{"value":"A970","name":"HANGUL CHOSEONG MIEUM-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA970"},43377:{"value":"A971","name":"HANGUL CHOSEONG MIEUM-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA971"},43378:{"value":"A972","name":"HANGUL CHOSEONG PIEUP-SIOS-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA972"},43379:{"value":"A973","name":"HANGUL CHOSEONG PIEUP-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA973"},43380:{"value":"A974","name":"HANGUL CHOSEONG PIEUP-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA974"},43381:{"value":"A975","name":"HANGUL CHOSEONG SSANGSIOS-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA975"},43382:{"value":"A976","name":"HANGUL CHOSEONG IEUNG-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA976"},43383:{"value":"A977","name":"HANGUL CHOSEONG IEUNG-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA977"},43384:{"value":"A978","name":"HANGUL CHOSEONG SSANGCIEUC-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA978"},43385:{"value":"A979","name":"HANGUL CHOSEONG SSANGTHIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA979"},43386:{"value":"A97A","name":"HANGUL CHOSEONG PHIEUPH-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA97A"},43387:{"value":"A97B","name":"HANGUL CHOSEONG HIEUH-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA97B"},43388:{"value":"A97C","name":"HANGUL CHOSEONG SSANGYEORINHIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA97C"},43396:{"value":"A984","name":"JAVANESE LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA984"},43397:{"value":"A985","name":"JAVANESE LETTER I KAWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA985"},43398:{"value":"A986","name":"JAVANESE LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA986"},43399:{"value":"A987","name":"JAVANESE LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA987"},43400:{"value":"A988","name":"JAVANESE LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA988"},43401:{"value":"A989","name":"JAVANESE LETTER PA CEREK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA989"},43402:{"value":"A98A","name":"JAVANESE LETTER NGA LELET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA98A"},43403:{"value":"A98B","name":"JAVANESE LETTER NGA LELET RASWADI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA98B"},43404:{"value":"A98C","name":"JAVANESE LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA98C"},43405:{"value":"A98D","name":"JAVANESE LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA98D"},43406:{"value":"A98E","name":"JAVANESE LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA98E"},43407:{"value":"A98F","name":"JAVANESE LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA98F"},43408:{"value":"A990","name":"JAVANESE LETTER KA SASAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA990"},43409:{"value":"A991","name":"JAVANESE LETTER KA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA991"},43410:{"value":"A992","name":"JAVANESE LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA992"},43411:{"value":"A993","name":"JAVANESE LETTER GA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA993"},43412:{"value":"A994","name":"JAVANESE LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA994"},43413:{"value":"A995","name":"JAVANESE LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA995"},43414:{"value":"A996","name":"JAVANESE LETTER CA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA996"},43415:{"value":"A997","name":"JAVANESE LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA997"},43416:{"value":"A998","name":"JAVANESE LETTER NYA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA998"},43417:{"value":"A999","name":"JAVANESE LETTER JA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA999"},43418:{"value":"A99A","name":"JAVANESE LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA99A"},43419:{"value":"A99B","name":"JAVANESE LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA99B"},43420:{"value":"A99C","name":"JAVANESE LETTER TTA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA99C"},43421:{"value":"A99D","name":"JAVANESE LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA99D"},43422:{"value":"A99E","name":"JAVANESE LETTER DDA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA99E"},43423:{"value":"A99F","name":"JAVANESE LETTER NA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA99F"},43424:{"value":"A9A0","name":"JAVANESE LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A0"},43425:{"value":"A9A1","name":"JAVANESE LETTER TA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A1"},43426:{"value":"A9A2","name":"JAVANESE LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A2"},43427:{"value":"A9A3","name":"JAVANESE LETTER DA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A3"},43428:{"value":"A9A4","name":"JAVANESE LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A4"},43429:{"value":"A9A5","name":"JAVANESE LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A5"},43430:{"value":"A9A6","name":"JAVANESE LETTER PA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A6"},43431:{"value":"A9A7","name":"JAVANESE LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A7"},43432:{"value":"A9A8","name":"JAVANESE LETTER BA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A8"},43433:{"value":"A9A9","name":"JAVANESE LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9A9"},43434:{"value":"A9AA","name":"JAVANESE LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9AA"},43435:{"value":"A9AB","name":"JAVANESE LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9AB"},43436:{"value":"A9AC","name":"JAVANESE LETTER RA AGUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9AC"},43437:{"value":"A9AD","name":"JAVANESE LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9AD"},43438:{"value":"A9AE","name":"JAVANESE LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9AE"},43439:{"value":"A9AF","name":"JAVANESE LETTER SA MURDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9AF"},43440:{"value":"A9B0","name":"JAVANESE LETTER SA MAHAPRANA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B0"},43441:{"value":"A9B1","name":"JAVANESE LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B1"},43442:{"value":"A9B2","name":"JAVANESE LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B2"},43488:{"value":"A9E0","name":"MYANMAR LETTER SHAN GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E0"},43489:{"value":"A9E1","name":"MYANMAR LETTER SHAN CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E1"},43490:{"value":"A9E2","name":"MYANMAR LETTER SHAN JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E2"},43491:{"value":"A9E3","name":"MYANMAR LETTER SHAN NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E3"},43492:{"value":"A9E4","name":"MYANMAR LETTER SHAN BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E4"},43495:{"value":"A9E7","name":"MYANMAR LETTER TAI LAING NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E7"},43496:{"value":"A9E8","name":"MYANMAR LETTER TAI LAING FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E8"},43497:{"value":"A9E9","name":"MYANMAR LETTER TAI LAING GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E9"},43498:{"value":"A9EA","name":"MYANMAR LETTER TAI LAING GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9EA"},43499:{"value":"A9EB","name":"MYANMAR LETTER TAI LAING JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9EB"},43500:{"value":"A9EC","name":"MYANMAR LETTER TAI LAING JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9EC"},43501:{"value":"A9ED","name":"MYANMAR LETTER TAI LAING DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9ED"},43502:{"value":"A9EE","name":"MYANMAR LETTER TAI LAING DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9EE"},43503:{"value":"A9EF","name":"MYANMAR LETTER TAI LAING NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9EF"},43514:{"value":"A9FA","name":"MYANMAR LETTER TAI LAING LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9FA"},43515:{"value":"A9FB","name":"MYANMAR LETTER TAI LAING DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9FB"},43516:{"value":"A9FC","name":"MYANMAR LETTER TAI LAING DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9FC"},43517:{"value":"A9FD","name":"MYANMAR LETTER TAI LAING BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9FD"},43518:{"value":"A9FE","name":"MYANMAR LETTER TAI LAING BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9FE"},43520:{"value":"AA00","name":"CHAM LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA00"},43521:{"value":"AA01","name":"CHAM LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA01"},43522:{"value":"AA02","name":"CHAM LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA02"},43523:{"value":"AA03","name":"CHAM LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA03"},43524:{"value":"AA04","name":"CHAM LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA04"},43525:{"value":"AA05","name":"CHAM LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA05"},43526:{"value":"AA06","name":"CHAM LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA06"},43527:{"value":"AA07","name":"CHAM LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA07"},43528:{"value":"AA08","name":"CHAM LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA08"},43529:{"value":"AA09","name":"CHAM LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA09"},43530:{"value":"AA0A","name":"CHAM LETTER NGUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA0A"},43531:{"value":"AA0B","name":"CHAM LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA0B"},43532:{"value":"AA0C","name":"CHAM LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA0C"},43533:{"value":"AA0D","name":"CHAM LETTER CHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA0D"},43534:{"value":"AA0E","name":"CHAM LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA0E"},43535:{"value":"AA0F","name":"CHAM LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA0F"},43536:{"value":"AA10","name":"CHAM LETTER NHUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA10"},43537:{"value":"AA11","name":"CHAM LETTER NHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA11"},43538:{"value":"AA12","name":"CHAM LETTER NHJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA12"},43539:{"value":"AA13","name":"CHAM LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA13"},43540:{"value":"AA14","name":"CHAM LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA14"},43541:{"value":"AA15","name":"CHAM LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA15"},43542:{"value":"AA16","name":"CHAM LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA16"},43543:{"value":"AA17","name":"CHAM LETTER NUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA17"},43544:{"value":"AA18","name":"CHAM LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA18"},43545:{"value":"AA19","name":"CHAM LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA19"},43546:{"value":"AA1A","name":"CHAM LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA1A"},43547:{"value":"AA1B","name":"CHAM LETTER PPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA1B"},43548:{"value":"AA1C","name":"CHAM LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA1C"},43549:{"value":"AA1D","name":"CHAM LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA1D"},43550:{"value":"AA1E","name":"CHAM LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA1E"},43551:{"value":"AA1F","name":"CHAM LETTER MUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA1F"},43552:{"value":"AA20","name":"CHAM LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA20"},43553:{"value":"AA21","name":"CHAM LETTER BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA21"},43554:{"value":"AA22","name":"CHAM LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA22"},43555:{"value":"AA23","name":"CHAM LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA23"},43556:{"value":"AA24","name":"CHAM LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA24"},43557:{"value":"AA25","name":"CHAM LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA25"},43558:{"value":"AA26","name":"CHAM LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA26"},43559:{"value":"AA27","name":"CHAM LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA27"},43560:{"value":"AA28","name":"CHAM LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA28"},43584:{"value":"AA40","name":"CHAM LETTER FINAL K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA40"},43585:{"value":"AA41","name":"CHAM LETTER FINAL G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA41"},43586:{"value":"AA42","name":"CHAM LETTER FINAL NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA42"},43588:{"value":"AA44","name":"CHAM LETTER FINAL CH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA44"},43589:{"value":"AA45","name":"CHAM LETTER FINAL T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA45"},43590:{"value":"AA46","name":"CHAM LETTER FINAL N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA46"},43591:{"value":"AA47","name":"CHAM LETTER FINAL P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA47"},43592:{"value":"AA48","name":"CHAM LETTER FINAL Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA48"},43593:{"value":"AA49","name":"CHAM LETTER FINAL R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA49"},43594:{"value":"AA4A","name":"CHAM LETTER FINAL L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA4A"},43595:{"value":"AA4B","name":"CHAM LETTER FINAL SS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA4B"},43616:{"value":"AA60","name":"MYANMAR LETTER KHAMTI GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA60"},43617:{"value":"AA61","name":"MYANMAR LETTER KHAMTI CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA61"},43618:{"value":"AA62","name":"MYANMAR LETTER KHAMTI CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA62"},43619:{"value":"AA63","name":"MYANMAR LETTER KHAMTI JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA63"},43620:{"value":"AA64","name":"MYANMAR LETTER KHAMTI JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA64"},43621:{"value":"AA65","name":"MYANMAR LETTER KHAMTI NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA65"},43622:{"value":"AA66","name":"MYANMAR LETTER KHAMTI TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA66"},43623:{"value":"AA67","name":"MYANMAR LETTER KHAMTI TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA67"},43624:{"value":"AA68","name":"MYANMAR LETTER KHAMTI DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA68"},43625:{"value":"AA69","name":"MYANMAR LETTER KHAMTI DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA69"},43626:{"value":"AA6A","name":"MYANMAR LETTER KHAMTI DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA6A"},43627:{"value":"AA6B","name":"MYANMAR LETTER KHAMTI NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA6B"},43628:{"value":"AA6C","name":"MYANMAR LETTER KHAMTI SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA6C"},43629:{"value":"AA6D","name":"MYANMAR LETTER KHAMTI HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA6D"},43630:{"value":"AA6E","name":"MYANMAR LETTER KHAMTI HHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA6E"},43631:{"value":"AA6F","name":"MYANMAR LETTER KHAMTI FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA6F"},43633:{"value":"AA71","name":"MYANMAR LETTER KHAMTI XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA71"},43634:{"value":"AA72","name":"MYANMAR LETTER KHAMTI ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA72"},43635:{"value":"AA73","name":"MYANMAR LETTER KHAMTI RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA73"},43636:{"value":"AA74","name":"MYANMAR LOGOGRAM KHAMTI OAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA74"},43637:{"value":"AA75","name":"MYANMAR LOGOGRAM KHAMTI QN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA75"},43638:{"value":"AA76","name":"MYANMAR LOGOGRAM KHAMTI HM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA76"},43642:{"value":"AA7A","name":"MYANMAR LETTER AITON RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA7A"},43646:{"value":"AA7E","name":"MYANMAR LETTER SHWE PALAUNG CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA7E"},43647:{"value":"AA7F","name":"MYANMAR LETTER SHWE PALAUNG SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA7F"},43648:{"value":"AA80","name":"TAI VIET LETTER LOW KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA80"},43649:{"value":"AA81","name":"TAI VIET LETTER HIGH KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA81"},43650:{"value":"AA82","name":"TAI VIET LETTER LOW KHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA82"},43651:{"value":"AA83","name":"TAI VIET LETTER HIGH KHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA83"},43652:{"value":"AA84","name":"TAI VIET LETTER LOW KHHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA84"},43653:{"value":"AA85","name":"TAI VIET LETTER HIGH KHHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA85"},43654:{"value":"AA86","name":"TAI VIET LETTER LOW GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA86"},43655:{"value":"AA87","name":"TAI VIET LETTER HIGH GO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA87"},43656:{"value":"AA88","name":"TAI VIET LETTER LOW NGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA88"},43657:{"value":"AA89","name":"TAI VIET LETTER HIGH NGO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA89"},43658:{"value":"AA8A","name":"TAI VIET LETTER LOW CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA8A"},43659:{"value":"AA8B","name":"TAI VIET LETTER HIGH CO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA8B"},43660:{"value":"AA8C","name":"TAI VIET LETTER LOW CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA8C"},43661:{"value":"AA8D","name":"TAI VIET LETTER HIGH CHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA8D"},43662:{"value":"AA8E","name":"TAI VIET LETTER LOW SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA8E"},43663:{"value":"AA8F","name":"TAI VIET LETTER HIGH SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA8F"},43664:{"value":"AA90","name":"TAI VIET LETTER LOW NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA90"},43665:{"value":"AA91","name":"TAI VIET LETTER HIGH NYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA91"},43666:{"value":"AA92","name":"TAI VIET LETTER LOW DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA92"},43667:{"value":"AA93","name":"TAI VIET LETTER HIGH DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA93"},43668:{"value":"AA94","name":"TAI VIET LETTER LOW TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA94"},43669:{"value":"AA95","name":"TAI VIET LETTER HIGH TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA95"},43670:{"value":"AA96","name":"TAI VIET LETTER LOW THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA96"},43671:{"value":"AA97","name":"TAI VIET LETTER HIGH THO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA97"},43672:{"value":"AA98","name":"TAI VIET LETTER LOW NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA98"},43673:{"value":"AA99","name":"TAI VIET LETTER HIGH NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA99"},43674:{"value":"AA9A","name":"TAI VIET LETTER LOW BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA9A"},43675:{"value":"AA9B","name":"TAI VIET LETTER HIGH BO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA9B"},43676:{"value":"AA9C","name":"TAI VIET LETTER LOW PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA9C"},43677:{"value":"AA9D","name":"TAI VIET LETTER HIGH PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA9D"},43678:{"value":"AA9E","name":"TAI VIET LETTER LOW PHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA9E"},43679:{"value":"AA9F","name":"TAI VIET LETTER HIGH PHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA9F"},43680:{"value":"AAA0","name":"TAI VIET LETTER LOW FO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA0"},43681:{"value":"AAA1","name":"TAI VIET LETTER HIGH FO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA1"},43682:{"value":"AAA2","name":"TAI VIET LETTER LOW MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA2"},43683:{"value":"AAA3","name":"TAI VIET LETTER HIGH MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA3"},43684:{"value":"AAA4","name":"TAI VIET LETTER LOW YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA4"},43685:{"value":"AAA5","name":"TAI VIET LETTER HIGH YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA5"},43686:{"value":"AAA6","name":"TAI VIET LETTER LOW RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA6"},43687:{"value":"AAA7","name":"TAI VIET LETTER HIGH RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA7"},43688:{"value":"AAA8","name":"TAI VIET LETTER LOW LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA8"},43689:{"value":"AAA9","name":"TAI VIET LETTER HIGH LO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAA9"},43690:{"value":"AAAA","name":"TAI VIET LETTER LOW VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAAA"},43691:{"value":"AAAB","name":"TAI VIET LETTER HIGH VO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAAB"},43692:{"value":"AAAC","name":"TAI VIET LETTER LOW HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAAC"},43693:{"value":"AAAD","name":"TAI VIET LETTER HIGH HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAAD"},43694:{"value":"AAAE","name":"TAI VIET LETTER LOW O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAAE"},43695:{"value":"AAAF","name":"TAI VIET LETTER HIGH O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAAF"},43697:{"value":"AAB1","name":"TAI VIET VOWEL AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB1"},43701:{"value":"AAB5","name":"TAI VIET VOWEL E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB5"},43702:{"value":"AAB6","name":"TAI VIET VOWEL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB6"},43705:{"value":"AAB9","name":"TAI VIET VOWEL UEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB9"},43706:{"value":"AABA","name":"TAI VIET VOWEL UA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAABA"},43707:{"value":"AABB","name":"TAI VIET VOWEL AUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAABB"},43708:{"value":"AABC","name":"TAI VIET VOWEL AY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAABC"},43709:{"value":"AABD","name":"TAI VIET VOWEL AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAABD"},43712:{"value":"AAC0","name":"TAI VIET TONE MAI NUENG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAC0"},43714:{"value":"AAC2","name":"TAI VIET TONE MAI SONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAC2"},43739:{"value":"AADB","name":"TAI VIET SYMBOL KON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAADB"},43740:{"value":"AADC","name":"TAI VIET SYMBOL NUENG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAADC"},43744:{"value":"AAE0","name":"MEETEI MAYEK LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE0"},43745:{"value":"AAE1","name":"MEETEI MAYEK LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE1"},43746:{"value":"AAE2","name":"MEETEI MAYEK LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE2"},43747:{"value":"AAE3","name":"MEETEI MAYEK LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE3"},43748:{"value":"AAE4","name":"MEETEI MAYEK LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE4"},43749:{"value":"AAE5","name":"MEETEI MAYEK LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE5"},43750:{"value":"AAE6","name":"MEETEI MAYEK LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE6"},43751:{"value":"AAE7","name":"MEETEI MAYEK LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE7"},43752:{"value":"AAE8","name":"MEETEI MAYEK LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE8"},43753:{"value":"AAE9","name":"MEETEI MAYEK LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAE9"},43754:{"value":"AAEA","name":"MEETEI MAYEK LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAEA"},43762:{"value":"AAF2","name":"MEETEI MAYEK ANJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF2"},43777:{"value":"AB01","name":"ETHIOPIC SYLLABLE TTHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB01"},43778:{"value":"AB02","name":"ETHIOPIC SYLLABLE TTHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB02"},43779:{"value":"AB03","name":"ETHIOPIC SYLLABLE TTHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB03"},43780:{"value":"AB04","name":"ETHIOPIC SYLLABLE TTHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB04"},43781:{"value":"AB05","name":"ETHIOPIC SYLLABLE TTHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB05"},43782:{"value":"AB06","name":"ETHIOPIC SYLLABLE TTHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB06"},43785:{"value":"AB09","name":"ETHIOPIC SYLLABLE DDHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB09"},43786:{"value":"AB0A","name":"ETHIOPIC SYLLABLE DDHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB0A"},43787:{"value":"AB0B","name":"ETHIOPIC SYLLABLE DDHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB0B"},43788:{"value":"AB0C","name":"ETHIOPIC SYLLABLE DDHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB0C"},43789:{"value":"AB0D","name":"ETHIOPIC SYLLABLE DDHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB0D"},43790:{"value":"AB0E","name":"ETHIOPIC SYLLABLE DDHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB0E"},43793:{"value":"AB11","name":"ETHIOPIC SYLLABLE DZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB11"},43794:{"value":"AB12","name":"ETHIOPIC SYLLABLE DZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB12"},43795:{"value":"AB13","name":"ETHIOPIC SYLLABLE DZAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB13"},43796:{"value":"AB14","name":"ETHIOPIC SYLLABLE DZEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB14"},43797:{"value":"AB15","name":"ETHIOPIC SYLLABLE DZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB15"},43798:{"value":"AB16","name":"ETHIOPIC SYLLABLE DZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB16"},43808:{"value":"AB20","name":"ETHIOPIC SYLLABLE CCHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB20"},43809:{"value":"AB21","name":"ETHIOPIC SYLLABLE CCHHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB21"},43810:{"value":"AB22","name":"ETHIOPIC SYLLABLE CCHHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB22"},43811:{"value":"AB23","name":"ETHIOPIC SYLLABLE CCHHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB23"},43812:{"value":"AB24","name":"ETHIOPIC SYLLABLE CCHHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB24"},43813:{"value":"AB25","name":"ETHIOPIC SYLLABLE CCHHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB25"},43814:{"value":"AB26","name":"ETHIOPIC SYLLABLE CCHHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB26"},43816:{"value":"AB28","name":"ETHIOPIC SYLLABLE BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB28"},43817:{"value":"AB29","name":"ETHIOPIC SYLLABLE BBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB29"},43818:{"value":"AB2A","name":"ETHIOPIC SYLLABLE BBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB2A"},43819:{"value":"AB2B","name":"ETHIOPIC SYLLABLE BBAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB2B"},43820:{"value":"AB2C","name":"ETHIOPIC SYLLABLE BBEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB2C"},43821:{"value":"AB2D","name":"ETHIOPIC SYLLABLE BBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB2D"},43822:{"value":"AB2E","name":"ETHIOPIC SYLLABLE BBO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB2E"},43968:{"value":"ABC0","name":"MEETEI MAYEK LETTER KOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC0"},43969:{"value":"ABC1","name":"MEETEI MAYEK LETTER SAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC1"},43970:{"value":"ABC2","name":"MEETEI MAYEK LETTER LAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC2"},43971:{"value":"ABC3","name":"MEETEI MAYEK LETTER MIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC3"},43972:{"value":"ABC4","name":"MEETEI MAYEK LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC4"},43973:{"value":"ABC5","name":"MEETEI MAYEK LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC5"},43974:{"value":"ABC6","name":"MEETEI MAYEK LETTER CHIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC6"},43975:{"value":"ABC7","name":"MEETEI MAYEK LETTER TIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC7"},43976:{"value":"ABC8","name":"MEETEI MAYEK LETTER KHOU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC8"},43977:{"value":"ABC9","name":"MEETEI MAYEK LETTER NGOU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABC9"},43978:{"value":"ABCA","name":"MEETEI MAYEK LETTER THOU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABCA"},43979:{"value":"ABCB","name":"MEETEI MAYEK LETTER WAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABCB"},43980:{"value":"ABCC","name":"MEETEI MAYEK LETTER YANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABCC"},43981:{"value":"ABCD","name":"MEETEI MAYEK LETTER HUK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABCD"},43982:{"value":"ABCE","name":"MEETEI MAYEK LETTER UN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABCE"},43983:{"value":"ABCF","name":"MEETEI MAYEK LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABCF"},43984:{"value":"ABD0","name":"MEETEI MAYEK LETTER PHAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD0"},43985:{"value":"ABD1","name":"MEETEI MAYEK LETTER ATIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD1"},43986:{"value":"ABD2","name":"MEETEI MAYEK LETTER GOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD2"},43987:{"value":"ABD3","name":"MEETEI MAYEK LETTER JHAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD3"},43988:{"value":"ABD4","name":"MEETEI MAYEK LETTER RAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD4"},43989:{"value":"ABD5","name":"MEETEI MAYEK LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD5"},43990:{"value":"ABD6","name":"MEETEI MAYEK LETTER JIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD6"},43991:{"value":"ABD7","name":"MEETEI MAYEK LETTER DIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD7"},43992:{"value":"ABD8","name":"MEETEI MAYEK LETTER GHOU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD8"},43993:{"value":"ABD9","name":"MEETEI MAYEK LETTER DHOU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABD9"},43994:{"value":"ABDA","name":"MEETEI MAYEK LETTER BHAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABDA"},43995:{"value":"ABDB","name":"MEETEI MAYEK LETTER KOK LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABDB"},43996:{"value":"ABDC","name":"MEETEI MAYEK LETTER LAI LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABDC"},43997:{"value":"ABDD","name":"MEETEI MAYEK LETTER MIT LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABDD"},43998:{"value":"ABDE","name":"MEETEI MAYEK LETTER PA LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABDE"},43999:{"value":"ABDF","name":"MEETEI MAYEK LETTER NA LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABDF"},44000:{"value":"ABE0","name":"MEETEI MAYEK LETTER TIL LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE0"},44001:{"value":"ABE1","name":"MEETEI MAYEK LETTER NGOU LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE1"},44002:{"value":"ABE2","name":"MEETEI MAYEK LETTER I LONSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE2"},44032:{"value":"AC00","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAC00"},55203:{"value":"D7A3","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7A3"},55216:{"value":"D7B0","name":"HANGUL JUNGSEONG O-YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B0"},55217:{"value":"D7B1","name":"HANGUL JUNGSEONG O-O-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B1"},55218:{"value":"D7B2","name":"HANGUL JUNGSEONG YO-A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B2"},55219:{"value":"D7B3","name":"HANGUL JUNGSEONG YO-AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B3"},55220:{"value":"D7B4","name":"HANGUL JUNGSEONG YO-EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B4"},55221:{"value":"D7B5","name":"HANGUL JUNGSEONG U-YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B5"},55222:{"value":"D7B6","name":"HANGUL JUNGSEONG U-I-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B6"},55223:{"value":"D7B7","name":"HANGUL JUNGSEONG YU-AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B7"},55224:{"value":"D7B8","name":"HANGUL JUNGSEONG YU-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B8"},55225:{"value":"D7B9","name":"HANGUL JUNGSEONG EU-A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7B9"},55226:{"value":"D7BA","name":"HANGUL JUNGSEONG EU-EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7BA"},55227:{"value":"D7BB","name":"HANGUL JUNGSEONG EU-E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7BB"},55228:{"value":"D7BC","name":"HANGUL JUNGSEONG EU-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7BC"},55229:{"value":"D7BD","name":"HANGUL JUNGSEONG I-YA-O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7BD"},55230:{"value":"D7BE","name":"HANGUL JUNGSEONG I-YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7BE"},55231:{"value":"D7BF","name":"HANGUL JUNGSEONG I-YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7BF"},55232:{"value":"D7C0","name":"HANGUL JUNGSEONG I-YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C0"},55233:{"value":"D7C1","name":"HANGUL JUNGSEONG I-O-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C1"},55234:{"value":"D7C2","name":"HANGUL JUNGSEONG I-YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C2"},55235:{"value":"D7C3","name":"HANGUL JUNGSEONG I-YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C3"},55236:{"value":"D7C4","name":"HANGUL JUNGSEONG I-I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C4"},55237:{"value":"D7C5","name":"HANGUL JUNGSEONG ARAEA-A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C5"},55238:{"value":"D7C6","name":"HANGUL JUNGSEONG ARAEA-E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7C6"},55243:{"value":"D7CB","name":"HANGUL JONGSEONG NIEUN-RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7CB"},55244:{"value":"D7CC","name":"HANGUL JONGSEONG NIEUN-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7CC"},55245:{"value":"D7CD","name":"HANGUL JONGSEONG SSANGTIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7CD"},55246:{"value":"D7CE","name":"HANGUL JONGSEONG SSANGTIKEUT-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7CE"},55247:{"value":"D7CF","name":"HANGUL JONGSEONG TIKEUT-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7CF"},55248:{"value":"D7D0","name":"HANGUL JONGSEONG TIKEUT-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D0"},55249:{"value":"D7D1","name":"HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D1"},55250:{"value":"D7D2","name":"HANGUL JONGSEONG TIKEUT-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D2"},55251:{"value":"D7D3","name":"HANGUL JONGSEONG TIKEUT-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D3"},55252:{"value":"D7D4","name":"HANGUL JONGSEONG TIKEUT-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D4"},55253:{"value":"D7D5","name":"HANGUL JONGSEONG RIEUL-SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D5"},55254:{"value":"D7D6","name":"HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D6"},55255:{"value":"D7D7","name":"HANGUL JONGSEONG SSANGRIEUL-KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D7"},55256:{"value":"D7D8","name":"HANGUL JONGSEONG RIEUL-MIEUM-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D8"},55257:{"value":"D7D9","name":"HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7D9"},55258:{"value":"D7DA","name":"HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7DA"},55259:{"value":"D7DB","name":"HANGUL JONGSEONG RIEUL-YESIEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7DB"},55260:{"value":"D7DC","name":"HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7DC"},55261:{"value":"D7DD","name":"HANGUL JONGSEONG KAPYEOUNRIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7DD"},55262:{"value":"D7DE","name":"HANGUL JONGSEONG MIEUM-NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7DE"},55263:{"value":"D7DF","name":"HANGUL JONGSEONG MIEUM-SSANGNIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7DF"},55264:{"value":"D7E0","name":"HANGUL JONGSEONG SSANGMIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E0"},55265:{"value":"D7E1","name":"HANGUL JONGSEONG MIEUM-PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E1"},55266:{"value":"D7E2","name":"HANGUL JONGSEONG MIEUM-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E2"},55267:{"value":"D7E3","name":"HANGUL JONGSEONG PIEUP-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E3"},55268:{"value":"D7E4","name":"HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E4"},55269:{"value":"D7E5","name":"HANGUL JONGSEONG PIEUP-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E5"},55270:{"value":"D7E6","name":"HANGUL JONGSEONG SSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E6"},55271:{"value":"D7E7","name":"HANGUL JONGSEONG PIEUP-SIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E7"},55272:{"value":"D7E8","name":"HANGUL JONGSEONG PIEUP-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E8"},55273:{"value":"D7E9","name":"HANGUL JONGSEONG PIEUP-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7E9"},55274:{"value":"D7EA","name":"HANGUL JONGSEONG SIOS-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7EA"},55275:{"value":"D7EB","name":"HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7EB"},55276:{"value":"D7EC","name":"HANGUL JONGSEONG SSANGSIOS-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7EC"},55277:{"value":"D7ED","name":"HANGUL JONGSEONG SSANGSIOS-TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7ED"},55278:{"value":"D7EE","name":"HANGUL JONGSEONG SIOS-PANSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7EE"},55279:{"value":"D7EF","name":"HANGUL JONGSEONG SIOS-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7EF"},55280:{"value":"D7F0","name":"HANGUL JONGSEONG SIOS-CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F0"},55281:{"value":"D7F1","name":"HANGUL JONGSEONG SIOS-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F1"},55282:{"value":"D7F2","name":"HANGUL JONGSEONG SIOS-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F2"},55283:{"value":"D7F3","name":"HANGUL JONGSEONG PANSIOS-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F3"},55284:{"value":"D7F4","name":"HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F4"},55285:{"value":"D7F5","name":"HANGUL JONGSEONG YESIEUNG-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F5"},55286:{"value":"D7F6","name":"HANGUL JONGSEONG YESIEUNG-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F6"},55287:{"value":"D7F7","name":"HANGUL JONGSEONG CIEUC-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F7"},55288:{"value":"D7F8","name":"HANGUL JONGSEONG CIEUC-SSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F8"},55289:{"value":"D7F9","name":"HANGUL JONGSEONG SSANGCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7F9"},55290:{"value":"D7FA","name":"HANGUL JONGSEONG PHIEUPH-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7FA"},55291:{"value":"D7FB","name":"HANGUL JONGSEONG PHIEUPH-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uD7FB"},63744:{"value":"F900","name":"CJK COMPATIBILITY IDEOGRAPH-F900","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8C48","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF900"},63745:{"value":"F901","name":"CJK COMPATIBILITY IDEOGRAPH-F901","category":"Lo","class":"0","bidirectional_category":"L","mapping":"66F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF901"},63746:{"value":"F902","name":"CJK COMPATIBILITY IDEOGRAPH-F902","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8ECA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF902"},63747:{"value":"F903","name":"CJK COMPATIBILITY IDEOGRAPH-F903","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8CC8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF903"},63748:{"value":"F904","name":"CJK COMPATIBILITY IDEOGRAPH-F904","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6ED1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF904"},63749:{"value":"F905","name":"CJK COMPATIBILITY IDEOGRAPH-F905","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E32","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF905"},63750:{"value":"F906","name":"CJK COMPATIBILITY IDEOGRAPH-F906","category":"Lo","class":"0","bidirectional_category":"L","mapping":"53E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF906"},63751:{"value":"F907","name":"CJK COMPATIBILITY IDEOGRAPH-F907","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F9C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF907"},63752:{"value":"F908","name":"CJK COMPATIBILITY IDEOGRAPH-F908","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F9C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF908"},63753:{"value":"F909","name":"CJK COMPATIBILITY IDEOGRAPH-F909","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5951","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF909"},63754:{"value":"F90A","name":"CJK COMPATIBILITY IDEOGRAPH-F90A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"91D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF90A"},63755:{"value":"F90B","name":"CJK COMPATIBILITY IDEOGRAPH-F90B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5587","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF90B"},63756:{"value":"F90C","name":"CJK COMPATIBILITY IDEOGRAPH-F90C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5948","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF90C"},63757:{"value":"F90D","name":"CJK COMPATIBILITY IDEOGRAPH-F90D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61F6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF90D"},63758:{"value":"F90E","name":"CJK COMPATIBILITY IDEOGRAPH-F90E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7669","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF90E"},63759:{"value":"F90F","name":"CJK COMPATIBILITY IDEOGRAPH-F90F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F85","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF90F"},63760:{"value":"F910","name":"CJK COMPATIBILITY IDEOGRAPH-F910","category":"Lo","class":"0","bidirectional_category":"L","mapping":"863F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF910"},63761:{"value":"F911","name":"CJK COMPATIBILITY IDEOGRAPH-F911","category":"Lo","class":"0","bidirectional_category":"L","mapping":"87BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF911"},63762:{"value":"F912","name":"CJK COMPATIBILITY IDEOGRAPH-F912","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88F8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF912"},63763:{"value":"F913","name":"CJK COMPATIBILITY IDEOGRAPH-F913","category":"Lo","class":"0","bidirectional_category":"L","mapping":"908F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF913"},63764:{"value":"F914","name":"CJK COMPATIBILITY IDEOGRAPH-F914","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6A02","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF914"},63765:{"value":"F915","name":"CJK COMPATIBILITY IDEOGRAPH-F915","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D1B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF915"},63766:{"value":"F916","name":"CJK COMPATIBILITY IDEOGRAPH-F916","category":"Lo","class":"0","bidirectional_category":"L","mapping":"70D9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF916"},63767:{"value":"F917","name":"CJK COMPATIBILITY IDEOGRAPH-F917","category":"Lo","class":"0","bidirectional_category":"L","mapping":"73DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF917"},63768:{"value":"F918","name":"CJK COMPATIBILITY IDEOGRAPH-F918","category":"Lo","class":"0","bidirectional_category":"L","mapping":"843D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF918"},63769:{"value":"F919","name":"CJK COMPATIBILITY IDEOGRAPH-F919","category":"Lo","class":"0","bidirectional_category":"L","mapping":"916A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF919"},63770:{"value":"F91A","name":"CJK COMPATIBILITY IDEOGRAPH-F91A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"99F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF91A"},63771:{"value":"F91B","name":"CJK COMPATIBILITY IDEOGRAPH-F91B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E82","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF91B"},63772:{"value":"F91C","name":"CJK COMPATIBILITY IDEOGRAPH-F91C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5375","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF91C"},63773:{"value":"F91D","name":"CJK COMPATIBILITY IDEOGRAPH-F91D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B04","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF91D"},63774:{"value":"F91E","name":"CJK COMPATIBILITY IDEOGRAPH-F91E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"721B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF91E"},63775:{"value":"F91F","name":"CJK COMPATIBILITY IDEOGRAPH-F91F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"862D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF91F"},63776:{"value":"F920","name":"CJK COMPATIBILITY IDEOGRAPH-F920","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9E1E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF920"},63777:{"value":"F921","name":"CJK COMPATIBILITY IDEOGRAPH-F921","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5D50","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF921"},63778:{"value":"F922","name":"CJK COMPATIBILITY IDEOGRAPH-F922","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6FEB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF922"},63779:{"value":"F923","name":"CJK COMPATIBILITY IDEOGRAPH-F923","category":"Lo","class":"0","bidirectional_category":"L","mapping":"85CD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF923"},63780:{"value":"F924","name":"CJK COMPATIBILITY IDEOGRAPH-F924","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8964","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF924"},63781:{"value":"F925","name":"CJK COMPATIBILITY IDEOGRAPH-F925","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF925"},63782:{"value":"F926","name":"CJK COMPATIBILITY IDEOGRAPH-F926","category":"Lo","class":"0","bidirectional_category":"L","mapping":"81D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF926"},63783:{"value":"F927","name":"CJK COMPATIBILITY IDEOGRAPH-F927","category":"Lo","class":"0","bidirectional_category":"L","mapping":"881F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF927"},63784:{"value":"F928","name":"CJK COMPATIBILITY IDEOGRAPH-F928","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5ECA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF928"},63785:{"value":"F929","name":"CJK COMPATIBILITY IDEOGRAPH-F929","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6717","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF929"},63786:{"value":"F92A","name":"CJK COMPATIBILITY IDEOGRAPH-F92A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D6A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF92A"},63787:{"value":"F92B","name":"CJK COMPATIBILITY IDEOGRAPH-F92B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"72FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF92B"},63788:{"value":"F92C","name":"CJK COMPATIBILITY IDEOGRAPH-F92C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"90CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF92C"},63789:{"value":"F92D","name":"CJK COMPATIBILITY IDEOGRAPH-F92D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4F86","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF92D"},63790:{"value":"F92E","name":"CJK COMPATIBILITY IDEOGRAPH-F92E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF92E"},63791:{"value":"F92F","name":"CJK COMPATIBILITY IDEOGRAPH-F92F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF92F"},63792:{"value":"F930","name":"CJK COMPATIBILITY IDEOGRAPH-F930","category":"Lo","class":"0","bidirectional_category":"L","mapping":"64C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF930"},63793:{"value":"F931","name":"CJK COMPATIBILITY IDEOGRAPH-F931","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6AD3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF931"},63794:{"value":"F932","name":"CJK COMPATIBILITY IDEOGRAPH-F932","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7210","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF932"},63795:{"value":"F933","name":"CJK COMPATIBILITY IDEOGRAPH-F933","category":"Lo","class":"0","bidirectional_category":"L","mapping":"76E7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF933"},63796:{"value":"F934","name":"CJK COMPATIBILITY IDEOGRAPH-F934","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8001","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF934"},63797:{"value":"F935","name":"CJK COMPATIBILITY IDEOGRAPH-F935","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8606","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF935"},63798:{"value":"F936","name":"CJK COMPATIBILITY IDEOGRAPH-F936","category":"Lo","class":"0","bidirectional_category":"L","mapping":"865C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF936"},63799:{"value":"F937","name":"CJK COMPATIBILITY IDEOGRAPH-F937","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8DEF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF937"},63800:{"value":"F938","name":"CJK COMPATIBILITY IDEOGRAPH-F938","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9732","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF938"},63801:{"value":"F939","name":"CJK COMPATIBILITY IDEOGRAPH-F939","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9B6F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF939"},63802:{"value":"F93A","name":"CJK COMPATIBILITY IDEOGRAPH-F93A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9DFA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF93A"},63803:{"value":"F93B","name":"CJK COMPATIBILITY IDEOGRAPH-F93B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"788C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF93B"},63804:{"value":"F93C","name":"CJK COMPATIBILITY IDEOGRAPH-F93C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"797F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF93C"},63805:{"value":"F93D","name":"CJK COMPATIBILITY IDEOGRAPH-F93D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7DA0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF93D"},63806:{"value":"F93E","name":"CJK COMPATIBILITY IDEOGRAPH-F93E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF93E"},63807:{"value":"F93F","name":"CJK COMPATIBILITY IDEOGRAPH-F93F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF93F"},63808:{"value":"F940","name":"CJK COMPATIBILITY IDEOGRAPH-F940","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9E7F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF940"},63809:{"value":"F941","name":"CJK COMPATIBILITY IDEOGRAPH-F941","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AD6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF941"},63810:{"value":"F942","name":"CJK COMPATIBILITY IDEOGRAPH-F942","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF942"},63811:{"value":"F943","name":"CJK COMPATIBILITY IDEOGRAPH-F943","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F04","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF943"},63812:{"value":"F944","name":"CJK COMPATIBILITY IDEOGRAPH-F944","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7C60","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF944"},63813:{"value":"F945","name":"CJK COMPATIBILITY IDEOGRAPH-F945","category":"Lo","class":"0","bidirectional_category":"L","mapping":"807E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF945"},63814:{"value":"F946","name":"CJK COMPATIBILITY IDEOGRAPH-F946","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7262","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF946"},63815:{"value":"F947","name":"CJK COMPATIBILITY IDEOGRAPH-F947","category":"Lo","class":"0","bidirectional_category":"L","mapping":"78CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF947"},63816:{"value":"F948","name":"CJK COMPATIBILITY IDEOGRAPH-F948","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8CC2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF948"},63817:{"value":"F949","name":"CJK COMPATIBILITY IDEOGRAPH-F949","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96F7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF949"},63818:{"value":"F94A","name":"CJK COMPATIBILITY IDEOGRAPH-F94A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF94A"},63819:{"value":"F94B","name":"CJK COMPATIBILITY IDEOGRAPH-F94B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C62","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF94B"},63820:{"value":"F94C","name":"CJK COMPATIBILITY IDEOGRAPH-F94C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6A13","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF94C"},63821:{"value":"F94D","name":"CJK COMPATIBILITY IDEOGRAPH-F94D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6DDA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF94D"},63822:{"value":"F94E","name":"CJK COMPATIBILITY IDEOGRAPH-F94E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6F0F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF94E"},63823:{"value":"F94F","name":"CJK COMPATIBILITY IDEOGRAPH-F94F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7D2F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF94F"},63824:{"value":"F950","name":"CJK COMPATIBILITY IDEOGRAPH-F950","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7E37","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF950"},63825:{"value":"F951","name":"CJK COMPATIBILITY IDEOGRAPH-F951","category":"Lo","class":"0","bidirectional_category":"L","mapping":"964B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF951"},63826:{"value":"F952","name":"CJK COMPATIBILITY IDEOGRAPH-F952","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF952"},63827:{"value":"F953","name":"CJK COMPATIBILITY IDEOGRAPH-F953","category":"Lo","class":"0","bidirectional_category":"L","mapping":"808B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF953"},63828:{"value":"F954","name":"CJK COMPATIBILITY IDEOGRAPH-F954","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF954"},63829:{"value":"F955","name":"CJK COMPATIBILITY IDEOGRAPH-F955","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF955"},63830:{"value":"F956","name":"CJK COMPATIBILITY IDEOGRAPH-F956","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7A1C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF956"},63831:{"value":"F957","name":"CJK COMPATIBILITY IDEOGRAPH-F957","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7DBE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF957"},63832:{"value":"F958","name":"CJK COMPATIBILITY IDEOGRAPH-F958","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF958"},63833:{"value":"F959","name":"CJK COMPATIBILITY IDEOGRAPH-F959","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9675","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF959"},63834:{"value":"F95A","name":"CJK COMPATIBILITY IDEOGRAPH-F95A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF95A"},63835:{"value":"F95B","name":"CJK COMPATIBILITY IDEOGRAPH-F95B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF95B"},63836:{"value":"F95C","name":"CJK COMPATIBILITY IDEOGRAPH-F95C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6A02","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF95C"},63837:{"value":"F95D","name":"CJK COMPATIBILITY IDEOGRAPH-F95D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AFE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF95D"},63838:{"value":"F95E","name":"CJK COMPATIBILITY IDEOGRAPH-F95E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E39","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF95E"},63839:{"value":"F95F","name":"CJK COMPATIBILITY IDEOGRAPH-F95F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BE7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF95F"},63840:{"value":"F960","name":"CJK COMPATIBILITY IDEOGRAPH-F960","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6012","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF960"},63841:{"value":"F961","name":"CJK COMPATIBILITY IDEOGRAPH-F961","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7387","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF961"},63842:{"value":"F962","name":"CJK COMPATIBILITY IDEOGRAPH-F962","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7570","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF962"},63843:{"value":"F963","name":"CJK COMPATIBILITY IDEOGRAPH-F963","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5317","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF963"},63844:{"value":"F964","name":"CJK COMPATIBILITY IDEOGRAPH-F964","category":"Lo","class":"0","bidirectional_category":"L","mapping":"78FB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF964"},63845:{"value":"F965","name":"CJK COMPATIBILITY IDEOGRAPH-F965","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4FBF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF965"},63846:{"value":"F966","name":"CJK COMPATIBILITY IDEOGRAPH-F966","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5FA9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF966"},63847:{"value":"F967","name":"CJK COMPATIBILITY IDEOGRAPH-F967","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E0D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF967"},63848:{"value":"F968","name":"CJK COMPATIBILITY IDEOGRAPH-F968","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6CCC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF968"},63849:{"value":"F969","name":"CJK COMPATIBILITY IDEOGRAPH-F969","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6578","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF969"},63850:{"value":"F96A","name":"CJK COMPATIBILITY IDEOGRAPH-F96A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7D22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF96A"},63851:{"value":"F96B","name":"CJK COMPATIBILITY IDEOGRAPH-F96B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"53C3","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF96B"},63852:{"value":"F96C","name":"CJK COMPATIBILITY IDEOGRAPH-F96C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"585E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF96C"},63853:{"value":"F96D","name":"CJK COMPATIBILITY IDEOGRAPH-F96D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7701","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF96D"},63854:{"value":"F96E","name":"CJK COMPATIBILITY IDEOGRAPH-F96E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8449","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF96E"},63855:{"value":"F96F","name":"CJK COMPATIBILITY IDEOGRAPH-F96F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AAA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF96F"},63856:{"value":"F970","name":"CJK COMPATIBILITY IDEOGRAPH-F970","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6BBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF970"},63857:{"value":"F971","name":"CJK COMPATIBILITY IDEOGRAPH-F971","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8FB0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF971"},63858:{"value":"F972","name":"CJK COMPATIBILITY IDEOGRAPH-F972","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6C88","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF972"},63859:{"value":"F973","name":"CJK COMPATIBILITY IDEOGRAPH-F973","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62FE","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF973"},63860:{"value":"F974","name":"CJK COMPATIBILITY IDEOGRAPH-F974","category":"Lo","class":"0","bidirectional_category":"L","mapping":"82E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF974"},63861:{"value":"F975","name":"CJK COMPATIBILITY IDEOGRAPH-F975","category":"Lo","class":"0","bidirectional_category":"L","mapping":"63A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF975"},63862:{"value":"F976","name":"CJK COMPATIBILITY IDEOGRAPH-F976","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7565","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF976"},63863:{"value":"F977","name":"CJK COMPATIBILITY IDEOGRAPH-F977","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4EAE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF977"},63864:{"value":"F978","name":"CJK COMPATIBILITY IDEOGRAPH-F978","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5169","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF978"},63865:{"value":"F979","name":"CJK COMPATIBILITY IDEOGRAPH-F979","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF979"},63866:{"value":"F97A","name":"CJK COMPATIBILITY IDEOGRAPH-F97A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6881","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF97A"},63867:{"value":"F97B","name":"CJK COMPATIBILITY IDEOGRAPH-F97B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7CE7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF97B"},63868:{"value":"F97C","name":"CJK COMPATIBILITY IDEOGRAPH-F97C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"826F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF97C"},63869:{"value":"F97D","name":"CJK COMPATIBILITY IDEOGRAPH-F97D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AD2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF97D"},63870:{"value":"F97E","name":"CJK COMPATIBILITY IDEOGRAPH-F97E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"91CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF97E"},63871:{"value":"F97F","name":"CJK COMPATIBILITY IDEOGRAPH-F97F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF97F"},63872:{"value":"F980","name":"CJK COMPATIBILITY IDEOGRAPH-F980","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5442","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF980"},63873:{"value":"F981","name":"CJK COMPATIBILITY IDEOGRAPH-F981","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5973","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF981"},63874:{"value":"F982","name":"CJK COMPATIBILITY IDEOGRAPH-F982","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EEC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF982"},63875:{"value":"F983","name":"CJK COMPATIBILITY IDEOGRAPH-F983","category":"Lo","class":"0","bidirectional_category":"L","mapping":"65C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF983"},63876:{"value":"F984","name":"CJK COMPATIBILITY IDEOGRAPH-F984","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6FFE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF984"},63877:{"value":"F985","name":"CJK COMPATIBILITY IDEOGRAPH-F985","category":"Lo","class":"0","bidirectional_category":"L","mapping":"792A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF985"},63878:{"value":"F986","name":"CJK COMPATIBILITY IDEOGRAPH-F986","category":"Lo","class":"0","bidirectional_category":"L","mapping":"95AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF986"},63879:{"value":"F987","name":"CJK COMPATIBILITY IDEOGRAPH-F987","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9A6A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF987"},63880:{"value":"F988","name":"CJK COMPATIBILITY IDEOGRAPH-F988","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9E97","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF988"},63881:{"value":"F989","name":"CJK COMPATIBILITY IDEOGRAPH-F989","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9ECE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF989"},63882:{"value":"F98A","name":"CJK COMPATIBILITY IDEOGRAPH-F98A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"529B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF98A"},63883:{"value":"F98B","name":"CJK COMPATIBILITY IDEOGRAPH-F98B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"66C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF98B"},63884:{"value":"F98C","name":"CJK COMPATIBILITY IDEOGRAPH-F98C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B77","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF98C"},63885:{"value":"F98D","name":"CJK COMPATIBILITY IDEOGRAPH-F98D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F62","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF98D"},63886:{"value":"F98E","name":"CJK COMPATIBILITY IDEOGRAPH-F98E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5E74","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF98E"},63887:{"value":"F98F","name":"CJK COMPATIBILITY IDEOGRAPH-F98F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6190","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF98F"},63888:{"value":"F990","name":"CJK COMPATIBILITY IDEOGRAPH-F990","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6200","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF990"},63889:{"value":"F991","name":"CJK COMPATIBILITY IDEOGRAPH-F991","category":"Lo","class":"0","bidirectional_category":"L","mapping":"649A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF991"},63890:{"value":"F992","name":"CJK COMPATIBILITY IDEOGRAPH-F992","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6F23","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF992"},63891:{"value":"F993","name":"CJK COMPATIBILITY IDEOGRAPH-F993","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7149","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF993"},63892:{"value":"F994","name":"CJK COMPATIBILITY IDEOGRAPH-F994","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7489","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF994"},63893:{"value":"F995","name":"CJK COMPATIBILITY IDEOGRAPH-F995","category":"Lo","class":"0","bidirectional_category":"L","mapping":"79CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF995"},63894:{"value":"F996","name":"CJK COMPATIBILITY IDEOGRAPH-F996","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7DF4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF996"},63895:{"value":"F997","name":"CJK COMPATIBILITY IDEOGRAPH-F997","category":"Lo","class":"0","bidirectional_category":"L","mapping":"806F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF997"},63896:{"value":"F998","name":"CJK COMPATIBILITY IDEOGRAPH-F998","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F26","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF998"},63897:{"value":"F999","name":"CJK COMPATIBILITY IDEOGRAPH-F999","category":"Lo","class":"0","bidirectional_category":"L","mapping":"84EE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF999"},63898:{"value":"F99A","name":"CJK COMPATIBILITY IDEOGRAPH-F99A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9023","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF99A"},63899:{"value":"F99B","name":"CJK COMPATIBILITY IDEOGRAPH-F99B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"934A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF99B"},63900:{"value":"F99C","name":"CJK COMPATIBILITY IDEOGRAPH-F99C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5217","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF99C"},63901:{"value":"F99D","name":"CJK COMPATIBILITY IDEOGRAPH-F99D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF99D"},63902:{"value":"F99E","name":"CJK COMPATIBILITY IDEOGRAPH-F99E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"54BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF99E"},63903:{"value":"F99F","name":"CJK COMPATIBILITY IDEOGRAPH-F99F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"70C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF99F"},63904:{"value":"F9A0","name":"CJK COMPATIBILITY IDEOGRAPH-F9A0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A0"},63905:{"value":"F9A1","name":"CJK COMPATIBILITY IDEOGRAPH-F9A1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AAA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A1"},63906:{"value":"F9A2","name":"CJK COMPATIBILITY IDEOGRAPH-F9A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EC9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A2"},63907:{"value":"F9A3","name":"CJK COMPATIBILITY IDEOGRAPH-F9A3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5FF5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A3"},63908:{"value":"F9A4","name":"CJK COMPATIBILITY IDEOGRAPH-F9A4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"637B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A4"},63909:{"value":"F9A5","name":"CJK COMPATIBILITY IDEOGRAPH-F9A5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6BAE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A5"},63910:{"value":"F9A6","name":"CJK COMPATIBILITY IDEOGRAPH-F9A6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7C3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A6"},63911:{"value":"F9A7","name":"CJK COMPATIBILITY IDEOGRAPH-F9A7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7375","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A7"},63912:{"value":"F9A8","name":"CJK COMPATIBILITY IDEOGRAPH-F9A8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4EE4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A8"},63913:{"value":"F9A9","name":"CJK COMPATIBILITY IDEOGRAPH-F9A9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"56F9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9A9"},63914:{"value":"F9AA","name":"CJK COMPATIBILITY IDEOGRAPH-F9AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BE7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9AA"},63915:{"value":"F9AB","name":"CJK COMPATIBILITY IDEOGRAPH-F9AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5DBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9AB"},63916:{"value":"F9AC","name":"CJK COMPATIBILITY IDEOGRAPH-F9AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"601C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9AC"},63917:{"value":"F9AD","name":"CJK COMPATIBILITY IDEOGRAPH-F9AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"73B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9AD"},63918:{"value":"F9AE","name":"CJK COMPATIBILITY IDEOGRAPH-F9AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7469","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9AE"},63919:{"value":"F9AF","name":"CJK COMPATIBILITY IDEOGRAPH-F9AF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F9A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9AF"},63920:{"value":"F9B0","name":"CJK COMPATIBILITY IDEOGRAPH-F9B0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B0"},63921:{"value":"F9B1","name":"CJK COMPATIBILITY IDEOGRAPH-F9B1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9234","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B1"},63922:{"value":"F9B2","name":"CJK COMPATIBILITY IDEOGRAPH-F9B2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96F6","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B2"},63923:{"value":"F9B3","name":"CJK COMPATIBILITY IDEOGRAPH-F9B3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9748","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B3"},63924:{"value":"F9B4","name":"CJK COMPATIBILITY IDEOGRAPH-F9B4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9818","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B4"},63925:{"value":"F9B5","name":"CJK COMPATIBILITY IDEOGRAPH-F9B5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4F8B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B5"},63926:{"value":"F9B6","name":"CJK COMPATIBILITY IDEOGRAPH-F9B6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"79AE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B6"},63927:{"value":"F9B7","name":"CJK COMPATIBILITY IDEOGRAPH-F9B7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"91B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B7"},63928:{"value":"F9B8","name":"CJK COMPATIBILITY IDEOGRAPH-F9B8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B8"},63929:{"value":"F9B9","name":"CJK COMPATIBILITY IDEOGRAPH-F9B9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"60E1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9B9"},63930:{"value":"F9BA","name":"CJK COMPATIBILITY IDEOGRAPH-F9BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E86","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9BA"},63931:{"value":"F9BB","name":"CJK COMPATIBILITY IDEOGRAPH-F9BB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"50DA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9BB"},63932:{"value":"F9BC","name":"CJK COMPATIBILITY IDEOGRAPH-F9BC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BEE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9BC"},63933:{"value":"F9BD","name":"CJK COMPATIBILITY IDEOGRAPH-F9BD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C3F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9BD"},63934:{"value":"F9BE","name":"CJK COMPATIBILITY IDEOGRAPH-F9BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6599","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9BE"},63935:{"value":"F9BF","name":"CJK COMPATIBILITY IDEOGRAPH-F9BF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6A02","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9BF"},63936:{"value":"F9C0","name":"CJK COMPATIBILITY IDEOGRAPH-F9C0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"71CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C0"},63937:{"value":"F9C1","name":"CJK COMPATIBILITY IDEOGRAPH-F9C1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C1"},63938:{"value":"F9C2","name":"CJK COMPATIBILITY IDEOGRAPH-F9C2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"84FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C2"},63939:{"value":"F9C3","name":"CJK COMPATIBILITY IDEOGRAPH-F9C3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"907C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C3"},63940:{"value":"F9C4","name":"CJK COMPATIBILITY IDEOGRAPH-F9C4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F8D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C4"},63941:{"value":"F9C5","name":"CJK COMPATIBILITY IDEOGRAPH-F9C5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6688","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C5"},63942:{"value":"F9C6","name":"CJK COMPATIBILITY IDEOGRAPH-F9C6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"962E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C6"},63943:{"value":"F9C7","name":"CJK COMPATIBILITY IDEOGRAPH-F9C7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5289","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C7"},63944:{"value":"F9C8","name":"CJK COMPATIBILITY IDEOGRAPH-F9C8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"677B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C8"},63945:{"value":"F9C9","name":"CJK COMPATIBILITY IDEOGRAPH-F9C9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"67F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9C9"},63946:{"value":"F9CA","name":"CJK COMPATIBILITY IDEOGRAPH-F9CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D41","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9CA"},63947:{"value":"F9CB","name":"CJK COMPATIBILITY IDEOGRAPH-F9CB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6E9C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9CB"},63948:{"value":"F9CC","name":"CJK COMPATIBILITY IDEOGRAPH-F9CC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7409","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9CC"},63949:{"value":"F9CD","name":"CJK COMPATIBILITY IDEOGRAPH-F9CD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7559","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9CD"},63950:{"value":"F9CE","name":"CJK COMPATIBILITY IDEOGRAPH-F9CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"786B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9CE"},63951:{"value":"F9CF","name":"CJK COMPATIBILITY IDEOGRAPH-F9CF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7D10","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9CF"},63952:{"value":"F9D0","name":"CJK COMPATIBILITY IDEOGRAPH-F9D0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"985E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D0"},63953:{"value":"F9D1","name":"CJK COMPATIBILITY IDEOGRAPH-F9D1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"516D","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D1"},63954:{"value":"F9D2","name":"CJK COMPATIBILITY IDEOGRAPH-F9D2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"622E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D2"},63955:{"value":"F9D3","name":"CJK COMPATIBILITY IDEOGRAPH-F9D3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9678","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D3"},63956:{"value":"F9D4","name":"CJK COMPATIBILITY IDEOGRAPH-F9D4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"502B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D4"},63957:{"value":"F9D5","name":"CJK COMPATIBILITY IDEOGRAPH-F9D5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5D19","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D5"},63958:{"value":"F9D6","name":"CJK COMPATIBILITY IDEOGRAPH-F9D6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6DEA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D6"},63959:{"value":"F9D7","name":"CJK COMPATIBILITY IDEOGRAPH-F9D7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F2A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D7"},63960:{"value":"F9D8","name":"CJK COMPATIBILITY IDEOGRAPH-F9D8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F8B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D8"},63961:{"value":"F9D9","name":"CJK COMPATIBILITY IDEOGRAPH-F9D9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6144","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9D9"},63962:{"value":"F9DA","name":"CJK COMPATIBILITY IDEOGRAPH-F9DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6817","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9DA"},63963:{"value":"F9DB","name":"CJK COMPATIBILITY IDEOGRAPH-F9DB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7387","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9DB"},63964:{"value":"F9DC","name":"CJK COMPATIBILITY IDEOGRAPH-F9DC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9686","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9DC"},63965:{"value":"F9DD","name":"CJK COMPATIBILITY IDEOGRAPH-F9DD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5229","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9DD"},63966:{"value":"F9DE","name":"CJK COMPATIBILITY IDEOGRAPH-F9DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"540F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9DE"},63967:{"value":"F9DF","name":"CJK COMPATIBILITY IDEOGRAPH-F9DF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C65","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9DF"},63968:{"value":"F9E0","name":"CJK COMPATIBILITY IDEOGRAPH-F9E0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6613","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E0"},63969:{"value":"F9E1","name":"CJK COMPATIBILITY IDEOGRAPH-F9E1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"674E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E1"},63970:{"value":"F9E2","name":"CJK COMPATIBILITY IDEOGRAPH-F9E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"68A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E2"},63971:{"value":"F9E3","name":"CJK COMPATIBILITY IDEOGRAPH-F9E3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6CE5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E3"},63972:{"value":"F9E4","name":"CJK COMPATIBILITY IDEOGRAPH-F9E4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7406","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E4"},63973:{"value":"F9E5","name":"CJK COMPATIBILITY IDEOGRAPH-F9E5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"75E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E5"},63974:{"value":"F9E6","name":"CJK COMPATIBILITY IDEOGRAPH-F9E6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F79","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E6"},63975:{"value":"F9E7","name":"CJK COMPATIBILITY IDEOGRAPH-F9E7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E7"},63976:{"value":"F9E8","name":"CJK COMPATIBILITY IDEOGRAPH-F9E8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88E1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E8"},63977:{"value":"F9E9","name":"CJK COMPATIBILITY IDEOGRAPH-F9E9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"91CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9E9"},63978:{"value":"F9EA","name":"CJK COMPATIBILITY IDEOGRAPH-F9EA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9EA"},63979:{"value":"F9EB","name":"CJK COMPATIBILITY IDEOGRAPH-F9EB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"533F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9EB"},63980:{"value":"F9EC","name":"CJK COMPATIBILITY IDEOGRAPH-F9EC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6EBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9EC"},63981:{"value":"F9ED","name":"CJK COMPATIBILITY IDEOGRAPH-F9ED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"541D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9ED"},63982:{"value":"F9EE","name":"CJK COMPATIBILITY IDEOGRAPH-F9EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"71D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9EE"},63983:{"value":"F9EF","name":"CJK COMPATIBILITY IDEOGRAPH-F9EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7498","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9EF"},63984:{"value":"F9F0","name":"CJK COMPATIBILITY IDEOGRAPH-F9F0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"85FA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F0"},63985:{"value":"F9F1","name":"CJK COMPATIBILITY IDEOGRAPH-F9F1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F1"},63986:{"value":"F9F2","name":"CJK COMPATIBILITY IDEOGRAPH-F9F2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9C57","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F2"},63987:{"value":"F9F3","name":"CJK COMPATIBILITY IDEOGRAPH-F9F3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9E9F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F3"},63988:{"value":"F9F4","name":"CJK COMPATIBILITY IDEOGRAPH-F9F4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6797","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F4"},63989:{"value":"F9F5","name":"CJK COMPATIBILITY IDEOGRAPH-F9F5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6DCB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F5"},63990:{"value":"F9F6","name":"CJK COMPATIBILITY IDEOGRAPH-F9F6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"81E8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F6"},63991:{"value":"F9F7","name":"CJK COMPATIBILITY IDEOGRAPH-F9F7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7ACB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F7"},63992:{"value":"F9F8","name":"CJK COMPATIBILITY IDEOGRAPH-F9F8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7B20","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F8"},63993:{"value":"F9F9","name":"CJK COMPATIBILITY IDEOGRAPH-F9F9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7C92","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9F9"},63994:{"value":"F9FA","name":"CJK COMPATIBILITY IDEOGRAPH-F9FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"72C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9FA"},63995:{"value":"F9FB","name":"CJK COMPATIBILITY IDEOGRAPH-F9FB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9FB"},63996:{"value":"F9FC","name":"CJK COMPATIBILITY IDEOGRAPH-F9FC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B58","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9FC"},63997:{"value":"F9FD","name":"CJK COMPATIBILITY IDEOGRAPH-F9FD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4EC0","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9FD"},63998:{"value":"F9FE","name":"CJK COMPATIBILITY IDEOGRAPH-F9FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8336","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9FE"},63999:{"value":"F9FF","name":"CJK COMPATIBILITY IDEOGRAPH-F9FF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"523A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uF9FF"},64000:{"value":"FA00","name":"CJK COMPATIBILITY IDEOGRAPH-FA00","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA00"},64001:{"value":"FA01","name":"CJK COMPATIBILITY IDEOGRAPH-FA01","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EA6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA01"},64002:{"value":"FA02","name":"CJK COMPATIBILITY IDEOGRAPH-FA02","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62D3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA02"},64003:{"value":"FA03","name":"CJK COMPATIBILITY IDEOGRAPH-FA03","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7CD6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA03"},64004:{"value":"FA04","name":"CJK COMPATIBILITY IDEOGRAPH-FA04","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5B85","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA04"},64005:{"value":"FA05","name":"CJK COMPATIBILITY IDEOGRAPH-FA05","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D1E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA05"},64006:{"value":"FA06","name":"CJK COMPATIBILITY IDEOGRAPH-FA06","category":"Lo","class":"0","bidirectional_category":"L","mapping":"66B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA06"},64007:{"value":"FA07","name":"CJK COMPATIBILITY IDEOGRAPH-FA07","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F3B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA07"},64008:{"value":"FA08","name":"CJK COMPATIBILITY IDEOGRAPH-FA08","category":"Lo","class":"0","bidirectional_category":"L","mapping":"884C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA08"},64009:{"value":"FA09","name":"CJK COMPATIBILITY IDEOGRAPH-FA09","category":"Lo","class":"0","bidirectional_category":"L","mapping":"964D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA09"},64010:{"value":"FA0A","name":"CJK COMPATIBILITY IDEOGRAPH-FA0A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"898B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA0A"},64011:{"value":"FA0B","name":"CJK COMPATIBILITY IDEOGRAPH-FA0B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5ED3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA0B"},64012:{"value":"FA0C","name":"CJK COMPATIBILITY IDEOGRAPH-FA0C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5140","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA0C"},64013:{"value":"FA0D","name":"CJK COMPATIBILITY IDEOGRAPH-FA0D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"55C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA0D"},64014:{"value":"FA0E","name":"CJK COMPATIBILITY IDEOGRAPH-FA0E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA0E"},64015:{"value":"FA0F","name":"CJK COMPATIBILITY IDEOGRAPH-FA0F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA0F"},64016:{"value":"FA10","name":"CJK COMPATIBILITY IDEOGRAPH-FA10","category":"Lo","class":"0","bidirectional_category":"L","mapping":"585A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA10"},64017:{"value":"FA11","name":"CJK COMPATIBILITY IDEOGRAPH-FA11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA11"},64018:{"value":"FA12","name":"CJK COMPATIBILITY IDEOGRAPH-FA12","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA12"},64019:{"value":"FA13","name":"CJK COMPATIBILITY IDEOGRAPH-FA13","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA13"},64020:{"value":"FA14","name":"CJK COMPATIBILITY IDEOGRAPH-FA14","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA14"},64021:{"value":"FA15","name":"CJK COMPATIBILITY IDEOGRAPH-FA15","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA15"},64022:{"value":"FA16","name":"CJK COMPATIBILITY IDEOGRAPH-FA16","category":"Lo","class":"0","bidirectional_category":"L","mapping":"732A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA16"},64023:{"value":"FA17","name":"CJK COMPATIBILITY IDEOGRAPH-FA17","category":"Lo","class":"0","bidirectional_category":"L","mapping":"76CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA17"},64024:{"value":"FA18","name":"CJK COMPATIBILITY IDEOGRAPH-FA18","category":"Lo","class":"0","bidirectional_category":"L","mapping":"793C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA18"},64025:{"value":"FA19","name":"CJK COMPATIBILITY IDEOGRAPH-FA19","category":"Lo","class":"0","bidirectional_category":"L","mapping":"795E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA19"},64026:{"value":"FA1A","name":"CJK COMPATIBILITY IDEOGRAPH-FA1A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7965","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA1A"},64027:{"value":"FA1B","name":"CJK COMPATIBILITY IDEOGRAPH-FA1B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"798F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA1B"},64028:{"value":"FA1C","name":"CJK COMPATIBILITY IDEOGRAPH-FA1C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9756","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA1C"},64029:{"value":"FA1D","name":"CJK COMPATIBILITY IDEOGRAPH-FA1D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7CBE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA1D"},64030:{"value":"FA1E","name":"CJK COMPATIBILITY IDEOGRAPH-FA1E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7FBD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA1E"},64031:{"value":"FA1F","name":"CJK COMPATIBILITY IDEOGRAPH-FA1F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA1F"},64032:{"value":"FA20","name":"CJK COMPATIBILITY IDEOGRAPH-FA20","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8612","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA20"},64033:{"value":"FA21","name":"CJK COMPATIBILITY IDEOGRAPH-FA21","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA21"},64034:{"value":"FA22","name":"CJK COMPATIBILITY IDEOGRAPH-FA22","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AF8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA22"},64035:{"value":"FA23","name":"CJK COMPATIBILITY IDEOGRAPH-FA23","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA23"},64036:{"value":"FA24","name":"CJK COMPATIBILITY IDEOGRAPH-FA24","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA24"},64037:{"value":"FA25","name":"CJK COMPATIBILITY IDEOGRAPH-FA25","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9038","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA25"},64038:{"value":"FA26","name":"CJK COMPATIBILITY IDEOGRAPH-FA26","category":"Lo","class":"0","bidirectional_category":"L","mapping":"90FD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA26"},64039:{"value":"FA27","name":"CJK COMPATIBILITY IDEOGRAPH-FA27","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA27"},64040:{"value":"FA28","name":"CJK COMPATIBILITY IDEOGRAPH-FA28","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA28"},64041:{"value":"FA29","name":"CJK COMPATIBILITY IDEOGRAPH-FA29","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA29"},64042:{"value":"FA2A","name":"CJK COMPATIBILITY IDEOGRAPH-FA2A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"98EF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA2A"},64043:{"value":"FA2B","name":"CJK COMPATIBILITY IDEOGRAPH-FA2B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"98FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA2B"},64044:{"value":"FA2C","name":"CJK COMPATIBILITY IDEOGRAPH-FA2C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9928","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA2C"},64045:{"value":"FA2D","name":"CJK COMPATIBILITY IDEOGRAPH-FA2D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9DB4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA2D"},64046:{"value":"FA2E","name":"CJK COMPATIBILITY IDEOGRAPH-FA2E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"90DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA2E"},64047:{"value":"FA2F","name":"CJK COMPATIBILITY IDEOGRAPH-FA2F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA2F"},64048:{"value":"FA30","name":"CJK COMPATIBILITY IDEOGRAPH-FA30","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4FAE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA30"},64049:{"value":"FA31","name":"CJK COMPATIBILITY IDEOGRAPH-FA31","category":"Lo","class":"0","bidirectional_category":"L","mapping":"50E7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA31"},64050:{"value":"FA32","name":"CJK COMPATIBILITY IDEOGRAPH-FA32","category":"Lo","class":"0","bidirectional_category":"L","mapping":"514D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA32"},64051:{"value":"FA33","name":"CJK COMPATIBILITY IDEOGRAPH-FA33","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA33"},64052:{"value":"FA34","name":"CJK COMPATIBILITY IDEOGRAPH-FA34","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52E4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA34"},64053:{"value":"FA35","name":"CJK COMPATIBILITY IDEOGRAPH-FA35","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5351","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA35"},64054:{"value":"FA36","name":"CJK COMPATIBILITY IDEOGRAPH-FA36","category":"Lo","class":"0","bidirectional_category":"L","mapping":"559D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA36"},64055:{"value":"FA37","name":"CJK COMPATIBILITY IDEOGRAPH-FA37","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5606","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA37"},64056:{"value":"FA38","name":"CJK COMPATIBILITY IDEOGRAPH-FA38","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5668","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA38"},64057:{"value":"FA39","name":"CJK COMPATIBILITY IDEOGRAPH-FA39","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5840","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA39"},64058:{"value":"FA3A","name":"CJK COMPATIBILITY IDEOGRAPH-FA3A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA3A"},64059:{"value":"FA3B","name":"CJK COMPATIBILITY IDEOGRAPH-FA3B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C64","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA3B"},64060:{"value":"FA3C","name":"CJK COMPATIBILITY IDEOGRAPH-FA3C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA3C"},64061:{"value":"FA3D","name":"CJK COMPATIBILITY IDEOGRAPH-FA3D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6094","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA3D"},64062:{"value":"FA3E","name":"CJK COMPATIBILITY IDEOGRAPH-FA3E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6168","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA3E"},64063:{"value":"FA3F","name":"CJK COMPATIBILITY IDEOGRAPH-FA3F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"618E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA3F"},64064:{"value":"FA40","name":"CJK COMPATIBILITY IDEOGRAPH-FA40","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA40"},64065:{"value":"FA41","name":"CJK COMPATIBILITY IDEOGRAPH-FA41","category":"Lo","class":"0","bidirectional_category":"L","mapping":"654F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA41"},64066:{"value":"FA42","name":"CJK COMPATIBILITY IDEOGRAPH-FA42","category":"Lo","class":"0","bidirectional_category":"L","mapping":"65E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA42"},64067:{"value":"FA43","name":"CJK COMPATIBILITY IDEOGRAPH-FA43","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6691","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA43"},64068:{"value":"FA44","name":"CJK COMPATIBILITY IDEOGRAPH-FA44","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6885","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA44"},64069:{"value":"FA45","name":"CJK COMPATIBILITY IDEOGRAPH-FA45","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D77","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA45"},64070:{"value":"FA46","name":"CJK COMPATIBILITY IDEOGRAPH-FA46","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6E1A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA46"},64071:{"value":"FA47","name":"CJK COMPATIBILITY IDEOGRAPH-FA47","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6F22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA47"},64072:{"value":"FA48","name":"CJK COMPATIBILITY IDEOGRAPH-FA48","category":"Lo","class":"0","bidirectional_category":"L","mapping":"716E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA48"},64073:{"value":"FA49","name":"CJK COMPATIBILITY IDEOGRAPH-FA49","category":"Lo","class":"0","bidirectional_category":"L","mapping":"722B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA49"},64074:{"value":"FA4A","name":"CJK COMPATIBILITY IDEOGRAPH-FA4A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7422","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA4A"},64075:{"value":"FA4B","name":"CJK COMPATIBILITY IDEOGRAPH-FA4B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7891","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA4B"},64076:{"value":"FA4C","name":"CJK COMPATIBILITY IDEOGRAPH-FA4C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"793E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA4C"},64077:{"value":"FA4D","name":"CJK COMPATIBILITY IDEOGRAPH-FA4D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7949","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA4D"},64078:{"value":"FA4E","name":"CJK COMPATIBILITY IDEOGRAPH-FA4E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7948","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA4E"},64079:{"value":"FA4F","name":"CJK COMPATIBILITY IDEOGRAPH-FA4F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7950","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA4F"},64080:{"value":"FA50","name":"CJK COMPATIBILITY IDEOGRAPH-FA50","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7956","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA50"},64081:{"value":"FA51","name":"CJK COMPATIBILITY IDEOGRAPH-FA51","category":"Lo","class":"0","bidirectional_category":"L","mapping":"795D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA51"},64082:{"value":"FA52","name":"CJK COMPATIBILITY IDEOGRAPH-FA52","category":"Lo","class":"0","bidirectional_category":"L","mapping":"798D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA52"},64083:{"value":"FA53","name":"CJK COMPATIBILITY IDEOGRAPH-FA53","category":"Lo","class":"0","bidirectional_category":"L","mapping":"798E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA53"},64084:{"value":"FA54","name":"CJK COMPATIBILITY IDEOGRAPH-FA54","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7A40","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA54"},64085:{"value":"FA55","name":"CJK COMPATIBILITY IDEOGRAPH-FA55","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7A81","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA55"},64086:{"value":"FA56","name":"CJK COMPATIBILITY IDEOGRAPH-FA56","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7BC0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA56"},64087:{"value":"FA57","name":"CJK COMPATIBILITY IDEOGRAPH-FA57","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7DF4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA57"},64088:{"value":"FA58","name":"CJK COMPATIBILITY IDEOGRAPH-FA58","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7E09","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA58"},64089:{"value":"FA59","name":"CJK COMPATIBILITY IDEOGRAPH-FA59","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7E41","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA59"},64090:{"value":"FA5A","name":"CJK COMPATIBILITY IDEOGRAPH-FA5A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F72","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA5A"},64091:{"value":"FA5B","name":"CJK COMPATIBILITY IDEOGRAPH-FA5B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8005","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA5B"},64092:{"value":"FA5C","name":"CJK COMPATIBILITY IDEOGRAPH-FA5C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"81ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA5C"},64093:{"value":"FA5D","name":"CJK COMPATIBILITY IDEOGRAPH-FA5D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8279","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA5D"},64094:{"value":"FA5E","name":"CJK COMPATIBILITY IDEOGRAPH-FA5E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8279","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA5E"},64095:{"value":"FA5F","name":"CJK COMPATIBILITY IDEOGRAPH-FA5F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8457","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA5F"},64096:{"value":"FA60","name":"CJK COMPATIBILITY IDEOGRAPH-FA60","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8910","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA60"},64097:{"value":"FA61","name":"CJK COMPATIBILITY IDEOGRAPH-FA61","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8996","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA61"},64098:{"value":"FA62","name":"CJK COMPATIBILITY IDEOGRAPH-FA62","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B01","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA62"},64099:{"value":"FA63","name":"CJK COMPATIBILITY IDEOGRAPH-FA63","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B39","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA63"},64100:{"value":"FA64","name":"CJK COMPATIBILITY IDEOGRAPH-FA64","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8CD3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA64"},64101:{"value":"FA65","name":"CJK COMPATIBILITY IDEOGRAPH-FA65","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8D08","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA65"},64102:{"value":"FA66","name":"CJK COMPATIBILITY IDEOGRAPH-FA66","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8FB6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA66"},64103:{"value":"FA67","name":"CJK COMPATIBILITY IDEOGRAPH-FA67","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9038","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA67"},64104:{"value":"FA68","name":"CJK COMPATIBILITY IDEOGRAPH-FA68","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA68"},64105:{"value":"FA69","name":"CJK COMPATIBILITY IDEOGRAPH-FA69","category":"Lo","class":"0","bidirectional_category":"L","mapping":"97FF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA69"},64106:{"value":"FA6A","name":"CJK COMPATIBILITY IDEOGRAPH-FA6A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"983B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA6A"},64107:{"value":"FA6B","name":"CJK COMPATIBILITY IDEOGRAPH-FA6B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA6B"},64108:{"value":"FA6C","name":"CJK COMPATIBILITY IDEOGRAPH-FA6C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"242EE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA6C"},64109:{"value":"FA6D","name":"CJK COMPATIBILITY IDEOGRAPH-FA6D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8218","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA6D"},64112:{"value":"FA70","name":"CJK COMPATIBILITY IDEOGRAPH-FA70","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E26","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA70"},64113:{"value":"FA71","name":"CJK COMPATIBILITY IDEOGRAPH-FA71","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA71"},64114:{"value":"FA72","name":"CJK COMPATIBILITY IDEOGRAPH-FA72","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5168","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA72"},64115:{"value":"FA73","name":"CJK COMPATIBILITY IDEOGRAPH-FA73","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4F80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA73"},64116:{"value":"FA74","name":"CJK COMPATIBILITY IDEOGRAPH-FA74","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5145","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA74"},64117:{"value":"FA75","name":"CJK COMPATIBILITY IDEOGRAPH-FA75","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5180","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA75"},64118:{"value":"FA76","name":"CJK COMPATIBILITY IDEOGRAPH-FA76","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA76"},64119:{"value":"FA77","name":"CJK COMPATIBILITY IDEOGRAPH-FA77","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52FA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA77"},64120:{"value":"FA78","name":"CJK COMPATIBILITY IDEOGRAPH-FA78","category":"Lo","class":"0","bidirectional_category":"L","mapping":"559D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA78"},64121:{"value":"FA79","name":"CJK COMPATIBILITY IDEOGRAPH-FA79","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5555","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA79"},64122:{"value":"FA7A","name":"CJK COMPATIBILITY IDEOGRAPH-FA7A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5599","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA7A"},64123:{"value":"FA7B","name":"CJK COMPATIBILITY IDEOGRAPH-FA7B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"55E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA7B"},64124:{"value":"FA7C","name":"CJK COMPATIBILITY IDEOGRAPH-FA7C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"585A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA7C"},64125:{"value":"FA7D","name":"CJK COMPATIBILITY IDEOGRAPH-FA7D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA7D"},64126:{"value":"FA7E","name":"CJK COMPATIBILITY IDEOGRAPH-FA7E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5944","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA7E"},64127:{"value":"FA7F","name":"CJK COMPATIBILITY IDEOGRAPH-FA7F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5954","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA7F"},64128:{"value":"FA80","name":"CJK COMPATIBILITY IDEOGRAPH-FA80","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5A62","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA80"},64129:{"value":"FA81","name":"CJK COMPATIBILITY IDEOGRAPH-FA81","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5B28","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA81"},64130:{"value":"FA82","name":"CJK COMPATIBILITY IDEOGRAPH-FA82","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5ED2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA82"},64131:{"value":"FA83","name":"CJK COMPATIBILITY IDEOGRAPH-FA83","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5ED9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA83"},64132:{"value":"FA84","name":"CJK COMPATIBILITY IDEOGRAPH-FA84","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F69","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA84"},64133:{"value":"FA85","name":"CJK COMPATIBILITY IDEOGRAPH-FA85","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5FAD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA85"},64134:{"value":"FA86","name":"CJK COMPATIBILITY IDEOGRAPH-FA86","category":"Lo","class":"0","bidirectional_category":"L","mapping":"60D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA86"},64135:{"value":"FA87","name":"CJK COMPATIBILITY IDEOGRAPH-FA87","category":"Lo","class":"0","bidirectional_category":"L","mapping":"614E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA87"},64136:{"value":"FA88","name":"CJK COMPATIBILITY IDEOGRAPH-FA88","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6108","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA88"},64137:{"value":"FA89","name":"CJK COMPATIBILITY IDEOGRAPH-FA89","category":"Lo","class":"0","bidirectional_category":"L","mapping":"618E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA89"},64138:{"value":"FA8A","name":"CJK COMPATIBILITY IDEOGRAPH-FA8A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6160","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA8A"},64139:{"value":"FA8B","name":"CJK COMPATIBILITY IDEOGRAPH-FA8B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA8B"},64140:{"value":"FA8C","name":"CJK COMPATIBILITY IDEOGRAPH-FA8C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6234","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA8C"},64141:{"value":"FA8D","name":"CJK COMPATIBILITY IDEOGRAPH-FA8D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"63C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA8D"},64142:{"value":"FA8E","name":"CJK COMPATIBILITY IDEOGRAPH-FA8E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"641C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA8E"},64143:{"value":"FA8F","name":"CJK COMPATIBILITY IDEOGRAPH-FA8F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6452","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA8F"},64144:{"value":"FA90","name":"CJK COMPATIBILITY IDEOGRAPH-FA90","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6556","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA90"},64145:{"value":"FA91","name":"CJK COMPATIBILITY IDEOGRAPH-FA91","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA91"},64146:{"value":"FA92","name":"CJK COMPATIBILITY IDEOGRAPH-FA92","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6717","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA92"},64147:{"value":"FA93","name":"CJK COMPATIBILITY IDEOGRAPH-FA93","category":"Lo","class":"0","bidirectional_category":"L","mapping":"671B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA93"},64148:{"value":"FA94","name":"CJK COMPATIBILITY IDEOGRAPH-FA94","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6756","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA94"},64149:{"value":"FA95","name":"CJK COMPATIBILITY IDEOGRAPH-FA95","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B79","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA95"},64150:{"value":"FA96","name":"CJK COMPATIBILITY IDEOGRAPH-FA96","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6BBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA96"},64151:{"value":"FA97","name":"CJK COMPATIBILITY IDEOGRAPH-FA97","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D41","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA97"},64152:{"value":"FA98","name":"CJK COMPATIBILITY IDEOGRAPH-FA98","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6EDB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA98"},64153:{"value":"FA99","name":"CJK COMPATIBILITY IDEOGRAPH-FA99","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6ECB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA99"},64154:{"value":"FA9A","name":"CJK COMPATIBILITY IDEOGRAPH-FA9A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6F22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA9A"},64155:{"value":"FA9B","name":"CJK COMPATIBILITY IDEOGRAPH-FA9B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"701E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA9B"},64156:{"value":"FA9C","name":"CJK COMPATIBILITY IDEOGRAPH-FA9C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"716E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA9C"},64157:{"value":"FA9D","name":"CJK COMPATIBILITY IDEOGRAPH-FA9D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"77A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA9D"},64158:{"value":"FA9E","name":"CJK COMPATIBILITY IDEOGRAPH-FA9E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7235","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA9E"},64159:{"value":"FA9F","name":"CJK COMPATIBILITY IDEOGRAPH-FA9F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"72AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFA9F"},64160:{"value":"FAA0","name":"CJK COMPATIBILITY IDEOGRAPH-FAA0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"732A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA0"},64161:{"value":"FAA1","name":"CJK COMPATIBILITY IDEOGRAPH-FAA1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7471","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA1"},64162:{"value":"FAA2","name":"CJK COMPATIBILITY IDEOGRAPH-FAA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7506","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA2"},64163:{"value":"FAA3","name":"CJK COMPATIBILITY IDEOGRAPH-FAA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"753B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA3"},64164:{"value":"FAA4","name":"CJK COMPATIBILITY IDEOGRAPH-FAA4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"761D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA4"},64165:{"value":"FAA5","name":"CJK COMPATIBILITY IDEOGRAPH-FAA5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"761F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA5"},64166:{"value":"FAA6","name":"CJK COMPATIBILITY IDEOGRAPH-FAA6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"76CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA6"},64167:{"value":"FAA7","name":"CJK COMPATIBILITY IDEOGRAPH-FAA7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"76DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA7"},64168:{"value":"FAA8","name":"CJK COMPATIBILITY IDEOGRAPH-FAA8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"76F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA8"},64169:{"value":"FAA9","name":"CJK COMPATIBILITY IDEOGRAPH-FAA9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"774A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAA9"},64170:{"value":"FAAA","name":"CJK COMPATIBILITY IDEOGRAPH-FAAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7740","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAAA"},64171:{"value":"FAAB","name":"CJK COMPATIBILITY IDEOGRAPH-FAAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"78CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAAB"},64172:{"value":"FAAC","name":"CJK COMPATIBILITY IDEOGRAPH-FAAC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7AB1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAAC"},64173:{"value":"FAAD","name":"CJK COMPATIBILITY IDEOGRAPH-FAAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7BC0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAAD"},64174:{"value":"FAAE","name":"CJK COMPATIBILITY IDEOGRAPH-FAAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7C7B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAAE"},64175:{"value":"FAAF","name":"CJK COMPATIBILITY IDEOGRAPH-FAAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7D5B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAAF"},64176:{"value":"FAB0","name":"CJK COMPATIBILITY IDEOGRAPH-FAB0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7DF4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB0"},64177:{"value":"FAB1","name":"CJK COMPATIBILITY IDEOGRAPH-FAB1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB1"},64178:{"value":"FAB2","name":"CJK COMPATIBILITY IDEOGRAPH-FAB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8005","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB2"},64179:{"value":"FAB3","name":"CJK COMPATIBILITY IDEOGRAPH-FAB3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8352","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB3"},64180:{"value":"FAB4","name":"CJK COMPATIBILITY IDEOGRAPH-FAB4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83EF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB4"},64181:{"value":"FAB5","name":"CJK COMPATIBILITY IDEOGRAPH-FAB5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8779","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB5"},64182:{"value":"FAB6","name":"CJK COMPATIBILITY IDEOGRAPH-FAB6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8941","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB6"},64183:{"value":"FAB7","name":"CJK COMPATIBILITY IDEOGRAPH-FAB7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8986","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB7"},64184:{"value":"FAB8","name":"CJK COMPATIBILITY IDEOGRAPH-FAB8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8996","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB8"},64185:{"value":"FAB9","name":"CJK COMPATIBILITY IDEOGRAPH-FAB9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8ABF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAB9"},64186:{"value":"FABA","name":"CJK COMPATIBILITY IDEOGRAPH-FABA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AF8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFABA"},64187:{"value":"FABB","name":"CJK COMPATIBILITY IDEOGRAPH-FABB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8ACB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFABB"},64188:{"value":"FABC","name":"CJK COMPATIBILITY IDEOGRAPH-FABC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B01","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFABC"},64189:{"value":"FABD","name":"CJK COMPATIBILITY IDEOGRAPH-FABD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AFE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFABD"},64190:{"value":"FABE","name":"CJK COMPATIBILITY IDEOGRAPH-FABE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFABE"},64191:{"value":"FABF","name":"CJK COMPATIBILITY IDEOGRAPH-FABF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B39","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFABF"},64192:{"value":"FAC0","name":"CJK COMPATIBILITY IDEOGRAPH-FAC0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B8A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC0"},64193:{"value":"FAC1","name":"CJK COMPATIBILITY IDEOGRAPH-FAC1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8D08","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC1"},64194:{"value":"FAC2","name":"CJK COMPATIBILITY IDEOGRAPH-FAC2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F38","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC2"},64195:{"value":"FAC3","name":"CJK COMPATIBILITY IDEOGRAPH-FAC3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC3"},64196:{"value":"FAC4","name":"CJK COMPATIBILITY IDEOGRAPH-FAC4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9199","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC4"},64197:{"value":"FAC5","name":"CJK COMPATIBILITY IDEOGRAPH-FAC5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9276","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC5"},64198:{"value":"FAC6","name":"CJK COMPATIBILITY IDEOGRAPH-FAC6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"967C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC6"},64199:{"value":"FAC7","name":"CJK COMPATIBILITY IDEOGRAPH-FAC7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC7"},64200:{"value":"FAC8","name":"CJK COMPATIBILITY IDEOGRAPH-FAC8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9756","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC8"},64201:{"value":"FAC9","name":"CJK COMPATIBILITY IDEOGRAPH-FAC9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"97DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAC9"},64202:{"value":"FACA","name":"CJK COMPATIBILITY IDEOGRAPH-FACA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"97FF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFACA"},64203:{"value":"FACB","name":"CJK COMPATIBILITY IDEOGRAPH-FACB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"980B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFACB"},64204:{"value":"FACC","name":"CJK COMPATIBILITY IDEOGRAPH-FACC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"983B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFACC"},64205:{"value":"FACD","name":"CJK COMPATIBILITY IDEOGRAPH-FACD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9B12","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFACD"},64206:{"value":"FACE","name":"CJK COMPATIBILITY IDEOGRAPH-FACE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F9C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFACE"},64207:{"value":"FACF","name":"CJK COMPATIBILITY IDEOGRAPH-FACF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2284A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFACF"},64208:{"value":"FAD0","name":"CJK COMPATIBILITY IDEOGRAPH-FAD0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"22844","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD0"},64209:{"value":"FAD1","name":"CJK COMPATIBILITY IDEOGRAPH-FAD1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"233D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD1"},64210:{"value":"FAD2","name":"CJK COMPATIBILITY IDEOGRAPH-FAD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3B9D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD2"},64211:{"value":"FAD3","name":"CJK COMPATIBILITY IDEOGRAPH-FAD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4018","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD3"},64212:{"value":"FAD4","name":"CJK COMPATIBILITY IDEOGRAPH-FAD4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4039","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD4"},64213:{"value":"FAD5","name":"CJK COMPATIBILITY IDEOGRAPH-FAD5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25249","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD5"},64214:{"value":"FAD6","name":"CJK COMPATIBILITY IDEOGRAPH-FAD6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25CD0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD6"},64215:{"value":"FAD7","name":"CJK COMPATIBILITY IDEOGRAPH-FAD7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"27ED3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD7"},64216:{"value":"FAD8","name":"CJK COMPATIBILITY IDEOGRAPH-FAD8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F43","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD8"},64217:{"value":"FAD9","name":"CJK COMPATIBILITY IDEOGRAPH-FAD9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F8E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFAD9"},64285:{"value":"FB1D","name":"HEBREW LETTER YOD WITH HIRIQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D9 05B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB1D"},64287:{"value":"FB1F","name":"HEBREW LIGATURE YIDDISH YOD YOD PATAH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05F2 05B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB1F"},64288:{"value":"FB20","name":"HEBREW LETTER ALTERNATIVE AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB20"},64289:{"value":"FB21","name":"HEBREW LETTER WIDE ALEF","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB21"},64290:{"value":"FB22","name":"HEBREW LETTER WIDE DALET","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05D3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB22"},64291:{"value":"FB23","name":"HEBREW LETTER WIDE HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05D4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB23"},64292:{"value":"FB24","name":"HEBREW LETTER WIDE KAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB24"},64293:{"value":"FB25","name":"HEBREW LETTER WIDE LAMED","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB25"},64294:{"value":"FB26","name":"HEBREW LETTER WIDE FINAL MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05DD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB26"},64295:{"value":"FB27","name":"HEBREW LETTER WIDE RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05E8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB27"},64296:{"value":"FB28","name":"HEBREW LETTER WIDE TAV","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB28"},64298:{"value":"FB2A","name":"HEBREW LETTER SHIN WITH SHIN DOT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E9 05C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB2A"},64299:{"value":"FB2B","name":"HEBREW LETTER SHIN WITH SIN DOT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E9 05C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB2B"},64300:{"value":"FB2C","name":"HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"FB49 05C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB2C"},64301:{"value":"FB2D","name":"HEBREW LETTER SHIN WITH DAGESH AND SIN DOT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"FB49 05C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB2D"},64302:{"value":"FB2E","name":"HEBREW LETTER ALEF WITH PATAH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D0 05B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB2E"},64303:{"value":"FB2F","name":"HEBREW LETTER ALEF WITH QAMATS","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D0 05B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB2F"},64304:{"value":"FB30","name":"HEBREW LETTER ALEF WITH MAPIQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D0 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB30"},64305:{"value":"FB31","name":"HEBREW LETTER BET WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D1 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB31"},64306:{"value":"FB32","name":"HEBREW LETTER GIMEL WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D2 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB32"},64307:{"value":"FB33","name":"HEBREW LETTER DALET WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D3 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB33"},64308:{"value":"FB34","name":"HEBREW LETTER HE WITH MAPIQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D4 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB34"},64309:{"value":"FB35","name":"HEBREW LETTER VAV WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D5 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB35"},64310:{"value":"FB36","name":"HEBREW LETTER ZAYIN WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D6 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB36"},64312:{"value":"FB38","name":"HEBREW LETTER TET WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D8 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB38"},64313:{"value":"FB39","name":"HEBREW LETTER YOD WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D9 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB39"},64314:{"value":"FB3A","name":"HEBREW LETTER FINAL KAF WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05DA 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB3A"},64315:{"value":"FB3B","name":"HEBREW LETTER KAF WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05DB 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB3B"},64316:{"value":"FB3C","name":"HEBREW LETTER LAMED WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05DC 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB3C"},64318:{"value":"FB3E","name":"HEBREW LETTER MEM WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05DE 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB3E"},64320:{"value":"FB40","name":"HEBREW LETTER NUN WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E0 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB40"},64321:{"value":"FB41","name":"HEBREW LETTER SAMEKH WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E1 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB41"},64323:{"value":"FB43","name":"HEBREW LETTER FINAL PE WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E3 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB43"},64324:{"value":"FB44","name":"HEBREW LETTER PE WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E4 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB44"},64326:{"value":"FB46","name":"HEBREW LETTER TSADI WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E6 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB46"},64327:{"value":"FB47","name":"HEBREW LETTER QOF WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E7 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB47"},64328:{"value":"FB48","name":"HEBREW LETTER RESH WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E8 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB48"},64329:{"value":"FB49","name":"HEBREW LETTER SHIN WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E9 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB49"},64330:{"value":"FB4A","name":"HEBREW LETTER TAV WITH DAGESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05EA 05BC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB4A"},64331:{"value":"FB4B","name":"HEBREW LETTER VAV WITH HOLAM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D5 05B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB4B"},64332:{"value":"FB4C","name":"HEBREW LETTER BET WITH RAFE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05D1 05BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB4C"},64333:{"value":"FB4D","name":"HEBREW LETTER KAF WITH RAFE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05DB 05BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB4D"},64334:{"value":"FB4E","name":"HEBREW LETTER PE WITH RAFE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"05E4 05BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB4E"},64335:{"value":"FB4F","name":"HEBREW LIGATURE ALEF LAMED","category":"Lo","class":"0","bidirectional_category":"R","mapping":" 05D0 05DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB4F"},64336:{"value":"FB50","name":"ARABIC LETTER ALEF WASLA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0671","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB50"},64337:{"value":"FB51","name":"ARABIC LETTER ALEF WASLA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0671","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB51"},64338:{"value":"FB52","name":"ARABIC LETTER BEEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB52"},64339:{"value":"FB53","name":"ARABIC LETTER BEEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB53"},64340:{"value":"FB54","name":"ARABIC LETTER BEEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB54"},64341:{"value":"FB55","name":"ARABIC LETTER BEEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB55"},64342:{"value":"FB56","name":"ARABIC LETTER PEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB56"},64343:{"value":"FB57","name":"ARABIC LETTER PEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB57"},64344:{"value":"FB58","name":"ARABIC LETTER PEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB58"},64345:{"value":"FB59","name":"ARABIC LETTER PEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB59"},64346:{"value":"FB5A","name":"ARABIC LETTER BEHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0680","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB5A"},64347:{"value":"FB5B","name":"ARABIC LETTER BEHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0680","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB5B"},64348:{"value":"FB5C","name":"ARABIC LETTER BEHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0680","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB5C"},64349:{"value":"FB5D","name":"ARABIC LETTER BEHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0680","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB5D"},64350:{"value":"FB5E","name":"ARABIC LETTER TTEHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB5E"},64351:{"value":"FB5F","name":"ARABIC LETTER TTEHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB5F"},64352:{"value":"FB60","name":"ARABIC LETTER TTEHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB60"},64353:{"value":"FB61","name":"ARABIC LETTER TTEHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB61"},64354:{"value":"FB62","name":"ARABIC LETTER TEHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB62"},64355:{"value":"FB63","name":"ARABIC LETTER TEHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB63"},64356:{"value":"FB64","name":"ARABIC LETTER TEHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB64"},64357:{"value":"FB65","name":"ARABIC LETTER TEHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 067F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB65"},64358:{"value":"FB66","name":"ARABIC LETTER TTEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0679","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB66"},64359:{"value":"FB67","name":"ARABIC LETTER TTEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0679","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB67"},64360:{"value":"FB68","name":"ARABIC LETTER TTEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0679","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB68"},64361:{"value":"FB69","name":"ARABIC LETTER TTEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0679","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB69"},64362:{"value":"FB6A","name":"ARABIC LETTER VEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB6A"},64363:{"value":"FB6B","name":"ARABIC LETTER VEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB6B"},64364:{"value":"FB6C","name":"ARABIC LETTER VEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB6C"},64365:{"value":"FB6D","name":"ARABIC LETTER VEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB6D"},64366:{"value":"FB6E","name":"ARABIC LETTER PEHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB6E"},64367:{"value":"FB6F","name":"ARABIC LETTER PEHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB6F"},64368:{"value":"FB70","name":"ARABIC LETTER PEHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB70"},64369:{"value":"FB71","name":"ARABIC LETTER PEHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB71"},64370:{"value":"FB72","name":"ARABIC LETTER DYEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0684","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB72"},64371:{"value":"FB73","name":"ARABIC LETTER DYEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0684","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB73"},64372:{"value":"FB74","name":"ARABIC LETTER DYEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0684","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB74"},64373:{"value":"FB75","name":"ARABIC LETTER DYEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0684","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB75"},64374:{"value":"FB76","name":"ARABIC LETTER NYEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0683","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB76"},64375:{"value":"FB77","name":"ARABIC LETTER NYEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0683","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB77"},64376:{"value":"FB78","name":"ARABIC LETTER NYEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0683","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB78"},64377:{"value":"FB79","name":"ARABIC LETTER NYEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0683","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB79"},64378:{"value":"FB7A","name":"ARABIC LETTER TCHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0686","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB7A"},64379:{"value":"FB7B","name":"ARABIC LETTER TCHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0686","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB7B"},64380:{"value":"FB7C","name":"ARABIC LETTER TCHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0686","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB7C"},64381:{"value":"FB7D","name":"ARABIC LETTER TCHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0686","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB7D"},64382:{"value":"FB7E","name":"ARABIC LETTER TCHEHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0687","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB7E"},64383:{"value":"FB7F","name":"ARABIC LETTER TCHEHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0687","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB7F"},64384:{"value":"FB80","name":"ARABIC LETTER TCHEHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0687","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB80"},64385:{"value":"FB81","name":"ARABIC LETTER TCHEHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0687","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB81"},64386:{"value":"FB82","name":"ARABIC LETTER DDAHAL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 068D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB82"},64387:{"value":"FB83","name":"ARABIC LETTER DDAHAL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 068D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB83"},64388:{"value":"FB84","name":"ARABIC LETTER DAHAL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 068C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB84"},64389:{"value":"FB85","name":"ARABIC LETTER DAHAL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 068C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB85"},64390:{"value":"FB86","name":"ARABIC LETTER DUL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 068E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB86"},64391:{"value":"FB87","name":"ARABIC LETTER DUL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 068E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB87"},64392:{"value":"FB88","name":"ARABIC LETTER DDAL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0688","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB88"},64393:{"value":"FB89","name":"ARABIC LETTER DDAL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0688","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB89"},64394:{"value":"FB8A","name":"ARABIC LETTER JEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0698","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB8A"},64395:{"value":"FB8B","name":"ARABIC LETTER JEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0698","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB8B"},64396:{"value":"FB8C","name":"ARABIC LETTER RREH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0691","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB8C"},64397:{"value":"FB8D","name":"ARABIC LETTER RREH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0691","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB8D"},64398:{"value":"FB8E","name":"ARABIC LETTER KEHEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB8E"},64399:{"value":"FB8F","name":"ARABIC LETTER KEHEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB8F"},64400:{"value":"FB90","name":"ARABIC LETTER KEHEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB90"},64401:{"value":"FB91","name":"ARABIC LETTER KEHEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB91"},64402:{"value":"FB92","name":"ARABIC LETTER GAF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB92"},64403:{"value":"FB93","name":"ARABIC LETTER GAF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB93"},64404:{"value":"FB94","name":"ARABIC LETTER GAF INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB94"},64405:{"value":"FB95","name":"ARABIC LETTER GAF MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB95"},64406:{"value":"FB96","name":"ARABIC LETTER GUEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB96"},64407:{"value":"FB97","name":"ARABIC LETTER GUEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB97"},64408:{"value":"FB98","name":"ARABIC LETTER GUEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB98"},64409:{"value":"FB99","name":"ARABIC LETTER GUEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB99"},64410:{"value":"FB9A","name":"ARABIC LETTER NGOEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB9A"},64411:{"value":"FB9B","name":"ARABIC LETTER NGOEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB9B"},64412:{"value":"FB9C","name":"ARABIC LETTER NGOEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB9C"},64413:{"value":"FB9D","name":"ARABIC LETTER NGOEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB9D"},64414:{"value":"FB9E","name":"ARABIC LETTER NOON GHUNNA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB9E"},64415:{"value":"FB9F","name":"ARABIC LETTER NOON GHUNNA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB9F"},64416:{"value":"FBA0","name":"ARABIC LETTER RNOON ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA0"},64417:{"value":"FBA1","name":"ARABIC LETTER RNOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA1"},64418:{"value":"FBA2","name":"ARABIC LETTER RNOON INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA2"},64419:{"value":"FBA3","name":"ARABIC LETTER RNOON MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA3"},64420:{"value":"FBA4","name":"ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA4"},64421:{"value":"FBA5","name":"ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA5"},64422:{"value":"FBA6","name":"ARABIC LETTER HEH GOAL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA6"},64423:{"value":"FBA7","name":"ARABIC LETTER HEH GOAL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA7"},64424:{"value":"FBA8","name":"ARABIC LETTER HEH GOAL INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA8"},64425:{"value":"FBA9","name":"ARABIC LETTER HEH GOAL MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBA9"},64426:{"value":"FBAA","name":"ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBAA"},64427:{"value":"FBAB","name":"ARABIC LETTER HEH DOACHASHMEE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBAB"},64428:{"value":"FBAC","name":"ARABIC LETTER HEH DOACHASHMEE INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBAC"},64429:{"value":"FBAD","name":"ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBAD"},64430:{"value":"FBAE","name":"ARABIC LETTER YEH BARREE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBAE"},64431:{"value":"FBAF","name":"ARABIC LETTER YEH BARREE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBAF"},64432:{"value":"FBB0","name":"ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB0"},64433:{"value":"FBB1","name":"ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB1"},64467:{"value":"FBD3","name":"ARABIC LETTER NG ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD3"},64468:{"value":"FBD4","name":"ARABIC LETTER NG FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD4"},64469:{"value":"FBD5","name":"ARABIC LETTER NG INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD5"},64470:{"value":"FBD6","name":"ARABIC LETTER NG MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD6"},64471:{"value":"FBD7","name":"ARABIC LETTER U ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD7"},64472:{"value":"FBD8","name":"ARABIC LETTER U FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD8"},64473:{"value":"FBD9","name":"ARABIC LETTER OE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBD9"},64474:{"value":"FBDA","name":"ARABIC LETTER OE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBDA"},64475:{"value":"FBDB","name":"ARABIC LETTER YU ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBDB"},64476:{"value":"FBDC","name":"ARABIC LETTER YU FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBDC"},64477:{"value":"FBDD","name":"ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0677","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBDD"},64478:{"value":"FBDE","name":"ARABIC LETTER VE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06CB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBDE"},64479:{"value":"FBDF","name":"ARABIC LETTER VE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06CB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBDF"},64480:{"value":"FBE0","name":"ARABIC LETTER KIRGHIZ OE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE0"},64481:{"value":"FBE1","name":"ARABIC LETTER KIRGHIZ OE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE1"},64482:{"value":"FBE2","name":"ARABIC LETTER KIRGHIZ YU ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE2"},64483:{"value":"FBE3","name":"ARABIC LETTER KIRGHIZ YU FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE3"},64484:{"value":"FBE4","name":"ARABIC LETTER E ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE4"},64485:{"value":"FBE5","name":"ARABIC LETTER E FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE5"},64486:{"value":"FBE6","name":"ARABIC LETTER E INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE6"},64487:{"value":"FBE7","name":"ARABIC LETTER E MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE7"},64488:{"value":"FBE8","name":"ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE8"},64489:{"value":"FBE9","name":"ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBE9"},64490:{"value":"FBEA","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBEA"},64491:{"value":"FBEB","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBEB"},64492:{"value":"FBEC","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBEC"},64493:{"value":"FBED","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBED"},64494:{"value":"FBEE","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBEE"},64495:{"value":"FBEF","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBEF"},64496:{"value":"FBF0","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF0"},64497:{"value":"FBF1","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF1"},64498:{"value":"FBF2","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF2"},64499:{"value":"FBF3","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF3"},64500:{"value":"FBF4","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF4"},64501:{"value":"FBF5","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF5"},64502:{"value":"FBF6","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF6"},64503:{"value":"FBF7","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF7"},64504:{"value":"FBF8","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 06D0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF8"},64505:{"value":"FBF9","name":"ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBF9"},64506:{"value":"FBFA","name":"ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBFA"},64507:{"value":"FBFB","name":"ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBFB"},64508:{"value":"FBFC","name":"ARABIC LETTER FARSI YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBFC"},64509:{"value":"FBFD","name":"ARABIC LETTER FARSI YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBFD"},64510:{"value":"FBFE","name":"ARABIC LETTER FARSI YEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBFE"},64511:{"value":"FBFF","name":"ARABIC LETTER FARSI YEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBFF"},64512:{"value":"FC00","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC00"},64513:{"value":"FC01","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC01"},64514:{"value":"FC02","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC02"},64515:{"value":"FC03","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC03"},64516:{"value":"FC04","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC04"},64517:{"value":"FC05","name":"ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC05"},64518:{"value":"FC06","name":"ARABIC LIGATURE BEH WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC06"},64519:{"value":"FC07","name":"ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC07"},64520:{"value":"FC08","name":"ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC08"},64521:{"value":"FC09","name":"ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC09"},64522:{"value":"FC0A","name":"ARABIC LIGATURE BEH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC0A"},64523:{"value":"FC0B","name":"ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC0B"},64524:{"value":"FC0C","name":"ARABIC LIGATURE TEH WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC0C"},64525:{"value":"FC0D","name":"ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC0D"},64526:{"value":"FC0E","name":"ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC0E"},64527:{"value":"FC0F","name":"ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC0F"},64528:{"value":"FC10","name":"ARABIC LIGATURE TEH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC10"},64529:{"value":"FC11","name":"ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC11"},64530:{"value":"FC12","name":"ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC12"},64531:{"value":"FC13","name":"ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC13"},64532:{"value":"FC14","name":"ARABIC LIGATURE THEH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC14"},64533:{"value":"FC15","name":"ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC15"},64534:{"value":"FC16","name":"ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC16"},64535:{"value":"FC17","name":"ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC17"},64536:{"value":"FC18","name":"ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC18"},64537:{"value":"FC19","name":"ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC19"},64538:{"value":"FC1A","name":"ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC1A"},64539:{"value":"FC1B","name":"ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC1B"},64540:{"value":"FC1C","name":"ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC1C"},64541:{"value":"FC1D","name":"ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC1D"},64542:{"value":"FC1E","name":"ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC1E"},64543:{"value":"FC1F","name":"ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC1F"},64544:{"value":"FC20","name":"ARABIC LIGATURE SAD WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC20"},64545:{"value":"FC21","name":"ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC21"},64546:{"value":"FC22","name":"ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC22"},64547:{"value":"FC23","name":"ARABIC LIGATURE DAD WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC23"},64548:{"value":"FC24","name":"ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC24"},64549:{"value":"FC25","name":"ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC25"},64550:{"value":"FC26","name":"ARABIC LIGATURE TAH WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC26"},64551:{"value":"FC27","name":"ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC27"},64552:{"value":"FC28","name":"ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC28"},64553:{"value":"FC29","name":"ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC29"},64554:{"value":"FC2A","name":"ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC2A"},64555:{"value":"FC2B","name":"ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC2B"},64556:{"value":"FC2C","name":"ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC2C"},64557:{"value":"FC2D","name":"ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC2D"},64558:{"value":"FC2E","name":"ARABIC LIGATURE FEH WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC2E"},64559:{"value":"FC2F","name":"ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC2F"},64560:{"value":"FC30","name":"ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC30"},64561:{"value":"FC31","name":"ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC31"},64562:{"value":"FC32","name":"ARABIC LIGATURE FEH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC32"},64563:{"value":"FC33","name":"ARABIC LIGATURE QAF WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC33"},64564:{"value":"FC34","name":"ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC34"},64565:{"value":"FC35","name":"ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC35"},64566:{"value":"FC36","name":"ARABIC LIGATURE QAF WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC36"},64567:{"value":"FC37","name":"ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC37"},64568:{"value":"FC38","name":"ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC38"},64569:{"value":"FC39","name":"ARABIC LIGATURE KAF WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC39"},64570:{"value":"FC3A","name":"ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC3A"},64571:{"value":"FC3B","name":"ARABIC LIGATURE KAF WITH LAM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC3B"},64572:{"value":"FC3C","name":"ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC3C"},64573:{"value":"FC3D","name":"ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC3D"},64574:{"value":"FC3E","name":"ARABIC LIGATURE KAF WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC3E"},64575:{"value":"FC3F","name":"ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC3F"},64576:{"value":"FC40","name":"ARABIC LIGATURE LAM WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC40"},64577:{"value":"FC41","name":"ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC41"},64578:{"value":"FC42","name":"ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC42"},64579:{"value":"FC43","name":"ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC43"},64580:{"value":"FC44","name":"ARABIC LIGATURE LAM WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC44"},64581:{"value":"FC45","name":"ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC45"},64582:{"value":"FC46","name":"ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC46"},64583:{"value":"FC47","name":"ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC47"},64584:{"value":"FC48","name":"ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC48"},64585:{"value":"FC49","name":"ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC49"},64586:{"value":"FC4A","name":"ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC4A"},64587:{"value":"FC4B","name":"ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC4B"},64588:{"value":"FC4C","name":"ARABIC LIGATURE NOON WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC4C"},64589:{"value":"FC4D","name":"ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC4D"},64590:{"value":"FC4E","name":"ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC4E"},64591:{"value":"FC4F","name":"ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC4F"},64592:{"value":"FC50","name":"ARABIC LIGATURE NOON WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC50"},64593:{"value":"FC51","name":"ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC51"},64594:{"value":"FC52","name":"ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC52"},64595:{"value":"FC53","name":"ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC53"},64596:{"value":"FC54","name":"ARABIC LIGATURE HEH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC54"},64597:{"value":"FC55","name":"ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC55"},64598:{"value":"FC56","name":"ARABIC LIGATURE YEH WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC56"},64599:{"value":"FC57","name":"ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC57"},64600:{"value":"FC58","name":"ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC58"},64601:{"value":"FC59","name":"ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC59"},64602:{"value":"FC5A","name":"ARABIC LIGATURE YEH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC5A"},64603:{"value":"FC5B","name":"ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0630 0670","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC5B"},64604:{"value":"FC5C","name":"ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631 0670","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC5C"},64605:{"value":"FC5D","name":"ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0649 0670","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC5D"},64606:{"value":"FC5E","name":"ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064C 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC5E"},64607:{"value":"FC5F","name":"ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064D 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC5F"},64608:{"value":"FC60","name":"ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064E 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC60"},64609:{"value":"FC61","name":"ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064F 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC61"},64610:{"value":"FC62","name":"ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 0650 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC62"},64611:{"value":"FC63","name":"ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 0651 0670","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC63"},64612:{"value":"FC64","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC64"},64613:{"value":"FC65","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC65"},64614:{"value":"FC66","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC66"},64615:{"value":"FC67","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC67"},64616:{"value":"FC68","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC68"},64617:{"value":"FC69","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC69"},64618:{"value":"FC6A","name":"ARABIC LIGATURE BEH WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC6A"},64619:{"value":"FC6B","name":"ARABIC LIGATURE BEH WITH ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC6B"},64620:{"value":"FC6C","name":"ARABIC LIGATURE BEH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC6C"},64621:{"value":"FC6D","name":"ARABIC LIGATURE BEH WITH NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC6D"},64622:{"value":"FC6E","name":"ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC6E"},64623:{"value":"FC6F","name":"ARABIC LIGATURE BEH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC6F"},64624:{"value":"FC70","name":"ARABIC LIGATURE TEH WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC70"},64625:{"value":"FC71","name":"ARABIC LIGATURE TEH WITH ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC71"},64626:{"value":"FC72","name":"ARABIC LIGATURE TEH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC72"},64627:{"value":"FC73","name":"ARABIC LIGATURE TEH WITH NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC73"},64628:{"value":"FC74","name":"ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC74"},64629:{"value":"FC75","name":"ARABIC LIGATURE TEH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC75"},64630:{"value":"FC76","name":"ARABIC LIGATURE THEH WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC76"},64631:{"value":"FC77","name":"ARABIC LIGATURE THEH WITH ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC77"},64632:{"value":"FC78","name":"ARABIC LIGATURE THEH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC78"},64633:{"value":"FC79","name":"ARABIC LIGATURE THEH WITH NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC79"},64634:{"value":"FC7A","name":"ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC7A"},64635:{"value":"FC7B","name":"ARABIC LIGATURE THEH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC7B"},64636:{"value":"FC7C","name":"ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC7C"},64637:{"value":"FC7D","name":"ARABIC LIGATURE FEH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC7D"},64638:{"value":"FC7E","name":"ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC7E"},64639:{"value":"FC7F","name":"ARABIC LIGATURE QAF WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC7F"},64640:{"value":"FC80","name":"ARABIC LIGATURE KAF WITH ALEF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC80"},64641:{"value":"FC81","name":"ARABIC LIGATURE KAF WITH LAM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC81"},64642:{"value":"FC82","name":"ARABIC LIGATURE KAF WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC82"},64643:{"value":"FC83","name":"ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC83"},64644:{"value":"FC84","name":"ARABIC LIGATURE KAF WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC84"},64645:{"value":"FC85","name":"ARABIC LIGATURE LAM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC85"},64646:{"value":"FC86","name":"ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC86"},64647:{"value":"FC87","name":"ARABIC LIGATURE LAM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC87"},64648:{"value":"FC88","name":"ARABIC LIGATURE MEEM WITH ALEF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC88"},64649:{"value":"FC89","name":"ARABIC LIGATURE MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC89"},64650:{"value":"FC8A","name":"ARABIC LIGATURE NOON WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC8A"},64651:{"value":"FC8B","name":"ARABIC LIGATURE NOON WITH ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC8B"},64652:{"value":"FC8C","name":"ARABIC LIGATURE NOON WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC8C"},64653:{"value":"FC8D","name":"ARABIC LIGATURE NOON WITH NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC8D"},64654:{"value":"FC8E","name":"ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC8E"},64655:{"value":"FC8F","name":"ARABIC LIGATURE NOON WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC8F"},64656:{"value":"FC90","name":"ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0649 0670","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC90"},64657:{"value":"FC91","name":"ARABIC LIGATURE YEH WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC91"},64658:{"value":"FC92","name":"ARABIC LIGATURE YEH WITH ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC92"},64659:{"value":"FC93","name":"ARABIC LIGATURE YEH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC93"},64660:{"value":"FC94","name":"ARABIC LIGATURE YEH WITH NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC94"},64661:{"value":"FC95","name":"ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC95"},64662:{"value":"FC96","name":"ARABIC LIGATURE YEH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC96"},64663:{"value":"FC97","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC97"},64664:{"value":"FC98","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC98"},64665:{"value":"FC99","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC99"},64666:{"value":"FC9A","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC9A"},64667:{"value":"FC9B","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC9B"},64668:{"value":"FC9C","name":"ARABIC LIGATURE BEH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC9C"},64669:{"value":"FC9D","name":"ARABIC LIGATURE BEH WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC9D"},64670:{"value":"FC9E","name":"ARABIC LIGATURE BEH WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC9E"},64671:{"value":"FC9F","name":"ARABIC LIGATURE BEH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFC9F"},64672:{"value":"FCA0","name":"ARABIC LIGATURE BEH WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA0"},64673:{"value":"FCA1","name":"ARABIC LIGATURE TEH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA1"},64674:{"value":"FCA2","name":"ARABIC LIGATURE TEH WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA2"},64675:{"value":"FCA3","name":"ARABIC LIGATURE TEH WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA3"},64676:{"value":"FCA4","name":"ARABIC LIGATURE TEH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA4"},64677:{"value":"FCA5","name":"ARABIC LIGATURE TEH WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA5"},64678:{"value":"FCA6","name":"ARABIC LIGATURE THEH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA6"},64679:{"value":"FCA7","name":"ARABIC LIGATURE JEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA7"},64680:{"value":"FCA8","name":"ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA8"},64681:{"value":"FCA9","name":"ARABIC LIGATURE HAH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCA9"},64682:{"value":"FCAA","name":"ARABIC LIGATURE HAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCAA"},64683:{"value":"FCAB","name":"ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCAB"},64684:{"value":"FCAC","name":"ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCAC"},64685:{"value":"FCAD","name":"ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCAD"},64686:{"value":"FCAE","name":"ARABIC LIGATURE SEEN WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCAE"},64687:{"value":"FCAF","name":"ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCAF"},64688:{"value":"FCB0","name":"ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB0"},64689:{"value":"FCB1","name":"ARABIC LIGATURE SAD WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB1"},64690:{"value":"FCB2","name":"ARABIC LIGATURE SAD WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB2"},64691:{"value":"FCB3","name":"ARABIC LIGATURE SAD WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB3"},64692:{"value":"FCB4","name":"ARABIC LIGATURE DAD WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB4"},64693:{"value":"FCB5","name":"ARABIC LIGATURE DAD WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB5"},64694:{"value":"FCB6","name":"ARABIC LIGATURE DAD WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB6"},64695:{"value":"FCB7","name":"ARABIC LIGATURE DAD WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB7"},64696:{"value":"FCB8","name":"ARABIC LIGATURE TAH WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB8"},64697:{"value":"FCB9","name":"ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCB9"},64698:{"value":"FCBA","name":"ARABIC LIGATURE AIN WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCBA"},64699:{"value":"FCBB","name":"ARABIC LIGATURE AIN WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCBB"},64700:{"value":"FCBC","name":"ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCBC"},64701:{"value":"FCBD","name":"ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCBD"},64702:{"value":"FCBE","name":"ARABIC LIGATURE FEH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCBE"},64703:{"value":"FCBF","name":"ARABIC LIGATURE FEH WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCBF"},64704:{"value":"FCC0","name":"ARABIC LIGATURE FEH WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC0"},64705:{"value":"FCC1","name":"ARABIC LIGATURE FEH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC1"},64706:{"value":"FCC2","name":"ARABIC LIGATURE QAF WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC2"},64707:{"value":"FCC3","name":"ARABIC LIGATURE QAF WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC3"},64708:{"value":"FCC4","name":"ARABIC LIGATURE KAF WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC4"},64709:{"value":"FCC5","name":"ARABIC LIGATURE KAF WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC5"},64710:{"value":"FCC6","name":"ARABIC LIGATURE KAF WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC6"},64711:{"value":"FCC7","name":"ARABIC LIGATURE KAF WITH LAM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC7"},64712:{"value":"FCC8","name":"ARABIC LIGATURE KAF WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC8"},64713:{"value":"FCC9","name":"ARABIC LIGATURE LAM WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCC9"},64714:{"value":"FCCA","name":"ARABIC LIGATURE LAM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCCA"},64715:{"value":"FCCB","name":"ARABIC LIGATURE LAM WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCCB"},64716:{"value":"FCCC","name":"ARABIC LIGATURE LAM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCCC"},64717:{"value":"FCCD","name":"ARABIC LIGATURE LAM WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCCD"},64718:{"value":"FCCE","name":"ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCCE"},64719:{"value":"FCCF","name":"ARABIC LIGATURE MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCCF"},64720:{"value":"FCD0","name":"ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD0"},64721:{"value":"FCD1","name":"ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD1"},64722:{"value":"FCD2","name":"ARABIC LIGATURE NOON WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD2"},64723:{"value":"FCD3","name":"ARABIC LIGATURE NOON WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD3"},64724:{"value":"FCD4","name":"ARABIC LIGATURE NOON WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD4"},64725:{"value":"FCD5","name":"ARABIC LIGATURE NOON WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD5"},64726:{"value":"FCD6","name":"ARABIC LIGATURE NOON WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD6"},64727:{"value":"FCD7","name":"ARABIC LIGATURE HEH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD7"},64728:{"value":"FCD8","name":"ARABIC LIGATURE HEH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD8"},64729:{"value":"FCD9","name":"ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 0670","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCD9"},64730:{"value":"FCDA","name":"ARABIC LIGATURE YEH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCDA"},64731:{"value":"FCDB","name":"ARABIC LIGATURE YEH WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCDB"},64732:{"value":"FCDC","name":"ARABIC LIGATURE YEH WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCDC"},64733:{"value":"FCDD","name":"ARABIC LIGATURE YEH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCDD"},64734:{"value":"FCDE","name":"ARABIC LIGATURE YEH WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCDE"},64735:{"value":"FCDF","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCDF"},64736:{"value":"FCE0","name":"ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE0"},64737:{"value":"FCE1","name":"ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE1"},64738:{"value":"FCE2","name":"ARABIC LIGATURE BEH WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE2"},64739:{"value":"FCE3","name":"ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE3"},64740:{"value":"FCE4","name":"ARABIC LIGATURE TEH WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE4"},64741:{"value":"FCE5","name":"ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE5"},64742:{"value":"FCE6","name":"ARABIC LIGATURE THEH WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE6"},64743:{"value":"FCE7","name":"ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE7"},64744:{"value":"FCE8","name":"ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE8"},64745:{"value":"FCE9","name":"ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCE9"},64746:{"value":"FCEA","name":"ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCEA"},64747:{"value":"FCEB","name":"ARABIC LIGATURE KAF WITH LAM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCEB"},64748:{"value":"FCEC","name":"ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCEC"},64749:{"value":"FCED","name":"ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCED"},64750:{"value":"FCEE","name":"ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCEE"},64751:{"value":"FCEF","name":"ARABIC LIGATURE NOON WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCEF"},64752:{"value":"FCF0","name":"ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF0"},64753:{"value":"FCF1","name":"ARABIC LIGATURE YEH WITH HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF1"},64754:{"value":"FCF2","name":"ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 064E 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF2"},64755:{"value":"FCF3","name":"ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 064F 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF3"},64756:{"value":"FCF4","name":"ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 0650 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF4"},64757:{"value":"FCF5","name":"ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF5"},64758:{"value":"FCF6","name":"ARABIC LIGATURE TAH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF6"},64759:{"value":"FCF7","name":"ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF7"},64760:{"value":"FCF8","name":"ARABIC LIGATURE AIN WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF8"},64761:{"value":"FCF9","name":"ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCF9"},64762:{"value":"FCFA","name":"ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCFA"},64763:{"value":"FCFB","name":"ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCFB"},64764:{"value":"FCFC","name":"ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCFC"},64765:{"value":"FCFD","name":"ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCFD"},64766:{"value":"FCFE","name":"ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCFE"},64767:{"value":"FCFF","name":"ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFCFF"},64768:{"value":"FD00","name":"ARABIC LIGATURE HAH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD00"},64769:{"value":"FD01","name":"ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD01"},64770:{"value":"FD02","name":"ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD02"},64771:{"value":"FD03","name":"ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD03"},64772:{"value":"FD04","name":"ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD04"},64773:{"value":"FD05","name":"ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD05"},64774:{"value":"FD06","name":"ARABIC LIGATURE SAD WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD06"},64775:{"value":"FD07","name":"ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD07"},64776:{"value":"FD08","name":"ARABIC LIGATURE DAD WITH YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD08"},64777:{"value":"FD09","name":"ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD09"},64778:{"value":"FD0A","name":"ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD0A"},64779:{"value":"FD0B","name":"ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD0B"},64780:{"value":"FD0C","name":"ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD0C"},64781:{"value":"FD0D","name":"ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD0D"},64782:{"value":"FD0E","name":"ARABIC LIGATURE SEEN WITH REH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD0E"},64783:{"value":"FD0F","name":"ARABIC LIGATURE SAD WITH REH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD0F"},64784:{"value":"FD10","name":"ARABIC LIGATURE DAD WITH REH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD10"},64785:{"value":"FD11","name":"ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD11"},64786:{"value":"FD12","name":"ARABIC LIGATURE TAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD12"},64787:{"value":"FD13","name":"ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD13"},64788:{"value":"FD14","name":"ARABIC LIGATURE AIN WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD14"},64789:{"value":"FD15","name":"ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD15"},64790:{"value":"FD16","name":"ARABIC LIGATURE GHAIN WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD16"},64791:{"value":"FD17","name":"ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD17"},64792:{"value":"FD18","name":"ARABIC LIGATURE SEEN WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD18"},64793:{"value":"FD19","name":"ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD19"},64794:{"value":"FD1A","name":"ARABIC LIGATURE SHEEN WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD1A"},64795:{"value":"FD1B","name":"ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD1B"},64796:{"value":"FD1C","name":"ARABIC LIGATURE HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD1C"},64797:{"value":"FD1D","name":"ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD1D"},64798:{"value":"FD1E","name":"ARABIC LIGATURE JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD1E"},64799:{"value":"FD1F","name":"ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD1F"},64800:{"value":"FD20","name":"ARABIC LIGATURE KHAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD20"},64801:{"value":"FD21","name":"ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD21"},64802:{"value":"FD22","name":"ARABIC LIGATURE SAD WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD22"},64803:{"value":"FD23","name":"ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD23"},64804:{"value":"FD24","name":"ARABIC LIGATURE DAD WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD24"},64805:{"value":"FD25","name":"ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD25"},64806:{"value":"FD26","name":"ARABIC LIGATURE SHEEN WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD26"},64807:{"value":"FD27","name":"ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD27"},64808:{"value":"FD28","name":"ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD28"},64809:{"value":"FD29","name":"ARABIC LIGATURE SHEEN WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD29"},64810:{"value":"FD2A","name":"ARABIC LIGATURE SEEN WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD2A"},64811:{"value":"FD2B","name":"ARABIC LIGATURE SAD WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD2B"},64812:{"value":"FD2C","name":"ARABIC LIGATURE DAD WITH REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD2C"},64813:{"value":"FD2D","name":"ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD2D"},64814:{"value":"FD2E","name":"ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD2E"},64815:{"value":"FD2F","name":"ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD2F"},64816:{"value":"FD30","name":"ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD30"},64817:{"value":"FD31","name":"ARABIC LIGATURE SEEN WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD31"},64818:{"value":"FD32","name":"ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD32"},64819:{"value":"FD33","name":"ARABIC LIGATURE TAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD33"},64820:{"value":"FD34","name":"ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD34"},64821:{"value":"FD35","name":"ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD35"},64822:{"value":"FD36","name":"ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD36"},64823:{"value":"FD37","name":"ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD37"},64824:{"value":"FD38","name":"ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD38"},64825:{"value":"FD39","name":"ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD39"},64826:{"value":"FD3A","name":"ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD3A"},64827:{"value":"FD3B","name":"ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD3B"},64828:{"value":"FD3C","name":"ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627 064B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD3C"},64829:{"value":"FD3D","name":"ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627 064B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD3D"},64848:{"value":"FD50","name":"ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD50"},64849:{"value":"FD51","name":"ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062D 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD51"},64850:{"value":"FD52","name":"ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062D 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD52"},64851:{"value":"FD53","name":"ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD53"},64852:{"value":"FD54","name":"ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD54"},64853:{"value":"FD55","name":"ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD55"},64854:{"value":"FD56","name":"ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD56"},64855:{"value":"FD57","name":"ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD57"},64856:{"value":"FD58","name":"ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD58"},64857:{"value":"FD59","name":"ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD59"},64858:{"value":"FD5A","name":"ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD5A"},64859:{"value":"FD5B","name":"ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD5B"},64860:{"value":"FD5C","name":"ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062D 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD5C"},64861:{"value":"FD5D","name":"ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062C 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD5D"},64862:{"value":"FD5E","name":"ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062C 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD5E"},64863:{"value":"FD5F","name":"ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD5F"},64864:{"value":"FD60","name":"ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD60"},64865:{"value":"FD61","name":"ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD61"},64866:{"value":"FD62","name":"ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD62"},64867:{"value":"FD63","name":"ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD63"},64868:{"value":"FD64","name":"ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 062D 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD64"},64869:{"value":"FD65","name":"ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 062D 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD65"},64870:{"value":"FD66","name":"ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD66"},64871:{"value":"FD67","name":"ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD67"},64872:{"value":"FD68","name":"ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD68"},64873:{"value":"FD69","name":"ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD69"},64874:{"value":"FD6A","name":"ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD6A"},64875:{"value":"FD6B","name":"ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD6B"},64876:{"value":"FD6C","name":"ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD6C"},64877:{"value":"FD6D","name":"ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD6D"},64878:{"value":"FD6E","name":"ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062D 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD6E"},64879:{"value":"FD6F","name":"ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD6F"},64880:{"value":"FD70","name":"ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD70"},64881:{"value":"FD71","name":"ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD71"},64882:{"value":"FD72","name":"ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD72"},64883:{"value":"FD73","name":"ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD73"},64884:{"value":"FD74","name":"ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD74"},64885:{"value":"FD75","name":"ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD75"},64886:{"value":"FD76","name":"ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD76"},64887:{"value":"FD77","name":"ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD77"},64888:{"value":"FD78","name":"ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD78"},64889:{"value":"FD79","name":"ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD79"},64890:{"value":"FD7A","name":"ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD7A"},64891:{"value":"FD7B","name":"ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD7B"},64892:{"value":"FD7C","name":"ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD7C"},64893:{"value":"FD7D","name":"ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD7D"},64894:{"value":"FD7E","name":"ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD7E"},64895:{"value":"FD7F","name":"ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD7F"},64896:{"value":"FD80","name":"ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD80"},64897:{"value":"FD81","name":"ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD81"},64898:{"value":"FD82","name":"ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062D 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD82"},64899:{"value":"FD83","name":"ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD83"},64900:{"value":"FD84","name":"ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD84"},64901:{"value":"FD85","name":"ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD85"},64902:{"value":"FD86","name":"ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD86"},64903:{"value":"FD87","name":"ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD87"},64904:{"value":"FD88","name":"ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD88"},64905:{"value":"FD89","name":"ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062D 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD89"},64906:{"value":"FD8A","name":"ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD8A"},64907:{"value":"FD8B","name":"ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD8B"},64908:{"value":"FD8C","name":"ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062C 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD8C"},64909:{"value":"FD8D","name":"ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD8D"},64910:{"value":"FD8E","name":"ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062E 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD8E"},64911:{"value":"FD8F","name":"ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062E 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD8F"},64914:{"value":"FD92","name":"ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062C 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD92"},64915:{"value":"FD93","name":"ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 0645 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD93"},64916:{"value":"FD94","name":"ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD94"},64917:{"value":"FD95","name":"ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD95"},64918:{"value":"FD96","name":"ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062D 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD96"},64919:{"value":"FD97","name":"ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD97"},64920:{"value":"FD98","name":"ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD98"},64921:{"value":"FD99","name":"ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD99"},64922:{"value":"FD9A","name":"ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD9A"},64923:{"value":"FD9B","name":"ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD9B"},64924:{"value":"FD9C","name":"ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD9C"},64925:{"value":"FD9D","name":"ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD9D"},64926:{"value":"FD9E","name":"ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062E 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD9E"},64927:{"value":"FD9F","name":"ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD9F"},64928:{"value":"FDA0","name":"ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062C 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA0"},64929:{"value":"FDA1","name":"ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062E 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA1"},64930:{"value":"FDA2","name":"ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 062E 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA2"},64931:{"value":"FDA3","name":"ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA3"},64932:{"value":"FDA4","name":"ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA4"},64933:{"value":"FDA5","name":"ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA5"},64934:{"value":"FDA6","name":"ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 062D 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA6"},64935:{"value":"FDA7","name":"ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0645 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA7"},64936:{"value":"FDA8","name":"ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062E 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA8"},64937:{"value":"FDA9","name":"ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDA9"},64938:{"value":"FDAA","name":"ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDAA"},64939:{"value":"FDAB","name":"ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDAB"},64940:{"value":"FDAC","name":"ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDAC"},64941:{"value":"FDAD","name":"ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDAD"},64942:{"value":"FDAE","name":"ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDAE"},64943:{"value":"FDAF","name":"ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDAF"},64944:{"value":"FDB0","name":"ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB0"},64945:{"value":"FDB1","name":"ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB1"},64946:{"value":"FDB2","name":"ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB2"},64947:{"value":"FDB3","name":"ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB3"},64948:{"value":"FDB4","name":"ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0645 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB4"},64949:{"value":"FDB5","name":"ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062D 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB5"},64950:{"value":"FDB6","name":"ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB6"},64951:{"value":"FDB7","name":"ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB7"},64952:{"value":"FDB8","name":"ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB8"},64953:{"value":"FDB9","name":"ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062E 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDB9"},64954:{"value":"FDBA","name":"ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDBA"},64955:{"value":"FDBB","name":"ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDBB"},64956:{"value":"FDBC","name":"ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDBC"},64957:{"value":"FDBD","name":"ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDBD"},64958:{"value":"FDBE","name":"ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDBE"},64959:{"value":"FDBF","name":"ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDBF"},64960:{"value":"FDC0","name":"ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC0"},64961:{"value":"FDC1","name":"ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641 0645 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC1"},64962:{"value":"FDC2","name":"ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628 062D 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC2"},64963:{"value":"FDC3","name":"ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC3"},64964:{"value":"FDC4","name":"ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 062C 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC4"},64965:{"value":"FDC5","name":"ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0645 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC5"},64966:{"value":"FDC6","name":"ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633 062E 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC6"},64967:{"value":"FDC7","name":"ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646 062C 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDC7"},65008:{"value":"FDF0","name":"ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0644 06D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF0"},65009:{"value":"FDF1","name":"ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642 0644 06D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF1"},65010:{"value":"FDF2","name":"ARABIC LIGATURE ALLAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627 0644 0644 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF2"},65011:{"value":"FDF3","name":"ARABIC LIGATURE AKBAR ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627 0643 0628 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF3"},65012:{"value":"FDF4","name":"ARABIC LIGATURE MOHAMMAD ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645 062D 0645 062F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF4"},65013:{"value":"FDF5","name":"ARABIC LIGATURE SALAM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0644 0639 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF5"},65014:{"value":"FDF6","name":"ARABIC LIGATURE RASOUL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631 0633 0648 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF6"},65015:{"value":"FDF7","name":"ARABIC LIGATURE ALAYHE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639 0644 064A 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF7"},65016:{"value":"FDF8","name":"ARABIC LIGATURE WASALLAM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648 0633 0644 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF8"},65017:{"value":"FDF9","name":"ARABIC LIGATURE SALLA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0644 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDF9"},65018:{"value":"FDFA","name":"ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDFA"},65019:{"value":"FDFB","name":"ARABIC LIGATURE JALLAJALALOUHOU","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C 0644 0020 062C 0644 0627 0644 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC LETTER JALLAJALALOUHOU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDFB"},65136:{"value":"FE70","name":"ARABIC FATHATAN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING FATHATAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE70"},65137:{"value":"FE71","name":"ARABIC TATWEEL WITH FATHATAN ABOVE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 064B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC FATHATAN ON TATWEEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE71"},65138:{"value":"FE72","name":"ARABIC DAMMATAN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING DAMMATAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE72"},65139:{"value":"FE73","name":"ARABIC TAIL FRAGMENT","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE73"},65140:{"value":"FE74","name":"ARABIC KASRATAN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING KASRATAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE74"},65142:{"value":"FE76","name":"ARABIC FATHA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING FATHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE76"},65143:{"value":"FE77","name":"ARABIC FATHA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 064E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC FATHAH ON TATWEEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE77"},65144:{"value":"FE78","name":"ARABIC DAMMA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 064F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING DAMMAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE78"},65145:{"value":"FE79","name":"ARABIC DAMMA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 064F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC DAMMAH ON TATWEEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE79"},65146:{"value":"FE7A","name":"ARABIC KASRA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 0650","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING KASRAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE7A"},65147:{"value":"FE7B","name":"ARABIC KASRA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 0650","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC KASRAH ON TATWEEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE7B"},65148:{"value":"FE7C","name":"ARABIC SHADDA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING SHADDAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE7C"},65149:{"value":"FE7D","name":"ARABIC SHADDA MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 0651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SHADDAH ON TATWEEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE7D"},65150:{"value":"FE7E","name":"ARABIC SUKUN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0020 0652","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SPACING SUKUN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE7E"},65151:{"value":"FE7F","name":"ARABIC SUKUN MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0640 0652","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SUKUN ON TATWEEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE7F"},65152:{"value":"FE80","name":"ARABIC LETTER HAMZA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0621","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE80"},65153:{"value":"FE81","name":"ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0622","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE81"},65154:{"value":"FE82","name":"ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0622","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC MADDAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE82"},65155:{"value":"FE83","name":"ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0623","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE83"},65156:{"value":"FE84","name":"ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0623","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAMZAH ON ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE84"},65157:{"value":"FE85","name":"ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0624","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE85"},65158:{"value":"FE86","name":"ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0624","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAMZAH ON WAW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE86"},65159:{"value":"FE87","name":"ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0625","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE87"},65160:{"value":"FE88","name":"ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0625","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE88"},65161:{"value":"FE89","name":"ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH ON YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE89"},65162:{"value":"FE8A","name":"ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAMZAH ON YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE8A"},65163:{"value":"FE8B","name":"ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC HAMZAH ON YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE8B"},65164:{"value":"FE8C","name":"ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0626","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC HAMZAH ON YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE8C"},65165:{"value":"FE8D","name":"ARABIC LETTER ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE8D"},65166:{"value":"FE8E","name":"ARABIC LETTER ALEF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE8E"},65167:{"value":"FE8F","name":"ARABIC LETTER BEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC BAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE8F"},65168:{"value":"FE90","name":"ARABIC LETTER BEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC BAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE90"},65169:{"value":"FE91","name":"ARABIC LETTER BEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC BAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE91"},65170:{"value":"FE92","name":"ARABIC LETTER BEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC BAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE92"},65171:{"value":"FE93","name":"ARABIC LETTER TEH MARBUTA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0629","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC TAA MARBUTAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE93"},65172:{"value":"FE94","name":"ARABIC LETTER TEH MARBUTA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0629","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC TAA MARBUTAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE94"},65173:{"value":"FE95","name":"ARABIC LETTER TEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC TAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE95"},65174:{"value":"FE96","name":"ARABIC LETTER TEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC TAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE96"},65175:{"value":"FE97","name":"ARABIC LETTER TEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC TAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE97"},65176:{"value":"FE98","name":"ARABIC LETTER TEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC TAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE98"},65177:{"value":"FE99","name":"ARABIC LETTER THEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC THAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE99"},65178:{"value":"FE9A","name":"ARABIC LETTER THEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC THAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE9A"},65179:{"value":"FE9B","name":"ARABIC LETTER THEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC THAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE9B"},65180:{"value":"FE9C","name":"ARABIC LETTER THEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC THAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE9C"},65181:{"value":"FE9D","name":"ARABIC LETTER JEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC JEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE9D"},65182:{"value":"FE9E","name":"ARABIC LETTER JEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC JEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE9E"},65183:{"value":"FE9F","name":"ARABIC LETTER JEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC JEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE9F"},65184:{"value":"FEA0","name":"ARABIC LETTER JEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC JEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA0"},65185:{"value":"FEA1","name":"ARABIC LETTER HAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA1"},65186:{"value":"FEA2","name":"ARABIC LETTER HAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA2"},65187:{"value":"FEA3","name":"ARABIC LETTER HAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC HAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA3"},65188:{"value":"FEA4","name":"ARABIC LETTER HAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC HAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA4"},65189:{"value":"FEA5","name":"ARABIC LETTER KHAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC KHAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA5"},65190:{"value":"FEA6","name":"ARABIC LETTER KHAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC KHAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA6"},65191:{"value":"FEA7","name":"ARABIC LETTER KHAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC KHAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA7"},65192:{"value":"FEA8","name":"ARABIC LETTER KHAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC KHAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA8"},65193:{"value":"FEA9","name":"ARABIC LETTER DAL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC DAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEA9"},65194:{"value":"FEAA","name":"ARABIC LETTER DAL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC DAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEAA"},65195:{"value":"FEAB","name":"ARABIC LETTER THAL ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0630","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC THAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEAB"},65196:{"value":"FEAC","name":"ARABIC LETTER THAL FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0630","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC THAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEAC"},65197:{"value":"FEAD","name":"ARABIC LETTER REH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC RA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEAD"},65198:{"value":"FEAE","name":"ARABIC LETTER REH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC RA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEAE"},65199:{"value":"FEAF","name":"ARABIC LETTER ZAIN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC ZAIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEAF"},65200:{"value":"FEB0","name":"ARABIC LETTER ZAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC ZAIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB0"},65201:{"value":"FEB1","name":"ARABIC LETTER SEEN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC SEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB1"},65202:{"value":"FEB2","name":"ARABIC LETTER SEEN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC SEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB2"},65203:{"value":"FEB3","name":"ARABIC LETTER SEEN INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC SEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB3"},65204:{"value":"FEB4","name":"ARABIC LETTER SEEN MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC SEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB4"},65205:{"value":"FEB5","name":"ARABIC LETTER SHEEN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC SHEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB5"},65206:{"value":"FEB6","name":"ARABIC LETTER SHEEN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC SHEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB6"},65207:{"value":"FEB7","name":"ARABIC LETTER SHEEN INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC SHEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB7"},65208:{"value":"FEB8","name":"ARABIC LETTER SHEEN MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC SHEEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB8"},65209:{"value":"FEB9","name":"ARABIC LETTER SAD ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC SAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEB9"},65210:{"value":"FEBA","name":"ARABIC LETTER SAD FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC SAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEBA"},65211:{"value":"FEBB","name":"ARABIC LETTER SAD INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC SAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEBB"},65212:{"value":"FEBC","name":"ARABIC LETTER SAD MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC SAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEBC"},65213:{"value":"FEBD","name":"ARABIC LETTER DAD ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC DAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEBD"},65214:{"value":"FEBE","name":"ARABIC LETTER DAD FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC DAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEBE"},65215:{"value":"FEBF","name":"ARABIC LETTER DAD INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC DAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEBF"},65216:{"value":"FEC0","name":"ARABIC LETTER DAD MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC DAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC0"},65217:{"value":"FEC1","name":"ARABIC LETTER TAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC1"},65218:{"value":"FEC2","name":"ARABIC LETTER TAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC2"},65219:{"value":"FEC3","name":"ARABIC LETTER TAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC3"},65220:{"value":"FEC4","name":"ARABIC LETTER TAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC TAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC4"},65221:{"value":"FEC5","name":"ARABIC LETTER ZAH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC DHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC5"},65222:{"value":"FEC6","name":"ARABIC LETTER ZAH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC DHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC6"},65223:{"value":"FEC7","name":"ARABIC LETTER ZAH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC DHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC7"},65224:{"value":"FEC8","name":"ARABIC LETTER ZAH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC DHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC8"},65225:{"value":"FEC9","name":"ARABIC LETTER AIN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC AIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEC9"},65226:{"value":"FECA","name":"ARABIC LETTER AIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC AIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFECA"},65227:{"value":"FECB","name":"ARABIC LETTER AIN INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC AIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFECB"},65228:{"value":"FECC","name":"ARABIC LETTER AIN MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC AIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFECC"},65229:{"value":"FECD","name":"ARABIC LETTER GHAIN ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC GHAIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFECD"},65230:{"value":"FECE","name":"ARABIC LETTER GHAIN FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC GHAIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFECE"},65231:{"value":"FECF","name":"ARABIC LETTER GHAIN INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC GHAIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFECF"},65232:{"value":"FED0","name":"ARABIC LETTER GHAIN MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC GHAIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED0"},65233:{"value":"FED1","name":"ARABIC LETTER FEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED1"},65234:{"value":"FED2","name":"ARABIC LETTER FEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED2"},65235:{"value":"FED3","name":"ARABIC LETTER FEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED3"},65236:{"value":"FED4","name":"ARABIC LETTER FEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC FA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED4"},65237:{"value":"FED5","name":"ARABIC LETTER QAF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC QAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED5"},65238:{"value":"FED6","name":"ARABIC LETTER QAF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC QAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED6"},65239:{"value":"FED7","name":"ARABIC LETTER QAF INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC QAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED7"},65240:{"value":"FED8","name":"ARABIC LETTER QAF MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC QAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED8"},65241:{"value":"FED9","name":"ARABIC LETTER KAF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFED9"},65242:{"value":"FEDA","name":"ARABIC LETTER KAF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEDA"},65243:{"value":"FEDB","name":"ARABIC LETTER KAF INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEDB"},65244:{"value":"FEDC","name":"ARABIC LETTER KAF MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC CAF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEDC"},65245:{"value":"FEDD","name":"ARABIC LETTER LAM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC LAM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEDD"},65246:{"value":"FEDE","name":"ARABIC LETTER LAM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC LAM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEDE"},65247:{"value":"FEDF","name":"ARABIC LETTER LAM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC LAM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEDF"},65248:{"value":"FEE0","name":"ARABIC LETTER LAM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC LAM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE0"},65249:{"value":"FEE1","name":"ARABIC LETTER MEEM ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC MEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE1"},65250:{"value":"FEE2","name":"ARABIC LETTER MEEM FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC MEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE2"},65251:{"value":"FEE3","name":"ARABIC LETTER MEEM INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC MEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE3"},65252:{"value":"FEE4","name":"ARABIC LETTER MEEM MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC MEEM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE4"},65253:{"value":"FEE5","name":"ARABIC LETTER NOON ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC NOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE5"},65254:{"value":"FEE6","name":"ARABIC LETTER NOON FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC NOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE6"},65255:{"value":"FEE7","name":"ARABIC LETTER NOON INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC NOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE7"},65256:{"value":"FEE8","name":"ARABIC LETTER NOON MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC NOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE8"},65257:{"value":"FEE9","name":"ARABIC LETTER HEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEE9"},65258:{"value":"FEEA","name":"ARABIC LETTER HEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEEA"},65259:{"value":"FEEB","name":"ARABIC LETTER HEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEEB"},65260:{"value":"FEEC","name":"ARABIC LETTER HEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEEC"},65261:{"value":"FEED","name":"ARABIC LETTER WAW ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC WAW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEED"},65262:{"value":"FEEE","name":"ARABIC LETTER WAW FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC WAW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEEE"},65263:{"value":"FEEF","name":"ARABIC LETTER ALEF MAKSURA ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEEF"},65264:{"value":"FEF0","name":"ARABIC LETTER ALEF MAKSURA FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC ALEF MAQSURAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF0"},65265:{"value":"FEF1","name":"ARABIC LETTER YEH ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF1"},65266:{"value":"FEF2","name":"ARABIC LETTER YEH FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF2"},65267:{"value":"FEF3","name":"ARABIC LETTER YEH INITIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR INITIAL ARABIC YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF3"},65268:{"value":"FEF4","name":"ARABIC LETTER YEH MEDIAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR MEDIAL ARABIC YA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF4"},65269:{"value":"FEF5","name":"ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0622","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF5"},65270:{"value":"FEF6","name":"ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0622","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF6"},65271:{"value":"FEF7","name":"ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0623","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF7"},65272:{"value":"FEF8","name":"ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0623","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF8"},65273:{"value":"FEF9","name":"ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0625","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEF9"},65274:{"value":"FEFA","name":"ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0625","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEFA"},65275:{"value":"FEFB","name":"ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEFB"},65276:{"value":"FEFC","name":"ARABIC LIGATURE LAM WITH ALEF FINAL FORM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFEFC"},65382:{"value":"FF66","name":"HALFWIDTH KATAKANA LETTER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF66"},65383:{"value":"FF67","name":"HALFWIDTH KATAKANA LETTER SMALL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF67"},65384:{"value":"FF68","name":"HALFWIDTH KATAKANA LETTER SMALL I","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF68"},65385:{"value":"FF69","name":"HALFWIDTH KATAKANA LETTER SMALL U","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF69"},65386:{"value":"FF6A","name":"HALFWIDTH KATAKANA LETTER SMALL E","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF6A"},65387:{"value":"FF6B","name":"HALFWIDTH KATAKANA LETTER SMALL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF6B"},65388:{"value":"FF6C","name":"HALFWIDTH KATAKANA LETTER SMALL YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF6C"},65389:{"value":"FF6D","name":"HALFWIDTH KATAKANA LETTER SMALL YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF6D"},65390:{"value":"FF6E","name":"HALFWIDTH KATAKANA LETTER SMALL YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF6E"},65391:{"value":"FF6F","name":"HALFWIDTH KATAKANA LETTER SMALL TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF6F"},65393:{"value":"FF71","name":"HALFWIDTH KATAKANA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF71"},65394:{"value":"FF72","name":"HALFWIDTH KATAKANA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF72"},65395:{"value":"FF73","name":"HALFWIDTH KATAKANA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF73"},65396:{"value":"FF74","name":"HALFWIDTH KATAKANA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF74"},65397:{"value":"FF75","name":"HALFWIDTH KATAKANA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30AA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF75"},65398:{"value":"FF76","name":"HALFWIDTH KATAKANA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF76"},65399:{"value":"FF77","name":"HALFWIDTH KATAKANA LETTER KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF77"},65400:{"value":"FF78","name":"HALFWIDTH KATAKANA LETTER KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF78"},65401:{"value":"FF79","name":"HALFWIDTH KATAKANA LETTER KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF79"},65402:{"value":"FF7A","name":"HALFWIDTH KATAKANA LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF7A"},65403:{"value":"FF7B","name":"HALFWIDTH KATAKANA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF7B"},65404:{"value":"FF7C","name":"HALFWIDTH KATAKANA LETTER SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF7C"},65405:{"value":"FF7D","name":"HALFWIDTH KATAKANA LETTER SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF7D"},65406:{"value":"FF7E","name":"HALFWIDTH KATAKANA LETTER SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF7E"},65407:{"value":"FF7F","name":"HALFWIDTH KATAKANA LETTER SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF7F"},65408:{"value":"FF80","name":"HALFWIDTH KATAKANA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF80"},65409:{"value":"FF81","name":"HALFWIDTH KATAKANA LETTER TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF81"},65410:{"value":"FF82","name":"HALFWIDTH KATAKANA LETTER TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF82"},65411:{"value":"FF83","name":"HALFWIDTH KATAKANA LETTER TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF83"},65412:{"value":"FF84","name":"HALFWIDTH KATAKANA LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF84"},65413:{"value":"FF85","name":"HALFWIDTH KATAKANA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF85"},65414:{"value":"FF86","name":"HALFWIDTH KATAKANA LETTER NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30CB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF86"},65415:{"value":"FF87","name":"HALFWIDTH KATAKANA LETTER NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF87"},65416:{"value":"FF88","name":"HALFWIDTH KATAKANA LETTER NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30CD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF88"},65417:{"value":"FF89","name":"HALFWIDTH KATAKANA LETTER NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF89"},65418:{"value":"FF8A","name":"HALFWIDTH KATAKANA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF8A"},65419:{"value":"FF8B","name":"HALFWIDTH KATAKANA LETTER HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF8B"},65420:{"value":"FF8C","name":"HALFWIDTH KATAKANA LETTER HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF8C"},65421:{"value":"FF8D","name":"HALFWIDTH KATAKANA LETTER HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF8D"},65422:{"value":"FF8E","name":"HALFWIDTH KATAKANA LETTER HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF8E"},65423:{"value":"FF8F","name":"HALFWIDTH KATAKANA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF8F"},65424:{"value":"FF90","name":"HALFWIDTH KATAKANA LETTER MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF90"},65425:{"value":"FF91","name":"HALFWIDTH KATAKANA LETTER MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF91"},65426:{"value":"FF92","name":"HALFWIDTH KATAKANA LETTER ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF92"},65427:{"value":"FF93","name":"HALFWIDTH KATAKANA LETTER MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF93"},65428:{"value":"FF94","name":"HALFWIDTH KATAKANA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF94"},65429:{"value":"FF95","name":"HALFWIDTH KATAKANA LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF95"},65430:{"value":"FF96","name":"HALFWIDTH KATAKANA LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF96"},65431:{"value":"FF97","name":"HALFWIDTH KATAKANA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30E9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF97"},65432:{"value":"FF98","name":"HALFWIDTH KATAKANA LETTER RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF98"},65433:{"value":"FF99","name":"HALFWIDTH KATAKANA LETTER RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF99"},65434:{"value":"FF9A","name":"HALFWIDTH KATAKANA LETTER RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30EC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF9A"},65435:{"value":"FF9B","name":"HALFWIDTH KATAKANA LETTER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF9B"},65436:{"value":"FF9C","name":"HALFWIDTH KATAKANA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30EF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF9C"},65437:{"value":"FF9D","name":"HALFWIDTH KATAKANA LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF9D"},65440:{"value":"FFA0","name":"HALFWIDTH HANGUL FILLER","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3164","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL CAE OM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA0"},65441:{"value":"FFA1","name":"HALFWIDTH HANGUL LETTER KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3131","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA1"},65442:{"value":"FFA2","name":"HALFWIDTH HANGUL LETTER SSANGKIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3132","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER SSANG GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA2"},65443:{"value":"FFA3","name":"HALFWIDTH HANGUL LETTER KIYEOK-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3133","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER GIYEOG SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA3"},65444:{"value":"FFA4","name":"HALFWIDTH HANGUL LETTER NIEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3134","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA4"},65445:{"value":"FFA5","name":"HALFWIDTH HANGUL LETTER NIEUN-CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3135","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER NIEUN JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA5"},65446:{"value":"FFA6","name":"HALFWIDTH HANGUL LETTER NIEUN-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3136","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER NIEUN HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA6"},65447:{"value":"FFA7","name":"HALFWIDTH HANGUL LETTER TIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3137","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA7"},65448:{"value":"FFA8","name":"HALFWIDTH HANGUL LETTER SSANGTIKEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3138","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER SSANG DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA8"},65449:{"value":"FFA9","name":"HALFWIDTH HANGUL LETTER RIEUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3139","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFA9"},65450:{"value":"FFAA","name":"HALFWIDTH HANGUL LETTER RIEUL-KIYEOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 313A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFAA"},65451:{"value":"FFAB","name":"HALFWIDTH HANGUL LETTER RIEUL-MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 313B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL MIEUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFAB"},65452:{"value":"FFAC","name":"HALFWIDTH HANGUL LETTER RIEUL-PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 313C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFAC"},65453:{"value":"FFAD","name":"HALFWIDTH HANGUL LETTER RIEUL-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 313D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFAD"},65454:{"value":"FFAE","name":"HALFWIDTH HANGUL LETTER RIEUL-THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 313E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFAE"},65455:{"value":"FFAF","name":"HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 313F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL PIEUP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFAF"},65456:{"value":"FFB0","name":"HALFWIDTH HANGUL LETTER RIEUL-HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3140","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER LIEUL HIEUH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB0"},65457:{"value":"FFB1","name":"HALFWIDTH HANGUL LETTER MIEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3141","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB1"},65458:{"value":"FFB2","name":"HALFWIDTH HANGUL LETTER PIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3142","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB2"},65459:{"value":"FFB3","name":"HALFWIDTH HANGUL LETTER SSANGPIEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3143","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER SSANG BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB3"},65460:{"value":"FFB4","name":"HALFWIDTH HANGUL LETTER PIEUP-SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3144","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER BIEUB SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB4"},65461:{"value":"FFB5","name":"HALFWIDTH HANGUL LETTER SIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3145","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB5"},65462:{"value":"FFB6","name":"HALFWIDTH HANGUL LETTER SSANGSIOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3146","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER SSANG SIOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB6"},65463:{"value":"FFB7","name":"HALFWIDTH HANGUL LETTER IEUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3147","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB7"},65464:{"value":"FFB8","name":"HALFWIDTH HANGUL LETTER CIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3148","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB8"},65465:{"value":"FFB9","name":"HALFWIDTH HANGUL LETTER SSANGCIEUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3149","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER SSANG JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFB9"},65466:{"value":"FFBA","name":"HALFWIDTH HANGUL LETTER CHIEUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 314A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER CIEUC","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFBA"},65467:{"value":"FFBB","name":"HALFWIDTH HANGUL LETTER KHIEUKH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 314B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER KIYEOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFBB"},65468:{"value":"FFBC","name":"HALFWIDTH HANGUL LETTER THIEUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 314C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFBC"},65469:{"value":"FFBD","name":"HALFWIDTH HANGUL LETTER PHIEUPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 314D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH HANGUL LETTER PIEUP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFBD"},65470:{"value":"FFBE","name":"HALFWIDTH HANGUL LETTER HIEUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 314E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFBE"},65474:{"value":"FFC2","name":"HALFWIDTH HANGUL LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 314F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFC2"},65475:{"value":"FFC3","name":"HALFWIDTH HANGUL LETTER AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3150","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFC3"},65476:{"value":"FFC4","name":"HALFWIDTH HANGUL LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3151","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFC4"},65477:{"value":"FFC5","name":"HALFWIDTH HANGUL LETTER YAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3152","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFC5"},65478:{"value":"FFC6","name":"HALFWIDTH HANGUL LETTER EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3153","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFC6"},65479:{"value":"FFC7","name":"HALFWIDTH HANGUL LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3154","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFC7"},65482:{"value":"FFCA","name":"HALFWIDTH HANGUL LETTER YEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3155","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFCA"},65483:{"value":"FFCB","name":"HALFWIDTH HANGUL LETTER YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3156","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFCB"},65484:{"value":"FFCC","name":"HALFWIDTH HANGUL LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3157","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFCC"},65485:{"value":"FFCD","name":"HALFWIDTH HANGUL LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3158","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFCD"},65486:{"value":"FFCE","name":"HALFWIDTH HANGUL LETTER WAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3159","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFCE"},65487:{"value":"FFCF","name":"HALFWIDTH HANGUL LETTER OE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 315A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFCF"},65490:{"value":"FFD2","name":"HALFWIDTH HANGUL LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 315B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFD2"},65491:{"value":"FFD3","name":"HALFWIDTH HANGUL LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 315C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFD3"},65492:{"value":"FFD4","name":"HALFWIDTH HANGUL LETTER WEO","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 315D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFD4"},65493:{"value":"FFD5","name":"HALFWIDTH HANGUL LETTER WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 315E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFD5"},65494:{"value":"FFD6","name":"HALFWIDTH HANGUL LETTER WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 315F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFD6"},65495:{"value":"FFD7","name":"HALFWIDTH HANGUL LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3160","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFD7"},65498:{"value":"FFDA","name":"HALFWIDTH HANGUL LETTER EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFDA"},65499:{"value":"FFDB","name":"HALFWIDTH HANGUL LETTER YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3162","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFDB"},65500:{"value":"FFDC","name":"HALFWIDTH HANGUL LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":" 3163","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFDC"},65536:{"value":"10000","name":"LINEAR B SYLLABLE B008 A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc00"},65537:{"value":"10001","name":"LINEAR B SYLLABLE B038 E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc01"},65538:{"value":"10002","name":"LINEAR B SYLLABLE B028 I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc02"},65539:{"value":"10003","name":"LINEAR B SYLLABLE B061 O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc03"},65540:{"value":"10004","name":"LINEAR B SYLLABLE B010 U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc04"},65541:{"value":"10005","name":"LINEAR B SYLLABLE B001 DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc05"},65542:{"value":"10006","name":"LINEAR B SYLLABLE B045 DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc06"},65543:{"value":"10007","name":"LINEAR B SYLLABLE B007 DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc07"},65544:{"value":"10008","name":"LINEAR B SYLLABLE B014 DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc08"},65545:{"value":"10009","name":"LINEAR B SYLLABLE B051 DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc09"},65546:{"value":"1000A","name":"LINEAR B SYLLABLE B057 JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc0a"},65547:{"value":"1000B","name":"LINEAR B SYLLABLE B046 JE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc0b"},65549:{"value":"1000D","name":"LINEAR B SYLLABLE B036 JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc0d"},65550:{"value":"1000E","name":"LINEAR B SYLLABLE B065 JU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc0e"},65551:{"value":"1000F","name":"LINEAR B SYLLABLE B077 KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc0f"},65552:{"value":"10010","name":"LINEAR B SYLLABLE B044 KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc10"},65553:{"value":"10011","name":"LINEAR B SYLLABLE B067 KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc11"},65554:{"value":"10012","name":"LINEAR B SYLLABLE B070 KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc12"},65555:{"value":"10013","name":"LINEAR B SYLLABLE B081 KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc13"},65556:{"value":"10014","name":"LINEAR B SYLLABLE B080 MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc14"},65557:{"value":"10015","name":"LINEAR B SYLLABLE B013 ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc15"},65558:{"value":"10016","name":"LINEAR B SYLLABLE B073 MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc16"},65559:{"value":"10017","name":"LINEAR B SYLLABLE B015 MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc17"},65560:{"value":"10018","name":"LINEAR B SYLLABLE B023 MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc18"},65561:{"value":"10019","name":"LINEAR B SYLLABLE B006 NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc19"},65562:{"value":"1001A","name":"LINEAR B SYLLABLE B024 NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc1a"},65563:{"value":"1001B","name":"LINEAR B SYLLABLE B030 NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc1b"},65564:{"value":"1001C","name":"LINEAR B SYLLABLE B052 NO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc1c"},65565:{"value":"1001D","name":"LINEAR B SYLLABLE B055 NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc1d"},65566:{"value":"1001E","name":"LINEAR B SYLLABLE B003 PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc1e"},65567:{"value":"1001F","name":"LINEAR B SYLLABLE B072 PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc1f"},65568:{"value":"10020","name":"LINEAR B SYLLABLE B039 PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc20"},65569:{"value":"10021","name":"LINEAR B SYLLABLE B011 PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc21"},65570:{"value":"10022","name":"LINEAR B SYLLABLE B050 PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc22"},65571:{"value":"10023","name":"LINEAR B SYLLABLE B016 QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc23"},65572:{"value":"10024","name":"LINEAR B SYLLABLE B078 QE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc24"},65573:{"value":"10025","name":"LINEAR B SYLLABLE B021 QI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc25"},65574:{"value":"10026","name":"LINEAR B SYLLABLE B032 QO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc26"},65576:{"value":"10028","name":"LINEAR B SYLLABLE B060 RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc28"},65577:{"value":"10029","name":"LINEAR B SYLLABLE B027 RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc29"},65578:{"value":"1002A","name":"LINEAR B SYLLABLE B053 RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc2a"},65579:{"value":"1002B","name":"LINEAR B SYLLABLE B002 RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc2b"},65580:{"value":"1002C","name":"LINEAR B SYLLABLE B026 RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc2c"},65581:{"value":"1002D","name":"LINEAR B SYLLABLE B031 SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc2d"},65582:{"value":"1002E","name":"LINEAR B SYLLABLE B009 SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc2e"},65583:{"value":"1002F","name":"LINEAR B SYLLABLE B041 SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc2f"},65584:{"value":"10030","name":"LINEAR B SYLLABLE B012 SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc30"},65585:{"value":"10031","name":"LINEAR B SYLLABLE B058 SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc31"},65586:{"value":"10032","name":"LINEAR B SYLLABLE B059 TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc32"},65587:{"value":"10033","name":"LINEAR B SYLLABLE B004 TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc33"},65588:{"value":"10034","name":"LINEAR B SYLLABLE B037 TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc34"},65589:{"value":"10035","name":"LINEAR B SYLLABLE B005 TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc35"},65590:{"value":"10036","name":"LINEAR B SYLLABLE B069 TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc36"},65591:{"value":"10037","name":"LINEAR B SYLLABLE B054 WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc37"},65592:{"value":"10038","name":"LINEAR B SYLLABLE B075 WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc38"},65593:{"value":"10039","name":"LINEAR B SYLLABLE B040 WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc39"},65594:{"value":"1003A","name":"LINEAR B SYLLABLE B042 WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc3a"},65596:{"value":"1003C","name":"LINEAR B SYLLABLE B017 ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc3c"},65597:{"value":"1003D","name":"LINEAR B SYLLABLE B074 ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc3d"},65599:{"value":"1003F","name":"LINEAR B SYLLABLE B020 ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc3f"},65600:{"value":"10040","name":"LINEAR B SYLLABLE B025 A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc40"},65601:{"value":"10041","name":"LINEAR B SYLLABLE B043 A3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc41"},65602:{"value":"10042","name":"LINEAR B SYLLABLE B085 AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc42"},65603:{"value":"10043","name":"LINEAR B SYLLABLE B071 DWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc43"},65604:{"value":"10044","name":"LINEAR B SYLLABLE B090 DWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc44"},65605:{"value":"10045","name":"LINEAR B SYLLABLE B048 NWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc45"},65606:{"value":"10046","name":"LINEAR B SYLLABLE B029 PU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc46"},65607:{"value":"10047","name":"LINEAR B SYLLABLE B062 PTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc47"},65608:{"value":"10048","name":"LINEAR B SYLLABLE B076 RA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc48"},65609:{"value":"10049","name":"LINEAR B SYLLABLE B033 RA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc49"},65610:{"value":"1004A","name":"LINEAR B SYLLABLE B068 RO2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc4a"},65611:{"value":"1004B","name":"LINEAR B SYLLABLE B066 TA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc4b"},65612:{"value":"1004C","name":"LINEAR B SYLLABLE B087 TWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc4c"},65613:{"value":"1004D","name":"LINEAR B SYLLABLE B091 TWO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc4d"},65616:{"value":"10050","name":"LINEAR B SYMBOL B018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc50"},65617:{"value":"10051","name":"LINEAR B SYMBOL B019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc51"},65618:{"value":"10052","name":"LINEAR B SYMBOL B022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc52"},65619:{"value":"10053","name":"LINEAR B SYMBOL B034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc53"},65620:{"value":"10054","name":"LINEAR B SYMBOL B047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc54"},65621:{"value":"10055","name":"LINEAR B SYMBOL B049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc55"},65622:{"value":"10056","name":"LINEAR B SYMBOL B056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc56"},65623:{"value":"10057","name":"LINEAR B SYMBOL B063","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc57"},65624:{"value":"10058","name":"LINEAR B SYMBOL B064","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc58"},65625:{"value":"10059","name":"LINEAR B SYMBOL B079","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc59"},65626:{"value":"1005A","name":"LINEAR B SYMBOL B082","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc5a"},65627:{"value":"1005B","name":"LINEAR B SYMBOL B083","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc5b"},65628:{"value":"1005C","name":"LINEAR B SYMBOL B086","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc5c"},65629:{"value":"1005D","name":"LINEAR B SYMBOL B089","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc5d"},65664:{"value":"10080","name":"LINEAR B IDEOGRAM B100 MAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc80"},65665:{"value":"10081","name":"LINEAR B IDEOGRAM B102 WOMAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc81"},65666:{"value":"10082","name":"LINEAR B IDEOGRAM B104 DEER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc82"},65667:{"value":"10083","name":"LINEAR B IDEOGRAM B105 EQUID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc83"},65668:{"value":"10084","name":"LINEAR B IDEOGRAM B105F MARE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc84"},65669:{"value":"10085","name":"LINEAR B IDEOGRAM B105M STALLION","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc85"},65670:{"value":"10086","name":"LINEAR B IDEOGRAM B106F EWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc86"},65671:{"value":"10087","name":"LINEAR B IDEOGRAM B106M RAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc87"},65672:{"value":"10088","name":"LINEAR B IDEOGRAM B107F SHE-GOAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc88"},65673:{"value":"10089","name":"LINEAR B IDEOGRAM B107M HE-GOAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc89"},65674:{"value":"1008A","name":"LINEAR B IDEOGRAM B108F SOW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc8a"},65675:{"value":"1008B","name":"LINEAR B IDEOGRAM B108M BOAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc8b"},65676:{"value":"1008C","name":"LINEAR B IDEOGRAM B109F COW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc8c"},65677:{"value":"1008D","name":"LINEAR B IDEOGRAM B109M BULL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc8d"},65678:{"value":"1008E","name":"LINEAR B IDEOGRAM B120 WHEAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc8e"},65679:{"value":"1008F","name":"LINEAR B IDEOGRAM B121 BARLEY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc8f"},65680:{"value":"10090","name":"LINEAR B IDEOGRAM B122 OLIVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc90"},65681:{"value":"10091","name":"LINEAR B IDEOGRAM B123 SPICE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc91"},65682:{"value":"10092","name":"LINEAR B IDEOGRAM B125 CYPERUS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc92"},65683:{"value":"10093","name":"LINEAR B MONOGRAM B127 KAPO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc93"},65684:{"value":"10094","name":"LINEAR B MONOGRAM B128 KANAKO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc94"},65685:{"value":"10095","name":"LINEAR B IDEOGRAM B130 OIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc95"},65686:{"value":"10096","name":"LINEAR B IDEOGRAM B131 WINE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc96"},65687:{"value":"10097","name":"LINEAR B IDEOGRAM B132","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc97"},65688:{"value":"10098","name":"LINEAR B MONOGRAM B133 AREPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc98"},65689:{"value":"10099","name":"LINEAR B MONOGRAM B135 MERI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc99"},65690:{"value":"1009A","name":"LINEAR B IDEOGRAM B140 BRONZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc9a"},65691:{"value":"1009B","name":"LINEAR B IDEOGRAM B141 GOLD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc9b"},65692:{"value":"1009C","name":"LINEAR B IDEOGRAM B142","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc9c"},65693:{"value":"1009D","name":"LINEAR B IDEOGRAM B145 WOOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc9d"},65694:{"value":"1009E","name":"LINEAR B IDEOGRAM B146","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc9e"},65695:{"value":"1009F","name":"LINEAR B IDEOGRAM B150","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udc9f"},65696:{"value":"100A0","name":"LINEAR B IDEOGRAM B151 HORN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca0"},65697:{"value":"100A1","name":"LINEAR B IDEOGRAM B152","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca1"},65698:{"value":"100A2","name":"LINEAR B IDEOGRAM B153","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca2"},65699:{"value":"100A3","name":"LINEAR B IDEOGRAM B154","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca3"},65700:{"value":"100A4","name":"LINEAR B MONOGRAM B156 TURO2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca4"},65701:{"value":"100A5","name":"LINEAR B IDEOGRAM B157","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca5"},65702:{"value":"100A6","name":"LINEAR B IDEOGRAM B158","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca6"},65703:{"value":"100A7","name":"LINEAR B IDEOGRAM B159 CLOTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca7"},65704:{"value":"100A8","name":"LINEAR B IDEOGRAM B160","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca8"},65705:{"value":"100A9","name":"LINEAR B IDEOGRAM B161","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udca9"},65706:{"value":"100AA","name":"LINEAR B IDEOGRAM B162 GARMENT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcaa"},65707:{"value":"100AB","name":"LINEAR B IDEOGRAM B163 ARMOUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcab"},65708:{"value":"100AC","name":"LINEAR B IDEOGRAM B164","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcac"},65709:{"value":"100AD","name":"LINEAR B IDEOGRAM B165","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcad"},65710:{"value":"100AE","name":"LINEAR B IDEOGRAM B166","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcae"},65711:{"value":"100AF","name":"LINEAR B IDEOGRAM B167","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcaf"},65712:{"value":"100B0","name":"LINEAR B IDEOGRAM B168","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb0"},65713:{"value":"100B1","name":"LINEAR B IDEOGRAM B169","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb1"},65714:{"value":"100B2","name":"LINEAR B IDEOGRAM B170","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb2"},65715:{"value":"100B3","name":"LINEAR B IDEOGRAM B171","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb3"},65716:{"value":"100B4","name":"LINEAR B IDEOGRAM B172","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb4"},65717:{"value":"100B5","name":"LINEAR B IDEOGRAM B173 MONTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb5"},65718:{"value":"100B6","name":"LINEAR B IDEOGRAM B174","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb6"},65719:{"value":"100B7","name":"LINEAR B IDEOGRAM B176 TREE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb7"},65720:{"value":"100B8","name":"LINEAR B IDEOGRAM B177","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb8"},65721:{"value":"100B9","name":"LINEAR B IDEOGRAM B178","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcb9"},65722:{"value":"100BA","name":"LINEAR B IDEOGRAM B179","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcba"},65723:{"value":"100BB","name":"LINEAR B IDEOGRAM B180","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcbb"},65724:{"value":"100BC","name":"LINEAR B IDEOGRAM B181","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcbc"},65725:{"value":"100BD","name":"LINEAR B IDEOGRAM B182","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcbd"},65726:{"value":"100BE","name":"LINEAR B IDEOGRAM B183","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcbe"},65727:{"value":"100BF","name":"LINEAR B IDEOGRAM B184","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcbf"},65728:{"value":"100C0","name":"LINEAR B IDEOGRAM B185","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc0"},65729:{"value":"100C1","name":"LINEAR B IDEOGRAM B189","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc1"},65730:{"value":"100C2","name":"LINEAR B IDEOGRAM B190","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc2"},65731:{"value":"100C3","name":"LINEAR B IDEOGRAM B191 HELMET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc3"},65732:{"value":"100C4","name":"LINEAR B IDEOGRAM B220 FOOTSTOOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc4"},65733:{"value":"100C5","name":"LINEAR B IDEOGRAM B225 BATHTUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc5"},65734:{"value":"100C6","name":"LINEAR B IDEOGRAM B230 SPEAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc6"},65735:{"value":"100C7","name":"LINEAR B IDEOGRAM B231 ARROW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc7"},65736:{"value":"100C8","name":"LINEAR B IDEOGRAM B232","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc8"},65737:{"value":"100C9","name":"LINEAR B IDEOGRAM B233 SWORD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcc9"},65738:{"value":"100CA","name":"LINEAR B IDEOGRAM B234","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcca"},65739:{"value":"100CB","name":"LINEAR B IDEOGRAM B236","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udccb"},65740:{"value":"100CC","name":"LINEAR B IDEOGRAM B240 WHEELED CHARIOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udccc"},65741:{"value":"100CD","name":"LINEAR B IDEOGRAM B241 CHARIOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udccd"},65742:{"value":"100CE","name":"LINEAR B IDEOGRAM B242 CHARIOT FRAME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcce"},65743:{"value":"100CF","name":"LINEAR B IDEOGRAM B243 WHEEL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udccf"},65744:{"value":"100D0","name":"LINEAR B IDEOGRAM B245","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd0"},65745:{"value":"100D1","name":"LINEAR B IDEOGRAM B246","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd1"},65746:{"value":"100D2","name":"LINEAR B MONOGRAM B247 DIPTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd2"},65747:{"value":"100D3","name":"LINEAR B IDEOGRAM B248","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd3"},65748:{"value":"100D4","name":"LINEAR B IDEOGRAM B249","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd4"},65749:{"value":"100D5","name":"LINEAR B IDEOGRAM B251","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd5"},65750:{"value":"100D6","name":"LINEAR B IDEOGRAM B252","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd6"},65751:{"value":"100D7","name":"LINEAR B IDEOGRAM B253","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd7"},65752:{"value":"100D8","name":"LINEAR B IDEOGRAM B254 DART","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd8"},65753:{"value":"100D9","name":"LINEAR B IDEOGRAM B255","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcd9"},65754:{"value":"100DA","name":"LINEAR B IDEOGRAM B256","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcda"},65755:{"value":"100DB","name":"LINEAR B IDEOGRAM B257","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcdb"},65756:{"value":"100DC","name":"LINEAR B IDEOGRAM B258","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcdc"},65757:{"value":"100DD","name":"LINEAR B IDEOGRAM B259","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcdd"},65758:{"value":"100DE","name":"LINEAR B IDEOGRAM VESSEL B155","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcde"},65759:{"value":"100DF","name":"LINEAR B IDEOGRAM VESSEL B200","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcdf"},65760:{"value":"100E0","name":"LINEAR B IDEOGRAM VESSEL B201","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce0"},65761:{"value":"100E1","name":"LINEAR B IDEOGRAM VESSEL B202","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce1"},65762:{"value":"100E2","name":"LINEAR B IDEOGRAM VESSEL B203","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce2"},65763:{"value":"100E3","name":"LINEAR B IDEOGRAM VESSEL B204","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce3"},65764:{"value":"100E4","name":"LINEAR B IDEOGRAM VESSEL B205","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce4"},65765:{"value":"100E5","name":"LINEAR B IDEOGRAM VESSEL B206","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce5"},65766:{"value":"100E6","name":"LINEAR B IDEOGRAM VESSEL B207","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce6"},65767:{"value":"100E7","name":"LINEAR B IDEOGRAM VESSEL B208","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce7"},65768:{"value":"100E8","name":"LINEAR B IDEOGRAM VESSEL B209","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce8"},65769:{"value":"100E9","name":"LINEAR B IDEOGRAM VESSEL B210","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udce9"},65770:{"value":"100EA","name":"LINEAR B IDEOGRAM VESSEL B211","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcea"},65771:{"value":"100EB","name":"LINEAR B IDEOGRAM VESSEL B212","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udceb"},65772:{"value":"100EC","name":"LINEAR B IDEOGRAM VESSEL B213","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcec"},65773:{"value":"100ED","name":"LINEAR B IDEOGRAM VESSEL B214","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udced"},65774:{"value":"100EE","name":"LINEAR B IDEOGRAM VESSEL B215","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcee"},65775:{"value":"100EF","name":"LINEAR B IDEOGRAM VESSEL B216","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcef"},65776:{"value":"100F0","name":"LINEAR B IDEOGRAM VESSEL B217","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf0"},65777:{"value":"100F1","name":"LINEAR B IDEOGRAM VESSEL B218","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf1"},65778:{"value":"100F2","name":"LINEAR B IDEOGRAM VESSEL B219","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf2"},65779:{"value":"100F3","name":"LINEAR B IDEOGRAM VESSEL B221","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf3"},65780:{"value":"100F4","name":"LINEAR B IDEOGRAM VESSEL B222","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf4"},65781:{"value":"100F5","name":"LINEAR B IDEOGRAM VESSEL B226","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf5"},65782:{"value":"100F6","name":"LINEAR B IDEOGRAM VESSEL B227","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf6"},65783:{"value":"100F7","name":"LINEAR B IDEOGRAM VESSEL B228","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf7"},65784:{"value":"100F8","name":"LINEAR B IDEOGRAM VESSEL B229","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf8"},65785:{"value":"100F9","name":"LINEAR B IDEOGRAM VESSEL B250","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcf9"},65786:{"value":"100FA","name":"LINEAR B IDEOGRAM VESSEL B305","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udcfa"},66176:{"value":"10280","name":"LYCIAN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude80"},66177:{"value":"10281","name":"LYCIAN LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude81"},66178:{"value":"10282","name":"LYCIAN LETTER B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude82"},66179:{"value":"10283","name":"LYCIAN LETTER BH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude83"},66180:{"value":"10284","name":"LYCIAN LETTER G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude84"},66181:{"value":"10285","name":"LYCIAN LETTER D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude85"},66182:{"value":"10286","name":"LYCIAN LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude86"},66183:{"value":"10287","name":"LYCIAN LETTER W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude87"},66184:{"value":"10288","name":"LYCIAN LETTER Z","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude88"},66185:{"value":"10289","name":"LYCIAN LETTER TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude89"},66186:{"value":"1028A","name":"LYCIAN LETTER J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude8a"},66187:{"value":"1028B","name":"LYCIAN LETTER K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude8b"},66188:{"value":"1028C","name":"LYCIAN LETTER Q","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude8c"},66189:{"value":"1028D","name":"LYCIAN LETTER L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude8d"},66190:{"value":"1028E","name":"LYCIAN LETTER M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude8e"},66191:{"value":"1028F","name":"LYCIAN LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude8f"},66192:{"value":"10290","name":"LYCIAN LETTER MM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude90"},66193:{"value":"10291","name":"LYCIAN LETTER NN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude91"},66194:{"value":"10292","name":"LYCIAN LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude92"},66195:{"value":"10293","name":"LYCIAN LETTER P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude93"},66196:{"value":"10294","name":"LYCIAN LETTER KK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude94"},66197:{"value":"10295","name":"LYCIAN LETTER R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude95"},66198:{"value":"10296","name":"LYCIAN LETTER S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude96"},66199:{"value":"10297","name":"LYCIAN LETTER T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude97"},66200:{"value":"10298","name":"LYCIAN LETTER TT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude98"},66201:{"value":"10299","name":"LYCIAN LETTER AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude99"},66202:{"value":"1029A","name":"LYCIAN LETTER EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude9a"},66203:{"value":"1029B","name":"LYCIAN LETTER H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude9b"},66204:{"value":"1029C","name":"LYCIAN LETTER X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\ude9c"},66208:{"value":"102A0","name":"CARIAN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea0"},66209:{"value":"102A1","name":"CARIAN LETTER P2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea1"},66210:{"value":"102A2","name":"CARIAN LETTER D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea2"},66211:{"value":"102A3","name":"CARIAN LETTER L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea3"},66212:{"value":"102A4","name":"CARIAN LETTER UUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea4"},66213:{"value":"102A5","name":"CARIAN LETTER R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea5"},66214:{"value":"102A6","name":"CARIAN LETTER LD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea6"},66215:{"value":"102A7","name":"CARIAN LETTER A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea7"},66216:{"value":"102A8","name":"CARIAN LETTER Q","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea8"},66217:{"value":"102A9","name":"CARIAN LETTER B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udea9"},66218:{"value":"102AA","name":"CARIAN LETTER M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeaa"},66219:{"value":"102AB","name":"CARIAN LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeab"},66220:{"value":"102AC","name":"CARIAN LETTER D2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeac"},66221:{"value":"102AD","name":"CARIAN LETTER T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udead"},66222:{"value":"102AE","name":"CARIAN LETTER SH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeae"},66223:{"value":"102AF","name":"CARIAN LETTER SH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeaf"},66224:{"value":"102B0","name":"CARIAN LETTER S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb0"},66225:{"value":"102B1","name":"CARIAN LETTER C-18","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb1"},66226:{"value":"102B2","name":"CARIAN LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb2"},66227:{"value":"102B3","name":"CARIAN LETTER NN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb3"},66228:{"value":"102B4","name":"CARIAN LETTER X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb4"},66229:{"value":"102B5","name":"CARIAN LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb5"},66230:{"value":"102B6","name":"CARIAN LETTER TT2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb6"},66231:{"value":"102B7","name":"CARIAN LETTER P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb7"},66232:{"value":"102B8","name":"CARIAN LETTER SS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb8"},66233:{"value":"102B9","name":"CARIAN LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeb9"},66234:{"value":"102BA","name":"CARIAN LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeba"},66235:{"value":"102BB","name":"CARIAN LETTER UUUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udebb"},66236:{"value":"102BC","name":"CARIAN LETTER K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udebc"},66237:{"value":"102BD","name":"CARIAN LETTER K2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udebd"},66238:{"value":"102BE","name":"CARIAN LETTER ND","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udebe"},66239:{"value":"102BF","name":"CARIAN LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udebf"},66240:{"value":"102C0","name":"CARIAN LETTER G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec0"},66241:{"value":"102C1","name":"CARIAN LETTER G2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec1"},66242:{"value":"102C2","name":"CARIAN LETTER ST","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec2"},66243:{"value":"102C3","name":"CARIAN LETTER ST2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec3"},66244:{"value":"102C4","name":"CARIAN LETTER NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec4"},66245:{"value":"102C5","name":"CARIAN LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec5"},66246:{"value":"102C6","name":"CARIAN LETTER C-39","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec6"},66247:{"value":"102C7","name":"CARIAN LETTER TT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec7"},66248:{"value":"102C8","name":"CARIAN LETTER UUU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec8"},66249:{"value":"102C9","name":"CARIAN LETTER RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udec9"},66250:{"value":"102CA","name":"CARIAN LETTER MB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeca"},66251:{"value":"102CB","name":"CARIAN LETTER MB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udecb"},66252:{"value":"102CC","name":"CARIAN LETTER MB3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udecc"},66253:{"value":"102CD","name":"CARIAN LETTER MB4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udecd"},66254:{"value":"102CE","name":"CARIAN LETTER LD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udece"},66255:{"value":"102CF","name":"CARIAN LETTER E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udecf"},66256:{"value":"102D0","name":"CARIAN LETTER UUU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uded0"},66304:{"value":"10300","name":"OLD ITALIC LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf00"},66305:{"value":"10301","name":"OLD ITALIC LETTER BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf01"},66306:{"value":"10302","name":"OLD ITALIC LETTER KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf02"},66307:{"value":"10303","name":"OLD ITALIC LETTER DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf03"},66308:{"value":"10304","name":"OLD ITALIC LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf04"},66309:{"value":"10305","name":"OLD ITALIC LETTER VE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf05"},66310:{"value":"10306","name":"OLD ITALIC LETTER ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf06"},66311:{"value":"10307","name":"OLD ITALIC LETTER HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf07"},66312:{"value":"10308","name":"OLD ITALIC LETTER THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf08"},66313:{"value":"10309","name":"OLD ITALIC LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf09"},66314:{"value":"1030A","name":"OLD ITALIC LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf0a"},66315:{"value":"1030B","name":"OLD ITALIC LETTER EL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf0b"},66316:{"value":"1030C","name":"OLD ITALIC LETTER EM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf0c"},66317:{"value":"1030D","name":"OLD ITALIC LETTER EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf0d"},66318:{"value":"1030E","name":"OLD ITALIC LETTER ESH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf0e"},66319:{"value":"1030F","name":"OLD ITALIC LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf0f"},66320:{"value":"10310","name":"OLD ITALIC LETTER PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf10"},66321:{"value":"10311","name":"OLD ITALIC LETTER SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf11"},66322:{"value":"10312","name":"OLD ITALIC LETTER KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf12"},66323:{"value":"10313","name":"OLD ITALIC LETTER ER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf13"},66324:{"value":"10314","name":"OLD ITALIC LETTER ES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf14"},66325:{"value":"10315","name":"OLD ITALIC LETTER TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf15"},66326:{"value":"10316","name":"OLD ITALIC LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf16"},66327:{"value":"10317","name":"OLD ITALIC LETTER EKS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf17"},66328:{"value":"10318","name":"OLD ITALIC LETTER PHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf18"},66329:{"value":"10319","name":"OLD ITALIC LETTER KHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf19"},66330:{"value":"1031A","name":"OLD ITALIC LETTER EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf1a"},66331:{"value":"1031B","name":"OLD ITALIC LETTER ERS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf1b"},66332:{"value":"1031C","name":"OLD ITALIC LETTER CHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf1c"},66333:{"value":"1031D","name":"OLD ITALIC LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf1d"},66334:{"value":"1031E","name":"OLD ITALIC LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf1e"},66335:{"value":"1031F","name":"OLD ITALIC LETTER ESS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf1f"},66349:{"value":"1032D","name":"OLD ITALIC LETTER YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf2d"},66350:{"value":"1032E","name":"OLD ITALIC LETTER NORTHERN TSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf2e"},66351:{"value":"1032F","name":"OLD ITALIC LETTER SOUTHERN TSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf2f"},66352:{"value":"10330","name":"GOTHIC LETTER AHSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf30"},66353:{"value":"10331","name":"GOTHIC LETTER BAIRKAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf31"},66354:{"value":"10332","name":"GOTHIC LETTER GIBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf32"},66355:{"value":"10333","name":"GOTHIC LETTER DAGS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf33"},66356:{"value":"10334","name":"GOTHIC LETTER AIHVUS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf34"},66357:{"value":"10335","name":"GOTHIC LETTER QAIRTHRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf35"},66358:{"value":"10336","name":"GOTHIC LETTER IUJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf36"},66359:{"value":"10337","name":"GOTHIC LETTER HAGL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf37"},66360:{"value":"10338","name":"GOTHIC LETTER THIUTH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf38"},66361:{"value":"10339","name":"GOTHIC LETTER EIS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf39"},66362:{"value":"1033A","name":"GOTHIC LETTER KUSMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf3a"},66363:{"value":"1033B","name":"GOTHIC LETTER LAGUS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf3b"},66364:{"value":"1033C","name":"GOTHIC LETTER MANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf3c"},66365:{"value":"1033D","name":"GOTHIC LETTER NAUTHS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf3d"},66366:{"value":"1033E","name":"GOTHIC LETTER JER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf3e"},66367:{"value":"1033F","name":"GOTHIC LETTER URUS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf3f"},66368:{"value":"10340","name":"GOTHIC LETTER PAIRTHRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf40"},66370:{"value":"10342","name":"GOTHIC LETTER RAIDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf42"},66371:{"value":"10343","name":"GOTHIC LETTER SAUIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf43"},66372:{"value":"10344","name":"GOTHIC LETTER TEIWS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf44"},66373:{"value":"10345","name":"GOTHIC LETTER WINJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf45"},66374:{"value":"10346","name":"GOTHIC LETTER FAIHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf46"},66375:{"value":"10347","name":"GOTHIC LETTER IGGWS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf47"},66376:{"value":"10348","name":"GOTHIC LETTER HWAIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf48"},66377:{"value":"10349","name":"GOTHIC LETTER OTHAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf49"},66384:{"value":"10350","name":"OLD PERMIC LETTER AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf50"},66385:{"value":"10351","name":"OLD PERMIC LETTER BUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf51"},66386:{"value":"10352","name":"OLD PERMIC LETTER GAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf52"},66387:{"value":"10353","name":"OLD PERMIC LETTER DOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf53"},66388:{"value":"10354","name":"OLD PERMIC LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf54"},66389:{"value":"10355","name":"OLD PERMIC LETTER ZHOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf55"},66390:{"value":"10356","name":"OLD PERMIC LETTER DZHOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf56"},66391:{"value":"10357","name":"OLD PERMIC LETTER ZATA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf57"},66392:{"value":"10358","name":"OLD PERMIC LETTER DZITA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf58"},66393:{"value":"10359","name":"OLD PERMIC LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf59"},66394:{"value":"1035A","name":"OLD PERMIC LETTER KOKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf5a"},66395:{"value":"1035B","name":"OLD PERMIC LETTER LEI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf5b"},66396:{"value":"1035C","name":"OLD PERMIC LETTER MENOE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf5c"},66397:{"value":"1035D","name":"OLD PERMIC LETTER NENOE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf5d"},66398:{"value":"1035E","name":"OLD PERMIC LETTER VOOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf5e"},66399:{"value":"1035F","name":"OLD PERMIC LETTER PEEI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf5f"},66400:{"value":"10360","name":"OLD PERMIC LETTER REI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf60"},66401:{"value":"10361","name":"OLD PERMIC LETTER SII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf61"},66402:{"value":"10362","name":"OLD PERMIC LETTER TAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf62"},66403:{"value":"10363","name":"OLD PERMIC LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf63"},66404:{"value":"10364","name":"OLD PERMIC LETTER CHERY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf64"},66405:{"value":"10365","name":"OLD PERMIC LETTER SHOOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf65"},66406:{"value":"10366","name":"OLD PERMIC LETTER SHCHOOI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf66"},66407:{"value":"10367","name":"OLD PERMIC LETTER YRY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf67"},66408:{"value":"10368","name":"OLD PERMIC LETTER YERU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf68"},66409:{"value":"10369","name":"OLD PERMIC LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf69"},66410:{"value":"1036A","name":"OLD PERMIC LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf6a"},66411:{"value":"1036B","name":"OLD PERMIC LETTER EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf6b"},66412:{"value":"1036C","name":"OLD PERMIC LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf6c"},66413:{"value":"1036D","name":"OLD PERMIC LETTER TSIU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf6d"},66414:{"value":"1036E","name":"OLD PERMIC LETTER VER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf6e"},66415:{"value":"1036F","name":"OLD PERMIC LETTER YER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf6f"},66416:{"value":"10370","name":"OLD PERMIC LETTER YERI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf70"},66417:{"value":"10371","name":"OLD PERMIC LETTER YAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf71"},66418:{"value":"10372","name":"OLD PERMIC LETTER IE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf72"},66419:{"value":"10373","name":"OLD PERMIC LETTER YU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf73"},66420:{"value":"10374","name":"OLD PERMIC LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf74"},66421:{"value":"10375","name":"OLD PERMIC LETTER IA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf75"},66432:{"value":"10380","name":"UGARITIC LETTER ALPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf80"},66433:{"value":"10381","name":"UGARITIC LETTER BETA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf81"},66434:{"value":"10382","name":"UGARITIC LETTER GAMLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf82"},66435:{"value":"10383","name":"UGARITIC LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf83"},66436:{"value":"10384","name":"UGARITIC LETTER DELTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf84"},66437:{"value":"10385","name":"UGARITIC LETTER HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf85"},66438:{"value":"10386","name":"UGARITIC LETTER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf86"},66439:{"value":"10387","name":"UGARITIC LETTER ZETA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf87"},66440:{"value":"10388","name":"UGARITIC LETTER HOTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf88"},66441:{"value":"10389","name":"UGARITIC LETTER TET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf89"},66442:{"value":"1038A","name":"UGARITIC LETTER YOD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf8a"},66443:{"value":"1038B","name":"UGARITIC LETTER KAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf8b"},66444:{"value":"1038C","name":"UGARITIC LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf8c"},66445:{"value":"1038D","name":"UGARITIC LETTER LAMDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf8d"},66446:{"value":"1038E","name":"UGARITIC LETTER MEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf8e"},66447:{"value":"1038F","name":"UGARITIC LETTER DHAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf8f"},66448:{"value":"10390","name":"UGARITIC LETTER NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf90"},66449:{"value":"10391","name":"UGARITIC LETTER ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf91"},66450:{"value":"10392","name":"UGARITIC LETTER SAMKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf92"},66451:{"value":"10393","name":"UGARITIC LETTER AIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf93"},66452:{"value":"10394","name":"UGARITIC LETTER PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf94"},66453:{"value":"10395","name":"UGARITIC LETTER SADE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf95"},66454:{"value":"10396","name":"UGARITIC LETTER QOPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf96"},66455:{"value":"10397","name":"UGARITIC LETTER RASHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf97"},66456:{"value":"10398","name":"UGARITIC LETTER THANNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf98"},66457:{"value":"10399","name":"UGARITIC LETTER GHAIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf99"},66458:{"value":"1039A","name":"UGARITIC LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf9a"},66459:{"value":"1039B","name":"UGARITIC LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf9b"},66460:{"value":"1039C","name":"UGARITIC LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf9c"},66461:{"value":"1039D","name":"UGARITIC LETTER SSU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf9d"},66464:{"value":"103A0","name":"OLD PERSIAN SIGN A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa0"},66465:{"value":"103A1","name":"OLD PERSIAN SIGN I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa1"},66466:{"value":"103A2","name":"OLD PERSIAN SIGN U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa2"},66467:{"value":"103A3","name":"OLD PERSIAN SIGN KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa3"},66468:{"value":"103A4","name":"OLD PERSIAN SIGN KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa4"},66469:{"value":"103A5","name":"OLD PERSIAN SIGN GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa5"},66470:{"value":"103A6","name":"OLD PERSIAN SIGN GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa6"},66471:{"value":"103A7","name":"OLD PERSIAN SIGN XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa7"},66472:{"value":"103A8","name":"OLD PERSIAN SIGN CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa8"},66473:{"value":"103A9","name":"OLD PERSIAN SIGN JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfa9"},66474:{"value":"103AA","name":"OLD PERSIAN SIGN JI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfaa"},66475:{"value":"103AB","name":"OLD PERSIAN SIGN TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfab"},66476:{"value":"103AC","name":"OLD PERSIAN SIGN TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfac"},66477:{"value":"103AD","name":"OLD PERSIAN SIGN DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfad"},66478:{"value":"103AE","name":"OLD PERSIAN SIGN DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfae"},66479:{"value":"103AF","name":"OLD PERSIAN SIGN DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfaf"},66480:{"value":"103B0","name":"OLD PERSIAN SIGN THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb0"},66481:{"value":"103B1","name":"OLD PERSIAN SIGN PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb1"},66482:{"value":"103B2","name":"OLD PERSIAN SIGN BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb2"},66483:{"value":"103B3","name":"OLD PERSIAN SIGN FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb3"},66484:{"value":"103B4","name":"OLD PERSIAN SIGN NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb4"},66485:{"value":"103B5","name":"OLD PERSIAN SIGN NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb5"},66486:{"value":"103B6","name":"OLD PERSIAN SIGN MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb6"},66487:{"value":"103B7","name":"OLD PERSIAN SIGN MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb7"},66488:{"value":"103B8","name":"OLD PERSIAN SIGN MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb8"},66489:{"value":"103B9","name":"OLD PERSIAN SIGN YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfb9"},66490:{"value":"103BA","name":"OLD PERSIAN SIGN VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfba"},66491:{"value":"103BB","name":"OLD PERSIAN SIGN VI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfbb"},66492:{"value":"103BC","name":"OLD PERSIAN SIGN RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfbc"},66493:{"value":"103BD","name":"OLD PERSIAN SIGN RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfbd"},66494:{"value":"103BE","name":"OLD PERSIAN SIGN LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfbe"},66495:{"value":"103BF","name":"OLD PERSIAN SIGN SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfbf"},66496:{"value":"103C0","name":"OLD PERSIAN SIGN ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfc0"},66497:{"value":"103C1","name":"OLD PERSIAN SIGN SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfc1"},66498:{"value":"103C2","name":"OLD PERSIAN SIGN SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfc2"},66499:{"value":"103C3","name":"OLD PERSIAN SIGN HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfc3"},66504:{"value":"103C8","name":"OLD PERSIAN SIGN AURAMAZDAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfc8"},66505:{"value":"103C9","name":"OLD PERSIAN SIGN AURAMAZDAA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfc9"},66506:{"value":"103CA","name":"OLD PERSIAN SIGN AURAMAZDAAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfca"},66507:{"value":"103CB","name":"OLD PERSIAN SIGN XSHAAYATHIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfcb"},66508:{"value":"103CC","name":"OLD PERSIAN SIGN DAHYAAUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfcc"},66509:{"value":"103CD","name":"OLD PERSIAN SIGN DAHYAAUSH-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfcd"},66510:{"value":"103CE","name":"OLD PERSIAN SIGN BAGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfce"},66511:{"value":"103CF","name":"OLD PERSIAN SIGN BUUMISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfcf"},66640:{"value":"10450","name":"SHAVIAN LETTER PEEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc50"},66641:{"value":"10451","name":"SHAVIAN LETTER TOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc51"},66642:{"value":"10452","name":"SHAVIAN LETTER KICK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc52"},66643:{"value":"10453","name":"SHAVIAN LETTER FEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc53"},66644:{"value":"10454","name":"SHAVIAN LETTER THIGH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc54"},66645:{"value":"10455","name":"SHAVIAN LETTER SO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc55"},66646:{"value":"10456","name":"SHAVIAN LETTER SURE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc56"},66647:{"value":"10457","name":"SHAVIAN LETTER CHURCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc57"},66648:{"value":"10458","name":"SHAVIAN LETTER YEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc58"},66649:{"value":"10459","name":"SHAVIAN LETTER HUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc59"},66650:{"value":"1045A","name":"SHAVIAN LETTER BIB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc5a"},66651:{"value":"1045B","name":"SHAVIAN LETTER DEAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc5b"},66652:{"value":"1045C","name":"SHAVIAN LETTER GAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc5c"},66653:{"value":"1045D","name":"SHAVIAN LETTER VOW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc5d"},66654:{"value":"1045E","name":"SHAVIAN LETTER THEY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc5e"},66655:{"value":"1045F","name":"SHAVIAN LETTER ZOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc5f"},66656:{"value":"10460","name":"SHAVIAN LETTER MEASURE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc60"},66657:{"value":"10461","name":"SHAVIAN LETTER JUDGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc61"},66658:{"value":"10462","name":"SHAVIAN LETTER WOE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc62"},66659:{"value":"10463","name":"SHAVIAN LETTER HA-HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc63"},66660:{"value":"10464","name":"SHAVIAN LETTER LOLL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc64"},66661:{"value":"10465","name":"SHAVIAN LETTER MIME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc65"},66662:{"value":"10466","name":"SHAVIAN LETTER IF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc66"},66663:{"value":"10467","name":"SHAVIAN LETTER EGG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc67"},66664:{"value":"10468","name":"SHAVIAN LETTER ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc68"},66665:{"value":"10469","name":"SHAVIAN LETTER ADO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc69"},66666:{"value":"1046A","name":"SHAVIAN LETTER ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc6a"},66667:{"value":"1046B","name":"SHAVIAN LETTER WOOL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc6b"},66668:{"value":"1046C","name":"SHAVIAN LETTER OUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc6c"},66669:{"value":"1046D","name":"SHAVIAN LETTER AH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc6d"},66670:{"value":"1046E","name":"SHAVIAN LETTER ROAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc6e"},66671:{"value":"1046F","name":"SHAVIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc6f"},66672:{"value":"10470","name":"SHAVIAN LETTER EAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc70"},66673:{"value":"10471","name":"SHAVIAN LETTER AGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc71"},66674:{"value":"10472","name":"SHAVIAN LETTER ICE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc72"},66675:{"value":"10473","name":"SHAVIAN LETTER UP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc73"},66676:{"value":"10474","name":"SHAVIAN LETTER OAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc74"},66677:{"value":"10475","name":"SHAVIAN LETTER OOZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc75"},66678:{"value":"10476","name":"SHAVIAN LETTER OIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc76"},66679:{"value":"10477","name":"SHAVIAN LETTER AWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc77"},66680:{"value":"10478","name":"SHAVIAN LETTER ARE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc78"},66681:{"value":"10479","name":"SHAVIAN LETTER OR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc79"},66682:{"value":"1047A","name":"SHAVIAN LETTER AIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc7a"},66683:{"value":"1047B","name":"SHAVIAN LETTER ERR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc7b"},66684:{"value":"1047C","name":"SHAVIAN LETTER ARRAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc7c"},66685:{"value":"1047D","name":"SHAVIAN LETTER EAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc7d"},66686:{"value":"1047E","name":"SHAVIAN LETTER IAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc7e"},66687:{"value":"1047F","name":"SHAVIAN LETTER YEW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc7f"},66688:{"value":"10480","name":"OSMANYA LETTER ALEF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc80"},66689:{"value":"10481","name":"OSMANYA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc81"},66690:{"value":"10482","name":"OSMANYA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc82"},66691:{"value":"10483","name":"OSMANYA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc83"},66692:{"value":"10484","name":"OSMANYA LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc84"},66693:{"value":"10485","name":"OSMANYA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc85"},66694:{"value":"10486","name":"OSMANYA LETTER DEEL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc86"},66695:{"value":"10487","name":"OSMANYA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc87"},66696:{"value":"10488","name":"OSMANYA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc88"},66697:{"value":"10489","name":"OSMANYA LETTER SHIIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc89"},66698:{"value":"1048A","name":"OSMANYA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc8a"},66699:{"value":"1048B","name":"OSMANYA LETTER CAYN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc8b"},66700:{"value":"1048C","name":"OSMANYA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc8c"},66701:{"value":"1048D","name":"OSMANYA LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc8d"},66702:{"value":"1048E","name":"OSMANYA LETTER QAAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc8e"},66703:{"value":"1048F","name":"OSMANYA LETTER KAAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc8f"},66704:{"value":"10490","name":"OSMANYA LETTER LAAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc90"},66705:{"value":"10491","name":"OSMANYA LETTER MIIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc91"},66706:{"value":"10492","name":"OSMANYA LETTER NUUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc92"},66707:{"value":"10493","name":"OSMANYA LETTER WAW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc93"},66708:{"value":"10494","name":"OSMANYA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc94"},66709:{"value":"10495","name":"OSMANYA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc95"},66710:{"value":"10496","name":"OSMANYA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc96"},66711:{"value":"10497","name":"OSMANYA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc97"},66712:{"value":"10498","name":"OSMANYA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc98"},66713:{"value":"10499","name":"OSMANYA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc99"},66714:{"value":"1049A","name":"OSMANYA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc9a"},66715:{"value":"1049B","name":"OSMANYA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc9b"},66716:{"value":"1049C","name":"OSMANYA LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc9c"},66717:{"value":"1049D","name":"OSMANYA LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udc9d"},66816:{"value":"10500","name":"ELBASAN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd00"},66817:{"value":"10501","name":"ELBASAN LETTER BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd01"},66818:{"value":"10502","name":"ELBASAN LETTER CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd02"},66819:{"value":"10503","name":"ELBASAN LETTER CHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd03"},66820:{"value":"10504","name":"ELBASAN LETTER DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd04"},66821:{"value":"10505","name":"ELBASAN LETTER NDE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd05"},66822:{"value":"10506","name":"ELBASAN LETTER DHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd06"},66823:{"value":"10507","name":"ELBASAN LETTER EI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd07"},66824:{"value":"10508","name":"ELBASAN LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd08"},66825:{"value":"10509","name":"ELBASAN LETTER FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd09"},66826:{"value":"1050A","name":"ELBASAN LETTER GE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd0a"},66827:{"value":"1050B","name":"ELBASAN LETTER GJE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd0b"},66828:{"value":"1050C","name":"ELBASAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd0c"},66829:{"value":"1050D","name":"ELBASAN LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd0d"},66830:{"value":"1050E","name":"ELBASAN LETTER JE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd0e"},66831:{"value":"1050F","name":"ELBASAN LETTER KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd0f"},66832:{"value":"10510","name":"ELBASAN LETTER LE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd10"},66833:{"value":"10511","name":"ELBASAN LETTER LLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd11"},66834:{"value":"10512","name":"ELBASAN LETTER ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd12"},66835:{"value":"10513","name":"ELBASAN LETTER NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd13"},66836:{"value":"10514","name":"ELBASAN LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd14"},66837:{"value":"10515","name":"ELBASAN LETTER NJE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd15"},66838:{"value":"10516","name":"ELBASAN LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd16"},66839:{"value":"10517","name":"ELBASAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd17"},66840:{"value":"10518","name":"ELBASAN LETTER QE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd18"},66841:{"value":"10519","name":"ELBASAN LETTER RE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd19"},66842:{"value":"1051A","name":"ELBASAN LETTER RRE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd1a"},66843:{"value":"1051B","name":"ELBASAN LETTER SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd1b"},66844:{"value":"1051C","name":"ELBASAN LETTER SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd1c"},66845:{"value":"1051D","name":"ELBASAN LETTER TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd1d"},66846:{"value":"1051E","name":"ELBASAN LETTER THE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd1e"},66847:{"value":"1051F","name":"ELBASAN LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd1f"},66848:{"value":"10520","name":"ELBASAN LETTER VE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd20"},66849:{"value":"10521","name":"ELBASAN LETTER XE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd21"},66850:{"value":"10522","name":"ELBASAN LETTER Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd22"},66851:{"value":"10523","name":"ELBASAN LETTER ZE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd23"},66852:{"value":"10524","name":"ELBASAN LETTER ZHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd24"},66853:{"value":"10525","name":"ELBASAN LETTER GHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd25"},66854:{"value":"10526","name":"ELBASAN LETTER GHAMMA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd26"},66855:{"value":"10527","name":"ELBASAN LETTER KHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd27"},66864:{"value":"10530","name":"CAUCASIAN ALBANIAN LETTER ALT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd30"},66865:{"value":"10531","name":"CAUCASIAN ALBANIAN LETTER BET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd31"},66866:{"value":"10532","name":"CAUCASIAN ALBANIAN LETTER GIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd32"},66867:{"value":"10533","name":"CAUCASIAN ALBANIAN LETTER DAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd33"},66868:{"value":"10534","name":"CAUCASIAN ALBANIAN LETTER EB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd34"},66869:{"value":"10535","name":"CAUCASIAN ALBANIAN LETTER ZARL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd35"},66870:{"value":"10536","name":"CAUCASIAN ALBANIAN LETTER EYN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd36"},66871:{"value":"10537","name":"CAUCASIAN ALBANIAN LETTER ZHIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd37"},66872:{"value":"10538","name":"CAUCASIAN ALBANIAN LETTER TAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd38"},66873:{"value":"10539","name":"CAUCASIAN ALBANIAN LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd39"},66874:{"value":"1053A","name":"CAUCASIAN ALBANIAN LETTER YOWD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd3a"},66875:{"value":"1053B","name":"CAUCASIAN ALBANIAN LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd3b"},66876:{"value":"1053C","name":"CAUCASIAN ALBANIAN LETTER IRB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd3c"},66877:{"value":"1053D","name":"CAUCASIAN ALBANIAN LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd3d"},66878:{"value":"1053E","name":"CAUCASIAN ALBANIAN LETTER LAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd3e"},66879:{"value":"1053F","name":"CAUCASIAN ALBANIAN LETTER INYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd3f"},66880:{"value":"10540","name":"CAUCASIAN ALBANIAN LETTER XEYN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd40"},66881:{"value":"10541","name":"CAUCASIAN ALBANIAN LETTER DYAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd41"},66882:{"value":"10542","name":"CAUCASIAN ALBANIAN LETTER CAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd42"},66883:{"value":"10543","name":"CAUCASIAN ALBANIAN LETTER JHOX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd43"},66884:{"value":"10544","name":"CAUCASIAN ALBANIAN LETTER KAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd44"},66885:{"value":"10545","name":"CAUCASIAN ALBANIAN LETTER LYIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd45"},66886:{"value":"10546","name":"CAUCASIAN ALBANIAN LETTER HEYT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd46"},66887:{"value":"10547","name":"CAUCASIAN ALBANIAN LETTER QAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd47"},66888:{"value":"10548","name":"CAUCASIAN ALBANIAN LETTER AOR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd48"},66889:{"value":"10549","name":"CAUCASIAN ALBANIAN LETTER CHOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd49"},66890:{"value":"1054A","name":"CAUCASIAN ALBANIAN LETTER CHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd4a"},66891:{"value":"1054B","name":"CAUCASIAN ALBANIAN LETTER CYAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd4b"},66892:{"value":"1054C","name":"CAUCASIAN ALBANIAN LETTER MAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd4c"},66893:{"value":"1054D","name":"CAUCASIAN ALBANIAN LETTER QAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd4d"},66894:{"value":"1054E","name":"CAUCASIAN ALBANIAN LETTER NOWC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd4e"},66895:{"value":"1054F","name":"CAUCASIAN ALBANIAN LETTER DZYAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd4f"},66896:{"value":"10550","name":"CAUCASIAN ALBANIAN LETTER SHAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd50"},66897:{"value":"10551","name":"CAUCASIAN ALBANIAN LETTER JAYN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd51"},66898:{"value":"10552","name":"CAUCASIAN ALBANIAN LETTER ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd52"},66899:{"value":"10553","name":"CAUCASIAN ALBANIAN LETTER TYAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd53"},66900:{"value":"10554","name":"CAUCASIAN ALBANIAN LETTER FAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd54"},66901:{"value":"10555","name":"CAUCASIAN ALBANIAN LETTER DZAY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd55"},66902:{"value":"10556","name":"CAUCASIAN ALBANIAN LETTER CHAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd56"},66903:{"value":"10557","name":"CAUCASIAN ALBANIAN LETTER PEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd57"},66904:{"value":"10558","name":"CAUCASIAN ALBANIAN LETTER GHEYS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd58"},66905:{"value":"10559","name":"CAUCASIAN ALBANIAN LETTER RAT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd59"},66906:{"value":"1055A","name":"CAUCASIAN ALBANIAN LETTER SEYK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd5a"},66907:{"value":"1055B","name":"CAUCASIAN ALBANIAN LETTER VEYZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd5b"},66908:{"value":"1055C","name":"CAUCASIAN ALBANIAN LETTER TIWR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd5c"},66909:{"value":"1055D","name":"CAUCASIAN ALBANIAN LETTER SHOY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd5d"},66910:{"value":"1055E","name":"CAUCASIAN ALBANIAN LETTER IWN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd5e"},66911:{"value":"1055F","name":"CAUCASIAN ALBANIAN LETTER CYAW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd5f"},66912:{"value":"10560","name":"CAUCASIAN ALBANIAN LETTER CAYN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd60"},66913:{"value":"10561","name":"CAUCASIAN ALBANIAN LETTER YAYD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd61"},66914:{"value":"10562","name":"CAUCASIAN ALBANIAN LETTER PIWR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd62"},66915:{"value":"10563","name":"CAUCASIAN ALBANIAN LETTER KIW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd63"},67072:{"value":"10600","name":"LINEAR A SIGN AB001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude00"},67073:{"value":"10601","name":"LINEAR A SIGN AB002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude01"},67074:{"value":"10602","name":"LINEAR A SIGN AB003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude02"},67075:{"value":"10603","name":"LINEAR A SIGN AB004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude03"},67076:{"value":"10604","name":"LINEAR A SIGN AB005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude04"},67077:{"value":"10605","name":"LINEAR A SIGN AB006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude05"},67078:{"value":"10606","name":"LINEAR A SIGN AB007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude06"},67079:{"value":"10607","name":"LINEAR A SIGN AB008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude07"},67080:{"value":"10608","name":"LINEAR A SIGN AB009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude08"},67081:{"value":"10609","name":"LINEAR A SIGN AB010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude09"},67082:{"value":"1060A","name":"LINEAR A SIGN AB011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude0a"},67083:{"value":"1060B","name":"LINEAR A SIGN AB013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude0b"},67084:{"value":"1060C","name":"LINEAR A SIGN AB016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude0c"},67085:{"value":"1060D","name":"LINEAR A SIGN AB017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude0d"},67086:{"value":"1060E","name":"LINEAR A SIGN AB020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude0e"},67087:{"value":"1060F","name":"LINEAR A SIGN AB021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude0f"},67088:{"value":"10610","name":"LINEAR A SIGN AB021F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude10"},67089:{"value":"10611","name":"LINEAR A SIGN AB021M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude11"},67090:{"value":"10612","name":"LINEAR A SIGN AB022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude12"},67091:{"value":"10613","name":"LINEAR A SIGN AB022F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude13"},67092:{"value":"10614","name":"LINEAR A SIGN AB022M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude14"},67093:{"value":"10615","name":"LINEAR A SIGN AB023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude15"},67094:{"value":"10616","name":"LINEAR A SIGN AB023M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude16"},67095:{"value":"10617","name":"LINEAR A SIGN AB024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude17"},67096:{"value":"10618","name":"LINEAR A SIGN AB026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude18"},67097:{"value":"10619","name":"LINEAR A SIGN AB027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude19"},67098:{"value":"1061A","name":"LINEAR A SIGN AB028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude1a"},67099:{"value":"1061B","name":"LINEAR A SIGN A028B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude1b"},67100:{"value":"1061C","name":"LINEAR A SIGN AB029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude1c"},67101:{"value":"1061D","name":"LINEAR A SIGN AB030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude1d"},67102:{"value":"1061E","name":"LINEAR A SIGN AB031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude1e"},67103:{"value":"1061F","name":"LINEAR A SIGN AB034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude1f"},67104:{"value":"10620","name":"LINEAR A SIGN AB037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude20"},67105:{"value":"10621","name":"LINEAR A SIGN AB038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude21"},67106:{"value":"10622","name":"LINEAR A SIGN AB039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude22"},67107:{"value":"10623","name":"LINEAR A SIGN AB040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude23"},67108:{"value":"10624","name":"LINEAR A SIGN AB041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude24"},67109:{"value":"10625","name":"LINEAR A SIGN AB044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude25"},67110:{"value":"10626","name":"LINEAR A SIGN AB045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude26"},67111:{"value":"10627","name":"LINEAR A SIGN AB046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude27"},67112:{"value":"10628","name":"LINEAR A SIGN AB047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude28"},67113:{"value":"10629","name":"LINEAR A SIGN AB048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude29"},67114:{"value":"1062A","name":"LINEAR A SIGN AB049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude2a"},67115:{"value":"1062B","name":"LINEAR A SIGN AB050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude2b"},67116:{"value":"1062C","name":"LINEAR A SIGN AB051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude2c"},67117:{"value":"1062D","name":"LINEAR A SIGN AB053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude2d"},67118:{"value":"1062E","name":"LINEAR A SIGN AB054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude2e"},67119:{"value":"1062F","name":"LINEAR A SIGN AB055","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude2f"},67120:{"value":"10630","name":"LINEAR A SIGN AB056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude30"},67121:{"value":"10631","name":"LINEAR A SIGN AB057","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude31"},67122:{"value":"10632","name":"LINEAR A SIGN AB058","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude32"},67123:{"value":"10633","name":"LINEAR A SIGN AB059","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude33"},67124:{"value":"10634","name":"LINEAR A SIGN AB060","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude34"},67125:{"value":"10635","name":"LINEAR A SIGN AB061","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude35"},67126:{"value":"10636","name":"LINEAR A SIGN AB065","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude36"},67127:{"value":"10637","name":"LINEAR A SIGN AB066","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude37"},67128:{"value":"10638","name":"LINEAR A SIGN AB067","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude38"},67129:{"value":"10639","name":"LINEAR A SIGN AB069","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude39"},67130:{"value":"1063A","name":"LINEAR A SIGN AB070","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude3a"},67131:{"value":"1063B","name":"LINEAR A SIGN AB073","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude3b"},67132:{"value":"1063C","name":"LINEAR A SIGN AB074","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude3c"},67133:{"value":"1063D","name":"LINEAR A SIGN AB076","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude3d"},67134:{"value":"1063E","name":"LINEAR A SIGN AB077","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude3e"},67135:{"value":"1063F","name":"LINEAR A SIGN AB078","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude3f"},67136:{"value":"10640","name":"LINEAR A SIGN AB079","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude40"},67137:{"value":"10641","name":"LINEAR A SIGN AB080","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude41"},67138:{"value":"10642","name":"LINEAR A SIGN AB081","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude42"},67139:{"value":"10643","name":"LINEAR A SIGN AB082","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude43"},67140:{"value":"10644","name":"LINEAR A SIGN AB085","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude44"},67141:{"value":"10645","name":"LINEAR A SIGN AB086","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude45"},67142:{"value":"10646","name":"LINEAR A SIGN AB087","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude46"},67143:{"value":"10647","name":"LINEAR A SIGN A100-102","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude47"},67144:{"value":"10648","name":"LINEAR A SIGN AB118","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude48"},67145:{"value":"10649","name":"LINEAR A SIGN AB120","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude49"},67146:{"value":"1064A","name":"LINEAR A SIGN A120B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude4a"},67147:{"value":"1064B","name":"LINEAR A SIGN AB122","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude4b"},67148:{"value":"1064C","name":"LINEAR A SIGN AB123","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude4c"},67149:{"value":"1064D","name":"LINEAR A SIGN AB131A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude4d"},67150:{"value":"1064E","name":"LINEAR A SIGN AB131B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude4e"},67151:{"value":"1064F","name":"LINEAR A SIGN A131C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude4f"},67152:{"value":"10650","name":"LINEAR A SIGN AB164","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude50"},67153:{"value":"10651","name":"LINEAR A SIGN AB171","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude51"},67154:{"value":"10652","name":"LINEAR A SIGN AB180","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude52"},67155:{"value":"10653","name":"LINEAR A SIGN AB188","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude53"},67156:{"value":"10654","name":"LINEAR A SIGN AB191","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude54"},67157:{"value":"10655","name":"LINEAR A SIGN A301","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude55"},67158:{"value":"10656","name":"LINEAR A SIGN A302","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude56"},67159:{"value":"10657","name":"LINEAR A SIGN A303","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude57"},67160:{"value":"10658","name":"LINEAR A SIGN A304","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude58"},67161:{"value":"10659","name":"LINEAR A SIGN A305","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude59"},67162:{"value":"1065A","name":"LINEAR A SIGN A306","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude5a"},67163:{"value":"1065B","name":"LINEAR A SIGN A307","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude5b"},67164:{"value":"1065C","name":"LINEAR A SIGN A308","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude5c"},67165:{"value":"1065D","name":"LINEAR A SIGN A309A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude5d"},67166:{"value":"1065E","name":"LINEAR A SIGN A309B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude5e"},67167:{"value":"1065F","name":"LINEAR A SIGN A309C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude5f"},67168:{"value":"10660","name":"LINEAR A SIGN A310","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude60"},67169:{"value":"10661","name":"LINEAR A SIGN A311","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude61"},67170:{"value":"10662","name":"LINEAR A SIGN A312","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude62"},67171:{"value":"10663","name":"LINEAR A SIGN A313A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude63"},67172:{"value":"10664","name":"LINEAR A SIGN A313B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude64"},67173:{"value":"10665","name":"LINEAR A SIGN A313C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude65"},67174:{"value":"10666","name":"LINEAR A SIGN A314","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude66"},67175:{"value":"10667","name":"LINEAR A SIGN A315","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude67"},67176:{"value":"10668","name":"LINEAR A SIGN A316","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude68"},67177:{"value":"10669","name":"LINEAR A SIGN A317","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude69"},67178:{"value":"1066A","name":"LINEAR A SIGN A318","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude6a"},67179:{"value":"1066B","name":"LINEAR A SIGN A319","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude6b"},67180:{"value":"1066C","name":"LINEAR A SIGN A320","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude6c"},67181:{"value":"1066D","name":"LINEAR A SIGN A321","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude6d"},67182:{"value":"1066E","name":"LINEAR A SIGN A322","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude6e"},67183:{"value":"1066F","name":"LINEAR A SIGN A323","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude6f"},67184:{"value":"10670","name":"LINEAR A SIGN A324","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude70"},67185:{"value":"10671","name":"LINEAR A SIGN A325","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude71"},67186:{"value":"10672","name":"LINEAR A SIGN A326","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude72"},67187:{"value":"10673","name":"LINEAR A SIGN A327","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude73"},67188:{"value":"10674","name":"LINEAR A SIGN A328","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude74"},67189:{"value":"10675","name":"LINEAR A SIGN A329","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude75"},67190:{"value":"10676","name":"LINEAR A SIGN A330","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude76"},67191:{"value":"10677","name":"LINEAR A SIGN A331","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude77"},67192:{"value":"10678","name":"LINEAR A SIGN A332","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude78"},67193:{"value":"10679","name":"LINEAR A SIGN A333","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude79"},67194:{"value":"1067A","name":"LINEAR A SIGN A334","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude7a"},67195:{"value":"1067B","name":"LINEAR A SIGN A335","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude7b"},67196:{"value":"1067C","name":"LINEAR A SIGN A336","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude7c"},67197:{"value":"1067D","name":"LINEAR A SIGN A337","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude7d"},67198:{"value":"1067E","name":"LINEAR A SIGN A338","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude7e"},67199:{"value":"1067F","name":"LINEAR A SIGN A339","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude7f"},67200:{"value":"10680","name":"LINEAR A SIGN A340","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude80"},67201:{"value":"10681","name":"LINEAR A SIGN A341","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude81"},67202:{"value":"10682","name":"LINEAR A SIGN A342","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude82"},67203:{"value":"10683","name":"LINEAR A SIGN A343","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude83"},67204:{"value":"10684","name":"LINEAR A SIGN A344","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude84"},67205:{"value":"10685","name":"LINEAR A SIGN A345","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude85"},67206:{"value":"10686","name":"LINEAR A SIGN A346","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude86"},67207:{"value":"10687","name":"LINEAR A SIGN A347","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude87"},67208:{"value":"10688","name":"LINEAR A SIGN A348","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude88"},67209:{"value":"10689","name":"LINEAR A SIGN A349","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude89"},67210:{"value":"1068A","name":"LINEAR A SIGN A350","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude8a"},67211:{"value":"1068B","name":"LINEAR A SIGN A351","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude8b"},67212:{"value":"1068C","name":"LINEAR A SIGN A352","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude8c"},67213:{"value":"1068D","name":"LINEAR A SIGN A353","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude8d"},67214:{"value":"1068E","name":"LINEAR A SIGN A354","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude8e"},67215:{"value":"1068F","name":"LINEAR A SIGN A355","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude8f"},67216:{"value":"10690","name":"LINEAR A SIGN A356","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude90"},67217:{"value":"10691","name":"LINEAR A SIGN A357","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude91"},67218:{"value":"10692","name":"LINEAR A SIGN A358","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude92"},67219:{"value":"10693","name":"LINEAR A SIGN A359","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude93"},67220:{"value":"10694","name":"LINEAR A SIGN A360","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude94"},67221:{"value":"10695","name":"LINEAR A SIGN A361","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude95"},67222:{"value":"10696","name":"LINEAR A SIGN A362","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude96"},67223:{"value":"10697","name":"LINEAR A SIGN A363","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude97"},67224:{"value":"10698","name":"LINEAR A SIGN A364","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude98"},67225:{"value":"10699","name":"LINEAR A SIGN A365","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude99"},67226:{"value":"1069A","name":"LINEAR A SIGN A366","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude9a"},67227:{"value":"1069B","name":"LINEAR A SIGN A367","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude9b"},67228:{"value":"1069C","name":"LINEAR A SIGN A368","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude9c"},67229:{"value":"1069D","name":"LINEAR A SIGN A369","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude9d"},67230:{"value":"1069E","name":"LINEAR A SIGN A370","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude9e"},67231:{"value":"1069F","name":"LINEAR A SIGN A371","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\ude9f"},67232:{"value":"106A0","name":"LINEAR A SIGN A400-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea0"},67233:{"value":"106A1","name":"LINEAR A SIGN A401-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea1"},67234:{"value":"106A2","name":"LINEAR A SIGN A402-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea2"},67235:{"value":"106A3","name":"LINEAR A SIGN A403-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea3"},67236:{"value":"106A4","name":"LINEAR A SIGN A404-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea4"},67237:{"value":"106A5","name":"LINEAR A SIGN A405-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea5"},67238:{"value":"106A6","name":"LINEAR A SIGN A406-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea6"},67239:{"value":"106A7","name":"LINEAR A SIGN A407-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea7"},67240:{"value":"106A8","name":"LINEAR A SIGN A408-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea8"},67241:{"value":"106A9","name":"LINEAR A SIGN A409-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udea9"},67242:{"value":"106AA","name":"LINEAR A SIGN A410-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeaa"},67243:{"value":"106AB","name":"LINEAR A SIGN A411-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeab"},67244:{"value":"106AC","name":"LINEAR A SIGN A412-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeac"},67245:{"value":"106AD","name":"LINEAR A SIGN A413-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udead"},67246:{"value":"106AE","name":"LINEAR A SIGN A414-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeae"},67247:{"value":"106AF","name":"LINEAR A SIGN A415-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeaf"},67248:{"value":"106B0","name":"LINEAR A SIGN A416-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb0"},67249:{"value":"106B1","name":"LINEAR A SIGN A417-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb1"},67250:{"value":"106B2","name":"LINEAR A SIGN A418-VAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb2"},67251:{"value":"106B3","name":"LINEAR A SIGN A501","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb3"},67252:{"value":"106B4","name":"LINEAR A SIGN A502","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb4"},67253:{"value":"106B5","name":"LINEAR A SIGN A503","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb5"},67254:{"value":"106B6","name":"LINEAR A SIGN A504","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb6"},67255:{"value":"106B7","name":"LINEAR A SIGN A505","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb7"},67256:{"value":"106B8","name":"LINEAR A SIGN A506","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb8"},67257:{"value":"106B9","name":"LINEAR A SIGN A508","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeb9"},67258:{"value":"106BA","name":"LINEAR A SIGN A509","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeba"},67259:{"value":"106BB","name":"LINEAR A SIGN A510","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udebb"},67260:{"value":"106BC","name":"LINEAR A SIGN A511","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udebc"},67261:{"value":"106BD","name":"LINEAR A SIGN A512","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udebd"},67262:{"value":"106BE","name":"LINEAR A SIGN A513","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udebe"},67263:{"value":"106BF","name":"LINEAR A SIGN A515","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udebf"},67264:{"value":"106C0","name":"LINEAR A SIGN A516","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec0"},67265:{"value":"106C1","name":"LINEAR A SIGN A520","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec1"},67266:{"value":"106C2","name":"LINEAR A SIGN A521","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec2"},67267:{"value":"106C3","name":"LINEAR A SIGN A523","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec3"},67268:{"value":"106C4","name":"LINEAR A SIGN A524","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec4"},67269:{"value":"106C5","name":"LINEAR A SIGN A525","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec5"},67270:{"value":"106C6","name":"LINEAR A SIGN A526","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec6"},67271:{"value":"106C7","name":"LINEAR A SIGN A527","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec7"},67272:{"value":"106C8","name":"LINEAR A SIGN A528","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec8"},67273:{"value":"106C9","name":"LINEAR A SIGN A529","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udec9"},67274:{"value":"106CA","name":"LINEAR A SIGN A530","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeca"},67275:{"value":"106CB","name":"LINEAR A SIGN A531","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udecb"},67276:{"value":"106CC","name":"LINEAR A SIGN A532","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udecc"},67277:{"value":"106CD","name":"LINEAR A SIGN A534","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udecd"},67278:{"value":"106CE","name":"LINEAR A SIGN A535","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udece"},67279:{"value":"106CF","name":"LINEAR A SIGN A536","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udecf"},67280:{"value":"106D0","name":"LINEAR A SIGN A537","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded0"},67281:{"value":"106D1","name":"LINEAR A SIGN A538","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded1"},67282:{"value":"106D2","name":"LINEAR A SIGN A539","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded2"},67283:{"value":"106D3","name":"LINEAR A SIGN A540","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded3"},67284:{"value":"106D4","name":"LINEAR A SIGN A541","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded4"},67285:{"value":"106D5","name":"LINEAR A SIGN A542","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded5"},67286:{"value":"106D6","name":"LINEAR A SIGN A545","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded6"},67287:{"value":"106D7","name":"LINEAR A SIGN A547","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded7"},67288:{"value":"106D8","name":"LINEAR A SIGN A548","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded8"},67289:{"value":"106D9","name":"LINEAR A SIGN A549","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\uded9"},67290:{"value":"106DA","name":"LINEAR A SIGN A550","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeda"},67291:{"value":"106DB","name":"LINEAR A SIGN A551","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udedb"},67292:{"value":"106DC","name":"LINEAR A SIGN A552","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udedc"},67293:{"value":"106DD","name":"LINEAR A SIGN A553","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udedd"},67294:{"value":"106DE","name":"LINEAR A SIGN A554","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udede"},67295:{"value":"106DF","name":"LINEAR A SIGN A555","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udedf"},67296:{"value":"106E0","name":"LINEAR A SIGN A556","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee0"},67297:{"value":"106E1","name":"LINEAR A SIGN A557","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee1"},67298:{"value":"106E2","name":"LINEAR A SIGN A559","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee2"},67299:{"value":"106E3","name":"LINEAR A SIGN A563","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee3"},67300:{"value":"106E4","name":"LINEAR A SIGN A564","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee4"},67301:{"value":"106E5","name":"LINEAR A SIGN A565","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee5"},67302:{"value":"106E6","name":"LINEAR A SIGN A566","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee6"},67303:{"value":"106E7","name":"LINEAR A SIGN A568","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee7"},67304:{"value":"106E8","name":"LINEAR A SIGN A569","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee8"},67305:{"value":"106E9","name":"LINEAR A SIGN A570","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udee9"},67306:{"value":"106EA","name":"LINEAR A SIGN A571","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeea"},67307:{"value":"106EB","name":"LINEAR A SIGN A572","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeeb"},67308:{"value":"106EC","name":"LINEAR A SIGN A573","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeec"},67309:{"value":"106ED","name":"LINEAR A SIGN A574","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeed"},67310:{"value":"106EE","name":"LINEAR A SIGN A575","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeee"},67311:{"value":"106EF","name":"LINEAR A SIGN A576","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeef"},67312:{"value":"106F0","name":"LINEAR A SIGN A577","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef0"},67313:{"value":"106F1","name":"LINEAR A SIGN A578","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef1"},67314:{"value":"106F2","name":"LINEAR A SIGN A579","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef2"},67315:{"value":"106F3","name":"LINEAR A SIGN A580","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef3"},67316:{"value":"106F4","name":"LINEAR A SIGN A581","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef4"},67317:{"value":"106F5","name":"LINEAR A SIGN A582","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef5"},67318:{"value":"106F6","name":"LINEAR A SIGN A583","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef6"},67319:{"value":"106F7","name":"LINEAR A SIGN A584","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef7"},67320:{"value":"106F8","name":"LINEAR A SIGN A585","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef8"},67321:{"value":"106F9","name":"LINEAR A SIGN A586","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udef9"},67322:{"value":"106FA","name":"LINEAR A SIGN A587","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udefa"},67323:{"value":"106FB","name":"LINEAR A SIGN A588","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udefb"},67324:{"value":"106FC","name":"LINEAR A SIGN A589","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udefc"},67325:{"value":"106FD","name":"LINEAR A SIGN A591","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udefd"},67326:{"value":"106FE","name":"LINEAR A SIGN A592","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udefe"},67327:{"value":"106FF","name":"LINEAR A SIGN A594","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udeff"},67328:{"value":"10700","name":"LINEAR A SIGN A595","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf00"},67329:{"value":"10701","name":"LINEAR A SIGN A596","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf01"},67330:{"value":"10702","name":"LINEAR A SIGN A598","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf02"},67331:{"value":"10703","name":"LINEAR A SIGN A600","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf03"},67332:{"value":"10704","name":"LINEAR A SIGN A601","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf04"},67333:{"value":"10705","name":"LINEAR A SIGN A602","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf05"},67334:{"value":"10706","name":"LINEAR A SIGN A603","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf06"},67335:{"value":"10707","name":"LINEAR A SIGN A604","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf07"},67336:{"value":"10708","name":"LINEAR A SIGN A606","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf08"},67337:{"value":"10709","name":"LINEAR A SIGN A608","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf09"},67338:{"value":"1070A","name":"LINEAR A SIGN A609","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf0a"},67339:{"value":"1070B","name":"LINEAR A SIGN A610","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf0b"},67340:{"value":"1070C","name":"LINEAR A SIGN A611","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf0c"},67341:{"value":"1070D","name":"LINEAR A SIGN A612","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf0d"},67342:{"value":"1070E","name":"LINEAR A SIGN A613","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf0e"},67343:{"value":"1070F","name":"LINEAR A SIGN A614","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf0f"},67344:{"value":"10710","name":"LINEAR A SIGN A615","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf10"},67345:{"value":"10711","name":"LINEAR A SIGN A616","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf11"},67346:{"value":"10712","name":"LINEAR A SIGN A617","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf12"},67347:{"value":"10713","name":"LINEAR A SIGN A618","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf13"},67348:{"value":"10714","name":"LINEAR A SIGN A619","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf14"},67349:{"value":"10715","name":"LINEAR A SIGN A620","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf15"},67350:{"value":"10716","name":"LINEAR A SIGN A621","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf16"},67351:{"value":"10717","name":"LINEAR A SIGN A622","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf17"},67352:{"value":"10718","name":"LINEAR A SIGN A623","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf18"},67353:{"value":"10719","name":"LINEAR A SIGN A624","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf19"},67354:{"value":"1071A","name":"LINEAR A SIGN A626","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf1a"},67355:{"value":"1071B","name":"LINEAR A SIGN A627","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf1b"},67356:{"value":"1071C","name":"LINEAR A SIGN A628","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf1c"},67357:{"value":"1071D","name":"LINEAR A SIGN A629","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf1d"},67358:{"value":"1071E","name":"LINEAR A SIGN A634","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf1e"},67359:{"value":"1071F","name":"LINEAR A SIGN A637","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf1f"},67360:{"value":"10720","name":"LINEAR A SIGN A638","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf20"},67361:{"value":"10721","name":"LINEAR A SIGN A640","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf21"},67362:{"value":"10722","name":"LINEAR A SIGN A642","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf22"},67363:{"value":"10723","name":"LINEAR A SIGN A643","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf23"},67364:{"value":"10724","name":"LINEAR A SIGN A644","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf24"},67365:{"value":"10725","name":"LINEAR A SIGN A645","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf25"},67366:{"value":"10726","name":"LINEAR A SIGN A646","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf26"},67367:{"value":"10727","name":"LINEAR A SIGN A648","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf27"},67368:{"value":"10728","name":"LINEAR A SIGN A649","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf28"},67369:{"value":"10729","name":"LINEAR A SIGN A651","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf29"},67370:{"value":"1072A","name":"LINEAR A SIGN A652","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf2a"},67371:{"value":"1072B","name":"LINEAR A SIGN A653","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf2b"},67372:{"value":"1072C","name":"LINEAR A SIGN A654","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf2c"},67373:{"value":"1072D","name":"LINEAR A SIGN A655","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf2d"},67374:{"value":"1072E","name":"LINEAR A SIGN A656","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf2e"},67375:{"value":"1072F","name":"LINEAR A SIGN A657","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf2f"},67376:{"value":"10730","name":"LINEAR A SIGN A658","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf30"},67377:{"value":"10731","name":"LINEAR A SIGN A659","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf31"},67378:{"value":"10732","name":"LINEAR A SIGN A660","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf32"},67379:{"value":"10733","name":"LINEAR A SIGN A661","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf33"},67380:{"value":"10734","name":"LINEAR A SIGN A662","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf34"},67381:{"value":"10735","name":"LINEAR A SIGN A663","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf35"},67382:{"value":"10736","name":"LINEAR A SIGN A664","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf36"},67392:{"value":"10740","name":"LINEAR A SIGN A701 A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf40"},67393:{"value":"10741","name":"LINEAR A SIGN A702 B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf41"},67394:{"value":"10742","name":"LINEAR A SIGN A703 D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf42"},67395:{"value":"10743","name":"LINEAR A SIGN A704 E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf43"},67396:{"value":"10744","name":"LINEAR A SIGN A705 F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf44"},67397:{"value":"10745","name":"LINEAR A SIGN A706 H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf45"},67398:{"value":"10746","name":"LINEAR A SIGN A707 J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf46"},67399:{"value":"10747","name":"LINEAR A SIGN A708 K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf47"},67400:{"value":"10748","name":"LINEAR A SIGN A709 L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf48"},67401:{"value":"10749","name":"LINEAR A SIGN A709-2 L2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf49"},67402:{"value":"1074A","name":"LINEAR A SIGN A709-3 L3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf4a"},67403:{"value":"1074B","name":"LINEAR A SIGN A709-4 L4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf4b"},67404:{"value":"1074C","name":"LINEAR A SIGN A709-6 L6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf4c"},67405:{"value":"1074D","name":"LINEAR A SIGN A710 W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf4d"},67406:{"value":"1074E","name":"LINEAR A SIGN A711 X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf4e"},67407:{"value":"1074F","name":"LINEAR A SIGN A712 Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf4f"},67408:{"value":"10750","name":"LINEAR A SIGN A713 OMEGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf50"},67409:{"value":"10751","name":"LINEAR A SIGN A714 ABB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf51"},67410:{"value":"10752","name":"LINEAR A SIGN A715 BB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf52"},67411:{"value":"10753","name":"LINEAR A SIGN A717 DD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf53"},67412:{"value":"10754","name":"LINEAR A SIGN A726 EYYY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf54"},67413:{"value":"10755","name":"LINEAR A SIGN A732 JE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf55"},67424:{"value":"10760","name":"LINEAR A SIGN A800","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf60"},67425:{"value":"10761","name":"LINEAR A SIGN A801","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf61"},67426:{"value":"10762","name":"LINEAR A SIGN A802","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf62"},67427:{"value":"10763","name":"LINEAR A SIGN A803","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf63"},67428:{"value":"10764","name":"LINEAR A SIGN A804","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf64"},67429:{"value":"10765","name":"LINEAR A SIGN A805","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf65"},67430:{"value":"10766","name":"LINEAR A SIGN A806","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf66"},67431:{"value":"10767","name":"LINEAR A SIGN A807","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udf67"},67584:{"value":"10800","name":"CYPRIOT SYLLABLE A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc00"},67585:{"value":"10801","name":"CYPRIOT SYLLABLE E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc01"},67586:{"value":"10802","name":"CYPRIOT SYLLABLE I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc02"},67587:{"value":"10803","name":"CYPRIOT SYLLABLE O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc03"},67588:{"value":"10804","name":"CYPRIOT SYLLABLE U","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc04"},67589:{"value":"10805","name":"CYPRIOT SYLLABLE JA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc05"},67592:{"value":"10808","name":"CYPRIOT SYLLABLE JO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc08"},67594:{"value":"1080A","name":"CYPRIOT SYLLABLE KA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc0a"},67595:{"value":"1080B","name":"CYPRIOT SYLLABLE KE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc0b"},67596:{"value":"1080C","name":"CYPRIOT SYLLABLE KI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc0c"},67597:{"value":"1080D","name":"CYPRIOT SYLLABLE KO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc0d"},67598:{"value":"1080E","name":"CYPRIOT SYLLABLE KU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc0e"},67599:{"value":"1080F","name":"CYPRIOT SYLLABLE LA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc0f"},67600:{"value":"10810","name":"CYPRIOT SYLLABLE LE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc10"},67601:{"value":"10811","name":"CYPRIOT SYLLABLE LI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc11"},67602:{"value":"10812","name":"CYPRIOT SYLLABLE LO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc12"},67603:{"value":"10813","name":"CYPRIOT SYLLABLE LU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc13"},67604:{"value":"10814","name":"CYPRIOT SYLLABLE MA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc14"},67605:{"value":"10815","name":"CYPRIOT SYLLABLE ME","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc15"},67606:{"value":"10816","name":"CYPRIOT SYLLABLE MI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc16"},67607:{"value":"10817","name":"CYPRIOT SYLLABLE MO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc17"},67608:{"value":"10818","name":"CYPRIOT SYLLABLE MU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc18"},67609:{"value":"10819","name":"CYPRIOT SYLLABLE NA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc19"},67610:{"value":"1081A","name":"CYPRIOT SYLLABLE NE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc1a"},67611:{"value":"1081B","name":"CYPRIOT SYLLABLE NI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc1b"},67612:{"value":"1081C","name":"CYPRIOT SYLLABLE NO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc1c"},67613:{"value":"1081D","name":"CYPRIOT SYLLABLE NU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc1d"},67614:{"value":"1081E","name":"CYPRIOT SYLLABLE PA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc1e"},67615:{"value":"1081F","name":"CYPRIOT SYLLABLE PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc1f"},67616:{"value":"10820","name":"CYPRIOT SYLLABLE PI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc20"},67617:{"value":"10821","name":"CYPRIOT SYLLABLE PO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc21"},67618:{"value":"10822","name":"CYPRIOT SYLLABLE PU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc22"},67619:{"value":"10823","name":"CYPRIOT SYLLABLE RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc23"},67620:{"value":"10824","name":"CYPRIOT SYLLABLE RE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc24"},67621:{"value":"10825","name":"CYPRIOT SYLLABLE RI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc25"},67622:{"value":"10826","name":"CYPRIOT SYLLABLE RO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc26"},67623:{"value":"10827","name":"CYPRIOT SYLLABLE RU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc27"},67624:{"value":"10828","name":"CYPRIOT SYLLABLE SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc28"},67625:{"value":"10829","name":"CYPRIOT SYLLABLE SE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc29"},67626:{"value":"1082A","name":"CYPRIOT SYLLABLE SI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc2a"},67627:{"value":"1082B","name":"CYPRIOT SYLLABLE SO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc2b"},67628:{"value":"1082C","name":"CYPRIOT SYLLABLE SU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc2c"},67629:{"value":"1082D","name":"CYPRIOT SYLLABLE TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc2d"},67630:{"value":"1082E","name":"CYPRIOT SYLLABLE TE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc2e"},67631:{"value":"1082F","name":"CYPRIOT SYLLABLE TI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc2f"},67632:{"value":"10830","name":"CYPRIOT SYLLABLE TO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc30"},67633:{"value":"10831","name":"CYPRIOT SYLLABLE TU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc31"},67634:{"value":"10832","name":"CYPRIOT SYLLABLE WA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc32"},67635:{"value":"10833","name":"CYPRIOT SYLLABLE WE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc33"},67636:{"value":"10834","name":"CYPRIOT SYLLABLE WI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc34"},67637:{"value":"10835","name":"CYPRIOT SYLLABLE WO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc35"},67639:{"value":"10837","name":"CYPRIOT SYLLABLE XA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc37"},67640:{"value":"10838","name":"CYPRIOT SYLLABLE XE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc38"},67644:{"value":"1083C","name":"CYPRIOT SYLLABLE ZA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc3c"},67647:{"value":"1083F","name":"CYPRIOT SYLLABLE ZO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc3f"},67648:{"value":"10840","name":"IMPERIAL ARAMAIC LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc40"},67649:{"value":"10841","name":"IMPERIAL ARAMAIC LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc41"},67650:{"value":"10842","name":"IMPERIAL ARAMAIC LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc42"},67651:{"value":"10843","name":"IMPERIAL ARAMAIC LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc43"},67652:{"value":"10844","name":"IMPERIAL ARAMAIC LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc44"},67653:{"value":"10845","name":"IMPERIAL ARAMAIC LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc45"},67654:{"value":"10846","name":"IMPERIAL ARAMAIC LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc46"},67655:{"value":"10847","name":"IMPERIAL ARAMAIC LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc47"},67656:{"value":"10848","name":"IMPERIAL ARAMAIC LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc48"},67657:{"value":"10849","name":"IMPERIAL ARAMAIC LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc49"},67658:{"value":"1084A","name":"IMPERIAL ARAMAIC LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc4a"},67659:{"value":"1084B","name":"IMPERIAL ARAMAIC LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc4b"},67660:{"value":"1084C","name":"IMPERIAL ARAMAIC LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc4c"},67661:{"value":"1084D","name":"IMPERIAL ARAMAIC LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc4d"},67662:{"value":"1084E","name":"IMPERIAL ARAMAIC LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc4e"},67663:{"value":"1084F","name":"IMPERIAL ARAMAIC LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc4f"},67664:{"value":"10850","name":"IMPERIAL ARAMAIC LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc50"},67665:{"value":"10851","name":"IMPERIAL ARAMAIC LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc51"},67666:{"value":"10852","name":"IMPERIAL ARAMAIC LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc52"},67667:{"value":"10853","name":"IMPERIAL ARAMAIC LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc53"},67668:{"value":"10854","name":"IMPERIAL ARAMAIC LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc54"},67669:{"value":"10855","name":"IMPERIAL ARAMAIC LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc55"},67680:{"value":"10860","name":"PALMYRENE LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc60"},67681:{"value":"10861","name":"PALMYRENE LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc61"},67682:{"value":"10862","name":"PALMYRENE LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc62"},67683:{"value":"10863","name":"PALMYRENE LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc63"},67684:{"value":"10864","name":"PALMYRENE LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc64"},67685:{"value":"10865","name":"PALMYRENE LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc65"},67686:{"value":"10866","name":"PALMYRENE LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc66"},67687:{"value":"10867","name":"PALMYRENE LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc67"},67688:{"value":"10868","name":"PALMYRENE LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc68"},67689:{"value":"10869","name":"PALMYRENE LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc69"},67690:{"value":"1086A","name":"PALMYRENE LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc6a"},67691:{"value":"1086B","name":"PALMYRENE LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc6b"},67692:{"value":"1086C","name":"PALMYRENE LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc6c"},67693:{"value":"1086D","name":"PALMYRENE LETTER FINAL NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc6d"},67694:{"value":"1086E","name":"PALMYRENE LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc6e"},67695:{"value":"1086F","name":"PALMYRENE LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc6f"},67696:{"value":"10870","name":"PALMYRENE LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc70"},67697:{"value":"10871","name":"PALMYRENE LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc71"},67698:{"value":"10872","name":"PALMYRENE LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc72"},67699:{"value":"10873","name":"PALMYRENE LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc73"},67700:{"value":"10874","name":"PALMYRENE LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc74"},67701:{"value":"10875","name":"PALMYRENE LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc75"},67702:{"value":"10876","name":"PALMYRENE LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc76"},67712:{"value":"10880","name":"NABATAEAN LETTER FINAL ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc80"},67713:{"value":"10881","name":"NABATAEAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc81"},67714:{"value":"10882","name":"NABATAEAN LETTER FINAL BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc82"},67715:{"value":"10883","name":"NABATAEAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc83"},67716:{"value":"10884","name":"NABATAEAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc84"},67717:{"value":"10885","name":"NABATAEAN LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc85"},67718:{"value":"10886","name":"NABATAEAN LETTER FINAL HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc86"},67719:{"value":"10887","name":"NABATAEAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc87"},67720:{"value":"10888","name":"NABATAEAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc88"},67721:{"value":"10889","name":"NABATAEAN LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc89"},67722:{"value":"1088A","name":"NABATAEAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc8a"},67723:{"value":"1088B","name":"NABATAEAN LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc8b"},67724:{"value":"1088C","name":"NABATAEAN LETTER FINAL YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc8c"},67725:{"value":"1088D","name":"NABATAEAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc8d"},67726:{"value":"1088E","name":"NABATAEAN LETTER FINAL KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc8e"},67727:{"value":"1088F","name":"NABATAEAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc8f"},67728:{"value":"10890","name":"NABATAEAN LETTER FINAL LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc90"},67729:{"value":"10891","name":"NABATAEAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc91"},67730:{"value":"10892","name":"NABATAEAN LETTER FINAL MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc92"},67731:{"value":"10893","name":"NABATAEAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc93"},67732:{"value":"10894","name":"NABATAEAN LETTER FINAL NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc94"},67733:{"value":"10895","name":"NABATAEAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc95"},67734:{"value":"10896","name":"NABATAEAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc96"},67735:{"value":"10897","name":"NABATAEAN LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc97"},67736:{"value":"10898","name":"NABATAEAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc98"},67737:{"value":"10899","name":"NABATAEAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc99"},67738:{"value":"1089A","name":"NABATAEAN LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc9a"},67739:{"value":"1089B","name":"NABATAEAN LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc9b"},67740:{"value":"1089C","name":"NABATAEAN LETTER FINAL SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc9c"},67741:{"value":"1089D","name":"NABATAEAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc9d"},67742:{"value":"1089E","name":"NABATAEAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc9e"},67808:{"value":"108E0","name":"HATRAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce0"},67809:{"value":"108E1","name":"HATRAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce1"},67810:{"value":"108E2","name":"HATRAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce2"},67811:{"value":"108E3","name":"HATRAN LETTER DALETH-RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce3"},67812:{"value":"108E4","name":"HATRAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce4"},67813:{"value":"108E5","name":"HATRAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce5"},67814:{"value":"108E6","name":"HATRAN LETTER ZAYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce6"},67815:{"value":"108E7","name":"HATRAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce7"},67816:{"value":"108E8","name":"HATRAN LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce8"},67817:{"value":"108E9","name":"HATRAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udce9"},67818:{"value":"108EA","name":"HATRAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcea"},67819:{"value":"108EB","name":"HATRAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udceb"},67820:{"value":"108EC","name":"HATRAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcec"},67821:{"value":"108ED","name":"HATRAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udced"},67822:{"value":"108EE","name":"HATRAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcee"},67823:{"value":"108EF","name":"HATRAN LETTER AYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcef"},67824:{"value":"108F0","name":"HATRAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcf0"},67825:{"value":"108F1","name":"HATRAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcf1"},67826:{"value":"108F2","name":"HATRAN LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcf2"},67828:{"value":"108F4","name":"HATRAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcf4"},67829:{"value":"108F5","name":"HATRAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcf5"},67840:{"value":"10900","name":"PHOENICIAN LETTER ALF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd00"},67841:{"value":"10901","name":"PHOENICIAN LETTER BET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd01"},67842:{"value":"10902","name":"PHOENICIAN LETTER GAML","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd02"},67843:{"value":"10903","name":"PHOENICIAN LETTER DELT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd03"},67844:{"value":"10904","name":"PHOENICIAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd04"},67845:{"value":"10905","name":"PHOENICIAN LETTER WAU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd05"},67846:{"value":"10906","name":"PHOENICIAN LETTER ZAI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd06"},67847:{"value":"10907","name":"PHOENICIAN LETTER HET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd07"},67848:{"value":"10908","name":"PHOENICIAN LETTER TET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd08"},67849:{"value":"10909","name":"PHOENICIAN LETTER YOD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd09"},67850:{"value":"1090A","name":"PHOENICIAN LETTER KAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd0a"},67851:{"value":"1090B","name":"PHOENICIAN LETTER LAMD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd0b"},67852:{"value":"1090C","name":"PHOENICIAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd0c"},67853:{"value":"1090D","name":"PHOENICIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd0d"},67854:{"value":"1090E","name":"PHOENICIAN LETTER SEMK","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd0e"},67855:{"value":"1090F","name":"PHOENICIAN LETTER AIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd0f"},67856:{"value":"10910","name":"PHOENICIAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd10"},67857:{"value":"10911","name":"PHOENICIAN LETTER SADE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd11"},67858:{"value":"10912","name":"PHOENICIAN LETTER QOF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd12"},67859:{"value":"10913","name":"PHOENICIAN LETTER ROSH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd13"},67860:{"value":"10914","name":"PHOENICIAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd14"},67861:{"value":"10915","name":"PHOENICIAN LETTER TAU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd15"},67872:{"value":"10920","name":"LYDIAN LETTER A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd20"},67873:{"value":"10921","name":"LYDIAN LETTER B","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd21"},67874:{"value":"10922","name":"LYDIAN LETTER G","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd22"},67875:{"value":"10923","name":"LYDIAN LETTER D","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd23"},67876:{"value":"10924","name":"LYDIAN LETTER E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd24"},67877:{"value":"10925","name":"LYDIAN LETTER V","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd25"},67878:{"value":"10926","name":"LYDIAN LETTER I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd26"},67879:{"value":"10927","name":"LYDIAN LETTER Y","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd27"},67880:{"value":"10928","name":"LYDIAN LETTER K","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd28"},67881:{"value":"10929","name":"LYDIAN LETTER L","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd29"},67882:{"value":"1092A","name":"LYDIAN LETTER M","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd2a"},67883:{"value":"1092B","name":"LYDIAN LETTER N","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd2b"},67884:{"value":"1092C","name":"LYDIAN LETTER O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd2c"},67885:{"value":"1092D","name":"LYDIAN LETTER R","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd2d"},67886:{"value":"1092E","name":"LYDIAN LETTER SS","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd2e"},67887:{"value":"1092F","name":"LYDIAN LETTER T","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd2f"},67888:{"value":"10930","name":"LYDIAN LETTER U","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd30"},67889:{"value":"10931","name":"LYDIAN LETTER F","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd31"},67890:{"value":"10932","name":"LYDIAN LETTER Q","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd32"},67891:{"value":"10933","name":"LYDIAN LETTER S","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd33"},67892:{"value":"10934","name":"LYDIAN LETTER TT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd34"},67893:{"value":"10935","name":"LYDIAN LETTER AN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd35"},67894:{"value":"10936","name":"LYDIAN LETTER EN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd36"},67895:{"value":"10937","name":"LYDIAN LETTER LY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd37"},67896:{"value":"10938","name":"LYDIAN LETTER NN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd38"},67897:{"value":"10939","name":"LYDIAN LETTER C","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd39"},67968:{"value":"10980","name":"MEROITIC HIEROGLYPHIC LETTER A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd80"},67969:{"value":"10981","name":"MEROITIC HIEROGLYPHIC LETTER E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd81"},67970:{"value":"10982","name":"MEROITIC HIEROGLYPHIC LETTER I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd82"},67971:{"value":"10983","name":"MEROITIC HIEROGLYPHIC LETTER O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd83"},67972:{"value":"10984","name":"MEROITIC HIEROGLYPHIC LETTER YA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd84"},67973:{"value":"10985","name":"MEROITIC HIEROGLYPHIC LETTER WA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd85"},67974:{"value":"10986","name":"MEROITIC HIEROGLYPHIC LETTER BA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd86"},67975:{"value":"10987","name":"MEROITIC HIEROGLYPHIC LETTER BA-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd87"},67976:{"value":"10988","name":"MEROITIC HIEROGLYPHIC LETTER PA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd88"},67977:{"value":"10989","name":"MEROITIC HIEROGLYPHIC LETTER MA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd89"},67978:{"value":"1098A","name":"MEROITIC HIEROGLYPHIC LETTER NA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd8a"},67979:{"value":"1098B","name":"MEROITIC HIEROGLYPHIC LETTER NA-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd8b"},67980:{"value":"1098C","name":"MEROITIC HIEROGLYPHIC LETTER NE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd8c"},67981:{"value":"1098D","name":"MEROITIC HIEROGLYPHIC LETTER NE-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd8d"},67982:{"value":"1098E","name":"MEROITIC HIEROGLYPHIC LETTER RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd8e"},67983:{"value":"1098F","name":"MEROITIC HIEROGLYPHIC LETTER RA-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd8f"},67984:{"value":"10990","name":"MEROITIC HIEROGLYPHIC LETTER LA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd90"},67985:{"value":"10991","name":"MEROITIC HIEROGLYPHIC LETTER KHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd91"},67986:{"value":"10992","name":"MEROITIC HIEROGLYPHIC LETTER HHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd92"},67987:{"value":"10993","name":"MEROITIC HIEROGLYPHIC LETTER SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd93"},67988:{"value":"10994","name":"MEROITIC HIEROGLYPHIC LETTER SA-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd94"},67989:{"value":"10995","name":"MEROITIC HIEROGLYPHIC LETTER SE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd95"},67990:{"value":"10996","name":"MEROITIC HIEROGLYPHIC LETTER KA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd96"},67991:{"value":"10997","name":"MEROITIC HIEROGLYPHIC LETTER QA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd97"},67992:{"value":"10998","name":"MEROITIC HIEROGLYPHIC LETTER TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd98"},67993:{"value":"10999","name":"MEROITIC HIEROGLYPHIC LETTER TA-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd99"},67994:{"value":"1099A","name":"MEROITIC HIEROGLYPHIC LETTER TE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd9a"},67995:{"value":"1099B","name":"MEROITIC HIEROGLYPHIC LETTER TE-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd9b"},67996:{"value":"1099C","name":"MEROITIC HIEROGLYPHIC LETTER TO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd9c"},67997:{"value":"1099D","name":"MEROITIC HIEROGLYPHIC LETTER DA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd9d"},67998:{"value":"1099E","name":"MEROITIC HIEROGLYPHIC SYMBOL VIDJ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd9e"},67999:{"value":"1099F","name":"MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd9f"},68000:{"value":"109A0","name":"MEROITIC CURSIVE LETTER A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda0"},68001:{"value":"109A1","name":"MEROITIC CURSIVE LETTER E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda1"},68002:{"value":"109A2","name":"MEROITIC CURSIVE LETTER I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda2"},68003:{"value":"109A3","name":"MEROITIC CURSIVE LETTER O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda3"},68004:{"value":"109A4","name":"MEROITIC CURSIVE LETTER YA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda4"},68005:{"value":"109A5","name":"MEROITIC CURSIVE LETTER WA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda5"},68006:{"value":"109A6","name":"MEROITIC CURSIVE LETTER BA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda6"},68007:{"value":"109A7","name":"MEROITIC CURSIVE LETTER PA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda7"},68008:{"value":"109A8","name":"MEROITIC CURSIVE LETTER MA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda8"},68009:{"value":"109A9","name":"MEROITIC CURSIVE LETTER NA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udda9"},68010:{"value":"109AA","name":"MEROITIC CURSIVE LETTER NE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddaa"},68011:{"value":"109AB","name":"MEROITIC CURSIVE LETTER RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddab"},68012:{"value":"109AC","name":"MEROITIC CURSIVE LETTER LA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddac"},68013:{"value":"109AD","name":"MEROITIC CURSIVE LETTER KHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddad"},68014:{"value":"109AE","name":"MEROITIC CURSIVE LETTER HHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddae"},68015:{"value":"109AF","name":"MEROITIC CURSIVE LETTER SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddaf"},68016:{"value":"109B0","name":"MEROITIC CURSIVE LETTER ARCHAIC SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb0"},68017:{"value":"109B1","name":"MEROITIC CURSIVE LETTER SE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb1"},68018:{"value":"109B2","name":"MEROITIC CURSIVE LETTER KA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb2"},68019:{"value":"109B3","name":"MEROITIC CURSIVE LETTER QA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb3"},68020:{"value":"109B4","name":"MEROITIC CURSIVE LETTER TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb4"},68021:{"value":"109B5","name":"MEROITIC CURSIVE LETTER TE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb5"},68022:{"value":"109B6","name":"MEROITIC CURSIVE LETTER TO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb6"},68023:{"value":"109B7","name":"MEROITIC CURSIVE LETTER DA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddb7"},68030:{"value":"109BE","name":"MEROITIC CURSIVE LOGOGRAM RMT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddbe"},68031:{"value":"109BF","name":"MEROITIC CURSIVE LOGOGRAM IMN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddbf"},68096:{"value":"10A00","name":"KHAROSHTHI LETTER A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude00"},68112:{"value":"10A10","name":"KHAROSHTHI LETTER KA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude10"},68113:{"value":"10A11","name":"KHAROSHTHI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude11"},68114:{"value":"10A12","name":"KHAROSHTHI LETTER GA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude12"},68115:{"value":"10A13","name":"KHAROSHTHI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude13"},68117:{"value":"10A15","name":"KHAROSHTHI LETTER CA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude15"},68118:{"value":"10A16","name":"KHAROSHTHI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude16"},68119:{"value":"10A17","name":"KHAROSHTHI LETTER JA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude17"},68121:{"value":"10A19","name":"KHAROSHTHI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude19"},68122:{"value":"10A1A","name":"KHAROSHTHI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude1a"},68123:{"value":"10A1B","name":"KHAROSHTHI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude1b"},68124:{"value":"10A1C","name":"KHAROSHTHI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude1c"},68125:{"value":"10A1D","name":"KHAROSHTHI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude1d"},68126:{"value":"10A1E","name":"KHAROSHTHI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude1e"},68127:{"value":"10A1F","name":"KHAROSHTHI LETTER TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude1f"},68128:{"value":"10A20","name":"KHAROSHTHI LETTER THA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude20"},68129:{"value":"10A21","name":"KHAROSHTHI LETTER DA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude21"},68130:{"value":"10A22","name":"KHAROSHTHI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude22"},68131:{"value":"10A23","name":"KHAROSHTHI LETTER NA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude23"},68132:{"value":"10A24","name":"KHAROSHTHI LETTER PA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude24"},68133:{"value":"10A25","name":"KHAROSHTHI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude25"},68134:{"value":"10A26","name":"KHAROSHTHI LETTER BA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude26"},68135:{"value":"10A27","name":"KHAROSHTHI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude27"},68136:{"value":"10A28","name":"KHAROSHTHI LETTER MA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude28"},68137:{"value":"10A29","name":"KHAROSHTHI LETTER YA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude29"},68138:{"value":"10A2A","name":"KHAROSHTHI LETTER RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude2a"},68139:{"value":"10A2B","name":"KHAROSHTHI LETTER LA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude2b"},68140:{"value":"10A2C","name":"KHAROSHTHI LETTER VA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude2c"},68141:{"value":"10A2D","name":"KHAROSHTHI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude2d"},68142:{"value":"10A2E","name":"KHAROSHTHI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude2e"},68143:{"value":"10A2F","name":"KHAROSHTHI LETTER SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude2f"},68144:{"value":"10A30","name":"KHAROSHTHI LETTER ZA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude30"},68145:{"value":"10A31","name":"KHAROSHTHI LETTER HA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude31"},68146:{"value":"10A32","name":"KHAROSHTHI LETTER KKA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude32"},68147:{"value":"10A33","name":"KHAROSHTHI LETTER TTTHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude33"},68148:{"value":"10A34","name":"KHAROSHTHI LETTER TTTA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude34"},68149:{"value":"10A35","name":"KHAROSHTHI LETTER VHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude35"},68192:{"value":"10A60","name":"OLD SOUTH ARABIAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude60"},68193:{"value":"10A61","name":"OLD SOUTH ARABIAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude61"},68194:{"value":"10A62","name":"OLD SOUTH ARABIAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude62"},68195:{"value":"10A63","name":"OLD SOUTH ARABIAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude63"},68196:{"value":"10A64","name":"OLD SOUTH ARABIAN LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude64"},68197:{"value":"10A65","name":"OLD SOUTH ARABIAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude65"},68198:{"value":"10A66","name":"OLD SOUTH ARABIAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude66"},68199:{"value":"10A67","name":"OLD SOUTH ARABIAN LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude67"},68200:{"value":"10A68","name":"OLD SOUTH ARABIAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude68"},68201:{"value":"10A69","name":"OLD SOUTH ARABIAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude69"},68202:{"value":"10A6A","name":"OLD SOUTH ARABIAN LETTER SAT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude6a"},68203:{"value":"10A6B","name":"OLD SOUTH ARABIAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude6b"},68204:{"value":"10A6C","name":"OLD SOUTH ARABIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude6c"},68205:{"value":"10A6D","name":"OLD SOUTH ARABIAN LETTER KHETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude6d"},68206:{"value":"10A6E","name":"OLD SOUTH ARABIAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude6e"},68207:{"value":"10A6F","name":"OLD SOUTH ARABIAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude6f"},68208:{"value":"10A70","name":"OLD SOUTH ARABIAN LETTER FE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude70"},68209:{"value":"10A71","name":"OLD SOUTH ARABIAN LETTER ALEF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude71"},68210:{"value":"10A72","name":"OLD SOUTH ARABIAN LETTER AYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude72"},68211:{"value":"10A73","name":"OLD SOUTH ARABIAN LETTER DHADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude73"},68212:{"value":"10A74","name":"OLD SOUTH ARABIAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude74"},68213:{"value":"10A75","name":"OLD SOUTH ARABIAN LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude75"},68214:{"value":"10A76","name":"OLD SOUTH ARABIAN LETTER GHAYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude76"},68215:{"value":"10A77","name":"OLD SOUTH ARABIAN LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude77"},68216:{"value":"10A78","name":"OLD SOUTH ARABIAN LETTER ZAYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude78"},68217:{"value":"10A79","name":"OLD SOUTH ARABIAN LETTER DHALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude79"},68218:{"value":"10A7A","name":"OLD SOUTH ARABIAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude7a"},68219:{"value":"10A7B","name":"OLD SOUTH ARABIAN LETTER THAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude7b"},68220:{"value":"10A7C","name":"OLD SOUTH ARABIAN LETTER THETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude7c"},68224:{"value":"10A80","name":"OLD NORTH ARABIAN LETTER HEH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude80"},68225:{"value":"10A81","name":"OLD NORTH ARABIAN LETTER LAM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude81"},68226:{"value":"10A82","name":"OLD NORTH ARABIAN LETTER HAH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude82"},68227:{"value":"10A83","name":"OLD NORTH ARABIAN LETTER MEEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude83"},68228:{"value":"10A84","name":"OLD NORTH ARABIAN LETTER QAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude84"},68229:{"value":"10A85","name":"OLD NORTH ARABIAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude85"},68230:{"value":"10A86","name":"OLD NORTH ARABIAN LETTER ES-2","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude86"},68231:{"value":"10A87","name":"OLD NORTH ARABIAN LETTER REH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude87"},68232:{"value":"10A88","name":"OLD NORTH ARABIAN LETTER BEH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude88"},68233:{"value":"10A89","name":"OLD NORTH ARABIAN LETTER TEH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude89"},68234:{"value":"10A8A","name":"OLD NORTH ARABIAN LETTER ES-1","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude8a"},68235:{"value":"10A8B","name":"OLD NORTH ARABIAN LETTER KAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude8b"},68236:{"value":"10A8C","name":"OLD NORTH ARABIAN LETTER NOON","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude8c"},68237:{"value":"10A8D","name":"OLD NORTH ARABIAN LETTER KHAH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude8d"},68238:{"value":"10A8E","name":"OLD NORTH ARABIAN LETTER SAD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude8e"},68239:{"value":"10A8F","name":"OLD NORTH ARABIAN LETTER ES-3","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude8f"},68240:{"value":"10A90","name":"OLD NORTH ARABIAN LETTER FEH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude90"},68241:{"value":"10A91","name":"OLD NORTH ARABIAN LETTER ALEF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude91"},68242:{"value":"10A92","name":"OLD NORTH ARABIAN LETTER AIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude92"},68243:{"value":"10A93","name":"OLD NORTH ARABIAN LETTER DAD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude93"},68244:{"value":"10A94","name":"OLD NORTH ARABIAN LETTER GEEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude94"},68245:{"value":"10A95","name":"OLD NORTH ARABIAN LETTER DAL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude95"},68246:{"value":"10A96","name":"OLD NORTH ARABIAN LETTER GHAIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude96"},68247:{"value":"10A97","name":"OLD NORTH ARABIAN LETTER TAH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude97"},68248:{"value":"10A98","name":"OLD NORTH ARABIAN LETTER ZAIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude98"},68249:{"value":"10A99","name":"OLD NORTH ARABIAN LETTER THAL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude99"},68250:{"value":"10A9A","name":"OLD NORTH ARABIAN LETTER YEH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude9a"},68251:{"value":"10A9B","name":"OLD NORTH ARABIAN LETTER THEH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude9b"},68252:{"value":"10A9C","name":"OLD NORTH ARABIAN LETTER ZAH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude9c"},68288:{"value":"10AC0","name":"MANICHAEAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec0"},68289:{"value":"10AC1","name":"MANICHAEAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec1"},68290:{"value":"10AC2","name":"MANICHAEAN LETTER BHETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec2"},68291:{"value":"10AC3","name":"MANICHAEAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec3"},68292:{"value":"10AC4","name":"MANICHAEAN LETTER GHIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec4"},68293:{"value":"10AC5","name":"MANICHAEAN LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec5"},68294:{"value":"10AC6","name":"MANICHAEAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec6"},68295:{"value":"10AC7","name":"MANICHAEAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec7"},68297:{"value":"10AC9","name":"MANICHAEAN LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec9"},68298:{"value":"10ACA","name":"MANICHAEAN LETTER ZHAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeca"},68299:{"value":"10ACB","name":"MANICHAEAN LETTER JAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udecb"},68300:{"value":"10ACC","name":"MANICHAEAN LETTER JHAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udecc"},68301:{"value":"10ACD","name":"MANICHAEAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udecd"},68302:{"value":"10ACE","name":"MANICHAEAN LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udece"},68303:{"value":"10ACF","name":"MANICHAEAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udecf"},68304:{"value":"10AD0","name":"MANICHAEAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded0"},68305:{"value":"10AD1","name":"MANICHAEAN LETTER XAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded1"},68306:{"value":"10AD2","name":"MANICHAEAN LETTER KHAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded2"},68307:{"value":"10AD3","name":"MANICHAEAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded3"},68308:{"value":"10AD4","name":"MANICHAEAN LETTER DHAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded4"},68309:{"value":"10AD5","name":"MANICHAEAN LETTER THAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded5"},68310:{"value":"10AD6","name":"MANICHAEAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded6"},68311:{"value":"10AD7","name":"MANICHAEAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded7"},68312:{"value":"10AD8","name":"MANICHAEAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded8"},68313:{"value":"10AD9","name":"MANICHAEAN LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uded9"},68314:{"value":"10ADA","name":"MANICHAEAN LETTER AAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeda"},68315:{"value":"10ADB","name":"MANICHAEAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udedb"},68316:{"value":"10ADC","name":"MANICHAEAN LETTER FE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udedc"},68317:{"value":"10ADD","name":"MANICHAEAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udedd"},68318:{"value":"10ADE","name":"MANICHAEAN LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udede"},68319:{"value":"10ADF","name":"MANICHAEAN LETTER XOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udedf"},68320:{"value":"10AE0","name":"MANICHAEAN LETTER QHOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee0"},68321:{"value":"10AE1","name":"MANICHAEAN LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee1"},68322:{"value":"10AE2","name":"MANICHAEAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee2"},68323:{"value":"10AE3","name":"MANICHAEAN LETTER SSHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee3"},68324:{"value":"10AE4","name":"MANICHAEAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee4"},68352:{"value":"10B00","name":"AVESTAN LETTER A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf00"},68353:{"value":"10B01","name":"AVESTAN LETTER AA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf01"},68354:{"value":"10B02","name":"AVESTAN LETTER AO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf02"},68355:{"value":"10B03","name":"AVESTAN LETTER AAO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf03"},68356:{"value":"10B04","name":"AVESTAN LETTER AN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf04"},68357:{"value":"10B05","name":"AVESTAN LETTER AAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf05"},68358:{"value":"10B06","name":"AVESTAN LETTER AE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf06"},68359:{"value":"10B07","name":"AVESTAN LETTER AEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf07"},68360:{"value":"10B08","name":"AVESTAN LETTER E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf08"},68361:{"value":"10B09","name":"AVESTAN LETTER EE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf09"},68362:{"value":"10B0A","name":"AVESTAN LETTER O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf0a"},68363:{"value":"10B0B","name":"AVESTAN LETTER OO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf0b"},68364:{"value":"10B0C","name":"AVESTAN LETTER I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf0c"},68365:{"value":"10B0D","name":"AVESTAN LETTER II","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf0d"},68366:{"value":"10B0E","name":"AVESTAN LETTER U","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf0e"},68367:{"value":"10B0F","name":"AVESTAN LETTER UU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf0f"},68368:{"value":"10B10","name":"AVESTAN LETTER KE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf10"},68369:{"value":"10B11","name":"AVESTAN LETTER XE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf11"},68370:{"value":"10B12","name":"AVESTAN LETTER XYE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf12"},68371:{"value":"10B13","name":"AVESTAN LETTER XVE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf13"},68372:{"value":"10B14","name":"AVESTAN LETTER GE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf14"},68373:{"value":"10B15","name":"AVESTAN LETTER GGE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf15"},68374:{"value":"10B16","name":"AVESTAN LETTER GHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf16"},68375:{"value":"10B17","name":"AVESTAN LETTER CE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf17"},68376:{"value":"10B18","name":"AVESTAN LETTER JE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf18"},68377:{"value":"10B19","name":"AVESTAN LETTER TE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf19"},68378:{"value":"10B1A","name":"AVESTAN LETTER THE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf1a"},68379:{"value":"10B1B","name":"AVESTAN LETTER DE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf1b"},68380:{"value":"10B1C","name":"AVESTAN LETTER DHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf1c"},68381:{"value":"10B1D","name":"AVESTAN LETTER TTE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf1d"},68382:{"value":"10B1E","name":"AVESTAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf1e"},68383:{"value":"10B1F","name":"AVESTAN LETTER FE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf1f"},68384:{"value":"10B20","name":"AVESTAN LETTER BE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf20"},68385:{"value":"10B21","name":"AVESTAN LETTER BHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf21"},68386:{"value":"10B22","name":"AVESTAN LETTER NGE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf22"},68387:{"value":"10B23","name":"AVESTAN LETTER NGYE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf23"},68388:{"value":"10B24","name":"AVESTAN LETTER NGVE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf24"},68389:{"value":"10B25","name":"AVESTAN LETTER NE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf25"},68390:{"value":"10B26","name":"AVESTAN LETTER NYE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf26"},68391:{"value":"10B27","name":"AVESTAN LETTER NNE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf27"},68392:{"value":"10B28","name":"AVESTAN LETTER ME","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf28"},68393:{"value":"10B29","name":"AVESTAN LETTER HME","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf29"},68394:{"value":"10B2A","name":"AVESTAN LETTER YYE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf2a"},68395:{"value":"10B2B","name":"AVESTAN LETTER YE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf2b"},68396:{"value":"10B2C","name":"AVESTAN LETTER VE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf2c"},68397:{"value":"10B2D","name":"AVESTAN LETTER RE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf2d"},68398:{"value":"10B2E","name":"AVESTAN LETTER LE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf2e"},68399:{"value":"10B2F","name":"AVESTAN LETTER SE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf2f"},68400:{"value":"10B30","name":"AVESTAN LETTER ZE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf30"},68401:{"value":"10B31","name":"AVESTAN LETTER SHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf31"},68402:{"value":"10B32","name":"AVESTAN LETTER ZHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf32"},68403:{"value":"10B33","name":"AVESTAN LETTER SHYE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf33"},68404:{"value":"10B34","name":"AVESTAN LETTER SSHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf34"},68405:{"value":"10B35","name":"AVESTAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf35"},68416:{"value":"10B40","name":"INSCRIPTIONAL PARTHIAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf40"},68417:{"value":"10B41","name":"INSCRIPTIONAL PARTHIAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf41"},68418:{"value":"10B42","name":"INSCRIPTIONAL PARTHIAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf42"},68419:{"value":"10B43","name":"INSCRIPTIONAL PARTHIAN LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf43"},68420:{"value":"10B44","name":"INSCRIPTIONAL PARTHIAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf44"},68421:{"value":"10B45","name":"INSCRIPTIONAL PARTHIAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf45"},68422:{"value":"10B46","name":"INSCRIPTIONAL PARTHIAN LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf46"},68423:{"value":"10B47","name":"INSCRIPTIONAL PARTHIAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf47"},68424:{"value":"10B48","name":"INSCRIPTIONAL PARTHIAN LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf48"},68425:{"value":"10B49","name":"INSCRIPTIONAL PARTHIAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf49"},68426:{"value":"10B4A","name":"INSCRIPTIONAL PARTHIAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf4a"},68427:{"value":"10B4B","name":"INSCRIPTIONAL PARTHIAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf4b"},68428:{"value":"10B4C","name":"INSCRIPTIONAL PARTHIAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf4c"},68429:{"value":"10B4D","name":"INSCRIPTIONAL PARTHIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf4d"},68430:{"value":"10B4E","name":"INSCRIPTIONAL PARTHIAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf4e"},68431:{"value":"10B4F","name":"INSCRIPTIONAL PARTHIAN LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf4f"},68432:{"value":"10B50","name":"INSCRIPTIONAL PARTHIAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf50"},68433:{"value":"10B51","name":"INSCRIPTIONAL PARTHIAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf51"},68434:{"value":"10B52","name":"INSCRIPTIONAL PARTHIAN LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf52"},68435:{"value":"10B53","name":"INSCRIPTIONAL PARTHIAN LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf53"},68436:{"value":"10B54","name":"INSCRIPTIONAL PARTHIAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf54"},68437:{"value":"10B55","name":"INSCRIPTIONAL PARTHIAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf55"},68448:{"value":"10B60","name":"INSCRIPTIONAL PAHLAVI LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf60"},68449:{"value":"10B61","name":"INSCRIPTIONAL PAHLAVI LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf61"},68450:{"value":"10B62","name":"INSCRIPTIONAL PAHLAVI LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf62"},68451:{"value":"10B63","name":"INSCRIPTIONAL PAHLAVI LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf63"},68452:{"value":"10B64","name":"INSCRIPTIONAL PAHLAVI LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf64"},68453:{"value":"10B65","name":"INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf65"},68454:{"value":"10B66","name":"INSCRIPTIONAL PAHLAVI LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf66"},68455:{"value":"10B67","name":"INSCRIPTIONAL PAHLAVI LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf67"},68456:{"value":"10B68","name":"INSCRIPTIONAL PAHLAVI LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf68"},68457:{"value":"10B69","name":"INSCRIPTIONAL PAHLAVI LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf69"},68458:{"value":"10B6A","name":"INSCRIPTIONAL PAHLAVI LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf6a"},68459:{"value":"10B6B","name":"INSCRIPTIONAL PAHLAVI LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf6b"},68460:{"value":"10B6C","name":"INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf6c"},68461:{"value":"10B6D","name":"INSCRIPTIONAL PAHLAVI LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf6d"},68462:{"value":"10B6E","name":"INSCRIPTIONAL PAHLAVI LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf6e"},68463:{"value":"10B6F","name":"INSCRIPTIONAL PAHLAVI LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf6f"},68464:{"value":"10B70","name":"INSCRIPTIONAL PAHLAVI LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf70"},68465:{"value":"10B71","name":"INSCRIPTIONAL PAHLAVI LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf71"},68466:{"value":"10B72","name":"INSCRIPTIONAL PAHLAVI LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf72"},68480:{"value":"10B80","name":"PSALTER PAHLAVI LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf80"},68481:{"value":"10B81","name":"PSALTER PAHLAVI LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf81"},68482:{"value":"10B82","name":"PSALTER PAHLAVI LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf82"},68483:{"value":"10B83","name":"PSALTER PAHLAVI LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf83"},68484:{"value":"10B84","name":"PSALTER PAHLAVI LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf84"},68485:{"value":"10B85","name":"PSALTER PAHLAVI LETTER WAW-AYIN-RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf85"},68486:{"value":"10B86","name":"PSALTER PAHLAVI LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf86"},68487:{"value":"10B87","name":"PSALTER PAHLAVI LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf87"},68488:{"value":"10B88","name":"PSALTER PAHLAVI LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf88"},68489:{"value":"10B89","name":"PSALTER PAHLAVI LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf89"},68490:{"value":"10B8A","name":"PSALTER PAHLAVI LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf8a"},68491:{"value":"10B8B","name":"PSALTER PAHLAVI LETTER MEM-QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf8b"},68492:{"value":"10B8C","name":"PSALTER PAHLAVI LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf8c"},68493:{"value":"10B8D","name":"PSALTER PAHLAVI LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf8d"},68494:{"value":"10B8E","name":"PSALTER PAHLAVI LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf8e"},68495:{"value":"10B8F","name":"PSALTER PAHLAVI LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf8f"},68496:{"value":"10B90","name":"PSALTER PAHLAVI LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf90"},68497:{"value":"10B91","name":"PSALTER PAHLAVI LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf91"},68608:{"value":"10C00","name":"OLD TURKIC LETTER ORKHON A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc00"},68609:{"value":"10C01","name":"OLD TURKIC LETTER YENISEI A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc01"},68610:{"value":"10C02","name":"OLD TURKIC LETTER YENISEI AE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc02"},68611:{"value":"10C03","name":"OLD TURKIC LETTER ORKHON I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc03"},68612:{"value":"10C04","name":"OLD TURKIC LETTER YENISEI I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc04"},68613:{"value":"10C05","name":"OLD TURKIC LETTER YENISEI E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc05"},68614:{"value":"10C06","name":"OLD TURKIC LETTER ORKHON O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc06"},68615:{"value":"10C07","name":"OLD TURKIC LETTER ORKHON OE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc07"},68616:{"value":"10C08","name":"OLD TURKIC LETTER YENISEI OE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc08"},68617:{"value":"10C09","name":"OLD TURKIC LETTER ORKHON AB","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc09"},68618:{"value":"10C0A","name":"OLD TURKIC LETTER YENISEI AB","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc0a"},68619:{"value":"10C0B","name":"OLD TURKIC LETTER ORKHON AEB","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc0b"},68620:{"value":"10C0C","name":"OLD TURKIC LETTER YENISEI AEB","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc0c"},68621:{"value":"10C0D","name":"OLD TURKIC LETTER ORKHON AG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc0d"},68622:{"value":"10C0E","name":"OLD TURKIC LETTER YENISEI AG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc0e"},68623:{"value":"10C0F","name":"OLD TURKIC LETTER ORKHON AEG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc0f"},68624:{"value":"10C10","name":"OLD TURKIC LETTER YENISEI AEG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc10"},68625:{"value":"10C11","name":"OLD TURKIC LETTER ORKHON AD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc11"},68626:{"value":"10C12","name":"OLD TURKIC LETTER YENISEI AD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc12"},68627:{"value":"10C13","name":"OLD TURKIC LETTER ORKHON AED","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc13"},68628:{"value":"10C14","name":"OLD TURKIC LETTER ORKHON EZ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc14"},68629:{"value":"10C15","name":"OLD TURKIC LETTER YENISEI EZ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc15"},68630:{"value":"10C16","name":"OLD TURKIC LETTER ORKHON AY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc16"},68631:{"value":"10C17","name":"OLD TURKIC LETTER YENISEI AY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc17"},68632:{"value":"10C18","name":"OLD TURKIC LETTER ORKHON AEY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc18"},68633:{"value":"10C19","name":"OLD TURKIC LETTER YENISEI AEY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc19"},68634:{"value":"10C1A","name":"OLD TURKIC LETTER ORKHON AEK","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc1a"},68635:{"value":"10C1B","name":"OLD TURKIC LETTER YENISEI AEK","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc1b"},68636:{"value":"10C1C","name":"OLD TURKIC LETTER ORKHON OEK","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc1c"},68637:{"value":"10C1D","name":"OLD TURKIC LETTER YENISEI OEK","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc1d"},68638:{"value":"10C1E","name":"OLD TURKIC LETTER ORKHON AL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc1e"},68639:{"value":"10C1F","name":"OLD TURKIC LETTER YENISEI AL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc1f"},68640:{"value":"10C20","name":"OLD TURKIC LETTER ORKHON AEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc20"},68641:{"value":"10C21","name":"OLD TURKIC LETTER ORKHON ELT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc21"},68642:{"value":"10C22","name":"OLD TURKIC LETTER ORKHON EM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc22"},68643:{"value":"10C23","name":"OLD TURKIC LETTER ORKHON AN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc23"},68644:{"value":"10C24","name":"OLD TURKIC LETTER ORKHON AEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc24"},68645:{"value":"10C25","name":"OLD TURKIC LETTER YENISEI AEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc25"},68646:{"value":"10C26","name":"OLD TURKIC LETTER ORKHON ENT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc26"},68647:{"value":"10C27","name":"OLD TURKIC LETTER YENISEI ENT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc27"},68648:{"value":"10C28","name":"OLD TURKIC LETTER ORKHON ENC","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc28"},68649:{"value":"10C29","name":"OLD TURKIC LETTER YENISEI ENC","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc29"},68650:{"value":"10C2A","name":"OLD TURKIC LETTER ORKHON ENY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc2a"},68651:{"value":"10C2B","name":"OLD TURKIC LETTER YENISEI ENY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc2b"},68652:{"value":"10C2C","name":"OLD TURKIC LETTER YENISEI ANG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc2c"},68653:{"value":"10C2D","name":"OLD TURKIC LETTER ORKHON ENG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc2d"},68654:{"value":"10C2E","name":"OLD TURKIC LETTER YENISEI AENG","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc2e"},68655:{"value":"10C2F","name":"OLD TURKIC LETTER ORKHON EP","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc2f"},68656:{"value":"10C30","name":"OLD TURKIC LETTER ORKHON OP","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc30"},68657:{"value":"10C31","name":"OLD TURKIC LETTER ORKHON IC","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc31"},68658:{"value":"10C32","name":"OLD TURKIC LETTER ORKHON EC","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc32"},68659:{"value":"10C33","name":"OLD TURKIC LETTER YENISEI EC","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc33"},68660:{"value":"10C34","name":"OLD TURKIC LETTER ORKHON AQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc34"},68661:{"value":"10C35","name":"OLD TURKIC LETTER YENISEI AQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc35"},68662:{"value":"10C36","name":"OLD TURKIC LETTER ORKHON IQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc36"},68663:{"value":"10C37","name":"OLD TURKIC LETTER YENISEI IQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc37"},68664:{"value":"10C38","name":"OLD TURKIC LETTER ORKHON OQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc38"},68665:{"value":"10C39","name":"OLD TURKIC LETTER YENISEI OQ","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc39"},68666:{"value":"10C3A","name":"OLD TURKIC LETTER ORKHON AR","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc3a"},68667:{"value":"10C3B","name":"OLD TURKIC LETTER YENISEI AR","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc3b"},68668:{"value":"10C3C","name":"OLD TURKIC LETTER ORKHON AER","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc3c"},68669:{"value":"10C3D","name":"OLD TURKIC LETTER ORKHON AS","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc3d"},68670:{"value":"10C3E","name":"OLD TURKIC LETTER ORKHON AES","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc3e"},68671:{"value":"10C3F","name":"OLD TURKIC LETTER ORKHON ASH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc3f"},68672:{"value":"10C40","name":"OLD TURKIC LETTER YENISEI ASH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc40"},68673:{"value":"10C41","name":"OLD TURKIC LETTER ORKHON ESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc41"},68674:{"value":"10C42","name":"OLD TURKIC LETTER YENISEI ESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc42"},68675:{"value":"10C43","name":"OLD TURKIC LETTER ORKHON AT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc43"},68676:{"value":"10C44","name":"OLD TURKIC LETTER YENISEI AT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc44"},68677:{"value":"10C45","name":"OLD TURKIC LETTER ORKHON AET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc45"},68678:{"value":"10C46","name":"OLD TURKIC LETTER YENISEI AET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc46"},68679:{"value":"10C47","name":"OLD TURKIC LETTER ORKHON OT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc47"},68680:{"value":"10C48","name":"OLD TURKIC LETTER ORKHON BASH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udc48"},68864:{"value":"10D00","name":"HANIFI ROHINGYA LETTER A","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd00"},68865:{"value":"10D01","name":"HANIFI ROHINGYA LETTER BA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd01"},68866:{"value":"10D02","name":"HANIFI ROHINGYA LETTER PA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd02"},68867:{"value":"10D03","name":"HANIFI ROHINGYA LETTER TA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd03"},68868:{"value":"10D04","name":"HANIFI ROHINGYA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd04"},68869:{"value":"10D05","name":"HANIFI ROHINGYA LETTER JA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd05"},68870:{"value":"10D06","name":"HANIFI ROHINGYA LETTER CA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd06"},68871:{"value":"10D07","name":"HANIFI ROHINGYA LETTER HA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd07"},68872:{"value":"10D08","name":"HANIFI ROHINGYA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd08"},68873:{"value":"10D09","name":"HANIFI ROHINGYA LETTER FA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd09"},68874:{"value":"10D0A","name":"HANIFI ROHINGYA LETTER DA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd0a"},68875:{"value":"10D0B","name":"HANIFI ROHINGYA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd0b"},68876:{"value":"10D0C","name":"HANIFI ROHINGYA LETTER RA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd0c"},68877:{"value":"10D0D","name":"HANIFI ROHINGYA LETTER RRA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd0d"},68878:{"value":"10D0E","name":"HANIFI ROHINGYA LETTER ZA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd0e"},68879:{"value":"10D0F","name":"HANIFI ROHINGYA LETTER SA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd0f"},68880:{"value":"10D10","name":"HANIFI ROHINGYA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd10"},68881:{"value":"10D11","name":"HANIFI ROHINGYA LETTER KA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd11"},68882:{"value":"10D12","name":"HANIFI ROHINGYA LETTER GA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd12"},68883:{"value":"10D13","name":"HANIFI ROHINGYA LETTER LA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd13"},68884:{"value":"10D14","name":"HANIFI ROHINGYA LETTER MA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd14"},68885:{"value":"10D15","name":"HANIFI ROHINGYA LETTER NA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd15"},68886:{"value":"10D16","name":"HANIFI ROHINGYA LETTER WA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd16"},68887:{"value":"10D17","name":"HANIFI ROHINGYA LETTER KINNA WA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd17"},68888:{"value":"10D18","name":"HANIFI ROHINGYA LETTER YA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd18"},68889:{"value":"10D19","name":"HANIFI ROHINGYA LETTER KINNA YA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd19"},68890:{"value":"10D1A","name":"HANIFI ROHINGYA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd1a"},68891:{"value":"10D1B","name":"HANIFI ROHINGYA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd1b"},68892:{"value":"10D1C","name":"HANIFI ROHINGYA LETTER VA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd1c"},68893:{"value":"10D1D","name":"HANIFI ROHINGYA VOWEL A","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd1d"},68894:{"value":"10D1E","name":"HANIFI ROHINGYA VOWEL I","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd1e"},68895:{"value":"10D1F","name":"HANIFI ROHINGYA VOWEL U","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd1f"},68896:{"value":"10D20","name":"HANIFI ROHINGYA VOWEL E","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd20"},68897:{"value":"10D21","name":"HANIFI ROHINGYA VOWEL O","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd21"},68898:{"value":"10D22","name":"HANIFI ROHINGYA MARK SAKIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd22"},68899:{"value":"10D23","name":"HANIFI ROHINGYA MARK NA KHONNA","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd23"},69248:{"value":"10E80","name":"YEZIDI LETTER ELIF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude80"},69249:{"value":"10E81","name":"YEZIDI LETTER BE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude81"},69250:{"value":"10E82","name":"YEZIDI LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude82"},69251:{"value":"10E83","name":"YEZIDI LETTER PHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude83"},69252:{"value":"10E84","name":"YEZIDI LETTER THE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude84"},69253:{"value":"10E85","name":"YEZIDI LETTER SE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude85"},69254:{"value":"10E86","name":"YEZIDI LETTER CIM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude86"},69255:{"value":"10E87","name":"YEZIDI LETTER CHIM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude87"},69256:{"value":"10E88","name":"YEZIDI LETTER CHHIM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude88"},69257:{"value":"10E89","name":"YEZIDI LETTER HHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude89"},69258:{"value":"10E8A","name":"YEZIDI LETTER XA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude8a"},69259:{"value":"10E8B","name":"YEZIDI LETTER DAL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude8b"},69260:{"value":"10E8C","name":"YEZIDI LETTER ZAL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude8c"},69261:{"value":"10E8D","name":"YEZIDI LETTER RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude8d"},69262:{"value":"10E8E","name":"YEZIDI LETTER RHA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude8e"},69263:{"value":"10E8F","name":"YEZIDI LETTER ZA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude8f"},69264:{"value":"10E90","name":"YEZIDI LETTER JA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude90"},69265:{"value":"10E91","name":"YEZIDI LETTER SIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude91"},69266:{"value":"10E92","name":"YEZIDI LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude92"},69267:{"value":"10E93","name":"YEZIDI LETTER SAD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude93"},69268:{"value":"10E94","name":"YEZIDI LETTER DAD","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude94"},69269:{"value":"10E95","name":"YEZIDI LETTER TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude95"},69270:{"value":"10E96","name":"YEZIDI LETTER ZE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude96"},69271:{"value":"10E97","name":"YEZIDI LETTER EYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude97"},69272:{"value":"10E98","name":"YEZIDI LETTER XHEYN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude98"},69273:{"value":"10E99","name":"YEZIDI LETTER FA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude99"},69274:{"value":"10E9A","name":"YEZIDI LETTER VA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude9a"},69275:{"value":"10E9B","name":"YEZIDI LETTER VA ALTERNATE FORM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude9b"},69276:{"value":"10E9C","name":"YEZIDI LETTER QAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude9c"},69277:{"value":"10E9D","name":"YEZIDI LETTER KAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude9d"},69278:{"value":"10E9E","name":"YEZIDI LETTER KHAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude9e"},69279:{"value":"10E9F","name":"YEZIDI LETTER GAF","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude9f"},69280:{"value":"10EA0","name":"YEZIDI LETTER LAM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea0"},69281:{"value":"10EA1","name":"YEZIDI LETTER MIM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea1"},69282:{"value":"10EA2","name":"YEZIDI LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea2"},69283:{"value":"10EA3","name":"YEZIDI LETTER UM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea3"},69284:{"value":"10EA4","name":"YEZIDI LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea4"},69285:{"value":"10EA5","name":"YEZIDI LETTER OW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea5"},69286:{"value":"10EA6","name":"YEZIDI LETTER EW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea6"},69287:{"value":"10EA7","name":"YEZIDI LETTER HAY","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea7"},69288:{"value":"10EA8","name":"YEZIDI LETTER YOT","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea8"},69289:{"value":"10EA9","name":"YEZIDI LETTER ET","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udea9"},69296:{"value":"10EB0","name":"YEZIDI LETTER LAM WITH DOT ABOVE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udeb0"},69297:{"value":"10EB1","name":"YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udeb1"},69376:{"value":"10F00","name":"OLD SOGDIAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf00"},69377:{"value":"10F01","name":"OLD SOGDIAN LETTER FINAL ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf01"},69378:{"value":"10F02","name":"OLD SOGDIAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf02"},69379:{"value":"10F03","name":"OLD SOGDIAN LETTER FINAL BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf03"},69380:{"value":"10F04","name":"OLD SOGDIAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf04"},69381:{"value":"10F05","name":"OLD SOGDIAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf05"},69382:{"value":"10F06","name":"OLD SOGDIAN LETTER FINAL HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf06"},69383:{"value":"10F07","name":"OLD SOGDIAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf07"},69384:{"value":"10F08","name":"OLD SOGDIAN LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf08"},69385:{"value":"10F09","name":"OLD SOGDIAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf09"},69386:{"value":"10F0A","name":"OLD SOGDIAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf0a"},69387:{"value":"10F0B","name":"OLD SOGDIAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf0b"},69388:{"value":"10F0C","name":"OLD SOGDIAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf0c"},69389:{"value":"10F0D","name":"OLD SOGDIAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf0d"},69390:{"value":"10F0E","name":"OLD SOGDIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf0e"},69391:{"value":"10F0F","name":"OLD SOGDIAN LETTER FINAL NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf0f"},69392:{"value":"10F10","name":"OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf10"},69393:{"value":"10F11","name":"OLD SOGDIAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf11"},69394:{"value":"10F12","name":"OLD SOGDIAN LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf12"},69395:{"value":"10F13","name":"OLD SOGDIAN LETTER ALTERNATE AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf13"},69396:{"value":"10F14","name":"OLD SOGDIAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf14"},69397:{"value":"10F15","name":"OLD SOGDIAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf15"},69398:{"value":"10F16","name":"OLD SOGDIAN LETTER FINAL SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf16"},69399:{"value":"10F17","name":"OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf17"},69400:{"value":"10F18","name":"OLD SOGDIAN LETTER RESH-AYIN-DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf18"},69401:{"value":"10F19","name":"OLD SOGDIAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf19"},69402:{"value":"10F1A","name":"OLD SOGDIAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf1a"},69403:{"value":"10F1B","name":"OLD SOGDIAN LETTER FINAL TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf1b"},69404:{"value":"10F1C","name":"OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf1c"},69415:{"value":"10F27","name":"OLD SOGDIAN LIGATURE AYIN-DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf27"},69424:{"value":"10F30","name":"SOGDIAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf30"},69425:{"value":"10F31","name":"SOGDIAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf31"},69426:{"value":"10F32","name":"SOGDIAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf32"},69427:{"value":"10F33","name":"SOGDIAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf33"},69428:{"value":"10F34","name":"SOGDIAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf34"},69429:{"value":"10F35","name":"SOGDIAN LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf35"},69430:{"value":"10F36","name":"SOGDIAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf36"},69431:{"value":"10F37","name":"SOGDIAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf37"},69432:{"value":"10F38","name":"SOGDIAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf38"},69433:{"value":"10F39","name":"SOGDIAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf39"},69434:{"value":"10F3A","name":"SOGDIAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf3a"},69435:{"value":"10F3B","name":"SOGDIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf3b"},69436:{"value":"10F3C","name":"SOGDIAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf3c"},69437:{"value":"10F3D","name":"SOGDIAN LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf3d"},69438:{"value":"10F3E","name":"SOGDIAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf3e"},69439:{"value":"10F3F","name":"SOGDIAN LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf3f"},69440:{"value":"10F40","name":"SOGDIAN LETTER RESH-AYIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf40"},69441:{"value":"10F41","name":"SOGDIAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf41"},69442:{"value":"10F42","name":"SOGDIAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf42"},69443:{"value":"10F43","name":"SOGDIAN LETTER FETH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf43"},69444:{"value":"10F44","name":"SOGDIAN LETTER LESH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf44"},69445:{"value":"10F45","name":"SOGDIAN INDEPENDENT SHIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf45"},69488:{"value":"10F70","name":"OLD UYGHUR LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf70"},69489:{"value":"10F71","name":"OLD UYGHUR LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf71"},69490:{"value":"10F72","name":"OLD UYGHUR LETTER GIMEL-HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf72"},69491:{"value":"10F73","name":"OLD UYGHUR LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf73"},69492:{"value":"10F74","name":"OLD UYGHUR LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf74"},69493:{"value":"10F75","name":"OLD UYGHUR LETTER FINAL HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf75"},69494:{"value":"10F76","name":"OLD UYGHUR LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf76"},69495:{"value":"10F77","name":"OLD UYGHUR LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf77"},69496:{"value":"10F78","name":"OLD UYGHUR LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf78"},69497:{"value":"10F79","name":"OLD UYGHUR LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf79"},69498:{"value":"10F7A","name":"OLD UYGHUR LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf7a"},69499:{"value":"10F7B","name":"OLD UYGHUR LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf7b"},69500:{"value":"10F7C","name":"OLD UYGHUR LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf7c"},69501:{"value":"10F7D","name":"OLD UYGHUR LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf7d"},69502:{"value":"10F7E","name":"OLD UYGHUR LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf7e"},69503:{"value":"10F7F","name":"OLD UYGHUR LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf7f"},69504:{"value":"10F80","name":"OLD UYGHUR LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf80"},69505:{"value":"10F81","name":"OLD UYGHUR LETTER LESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf81"},69552:{"value":"10FB0","name":"CHORASMIAN LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb0"},69553:{"value":"10FB1","name":"CHORASMIAN LETTER SMALL ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb1"},69554:{"value":"10FB2","name":"CHORASMIAN LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb2"},69555:{"value":"10FB3","name":"CHORASMIAN LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb3"},69556:{"value":"10FB4","name":"CHORASMIAN LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb4"},69557:{"value":"10FB5","name":"CHORASMIAN LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb5"},69558:{"value":"10FB6","name":"CHORASMIAN LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb6"},69559:{"value":"10FB7","name":"CHORASMIAN LETTER CURLED WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb7"},69560:{"value":"10FB8","name":"CHORASMIAN LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb8"},69561:{"value":"10FB9","name":"CHORASMIAN LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfb9"},69562:{"value":"10FBA","name":"CHORASMIAN LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfba"},69563:{"value":"10FBB","name":"CHORASMIAN LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfbb"},69564:{"value":"10FBC","name":"CHORASMIAN LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfbc"},69565:{"value":"10FBD","name":"CHORASMIAN LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfbd"},69566:{"value":"10FBE","name":"CHORASMIAN LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfbe"},69567:{"value":"10FBF","name":"CHORASMIAN LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfbf"},69568:{"value":"10FC0","name":"CHORASMIAN LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc0"},69569:{"value":"10FC1","name":"CHORASMIAN LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc1"},69570:{"value":"10FC2","name":"CHORASMIAN LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc2"},69571:{"value":"10FC3","name":"CHORASMIAN LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc3"},69572:{"value":"10FC4","name":"CHORASMIAN LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc4"},69600:{"value":"10FE0","name":"ELYMAIC LETTER ALEPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe0"},69601:{"value":"10FE1","name":"ELYMAIC LETTER BETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe1"},69602:{"value":"10FE2","name":"ELYMAIC LETTER GIMEL","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe2"},69603:{"value":"10FE3","name":"ELYMAIC LETTER DALETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe3"},69604:{"value":"10FE4","name":"ELYMAIC LETTER HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe4"},69605:{"value":"10FE5","name":"ELYMAIC LETTER WAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe5"},69606:{"value":"10FE6","name":"ELYMAIC LETTER ZAYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe6"},69607:{"value":"10FE7","name":"ELYMAIC LETTER HETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe7"},69608:{"value":"10FE8","name":"ELYMAIC LETTER TETH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe8"},69609:{"value":"10FE9","name":"ELYMAIC LETTER YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfe9"},69610:{"value":"10FEA","name":"ELYMAIC LETTER KAPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfea"},69611:{"value":"10FEB","name":"ELYMAIC LETTER LAMEDH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfeb"},69612:{"value":"10FEC","name":"ELYMAIC LETTER MEM","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfec"},69613:{"value":"10FED","name":"ELYMAIC LETTER NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfed"},69614:{"value":"10FEE","name":"ELYMAIC LETTER SAMEKH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfee"},69615:{"value":"10FEF","name":"ELYMAIC LETTER AYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfef"},69616:{"value":"10FF0","name":"ELYMAIC LETTER PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff0"},69617:{"value":"10FF1","name":"ELYMAIC LETTER SADHE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff1"},69618:{"value":"10FF2","name":"ELYMAIC LETTER QOPH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff2"},69619:{"value":"10FF3","name":"ELYMAIC LETTER RESH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff3"},69620:{"value":"10FF4","name":"ELYMAIC LETTER SHIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff4"},69621:{"value":"10FF5","name":"ELYMAIC LETTER TAW","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff5"},69622:{"value":"10FF6","name":"ELYMAIC LIGATURE ZAYIN-YODH","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udff6"},69635:{"value":"11003","name":"BRAHMI SIGN JIHVAMULIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc03"},69636:{"value":"11004","name":"BRAHMI SIGN UPADHMANIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc04"},69637:{"value":"11005","name":"BRAHMI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc05"},69638:{"value":"11006","name":"BRAHMI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc06"},69639:{"value":"11007","name":"BRAHMI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc07"},69640:{"value":"11008","name":"BRAHMI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc08"},69641:{"value":"11009","name":"BRAHMI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc09"},69642:{"value":"1100A","name":"BRAHMI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc0a"},69643:{"value":"1100B","name":"BRAHMI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc0b"},69644:{"value":"1100C","name":"BRAHMI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc0c"},69645:{"value":"1100D","name":"BRAHMI LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc0d"},69646:{"value":"1100E","name":"BRAHMI LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc0e"},69647:{"value":"1100F","name":"BRAHMI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc0f"},69648:{"value":"11010","name":"BRAHMI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc10"},69649:{"value":"11011","name":"BRAHMI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc11"},69650:{"value":"11012","name":"BRAHMI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc12"},69651:{"value":"11013","name":"BRAHMI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc13"},69652:{"value":"11014","name":"BRAHMI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc14"},69653:{"value":"11015","name":"BRAHMI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc15"},69654:{"value":"11016","name":"BRAHMI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc16"},69655:{"value":"11017","name":"BRAHMI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc17"},69656:{"value":"11018","name":"BRAHMI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc18"},69657:{"value":"11019","name":"BRAHMI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc19"},69658:{"value":"1101A","name":"BRAHMI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc1a"},69659:{"value":"1101B","name":"BRAHMI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc1b"},69660:{"value":"1101C","name":"BRAHMI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc1c"},69661:{"value":"1101D","name":"BRAHMI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc1d"},69662:{"value":"1101E","name":"BRAHMI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc1e"},69663:{"value":"1101F","name":"BRAHMI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc1f"},69664:{"value":"11020","name":"BRAHMI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc20"},69665:{"value":"11021","name":"BRAHMI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc21"},69666:{"value":"11022","name":"BRAHMI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc22"},69667:{"value":"11023","name":"BRAHMI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc23"},69668:{"value":"11024","name":"BRAHMI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc24"},69669:{"value":"11025","name":"BRAHMI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc25"},69670:{"value":"11026","name":"BRAHMI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc26"},69671:{"value":"11027","name":"BRAHMI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc27"},69672:{"value":"11028","name":"BRAHMI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc28"},69673:{"value":"11029","name":"BRAHMI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc29"},69674:{"value":"1102A","name":"BRAHMI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc2a"},69675:{"value":"1102B","name":"BRAHMI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc2b"},69676:{"value":"1102C","name":"BRAHMI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc2c"},69677:{"value":"1102D","name":"BRAHMI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc2d"},69678:{"value":"1102E","name":"BRAHMI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc2e"},69679:{"value":"1102F","name":"BRAHMI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc2f"},69680:{"value":"11030","name":"BRAHMI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc30"},69681:{"value":"11031","name":"BRAHMI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc31"},69682:{"value":"11032","name":"BRAHMI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc32"},69683:{"value":"11033","name":"BRAHMI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc33"},69684:{"value":"11034","name":"BRAHMI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc34"},69685:{"value":"11035","name":"BRAHMI LETTER OLD TAMIL LLLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc35"},69686:{"value":"11036","name":"BRAHMI LETTER OLD TAMIL RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc36"},69687:{"value":"11037","name":"BRAHMI LETTER OLD TAMIL NNNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc37"},69745:{"value":"11071","name":"BRAHMI LETTER OLD TAMIL SHORT E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc71"},69746:{"value":"11072","name":"BRAHMI LETTER OLD TAMIL SHORT O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc72"},69749:{"value":"11075","name":"BRAHMI LETTER OLD TAMIL LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc75"},69763:{"value":"11083","name":"KAITHI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc83"},69764:{"value":"11084","name":"KAITHI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc84"},69765:{"value":"11085","name":"KAITHI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc85"},69766:{"value":"11086","name":"KAITHI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc86"},69767:{"value":"11087","name":"KAITHI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc87"},69768:{"value":"11088","name":"KAITHI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc88"},69769:{"value":"11089","name":"KAITHI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc89"},69770:{"value":"1108A","name":"KAITHI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc8a"},69771:{"value":"1108B","name":"KAITHI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc8b"},69772:{"value":"1108C","name":"KAITHI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc8c"},69773:{"value":"1108D","name":"KAITHI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc8d"},69774:{"value":"1108E","name":"KAITHI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc8e"},69775:{"value":"1108F","name":"KAITHI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc8f"},69776:{"value":"11090","name":"KAITHI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc90"},69777:{"value":"11091","name":"KAITHI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc91"},69778:{"value":"11092","name":"KAITHI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc92"},69779:{"value":"11093","name":"KAITHI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc93"},69780:{"value":"11094","name":"KAITHI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc94"},69781:{"value":"11095","name":"KAITHI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc95"},69782:{"value":"11096","name":"KAITHI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc96"},69783:{"value":"11097","name":"KAITHI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc97"},69784:{"value":"11098","name":"KAITHI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc98"},69785:{"value":"11099","name":"KAITHI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc99"},69786:{"value":"1109A","name":"KAITHI LETTER DDDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"11099 110BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc9a"},69787:{"value":"1109B","name":"KAITHI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc9b"},69788:{"value":"1109C","name":"KAITHI LETTER RHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"1109B 110BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc9c"},69789:{"value":"1109D","name":"KAITHI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc9d"},69790:{"value":"1109E","name":"KAITHI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc9e"},69791:{"value":"1109F","name":"KAITHI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc9f"},69792:{"value":"110A0","name":"KAITHI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca0"},69793:{"value":"110A1","name":"KAITHI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca1"},69794:{"value":"110A2","name":"KAITHI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca2"},69795:{"value":"110A3","name":"KAITHI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca3"},69796:{"value":"110A4","name":"KAITHI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca4"},69797:{"value":"110A5","name":"KAITHI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca5"},69798:{"value":"110A6","name":"KAITHI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca6"},69799:{"value":"110A7","name":"KAITHI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca7"},69800:{"value":"110A8","name":"KAITHI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca8"},69801:{"value":"110A9","name":"KAITHI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udca9"},69802:{"value":"110AA","name":"KAITHI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcaa"},69803:{"value":"110AB","name":"KAITHI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"110A5 110BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcab"},69804:{"value":"110AC","name":"KAITHI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcac"},69805:{"value":"110AD","name":"KAITHI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcad"},69806:{"value":"110AE","name":"KAITHI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcae"},69807:{"value":"110AF","name":"KAITHI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcaf"},69840:{"value":"110D0","name":"SORA SOMPENG LETTER SAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd0"},69841:{"value":"110D1","name":"SORA SOMPENG LETTER TAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd1"},69842:{"value":"110D2","name":"SORA SOMPENG LETTER BAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd2"},69843:{"value":"110D3","name":"SORA SOMPENG LETTER CAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd3"},69844:{"value":"110D4","name":"SORA SOMPENG LETTER DAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd4"},69845:{"value":"110D5","name":"SORA SOMPENG LETTER GAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd5"},69846:{"value":"110D6","name":"SORA SOMPENG LETTER MAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd6"},69847:{"value":"110D7","name":"SORA SOMPENG LETTER NGAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd7"},69848:{"value":"110D8","name":"SORA SOMPENG LETTER LAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd8"},69849:{"value":"110D9","name":"SORA SOMPENG LETTER NAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcd9"},69850:{"value":"110DA","name":"SORA SOMPENG LETTER VAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcda"},69851:{"value":"110DB","name":"SORA SOMPENG LETTER PAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcdb"},69852:{"value":"110DC","name":"SORA SOMPENG LETTER YAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcdc"},69853:{"value":"110DD","name":"SORA SOMPENG LETTER RAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcdd"},69854:{"value":"110DE","name":"SORA SOMPENG LETTER HAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcde"},69855:{"value":"110DF","name":"SORA SOMPENG LETTER KAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcdf"},69856:{"value":"110E0","name":"SORA SOMPENG LETTER JAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce0"},69857:{"value":"110E1","name":"SORA SOMPENG LETTER NYAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce1"},69858:{"value":"110E2","name":"SORA SOMPENG LETTER AH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce2"},69859:{"value":"110E3","name":"SORA SOMPENG LETTER EEH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce3"},69860:{"value":"110E4","name":"SORA SOMPENG LETTER IH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce4"},69861:{"value":"110E5","name":"SORA SOMPENG LETTER UH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce5"},69862:{"value":"110E6","name":"SORA SOMPENG LETTER OH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce6"},69863:{"value":"110E7","name":"SORA SOMPENG LETTER EH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce7"},69864:{"value":"110E8","name":"SORA SOMPENG LETTER MAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udce8"},69891:{"value":"11103","name":"CHAKMA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd03"},69892:{"value":"11104","name":"CHAKMA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd04"},69893:{"value":"11105","name":"CHAKMA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd05"},69894:{"value":"11106","name":"CHAKMA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd06"},69895:{"value":"11107","name":"CHAKMA LETTER KAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd07"},69896:{"value":"11108","name":"CHAKMA LETTER KHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd08"},69897:{"value":"11109","name":"CHAKMA LETTER GAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd09"},69898:{"value":"1110A","name":"CHAKMA LETTER GHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd0a"},69899:{"value":"1110B","name":"CHAKMA LETTER NGAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd0b"},69900:{"value":"1110C","name":"CHAKMA LETTER CAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd0c"},69901:{"value":"1110D","name":"CHAKMA LETTER CHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd0d"},69902:{"value":"1110E","name":"CHAKMA LETTER JAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd0e"},69903:{"value":"1110F","name":"CHAKMA LETTER JHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd0f"},69904:{"value":"11110","name":"CHAKMA LETTER NYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd10"},69905:{"value":"11111","name":"CHAKMA LETTER TTAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd11"},69906:{"value":"11112","name":"CHAKMA LETTER TTHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd12"},69907:{"value":"11113","name":"CHAKMA LETTER DDAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd13"},69908:{"value":"11114","name":"CHAKMA LETTER DDHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd14"},69909:{"value":"11115","name":"CHAKMA LETTER NNAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd15"},69910:{"value":"11116","name":"CHAKMA LETTER TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd16"},69911:{"value":"11117","name":"CHAKMA LETTER THAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd17"},69912:{"value":"11118","name":"CHAKMA LETTER DAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd18"},69913:{"value":"11119","name":"CHAKMA LETTER DHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd19"},69914:{"value":"1111A","name":"CHAKMA LETTER NAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd1a"},69915:{"value":"1111B","name":"CHAKMA LETTER PAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd1b"},69916:{"value":"1111C","name":"CHAKMA LETTER PHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd1c"},69917:{"value":"1111D","name":"CHAKMA LETTER BAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd1d"},69918:{"value":"1111E","name":"CHAKMA LETTER BHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd1e"},69919:{"value":"1111F","name":"CHAKMA LETTER MAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd1f"},69920:{"value":"11120","name":"CHAKMA LETTER YYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd20"},69921:{"value":"11121","name":"CHAKMA LETTER YAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd21"},69922:{"value":"11122","name":"CHAKMA LETTER RAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd22"},69923:{"value":"11123","name":"CHAKMA LETTER LAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd23"},69924:{"value":"11124","name":"CHAKMA LETTER WAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd24"},69925:{"value":"11125","name":"CHAKMA LETTER SAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd25"},69926:{"value":"11126","name":"CHAKMA LETTER HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd26"},69956:{"value":"11144","name":"CHAKMA LETTER LHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd44"},69959:{"value":"11147","name":"CHAKMA LETTER VAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd47"},69968:{"value":"11150","name":"MAHAJANI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd50"},69969:{"value":"11151","name":"MAHAJANI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd51"},69970:{"value":"11152","name":"MAHAJANI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd52"},69971:{"value":"11153","name":"MAHAJANI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd53"},69972:{"value":"11154","name":"MAHAJANI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd54"},69973:{"value":"11155","name":"MAHAJANI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd55"},69974:{"value":"11156","name":"MAHAJANI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd56"},69975:{"value":"11157","name":"MAHAJANI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd57"},69976:{"value":"11158","name":"MAHAJANI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd58"},69977:{"value":"11159","name":"MAHAJANI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd59"},69978:{"value":"1115A","name":"MAHAJANI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd5a"},69979:{"value":"1115B","name":"MAHAJANI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd5b"},69980:{"value":"1115C","name":"MAHAJANI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd5c"},69981:{"value":"1115D","name":"MAHAJANI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd5d"},69982:{"value":"1115E","name":"MAHAJANI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd5e"},69983:{"value":"1115F","name":"MAHAJANI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd5f"},69984:{"value":"11160","name":"MAHAJANI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd60"},69985:{"value":"11161","name":"MAHAJANI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd61"},69986:{"value":"11162","name":"MAHAJANI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd62"},69987:{"value":"11163","name":"MAHAJANI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd63"},69988:{"value":"11164","name":"MAHAJANI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd64"},69989:{"value":"11165","name":"MAHAJANI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd65"},69990:{"value":"11166","name":"MAHAJANI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd66"},69991:{"value":"11167","name":"MAHAJANI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd67"},69992:{"value":"11168","name":"MAHAJANI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd68"},69993:{"value":"11169","name":"MAHAJANI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd69"},69994:{"value":"1116A","name":"MAHAJANI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd6a"},69995:{"value":"1116B","name":"MAHAJANI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd6b"},69996:{"value":"1116C","name":"MAHAJANI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd6c"},69997:{"value":"1116D","name":"MAHAJANI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd6d"},69998:{"value":"1116E","name":"MAHAJANI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd6e"},69999:{"value":"1116F","name":"MAHAJANI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd6f"},70000:{"value":"11170","name":"MAHAJANI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd70"},70001:{"value":"11171","name":"MAHAJANI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd71"},70002:{"value":"11172","name":"MAHAJANI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd72"},70006:{"value":"11176","name":"MAHAJANI LIGATURE SHRI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd76"},70019:{"value":"11183","name":"SHARADA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd83"},70020:{"value":"11184","name":"SHARADA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd84"},70021:{"value":"11185","name":"SHARADA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd85"},70022:{"value":"11186","name":"SHARADA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd86"},70023:{"value":"11187","name":"SHARADA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd87"},70024:{"value":"11188","name":"SHARADA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd88"},70025:{"value":"11189","name":"SHARADA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd89"},70026:{"value":"1118A","name":"SHARADA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd8a"},70027:{"value":"1118B","name":"SHARADA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd8b"},70028:{"value":"1118C","name":"SHARADA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd8c"},70029:{"value":"1118D","name":"SHARADA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd8d"},70030:{"value":"1118E","name":"SHARADA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd8e"},70031:{"value":"1118F","name":"SHARADA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd8f"},70032:{"value":"11190","name":"SHARADA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd90"},70033:{"value":"11191","name":"SHARADA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd91"},70034:{"value":"11192","name":"SHARADA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd92"},70035:{"value":"11193","name":"SHARADA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd93"},70036:{"value":"11194","name":"SHARADA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd94"},70037:{"value":"11195","name":"SHARADA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd95"},70038:{"value":"11196","name":"SHARADA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd96"},70039:{"value":"11197","name":"SHARADA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd97"},70040:{"value":"11198","name":"SHARADA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd98"},70041:{"value":"11199","name":"SHARADA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd99"},70042:{"value":"1119A","name":"SHARADA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd9a"},70043:{"value":"1119B","name":"SHARADA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd9b"},70044:{"value":"1119C","name":"SHARADA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd9c"},70045:{"value":"1119D","name":"SHARADA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd9d"},70046:{"value":"1119E","name":"SHARADA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd9e"},70047:{"value":"1119F","name":"SHARADA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd9f"},70048:{"value":"111A0","name":"SHARADA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda0"},70049:{"value":"111A1","name":"SHARADA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda1"},70050:{"value":"111A2","name":"SHARADA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda2"},70051:{"value":"111A3","name":"SHARADA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda3"},70052:{"value":"111A4","name":"SHARADA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda4"},70053:{"value":"111A5","name":"SHARADA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda5"},70054:{"value":"111A6","name":"SHARADA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda6"},70055:{"value":"111A7","name":"SHARADA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda7"},70056:{"value":"111A8","name":"SHARADA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda8"},70057:{"value":"111A9","name":"SHARADA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udda9"},70058:{"value":"111AA","name":"SHARADA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddaa"},70059:{"value":"111AB","name":"SHARADA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddab"},70060:{"value":"111AC","name":"SHARADA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddac"},70061:{"value":"111AD","name":"SHARADA LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddad"},70062:{"value":"111AE","name":"SHARADA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddae"},70063:{"value":"111AF","name":"SHARADA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddaf"},70064:{"value":"111B0","name":"SHARADA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb0"},70065:{"value":"111B1","name":"SHARADA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb1"},70066:{"value":"111B2","name":"SHARADA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb2"},70081:{"value":"111C1","name":"SHARADA SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc1"},70082:{"value":"111C2","name":"SHARADA SIGN JIHVAMULIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc2"},70083:{"value":"111C3","name":"SHARADA SIGN UPADHMANIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc3"},70084:{"value":"111C4","name":"SHARADA OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc4"},70106:{"value":"111DA","name":"SHARADA EKAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddda"},70108:{"value":"111DC","name":"SHARADA HEADSTROKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udddc"},70144:{"value":"11200","name":"KHOJKI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude00"},70145:{"value":"11201","name":"KHOJKI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude01"},70146:{"value":"11202","name":"KHOJKI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude02"},70147:{"value":"11203","name":"KHOJKI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude03"},70148:{"value":"11204","name":"KHOJKI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude04"},70149:{"value":"11205","name":"KHOJKI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude05"},70150:{"value":"11206","name":"KHOJKI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude06"},70151:{"value":"11207","name":"KHOJKI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude07"},70152:{"value":"11208","name":"KHOJKI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude08"},70153:{"value":"11209","name":"KHOJKI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude09"},70154:{"value":"1120A","name":"KHOJKI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude0a"},70155:{"value":"1120B","name":"KHOJKI LETTER GGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude0b"},70156:{"value":"1120C","name":"KHOJKI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude0c"},70157:{"value":"1120D","name":"KHOJKI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude0d"},70158:{"value":"1120E","name":"KHOJKI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude0e"},70159:{"value":"1120F","name":"KHOJKI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude0f"},70160:{"value":"11210","name":"KHOJKI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude10"},70161:{"value":"11211","name":"KHOJKI LETTER JJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude11"},70163:{"value":"11213","name":"KHOJKI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude13"},70164:{"value":"11214","name":"KHOJKI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude14"},70165:{"value":"11215","name":"KHOJKI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude15"},70166:{"value":"11216","name":"KHOJKI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude16"},70167:{"value":"11217","name":"KHOJKI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude17"},70168:{"value":"11218","name":"KHOJKI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude18"},70169:{"value":"11219","name":"KHOJKI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude19"},70170:{"value":"1121A","name":"KHOJKI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude1a"},70171:{"value":"1121B","name":"KHOJKI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude1b"},70172:{"value":"1121C","name":"KHOJKI LETTER DDDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude1c"},70173:{"value":"1121D","name":"KHOJKI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude1d"},70174:{"value":"1121E","name":"KHOJKI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude1e"},70175:{"value":"1121F","name":"KHOJKI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude1f"},70176:{"value":"11220","name":"KHOJKI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude20"},70177:{"value":"11221","name":"KHOJKI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude21"},70178:{"value":"11222","name":"KHOJKI LETTER BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude22"},70179:{"value":"11223","name":"KHOJKI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude23"},70180:{"value":"11224","name":"KHOJKI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude24"},70181:{"value":"11225","name":"KHOJKI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude25"},70182:{"value":"11226","name":"KHOJKI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude26"},70183:{"value":"11227","name":"KHOJKI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude27"},70184:{"value":"11228","name":"KHOJKI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude28"},70185:{"value":"11229","name":"KHOJKI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude29"},70186:{"value":"1122A","name":"KHOJKI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude2a"},70187:{"value":"1122B","name":"KHOJKI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude2b"},70272:{"value":"11280","name":"MULTANI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude80"},70273:{"value":"11281","name":"MULTANI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude81"},70274:{"value":"11282","name":"MULTANI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude82"},70275:{"value":"11283","name":"MULTANI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude83"},70276:{"value":"11284","name":"MULTANI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude84"},70277:{"value":"11285","name":"MULTANI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude85"},70278:{"value":"11286","name":"MULTANI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude86"},70280:{"value":"11288","name":"MULTANI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude88"},70282:{"value":"1128A","name":"MULTANI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude8a"},70283:{"value":"1128B","name":"MULTANI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude8b"},70284:{"value":"1128C","name":"MULTANI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude8c"},70285:{"value":"1128D","name":"MULTANI LETTER JJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude8d"},70287:{"value":"1128F","name":"MULTANI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude8f"},70288:{"value":"11290","name":"MULTANI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude90"},70289:{"value":"11291","name":"MULTANI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude91"},70290:{"value":"11292","name":"MULTANI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude92"},70291:{"value":"11293","name":"MULTANI LETTER DDDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude93"},70292:{"value":"11294","name":"MULTANI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude94"},70293:{"value":"11295","name":"MULTANI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude95"},70294:{"value":"11296","name":"MULTANI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude96"},70295:{"value":"11297","name":"MULTANI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude97"},70296:{"value":"11298","name":"MULTANI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude98"},70297:{"value":"11299","name":"MULTANI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude99"},70298:{"value":"1129A","name":"MULTANI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude9a"},70299:{"value":"1129B","name":"MULTANI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude9b"},70300:{"value":"1129C","name":"MULTANI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude9c"},70301:{"value":"1129D","name":"MULTANI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude9d"},70303:{"value":"1129F","name":"MULTANI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude9f"},70304:{"value":"112A0","name":"MULTANI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea0"},70305:{"value":"112A1","name":"MULTANI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea1"},70306:{"value":"112A2","name":"MULTANI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea2"},70307:{"value":"112A3","name":"MULTANI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea3"},70308:{"value":"112A4","name":"MULTANI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea4"},70309:{"value":"112A5","name":"MULTANI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea5"},70310:{"value":"112A6","name":"MULTANI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea6"},70311:{"value":"112A7","name":"MULTANI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea7"},70312:{"value":"112A8","name":"MULTANI LETTER RHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea8"},70320:{"value":"112B0","name":"KHUDAWADI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb0"},70321:{"value":"112B1","name":"KHUDAWADI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb1"},70322:{"value":"112B2","name":"KHUDAWADI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb2"},70323:{"value":"112B3","name":"KHUDAWADI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb3"},70324:{"value":"112B4","name":"KHUDAWADI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb4"},70325:{"value":"112B5","name":"KHUDAWADI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb5"},70326:{"value":"112B6","name":"KHUDAWADI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb6"},70327:{"value":"112B7","name":"KHUDAWADI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb7"},70328:{"value":"112B8","name":"KHUDAWADI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb8"},70329:{"value":"112B9","name":"KHUDAWADI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeb9"},70330:{"value":"112BA","name":"KHUDAWADI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeba"},70331:{"value":"112BB","name":"KHUDAWADI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udebb"},70332:{"value":"112BC","name":"KHUDAWADI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udebc"},70333:{"value":"112BD","name":"KHUDAWADI LETTER GGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udebd"},70334:{"value":"112BE","name":"KHUDAWADI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udebe"},70335:{"value":"112BF","name":"KHUDAWADI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udebf"},70336:{"value":"112C0","name":"KHUDAWADI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec0"},70337:{"value":"112C1","name":"KHUDAWADI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec1"},70338:{"value":"112C2","name":"KHUDAWADI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec2"},70339:{"value":"112C3","name":"KHUDAWADI LETTER JJA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec3"},70340:{"value":"112C4","name":"KHUDAWADI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec4"},70341:{"value":"112C5","name":"KHUDAWADI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec5"},70342:{"value":"112C6","name":"KHUDAWADI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec6"},70343:{"value":"112C7","name":"KHUDAWADI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec7"},70344:{"value":"112C8","name":"KHUDAWADI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec8"},70345:{"value":"112C9","name":"KHUDAWADI LETTER DDDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udec9"},70346:{"value":"112CA","name":"KHUDAWADI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeca"},70347:{"value":"112CB","name":"KHUDAWADI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udecb"},70348:{"value":"112CC","name":"KHUDAWADI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udecc"},70349:{"value":"112CD","name":"KHUDAWADI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udecd"},70350:{"value":"112CE","name":"KHUDAWADI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udece"},70351:{"value":"112CF","name":"KHUDAWADI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udecf"},70352:{"value":"112D0","name":"KHUDAWADI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded0"},70353:{"value":"112D1","name":"KHUDAWADI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded1"},70354:{"value":"112D2","name":"KHUDAWADI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded2"},70355:{"value":"112D3","name":"KHUDAWADI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded3"},70356:{"value":"112D4","name":"KHUDAWADI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded4"},70357:{"value":"112D5","name":"KHUDAWADI LETTER BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded5"},70358:{"value":"112D6","name":"KHUDAWADI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded6"},70359:{"value":"112D7","name":"KHUDAWADI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded7"},70360:{"value":"112D8","name":"KHUDAWADI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded8"},70361:{"value":"112D9","name":"KHUDAWADI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uded9"},70362:{"value":"112DA","name":"KHUDAWADI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeda"},70363:{"value":"112DB","name":"KHUDAWADI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udedb"},70364:{"value":"112DC","name":"KHUDAWADI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udedc"},70365:{"value":"112DD","name":"KHUDAWADI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udedd"},70366:{"value":"112DE","name":"KHUDAWADI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udede"},70405:{"value":"11305","name":"GRANTHA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf05"},70406:{"value":"11306","name":"GRANTHA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf06"},70407:{"value":"11307","name":"GRANTHA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf07"},70408:{"value":"11308","name":"GRANTHA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf08"},70409:{"value":"11309","name":"GRANTHA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf09"},70410:{"value":"1130A","name":"GRANTHA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf0a"},70411:{"value":"1130B","name":"GRANTHA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf0b"},70412:{"value":"1130C","name":"GRANTHA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf0c"},70415:{"value":"1130F","name":"GRANTHA LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf0f"},70416:{"value":"11310","name":"GRANTHA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf10"},70419:{"value":"11313","name":"GRANTHA LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf13"},70420:{"value":"11314","name":"GRANTHA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf14"},70421:{"value":"11315","name":"GRANTHA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf15"},70422:{"value":"11316","name":"GRANTHA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf16"},70423:{"value":"11317","name":"GRANTHA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf17"},70424:{"value":"11318","name":"GRANTHA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf18"},70425:{"value":"11319","name":"GRANTHA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf19"},70426:{"value":"1131A","name":"GRANTHA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf1a"},70427:{"value":"1131B","name":"GRANTHA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf1b"},70428:{"value":"1131C","name":"GRANTHA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf1c"},70429:{"value":"1131D","name":"GRANTHA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf1d"},70430:{"value":"1131E","name":"GRANTHA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf1e"},70431:{"value":"1131F","name":"GRANTHA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf1f"},70432:{"value":"11320","name":"GRANTHA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf20"},70433:{"value":"11321","name":"GRANTHA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf21"},70434:{"value":"11322","name":"GRANTHA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf22"},70435:{"value":"11323","name":"GRANTHA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf23"},70436:{"value":"11324","name":"GRANTHA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf24"},70437:{"value":"11325","name":"GRANTHA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf25"},70438:{"value":"11326","name":"GRANTHA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf26"},70439:{"value":"11327","name":"GRANTHA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf27"},70440:{"value":"11328","name":"GRANTHA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf28"},70442:{"value":"1132A","name":"GRANTHA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf2a"},70443:{"value":"1132B","name":"GRANTHA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf2b"},70444:{"value":"1132C","name":"GRANTHA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf2c"},70445:{"value":"1132D","name":"GRANTHA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf2d"},70446:{"value":"1132E","name":"GRANTHA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf2e"},70447:{"value":"1132F","name":"GRANTHA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf2f"},70448:{"value":"11330","name":"GRANTHA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf30"},70450:{"value":"11332","name":"GRANTHA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf32"},70451:{"value":"11333","name":"GRANTHA LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf33"},70453:{"value":"11335","name":"GRANTHA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf35"},70454:{"value":"11336","name":"GRANTHA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf36"},70455:{"value":"11337","name":"GRANTHA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf37"},70456:{"value":"11338","name":"GRANTHA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf38"},70457:{"value":"11339","name":"GRANTHA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf39"},70461:{"value":"1133D","name":"GRANTHA SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf3d"},70480:{"value":"11350","name":"GRANTHA OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf50"},70493:{"value":"1135D","name":"GRANTHA SIGN PLUTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf5d"},70494:{"value":"1135E","name":"GRANTHA LETTER VEDIC ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf5e"},70495:{"value":"1135F","name":"GRANTHA LETTER VEDIC DOUBLE ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf5f"},70496:{"value":"11360","name":"GRANTHA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf60"},70497:{"value":"11361","name":"GRANTHA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf61"},70656:{"value":"11400","name":"NEWA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc00"},70657:{"value":"11401","name":"NEWA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc01"},70658:{"value":"11402","name":"NEWA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc02"},70659:{"value":"11403","name":"NEWA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc03"},70660:{"value":"11404","name":"NEWA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc04"},70661:{"value":"11405","name":"NEWA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc05"},70662:{"value":"11406","name":"NEWA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc06"},70663:{"value":"11407","name":"NEWA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc07"},70664:{"value":"11408","name":"NEWA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc08"},70665:{"value":"11409","name":"NEWA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc09"},70666:{"value":"1140A","name":"NEWA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc0a"},70667:{"value":"1140B","name":"NEWA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc0b"},70668:{"value":"1140C","name":"NEWA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc0c"},70669:{"value":"1140D","name":"NEWA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc0d"},70670:{"value":"1140E","name":"NEWA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc0e"},70671:{"value":"1140F","name":"NEWA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc0f"},70672:{"value":"11410","name":"NEWA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc10"},70673:{"value":"11411","name":"NEWA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc11"},70674:{"value":"11412","name":"NEWA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc12"},70675:{"value":"11413","name":"NEWA LETTER NGHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc13"},70676:{"value":"11414","name":"NEWA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc14"},70677:{"value":"11415","name":"NEWA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc15"},70678:{"value":"11416","name":"NEWA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc16"},70679:{"value":"11417","name":"NEWA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc17"},70680:{"value":"11418","name":"NEWA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc18"},70681:{"value":"11419","name":"NEWA LETTER NYHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc19"},70682:{"value":"1141A","name":"NEWA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc1a"},70683:{"value":"1141B","name":"NEWA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc1b"},70684:{"value":"1141C","name":"NEWA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc1c"},70685:{"value":"1141D","name":"NEWA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc1d"},70686:{"value":"1141E","name":"NEWA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc1e"},70687:{"value":"1141F","name":"NEWA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc1f"},70688:{"value":"11420","name":"NEWA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc20"},70689:{"value":"11421","name":"NEWA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc21"},70690:{"value":"11422","name":"NEWA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc22"},70691:{"value":"11423","name":"NEWA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc23"},70692:{"value":"11424","name":"NEWA LETTER NHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc24"},70693:{"value":"11425","name":"NEWA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc25"},70694:{"value":"11426","name":"NEWA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc26"},70695:{"value":"11427","name":"NEWA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc27"},70696:{"value":"11428","name":"NEWA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc28"},70697:{"value":"11429","name":"NEWA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc29"},70698:{"value":"1142A","name":"NEWA LETTER MHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc2a"},70699:{"value":"1142B","name":"NEWA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc2b"},70700:{"value":"1142C","name":"NEWA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc2c"},70701:{"value":"1142D","name":"NEWA LETTER RHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc2d"},70702:{"value":"1142E","name":"NEWA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc2e"},70703:{"value":"1142F","name":"NEWA LETTER LHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc2f"},70704:{"value":"11430","name":"NEWA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc30"},70705:{"value":"11431","name":"NEWA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc31"},70706:{"value":"11432","name":"NEWA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc32"},70707:{"value":"11433","name":"NEWA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc33"},70708:{"value":"11434","name":"NEWA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc34"},70727:{"value":"11447","name":"NEWA SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc47"},70728:{"value":"11448","name":"NEWA SIGN FINAL ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc48"},70729:{"value":"11449","name":"NEWA OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc49"},70730:{"value":"1144A","name":"NEWA SIDDHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc4a"},70751:{"value":"1145F","name":"NEWA LETTER VEDIC ANUSVARA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc5f"},70752:{"value":"11460","name":"NEWA SIGN JIHVAMULIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc60"},70753:{"value":"11461","name":"NEWA SIGN UPADHMANIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc61"},70784:{"value":"11480","name":"TIRHUTA ANJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc80"},70785:{"value":"11481","name":"TIRHUTA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc81"},70786:{"value":"11482","name":"TIRHUTA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc82"},70787:{"value":"11483","name":"TIRHUTA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc83"},70788:{"value":"11484","name":"TIRHUTA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc84"},70789:{"value":"11485","name":"TIRHUTA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc85"},70790:{"value":"11486","name":"TIRHUTA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc86"},70791:{"value":"11487","name":"TIRHUTA LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc87"},70792:{"value":"11488","name":"TIRHUTA LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc88"},70793:{"value":"11489","name":"TIRHUTA LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc89"},70794:{"value":"1148A","name":"TIRHUTA LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc8a"},70795:{"value":"1148B","name":"TIRHUTA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc8b"},70796:{"value":"1148C","name":"TIRHUTA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc8c"},70797:{"value":"1148D","name":"TIRHUTA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc8d"},70798:{"value":"1148E","name":"TIRHUTA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc8e"},70799:{"value":"1148F","name":"TIRHUTA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc8f"},70800:{"value":"11490","name":"TIRHUTA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc90"},70801:{"value":"11491","name":"TIRHUTA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc91"},70802:{"value":"11492","name":"TIRHUTA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc92"},70803:{"value":"11493","name":"TIRHUTA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc93"},70804:{"value":"11494","name":"TIRHUTA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc94"},70805:{"value":"11495","name":"TIRHUTA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc95"},70806:{"value":"11496","name":"TIRHUTA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc96"},70807:{"value":"11497","name":"TIRHUTA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc97"},70808:{"value":"11498","name":"TIRHUTA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc98"},70809:{"value":"11499","name":"TIRHUTA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc99"},70810:{"value":"1149A","name":"TIRHUTA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc9a"},70811:{"value":"1149B","name":"TIRHUTA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc9b"},70812:{"value":"1149C","name":"TIRHUTA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc9c"},70813:{"value":"1149D","name":"TIRHUTA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc9d"},70814:{"value":"1149E","name":"TIRHUTA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc9e"},70815:{"value":"1149F","name":"TIRHUTA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc9f"},70816:{"value":"114A0","name":"TIRHUTA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca0"},70817:{"value":"114A1","name":"TIRHUTA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca1"},70818:{"value":"114A2","name":"TIRHUTA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca2"},70819:{"value":"114A3","name":"TIRHUTA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca3"},70820:{"value":"114A4","name":"TIRHUTA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca4"},70821:{"value":"114A5","name":"TIRHUTA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca5"},70822:{"value":"114A6","name":"TIRHUTA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca6"},70823:{"value":"114A7","name":"TIRHUTA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca7"},70824:{"value":"114A8","name":"TIRHUTA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca8"},70825:{"value":"114A9","name":"TIRHUTA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udca9"},70826:{"value":"114AA","name":"TIRHUTA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcaa"},70827:{"value":"114AB","name":"TIRHUTA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcab"},70828:{"value":"114AC","name":"TIRHUTA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcac"},70829:{"value":"114AD","name":"TIRHUTA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcad"},70830:{"value":"114AE","name":"TIRHUTA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcae"},70831:{"value":"114AF","name":"TIRHUTA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcaf"},70852:{"value":"114C4","name":"TIRHUTA SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc4"},70853:{"value":"114C5","name":"TIRHUTA GVANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc5"},70855:{"value":"114C7","name":"TIRHUTA OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc7"},71040:{"value":"11580","name":"SIDDHAM LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd80"},71041:{"value":"11581","name":"SIDDHAM LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd81"},71042:{"value":"11582","name":"SIDDHAM LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd82"},71043:{"value":"11583","name":"SIDDHAM LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd83"},71044:{"value":"11584","name":"SIDDHAM LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd84"},71045:{"value":"11585","name":"SIDDHAM LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd85"},71046:{"value":"11586","name":"SIDDHAM LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd86"},71047:{"value":"11587","name":"SIDDHAM LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd87"},71048:{"value":"11588","name":"SIDDHAM LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd88"},71049:{"value":"11589","name":"SIDDHAM LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd89"},71050:{"value":"1158A","name":"SIDDHAM LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd8a"},71051:{"value":"1158B","name":"SIDDHAM LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd8b"},71052:{"value":"1158C","name":"SIDDHAM LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd8c"},71053:{"value":"1158D","name":"SIDDHAM LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd8d"},71054:{"value":"1158E","name":"SIDDHAM LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd8e"},71055:{"value":"1158F","name":"SIDDHAM LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd8f"},71056:{"value":"11590","name":"SIDDHAM LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd90"},71057:{"value":"11591","name":"SIDDHAM LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd91"},71058:{"value":"11592","name":"SIDDHAM LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd92"},71059:{"value":"11593","name":"SIDDHAM LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd93"},71060:{"value":"11594","name":"SIDDHAM LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd94"},71061:{"value":"11595","name":"SIDDHAM LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd95"},71062:{"value":"11596","name":"SIDDHAM LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd96"},71063:{"value":"11597","name":"SIDDHAM LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd97"},71064:{"value":"11598","name":"SIDDHAM LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd98"},71065:{"value":"11599","name":"SIDDHAM LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd99"},71066:{"value":"1159A","name":"SIDDHAM LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd9a"},71067:{"value":"1159B","name":"SIDDHAM LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd9b"},71068:{"value":"1159C","name":"SIDDHAM LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd9c"},71069:{"value":"1159D","name":"SIDDHAM LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd9d"},71070:{"value":"1159E","name":"SIDDHAM LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd9e"},71071:{"value":"1159F","name":"SIDDHAM LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udd9f"},71072:{"value":"115A0","name":"SIDDHAM LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda0"},71073:{"value":"115A1","name":"SIDDHAM LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda1"},71074:{"value":"115A2","name":"SIDDHAM LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda2"},71075:{"value":"115A3","name":"SIDDHAM LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda3"},71076:{"value":"115A4","name":"SIDDHAM LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda4"},71077:{"value":"115A5","name":"SIDDHAM LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda5"},71078:{"value":"115A6","name":"SIDDHAM LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda6"},71079:{"value":"115A7","name":"SIDDHAM LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda7"},71080:{"value":"115A8","name":"SIDDHAM LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda8"},71081:{"value":"115A9","name":"SIDDHAM LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udda9"},71082:{"value":"115AA","name":"SIDDHAM LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddaa"},71083:{"value":"115AB","name":"SIDDHAM LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddab"},71084:{"value":"115AC","name":"SIDDHAM LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddac"},71085:{"value":"115AD","name":"SIDDHAM LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddad"},71086:{"value":"115AE","name":"SIDDHAM LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddae"},71128:{"value":"115D8","name":"SIDDHAM LETTER THREE-CIRCLE ALTERNATE I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd8"},71129:{"value":"115D9","name":"SIDDHAM LETTER TWO-CIRCLE ALTERNATE I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd9"},71130:{"value":"115DA","name":"SIDDHAM LETTER TWO-CIRCLE ALTERNATE II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddda"},71131:{"value":"115DB","name":"SIDDHAM LETTER ALTERNATE U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udddb"},71168:{"value":"11600","name":"MODI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude00"},71169:{"value":"11601","name":"MODI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude01"},71170:{"value":"11602","name":"MODI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude02"},71171:{"value":"11603","name":"MODI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude03"},71172:{"value":"11604","name":"MODI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude04"},71173:{"value":"11605","name":"MODI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude05"},71174:{"value":"11606","name":"MODI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude06"},71175:{"value":"11607","name":"MODI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude07"},71176:{"value":"11608","name":"MODI LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude08"},71177:{"value":"11609","name":"MODI LETTER VOCALIC LL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude09"},71178:{"value":"1160A","name":"MODI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude0a"},71179:{"value":"1160B","name":"MODI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude0b"},71180:{"value":"1160C","name":"MODI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude0c"},71181:{"value":"1160D","name":"MODI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude0d"},71182:{"value":"1160E","name":"MODI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude0e"},71183:{"value":"1160F","name":"MODI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude0f"},71184:{"value":"11610","name":"MODI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude10"},71185:{"value":"11611","name":"MODI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude11"},71186:{"value":"11612","name":"MODI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude12"},71187:{"value":"11613","name":"MODI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude13"},71188:{"value":"11614","name":"MODI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude14"},71189:{"value":"11615","name":"MODI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude15"},71190:{"value":"11616","name":"MODI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude16"},71191:{"value":"11617","name":"MODI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude17"},71192:{"value":"11618","name":"MODI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude18"},71193:{"value":"11619","name":"MODI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude19"},71194:{"value":"1161A","name":"MODI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude1a"},71195:{"value":"1161B","name":"MODI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude1b"},71196:{"value":"1161C","name":"MODI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude1c"},71197:{"value":"1161D","name":"MODI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude1d"},71198:{"value":"1161E","name":"MODI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude1e"},71199:{"value":"1161F","name":"MODI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude1f"},71200:{"value":"11620","name":"MODI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude20"},71201:{"value":"11621","name":"MODI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude21"},71202:{"value":"11622","name":"MODI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude22"},71203:{"value":"11623","name":"MODI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude23"},71204:{"value":"11624","name":"MODI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude24"},71205:{"value":"11625","name":"MODI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude25"},71206:{"value":"11626","name":"MODI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude26"},71207:{"value":"11627","name":"MODI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude27"},71208:{"value":"11628","name":"MODI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude28"},71209:{"value":"11629","name":"MODI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude29"},71210:{"value":"1162A","name":"MODI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude2a"},71211:{"value":"1162B","name":"MODI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude2b"},71212:{"value":"1162C","name":"MODI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude2c"},71213:{"value":"1162D","name":"MODI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude2d"},71214:{"value":"1162E","name":"MODI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude2e"},71215:{"value":"1162F","name":"MODI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude2f"},71236:{"value":"11644","name":"MODI SIGN HUVA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude44"},71296:{"value":"11680","name":"TAKRI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude80"},71297:{"value":"11681","name":"TAKRI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude81"},71298:{"value":"11682","name":"TAKRI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude82"},71299:{"value":"11683","name":"TAKRI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude83"},71300:{"value":"11684","name":"TAKRI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude84"},71301:{"value":"11685","name":"TAKRI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude85"},71302:{"value":"11686","name":"TAKRI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude86"},71303:{"value":"11687","name":"TAKRI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude87"},71304:{"value":"11688","name":"TAKRI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude88"},71305:{"value":"11689","name":"TAKRI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude89"},71306:{"value":"1168A","name":"TAKRI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude8a"},71307:{"value":"1168B","name":"TAKRI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude8b"},71308:{"value":"1168C","name":"TAKRI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude8c"},71309:{"value":"1168D","name":"TAKRI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude8d"},71310:{"value":"1168E","name":"TAKRI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude8e"},71311:{"value":"1168F","name":"TAKRI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude8f"},71312:{"value":"11690","name":"TAKRI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude90"},71313:{"value":"11691","name":"TAKRI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude91"},71314:{"value":"11692","name":"TAKRI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude92"},71315:{"value":"11693","name":"TAKRI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude93"},71316:{"value":"11694","name":"TAKRI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude94"},71317:{"value":"11695","name":"TAKRI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude95"},71318:{"value":"11696","name":"TAKRI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude96"},71319:{"value":"11697","name":"TAKRI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude97"},71320:{"value":"11698","name":"TAKRI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude98"},71321:{"value":"11699","name":"TAKRI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude99"},71322:{"value":"1169A","name":"TAKRI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude9a"},71323:{"value":"1169B","name":"TAKRI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude9b"},71324:{"value":"1169C","name":"TAKRI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude9c"},71325:{"value":"1169D","name":"TAKRI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude9d"},71326:{"value":"1169E","name":"TAKRI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude9e"},71327:{"value":"1169F","name":"TAKRI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude9f"},71328:{"value":"116A0","name":"TAKRI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea0"},71329:{"value":"116A1","name":"TAKRI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea1"},71330:{"value":"116A2","name":"TAKRI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea2"},71331:{"value":"116A3","name":"TAKRI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea3"},71332:{"value":"116A4","name":"TAKRI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea4"},71333:{"value":"116A5","name":"TAKRI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea5"},71334:{"value":"116A6","name":"TAKRI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea6"},71335:{"value":"116A7","name":"TAKRI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea7"},71336:{"value":"116A8","name":"TAKRI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea8"},71337:{"value":"116A9","name":"TAKRI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udea9"},71338:{"value":"116AA","name":"TAKRI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeaa"},71352:{"value":"116B8","name":"TAKRI LETTER ARCHAIC KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb8"},71424:{"value":"11700","name":"AHOM LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf00"},71425:{"value":"11701","name":"AHOM LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf01"},71426:{"value":"11702","name":"AHOM LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf02"},71427:{"value":"11703","name":"AHOM LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf03"},71428:{"value":"11704","name":"AHOM LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf04"},71429:{"value":"11705","name":"AHOM LETTER ALTERNATE TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf05"},71430:{"value":"11706","name":"AHOM LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf06"},71431:{"value":"11707","name":"AHOM LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf07"},71432:{"value":"11708","name":"AHOM LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf08"},71433:{"value":"11709","name":"AHOM LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf09"},71434:{"value":"1170A","name":"AHOM LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf0a"},71435:{"value":"1170B","name":"AHOM LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf0b"},71436:{"value":"1170C","name":"AHOM LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf0c"},71437:{"value":"1170D","name":"AHOM LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf0d"},71438:{"value":"1170E","name":"AHOM LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf0e"},71439:{"value":"1170F","name":"AHOM LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf0f"},71440:{"value":"11710","name":"AHOM LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf10"},71441:{"value":"11711","name":"AHOM LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf11"},71442:{"value":"11712","name":"AHOM LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf12"},71443:{"value":"11713","name":"AHOM LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf13"},71444:{"value":"11714","name":"AHOM LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf14"},71445:{"value":"11715","name":"AHOM LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf15"},71446:{"value":"11716","name":"AHOM LETTER ALTERNATE GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf16"},71447:{"value":"11717","name":"AHOM LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf17"},71448:{"value":"11718","name":"AHOM LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf18"},71449:{"value":"11719","name":"AHOM LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf19"},71450:{"value":"1171A","name":"AHOM LETTER ALTERNATE BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf1a"},71488:{"value":"11740","name":"AHOM LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf40"},71489:{"value":"11741","name":"AHOM LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf41"},71490:{"value":"11742","name":"AHOM LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf42"},71491:{"value":"11743","name":"AHOM LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf43"},71492:{"value":"11744","name":"AHOM LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf44"},71493:{"value":"11745","name":"AHOM LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf45"},71494:{"value":"11746","name":"AHOM LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf46"},71680:{"value":"11800","name":"DOGRA LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc00"},71681:{"value":"11801","name":"DOGRA LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc01"},71682:{"value":"11802","name":"DOGRA LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc02"},71683:{"value":"11803","name":"DOGRA LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc03"},71684:{"value":"11804","name":"DOGRA LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc04"},71685:{"value":"11805","name":"DOGRA LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc05"},71686:{"value":"11806","name":"DOGRA LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc06"},71687:{"value":"11807","name":"DOGRA LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc07"},71688:{"value":"11808","name":"DOGRA LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc08"},71689:{"value":"11809","name":"DOGRA LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc09"},71690:{"value":"1180A","name":"DOGRA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc0a"},71691:{"value":"1180B","name":"DOGRA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc0b"},71692:{"value":"1180C","name":"DOGRA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc0c"},71693:{"value":"1180D","name":"DOGRA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc0d"},71694:{"value":"1180E","name":"DOGRA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc0e"},71695:{"value":"1180F","name":"DOGRA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc0f"},71696:{"value":"11810","name":"DOGRA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc10"},71697:{"value":"11811","name":"DOGRA LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc11"},71698:{"value":"11812","name":"DOGRA LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc12"},71699:{"value":"11813","name":"DOGRA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc13"},71700:{"value":"11814","name":"DOGRA LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc14"},71701:{"value":"11815","name":"DOGRA LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc15"},71702:{"value":"11816","name":"DOGRA LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc16"},71703:{"value":"11817","name":"DOGRA LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc17"},71704:{"value":"11818","name":"DOGRA LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc18"},71705:{"value":"11819","name":"DOGRA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc19"},71706:{"value":"1181A","name":"DOGRA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc1a"},71707:{"value":"1181B","name":"DOGRA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc1b"},71708:{"value":"1181C","name":"DOGRA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc1c"},71709:{"value":"1181D","name":"DOGRA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc1d"},71710:{"value":"1181E","name":"DOGRA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc1e"},71711:{"value":"1181F","name":"DOGRA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc1f"},71712:{"value":"11820","name":"DOGRA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc20"},71713:{"value":"11821","name":"DOGRA LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc21"},71714:{"value":"11822","name":"DOGRA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc22"},71715:{"value":"11823","name":"DOGRA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc23"},71716:{"value":"11824","name":"DOGRA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc24"},71717:{"value":"11825","name":"DOGRA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc25"},71718:{"value":"11826","name":"DOGRA LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc26"},71719:{"value":"11827","name":"DOGRA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc27"},71720:{"value":"11828","name":"DOGRA LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc28"},71721:{"value":"11829","name":"DOGRA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc29"},71722:{"value":"1182A","name":"DOGRA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc2a"},71723:{"value":"1182B","name":"DOGRA LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc2b"},71935:{"value":"118FF","name":"WARANG CITI OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcff"},71936:{"value":"11900","name":"DIVES AKURU LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd00"},71937:{"value":"11901","name":"DIVES AKURU LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd01"},71938:{"value":"11902","name":"DIVES AKURU LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd02"},71939:{"value":"11903","name":"DIVES AKURU LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd03"},71940:{"value":"11904","name":"DIVES AKURU LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd04"},71941:{"value":"11905","name":"DIVES AKURU LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd05"},71942:{"value":"11906","name":"DIVES AKURU LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd06"},71945:{"value":"11909","name":"DIVES AKURU LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd09"},71948:{"value":"1190C","name":"DIVES AKURU LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd0c"},71949:{"value":"1190D","name":"DIVES AKURU LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd0d"},71950:{"value":"1190E","name":"DIVES AKURU LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd0e"},71951:{"value":"1190F","name":"DIVES AKURU LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd0f"},71952:{"value":"11910","name":"DIVES AKURU LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd10"},71953:{"value":"11911","name":"DIVES AKURU LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd11"},71954:{"value":"11912","name":"DIVES AKURU LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd12"},71955:{"value":"11913","name":"DIVES AKURU LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd13"},71957:{"value":"11915","name":"DIVES AKURU LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd15"},71958:{"value":"11916","name":"DIVES AKURU LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd16"},71960:{"value":"11918","name":"DIVES AKURU LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd18"},71961:{"value":"11919","name":"DIVES AKURU LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd19"},71962:{"value":"1191A","name":"DIVES AKURU LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd1a"},71963:{"value":"1191B","name":"DIVES AKURU LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd1b"},71964:{"value":"1191C","name":"DIVES AKURU LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd1c"},71965:{"value":"1191D","name":"DIVES AKURU LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd1d"},71966:{"value":"1191E","name":"DIVES AKURU LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd1e"},71967:{"value":"1191F","name":"DIVES AKURU LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd1f"},71968:{"value":"11920","name":"DIVES AKURU LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd20"},71969:{"value":"11921","name":"DIVES AKURU LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd21"},71970:{"value":"11922","name":"DIVES AKURU LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd22"},71971:{"value":"11923","name":"DIVES AKURU LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd23"},71972:{"value":"11924","name":"DIVES AKURU LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd24"},71973:{"value":"11925","name":"DIVES AKURU LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd25"},71974:{"value":"11926","name":"DIVES AKURU LETTER YYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd26"},71975:{"value":"11927","name":"DIVES AKURU LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd27"},71976:{"value":"11928","name":"DIVES AKURU LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd28"},71977:{"value":"11929","name":"DIVES AKURU LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd29"},71978:{"value":"1192A","name":"DIVES AKURU LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd2a"},71979:{"value":"1192B","name":"DIVES AKURU LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd2b"},71980:{"value":"1192C","name":"DIVES AKURU LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd2c"},71981:{"value":"1192D","name":"DIVES AKURU LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd2d"},71982:{"value":"1192E","name":"DIVES AKURU LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd2e"},71983:{"value":"1192F","name":"DIVES AKURU LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd2f"},71999:{"value":"1193F","name":"DIVES AKURU PREFIXED NASAL SIGN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd3f"},72001:{"value":"11941","name":"DIVES AKURU INITIAL RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd41"},72096:{"value":"119A0","name":"NANDINAGARI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda0"},72097:{"value":"119A1","name":"NANDINAGARI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda1"},72098:{"value":"119A2","name":"NANDINAGARI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda2"},72099:{"value":"119A3","name":"NANDINAGARI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda3"},72100:{"value":"119A4","name":"NANDINAGARI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda4"},72101:{"value":"119A5","name":"NANDINAGARI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda5"},72102:{"value":"119A6","name":"NANDINAGARI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda6"},72103:{"value":"119A7","name":"NANDINAGARI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udda7"},72106:{"value":"119AA","name":"NANDINAGARI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddaa"},72107:{"value":"119AB","name":"NANDINAGARI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddab"},72108:{"value":"119AC","name":"NANDINAGARI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddac"},72109:{"value":"119AD","name":"NANDINAGARI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddad"},72110:{"value":"119AE","name":"NANDINAGARI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddae"},72111:{"value":"119AF","name":"NANDINAGARI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddaf"},72112:{"value":"119B0","name":"NANDINAGARI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb0"},72113:{"value":"119B1","name":"NANDINAGARI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb1"},72114:{"value":"119B2","name":"NANDINAGARI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb2"},72115:{"value":"119B3","name":"NANDINAGARI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb3"},72116:{"value":"119B4","name":"NANDINAGARI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb4"},72117:{"value":"119B5","name":"NANDINAGARI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb5"},72118:{"value":"119B6","name":"NANDINAGARI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb6"},72119:{"value":"119B7","name":"NANDINAGARI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb7"},72120:{"value":"119B8","name":"NANDINAGARI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb8"},72121:{"value":"119B9","name":"NANDINAGARI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddb9"},72122:{"value":"119BA","name":"NANDINAGARI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddba"},72123:{"value":"119BB","name":"NANDINAGARI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddbb"},72124:{"value":"119BC","name":"NANDINAGARI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddbc"},72125:{"value":"119BD","name":"NANDINAGARI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddbd"},72126:{"value":"119BE","name":"NANDINAGARI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddbe"},72127:{"value":"119BF","name":"NANDINAGARI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddbf"},72128:{"value":"119C0","name":"NANDINAGARI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc0"},72129:{"value":"119C1","name":"NANDINAGARI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc1"},72130:{"value":"119C2","name":"NANDINAGARI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc2"},72131:{"value":"119C3","name":"NANDINAGARI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc3"},72132:{"value":"119C4","name":"NANDINAGARI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc4"},72133:{"value":"119C5","name":"NANDINAGARI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc5"},72134:{"value":"119C6","name":"NANDINAGARI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc6"},72135:{"value":"119C7","name":"NANDINAGARI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc7"},72136:{"value":"119C8","name":"NANDINAGARI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc8"},72137:{"value":"119C9","name":"NANDINAGARI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddc9"},72138:{"value":"119CA","name":"NANDINAGARI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddca"},72139:{"value":"119CB","name":"NANDINAGARI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddcb"},72140:{"value":"119CC","name":"NANDINAGARI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddcc"},72141:{"value":"119CD","name":"NANDINAGARI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddcd"},72142:{"value":"119CE","name":"NANDINAGARI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddce"},72143:{"value":"119CF","name":"NANDINAGARI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddcf"},72144:{"value":"119D0","name":"NANDINAGARI LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd0"},72161:{"value":"119E1","name":"NANDINAGARI SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udde1"},72163:{"value":"119E3","name":"NANDINAGARI HEADSTROKE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udde3"},72192:{"value":"11A00","name":"ZANABAZAR SQUARE LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude00"},72203:{"value":"11A0B","name":"ZANABAZAR SQUARE LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude0b"},72204:{"value":"11A0C","name":"ZANABAZAR SQUARE LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude0c"},72205:{"value":"11A0D","name":"ZANABAZAR SQUARE LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude0d"},72206:{"value":"11A0E","name":"ZANABAZAR SQUARE LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude0e"},72207:{"value":"11A0F","name":"ZANABAZAR SQUARE LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude0f"},72208:{"value":"11A10","name":"ZANABAZAR SQUARE LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude10"},72209:{"value":"11A11","name":"ZANABAZAR SQUARE LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude11"},72210:{"value":"11A12","name":"ZANABAZAR SQUARE LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude12"},72211:{"value":"11A13","name":"ZANABAZAR SQUARE LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude13"},72212:{"value":"11A14","name":"ZANABAZAR SQUARE LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude14"},72213:{"value":"11A15","name":"ZANABAZAR SQUARE LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude15"},72214:{"value":"11A16","name":"ZANABAZAR SQUARE LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude16"},72215:{"value":"11A17","name":"ZANABAZAR SQUARE LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude17"},72216:{"value":"11A18","name":"ZANABAZAR SQUARE LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude18"},72217:{"value":"11A19","name":"ZANABAZAR SQUARE LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude19"},72218:{"value":"11A1A","name":"ZANABAZAR SQUARE LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude1a"},72219:{"value":"11A1B","name":"ZANABAZAR SQUARE LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude1b"},72220:{"value":"11A1C","name":"ZANABAZAR SQUARE LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude1c"},72221:{"value":"11A1D","name":"ZANABAZAR SQUARE LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude1d"},72222:{"value":"11A1E","name":"ZANABAZAR SQUARE LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude1e"},72223:{"value":"11A1F","name":"ZANABAZAR SQUARE LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude1f"},72224:{"value":"11A20","name":"ZANABAZAR SQUARE LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude20"},72225:{"value":"11A21","name":"ZANABAZAR SQUARE LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude21"},72226:{"value":"11A22","name":"ZANABAZAR SQUARE LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude22"},72227:{"value":"11A23","name":"ZANABAZAR SQUARE LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude23"},72228:{"value":"11A24","name":"ZANABAZAR SQUARE LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude24"},72229:{"value":"11A25","name":"ZANABAZAR SQUARE LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude25"},72230:{"value":"11A26","name":"ZANABAZAR SQUARE LETTER DZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude26"},72231:{"value":"11A27","name":"ZANABAZAR SQUARE LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude27"},72232:{"value":"11A28","name":"ZANABAZAR SQUARE LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude28"},72233:{"value":"11A29","name":"ZANABAZAR SQUARE LETTER -A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude29"},72234:{"value":"11A2A","name":"ZANABAZAR SQUARE LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude2a"},72235:{"value":"11A2B","name":"ZANABAZAR SQUARE LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude2b"},72236:{"value":"11A2C","name":"ZANABAZAR SQUARE LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude2c"},72237:{"value":"11A2D","name":"ZANABAZAR SQUARE LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude2d"},72238:{"value":"11A2E","name":"ZANABAZAR SQUARE LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude2e"},72239:{"value":"11A2F","name":"ZANABAZAR SQUARE LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude2f"},72240:{"value":"11A30","name":"ZANABAZAR SQUARE LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude30"},72241:{"value":"11A31","name":"ZANABAZAR SQUARE LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude31"},72242:{"value":"11A32","name":"ZANABAZAR SQUARE LETTER KSSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude32"},72250:{"value":"11A3A","name":"ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude3a"},72272:{"value":"11A50","name":"SOYOMBO LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude50"},72284:{"value":"11A5C","name":"SOYOMBO LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude5c"},72285:{"value":"11A5D","name":"SOYOMBO LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude5d"},72286:{"value":"11A5E","name":"SOYOMBO LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude5e"},72287:{"value":"11A5F","name":"SOYOMBO LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude5f"},72288:{"value":"11A60","name":"SOYOMBO LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude60"},72289:{"value":"11A61","name":"SOYOMBO LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude61"},72290:{"value":"11A62","name":"SOYOMBO LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude62"},72291:{"value":"11A63","name":"SOYOMBO LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude63"},72292:{"value":"11A64","name":"SOYOMBO LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude64"},72293:{"value":"11A65","name":"SOYOMBO LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude65"},72294:{"value":"11A66","name":"SOYOMBO LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude66"},72295:{"value":"11A67","name":"SOYOMBO LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude67"},72296:{"value":"11A68","name":"SOYOMBO LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude68"},72297:{"value":"11A69","name":"SOYOMBO LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude69"},72298:{"value":"11A6A","name":"SOYOMBO LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude6a"},72299:{"value":"11A6B","name":"SOYOMBO LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude6b"},72300:{"value":"11A6C","name":"SOYOMBO LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude6c"},72301:{"value":"11A6D","name":"SOYOMBO LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude6d"},72302:{"value":"11A6E","name":"SOYOMBO LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude6e"},72303:{"value":"11A6F","name":"SOYOMBO LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude6f"},72304:{"value":"11A70","name":"SOYOMBO LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude70"},72305:{"value":"11A71","name":"SOYOMBO LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude71"},72306:{"value":"11A72","name":"SOYOMBO LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude72"},72307:{"value":"11A73","name":"SOYOMBO LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude73"},72308:{"value":"11A74","name":"SOYOMBO LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude74"},72309:{"value":"11A75","name":"SOYOMBO LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude75"},72310:{"value":"11A76","name":"SOYOMBO LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude76"},72311:{"value":"11A77","name":"SOYOMBO LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude77"},72312:{"value":"11A78","name":"SOYOMBO LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude78"},72313:{"value":"11A79","name":"SOYOMBO LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude79"},72314:{"value":"11A7A","name":"SOYOMBO LETTER -A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude7a"},72315:{"value":"11A7B","name":"SOYOMBO LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude7b"},72316:{"value":"11A7C","name":"SOYOMBO LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude7c"},72317:{"value":"11A7D","name":"SOYOMBO LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude7d"},72318:{"value":"11A7E","name":"SOYOMBO LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude7e"},72319:{"value":"11A7F","name":"SOYOMBO LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude7f"},72320:{"value":"11A80","name":"SOYOMBO LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude80"},72321:{"value":"11A81","name":"SOYOMBO LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude81"},72322:{"value":"11A82","name":"SOYOMBO LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude82"},72323:{"value":"11A83","name":"SOYOMBO LETTER KSSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude83"},72324:{"value":"11A84","name":"SOYOMBO SIGN JIHVAMULIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude84"},72325:{"value":"11A85","name":"SOYOMBO SIGN UPADHMANIYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude85"},72326:{"value":"11A86","name":"SOYOMBO CLUSTER-INITIAL LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude86"},72327:{"value":"11A87","name":"SOYOMBO CLUSTER-INITIAL LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude87"},72328:{"value":"11A88","name":"SOYOMBO CLUSTER-INITIAL LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude88"},72329:{"value":"11A89","name":"SOYOMBO CLUSTER-INITIAL LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude89"},72349:{"value":"11A9D","name":"SOYOMBO MARK PLUTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude9d"},72368:{"value":"11AB0","name":"CANADIAN SYLLABICS NATTILIK HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb0"},72369:{"value":"11AB1","name":"CANADIAN SYLLABICS NATTILIK HII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb1"},72370:{"value":"11AB2","name":"CANADIAN SYLLABICS NATTILIK HO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb2"},72371:{"value":"11AB3","name":"CANADIAN SYLLABICS NATTILIK HOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb3"},72372:{"value":"11AB4","name":"CANADIAN SYLLABICS NATTILIK HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb4"},72373:{"value":"11AB5","name":"CANADIAN SYLLABICS NATTILIK HAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb5"},72374:{"value":"11AB6","name":"CANADIAN SYLLABICS NATTILIK SHRI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb6"},72375:{"value":"11AB7","name":"CANADIAN SYLLABICS NATTILIK SHRII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb7"},72376:{"value":"11AB8","name":"CANADIAN SYLLABICS NATTILIK SHRO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb8"},72377:{"value":"11AB9","name":"CANADIAN SYLLABICS NATTILIK SHROO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeb9"},72378:{"value":"11ABA","name":"CANADIAN SYLLABICS NATTILIK SHRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeba"},72379:{"value":"11ABB","name":"CANADIAN SYLLABICS NATTILIK SHRAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udebb"},72380:{"value":"11ABC","name":"CANADIAN SYLLABICS SPE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udebc"},72381:{"value":"11ABD","name":"CANADIAN SYLLABICS SPI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udebd"},72382:{"value":"11ABE","name":"CANADIAN SYLLABICS SPO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udebe"},72383:{"value":"11ABF","name":"CANADIAN SYLLABICS SPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udebf"},72384:{"value":"11AC0","name":"PAU CIN HAU LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec0"},72385:{"value":"11AC1","name":"PAU CIN HAU LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec1"},72386:{"value":"11AC2","name":"PAU CIN HAU LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec2"},72387:{"value":"11AC3","name":"PAU CIN HAU LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec3"},72388:{"value":"11AC4","name":"PAU CIN HAU LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec4"},72389:{"value":"11AC5","name":"PAU CIN HAU LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec5"},72390:{"value":"11AC6","name":"PAU CIN HAU LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec6"},72391:{"value":"11AC7","name":"PAU CIN HAU LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec7"},72392:{"value":"11AC8","name":"PAU CIN HAU LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec8"},72393:{"value":"11AC9","name":"PAU CIN HAU LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udec9"},72394:{"value":"11ACA","name":"PAU CIN HAU LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeca"},72395:{"value":"11ACB","name":"PAU CIN HAU LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udecb"},72396:{"value":"11ACC","name":"PAU CIN HAU LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udecc"},72397:{"value":"11ACD","name":"PAU CIN HAU LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udecd"},72398:{"value":"11ACE","name":"PAU CIN HAU LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udece"},72399:{"value":"11ACF","name":"PAU CIN HAU LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udecf"},72400:{"value":"11AD0","name":"PAU CIN HAU LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded0"},72401:{"value":"11AD1","name":"PAU CIN HAU LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded1"},72402:{"value":"11AD2","name":"PAU CIN HAU LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded2"},72403:{"value":"11AD3","name":"PAU CIN HAU LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded3"},72404:{"value":"11AD4","name":"PAU CIN HAU LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded4"},72405:{"value":"11AD5","name":"PAU CIN HAU LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded5"},72406:{"value":"11AD6","name":"PAU CIN HAU LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded6"},72407:{"value":"11AD7","name":"PAU CIN HAU LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded7"},72408:{"value":"11AD8","name":"PAU CIN HAU LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded8"},72409:{"value":"11AD9","name":"PAU CIN HAU LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uded9"},72410:{"value":"11ADA","name":"PAU CIN HAU LETTER UA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeda"},72411:{"value":"11ADB","name":"PAU CIN HAU LETTER IA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udedb"},72412:{"value":"11ADC","name":"PAU CIN HAU LETTER FINAL P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udedc"},72413:{"value":"11ADD","name":"PAU CIN HAU LETTER FINAL K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udedd"},72414:{"value":"11ADE","name":"PAU CIN HAU LETTER FINAL T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udede"},72415:{"value":"11ADF","name":"PAU CIN HAU LETTER FINAL M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udedf"},72416:{"value":"11AE0","name":"PAU CIN HAU LETTER FINAL N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee0"},72417:{"value":"11AE1","name":"PAU CIN HAU LETTER FINAL L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee1"},72418:{"value":"11AE2","name":"PAU CIN HAU LETTER FINAL W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee2"},72419:{"value":"11AE3","name":"PAU CIN HAU LETTER FINAL NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee3"},72420:{"value":"11AE4","name":"PAU CIN HAU LETTER FINAL Y","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee4"},72421:{"value":"11AE5","name":"PAU CIN HAU RISING TONE LONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee5"},72422:{"value":"11AE6","name":"PAU CIN HAU RISING TONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee6"},72423:{"value":"11AE7","name":"PAU CIN HAU SANDHI GLOTTAL STOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee7"},72424:{"value":"11AE8","name":"PAU CIN HAU RISING TONE LONG FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee8"},72425:{"value":"11AE9","name":"PAU CIN HAU RISING TONE FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udee9"},72426:{"value":"11AEA","name":"PAU CIN HAU SANDHI GLOTTAL STOP FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeea"},72427:{"value":"11AEB","name":"PAU CIN HAU SANDHI TONE LONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeeb"},72428:{"value":"11AEC","name":"PAU CIN HAU SANDHI TONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeec"},72429:{"value":"11AED","name":"PAU CIN HAU SANDHI TONE LONG FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeed"},72430:{"value":"11AEE","name":"PAU CIN HAU SANDHI TONE FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeee"},72431:{"value":"11AEF","name":"PAU CIN HAU MID-LEVEL TONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udeef"},72432:{"value":"11AF0","name":"PAU CIN HAU GLOTTAL STOP VARIANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef0"},72433:{"value":"11AF1","name":"PAU CIN HAU MID-LEVEL TONE LONG FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef1"},72434:{"value":"11AF2","name":"PAU CIN HAU MID-LEVEL TONE FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef2"},72435:{"value":"11AF3","name":"PAU CIN HAU LOW-FALLING TONE LONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef3"},72436:{"value":"11AF4","name":"PAU CIN HAU LOW-FALLING TONE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef4"},72437:{"value":"11AF5","name":"PAU CIN HAU GLOTTAL STOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef5"},72438:{"value":"11AF6","name":"PAU CIN HAU LOW-FALLING TONE LONG FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef6"},72439:{"value":"11AF7","name":"PAU CIN HAU LOW-FALLING TONE FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef7"},72440:{"value":"11AF8","name":"PAU CIN HAU GLOTTAL STOP FINAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udef8"},72704:{"value":"11C00","name":"BHAIKSUKI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc00"},72705:{"value":"11C01","name":"BHAIKSUKI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc01"},72706:{"value":"11C02","name":"BHAIKSUKI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc02"},72707:{"value":"11C03","name":"BHAIKSUKI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc03"},72708:{"value":"11C04","name":"BHAIKSUKI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc04"},72709:{"value":"11C05","name":"BHAIKSUKI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc05"},72710:{"value":"11C06","name":"BHAIKSUKI LETTER VOCALIC R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc06"},72711:{"value":"11C07","name":"BHAIKSUKI LETTER VOCALIC RR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc07"},72712:{"value":"11C08","name":"BHAIKSUKI LETTER VOCALIC L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc08"},72714:{"value":"11C0A","name":"BHAIKSUKI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc0a"},72715:{"value":"11C0B","name":"BHAIKSUKI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc0b"},72716:{"value":"11C0C","name":"BHAIKSUKI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc0c"},72717:{"value":"11C0D","name":"BHAIKSUKI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc0d"},72718:{"value":"11C0E","name":"BHAIKSUKI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc0e"},72719:{"value":"11C0F","name":"BHAIKSUKI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc0f"},72720:{"value":"11C10","name":"BHAIKSUKI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc10"},72721:{"value":"11C11","name":"BHAIKSUKI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc11"},72722:{"value":"11C12","name":"BHAIKSUKI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc12"},72723:{"value":"11C13","name":"BHAIKSUKI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc13"},72724:{"value":"11C14","name":"BHAIKSUKI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc14"},72725:{"value":"11C15","name":"BHAIKSUKI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc15"},72726:{"value":"11C16","name":"BHAIKSUKI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc16"},72727:{"value":"11C17","name":"BHAIKSUKI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc17"},72728:{"value":"11C18","name":"BHAIKSUKI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc18"},72729:{"value":"11C19","name":"BHAIKSUKI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc19"},72730:{"value":"11C1A","name":"BHAIKSUKI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc1a"},72731:{"value":"11C1B","name":"BHAIKSUKI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc1b"},72732:{"value":"11C1C","name":"BHAIKSUKI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc1c"},72733:{"value":"11C1D","name":"BHAIKSUKI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc1d"},72734:{"value":"11C1E","name":"BHAIKSUKI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc1e"},72735:{"value":"11C1F","name":"BHAIKSUKI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc1f"},72736:{"value":"11C20","name":"BHAIKSUKI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc20"},72737:{"value":"11C21","name":"BHAIKSUKI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc21"},72738:{"value":"11C22","name":"BHAIKSUKI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc22"},72739:{"value":"11C23","name":"BHAIKSUKI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc23"},72740:{"value":"11C24","name":"BHAIKSUKI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc24"},72741:{"value":"11C25","name":"BHAIKSUKI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc25"},72742:{"value":"11C26","name":"BHAIKSUKI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc26"},72743:{"value":"11C27","name":"BHAIKSUKI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc27"},72744:{"value":"11C28","name":"BHAIKSUKI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc28"},72745:{"value":"11C29","name":"BHAIKSUKI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc29"},72746:{"value":"11C2A","name":"BHAIKSUKI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc2a"},72747:{"value":"11C2B","name":"BHAIKSUKI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc2b"},72748:{"value":"11C2C","name":"BHAIKSUKI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc2c"},72749:{"value":"11C2D","name":"BHAIKSUKI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc2d"},72750:{"value":"11C2E","name":"BHAIKSUKI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc2e"},72768:{"value":"11C40","name":"BHAIKSUKI SIGN AVAGRAHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc40"},72818:{"value":"11C72","name":"MARCHEN LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc72"},72819:{"value":"11C73","name":"MARCHEN LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc73"},72820:{"value":"11C74","name":"MARCHEN LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc74"},72821:{"value":"11C75","name":"MARCHEN LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc75"},72822:{"value":"11C76","name":"MARCHEN LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc76"},72823:{"value":"11C77","name":"MARCHEN LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc77"},72824:{"value":"11C78","name":"MARCHEN LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc78"},72825:{"value":"11C79","name":"MARCHEN LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc79"},72826:{"value":"11C7A","name":"MARCHEN LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc7a"},72827:{"value":"11C7B","name":"MARCHEN LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc7b"},72828:{"value":"11C7C","name":"MARCHEN LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc7c"},72829:{"value":"11C7D","name":"MARCHEN LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc7d"},72830:{"value":"11C7E","name":"MARCHEN LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc7e"},72831:{"value":"11C7F","name":"MARCHEN LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc7f"},72832:{"value":"11C80","name":"MARCHEN LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc80"},72833:{"value":"11C81","name":"MARCHEN LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc81"},72834:{"value":"11C82","name":"MARCHEN LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc82"},72835:{"value":"11C83","name":"MARCHEN LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc83"},72836:{"value":"11C84","name":"MARCHEN LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc84"},72837:{"value":"11C85","name":"MARCHEN LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc85"},72838:{"value":"11C86","name":"MARCHEN LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc86"},72839:{"value":"11C87","name":"MARCHEN LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc87"},72840:{"value":"11C88","name":"MARCHEN LETTER -A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc88"},72841:{"value":"11C89","name":"MARCHEN LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc89"},72842:{"value":"11C8A","name":"MARCHEN LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc8a"},72843:{"value":"11C8B","name":"MARCHEN LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc8b"},72844:{"value":"11C8C","name":"MARCHEN LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc8c"},72845:{"value":"11C8D","name":"MARCHEN LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc8d"},72846:{"value":"11C8E","name":"MARCHEN LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc8e"},72847:{"value":"11C8F","name":"MARCHEN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc8f"},72960:{"value":"11D00","name":"MASARAM GONDI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd00"},72961:{"value":"11D01","name":"MASARAM GONDI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd01"},72962:{"value":"11D02","name":"MASARAM GONDI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd02"},72963:{"value":"11D03","name":"MASARAM GONDI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd03"},72964:{"value":"11D04","name":"MASARAM GONDI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd04"},72965:{"value":"11D05","name":"MASARAM GONDI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd05"},72966:{"value":"11D06","name":"MASARAM GONDI LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd06"},72968:{"value":"11D08","name":"MASARAM GONDI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd08"},72969:{"value":"11D09","name":"MASARAM GONDI LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd09"},72971:{"value":"11D0B","name":"MASARAM GONDI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd0b"},72972:{"value":"11D0C","name":"MASARAM GONDI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd0c"},72973:{"value":"11D0D","name":"MASARAM GONDI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd0d"},72974:{"value":"11D0E","name":"MASARAM GONDI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd0e"},72975:{"value":"11D0F","name":"MASARAM GONDI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd0f"},72976:{"value":"11D10","name":"MASARAM GONDI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd10"},72977:{"value":"11D11","name":"MASARAM GONDI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd11"},72978:{"value":"11D12","name":"MASARAM GONDI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd12"},72979:{"value":"11D13","name":"MASARAM GONDI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd13"},72980:{"value":"11D14","name":"MASARAM GONDI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd14"},72981:{"value":"11D15","name":"MASARAM GONDI LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd15"},72982:{"value":"11D16","name":"MASARAM GONDI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd16"},72983:{"value":"11D17","name":"MASARAM GONDI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd17"},72984:{"value":"11D18","name":"MASARAM GONDI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd18"},72985:{"value":"11D19","name":"MASARAM GONDI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd19"},72986:{"value":"11D1A","name":"MASARAM GONDI LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd1a"},72987:{"value":"11D1B","name":"MASARAM GONDI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd1b"},72988:{"value":"11D1C","name":"MASARAM GONDI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd1c"},72989:{"value":"11D1D","name":"MASARAM GONDI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd1d"},72990:{"value":"11D1E","name":"MASARAM GONDI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd1e"},72991:{"value":"11D1F","name":"MASARAM GONDI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd1f"},72992:{"value":"11D20","name":"MASARAM GONDI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd20"},72993:{"value":"11D21","name":"MASARAM GONDI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd21"},72994:{"value":"11D22","name":"MASARAM GONDI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd22"},72995:{"value":"11D23","name":"MASARAM GONDI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd23"},72996:{"value":"11D24","name":"MASARAM GONDI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd24"},72997:{"value":"11D25","name":"MASARAM GONDI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd25"},72998:{"value":"11D26","name":"MASARAM GONDI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd26"},72999:{"value":"11D27","name":"MASARAM GONDI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd27"},73000:{"value":"11D28","name":"MASARAM GONDI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd28"},73001:{"value":"11D29","name":"MASARAM GONDI LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd29"},73002:{"value":"11D2A","name":"MASARAM GONDI LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd2a"},73003:{"value":"11D2B","name":"MASARAM GONDI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd2b"},73004:{"value":"11D2C","name":"MASARAM GONDI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd2c"},73005:{"value":"11D2D","name":"MASARAM GONDI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd2d"},73006:{"value":"11D2E","name":"MASARAM GONDI LETTER KSSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd2e"},73007:{"value":"11D2F","name":"MASARAM GONDI LETTER JNYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd2f"},73008:{"value":"11D30","name":"MASARAM GONDI LETTER TRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd30"},73030:{"value":"11D46","name":"MASARAM GONDI REPHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd46"},73056:{"value":"11D60","name":"GUNJALA GONDI LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd60"},73057:{"value":"11D61","name":"GUNJALA GONDI LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd61"},73058:{"value":"11D62","name":"GUNJALA GONDI LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd62"},73059:{"value":"11D63","name":"GUNJALA GONDI LETTER II","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd63"},73060:{"value":"11D64","name":"GUNJALA GONDI LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd64"},73061:{"value":"11D65","name":"GUNJALA GONDI LETTER UU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd65"},73063:{"value":"11D67","name":"GUNJALA GONDI LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd67"},73064:{"value":"11D68","name":"GUNJALA GONDI LETTER AI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd68"},73066:{"value":"11D6A","name":"GUNJALA GONDI LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd6a"},73067:{"value":"11D6B","name":"GUNJALA GONDI LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd6b"},73068:{"value":"11D6C","name":"GUNJALA GONDI LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd6c"},73069:{"value":"11D6D","name":"GUNJALA GONDI LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd6d"},73070:{"value":"11D6E","name":"GUNJALA GONDI LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd6e"},73071:{"value":"11D6F","name":"GUNJALA GONDI LETTER BHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd6f"},73072:{"value":"11D70","name":"GUNJALA GONDI LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd70"},73073:{"value":"11D71","name":"GUNJALA GONDI LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd71"},73074:{"value":"11D72","name":"GUNJALA GONDI LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd72"},73075:{"value":"11D73","name":"GUNJALA GONDI LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd73"},73076:{"value":"11D74","name":"GUNJALA GONDI LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd74"},73077:{"value":"11D75","name":"GUNJALA GONDI LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd75"},73078:{"value":"11D76","name":"GUNJALA GONDI LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd76"},73079:{"value":"11D77","name":"GUNJALA GONDI LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd77"},73080:{"value":"11D78","name":"GUNJALA GONDI LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd78"},73081:{"value":"11D79","name":"GUNJALA GONDI LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd79"},73082:{"value":"11D7A","name":"GUNJALA GONDI LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd7a"},73083:{"value":"11D7B","name":"GUNJALA GONDI LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd7b"},73084:{"value":"11D7C","name":"GUNJALA GONDI LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd7c"},73085:{"value":"11D7D","name":"GUNJALA GONDI LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd7d"},73086:{"value":"11D7E","name":"GUNJALA GONDI LETTER TTHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd7e"},73087:{"value":"11D7F","name":"GUNJALA GONDI LETTER LLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd7f"},73088:{"value":"11D80","name":"GUNJALA GONDI LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd80"},73089:{"value":"11D81","name":"GUNJALA GONDI LETTER JHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd81"},73090:{"value":"11D82","name":"GUNJALA GONDI LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd82"},73091:{"value":"11D83","name":"GUNJALA GONDI LETTER DDHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd83"},73092:{"value":"11D84","name":"GUNJALA GONDI LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd84"},73093:{"value":"11D85","name":"GUNJALA GONDI LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd85"},73094:{"value":"11D86","name":"GUNJALA GONDI LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd86"},73095:{"value":"11D87","name":"GUNJALA GONDI LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd87"},73096:{"value":"11D88","name":"GUNJALA GONDI LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd88"},73097:{"value":"11D89","name":"GUNJALA GONDI LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd89"},73112:{"value":"11D98","name":"GUNJALA GONDI OM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd98"},73440:{"value":"11EE0","name":"MAKASAR LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee0"},73441:{"value":"11EE1","name":"MAKASAR LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee1"},73442:{"value":"11EE2","name":"MAKASAR LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee2"},73443:{"value":"11EE3","name":"MAKASAR LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee3"},73444:{"value":"11EE4","name":"MAKASAR LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee4"},73445:{"value":"11EE5","name":"MAKASAR LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee5"},73446:{"value":"11EE6","name":"MAKASAR LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee6"},73447:{"value":"11EE7","name":"MAKASAR LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee7"},73448:{"value":"11EE8","name":"MAKASAR LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee8"},73449:{"value":"11EE9","name":"MAKASAR LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udee9"},73450:{"value":"11EEA","name":"MAKASAR LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udeea"},73451:{"value":"11EEB","name":"MAKASAR LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udeeb"},73452:{"value":"11EEC","name":"MAKASAR LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udeec"},73453:{"value":"11EED","name":"MAKASAR LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udeed"},73454:{"value":"11EEE","name":"MAKASAR LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udeee"},73455:{"value":"11EEF","name":"MAKASAR LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udeef"},73456:{"value":"11EF0","name":"MAKASAR LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef0"},73457:{"value":"11EF1","name":"MAKASAR LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef1"},73458:{"value":"11EF2","name":"MAKASAR ANGKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef2"},73648:{"value":"11FB0","name":"LISU LETTER YHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfb0"},73728:{"value":"12000","name":"CUNEIFORM SIGN A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc00"},73729:{"value":"12001","name":"CUNEIFORM SIGN A TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc01"},73730:{"value":"12002","name":"CUNEIFORM SIGN A TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc02"},73731:{"value":"12003","name":"CUNEIFORM SIGN A TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc03"},73732:{"value":"12004","name":"CUNEIFORM SIGN A TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc04"},73733:{"value":"12005","name":"CUNEIFORM SIGN A TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc05"},73734:{"value":"12006","name":"CUNEIFORM SIGN A TIMES LAGAR GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc06"},73735:{"value":"12007","name":"CUNEIFORM SIGN A TIMES MUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc07"},73736:{"value":"12008","name":"CUNEIFORM SIGN A TIMES SAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc08"},73737:{"value":"12009","name":"CUNEIFORM SIGN A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc09"},73738:{"value":"1200A","name":"CUNEIFORM SIGN AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc0a"},73739:{"value":"1200B","name":"CUNEIFORM SIGN AB TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc0b"},73740:{"value":"1200C","name":"CUNEIFORM SIGN AB TIMES DUN3 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc0c"},73741:{"value":"1200D","name":"CUNEIFORM SIGN AB TIMES GAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc0d"},73742:{"value":"1200E","name":"CUNEIFORM SIGN AB TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc0e"},73743:{"value":"1200F","name":"CUNEIFORM SIGN AB TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc0f"},73744:{"value":"12010","name":"CUNEIFORM SIGN AB TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc10"},73745:{"value":"12011","name":"CUNEIFORM SIGN AB TIMES IMIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc11"},73746:{"value":"12012","name":"CUNEIFORM SIGN AB TIMES LAGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc12"},73747:{"value":"12013","name":"CUNEIFORM SIGN AB TIMES SHESH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc13"},73748:{"value":"12014","name":"CUNEIFORM SIGN AB TIMES U PLUS U PLUS U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc14"},73749:{"value":"12015","name":"CUNEIFORM SIGN AB GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc15"},73750:{"value":"12016","name":"CUNEIFORM SIGN AB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc16"},73751:{"value":"12017","name":"CUNEIFORM SIGN AB2 TIMES BALAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc17"},73752:{"value":"12018","name":"CUNEIFORM SIGN AB2 TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc18"},73753:{"value":"12019","name":"CUNEIFORM SIGN AB2 TIMES ME PLUS EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc19"},73754:{"value":"1201A","name":"CUNEIFORM SIGN AB2 TIMES SHA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc1a"},73755:{"value":"1201B","name":"CUNEIFORM SIGN AB2 TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc1b"},73756:{"value":"1201C","name":"CUNEIFORM SIGN AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc1c"},73757:{"value":"1201D","name":"CUNEIFORM SIGN AK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc1d"},73758:{"value":"1201E","name":"CUNEIFORM SIGN AK TIMES ERIN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc1e"},73759:{"value":"1201F","name":"CUNEIFORM SIGN AK TIMES SHITA PLUS GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc1f"},73760:{"value":"12020","name":"CUNEIFORM SIGN AL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc20"},73761:{"value":"12021","name":"CUNEIFORM SIGN AL TIMES AL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc21"},73762:{"value":"12022","name":"CUNEIFORM SIGN AL TIMES DIM2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc22"},73763:{"value":"12023","name":"CUNEIFORM SIGN AL TIMES GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc23"},73764:{"value":"12024","name":"CUNEIFORM SIGN AL TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc24"},73765:{"value":"12025","name":"CUNEIFORM SIGN AL TIMES KAD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc25"},73766:{"value":"12026","name":"CUNEIFORM SIGN AL TIMES KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc26"},73767:{"value":"12027","name":"CUNEIFORM SIGN AL TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc27"},73768:{"value":"12028","name":"CUNEIFORM SIGN AL TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc28"},73769:{"value":"12029","name":"CUNEIFORM SIGN ALAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc29"},73770:{"value":"1202A","name":"CUNEIFORM SIGN ALEPH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc2a"},73771:{"value":"1202B","name":"CUNEIFORM SIGN AMAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc2b"},73772:{"value":"1202C","name":"CUNEIFORM SIGN AMAR TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc2c"},73773:{"value":"1202D","name":"CUNEIFORM SIGN AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc2d"},73774:{"value":"1202E","name":"CUNEIFORM SIGN AN OVER AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc2e"},73775:{"value":"1202F","name":"CUNEIFORM SIGN AN THREE TIMES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc2f"},73776:{"value":"12030","name":"CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc30"},73777:{"value":"12031","name":"CUNEIFORM SIGN AN PLUS NAGA SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc31"},73778:{"value":"12032","name":"CUNEIFORM SIGN ANSHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc32"},73779:{"value":"12033","name":"CUNEIFORM SIGN APIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc33"},73780:{"value":"12034","name":"CUNEIFORM SIGN ARAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc34"},73781:{"value":"12035","name":"CUNEIFORM SIGN ARAD TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc35"},73782:{"value":"12036","name":"CUNEIFORM SIGN ARKAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc36"},73783:{"value":"12037","name":"CUNEIFORM SIGN ASAL2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc37"},73784:{"value":"12038","name":"CUNEIFORM SIGN ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc38"},73785:{"value":"12039","name":"CUNEIFORM SIGN ASH ZIDA TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc39"},73786:{"value":"1203A","name":"CUNEIFORM SIGN ASH KABA TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc3a"},73787:{"value":"1203B","name":"CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc3b"},73788:{"value":"1203C","name":"CUNEIFORM SIGN ASH OVER ASH OVER ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc3c"},73789:{"value":"1203D","name":"CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc3d"},73790:{"value":"1203E","name":"CUNEIFORM SIGN ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc3e"},73791:{"value":"1203F","name":"CUNEIFORM SIGN ASHGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc3f"},73792:{"value":"12040","name":"CUNEIFORM SIGN BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc40"},73793:{"value":"12041","name":"CUNEIFORM SIGN BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc41"},73794:{"value":"12042","name":"CUNEIFORM SIGN BAG3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc42"},73795:{"value":"12043","name":"CUNEIFORM SIGN BAHAR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc43"},73796:{"value":"12044","name":"CUNEIFORM SIGN BAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc44"},73797:{"value":"12045","name":"CUNEIFORM SIGN BAL OVER BAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc45"},73798:{"value":"12046","name":"CUNEIFORM SIGN BALAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc46"},73799:{"value":"12047","name":"CUNEIFORM SIGN BAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc47"},73800:{"value":"12048","name":"CUNEIFORM SIGN BARA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc48"},73801:{"value":"12049","name":"CUNEIFORM SIGN BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc49"},73802:{"value":"1204A","name":"CUNEIFORM SIGN BI TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc4a"},73803:{"value":"1204B","name":"CUNEIFORM SIGN BI TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc4b"},73804:{"value":"1204C","name":"CUNEIFORM SIGN BI TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc4c"},73805:{"value":"1204D","name":"CUNEIFORM SIGN BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc4d"},73806:{"value":"1204E","name":"CUNEIFORM SIGN BU OVER BU AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc4e"},73807:{"value":"1204F","name":"CUNEIFORM SIGN BU OVER BU UN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc4f"},73808:{"value":"12050","name":"CUNEIFORM SIGN BU CROSSING BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc50"},73809:{"value":"12051","name":"CUNEIFORM SIGN BULUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc51"},73810:{"value":"12052","name":"CUNEIFORM SIGN BULUG OVER BULUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc52"},73811:{"value":"12053","name":"CUNEIFORM SIGN BUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc53"},73812:{"value":"12054","name":"CUNEIFORM SIGN BUR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc54"},73813:{"value":"12055","name":"CUNEIFORM SIGN DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc55"},73814:{"value":"12056","name":"CUNEIFORM SIGN DAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc56"},73815:{"value":"12057","name":"CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc57"},73816:{"value":"12058","name":"CUNEIFORM SIGN DAG KISIM5 TIMES AMAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc58"},73817:{"value":"12059","name":"CUNEIFORM SIGN DAG KISIM5 TIMES BALAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc59"},73818:{"value":"1205A","name":"CUNEIFORM SIGN DAG KISIM5 TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc5a"},73819:{"value":"1205B","name":"CUNEIFORM SIGN DAG KISIM5 TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc5b"},73820:{"value":"1205C","name":"CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc5c"},73821:{"value":"1205D","name":"CUNEIFORM SIGN DAG KISIM5 TIMES GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc5d"},73822:{"value":"1205E","name":"CUNEIFORM SIGN DAG KISIM5 TIMES GIR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc5e"},73823:{"value":"1205F","name":"CUNEIFORM SIGN DAG KISIM5 TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc5f"},73824:{"value":"12060","name":"CUNEIFORM SIGN DAG KISIM5 TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc60"},73825:{"value":"12061","name":"CUNEIFORM SIGN DAG KISIM5 TIMES IR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc61"},73826:{"value":"12062","name":"CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc62"},73827:{"value":"12063","name":"CUNEIFORM SIGN DAG KISIM5 TIMES KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc63"},73828:{"value":"12064","name":"CUNEIFORM SIGN DAG KISIM5 TIMES LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc64"},73829:{"value":"12065","name":"CUNEIFORM SIGN DAG KISIM5 TIMES LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc65"},73830:{"value":"12066","name":"CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc66"},73831:{"value":"12067","name":"CUNEIFORM SIGN DAG KISIM5 TIMES LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc67"},73832:{"value":"12068","name":"CUNEIFORM SIGN DAG KISIM5 TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc68"},73833:{"value":"12069","name":"CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc69"},73834:{"value":"1206A","name":"CUNEIFORM SIGN DAG KISIM5 TIMES SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc6a"},73835:{"value":"1206B","name":"CUNEIFORM SIGN DAG KISIM5 TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc6b"},73836:{"value":"1206C","name":"CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc6c"},73837:{"value":"1206D","name":"CUNEIFORM SIGN DAG KISIM5 TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc6d"},73838:{"value":"1206E","name":"CUNEIFORM SIGN DAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc6e"},73839:{"value":"1206F","name":"CUNEIFORM SIGN DAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc6f"},73840:{"value":"12070","name":"CUNEIFORM SIGN DARA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc70"},73841:{"value":"12071","name":"CUNEIFORM SIGN DARA4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc71"},73842:{"value":"12072","name":"CUNEIFORM SIGN DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc72"},73843:{"value":"12073","name":"CUNEIFORM SIGN DIB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc73"},73844:{"value":"12074","name":"CUNEIFORM SIGN DIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc74"},73845:{"value":"12075","name":"CUNEIFORM SIGN DIM TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc75"},73846:{"value":"12076","name":"CUNEIFORM SIGN DIM2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc76"},73847:{"value":"12077","name":"CUNEIFORM SIGN DIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc77"},73848:{"value":"12078","name":"CUNEIFORM SIGN DIN KASKAL U GUNU DISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc78"},73849:{"value":"12079","name":"CUNEIFORM SIGN DISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc79"},73850:{"value":"1207A","name":"CUNEIFORM SIGN DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc7a"},73851:{"value":"1207B","name":"CUNEIFORM SIGN DU OVER DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc7b"},73852:{"value":"1207C","name":"CUNEIFORM SIGN DU GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc7c"},73853:{"value":"1207D","name":"CUNEIFORM SIGN DU SHESHIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc7d"},73854:{"value":"1207E","name":"CUNEIFORM SIGN DUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc7e"},73855:{"value":"1207F","name":"CUNEIFORM SIGN DUB TIMES ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc7f"},73856:{"value":"12080","name":"CUNEIFORM SIGN DUB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc80"},73857:{"value":"12081","name":"CUNEIFORM SIGN DUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc81"},73858:{"value":"12082","name":"CUNEIFORM SIGN DUGUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc82"},73859:{"value":"12083","name":"CUNEIFORM SIGN DUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc83"},73860:{"value":"12084","name":"CUNEIFORM SIGN DUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc84"},73861:{"value":"12085","name":"CUNEIFORM SIGN DUN3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc85"},73862:{"value":"12086","name":"CUNEIFORM SIGN DUN3 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc86"},73863:{"value":"12087","name":"CUNEIFORM SIGN DUN3 GUNU GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc87"},73864:{"value":"12088","name":"CUNEIFORM SIGN DUN4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc88"},73865:{"value":"12089","name":"CUNEIFORM SIGN DUR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc89"},73866:{"value":"1208A","name":"CUNEIFORM SIGN E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc8a"},73867:{"value":"1208B","name":"CUNEIFORM SIGN E TIMES PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc8b"},73868:{"value":"1208C","name":"CUNEIFORM SIGN E OVER E NUN OVER NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc8c"},73869:{"value":"1208D","name":"CUNEIFORM SIGN E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc8d"},73870:{"value":"1208E","name":"CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc8e"},73871:{"value":"1208F","name":"CUNEIFORM SIGN E2 TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc8f"},73872:{"value":"12090","name":"CUNEIFORM SIGN E2 TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc90"},73873:{"value":"12091","name":"CUNEIFORM SIGN E2 TIMES SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc91"},73874:{"value":"12092","name":"CUNEIFORM SIGN E2 TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc92"},73875:{"value":"12093","name":"CUNEIFORM SIGN E2 TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc93"},73876:{"value":"12094","name":"CUNEIFORM SIGN EDIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc94"},73877:{"value":"12095","name":"CUNEIFORM SIGN EGIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc95"},73878:{"value":"12096","name":"CUNEIFORM SIGN EL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc96"},73879:{"value":"12097","name":"CUNEIFORM SIGN EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc97"},73880:{"value":"12098","name":"CUNEIFORM SIGN EN TIMES GAN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc98"},73881:{"value":"12099","name":"CUNEIFORM SIGN EN TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc99"},73882:{"value":"1209A","name":"CUNEIFORM SIGN EN TIMES ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc9a"},73883:{"value":"1209B","name":"CUNEIFORM SIGN EN CROSSING EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc9b"},73884:{"value":"1209C","name":"CUNEIFORM SIGN EN OPPOSING EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc9c"},73885:{"value":"1209D","name":"CUNEIFORM SIGN EN SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc9d"},73886:{"value":"1209E","name":"CUNEIFORM SIGN EREN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc9e"},73887:{"value":"1209F","name":"CUNEIFORM SIGN ERIN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udc9f"},73888:{"value":"120A0","name":"CUNEIFORM SIGN ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca0"},73889:{"value":"120A1","name":"CUNEIFORM SIGN EZEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca1"},73890:{"value":"120A2","name":"CUNEIFORM SIGN EZEN TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca2"},73891:{"value":"120A3","name":"CUNEIFORM SIGN EZEN TIMES A PLUS LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca3"},73892:{"value":"120A4","name":"CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca4"},73893:{"value":"120A5","name":"CUNEIFORM SIGN EZEN TIMES AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca5"},73894:{"value":"120A6","name":"CUNEIFORM SIGN EZEN TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca6"},73895:{"value":"120A7","name":"CUNEIFORM SIGN EZEN TIMES DUN3 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca7"},73896:{"value":"120A8","name":"CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca8"},73897:{"value":"120A9","name":"CUNEIFORM SIGN EZEN TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udca9"},73898:{"value":"120AA","name":"CUNEIFORM SIGN EZEN TIMES HA GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcaa"},73899:{"value":"120AB","name":"CUNEIFORM SIGN EZEN TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcab"},73900:{"value":"120AC","name":"CUNEIFORM SIGN EZEN TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcac"},73901:{"value":"120AD","name":"CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcad"},73902:{"value":"120AE","name":"CUNEIFORM SIGN EZEN TIMES KU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcae"},73903:{"value":"120AF","name":"CUNEIFORM SIGN EZEN TIMES LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcaf"},73904:{"value":"120B0","name":"CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb0"},73905:{"value":"120B1","name":"CUNEIFORM SIGN EZEN TIMES LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb1"},73906:{"value":"120B2","name":"CUNEIFORM SIGN EZEN TIMES LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb2"},73907:{"value":"120B3","name":"CUNEIFORM SIGN EZEN TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb3"},73908:{"value":"120B4","name":"CUNEIFORM SIGN EZEN TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb4"},73909:{"value":"120B5","name":"CUNEIFORM SIGN GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb5"},73910:{"value":"120B6","name":"CUNEIFORM SIGN GA GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb6"},73911:{"value":"120B7","name":"CUNEIFORM SIGN GA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb7"},73912:{"value":"120B8","name":"CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb8"},73913:{"value":"120B9","name":"CUNEIFORM SIGN GA2 TIMES A PLUS HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcb9"},73914:{"value":"120BA","name":"CUNEIFORM SIGN GA2 TIMES A PLUS IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcba"},73915:{"value":"120BB","name":"CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcbb"},73916:{"value":"120BC","name":"CUNEIFORM SIGN GA2 TIMES AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcbc"},73917:{"value":"120BD","name":"CUNEIFORM SIGN GA2 TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcbd"},73918:{"value":"120BE","name":"CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcbe"},73919:{"value":"120BF","name":"CUNEIFORM SIGN GA2 TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcbf"},73920:{"value":"120C0","name":"CUNEIFORM SIGN GA2 TIMES BAR PLUS RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc0"},73921:{"value":"120C1","name":"CUNEIFORM SIGN GA2 TIMES BUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc1"},73922:{"value":"120C2","name":"CUNEIFORM SIGN GA2 TIMES BUR PLUS RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc2"},73923:{"value":"120C3","name":"CUNEIFORM SIGN GA2 TIMES DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc3"},73924:{"value":"120C4","name":"CUNEIFORM SIGN GA2 TIMES DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc4"},73925:{"value":"120C5","name":"CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc5"},73926:{"value":"120C6","name":"CUNEIFORM SIGN GA2 TIMES DUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc6"},73927:{"value":"120C7","name":"CUNEIFORM SIGN GA2 TIMES EL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc7"},73928:{"value":"120C8","name":"CUNEIFORM SIGN GA2 TIMES EL PLUS LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc8"},73929:{"value":"120C9","name":"CUNEIFORM SIGN GA2 TIMES EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcc9"},73930:{"value":"120CA","name":"CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcca"},73931:{"value":"120CB","name":"CUNEIFORM SIGN GA2 TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udccb"},73932:{"value":"120CC","name":"CUNEIFORM SIGN GA2 TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udccc"},73933:{"value":"120CD","name":"CUNEIFORM SIGN GA2 TIMES GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udccd"},73934:{"value":"120CE","name":"CUNEIFORM SIGN GA2 TIMES GI4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcce"},73935:{"value":"120CF","name":"CUNEIFORM SIGN GA2 TIMES GI4 PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udccf"},73936:{"value":"120D0","name":"CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd0"},73937:{"value":"120D1","name":"CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd1"},73938:{"value":"120D2","name":"CUNEIFORM SIGN GA2 TIMES HAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd2"},73939:{"value":"120D3","name":"CUNEIFORM SIGN GA2 TIMES HAL PLUS LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd3"},73940:{"value":"120D4","name":"CUNEIFORM SIGN GA2 TIMES HI PLUS LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd4"},73941:{"value":"120D5","name":"CUNEIFORM SIGN GA2 TIMES HUB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd5"},73942:{"value":"120D6","name":"CUNEIFORM SIGN GA2 TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd6"},73943:{"value":"120D7","name":"CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd7"},73944:{"value":"120D8","name":"CUNEIFORM SIGN GA2 TIMES KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd8"},73945:{"value":"120D9","name":"CUNEIFORM SIGN GA2 TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcd9"},73946:{"value":"120DA","name":"CUNEIFORM SIGN GA2 TIMES KID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcda"},73947:{"value":"120DB","name":"CUNEIFORM SIGN GA2 TIMES KID PLUS LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcdb"},73948:{"value":"120DC","name":"CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcdc"},73949:{"value":"120DD","name":"CUNEIFORM SIGN GA2 TIMES LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcdd"},73950:{"value":"120DE","name":"CUNEIFORM SIGN GA2 TIMES ME PLUS EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcde"},73951:{"value":"120DF","name":"CUNEIFORM SIGN GA2 TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcdf"},73952:{"value":"120E0","name":"CUNEIFORM SIGN GA2 TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce0"},73953:{"value":"120E1","name":"CUNEIFORM SIGN GA2 TIMES NUN OVER NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce1"},73954:{"value":"120E2","name":"CUNEIFORM SIGN GA2 TIMES PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce2"},73955:{"value":"120E3","name":"CUNEIFORM SIGN GA2 TIMES SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce3"},73956:{"value":"120E4","name":"CUNEIFORM SIGN GA2 TIMES SAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce4"},73957:{"value":"120E5","name":"CUNEIFORM SIGN GA2 TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce5"},73958:{"value":"120E6","name":"CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce6"},73959:{"value":"120E7","name":"CUNEIFORM SIGN GA2 TIMES SHID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce7"},73960:{"value":"120E8","name":"CUNEIFORM SIGN GA2 TIMES SUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce8"},73961:{"value":"120E9","name":"CUNEIFORM SIGN GA2 TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udce9"},73962:{"value":"120EA","name":"CUNEIFORM SIGN GA2 TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcea"},73963:{"value":"120EB","name":"CUNEIFORM SIGN GA2 TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udceb"},73964:{"value":"120EC","name":"CUNEIFORM SIGN GA2 TIMES UD PLUS DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcec"},73965:{"value":"120ED","name":"CUNEIFORM SIGN GA2 OVER GA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udced"},73966:{"value":"120EE","name":"CUNEIFORM SIGN GABA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcee"},73967:{"value":"120EF","name":"CUNEIFORM SIGN GABA CROSSING GABA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcef"},73968:{"value":"120F0","name":"CUNEIFORM SIGN GAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf0"},73969:{"value":"120F1","name":"CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf1"},73970:{"value":"120F2","name":"CUNEIFORM SIGN GAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf2"},73971:{"value":"120F3","name":"CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf3"},73972:{"value":"120F4","name":"CUNEIFORM SIGN GALAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf4"},73973:{"value":"120F5","name":"CUNEIFORM SIGN GAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf5"},73974:{"value":"120F6","name":"CUNEIFORM SIGN GAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf6"},73975:{"value":"120F7","name":"CUNEIFORM SIGN GAN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf7"},73976:{"value":"120F8","name":"CUNEIFORM SIGN GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf8"},73977:{"value":"120F9","name":"CUNEIFORM SIGN GAN2 OVER GAN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcf9"},73978:{"value":"120FA","name":"CUNEIFORM SIGN GAN2 CROSSING GAN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcfa"},73979:{"value":"120FB","name":"CUNEIFORM SIGN GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcfb"},73980:{"value":"120FC","name":"CUNEIFORM SIGN GAR3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcfc"},73981:{"value":"120FD","name":"CUNEIFORM SIGN GASHAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcfd"},73982:{"value":"120FE","name":"CUNEIFORM SIGN GESHTIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcfe"},73983:{"value":"120FF","name":"CUNEIFORM SIGN GESHTIN TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udcff"},73984:{"value":"12100","name":"CUNEIFORM SIGN GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd00"},73985:{"value":"12101","name":"CUNEIFORM SIGN GI TIMES E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd01"},73986:{"value":"12102","name":"CUNEIFORM SIGN GI TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd02"},73987:{"value":"12103","name":"CUNEIFORM SIGN GI CROSSING GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd03"},73988:{"value":"12104","name":"CUNEIFORM SIGN GI4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd04"},73989:{"value":"12105","name":"CUNEIFORM SIGN GI4 OVER GI4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd05"},73990:{"value":"12106","name":"CUNEIFORM SIGN GI4 CROSSING GI4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd06"},73991:{"value":"12107","name":"CUNEIFORM SIGN GIDIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd07"},73992:{"value":"12108","name":"CUNEIFORM SIGN GIR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd08"},73993:{"value":"12109","name":"CUNEIFORM SIGN GIR2 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd09"},73994:{"value":"1210A","name":"CUNEIFORM SIGN GIR3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd0a"},73995:{"value":"1210B","name":"CUNEIFORM SIGN GIR3 TIMES A PLUS IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd0b"},73996:{"value":"1210C","name":"CUNEIFORM SIGN GIR3 TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd0c"},73997:{"value":"1210D","name":"CUNEIFORM SIGN GIR3 TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd0d"},73998:{"value":"1210E","name":"CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd0e"},73999:{"value":"1210F","name":"CUNEIFORM SIGN GIR3 TIMES PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd0f"},74000:{"value":"12110","name":"CUNEIFORM SIGN GISAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd10"},74001:{"value":"12111","name":"CUNEIFORM SIGN GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd11"},74002:{"value":"12112","name":"CUNEIFORM SIGN GISH CROSSING GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd12"},74003:{"value":"12113","name":"CUNEIFORM SIGN GISH TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd13"},74004:{"value":"12114","name":"CUNEIFORM SIGN GISH TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd14"},74005:{"value":"12115","name":"CUNEIFORM SIGN GISH TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd15"},74006:{"value":"12116","name":"CUNEIFORM SIGN GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd16"},74007:{"value":"12117","name":"CUNEIFORM SIGN GU CROSSING GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd17"},74008:{"value":"12118","name":"CUNEIFORM SIGN GU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd18"},74009:{"value":"12119","name":"CUNEIFORM SIGN GU2 TIMES KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd19"},74010:{"value":"1211A","name":"CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd1a"},74011:{"value":"1211B","name":"CUNEIFORM SIGN GU2 TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd1b"},74012:{"value":"1211C","name":"CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd1c"},74013:{"value":"1211D","name":"CUNEIFORM SIGN GU2 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd1d"},74014:{"value":"1211E","name":"CUNEIFORM SIGN GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd1e"},74015:{"value":"1211F","name":"CUNEIFORM SIGN GUD TIMES A PLUS KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd1f"},74016:{"value":"12120","name":"CUNEIFORM SIGN GUD TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd20"},74017:{"value":"12121","name":"CUNEIFORM SIGN GUD OVER GUD LUGAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd21"},74018:{"value":"12122","name":"CUNEIFORM SIGN GUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd22"},74019:{"value":"12123","name":"CUNEIFORM SIGN GUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd23"},74020:{"value":"12124","name":"CUNEIFORM SIGN GUM TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd24"},74021:{"value":"12125","name":"CUNEIFORM SIGN GUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd25"},74022:{"value":"12126","name":"CUNEIFORM SIGN GUR7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd26"},74023:{"value":"12127","name":"CUNEIFORM SIGN GURUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd27"},74024:{"value":"12128","name":"CUNEIFORM SIGN GURUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd28"},74025:{"value":"12129","name":"CUNEIFORM SIGN HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd29"},74026:{"value":"1212A","name":"CUNEIFORM SIGN HA TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd2a"},74027:{"value":"1212B","name":"CUNEIFORM SIGN HA GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd2b"},74028:{"value":"1212C","name":"CUNEIFORM SIGN HAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd2c"},74029:{"value":"1212D","name":"CUNEIFORM SIGN HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd2d"},74030:{"value":"1212E","name":"CUNEIFORM SIGN HI TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd2e"},74031:{"value":"1212F","name":"CUNEIFORM SIGN HI TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd2f"},74032:{"value":"12130","name":"CUNEIFORM SIGN HI TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd30"},74033:{"value":"12131","name":"CUNEIFORM SIGN HI TIMES DISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd31"},74034:{"value":"12132","name":"CUNEIFORM SIGN HI TIMES GAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd32"},74035:{"value":"12133","name":"CUNEIFORM SIGN HI TIMES KIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd33"},74036:{"value":"12134","name":"CUNEIFORM SIGN HI TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd34"},74037:{"value":"12135","name":"CUNEIFORM SIGN HI TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd35"},74038:{"value":"12136","name":"CUNEIFORM SIGN HI TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd36"},74039:{"value":"12137","name":"CUNEIFORM SIGN HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd37"},74040:{"value":"12138","name":"CUNEIFORM SIGN HUB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd38"},74041:{"value":"12139","name":"CUNEIFORM SIGN HUB2 TIMES AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd39"},74042:{"value":"1213A","name":"CUNEIFORM SIGN HUB2 TIMES HAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd3a"},74043:{"value":"1213B","name":"CUNEIFORM SIGN HUB2 TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd3b"},74044:{"value":"1213C","name":"CUNEIFORM SIGN HUB2 TIMES LISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd3c"},74045:{"value":"1213D","name":"CUNEIFORM SIGN HUB2 TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd3d"},74046:{"value":"1213E","name":"CUNEIFORM SIGN HUL2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd3e"},74047:{"value":"1213F","name":"CUNEIFORM SIGN I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd3f"},74048:{"value":"12140","name":"CUNEIFORM SIGN I A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd40"},74049:{"value":"12141","name":"CUNEIFORM SIGN IB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd41"},74050:{"value":"12142","name":"CUNEIFORM SIGN IDIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd42"},74051:{"value":"12143","name":"CUNEIFORM SIGN IDIM OVER IDIM BUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd43"},74052:{"value":"12144","name":"CUNEIFORM SIGN IDIM OVER IDIM SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd44"},74053:{"value":"12145","name":"CUNEIFORM SIGN IG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd45"},74054:{"value":"12146","name":"CUNEIFORM SIGN IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd46"},74055:{"value":"12147","name":"CUNEIFORM SIGN IGI DIB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd47"},74056:{"value":"12148","name":"CUNEIFORM SIGN IGI RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd48"},74057:{"value":"12149","name":"CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd49"},74058:{"value":"1214A","name":"CUNEIFORM SIGN IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd4a"},74059:{"value":"1214B","name":"CUNEIFORM SIGN IL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd4b"},74060:{"value":"1214C","name":"CUNEIFORM SIGN IL TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd4c"},74061:{"value":"1214D","name":"CUNEIFORM SIGN IL2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd4d"},74062:{"value":"1214E","name":"CUNEIFORM SIGN IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd4e"},74063:{"value":"1214F","name":"CUNEIFORM SIGN IM TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd4f"},74064:{"value":"12150","name":"CUNEIFORM SIGN IM CROSSING IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd50"},74065:{"value":"12151","name":"CUNEIFORM SIGN IM OPPOSING IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd51"},74066:{"value":"12152","name":"CUNEIFORM SIGN IM SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd52"},74067:{"value":"12153","name":"CUNEIFORM SIGN IMIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd53"},74068:{"value":"12154","name":"CUNEIFORM SIGN IN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd54"},74069:{"value":"12155","name":"CUNEIFORM SIGN IR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd55"},74070:{"value":"12156","name":"CUNEIFORM SIGN ISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd56"},74071:{"value":"12157","name":"CUNEIFORM SIGN KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd57"},74072:{"value":"12158","name":"CUNEIFORM SIGN KA TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd58"},74073:{"value":"12159","name":"CUNEIFORM SIGN KA TIMES AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd59"},74074:{"value":"1215A","name":"CUNEIFORM SIGN KA TIMES AD PLUS KU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd5a"},74075:{"value":"1215B","name":"CUNEIFORM SIGN KA TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd5b"},74076:{"value":"1215C","name":"CUNEIFORM SIGN KA TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd5c"},74077:{"value":"1215D","name":"CUNEIFORM SIGN KA TIMES BALAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd5d"},74078:{"value":"1215E","name":"CUNEIFORM SIGN KA TIMES BAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd5e"},74079:{"value":"1215F","name":"CUNEIFORM SIGN KA TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd5f"},74080:{"value":"12160","name":"CUNEIFORM SIGN KA TIMES ERIN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd60"},74081:{"value":"12161","name":"CUNEIFORM SIGN KA TIMES ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd61"},74082:{"value":"12162","name":"CUNEIFORM SIGN KA TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd62"},74083:{"value":"12163","name":"CUNEIFORM SIGN KA TIMES GAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd63"},74084:{"value":"12164","name":"CUNEIFORM SIGN KA TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd64"},74085:{"value":"12165","name":"CUNEIFORM SIGN KA TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd65"},74086:{"value":"12166","name":"CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd66"},74087:{"value":"12167","name":"CUNEIFORM SIGN KA TIMES GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd67"},74088:{"value":"12168","name":"CUNEIFORM SIGN KA TIMES GIR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd68"},74089:{"value":"12169","name":"CUNEIFORM SIGN KA TIMES GISH PLUS SAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd69"},74090:{"value":"1216A","name":"CUNEIFORM SIGN KA TIMES GISH CROSSING GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd6a"},74091:{"value":"1216B","name":"CUNEIFORM SIGN KA TIMES GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd6b"},74092:{"value":"1216C","name":"CUNEIFORM SIGN KA TIMES GUR7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd6c"},74093:{"value":"1216D","name":"CUNEIFORM SIGN KA TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd6d"},74094:{"value":"1216E","name":"CUNEIFORM SIGN KA TIMES IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd6e"},74095:{"value":"1216F","name":"CUNEIFORM SIGN KA TIMES KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd6f"},74096:{"value":"12170","name":"CUNEIFORM SIGN KA TIMES KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd70"},74097:{"value":"12171","name":"CUNEIFORM SIGN KA TIMES KID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd71"},74098:{"value":"12172","name":"CUNEIFORM SIGN KA TIMES LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd72"},74099:{"value":"12173","name":"CUNEIFORM SIGN KA TIMES LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd73"},74100:{"value":"12174","name":"CUNEIFORM SIGN KA TIMES ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd74"},74101:{"value":"12175","name":"CUNEIFORM SIGN KA TIMES ME PLUS DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd75"},74102:{"value":"12176","name":"CUNEIFORM SIGN KA TIMES ME PLUS GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd76"},74103:{"value":"12177","name":"CUNEIFORM SIGN KA TIMES ME PLUS TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd77"},74104:{"value":"12178","name":"CUNEIFORM SIGN KA TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd78"},74105:{"value":"12179","name":"CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd79"},74106:{"value":"1217A","name":"CUNEIFORM SIGN KA TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd7a"},74107:{"value":"1217B","name":"CUNEIFORM SIGN KA TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd7b"},74108:{"value":"1217C","name":"CUNEIFORM SIGN KA TIMES PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd7c"},74109:{"value":"1217D","name":"CUNEIFORM SIGN KA TIMES RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd7d"},74110:{"value":"1217E","name":"CUNEIFORM SIGN KA TIMES SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd7e"},74111:{"value":"1217F","name":"CUNEIFORM SIGN KA TIMES SAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd7f"},74112:{"value":"12180","name":"CUNEIFORM SIGN KA TIMES SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd80"},74113:{"value":"12181","name":"CUNEIFORM SIGN KA TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd81"},74114:{"value":"12182","name":"CUNEIFORM SIGN KA TIMES SHID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd82"},74115:{"value":"12183","name":"CUNEIFORM SIGN KA TIMES SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd83"},74116:{"value":"12184","name":"CUNEIFORM SIGN KA TIMES SIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd84"},74117:{"value":"12185","name":"CUNEIFORM SIGN KA TIMES SUHUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd85"},74118:{"value":"12186","name":"CUNEIFORM SIGN KA TIMES TAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd86"},74119:{"value":"12187","name":"CUNEIFORM SIGN KA TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd87"},74120:{"value":"12188","name":"CUNEIFORM SIGN KA TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd88"},74121:{"value":"12189","name":"CUNEIFORM SIGN KA TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd89"},74122:{"value":"1218A","name":"CUNEIFORM SIGN KA TIMES UMUM TIMES PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd8a"},74123:{"value":"1218B","name":"CUNEIFORM SIGN KA TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd8b"},74124:{"value":"1218C","name":"CUNEIFORM SIGN KA TIMES ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd8c"},74125:{"value":"1218D","name":"CUNEIFORM SIGN KA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd8d"},74126:{"value":"1218E","name":"CUNEIFORM SIGN KA2 CROSSING KA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd8e"},74127:{"value":"1218F","name":"CUNEIFORM SIGN KAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd8f"},74128:{"value":"12190","name":"CUNEIFORM SIGN KAD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd90"},74129:{"value":"12191","name":"CUNEIFORM SIGN KAD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd91"},74130:{"value":"12192","name":"CUNEIFORM SIGN KAD4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd92"},74131:{"value":"12193","name":"CUNEIFORM SIGN KAD5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd93"},74132:{"value":"12194","name":"CUNEIFORM SIGN KAD5 OVER KAD5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd94"},74133:{"value":"12195","name":"CUNEIFORM SIGN KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd95"},74134:{"value":"12196","name":"CUNEIFORM SIGN KAK TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd96"},74135:{"value":"12197","name":"CUNEIFORM SIGN KAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd97"},74136:{"value":"12198","name":"CUNEIFORM SIGN KAL TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd98"},74137:{"value":"12199","name":"CUNEIFORM SIGN KAL CROSSING KAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd99"},74138:{"value":"1219A","name":"CUNEIFORM SIGN KAM2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd9a"},74139:{"value":"1219B","name":"CUNEIFORM SIGN KAM4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd9b"},74140:{"value":"1219C","name":"CUNEIFORM SIGN KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd9c"},74141:{"value":"1219D","name":"CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd9d"},74142:{"value":"1219E","name":"CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd9e"},74143:{"value":"1219F","name":"CUNEIFORM SIGN KESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udd9f"},74144:{"value":"121A0","name":"CUNEIFORM SIGN KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda0"},74145:{"value":"121A1","name":"CUNEIFORM SIGN KI TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda1"},74146:{"value":"121A2","name":"CUNEIFORM SIGN KI TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda2"},74147:{"value":"121A3","name":"CUNEIFORM SIGN KI TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda3"},74148:{"value":"121A4","name":"CUNEIFORM SIGN KID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda4"},74149:{"value":"121A5","name":"CUNEIFORM SIGN KIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda5"},74150:{"value":"121A6","name":"CUNEIFORM SIGN KISAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda6"},74151:{"value":"121A7","name":"CUNEIFORM SIGN KISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda7"},74152:{"value":"121A8","name":"CUNEIFORM SIGN KISIM5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda8"},74153:{"value":"121A9","name":"CUNEIFORM SIGN KISIM5 OVER KISIM5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udda9"},74154:{"value":"121AA","name":"CUNEIFORM SIGN KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddaa"},74155:{"value":"121AB","name":"CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddab"},74156:{"value":"121AC","name":"CUNEIFORM SIGN KU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddac"},74157:{"value":"121AD","name":"CUNEIFORM SIGN KU4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddad"},74158:{"value":"121AE","name":"CUNEIFORM SIGN KU4 VARIANT FORM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddae"},74159:{"value":"121AF","name":"CUNEIFORM SIGN KU7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddaf"},74160:{"value":"121B0","name":"CUNEIFORM SIGN KUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb0"},74161:{"value":"121B1","name":"CUNEIFORM SIGN KUL GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb1"},74162:{"value":"121B2","name":"CUNEIFORM SIGN KUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb2"},74163:{"value":"121B3","name":"CUNEIFORM SIGN KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb3"},74164:{"value":"121B4","name":"CUNEIFORM SIGN KUR OPPOSING KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb4"},74165:{"value":"121B5","name":"CUNEIFORM SIGN KUSHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb5"},74166:{"value":"121B6","name":"CUNEIFORM SIGN KWU318","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb6"},74167:{"value":"121B7","name":"CUNEIFORM SIGN LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb7"},74168:{"value":"121B8","name":"CUNEIFORM SIGN LAGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb8"},74169:{"value":"121B9","name":"CUNEIFORM SIGN LAGAB TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddb9"},74170:{"value":"121BA","name":"CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddba"},74171:{"value":"121BB","name":"CUNEIFORM SIGN LAGAB TIMES A PLUS GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddbb"},74172:{"value":"121BC","name":"CUNEIFORM SIGN LAGAB TIMES A PLUS LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddbc"},74173:{"value":"121BD","name":"CUNEIFORM SIGN LAGAB TIMES AL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddbd"},74174:{"value":"121BE","name":"CUNEIFORM SIGN LAGAB TIMES AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddbe"},74175:{"value":"121BF","name":"CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddbf"},74176:{"value":"121C0","name":"CUNEIFORM SIGN LAGAB TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc0"},74177:{"value":"121C1","name":"CUNEIFORM SIGN LAGAB TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc1"},74178:{"value":"121C2","name":"CUNEIFORM SIGN LAGAB TIMES DAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc2"},74179:{"value":"121C3","name":"CUNEIFORM SIGN LAGAB TIMES EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc3"},74180:{"value":"121C4","name":"CUNEIFORM SIGN LAGAB TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc4"},74181:{"value":"121C5","name":"CUNEIFORM SIGN LAGAB TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc5"},74182:{"value":"121C6","name":"CUNEIFORM SIGN LAGAB TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc6"},74183:{"value":"121C7","name":"CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc7"},74184:{"value":"121C8","name":"CUNEIFORM SIGN LAGAB TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc8"},74185:{"value":"121C9","name":"CUNEIFORM SIGN LAGAB TIMES HAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddc9"},74186:{"value":"121CA","name":"CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddca"},74187:{"value":"121CB","name":"CUNEIFORM SIGN LAGAB TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddcb"},74188:{"value":"121CC","name":"CUNEIFORM SIGN LAGAB TIMES IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddcc"},74189:{"value":"121CD","name":"CUNEIFORM SIGN LAGAB TIMES IM PLUS HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddcd"},74190:{"value":"121CE","name":"CUNEIFORM SIGN LAGAB TIMES IM PLUS LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddce"},74191:{"value":"121CF","name":"CUNEIFORM SIGN LAGAB TIMES KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddcf"},74192:{"value":"121D0","name":"CUNEIFORM SIGN LAGAB TIMES KIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd0"},74193:{"value":"121D1","name":"CUNEIFORM SIGN LAGAB TIMES KU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd1"},74194:{"value":"121D2","name":"CUNEIFORM SIGN LAGAB TIMES KUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd2"},74195:{"value":"121D3","name":"CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd3"},74196:{"value":"121D4","name":"CUNEIFORM SIGN LAGAB TIMES LAGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd4"},74197:{"value":"121D5","name":"CUNEIFORM SIGN LAGAB TIMES LISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd5"},74198:{"value":"121D6","name":"CUNEIFORM SIGN LAGAB TIMES LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd6"},74199:{"value":"121D7","name":"CUNEIFORM SIGN LAGAB TIMES LUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd7"},74200:{"value":"121D8","name":"CUNEIFORM SIGN LAGAB TIMES ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd8"},74201:{"value":"121D9","name":"CUNEIFORM SIGN LAGAB TIMES ME PLUS EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddd9"},74202:{"value":"121DA","name":"CUNEIFORM SIGN LAGAB TIMES MUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddda"},74203:{"value":"121DB","name":"CUNEIFORM SIGN LAGAB TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udddb"},74204:{"value":"121DC","name":"CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udddc"},74205:{"value":"121DD","name":"CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udddd"},74206:{"value":"121DE","name":"CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddde"},74207:{"value":"121DF","name":"CUNEIFORM SIGN LAGAB TIMES SHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udddf"},74208:{"value":"121E0","name":"CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde0"},74209:{"value":"121E1","name":"CUNEIFORM SIGN LAGAB TIMES SUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde1"},74210:{"value":"121E2","name":"CUNEIFORM SIGN LAGAB TIMES TAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde2"},74211:{"value":"121E3","name":"CUNEIFORM SIGN LAGAB TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde3"},74212:{"value":"121E4","name":"CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde4"},74213:{"value":"121E5","name":"CUNEIFORM SIGN LAGAB TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde5"},74214:{"value":"121E6","name":"CUNEIFORM SIGN LAGAB TIMES U PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde6"},74215:{"value":"121E7","name":"CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde7"},74216:{"value":"121E8","name":"CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde8"},74217:{"value":"121E9","name":"CUNEIFORM SIGN LAGAB TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udde9"},74218:{"value":"121EA","name":"CUNEIFORM SIGN LAGAB TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddea"},74219:{"value":"121EB","name":"CUNEIFORM SIGN LAGAB SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddeb"},74220:{"value":"121EC","name":"CUNEIFORM SIGN LAGAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddec"},74221:{"value":"121ED","name":"CUNEIFORM SIGN LAGAR TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udded"},74222:{"value":"121EE","name":"CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddee"},74223:{"value":"121EF","name":"CUNEIFORM SIGN LAGAR GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddef"},74224:{"value":"121F0","name":"CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf0"},74225:{"value":"121F1","name":"CUNEIFORM SIGN LAHSHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf1"},74226:{"value":"121F2","name":"CUNEIFORM SIGN LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf2"},74227:{"value":"121F3","name":"CUNEIFORM SIGN LAL TIMES LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf3"},74228:{"value":"121F4","name":"CUNEIFORM SIGN LAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf4"},74229:{"value":"121F5","name":"CUNEIFORM SIGN LAM TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf5"},74230:{"value":"121F6","name":"CUNEIFORM SIGN LAM TIMES KUR PLUS RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf6"},74231:{"value":"121F7","name":"CUNEIFORM SIGN LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf7"},74232:{"value":"121F8","name":"CUNEIFORM SIGN LIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf8"},74233:{"value":"121F9","name":"CUNEIFORM SIGN LIMMU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddf9"},74234:{"value":"121FA","name":"CUNEIFORM SIGN LISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddfa"},74235:{"value":"121FB","name":"CUNEIFORM SIGN LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddfb"},74236:{"value":"121FC","name":"CUNEIFORM SIGN LU TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddfc"},74237:{"value":"121FD","name":"CUNEIFORM SIGN LU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddfd"},74238:{"value":"121FE","name":"CUNEIFORM SIGN LU2 TIMES AL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddfe"},74239:{"value":"121FF","name":"CUNEIFORM SIGN LU2 TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uddff"},74240:{"value":"12200","name":"CUNEIFORM SIGN LU2 TIMES ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude00"},74241:{"value":"12201","name":"CUNEIFORM SIGN LU2 TIMES ESH2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude01"},74242:{"value":"12202","name":"CUNEIFORM SIGN LU2 TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude02"},74243:{"value":"12203","name":"CUNEIFORM SIGN LU2 TIMES HI TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude03"},74244:{"value":"12204","name":"CUNEIFORM SIGN LU2 TIMES IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude04"},74245:{"value":"12205","name":"CUNEIFORM SIGN LU2 TIMES KAD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude05"},74246:{"value":"12206","name":"CUNEIFORM SIGN LU2 TIMES KAD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude06"},74247:{"value":"12207","name":"CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude07"},74248:{"value":"12208","name":"CUNEIFORM SIGN LU2 TIMES KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude08"},74249:{"value":"12209","name":"CUNEIFORM SIGN LU2 TIMES LA PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude09"},74250:{"value":"1220A","name":"CUNEIFORM SIGN LU2 TIMES LAGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude0a"},74251:{"value":"1220B","name":"CUNEIFORM SIGN LU2 TIMES ME PLUS EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude0b"},74252:{"value":"1220C","name":"CUNEIFORM SIGN LU2 TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude0c"},74253:{"value":"1220D","name":"CUNEIFORM SIGN LU2 TIMES NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude0d"},74254:{"value":"1220E","name":"CUNEIFORM SIGN LU2 TIMES SI PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude0e"},74255:{"value":"1220F","name":"CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude0f"},74256:{"value":"12210","name":"CUNEIFORM SIGN LU2 TIMES TUG2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude10"},74257:{"value":"12211","name":"CUNEIFORM SIGN LU2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude11"},74258:{"value":"12212","name":"CUNEIFORM SIGN LU2 CROSSING LU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude12"},74259:{"value":"12213","name":"CUNEIFORM SIGN LU2 OPPOSING LU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude13"},74260:{"value":"12214","name":"CUNEIFORM SIGN LU2 SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude14"},74261:{"value":"12215","name":"CUNEIFORM SIGN LU2 SHESHIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude15"},74262:{"value":"12216","name":"CUNEIFORM SIGN LU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude16"},74263:{"value":"12217","name":"CUNEIFORM SIGN LUGAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude17"},74264:{"value":"12218","name":"CUNEIFORM SIGN LUGAL OVER LUGAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude18"},74265:{"value":"12219","name":"CUNEIFORM SIGN LUGAL OPPOSING LUGAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude19"},74266:{"value":"1221A","name":"CUNEIFORM SIGN LUGAL SHESHIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude1a"},74267:{"value":"1221B","name":"CUNEIFORM SIGN LUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude1b"},74268:{"value":"1221C","name":"CUNEIFORM SIGN LUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude1c"},74269:{"value":"1221D","name":"CUNEIFORM SIGN LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude1d"},74270:{"value":"1221E","name":"CUNEIFORM SIGN LUM OVER LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude1e"},74271:{"value":"1221F","name":"CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude1f"},74272:{"value":"12220","name":"CUNEIFORM SIGN MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude20"},74273:{"value":"12221","name":"CUNEIFORM SIGN MA TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude21"},74274:{"value":"12222","name":"CUNEIFORM SIGN MA GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude22"},74275:{"value":"12223","name":"CUNEIFORM SIGN MA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude23"},74276:{"value":"12224","name":"CUNEIFORM SIGN MAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude24"},74277:{"value":"12225","name":"CUNEIFORM SIGN MAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude25"},74278:{"value":"12226","name":"CUNEIFORM SIGN MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude26"},74279:{"value":"12227","name":"CUNEIFORM SIGN MASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude27"},74280:{"value":"12228","name":"CUNEIFORM SIGN ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude28"},74281:{"value":"12229","name":"CUNEIFORM SIGN MES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude29"},74282:{"value":"1222A","name":"CUNEIFORM SIGN MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude2a"},74283:{"value":"1222B","name":"CUNEIFORM SIGN MIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude2b"},74284:{"value":"1222C","name":"CUNEIFORM SIGN MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude2c"},74285:{"value":"1222D","name":"CUNEIFORM SIGN MU OVER MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude2d"},74286:{"value":"1222E","name":"CUNEIFORM SIGN MUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude2e"},74287:{"value":"1222F","name":"CUNEIFORM SIGN MUG GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude2f"},74288:{"value":"12230","name":"CUNEIFORM SIGN MUNSUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude30"},74289:{"value":"12231","name":"CUNEIFORM SIGN MURGU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude31"},74290:{"value":"12232","name":"CUNEIFORM SIGN MUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude32"},74291:{"value":"12233","name":"CUNEIFORM SIGN MUSH TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude33"},74292:{"value":"12234","name":"CUNEIFORM SIGN MUSH TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude34"},74293:{"value":"12235","name":"CUNEIFORM SIGN MUSH TIMES ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude35"},74294:{"value":"12236","name":"CUNEIFORM SIGN MUSH OVER MUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude36"},74295:{"value":"12237","name":"CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude37"},74296:{"value":"12238","name":"CUNEIFORM SIGN MUSH CROSSING MUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude38"},74297:{"value":"12239","name":"CUNEIFORM SIGN MUSH3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude39"},74298:{"value":"1223A","name":"CUNEIFORM SIGN MUSH3 TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude3a"},74299:{"value":"1223B","name":"CUNEIFORM SIGN MUSH3 TIMES A PLUS DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude3b"},74300:{"value":"1223C","name":"CUNEIFORM SIGN MUSH3 TIMES DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude3c"},74301:{"value":"1223D","name":"CUNEIFORM SIGN MUSH3 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude3d"},74302:{"value":"1223E","name":"CUNEIFORM SIGN NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude3e"},74303:{"value":"1223F","name":"CUNEIFORM SIGN NA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude3f"},74304:{"value":"12240","name":"CUNEIFORM SIGN NAGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude40"},74305:{"value":"12241","name":"CUNEIFORM SIGN NAGA INVERTED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude41"},74306:{"value":"12242","name":"CUNEIFORM SIGN NAGA TIMES SHU TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude42"},74307:{"value":"12243","name":"CUNEIFORM SIGN NAGA OPPOSING NAGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude43"},74308:{"value":"12244","name":"CUNEIFORM SIGN NAGAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude44"},74309:{"value":"12245","name":"CUNEIFORM SIGN NAM NUTILLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude45"},74310:{"value":"12246","name":"CUNEIFORM SIGN NAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude46"},74311:{"value":"12247","name":"CUNEIFORM SIGN NAM2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude47"},74312:{"value":"12248","name":"CUNEIFORM SIGN NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude48"},74313:{"value":"12249","name":"CUNEIFORM SIGN NE TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude49"},74314:{"value":"1224A","name":"CUNEIFORM SIGN NE TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude4a"},74315:{"value":"1224B","name":"CUNEIFORM SIGN NE SHESHIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude4b"},74316:{"value":"1224C","name":"CUNEIFORM SIGN NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude4c"},74317:{"value":"1224D","name":"CUNEIFORM SIGN NI TIMES E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude4d"},74318:{"value":"1224E","name":"CUNEIFORM SIGN NI2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude4e"},74319:{"value":"1224F","name":"CUNEIFORM SIGN NIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude4f"},74320:{"value":"12250","name":"CUNEIFORM SIGN NIM TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude50"},74321:{"value":"12251","name":"CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude51"},74322:{"value":"12252","name":"CUNEIFORM SIGN NINDA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude52"},74323:{"value":"12253","name":"CUNEIFORM SIGN NINDA2 TIMES AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude53"},74324:{"value":"12254","name":"CUNEIFORM SIGN NINDA2 TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude54"},74325:{"value":"12255","name":"CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude55"},74326:{"value":"12256","name":"CUNEIFORM SIGN NINDA2 TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude56"},74327:{"value":"12257","name":"CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude57"},74328:{"value":"12258","name":"CUNEIFORM SIGN NINDA2 TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude58"},74329:{"value":"12259","name":"CUNEIFORM SIGN NINDA2 TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude59"},74330:{"value":"1225A","name":"CUNEIFORM SIGN NINDA2 TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude5a"},74331:{"value":"1225B","name":"CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude5b"},74332:{"value":"1225C","name":"CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude5c"},74333:{"value":"1225D","name":"CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude5d"},74334:{"value":"1225E","name":"CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude5e"},74335:{"value":"1225F","name":"CUNEIFORM SIGN NINDA2 TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude5f"},74336:{"value":"12260","name":"CUNEIFORM SIGN NISAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude60"},74337:{"value":"12261","name":"CUNEIFORM SIGN NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude61"},74338:{"value":"12262","name":"CUNEIFORM SIGN NU11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude62"},74339:{"value":"12263","name":"CUNEIFORM SIGN NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude63"},74340:{"value":"12264","name":"CUNEIFORM SIGN NUN LAGAR TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude64"},74341:{"value":"12265","name":"CUNEIFORM SIGN NUN LAGAR TIMES MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude65"},74342:{"value":"12266","name":"CUNEIFORM SIGN NUN LAGAR TIMES SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude66"},74343:{"value":"12267","name":"CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude67"},74344:{"value":"12268","name":"CUNEIFORM SIGN NUN LAGAR TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude68"},74345:{"value":"12269","name":"CUNEIFORM SIGN NUN TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude69"},74346:{"value":"1226A","name":"CUNEIFORM SIGN NUN OVER NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude6a"},74347:{"value":"1226B","name":"CUNEIFORM SIGN NUN CROSSING NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude6b"},74348:{"value":"1226C","name":"CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude6c"},74349:{"value":"1226D","name":"CUNEIFORM SIGN NUNUZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude6d"},74350:{"value":"1226E","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude6e"},74351:{"value":"1226F","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude6f"},74352:{"value":"12270","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES DUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude70"},74353:{"value":"12271","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude71"},74354:{"value":"12272","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude72"},74355:{"value":"12273","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude73"},74356:{"value":"12274","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude74"},74357:{"value":"12275","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude75"},74358:{"value":"12276","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude76"},74359:{"value":"12277","name":"CUNEIFORM SIGN NUNUZ AB2 TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude77"},74360:{"value":"12278","name":"CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude78"},74361:{"value":"12279","name":"CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude79"},74362:{"value":"1227A","name":"CUNEIFORM SIGN PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude7a"},74363:{"value":"1227B","name":"CUNEIFORM SIGN PAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude7b"},74364:{"value":"1227C","name":"CUNEIFORM SIGN PAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude7c"},74365:{"value":"1227D","name":"CUNEIFORM SIGN PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude7d"},74366:{"value":"1227E","name":"CUNEIFORM SIGN PESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude7e"},74367:{"value":"1227F","name":"CUNEIFORM SIGN PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude7f"},74368:{"value":"12280","name":"CUNEIFORM SIGN PI TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude80"},74369:{"value":"12281","name":"CUNEIFORM SIGN PI TIMES AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude81"},74370:{"value":"12282","name":"CUNEIFORM SIGN PI TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude82"},74371:{"value":"12283","name":"CUNEIFORM SIGN PI TIMES BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude83"},74372:{"value":"12284","name":"CUNEIFORM SIGN PI TIMES E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude84"},74373:{"value":"12285","name":"CUNEIFORM SIGN PI TIMES I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude85"},74374:{"value":"12286","name":"CUNEIFORM SIGN PI TIMES IB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude86"},74375:{"value":"12287","name":"CUNEIFORM SIGN PI TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude87"},74376:{"value":"12288","name":"CUNEIFORM SIGN PI TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude88"},74377:{"value":"12289","name":"CUNEIFORM SIGN PI CROSSING PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude89"},74378:{"value":"1228A","name":"CUNEIFORM SIGN PIRIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude8a"},74379:{"value":"1228B","name":"CUNEIFORM SIGN PIRIG TIMES KAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude8b"},74380:{"value":"1228C","name":"CUNEIFORM SIGN PIRIG TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude8c"},74381:{"value":"1228D","name":"CUNEIFORM SIGN PIRIG TIMES ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude8d"},74382:{"value":"1228E","name":"CUNEIFORM SIGN PIRIG OPPOSING PIRIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude8e"},74383:{"value":"1228F","name":"CUNEIFORM SIGN RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude8f"},74384:{"value":"12290","name":"CUNEIFORM SIGN RAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude90"},74385:{"value":"12291","name":"CUNEIFORM SIGN RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude91"},74386:{"value":"12292","name":"CUNEIFORM SIGN RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude92"},74387:{"value":"12293","name":"CUNEIFORM SIGN SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude93"},74388:{"value":"12294","name":"CUNEIFORM SIGN SAG NUTILLU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude94"},74389:{"value":"12295","name":"CUNEIFORM SIGN SAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude95"},74390:{"value":"12296","name":"CUNEIFORM SIGN SAG TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude96"},74391:{"value":"12297","name":"CUNEIFORM SIGN SAG TIMES DU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude97"},74392:{"value":"12298","name":"CUNEIFORM SIGN SAG TIMES DUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude98"},74393:{"value":"12299","name":"CUNEIFORM SIGN SAG TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude99"},74394:{"value":"1229A","name":"CUNEIFORM SIGN SAG TIMES KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude9a"},74395:{"value":"1229B","name":"CUNEIFORM SIGN SAG TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude9b"},74396:{"value":"1229C","name":"CUNEIFORM SIGN SAG TIMES LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude9c"},74397:{"value":"1229D","name":"CUNEIFORM SIGN SAG TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude9d"},74398:{"value":"1229E","name":"CUNEIFORM SIGN SAG TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude9e"},74399:{"value":"1229F","name":"CUNEIFORM SIGN SAG TIMES SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\ude9f"},74400:{"value":"122A0","name":"CUNEIFORM SIGN SAG TIMES SHID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea0"},74401:{"value":"122A1","name":"CUNEIFORM SIGN SAG TIMES TAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea1"},74402:{"value":"122A2","name":"CUNEIFORM SIGN SAG TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea2"},74403:{"value":"122A3","name":"CUNEIFORM SIGN SAG TIMES UB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea3"},74404:{"value":"122A4","name":"CUNEIFORM SIGN SAG TIMES UM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea4"},74405:{"value":"122A5","name":"CUNEIFORM SIGN SAG TIMES UR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea5"},74406:{"value":"122A6","name":"CUNEIFORM SIGN SAG TIMES USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea6"},74407:{"value":"122A7","name":"CUNEIFORM SIGN SAG OVER SAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea7"},74408:{"value":"122A8","name":"CUNEIFORM SIGN SAG GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea8"},74409:{"value":"122A9","name":"CUNEIFORM SIGN SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udea9"},74410:{"value":"122AA","name":"CUNEIFORM SIGN SAL LAGAB TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeaa"},74411:{"value":"122AB","name":"CUNEIFORM SIGN SANGA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeab"},74412:{"value":"122AC","name":"CUNEIFORM SIGN SAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeac"},74413:{"value":"122AD","name":"CUNEIFORM SIGN SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udead"},74414:{"value":"122AE","name":"CUNEIFORM SIGN SHA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeae"},74415:{"value":"122AF","name":"CUNEIFORM SIGN SHA3 TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeaf"},74416:{"value":"122B0","name":"CUNEIFORM SIGN SHA3 TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb0"},74417:{"value":"122B1","name":"CUNEIFORM SIGN SHA3 TIMES GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb1"},74418:{"value":"122B2","name":"CUNEIFORM SIGN SHA3 TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb2"},74419:{"value":"122B3","name":"CUNEIFORM SIGN SHA3 TIMES SHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb3"},74420:{"value":"122B4","name":"CUNEIFORM SIGN SHA3 TIMES TUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb4"},74421:{"value":"122B5","name":"CUNEIFORM SIGN SHA3 TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb5"},74422:{"value":"122B6","name":"CUNEIFORM SIGN SHA3 TIMES U PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb6"},74423:{"value":"122B7","name":"CUNEIFORM SIGN SHA6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb7"},74424:{"value":"122B8","name":"CUNEIFORM SIGN SHAB6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb8"},74425:{"value":"122B9","name":"CUNEIFORM SIGN SHAR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeb9"},74426:{"value":"122BA","name":"CUNEIFORM SIGN SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeba"},74427:{"value":"122BB","name":"CUNEIFORM SIGN SHE HU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udebb"},74428:{"value":"122BC","name":"CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udebc"},74429:{"value":"122BD","name":"CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udebd"},74430:{"value":"122BE","name":"CUNEIFORM SIGN SHEG9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udebe"},74431:{"value":"122BF","name":"CUNEIFORM SIGN SHEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udebf"},74432:{"value":"122C0","name":"CUNEIFORM SIGN SHESH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec0"},74433:{"value":"122C1","name":"CUNEIFORM SIGN SHESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec1"},74434:{"value":"122C2","name":"CUNEIFORM SIGN SHESHLAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec2"},74435:{"value":"122C3","name":"CUNEIFORM SIGN SHID","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec3"},74436:{"value":"122C4","name":"CUNEIFORM SIGN SHID TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec4"},74437:{"value":"122C5","name":"CUNEIFORM SIGN SHID TIMES IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec5"},74438:{"value":"122C6","name":"CUNEIFORM SIGN SHIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec6"},74439:{"value":"122C7","name":"CUNEIFORM SIGN SHIM TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec7"},74440:{"value":"122C8","name":"CUNEIFORM SIGN SHIM TIMES BAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec8"},74441:{"value":"122C9","name":"CUNEIFORM SIGN SHIM TIMES BULUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udec9"},74442:{"value":"122CA","name":"CUNEIFORM SIGN SHIM TIMES DIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeca"},74443:{"value":"122CB","name":"CUNEIFORM SIGN SHIM TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udecb"},74444:{"value":"122CC","name":"CUNEIFORM SIGN SHIM TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udecc"},74445:{"value":"122CD","name":"CUNEIFORM SIGN SHIM TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udecd"},74446:{"value":"122CE","name":"CUNEIFORM SIGN SHIM TIMES KUSHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udece"},74447:{"value":"122CF","name":"CUNEIFORM SIGN SHIM TIMES LUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udecf"},74448:{"value":"122D0","name":"CUNEIFORM SIGN SHIM TIMES MUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded0"},74449:{"value":"122D1","name":"CUNEIFORM SIGN SHIM TIMES SAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded1"},74450:{"value":"122D2","name":"CUNEIFORM SIGN SHINIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded2"},74451:{"value":"122D3","name":"CUNEIFORM SIGN SHIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded3"},74452:{"value":"122D4","name":"CUNEIFORM SIGN SHIR TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded4"},74453:{"value":"122D5","name":"CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded5"},74454:{"value":"122D6","name":"CUNEIFORM SIGN SHITA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded6"},74455:{"value":"122D7","name":"CUNEIFORM SIGN SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded7"},74456:{"value":"122D8","name":"CUNEIFORM SIGN SHU OVER INVERTED SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded8"},74457:{"value":"122D9","name":"CUNEIFORM SIGN SHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\uded9"},74458:{"value":"122DA","name":"CUNEIFORM SIGN SHUBUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeda"},74459:{"value":"122DB","name":"CUNEIFORM SIGN SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udedb"},74460:{"value":"122DC","name":"CUNEIFORM SIGN SI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udedc"},74461:{"value":"122DD","name":"CUNEIFORM SIGN SIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udedd"},74462:{"value":"122DE","name":"CUNEIFORM SIGN SIG4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udede"},74463:{"value":"122DF","name":"CUNEIFORM SIGN SIG4 OVER SIG4 SHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udedf"},74464:{"value":"122E0","name":"CUNEIFORM SIGN SIK2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee0"},74465:{"value":"122E1","name":"CUNEIFORM SIGN SILA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee1"},74466:{"value":"122E2","name":"CUNEIFORM SIGN SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee2"},74467:{"value":"122E3","name":"CUNEIFORM SIGN SU OVER SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee3"},74468:{"value":"122E4","name":"CUNEIFORM SIGN SUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee4"},74469:{"value":"122E5","name":"CUNEIFORM SIGN SUD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee5"},74470:{"value":"122E6","name":"CUNEIFORM SIGN SUHUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee6"},74471:{"value":"122E7","name":"CUNEIFORM SIGN SUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee7"},74472:{"value":"122E8","name":"CUNEIFORM SIGN SUMASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee8"},74473:{"value":"122E9","name":"CUNEIFORM SIGN SUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udee9"},74474:{"value":"122EA","name":"CUNEIFORM SIGN SUR9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeea"},74475:{"value":"122EB","name":"CUNEIFORM SIGN TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeeb"},74476:{"value":"122EC","name":"CUNEIFORM SIGN TA ASTERISK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeec"},74477:{"value":"122ED","name":"CUNEIFORM SIGN TA TIMES HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeed"},74478:{"value":"122EE","name":"CUNEIFORM SIGN TA TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeee"},74479:{"value":"122EF","name":"CUNEIFORM SIGN TA GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeef"},74480:{"value":"122F0","name":"CUNEIFORM SIGN TAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef0"},74481:{"value":"122F1","name":"CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef1"},74482:{"value":"122F2","name":"CUNEIFORM SIGN TAB SQUARED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef2"},74483:{"value":"122F3","name":"CUNEIFORM SIGN TAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef3"},74484:{"value":"122F4","name":"CUNEIFORM SIGN TAG TIMES BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef4"},74485:{"value":"122F5","name":"CUNEIFORM SIGN TAG TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef5"},74486:{"value":"122F6","name":"CUNEIFORM SIGN TAG TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef6"},74487:{"value":"122F7","name":"CUNEIFORM SIGN TAG TIMES SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef7"},74488:{"value":"122F8","name":"CUNEIFORM SIGN TAG TIMES TUG2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef8"},74489:{"value":"122F9","name":"CUNEIFORM SIGN TAG TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udef9"},74490:{"value":"122FA","name":"CUNEIFORM SIGN TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udefa"},74491:{"value":"122FB","name":"CUNEIFORM SIGN TAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udefb"},74492:{"value":"122FC","name":"CUNEIFORM SIGN TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udefc"},74493:{"value":"122FD","name":"CUNEIFORM SIGN TE GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udefd"},74494:{"value":"122FE","name":"CUNEIFORM SIGN TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udefe"},74495:{"value":"122FF","name":"CUNEIFORM SIGN TI TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udeff"},74496:{"value":"12300","name":"CUNEIFORM SIGN TIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf00"},74497:{"value":"12301","name":"CUNEIFORM SIGN TIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf01"},74498:{"value":"12302","name":"CUNEIFORM SIGN TIR TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf02"},74499:{"value":"12303","name":"CUNEIFORM SIGN TIR OVER TIR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf03"},74500:{"value":"12304","name":"CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf04"},74501:{"value":"12305","name":"CUNEIFORM SIGN TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf05"},74502:{"value":"12306","name":"CUNEIFORM SIGN TUG2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf06"},74503:{"value":"12307","name":"CUNEIFORM SIGN TUK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf07"},74504:{"value":"12308","name":"CUNEIFORM SIGN TUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf08"},74505:{"value":"12309","name":"CUNEIFORM SIGN TUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf09"},74506:{"value":"1230A","name":"CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf0a"},74507:{"value":"1230B","name":"CUNEIFORM SIGN U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf0b"},74508:{"value":"1230C","name":"CUNEIFORM SIGN U GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf0c"},74509:{"value":"1230D","name":"CUNEIFORM SIGN U U U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf0d"},74510:{"value":"1230E","name":"CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf0e"},74511:{"value":"1230F","name":"CUNEIFORM SIGN U OVER U SUR OVER SUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf0f"},74512:{"value":"12310","name":"CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf10"},74513:{"value":"12311","name":"CUNEIFORM SIGN U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf11"},74514:{"value":"12312","name":"CUNEIFORM SIGN UB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf12"},74515:{"value":"12313","name":"CUNEIFORM SIGN UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf13"},74516:{"value":"12314","name":"CUNEIFORM SIGN UD KUSHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf14"},74517:{"value":"12315","name":"CUNEIFORM SIGN UD TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf15"},74518:{"value":"12316","name":"CUNEIFORM SIGN UD TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf16"},74519:{"value":"12317","name":"CUNEIFORM SIGN UD TIMES U PLUS U PLUS U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf17"},74520:{"value":"12318","name":"CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf18"},74521:{"value":"12319","name":"CUNEIFORM SIGN UD GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf19"},74522:{"value":"1231A","name":"CUNEIFORM SIGN UD SHESHIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf1a"},74523:{"value":"1231B","name":"CUNEIFORM SIGN UD SHESHIG TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf1b"},74524:{"value":"1231C","name":"CUNEIFORM SIGN UDUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf1c"},74525:{"value":"1231D","name":"CUNEIFORM SIGN UM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf1d"},74526:{"value":"1231E","name":"CUNEIFORM SIGN UM TIMES LAGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf1e"},74527:{"value":"1231F","name":"CUNEIFORM SIGN UM TIMES ME PLUS DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf1f"},74528:{"value":"12320","name":"CUNEIFORM SIGN UM TIMES SHA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf20"},74529:{"value":"12321","name":"CUNEIFORM SIGN UM TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf21"},74530:{"value":"12322","name":"CUNEIFORM SIGN UMBIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf22"},74531:{"value":"12323","name":"CUNEIFORM SIGN UMUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf23"},74532:{"value":"12324","name":"CUNEIFORM SIGN UMUM TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf24"},74533:{"value":"12325","name":"CUNEIFORM SIGN UMUM TIMES PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf25"},74534:{"value":"12326","name":"CUNEIFORM SIGN UN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf26"},74535:{"value":"12327","name":"CUNEIFORM SIGN UN GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf27"},74536:{"value":"12328","name":"CUNEIFORM SIGN UR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf28"},74537:{"value":"12329","name":"CUNEIFORM SIGN UR CROSSING UR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf29"},74538:{"value":"1232A","name":"CUNEIFORM SIGN UR SHESHIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf2a"},74539:{"value":"1232B","name":"CUNEIFORM SIGN UR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf2b"},74540:{"value":"1232C","name":"CUNEIFORM SIGN UR2 TIMES A PLUS HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf2c"},74541:{"value":"1232D","name":"CUNEIFORM SIGN UR2 TIMES A PLUS NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf2d"},74542:{"value":"1232E","name":"CUNEIFORM SIGN UR2 TIMES AL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf2e"},74543:{"value":"1232F","name":"CUNEIFORM SIGN UR2 TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf2f"},74544:{"value":"12330","name":"CUNEIFORM SIGN UR2 TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf30"},74545:{"value":"12331","name":"CUNEIFORM SIGN UR2 TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf31"},74546:{"value":"12332","name":"CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf32"},74547:{"value":"12333","name":"CUNEIFORM SIGN UR2 TIMES U2 PLUS BI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf33"},74548:{"value":"12334","name":"CUNEIFORM SIGN UR4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf34"},74549:{"value":"12335","name":"CUNEIFORM SIGN URI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf35"},74550:{"value":"12336","name":"CUNEIFORM SIGN URI3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf36"},74551:{"value":"12337","name":"CUNEIFORM SIGN URU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf37"},74552:{"value":"12338","name":"CUNEIFORM SIGN URU TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf38"},74553:{"value":"12339","name":"CUNEIFORM SIGN URU TIMES ASHGAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf39"},74554:{"value":"1233A","name":"CUNEIFORM SIGN URU TIMES BAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf3a"},74555:{"value":"1233B","name":"CUNEIFORM SIGN URU TIMES DUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf3b"},74556:{"value":"1233C","name":"CUNEIFORM SIGN URU TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf3c"},74557:{"value":"1233D","name":"CUNEIFORM SIGN URU TIMES GAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf3d"},74558:{"value":"1233E","name":"CUNEIFORM SIGN URU TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf3e"},74559:{"value":"1233F","name":"CUNEIFORM SIGN URU TIMES GAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf3f"},74560:{"value":"12340","name":"CUNEIFORM SIGN URU TIMES GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf40"},74561:{"value":"12341","name":"CUNEIFORM SIGN URU TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf41"},74562:{"value":"12342","name":"CUNEIFORM SIGN URU TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf42"},74563:{"value":"12343","name":"CUNEIFORM SIGN URU TIMES IM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf43"},74564:{"value":"12344","name":"CUNEIFORM SIGN URU TIMES ISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf44"},74565:{"value":"12345","name":"CUNEIFORM SIGN URU TIMES KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf45"},74566:{"value":"12346","name":"CUNEIFORM SIGN URU TIMES LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf46"},74567:{"value":"12347","name":"CUNEIFORM SIGN URU TIMES MIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf47"},74568:{"value":"12348","name":"CUNEIFORM SIGN URU TIMES PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf48"},74569:{"value":"12349","name":"CUNEIFORM SIGN URU TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf49"},74570:{"value":"1234A","name":"CUNEIFORM SIGN URU TIMES SIG4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf4a"},74571:{"value":"1234B","name":"CUNEIFORM SIGN URU TIMES TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf4b"},74572:{"value":"1234C","name":"CUNEIFORM SIGN URU TIMES U PLUS GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf4c"},74573:{"value":"1234D","name":"CUNEIFORM SIGN URU TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf4d"},74574:{"value":"1234E","name":"CUNEIFORM SIGN URU TIMES URUDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf4e"},74575:{"value":"1234F","name":"CUNEIFORM SIGN URUDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf4f"},74576:{"value":"12350","name":"CUNEIFORM SIGN URUDA TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf50"},74577:{"value":"12351","name":"CUNEIFORM SIGN USH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf51"},74578:{"value":"12352","name":"CUNEIFORM SIGN USH TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf52"},74579:{"value":"12353","name":"CUNEIFORM SIGN USH TIMES KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf53"},74580:{"value":"12354","name":"CUNEIFORM SIGN USH TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf54"},74581:{"value":"12355","name":"CUNEIFORM SIGN USH TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf55"},74582:{"value":"12356","name":"CUNEIFORM SIGN USHX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf56"},74583:{"value":"12357","name":"CUNEIFORM SIGN USH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf57"},74584:{"value":"12358","name":"CUNEIFORM SIGN USHUMX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf58"},74585:{"value":"12359","name":"CUNEIFORM SIGN UTUKI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf59"},74586:{"value":"1235A","name":"CUNEIFORM SIGN UZ3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf5a"},74587:{"value":"1235B","name":"CUNEIFORM SIGN UZ3 TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf5b"},74588:{"value":"1235C","name":"CUNEIFORM SIGN UZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf5c"},74589:{"value":"1235D","name":"CUNEIFORM SIGN ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf5d"},74590:{"value":"1235E","name":"CUNEIFORM SIGN ZA TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf5e"},74591:{"value":"1235F","name":"CUNEIFORM SIGN ZA SQUARED TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf5f"},74592:{"value":"12360","name":"CUNEIFORM SIGN ZAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf60"},74593:{"value":"12361","name":"CUNEIFORM SIGN ZAMX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf61"},74594:{"value":"12362","name":"CUNEIFORM SIGN ZE2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf62"},74595:{"value":"12363","name":"CUNEIFORM SIGN ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf63"},74596:{"value":"12364","name":"CUNEIFORM SIGN ZI OVER ZI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf64"},74597:{"value":"12365","name":"CUNEIFORM SIGN ZI3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf65"},74598:{"value":"12366","name":"CUNEIFORM SIGN ZIB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf66"},74599:{"value":"12367","name":"CUNEIFORM SIGN ZIB KABA TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf67"},74600:{"value":"12368","name":"CUNEIFORM SIGN ZIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf68"},74601:{"value":"12369","name":"CUNEIFORM SIGN ZIZ2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf69"},74602:{"value":"1236A","name":"CUNEIFORM SIGN ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf6a"},74603:{"value":"1236B","name":"CUNEIFORM SIGN ZU5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf6b"},74604:{"value":"1236C","name":"CUNEIFORM SIGN ZU5 TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf6c"},74605:{"value":"1236D","name":"CUNEIFORM SIGN ZUBUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf6d"},74606:{"value":"1236E","name":"CUNEIFORM SIGN ZUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf6e"},74607:{"value":"1236F","name":"CUNEIFORM SIGN KAP ELAMITE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf6f"},74608:{"value":"12370","name":"CUNEIFORM SIGN AB TIMES NUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf70"},74609:{"value":"12371","name":"CUNEIFORM SIGN AB2 TIMES A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf71"},74610:{"value":"12372","name":"CUNEIFORM SIGN AMAR TIMES KUG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf72"},74611:{"value":"12373","name":"CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf73"},74612:{"value":"12374","name":"CUNEIFORM SIGN DAG3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf74"},74613:{"value":"12375","name":"CUNEIFORM SIGN DISH PLUS SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf75"},74614:{"value":"12376","name":"CUNEIFORM SIGN DUB TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf76"},74615:{"value":"12377","name":"CUNEIFORM SIGN EZEN TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf77"},74616:{"value":"12378","name":"CUNEIFORM SIGN EZEN TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf78"},74617:{"value":"12379","name":"CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf79"},74618:{"value":"1237A","name":"CUNEIFORM SIGN GA2 TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf7a"},74619:{"value":"1237B","name":"CUNEIFORM SIGN GE22","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf7b"},74620:{"value":"1237C","name":"CUNEIFORM SIGN GIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf7c"},74621:{"value":"1237D","name":"CUNEIFORM SIGN HUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf7d"},74622:{"value":"1237E","name":"CUNEIFORM SIGN KA TIMES ANSHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf7e"},74623:{"value":"1237F","name":"CUNEIFORM SIGN KA TIMES ASH3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf7f"},74624:{"value":"12380","name":"CUNEIFORM SIGN KA TIMES GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf80"},74625:{"value":"12381","name":"CUNEIFORM SIGN KA TIMES GUD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf81"},74626:{"value":"12382","name":"CUNEIFORM SIGN KA TIMES HI TIMES ASH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf82"},74627:{"value":"12383","name":"CUNEIFORM SIGN KA TIMES LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf83"},74628:{"value":"12384","name":"CUNEIFORM SIGN KA TIMES PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf84"},74629:{"value":"12385","name":"CUNEIFORM SIGN KA TIMES SHUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf85"},74630:{"value":"12386","name":"CUNEIFORM SIGN KA TIMES TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf86"},74631:{"value":"12387","name":"CUNEIFORM SIGN KA TIMES UR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf87"},74632:{"value":"12388","name":"CUNEIFORM SIGN LAGAB TIMES GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf88"},74633:{"value":"12389","name":"CUNEIFORM SIGN LU2 SHESHIG TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf89"},74634:{"value":"1238A","name":"CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf8a"},74635:{"value":"1238B","name":"CUNEIFORM SIGN LU2 TIMES SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf8b"},74636:{"value":"1238C","name":"CUNEIFORM SIGN MESH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf8c"},74637:{"value":"1238D","name":"CUNEIFORM SIGN MUSH3 TIMES ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf8d"},74638:{"value":"1238E","name":"CUNEIFORM SIGN NA4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf8e"},74639:{"value":"1238F","name":"CUNEIFORM SIGN NIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf8f"},74640:{"value":"12390","name":"CUNEIFORM SIGN NIN9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf90"},74641:{"value":"12391","name":"CUNEIFORM SIGN NINDA2 TIMES BAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf91"},74642:{"value":"12392","name":"CUNEIFORM SIGN NINDA2 TIMES GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf92"},74643:{"value":"12393","name":"CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf93"},74644:{"value":"12394","name":"CUNEIFORM SIGN PESH2 ASTERISK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf94"},74645:{"value":"12395","name":"CUNEIFORM SIGN PIR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf95"},74646:{"value":"12396","name":"CUNEIFORM SIGN SAG TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf96"},74647:{"value":"12397","name":"CUNEIFORM SIGN TI2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf97"},74648:{"value":"12398","name":"CUNEIFORM SIGN UM TIMES ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf98"},74649:{"value":"12399","name":"CUNEIFORM SIGN U U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud808\udf99"},74880:{"value":"12480","name":"CUNEIFORM SIGN AB TIMES NUN TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc80"},74881:{"value":"12481","name":"CUNEIFORM SIGN AB TIMES SHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc81"},74882:{"value":"12482","name":"CUNEIFORM SIGN AD TIMES ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc82"},74883:{"value":"12483","name":"CUNEIFORM SIGN BAD TIMES DISH TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc83"},74884:{"value":"12484","name":"CUNEIFORM SIGN BAHAR2 TIMES AB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc84"},74885:{"value":"12485","name":"CUNEIFORM SIGN BAHAR2 TIMES NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc85"},74886:{"value":"12486","name":"CUNEIFORM SIGN BAHAR2 TIMES ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc86"},74887:{"value":"12487","name":"CUNEIFORM SIGN BU OVER BU TIMES NA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc87"},74888:{"value":"12488","name":"CUNEIFORM SIGN DA TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc88"},74889:{"value":"12489","name":"CUNEIFORM SIGN DAG TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc89"},74890:{"value":"1248A","name":"CUNEIFORM SIGN DIM TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc8a"},74891:{"value":"1248B","name":"CUNEIFORM SIGN DIM TIMES U U U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc8b"},74892:{"value":"1248C","name":"CUNEIFORM SIGN DIM2 TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc8c"},74893:{"value":"1248D","name":"CUNEIFORM SIGN DUG TIMES ANSHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc8d"},74894:{"value":"1248E","name":"CUNEIFORM SIGN DUG TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc8e"},74895:{"value":"1248F","name":"CUNEIFORM SIGN DUG TIMES ASH AT LEFT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc8f"},74896:{"value":"12490","name":"CUNEIFORM SIGN DUG TIMES DIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc90"},74897:{"value":"12491","name":"CUNEIFORM SIGN DUG TIMES DUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc91"},74898:{"value":"12492","name":"CUNEIFORM SIGN DUG TIMES ERIN2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc92"},74899:{"value":"12493","name":"CUNEIFORM SIGN DUG TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc93"},74900:{"value":"12494","name":"CUNEIFORM SIGN DUG TIMES GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc94"},74901:{"value":"12495","name":"CUNEIFORM SIGN DUG TIMES GIR2 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc95"},74902:{"value":"12496","name":"CUNEIFORM SIGN DUG TIMES GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc96"},74903:{"value":"12497","name":"CUNEIFORM SIGN DUG TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc97"},74904:{"value":"12498","name":"CUNEIFORM SIGN DUG TIMES HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc98"},74905:{"value":"12499","name":"CUNEIFORM SIGN DUG TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc99"},74906:{"value":"1249A","name":"CUNEIFORM SIGN DUG TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc9a"},74907:{"value":"1249B","name":"CUNEIFORM SIGN DUG TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc9b"},74908:{"value":"1249C","name":"CUNEIFORM SIGN DUG TIMES KUSHU2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc9c"},74909:{"value":"1249D","name":"CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc9d"},74910:{"value":"1249E","name":"CUNEIFORM SIGN DUG TIMES LAK-020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc9e"},74911:{"value":"1249F","name":"CUNEIFORM SIGN DUG TIMES LAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc9f"},74912:{"value":"124A0","name":"CUNEIFORM SIGN DUG TIMES LAM TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca0"},74913:{"value":"124A1","name":"CUNEIFORM SIGN DUG TIMES LUH PLUS GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca1"},74914:{"value":"124A2","name":"CUNEIFORM SIGN DUG TIMES MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca2"},74915:{"value":"124A3","name":"CUNEIFORM SIGN DUG TIMES MES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca3"},74916:{"value":"124A4","name":"CUNEIFORM SIGN DUG TIMES MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca4"},74917:{"value":"124A5","name":"CUNEIFORM SIGN DUG TIMES NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca5"},74918:{"value":"124A6","name":"CUNEIFORM SIGN DUG TIMES PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca6"},74919:{"value":"124A7","name":"CUNEIFORM SIGN DUG TIMES SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca7"},74920:{"value":"124A8","name":"CUNEIFORM SIGN DUG TIMES SI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca8"},74921:{"value":"124A9","name":"CUNEIFORM SIGN E2 TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udca9"},74922:{"value":"124AA","name":"CUNEIFORM SIGN E2 TIMES PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcaa"},74923:{"value":"124AB","name":"CUNEIFORM SIGN ERIN2 X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcab"},74924:{"value":"124AC","name":"CUNEIFORM SIGN ESH2 CROSSING ESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcac"},74925:{"value":"124AD","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcad"},74926:{"value":"124AE","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcae"},74927:{"value":"124AF","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcaf"},74928:{"value":"124B0","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb0"},74929:{"value":"124B1","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES LAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb1"},74930:{"value":"124B2","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES ME","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb2"},74931:{"value":"124B3","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES MES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb3"},74932:{"value":"124B4","name":"CUNEIFORM SIGN EZEN SHESHIG TIMES SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb4"},74933:{"value":"124B5","name":"CUNEIFORM SIGN EZEN TIMES SU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb5"},74934:{"value":"124B6","name":"CUNEIFORM SIGN GA2 TIMES BAHAR2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb6"},74935:{"value":"124B7","name":"CUNEIFORM SIGN GA2 TIMES DIM GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb7"},74936:{"value":"124B8","name":"CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb8"},74937:{"value":"124B9","name":"CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcb9"},74938:{"value":"124BA","name":"CUNEIFORM SIGN GA2 TIMES EREN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcba"},74939:{"value":"124BB","name":"CUNEIFORM SIGN GA2 TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcbb"},74940:{"value":"124BC","name":"CUNEIFORM SIGN GA2 TIMES GAR PLUS DI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcbc"},74941:{"value":"124BD","name":"CUNEIFORM SIGN GA2 TIMES GAR PLUS NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcbd"},74942:{"value":"124BE","name":"CUNEIFORM SIGN GA2 TIMES HA PLUS A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcbe"},74943:{"value":"124BF","name":"CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcbf"},74944:{"value":"124C0","name":"CUNEIFORM SIGN GA2 TIMES LAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc0"},74945:{"value":"124C1","name":"CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc1"},74946:{"value":"124C2","name":"CUNEIFORM SIGN GA2 TIMES LUH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc2"},74947:{"value":"124C3","name":"CUNEIFORM SIGN GA2 TIMES MUSH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc3"},74948:{"value":"124C4","name":"CUNEIFORM SIGN GA2 TIMES NE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc4"},74949:{"value":"124C5","name":"CUNEIFORM SIGN GA2 TIMES NE PLUS E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc5"},74950:{"value":"124C6","name":"CUNEIFORM SIGN GA2 TIMES NE PLUS GI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc6"},74951:{"value":"124C7","name":"CUNEIFORM SIGN GA2 TIMES SHIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc7"},74952:{"value":"124C8","name":"CUNEIFORM SIGN GA2 TIMES ZIZ2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc8"},74953:{"value":"124C9","name":"CUNEIFORM SIGN GABA ROTATED NINETY DEGREES","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcc9"},74954:{"value":"124CA","name":"CUNEIFORM SIGN GESHTIN TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcca"},74955:{"value":"124CB","name":"CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udccb"},74956:{"value":"124CC","name":"CUNEIFORM SIGN GU2 TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udccc"},74957:{"value":"124CD","name":"CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udccd"},74958:{"value":"124CE","name":"CUNEIFORM SIGN HA TENU GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcce"},74959:{"value":"124CF","name":"CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udccf"},74960:{"value":"124D0","name":"CUNEIFORM SIGN KA TIMES BU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd0"},74961:{"value":"124D1","name":"CUNEIFORM SIGN KA TIMES KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd1"},74962:{"value":"124D2","name":"CUNEIFORM SIGN KA TIMES U U U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd2"},74963:{"value":"124D3","name":"CUNEIFORM SIGN KA TIMES UR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd3"},74964:{"value":"124D4","name":"CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd4"},74965:{"value":"124D5","name":"CUNEIFORM SIGN LAK-003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd5"},74966:{"value":"124D6","name":"CUNEIFORM SIGN LAK-021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd6"},74967:{"value":"124D7","name":"CUNEIFORM SIGN LAK-025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd7"},74968:{"value":"124D8","name":"CUNEIFORM SIGN LAK-030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd8"},74969:{"value":"124D9","name":"CUNEIFORM SIGN LAK-050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcd9"},74970:{"value":"124DA","name":"CUNEIFORM SIGN LAK-051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcda"},74971:{"value":"124DB","name":"CUNEIFORM SIGN LAK-062","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcdb"},74972:{"value":"124DC","name":"CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcdc"},74973:{"value":"124DD","name":"CUNEIFORM SIGN LAK-080","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcdd"},74974:{"value":"124DE","name":"CUNEIFORM SIGN LAK-081 OVER LAK-081","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcde"},74975:{"value":"124DF","name":"CUNEIFORM SIGN LAK-092","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcdf"},74976:{"value":"124E0","name":"CUNEIFORM SIGN LAK-130","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce0"},74977:{"value":"124E1","name":"CUNEIFORM SIGN LAK-142","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce1"},74978:{"value":"124E2","name":"CUNEIFORM SIGN LAK-210","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce2"},74979:{"value":"124E3","name":"CUNEIFORM SIGN LAK-219","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce3"},74980:{"value":"124E4","name":"CUNEIFORM SIGN LAK-220","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce4"},74981:{"value":"124E5","name":"CUNEIFORM SIGN LAK-225","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce5"},74982:{"value":"124E6","name":"CUNEIFORM SIGN LAK-228","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce6"},74983:{"value":"124E7","name":"CUNEIFORM SIGN LAK-238","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce7"},74984:{"value":"124E8","name":"CUNEIFORM SIGN LAK-265","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce8"},74985:{"value":"124E9","name":"CUNEIFORM SIGN LAK-266","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udce9"},74986:{"value":"124EA","name":"CUNEIFORM SIGN LAK-343","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcea"},74987:{"value":"124EB","name":"CUNEIFORM SIGN LAK-347","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udceb"},74988:{"value":"124EC","name":"CUNEIFORM SIGN LAK-348","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcec"},74989:{"value":"124ED","name":"CUNEIFORM SIGN LAK-383","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udced"},74990:{"value":"124EE","name":"CUNEIFORM SIGN LAK-384","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcee"},74991:{"value":"124EF","name":"CUNEIFORM SIGN LAK-390","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcef"},74992:{"value":"124F0","name":"CUNEIFORM SIGN LAK-441","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf0"},74993:{"value":"124F1","name":"CUNEIFORM SIGN LAK-449","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf1"},74994:{"value":"124F2","name":"CUNEIFORM SIGN LAK-449 TIMES GU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf2"},74995:{"value":"124F3","name":"CUNEIFORM SIGN LAK-449 TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf3"},74996:{"value":"124F4","name":"CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf4"},74997:{"value":"124F5","name":"CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf5"},74998:{"value":"124F6","name":"CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf6"},74999:{"value":"124F7","name":"CUNEIFORM SIGN LAK-450","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf7"},75000:{"value":"124F8","name":"CUNEIFORM SIGN LAK-457","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf8"},75001:{"value":"124F9","name":"CUNEIFORM SIGN LAK-470","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcf9"},75002:{"value":"124FA","name":"CUNEIFORM SIGN LAK-483","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcfa"},75003:{"value":"124FB","name":"CUNEIFORM SIGN LAK-490","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcfb"},75004:{"value":"124FC","name":"CUNEIFORM SIGN LAK-492","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcfc"},75005:{"value":"124FD","name":"CUNEIFORM SIGN LAK-493","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcfd"},75006:{"value":"124FE","name":"CUNEIFORM SIGN LAK-495","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcfe"},75007:{"value":"124FF","name":"CUNEIFORM SIGN LAK-550","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udcff"},75008:{"value":"12500","name":"CUNEIFORM SIGN LAK-608","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd00"},75009:{"value":"12501","name":"CUNEIFORM SIGN LAK-617","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd01"},75010:{"value":"12502","name":"CUNEIFORM SIGN LAK-617 TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd02"},75011:{"value":"12503","name":"CUNEIFORM SIGN LAK-617 TIMES BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd03"},75012:{"value":"12504","name":"CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd04"},75013:{"value":"12505","name":"CUNEIFORM SIGN LAK-617 TIMES KU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd05"},75014:{"value":"12506","name":"CUNEIFORM SIGN LAK-617 TIMES LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd06"},75015:{"value":"12507","name":"CUNEIFORM SIGN LAK-617 TIMES TAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd07"},75016:{"value":"12508","name":"CUNEIFORM SIGN LAK-617 TIMES TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd08"},75017:{"value":"12509","name":"CUNEIFORM SIGN LAK-617 TIMES U2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd09"},75018:{"value":"1250A","name":"CUNEIFORM SIGN LAK-617 TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd0a"},75019:{"value":"1250B","name":"CUNEIFORM SIGN LAK-617 TIMES URUDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd0b"},75020:{"value":"1250C","name":"CUNEIFORM SIGN LAK-636","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd0c"},75021:{"value":"1250D","name":"CUNEIFORM SIGN LAK-648","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd0d"},75022:{"value":"1250E","name":"CUNEIFORM SIGN LAK-648 TIMES DUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd0e"},75023:{"value":"1250F","name":"CUNEIFORM SIGN LAK-648 TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd0f"},75024:{"value":"12510","name":"CUNEIFORM SIGN LAK-648 TIMES IGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd10"},75025:{"value":"12511","name":"CUNEIFORM SIGN LAK-648 TIMES IGI GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd11"},75026:{"value":"12512","name":"CUNEIFORM SIGN LAK-648 TIMES NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd12"},75027:{"value":"12513","name":"CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd13"},75028:{"value":"12514","name":"CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd14"},75029:{"value":"12515","name":"CUNEIFORM SIGN LAK-648 TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd15"},75030:{"value":"12516","name":"CUNEIFORM SIGN LAK-648 TIMES URUDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd16"},75031:{"value":"12517","name":"CUNEIFORM SIGN LAK-724","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd17"},75032:{"value":"12518","name":"CUNEIFORM SIGN LAK-749","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd18"},75033:{"value":"12519","name":"CUNEIFORM SIGN LU2 GUNU TIMES ASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd19"},75034:{"value":"1251A","name":"CUNEIFORM SIGN LU2 TIMES DISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd1a"},75035:{"value":"1251B","name":"CUNEIFORM SIGN LU2 TIMES HAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd1b"},75036:{"value":"1251C","name":"CUNEIFORM SIGN LU2 TIMES PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd1c"},75037:{"value":"1251D","name":"CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd1d"},75038:{"value":"1251E","name":"CUNEIFORM SIGN LU2 TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd1e"},75039:{"value":"1251F","name":"CUNEIFORM SIGN MI PLUS ZA7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd1f"},75040:{"value":"12520","name":"CUNEIFORM SIGN MUSH OVER MUSH TIMES GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd20"},75041:{"value":"12521","name":"CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd21"},75042:{"value":"12522","name":"CUNEIFORM SIGN NINDA2 TIMES DIM GUNU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd22"},75043:{"value":"12523","name":"CUNEIFORM SIGN NINDA2 TIMES GISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd23"},75044:{"value":"12524","name":"CUNEIFORM SIGN NINDA2 TIMES GUL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd24"},75045:{"value":"12525","name":"CUNEIFORM SIGN NINDA2 TIMES HI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd25"},75046:{"value":"12526","name":"CUNEIFORM SIGN NINDA2 TIMES KESH2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd26"},75047:{"value":"12527","name":"CUNEIFORM SIGN NINDA2 TIMES LAK-050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd27"},75048:{"value":"12528","name":"CUNEIFORM SIGN NINDA2 TIMES MASH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd28"},75049:{"value":"12529","name":"CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd29"},75050:{"value":"1252A","name":"CUNEIFORM SIGN NINDA2 TIMES U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd2a"},75051:{"value":"1252B","name":"CUNEIFORM SIGN NINDA2 TIMES U PLUS U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd2b"},75052:{"value":"1252C","name":"CUNEIFORM SIGN NINDA2 TIMES URUDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd2c"},75053:{"value":"1252D","name":"CUNEIFORM SIGN SAG GUNU TIMES HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd2d"},75054:{"value":"1252E","name":"CUNEIFORM SIGN SAG TIMES EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd2e"},75055:{"value":"1252F","name":"CUNEIFORM SIGN SAG TIMES SHE AT LEFT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd2f"},75056:{"value":"12530","name":"CUNEIFORM SIGN SAG TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd30"},75057:{"value":"12531","name":"CUNEIFORM SIGN SHA6 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd31"},75058:{"value":"12532","name":"CUNEIFORM SIGN SHE OVER SHE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd32"},75059:{"value":"12533","name":"CUNEIFORM SIGN SHE PLUS HUB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd33"},75060:{"value":"12534","name":"CUNEIFORM SIGN SHE PLUS NAM2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd34"},75061:{"value":"12535","name":"CUNEIFORM SIGN SHE PLUS SAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd35"},75062:{"value":"12536","name":"CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd36"},75063:{"value":"12537","name":"CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd37"},75064:{"value":"12538","name":"CUNEIFORM SIGN SI TIMES TAK4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd38"},75065:{"value":"12539","name":"CUNEIFORM SIGN TAK4 PLUS SAG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd39"},75066:{"value":"1253A","name":"CUNEIFORM SIGN TUM TIMES GAN2 TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd3a"},75067:{"value":"1253B","name":"CUNEIFORM SIGN TUM TIMES THREE DISH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd3b"},75068:{"value":"1253C","name":"CUNEIFORM SIGN UR2 INVERTED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd3c"},75069:{"value":"1253D","name":"CUNEIFORM SIGN UR2 TIMES UD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd3d"},75070:{"value":"1253E","name":"CUNEIFORM SIGN URU TIMES DARA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd3e"},75071:{"value":"1253F","name":"CUNEIFORM SIGN URU TIMES LAK-668","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd3f"},75072:{"value":"12540","name":"CUNEIFORM SIGN URU TIMES LU3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd40"},75073:{"value":"12541","name":"CUNEIFORM SIGN ZA7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd41"},75074:{"value":"12542","name":"CUNEIFORM SIGN ZU OVER ZU PLUS SAR","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd42"},75075:{"value":"12543","name":"CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udd43"},77712:{"value":"12F90","name":"CYPRO-MINOAN SIGN CM001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf90"},77713:{"value":"12F91","name":"CYPRO-MINOAN SIGN CM002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf91"},77714:{"value":"12F92","name":"CYPRO-MINOAN SIGN CM004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf92"},77715:{"value":"12F93","name":"CYPRO-MINOAN SIGN CM005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf93"},77716:{"value":"12F94","name":"CYPRO-MINOAN SIGN CM006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf94"},77717:{"value":"12F95","name":"CYPRO-MINOAN SIGN CM007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf95"},77718:{"value":"12F96","name":"CYPRO-MINOAN SIGN CM008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf96"},77719:{"value":"12F97","name":"CYPRO-MINOAN SIGN CM009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf97"},77720:{"value":"12F98","name":"CYPRO-MINOAN SIGN CM010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf98"},77721:{"value":"12F99","name":"CYPRO-MINOAN SIGN CM011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf99"},77722:{"value":"12F9A","name":"CYPRO-MINOAN SIGN CM012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf9a"},77723:{"value":"12F9B","name":"CYPRO-MINOAN SIGN CM012B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf9b"},77724:{"value":"12F9C","name":"CYPRO-MINOAN SIGN CM013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf9c"},77725:{"value":"12F9D","name":"CYPRO-MINOAN SIGN CM015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf9d"},77726:{"value":"12F9E","name":"CYPRO-MINOAN SIGN CM017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf9e"},77727:{"value":"12F9F","name":"CYPRO-MINOAN SIGN CM019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udf9f"},77728:{"value":"12FA0","name":"CYPRO-MINOAN SIGN CM021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa0"},77729:{"value":"12FA1","name":"CYPRO-MINOAN SIGN CM023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa1"},77730:{"value":"12FA2","name":"CYPRO-MINOAN SIGN CM024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa2"},77731:{"value":"12FA3","name":"CYPRO-MINOAN SIGN CM025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa3"},77732:{"value":"12FA4","name":"CYPRO-MINOAN SIGN CM026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa4"},77733:{"value":"12FA5","name":"CYPRO-MINOAN SIGN CM027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa5"},77734:{"value":"12FA6","name":"CYPRO-MINOAN SIGN CM028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa6"},77735:{"value":"12FA7","name":"CYPRO-MINOAN SIGN CM029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa7"},77736:{"value":"12FA8","name":"CYPRO-MINOAN SIGN CM030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa8"},77737:{"value":"12FA9","name":"CYPRO-MINOAN SIGN CM033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfa9"},77738:{"value":"12FAA","name":"CYPRO-MINOAN SIGN CM034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfaa"},77739:{"value":"12FAB","name":"CYPRO-MINOAN SIGN CM035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfab"},77740:{"value":"12FAC","name":"CYPRO-MINOAN SIGN CM036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfac"},77741:{"value":"12FAD","name":"CYPRO-MINOAN SIGN CM037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfad"},77742:{"value":"12FAE","name":"CYPRO-MINOAN SIGN CM038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfae"},77743:{"value":"12FAF","name":"CYPRO-MINOAN SIGN CM039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfaf"},77744:{"value":"12FB0","name":"CYPRO-MINOAN SIGN CM040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb0"},77745:{"value":"12FB1","name":"CYPRO-MINOAN SIGN CM041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb1"},77746:{"value":"12FB2","name":"CYPRO-MINOAN SIGN CM044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb2"},77747:{"value":"12FB3","name":"CYPRO-MINOAN SIGN CM046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb3"},77748:{"value":"12FB4","name":"CYPRO-MINOAN SIGN CM047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb4"},77749:{"value":"12FB5","name":"CYPRO-MINOAN SIGN CM049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb5"},77750:{"value":"12FB6","name":"CYPRO-MINOAN SIGN CM050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb6"},77751:{"value":"12FB7","name":"CYPRO-MINOAN SIGN CM051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb7"},77752:{"value":"12FB8","name":"CYPRO-MINOAN SIGN CM052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb8"},77753:{"value":"12FB9","name":"CYPRO-MINOAN SIGN CM053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfb9"},77754:{"value":"12FBA","name":"CYPRO-MINOAN SIGN CM054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfba"},77755:{"value":"12FBB","name":"CYPRO-MINOAN SIGN CM055","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfbb"},77756:{"value":"12FBC","name":"CYPRO-MINOAN SIGN CM056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfbc"},77757:{"value":"12FBD","name":"CYPRO-MINOAN SIGN CM058","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfbd"},77758:{"value":"12FBE","name":"CYPRO-MINOAN SIGN CM059","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfbe"},77759:{"value":"12FBF","name":"CYPRO-MINOAN SIGN CM060","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfbf"},77760:{"value":"12FC0","name":"CYPRO-MINOAN SIGN CM061","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc0"},77761:{"value":"12FC1","name":"CYPRO-MINOAN SIGN CM062","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc1"},77762:{"value":"12FC2","name":"CYPRO-MINOAN SIGN CM063","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc2"},77763:{"value":"12FC3","name":"CYPRO-MINOAN SIGN CM064","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc3"},77764:{"value":"12FC4","name":"CYPRO-MINOAN SIGN CM066","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc4"},77765:{"value":"12FC5","name":"CYPRO-MINOAN SIGN CM067","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc5"},77766:{"value":"12FC6","name":"CYPRO-MINOAN SIGN CM068","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc6"},77767:{"value":"12FC7","name":"CYPRO-MINOAN SIGN CM069","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc7"},77768:{"value":"12FC8","name":"CYPRO-MINOAN SIGN CM070","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc8"},77769:{"value":"12FC9","name":"CYPRO-MINOAN SIGN CM071","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfc9"},77770:{"value":"12FCA","name":"CYPRO-MINOAN SIGN CM072","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfca"},77771:{"value":"12FCB","name":"CYPRO-MINOAN SIGN CM073","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfcb"},77772:{"value":"12FCC","name":"CYPRO-MINOAN SIGN CM074","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfcc"},77773:{"value":"12FCD","name":"CYPRO-MINOAN SIGN CM075","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfcd"},77774:{"value":"12FCE","name":"CYPRO-MINOAN SIGN CM075B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfce"},77775:{"value":"12FCF","name":"CYPRO-MINOAN SIGN CM076","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfcf"},77776:{"value":"12FD0","name":"CYPRO-MINOAN SIGN CM078","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd0"},77777:{"value":"12FD1","name":"CYPRO-MINOAN SIGN CM079","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd1"},77778:{"value":"12FD2","name":"CYPRO-MINOAN SIGN CM080","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd2"},77779:{"value":"12FD3","name":"CYPRO-MINOAN SIGN CM081","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd3"},77780:{"value":"12FD4","name":"CYPRO-MINOAN SIGN CM082","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd4"},77781:{"value":"12FD5","name":"CYPRO-MINOAN SIGN CM083","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd5"},77782:{"value":"12FD6","name":"CYPRO-MINOAN SIGN CM084","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd6"},77783:{"value":"12FD7","name":"CYPRO-MINOAN SIGN CM085","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd7"},77784:{"value":"12FD8","name":"CYPRO-MINOAN SIGN CM086","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd8"},77785:{"value":"12FD9","name":"CYPRO-MINOAN SIGN CM087","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfd9"},77786:{"value":"12FDA","name":"CYPRO-MINOAN SIGN CM088","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfda"},77787:{"value":"12FDB","name":"CYPRO-MINOAN SIGN CM089","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfdb"},77788:{"value":"12FDC","name":"CYPRO-MINOAN SIGN CM090","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfdc"},77789:{"value":"12FDD","name":"CYPRO-MINOAN SIGN CM091","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfdd"},77790:{"value":"12FDE","name":"CYPRO-MINOAN SIGN CM092","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfde"},77791:{"value":"12FDF","name":"CYPRO-MINOAN SIGN CM094","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfdf"},77792:{"value":"12FE0","name":"CYPRO-MINOAN SIGN CM095","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe0"},77793:{"value":"12FE1","name":"CYPRO-MINOAN SIGN CM096","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe1"},77794:{"value":"12FE2","name":"CYPRO-MINOAN SIGN CM097","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe2"},77795:{"value":"12FE3","name":"CYPRO-MINOAN SIGN CM098","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe3"},77796:{"value":"12FE4","name":"CYPRO-MINOAN SIGN CM099","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe4"},77797:{"value":"12FE5","name":"CYPRO-MINOAN SIGN CM100","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe5"},77798:{"value":"12FE6","name":"CYPRO-MINOAN SIGN CM101","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe6"},77799:{"value":"12FE7","name":"CYPRO-MINOAN SIGN CM102","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe7"},77800:{"value":"12FE8","name":"CYPRO-MINOAN SIGN CM103","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe8"},77801:{"value":"12FE9","name":"CYPRO-MINOAN SIGN CM104","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfe9"},77802:{"value":"12FEA","name":"CYPRO-MINOAN SIGN CM105","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfea"},77803:{"value":"12FEB","name":"CYPRO-MINOAN SIGN CM107","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfeb"},77804:{"value":"12FEC","name":"CYPRO-MINOAN SIGN CM108","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfec"},77805:{"value":"12FED","name":"CYPRO-MINOAN SIGN CM109","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfed"},77806:{"value":"12FEE","name":"CYPRO-MINOAN SIGN CM110","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfee"},77807:{"value":"12FEF","name":"CYPRO-MINOAN SIGN CM112","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udfef"},77808:{"value":"12FF0","name":"CYPRO-MINOAN SIGN CM114","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udff0"},77824:{"value":"13000","name":"EGYPTIAN HIEROGLYPH A001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc00"},77825:{"value":"13001","name":"EGYPTIAN HIEROGLYPH A002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc01"},77826:{"value":"13002","name":"EGYPTIAN HIEROGLYPH A003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc02"},77827:{"value":"13003","name":"EGYPTIAN HIEROGLYPH A004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc03"},77828:{"value":"13004","name":"EGYPTIAN HIEROGLYPH A005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc04"},77829:{"value":"13005","name":"EGYPTIAN HIEROGLYPH A005A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc05"},77830:{"value":"13006","name":"EGYPTIAN HIEROGLYPH A006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc06"},77831:{"value":"13007","name":"EGYPTIAN HIEROGLYPH A006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc07"},77832:{"value":"13008","name":"EGYPTIAN HIEROGLYPH A006B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc08"},77833:{"value":"13009","name":"EGYPTIAN HIEROGLYPH A007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc09"},77834:{"value":"1300A","name":"EGYPTIAN HIEROGLYPH A008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc0a"},77835:{"value":"1300B","name":"EGYPTIAN HIEROGLYPH A009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc0b"},77836:{"value":"1300C","name":"EGYPTIAN HIEROGLYPH A010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc0c"},77837:{"value":"1300D","name":"EGYPTIAN HIEROGLYPH A011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc0d"},77838:{"value":"1300E","name":"EGYPTIAN HIEROGLYPH A012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc0e"},77839:{"value":"1300F","name":"EGYPTIAN HIEROGLYPH A013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc0f"},77840:{"value":"13010","name":"EGYPTIAN HIEROGLYPH A014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc10"},77841:{"value":"13011","name":"EGYPTIAN HIEROGLYPH A014A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc11"},77842:{"value":"13012","name":"EGYPTIAN HIEROGLYPH A015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc12"},77843:{"value":"13013","name":"EGYPTIAN HIEROGLYPH A016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc13"},77844:{"value":"13014","name":"EGYPTIAN HIEROGLYPH A017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc14"},77845:{"value":"13015","name":"EGYPTIAN HIEROGLYPH A017A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc15"},77846:{"value":"13016","name":"EGYPTIAN HIEROGLYPH A018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc16"},77847:{"value":"13017","name":"EGYPTIAN HIEROGLYPH A019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc17"},77848:{"value":"13018","name":"EGYPTIAN HIEROGLYPH A020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc18"},77849:{"value":"13019","name":"EGYPTIAN HIEROGLYPH A021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc19"},77850:{"value":"1301A","name":"EGYPTIAN HIEROGLYPH A022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc1a"},77851:{"value":"1301B","name":"EGYPTIAN HIEROGLYPH A023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc1b"},77852:{"value":"1301C","name":"EGYPTIAN HIEROGLYPH A024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc1c"},77853:{"value":"1301D","name":"EGYPTIAN HIEROGLYPH A025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc1d"},77854:{"value":"1301E","name":"EGYPTIAN HIEROGLYPH A026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc1e"},77855:{"value":"1301F","name":"EGYPTIAN HIEROGLYPH A027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc1f"},77856:{"value":"13020","name":"EGYPTIAN HIEROGLYPH A028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc20"},77857:{"value":"13021","name":"EGYPTIAN HIEROGLYPH A029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc21"},77858:{"value":"13022","name":"EGYPTIAN HIEROGLYPH A030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc22"},77859:{"value":"13023","name":"EGYPTIAN HIEROGLYPH A031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc23"},77860:{"value":"13024","name":"EGYPTIAN HIEROGLYPH A032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc24"},77861:{"value":"13025","name":"EGYPTIAN HIEROGLYPH A032A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc25"},77862:{"value":"13026","name":"EGYPTIAN HIEROGLYPH A033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc26"},77863:{"value":"13027","name":"EGYPTIAN HIEROGLYPH A034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc27"},77864:{"value":"13028","name":"EGYPTIAN HIEROGLYPH A035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc28"},77865:{"value":"13029","name":"EGYPTIAN HIEROGLYPH A036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc29"},77866:{"value":"1302A","name":"EGYPTIAN HIEROGLYPH A037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc2a"},77867:{"value":"1302B","name":"EGYPTIAN HIEROGLYPH A038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc2b"},77868:{"value":"1302C","name":"EGYPTIAN HIEROGLYPH A039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc2c"},77869:{"value":"1302D","name":"EGYPTIAN HIEROGLYPH A040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc2d"},77870:{"value":"1302E","name":"EGYPTIAN HIEROGLYPH A040A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc2e"},77871:{"value":"1302F","name":"EGYPTIAN HIEROGLYPH A041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc2f"},77872:{"value":"13030","name":"EGYPTIAN HIEROGLYPH A042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc30"},77873:{"value":"13031","name":"EGYPTIAN HIEROGLYPH A042A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc31"},77874:{"value":"13032","name":"EGYPTIAN HIEROGLYPH A043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc32"},77875:{"value":"13033","name":"EGYPTIAN HIEROGLYPH A043A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc33"},77876:{"value":"13034","name":"EGYPTIAN HIEROGLYPH A044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc34"},77877:{"value":"13035","name":"EGYPTIAN HIEROGLYPH A045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc35"},77878:{"value":"13036","name":"EGYPTIAN HIEROGLYPH A045A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc36"},77879:{"value":"13037","name":"EGYPTIAN HIEROGLYPH A046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc37"},77880:{"value":"13038","name":"EGYPTIAN HIEROGLYPH A047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc38"},77881:{"value":"13039","name":"EGYPTIAN HIEROGLYPH A048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc39"},77882:{"value":"1303A","name":"EGYPTIAN HIEROGLYPH A049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc3a"},77883:{"value":"1303B","name":"EGYPTIAN HIEROGLYPH A050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc3b"},77884:{"value":"1303C","name":"EGYPTIAN HIEROGLYPH A051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc3c"},77885:{"value":"1303D","name":"EGYPTIAN HIEROGLYPH A052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc3d"},77886:{"value":"1303E","name":"EGYPTIAN HIEROGLYPH A053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc3e"},77887:{"value":"1303F","name":"EGYPTIAN HIEROGLYPH A054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc3f"},77888:{"value":"13040","name":"EGYPTIAN HIEROGLYPH A055","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc40"},77889:{"value":"13041","name":"EGYPTIAN HIEROGLYPH A056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc41"},77890:{"value":"13042","name":"EGYPTIAN HIEROGLYPH A057","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc42"},77891:{"value":"13043","name":"EGYPTIAN HIEROGLYPH A058","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc43"},77892:{"value":"13044","name":"EGYPTIAN HIEROGLYPH A059","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc44"},77893:{"value":"13045","name":"EGYPTIAN HIEROGLYPH A060","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc45"},77894:{"value":"13046","name":"EGYPTIAN HIEROGLYPH A061","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc46"},77895:{"value":"13047","name":"EGYPTIAN HIEROGLYPH A062","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc47"},77896:{"value":"13048","name":"EGYPTIAN HIEROGLYPH A063","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc48"},77897:{"value":"13049","name":"EGYPTIAN HIEROGLYPH A064","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc49"},77898:{"value":"1304A","name":"EGYPTIAN HIEROGLYPH A065","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc4a"},77899:{"value":"1304B","name":"EGYPTIAN HIEROGLYPH A066","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc4b"},77900:{"value":"1304C","name":"EGYPTIAN HIEROGLYPH A067","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc4c"},77901:{"value":"1304D","name":"EGYPTIAN HIEROGLYPH A068","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc4d"},77902:{"value":"1304E","name":"EGYPTIAN HIEROGLYPH A069","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc4e"},77903:{"value":"1304F","name":"EGYPTIAN HIEROGLYPH A070","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc4f"},77904:{"value":"13050","name":"EGYPTIAN HIEROGLYPH B001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc50"},77905:{"value":"13051","name":"EGYPTIAN HIEROGLYPH B002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc51"},77906:{"value":"13052","name":"EGYPTIAN HIEROGLYPH B003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc52"},77907:{"value":"13053","name":"EGYPTIAN HIEROGLYPH B004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc53"},77908:{"value":"13054","name":"EGYPTIAN HIEROGLYPH B005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc54"},77909:{"value":"13055","name":"EGYPTIAN HIEROGLYPH B005A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc55"},77910:{"value":"13056","name":"EGYPTIAN HIEROGLYPH B006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc56"},77911:{"value":"13057","name":"EGYPTIAN HIEROGLYPH B007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc57"},77912:{"value":"13058","name":"EGYPTIAN HIEROGLYPH B008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc58"},77913:{"value":"13059","name":"EGYPTIAN HIEROGLYPH B009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc59"},77914:{"value":"1305A","name":"EGYPTIAN HIEROGLYPH C001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc5a"},77915:{"value":"1305B","name":"EGYPTIAN HIEROGLYPH C002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc5b"},77916:{"value":"1305C","name":"EGYPTIAN HIEROGLYPH C002A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc5c"},77917:{"value":"1305D","name":"EGYPTIAN HIEROGLYPH C002B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc5d"},77918:{"value":"1305E","name":"EGYPTIAN HIEROGLYPH C002C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc5e"},77919:{"value":"1305F","name":"EGYPTIAN HIEROGLYPH C003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc5f"},77920:{"value":"13060","name":"EGYPTIAN HIEROGLYPH C004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc60"},77921:{"value":"13061","name":"EGYPTIAN HIEROGLYPH C005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc61"},77922:{"value":"13062","name":"EGYPTIAN HIEROGLYPH C006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc62"},77923:{"value":"13063","name":"EGYPTIAN HIEROGLYPH C007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc63"},77924:{"value":"13064","name":"EGYPTIAN HIEROGLYPH C008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc64"},77925:{"value":"13065","name":"EGYPTIAN HIEROGLYPH C009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc65"},77926:{"value":"13066","name":"EGYPTIAN HIEROGLYPH C010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc66"},77927:{"value":"13067","name":"EGYPTIAN HIEROGLYPH C010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc67"},77928:{"value":"13068","name":"EGYPTIAN HIEROGLYPH C011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc68"},77929:{"value":"13069","name":"EGYPTIAN HIEROGLYPH C012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc69"},77930:{"value":"1306A","name":"EGYPTIAN HIEROGLYPH C013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc6a"},77931:{"value":"1306B","name":"EGYPTIAN HIEROGLYPH C014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc6b"},77932:{"value":"1306C","name":"EGYPTIAN HIEROGLYPH C015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc6c"},77933:{"value":"1306D","name":"EGYPTIAN HIEROGLYPH C016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc6d"},77934:{"value":"1306E","name":"EGYPTIAN HIEROGLYPH C017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc6e"},77935:{"value":"1306F","name":"EGYPTIAN HIEROGLYPH C018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc6f"},77936:{"value":"13070","name":"EGYPTIAN HIEROGLYPH C019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc70"},77937:{"value":"13071","name":"EGYPTIAN HIEROGLYPH C020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc71"},77938:{"value":"13072","name":"EGYPTIAN HIEROGLYPH C021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc72"},77939:{"value":"13073","name":"EGYPTIAN HIEROGLYPH C022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc73"},77940:{"value":"13074","name":"EGYPTIAN HIEROGLYPH C023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc74"},77941:{"value":"13075","name":"EGYPTIAN HIEROGLYPH C024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc75"},77942:{"value":"13076","name":"EGYPTIAN HIEROGLYPH D001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc76"},77943:{"value":"13077","name":"EGYPTIAN HIEROGLYPH D002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc77"},77944:{"value":"13078","name":"EGYPTIAN HIEROGLYPH D003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc78"},77945:{"value":"13079","name":"EGYPTIAN HIEROGLYPH D004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc79"},77946:{"value":"1307A","name":"EGYPTIAN HIEROGLYPH D005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc7a"},77947:{"value":"1307B","name":"EGYPTIAN HIEROGLYPH D006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc7b"},77948:{"value":"1307C","name":"EGYPTIAN HIEROGLYPH D007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc7c"},77949:{"value":"1307D","name":"EGYPTIAN HIEROGLYPH D008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc7d"},77950:{"value":"1307E","name":"EGYPTIAN HIEROGLYPH D008A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc7e"},77951:{"value":"1307F","name":"EGYPTIAN HIEROGLYPH D009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc7f"},77952:{"value":"13080","name":"EGYPTIAN HIEROGLYPH D010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc80"},77953:{"value":"13081","name":"EGYPTIAN HIEROGLYPH D011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc81"},77954:{"value":"13082","name":"EGYPTIAN HIEROGLYPH D012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc82"},77955:{"value":"13083","name":"EGYPTIAN HIEROGLYPH D013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc83"},77956:{"value":"13084","name":"EGYPTIAN HIEROGLYPH D014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc84"},77957:{"value":"13085","name":"EGYPTIAN HIEROGLYPH D015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc85"},77958:{"value":"13086","name":"EGYPTIAN HIEROGLYPH D016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc86"},77959:{"value":"13087","name":"EGYPTIAN HIEROGLYPH D017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc87"},77960:{"value":"13088","name":"EGYPTIAN HIEROGLYPH D018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc88"},77961:{"value":"13089","name":"EGYPTIAN HIEROGLYPH D019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc89"},77962:{"value":"1308A","name":"EGYPTIAN HIEROGLYPH D020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc8a"},77963:{"value":"1308B","name":"EGYPTIAN HIEROGLYPH D021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc8b"},77964:{"value":"1308C","name":"EGYPTIAN HIEROGLYPH D022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc8c"},77965:{"value":"1308D","name":"EGYPTIAN HIEROGLYPH D023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc8d"},77966:{"value":"1308E","name":"EGYPTIAN HIEROGLYPH D024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc8e"},77967:{"value":"1308F","name":"EGYPTIAN HIEROGLYPH D025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc8f"},77968:{"value":"13090","name":"EGYPTIAN HIEROGLYPH D026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc90"},77969:{"value":"13091","name":"EGYPTIAN HIEROGLYPH D027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc91"},77970:{"value":"13092","name":"EGYPTIAN HIEROGLYPH D027A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc92"},77971:{"value":"13093","name":"EGYPTIAN HIEROGLYPH D028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc93"},77972:{"value":"13094","name":"EGYPTIAN HIEROGLYPH D029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc94"},77973:{"value":"13095","name":"EGYPTIAN HIEROGLYPH D030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc95"},77974:{"value":"13096","name":"EGYPTIAN HIEROGLYPH D031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc96"},77975:{"value":"13097","name":"EGYPTIAN HIEROGLYPH D031A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc97"},77976:{"value":"13098","name":"EGYPTIAN HIEROGLYPH D032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc98"},77977:{"value":"13099","name":"EGYPTIAN HIEROGLYPH D033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc99"},77978:{"value":"1309A","name":"EGYPTIAN HIEROGLYPH D034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc9a"},77979:{"value":"1309B","name":"EGYPTIAN HIEROGLYPH D034A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc9b"},77980:{"value":"1309C","name":"EGYPTIAN HIEROGLYPH D035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc9c"},77981:{"value":"1309D","name":"EGYPTIAN HIEROGLYPH D036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc9d"},77982:{"value":"1309E","name":"EGYPTIAN HIEROGLYPH D037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc9e"},77983:{"value":"1309F","name":"EGYPTIAN HIEROGLYPH D038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udc9f"},77984:{"value":"130A0","name":"EGYPTIAN HIEROGLYPH D039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca0"},77985:{"value":"130A1","name":"EGYPTIAN HIEROGLYPH D040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca1"},77986:{"value":"130A2","name":"EGYPTIAN HIEROGLYPH D041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca2"},77987:{"value":"130A3","name":"EGYPTIAN HIEROGLYPH D042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca3"},77988:{"value":"130A4","name":"EGYPTIAN HIEROGLYPH D043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca4"},77989:{"value":"130A5","name":"EGYPTIAN HIEROGLYPH D044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca5"},77990:{"value":"130A6","name":"EGYPTIAN HIEROGLYPH D045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca6"},77991:{"value":"130A7","name":"EGYPTIAN HIEROGLYPH D046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca7"},77992:{"value":"130A8","name":"EGYPTIAN HIEROGLYPH D046A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca8"},77993:{"value":"130A9","name":"EGYPTIAN HIEROGLYPH D047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udca9"},77994:{"value":"130AA","name":"EGYPTIAN HIEROGLYPH D048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcaa"},77995:{"value":"130AB","name":"EGYPTIAN HIEROGLYPH D048A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcab"},77996:{"value":"130AC","name":"EGYPTIAN HIEROGLYPH D049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcac"},77997:{"value":"130AD","name":"EGYPTIAN HIEROGLYPH D050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcad"},77998:{"value":"130AE","name":"EGYPTIAN HIEROGLYPH D050A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcae"},77999:{"value":"130AF","name":"EGYPTIAN HIEROGLYPH D050B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcaf"},78000:{"value":"130B0","name":"EGYPTIAN HIEROGLYPH D050C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb0"},78001:{"value":"130B1","name":"EGYPTIAN HIEROGLYPH D050D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb1"},78002:{"value":"130B2","name":"EGYPTIAN HIEROGLYPH D050E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb2"},78003:{"value":"130B3","name":"EGYPTIAN HIEROGLYPH D050F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb3"},78004:{"value":"130B4","name":"EGYPTIAN HIEROGLYPH D050G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb4"},78005:{"value":"130B5","name":"EGYPTIAN HIEROGLYPH D050H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb5"},78006:{"value":"130B6","name":"EGYPTIAN HIEROGLYPH D050I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb6"},78007:{"value":"130B7","name":"EGYPTIAN HIEROGLYPH D051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb7"},78008:{"value":"130B8","name":"EGYPTIAN HIEROGLYPH D052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb8"},78009:{"value":"130B9","name":"EGYPTIAN HIEROGLYPH D052A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcb9"},78010:{"value":"130BA","name":"EGYPTIAN HIEROGLYPH D053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcba"},78011:{"value":"130BB","name":"EGYPTIAN HIEROGLYPH D054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcbb"},78012:{"value":"130BC","name":"EGYPTIAN HIEROGLYPH D054A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcbc"},78013:{"value":"130BD","name":"EGYPTIAN HIEROGLYPH D055","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcbd"},78014:{"value":"130BE","name":"EGYPTIAN HIEROGLYPH D056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcbe"},78015:{"value":"130BF","name":"EGYPTIAN HIEROGLYPH D057","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcbf"},78016:{"value":"130C0","name":"EGYPTIAN HIEROGLYPH D058","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc0"},78017:{"value":"130C1","name":"EGYPTIAN HIEROGLYPH D059","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc1"},78018:{"value":"130C2","name":"EGYPTIAN HIEROGLYPH D060","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc2"},78019:{"value":"130C3","name":"EGYPTIAN HIEROGLYPH D061","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc3"},78020:{"value":"130C4","name":"EGYPTIAN HIEROGLYPH D062","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc4"},78021:{"value":"130C5","name":"EGYPTIAN HIEROGLYPH D063","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc5"},78022:{"value":"130C6","name":"EGYPTIAN HIEROGLYPH D064","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc6"},78023:{"value":"130C7","name":"EGYPTIAN HIEROGLYPH D065","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc7"},78024:{"value":"130C8","name":"EGYPTIAN HIEROGLYPH D066","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc8"},78025:{"value":"130C9","name":"EGYPTIAN HIEROGLYPH D067","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcc9"},78026:{"value":"130CA","name":"EGYPTIAN HIEROGLYPH D067A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcca"},78027:{"value":"130CB","name":"EGYPTIAN HIEROGLYPH D067B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udccb"},78028:{"value":"130CC","name":"EGYPTIAN HIEROGLYPH D067C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udccc"},78029:{"value":"130CD","name":"EGYPTIAN HIEROGLYPH D067D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udccd"},78030:{"value":"130CE","name":"EGYPTIAN HIEROGLYPH D067E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcce"},78031:{"value":"130CF","name":"EGYPTIAN HIEROGLYPH D067F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udccf"},78032:{"value":"130D0","name":"EGYPTIAN HIEROGLYPH D067G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd0"},78033:{"value":"130D1","name":"EGYPTIAN HIEROGLYPH D067H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd1"},78034:{"value":"130D2","name":"EGYPTIAN HIEROGLYPH E001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd2"},78035:{"value":"130D3","name":"EGYPTIAN HIEROGLYPH E002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd3"},78036:{"value":"130D4","name":"EGYPTIAN HIEROGLYPH E003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd4"},78037:{"value":"130D5","name":"EGYPTIAN HIEROGLYPH E004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd5"},78038:{"value":"130D6","name":"EGYPTIAN HIEROGLYPH E005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd6"},78039:{"value":"130D7","name":"EGYPTIAN HIEROGLYPH E006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd7"},78040:{"value":"130D8","name":"EGYPTIAN HIEROGLYPH E007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd8"},78041:{"value":"130D9","name":"EGYPTIAN HIEROGLYPH E008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcd9"},78042:{"value":"130DA","name":"EGYPTIAN HIEROGLYPH E008A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcda"},78043:{"value":"130DB","name":"EGYPTIAN HIEROGLYPH E009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcdb"},78044:{"value":"130DC","name":"EGYPTIAN HIEROGLYPH E009A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcdc"},78045:{"value":"130DD","name":"EGYPTIAN HIEROGLYPH E010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcdd"},78046:{"value":"130DE","name":"EGYPTIAN HIEROGLYPH E011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcde"},78047:{"value":"130DF","name":"EGYPTIAN HIEROGLYPH E012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcdf"},78048:{"value":"130E0","name":"EGYPTIAN HIEROGLYPH E013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce0"},78049:{"value":"130E1","name":"EGYPTIAN HIEROGLYPH E014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce1"},78050:{"value":"130E2","name":"EGYPTIAN HIEROGLYPH E015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce2"},78051:{"value":"130E3","name":"EGYPTIAN HIEROGLYPH E016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce3"},78052:{"value":"130E4","name":"EGYPTIAN HIEROGLYPH E016A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce4"},78053:{"value":"130E5","name":"EGYPTIAN HIEROGLYPH E017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce5"},78054:{"value":"130E6","name":"EGYPTIAN HIEROGLYPH E017A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce6"},78055:{"value":"130E7","name":"EGYPTIAN HIEROGLYPH E018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce7"},78056:{"value":"130E8","name":"EGYPTIAN HIEROGLYPH E019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce8"},78057:{"value":"130E9","name":"EGYPTIAN HIEROGLYPH E020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udce9"},78058:{"value":"130EA","name":"EGYPTIAN HIEROGLYPH E020A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcea"},78059:{"value":"130EB","name":"EGYPTIAN HIEROGLYPH E021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udceb"},78060:{"value":"130EC","name":"EGYPTIAN HIEROGLYPH E022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcec"},78061:{"value":"130ED","name":"EGYPTIAN HIEROGLYPH E023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udced"},78062:{"value":"130EE","name":"EGYPTIAN HIEROGLYPH E024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcee"},78063:{"value":"130EF","name":"EGYPTIAN HIEROGLYPH E025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcef"},78064:{"value":"130F0","name":"EGYPTIAN HIEROGLYPH E026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf0"},78065:{"value":"130F1","name":"EGYPTIAN HIEROGLYPH E027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf1"},78066:{"value":"130F2","name":"EGYPTIAN HIEROGLYPH E028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf2"},78067:{"value":"130F3","name":"EGYPTIAN HIEROGLYPH E028A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf3"},78068:{"value":"130F4","name":"EGYPTIAN HIEROGLYPH E029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf4"},78069:{"value":"130F5","name":"EGYPTIAN HIEROGLYPH E030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf5"},78070:{"value":"130F6","name":"EGYPTIAN HIEROGLYPH E031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf6"},78071:{"value":"130F7","name":"EGYPTIAN HIEROGLYPH E032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf7"},78072:{"value":"130F8","name":"EGYPTIAN HIEROGLYPH E033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf8"},78073:{"value":"130F9","name":"EGYPTIAN HIEROGLYPH E034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcf9"},78074:{"value":"130FA","name":"EGYPTIAN HIEROGLYPH E034A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcfa"},78075:{"value":"130FB","name":"EGYPTIAN HIEROGLYPH E036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcfb"},78076:{"value":"130FC","name":"EGYPTIAN HIEROGLYPH E037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcfc"},78077:{"value":"130FD","name":"EGYPTIAN HIEROGLYPH E038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcfd"},78078:{"value":"130FE","name":"EGYPTIAN HIEROGLYPH F001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcfe"},78079:{"value":"130FF","name":"EGYPTIAN HIEROGLYPH F001A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udcff"},78080:{"value":"13100","name":"EGYPTIAN HIEROGLYPH F002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd00"},78081:{"value":"13101","name":"EGYPTIAN HIEROGLYPH F003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd01"},78082:{"value":"13102","name":"EGYPTIAN HIEROGLYPH F004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd02"},78083:{"value":"13103","name":"EGYPTIAN HIEROGLYPH F005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd03"},78084:{"value":"13104","name":"EGYPTIAN HIEROGLYPH F006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd04"},78085:{"value":"13105","name":"EGYPTIAN HIEROGLYPH F007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd05"},78086:{"value":"13106","name":"EGYPTIAN HIEROGLYPH F008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd06"},78087:{"value":"13107","name":"EGYPTIAN HIEROGLYPH F009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd07"},78088:{"value":"13108","name":"EGYPTIAN HIEROGLYPH F010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd08"},78089:{"value":"13109","name":"EGYPTIAN HIEROGLYPH F011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd09"},78090:{"value":"1310A","name":"EGYPTIAN HIEROGLYPH F012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd0a"},78091:{"value":"1310B","name":"EGYPTIAN HIEROGLYPH F013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd0b"},78092:{"value":"1310C","name":"EGYPTIAN HIEROGLYPH F013A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd0c"},78093:{"value":"1310D","name":"EGYPTIAN HIEROGLYPH F014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd0d"},78094:{"value":"1310E","name":"EGYPTIAN HIEROGLYPH F015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd0e"},78095:{"value":"1310F","name":"EGYPTIAN HIEROGLYPH F016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd0f"},78096:{"value":"13110","name":"EGYPTIAN HIEROGLYPH F017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd10"},78097:{"value":"13111","name":"EGYPTIAN HIEROGLYPH F018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd11"},78098:{"value":"13112","name":"EGYPTIAN HIEROGLYPH F019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd12"},78099:{"value":"13113","name":"EGYPTIAN HIEROGLYPH F020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd13"},78100:{"value":"13114","name":"EGYPTIAN HIEROGLYPH F021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd14"},78101:{"value":"13115","name":"EGYPTIAN HIEROGLYPH F021A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd15"},78102:{"value":"13116","name":"EGYPTIAN HIEROGLYPH F022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd16"},78103:{"value":"13117","name":"EGYPTIAN HIEROGLYPH F023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd17"},78104:{"value":"13118","name":"EGYPTIAN HIEROGLYPH F024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd18"},78105:{"value":"13119","name":"EGYPTIAN HIEROGLYPH F025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd19"},78106:{"value":"1311A","name":"EGYPTIAN HIEROGLYPH F026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd1a"},78107:{"value":"1311B","name":"EGYPTIAN HIEROGLYPH F027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd1b"},78108:{"value":"1311C","name":"EGYPTIAN HIEROGLYPH F028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd1c"},78109:{"value":"1311D","name":"EGYPTIAN HIEROGLYPH F029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd1d"},78110:{"value":"1311E","name":"EGYPTIAN HIEROGLYPH F030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd1e"},78111:{"value":"1311F","name":"EGYPTIAN HIEROGLYPH F031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd1f"},78112:{"value":"13120","name":"EGYPTIAN HIEROGLYPH F031A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd20"},78113:{"value":"13121","name":"EGYPTIAN HIEROGLYPH F032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd21"},78114:{"value":"13122","name":"EGYPTIAN HIEROGLYPH F033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd22"},78115:{"value":"13123","name":"EGYPTIAN HIEROGLYPH F034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd23"},78116:{"value":"13124","name":"EGYPTIAN HIEROGLYPH F035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd24"},78117:{"value":"13125","name":"EGYPTIAN HIEROGLYPH F036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd25"},78118:{"value":"13126","name":"EGYPTIAN HIEROGLYPH F037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd26"},78119:{"value":"13127","name":"EGYPTIAN HIEROGLYPH F037A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd27"},78120:{"value":"13128","name":"EGYPTIAN HIEROGLYPH F038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd28"},78121:{"value":"13129","name":"EGYPTIAN HIEROGLYPH F038A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd29"},78122:{"value":"1312A","name":"EGYPTIAN HIEROGLYPH F039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd2a"},78123:{"value":"1312B","name":"EGYPTIAN HIEROGLYPH F040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd2b"},78124:{"value":"1312C","name":"EGYPTIAN HIEROGLYPH F041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd2c"},78125:{"value":"1312D","name":"EGYPTIAN HIEROGLYPH F042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd2d"},78126:{"value":"1312E","name":"EGYPTIAN HIEROGLYPH F043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd2e"},78127:{"value":"1312F","name":"EGYPTIAN HIEROGLYPH F044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd2f"},78128:{"value":"13130","name":"EGYPTIAN HIEROGLYPH F045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd30"},78129:{"value":"13131","name":"EGYPTIAN HIEROGLYPH F045A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd31"},78130:{"value":"13132","name":"EGYPTIAN HIEROGLYPH F046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd32"},78131:{"value":"13133","name":"EGYPTIAN HIEROGLYPH F046A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd33"},78132:{"value":"13134","name":"EGYPTIAN HIEROGLYPH F047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd34"},78133:{"value":"13135","name":"EGYPTIAN HIEROGLYPH F047A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd35"},78134:{"value":"13136","name":"EGYPTIAN HIEROGLYPH F048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd36"},78135:{"value":"13137","name":"EGYPTIAN HIEROGLYPH F049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd37"},78136:{"value":"13138","name":"EGYPTIAN HIEROGLYPH F050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd38"},78137:{"value":"13139","name":"EGYPTIAN HIEROGLYPH F051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd39"},78138:{"value":"1313A","name":"EGYPTIAN HIEROGLYPH F051A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd3a"},78139:{"value":"1313B","name":"EGYPTIAN HIEROGLYPH F051B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd3b"},78140:{"value":"1313C","name":"EGYPTIAN HIEROGLYPH F051C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd3c"},78141:{"value":"1313D","name":"EGYPTIAN HIEROGLYPH F052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd3d"},78142:{"value":"1313E","name":"EGYPTIAN HIEROGLYPH F053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd3e"},78143:{"value":"1313F","name":"EGYPTIAN HIEROGLYPH G001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd3f"},78144:{"value":"13140","name":"EGYPTIAN HIEROGLYPH G002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd40"},78145:{"value":"13141","name":"EGYPTIAN HIEROGLYPH G003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd41"},78146:{"value":"13142","name":"EGYPTIAN HIEROGLYPH G004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd42"},78147:{"value":"13143","name":"EGYPTIAN HIEROGLYPH G005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd43"},78148:{"value":"13144","name":"EGYPTIAN HIEROGLYPH G006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd44"},78149:{"value":"13145","name":"EGYPTIAN HIEROGLYPH G006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd45"},78150:{"value":"13146","name":"EGYPTIAN HIEROGLYPH G007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd46"},78151:{"value":"13147","name":"EGYPTIAN HIEROGLYPH G007A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd47"},78152:{"value":"13148","name":"EGYPTIAN HIEROGLYPH G007B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd48"},78153:{"value":"13149","name":"EGYPTIAN HIEROGLYPH G008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd49"},78154:{"value":"1314A","name":"EGYPTIAN HIEROGLYPH G009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd4a"},78155:{"value":"1314B","name":"EGYPTIAN HIEROGLYPH G010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd4b"},78156:{"value":"1314C","name":"EGYPTIAN HIEROGLYPH G011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd4c"},78157:{"value":"1314D","name":"EGYPTIAN HIEROGLYPH G011A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd4d"},78158:{"value":"1314E","name":"EGYPTIAN HIEROGLYPH G012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd4e"},78159:{"value":"1314F","name":"EGYPTIAN HIEROGLYPH G013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd4f"},78160:{"value":"13150","name":"EGYPTIAN HIEROGLYPH G014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd50"},78161:{"value":"13151","name":"EGYPTIAN HIEROGLYPH G015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd51"},78162:{"value":"13152","name":"EGYPTIAN HIEROGLYPH G016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd52"},78163:{"value":"13153","name":"EGYPTIAN HIEROGLYPH G017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd53"},78164:{"value":"13154","name":"EGYPTIAN HIEROGLYPH G018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd54"},78165:{"value":"13155","name":"EGYPTIAN HIEROGLYPH G019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd55"},78166:{"value":"13156","name":"EGYPTIAN HIEROGLYPH G020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd56"},78167:{"value":"13157","name":"EGYPTIAN HIEROGLYPH G020A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd57"},78168:{"value":"13158","name":"EGYPTIAN HIEROGLYPH G021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd58"},78169:{"value":"13159","name":"EGYPTIAN HIEROGLYPH G022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd59"},78170:{"value":"1315A","name":"EGYPTIAN HIEROGLYPH G023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd5a"},78171:{"value":"1315B","name":"EGYPTIAN HIEROGLYPH G024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd5b"},78172:{"value":"1315C","name":"EGYPTIAN HIEROGLYPH G025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd5c"},78173:{"value":"1315D","name":"EGYPTIAN HIEROGLYPH G026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd5d"},78174:{"value":"1315E","name":"EGYPTIAN HIEROGLYPH G026A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd5e"},78175:{"value":"1315F","name":"EGYPTIAN HIEROGLYPH G027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd5f"},78176:{"value":"13160","name":"EGYPTIAN HIEROGLYPH G028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd60"},78177:{"value":"13161","name":"EGYPTIAN HIEROGLYPH G029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd61"},78178:{"value":"13162","name":"EGYPTIAN HIEROGLYPH G030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd62"},78179:{"value":"13163","name":"EGYPTIAN HIEROGLYPH G031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd63"},78180:{"value":"13164","name":"EGYPTIAN HIEROGLYPH G032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd64"},78181:{"value":"13165","name":"EGYPTIAN HIEROGLYPH G033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd65"},78182:{"value":"13166","name":"EGYPTIAN HIEROGLYPH G034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd66"},78183:{"value":"13167","name":"EGYPTIAN HIEROGLYPH G035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd67"},78184:{"value":"13168","name":"EGYPTIAN HIEROGLYPH G036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd68"},78185:{"value":"13169","name":"EGYPTIAN HIEROGLYPH G036A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd69"},78186:{"value":"1316A","name":"EGYPTIAN HIEROGLYPH G037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd6a"},78187:{"value":"1316B","name":"EGYPTIAN HIEROGLYPH G037A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd6b"},78188:{"value":"1316C","name":"EGYPTIAN HIEROGLYPH G038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd6c"},78189:{"value":"1316D","name":"EGYPTIAN HIEROGLYPH G039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd6d"},78190:{"value":"1316E","name":"EGYPTIAN HIEROGLYPH G040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd6e"},78191:{"value":"1316F","name":"EGYPTIAN HIEROGLYPH G041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd6f"},78192:{"value":"13170","name":"EGYPTIAN HIEROGLYPH G042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd70"},78193:{"value":"13171","name":"EGYPTIAN HIEROGLYPH G043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd71"},78194:{"value":"13172","name":"EGYPTIAN HIEROGLYPH G043A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd72"},78195:{"value":"13173","name":"EGYPTIAN HIEROGLYPH G044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd73"},78196:{"value":"13174","name":"EGYPTIAN HIEROGLYPH G045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd74"},78197:{"value":"13175","name":"EGYPTIAN HIEROGLYPH G045A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd75"},78198:{"value":"13176","name":"EGYPTIAN HIEROGLYPH G046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd76"},78199:{"value":"13177","name":"EGYPTIAN HIEROGLYPH G047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd77"},78200:{"value":"13178","name":"EGYPTIAN HIEROGLYPH G048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd78"},78201:{"value":"13179","name":"EGYPTIAN HIEROGLYPH G049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd79"},78202:{"value":"1317A","name":"EGYPTIAN HIEROGLYPH G050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd7a"},78203:{"value":"1317B","name":"EGYPTIAN HIEROGLYPH G051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd7b"},78204:{"value":"1317C","name":"EGYPTIAN HIEROGLYPH G052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd7c"},78205:{"value":"1317D","name":"EGYPTIAN HIEROGLYPH G053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd7d"},78206:{"value":"1317E","name":"EGYPTIAN HIEROGLYPH G054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd7e"},78207:{"value":"1317F","name":"EGYPTIAN HIEROGLYPH H001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd7f"},78208:{"value":"13180","name":"EGYPTIAN HIEROGLYPH H002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd80"},78209:{"value":"13181","name":"EGYPTIAN HIEROGLYPH H003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd81"},78210:{"value":"13182","name":"EGYPTIAN HIEROGLYPH H004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd82"},78211:{"value":"13183","name":"EGYPTIAN HIEROGLYPH H005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd83"},78212:{"value":"13184","name":"EGYPTIAN HIEROGLYPH H006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd84"},78213:{"value":"13185","name":"EGYPTIAN HIEROGLYPH H006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd85"},78214:{"value":"13186","name":"EGYPTIAN HIEROGLYPH H007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd86"},78215:{"value":"13187","name":"EGYPTIAN HIEROGLYPH H008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd87"},78216:{"value":"13188","name":"EGYPTIAN HIEROGLYPH I001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd88"},78217:{"value":"13189","name":"EGYPTIAN HIEROGLYPH I002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd89"},78218:{"value":"1318A","name":"EGYPTIAN HIEROGLYPH I003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd8a"},78219:{"value":"1318B","name":"EGYPTIAN HIEROGLYPH I004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd8b"},78220:{"value":"1318C","name":"EGYPTIAN HIEROGLYPH I005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd8c"},78221:{"value":"1318D","name":"EGYPTIAN HIEROGLYPH I005A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd8d"},78222:{"value":"1318E","name":"EGYPTIAN HIEROGLYPH I006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd8e"},78223:{"value":"1318F","name":"EGYPTIAN HIEROGLYPH I007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd8f"},78224:{"value":"13190","name":"EGYPTIAN HIEROGLYPH I008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd90"},78225:{"value":"13191","name":"EGYPTIAN HIEROGLYPH I009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd91"},78226:{"value":"13192","name":"EGYPTIAN HIEROGLYPH I009A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd92"},78227:{"value":"13193","name":"EGYPTIAN HIEROGLYPH I010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd93"},78228:{"value":"13194","name":"EGYPTIAN HIEROGLYPH I010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd94"},78229:{"value":"13195","name":"EGYPTIAN HIEROGLYPH I011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd95"},78230:{"value":"13196","name":"EGYPTIAN HIEROGLYPH I011A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd96"},78231:{"value":"13197","name":"EGYPTIAN HIEROGLYPH I012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd97"},78232:{"value":"13198","name":"EGYPTIAN HIEROGLYPH I013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd98"},78233:{"value":"13199","name":"EGYPTIAN HIEROGLYPH I014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd99"},78234:{"value":"1319A","name":"EGYPTIAN HIEROGLYPH I015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd9a"},78235:{"value":"1319B","name":"EGYPTIAN HIEROGLYPH K001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd9b"},78236:{"value":"1319C","name":"EGYPTIAN HIEROGLYPH K002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd9c"},78237:{"value":"1319D","name":"EGYPTIAN HIEROGLYPH K003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd9d"},78238:{"value":"1319E","name":"EGYPTIAN HIEROGLYPH K004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd9e"},78239:{"value":"1319F","name":"EGYPTIAN HIEROGLYPH K005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udd9f"},78240:{"value":"131A0","name":"EGYPTIAN HIEROGLYPH K006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda0"},78241:{"value":"131A1","name":"EGYPTIAN HIEROGLYPH K007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda1"},78242:{"value":"131A2","name":"EGYPTIAN HIEROGLYPH K008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda2"},78243:{"value":"131A3","name":"EGYPTIAN HIEROGLYPH L001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda3"},78244:{"value":"131A4","name":"EGYPTIAN HIEROGLYPH L002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda4"},78245:{"value":"131A5","name":"EGYPTIAN HIEROGLYPH L002A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda5"},78246:{"value":"131A6","name":"EGYPTIAN HIEROGLYPH L003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda6"},78247:{"value":"131A7","name":"EGYPTIAN HIEROGLYPH L004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda7"},78248:{"value":"131A8","name":"EGYPTIAN HIEROGLYPH L005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda8"},78249:{"value":"131A9","name":"EGYPTIAN HIEROGLYPH L006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udda9"},78250:{"value":"131AA","name":"EGYPTIAN HIEROGLYPH L006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddaa"},78251:{"value":"131AB","name":"EGYPTIAN HIEROGLYPH L007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddab"},78252:{"value":"131AC","name":"EGYPTIAN HIEROGLYPH L008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddac"},78253:{"value":"131AD","name":"EGYPTIAN HIEROGLYPH M001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddad"},78254:{"value":"131AE","name":"EGYPTIAN HIEROGLYPH M001A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddae"},78255:{"value":"131AF","name":"EGYPTIAN HIEROGLYPH M001B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddaf"},78256:{"value":"131B0","name":"EGYPTIAN HIEROGLYPH M002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb0"},78257:{"value":"131B1","name":"EGYPTIAN HIEROGLYPH M003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb1"},78258:{"value":"131B2","name":"EGYPTIAN HIEROGLYPH M003A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb2"},78259:{"value":"131B3","name":"EGYPTIAN HIEROGLYPH M004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb3"},78260:{"value":"131B4","name":"EGYPTIAN HIEROGLYPH M005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb4"},78261:{"value":"131B5","name":"EGYPTIAN HIEROGLYPH M006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb5"},78262:{"value":"131B6","name":"EGYPTIAN HIEROGLYPH M007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb6"},78263:{"value":"131B7","name":"EGYPTIAN HIEROGLYPH M008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb7"},78264:{"value":"131B8","name":"EGYPTIAN HIEROGLYPH M009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb8"},78265:{"value":"131B9","name":"EGYPTIAN HIEROGLYPH M010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddb9"},78266:{"value":"131BA","name":"EGYPTIAN HIEROGLYPH M010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddba"},78267:{"value":"131BB","name":"EGYPTIAN HIEROGLYPH M011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddbb"},78268:{"value":"131BC","name":"EGYPTIAN HIEROGLYPH M012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddbc"},78269:{"value":"131BD","name":"EGYPTIAN HIEROGLYPH M012A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddbd"},78270:{"value":"131BE","name":"EGYPTIAN HIEROGLYPH M012B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddbe"},78271:{"value":"131BF","name":"EGYPTIAN HIEROGLYPH M012C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddbf"},78272:{"value":"131C0","name":"EGYPTIAN HIEROGLYPH M012D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc0"},78273:{"value":"131C1","name":"EGYPTIAN HIEROGLYPH M012E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc1"},78274:{"value":"131C2","name":"EGYPTIAN HIEROGLYPH M012F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc2"},78275:{"value":"131C3","name":"EGYPTIAN HIEROGLYPH M012G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc3"},78276:{"value":"131C4","name":"EGYPTIAN HIEROGLYPH M012H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc4"},78277:{"value":"131C5","name":"EGYPTIAN HIEROGLYPH M013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc5"},78278:{"value":"131C6","name":"EGYPTIAN HIEROGLYPH M014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc6"},78279:{"value":"131C7","name":"EGYPTIAN HIEROGLYPH M015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc7"},78280:{"value":"131C8","name":"EGYPTIAN HIEROGLYPH M015A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc8"},78281:{"value":"131C9","name":"EGYPTIAN HIEROGLYPH M016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddc9"},78282:{"value":"131CA","name":"EGYPTIAN HIEROGLYPH M016A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddca"},78283:{"value":"131CB","name":"EGYPTIAN HIEROGLYPH M017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddcb"},78284:{"value":"131CC","name":"EGYPTIAN HIEROGLYPH M017A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddcc"},78285:{"value":"131CD","name":"EGYPTIAN HIEROGLYPH M018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddcd"},78286:{"value":"131CE","name":"EGYPTIAN HIEROGLYPH M019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddce"},78287:{"value":"131CF","name":"EGYPTIAN HIEROGLYPH M020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddcf"},78288:{"value":"131D0","name":"EGYPTIAN HIEROGLYPH M021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd0"},78289:{"value":"131D1","name":"EGYPTIAN HIEROGLYPH M022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd1"},78290:{"value":"131D2","name":"EGYPTIAN HIEROGLYPH M022A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd2"},78291:{"value":"131D3","name":"EGYPTIAN HIEROGLYPH M023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd3"},78292:{"value":"131D4","name":"EGYPTIAN HIEROGLYPH M024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd4"},78293:{"value":"131D5","name":"EGYPTIAN HIEROGLYPH M024A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd5"},78294:{"value":"131D6","name":"EGYPTIAN HIEROGLYPH M025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd6"},78295:{"value":"131D7","name":"EGYPTIAN HIEROGLYPH M026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd7"},78296:{"value":"131D8","name":"EGYPTIAN HIEROGLYPH M027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd8"},78297:{"value":"131D9","name":"EGYPTIAN HIEROGLYPH M028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddd9"},78298:{"value":"131DA","name":"EGYPTIAN HIEROGLYPH M028A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddda"},78299:{"value":"131DB","name":"EGYPTIAN HIEROGLYPH M029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udddb"},78300:{"value":"131DC","name":"EGYPTIAN HIEROGLYPH M030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udddc"},78301:{"value":"131DD","name":"EGYPTIAN HIEROGLYPH M031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udddd"},78302:{"value":"131DE","name":"EGYPTIAN HIEROGLYPH M031A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddde"},78303:{"value":"131DF","name":"EGYPTIAN HIEROGLYPH M032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udddf"},78304:{"value":"131E0","name":"EGYPTIAN HIEROGLYPH M033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde0"},78305:{"value":"131E1","name":"EGYPTIAN HIEROGLYPH M033A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde1"},78306:{"value":"131E2","name":"EGYPTIAN HIEROGLYPH M033B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde2"},78307:{"value":"131E3","name":"EGYPTIAN HIEROGLYPH M034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde3"},78308:{"value":"131E4","name":"EGYPTIAN HIEROGLYPH M035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde4"},78309:{"value":"131E5","name":"EGYPTIAN HIEROGLYPH M036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde5"},78310:{"value":"131E6","name":"EGYPTIAN HIEROGLYPH M037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde6"},78311:{"value":"131E7","name":"EGYPTIAN HIEROGLYPH M038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde7"},78312:{"value":"131E8","name":"EGYPTIAN HIEROGLYPH M039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde8"},78313:{"value":"131E9","name":"EGYPTIAN HIEROGLYPH M040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udde9"},78314:{"value":"131EA","name":"EGYPTIAN HIEROGLYPH M040A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddea"},78315:{"value":"131EB","name":"EGYPTIAN HIEROGLYPH M041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddeb"},78316:{"value":"131EC","name":"EGYPTIAN HIEROGLYPH M042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddec"},78317:{"value":"131ED","name":"EGYPTIAN HIEROGLYPH M043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udded"},78318:{"value":"131EE","name":"EGYPTIAN HIEROGLYPH M044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddee"},78319:{"value":"131EF","name":"EGYPTIAN HIEROGLYPH N001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddef"},78320:{"value":"131F0","name":"EGYPTIAN HIEROGLYPH N002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf0"},78321:{"value":"131F1","name":"EGYPTIAN HIEROGLYPH N003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf1"},78322:{"value":"131F2","name":"EGYPTIAN HIEROGLYPH N004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf2"},78323:{"value":"131F3","name":"EGYPTIAN HIEROGLYPH N005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf3"},78324:{"value":"131F4","name":"EGYPTIAN HIEROGLYPH N006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf4"},78325:{"value":"131F5","name":"EGYPTIAN HIEROGLYPH N007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf5"},78326:{"value":"131F6","name":"EGYPTIAN HIEROGLYPH N008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf6"},78327:{"value":"131F7","name":"EGYPTIAN HIEROGLYPH N009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf7"},78328:{"value":"131F8","name":"EGYPTIAN HIEROGLYPH N010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf8"},78329:{"value":"131F9","name":"EGYPTIAN HIEROGLYPH N011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddf9"},78330:{"value":"131FA","name":"EGYPTIAN HIEROGLYPH N012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddfa"},78331:{"value":"131FB","name":"EGYPTIAN HIEROGLYPH N013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddfb"},78332:{"value":"131FC","name":"EGYPTIAN HIEROGLYPH N014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddfc"},78333:{"value":"131FD","name":"EGYPTIAN HIEROGLYPH N015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddfd"},78334:{"value":"131FE","name":"EGYPTIAN HIEROGLYPH N016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddfe"},78335:{"value":"131FF","name":"EGYPTIAN HIEROGLYPH N017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uddff"},78336:{"value":"13200","name":"EGYPTIAN HIEROGLYPH N018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude00"},78337:{"value":"13201","name":"EGYPTIAN HIEROGLYPH N018A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude01"},78338:{"value":"13202","name":"EGYPTIAN HIEROGLYPH N018B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude02"},78339:{"value":"13203","name":"EGYPTIAN HIEROGLYPH N019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude03"},78340:{"value":"13204","name":"EGYPTIAN HIEROGLYPH N020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude04"},78341:{"value":"13205","name":"EGYPTIAN HIEROGLYPH N021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude05"},78342:{"value":"13206","name":"EGYPTIAN HIEROGLYPH N022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude06"},78343:{"value":"13207","name":"EGYPTIAN HIEROGLYPH N023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude07"},78344:{"value":"13208","name":"EGYPTIAN HIEROGLYPH N024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude08"},78345:{"value":"13209","name":"EGYPTIAN HIEROGLYPH N025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude09"},78346:{"value":"1320A","name":"EGYPTIAN HIEROGLYPH N025A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude0a"},78347:{"value":"1320B","name":"EGYPTIAN HIEROGLYPH N026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude0b"},78348:{"value":"1320C","name":"EGYPTIAN HIEROGLYPH N027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude0c"},78349:{"value":"1320D","name":"EGYPTIAN HIEROGLYPH N028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude0d"},78350:{"value":"1320E","name":"EGYPTIAN HIEROGLYPH N029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude0e"},78351:{"value":"1320F","name":"EGYPTIAN HIEROGLYPH N030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude0f"},78352:{"value":"13210","name":"EGYPTIAN HIEROGLYPH N031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude10"},78353:{"value":"13211","name":"EGYPTIAN HIEROGLYPH N032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude11"},78354:{"value":"13212","name":"EGYPTIAN HIEROGLYPH N033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude12"},78355:{"value":"13213","name":"EGYPTIAN HIEROGLYPH N033A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude13"},78356:{"value":"13214","name":"EGYPTIAN HIEROGLYPH N034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude14"},78357:{"value":"13215","name":"EGYPTIAN HIEROGLYPH N034A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude15"},78358:{"value":"13216","name":"EGYPTIAN HIEROGLYPH N035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude16"},78359:{"value":"13217","name":"EGYPTIAN HIEROGLYPH N035A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude17"},78360:{"value":"13218","name":"EGYPTIAN HIEROGLYPH N036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude18"},78361:{"value":"13219","name":"EGYPTIAN HIEROGLYPH N037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude19"},78362:{"value":"1321A","name":"EGYPTIAN HIEROGLYPH N037A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude1a"},78363:{"value":"1321B","name":"EGYPTIAN HIEROGLYPH N038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude1b"},78364:{"value":"1321C","name":"EGYPTIAN HIEROGLYPH N039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude1c"},78365:{"value":"1321D","name":"EGYPTIAN HIEROGLYPH N040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude1d"},78366:{"value":"1321E","name":"EGYPTIAN HIEROGLYPH N041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude1e"},78367:{"value":"1321F","name":"EGYPTIAN HIEROGLYPH N042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude1f"},78368:{"value":"13220","name":"EGYPTIAN HIEROGLYPH NL001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude20"},78369:{"value":"13221","name":"EGYPTIAN HIEROGLYPH NL002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude21"},78370:{"value":"13222","name":"EGYPTIAN HIEROGLYPH NL003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude22"},78371:{"value":"13223","name":"EGYPTIAN HIEROGLYPH NL004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude23"},78372:{"value":"13224","name":"EGYPTIAN HIEROGLYPH NL005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude24"},78373:{"value":"13225","name":"EGYPTIAN HIEROGLYPH NL005A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude25"},78374:{"value":"13226","name":"EGYPTIAN HIEROGLYPH NL006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude26"},78375:{"value":"13227","name":"EGYPTIAN HIEROGLYPH NL007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude27"},78376:{"value":"13228","name":"EGYPTIAN HIEROGLYPH NL008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude28"},78377:{"value":"13229","name":"EGYPTIAN HIEROGLYPH NL009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude29"},78378:{"value":"1322A","name":"EGYPTIAN HIEROGLYPH NL010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude2a"},78379:{"value":"1322B","name":"EGYPTIAN HIEROGLYPH NL011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude2b"},78380:{"value":"1322C","name":"EGYPTIAN HIEROGLYPH NL012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude2c"},78381:{"value":"1322D","name":"EGYPTIAN HIEROGLYPH NL013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude2d"},78382:{"value":"1322E","name":"EGYPTIAN HIEROGLYPH NL014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude2e"},78383:{"value":"1322F","name":"EGYPTIAN HIEROGLYPH NL015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude2f"},78384:{"value":"13230","name":"EGYPTIAN HIEROGLYPH NL016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude30"},78385:{"value":"13231","name":"EGYPTIAN HIEROGLYPH NL017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude31"},78386:{"value":"13232","name":"EGYPTIAN HIEROGLYPH NL017A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude32"},78387:{"value":"13233","name":"EGYPTIAN HIEROGLYPH NL018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude33"},78388:{"value":"13234","name":"EGYPTIAN HIEROGLYPH NL019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude34"},78389:{"value":"13235","name":"EGYPTIAN HIEROGLYPH NL020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude35"},78390:{"value":"13236","name":"EGYPTIAN HIEROGLYPH NU001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude36"},78391:{"value":"13237","name":"EGYPTIAN HIEROGLYPH NU002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude37"},78392:{"value":"13238","name":"EGYPTIAN HIEROGLYPH NU003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude38"},78393:{"value":"13239","name":"EGYPTIAN HIEROGLYPH NU004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude39"},78394:{"value":"1323A","name":"EGYPTIAN HIEROGLYPH NU005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude3a"},78395:{"value":"1323B","name":"EGYPTIAN HIEROGLYPH NU006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude3b"},78396:{"value":"1323C","name":"EGYPTIAN HIEROGLYPH NU007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude3c"},78397:{"value":"1323D","name":"EGYPTIAN HIEROGLYPH NU008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude3d"},78398:{"value":"1323E","name":"EGYPTIAN HIEROGLYPH NU009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude3e"},78399:{"value":"1323F","name":"EGYPTIAN HIEROGLYPH NU010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude3f"},78400:{"value":"13240","name":"EGYPTIAN HIEROGLYPH NU010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude40"},78401:{"value":"13241","name":"EGYPTIAN HIEROGLYPH NU011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude41"},78402:{"value":"13242","name":"EGYPTIAN HIEROGLYPH NU011A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude42"},78403:{"value":"13243","name":"EGYPTIAN HIEROGLYPH NU012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude43"},78404:{"value":"13244","name":"EGYPTIAN HIEROGLYPH NU013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude44"},78405:{"value":"13245","name":"EGYPTIAN HIEROGLYPH NU014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude45"},78406:{"value":"13246","name":"EGYPTIAN HIEROGLYPH NU015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude46"},78407:{"value":"13247","name":"EGYPTIAN HIEROGLYPH NU016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude47"},78408:{"value":"13248","name":"EGYPTIAN HIEROGLYPH NU017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude48"},78409:{"value":"13249","name":"EGYPTIAN HIEROGLYPH NU018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude49"},78410:{"value":"1324A","name":"EGYPTIAN HIEROGLYPH NU018A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude4a"},78411:{"value":"1324B","name":"EGYPTIAN HIEROGLYPH NU019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude4b"},78412:{"value":"1324C","name":"EGYPTIAN HIEROGLYPH NU020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude4c"},78413:{"value":"1324D","name":"EGYPTIAN HIEROGLYPH NU021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude4d"},78414:{"value":"1324E","name":"EGYPTIAN HIEROGLYPH NU022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude4e"},78415:{"value":"1324F","name":"EGYPTIAN HIEROGLYPH NU022A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude4f"},78416:{"value":"13250","name":"EGYPTIAN HIEROGLYPH O001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude50"},78417:{"value":"13251","name":"EGYPTIAN HIEROGLYPH O001A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude51"},78418:{"value":"13252","name":"EGYPTIAN HIEROGLYPH O002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude52"},78419:{"value":"13253","name":"EGYPTIAN HIEROGLYPH O003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude53"},78420:{"value":"13254","name":"EGYPTIAN HIEROGLYPH O004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude54"},78421:{"value":"13255","name":"EGYPTIAN HIEROGLYPH O005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude55"},78422:{"value":"13256","name":"EGYPTIAN HIEROGLYPH O005A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude56"},78423:{"value":"13257","name":"EGYPTIAN HIEROGLYPH O006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude57"},78424:{"value":"13258","name":"EGYPTIAN HIEROGLYPH O006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude58"},78425:{"value":"13259","name":"EGYPTIAN HIEROGLYPH O006B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude59"},78426:{"value":"1325A","name":"EGYPTIAN HIEROGLYPH O006C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude5a"},78427:{"value":"1325B","name":"EGYPTIAN HIEROGLYPH O006D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude5b"},78428:{"value":"1325C","name":"EGYPTIAN HIEROGLYPH O006E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude5c"},78429:{"value":"1325D","name":"EGYPTIAN HIEROGLYPH O006F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude5d"},78430:{"value":"1325E","name":"EGYPTIAN HIEROGLYPH O007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude5e"},78431:{"value":"1325F","name":"EGYPTIAN HIEROGLYPH O008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude5f"},78432:{"value":"13260","name":"EGYPTIAN HIEROGLYPH O009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude60"},78433:{"value":"13261","name":"EGYPTIAN HIEROGLYPH O010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude61"},78434:{"value":"13262","name":"EGYPTIAN HIEROGLYPH O010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude62"},78435:{"value":"13263","name":"EGYPTIAN HIEROGLYPH O010B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude63"},78436:{"value":"13264","name":"EGYPTIAN HIEROGLYPH O010C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude64"},78437:{"value":"13265","name":"EGYPTIAN HIEROGLYPH O011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude65"},78438:{"value":"13266","name":"EGYPTIAN HIEROGLYPH O012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude66"},78439:{"value":"13267","name":"EGYPTIAN HIEROGLYPH O013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude67"},78440:{"value":"13268","name":"EGYPTIAN HIEROGLYPH O014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude68"},78441:{"value":"13269","name":"EGYPTIAN HIEROGLYPH O015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude69"},78442:{"value":"1326A","name":"EGYPTIAN HIEROGLYPH O016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude6a"},78443:{"value":"1326B","name":"EGYPTIAN HIEROGLYPH O017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude6b"},78444:{"value":"1326C","name":"EGYPTIAN HIEROGLYPH O018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude6c"},78445:{"value":"1326D","name":"EGYPTIAN HIEROGLYPH O019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude6d"},78446:{"value":"1326E","name":"EGYPTIAN HIEROGLYPH O019A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude6e"},78447:{"value":"1326F","name":"EGYPTIAN HIEROGLYPH O020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude6f"},78448:{"value":"13270","name":"EGYPTIAN HIEROGLYPH O020A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude70"},78449:{"value":"13271","name":"EGYPTIAN HIEROGLYPH O021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude71"},78450:{"value":"13272","name":"EGYPTIAN HIEROGLYPH O022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude72"},78451:{"value":"13273","name":"EGYPTIAN HIEROGLYPH O023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude73"},78452:{"value":"13274","name":"EGYPTIAN HIEROGLYPH O024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude74"},78453:{"value":"13275","name":"EGYPTIAN HIEROGLYPH O024A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude75"},78454:{"value":"13276","name":"EGYPTIAN HIEROGLYPH O025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude76"},78455:{"value":"13277","name":"EGYPTIAN HIEROGLYPH O025A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude77"},78456:{"value":"13278","name":"EGYPTIAN HIEROGLYPH O026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude78"},78457:{"value":"13279","name":"EGYPTIAN HIEROGLYPH O027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude79"},78458:{"value":"1327A","name":"EGYPTIAN HIEROGLYPH O028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude7a"},78459:{"value":"1327B","name":"EGYPTIAN HIEROGLYPH O029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude7b"},78460:{"value":"1327C","name":"EGYPTIAN HIEROGLYPH O029A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude7c"},78461:{"value":"1327D","name":"EGYPTIAN HIEROGLYPH O030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude7d"},78462:{"value":"1327E","name":"EGYPTIAN HIEROGLYPH O030A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude7e"},78463:{"value":"1327F","name":"EGYPTIAN HIEROGLYPH O031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude7f"},78464:{"value":"13280","name":"EGYPTIAN HIEROGLYPH O032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude80"},78465:{"value":"13281","name":"EGYPTIAN HIEROGLYPH O033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude81"},78466:{"value":"13282","name":"EGYPTIAN HIEROGLYPH O033A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude82"},78467:{"value":"13283","name":"EGYPTIAN HIEROGLYPH O034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude83"},78468:{"value":"13284","name":"EGYPTIAN HIEROGLYPH O035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude84"},78469:{"value":"13285","name":"EGYPTIAN HIEROGLYPH O036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude85"},78470:{"value":"13286","name":"EGYPTIAN HIEROGLYPH O036A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude86"},78471:{"value":"13287","name":"EGYPTIAN HIEROGLYPH O036B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude87"},78472:{"value":"13288","name":"EGYPTIAN HIEROGLYPH O036C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude88"},78473:{"value":"13289","name":"EGYPTIAN HIEROGLYPH O036D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude89"},78474:{"value":"1328A","name":"EGYPTIAN HIEROGLYPH O037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude8a"},78475:{"value":"1328B","name":"EGYPTIAN HIEROGLYPH O038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude8b"},78476:{"value":"1328C","name":"EGYPTIAN HIEROGLYPH O039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude8c"},78477:{"value":"1328D","name":"EGYPTIAN HIEROGLYPH O040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude8d"},78478:{"value":"1328E","name":"EGYPTIAN HIEROGLYPH O041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude8e"},78479:{"value":"1328F","name":"EGYPTIAN HIEROGLYPH O042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude8f"},78480:{"value":"13290","name":"EGYPTIAN HIEROGLYPH O043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude90"},78481:{"value":"13291","name":"EGYPTIAN HIEROGLYPH O044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude91"},78482:{"value":"13292","name":"EGYPTIAN HIEROGLYPH O045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude92"},78483:{"value":"13293","name":"EGYPTIAN HIEROGLYPH O046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude93"},78484:{"value":"13294","name":"EGYPTIAN HIEROGLYPH O047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude94"},78485:{"value":"13295","name":"EGYPTIAN HIEROGLYPH O048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude95"},78486:{"value":"13296","name":"EGYPTIAN HIEROGLYPH O049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude96"},78487:{"value":"13297","name":"EGYPTIAN HIEROGLYPH O050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude97"},78488:{"value":"13298","name":"EGYPTIAN HIEROGLYPH O050A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude98"},78489:{"value":"13299","name":"EGYPTIAN HIEROGLYPH O050B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude99"},78490:{"value":"1329A","name":"EGYPTIAN HIEROGLYPH O051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude9a"},78491:{"value":"1329B","name":"EGYPTIAN HIEROGLYPH P001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude9b"},78492:{"value":"1329C","name":"EGYPTIAN HIEROGLYPH P001A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude9c"},78493:{"value":"1329D","name":"EGYPTIAN HIEROGLYPH P002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude9d"},78494:{"value":"1329E","name":"EGYPTIAN HIEROGLYPH P003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude9e"},78495:{"value":"1329F","name":"EGYPTIAN HIEROGLYPH P003A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\ude9f"},78496:{"value":"132A0","name":"EGYPTIAN HIEROGLYPH P004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea0"},78497:{"value":"132A1","name":"EGYPTIAN HIEROGLYPH P005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea1"},78498:{"value":"132A2","name":"EGYPTIAN HIEROGLYPH P006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea2"},78499:{"value":"132A3","name":"EGYPTIAN HIEROGLYPH P007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea3"},78500:{"value":"132A4","name":"EGYPTIAN HIEROGLYPH P008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea4"},78501:{"value":"132A5","name":"EGYPTIAN HIEROGLYPH P009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea5"},78502:{"value":"132A6","name":"EGYPTIAN HIEROGLYPH P010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea6"},78503:{"value":"132A7","name":"EGYPTIAN HIEROGLYPH P011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea7"},78504:{"value":"132A8","name":"EGYPTIAN HIEROGLYPH Q001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea8"},78505:{"value":"132A9","name":"EGYPTIAN HIEROGLYPH Q002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udea9"},78506:{"value":"132AA","name":"EGYPTIAN HIEROGLYPH Q003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeaa"},78507:{"value":"132AB","name":"EGYPTIAN HIEROGLYPH Q004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeab"},78508:{"value":"132AC","name":"EGYPTIAN HIEROGLYPH Q005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeac"},78509:{"value":"132AD","name":"EGYPTIAN HIEROGLYPH Q006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udead"},78510:{"value":"132AE","name":"EGYPTIAN HIEROGLYPH Q007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeae"},78511:{"value":"132AF","name":"EGYPTIAN HIEROGLYPH R001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeaf"},78512:{"value":"132B0","name":"EGYPTIAN HIEROGLYPH R002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb0"},78513:{"value":"132B1","name":"EGYPTIAN HIEROGLYPH R002A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb1"},78514:{"value":"132B2","name":"EGYPTIAN HIEROGLYPH R003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb2"},78515:{"value":"132B3","name":"EGYPTIAN HIEROGLYPH R003A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb3"},78516:{"value":"132B4","name":"EGYPTIAN HIEROGLYPH R003B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb4"},78517:{"value":"132B5","name":"EGYPTIAN HIEROGLYPH R004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb5"},78518:{"value":"132B6","name":"EGYPTIAN HIEROGLYPH R005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb6"},78519:{"value":"132B7","name":"EGYPTIAN HIEROGLYPH R006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb7"},78520:{"value":"132B8","name":"EGYPTIAN HIEROGLYPH R007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb8"},78521:{"value":"132B9","name":"EGYPTIAN HIEROGLYPH R008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeb9"},78522:{"value":"132BA","name":"EGYPTIAN HIEROGLYPH R009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeba"},78523:{"value":"132BB","name":"EGYPTIAN HIEROGLYPH R010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udebb"},78524:{"value":"132BC","name":"EGYPTIAN HIEROGLYPH R010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udebc"},78525:{"value":"132BD","name":"EGYPTIAN HIEROGLYPH R011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udebd"},78526:{"value":"132BE","name":"EGYPTIAN HIEROGLYPH R012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udebe"},78527:{"value":"132BF","name":"EGYPTIAN HIEROGLYPH R013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udebf"},78528:{"value":"132C0","name":"EGYPTIAN HIEROGLYPH R014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec0"},78529:{"value":"132C1","name":"EGYPTIAN HIEROGLYPH R015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec1"},78530:{"value":"132C2","name":"EGYPTIAN HIEROGLYPH R016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec2"},78531:{"value":"132C3","name":"EGYPTIAN HIEROGLYPH R016A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec3"},78532:{"value":"132C4","name":"EGYPTIAN HIEROGLYPH R017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec4"},78533:{"value":"132C5","name":"EGYPTIAN HIEROGLYPH R018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec5"},78534:{"value":"132C6","name":"EGYPTIAN HIEROGLYPH R019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec6"},78535:{"value":"132C7","name":"EGYPTIAN HIEROGLYPH R020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec7"},78536:{"value":"132C8","name":"EGYPTIAN HIEROGLYPH R021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec8"},78537:{"value":"132C9","name":"EGYPTIAN HIEROGLYPH R022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udec9"},78538:{"value":"132CA","name":"EGYPTIAN HIEROGLYPH R023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeca"},78539:{"value":"132CB","name":"EGYPTIAN HIEROGLYPH R024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udecb"},78540:{"value":"132CC","name":"EGYPTIAN HIEROGLYPH R025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udecc"},78541:{"value":"132CD","name":"EGYPTIAN HIEROGLYPH R026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udecd"},78542:{"value":"132CE","name":"EGYPTIAN HIEROGLYPH R027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udece"},78543:{"value":"132CF","name":"EGYPTIAN HIEROGLYPH R028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udecf"},78544:{"value":"132D0","name":"EGYPTIAN HIEROGLYPH R029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded0"},78545:{"value":"132D1","name":"EGYPTIAN HIEROGLYPH S001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded1"},78546:{"value":"132D2","name":"EGYPTIAN HIEROGLYPH S002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded2"},78547:{"value":"132D3","name":"EGYPTIAN HIEROGLYPH S002A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded3"},78548:{"value":"132D4","name":"EGYPTIAN HIEROGLYPH S003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded4"},78549:{"value":"132D5","name":"EGYPTIAN HIEROGLYPH S004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded5"},78550:{"value":"132D6","name":"EGYPTIAN HIEROGLYPH S005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded6"},78551:{"value":"132D7","name":"EGYPTIAN HIEROGLYPH S006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded7"},78552:{"value":"132D8","name":"EGYPTIAN HIEROGLYPH S006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded8"},78553:{"value":"132D9","name":"EGYPTIAN HIEROGLYPH S007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\uded9"},78554:{"value":"132DA","name":"EGYPTIAN HIEROGLYPH S008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeda"},78555:{"value":"132DB","name":"EGYPTIAN HIEROGLYPH S009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udedb"},78556:{"value":"132DC","name":"EGYPTIAN HIEROGLYPH S010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udedc"},78557:{"value":"132DD","name":"EGYPTIAN HIEROGLYPH S011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udedd"},78558:{"value":"132DE","name":"EGYPTIAN HIEROGLYPH S012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udede"},78559:{"value":"132DF","name":"EGYPTIAN HIEROGLYPH S013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udedf"},78560:{"value":"132E0","name":"EGYPTIAN HIEROGLYPH S014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee0"},78561:{"value":"132E1","name":"EGYPTIAN HIEROGLYPH S014A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee1"},78562:{"value":"132E2","name":"EGYPTIAN HIEROGLYPH S014B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee2"},78563:{"value":"132E3","name":"EGYPTIAN HIEROGLYPH S015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee3"},78564:{"value":"132E4","name":"EGYPTIAN HIEROGLYPH S016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee4"},78565:{"value":"132E5","name":"EGYPTIAN HIEROGLYPH S017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee5"},78566:{"value":"132E6","name":"EGYPTIAN HIEROGLYPH S017A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee6"},78567:{"value":"132E7","name":"EGYPTIAN HIEROGLYPH S018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee7"},78568:{"value":"132E8","name":"EGYPTIAN HIEROGLYPH S019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee8"},78569:{"value":"132E9","name":"EGYPTIAN HIEROGLYPH S020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udee9"},78570:{"value":"132EA","name":"EGYPTIAN HIEROGLYPH S021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeea"},78571:{"value":"132EB","name":"EGYPTIAN HIEROGLYPH S022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeeb"},78572:{"value":"132EC","name":"EGYPTIAN HIEROGLYPH S023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeec"},78573:{"value":"132ED","name":"EGYPTIAN HIEROGLYPH S024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeed"},78574:{"value":"132EE","name":"EGYPTIAN HIEROGLYPH S025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeee"},78575:{"value":"132EF","name":"EGYPTIAN HIEROGLYPH S026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeef"},78576:{"value":"132F0","name":"EGYPTIAN HIEROGLYPH S026A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef0"},78577:{"value":"132F1","name":"EGYPTIAN HIEROGLYPH S026B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef1"},78578:{"value":"132F2","name":"EGYPTIAN HIEROGLYPH S027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef2"},78579:{"value":"132F3","name":"EGYPTIAN HIEROGLYPH S028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef3"},78580:{"value":"132F4","name":"EGYPTIAN HIEROGLYPH S029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef4"},78581:{"value":"132F5","name":"EGYPTIAN HIEROGLYPH S030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef5"},78582:{"value":"132F6","name":"EGYPTIAN HIEROGLYPH S031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef6"},78583:{"value":"132F7","name":"EGYPTIAN HIEROGLYPH S032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef7"},78584:{"value":"132F8","name":"EGYPTIAN HIEROGLYPH S033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef8"},78585:{"value":"132F9","name":"EGYPTIAN HIEROGLYPH S034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udef9"},78586:{"value":"132FA","name":"EGYPTIAN HIEROGLYPH S035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udefa"},78587:{"value":"132FB","name":"EGYPTIAN HIEROGLYPH S035A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udefb"},78588:{"value":"132FC","name":"EGYPTIAN HIEROGLYPH S036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udefc"},78589:{"value":"132FD","name":"EGYPTIAN HIEROGLYPH S037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udefd"},78590:{"value":"132FE","name":"EGYPTIAN HIEROGLYPH S038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udefe"},78591:{"value":"132FF","name":"EGYPTIAN HIEROGLYPH S039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udeff"},78592:{"value":"13300","name":"EGYPTIAN HIEROGLYPH S040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf00"},78593:{"value":"13301","name":"EGYPTIAN HIEROGLYPH S041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf01"},78594:{"value":"13302","name":"EGYPTIAN HIEROGLYPH S042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf02"},78595:{"value":"13303","name":"EGYPTIAN HIEROGLYPH S043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf03"},78596:{"value":"13304","name":"EGYPTIAN HIEROGLYPH S044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf04"},78597:{"value":"13305","name":"EGYPTIAN HIEROGLYPH S045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf05"},78598:{"value":"13306","name":"EGYPTIAN HIEROGLYPH S046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf06"},78599:{"value":"13307","name":"EGYPTIAN HIEROGLYPH T001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf07"},78600:{"value":"13308","name":"EGYPTIAN HIEROGLYPH T002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf08"},78601:{"value":"13309","name":"EGYPTIAN HIEROGLYPH T003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf09"},78602:{"value":"1330A","name":"EGYPTIAN HIEROGLYPH T003A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf0a"},78603:{"value":"1330B","name":"EGYPTIAN HIEROGLYPH T004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf0b"},78604:{"value":"1330C","name":"EGYPTIAN HIEROGLYPH T005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf0c"},78605:{"value":"1330D","name":"EGYPTIAN HIEROGLYPH T006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf0d"},78606:{"value":"1330E","name":"EGYPTIAN HIEROGLYPH T007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf0e"},78607:{"value":"1330F","name":"EGYPTIAN HIEROGLYPH T007A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf0f"},78608:{"value":"13310","name":"EGYPTIAN HIEROGLYPH T008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf10"},78609:{"value":"13311","name":"EGYPTIAN HIEROGLYPH T008A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf11"},78610:{"value":"13312","name":"EGYPTIAN HIEROGLYPH T009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf12"},78611:{"value":"13313","name":"EGYPTIAN HIEROGLYPH T009A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf13"},78612:{"value":"13314","name":"EGYPTIAN HIEROGLYPH T010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf14"},78613:{"value":"13315","name":"EGYPTIAN HIEROGLYPH T011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf15"},78614:{"value":"13316","name":"EGYPTIAN HIEROGLYPH T011A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf16"},78615:{"value":"13317","name":"EGYPTIAN HIEROGLYPH T012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf17"},78616:{"value":"13318","name":"EGYPTIAN HIEROGLYPH T013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf18"},78617:{"value":"13319","name":"EGYPTIAN HIEROGLYPH T014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf19"},78618:{"value":"1331A","name":"EGYPTIAN HIEROGLYPH T015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf1a"},78619:{"value":"1331B","name":"EGYPTIAN HIEROGLYPH T016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf1b"},78620:{"value":"1331C","name":"EGYPTIAN HIEROGLYPH T016A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf1c"},78621:{"value":"1331D","name":"EGYPTIAN HIEROGLYPH T017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf1d"},78622:{"value":"1331E","name":"EGYPTIAN HIEROGLYPH T018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf1e"},78623:{"value":"1331F","name":"EGYPTIAN HIEROGLYPH T019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf1f"},78624:{"value":"13320","name":"EGYPTIAN HIEROGLYPH T020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf20"},78625:{"value":"13321","name":"EGYPTIAN HIEROGLYPH T021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf21"},78626:{"value":"13322","name":"EGYPTIAN HIEROGLYPH T022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf22"},78627:{"value":"13323","name":"EGYPTIAN HIEROGLYPH T023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf23"},78628:{"value":"13324","name":"EGYPTIAN HIEROGLYPH T024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf24"},78629:{"value":"13325","name":"EGYPTIAN HIEROGLYPH T025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf25"},78630:{"value":"13326","name":"EGYPTIAN HIEROGLYPH T026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf26"},78631:{"value":"13327","name":"EGYPTIAN HIEROGLYPH T027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf27"},78632:{"value":"13328","name":"EGYPTIAN HIEROGLYPH T028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf28"},78633:{"value":"13329","name":"EGYPTIAN HIEROGLYPH T029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf29"},78634:{"value":"1332A","name":"EGYPTIAN HIEROGLYPH T030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf2a"},78635:{"value":"1332B","name":"EGYPTIAN HIEROGLYPH T031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf2b"},78636:{"value":"1332C","name":"EGYPTIAN HIEROGLYPH T032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf2c"},78637:{"value":"1332D","name":"EGYPTIAN HIEROGLYPH T032A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf2d"},78638:{"value":"1332E","name":"EGYPTIAN HIEROGLYPH T033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf2e"},78639:{"value":"1332F","name":"EGYPTIAN HIEROGLYPH T033A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf2f"},78640:{"value":"13330","name":"EGYPTIAN HIEROGLYPH T034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf30"},78641:{"value":"13331","name":"EGYPTIAN HIEROGLYPH T035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf31"},78642:{"value":"13332","name":"EGYPTIAN HIEROGLYPH T036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf32"},78643:{"value":"13333","name":"EGYPTIAN HIEROGLYPH U001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf33"},78644:{"value":"13334","name":"EGYPTIAN HIEROGLYPH U002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf34"},78645:{"value":"13335","name":"EGYPTIAN HIEROGLYPH U003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf35"},78646:{"value":"13336","name":"EGYPTIAN HIEROGLYPH U004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf36"},78647:{"value":"13337","name":"EGYPTIAN HIEROGLYPH U005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf37"},78648:{"value":"13338","name":"EGYPTIAN HIEROGLYPH U006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf38"},78649:{"value":"13339","name":"EGYPTIAN HIEROGLYPH U006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf39"},78650:{"value":"1333A","name":"EGYPTIAN HIEROGLYPH U006B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf3a"},78651:{"value":"1333B","name":"EGYPTIAN HIEROGLYPH U007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf3b"},78652:{"value":"1333C","name":"EGYPTIAN HIEROGLYPH U008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf3c"},78653:{"value":"1333D","name":"EGYPTIAN HIEROGLYPH U009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf3d"},78654:{"value":"1333E","name":"EGYPTIAN HIEROGLYPH U010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf3e"},78655:{"value":"1333F","name":"EGYPTIAN HIEROGLYPH U011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf3f"},78656:{"value":"13340","name":"EGYPTIAN HIEROGLYPH U012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf40"},78657:{"value":"13341","name":"EGYPTIAN HIEROGLYPH U013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf41"},78658:{"value":"13342","name":"EGYPTIAN HIEROGLYPH U014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf42"},78659:{"value":"13343","name":"EGYPTIAN HIEROGLYPH U015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf43"},78660:{"value":"13344","name":"EGYPTIAN HIEROGLYPH U016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf44"},78661:{"value":"13345","name":"EGYPTIAN HIEROGLYPH U017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf45"},78662:{"value":"13346","name":"EGYPTIAN HIEROGLYPH U018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf46"},78663:{"value":"13347","name":"EGYPTIAN HIEROGLYPH U019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf47"},78664:{"value":"13348","name":"EGYPTIAN HIEROGLYPH U020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf48"},78665:{"value":"13349","name":"EGYPTIAN HIEROGLYPH U021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf49"},78666:{"value":"1334A","name":"EGYPTIAN HIEROGLYPH U022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf4a"},78667:{"value":"1334B","name":"EGYPTIAN HIEROGLYPH U023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf4b"},78668:{"value":"1334C","name":"EGYPTIAN HIEROGLYPH U023A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf4c"},78669:{"value":"1334D","name":"EGYPTIAN HIEROGLYPH U024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf4d"},78670:{"value":"1334E","name":"EGYPTIAN HIEROGLYPH U025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf4e"},78671:{"value":"1334F","name":"EGYPTIAN HIEROGLYPH U026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf4f"},78672:{"value":"13350","name":"EGYPTIAN HIEROGLYPH U027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf50"},78673:{"value":"13351","name":"EGYPTIAN HIEROGLYPH U028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf51"},78674:{"value":"13352","name":"EGYPTIAN HIEROGLYPH U029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf52"},78675:{"value":"13353","name":"EGYPTIAN HIEROGLYPH U029A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf53"},78676:{"value":"13354","name":"EGYPTIAN HIEROGLYPH U030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf54"},78677:{"value":"13355","name":"EGYPTIAN HIEROGLYPH U031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf55"},78678:{"value":"13356","name":"EGYPTIAN HIEROGLYPH U032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf56"},78679:{"value":"13357","name":"EGYPTIAN HIEROGLYPH U032A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf57"},78680:{"value":"13358","name":"EGYPTIAN HIEROGLYPH U033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf58"},78681:{"value":"13359","name":"EGYPTIAN HIEROGLYPH U034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf59"},78682:{"value":"1335A","name":"EGYPTIAN HIEROGLYPH U035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf5a"},78683:{"value":"1335B","name":"EGYPTIAN HIEROGLYPH U036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf5b"},78684:{"value":"1335C","name":"EGYPTIAN HIEROGLYPH U037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf5c"},78685:{"value":"1335D","name":"EGYPTIAN HIEROGLYPH U038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf5d"},78686:{"value":"1335E","name":"EGYPTIAN HIEROGLYPH U039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf5e"},78687:{"value":"1335F","name":"EGYPTIAN HIEROGLYPH U040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf5f"},78688:{"value":"13360","name":"EGYPTIAN HIEROGLYPH U041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf60"},78689:{"value":"13361","name":"EGYPTIAN HIEROGLYPH U042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf61"},78690:{"value":"13362","name":"EGYPTIAN HIEROGLYPH V001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf62"},78691:{"value":"13363","name":"EGYPTIAN HIEROGLYPH V001A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf63"},78692:{"value":"13364","name":"EGYPTIAN HIEROGLYPH V001B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf64"},78693:{"value":"13365","name":"EGYPTIAN HIEROGLYPH V001C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf65"},78694:{"value":"13366","name":"EGYPTIAN HIEROGLYPH V001D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf66"},78695:{"value":"13367","name":"EGYPTIAN HIEROGLYPH V001E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf67"},78696:{"value":"13368","name":"EGYPTIAN HIEROGLYPH V001F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf68"},78697:{"value":"13369","name":"EGYPTIAN HIEROGLYPH V001G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf69"},78698:{"value":"1336A","name":"EGYPTIAN HIEROGLYPH V001H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf6a"},78699:{"value":"1336B","name":"EGYPTIAN HIEROGLYPH V001I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf6b"},78700:{"value":"1336C","name":"EGYPTIAN HIEROGLYPH V002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf6c"},78701:{"value":"1336D","name":"EGYPTIAN HIEROGLYPH V002A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf6d"},78702:{"value":"1336E","name":"EGYPTIAN HIEROGLYPH V003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf6e"},78703:{"value":"1336F","name":"EGYPTIAN HIEROGLYPH V004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf6f"},78704:{"value":"13370","name":"EGYPTIAN HIEROGLYPH V005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf70"},78705:{"value":"13371","name":"EGYPTIAN HIEROGLYPH V006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf71"},78706:{"value":"13372","name":"EGYPTIAN HIEROGLYPH V007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf72"},78707:{"value":"13373","name":"EGYPTIAN HIEROGLYPH V007A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf73"},78708:{"value":"13374","name":"EGYPTIAN HIEROGLYPH V007B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf74"},78709:{"value":"13375","name":"EGYPTIAN HIEROGLYPH V008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf75"},78710:{"value":"13376","name":"EGYPTIAN HIEROGLYPH V009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf76"},78711:{"value":"13377","name":"EGYPTIAN HIEROGLYPH V010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf77"},78712:{"value":"13378","name":"EGYPTIAN HIEROGLYPH V011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf78"},78713:{"value":"13379","name":"EGYPTIAN HIEROGLYPH V011A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf79"},78714:{"value":"1337A","name":"EGYPTIAN HIEROGLYPH V011B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf7a"},78715:{"value":"1337B","name":"EGYPTIAN HIEROGLYPH V011C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf7b"},78716:{"value":"1337C","name":"EGYPTIAN HIEROGLYPH V012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf7c"},78717:{"value":"1337D","name":"EGYPTIAN HIEROGLYPH V012A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf7d"},78718:{"value":"1337E","name":"EGYPTIAN HIEROGLYPH V012B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf7e"},78719:{"value":"1337F","name":"EGYPTIAN HIEROGLYPH V013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf7f"},78720:{"value":"13380","name":"EGYPTIAN HIEROGLYPH V014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf80"},78721:{"value":"13381","name":"EGYPTIAN HIEROGLYPH V015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf81"},78722:{"value":"13382","name":"EGYPTIAN HIEROGLYPH V016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf82"},78723:{"value":"13383","name":"EGYPTIAN HIEROGLYPH V017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf83"},78724:{"value":"13384","name":"EGYPTIAN HIEROGLYPH V018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf84"},78725:{"value":"13385","name":"EGYPTIAN HIEROGLYPH V019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf85"},78726:{"value":"13386","name":"EGYPTIAN HIEROGLYPH V020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf86"},78727:{"value":"13387","name":"EGYPTIAN HIEROGLYPH V020A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf87"},78728:{"value":"13388","name":"EGYPTIAN HIEROGLYPH V020B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf88"},78729:{"value":"13389","name":"EGYPTIAN HIEROGLYPH V020C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf89"},78730:{"value":"1338A","name":"EGYPTIAN HIEROGLYPH V020D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf8a"},78731:{"value":"1338B","name":"EGYPTIAN HIEROGLYPH V020E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf8b"},78732:{"value":"1338C","name":"EGYPTIAN HIEROGLYPH V020F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf8c"},78733:{"value":"1338D","name":"EGYPTIAN HIEROGLYPH V020G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf8d"},78734:{"value":"1338E","name":"EGYPTIAN HIEROGLYPH V020H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf8e"},78735:{"value":"1338F","name":"EGYPTIAN HIEROGLYPH V020I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf8f"},78736:{"value":"13390","name":"EGYPTIAN HIEROGLYPH V020J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf90"},78737:{"value":"13391","name":"EGYPTIAN HIEROGLYPH V020K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf91"},78738:{"value":"13392","name":"EGYPTIAN HIEROGLYPH V020L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf92"},78739:{"value":"13393","name":"EGYPTIAN HIEROGLYPH V021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf93"},78740:{"value":"13394","name":"EGYPTIAN HIEROGLYPH V022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf94"},78741:{"value":"13395","name":"EGYPTIAN HIEROGLYPH V023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf95"},78742:{"value":"13396","name":"EGYPTIAN HIEROGLYPH V023A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf96"},78743:{"value":"13397","name":"EGYPTIAN HIEROGLYPH V024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf97"},78744:{"value":"13398","name":"EGYPTIAN HIEROGLYPH V025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf98"},78745:{"value":"13399","name":"EGYPTIAN HIEROGLYPH V026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf99"},78746:{"value":"1339A","name":"EGYPTIAN HIEROGLYPH V027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf9a"},78747:{"value":"1339B","name":"EGYPTIAN HIEROGLYPH V028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf9b"},78748:{"value":"1339C","name":"EGYPTIAN HIEROGLYPH V028A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf9c"},78749:{"value":"1339D","name":"EGYPTIAN HIEROGLYPH V029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf9d"},78750:{"value":"1339E","name":"EGYPTIAN HIEROGLYPH V029A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf9e"},78751:{"value":"1339F","name":"EGYPTIAN HIEROGLYPH V030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udf9f"},78752:{"value":"133A0","name":"EGYPTIAN HIEROGLYPH V030A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa0"},78753:{"value":"133A1","name":"EGYPTIAN HIEROGLYPH V031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa1"},78754:{"value":"133A2","name":"EGYPTIAN HIEROGLYPH V031A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa2"},78755:{"value":"133A3","name":"EGYPTIAN HIEROGLYPH V032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa3"},78756:{"value":"133A4","name":"EGYPTIAN HIEROGLYPH V033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa4"},78757:{"value":"133A5","name":"EGYPTIAN HIEROGLYPH V033A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa5"},78758:{"value":"133A6","name":"EGYPTIAN HIEROGLYPH V034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa6"},78759:{"value":"133A7","name":"EGYPTIAN HIEROGLYPH V035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa7"},78760:{"value":"133A8","name":"EGYPTIAN HIEROGLYPH V036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa8"},78761:{"value":"133A9","name":"EGYPTIAN HIEROGLYPH V037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfa9"},78762:{"value":"133AA","name":"EGYPTIAN HIEROGLYPH V037A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfaa"},78763:{"value":"133AB","name":"EGYPTIAN HIEROGLYPH V038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfab"},78764:{"value":"133AC","name":"EGYPTIAN HIEROGLYPH V039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfac"},78765:{"value":"133AD","name":"EGYPTIAN HIEROGLYPH V040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfad"},78766:{"value":"133AE","name":"EGYPTIAN HIEROGLYPH V040A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfae"},78767:{"value":"133AF","name":"EGYPTIAN HIEROGLYPH W001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfaf"},78768:{"value":"133B0","name":"EGYPTIAN HIEROGLYPH W002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb0"},78769:{"value":"133B1","name":"EGYPTIAN HIEROGLYPH W003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb1"},78770:{"value":"133B2","name":"EGYPTIAN HIEROGLYPH W003A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb2"},78771:{"value":"133B3","name":"EGYPTIAN HIEROGLYPH W004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb3"},78772:{"value":"133B4","name":"EGYPTIAN HIEROGLYPH W005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb4"},78773:{"value":"133B5","name":"EGYPTIAN HIEROGLYPH W006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb5"},78774:{"value":"133B6","name":"EGYPTIAN HIEROGLYPH W007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb6"},78775:{"value":"133B7","name":"EGYPTIAN HIEROGLYPH W008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb7"},78776:{"value":"133B8","name":"EGYPTIAN HIEROGLYPH W009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb8"},78777:{"value":"133B9","name":"EGYPTIAN HIEROGLYPH W009A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfb9"},78778:{"value":"133BA","name":"EGYPTIAN HIEROGLYPH W010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfba"},78779:{"value":"133BB","name":"EGYPTIAN HIEROGLYPH W010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfbb"},78780:{"value":"133BC","name":"EGYPTIAN HIEROGLYPH W011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfbc"},78781:{"value":"133BD","name":"EGYPTIAN HIEROGLYPH W012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfbd"},78782:{"value":"133BE","name":"EGYPTIAN HIEROGLYPH W013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfbe"},78783:{"value":"133BF","name":"EGYPTIAN HIEROGLYPH W014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfbf"},78784:{"value":"133C0","name":"EGYPTIAN HIEROGLYPH W014A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc0"},78785:{"value":"133C1","name":"EGYPTIAN HIEROGLYPH W015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc1"},78786:{"value":"133C2","name":"EGYPTIAN HIEROGLYPH W016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc2"},78787:{"value":"133C3","name":"EGYPTIAN HIEROGLYPH W017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc3"},78788:{"value":"133C4","name":"EGYPTIAN HIEROGLYPH W017A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc4"},78789:{"value":"133C5","name":"EGYPTIAN HIEROGLYPH W018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc5"},78790:{"value":"133C6","name":"EGYPTIAN HIEROGLYPH W018A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc6"},78791:{"value":"133C7","name":"EGYPTIAN HIEROGLYPH W019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc7"},78792:{"value":"133C8","name":"EGYPTIAN HIEROGLYPH W020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc8"},78793:{"value":"133C9","name":"EGYPTIAN HIEROGLYPH W021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfc9"},78794:{"value":"133CA","name":"EGYPTIAN HIEROGLYPH W022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfca"},78795:{"value":"133CB","name":"EGYPTIAN HIEROGLYPH W023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfcb"},78796:{"value":"133CC","name":"EGYPTIAN HIEROGLYPH W024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfcc"},78797:{"value":"133CD","name":"EGYPTIAN HIEROGLYPH W024A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfcd"},78798:{"value":"133CE","name":"EGYPTIAN HIEROGLYPH W025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfce"},78799:{"value":"133CF","name":"EGYPTIAN HIEROGLYPH X001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfcf"},78800:{"value":"133D0","name":"EGYPTIAN HIEROGLYPH X002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd0"},78801:{"value":"133D1","name":"EGYPTIAN HIEROGLYPH X003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd1"},78802:{"value":"133D2","name":"EGYPTIAN HIEROGLYPH X004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd2"},78803:{"value":"133D3","name":"EGYPTIAN HIEROGLYPH X004A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd3"},78804:{"value":"133D4","name":"EGYPTIAN HIEROGLYPH X004B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd4"},78805:{"value":"133D5","name":"EGYPTIAN HIEROGLYPH X005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd5"},78806:{"value":"133D6","name":"EGYPTIAN HIEROGLYPH X006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd6"},78807:{"value":"133D7","name":"EGYPTIAN HIEROGLYPH X006A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd7"},78808:{"value":"133D8","name":"EGYPTIAN HIEROGLYPH X007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd8"},78809:{"value":"133D9","name":"EGYPTIAN HIEROGLYPH X008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfd9"},78810:{"value":"133DA","name":"EGYPTIAN HIEROGLYPH X008A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfda"},78811:{"value":"133DB","name":"EGYPTIAN HIEROGLYPH Y001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfdb"},78812:{"value":"133DC","name":"EGYPTIAN HIEROGLYPH Y001A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfdc"},78813:{"value":"133DD","name":"EGYPTIAN HIEROGLYPH Y002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfdd"},78814:{"value":"133DE","name":"EGYPTIAN HIEROGLYPH Y003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfde"},78815:{"value":"133DF","name":"EGYPTIAN HIEROGLYPH Y004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfdf"},78816:{"value":"133E0","name":"EGYPTIAN HIEROGLYPH Y005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe0"},78817:{"value":"133E1","name":"EGYPTIAN HIEROGLYPH Y006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe1"},78818:{"value":"133E2","name":"EGYPTIAN HIEROGLYPH Y007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe2"},78819:{"value":"133E3","name":"EGYPTIAN HIEROGLYPH Y008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe3"},78820:{"value":"133E4","name":"EGYPTIAN HIEROGLYPH Z001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe4"},78821:{"value":"133E5","name":"EGYPTIAN HIEROGLYPH Z002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe5"},78822:{"value":"133E6","name":"EGYPTIAN HIEROGLYPH Z002A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe6"},78823:{"value":"133E7","name":"EGYPTIAN HIEROGLYPH Z002B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe7"},78824:{"value":"133E8","name":"EGYPTIAN HIEROGLYPH Z002C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe8"},78825:{"value":"133E9","name":"EGYPTIAN HIEROGLYPH Z002D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfe9"},78826:{"value":"133EA","name":"EGYPTIAN HIEROGLYPH Z003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfea"},78827:{"value":"133EB","name":"EGYPTIAN HIEROGLYPH Z003A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfeb"},78828:{"value":"133EC","name":"EGYPTIAN HIEROGLYPH Z003B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfec"},78829:{"value":"133ED","name":"EGYPTIAN HIEROGLYPH Z004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfed"},78830:{"value":"133EE","name":"EGYPTIAN HIEROGLYPH Z004A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfee"},78831:{"value":"133EF","name":"EGYPTIAN HIEROGLYPH Z005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfef"},78832:{"value":"133F0","name":"EGYPTIAN HIEROGLYPH Z005A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff0"},78833:{"value":"133F1","name":"EGYPTIAN HIEROGLYPH Z006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff1"},78834:{"value":"133F2","name":"EGYPTIAN HIEROGLYPH Z007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff2"},78835:{"value":"133F3","name":"EGYPTIAN HIEROGLYPH Z008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff3"},78836:{"value":"133F4","name":"EGYPTIAN HIEROGLYPH Z009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff4"},78837:{"value":"133F5","name":"EGYPTIAN HIEROGLYPH Z010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff5"},78838:{"value":"133F6","name":"EGYPTIAN HIEROGLYPH Z011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff6"},78839:{"value":"133F7","name":"EGYPTIAN HIEROGLYPH Z012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff7"},78840:{"value":"133F8","name":"EGYPTIAN HIEROGLYPH Z013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff8"},78841:{"value":"133F9","name":"EGYPTIAN HIEROGLYPH Z014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udff9"},78842:{"value":"133FA","name":"EGYPTIAN HIEROGLYPH Z015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udffa"},78843:{"value":"133FB","name":"EGYPTIAN HIEROGLYPH Z015A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udffb"},78844:{"value":"133FC","name":"EGYPTIAN HIEROGLYPH Z015B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udffc"},78845:{"value":"133FD","name":"EGYPTIAN HIEROGLYPH Z015C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udffd"},78846:{"value":"133FE","name":"EGYPTIAN HIEROGLYPH Z015D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udffe"},78847:{"value":"133FF","name":"EGYPTIAN HIEROGLYPH Z015E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80c\udfff"},78848:{"value":"13400","name":"EGYPTIAN HIEROGLYPH Z015F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc00"},78849:{"value":"13401","name":"EGYPTIAN HIEROGLYPH Z015G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc01"},78850:{"value":"13402","name":"EGYPTIAN HIEROGLYPH Z015H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc02"},78851:{"value":"13403","name":"EGYPTIAN HIEROGLYPH Z015I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc03"},78852:{"value":"13404","name":"EGYPTIAN HIEROGLYPH Z016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc04"},78853:{"value":"13405","name":"EGYPTIAN HIEROGLYPH Z016A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc05"},78854:{"value":"13406","name":"EGYPTIAN HIEROGLYPH Z016B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc06"},78855:{"value":"13407","name":"EGYPTIAN HIEROGLYPH Z016C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc07"},78856:{"value":"13408","name":"EGYPTIAN HIEROGLYPH Z016D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc08"},78857:{"value":"13409","name":"EGYPTIAN HIEROGLYPH Z016E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc09"},78858:{"value":"1340A","name":"EGYPTIAN HIEROGLYPH Z016F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc0a"},78859:{"value":"1340B","name":"EGYPTIAN HIEROGLYPH Z016G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc0b"},78860:{"value":"1340C","name":"EGYPTIAN HIEROGLYPH Z016H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc0c"},78861:{"value":"1340D","name":"EGYPTIAN HIEROGLYPH AA001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc0d"},78862:{"value":"1340E","name":"EGYPTIAN HIEROGLYPH AA002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc0e"},78863:{"value":"1340F","name":"EGYPTIAN HIEROGLYPH AA003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc0f"},78864:{"value":"13410","name":"EGYPTIAN HIEROGLYPH AA004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc10"},78865:{"value":"13411","name":"EGYPTIAN HIEROGLYPH AA005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc11"},78866:{"value":"13412","name":"EGYPTIAN HIEROGLYPH AA006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc12"},78867:{"value":"13413","name":"EGYPTIAN HIEROGLYPH AA007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc13"},78868:{"value":"13414","name":"EGYPTIAN HIEROGLYPH AA007A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc14"},78869:{"value":"13415","name":"EGYPTIAN HIEROGLYPH AA007B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc15"},78870:{"value":"13416","name":"EGYPTIAN HIEROGLYPH AA008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc16"},78871:{"value":"13417","name":"EGYPTIAN HIEROGLYPH AA009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc17"},78872:{"value":"13418","name":"EGYPTIAN HIEROGLYPH AA010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc18"},78873:{"value":"13419","name":"EGYPTIAN HIEROGLYPH AA011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc19"},78874:{"value":"1341A","name":"EGYPTIAN HIEROGLYPH AA012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc1a"},78875:{"value":"1341B","name":"EGYPTIAN HIEROGLYPH AA013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc1b"},78876:{"value":"1341C","name":"EGYPTIAN HIEROGLYPH AA014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc1c"},78877:{"value":"1341D","name":"EGYPTIAN HIEROGLYPH AA015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc1d"},78878:{"value":"1341E","name":"EGYPTIAN HIEROGLYPH AA016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc1e"},78879:{"value":"1341F","name":"EGYPTIAN HIEROGLYPH AA017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc1f"},78880:{"value":"13420","name":"EGYPTIAN HIEROGLYPH AA018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc20"},78881:{"value":"13421","name":"EGYPTIAN HIEROGLYPH AA019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc21"},78882:{"value":"13422","name":"EGYPTIAN HIEROGLYPH AA020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc22"},78883:{"value":"13423","name":"EGYPTIAN HIEROGLYPH AA021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc23"},78884:{"value":"13424","name":"EGYPTIAN HIEROGLYPH AA022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc24"},78885:{"value":"13425","name":"EGYPTIAN HIEROGLYPH AA023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc25"},78886:{"value":"13426","name":"EGYPTIAN HIEROGLYPH AA024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc26"},78887:{"value":"13427","name":"EGYPTIAN HIEROGLYPH AA025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc27"},78888:{"value":"13428","name":"EGYPTIAN HIEROGLYPH AA026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc28"},78889:{"value":"13429","name":"EGYPTIAN HIEROGLYPH AA027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc29"},78890:{"value":"1342A","name":"EGYPTIAN HIEROGLYPH AA028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc2a"},78891:{"value":"1342B","name":"EGYPTIAN HIEROGLYPH AA029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc2b"},78892:{"value":"1342C","name":"EGYPTIAN HIEROGLYPH AA030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc2c"},78893:{"value":"1342D","name":"EGYPTIAN HIEROGLYPH AA031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc2d"},78894:{"value":"1342E","name":"EGYPTIAN HIEROGLYPH AA032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80d\udc2e"},82944:{"value":"14400","name":"ANATOLIAN HIEROGLYPH A001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc00"},82945:{"value":"14401","name":"ANATOLIAN HIEROGLYPH A002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc01"},82946:{"value":"14402","name":"ANATOLIAN HIEROGLYPH A003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc02"},82947:{"value":"14403","name":"ANATOLIAN HIEROGLYPH A004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc03"},82948:{"value":"14404","name":"ANATOLIAN HIEROGLYPH A005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc04"},82949:{"value":"14405","name":"ANATOLIAN HIEROGLYPH A006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc05"},82950:{"value":"14406","name":"ANATOLIAN HIEROGLYPH A007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc06"},82951:{"value":"14407","name":"ANATOLIAN HIEROGLYPH A008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc07"},82952:{"value":"14408","name":"ANATOLIAN HIEROGLYPH A009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc08"},82953:{"value":"14409","name":"ANATOLIAN HIEROGLYPH A010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc09"},82954:{"value":"1440A","name":"ANATOLIAN HIEROGLYPH A010A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc0a"},82955:{"value":"1440B","name":"ANATOLIAN HIEROGLYPH A011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc0b"},82956:{"value":"1440C","name":"ANATOLIAN HIEROGLYPH A012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc0c"},82957:{"value":"1440D","name":"ANATOLIAN HIEROGLYPH A013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc0d"},82958:{"value":"1440E","name":"ANATOLIAN HIEROGLYPH A014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc0e"},82959:{"value":"1440F","name":"ANATOLIAN HIEROGLYPH A015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc0f"},82960:{"value":"14410","name":"ANATOLIAN HIEROGLYPH A016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc10"},82961:{"value":"14411","name":"ANATOLIAN HIEROGLYPH A017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc11"},82962:{"value":"14412","name":"ANATOLIAN HIEROGLYPH A018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc12"},82963:{"value":"14413","name":"ANATOLIAN HIEROGLYPH A019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc13"},82964:{"value":"14414","name":"ANATOLIAN HIEROGLYPH A020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc14"},82965:{"value":"14415","name":"ANATOLIAN HIEROGLYPH A021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc15"},82966:{"value":"14416","name":"ANATOLIAN HIEROGLYPH A022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc16"},82967:{"value":"14417","name":"ANATOLIAN HIEROGLYPH A023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc17"},82968:{"value":"14418","name":"ANATOLIAN HIEROGLYPH A024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc18"},82969:{"value":"14419","name":"ANATOLIAN HIEROGLYPH A025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc19"},82970:{"value":"1441A","name":"ANATOLIAN HIEROGLYPH A026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc1a"},82971:{"value":"1441B","name":"ANATOLIAN HIEROGLYPH A026A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc1b"},82972:{"value":"1441C","name":"ANATOLIAN HIEROGLYPH A027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc1c"},82973:{"value":"1441D","name":"ANATOLIAN HIEROGLYPH A028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc1d"},82974:{"value":"1441E","name":"ANATOLIAN HIEROGLYPH A029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc1e"},82975:{"value":"1441F","name":"ANATOLIAN HIEROGLYPH A030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc1f"},82976:{"value":"14420","name":"ANATOLIAN HIEROGLYPH A031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc20"},82977:{"value":"14421","name":"ANATOLIAN HIEROGLYPH A032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc21"},82978:{"value":"14422","name":"ANATOLIAN HIEROGLYPH A033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc22"},82979:{"value":"14423","name":"ANATOLIAN HIEROGLYPH A034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc23"},82980:{"value":"14424","name":"ANATOLIAN HIEROGLYPH A035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc24"},82981:{"value":"14425","name":"ANATOLIAN HIEROGLYPH A036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc25"},82982:{"value":"14426","name":"ANATOLIAN HIEROGLYPH A037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc26"},82983:{"value":"14427","name":"ANATOLIAN HIEROGLYPH A038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc27"},82984:{"value":"14428","name":"ANATOLIAN HIEROGLYPH A039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc28"},82985:{"value":"14429","name":"ANATOLIAN HIEROGLYPH A039A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc29"},82986:{"value":"1442A","name":"ANATOLIAN HIEROGLYPH A040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc2a"},82987:{"value":"1442B","name":"ANATOLIAN HIEROGLYPH A041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc2b"},82988:{"value":"1442C","name":"ANATOLIAN HIEROGLYPH A041A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc2c"},82989:{"value":"1442D","name":"ANATOLIAN HIEROGLYPH A042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc2d"},82990:{"value":"1442E","name":"ANATOLIAN HIEROGLYPH A043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc2e"},82991:{"value":"1442F","name":"ANATOLIAN HIEROGLYPH A044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc2f"},82992:{"value":"14430","name":"ANATOLIAN HIEROGLYPH A045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc30"},82993:{"value":"14431","name":"ANATOLIAN HIEROGLYPH A045A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc31"},82994:{"value":"14432","name":"ANATOLIAN HIEROGLYPH A046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc32"},82995:{"value":"14433","name":"ANATOLIAN HIEROGLYPH A046A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc33"},82996:{"value":"14434","name":"ANATOLIAN HIEROGLYPH A046B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc34"},82997:{"value":"14435","name":"ANATOLIAN HIEROGLYPH A047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc35"},82998:{"value":"14436","name":"ANATOLIAN HIEROGLYPH A048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc36"},82999:{"value":"14437","name":"ANATOLIAN HIEROGLYPH A049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc37"},83000:{"value":"14438","name":"ANATOLIAN HIEROGLYPH A050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc38"},83001:{"value":"14439","name":"ANATOLIAN HIEROGLYPH A051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc39"},83002:{"value":"1443A","name":"ANATOLIAN HIEROGLYPH A052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc3a"},83003:{"value":"1443B","name":"ANATOLIAN HIEROGLYPH A053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc3b"},83004:{"value":"1443C","name":"ANATOLIAN HIEROGLYPH A054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc3c"},83005:{"value":"1443D","name":"ANATOLIAN HIEROGLYPH A055","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc3d"},83006:{"value":"1443E","name":"ANATOLIAN HIEROGLYPH A056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc3e"},83007:{"value":"1443F","name":"ANATOLIAN HIEROGLYPH A057","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc3f"},83008:{"value":"14440","name":"ANATOLIAN HIEROGLYPH A058","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc40"},83009:{"value":"14441","name":"ANATOLIAN HIEROGLYPH A059","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc41"},83010:{"value":"14442","name":"ANATOLIAN HIEROGLYPH A060","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc42"},83011:{"value":"14443","name":"ANATOLIAN HIEROGLYPH A061","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc43"},83012:{"value":"14444","name":"ANATOLIAN HIEROGLYPH A062","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc44"},83013:{"value":"14445","name":"ANATOLIAN HIEROGLYPH A063","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc45"},83014:{"value":"14446","name":"ANATOLIAN HIEROGLYPH A064","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc46"},83015:{"value":"14447","name":"ANATOLIAN HIEROGLYPH A065","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc47"},83016:{"value":"14448","name":"ANATOLIAN HIEROGLYPH A066","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc48"},83017:{"value":"14449","name":"ANATOLIAN HIEROGLYPH A066A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc49"},83018:{"value":"1444A","name":"ANATOLIAN HIEROGLYPH A066B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc4a"},83019:{"value":"1444B","name":"ANATOLIAN HIEROGLYPH A066C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc4b"},83020:{"value":"1444C","name":"ANATOLIAN HIEROGLYPH A067","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc4c"},83021:{"value":"1444D","name":"ANATOLIAN HIEROGLYPH A068","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc4d"},83022:{"value":"1444E","name":"ANATOLIAN HIEROGLYPH A069","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc4e"},83023:{"value":"1444F","name":"ANATOLIAN HIEROGLYPH A070","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc4f"},83024:{"value":"14450","name":"ANATOLIAN HIEROGLYPH A071","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc50"},83025:{"value":"14451","name":"ANATOLIAN HIEROGLYPH A072","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc51"},83026:{"value":"14452","name":"ANATOLIAN HIEROGLYPH A073","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc52"},83027:{"value":"14453","name":"ANATOLIAN HIEROGLYPH A074","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc53"},83028:{"value":"14454","name":"ANATOLIAN HIEROGLYPH A075","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc54"},83029:{"value":"14455","name":"ANATOLIAN HIEROGLYPH A076","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc55"},83030:{"value":"14456","name":"ANATOLIAN HIEROGLYPH A077","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc56"},83031:{"value":"14457","name":"ANATOLIAN HIEROGLYPH A078","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc57"},83032:{"value":"14458","name":"ANATOLIAN HIEROGLYPH A079","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc58"},83033:{"value":"14459","name":"ANATOLIAN HIEROGLYPH A080","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc59"},83034:{"value":"1445A","name":"ANATOLIAN HIEROGLYPH A081","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc5a"},83035:{"value":"1445B","name":"ANATOLIAN HIEROGLYPH A082","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc5b"},83036:{"value":"1445C","name":"ANATOLIAN HIEROGLYPH A083","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc5c"},83037:{"value":"1445D","name":"ANATOLIAN HIEROGLYPH A084","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc5d"},83038:{"value":"1445E","name":"ANATOLIAN HIEROGLYPH A085","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc5e"},83039:{"value":"1445F","name":"ANATOLIAN HIEROGLYPH A086","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc5f"},83040:{"value":"14460","name":"ANATOLIAN HIEROGLYPH A087","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc60"},83041:{"value":"14461","name":"ANATOLIAN HIEROGLYPH A088","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc61"},83042:{"value":"14462","name":"ANATOLIAN HIEROGLYPH A089","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc62"},83043:{"value":"14463","name":"ANATOLIAN HIEROGLYPH A090","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc63"},83044:{"value":"14464","name":"ANATOLIAN HIEROGLYPH A091","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc64"},83045:{"value":"14465","name":"ANATOLIAN HIEROGLYPH A092","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc65"},83046:{"value":"14466","name":"ANATOLIAN HIEROGLYPH A093","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc66"},83047:{"value":"14467","name":"ANATOLIAN HIEROGLYPH A094","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc67"},83048:{"value":"14468","name":"ANATOLIAN HIEROGLYPH A095","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc68"},83049:{"value":"14469","name":"ANATOLIAN HIEROGLYPH A096","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc69"},83050:{"value":"1446A","name":"ANATOLIAN HIEROGLYPH A097","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc6a"},83051:{"value":"1446B","name":"ANATOLIAN HIEROGLYPH A097A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc6b"},83052:{"value":"1446C","name":"ANATOLIAN HIEROGLYPH A098","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc6c"},83053:{"value":"1446D","name":"ANATOLIAN HIEROGLYPH A098A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc6d"},83054:{"value":"1446E","name":"ANATOLIAN HIEROGLYPH A099","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc6e"},83055:{"value":"1446F","name":"ANATOLIAN HIEROGLYPH A100","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc6f"},83056:{"value":"14470","name":"ANATOLIAN HIEROGLYPH A100A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc70"},83057:{"value":"14471","name":"ANATOLIAN HIEROGLYPH A101","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc71"},83058:{"value":"14472","name":"ANATOLIAN HIEROGLYPH A101A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc72"},83059:{"value":"14473","name":"ANATOLIAN HIEROGLYPH A102","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc73"},83060:{"value":"14474","name":"ANATOLIAN HIEROGLYPH A102A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc74"},83061:{"value":"14475","name":"ANATOLIAN HIEROGLYPH A103","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc75"},83062:{"value":"14476","name":"ANATOLIAN HIEROGLYPH A104","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc76"},83063:{"value":"14477","name":"ANATOLIAN HIEROGLYPH A104A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc77"},83064:{"value":"14478","name":"ANATOLIAN HIEROGLYPH A104B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc78"},83065:{"value":"14479","name":"ANATOLIAN HIEROGLYPH A104C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc79"},83066:{"value":"1447A","name":"ANATOLIAN HIEROGLYPH A105","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc7a"},83067:{"value":"1447B","name":"ANATOLIAN HIEROGLYPH A105A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc7b"},83068:{"value":"1447C","name":"ANATOLIAN HIEROGLYPH A105B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc7c"},83069:{"value":"1447D","name":"ANATOLIAN HIEROGLYPH A106","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc7d"},83070:{"value":"1447E","name":"ANATOLIAN HIEROGLYPH A107","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc7e"},83071:{"value":"1447F","name":"ANATOLIAN HIEROGLYPH A107A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc7f"},83072:{"value":"14480","name":"ANATOLIAN HIEROGLYPH A107B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc80"},83073:{"value":"14481","name":"ANATOLIAN HIEROGLYPH A107C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc81"},83074:{"value":"14482","name":"ANATOLIAN HIEROGLYPH A108","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc82"},83075:{"value":"14483","name":"ANATOLIAN HIEROGLYPH A109","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc83"},83076:{"value":"14484","name":"ANATOLIAN HIEROGLYPH A110","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc84"},83077:{"value":"14485","name":"ANATOLIAN HIEROGLYPH A110A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc85"},83078:{"value":"14486","name":"ANATOLIAN HIEROGLYPH A110B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc86"},83079:{"value":"14487","name":"ANATOLIAN HIEROGLYPH A111","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc87"},83080:{"value":"14488","name":"ANATOLIAN HIEROGLYPH A112","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc88"},83081:{"value":"14489","name":"ANATOLIAN HIEROGLYPH A113","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc89"},83082:{"value":"1448A","name":"ANATOLIAN HIEROGLYPH A114","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc8a"},83083:{"value":"1448B","name":"ANATOLIAN HIEROGLYPH A115","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc8b"},83084:{"value":"1448C","name":"ANATOLIAN HIEROGLYPH A115A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc8c"},83085:{"value":"1448D","name":"ANATOLIAN HIEROGLYPH A116","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc8d"},83086:{"value":"1448E","name":"ANATOLIAN HIEROGLYPH A117","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc8e"},83087:{"value":"1448F","name":"ANATOLIAN HIEROGLYPH A118","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc8f"},83088:{"value":"14490","name":"ANATOLIAN HIEROGLYPH A119","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc90"},83089:{"value":"14491","name":"ANATOLIAN HIEROGLYPH A120","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc91"},83090:{"value":"14492","name":"ANATOLIAN HIEROGLYPH A121","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc92"},83091:{"value":"14493","name":"ANATOLIAN HIEROGLYPH A122","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc93"},83092:{"value":"14494","name":"ANATOLIAN HIEROGLYPH A123","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc94"},83093:{"value":"14495","name":"ANATOLIAN HIEROGLYPH A124","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc95"},83094:{"value":"14496","name":"ANATOLIAN HIEROGLYPH A125","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc96"},83095:{"value":"14497","name":"ANATOLIAN HIEROGLYPH A125A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc97"},83096:{"value":"14498","name":"ANATOLIAN HIEROGLYPH A126","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc98"},83097:{"value":"14499","name":"ANATOLIAN HIEROGLYPH A127","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc99"},83098:{"value":"1449A","name":"ANATOLIAN HIEROGLYPH A128","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc9a"},83099:{"value":"1449B","name":"ANATOLIAN HIEROGLYPH A129","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc9b"},83100:{"value":"1449C","name":"ANATOLIAN HIEROGLYPH A130","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc9c"},83101:{"value":"1449D","name":"ANATOLIAN HIEROGLYPH A131","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc9d"},83102:{"value":"1449E","name":"ANATOLIAN HIEROGLYPH A132","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc9e"},83103:{"value":"1449F","name":"ANATOLIAN HIEROGLYPH A133","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udc9f"},83104:{"value":"144A0","name":"ANATOLIAN HIEROGLYPH A134","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca0"},83105:{"value":"144A1","name":"ANATOLIAN HIEROGLYPH A135","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca1"},83106:{"value":"144A2","name":"ANATOLIAN HIEROGLYPH A135A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca2"},83107:{"value":"144A3","name":"ANATOLIAN HIEROGLYPH A136","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca3"},83108:{"value":"144A4","name":"ANATOLIAN HIEROGLYPH A137","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca4"},83109:{"value":"144A5","name":"ANATOLIAN HIEROGLYPH A138","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca5"},83110:{"value":"144A6","name":"ANATOLIAN HIEROGLYPH A139","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca6"},83111:{"value":"144A7","name":"ANATOLIAN HIEROGLYPH A140","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca7"},83112:{"value":"144A8","name":"ANATOLIAN HIEROGLYPH A141","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca8"},83113:{"value":"144A9","name":"ANATOLIAN HIEROGLYPH A142","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udca9"},83114:{"value":"144AA","name":"ANATOLIAN HIEROGLYPH A143","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcaa"},83115:{"value":"144AB","name":"ANATOLIAN HIEROGLYPH A144","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcab"},83116:{"value":"144AC","name":"ANATOLIAN HIEROGLYPH A145","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcac"},83117:{"value":"144AD","name":"ANATOLIAN HIEROGLYPH A146","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcad"},83118:{"value":"144AE","name":"ANATOLIAN HIEROGLYPH A147","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcae"},83119:{"value":"144AF","name":"ANATOLIAN HIEROGLYPH A148","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcaf"},83120:{"value":"144B0","name":"ANATOLIAN HIEROGLYPH A149","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb0"},83121:{"value":"144B1","name":"ANATOLIAN HIEROGLYPH A150","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb1"},83122:{"value":"144B2","name":"ANATOLIAN HIEROGLYPH A151","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb2"},83123:{"value":"144B3","name":"ANATOLIAN HIEROGLYPH A152","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb3"},83124:{"value":"144B4","name":"ANATOLIAN HIEROGLYPH A153","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb4"},83125:{"value":"144B5","name":"ANATOLIAN HIEROGLYPH A154","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb5"},83126:{"value":"144B6","name":"ANATOLIAN HIEROGLYPH A155","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb6"},83127:{"value":"144B7","name":"ANATOLIAN HIEROGLYPH A156","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb7"},83128:{"value":"144B8","name":"ANATOLIAN HIEROGLYPH A157","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb8"},83129:{"value":"144B9","name":"ANATOLIAN HIEROGLYPH A158","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcb9"},83130:{"value":"144BA","name":"ANATOLIAN HIEROGLYPH A159","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcba"},83131:{"value":"144BB","name":"ANATOLIAN HIEROGLYPH A160","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcbb"},83132:{"value":"144BC","name":"ANATOLIAN HIEROGLYPH A161","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcbc"},83133:{"value":"144BD","name":"ANATOLIAN HIEROGLYPH A162","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcbd"},83134:{"value":"144BE","name":"ANATOLIAN HIEROGLYPH A163","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcbe"},83135:{"value":"144BF","name":"ANATOLIAN HIEROGLYPH A164","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcbf"},83136:{"value":"144C0","name":"ANATOLIAN HIEROGLYPH A165","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc0"},83137:{"value":"144C1","name":"ANATOLIAN HIEROGLYPH A166","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc1"},83138:{"value":"144C2","name":"ANATOLIAN HIEROGLYPH A167","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc2"},83139:{"value":"144C3","name":"ANATOLIAN HIEROGLYPH A168","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc3"},83140:{"value":"144C4","name":"ANATOLIAN HIEROGLYPH A169","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc4"},83141:{"value":"144C5","name":"ANATOLIAN HIEROGLYPH A170","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc5"},83142:{"value":"144C6","name":"ANATOLIAN HIEROGLYPH A171","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc6"},83143:{"value":"144C7","name":"ANATOLIAN HIEROGLYPH A172","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc7"},83144:{"value":"144C8","name":"ANATOLIAN HIEROGLYPH A173","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc8"},83145:{"value":"144C9","name":"ANATOLIAN HIEROGLYPH A174","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcc9"},83146:{"value":"144CA","name":"ANATOLIAN HIEROGLYPH A175","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcca"},83147:{"value":"144CB","name":"ANATOLIAN HIEROGLYPH A176","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udccb"},83148:{"value":"144CC","name":"ANATOLIAN HIEROGLYPH A177","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udccc"},83149:{"value":"144CD","name":"ANATOLIAN HIEROGLYPH A178","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udccd"},83150:{"value":"144CE","name":"ANATOLIAN HIEROGLYPH A179","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcce"},83151:{"value":"144CF","name":"ANATOLIAN HIEROGLYPH A180","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udccf"},83152:{"value":"144D0","name":"ANATOLIAN HIEROGLYPH A181","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd0"},83153:{"value":"144D1","name":"ANATOLIAN HIEROGLYPH A182","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd1"},83154:{"value":"144D2","name":"ANATOLIAN HIEROGLYPH A183","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd2"},83155:{"value":"144D3","name":"ANATOLIAN HIEROGLYPH A184","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd3"},83156:{"value":"144D4","name":"ANATOLIAN HIEROGLYPH A185","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd4"},83157:{"value":"144D5","name":"ANATOLIAN HIEROGLYPH A186","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd5"},83158:{"value":"144D6","name":"ANATOLIAN HIEROGLYPH A187","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd6"},83159:{"value":"144D7","name":"ANATOLIAN HIEROGLYPH A188","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd7"},83160:{"value":"144D8","name":"ANATOLIAN HIEROGLYPH A189","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd8"},83161:{"value":"144D9","name":"ANATOLIAN HIEROGLYPH A190","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcd9"},83162:{"value":"144DA","name":"ANATOLIAN HIEROGLYPH A191","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcda"},83163:{"value":"144DB","name":"ANATOLIAN HIEROGLYPH A192","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcdb"},83164:{"value":"144DC","name":"ANATOLIAN HIEROGLYPH A193","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcdc"},83165:{"value":"144DD","name":"ANATOLIAN HIEROGLYPH A194","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcdd"},83166:{"value":"144DE","name":"ANATOLIAN HIEROGLYPH A195","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcde"},83167:{"value":"144DF","name":"ANATOLIAN HIEROGLYPH A196","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcdf"},83168:{"value":"144E0","name":"ANATOLIAN HIEROGLYPH A197","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce0"},83169:{"value":"144E1","name":"ANATOLIAN HIEROGLYPH A198","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce1"},83170:{"value":"144E2","name":"ANATOLIAN HIEROGLYPH A199","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce2"},83171:{"value":"144E3","name":"ANATOLIAN HIEROGLYPH A200","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce3"},83172:{"value":"144E4","name":"ANATOLIAN HIEROGLYPH A201","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce4"},83173:{"value":"144E5","name":"ANATOLIAN HIEROGLYPH A202","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce5"},83174:{"value":"144E6","name":"ANATOLIAN HIEROGLYPH A202A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce6"},83175:{"value":"144E7","name":"ANATOLIAN HIEROGLYPH A202B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce7"},83176:{"value":"144E8","name":"ANATOLIAN HIEROGLYPH A203","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce8"},83177:{"value":"144E9","name":"ANATOLIAN HIEROGLYPH A204","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udce9"},83178:{"value":"144EA","name":"ANATOLIAN HIEROGLYPH A205","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcea"},83179:{"value":"144EB","name":"ANATOLIAN HIEROGLYPH A206","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udceb"},83180:{"value":"144EC","name":"ANATOLIAN HIEROGLYPH A207","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcec"},83181:{"value":"144ED","name":"ANATOLIAN HIEROGLYPH A207A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udced"},83182:{"value":"144EE","name":"ANATOLIAN HIEROGLYPH A208","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcee"},83183:{"value":"144EF","name":"ANATOLIAN HIEROGLYPH A209","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcef"},83184:{"value":"144F0","name":"ANATOLIAN HIEROGLYPH A209A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf0"},83185:{"value":"144F1","name":"ANATOLIAN HIEROGLYPH A210","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf1"},83186:{"value":"144F2","name":"ANATOLIAN HIEROGLYPH A211","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf2"},83187:{"value":"144F3","name":"ANATOLIAN HIEROGLYPH A212","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf3"},83188:{"value":"144F4","name":"ANATOLIAN HIEROGLYPH A213","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf4"},83189:{"value":"144F5","name":"ANATOLIAN HIEROGLYPH A214","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf5"},83190:{"value":"144F6","name":"ANATOLIAN HIEROGLYPH A215","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf6"},83191:{"value":"144F7","name":"ANATOLIAN HIEROGLYPH A215A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf7"},83192:{"value":"144F8","name":"ANATOLIAN HIEROGLYPH A216","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf8"},83193:{"value":"144F9","name":"ANATOLIAN HIEROGLYPH A216A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcf9"},83194:{"value":"144FA","name":"ANATOLIAN HIEROGLYPH A217","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcfa"},83195:{"value":"144FB","name":"ANATOLIAN HIEROGLYPH A218","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcfb"},83196:{"value":"144FC","name":"ANATOLIAN HIEROGLYPH A219","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcfc"},83197:{"value":"144FD","name":"ANATOLIAN HIEROGLYPH A220","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcfd"},83198:{"value":"144FE","name":"ANATOLIAN HIEROGLYPH A221","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcfe"},83199:{"value":"144FF","name":"ANATOLIAN HIEROGLYPH A222","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udcff"},83200:{"value":"14500","name":"ANATOLIAN HIEROGLYPH A223","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd00"},83201:{"value":"14501","name":"ANATOLIAN HIEROGLYPH A224","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd01"},83202:{"value":"14502","name":"ANATOLIAN HIEROGLYPH A225","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd02"},83203:{"value":"14503","name":"ANATOLIAN HIEROGLYPH A226","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd03"},83204:{"value":"14504","name":"ANATOLIAN HIEROGLYPH A227","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd04"},83205:{"value":"14505","name":"ANATOLIAN HIEROGLYPH A227A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd05"},83206:{"value":"14506","name":"ANATOLIAN HIEROGLYPH A228","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd06"},83207:{"value":"14507","name":"ANATOLIAN HIEROGLYPH A229","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd07"},83208:{"value":"14508","name":"ANATOLIAN HIEROGLYPH A230","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd08"},83209:{"value":"14509","name":"ANATOLIAN HIEROGLYPH A231","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd09"},83210:{"value":"1450A","name":"ANATOLIAN HIEROGLYPH A232","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd0a"},83211:{"value":"1450B","name":"ANATOLIAN HIEROGLYPH A233","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd0b"},83212:{"value":"1450C","name":"ANATOLIAN HIEROGLYPH A234","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd0c"},83213:{"value":"1450D","name":"ANATOLIAN HIEROGLYPH A235","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd0d"},83214:{"value":"1450E","name":"ANATOLIAN HIEROGLYPH A236","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd0e"},83215:{"value":"1450F","name":"ANATOLIAN HIEROGLYPH A237","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd0f"},83216:{"value":"14510","name":"ANATOLIAN HIEROGLYPH A238","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd10"},83217:{"value":"14511","name":"ANATOLIAN HIEROGLYPH A239","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd11"},83218:{"value":"14512","name":"ANATOLIAN HIEROGLYPH A240","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd12"},83219:{"value":"14513","name":"ANATOLIAN HIEROGLYPH A241","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd13"},83220:{"value":"14514","name":"ANATOLIAN HIEROGLYPH A242","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd14"},83221:{"value":"14515","name":"ANATOLIAN HIEROGLYPH A243","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd15"},83222:{"value":"14516","name":"ANATOLIAN HIEROGLYPH A244","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd16"},83223:{"value":"14517","name":"ANATOLIAN HIEROGLYPH A245","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd17"},83224:{"value":"14518","name":"ANATOLIAN HIEROGLYPH A246","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd18"},83225:{"value":"14519","name":"ANATOLIAN HIEROGLYPH A247","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd19"},83226:{"value":"1451A","name":"ANATOLIAN HIEROGLYPH A248","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd1a"},83227:{"value":"1451B","name":"ANATOLIAN HIEROGLYPH A249","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd1b"},83228:{"value":"1451C","name":"ANATOLIAN HIEROGLYPH A250","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd1c"},83229:{"value":"1451D","name":"ANATOLIAN HIEROGLYPH A251","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd1d"},83230:{"value":"1451E","name":"ANATOLIAN HIEROGLYPH A252","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd1e"},83231:{"value":"1451F","name":"ANATOLIAN HIEROGLYPH A253","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd1f"},83232:{"value":"14520","name":"ANATOLIAN HIEROGLYPH A254","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd20"},83233:{"value":"14521","name":"ANATOLIAN HIEROGLYPH A255","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd21"},83234:{"value":"14522","name":"ANATOLIAN HIEROGLYPH A256","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd22"},83235:{"value":"14523","name":"ANATOLIAN HIEROGLYPH A257","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd23"},83236:{"value":"14524","name":"ANATOLIAN HIEROGLYPH A258","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd24"},83237:{"value":"14525","name":"ANATOLIAN HIEROGLYPH A259","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd25"},83238:{"value":"14526","name":"ANATOLIAN HIEROGLYPH A260","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd26"},83239:{"value":"14527","name":"ANATOLIAN HIEROGLYPH A261","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd27"},83240:{"value":"14528","name":"ANATOLIAN HIEROGLYPH A262","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd28"},83241:{"value":"14529","name":"ANATOLIAN HIEROGLYPH A263","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd29"},83242:{"value":"1452A","name":"ANATOLIAN HIEROGLYPH A264","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd2a"},83243:{"value":"1452B","name":"ANATOLIAN HIEROGLYPH A265","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd2b"},83244:{"value":"1452C","name":"ANATOLIAN HIEROGLYPH A266","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd2c"},83245:{"value":"1452D","name":"ANATOLIAN HIEROGLYPH A267","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd2d"},83246:{"value":"1452E","name":"ANATOLIAN HIEROGLYPH A267A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd2e"},83247:{"value":"1452F","name":"ANATOLIAN HIEROGLYPH A268","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd2f"},83248:{"value":"14530","name":"ANATOLIAN HIEROGLYPH A269","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd30"},83249:{"value":"14531","name":"ANATOLIAN HIEROGLYPH A270","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd31"},83250:{"value":"14532","name":"ANATOLIAN HIEROGLYPH A271","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd32"},83251:{"value":"14533","name":"ANATOLIAN HIEROGLYPH A272","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd33"},83252:{"value":"14534","name":"ANATOLIAN HIEROGLYPH A273","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd34"},83253:{"value":"14535","name":"ANATOLIAN HIEROGLYPH A274","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd35"},83254:{"value":"14536","name":"ANATOLIAN HIEROGLYPH A275","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd36"},83255:{"value":"14537","name":"ANATOLIAN HIEROGLYPH A276","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd37"},83256:{"value":"14538","name":"ANATOLIAN HIEROGLYPH A277","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd38"},83257:{"value":"14539","name":"ANATOLIAN HIEROGLYPH A278","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd39"},83258:{"value":"1453A","name":"ANATOLIAN HIEROGLYPH A279","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd3a"},83259:{"value":"1453B","name":"ANATOLIAN HIEROGLYPH A280","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd3b"},83260:{"value":"1453C","name":"ANATOLIAN HIEROGLYPH A281","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd3c"},83261:{"value":"1453D","name":"ANATOLIAN HIEROGLYPH A282","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd3d"},83262:{"value":"1453E","name":"ANATOLIAN HIEROGLYPH A283","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd3e"},83263:{"value":"1453F","name":"ANATOLIAN HIEROGLYPH A284","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd3f"},83264:{"value":"14540","name":"ANATOLIAN HIEROGLYPH A285","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd40"},83265:{"value":"14541","name":"ANATOLIAN HIEROGLYPH A286","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd41"},83266:{"value":"14542","name":"ANATOLIAN HIEROGLYPH A287","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd42"},83267:{"value":"14543","name":"ANATOLIAN HIEROGLYPH A288","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd43"},83268:{"value":"14544","name":"ANATOLIAN HIEROGLYPH A289","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd44"},83269:{"value":"14545","name":"ANATOLIAN HIEROGLYPH A289A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd45"},83270:{"value":"14546","name":"ANATOLIAN HIEROGLYPH A290","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd46"},83271:{"value":"14547","name":"ANATOLIAN HIEROGLYPH A291","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd47"},83272:{"value":"14548","name":"ANATOLIAN HIEROGLYPH A292","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd48"},83273:{"value":"14549","name":"ANATOLIAN HIEROGLYPH A293","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd49"},83274:{"value":"1454A","name":"ANATOLIAN HIEROGLYPH A294","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd4a"},83275:{"value":"1454B","name":"ANATOLIAN HIEROGLYPH A294A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd4b"},83276:{"value":"1454C","name":"ANATOLIAN HIEROGLYPH A295","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd4c"},83277:{"value":"1454D","name":"ANATOLIAN HIEROGLYPH A296","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd4d"},83278:{"value":"1454E","name":"ANATOLIAN HIEROGLYPH A297","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd4e"},83279:{"value":"1454F","name":"ANATOLIAN HIEROGLYPH A298","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd4f"},83280:{"value":"14550","name":"ANATOLIAN HIEROGLYPH A299","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd50"},83281:{"value":"14551","name":"ANATOLIAN HIEROGLYPH A299A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd51"},83282:{"value":"14552","name":"ANATOLIAN HIEROGLYPH A300","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd52"},83283:{"value":"14553","name":"ANATOLIAN HIEROGLYPH A301","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd53"},83284:{"value":"14554","name":"ANATOLIAN HIEROGLYPH A302","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd54"},83285:{"value":"14555","name":"ANATOLIAN HIEROGLYPH A303","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd55"},83286:{"value":"14556","name":"ANATOLIAN HIEROGLYPH A304","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd56"},83287:{"value":"14557","name":"ANATOLIAN HIEROGLYPH A305","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd57"},83288:{"value":"14558","name":"ANATOLIAN HIEROGLYPH A306","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd58"},83289:{"value":"14559","name":"ANATOLIAN HIEROGLYPH A307","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd59"},83290:{"value":"1455A","name":"ANATOLIAN HIEROGLYPH A308","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd5a"},83291:{"value":"1455B","name":"ANATOLIAN HIEROGLYPH A309","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd5b"},83292:{"value":"1455C","name":"ANATOLIAN HIEROGLYPH A309A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd5c"},83293:{"value":"1455D","name":"ANATOLIAN HIEROGLYPH A310","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd5d"},83294:{"value":"1455E","name":"ANATOLIAN HIEROGLYPH A311","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd5e"},83295:{"value":"1455F","name":"ANATOLIAN HIEROGLYPH A312","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd5f"},83296:{"value":"14560","name":"ANATOLIAN HIEROGLYPH A313","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd60"},83297:{"value":"14561","name":"ANATOLIAN HIEROGLYPH A314","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd61"},83298:{"value":"14562","name":"ANATOLIAN HIEROGLYPH A315","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd62"},83299:{"value":"14563","name":"ANATOLIAN HIEROGLYPH A316","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd63"},83300:{"value":"14564","name":"ANATOLIAN HIEROGLYPH A317","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd64"},83301:{"value":"14565","name":"ANATOLIAN HIEROGLYPH A318","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd65"},83302:{"value":"14566","name":"ANATOLIAN HIEROGLYPH A319","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd66"},83303:{"value":"14567","name":"ANATOLIAN HIEROGLYPH A320","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd67"},83304:{"value":"14568","name":"ANATOLIAN HIEROGLYPH A321","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd68"},83305:{"value":"14569","name":"ANATOLIAN HIEROGLYPH A322","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd69"},83306:{"value":"1456A","name":"ANATOLIAN HIEROGLYPH A323","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd6a"},83307:{"value":"1456B","name":"ANATOLIAN HIEROGLYPH A324","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd6b"},83308:{"value":"1456C","name":"ANATOLIAN HIEROGLYPH A325","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd6c"},83309:{"value":"1456D","name":"ANATOLIAN HIEROGLYPH A326","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd6d"},83310:{"value":"1456E","name":"ANATOLIAN HIEROGLYPH A327","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd6e"},83311:{"value":"1456F","name":"ANATOLIAN HIEROGLYPH A328","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd6f"},83312:{"value":"14570","name":"ANATOLIAN HIEROGLYPH A329","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd70"},83313:{"value":"14571","name":"ANATOLIAN HIEROGLYPH A329A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd71"},83314:{"value":"14572","name":"ANATOLIAN HIEROGLYPH A330","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd72"},83315:{"value":"14573","name":"ANATOLIAN HIEROGLYPH A331","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd73"},83316:{"value":"14574","name":"ANATOLIAN HIEROGLYPH A332A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd74"},83317:{"value":"14575","name":"ANATOLIAN HIEROGLYPH A332B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd75"},83318:{"value":"14576","name":"ANATOLIAN HIEROGLYPH A332C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd76"},83319:{"value":"14577","name":"ANATOLIAN HIEROGLYPH A333","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd77"},83320:{"value":"14578","name":"ANATOLIAN HIEROGLYPH A334","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd78"},83321:{"value":"14579","name":"ANATOLIAN HIEROGLYPH A335","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd79"},83322:{"value":"1457A","name":"ANATOLIAN HIEROGLYPH A336","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd7a"},83323:{"value":"1457B","name":"ANATOLIAN HIEROGLYPH A336A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd7b"},83324:{"value":"1457C","name":"ANATOLIAN HIEROGLYPH A336B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd7c"},83325:{"value":"1457D","name":"ANATOLIAN HIEROGLYPH A336C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd7d"},83326:{"value":"1457E","name":"ANATOLIAN HIEROGLYPH A337","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd7e"},83327:{"value":"1457F","name":"ANATOLIAN HIEROGLYPH A338","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd7f"},83328:{"value":"14580","name":"ANATOLIAN HIEROGLYPH A339","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd80"},83329:{"value":"14581","name":"ANATOLIAN HIEROGLYPH A340","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd81"},83330:{"value":"14582","name":"ANATOLIAN HIEROGLYPH A341","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd82"},83331:{"value":"14583","name":"ANATOLIAN HIEROGLYPH A342","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd83"},83332:{"value":"14584","name":"ANATOLIAN HIEROGLYPH A343","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd84"},83333:{"value":"14585","name":"ANATOLIAN HIEROGLYPH A344","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd85"},83334:{"value":"14586","name":"ANATOLIAN HIEROGLYPH A345","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd86"},83335:{"value":"14587","name":"ANATOLIAN HIEROGLYPH A346","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd87"},83336:{"value":"14588","name":"ANATOLIAN HIEROGLYPH A347","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd88"},83337:{"value":"14589","name":"ANATOLIAN HIEROGLYPH A348","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd89"},83338:{"value":"1458A","name":"ANATOLIAN HIEROGLYPH A349","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd8a"},83339:{"value":"1458B","name":"ANATOLIAN HIEROGLYPH A350","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd8b"},83340:{"value":"1458C","name":"ANATOLIAN HIEROGLYPH A351","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd8c"},83341:{"value":"1458D","name":"ANATOLIAN HIEROGLYPH A352","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd8d"},83342:{"value":"1458E","name":"ANATOLIAN HIEROGLYPH A353","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd8e"},83343:{"value":"1458F","name":"ANATOLIAN HIEROGLYPH A354","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd8f"},83344:{"value":"14590","name":"ANATOLIAN HIEROGLYPH A355","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd90"},83345:{"value":"14591","name":"ANATOLIAN HIEROGLYPH A356","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd91"},83346:{"value":"14592","name":"ANATOLIAN HIEROGLYPH A357","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd92"},83347:{"value":"14593","name":"ANATOLIAN HIEROGLYPH A358","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd93"},83348:{"value":"14594","name":"ANATOLIAN HIEROGLYPH A359","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd94"},83349:{"value":"14595","name":"ANATOLIAN HIEROGLYPH A359A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd95"},83350:{"value":"14596","name":"ANATOLIAN HIEROGLYPH A360","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd96"},83351:{"value":"14597","name":"ANATOLIAN HIEROGLYPH A361","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd97"},83352:{"value":"14598","name":"ANATOLIAN HIEROGLYPH A362","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd98"},83353:{"value":"14599","name":"ANATOLIAN HIEROGLYPH A363","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd99"},83354:{"value":"1459A","name":"ANATOLIAN HIEROGLYPH A364","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd9a"},83355:{"value":"1459B","name":"ANATOLIAN HIEROGLYPH A364A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd9b"},83356:{"value":"1459C","name":"ANATOLIAN HIEROGLYPH A365","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd9c"},83357:{"value":"1459D","name":"ANATOLIAN HIEROGLYPH A366","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd9d"},83358:{"value":"1459E","name":"ANATOLIAN HIEROGLYPH A367","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd9e"},83359:{"value":"1459F","name":"ANATOLIAN HIEROGLYPH A368","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udd9f"},83360:{"value":"145A0","name":"ANATOLIAN HIEROGLYPH A368A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda0"},83361:{"value":"145A1","name":"ANATOLIAN HIEROGLYPH A369","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda1"},83362:{"value":"145A2","name":"ANATOLIAN HIEROGLYPH A370","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda2"},83363:{"value":"145A3","name":"ANATOLIAN HIEROGLYPH A371","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda3"},83364:{"value":"145A4","name":"ANATOLIAN HIEROGLYPH A371A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda4"},83365:{"value":"145A5","name":"ANATOLIAN HIEROGLYPH A372","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda5"},83366:{"value":"145A6","name":"ANATOLIAN HIEROGLYPH A373","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda6"},83367:{"value":"145A7","name":"ANATOLIAN HIEROGLYPH A374","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda7"},83368:{"value":"145A8","name":"ANATOLIAN HIEROGLYPH A375","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda8"},83369:{"value":"145A9","name":"ANATOLIAN HIEROGLYPH A376","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udda9"},83370:{"value":"145AA","name":"ANATOLIAN HIEROGLYPH A377","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddaa"},83371:{"value":"145AB","name":"ANATOLIAN HIEROGLYPH A378","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddab"},83372:{"value":"145AC","name":"ANATOLIAN HIEROGLYPH A379","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddac"},83373:{"value":"145AD","name":"ANATOLIAN HIEROGLYPH A380","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddad"},83374:{"value":"145AE","name":"ANATOLIAN HIEROGLYPH A381","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddae"},83375:{"value":"145AF","name":"ANATOLIAN HIEROGLYPH A381A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddaf"},83376:{"value":"145B0","name":"ANATOLIAN HIEROGLYPH A382","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb0"},83377:{"value":"145B1","name":"ANATOLIAN HIEROGLYPH A383 RA OR RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb1"},83378:{"value":"145B2","name":"ANATOLIAN HIEROGLYPH A383A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb2"},83379:{"value":"145B3","name":"ANATOLIAN HIEROGLYPH A384","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb3"},83380:{"value":"145B4","name":"ANATOLIAN HIEROGLYPH A385","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb4"},83381:{"value":"145B5","name":"ANATOLIAN HIEROGLYPH A386","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb5"},83382:{"value":"145B6","name":"ANATOLIAN HIEROGLYPH A386A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb6"},83383:{"value":"145B7","name":"ANATOLIAN HIEROGLYPH A387","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb7"},83384:{"value":"145B8","name":"ANATOLIAN HIEROGLYPH A388","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb8"},83385:{"value":"145B9","name":"ANATOLIAN HIEROGLYPH A389","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddb9"},83386:{"value":"145BA","name":"ANATOLIAN HIEROGLYPH A390","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddba"},83387:{"value":"145BB","name":"ANATOLIAN HIEROGLYPH A391","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddbb"},83388:{"value":"145BC","name":"ANATOLIAN HIEROGLYPH A392","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddbc"},83389:{"value":"145BD","name":"ANATOLIAN HIEROGLYPH A393 EIGHT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddbd"},83390:{"value":"145BE","name":"ANATOLIAN HIEROGLYPH A394","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddbe"},83391:{"value":"145BF","name":"ANATOLIAN HIEROGLYPH A395","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddbf"},83392:{"value":"145C0","name":"ANATOLIAN HIEROGLYPH A396","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc0"},83393:{"value":"145C1","name":"ANATOLIAN HIEROGLYPH A397","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc1"},83394:{"value":"145C2","name":"ANATOLIAN HIEROGLYPH A398","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc2"},83395:{"value":"145C3","name":"ANATOLIAN HIEROGLYPH A399","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc3"},83396:{"value":"145C4","name":"ANATOLIAN HIEROGLYPH A400","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc4"},83397:{"value":"145C5","name":"ANATOLIAN HIEROGLYPH A401","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc5"},83398:{"value":"145C6","name":"ANATOLIAN HIEROGLYPH A402","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc6"},83399:{"value":"145C7","name":"ANATOLIAN HIEROGLYPH A403","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc7"},83400:{"value":"145C8","name":"ANATOLIAN HIEROGLYPH A404","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc8"},83401:{"value":"145C9","name":"ANATOLIAN HIEROGLYPH A405","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddc9"},83402:{"value":"145CA","name":"ANATOLIAN HIEROGLYPH A406","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddca"},83403:{"value":"145CB","name":"ANATOLIAN HIEROGLYPH A407","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddcb"},83404:{"value":"145CC","name":"ANATOLIAN HIEROGLYPH A408","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddcc"},83405:{"value":"145CD","name":"ANATOLIAN HIEROGLYPH A409","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddcd"},83406:{"value":"145CE","name":"ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddce"},83407:{"value":"145CF","name":"ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddcf"},83408:{"value":"145D0","name":"ANATOLIAN HIEROGLYPH A411","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd0"},83409:{"value":"145D1","name":"ANATOLIAN HIEROGLYPH A412","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd1"},83410:{"value":"145D2","name":"ANATOLIAN HIEROGLYPH A413","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd2"},83411:{"value":"145D3","name":"ANATOLIAN HIEROGLYPH A414","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd3"},83412:{"value":"145D4","name":"ANATOLIAN HIEROGLYPH A415","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd4"},83413:{"value":"145D5","name":"ANATOLIAN HIEROGLYPH A416","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd5"},83414:{"value":"145D6","name":"ANATOLIAN HIEROGLYPH A417","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd6"},83415:{"value":"145D7","name":"ANATOLIAN HIEROGLYPH A418","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd7"},83416:{"value":"145D8","name":"ANATOLIAN HIEROGLYPH A419","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd8"},83417:{"value":"145D9","name":"ANATOLIAN HIEROGLYPH A420","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddd9"},83418:{"value":"145DA","name":"ANATOLIAN HIEROGLYPH A421","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddda"},83419:{"value":"145DB","name":"ANATOLIAN HIEROGLYPH A422","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udddb"},83420:{"value":"145DC","name":"ANATOLIAN HIEROGLYPH A423","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udddc"},83421:{"value":"145DD","name":"ANATOLIAN HIEROGLYPH A424","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udddd"},83422:{"value":"145DE","name":"ANATOLIAN HIEROGLYPH A425","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddde"},83423:{"value":"145DF","name":"ANATOLIAN HIEROGLYPH A426","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udddf"},83424:{"value":"145E0","name":"ANATOLIAN HIEROGLYPH A427","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde0"},83425:{"value":"145E1","name":"ANATOLIAN HIEROGLYPH A428","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde1"},83426:{"value":"145E2","name":"ANATOLIAN HIEROGLYPH A429","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde2"},83427:{"value":"145E3","name":"ANATOLIAN HIEROGLYPH A430","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde3"},83428:{"value":"145E4","name":"ANATOLIAN HIEROGLYPH A431","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde4"},83429:{"value":"145E5","name":"ANATOLIAN HIEROGLYPH A432","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde5"},83430:{"value":"145E6","name":"ANATOLIAN HIEROGLYPH A433","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde6"},83431:{"value":"145E7","name":"ANATOLIAN HIEROGLYPH A434","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde7"},83432:{"value":"145E8","name":"ANATOLIAN HIEROGLYPH A435","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde8"},83433:{"value":"145E9","name":"ANATOLIAN HIEROGLYPH A436","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udde9"},83434:{"value":"145EA","name":"ANATOLIAN HIEROGLYPH A437","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddea"},83435:{"value":"145EB","name":"ANATOLIAN HIEROGLYPH A438","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddeb"},83436:{"value":"145EC","name":"ANATOLIAN HIEROGLYPH A439","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddec"},83437:{"value":"145ED","name":"ANATOLIAN HIEROGLYPH A440","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\udded"},83438:{"value":"145EE","name":"ANATOLIAN HIEROGLYPH A441","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddee"},83439:{"value":"145EF","name":"ANATOLIAN HIEROGLYPH A442","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddef"},83440:{"value":"145F0","name":"ANATOLIAN HIEROGLYPH A443","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf0"},83441:{"value":"145F1","name":"ANATOLIAN HIEROGLYPH A444","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf1"},83442:{"value":"145F2","name":"ANATOLIAN HIEROGLYPH A445","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf2"},83443:{"value":"145F3","name":"ANATOLIAN HIEROGLYPH A446","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf3"},83444:{"value":"145F4","name":"ANATOLIAN HIEROGLYPH A447","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf4"},83445:{"value":"145F5","name":"ANATOLIAN HIEROGLYPH A448","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf5"},83446:{"value":"145F6","name":"ANATOLIAN HIEROGLYPH A449","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf6"},83447:{"value":"145F7","name":"ANATOLIAN HIEROGLYPH A450","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf7"},83448:{"value":"145F8","name":"ANATOLIAN HIEROGLYPH A450A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf8"},83449:{"value":"145F9","name":"ANATOLIAN HIEROGLYPH A451","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddf9"},83450:{"value":"145FA","name":"ANATOLIAN HIEROGLYPH A452","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddfa"},83451:{"value":"145FB","name":"ANATOLIAN HIEROGLYPH A453","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddfb"},83452:{"value":"145FC","name":"ANATOLIAN HIEROGLYPH A454","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddfc"},83453:{"value":"145FD","name":"ANATOLIAN HIEROGLYPH A455","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddfd"},83454:{"value":"145FE","name":"ANATOLIAN HIEROGLYPH A456","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddfe"},83455:{"value":"145FF","name":"ANATOLIAN HIEROGLYPH A457","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\uddff"},83456:{"value":"14600","name":"ANATOLIAN HIEROGLYPH A457A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude00"},83457:{"value":"14601","name":"ANATOLIAN HIEROGLYPH A458","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude01"},83458:{"value":"14602","name":"ANATOLIAN HIEROGLYPH A459","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude02"},83459:{"value":"14603","name":"ANATOLIAN HIEROGLYPH A460","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude03"},83460:{"value":"14604","name":"ANATOLIAN HIEROGLYPH A461","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude04"},83461:{"value":"14605","name":"ANATOLIAN HIEROGLYPH A462","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude05"},83462:{"value":"14606","name":"ANATOLIAN HIEROGLYPH A463","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude06"},83463:{"value":"14607","name":"ANATOLIAN HIEROGLYPH A464","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude07"},83464:{"value":"14608","name":"ANATOLIAN HIEROGLYPH A465","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude08"},83465:{"value":"14609","name":"ANATOLIAN HIEROGLYPH A466","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude09"},83466:{"value":"1460A","name":"ANATOLIAN HIEROGLYPH A467","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude0a"},83467:{"value":"1460B","name":"ANATOLIAN HIEROGLYPH A468","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude0b"},83468:{"value":"1460C","name":"ANATOLIAN HIEROGLYPH A469","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude0c"},83469:{"value":"1460D","name":"ANATOLIAN HIEROGLYPH A470","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude0d"},83470:{"value":"1460E","name":"ANATOLIAN HIEROGLYPH A471","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude0e"},83471:{"value":"1460F","name":"ANATOLIAN HIEROGLYPH A472","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude0f"},83472:{"value":"14610","name":"ANATOLIAN HIEROGLYPH A473","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude10"},83473:{"value":"14611","name":"ANATOLIAN HIEROGLYPH A474","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude11"},83474:{"value":"14612","name":"ANATOLIAN HIEROGLYPH A475","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude12"},83475:{"value":"14613","name":"ANATOLIAN HIEROGLYPH A476","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude13"},83476:{"value":"14614","name":"ANATOLIAN HIEROGLYPH A477","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude14"},83477:{"value":"14615","name":"ANATOLIAN HIEROGLYPH A478","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude15"},83478:{"value":"14616","name":"ANATOLIAN HIEROGLYPH A479","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude16"},83479:{"value":"14617","name":"ANATOLIAN HIEROGLYPH A480","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude17"},83480:{"value":"14618","name":"ANATOLIAN HIEROGLYPH A481","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude18"},83481:{"value":"14619","name":"ANATOLIAN HIEROGLYPH A482","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude19"},83482:{"value":"1461A","name":"ANATOLIAN HIEROGLYPH A483","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude1a"},83483:{"value":"1461B","name":"ANATOLIAN HIEROGLYPH A484","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude1b"},83484:{"value":"1461C","name":"ANATOLIAN HIEROGLYPH A485","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude1c"},83485:{"value":"1461D","name":"ANATOLIAN HIEROGLYPH A486","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude1d"},83486:{"value":"1461E","name":"ANATOLIAN HIEROGLYPH A487","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude1e"},83487:{"value":"1461F","name":"ANATOLIAN HIEROGLYPH A488","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude1f"},83488:{"value":"14620","name":"ANATOLIAN HIEROGLYPH A489","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude20"},83489:{"value":"14621","name":"ANATOLIAN HIEROGLYPH A490","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude21"},83490:{"value":"14622","name":"ANATOLIAN HIEROGLYPH A491","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude22"},83491:{"value":"14623","name":"ANATOLIAN HIEROGLYPH A492","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude23"},83492:{"value":"14624","name":"ANATOLIAN HIEROGLYPH A493","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude24"},83493:{"value":"14625","name":"ANATOLIAN HIEROGLYPH A494","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude25"},83494:{"value":"14626","name":"ANATOLIAN HIEROGLYPH A495","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude26"},83495:{"value":"14627","name":"ANATOLIAN HIEROGLYPH A496","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude27"},83496:{"value":"14628","name":"ANATOLIAN HIEROGLYPH A497","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude28"},83497:{"value":"14629","name":"ANATOLIAN HIEROGLYPH A501","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude29"},83498:{"value":"1462A","name":"ANATOLIAN HIEROGLYPH A502","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude2a"},83499:{"value":"1462B","name":"ANATOLIAN HIEROGLYPH A503","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude2b"},83500:{"value":"1462C","name":"ANATOLIAN HIEROGLYPH A504","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude2c"},83501:{"value":"1462D","name":"ANATOLIAN HIEROGLYPH A505","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude2d"},83502:{"value":"1462E","name":"ANATOLIAN HIEROGLYPH A506","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude2e"},83503:{"value":"1462F","name":"ANATOLIAN HIEROGLYPH A507","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude2f"},83504:{"value":"14630","name":"ANATOLIAN HIEROGLYPH A508","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude30"},83505:{"value":"14631","name":"ANATOLIAN HIEROGLYPH A509","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude31"},83506:{"value":"14632","name":"ANATOLIAN HIEROGLYPH A510","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude32"},83507:{"value":"14633","name":"ANATOLIAN HIEROGLYPH A511","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude33"},83508:{"value":"14634","name":"ANATOLIAN HIEROGLYPH A512","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude34"},83509:{"value":"14635","name":"ANATOLIAN HIEROGLYPH A513","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude35"},83510:{"value":"14636","name":"ANATOLIAN HIEROGLYPH A514","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude36"},83511:{"value":"14637","name":"ANATOLIAN HIEROGLYPH A515","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude37"},83512:{"value":"14638","name":"ANATOLIAN HIEROGLYPH A516","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude38"},83513:{"value":"14639","name":"ANATOLIAN HIEROGLYPH A517","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude39"},83514:{"value":"1463A","name":"ANATOLIAN HIEROGLYPH A518","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude3a"},83515:{"value":"1463B","name":"ANATOLIAN HIEROGLYPH A519","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude3b"},83516:{"value":"1463C","name":"ANATOLIAN HIEROGLYPH A520","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude3c"},83517:{"value":"1463D","name":"ANATOLIAN HIEROGLYPH A521","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude3d"},83518:{"value":"1463E","name":"ANATOLIAN HIEROGLYPH A522","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude3e"},83519:{"value":"1463F","name":"ANATOLIAN HIEROGLYPH A523","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude3f"},83520:{"value":"14640","name":"ANATOLIAN HIEROGLYPH A524","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude40"},83521:{"value":"14641","name":"ANATOLIAN HIEROGLYPH A525","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude41"},83522:{"value":"14642","name":"ANATOLIAN HIEROGLYPH A526","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude42"},83523:{"value":"14643","name":"ANATOLIAN HIEROGLYPH A527","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude43"},83524:{"value":"14644","name":"ANATOLIAN HIEROGLYPH A528","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude44"},83525:{"value":"14645","name":"ANATOLIAN HIEROGLYPH A529","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude45"},83526:{"value":"14646","name":"ANATOLIAN HIEROGLYPH A530","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud811\ude46"},92160:{"value":"16800","name":"BAMUM LETTER PHASE-A NGKUE MFON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc00"},92161:{"value":"16801","name":"BAMUM LETTER PHASE-A GBIEE FON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc01"},92162:{"value":"16802","name":"BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc02"},92163:{"value":"16803","name":"BAMUM LETTER PHASE-A PON MFON PIPAEMBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc03"},92164:{"value":"16804","name":"BAMUM LETTER PHASE-A NAA MFON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc04"},92165:{"value":"16805","name":"BAMUM LETTER PHASE-A SHUENSHUET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc05"},92166:{"value":"16806","name":"BAMUM LETTER PHASE-A TITA MFON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc06"},92167:{"value":"16807","name":"BAMUM LETTER PHASE-A NZA MFON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc07"},92168:{"value":"16808","name":"BAMUM LETTER PHASE-A SHINDA PA NJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc08"},92169:{"value":"16809","name":"BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc09"},92170:{"value":"1680A","name":"BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc0a"},92171:{"value":"1680B","name":"BAMUM LETTER PHASE-A MAEMBGBIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc0b"},92172:{"value":"1680C","name":"BAMUM LETTER PHASE-A TU MAEMBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc0c"},92173:{"value":"1680D","name":"BAMUM LETTER PHASE-A NGANGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc0d"},92174:{"value":"1680E","name":"BAMUM LETTER PHASE-A MAEMVEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc0e"},92175:{"value":"1680F","name":"BAMUM LETTER PHASE-A MANSUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc0f"},92176:{"value":"16810","name":"BAMUM LETTER PHASE-A MVEUAENGAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc10"},92177:{"value":"16811","name":"BAMUM LETTER PHASE-A SEUNYAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc11"},92178:{"value":"16812","name":"BAMUM LETTER PHASE-A NTOQPEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc12"},92179:{"value":"16813","name":"BAMUM LETTER PHASE-A KEUKEUTNDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc13"},92180:{"value":"16814","name":"BAMUM LETTER PHASE-A NKINDI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc14"},92181:{"value":"16815","name":"BAMUM LETTER PHASE-A SUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc15"},92182:{"value":"16816","name":"BAMUM LETTER PHASE-A NGKUENZEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc16"},92183:{"value":"16817","name":"BAMUM LETTER PHASE-A LAPAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc17"},92184:{"value":"16818","name":"BAMUM LETTER PHASE-A LET KUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc18"},92185:{"value":"16819","name":"BAMUM LETTER PHASE-A NTAP MFAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc19"},92186:{"value":"1681A","name":"BAMUM LETTER PHASE-A MAEKEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc1a"},92187:{"value":"1681B","name":"BAMUM LETTER PHASE-A PASHAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc1b"},92188:{"value":"1681C","name":"BAMUM LETTER PHASE-A GHEUAERAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc1c"},92189:{"value":"1681D","name":"BAMUM LETTER PHASE-A PAMSHAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc1d"},92190:{"value":"1681E","name":"BAMUM LETTER PHASE-A MON NGGEUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc1e"},92191:{"value":"1681F","name":"BAMUM LETTER PHASE-A NZUN MEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc1f"},92192:{"value":"16820","name":"BAMUM LETTER PHASE-A U YUQ NAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc20"},92193:{"value":"16821","name":"BAMUM LETTER PHASE-A GHEUAEGHEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc21"},92194:{"value":"16822","name":"BAMUM LETTER PHASE-A NTAP NTAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc22"},92195:{"value":"16823","name":"BAMUM LETTER PHASE-A SISA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc23"},92196:{"value":"16824","name":"BAMUM LETTER PHASE-A MGBASA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc24"},92197:{"value":"16825","name":"BAMUM LETTER PHASE-A MEUNJOMNDEUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc25"},92198:{"value":"16826","name":"BAMUM LETTER PHASE-A MOOMPUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc26"},92199:{"value":"16827","name":"BAMUM LETTER PHASE-A KAFA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc27"},92200:{"value":"16828","name":"BAMUM LETTER PHASE-A PA LEERAEWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc28"},92201:{"value":"16829","name":"BAMUM LETTER PHASE-A NDA LEERAEWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc29"},92202:{"value":"1682A","name":"BAMUM LETTER PHASE-A PET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc2a"},92203:{"value":"1682B","name":"BAMUM LETTER PHASE-A MAEMKPEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc2b"},92204:{"value":"1682C","name":"BAMUM LETTER PHASE-A NIKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc2c"},92205:{"value":"1682D","name":"BAMUM LETTER PHASE-A PUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc2d"},92206:{"value":"1682E","name":"BAMUM LETTER PHASE-A TUAEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc2e"},92207:{"value":"1682F","name":"BAMUM LETTER PHASE-A LUAEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc2f"},92208:{"value":"16830","name":"BAMUM LETTER PHASE-A SONJAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc30"},92209:{"value":"16831","name":"BAMUM LETTER PHASE-A TEUTEUWEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc31"},92210:{"value":"16832","name":"BAMUM LETTER PHASE-A MAENYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc32"},92211:{"value":"16833","name":"BAMUM LETTER PHASE-A KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc33"},92212:{"value":"16834","name":"BAMUM LETTER PHASE-A NDAANGGEUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc34"},92213:{"value":"16835","name":"BAMUM LETTER PHASE-A KUOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc35"},92214:{"value":"16836","name":"BAMUM LETTER PHASE-A MOOMEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc36"},92215:{"value":"16837","name":"BAMUM LETTER PHASE-A SHUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc37"},92216:{"value":"16838","name":"BAMUM LETTER PHASE-A LOMMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc38"},92217:{"value":"16839","name":"BAMUM LETTER PHASE-A FIRI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc39"},92218:{"value":"1683A","name":"BAMUM LETTER PHASE-A ROM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc3a"},92219:{"value":"1683B","name":"BAMUM LETTER PHASE-A KPOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc3b"},92220:{"value":"1683C","name":"BAMUM LETTER PHASE-A SOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc3c"},92221:{"value":"1683D","name":"BAMUM LETTER PHASE-A MAP PIEET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc3d"},92222:{"value":"1683E","name":"BAMUM LETTER PHASE-A SHIRAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc3e"},92223:{"value":"1683F","name":"BAMUM LETTER PHASE-A NTAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc3f"},92224:{"value":"16840","name":"BAMUM LETTER PHASE-A SHOQ NSHUT YUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc40"},92225:{"value":"16841","name":"BAMUM LETTER PHASE-A NYIT MONGKEUAEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc41"},92226:{"value":"16842","name":"BAMUM LETTER PHASE-A PAARAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc42"},92227:{"value":"16843","name":"BAMUM LETTER PHASE-A NKAARAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc43"},92228:{"value":"16844","name":"BAMUM LETTER PHASE-A UNKNOWN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc44"},92229:{"value":"16845","name":"BAMUM LETTER PHASE-A NGGEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc45"},92230:{"value":"16846","name":"BAMUM LETTER PHASE-A MAESI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc46"},92231:{"value":"16847","name":"BAMUM LETTER PHASE-A NJAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc47"},92232:{"value":"16848","name":"BAMUM LETTER PHASE-A MBANYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc48"},92233:{"value":"16849","name":"BAMUM LETTER PHASE-A NYET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc49"},92234:{"value":"1684A","name":"BAMUM LETTER PHASE-A TEUAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc4a"},92235:{"value":"1684B","name":"BAMUM LETTER PHASE-A SOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc4b"},92236:{"value":"1684C","name":"BAMUM LETTER PHASE-A PAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc4c"},92237:{"value":"1684D","name":"BAMUM LETTER PHASE-A NSHIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc4d"},92238:{"value":"1684E","name":"BAMUM LETTER PHASE-A MAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc4e"},92239:{"value":"1684F","name":"BAMUM LETTER PHASE-A NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc4f"},92240:{"value":"16850","name":"BAMUM LETTER PHASE-A KAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc50"},92241:{"value":"16851","name":"BAMUM LETTER PHASE-A NSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc51"},92242:{"value":"16852","name":"BAMUM LETTER PHASE-A VEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc52"},92243:{"value":"16853","name":"BAMUM LETTER PHASE-A LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc53"},92244:{"value":"16854","name":"BAMUM LETTER PHASE-A NEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc54"},92245:{"value":"16855","name":"BAMUM LETTER PHASE-A NAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc55"},92246:{"value":"16856","name":"BAMUM LETTER PHASE-A MBAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc56"},92247:{"value":"16857","name":"BAMUM LETTER PHASE-B NSHUET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc57"},92248:{"value":"16858","name":"BAMUM LETTER PHASE-B TU MAEMGBIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc58"},92249:{"value":"16859","name":"BAMUM LETTER PHASE-B SIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc59"},92250:{"value":"1685A","name":"BAMUM LETTER PHASE-B SET TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc5a"},92251:{"value":"1685B","name":"BAMUM LETTER PHASE-B LOM NTEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc5b"},92252:{"value":"1685C","name":"BAMUM LETTER PHASE-B MBA MAELEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc5c"},92253:{"value":"1685D","name":"BAMUM LETTER PHASE-B KIEEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc5d"},92254:{"value":"1685E","name":"BAMUM LETTER PHASE-B YEURAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc5e"},92255:{"value":"1685F","name":"BAMUM LETTER PHASE-B MBAARAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc5f"},92256:{"value":"16860","name":"BAMUM LETTER PHASE-B KAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc60"},92257:{"value":"16861","name":"BAMUM LETTER PHASE-B PEESHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc61"},92258:{"value":"16862","name":"BAMUM LETTER PHASE-B YAFU LEERAEWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc62"},92259:{"value":"16863","name":"BAMUM LETTER PHASE-B LAM NSHUT NYAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc63"},92260:{"value":"16864","name":"BAMUM LETTER PHASE-B NTIEE SHEUOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc64"},92261:{"value":"16865","name":"BAMUM LETTER PHASE-B NDU NJAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc65"},92262:{"value":"16866","name":"BAMUM LETTER PHASE-B GHEUGHEUAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc66"},92263:{"value":"16867","name":"BAMUM LETTER PHASE-B PIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc67"},92264:{"value":"16868","name":"BAMUM LETTER PHASE-B TU NSIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc68"},92265:{"value":"16869","name":"BAMUM LETTER PHASE-B SHET NJAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc69"},92266:{"value":"1686A","name":"BAMUM LETTER PHASE-B SHEUAEQTU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc6a"},92267:{"value":"1686B","name":"BAMUM LETTER PHASE-B MFON TEUAEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc6b"},92268:{"value":"1686C","name":"BAMUM LETTER PHASE-B MBIT MBAAKET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc6c"},92269:{"value":"1686D","name":"BAMUM LETTER PHASE-B NYI NTEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc6d"},92270:{"value":"1686E","name":"BAMUM LETTER PHASE-B KEUPUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc6e"},92271:{"value":"1686F","name":"BAMUM LETTER PHASE-B GHEUGHEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc6f"},92272:{"value":"16870","name":"BAMUM LETTER PHASE-B KEUYEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc70"},92273:{"value":"16871","name":"BAMUM LETTER PHASE-B LAANAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc71"},92274:{"value":"16872","name":"BAMUM LETTER PHASE-B PARUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc72"},92275:{"value":"16873","name":"BAMUM LETTER PHASE-B VEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc73"},92276:{"value":"16874","name":"BAMUM LETTER PHASE-B NGKINDI MVOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc74"},92277:{"value":"16875","name":"BAMUM LETTER PHASE-B NGGEU MBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc75"},92278:{"value":"16876","name":"BAMUM LETTER PHASE-B WUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc76"},92279:{"value":"16877","name":"BAMUM LETTER PHASE-B SAKEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc77"},92280:{"value":"16878","name":"BAMUM LETTER PHASE-B TAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc78"},92281:{"value":"16879","name":"BAMUM LETTER PHASE-B MEUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc79"},92282:{"value":"1687A","name":"BAMUM LETTER PHASE-B NGGUOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc7a"},92283:{"value":"1687B","name":"BAMUM LETTER PHASE-B NGGUOQ LARGE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc7b"},92284:{"value":"1687C","name":"BAMUM LETTER PHASE-B MFIYAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc7c"},92285:{"value":"1687D","name":"BAMUM LETTER PHASE-B SUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc7d"},92286:{"value":"1687E","name":"BAMUM LETTER PHASE-B MBEURI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc7e"},92287:{"value":"1687F","name":"BAMUM LETTER PHASE-B MONTIEEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc7f"},92288:{"value":"16880","name":"BAMUM LETTER PHASE-B NYAEMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc80"},92289:{"value":"16881","name":"BAMUM LETTER PHASE-B PUNGAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc81"},92290:{"value":"16882","name":"BAMUM LETTER PHASE-B MEUT NGGEET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc82"},92291:{"value":"16883","name":"BAMUM LETTER PHASE-B FEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc83"},92292:{"value":"16884","name":"BAMUM LETTER PHASE-B MBUOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc84"},92293:{"value":"16885","name":"BAMUM LETTER PHASE-B FEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc85"},92294:{"value":"16886","name":"BAMUM LETTER PHASE-B KEUAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc86"},92295:{"value":"16887","name":"BAMUM LETTER PHASE-B MA NJEUAENA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc87"},92296:{"value":"16888","name":"BAMUM LETTER PHASE-B MA NJUQA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc88"},92297:{"value":"16889","name":"BAMUM LETTER PHASE-B LET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc89"},92298:{"value":"1688A","name":"BAMUM LETTER PHASE-B NGGAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc8a"},92299:{"value":"1688B","name":"BAMUM LETTER PHASE-B NSEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc8b"},92300:{"value":"1688C","name":"BAMUM LETTER PHASE-B MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc8c"},92301:{"value":"1688D","name":"BAMUM LETTER PHASE-B KIQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc8d"},92302:{"value":"1688E","name":"BAMUM LETTER PHASE-B NGOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc8e"},92303:{"value":"1688F","name":"BAMUM LETTER PHASE-C NGKUE MAEMBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc8f"},92304:{"value":"16890","name":"BAMUM LETTER PHASE-C NZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc90"},92305:{"value":"16891","name":"BAMUM LETTER PHASE-C YUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc91"},92306:{"value":"16892","name":"BAMUM LETTER PHASE-C WANGKUOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc92"},92307:{"value":"16893","name":"BAMUM LETTER PHASE-C NGGEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc93"},92308:{"value":"16894","name":"BAMUM LETTER PHASE-C NDEUAEREE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc94"},92309:{"value":"16895","name":"BAMUM LETTER PHASE-C NGKAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc95"},92310:{"value":"16896","name":"BAMUM LETTER PHASE-C GHARAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc96"},92311:{"value":"16897","name":"BAMUM LETTER PHASE-C MBEEKEET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc97"},92312:{"value":"16898","name":"BAMUM LETTER PHASE-C GBAYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc98"},92313:{"value":"16899","name":"BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc99"},92314:{"value":"1689A","name":"BAMUM LETTER PHASE-C NTU MBIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc9a"},92315:{"value":"1689B","name":"BAMUM LETTER PHASE-C MBEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc9b"},92316:{"value":"1689C","name":"BAMUM LETTER PHASE-C PIRIEEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc9c"},92317:{"value":"1689D","name":"BAMUM LETTER PHASE-C NDOMBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc9d"},92318:{"value":"1689E","name":"BAMUM LETTER PHASE-C MBAA CABBAGE-TREE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc9e"},92319:{"value":"1689F","name":"BAMUM LETTER PHASE-C KEUSHEUAEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udc9f"},92320:{"value":"168A0","name":"BAMUM LETTER PHASE-C GHAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca0"},92321:{"value":"168A1","name":"BAMUM LETTER PHASE-C KEUKAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca1"},92322:{"value":"168A2","name":"BAMUM LETTER PHASE-C YU MUOMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca2"},92323:{"value":"168A3","name":"BAMUM LETTER PHASE-C NZEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca3"},92324:{"value":"168A4","name":"BAMUM LETTER PHASE-C MBUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca4"},92325:{"value":"168A5","name":"BAMUM LETTER PHASE-C NSEUAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca5"},92326:{"value":"168A6","name":"BAMUM LETTER PHASE-C MBIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca6"},92327:{"value":"168A7","name":"BAMUM LETTER PHASE-C YEUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca7"},92328:{"value":"168A8","name":"BAMUM LETTER PHASE-C KPARAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca8"},92329:{"value":"168A9","name":"BAMUM LETTER PHASE-C KAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udca9"},92330:{"value":"168AA","name":"BAMUM LETTER PHASE-C SEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcaa"},92331:{"value":"168AB","name":"BAMUM LETTER PHASE-C NDIDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcab"},92332:{"value":"168AC","name":"BAMUM LETTER PHASE-C TAASHAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcac"},92333:{"value":"168AD","name":"BAMUM LETTER PHASE-C NJUEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcad"},92334:{"value":"168AE","name":"BAMUM LETTER PHASE-C TITA YUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcae"},92335:{"value":"168AF","name":"BAMUM LETTER PHASE-C SUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcaf"},92336:{"value":"168B0","name":"BAMUM LETTER PHASE-C NGGUAEN NYAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb0"},92337:{"value":"168B1","name":"BAMUM LETTER PHASE-C VEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb1"},92338:{"value":"168B2","name":"BAMUM LETTER PHASE-C NANSANAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb2"},92339:{"value":"168B3","name":"BAMUM LETTER PHASE-C MA KEUAERI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb3"},92340:{"value":"168B4","name":"BAMUM LETTER PHASE-C NTAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb4"},92341:{"value":"168B5","name":"BAMUM LETTER PHASE-C NGGUON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb5"},92342:{"value":"168B6","name":"BAMUM LETTER PHASE-C LAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb6"},92343:{"value":"168B7","name":"BAMUM LETTER PHASE-C MBIRIEEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb7"},92344:{"value":"168B8","name":"BAMUM LETTER PHASE-C MGBASAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb8"},92345:{"value":"168B9","name":"BAMUM LETTER PHASE-C NTEUNGBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcb9"},92346:{"value":"168BA","name":"BAMUM LETTER PHASE-C TEUTEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcba"},92347:{"value":"168BB","name":"BAMUM LETTER PHASE-C NGGUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcbb"},92348:{"value":"168BC","name":"BAMUM LETTER PHASE-C FUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcbc"},92349:{"value":"168BD","name":"BAMUM LETTER PHASE-C NDEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcbd"},92350:{"value":"168BE","name":"BAMUM LETTER PHASE-C NSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcbe"},92351:{"value":"168BF","name":"BAMUM LETTER PHASE-C NSHAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcbf"},92352:{"value":"168C0","name":"BAMUM LETTER PHASE-C BUNG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc0"},92353:{"value":"168C1","name":"BAMUM LETTER PHASE-C VEUAEPEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc1"},92354:{"value":"168C2","name":"BAMUM LETTER PHASE-C MBERAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc2"},92355:{"value":"168C3","name":"BAMUM LETTER PHASE-C RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc3"},92356:{"value":"168C4","name":"BAMUM LETTER PHASE-C NJAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc4"},92357:{"value":"168C5","name":"BAMUM LETTER PHASE-C LAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc5"},92358:{"value":"168C6","name":"BAMUM LETTER PHASE-C TITUAEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc6"},92359:{"value":"168C7","name":"BAMUM LETTER PHASE-C NSUOT NGOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc7"},92360:{"value":"168C8","name":"BAMUM LETTER PHASE-C NJEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc8"},92361:{"value":"168C9","name":"BAMUM LETTER PHASE-C KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcc9"},92362:{"value":"168CA","name":"BAMUM LETTER PHASE-C NGGU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcca"},92363:{"value":"168CB","name":"BAMUM LETTER PHASE-C MAESI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udccb"},92364:{"value":"168CC","name":"BAMUM LETTER PHASE-C MBUAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udccc"},92365:{"value":"168CD","name":"BAMUM LETTER PHASE-C LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udccd"},92366:{"value":"168CE","name":"BAMUM LETTER PHASE-C KUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcce"},92367:{"value":"168CF","name":"BAMUM LETTER PHASE-C NJAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udccf"},92368:{"value":"168D0","name":"BAMUM LETTER PHASE-C NGOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd0"},92369:{"value":"168D1","name":"BAMUM LETTER PHASE-C WUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd1"},92370:{"value":"168D2","name":"BAMUM LETTER PHASE-C NGGUEET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd2"},92371:{"value":"168D3","name":"BAMUM LETTER PHASE-C NSOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd3"},92372:{"value":"168D4","name":"BAMUM LETTER PHASE-C NTEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd4"},92373:{"value":"168D5","name":"BAMUM LETTER PHASE-C KUOP NKAARAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd5"},92374:{"value":"168D6","name":"BAMUM LETTER PHASE-C NSUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd6"},92375:{"value":"168D7","name":"BAMUM LETTER PHASE-C NDAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd7"},92376:{"value":"168D8","name":"BAMUM LETTER PHASE-C MA NSIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd8"},92377:{"value":"168D9","name":"BAMUM LETTER PHASE-C YAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcd9"},92378:{"value":"168DA","name":"BAMUM LETTER PHASE-C NDAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcda"},92379:{"value":"168DB","name":"BAMUM LETTER PHASE-C SHUEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcdb"},92380:{"value":"168DC","name":"BAMUM LETTER PHASE-C SETFON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcdc"},92381:{"value":"168DD","name":"BAMUM LETTER PHASE-C MBI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcdd"},92382:{"value":"168DE","name":"BAMUM LETTER PHASE-C MAEMBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcde"},92383:{"value":"168DF","name":"BAMUM LETTER PHASE-C MBANYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcdf"},92384:{"value":"168E0","name":"BAMUM LETTER PHASE-C KEUSEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce0"},92385:{"value":"168E1","name":"BAMUM LETTER PHASE-C MBEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce1"},92386:{"value":"168E2","name":"BAMUM LETTER PHASE-C KEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce2"},92387:{"value":"168E3","name":"BAMUM LETTER PHASE-C MBAA PICKET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce3"},92388:{"value":"168E4","name":"BAMUM LETTER PHASE-C YUWOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce4"},92389:{"value":"168E5","name":"BAMUM LETTER PHASE-C NJEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce5"},92390:{"value":"168E6","name":"BAMUM LETTER PHASE-C MIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce6"},92391:{"value":"168E7","name":"BAMUM LETTER PHASE-C MUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce7"},92392:{"value":"168E8","name":"BAMUM LETTER PHASE-C SHIQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce8"},92393:{"value":"168E9","name":"BAMUM LETTER PHASE-C KEN LAW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udce9"},92394:{"value":"168EA","name":"BAMUM LETTER PHASE-C KEN FATIGUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcea"},92395:{"value":"168EB","name":"BAMUM LETTER PHASE-C NGAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udceb"},92396:{"value":"168EC","name":"BAMUM LETTER PHASE-C NAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcec"},92397:{"value":"168ED","name":"BAMUM LETTER PHASE-C LIQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udced"},92398:{"value":"168EE","name":"BAMUM LETTER PHASE-C PIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcee"},92399:{"value":"168EF","name":"BAMUM LETTER PHASE-C PEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcef"},92400:{"value":"168F0","name":"BAMUM LETTER PHASE-C TET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf0"},92401:{"value":"168F1","name":"BAMUM LETTER PHASE-D MBUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf1"},92402:{"value":"168F2","name":"BAMUM LETTER PHASE-D WAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf2"},92403:{"value":"168F3","name":"BAMUM LETTER PHASE-D NJI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf3"},92404:{"value":"168F4","name":"BAMUM LETTER PHASE-D MFON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf4"},92405:{"value":"168F5","name":"BAMUM LETTER PHASE-D NJIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf5"},92406:{"value":"168F6","name":"BAMUM LETTER PHASE-D LIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf6"},92407:{"value":"168F7","name":"BAMUM LETTER PHASE-D NJEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf7"},92408:{"value":"168F8","name":"BAMUM LETTER PHASE-D NSHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf8"},92409:{"value":"168F9","name":"BAMUM LETTER PHASE-D NGGAAMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcf9"},92410:{"value":"168FA","name":"BAMUM LETTER PHASE-D NYAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcfa"},92411:{"value":"168FB","name":"BAMUM LETTER PHASE-D WUAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcfb"},92412:{"value":"168FC","name":"BAMUM LETTER PHASE-D NGKUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcfc"},92413:{"value":"168FD","name":"BAMUM LETTER PHASE-D SHEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcfd"},92414:{"value":"168FE","name":"BAMUM LETTER PHASE-D NGKAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcfe"},92415:{"value":"168FF","name":"BAMUM LETTER PHASE-D KEUAETMEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udcff"},92416:{"value":"16900","name":"BAMUM LETTER PHASE-D TEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd00"},92417:{"value":"16901","name":"BAMUM LETTER PHASE-D SHEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd01"},92418:{"value":"16902","name":"BAMUM LETTER PHASE-D NJAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd02"},92419:{"value":"16903","name":"BAMUM LETTER PHASE-D SUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd03"},92420:{"value":"16904","name":"BAMUM LETTER PHASE-D KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd04"},92421:{"value":"16905","name":"BAMUM LETTER PHASE-D YAEMMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd05"},92422:{"value":"16906","name":"BAMUM LETTER PHASE-D KUOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd06"},92423:{"value":"16907","name":"BAMUM LETTER PHASE-D SAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd07"},92424:{"value":"16908","name":"BAMUM LETTER PHASE-D MFEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd08"},92425:{"value":"16909","name":"BAMUM LETTER PHASE-D NDEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd09"},92426:{"value":"1690A","name":"BAMUM LETTER PHASE-D MALEERI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd0a"},92427:{"value":"1690B","name":"BAMUM LETTER PHASE-D MEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd0b"},92428:{"value":"1690C","name":"BAMUM LETTER PHASE-D SEUAEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd0c"},92429:{"value":"1690D","name":"BAMUM LETTER PHASE-D YEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd0d"},92430:{"value":"1690E","name":"BAMUM LETTER PHASE-D NJEUAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd0e"},92431:{"value":"1690F","name":"BAMUM LETTER PHASE-D KEUOT MBUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd0f"},92432:{"value":"16910","name":"BAMUM LETTER PHASE-D NGKEURI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd10"},92433:{"value":"16911","name":"BAMUM LETTER PHASE-D TU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd11"},92434:{"value":"16912","name":"BAMUM LETTER PHASE-D GHAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd12"},92435:{"value":"16913","name":"BAMUM LETTER PHASE-D NGKYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd13"},92436:{"value":"16914","name":"BAMUM LETTER PHASE-D FEUFEUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd14"},92437:{"value":"16915","name":"BAMUM LETTER PHASE-D NDEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd15"},92438:{"value":"16916","name":"BAMUM LETTER PHASE-D MGBOFUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd16"},92439:{"value":"16917","name":"BAMUM LETTER PHASE-D LEUAEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd17"},92440:{"value":"16918","name":"BAMUM LETTER PHASE-D NDON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd18"},92441:{"value":"16919","name":"BAMUM LETTER PHASE-D MONI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd19"},92442:{"value":"1691A","name":"BAMUM LETTER PHASE-D MGBEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd1a"},92443:{"value":"1691B","name":"BAMUM LETTER PHASE-D PUUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd1b"},92444:{"value":"1691C","name":"BAMUM LETTER PHASE-D MGBIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd1c"},92445:{"value":"1691D","name":"BAMUM LETTER PHASE-D MFO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd1d"},92446:{"value":"1691E","name":"BAMUM LETTER PHASE-D LUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd1e"},92447:{"value":"1691F","name":"BAMUM LETTER PHASE-D NSIEEP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd1f"},92448:{"value":"16920","name":"BAMUM LETTER PHASE-D MBAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd20"},92449:{"value":"16921","name":"BAMUM LETTER PHASE-D KWAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd21"},92450:{"value":"16922","name":"BAMUM LETTER PHASE-D NYET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd22"},92451:{"value":"16923","name":"BAMUM LETTER PHASE-D TEUAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd23"},92452:{"value":"16924","name":"BAMUM LETTER PHASE-D SOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd24"},92453:{"value":"16925","name":"BAMUM LETTER PHASE-D YUWOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd25"},92454:{"value":"16926","name":"BAMUM LETTER PHASE-D KEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd26"},92455:{"value":"16927","name":"BAMUM LETTER PHASE-D RAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd27"},92456:{"value":"16928","name":"BAMUM LETTER PHASE-D TEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd28"},92457:{"value":"16929","name":"BAMUM LETTER PHASE-D NGKEUAEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd29"},92458:{"value":"1692A","name":"BAMUM LETTER PHASE-D MFEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd2a"},92459:{"value":"1692B","name":"BAMUM LETTER PHASE-D NSIEET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd2b"},92460:{"value":"1692C","name":"BAMUM LETTER PHASE-D KEUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd2c"},92461:{"value":"1692D","name":"BAMUM LETTER PHASE-D PIP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd2d"},92462:{"value":"1692E","name":"BAMUM LETTER PHASE-D PEUTAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd2e"},92463:{"value":"1692F","name":"BAMUM LETTER PHASE-D NYUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd2f"},92464:{"value":"16930","name":"BAMUM LETTER PHASE-D LET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd30"},92465:{"value":"16931","name":"BAMUM LETTER PHASE-D NGGAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd31"},92466:{"value":"16932","name":"BAMUM LETTER PHASE-D MFIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd32"},92467:{"value":"16933","name":"BAMUM LETTER PHASE-D NGGWAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd33"},92468:{"value":"16934","name":"BAMUM LETTER PHASE-D YUOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd34"},92469:{"value":"16935","name":"BAMUM LETTER PHASE-D PAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd35"},92470:{"value":"16936","name":"BAMUM LETTER PHASE-D YUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd36"},92471:{"value":"16937","name":"BAMUM LETTER PHASE-D NDAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd37"},92472:{"value":"16938","name":"BAMUM LETTER PHASE-D NTEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd38"},92473:{"value":"16939","name":"BAMUM LETTER PHASE-D SUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd39"},92474:{"value":"1693A","name":"BAMUM LETTER PHASE-D KUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd3a"},92475:{"value":"1693B","name":"BAMUM LETTER PHASE-D NGGEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd3b"},92476:{"value":"1693C","name":"BAMUM LETTER PHASE-D NGKIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd3c"},92477:{"value":"1693D","name":"BAMUM LETTER PHASE-D TUOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd3d"},92478:{"value":"1693E","name":"BAMUM LETTER PHASE-D MEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd3e"},92479:{"value":"1693F","name":"BAMUM LETTER PHASE-D KUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd3f"},92480:{"value":"16940","name":"BAMUM LETTER PHASE-D NSUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd40"},92481:{"value":"16941","name":"BAMUM LETTER PHASE-D TEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd41"},92482:{"value":"16942","name":"BAMUM LETTER PHASE-D MAENJET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd42"},92483:{"value":"16943","name":"BAMUM LETTER PHASE-D NGGAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd43"},92484:{"value":"16944","name":"BAMUM LETTER PHASE-D LEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd44"},92485:{"value":"16945","name":"BAMUM LETTER PHASE-D NGGUOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd45"},92486:{"value":"16946","name":"BAMUM LETTER PHASE-D NSHUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd46"},92487:{"value":"16947","name":"BAMUM LETTER PHASE-D NJUEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd47"},92488:{"value":"16948","name":"BAMUM LETTER PHASE-D GHEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd48"},92489:{"value":"16949","name":"BAMUM LETTER PHASE-D KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd49"},92490:{"value":"1694A","name":"BAMUM LETTER PHASE-D REN OLD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd4a"},92491:{"value":"1694B","name":"BAMUM LETTER PHASE-D TAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd4b"},92492:{"value":"1694C","name":"BAMUM LETTER PHASE-D TOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd4c"},92493:{"value":"1694D","name":"BAMUM LETTER PHASE-D NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd4d"},92494:{"value":"1694E","name":"BAMUM LETTER PHASE-D RII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd4e"},92495:{"value":"1694F","name":"BAMUM LETTER PHASE-D LEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd4f"},92496:{"value":"16950","name":"BAMUM LETTER PHASE-D MEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd50"},92497:{"value":"16951","name":"BAMUM LETTER PHASE-D M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd51"},92498:{"value":"16952","name":"BAMUM LETTER PHASE-D SUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd52"},92499:{"value":"16953","name":"BAMUM LETTER PHASE-D MU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd53"},92500:{"value":"16954","name":"BAMUM LETTER PHASE-D SHII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd54"},92501:{"value":"16955","name":"BAMUM LETTER PHASE-D SHEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd55"},92502:{"value":"16956","name":"BAMUM LETTER PHASE-D KYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd56"},92503:{"value":"16957","name":"BAMUM LETTER PHASE-D NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd57"},92504:{"value":"16958","name":"BAMUM LETTER PHASE-D SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd58"},92505:{"value":"16959","name":"BAMUM LETTER PHASE-D NTEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd59"},92506:{"value":"1695A","name":"BAMUM LETTER PHASE-D PEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd5a"},92507:{"value":"1695B","name":"BAMUM LETTER PHASE-D NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd5b"},92508:{"value":"1695C","name":"BAMUM LETTER PHASE-D SHOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd5c"},92509:{"value":"1695D","name":"BAMUM LETTER PHASE-D PUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd5d"},92510:{"value":"1695E","name":"BAMUM LETTER PHASE-D MVOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd5e"},92511:{"value":"1695F","name":"BAMUM LETTER PHASE-D LOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd5f"},92512:{"value":"16960","name":"BAMUM LETTER PHASE-D REN MUCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd60"},92513:{"value":"16961","name":"BAMUM LETTER PHASE-D TI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd61"},92514:{"value":"16962","name":"BAMUM LETTER PHASE-D NTUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd62"},92515:{"value":"16963","name":"BAMUM LETTER PHASE-D MBAA SEVEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd63"},92516:{"value":"16964","name":"BAMUM LETTER PHASE-D SAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd64"},92517:{"value":"16965","name":"BAMUM LETTER PHASE-D FAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd65"},92518:{"value":"16966","name":"BAMUM LETTER PHASE-E NDAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd66"},92519:{"value":"16967","name":"BAMUM LETTER PHASE-E TOON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd67"},92520:{"value":"16968","name":"BAMUM LETTER PHASE-E MBEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd68"},92521:{"value":"16969","name":"BAMUM LETTER PHASE-E LAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd69"},92522:{"value":"1696A","name":"BAMUM LETTER PHASE-E VOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd6a"},92523:{"value":"1696B","name":"BAMUM LETTER PHASE-E LOON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd6b"},92524:{"value":"1696C","name":"BAMUM LETTER PHASE-E PAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd6c"},92525:{"value":"1696D","name":"BAMUM LETTER PHASE-E SOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd6d"},92526:{"value":"1696E","name":"BAMUM LETTER PHASE-E RAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd6e"},92527:{"value":"1696F","name":"BAMUM LETTER PHASE-E NSHUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd6f"},92528:{"value":"16970","name":"BAMUM LETTER PHASE-E NDUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd70"},92529:{"value":"16971","name":"BAMUM LETTER PHASE-E PUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd71"},92530:{"value":"16972","name":"BAMUM LETTER PHASE-E TAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd72"},92531:{"value":"16973","name":"BAMUM LETTER PHASE-E NGKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd73"},92532:{"value":"16974","name":"BAMUM LETTER PHASE-E KPEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd74"},92533:{"value":"16975","name":"BAMUM LETTER PHASE-E WUO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd75"},92534:{"value":"16976","name":"BAMUM LETTER PHASE-E SEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd76"},92535:{"value":"16977","name":"BAMUM LETTER PHASE-E NGGEUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd77"},92536:{"value":"16978","name":"BAMUM LETTER PHASE-E PAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd78"},92537:{"value":"16979","name":"BAMUM LETTER PHASE-E TOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd79"},92538:{"value":"1697A","name":"BAMUM LETTER PHASE-E KUOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd7a"},92539:{"value":"1697B","name":"BAMUM LETTER PHASE-E LOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd7b"},92540:{"value":"1697C","name":"BAMUM LETTER PHASE-E NSHIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd7c"},92541:{"value":"1697D","name":"BAMUM LETTER PHASE-E NGOP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd7d"},92542:{"value":"1697E","name":"BAMUM LETTER PHASE-E MAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd7e"},92543:{"value":"1697F","name":"BAMUM LETTER PHASE-E NGKEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd7f"},92544:{"value":"16980","name":"BAMUM LETTER PHASE-E NGOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd80"},92545:{"value":"16981","name":"BAMUM LETTER PHASE-E NSHUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd81"},92546:{"value":"16982","name":"BAMUM LETTER PHASE-E RIMGBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd82"},92547:{"value":"16983","name":"BAMUM LETTER PHASE-E NJEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd83"},92548:{"value":"16984","name":"BAMUM LETTER PHASE-E PEEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd84"},92549:{"value":"16985","name":"BAMUM LETTER PHASE-E SAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd85"},92550:{"value":"16986","name":"BAMUM LETTER PHASE-E NGGURAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd86"},92551:{"value":"16987","name":"BAMUM LETTER PHASE-E MGBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd87"},92552:{"value":"16988","name":"BAMUM LETTER PHASE-E GHEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd88"},92553:{"value":"16989","name":"BAMUM LETTER PHASE-E NGKEUAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd89"},92554:{"value":"1698A","name":"BAMUM LETTER PHASE-E NJAEMLI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd8a"},92555:{"value":"1698B","name":"BAMUM LETTER PHASE-E MAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd8b"},92556:{"value":"1698C","name":"BAMUM LETTER PHASE-E LOOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd8c"},92557:{"value":"1698D","name":"BAMUM LETTER PHASE-E NGGEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd8d"},92558:{"value":"1698E","name":"BAMUM LETTER PHASE-E NDIQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd8e"},92559:{"value":"1698F","name":"BAMUM LETTER PHASE-E TAEN NTEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd8f"},92560:{"value":"16990","name":"BAMUM LETTER PHASE-E SET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd90"},92561:{"value":"16991","name":"BAMUM LETTER PHASE-E PUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd91"},92562:{"value":"16992","name":"BAMUM LETTER PHASE-E NDAA SOFTNESS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd92"},92563:{"value":"16993","name":"BAMUM LETTER PHASE-E NGGUAESHAE NYAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd93"},92564:{"value":"16994","name":"BAMUM LETTER PHASE-E YIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd94"},92565:{"value":"16995","name":"BAMUM LETTER PHASE-E GHEUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd95"},92566:{"value":"16996","name":"BAMUM LETTER PHASE-E TUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd96"},92567:{"value":"16997","name":"BAMUM LETTER PHASE-E YEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd97"},92568:{"value":"16998","name":"BAMUM LETTER PHASE-E PO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd98"},92569:{"value":"16999","name":"BAMUM LETTER PHASE-E TUMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd99"},92570:{"value":"1699A","name":"BAMUM LETTER PHASE-E KEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd9a"},92571:{"value":"1699B","name":"BAMUM LETTER PHASE-E SUAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd9b"},92572:{"value":"1699C","name":"BAMUM LETTER PHASE-E TEUAEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd9c"},92573:{"value":"1699D","name":"BAMUM LETTER PHASE-E VEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd9d"},92574:{"value":"1699E","name":"BAMUM LETTER PHASE-E WEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd9e"},92575:{"value":"1699F","name":"BAMUM LETTER PHASE-E LAAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udd9f"},92576:{"value":"169A0","name":"BAMUM LETTER PHASE-E PU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda0"},92577:{"value":"169A1","name":"BAMUM LETTER PHASE-E TAAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda1"},92578:{"value":"169A2","name":"BAMUM LETTER PHASE-E GHAAMAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda2"},92579:{"value":"169A3","name":"BAMUM LETTER PHASE-E NGEUREUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda3"},92580:{"value":"169A4","name":"BAMUM LETTER PHASE-E SHEUAEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda4"},92581:{"value":"169A5","name":"BAMUM LETTER PHASE-E MGBEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda5"},92582:{"value":"169A6","name":"BAMUM LETTER PHASE-E MBEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda6"},92583:{"value":"169A7","name":"BAMUM LETTER PHASE-E NZAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda7"},92584:{"value":"169A8","name":"BAMUM LETTER PHASE-E NKOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda8"},92585:{"value":"169A9","name":"BAMUM LETTER PHASE-E GBET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udda9"},92586:{"value":"169AA","name":"BAMUM LETTER PHASE-E TUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddaa"},92587:{"value":"169AB","name":"BAMUM LETTER PHASE-E KUET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddab"},92588:{"value":"169AC","name":"BAMUM LETTER PHASE-E YAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddac"},92589:{"value":"169AD","name":"BAMUM LETTER PHASE-E NYI CLEAVER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddad"},92590:{"value":"169AE","name":"BAMUM LETTER PHASE-E YIT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddae"},92591:{"value":"169AF","name":"BAMUM LETTER PHASE-E MFEUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddaf"},92592:{"value":"169B0","name":"BAMUM LETTER PHASE-E NDIAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb0"},92593:{"value":"169B1","name":"BAMUM LETTER PHASE-E PIEEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb1"},92594:{"value":"169B2","name":"BAMUM LETTER PHASE-E YUEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb2"},92595:{"value":"169B3","name":"BAMUM LETTER PHASE-E LEUAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb3"},92596:{"value":"169B4","name":"BAMUM LETTER PHASE-E FUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb4"},92597:{"value":"169B5","name":"BAMUM LETTER PHASE-E GBEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb5"},92598:{"value":"169B6","name":"BAMUM LETTER PHASE-E NGKUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb6"},92599:{"value":"169B7","name":"BAMUM LETTER PHASE-E KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb7"},92600:{"value":"169B8","name":"BAMUM LETTER PHASE-E MAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb8"},92601:{"value":"169B9","name":"BAMUM LETTER PHASE-E NGKAAMI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddb9"},92602:{"value":"169BA","name":"BAMUM LETTER PHASE-E GHET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddba"},92603:{"value":"169BB","name":"BAMUM LETTER PHASE-E FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddbb"},92604:{"value":"169BC","name":"BAMUM LETTER PHASE-E NTUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddbc"},92605:{"value":"169BD","name":"BAMUM LETTER PHASE-E PEUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddbd"},92606:{"value":"169BE","name":"BAMUM LETTER PHASE-E YEUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddbe"},92607:{"value":"169BF","name":"BAMUM LETTER PHASE-E NGGEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddbf"},92608:{"value":"169C0","name":"BAMUM LETTER PHASE-E NYI BETWEEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc0"},92609:{"value":"169C1","name":"BAMUM LETTER PHASE-E NZUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc1"},92610:{"value":"169C2","name":"BAMUM LETTER PHASE-E POON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc2"},92611:{"value":"169C3","name":"BAMUM LETTER PHASE-E MIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc3"},92612:{"value":"169C4","name":"BAMUM LETTER PHASE-E FUET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc4"},92613:{"value":"169C5","name":"BAMUM LETTER PHASE-E NAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc5"},92614:{"value":"169C6","name":"BAMUM LETTER PHASE-E MUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc6"},92615:{"value":"169C7","name":"BAMUM LETTER PHASE-E GHEUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc7"},92616:{"value":"169C8","name":"BAMUM LETTER PHASE-E FU I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc8"},92617:{"value":"169C9","name":"BAMUM LETTER PHASE-E MVI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddc9"},92618:{"value":"169CA","name":"BAMUM LETTER PHASE-E PUAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddca"},92619:{"value":"169CB","name":"BAMUM LETTER PHASE-E NGKUM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddcb"},92620:{"value":"169CC","name":"BAMUM LETTER PHASE-E KUT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddcc"},92621:{"value":"169CD","name":"BAMUM LETTER PHASE-E PIET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddcd"},92622:{"value":"169CE","name":"BAMUM LETTER PHASE-E NTAP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddce"},92623:{"value":"169CF","name":"BAMUM LETTER PHASE-E YEUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddcf"},92624:{"value":"169D0","name":"BAMUM LETTER PHASE-E NGGUP","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd0"},92625:{"value":"169D1","name":"BAMUM LETTER PHASE-E PA PEOPLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd1"},92626:{"value":"169D2","name":"BAMUM LETTER PHASE-E FU CALL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd2"},92627:{"value":"169D3","name":"BAMUM LETTER PHASE-E FOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd3"},92628:{"value":"169D4","name":"BAMUM LETTER PHASE-E NJEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd4"},92629:{"value":"169D5","name":"BAMUM LETTER PHASE-E A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd5"},92630:{"value":"169D6","name":"BAMUM LETTER PHASE-E TOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd6"},92631:{"value":"169D7","name":"BAMUM LETTER PHASE-E O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd7"},92632:{"value":"169D8","name":"BAMUM LETTER PHASE-E I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd8"},92633:{"value":"169D9","name":"BAMUM LETTER PHASE-E LAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddd9"},92634:{"value":"169DA","name":"BAMUM LETTER PHASE-E PA PLURAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddda"},92635:{"value":"169DB","name":"BAMUM LETTER PHASE-E TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udddb"},92636:{"value":"169DC","name":"BAMUM LETTER PHASE-E TAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udddc"},92637:{"value":"169DD","name":"BAMUM LETTER PHASE-E NDAA MY HOUSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udddd"},92638:{"value":"169DE","name":"BAMUM LETTER PHASE-E SHIQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddde"},92639:{"value":"169DF","name":"BAMUM LETTER PHASE-E YEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udddf"},92640:{"value":"169E0","name":"BAMUM LETTER PHASE-E NGUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde0"},92641:{"value":"169E1","name":"BAMUM LETTER PHASE-E YUAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde1"},92642:{"value":"169E2","name":"BAMUM LETTER PHASE-E YOQ SWIMMING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde2"},92643:{"value":"169E3","name":"BAMUM LETTER PHASE-E YOQ COVER","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde3"},92644:{"value":"169E4","name":"BAMUM LETTER PHASE-E YUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde4"},92645:{"value":"169E5","name":"BAMUM LETTER PHASE-E YUN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde5"},92646:{"value":"169E6","name":"BAMUM LETTER PHASE-E KEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde6"},92647:{"value":"169E7","name":"BAMUM LETTER PHASE-E PEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde7"},92648:{"value":"169E8","name":"BAMUM LETTER PHASE-E NJEE EPOCH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde8"},92649:{"value":"169E9","name":"BAMUM LETTER PHASE-E PUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udde9"},92650:{"value":"169EA","name":"BAMUM LETTER PHASE-E WUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddea"},92651:{"value":"169EB","name":"BAMUM LETTER PHASE-E FEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddeb"},92652:{"value":"169EC","name":"BAMUM LETTER PHASE-E VEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddec"},92653:{"value":"169ED","name":"BAMUM LETTER PHASE-E LU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udded"},92654:{"value":"169EE","name":"BAMUM LETTER PHASE-E MI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddee"},92655:{"value":"169EF","name":"BAMUM LETTER PHASE-E REUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddef"},92656:{"value":"169F0","name":"BAMUM LETTER PHASE-E RAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf0"},92657:{"value":"169F1","name":"BAMUM LETTER PHASE-E NGUAET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf1"},92658:{"value":"169F2","name":"BAMUM LETTER PHASE-E NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf2"},92659:{"value":"169F3","name":"BAMUM LETTER PHASE-E SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf3"},92660:{"value":"169F4","name":"BAMUM LETTER PHASE-E SHOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf4"},92661:{"value":"169F5","name":"BAMUM LETTER PHASE-E FU REMEDY","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf5"},92662:{"value":"169F6","name":"BAMUM LETTER PHASE-E NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf6"},92663:{"value":"169F7","name":"BAMUM LETTER PHASE-E PI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf7"},92664:{"value":"169F8","name":"BAMUM LETTER PHASE-E LOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf8"},92665:{"value":"169F9","name":"BAMUM LETTER PHASE-E KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddf9"},92666:{"value":"169FA","name":"BAMUM LETTER PHASE-E MEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddfa"},92667:{"value":"169FB","name":"BAMUM LETTER PHASE-E MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddfb"},92668:{"value":"169FC","name":"BAMUM LETTER PHASE-E MAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddfc"},92669:{"value":"169FD","name":"BAMUM LETTER PHASE-E TEU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddfd"},92670:{"value":"169FE","name":"BAMUM LETTER PHASE-E KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddfe"},92671:{"value":"169FF","name":"BAMUM LETTER PHASE-E MON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uddff"},92672:{"value":"16A00","name":"BAMUM LETTER PHASE-E TEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude00"},92673:{"value":"16A01","name":"BAMUM LETTER PHASE-E FAQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude01"},92674:{"value":"16A02","name":"BAMUM LETTER PHASE-E GHOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude02"},92675:{"value":"16A03","name":"BAMUM LETTER PHASE-F KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude03"},92676:{"value":"16A04","name":"BAMUM LETTER PHASE-F U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude04"},92677:{"value":"16A05","name":"BAMUM LETTER PHASE-F KU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude05"},92678:{"value":"16A06","name":"BAMUM LETTER PHASE-F EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude06"},92679:{"value":"16A07","name":"BAMUM LETTER PHASE-F REE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude07"},92680:{"value":"16A08","name":"BAMUM LETTER PHASE-F TAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude08"},92681:{"value":"16A09","name":"BAMUM LETTER PHASE-F NYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude09"},92682:{"value":"16A0A","name":"BAMUM LETTER PHASE-F LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude0a"},92683:{"value":"16A0B","name":"BAMUM LETTER PHASE-F RII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude0b"},92684:{"value":"16A0C","name":"BAMUM LETTER PHASE-F RIEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude0c"},92685:{"value":"16A0D","name":"BAMUM LETTER PHASE-F MEEEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude0d"},92686:{"value":"16A0E","name":"BAMUM LETTER PHASE-F TAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude0e"},92687:{"value":"16A0F","name":"BAMUM LETTER PHASE-F NDAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude0f"},92688:{"value":"16A10","name":"BAMUM LETTER PHASE-F NJAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude10"},92689:{"value":"16A11","name":"BAMUM LETTER PHASE-F M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude11"},92690:{"value":"16A12","name":"BAMUM LETTER PHASE-F SUU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude12"},92691:{"value":"16A13","name":"BAMUM LETTER PHASE-F SHII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude13"},92692:{"value":"16A14","name":"BAMUM LETTER PHASE-F SI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude14"},92693:{"value":"16A15","name":"BAMUM LETTER PHASE-F SEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude15"},92694:{"value":"16A16","name":"BAMUM LETTER PHASE-F KYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude16"},92695:{"value":"16A17","name":"BAMUM LETTER PHASE-F KET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude17"},92696:{"value":"16A18","name":"BAMUM LETTER PHASE-F NUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude18"},92697:{"value":"16A19","name":"BAMUM LETTER PHASE-F NU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude19"},92698:{"value":"16A1A","name":"BAMUM LETTER PHASE-F NJUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude1a"},92699:{"value":"16A1B","name":"BAMUM LETTER PHASE-F YOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude1b"},92700:{"value":"16A1C","name":"BAMUM LETTER PHASE-F SHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude1c"},92701:{"value":"16A1D","name":"BAMUM LETTER PHASE-F YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude1d"},92702:{"value":"16A1E","name":"BAMUM LETTER PHASE-F NSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude1e"},92703:{"value":"16A1F","name":"BAMUM LETTER PHASE-F PEUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude1f"},92704:{"value":"16A20","name":"BAMUM LETTER PHASE-F NTEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude20"},92705:{"value":"16A21","name":"BAMUM LETTER PHASE-F WUE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude21"},92706:{"value":"16A22","name":"BAMUM LETTER PHASE-F PEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude22"},92707:{"value":"16A23","name":"BAMUM LETTER PHASE-F RU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude23"},92708:{"value":"16A24","name":"BAMUM LETTER PHASE-F NI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude24"},92709:{"value":"16A25","name":"BAMUM LETTER PHASE-F REUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude25"},92710:{"value":"16A26","name":"BAMUM LETTER PHASE-F KEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude26"},92711:{"value":"16A27","name":"BAMUM LETTER PHASE-F NGKWAEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude27"},92712:{"value":"16A28","name":"BAMUM LETTER PHASE-F NGGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude28"},92713:{"value":"16A29","name":"BAMUM LETTER PHASE-F SHO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude29"},92714:{"value":"16A2A","name":"BAMUM LETTER PHASE-F PUAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude2a"},92715:{"value":"16A2B","name":"BAMUM LETTER PHASE-F FOM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude2b"},92716:{"value":"16A2C","name":"BAMUM LETTER PHASE-F WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude2c"},92717:{"value":"16A2D","name":"BAMUM LETTER PHASE-F LI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude2d"},92718:{"value":"16A2E","name":"BAMUM LETTER PHASE-F LOQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude2e"},92719:{"value":"16A2F","name":"BAMUM LETTER PHASE-F KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude2f"},92720:{"value":"16A30","name":"BAMUM LETTER PHASE-F MBEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude30"},92721:{"value":"16A31","name":"BAMUM LETTER PHASE-F REN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude31"},92722:{"value":"16A32","name":"BAMUM LETTER PHASE-F MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude32"},92723:{"value":"16A33","name":"BAMUM LETTER PHASE-F MO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude33"},92724:{"value":"16A34","name":"BAMUM LETTER PHASE-F MBAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude34"},92725:{"value":"16A35","name":"BAMUM LETTER PHASE-F TET","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude35"},92726:{"value":"16A36","name":"BAMUM LETTER PHASE-F KPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude36"},92727:{"value":"16A37","name":"BAMUM LETTER PHASE-F SAMBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude37"},92728:{"value":"16A38","name":"BAMUM LETTER PHASE-F VUEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude38"},92736:{"value":"16A40","name":"MRO LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude40"},92737:{"value":"16A41","name":"MRO LETTER NGI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude41"},92738:{"value":"16A42","name":"MRO LETTER YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude42"},92739:{"value":"16A43","name":"MRO LETTER MIM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude43"},92740:{"value":"16A44","name":"MRO LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude44"},92741:{"value":"16A45","name":"MRO LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude45"},92742:{"value":"16A46","name":"MRO LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude46"},92743:{"value":"16A47","name":"MRO LETTER PHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude47"},92744:{"value":"16A48","name":"MRO LETTER KHAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude48"},92745:{"value":"16A49","name":"MRO LETTER HAO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude49"},92746:{"value":"16A4A","name":"MRO LETTER DAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude4a"},92747:{"value":"16A4B","name":"MRO LETTER CHU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude4b"},92748:{"value":"16A4C","name":"MRO LETTER KEAAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude4c"},92749:{"value":"16A4D","name":"MRO LETTER OL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude4d"},92750:{"value":"16A4E","name":"MRO LETTER MAEM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude4e"},92751:{"value":"16A4F","name":"MRO LETTER NIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude4f"},92752:{"value":"16A50","name":"MRO LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude50"},92753:{"value":"16A51","name":"MRO LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude51"},92754:{"value":"16A52","name":"MRO LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude52"},92755:{"value":"16A53","name":"MRO LETTER RO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude53"},92756:{"value":"16A54","name":"MRO LETTER SHI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude54"},92757:{"value":"16A55","name":"MRO LETTER THEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude55"},92758:{"value":"16A56","name":"MRO LETTER EA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude56"},92759:{"value":"16A57","name":"MRO LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude57"},92760:{"value":"16A58","name":"MRO LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude58"},92761:{"value":"16A59","name":"MRO LETTER KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude59"},92762:{"value":"16A5A","name":"MRO LETTER LAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude5a"},92763:{"value":"16A5B","name":"MRO LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude5b"},92764:{"value":"16A5C","name":"MRO LETTER HAI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude5c"},92765:{"value":"16A5D","name":"MRO LETTER RI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude5d"},92766:{"value":"16A5E","name":"MRO LETTER TEK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude5e"},92784:{"value":"16A70","name":"TANGSA LETTER OZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude70"},92785:{"value":"16A71","name":"TANGSA LETTER OC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude71"},92786:{"value":"16A72","name":"TANGSA LETTER OQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude72"},92787:{"value":"16A73","name":"TANGSA LETTER OX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude73"},92788:{"value":"16A74","name":"TANGSA LETTER AZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude74"},92789:{"value":"16A75","name":"TANGSA LETTER AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude75"},92790:{"value":"16A76","name":"TANGSA LETTER AQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude76"},92791:{"value":"16A77","name":"TANGSA LETTER AX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude77"},92792:{"value":"16A78","name":"TANGSA LETTER VZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude78"},92793:{"value":"16A79","name":"TANGSA LETTER VC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude79"},92794:{"value":"16A7A","name":"TANGSA LETTER VQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude7a"},92795:{"value":"16A7B","name":"TANGSA LETTER VX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude7b"},92796:{"value":"16A7C","name":"TANGSA LETTER EZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude7c"},92797:{"value":"16A7D","name":"TANGSA LETTER EC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude7d"},92798:{"value":"16A7E","name":"TANGSA LETTER EQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude7e"},92799:{"value":"16A7F","name":"TANGSA LETTER EX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude7f"},92800:{"value":"16A80","name":"TANGSA LETTER IZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude80"},92801:{"value":"16A81","name":"TANGSA LETTER IC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude81"},92802:{"value":"16A82","name":"TANGSA LETTER IQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude82"},92803:{"value":"16A83","name":"TANGSA LETTER IX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude83"},92804:{"value":"16A84","name":"TANGSA LETTER UZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude84"},92805:{"value":"16A85","name":"TANGSA LETTER UC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude85"},92806:{"value":"16A86","name":"TANGSA LETTER UQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude86"},92807:{"value":"16A87","name":"TANGSA LETTER UX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude87"},92808:{"value":"16A88","name":"TANGSA LETTER AWZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude88"},92809:{"value":"16A89","name":"TANGSA LETTER AWC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude89"},92810:{"value":"16A8A","name":"TANGSA LETTER AWQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude8a"},92811:{"value":"16A8B","name":"TANGSA LETTER AWX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude8b"},92812:{"value":"16A8C","name":"TANGSA LETTER UIZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude8c"},92813:{"value":"16A8D","name":"TANGSA LETTER UIC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude8d"},92814:{"value":"16A8E","name":"TANGSA LETTER UIQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude8e"},92815:{"value":"16A8F","name":"TANGSA LETTER UIX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude8f"},92816:{"value":"16A90","name":"TANGSA LETTER FINAL NG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude90"},92817:{"value":"16A91","name":"TANGSA LETTER LONG UEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude91"},92818:{"value":"16A92","name":"TANGSA LETTER SHORT UEZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude92"},92819:{"value":"16A93","name":"TANGSA LETTER SHORT AWX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude93"},92820:{"value":"16A94","name":"TANGSA LETTER UEC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude94"},92821:{"value":"16A95","name":"TANGSA LETTER UEZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude95"},92822:{"value":"16A96","name":"TANGSA LETTER UEQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude96"},92823:{"value":"16A97","name":"TANGSA LETTER UEX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude97"},92824:{"value":"16A98","name":"TANGSA LETTER UIUZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude98"},92825:{"value":"16A99","name":"TANGSA LETTER UIUC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude99"},92826:{"value":"16A9A","name":"TANGSA LETTER UIUQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude9a"},92827:{"value":"16A9B","name":"TANGSA LETTER UIUX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude9b"},92828:{"value":"16A9C","name":"TANGSA LETTER MZ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude9c"},92829:{"value":"16A9D","name":"TANGSA LETTER MC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude9d"},92830:{"value":"16A9E","name":"TANGSA LETTER MQ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude9e"},92831:{"value":"16A9F","name":"TANGSA LETTER MX","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude9f"},92832:{"value":"16AA0","name":"TANGSA LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea0"},92833:{"value":"16AA1","name":"TANGSA LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea1"},92834:{"value":"16AA2","name":"TANGSA LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea2"},92835:{"value":"16AA3","name":"TANGSA LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea3"},92836:{"value":"16AA4","name":"TANGSA LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea4"},92837:{"value":"16AA5","name":"TANGSA LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea5"},92838:{"value":"16AA6","name":"TANGSA LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea6"},92839:{"value":"16AA7","name":"TANGSA LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea7"},92840:{"value":"16AA8","name":"TANGSA LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea8"},92841:{"value":"16AA9","name":"TANGSA LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udea9"},92842:{"value":"16AAA","name":"TANGSA LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeaa"},92843:{"value":"16AAB","name":"TANGSA LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeab"},92844:{"value":"16AAC","name":"TANGSA LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeac"},92845:{"value":"16AAD","name":"TANGSA LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udead"},92846:{"value":"16AAE","name":"TANGSA LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeae"},92847:{"value":"16AAF","name":"TANGSA LETTER HTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeaf"},92848:{"value":"16AB0","name":"TANGSA LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb0"},92849:{"value":"16AB1","name":"TANGSA LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb1"},92850:{"value":"16AB2","name":"TANGSA LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb2"},92851:{"value":"16AB3","name":"TANGSA LETTER NHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb3"},92852:{"value":"16AB4","name":"TANGSA LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb4"},92853:{"value":"16AB5","name":"TANGSA LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb5"},92854:{"value":"16AB6","name":"TANGSA LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb6"},92855:{"value":"16AB7","name":"TANGSA LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb7"},92856:{"value":"16AB8","name":"TANGSA LETTER HTTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb8"},92857:{"value":"16AB9","name":"TANGSA LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeb9"},92858:{"value":"16ABA","name":"TANGSA LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeba"},92859:{"value":"16ABB","name":"TANGSA LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udebb"},92860:{"value":"16ABC","name":"TANGSA LETTER DHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udebc"},92861:{"value":"16ABD","name":"TANGSA LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udebd"},92862:{"value":"16ABE","name":"TANGSA LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udebe"},92880:{"value":"16AD0","name":"BASSA VAH LETTER ENNI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded0"},92881:{"value":"16AD1","name":"BASSA VAH LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded1"},92882:{"value":"16AD2","name":"BASSA VAH LETTER SE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded2"},92883:{"value":"16AD3","name":"BASSA VAH LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded3"},92884:{"value":"16AD4","name":"BASSA VAH LETTER MBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded4"},92885:{"value":"16AD5","name":"BASSA VAH LETTER YIE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded5"},92886:{"value":"16AD6","name":"BASSA VAH LETTER GAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded6"},92887:{"value":"16AD7","name":"BASSA VAH LETTER DHII","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded7"},92888:{"value":"16AD8","name":"BASSA VAH LETTER KPAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded8"},92889:{"value":"16AD9","name":"BASSA VAH LETTER JO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\uded9"},92890:{"value":"16ADA","name":"BASSA VAH LETTER HWAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeda"},92891:{"value":"16ADB","name":"BASSA VAH LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udedb"},92892:{"value":"16ADC","name":"BASSA VAH LETTER ZO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udedc"},92893:{"value":"16ADD","name":"BASSA VAH LETTER GBU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udedd"},92894:{"value":"16ADE","name":"BASSA VAH LETTER DO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udede"},92895:{"value":"16ADF","name":"BASSA VAH LETTER CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udedf"},92896:{"value":"16AE0","name":"BASSA VAH LETTER UWU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee0"},92897:{"value":"16AE1","name":"BASSA VAH LETTER TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee1"},92898:{"value":"16AE2","name":"BASSA VAH LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee2"},92899:{"value":"16AE3","name":"BASSA VAH LETTER VU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee3"},92900:{"value":"16AE4","name":"BASSA VAH LETTER YEIN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee4"},92901:{"value":"16AE5","name":"BASSA VAH LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee5"},92902:{"value":"16AE6","name":"BASSA VAH LETTER WADDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee6"},92903:{"value":"16AE7","name":"BASSA VAH LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee7"},92904:{"value":"16AE8","name":"BASSA VAH LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee8"},92905:{"value":"16AE9","name":"BASSA VAH LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udee9"},92906:{"value":"16AEA","name":"BASSA VAH LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeea"},92907:{"value":"16AEB","name":"BASSA VAH LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeeb"},92908:{"value":"16AEC","name":"BASSA VAH LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeec"},92909:{"value":"16AED","name":"BASSA VAH LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udeed"},92928:{"value":"16B00","name":"PAHAWH HMONG VOWEL KEEB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf00"},92929:{"value":"16B01","name":"PAHAWH HMONG VOWEL KEEV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf01"},92930:{"value":"16B02","name":"PAHAWH HMONG VOWEL KIB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf02"},92931:{"value":"16B03","name":"PAHAWH HMONG VOWEL KIV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf03"},92932:{"value":"16B04","name":"PAHAWH HMONG VOWEL KAUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf04"},92933:{"value":"16B05","name":"PAHAWH HMONG VOWEL KAUV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf05"},92934:{"value":"16B06","name":"PAHAWH HMONG VOWEL KUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf06"},92935:{"value":"16B07","name":"PAHAWH HMONG VOWEL KUV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf07"},92936:{"value":"16B08","name":"PAHAWH HMONG VOWEL KEB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf08"},92937:{"value":"16B09","name":"PAHAWH HMONG VOWEL KEV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf09"},92938:{"value":"16B0A","name":"PAHAWH HMONG VOWEL KAIB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf0a"},92939:{"value":"16B0B","name":"PAHAWH HMONG VOWEL KAIV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf0b"},92940:{"value":"16B0C","name":"PAHAWH HMONG VOWEL KOOB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf0c"},92941:{"value":"16B0D","name":"PAHAWH HMONG VOWEL KOOV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf0d"},92942:{"value":"16B0E","name":"PAHAWH HMONG VOWEL KAWB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf0e"},92943:{"value":"16B0F","name":"PAHAWH HMONG VOWEL KAWV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf0f"},92944:{"value":"16B10","name":"PAHAWH HMONG VOWEL KUAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf10"},92945:{"value":"16B11","name":"PAHAWH HMONG VOWEL KUAV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf11"},92946:{"value":"16B12","name":"PAHAWH HMONG VOWEL KOB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf12"},92947:{"value":"16B13","name":"PAHAWH HMONG VOWEL KOV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf13"},92948:{"value":"16B14","name":"PAHAWH HMONG VOWEL KIAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf14"},92949:{"value":"16B15","name":"PAHAWH HMONG VOWEL KIAV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf15"},92950:{"value":"16B16","name":"PAHAWH HMONG VOWEL KAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf16"},92951:{"value":"16B17","name":"PAHAWH HMONG VOWEL KAV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf17"},92952:{"value":"16B18","name":"PAHAWH HMONG VOWEL KWB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf18"},92953:{"value":"16B19","name":"PAHAWH HMONG VOWEL KWV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf19"},92954:{"value":"16B1A","name":"PAHAWH HMONG VOWEL KAAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf1a"},92955:{"value":"16B1B","name":"PAHAWH HMONG VOWEL KAAV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf1b"},92956:{"value":"16B1C","name":"PAHAWH HMONG CONSONANT VAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf1c"},92957:{"value":"16B1D","name":"PAHAWH HMONG CONSONANT NTSAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf1d"},92958:{"value":"16B1E","name":"PAHAWH HMONG CONSONANT LAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf1e"},92959:{"value":"16B1F","name":"PAHAWH HMONG CONSONANT HAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf1f"},92960:{"value":"16B20","name":"PAHAWH HMONG CONSONANT NLAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf20"},92961:{"value":"16B21","name":"PAHAWH HMONG CONSONANT RAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf21"},92962:{"value":"16B22","name":"PAHAWH HMONG CONSONANT NKAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf22"},92963:{"value":"16B23","name":"PAHAWH HMONG CONSONANT QHAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf23"},92964:{"value":"16B24","name":"PAHAWH HMONG CONSONANT YAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf24"},92965:{"value":"16B25","name":"PAHAWH HMONG CONSONANT HLAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf25"},92966:{"value":"16B26","name":"PAHAWH HMONG CONSONANT MAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf26"},92967:{"value":"16B27","name":"PAHAWH HMONG CONSONANT CHAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf27"},92968:{"value":"16B28","name":"PAHAWH HMONG CONSONANT NCHAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf28"},92969:{"value":"16B29","name":"PAHAWH HMONG CONSONANT HNAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf29"},92970:{"value":"16B2A","name":"PAHAWH HMONG CONSONANT PLHAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf2a"},92971:{"value":"16B2B","name":"PAHAWH HMONG CONSONANT NTHAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf2b"},92972:{"value":"16B2C","name":"PAHAWH HMONG CONSONANT NAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf2c"},92973:{"value":"16B2D","name":"PAHAWH HMONG CONSONANT AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf2d"},92974:{"value":"16B2E","name":"PAHAWH HMONG CONSONANT XAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf2e"},92975:{"value":"16B2F","name":"PAHAWH HMONG CONSONANT CAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf2f"},93027:{"value":"16B63","name":"PAHAWH HMONG SIGN VOS LUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf63"},93028:{"value":"16B64","name":"PAHAWH HMONG SIGN XYOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf64"},93029:{"value":"16B65","name":"PAHAWH HMONG SIGN HLI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf65"},93030:{"value":"16B66","name":"PAHAWH HMONG SIGN THIRD-STAGE HLI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf66"},93031:{"value":"16B67","name":"PAHAWH HMONG SIGN ZWJ THAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf67"},93032:{"value":"16B68","name":"PAHAWH HMONG SIGN HNUB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf68"},93033:{"value":"16B69","name":"PAHAWH HMONG SIGN NQIG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf69"},93034:{"value":"16B6A","name":"PAHAWH HMONG SIGN XIAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf6a"},93035:{"value":"16B6B","name":"PAHAWH HMONG SIGN NTUJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf6b"},93036:{"value":"16B6C","name":"PAHAWH HMONG SIGN AV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf6c"},93037:{"value":"16B6D","name":"PAHAWH HMONG SIGN TXHEEJ CEEV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf6d"},93038:{"value":"16B6E","name":"PAHAWH HMONG SIGN MEEJ TSEEB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf6e"},93039:{"value":"16B6F","name":"PAHAWH HMONG SIGN TAU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf6f"},93040:{"value":"16B70","name":"PAHAWH HMONG SIGN LOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf70"},93041:{"value":"16B71","name":"PAHAWH HMONG SIGN MUS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf71"},93042:{"value":"16B72","name":"PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf72"},93043:{"value":"16B73","name":"PAHAWH HMONG SIGN CIM CUAM TSHOOJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf73"},93044:{"value":"16B74","name":"PAHAWH HMONG SIGN CIM TXWV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf74"},93045:{"value":"16B75","name":"PAHAWH HMONG SIGN CIM TXWV CHWV","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf75"},93046:{"value":"16B76","name":"PAHAWH HMONG SIGN CIM PUB DAWB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf76"},93047:{"value":"16B77","name":"PAHAWH HMONG SIGN CIM NRES TOS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf77"},93053:{"value":"16B7D","name":"PAHAWH HMONG CLAN SIGN TSHEEJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf7d"},93054:{"value":"16B7E","name":"PAHAWH HMONG CLAN SIGN YEEG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf7e"},93055:{"value":"16B7F","name":"PAHAWH HMONG CLAN SIGN LIS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf7f"},93056:{"value":"16B80","name":"PAHAWH HMONG CLAN SIGN LAUJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf80"},93057:{"value":"16B81","name":"PAHAWH HMONG CLAN SIGN XYOOJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf81"},93058:{"value":"16B82","name":"PAHAWH HMONG CLAN SIGN KOO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf82"},93059:{"value":"16B83","name":"PAHAWH HMONG CLAN SIGN HAWJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf83"},93060:{"value":"16B84","name":"PAHAWH HMONG CLAN SIGN MUAS","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf84"},93061:{"value":"16B85","name":"PAHAWH HMONG CLAN SIGN THOJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf85"},93062:{"value":"16B86","name":"PAHAWH HMONG CLAN SIGN TSAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf86"},93063:{"value":"16B87","name":"PAHAWH HMONG CLAN SIGN PHAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf87"},93064:{"value":"16B88","name":"PAHAWH HMONG CLAN SIGN KHAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf88"},93065:{"value":"16B89","name":"PAHAWH HMONG CLAN SIGN HAM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf89"},93066:{"value":"16B8A","name":"PAHAWH HMONG CLAN SIGN VAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf8a"},93067:{"value":"16B8B","name":"PAHAWH HMONG CLAN SIGN FAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf8b"},93068:{"value":"16B8C","name":"PAHAWH HMONG CLAN SIGN YAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf8c"},93069:{"value":"16B8D","name":"PAHAWH HMONG CLAN SIGN TSWB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf8d"},93070:{"value":"16B8E","name":"PAHAWH HMONG CLAN SIGN KWM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf8e"},93071:{"value":"16B8F","name":"PAHAWH HMONG CLAN SIGN VWJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf8f"},93952:{"value":"16F00","name":"MIAO LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf00"},93953:{"value":"16F01","name":"MIAO LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf01"},93954:{"value":"16F02","name":"MIAO LETTER YI PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf02"},93955:{"value":"16F03","name":"MIAO LETTER PLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf03"},93956:{"value":"16F04","name":"MIAO LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf04"},93957:{"value":"16F05","name":"MIAO LETTER MHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf05"},93958:{"value":"16F06","name":"MIAO LETTER ARCHAIC MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf06"},93959:{"value":"16F07","name":"MIAO LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf07"},93960:{"value":"16F08","name":"MIAO LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf08"},93961:{"value":"16F09","name":"MIAO LETTER VFA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf09"},93962:{"value":"16F0A","name":"MIAO LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf0a"},93963:{"value":"16F0B","name":"MIAO LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf0b"},93964:{"value":"16F0C","name":"MIAO LETTER YI TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf0c"},93965:{"value":"16F0D","name":"MIAO LETTER YI TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf0d"},93966:{"value":"16F0E","name":"MIAO LETTER TTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf0e"},93967:{"value":"16F0F","name":"MIAO LETTER DDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf0f"},93968:{"value":"16F10","name":"MIAO LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf10"},93969:{"value":"16F11","name":"MIAO LETTER NHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf11"},93970:{"value":"16F12","name":"MIAO LETTER YI NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf12"},93971:{"value":"16F13","name":"MIAO LETTER ARCHAIC NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf13"},93972:{"value":"16F14","name":"MIAO LETTER NNA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf14"},93973:{"value":"16F15","name":"MIAO LETTER NNHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf15"},93974:{"value":"16F16","name":"MIAO LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf16"},93975:{"value":"16F17","name":"MIAO LETTER LYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf17"},93976:{"value":"16F18","name":"MIAO LETTER LHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf18"},93977:{"value":"16F19","name":"MIAO LETTER LHYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf19"},93978:{"value":"16F1A","name":"MIAO LETTER TLHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf1a"},93979:{"value":"16F1B","name":"MIAO LETTER DLHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf1b"},93980:{"value":"16F1C","name":"MIAO LETTER TLHYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf1c"},93981:{"value":"16F1D","name":"MIAO LETTER DLHYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf1d"},93982:{"value":"16F1E","name":"MIAO LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf1e"},93983:{"value":"16F1F","name":"MIAO LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf1f"},93984:{"value":"16F20","name":"MIAO LETTER YI KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf20"},93985:{"value":"16F21","name":"MIAO LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf21"},93986:{"value":"16F22","name":"MIAO LETTER QGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf22"},93987:{"value":"16F23","name":"MIAO LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf23"},93988:{"value":"16F24","name":"MIAO LETTER NGHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf24"},93989:{"value":"16F25","name":"MIAO LETTER ARCHAIC NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf25"},93990:{"value":"16F26","name":"MIAO LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf26"},93991:{"value":"16F27","name":"MIAO LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf27"},93992:{"value":"16F28","name":"MIAO LETTER GHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf28"},93993:{"value":"16F29","name":"MIAO LETTER GHHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf29"},93994:{"value":"16F2A","name":"MIAO LETTER TSSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf2a"},93995:{"value":"16F2B","name":"MIAO LETTER DZZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf2b"},93996:{"value":"16F2C","name":"MIAO LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf2c"},93997:{"value":"16F2D","name":"MIAO LETTER NYHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf2d"},93998:{"value":"16F2E","name":"MIAO LETTER TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf2e"},93999:{"value":"16F2F","name":"MIAO LETTER DZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf2f"},94000:{"value":"16F30","name":"MIAO LETTER YI TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf30"},94001:{"value":"16F31","name":"MIAO LETTER YI DZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf31"},94002:{"value":"16F32","name":"MIAO LETTER REFORMED TSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf32"},94003:{"value":"16F33","name":"MIAO LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf33"},94004:{"value":"16F34","name":"MIAO LETTER SSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf34"},94005:{"value":"16F35","name":"MIAO LETTER ZHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf35"},94006:{"value":"16F36","name":"MIAO LETTER ZSHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf36"},94007:{"value":"16F37","name":"MIAO LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf37"},94008:{"value":"16F38","name":"MIAO LETTER DZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf38"},94009:{"value":"16F39","name":"MIAO LETTER YI TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf39"},94010:{"value":"16F3A","name":"MIAO LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf3a"},94011:{"value":"16F3B","name":"MIAO LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf3b"},94012:{"value":"16F3C","name":"MIAO LETTER ZSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf3c"},94013:{"value":"16F3D","name":"MIAO LETTER ZZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf3d"},94014:{"value":"16F3E","name":"MIAO LETTER ZZSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf3e"},94015:{"value":"16F3F","name":"MIAO LETTER ARCHAIC ZZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf3f"},94016:{"value":"16F40","name":"MIAO LETTER ZZYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf40"},94017:{"value":"16F41","name":"MIAO LETTER ZZSYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf41"},94018:{"value":"16F42","name":"MIAO LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf42"},94019:{"value":"16F43","name":"MIAO LETTER AH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf43"},94020:{"value":"16F44","name":"MIAO LETTER HHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf44"},94021:{"value":"16F45","name":"MIAO LETTER BRI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf45"},94022:{"value":"16F46","name":"MIAO LETTER SYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf46"},94023:{"value":"16F47","name":"MIAO LETTER DZYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf47"},94024:{"value":"16F48","name":"MIAO LETTER TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf48"},94025:{"value":"16F49","name":"MIAO LETTER TSE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf49"},94026:{"value":"16F4A","name":"MIAO LETTER RTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf4a"},94032:{"value":"16F50","name":"MIAO LETTER NASALIZATION","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf50"},94208:{"value":"17000","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81c\udc00"},100343:{"value":"187F7","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud821\udff7"},100352:{"value":"18800","name":"TANGUT COMPONENT-001","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc00"},100353:{"value":"18801","name":"TANGUT COMPONENT-002","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc01"},100354:{"value":"18802","name":"TANGUT COMPONENT-003","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc02"},100355:{"value":"18803","name":"TANGUT COMPONENT-004","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc03"},100356:{"value":"18804","name":"TANGUT COMPONENT-005","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc04"},100357:{"value":"18805","name":"TANGUT COMPONENT-006","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc05"},100358:{"value":"18806","name":"TANGUT COMPONENT-007","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc06"},100359:{"value":"18807","name":"TANGUT COMPONENT-008","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc07"},100360:{"value":"18808","name":"TANGUT COMPONENT-009","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc08"},100361:{"value":"18809","name":"TANGUT COMPONENT-010","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc09"},100362:{"value":"1880A","name":"TANGUT COMPONENT-011","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc0a"},100363:{"value":"1880B","name":"TANGUT COMPONENT-012","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc0b"},100364:{"value":"1880C","name":"TANGUT COMPONENT-013","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc0c"},100365:{"value":"1880D","name":"TANGUT COMPONENT-014","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc0d"},100366:{"value":"1880E","name":"TANGUT COMPONENT-015","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc0e"},100367:{"value":"1880F","name":"TANGUT COMPONENT-016","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc0f"},100368:{"value":"18810","name":"TANGUT COMPONENT-017","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc10"},100369:{"value":"18811","name":"TANGUT COMPONENT-018","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc11"},100370:{"value":"18812","name":"TANGUT COMPONENT-019","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc12"},100371:{"value":"18813","name":"TANGUT COMPONENT-020","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc13"},100372:{"value":"18814","name":"TANGUT COMPONENT-021","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc14"},100373:{"value":"18815","name":"TANGUT COMPONENT-022","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc15"},100374:{"value":"18816","name":"TANGUT COMPONENT-023","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc16"},100375:{"value":"18817","name":"TANGUT COMPONENT-024","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc17"},100376:{"value":"18818","name":"TANGUT COMPONENT-025","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc18"},100377:{"value":"18819","name":"TANGUT COMPONENT-026","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc19"},100378:{"value":"1881A","name":"TANGUT COMPONENT-027","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc1a"},100379:{"value":"1881B","name":"TANGUT COMPONENT-028","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc1b"},100380:{"value":"1881C","name":"TANGUT COMPONENT-029","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc1c"},100381:{"value":"1881D","name":"TANGUT COMPONENT-030","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc1d"},100382:{"value":"1881E","name":"TANGUT COMPONENT-031","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc1e"},100383:{"value":"1881F","name":"TANGUT COMPONENT-032","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc1f"},100384:{"value":"18820","name":"TANGUT COMPONENT-033","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc20"},100385:{"value":"18821","name":"TANGUT COMPONENT-034","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc21"},100386:{"value":"18822","name":"TANGUT COMPONENT-035","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc22"},100387:{"value":"18823","name":"TANGUT COMPONENT-036","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc23"},100388:{"value":"18824","name":"TANGUT COMPONENT-037","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc24"},100389:{"value":"18825","name":"TANGUT COMPONENT-038","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc25"},100390:{"value":"18826","name":"TANGUT COMPONENT-039","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc26"},100391:{"value":"18827","name":"TANGUT COMPONENT-040","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc27"},100392:{"value":"18828","name":"TANGUT COMPONENT-041","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc28"},100393:{"value":"18829","name":"TANGUT COMPONENT-042","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc29"},100394:{"value":"1882A","name":"TANGUT COMPONENT-043","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc2a"},100395:{"value":"1882B","name":"TANGUT COMPONENT-044","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc2b"},100396:{"value":"1882C","name":"TANGUT COMPONENT-045","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc2c"},100397:{"value":"1882D","name":"TANGUT COMPONENT-046","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc2d"},100398:{"value":"1882E","name":"TANGUT COMPONENT-047","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc2e"},100399:{"value":"1882F","name":"TANGUT COMPONENT-048","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc2f"},100400:{"value":"18830","name":"TANGUT COMPONENT-049","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc30"},100401:{"value":"18831","name":"TANGUT COMPONENT-050","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc31"},100402:{"value":"18832","name":"TANGUT COMPONENT-051","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc32"},100403:{"value":"18833","name":"TANGUT COMPONENT-052","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc33"},100404:{"value":"18834","name":"TANGUT COMPONENT-053","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc34"},100405:{"value":"18835","name":"TANGUT COMPONENT-054","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc35"},100406:{"value":"18836","name":"TANGUT COMPONENT-055","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc36"},100407:{"value":"18837","name":"TANGUT COMPONENT-056","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc37"},100408:{"value":"18838","name":"TANGUT COMPONENT-057","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc38"},100409:{"value":"18839","name":"TANGUT COMPONENT-058","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc39"},100410:{"value":"1883A","name":"TANGUT COMPONENT-059","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc3a"},100411:{"value":"1883B","name":"TANGUT COMPONENT-060","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc3b"},100412:{"value":"1883C","name":"TANGUT COMPONENT-061","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc3c"},100413:{"value":"1883D","name":"TANGUT COMPONENT-062","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc3d"},100414:{"value":"1883E","name":"TANGUT COMPONENT-063","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc3e"},100415:{"value":"1883F","name":"TANGUT COMPONENT-064","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc3f"},100416:{"value":"18840","name":"TANGUT COMPONENT-065","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc40"},100417:{"value":"18841","name":"TANGUT COMPONENT-066","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc41"},100418:{"value":"18842","name":"TANGUT COMPONENT-067","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc42"},100419:{"value":"18843","name":"TANGUT COMPONENT-068","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc43"},100420:{"value":"18844","name":"TANGUT COMPONENT-069","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc44"},100421:{"value":"18845","name":"TANGUT COMPONENT-070","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc45"},100422:{"value":"18846","name":"TANGUT COMPONENT-071","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc46"},100423:{"value":"18847","name":"TANGUT COMPONENT-072","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc47"},100424:{"value":"18848","name":"TANGUT COMPONENT-073","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc48"},100425:{"value":"18849","name":"TANGUT COMPONENT-074","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc49"},100426:{"value":"1884A","name":"TANGUT COMPONENT-075","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc4a"},100427:{"value":"1884B","name":"TANGUT COMPONENT-076","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc4b"},100428:{"value":"1884C","name":"TANGUT COMPONENT-077","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc4c"},100429:{"value":"1884D","name":"TANGUT COMPONENT-078","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc4d"},100430:{"value":"1884E","name":"TANGUT COMPONENT-079","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc4e"},100431:{"value":"1884F","name":"TANGUT COMPONENT-080","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc4f"},100432:{"value":"18850","name":"TANGUT COMPONENT-081","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc50"},100433:{"value":"18851","name":"TANGUT COMPONENT-082","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc51"},100434:{"value":"18852","name":"TANGUT COMPONENT-083","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc52"},100435:{"value":"18853","name":"TANGUT COMPONENT-084","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc53"},100436:{"value":"18854","name":"TANGUT COMPONENT-085","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc54"},100437:{"value":"18855","name":"TANGUT COMPONENT-086","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc55"},100438:{"value":"18856","name":"TANGUT COMPONENT-087","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc56"},100439:{"value":"18857","name":"TANGUT COMPONENT-088","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc57"},100440:{"value":"18858","name":"TANGUT COMPONENT-089","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc58"},100441:{"value":"18859","name":"TANGUT COMPONENT-090","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc59"},100442:{"value":"1885A","name":"TANGUT COMPONENT-091","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc5a"},100443:{"value":"1885B","name":"TANGUT COMPONENT-092","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc5b"},100444:{"value":"1885C","name":"TANGUT COMPONENT-093","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc5c"},100445:{"value":"1885D","name":"TANGUT COMPONENT-094","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc5d"},100446:{"value":"1885E","name":"TANGUT COMPONENT-095","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc5e"},100447:{"value":"1885F","name":"TANGUT COMPONENT-096","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc5f"},100448:{"value":"18860","name":"TANGUT COMPONENT-097","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc60"},100449:{"value":"18861","name":"TANGUT COMPONENT-098","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc61"},100450:{"value":"18862","name":"TANGUT COMPONENT-099","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc62"},100451:{"value":"18863","name":"TANGUT COMPONENT-100","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc63"},100452:{"value":"18864","name":"TANGUT COMPONENT-101","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc64"},100453:{"value":"18865","name":"TANGUT COMPONENT-102","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc65"},100454:{"value":"18866","name":"TANGUT COMPONENT-103","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc66"},100455:{"value":"18867","name":"TANGUT COMPONENT-104","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc67"},100456:{"value":"18868","name":"TANGUT COMPONENT-105","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc68"},100457:{"value":"18869","name":"TANGUT COMPONENT-106","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc69"},100458:{"value":"1886A","name":"TANGUT COMPONENT-107","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc6a"},100459:{"value":"1886B","name":"TANGUT COMPONENT-108","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc6b"},100460:{"value":"1886C","name":"TANGUT COMPONENT-109","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc6c"},100461:{"value":"1886D","name":"TANGUT COMPONENT-110","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc6d"},100462:{"value":"1886E","name":"TANGUT COMPONENT-111","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc6e"},100463:{"value":"1886F","name":"TANGUT COMPONENT-112","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc6f"},100464:{"value":"18870","name":"TANGUT COMPONENT-113","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc70"},100465:{"value":"18871","name":"TANGUT COMPONENT-114","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc71"},100466:{"value":"18872","name":"TANGUT COMPONENT-115","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc72"},100467:{"value":"18873","name":"TANGUT COMPONENT-116","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc73"},100468:{"value":"18874","name":"TANGUT COMPONENT-117","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc74"},100469:{"value":"18875","name":"TANGUT COMPONENT-118","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc75"},100470:{"value":"18876","name":"TANGUT COMPONENT-119","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc76"},100471:{"value":"18877","name":"TANGUT COMPONENT-120","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc77"},100472:{"value":"18878","name":"TANGUT COMPONENT-121","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc78"},100473:{"value":"18879","name":"TANGUT COMPONENT-122","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc79"},100474:{"value":"1887A","name":"TANGUT COMPONENT-123","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc7a"},100475:{"value":"1887B","name":"TANGUT COMPONENT-124","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc7b"},100476:{"value":"1887C","name":"TANGUT COMPONENT-125","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc7c"},100477:{"value":"1887D","name":"TANGUT COMPONENT-126","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc7d"},100478:{"value":"1887E","name":"TANGUT COMPONENT-127","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc7e"},100479:{"value":"1887F","name":"TANGUT COMPONENT-128","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc7f"},100480:{"value":"18880","name":"TANGUT COMPONENT-129","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc80"},100481:{"value":"18881","name":"TANGUT COMPONENT-130","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc81"},100482:{"value":"18882","name":"TANGUT COMPONENT-131","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc82"},100483:{"value":"18883","name":"TANGUT COMPONENT-132","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc83"},100484:{"value":"18884","name":"TANGUT COMPONENT-133","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc84"},100485:{"value":"18885","name":"TANGUT COMPONENT-134","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc85"},100486:{"value":"18886","name":"TANGUT COMPONENT-135","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc86"},100487:{"value":"18887","name":"TANGUT COMPONENT-136","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc87"},100488:{"value":"18888","name":"TANGUT COMPONENT-137","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc88"},100489:{"value":"18889","name":"TANGUT COMPONENT-138","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc89"},100490:{"value":"1888A","name":"TANGUT COMPONENT-139","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc8a"},100491:{"value":"1888B","name":"TANGUT COMPONENT-140","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc8b"},100492:{"value":"1888C","name":"TANGUT COMPONENT-141","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc8c"},100493:{"value":"1888D","name":"TANGUT COMPONENT-142","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc8d"},100494:{"value":"1888E","name":"TANGUT COMPONENT-143","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc8e"},100495:{"value":"1888F","name":"TANGUT COMPONENT-144","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc8f"},100496:{"value":"18890","name":"TANGUT COMPONENT-145","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc90"},100497:{"value":"18891","name":"TANGUT COMPONENT-146","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc91"},100498:{"value":"18892","name":"TANGUT COMPONENT-147","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc92"},100499:{"value":"18893","name":"TANGUT COMPONENT-148","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc93"},100500:{"value":"18894","name":"TANGUT COMPONENT-149","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc94"},100501:{"value":"18895","name":"TANGUT COMPONENT-150","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc95"},100502:{"value":"18896","name":"TANGUT COMPONENT-151","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc96"},100503:{"value":"18897","name":"TANGUT COMPONENT-152","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc97"},100504:{"value":"18898","name":"TANGUT COMPONENT-153","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc98"},100505:{"value":"18899","name":"TANGUT COMPONENT-154","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc99"},100506:{"value":"1889A","name":"TANGUT COMPONENT-155","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc9a"},100507:{"value":"1889B","name":"TANGUT COMPONENT-156","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc9b"},100508:{"value":"1889C","name":"TANGUT COMPONENT-157","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc9c"},100509:{"value":"1889D","name":"TANGUT COMPONENT-158","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc9d"},100510:{"value":"1889E","name":"TANGUT COMPONENT-159","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc9e"},100511:{"value":"1889F","name":"TANGUT COMPONENT-160","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udc9f"},100512:{"value":"188A0","name":"TANGUT COMPONENT-161","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca0"},100513:{"value":"188A1","name":"TANGUT COMPONENT-162","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca1"},100514:{"value":"188A2","name":"TANGUT COMPONENT-163","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca2"},100515:{"value":"188A3","name":"TANGUT COMPONENT-164","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca3"},100516:{"value":"188A4","name":"TANGUT COMPONENT-165","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca4"},100517:{"value":"188A5","name":"TANGUT COMPONENT-166","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca5"},100518:{"value":"188A6","name":"TANGUT COMPONENT-167","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca6"},100519:{"value":"188A7","name":"TANGUT COMPONENT-168","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca7"},100520:{"value":"188A8","name":"TANGUT COMPONENT-169","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca8"},100521:{"value":"188A9","name":"TANGUT COMPONENT-170","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udca9"},100522:{"value":"188AA","name":"TANGUT COMPONENT-171","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcaa"},100523:{"value":"188AB","name":"TANGUT COMPONENT-172","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcab"},100524:{"value":"188AC","name":"TANGUT COMPONENT-173","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcac"},100525:{"value":"188AD","name":"TANGUT COMPONENT-174","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcad"},100526:{"value":"188AE","name":"TANGUT COMPONENT-175","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcae"},100527:{"value":"188AF","name":"TANGUT COMPONENT-176","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcaf"},100528:{"value":"188B0","name":"TANGUT COMPONENT-177","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb0"},100529:{"value":"188B1","name":"TANGUT COMPONENT-178","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb1"},100530:{"value":"188B2","name":"TANGUT COMPONENT-179","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb2"},100531:{"value":"188B3","name":"TANGUT COMPONENT-180","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb3"},100532:{"value":"188B4","name":"TANGUT COMPONENT-181","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb4"},100533:{"value":"188B5","name":"TANGUT COMPONENT-182","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb5"},100534:{"value":"188B6","name":"TANGUT COMPONENT-183","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb6"},100535:{"value":"188B7","name":"TANGUT COMPONENT-184","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb7"},100536:{"value":"188B8","name":"TANGUT COMPONENT-185","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb8"},100537:{"value":"188B9","name":"TANGUT COMPONENT-186","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcb9"},100538:{"value":"188BA","name":"TANGUT COMPONENT-187","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcba"},100539:{"value":"188BB","name":"TANGUT COMPONENT-188","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcbb"},100540:{"value":"188BC","name":"TANGUT COMPONENT-189","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcbc"},100541:{"value":"188BD","name":"TANGUT COMPONENT-190","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcbd"},100542:{"value":"188BE","name":"TANGUT COMPONENT-191","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcbe"},100543:{"value":"188BF","name":"TANGUT COMPONENT-192","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcbf"},100544:{"value":"188C0","name":"TANGUT COMPONENT-193","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc0"},100545:{"value":"188C1","name":"TANGUT COMPONENT-194","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc1"},100546:{"value":"188C2","name":"TANGUT COMPONENT-195","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc2"},100547:{"value":"188C3","name":"TANGUT COMPONENT-196","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc3"},100548:{"value":"188C4","name":"TANGUT COMPONENT-197","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc4"},100549:{"value":"188C5","name":"TANGUT COMPONENT-198","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc5"},100550:{"value":"188C6","name":"TANGUT COMPONENT-199","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc6"},100551:{"value":"188C7","name":"TANGUT COMPONENT-200","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc7"},100552:{"value":"188C8","name":"TANGUT COMPONENT-201","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc8"},100553:{"value":"188C9","name":"TANGUT COMPONENT-202","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcc9"},100554:{"value":"188CA","name":"TANGUT COMPONENT-203","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcca"},100555:{"value":"188CB","name":"TANGUT COMPONENT-204","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udccb"},100556:{"value":"188CC","name":"TANGUT COMPONENT-205","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udccc"},100557:{"value":"188CD","name":"TANGUT COMPONENT-206","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udccd"},100558:{"value":"188CE","name":"TANGUT COMPONENT-207","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcce"},100559:{"value":"188CF","name":"TANGUT COMPONENT-208","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udccf"},100560:{"value":"188D0","name":"TANGUT COMPONENT-209","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd0"},100561:{"value":"188D1","name":"TANGUT COMPONENT-210","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd1"},100562:{"value":"188D2","name":"TANGUT COMPONENT-211","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd2"},100563:{"value":"188D3","name":"TANGUT COMPONENT-212","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd3"},100564:{"value":"188D4","name":"TANGUT COMPONENT-213","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd4"},100565:{"value":"188D5","name":"TANGUT COMPONENT-214","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd5"},100566:{"value":"188D6","name":"TANGUT COMPONENT-215","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd6"},100567:{"value":"188D7","name":"TANGUT COMPONENT-216","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd7"},100568:{"value":"188D8","name":"TANGUT COMPONENT-217","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd8"},100569:{"value":"188D9","name":"TANGUT COMPONENT-218","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcd9"},100570:{"value":"188DA","name":"TANGUT COMPONENT-219","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcda"},100571:{"value":"188DB","name":"TANGUT COMPONENT-220","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcdb"},100572:{"value":"188DC","name":"TANGUT COMPONENT-221","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcdc"},100573:{"value":"188DD","name":"TANGUT COMPONENT-222","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcdd"},100574:{"value":"188DE","name":"TANGUT COMPONENT-223","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcde"},100575:{"value":"188DF","name":"TANGUT COMPONENT-224","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcdf"},100576:{"value":"188E0","name":"TANGUT COMPONENT-225","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce0"},100577:{"value":"188E1","name":"TANGUT COMPONENT-226","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce1"},100578:{"value":"188E2","name":"TANGUT COMPONENT-227","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce2"},100579:{"value":"188E3","name":"TANGUT COMPONENT-228","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce3"},100580:{"value":"188E4","name":"TANGUT COMPONENT-229","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce4"},100581:{"value":"188E5","name":"TANGUT COMPONENT-230","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce5"},100582:{"value":"188E6","name":"TANGUT COMPONENT-231","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce6"},100583:{"value":"188E7","name":"TANGUT COMPONENT-232","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce7"},100584:{"value":"188E8","name":"TANGUT COMPONENT-233","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce8"},100585:{"value":"188E9","name":"TANGUT COMPONENT-234","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udce9"},100586:{"value":"188EA","name":"TANGUT COMPONENT-235","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcea"},100587:{"value":"188EB","name":"TANGUT COMPONENT-236","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udceb"},100588:{"value":"188EC","name":"TANGUT COMPONENT-237","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcec"},100589:{"value":"188ED","name":"TANGUT COMPONENT-238","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udced"},100590:{"value":"188EE","name":"TANGUT COMPONENT-239","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcee"},100591:{"value":"188EF","name":"TANGUT COMPONENT-240","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcef"},100592:{"value":"188F0","name":"TANGUT COMPONENT-241","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf0"},100593:{"value":"188F1","name":"TANGUT COMPONENT-242","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf1"},100594:{"value":"188F2","name":"TANGUT COMPONENT-243","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf2"},100595:{"value":"188F3","name":"TANGUT COMPONENT-244","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf3"},100596:{"value":"188F4","name":"TANGUT COMPONENT-245","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf4"},100597:{"value":"188F5","name":"TANGUT COMPONENT-246","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf5"},100598:{"value":"188F6","name":"TANGUT COMPONENT-247","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf6"},100599:{"value":"188F7","name":"TANGUT COMPONENT-248","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf7"},100600:{"value":"188F8","name":"TANGUT COMPONENT-249","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf8"},100601:{"value":"188F9","name":"TANGUT COMPONENT-250","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcf9"},100602:{"value":"188FA","name":"TANGUT COMPONENT-251","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcfa"},100603:{"value":"188FB","name":"TANGUT COMPONENT-252","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcfb"},100604:{"value":"188FC","name":"TANGUT COMPONENT-253","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcfc"},100605:{"value":"188FD","name":"TANGUT COMPONENT-254","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcfd"},100606:{"value":"188FE","name":"TANGUT COMPONENT-255","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcfe"},100607:{"value":"188FF","name":"TANGUT COMPONENT-256","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udcff"},100608:{"value":"18900","name":"TANGUT COMPONENT-257","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd00"},100609:{"value":"18901","name":"TANGUT COMPONENT-258","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd01"},100610:{"value":"18902","name":"TANGUT COMPONENT-259","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd02"},100611:{"value":"18903","name":"TANGUT COMPONENT-260","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd03"},100612:{"value":"18904","name":"TANGUT COMPONENT-261","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd04"},100613:{"value":"18905","name":"TANGUT COMPONENT-262","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd05"},100614:{"value":"18906","name":"TANGUT COMPONENT-263","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd06"},100615:{"value":"18907","name":"TANGUT COMPONENT-264","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd07"},100616:{"value":"18908","name":"TANGUT COMPONENT-265","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd08"},100617:{"value":"18909","name":"TANGUT COMPONENT-266","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd09"},100618:{"value":"1890A","name":"TANGUT COMPONENT-267","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd0a"},100619:{"value":"1890B","name":"TANGUT COMPONENT-268","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd0b"},100620:{"value":"1890C","name":"TANGUT COMPONENT-269","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd0c"},100621:{"value":"1890D","name":"TANGUT COMPONENT-270","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd0d"},100622:{"value":"1890E","name":"TANGUT COMPONENT-271","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd0e"},100623:{"value":"1890F","name":"TANGUT COMPONENT-272","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd0f"},100624:{"value":"18910","name":"TANGUT COMPONENT-273","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd10"},100625:{"value":"18911","name":"TANGUT COMPONENT-274","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd11"},100626:{"value":"18912","name":"TANGUT COMPONENT-275","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd12"},100627:{"value":"18913","name":"TANGUT COMPONENT-276","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd13"},100628:{"value":"18914","name":"TANGUT COMPONENT-277","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd14"},100629:{"value":"18915","name":"TANGUT COMPONENT-278","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd15"},100630:{"value":"18916","name":"TANGUT COMPONENT-279","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd16"},100631:{"value":"18917","name":"TANGUT COMPONENT-280","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd17"},100632:{"value":"18918","name":"TANGUT COMPONENT-281","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd18"},100633:{"value":"18919","name":"TANGUT COMPONENT-282","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd19"},100634:{"value":"1891A","name":"TANGUT COMPONENT-283","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd1a"},100635:{"value":"1891B","name":"TANGUT COMPONENT-284","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd1b"},100636:{"value":"1891C","name":"TANGUT COMPONENT-285","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd1c"},100637:{"value":"1891D","name":"TANGUT COMPONENT-286","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd1d"},100638:{"value":"1891E","name":"TANGUT COMPONENT-287","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd1e"},100639:{"value":"1891F","name":"TANGUT COMPONENT-288","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd1f"},100640:{"value":"18920","name":"TANGUT COMPONENT-289","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd20"},100641:{"value":"18921","name":"TANGUT COMPONENT-290","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd21"},100642:{"value":"18922","name":"TANGUT COMPONENT-291","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd22"},100643:{"value":"18923","name":"TANGUT COMPONENT-292","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd23"},100644:{"value":"18924","name":"TANGUT COMPONENT-293","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd24"},100645:{"value":"18925","name":"TANGUT COMPONENT-294","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd25"},100646:{"value":"18926","name":"TANGUT COMPONENT-295","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd26"},100647:{"value":"18927","name":"TANGUT COMPONENT-296","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd27"},100648:{"value":"18928","name":"TANGUT COMPONENT-297","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd28"},100649:{"value":"18929","name":"TANGUT COMPONENT-298","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd29"},100650:{"value":"1892A","name":"TANGUT COMPONENT-299","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd2a"},100651:{"value":"1892B","name":"TANGUT COMPONENT-300","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd2b"},100652:{"value":"1892C","name":"TANGUT COMPONENT-301","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd2c"},100653:{"value":"1892D","name":"TANGUT COMPONENT-302","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd2d"},100654:{"value":"1892E","name":"TANGUT COMPONENT-303","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd2e"},100655:{"value":"1892F","name":"TANGUT COMPONENT-304","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd2f"},100656:{"value":"18930","name":"TANGUT COMPONENT-305","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd30"},100657:{"value":"18931","name":"TANGUT COMPONENT-306","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd31"},100658:{"value":"18932","name":"TANGUT COMPONENT-307","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd32"},100659:{"value":"18933","name":"TANGUT COMPONENT-308","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd33"},100660:{"value":"18934","name":"TANGUT COMPONENT-309","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd34"},100661:{"value":"18935","name":"TANGUT COMPONENT-310","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd35"},100662:{"value":"18936","name":"TANGUT COMPONENT-311","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd36"},100663:{"value":"18937","name":"TANGUT COMPONENT-312","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd37"},100664:{"value":"18938","name":"TANGUT COMPONENT-313","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd38"},100665:{"value":"18939","name":"TANGUT COMPONENT-314","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd39"},100666:{"value":"1893A","name":"TANGUT COMPONENT-315","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd3a"},100667:{"value":"1893B","name":"TANGUT COMPONENT-316","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd3b"},100668:{"value":"1893C","name":"TANGUT COMPONENT-317","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd3c"},100669:{"value":"1893D","name":"TANGUT COMPONENT-318","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd3d"},100670:{"value":"1893E","name":"TANGUT COMPONENT-319","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd3e"},100671:{"value":"1893F","name":"TANGUT COMPONENT-320","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd3f"},100672:{"value":"18940","name":"TANGUT COMPONENT-321","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd40"},100673:{"value":"18941","name":"TANGUT COMPONENT-322","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd41"},100674:{"value":"18942","name":"TANGUT COMPONENT-323","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd42"},100675:{"value":"18943","name":"TANGUT COMPONENT-324","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd43"},100676:{"value":"18944","name":"TANGUT COMPONENT-325","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd44"},100677:{"value":"18945","name":"TANGUT COMPONENT-326","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd45"},100678:{"value":"18946","name":"TANGUT COMPONENT-327","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd46"},100679:{"value":"18947","name":"TANGUT COMPONENT-328","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd47"},100680:{"value":"18948","name":"TANGUT COMPONENT-329","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd48"},100681:{"value":"18949","name":"TANGUT COMPONENT-330","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd49"},100682:{"value":"1894A","name":"TANGUT COMPONENT-331","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd4a"},100683:{"value":"1894B","name":"TANGUT COMPONENT-332","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd4b"},100684:{"value":"1894C","name":"TANGUT COMPONENT-333","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd4c"},100685:{"value":"1894D","name":"TANGUT COMPONENT-334","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd4d"},100686:{"value":"1894E","name":"TANGUT COMPONENT-335","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd4e"},100687:{"value":"1894F","name":"TANGUT COMPONENT-336","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd4f"},100688:{"value":"18950","name":"TANGUT COMPONENT-337","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd50"},100689:{"value":"18951","name":"TANGUT COMPONENT-338","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd51"},100690:{"value":"18952","name":"TANGUT COMPONENT-339","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd52"},100691:{"value":"18953","name":"TANGUT COMPONENT-340","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd53"},100692:{"value":"18954","name":"TANGUT COMPONENT-341","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd54"},100693:{"value":"18955","name":"TANGUT COMPONENT-342","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd55"},100694:{"value":"18956","name":"TANGUT COMPONENT-343","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd56"},100695:{"value":"18957","name":"TANGUT COMPONENT-344","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd57"},100696:{"value":"18958","name":"TANGUT COMPONENT-345","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd58"},100697:{"value":"18959","name":"TANGUT COMPONENT-346","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd59"},100698:{"value":"1895A","name":"TANGUT COMPONENT-347","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd5a"},100699:{"value":"1895B","name":"TANGUT COMPONENT-348","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd5b"},100700:{"value":"1895C","name":"TANGUT COMPONENT-349","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd5c"},100701:{"value":"1895D","name":"TANGUT COMPONENT-350","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd5d"},100702:{"value":"1895E","name":"TANGUT COMPONENT-351","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd5e"},100703:{"value":"1895F","name":"TANGUT COMPONENT-352","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd5f"},100704:{"value":"18960","name":"TANGUT COMPONENT-353","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd60"},100705:{"value":"18961","name":"TANGUT COMPONENT-354","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd61"},100706:{"value":"18962","name":"TANGUT COMPONENT-355","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd62"},100707:{"value":"18963","name":"TANGUT COMPONENT-356","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd63"},100708:{"value":"18964","name":"TANGUT COMPONENT-357","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd64"},100709:{"value":"18965","name":"TANGUT COMPONENT-358","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd65"},100710:{"value":"18966","name":"TANGUT COMPONENT-359","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd66"},100711:{"value":"18967","name":"TANGUT COMPONENT-360","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd67"},100712:{"value":"18968","name":"TANGUT COMPONENT-361","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd68"},100713:{"value":"18969","name":"TANGUT COMPONENT-362","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd69"},100714:{"value":"1896A","name":"TANGUT COMPONENT-363","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd6a"},100715:{"value":"1896B","name":"TANGUT COMPONENT-364","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd6b"},100716:{"value":"1896C","name":"TANGUT COMPONENT-365","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd6c"},100717:{"value":"1896D","name":"TANGUT COMPONENT-366","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd6d"},100718:{"value":"1896E","name":"TANGUT COMPONENT-367","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd6e"},100719:{"value":"1896F","name":"TANGUT COMPONENT-368","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd6f"},100720:{"value":"18970","name":"TANGUT COMPONENT-369","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd70"},100721:{"value":"18971","name":"TANGUT COMPONENT-370","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd71"},100722:{"value":"18972","name":"TANGUT COMPONENT-371","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd72"},100723:{"value":"18973","name":"TANGUT COMPONENT-372","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd73"},100724:{"value":"18974","name":"TANGUT COMPONENT-373","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd74"},100725:{"value":"18975","name":"TANGUT COMPONENT-374","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd75"},100726:{"value":"18976","name":"TANGUT COMPONENT-375","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd76"},100727:{"value":"18977","name":"TANGUT COMPONENT-376","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd77"},100728:{"value":"18978","name":"TANGUT COMPONENT-377","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd78"},100729:{"value":"18979","name":"TANGUT COMPONENT-378","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd79"},100730:{"value":"1897A","name":"TANGUT COMPONENT-379","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd7a"},100731:{"value":"1897B","name":"TANGUT COMPONENT-380","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd7b"},100732:{"value":"1897C","name":"TANGUT COMPONENT-381","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd7c"},100733:{"value":"1897D","name":"TANGUT COMPONENT-382","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd7d"},100734:{"value":"1897E","name":"TANGUT COMPONENT-383","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd7e"},100735:{"value":"1897F","name":"TANGUT COMPONENT-384","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd7f"},100736:{"value":"18980","name":"TANGUT COMPONENT-385","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd80"},100737:{"value":"18981","name":"TANGUT COMPONENT-386","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd81"},100738:{"value":"18982","name":"TANGUT COMPONENT-387","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd82"},100739:{"value":"18983","name":"TANGUT COMPONENT-388","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd83"},100740:{"value":"18984","name":"TANGUT COMPONENT-389","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd84"},100741:{"value":"18985","name":"TANGUT COMPONENT-390","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd85"},100742:{"value":"18986","name":"TANGUT COMPONENT-391","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd86"},100743:{"value":"18987","name":"TANGUT COMPONENT-392","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd87"},100744:{"value":"18988","name":"TANGUT COMPONENT-393","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd88"},100745:{"value":"18989","name":"TANGUT COMPONENT-394","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd89"},100746:{"value":"1898A","name":"TANGUT COMPONENT-395","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd8a"},100747:{"value":"1898B","name":"TANGUT COMPONENT-396","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd8b"},100748:{"value":"1898C","name":"TANGUT COMPONENT-397","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd8c"},100749:{"value":"1898D","name":"TANGUT COMPONENT-398","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd8d"},100750:{"value":"1898E","name":"TANGUT COMPONENT-399","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd8e"},100751:{"value":"1898F","name":"TANGUT COMPONENT-400","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd8f"},100752:{"value":"18990","name":"TANGUT COMPONENT-401","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd90"},100753:{"value":"18991","name":"TANGUT COMPONENT-402","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd91"},100754:{"value":"18992","name":"TANGUT COMPONENT-403","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd92"},100755:{"value":"18993","name":"TANGUT COMPONENT-404","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd93"},100756:{"value":"18994","name":"TANGUT COMPONENT-405","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd94"},100757:{"value":"18995","name":"TANGUT COMPONENT-406","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd95"},100758:{"value":"18996","name":"TANGUT COMPONENT-407","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd96"},100759:{"value":"18997","name":"TANGUT COMPONENT-408","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd97"},100760:{"value":"18998","name":"TANGUT COMPONENT-409","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd98"},100761:{"value":"18999","name":"TANGUT COMPONENT-410","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd99"},100762:{"value":"1899A","name":"TANGUT COMPONENT-411","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd9a"},100763:{"value":"1899B","name":"TANGUT COMPONENT-412","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd9b"},100764:{"value":"1899C","name":"TANGUT COMPONENT-413","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd9c"},100765:{"value":"1899D","name":"TANGUT COMPONENT-414","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd9d"},100766:{"value":"1899E","name":"TANGUT COMPONENT-415","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd9e"},100767:{"value":"1899F","name":"TANGUT COMPONENT-416","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udd9f"},100768:{"value":"189A0","name":"TANGUT COMPONENT-417","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda0"},100769:{"value":"189A1","name":"TANGUT COMPONENT-418","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda1"},100770:{"value":"189A2","name":"TANGUT COMPONENT-419","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda2"},100771:{"value":"189A3","name":"TANGUT COMPONENT-420","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda3"},100772:{"value":"189A4","name":"TANGUT COMPONENT-421","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda4"},100773:{"value":"189A5","name":"TANGUT COMPONENT-422","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda5"},100774:{"value":"189A6","name":"TANGUT COMPONENT-423","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda6"},100775:{"value":"189A7","name":"TANGUT COMPONENT-424","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda7"},100776:{"value":"189A8","name":"TANGUT COMPONENT-425","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda8"},100777:{"value":"189A9","name":"TANGUT COMPONENT-426","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udda9"},100778:{"value":"189AA","name":"TANGUT COMPONENT-427","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddaa"},100779:{"value":"189AB","name":"TANGUT COMPONENT-428","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddab"},100780:{"value":"189AC","name":"TANGUT COMPONENT-429","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddac"},100781:{"value":"189AD","name":"TANGUT COMPONENT-430","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddad"},100782:{"value":"189AE","name":"TANGUT COMPONENT-431","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddae"},100783:{"value":"189AF","name":"TANGUT COMPONENT-432","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddaf"},100784:{"value":"189B0","name":"TANGUT COMPONENT-433","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb0"},100785:{"value":"189B1","name":"TANGUT COMPONENT-434","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb1"},100786:{"value":"189B2","name":"TANGUT COMPONENT-435","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb2"},100787:{"value":"189B3","name":"TANGUT COMPONENT-436","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb3"},100788:{"value":"189B4","name":"TANGUT COMPONENT-437","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb4"},100789:{"value":"189B5","name":"TANGUT COMPONENT-438","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb5"},100790:{"value":"189B6","name":"TANGUT COMPONENT-439","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb6"},100791:{"value":"189B7","name":"TANGUT COMPONENT-440","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb7"},100792:{"value":"189B8","name":"TANGUT COMPONENT-441","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb8"},100793:{"value":"189B9","name":"TANGUT COMPONENT-442","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddb9"},100794:{"value":"189BA","name":"TANGUT COMPONENT-443","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddba"},100795:{"value":"189BB","name":"TANGUT COMPONENT-444","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddbb"},100796:{"value":"189BC","name":"TANGUT COMPONENT-445","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddbc"},100797:{"value":"189BD","name":"TANGUT COMPONENT-446","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddbd"},100798:{"value":"189BE","name":"TANGUT COMPONENT-447","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddbe"},100799:{"value":"189BF","name":"TANGUT COMPONENT-448","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddbf"},100800:{"value":"189C0","name":"TANGUT COMPONENT-449","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc0"},100801:{"value":"189C1","name":"TANGUT COMPONENT-450","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc1"},100802:{"value":"189C2","name":"TANGUT COMPONENT-451","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc2"},100803:{"value":"189C3","name":"TANGUT COMPONENT-452","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc3"},100804:{"value":"189C4","name":"TANGUT COMPONENT-453","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc4"},100805:{"value":"189C5","name":"TANGUT COMPONENT-454","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc5"},100806:{"value":"189C6","name":"TANGUT COMPONENT-455","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc6"},100807:{"value":"189C7","name":"TANGUT COMPONENT-456","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc7"},100808:{"value":"189C8","name":"TANGUT COMPONENT-457","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc8"},100809:{"value":"189C9","name":"TANGUT COMPONENT-458","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddc9"},100810:{"value":"189CA","name":"TANGUT COMPONENT-459","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddca"},100811:{"value":"189CB","name":"TANGUT COMPONENT-460","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddcb"},100812:{"value":"189CC","name":"TANGUT COMPONENT-461","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddcc"},100813:{"value":"189CD","name":"TANGUT COMPONENT-462","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddcd"},100814:{"value":"189CE","name":"TANGUT COMPONENT-463","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddce"},100815:{"value":"189CF","name":"TANGUT COMPONENT-464","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddcf"},100816:{"value":"189D0","name":"TANGUT COMPONENT-465","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd0"},100817:{"value":"189D1","name":"TANGUT COMPONENT-466","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd1"},100818:{"value":"189D2","name":"TANGUT COMPONENT-467","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd2"},100819:{"value":"189D3","name":"TANGUT COMPONENT-468","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd3"},100820:{"value":"189D4","name":"TANGUT COMPONENT-469","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd4"},100821:{"value":"189D5","name":"TANGUT COMPONENT-470","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd5"},100822:{"value":"189D6","name":"TANGUT COMPONENT-471","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd6"},100823:{"value":"189D7","name":"TANGUT COMPONENT-472","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd7"},100824:{"value":"189D8","name":"TANGUT COMPONENT-473","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd8"},100825:{"value":"189D9","name":"TANGUT COMPONENT-474","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddd9"},100826:{"value":"189DA","name":"TANGUT COMPONENT-475","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddda"},100827:{"value":"189DB","name":"TANGUT COMPONENT-476","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udddb"},100828:{"value":"189DC","name":"TANGUT COMPONENT-477","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udddc"},100829:{"value":"189DD","name":"TANGUT COMPONENT-478","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udddd"},100830:{"value":"189DE","name":"TANGUT COMPONENT-479","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddde"},100831:{"value":"189DF","name":"TANGUT COMPONENT-480","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udddf"},100832:{"value":"189E0","name":"TANGUT COMPONENT-481","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde0"},100833:{"value":"189E1","name":"TANGUT COMPONENT-482","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde1"},100834:{"value":"189E2","name":"TANGUT COMPONENT-483","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde2"},100835:{"value":"189E3","name":"TANGUT COMPONENT-484","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde3"},100836:{"value":"189E4","name":"TANGUT COMPONENT-485","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde4"},100837:{"value":"189E5","name":"TANGUT COMPONENT-486","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde5"},100838:{"value":"189E6","name":"TANGUT COMPONENT-487","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde6"},100839:{"value":"189E7","name":"TANGUT COMPONENT-488","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde7"},100840:{"value":"189E8","name":"TANGUT COMPONENT-489","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde8"},100841:{"value":"189E9","name":"TANGUT COMPONENT-490","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udde9"},100842:{"value":"189EA","name":"TANGUT COMPONENT-491","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddea"},100843:{"value":"189EB","name":"TANGUT COMPONENT-492","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddeb"},100844:{"value":"189EC","name":"TANGUT COMPONENT-493","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddec"},100845:{"value":"189ED","name":"TANGUT COMPONENT-494","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udded"},100846:{"value":"189EE","name":"TANGUT COMPONENT-495","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddee"},100847:{"value":"189EF","name":"TANGUT COMPONENT-496","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddef"},100848:{"value":"189F0","name":"TANGUT COMPONENT-497","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf0"},100849:{"value":"189F1","name":"TANGUT COMPONENT-498","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf1"},100850:{"value":"189F2","name":"TANGUT COMPONENT-499","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf2"},100851:{"value":"189F3","name":"TANGUT COMPONENT-500","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf3"},100852:{"value":"189F4","name":"TANGUT COMPONENT-501","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf4"},100853:{"value":"189F5","name":"TANGUT COMPONENT-502","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf5"},100854:{"value":"189F6","name":"TANGUT COMPONENT-503","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf6"},100855:{"value":"189F7","name":"TANGUT COMPONENT-504","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf7"},100856:{"value":"189F8","name":"TANGUT COMPONENT-505","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf8"},100857:{"value":"189F9","name":"TANGUT COMPONENT-506","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddf9"},100858:{"value":"189FA","name":"TANGUT COMPONENT-507","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddfa"},100859:{"value":"189FB","name":"TANGUT COMPONENT-508","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddfb"},100860:{"value":"189FC","name":"TANGUT COMPONENT-509","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddfc"},100861:{"value":"189FD","name":"TANGUT COMPONENT-510","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddfd"},100862:{"value":"189FE","name":"TANGUT COMPONENT-511","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddfe"},100863:{"value":"189FF","name":"TANGUT COMPONENT-512","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uddff"},100864:{"value":"18A00","name":"TANGUT COMPONENT-513","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude00"},100865:{"value":"18A01","name":"TANGUT COMPONENT-514","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude01"},100866:{"value":"18A02","name":"TANGUT COMPONENT-515","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude02"},100867:{"value":"18A03","name":"TANGUT COMPONENT-516","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude03"},100868:{"value":"18A04","name":"TANGUT COMPONENT-517","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude04"},100869:{"value":"18A05","name":"TANGUT COMPONENT-518","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude05"},100870:{"value":"18A06","name":"TANGUT COMPONENT-519","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude06"},100871:{"value":"18A07","name":"TANGUT COMPONENT-520","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude07"},100872:{"value":"18A08","name":"TANGUT COMPONENT-521","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude08"},100873:{"value":"18A09","name":"TANGUT COMPONENT-522","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude09"},100874:{"value":"18A0A","name":"TANGUT COMPONENT-523","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude0a"},100875:{"value":"18A0B","name":"TANGUT COMPONENT-524","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude0b"},100876:{"value":"18A0C","name":"TANGUT COMPONENT-525","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude0c"},100877:{"value":"18A0D","name":"TANGUT COMPONENT-526","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude0d"},100878:{"value":"18A0E","name":"TANGUT COMPONENT-527","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude0e"},100879:{"value":"18A0F","name":"TANGUT COMPONENT-528","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude0f"},100880:{"value":"18A10","name":"TANGUT COMPONENT-529","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude10"},100881:{"value":"18A11","name":"TANGUT COMPONENT-530","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude11"},100882:{"value":"18A12","name":"TANGUT COMPONENT-531","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude12"},100883:{"value":"18A13","name":"TANGUT COMPONENT-532","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude13"},100884:{"value":"18A14","name":"TANGUT COMPONENT-533","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude14"},100885:{"value":"18A15","name":"TANGUT COMPONENT-534","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude15"},100886:{"value":"18A16","name":"TANGUT COMPONENT-535","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude16"},100887:{"value":"18A17","name":"TANGUT COMPONENT-536","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude17"},100888:{"value":"18A18","name":"TANGUT COMPONENT-537","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude18"},100889:{"value":"18A19","name":"TANGUT COMPONENT-538","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude19"},100890:{"value":"18A1A","name":"TANGUT COMPONENT-539","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude1a"},100891:{"value":"18A1B","name":"TANGUT COMPONENT-540","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude1b"},100892:{"value":"18A1C","name":"TANGUT COMPONENT-541","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude1c"},100893:{"value":"18A1D","name":"TANGUT COMPONENT-542","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude1d"},100894:{"value":"18A1E","name":"TANGUT COMPONENT-543","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude1e"},100895:{"value":"18A1F","name":"TANGUT COMPONENT-544","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude1f"},100896:{"value":"18A20","name":"TANGUT COMPONENT-545","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude20"},100897:{"value":"18A21","name":"TANGUT COMPONENT-546","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude21"},100898:{"value":"18A22","name":"TANGUT COMPONENT-547","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude22"},100899:{"value":"18A23","name":"TANGUT COMPONENT-548","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude23"},100900:{"value":"18A24","name":"TANGUT COMPONENT-549","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude24"},100901:{"value":"18A25","name":"TANGUT COMPONENT-550","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude25"},100902:{"value":"18A26","name":"TANGUT COMPONENT-551","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude26"},100903:{"value":"18A27","name":"TANGUT COMPONENT-552","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude27"},100904:{"value":"18A28","name":"TANGUT COMPONENT-553","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude28"},100905:{"value":"18A29","name":"TANGUT COMPONENT-554","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude29"},100906:{"value":"18A2A","name":"TANGUT COMPONENT-555","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude2a"},100907:{"value":"18A2B","name":"TANGUT COMPONENT-556","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude2b"},100908:{"value":"18A2C","name":"TANGUT COMPONENT-557","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude2c"},100909:{"value":"18A2D","name":"TANGUT COMPONENT-558","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude2d"},100910:{"value":"18A2E","name":"TANGUT COMPONENT-559","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude2e"},100911:{"value":"18A2F","name":"TANGUT COMPONENT-560","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude2f"},100912:{"value":"18A30","name":"TANGUT COMPONENT-561","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude30"},100913:{"value":"18A31","name":"TANGUT COMPONENT-562","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude31"},100914:{"value":"18A32","name":"TANGUT COMPONENT-563","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude32"},100915:{"value":"18A33","name":"TANGUT COMPONENT-564","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude33"},100916:{"value":"18A34","name":"TANGUT COMPONENT-565","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude34"},100917:{"value":"18A35","name":"TANGUT COMPONENT-566","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude35"},100918:{"value":"18A36","name":"TANGUT COMPONENT-567","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude36"},100919:{"value":"18A37","name":"TANGUT COMPONENT-568","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude37"},100920:{"value":"18A38","name":"TANGUT COMPONENT-569","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude38"},100921:{"value":"18A39","name":"TANGUT COMPONENT-570","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude39"},100922:{"value":"18A3A","name":"TANGUT COMPONENT-571","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude3a"},100923:{"value":"18A3B","name":"TANGUT COMPONENT-572","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude3b"},100924:{"value":"18A3C","name":"TANGUT COMPONENT-573","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude3c"},100925:{"value":"18A3D","name":"TANGUT COMPONENT-574","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude3d"},100926:{"value":"18A3E","name":"TANGUT COMPONENT-575","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude3e"},100927:{"value":"18A3F","name":"TANGUT COMPONENT-576","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude3f"},100928:{"value":"18A40","name":"TANGUT COMPONENT-577","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude40"},100929:{"value":"18A41","name":"TANGUT COMPONENT-578","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude41"},100930:{"value":"18A42","name":"TANGUT COMPONENT-579","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude42"},100931:{"value":"18A43","name":"TANGUT COMPONENT-580","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude43"},100932:{"value":"18A44","name":"TANGUT COMPONENT-581","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude44"},100933:{"value":"18A45","name":"TANGUT COMPONENT-582","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude45"},100934:{"value":"18A46","name":"TANGUT COMPONENT-583","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude46"},100935:{"value":"18A47","name":"TANGUT COMPONENT-584","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude47"},100936:{"value":"18A48","name":"TANGUT COMPONENT-585","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude48"},100937:{"value":"18A49","name":"TANGUT COMPONENT-586","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude49"},100938:{"value":"18A4A","name":"TANGUT COMPONENT-587","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude4a"},100939:{"value":"18A4B","name":"TANGUT COMPONENT-588","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude4b"},100940:{"value":"18A4C","name":"TANGUT COMPONENT-589","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude4c"},100941:{"value":"18A4D","name":"TANGUT COMPONENT-590","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude4d"},100942:{"value":"18A4E","name":"TANGUT COMPONENT-591","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude4e"},100943:{"value":"18A4F","name":"TANGUT COMPONENT-592","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude4f"},100944:{"value":"18A50","name":"TANGUT COMPONENT-593","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude50"},100945:{"value":"18A51","name":"TANGUT COMPONENT-594","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude51"},100946:{"value":"18A52","name":"TANGUT COMPONENT-595","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude52"},100947:{"value":"18A53","name":"TANGUT COMPONENT-596","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude53"},100948:{"value":"18A54","name":"TANGUT COMPONENT-597","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude54"},100949:{"value":"18A55","name":"TANGUT COMPONENT-598","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude55"},100950:{"value":"18A56","name":"TANGUT COMPONENT-599","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude56"},100951:{"value":"18A57","name":"TANGUT COMPONENT-600","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude57"},100952:{"value":"18A58","name":"TANGUT COMPONENT-601","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude58"},100953:{"value":"18A59","name":"TANGUT COMPONENT-602","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude59"},100954:{"value":"18A5A","name":"TANGUT COMPONENT-603","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude5a"},100955:{"value":"18A5B","name":"TANGUT COMPONENT-604","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude5b"},100956:{"value":"18A5C","name":"TANGUT COMPONENT-605","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude5c"},100957:{"value":"18A5D","name":"TANGUT COMPONENT-606","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude5d"},100958:{"value":"18A5E","name":"TANGUT COMPONENT-607","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude5e"},100959:{"value":"18A5F","name":"TANGUT COMPONENT-608","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude5f"},100960:{"value":"18A60","name":"TANGUT COMPONENT-609","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude60"},100961:{"value":"18A61","name":"TANGUT COMPONENT-610","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude61"},100962:{"value":"18A62","name":"TANGUT COMPONENT-611","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude62"},100963:{"value":"18A63","name":"TANGUT COMPONENT-612","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude63"},100964:{"value":"18A64","name":"TANGUT COMPONENT-613","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude64"},100965:{"value":"18A65","name":"TANGUT COMPONENT-614","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude65"},100966:{"value":"18A66","name":"TANGUT COMPONENT-615","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude66"},100967:{"value":"18A67","name":"TANGUT COMPONENT-616","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude67"},100968:{"value":"18A68","name":"TANGUT COMPONENT-617","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude68"},100969:{"value":"18A69","name":"TANGUT COMPONENT-618","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude69"},100970:{"value":"18A6A","name":"TANGUT COMPONENT-619","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude6a"},100971:{"value":"18A6B","name":"TANGUT COMPONENT-620","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude6b"},100972:{"value":"18A6C","name":"TANGUT COMPONENT-621","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude6c"},100973:{"value":"18A6D","name":"TANGUT COMPONENT-622","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude6d"},100974:{"value":"18A6E","name":"TANGUT COMPONENT-623","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude6e"},100975:{"value":"18A6F","name":"TANGUT COMPONENT-624","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude6f"},100976:{"value":"18A70","name":"TANGUT COMPONENT-625","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude70"},100977:{"value":"18A71","name":"TANGUT COMPONENT-626","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude71"},100978:{"value":"18A72","name":"TANGUT COMPONENT-627","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude72"},100979:{"value":"18A73","name":"TANGUT COMPONENT-628","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude73"},100980:{"value":"18A74","name":"TANGUT COMPONENT-629","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude74"},100981:{"value":"18A75","name":"TANGUT COMPONENT-630","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude75"},100982:{"value":"18A76","name":"TANGUT COMPONENT-631","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude76"},100983:{"value":"18A77","name":"TANGUT COMPONENT-632","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude77"},100984:{"value":"18A78","name":"TANGUT COMPONENT-633","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude78"},100985:{"value":"18A79","name":"TANGUT COMPONENT-634","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude79"},100986:{"value":"18A7A","name":"TANGUT COMPONENT-635","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude7a"},100987:{"value":"18A7B","name":"TANGUT COMPONENT-636","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude7b"},100988:{"value":"18A7C","name":"TANGUT COMPONENT-637","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude7c"},100989:{"value":"18A7D","name":"TANGUT COMPONENT-638","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude7d"},100990:{"value":"18A7E","name":"TANGUT COMPONENT-639","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude7e"},100991:{"value":"18A7F","name":"TANGUT COMPONENT-640","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude7f"},100992:{"value":"18A80","name":"TANGUT COMPONENT-641","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude80"},100993:{"value":"18A81","name":"TANGUT COMPONENT-642","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude81"},100994:{"value":"18A82","name":"TANGUT COMPONENT-643","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude82"},100995:{"value":"18A83","name":"TANGUT COMPONENT-644","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude83"},100996:{"value":"18A84","name":"TANGUT COMPONENT-645","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude84"},100997:{"value":"18A85","name":"TANGUT COMPONENT-646","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude85"},100998:{"value":"18A86","name":"TANGUT COMPONENT-647","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude86"},100999:{"value":"18A87","name":"TANGUT COMPONENT-648","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude87"},101000:{"value":"18A88","name":"TANGUT COMPONENT-649","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude88"},101001:{"value":"18A89","name":"TANGUT COMPONENT-650","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude89"},101002:{"value":"18A8A","name":"TANGUT COMPONENT-651","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude8a"},101003:{"value":"18A8B","name":"TANGUT COMPONENT-652","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude8b"},101004:{"value":"18A8C","name":"TANGUT COMPONENT-653","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude8c"},101005:{"value":"18A8D","name":"TANGUT COMPONENT-654","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude8d"},101006:{"value":"18A8E","name":"TANGUT COMPONENT-655","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude8e"},101007:{"value":"18A8F","name":"TANGUT COMPONENT-656","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude8f"},101008:{"value":"18A90","name":"TANGUT COMPONENT-657","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude90"},101009:{"value":"18A91","name":"TANGUT COMPONENT-658","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude91"},101010:{"value":"18A92","name":"TANGUT COMPONENT-659","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude92"},101011:{"value":"18A93","name":"TANGUT COMPONENT-660","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude93"},101012:{"value":"18A94","name":"TANGUT COMPONENT-661","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude94"},101013:{"value":"18A95","name":"TANGUT COMPONENT-662","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude95"},101014:{"value":"18A96","name":"TANGUT COMPONENT-663","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude96"},101015:{"value":"18A97","name":"TANGUT COMPONENT-664","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude97"},101016:{"value":"18A98","name":"TANGUT COMPONENT-665","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude98"},101017:{"value":"18A99","name":"TANGUT COMPONENT-666","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude99"},101018:{"value":"18A9A","name":"TANGUT COMPONENT-667","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude9a"},101019:{"value":"18A9B","name":"TANGUT COMPONENT-668","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude9b"},101020:{"value":"18A9C","name":"TANGUT COMPONENT-669","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude9c"},101021:{"value":"18A9D","name":"TANGUT COMPONENT-670","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude9d"},101022:{"value":"18A9E","name":"TANGUT COMPONENT-671","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude9e"},101023:{"value":"18A9F","name":"TANGUT COMPONENT-672","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\ude9f"},101024:{"value":"18AA0","name":"TANGUT COMPONENT-673","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea0"},101025:{"value":"18AA1","name":"TANGUT COMPONENT-674","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea1"},101026:{"value":"18AA2","name":"TANGUT COMPONENT-675","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea2"},101027:{"value":"18AA3","name":"TANGUT COMPONENT-676","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea3"},101028:{"value":"18AA4","name":"TANGUT COMPONENT-677","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea4"},101029:{"value":"18AA5","name":"TANGUT COMPONENT-678","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea5"},101030:{"value":"18AA6","name":"TANGUT COMPONENT-679","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea6"},101031:{"value":"18AA7","name":"TANGUT COMPONENT-680","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea7"},101032:{"value":"18AA8","name":"TANGUT COMPONENT-681","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea8"},101033:{"value":"18AA9","name":"TANGUT COMPONENT-682","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udea9"},101034:{"value":"18AAA","name":"TANGUT COMPONENT-683","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeaa"},101035:{"value":"18AAB","name":"TANGUT COMPONENT-684","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeab"},101036:{"value":"18AAC","name":"TANGUT COMPONENT-685","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeac"},101037:{"value":"18AAD","name":"TANGUT COMPONENT-686","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udead"},101038:{"value":"18AAE","name":"TANGUT COMPONENT-687","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeae"},101039:{"value":"18AAF","name":"TANGUT COMPONENT-688","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeaf"},101040:{"value":"18AB0","name":"TANGUT COMPONENT-689","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb0"},101041:{"value":"18AB1","name":"TANGUT COMPONENT-690","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb1"},101042:{"value":"18AB2","name":"TANGUT COMPONENT-691","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb2"},101043:{"value":"18AB3","name":"TANGUT COMPONENT-692","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb3"},101044:{"value":"18AB4","name":"TANGUT COMPONENT-693","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb4"},101045:{"value":"18AB5","name":"TANGUT COMPONENT-694","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb5"},101046:{"value":"18AB6","name":"TANGUT COMPONENT-695","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb6"},101047:{"value":"18AB7","name":"TANGUT COMPONENT-696","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb7"},101048:{"value":"18AB8","name":"TANGUT COMPONENT-697","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb8"},101049:{"value":"18AB9","name":"TANGUT COMPONENT-698","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeb9"},101050:{"value":"18ABA","name":"TANGUT COMPONENT-699","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeba"},101051:{"value":"18ABB","name":"TANGUT COMPONENT-700","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udebb"},101052:{"value":"18ABC","name":"TANGUT COMPONENT-701","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udebc"},101053:{"value":"18ABD","name":"TANGUT COMPONENT-702","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udebd"},101054:{"value":"18ABE","name":"TANGUT COMPONENT-703","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udebe"},101055:{"value":"18ABF","name":"TANGUT COMPONENT-704","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udebf"},101056:{"value":"18AC0","name":"TANGUT COMPONENT-705","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec0"},101057:{"value":"18AC1","name":"TANGUT COMPONENT-706","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec1"},101058:{"value":"18AC2","name":"TANGUT COMPONENT-707","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec2"},101059:{"value":"18AC3","name":"TANGUT COMPONENT-708","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec3"},101060:{"value":"18AC4","name":"TANGUT COMPONENT-709","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec4"},101061:{"value":"18AC5","name":"TANGUT COMPONENT-710","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec5"},101062:{"value":"18AC6","name":"TANGUT COMPONENT-711","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec6"},101063:{"value":"18AC7","name":"TANGUT COMPONENT-712","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec7"},101064:{"value":"18AC8","name":"TANGUT COMPONENT-713","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec8"},101065:{"value":"18AC9","name":"TANGUT COMPONENT-714","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udec9"},101066:{"value":"18ACA","name":"TANGUT COMPONENT-715","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeca"},101067:{"value":"18ACB","name":"TANGUT COMPONENT-716","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udecb"},101068:{"value":"18ACC","name":"TANGUT COMPONENT-717","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udecc"},101069:{"value":"18ACD","name":"TANGUT COMPONENT-718","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udecd"},101070:{"value":"18ACE","name":"TANGUT COMPONENT-719","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udece"},101071:{"value":"18ACF","name":"TANGUT COMPONENT-720","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udecf"},101072:{"value":"18AD0","name":"TANGUT COMPONENT-721","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded0"},101073:{"value":"18AD1","name":"TANGUT COMPONENT-722","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded1"},101074:{"value":"18AD2","name":"TANGUT COMPONENT-723","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded2"},101075:{"value":"18AD3","name":"TANGUT COMPONENT-724","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded3"},101076:{"value":"18AD4","name":"TANGUT COMPONENT-725","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded4"},101077:{"value":"18AD5","name":"TANGUT COMPONENT-726","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded5"},101078:{"value":"18AD6","name":"TANGUT COMPONENT-727","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded6"},101079:{"value":"18AD7","name":"TANGUT COMPONENT-728","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded7"},101080:{"value":"18AD8","name":"TANGUT COMPONENT-729","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded8"},101081:{"value":"18AD9","name":"TANGUT COMPONENT-730","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\uded9"},101082:{"value":"18ADA","name":"TANGUT COMPONENT-731","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeda"},101083:{"value":"18ADB","name":"TANGUT COMPONENT-732","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udedb"},101084:{"value":"18ADC","name":"TANGUT COMPONENT-733","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udedc"},101085:{"value":"18ADD","name":"TANGUT COMPONENT-734","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udedd"},101086:{"value":"18ADE","name":"TANGUT COMPONENT-735","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udede"},101087:{"value":"18ADF","name":"TANGUT COMPONENT-736","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udedf"},101088:{"value":"18AE0","name":"TANGUT COMPONENT-737","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee0"},101089:{"value":"18AE1","name":"TANGUT COMPONENT-738","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee1"},101090:{"value":"18AE2","name":"TANGUT COMPONENT-739","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee2"},101091:{"value":"18AE3","name":"TANGUT COMPONENT-740","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee3"},101092:{"value":"18AE4","name":"TANGUT COMPONENT-741","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee4"},101093:{"value":"18AE5","name":"TANGUT COMPONENT-742","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee5"},101094:{"value":"18AE6","name":"TANGUT COMPONENT-743","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee6"},101095:{"value":"18AE7","name":"TANGUT COMPONENT-744","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee7"},101096:{"value":"18AE8","name":"TANGUT COMPONENT-745","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee8"},101097:{"value":"18AE9","name":"TANGUT COMPONENT-746","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udee9"},101098:{"value":"18AEA","name":"TANGUT COMPONENT-747","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeea"},101099:{"value":"18AEB","name":"TANGUT COMPONENT-748","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeeb"},101100:{"value":"18AEC","name":"TANGUT COMPONENT-749","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeec"},101101:{"value":"18AED","name":"TANGUT COMPONENT-750","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeed"},101102:{"value":"18AEE","name":"TANGUT COMPONENT-751","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeee"},101103:{"value":"18AEF","name":"TANGUT COMPONENT-752","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeef"},101104:{"value":"18AF0","name":"TANGUT COMPONENT-753","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef0"},101105:{"value":"18AF1","name":"TANGUT COMPONENT-754","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef1"},101106:{"value":"18AF2","name":"TANGUT COMPONENT-755","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef2"},101107:{"value":"18AF3","name":"TANGUT COMPONENT-756","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef3"},101108:{"value":"18AF4","name":"TANGUT COMPONENT-757","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef4"},101109:{"value":"18AF5","name":"TANGUT COMPONENT-758","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef5"},101110:{"value":"18AF6","name":"TANGUT COMPONENT-759","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef6"},101111:{"value":"18AF7","name":"TANGUT COMPONENT-760","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef7"},101112:{"value":"18AF8","name":"TANGUT COMPONENT-761","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef8"},101113:{"value":"18AF9","name":"TANGUT COMPONENT-762","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udef9"},101114:{"value":"18AFA","name":"TANGUT COMPONENT-763","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udefa"},101115:{"value":"18AFB","name":"TANGUT COMPONENT-764","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udefb"},101116:{"value":"18AFC","name":"TANGUT COMPONENT-765","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udefc"},101117:{"value":"18AFD","name":"TANGUT COMPONENT-766","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udefd"},101118:{"value":"18AFE","name":"TANGUT COMPONENT-767","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udefe"},101119:{"value":"18AFF","name":"TANGUT COMPONENT-768","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udeff"},101120:{"value":"18B00","name":"KHITAN SMALL SCRIPT CHARACTER-18B00","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf00"},101121:{"value":"18B01","name":"KHITAN SMALL SCRIPT CHARACTER-18B01","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf01"},101122:{"value":"18B02","name":"KHITAN SMALL SCRIPT CHARACTER-18B02","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf02"},101123:{"value":"18B03","name":"KHITAN SMALL SCRIPT CHARACTER-18B03","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf03"},101124:{"value":"18B04","name":"KHITAN SMALL SCRIPT CHARACTER-18B04","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf04"},101125:{"value":"18B05","name":"KHITAN SMALL SCRIPT CHARACTER-18B05","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf05"},101126:{"value":"18B06","name":"KHITAN SMALL SCRIPT CHARACTER-18B06","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf06"},101127:{"value":"18B07","name":"KHITAN SMALL SCRIPT CHARACTER-18B07","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf07"},101128:{"value":"18B08","name":"KHITAN SMALL SCRIPT CHARACTER-18B08","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf08"},101129:{"value":"18B09","name":"KHITAN SMALL SCRIPT CHARACTER-18B09","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf09"},101130:{"value":"18B0A","name":"KHITAN SMALL SCRIPT CHARACTER-18B0A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf0a"},101131:{"value":"18B0B","name":"KHITAN SMALL SCRIPT CHARACTER-18B0B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf0b"},101132:{"value":"18B0C","name":"KHITAN SMALL SCRIPT CHARACTER-18B0C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf0c"},101133:{"value":"18B0D","name":"KHITAN SMALL SCRIPT CHARACTER-18B0D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf0d"},101134:{"value":"18B0E","name":"KHITAN SMALL SCRIPT CHARACTER-18B0E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf0e"},101135:{"value":"18B0F","name":"KHITAN SMALL SCRIPT CHARACTER-18B0F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf0f"},101136:{"value":"18B10","name":"KHITAN SMALL SCRIPT CHARACTER-18B10","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf10"},101137:{"value":"18B11","name":"KHITAN SMALL SCRIPT CHARACTER-18B11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf11"},101138:{"value":"18B12","name":"KHITAN SMALL SCRIPT CHARACTER-18B12","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf12"},101139:{"value":"18B13","name":"KHITAN SMALL SCRIPT CHARACTER-18B13","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf13"},101140:{"value":"18B14","name":"KHITAN SMALL SCRIPT CHARACTER-18B14","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf14"},101141:{"value":"18B15","name":"KHITAN SMALL SCRIPT CHARACTER-18B15","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf15"},101142:{"value":"18B16","name":"KHITAN SMALL SCRIPT CHARACTER-18B16","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf16"},101143:{"value":"18B17","name":"KHITAN SMALL SCRIPT CHARACTER-18B17","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf17"},101144:{"value":"18B18","name":"KHITAN SMALL SCRIPT CHARACTER-18B18","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf18"},101145:{"value":"18B19","name":"KHITAN SMALL SCRIPT CHARACTER-18B19","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf19"},101146:{"value":"18B1A","name":"KHITAN SMALL SCRIPT CHARACTER-18B1A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf1a"},101147:{"value":"18B1B","name":"KHITAN SMALL SCRIPT CHARACTER-18B1B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf1b"},101148:{"value":"18B1C","name":"KHITAN SMALL SCRIPT CHARACTER-18B1C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf1c"},101149:{"value":"18B1D","name":"KHITAN SMALL SCRIPT CHARACTER-18B1D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf1d"},101150:{"value":"18B1E","name":"KHITAN SMALL SCRIPT CHARACTER-18B1E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf1e"},101151:{"value":"18B1F","name":"KHITAN SMALL SCRIPT CHARACTER-18B1F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf1f"},101152:{"value":"18B20","name":"KHITAN SMALL SCRIPT CHARACTER-18B20","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf20"},101153:{"value":"18B21","name":"KHITAN SMALL SCRIPT CHARACTER-18B21","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf21"},101154:{"value":"18B22","name":"KHITAN SMALL SCRIPT CHARACTER-18B22","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf22"},101155:{"value":"18B23","name":"KHITAN SMALL SCRIPT CHARACTER-18B23","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf23"},101156:{"value":"18B24","name":"KHITAN SMALL SCRIPT CHARACTER-18B24","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf24"},101157:{"value":"18B25","name":"KHITAN SMALL SCRIPT CHARACTER-18B25","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf25"},101158:{"value":"18B26","name":"KHITAN SMALL SCRIPT CHARACTER-18B26","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf26"},101159:{"value":"18B27","name":"KHITAN SMALL SCRIPT CHARACTER-18B27","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf27"},101160:{"value":"18B28","name":"KHITAN SMALL SCRIPT CHARACTER-18B28","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf28"},101161:{"value":"18B29","name":"KHITAN SMALL SCRIPT CHARACTER-18B29","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf29"},101162:{"value":"18B2A","name":"KHITAN SMALL SCRIPT CHARACTER-18B2A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf2a"},101163:{"value":"18B2B","name":"KHITAN SMALL SCRIPT CHARACTER-18B2B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf2b"},101164:{"value":"18B2C","name":"KHITAN SMALL SCRIPT CHARACTER-18B2C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf2c"},101165:{"value":"18B2D","name":"KHITAN SMALL SCRIPT CHARACTER-18B2D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf2d"},101166:{"value":"18B2E","name":"KHITAN SMALL SCRIPT CHARACTER-18B2E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf2e"},101167:{"value":"18B2F","name":"KHITAN SMALL SCRIPT CHARACTER-18B2F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf2f"},101168:{"value":"18B30","name":"KHITAN SMALL SCRIPT CHARACTER-18B30","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf30"},101169:{"value":"18B31","name":"KHITAN SMALL SCRIPT CHARACTER-18B31","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf31"},101170:{"value":"18B32","name":"KHITAN SMALL SCRIPT CHARACTER-18B32","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf32"},101171:{"value":"18B33","name":"KHITAN SMALL SCRIPT CHARACTER-18B33","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf33"},101172:{"value":"18B34","name":"KHITAN SMALL SCRIPT CHARACTER-18B34","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf34"},101173:{"value":"18B35","name":"KHITAN SMALL SCRIPT CHARACTER-18B35","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf35"},101174:{"value":"18B36","name":"KHITAN SMALL SCRIPT CHARACTER-18B36","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf36"},101175:{"value":"18B37","name":"KHITAN SMALL SCRIPT CHARACTER-18B37","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf37"},101176:{"value":"18B38","name":"KHITAN SMALL SCRIPT CHARACTER-18B38","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf38"},101177:{"value":"18B39","name":"KHITAN SMALL SCRIPT CHARACTER-18B39","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf39"},101178:{"value":"18B3A","name":"KHITAN SMALL SCRIPT CHARACTER-18B3A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf3a"},101179:{"value":"18B3B","name":"KHITAN SMALL SCRIPT CHARACTER-18B3B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf3b"},101180:{"value":"18B3C","name":"KHITAN SMALL SCRIPT CHARACTER-18B3C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf3c"},101181:{"value":"18B3D","name":"KHITAN SMALL SCRIPT CHARACTER-18B3D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf3d"},101182:{"value":"18B3E","name":"KHITAN SMALL SCRIPT CHARACTER-18B3E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf3e"},101183:{"value":"18B3F","name":"KHITAN SMALL SCRIPT CHARACTER-18B3F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf3f"},101184:{"value":"18B40","name":"KHITAN SMALL SCRIPT CHARACTER-18B40","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf40"},101185:{"value":"18B41","name":"KHITAN SMALL SCRIPT CHARACTER-18B41","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf41"},101186:{"value":"18B42","name":"KHITAN SMALL SCRIPT CHARACTER-18B42","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf42"},101187:{"value":"18B43","name":"KHITAN SMALL SCRIPT CHARACTER-18B43","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf43"},101188:{"value":"18B44","name":"KHITAN SMALL SCRIPT CHARACTER-18B44","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf44"},101189:{"value":"18B45","name":"KHITAN SMALL SCRIPT CHARACTER-18B45","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf45"},101190:{"value":"18B46","name":"KHITAN SMALL SCRIPT CHARACTER-18B46","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf46"},101191:{"value":"18B47","name":"KHITAN SMALL SCRIPT CHARACTER-18B47","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf47"},101192:{"value":"18B48","name":"KHITAN SMALL SCRIPT CHARACTER-18B48","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf48"},101193:{"value":"18B49","name":"KHITAN SMALL SCRIPT CHARACTER-18B49","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf49"},101194:{"value":"18B4A","name":"KHITAN SMALL SCRIPT CHARACTER-18B4A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf4a"},101195:{"value":"18B4B","name":"KHITAN SMALL SCRIPT CHARACTER-18B4B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf4b"},101196:{"value":"18B4C","name":"KHITAN SMALL SCRIPT CHARACTER-18B4C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf4c"},101197:{"value":"18B4D","name":"KHITAN SMALL SCRIPT CHARACTER-18B4D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf4d"},101198:{"value":"18B4E","name":"KHITAN SMALL SCRIPT CHARACTER-18B4E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf4e"},101199:{"value":"18B4F","name":"KHITAN SMALL SCRIPT CHARACTER-18B4F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf4f"},101200:{"value":"18B50","name":"KHITAN SMALL SCRIPT CHARACTER-18B50","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf50"},101201:{"value":"18B51","name":"KHITAN SMALL SCRIPT CHARACTER-18B51","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf51"},101202:{"value":"18B52","name":"KHITAN SMALL SCRIPT CHARACTER-18B52","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf52"},101203:{"value":"18B53","name":"KHITAN SMALL SCRIPT CHARACTER-18B53","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf53"},101204:{"value":"18B54","name":"KHITAN SMALL SCRIPT CHARACTER-18B54","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf54"},101205:{"value":"18B55","name":"KHITAN SMALL SCRIPT CHARACTER-18B55","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf55"},101206:{"value":"18B56","name":"KHITAN SMALL SCRIPT CHARACTER-18B56","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf56"},101207:{"value":"18B57","name":"KHITAN SMALL SCRIPT CHARACTER-18B57","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf57"},101208:{"value":"18B58","name":"KHITAN SMALL SCRIPT CHARACTER-18B58","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf58"},101209:{"value":"18B59","name":"KHITAN SMALL SCRIPT CHARACTER-18B59","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf59"},101210:{"value":"18B5A","name":"KHITAN SMALL SCRIPT CHARACTER-18B5A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf5a"},101211:{"value":"18B5B","name":"KHITAN SMALL SCRIPT CHARACTER-18B5B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf5b"},101212:{"value":"18B5C","name":"KHITAN SMALL SCRIPT CHARACTER-18B5C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf5c"},101213:{"value":"18B5D","name":"KHITAN SMALL SCRIPT CHARACTER-18B5D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf5d"},101214:{"value":"18B5E","name":"KHITAN SMALL SCRIPT CHARACTER-18B5E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf5e"},101215:{"value":"18B5F","name":"KHITAN SMALL SCRIPT CHARACTER-18B5F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf5f"},101216:{"value":"18B60","name":"KHITAN SMALL SCRIPT CHARACTER-18B60","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf60"},101217:{"value":"18B61","name":"KHITAN SMALL SCRIPT CHARACTER-18B61","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf61"},101218:{"value":"18B62","name":"KHITAN SMALL SCRIPT CHARACTER-18B62","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf62"},101219:{"value":"18B63","name":"KHITAN SMALL SCRIPT CHARACTER-18B63","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf63"},101220:{"value":"18B64","name":"KHITAN SMALL SCRIPT CHARACTER-18B64","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf64"},101221:{"value":"18B65","name":"KHITAN SMALL SCRIPT CHARACTER-18B65","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf65"},101222:{"value":"18B66","name":"KHITAN SMALL SCRIPT CHARACTER-18B66","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf66"},101223:{"value":"18B67","name":"KHITAN SMALL SCRIPT CHARACTER-18B67","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf67"},101224:{"value":"18B68","name":"KHITAN SMALL SCRIPT CHARACTER-18B68","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf68"},101225:{"value":"18B69","name":"KHITAN SMALL SCRIPT CHARACTER-18B69","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf69"},101226:{"value":"18B6A","name":"KHITAN SMALL SCRIPT CHARACTER-18B6A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf6a"},101227:{"value":"18B6B","name":"KHITAN SMALL SCRIPT CHARACTER-18B6B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf6b"},101228:{"value":"18B6C","name":"KHITAN SMALL SCRIPT CHARACTER-18B6C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf6c"},101229:{"value":"18B6D","name":"KHITAN SMALL SCRIPT CHARACTER-18B6D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf6d"},101230:{"value":"18B6E","name":"KHITAN SMALL SCRIPT CHARACTER-18B6E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf6e"},101231:{"value":"18B6F","name":"KHITAN SMALL SCRIPT CHARACTER-18B6F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf6f"},101232:{"value":"18B70","name":"KHITAN SMALL SCRIPT CHARACTER-18B70","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf70"},101233:{"value":"18B71","name":"KHITAN SMALL SCRIPT CHARACTER-18B71","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf71"},101234:{"value":"18B72","name":"KHITAN SMALL SCRIPT CHARACTER-18B72","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf72"},101235:{"value":"18B73","name":"KHITAN SMALL SCRIPT CHARACTER-18B73","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf73"},101236:{"value":"18B74","name":"KHITAN SMALL SCRIPT CHARACTER-18B74","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf74"},101237:{"value":"18B75","name":"KHITAN SMALL SCRIPT CHARACTER-18B75","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf75"},101238:{"value":"18B76","name":"KHITAN SMALL SCRIPT CHARACTER-18B76","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf76"},101239:{"value":"18B77","name":"KHITAN SMALL SCRIPT CHARACTER-18B77","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf77"},101240:{"value":"18B78","name":"KHITAN SMALL SCRIPT CHARACTER-18B78","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf78"},101241:{"value":"18B79","name":"KHITAN SMALL SCRIPT CHARACTER-18B79","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf79"},101242:{"value":"18B7A","name":"KHITAN SMALL SCRIPT CHARACTER-18B7A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf7a"},101243:{"value":"18B7B","name":"KHITAN SMALL SCRIPT CHARACTER-18B7B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf7b"},101244:{"value":"18B7C","name":"KHITAN SMALL SCRIPT CHARACTER-18B7C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf7c"},101245:{"value":"18B7D","name":"KHITAN SMALL SCRIPT CHARACTER-18B7D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf7d"},101246:{"value":"18B7E","name":"KHITAN SMALL SCRIPT CHARACTER-18B7E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf7e"},101247:{"value":"18B7F","name":"KHITAN SMALL SCRIPT CHARACTER-18B7F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf7f"},101248:{"value":"18B80","name":"KHITAN SMALL SCRIPT CHARACTER-18B80","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf80"},101249:{"value":"18B81","name":"KHITAN SMALL SCRIPT CHARACTER-18B81","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf81"},101250:{"value":"18B82","name":"KHITAN SMALL SCRIPT CHARACTER-18B82","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf82"},101251:{"value":"18B83","name":"KHITAN SMALL SCRIPT CHARACTER-18B83","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf83"},101252:{"value":"18B84","name":"KHITAN SMALL SCRIPT CHARACTER-18B84","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf84"},101253:{"value":"18B85","name":"KHITAN SMALL SCRIPT CHARACTER-18B85","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf85"},101254:{"value":"18B86","name":"KHITAN SMALL SCRIPT CHARACTER-18B86","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf86"},101255:{"value":"18B87","name":"KHITAN SMALL SCRIPT CHARACTER-18B87","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf87"},101256:{"value":"18B88","name":"KHITAN SMALL SCRIPT CHARACTER-18B88","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf88"},101257:{"value":"18B89","name":"KHITAN SMALL SCRIPT CHARACTER-18B89","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf89"},101258:{"value":"18B8A","name":"KHITAN SMALL SCRIPT CHARACTER-18B8A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf8a"},101259:{"value":"18B8B","name":"KHITAN SMALL SCRIPT CHARACTER-18B8B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf8b"},101260:{"value":"18B8C","name":"KHITAN SMALL SCRIPT CHARACTER-18B8C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf8c"},101261:{"value":"18B8D","name":"KHITAN SMALL SCRIPT CHARACTER-18B8D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf8d"},101262:{"value":"18B8E","name":"KHITAN SMALL SCRIPT CHARACTER-18B8E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf8e"},101263:{"value":"18B8F","name":"KHITAN SMALL SCRIPT CHARACTER-18B8F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf8f"},101264:{"value":"18B90","name":"KHITAN SMALL SCRIPT CHARACTER-18B90","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf90"},101265:{"value":"18B91","name":"KHITAN SMALL SCRIPT CHARACTER-18B91","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf91"},101266:{"value":"18B92","name":"KHITAN SMALL SCRIPT CHARACTER-18B92","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf92"},101267:{"value":"18B93","name":"KHITAN SMALL SCRIPT CHARACTER-18B93","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf93"},101268:{"value":"18B94","name":"KHITAN SMALL SCRIPT CHARACTER-18B94","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf94"},101269:{"value":"18B95","name":"KHITAN SMALL SCRIPT CHARACTER-18B95","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf95"},101270:{"value":"18B96","name":"KHITAN SMALL SCRIPT CHARACTER-18B96","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf96"},101271:{"value":"18B97","name":"KHITAN SMALL SCRIPT CHARACTER-18B97","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf97"},101272:{"value":"18B98","name":"KHITAN SMALL SCRIPT CHARACTER-18B98","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf98"},101273:{"value":"18B99","name":"KHITAN SMALL SCRIPT CHARACTER-18B99","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf99"},101274:{"value":"18B9A","name":"KHITAN SMALL SCRIPT CHARACTER-18B9A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf9a"},101275:{"value":"18B9B","name":"KHITAN SMALL SCRIPT CHARACTER-18B9B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf9b"},101276:{"value":"18B9C","name":"KHITAN SMALL SCRIPT CHARACTER-18B9C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf9c"},101277:{"value":"18B9D","name":"KHITAN SMALL SCRIPT CHARACTER-18B9D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf9d"},101278:{"value":"18B9E","name":"KHITAN SMALL SCRIPT CHARACTER-18B9E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf9e"},101279:{"value":"18B9F","name":"KHITAN SMALL SCRIPT CHARACTER-18B9F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udf9f"},101280:{"value":"18BA0","name":"KHITAN SMALL SCRIPT CHARACTER-18BA0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa0"},101281:{"value":"18BA1","name":"KHITAN SMALL SCRIPT CHARACTER-18BA1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa1"},101282:{"value":"18BA2","name":"KHITAN SMALL SCRIPT CHARACTER-18BA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa2"},101283:{"value":"18BA3","name":"KHITAN SMALL SCRIPT CHARACTER-18BA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa3"},101284:{"value":"18BA4","name":"KHITAN SMALL SCRIPT CHARACTER-18BA4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa4"},101285:{"value":"18BA5","name":"KHITAN SMALL SCRIPT CHARACTER-18BA5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa5"},101286:{"value":"18BA6","name":"KHITAN SMALL SCRIPT CHARACTER-18BA6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa6"},101287:{"value":"18BA7","name":"KHITAN SMALL SCRIPT CHARACTER-18BA7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa7"},101288:{"value":"18BA8","name":"KHITAN SMALL SCRIPT CHARACTER-18BA8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa8"},101289:{"value":"18BA9","name":"KHITAN SMALL SCRIPT CHARACTER-18BA9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfa9"},101290:{"value":"18BAA","name":"KHITAN SMALL SCRIPT CHARACTER-18BAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfaa"},101291:{"value":"18BAB","name":"KHITAN SMALL SCRIPT CHARACTER-18BAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfab"},101292:{"value":"18BAC","name":"KHITAN SMALL SCRIPT CHARACTER-18BAC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfac"},101293:{"value":"18BAD","name":"KHITAN SMALL SCRIPT CHARACTER-18BAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfad"},101294:{"value":"18BAE","name":"KHITAN SMALL SCRIPT CHARACTER-18BAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfae"},101295:{"value":"18BAF","name":"KHITAN SMALL SCRIPT CHARACTER-18BAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfaf"},101296:{"value":"18BB0","name":"KHITAN SMALL SCRIPT CHARACTER-18BB0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb0"},101297:{"value":"18BB1","name":"KHITAN SMALL SCRIPT CHARACTER-18BB1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb1"},101298:{"value":"18BB2","name":"KHITAN SMALL SCRIPT CHARACTER-18BB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb2"},101299:{"value":"18BB3","name":"KHITAN SMALL SCRIPT CHARACTER-18BB3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb3"},101300:{"value":"18BB4","name":"KHITAN SMALL SCRIPT CHARACTER-18BB4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb4"},101301:{"value":"18BB5","name":"KHITAN SMALL SCRIPT CHARACTER-18BB5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb5"},101302:{"value":"18BB6","name":"KHITAN SMALL SCRIPT CHARACTER-18BB6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb6"},101303:{"value":"18BB7","name":"KHITAN SMALL SCRIPT CHARACTER-18BB7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb7"},101304:{"value":"18BB8","name":"KHITAN SMALL SCRIPT CHARACTER-18BB8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb8"},101305:{"value":"18BB9","name":"KHITAN SMALL SCRIPT CHARACTER-18BB9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfb9"},101306:{"value":"18BBA","name":"KHITAN SMALL SCRIPT CHARACTER-18BBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfba"},101307:{"value":"18BBB","name":"KHITAN SMALL SCRIPT CHARACTER-18BBB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfbb"},101308:{"value":"18BBC","name":"KHITAN SMALL SCRIPT CHARACTER-18BBC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfbc"},101309:{"value":"18BBD","name":"KHITAN SMALL SCRIPT CHARACTER-18BBD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfbd"},101310:{"value":"18BBE","name":"KHITAN SMALL SCRIPT CHARACTER-18BBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfbe"},101311:{"value":"18BBF","name":"KHITAN SMALL SCRIPT CHARACTER-18BBF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfbf"},101312:{"value":"18BC0","name":"KHITAN SMALL SCRIPT CHARACTER-18BC0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc0"},101313:{"value":"18BC1","name":"KHITAN SMALL SCRIPT CHARACTER-18BC1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc1"},101314:{"value":"18BC2","name":"KHITAN SMALL SCRIPT CHARACTER-18BC2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc2"},101315:{"value":"18BC3","name":"KHITAN SMALL SCRIPT CHARACTER-18BC3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc3"},101316:{"value":"18BC4","name":"KHITAN SMALL SCRIPT CHARACTER-18BC4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc4"},101317:{"value":"18BC5","name":"KHITAN SMALL SCRIPT CHARACTER-18BC5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc5"},101318:{"value":"18BC6","name":"KHITAN SMALL SCRIPT CHARACTER-18BC6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc6"},101319:{"value":"18BC7","name":"KHITAN SMALL SCRIPT CHARACTER-18BC7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc7"},101320:{"value":"18BC8","name":"KHITAN SMALL SCRIPT CHARACTER-18BC8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc8"},101321:{"value":"18BC9","name":"KHITAN SMALL SCRIPT CHARACTER-18BC9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfc9"},101322:{"value":"18BCA","name":"KHITAN SMALL SCRIPT CHARACTER-18BCA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfca"},101323:{"value":"18BCB","name":"KHITAN SMALL SCRIPT CHARACTER-18BCB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfcb"},101324:{"value":"18BCC","name":"KHITAN SMALL SCRIPT CHARACTER-18BCC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfcc"},101325:{"value":"18BCD","name":"KHITAN SMALL SCRIPT CHARACTER-18BCD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfcd"},101326:{"value":"18BCE","name":"KHITAN SMALL SCRIPT CHARACTER-18BCE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfce"},101327:{"value":"18BCF","name":"KHITAN SMALL SCRIPT CHARACTER-18BCF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfcf"},101328:{"value":"18BD0","name":"KHITAN SMALL SCRIPT CHARACTER-18BD0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd0"},101329:{"value":"18BD1","name":"KHITAN SMALL SCRIPT CHARACTER-18BD1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd1"},101330:{"value":"18BD2","name":"KHITAN SMALL SCRIPT CHARACTER-18BD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd2"},101331:{"value":"18BD3","name":"KHITAN SMALL SCRIPT CHARACTER-18BD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd3"},101332:{"value":"18BD4","name":"KHITAN SMALL SCRIPT CHARACTER-18BD4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd4"},101333:{"value":"18BD5","name":"KHITAN SMALL SCRIPT CHARACTER-18BD5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd5"},101334:{"value":"18BD6","name":"KHITAN SMALL SCRIPT CHARACTER-18BD6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd6"},101335:{"value":"18BD7","name":"KHITAN SMALL SCRIPT CHARACTER-18BD7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd7"},101336:{"value":"18BD8","name":"KHITAN SMALL SCRIPT CHARACTER-18BD8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd8"},101337:{"value":"18BD9","name":"KHITAN SMALL SCRIPT CHARACTER-18BD9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfd9"},101338:{"value":"18BDA","name":"KHITAN SMALL SCRIPT CHARACTER-18BDA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfda"},101339:{"value":"18BDB","name":"KHITAN SMALL SCRIPT CHARACTER-18BDB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfdb"},101340:{"value":"18BDC","name":"KHITAN SMALL SCRIPT CHARACTER-18BDC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfdc"},101341:{"value":"18BDD","name":"KHITAN SMALL SCRIPT CHARACTER-18BDD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfdd"},101342:{"value":"18BDE","name":"KHITAN SMALL SCRIPT CHARACTER-18BDE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfde"},101343:{"value":"18BDF","name":"KHITAN SMALL SCRIPT CHARACTER-18BDF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfdf"},101344:{"value":"18BE0","name":"KHITAN SMALL SCRIPT CHARACTER-18BE0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe0"},101345:{"value":"18BE1","name":"KHITAN SMALL SCRIPT CHARACTER-18BE1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe1"},101346:{"value":"18BE2","name":"KHITAN SMALL SCRIPT CHARACTER-18BE2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe2"},101347:{"value":"18BE3","name":"KHITAN SMALL SCRIPT CHARACTER-18BE3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe3"},101348:{"value":"18BE4","name":"KHITAN SMALL SCRIPT CHARACTER-18BE4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe4"},101349:{"value":"18BE5","name":"KHITAN SMALL SCRIPT CHARACTER-18BE5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe5"},101350:{"value":"18BE6","name":"KHITAN SMALL SCRIPT CHARACTER-18BE6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe6"},101351:{"value":"18BE7","name":"KHITAN SMALL SCRIPT CHARACTER-18BE7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe7"},101352:{"value":"18BE8","name":"KHITAN SMALL SCRIPT CHARACTER-18BE8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe8"},101353:{"value":"18BE9","name":"KHITAN SMALL SCRIPT CHARACTER-18BE9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfe9"},101354:{"value":"18BEA","name":"KHITAN SMALL SCRIPT CHARACTER-18BEA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfea"},101355:{"value":"18BEB","name":"KHITAN SMALL SCRIPT CHARACTER-18BEB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfeb"},101356:{"value":"18BEC","name":"KHITAN SMALL SCRIPT CHARACTER-18BEC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfec"},101357:{"value":"18BED","name":"KHITAN SMALL SCRIPT CHARACTER-18BED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfed"},101358:{"value":"18BEE","name":"KHITAN SMALL SCRIPT CHARACTER-18BEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfee"},101359:{"value":"18BEF","name":"KHITAN SMALL SCRIPT CHARACTER-18BEF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfef"},101360:{"value":"18BF0","name":"KHITAN SMALL SCRIPT CHARACTER-18BF0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff0"},101361:{"value":"18BF1","name":"KHITAN SMALL SCRIPT CHARACTER-18BF1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff1"},101362:{"value":"18BF2","name":"KHITAN SMALL SCRIPT CHARACTER-18BF2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff2"},101363:{"value":"18BF3","name":"KHITAN SMALL SCRIPT CHARACTER-18BF3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff3"},101364:{"value":"18BF4","name":"KHITAN SMALL SCRIPT CHARACTER-18BF4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff4"},101365:{"value":"18BF5","name":"KHITAN SMALL SCRIPT CHARACTER-18BF5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff5"},101366:{"value":"18BF6","name":"KHITAN SMALL SCRIPT CHARACTER-18BF6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff6"},101367:{"value":"18BF7","name":"KHITAN SMALL SCRIPT CHARACTER-18BF7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff7"},101368:{"value":"18BF8","name":"KHITAN SMALL SCRIPT CHARACTER-18BF8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff8"},101369:{"value":"18BF9","name":"KHITAN SMALL SCRIPT CHARACTER-18BF9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udff9"},101370:{"value":"18BFA","name":"KHITAN SMALL SCRIPT CHARACTER-18BFA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udffa"},101371:{"value":"18BFB","name":"KHITAN SMALL SCRIPT CHARACTER-18BFB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udffb"},101372:{"value":"18BFC","name":"KHITAN SMALL SCRIPT CHARACTER-18BFC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udffc"},101373:{"value":"18BFD","name":"KHITAN SMALL SCRIPT CHARACTER-18BFD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udffd"},101374:{"value":"18BFE","name":"KHITAN SMALL SCRIPT CHARACTER-18BFE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udffe"},101375:{"value":"18BFF","name":"KHITAN SMALL SCRIPT CHARACTER-18BFF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud822\udfff"},101376:{"value":"18C00","name":"KHITAN SMALL SCRIPT CHARACTER-18C00","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc00"},101377:{"value":"18C01","name":"KHITAN SMALL SCRIPT CHARACTER-18C01","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc01"},101378:{"value":"18C02","name":"KHITAN SMALL SCRIPT CHARACTER-18C02","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc02"},101379:{"value":"18C03","name":"KHITAN SMALL SCRIPT CHARACTER-18C03","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc03"},101380:{"value":"18C04","name":"KHITAN SMALL SCRIPT CHARACTER-18C04","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc04"},101381:{"value":"18C05","name":"KHITAN SMALL SCRIPT CHARACTER-18C05","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc05"},101382:{"value":"18C06","name":"KHITAN SMALL SCRIPT CHARACTER-18C06","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc06"},101383:{"value":"18C07","name":"KHITAN SMALL SCRIPT CHARACTER-18C07","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc07"},101384:{"value":"18C08","name":"KHITAN SMALL SCRIPT CHARACTER-18C08","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc08"},101385:{"value":"18C09","name":"KHITAN SMALL SCRIPT CHARACTER-18C09","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc09"},101386:{"value":"18C0A","name":"KHITAN SMALL SCRIPT CHARACTER-18C0A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc0a"},101387:{"value":"18C0B","name":"KHITAN SMALL SCRIPT CHARACTER-18C0B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc0b"},101388:{"value":"18C0C","name":"KHITAN SMALL SCRIPT CHARACTER-18C0C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc0c"},101389:{"value":"18C0D","name":"KHITAN SMALL SCRIPT CHARACTER-18C0D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc0d"},101390:{"value":"18C0E","name":"KHITAN SMALL SCRIPT CHARACTER-18C0E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc0e"},101391:{"value":"18C0F","name":"KHITAN SMALL SCRIPT CHARACTER-18C0F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc0f"},101392:{"value":"18C10","name":"KHITAN SMALL SCRIPT CHARACTER-18C10","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc10"},101393:{"value":"18C11","name":"KHITAN SMALL SCRIPT CHARACTER-18C11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc11"},101394:{"value":"18C12","name":"KHITAN SMALL SCRIPT CHARACTER-18C12","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc12"},101395:{"value":"18C13","name":"KHITAN SMALL SCRIPT CHARACTER-18C13","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc13"},101396:{"value":"18C14","name":"KHITAN SMALL SCRIPT CHARACTER-18C14","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc14"},101397:{"value":"18C15","name":"KHITAN SMALL SCRIPT CHARACTER-18C15","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc15"},101398:{"value":"18C16","name":"KHITAN SMALL SCRIPT CHARACTER-18C16","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc16"},101399:{"value":"18C17","name":"KHITAN SMALL SCRIPT CHARACTER-18C17","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc17"},101400:{"value":"18C18","name":"KHITAN SMALL SCRIPT CHARACTER-18C18","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc18"},101401:{"value":"18C19","name":"KHITAN SMALL SCRIPT CHARACTER-18C19","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc19"},101402:{"value":"18C1A","name":"KHITAN SMALL SCRIPT CHARACTER-18C1A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc1a"},101403:{"value":"18C1B","name":"KHITAN SMALL SCRIPT CHARACTER-18C1B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc1b"},101404:{"value":"18C1C","name":"KHITAN SMALL SCRIPT CHARACTER-18C1C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc1c"},101405:{"value":"18C1D","name":"KHITAN SMALL SCRIPT CHARACTER-18C1D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc1d"},101406:{"value":"18C1E","name":"KHITAN SMALL SCRIPT CHARACTER-18C1E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc1e"},101407:{"value":"18C1F","name":"KHITAN SMALL SCRIPT CHARACTER-18C1F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc1f"},101408:{"value":"18C20","name":"KHITAN SMALL SCRIPT CHARACTER-18C20","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc20"},101409:{"value":"18C21","name":"KHITAN SMALL SCRIPT CHARACTER-18C21","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc21"},101410:{"value":"18C22","name":"KHITAN SMALL SCRIPT CHARACTER-18C22","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc22"},101411:{"value":"18C23","name":"KHITAN SMALL SCRIPT CHARACTER-18C23","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc23"},101412:{"value":"18C24","name":"KHITAN SMALL SCRIPT CHARACTER-18C24","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc24"},101413:{"value":"18C25","name":"KHITAN SMALL SCRIPT CHARACTER-18C25","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc25"},101414:{"value":"18C26","name":"KHITAN SMALL SCRIPT CHARACTER-18C26","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc26"},101415:{"value":"18C27","name":"KHITAN SMALL SCRIPT CHARACTER-18C27","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc27"},101416:{"value":"18C28","name":"KHITAN SMALL SCRIPT CHARACTER-18C28","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc28"},101417:{"value":"18C29","name":"KHITAN SMALL SCRIPT CHARACTER-18C29","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc29"},101418:{"value":"18C2A","name":"KHITAN SMALL SCRIPT CHARACTER-18C2A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc2a"},101419:{"value":"18C2B","name":"KHITAN SMALL SCRIPT CHARACTER-18C2B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc2b"},101420:{"value":"18C2C","name":"KHITAN SMALL SCRIPT CHARACTER-18C2C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc2c"},101421:{"value":"18C2D","name":"KHITAN SMALL SCRIPT CHARACTER-18C2D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc2d"},101422:{"value":"18C2E","name":"KHITAN SMALL SCRIPT CHARACTER-18C2E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc2e"},101423:{"value":"18C2F","name":"KHITAN SMALL SCRIPT CHARACTER-18C2F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc2f"},101424:{"value":"18C30","name":"KHITAN SMALL SCRIPT CHARACTER-18C30","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc30"},101425:{"value":"18C31","name":"KHITAN SMALL SCRIPT CHARACTER-18C31","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc31"},101426:{"value":"18C32","name":"KHITAN SMALL SCRIPT CHARACTER-18C32","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc32"},101427:{"value":"18C33","name":"KHITAN SMALL SCRIPT CHARACTER-18C33","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc33"},101428:{"value":"18C34","name":"KHITAN SMALL SCRIPT CHARACTER-18C34","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc34"},101429:{"value":"18C35","name":"KHITAN SMALL SCRIPT CHARACTER-18C35","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc35"},101430:{"value":"18C36","name":"KHITAN SMALL SCRIPT CHARACTER-18C36","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc36"},101431:{"value":"18C37","name":"KHITAN SMALL SCRIPT CHARACTER-18C37","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc37"},101432:{"value":"18C38","name":"KHITAN SMALL SCRIPT CHARACTER-18C38","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc38"},101433:{"value":"18C39","name":"KHITAN SMALL SCRIPT CHARACTER-18C39","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc39"},101434:{"value":"18C3A","name":"KHITAN SMALL SCRIPT CHARACTER-18C3A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc3a"},101435:{"value":"18C3B","name":"KHITAN SMALL SCRIPT CHARACTER-18C3B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc3b"},101436:{"value":"18C3C","name":"KHITAN SMALL SCRIPT CHARACTER-18C3C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc3c"},101437:{"value":"18C3D","name":"KHITAN SMALL SCRIPT CHARACTER-18C3D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc3d"},101438:{"value":"18C3E","name":"KHITAN SMALL SCRIPT CHARACTER-18C3E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc3e"},101439:{"value":"18C3F","name":"KHITAN SMALL SCRIPT CHARACTER-18C3F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc3f"},101440:{"value":"18C40","name":"KHITAN SMALL SCRIPT CHARACTER-18C40","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc40"},101441:{"value":"18C41","name":"KHITAN SMALL SCRIPT CHARACTER-18C41","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc41"},101442:{"value":"18C42","name":"KHITAN SMALL SCRIPT CHARACTER-18C42","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc42"},101443:{"value":"18C43","name":"KHITAN SMALL SCRIPT CHARACTER-18C43","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc43"},101444:{"value":"18C44","name":"KHITAN SMALL SCRIPT CHARACTER-18C44","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc44"},101445:{"value":"18C45","name":"KHITAN SMALL SCRIPT CHARACTER-18C45","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc45"},101446:{"value":"18C46","name":"KHITAN SMALL SCRIPT CHARACTER-18C46","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc46"},101447:{"value":"18C47","name":"KHITAN SMALL SCRIPT CHARACTER-18C47","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc47"},101448:{"value":"18C48","name":"KHITAN SMALL SCRIPT CHARACTER-18C48","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc48"},101449:{"value":"18C49","name":"KHITAN SMALL SCRIPT CHARACTER-18C49","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc49"},101450:{"value":"18C4A","name":"KHITAN SMALL SCRIPT CHARACTER-18C4A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc4a"},101451:{"value":"18C4B","name":"KHITAN SMALL SCRIPT CHARACTER-18C4B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc4b"},101452:{"value":"18C4C","name":"KHITAN SMALL SCRIPT CHARACTER-18C4C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc4c"},101453:{"value":"18C4D","name":"KHITAN SMALL SCRIPT CHARACTER-18C4D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc4d"},101454:{"value":"18C4E","name":"KHITAN SMALL SCRIPT CHARACTER-18C4E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc4e"},101455:{"value":"18C4F","name":"KHITAN SMALL SCRIPT CHARACTER-18C4F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc4f"},101456:{"value":"18C50","name":"KHITAN SMALL SCRIPT CHARACTER-18C50","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc50"},101457:{"value":"18C51","name":"KHITAN SMALL SCRIPT CHARACTER-18C51","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc51"},101458:{"value":"18C52","name":"KHITAN SMALL SCRIPT CHARACTER-18C52","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc52"},101459:{"value":"18C53","name":"KHITAN SMALL SCRIPT CHARACTER-18C53","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc53"},101460:{"value":"18C54","name":"KHITAN SMALL SCRIPT CHARACTER-18C54","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc54"},101461:{"value":"18C55","name":"KHITAN SMALL SCRIPT CHARACTER-18C55","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc55"},101462:{"value":"18C56","name":"KHITAN SMALL SCRIPT CHARACTER-18C56","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc56"},101463:{"value":"18C57","name":"KHITAN SMALL SCRIPT CHARACTER-18C57","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc57"},101464:{"value":"18C58","name":"KHITAN SMALL SCRIPT CHARACTER-18C58","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc58"},101465:{"value":"18C59","name":"KHITAN SMALL SCRIPT CHARACTER-18C59","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc59"},101466:{"value":"18C5A","name":"KHITAN SMALL SCRIPT CHARACTER-18C5A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc5a"},101467:{"value":"18C5B","name":"KHITAN SMALL SCRIPT CHARACTER-18C5B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc5b"},101468:{"value":"18C5C","name":"KHITAN SMALL SCRIPT CHARACTER-18C5C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc5c"},101469:{"value":"18C5D","name":"KHITAN SMALL SCRIPT CHARACTER-18C5D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc5d"},101470:{"value":"18C5E","name":"KHITAN SMALL SCRIPT CHARACTER-18C5E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc5e"},101471:{"value":"18C5F","name":"KHITAN SMALL SCRIPT CHARACTER-18C5F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc5f"},101472:{"value":"18C60","name":"KHITAN SMALL SCRIPT CHARACTER-18C60","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc60"},101473:{"value":"18C61","name":"KHITAN SMALL SCRIPT CHARACTER-18C61","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc61"},101474:{"value":"18C62","name":"KHITAN SMALL SCRIPT CHARACTER-18C62","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc62"},101475:{"value":"18C63","name":"KHITAN SMALL SCRIPT CHARACTER-18C63","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc63"},101476:{"value":"18C64","name":"KHITAN SMALL SCRIPT CHARACTER-18C64","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc64"},101477:{"value":"18C65","name":"KHITAN SMALL SCRIPT CHARACTER-18C65","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc65"},101478:{"value":"18C66","name":"KHITAN SMALL SCRIPT CHARACTER-18C66","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc66"},101479:{"value":"18C67","name":"KHITAN SMALL SCRIPT CHARACTER-18C67","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc67"},101480:{"value":"18C68","name":"KHITAN SMALL SCRIPT CHARACTER-18C68","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc68"},101481:{"value":"18C69","name":"KHITAN SMALL SCRIPT CHARACTER-18C69","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc69"},101482:{"value":"18C6A","name":"KHITAN SMALL SCRIPT CHARACTER-18C6A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc6a"},101483:{"value":"18C6B","name":"KHITAN SMALL SCRIPT CHARACTER-18C6B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc6b"},101484:{"value":"18C6C","name":"KHITAN SMALL SCRIPT CHARACTER-18C6C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc6c"},101485:{"value":"18C6D","name":"KHITAN SMALL SCRIPT CHARACTER-18C6D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc6d"},101486:{"value":"18C6E","name":"KHITAN SMALL SCRIPT CHARACTER-18C6E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc6e"},101487:{"value":"18C6F","name":"KHITAN SMALL SCRIPT CHARACTER-18C6F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc6f"},101488:{"value":"18C70","name":"KHITAN SMALL SCRIPT CHARACTER-18C70","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc70"},101489:{"value":"18C71","name":"KHITAN SMALL SCRIPT CHARACTER-18C71","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc71"},101490:{"value":"18C72","name":"KHITAN SMALL SCRIPT CHARACTER-18C72","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc72"},101491:{"value":"18C73","name":"KHITAN SMALL SCRIPT CHARACTER-18C73","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc73"},101492:{"value":"18C74","name":"KHITAN SMALL SCRIPT CHARACTER-18C74","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc74"},101493:{"value":"18C75","name":"KHITAN SMALL SCRIPT CHARACTER-18C75","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc75"},101494:{"value":"18C76","name":"KHITAN SMALL SCRIPT CHARACTER-18C76","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc76"},101495:{"value":"18C77","name":"KHITAN SMALL SCRIPT CHARACTER-18C77","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc77"},101496:{"value":"18C78","name":"KHITAN SMALL SCRIPT CHARACTER-18C78","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc78"},101497:{"value":"18C79","name":"KHITAN SMALL SCRIPT CHARACTER-18C79","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc79"},101498:{"value":"18C7A","name":"KHITAN SMALL SCRIPT CHARACTER-18C7A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc7a"},101499:{"value":"18C7B","name":"KHITAN SMALL SCRIPT CHARACTER-18C7B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc7b"},101500:{"value":"18C7C","name":"KHITAN SMALL SCRIPT CHARACTER-18C7C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc7c"},101501:{"value":"18C7D","name":"KHITAN SMALL SCRIPT CHARACTER-18C7D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc7d"},101502:{"value":"18C7E","name":"KHITAN SMALL SCRIPT CHARACTER-18C7E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc7e"},101503:{"value":"18C7F","name":"KHITAN SMALL SCRIPT CHARACTER-18C7F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc7f"},101504:{"value":"18C80","name":"KHITAN SMALL SCRIPT CHARACTER-18C80","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc80"},101505:{"value":"18C81","name":"KHITAN SMALL SCRIPT CHARACTER-18C81","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc81"},101506:{"value":"18C82","name":"KHITAN SMALL SCRIPT CHARACTER-18C82","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc82"},101507:{"value":"18C83","name":"KHITAN SMALL SCRIPT CHARACTER-18C83","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc83"},101508:{"value":"18C84","name":"KHITAN SMALL SCRIPT CHARACTER-18C84","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc84"},101509:{"value":"18C85","name":"KHITAN SMALL SCRIPT CHARACTER-18C85","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc85"},101510:{"value":"18C86","name":"KHITAN SMALL SCRIPT CHARACTER-18C86","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc86"},101511:{"value":"18C87","name":"KHITAN SMALL SCRIPT CHARACTER-18C87","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc87"},101512:{"value":"18C88","name":"KHITAN SMALL SCRIPT CHARACTER-18C88","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc88"},101513:{"value":"18C89","name":"KHITAN SMALL SCRIPT CHARACTER-18C89","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc89"},101514:{"value":"18C8A","name":"KHITAN SMALL SCRIPT CHARACTER-18C8A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc8a"},101515:{"value":"18C8B","name":"KHITAN SMALL SCRIPT CHARACTER-18C8B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc8b"},101516:{"value":"18C8C","name":"KHITAN SMALL SCRIPT CHARACTER-18C8C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc8c"},101517:{"value":"18C8D","name":"KHITAN SMALL SCRIPT CHARACTER-18C8D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc8d"},101518:{"value":"18C8E","name":"KHITAN SMALL SCRIPT CHARACTER-18C8E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc8e"},101519:{"value":"18C8F","name":"KHITAN SMALL SCRIPT CHARACTER-18C8F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc8f"},101520:{"value":"18C90","name":"KHITAN SMALL SCRIPT CHARACTER-18C90","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc90"},101521:{"value":"18C91","name":"KHITAN SMALL SCRIPT CHARACTER-18C91","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc91"},101522:{"value":"18C92","name":"KHITAN SMALL SCRIPT CHARACTER-18C92","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc92"},101523:{"value":"18C93","name":"KHITAN SMALL SCRIPT CHARACTER-18C93","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc93"},101524:{"value":"18C94","name":"KHITAN SMALL SCRIPT CHARACTER-18C94","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc94"},101525:{"value":"18C95","name":"KHITAN SMALL SCRIPT CHARACTER-18C95","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc95"},101526:{"value":"18C96","name":"KHITAN SMALL SCRIPT CHARACTER-18C96","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc96"},101527:{"value":"18C97","name":"KHITAN SMALL SCRIPT CHARACTER-18C97","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc97"},101528:{"value":"18C98","name":"KHITAN SMALL SCRIPT CHARACTER-18C98","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc98"},101529:{"value":"18C99","name":"KHITAN SMALL SCRIPT CHARACTER-18C99","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc99"},101530:{"value":"18C9A","name":"KHITAN SMALL SCRIPT CHARACTER-18C9A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc9a"},101531:{"value":"18C9B","name":"KHITAN SMALL SCRIPT CHARACTER-18C9B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc9b"},101532:{"value":"18C9C","name":"KHITAN SMALL SCRIPT CHARACTER-18C9C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc9c"},101533:{"value":"18C9D","name":"KHITAN SMALL SCRIPT CHARACTER-18C9D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc9d"},101534:{"value":"18C9E","name":"KHITAN SMALL SCRIPT CHARACTER-18C9E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc9e"},101535:{"value":"18C9F","name":"KHITAN SMALL SCRIPT CHARACTER-18C9F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udc9f"},101536:{"value":"18CA0","name":"KHITAN SMALL SCRIPT CHARACTER-18CA0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca0"},101537:{"value":"18CA1","name":"KHITAN SMALL SCRIPT CHARACTER-18CA1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca1"},101538:{"value":"18CA2","name":"KHITAN SMALL SCRIPT CHARACTER-18CA2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca2"},101539:{"value":"18CA3","name":"KHITAN SMALL SCRIPT CHARACTER-18CA3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca3"},101540:{"value":"18CA4","name":"KHITAN SMALL SCRIPT CHARACTER-18CA4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca4"},101541:{"value":"18CA5","name":"KHITAN SMALL SCRIPT CHARACTER-18CA5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca5"},101542:{"value":"18CA6","name":"KHITAN SMALL SCRIPT CHARACTER-18CA6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca6"},101543:{"value":"18CA7","name":"KHITAN SMALL SCRIPT CHARACTER-18CA7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca7"},101544:{"value":"18CA8","name":"KHITAN SMALL SCRIPT CHARACTER-18CA8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca8"},101545:{"value":"18CA9","name":"KHITAN SMALL SCRIPT CHARACTER-18CA9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udca9"},101546:{"value":"18CAA","name":"KHITAN SMALL SCRIPT CHARACTER-18CAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcaa"},101547:{"value":"18CAB","name":"KHITAN SMALL SCRIPT CHARACTER-18CAB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcab"},101548:{"value":"18CAC","name":"KHITAN SMALL SCRIPT CHARACTER-18CAC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcac"},101549:{"value":"18CAD","name":"KHITAN SMALL SCRIPT CHARACTER-18CAD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcad"},101550:{"value":"18CAE","name":"KHITAN SMALL SCRIPT CHARACTER-18CAE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcae"},101551:{"value":"18CAF","name":"KHITAN SMALL SCRIPT CHARACTER-18CAF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcaf"},101552:{"value":"18CB0","name":"KHITAN SMALL SCRIPT CHARACTER-18CB0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb0"},101553:{"value":"18CB1","name":"KHITAN SMALL SCRIPT CHARACTER-18CB1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb1"},101554:{"value":"18CB2","name":"KHITAN SMALL SCRIPT CHARACTER-18CB2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb2"},101555:{"value":"18CB3","name":"KHITAN SMALL SCRIPT CHARACTER-18CB3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb3"},101556:{"value":"18CB4","name":"KHITAN SMALL SCRIPT CHARACTER-18CB4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb4"},101557:{"value":"18CB5","name":"KHITAN SMALL SCRIPT CHARACTER-18CB5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb5"},101558:{"value":"18CB6","name":"KHITAN SMALL SCRIPT CHARACTER-18CB6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb6"},101559:{"value":"18CB7","name":"KHITAN SMALL SCRIPT CHARACTER-18CB7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb7"},101560:{"value":"18CB8","name":"KHITAN SMALL SCRIPT CHARACTER-18CB8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb8"},101561:{"value":"18CB9","name":"KHITAN SMALL SCRIPT CHARACTER-18CB9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcb9"},101562:{"value":"18CBA","name":"KHITAN SMALL SCRIPT CHARACTER-18CBA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcba"},101563:{"value":"18CBB","name":"KHITAN SMALL SCRIPT CHARACTER-18CBB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcbb"},101564:{"value":"18CBC","name":"KHITAN SMALL SCRIPT CHARACTER-18CBC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcbc"},101565:{"value":"18CBD","name":"KHITAN SMALL SCRIPT CHARACTER-18CBD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcbd"},101566:{"value":"18CBE","name":"KHITAN SMALL SCRIPT CHARACTER-18CBE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcbe"},101567:{"value":"18CBF","name":"KHITAN SMALL SCRIPT CHARACTER-18CBF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcbf"},101568:{"value":"18CC0","name":"KHITAN SMALL SCRIPT CHARACTER-18CC0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc0"},101569:{"value":"18CC1","name":"KHITAN SMALL SCRIPT CHARACTER-18CC1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc1"},101570:{"value":"18CC2","name":"KHITAN SMALL SCRIPT CHARACTER-18CC2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc2"},101571:{"value":"18CC3","name":"KHITAN SMALL SCRIPT CHARACTER-18CC3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc3"},101572:{"value":"18CC4","name":"KHITAN SMALL SCRIPT CHARACTER-18CC4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc4"},101573:{"value":"18CC5","name":"KHITAN SMALL SCRIPT CHARACTER-18CC5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc5"},101574:{"value":"18CC6","name":"KHITAN SMALL SCRIPT CHARACTER-18CC6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc6"},101575:{"value":"18CC7","name":"KHITAN SMALL SCRIPT CHARACTER-18CC7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc7"},101576:{"value":"18CC8","name":"KHITAN SMALL SCRIPT CHARACTER-18CC8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc8"},101577:{"value":"18CC9","name":"KHITAN SMALL SCRIPT CHARACTER-18CC9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcc9"},101578:{"value":"18CCA","name":"KHITAN SMALL SCRIPT CHARACTER-18CCA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcca"},101579:{"value":"18CCB","name":"KHITAN SMALL SCRIPT CHARACTER-18CCB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udccb"},101580:{"value":"18CCC","name":"KHITAN SMALL SCRIPT CHARACTER-18CCC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udccc"},101581:{"value":"18CCD","name":"KHITAN SMALL SCRIPT CHARACTER-18CCD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udccd"},101582:{"value":"18CCE","name":"KHITAN SMALL SCRIPT CHARACTER-18CCE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcce"},101583:{"value":"18CCF","name":"KHITAN SMALL SCRIPT CHARACTER-18CCF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udccf"},101584:{"value":"18CD0","name":"KHITAN SMALL SCRIPT CHARACTER-18CD0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcd0"},101585:{"value":"18CD1","name":"KHITAN SMALL SCRIPT CHARACTER-18CD1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcd1"},101586:{"value":"18CD2","name":"KHITAN SMALL SCRIPT CHARACTER-18CD2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcd2"},101587:{"value":"18CD3","name":"KHITAN SMALL SCRIPT CHARACTER-18CD3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcd3"},101588:{"value":"18CD4","name":"KHITAN SMALL SCRIPT CHARACTER-18CD4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcd4"},101589:{"value":"18CD5","name":"KHITAN SMALL SCRIPT CHARACTER-18CD5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udcd5"},101632:{"value":"18D00","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udd00"},101640:{"value":"18D08","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud823\udd08"},110592:{"value":"1B000","name":"KATAKANA LETTER ARCHAIC E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc00"},110593:{"value":"1B001","name":"HIRAGANA LETTER ARCHAIC YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc01"},110594:{"value":"1B002","name":"HENTAIGANA LETTER A-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc02"},110595:{"value":"1B003","name":"HENTAIGANA LETTER A-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc03"},110596:{"value":"1B004","name":"HENTAIGANA LETTER A-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc04"},110597:{"value":"1B005","name":"HENTAIGANA LETTER A-WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc05"},110598:{"value":"1B006","name":"HENTAIGANA LETTER I-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc06"},110599:{"value":"1B007","name":"HENTAIGANA LETTER I-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc07"},110600:{"value":"1B008","name":"HENTAIGANA LETTER I-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc08"},110601:{"value":"1B009","name":"HENTAIGANA LETTER I-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc09"},110602:{"value":"1B00A","name":"HENTAIGANA LETTER U-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc0a"},110603:{"value":"1B00B","name":"HENTAIGANA LETTER U-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc0b"},110604:{"value":"1B00C","name":"HENTAIGANA LETTER U-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc0c"},110605:{"value":"1B00D","name":"HENTAIGANA LETTER U-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc0d"},110606:{"value":"1B00E","name":"HENTAIGANA LETTER U-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc0e"},110607:{"value":"1B00F","name":"HENTAIGANA LETTER E-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc0f"},110608:{"value":"1B010","name":"HENTAIGANA LETTER E-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc10"},110609:{"value":"1B011","name":"HENTAIGANA LETTER E-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc11"},110610:{"value":"1B012","name":"HENTAIGANA LETTER E-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc12"},110611:{"value":"1B013","name":"HENTAIGANA LETTER E-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc13"},110612:{"value":"1B014","name":"HENTAIGANA LETTER O-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc14"},110613:{"value":"1B015","name":"HENTAIGANA LETTER O-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc15"},110614:{"value":"1B016","name":"HENTAIGANA LETTER O-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc16"},110615:{"value":"1B017","name":"HENTAIGANA LETTER KA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc17"},110616:{"value":"1B018","name":"HENTAIGANA LETTER KA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc18"},110617:{"value":"1B019","name":"HENTAIGANA LETTER KA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc19"},110618:{"value":"1B01A","name":"HENTAIGANA LETTER KA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc1a"},110619:{"value":"1B01B","name":"HENTAIGANA LETTER KA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc1b"},110620:{"value":"1B01C","name":"HENTAIGANA LETTER KA-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc1c"},110621:{"value":"1B01D","name":"HENTAIGANA LETTER KA-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc1d"},110622:{"value":"1B01E","name":"HENTAIGANA LETTER KA-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc1e"},110623:{"value":"1B01F","name":"HENTAIGANA LETTER KA-9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc1f"},110624:{"value":"1B020","name":"HENTAIGANA LETTER KA-10","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc20"},110625:{"value":"1B021","name":"HENTAIGANA LETTER KA-11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc21"},110626:{"value":"1B022","name":"HENTAIGANA LETTER KA-KE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc22"},110627:{"value":"1B023","name":"HENTAIGANA LETTER KI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc23"},110628:{"value":"1B024","name":"HENTAIGANA LETTER KI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc24"},110629:{"value":"1B025","name":"HENTAIGANA LETTER KI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc25"},110630:{"value":"1B026","name":"HENTAIGANA LETTER KI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc26"},110631:{"value":"1B027","name":"HENTAIGANA LETTER KI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc27"},110632:{"value":"1B028","name":"HENTAIGANA LETTER KI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc28"},110633:{"value":"1B029","name":"HENTAIGANA LETTER KI-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc29"},110634:{"value":"1B02A","name":"HENTAIGANA LETTER KI-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc2a"},110635:{"value":"1B02B","name":"HENTAIGANA LETTER KU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc2b"},110636:{"value":"1B02C","name":"HENTAIGANA LETTER KU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc2c"},110637:{"value":"1B02D","name":"HENTAIGANA LETTER KU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc2d"},110638:{"value":"1B02E","name":"HENTAIGANA LETTER KU-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc2e"},110639:{"value":"1B02F","name":"HENTAIGANA LETTER KU-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc2f"},110640:{"value":"1B030","name":"HENTAIGANA LETTER KU-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc30"},110641:{"value":"1B031","name":"HENTAIGANA LETTER KU-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc31"},110642:{"value":"1B032","name":"HENTAIGANA LETTER KE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc32"},110643:{"value":"1B033","name":"HENTAIGANA LETTER KE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc33"},110644:{"value":"1B034","name":"HENTAIGANA LETTER KE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc34"},110645:{"value":"1B035","name":"HENTAIGANA LETTER KE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc35"},110646:{"value":"1B036","name":"HENTAIGANA LETTER KE-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc36"},110647:{"value":"1B037","name":"HENTAIGANA LETTER KE-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc37"},110648:{"value":"1B038","name":"HENTAIGANA LETTER KO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc38"},110649:{"value":"1B039","name":"HENTAIGANA LETTER KO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc39"},110650:{"value":"1B03A","name":"HENTAIGANA LETTER KO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc3a"},110651:{"value":"1B03B","name":"HENTAIGANA LETTER KO-KI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc3b"},110652:{"value":"1B03C","name":"HENTAIGANA LETTER SA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc3c"},110653:{"value":"1B03D","name":"HENTAIGANA LETTER SA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc3d"},110654:{"value":"1B03E","name":"HENTAIGANA LETTER SA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc3e"},110655:{"value":"1B03F","name":"HENTAIGANA LETTER SA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc3f"},110656:{"value":"1B040","name":"HENTAIGANA LETTER SA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc40"},110657:{"value":"1B041","name":"HENTAIGANA LETTER SA-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc41"},110658:{"value":"1B042","name":"HENTAIGANA LETTER SA-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc42"},110659:{"value":"1B043","name":"HENTAIGANA LETTER SA-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc43"},110660:{"value":"1B044","name":"HENTAIGANA LETTER SI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc44"},110661:{"value":"1B045","name":"HENTAIGANA LETTER SI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc45"},110662:{"value":"1B046","name":"HENTAIGANA LETTER SI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc46"},110663:{"value":"1B047","name":"HENTAIGANA LETTER SI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc47"},110664:{"value":"1B048","name":"HENTAIGANA LETTER SI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc48"},110665:{"value":"1B049","name":"HENTAIGANA LETTER SI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc49"},110666:{"value":"1B04A","name":"HENTAIGANA LETTER SU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc4a"},110667:{"value":"1B04B","name":"HENTAIGANA LETTER SU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc4b"},110668:{"value":"1B04C","name":"HENTAIGANA LETTER SU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc4c"},110669:{"value":"1B04D","name":"HENTAIGANA LETTER SU-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc4d"},110670:{"value":"1B04E","name":"HENTAIGANA LETTER SU-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc4e"},110671:{"value":"1B04F","name":"HENTAIGANA LETTER SU-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc4f"},110672:{"value":"1B050","name":"HENTAIGANA LETTER SU-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc50"},110673:{"value":"1B051","name":"HENTAIGANA LETTER SU-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc51"},110674:{"value":"1B052","name":"HENTAIGANA LETTER SE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc52"},110675:{"value":"1B053","name":"HENTAIGANA LETTER SE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc53"},110676:{"value":"1B054","name":"HENTAIGANA LETTER SE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc54"},110677:{"value":"1B055","name":"HENTAIGANA LETTER SE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc55"},110678:{"value":"1B056","name":"HENTAIGANA LETTER SE-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc56"},110679:{"value":"1B057","name":"HENTAIGANA LETTER SO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc57"},110680:{"value":"1B058","name":"HENTAIGANA LETTER SO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc58"},110681:{"value":"1B059","name":"HENTAIGANA LETTER SO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc59"},110682:{"value":"1B05A","name":"HENTAIGANA LETTER SO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc5a"},110683:{"value":"1B05B","name":"HENTAIGANA LETTER SO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc5b"},110684:{"value":"1B05C","name":"HENTAIGANA LETTER SO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc5c"},110685:{"value":"1B05D","name":"HENTAIGANA LETTER SO-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc5d"},110686:{"value":"1B05E","name":"HENTAIGANA LETTER TA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc5e"},110687:{"value":"1B05F","name":"HENTAIGANA LETTER TA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc5f"},110688:{"value":"1B060","name":"HENTAIGANA LETTER TA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc60"},110689:{"value":"1B061","name":"HENTAIGANA LETTER TA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc61"},110690:{"value":"1B062","name":"HENTAIGANA LETTER TI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc62"},110691:{"value":"1B063","name":"HENTAIGANA LETTER TI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc63"},110692:{"value":"1B064","name":"HENTAIGANA LETTER TI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc64"},110693:{"value":"1B065","name":"HENTAIGANA LETTER TI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc65"},110694:{"value":"1B066","name":"HENTAIGANA LETTER TI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc66"},110695:{"value":"1B067","name":"HENTAIGANA LETTER TI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc67"},110696:{"value":"1B068","name":"HENTAIGANA LETTER TI-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc68"},110697:{"value":"1B069","name":"HENTAIGANA LETTER TU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc69"},110698:{"value":"1B06A","name":"HENTAIGANA LETTER TU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc6a"},110699:{"value":"1B06B","name":"HENTAIGANA LETTER TU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc6b"},110700:{"value":"1B06C","name":"HENTAIGANA LETTER TU-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc6c"},110701:{"value":"1B06D","name":"HENTAIGANA LETTER TU-TO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc6d"},110702:{"value":"1B06E","name":"HENTAIGANA LETTER TE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc6e"},110703:{"value":"1B06F","name":"HENTAIGANA LETTER TE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc6f"},110704:{"value":"1B070","name":"HENTAIGANA LETTER TE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc70"},110705:{"value":"1B071","name":"HENTAIGANA LETTER TE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc71"},110706:{"value":"1B072","name":"HENTAIGANA LETTER TE-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc72"},110707:{"value":"1B073","name":"HENTAIGANA LETTER TE-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc73"},110708:{"value":"1B074","name":"HENTAIGANA LETTER TE-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc74"},110709:{"value":"1B075","name":"HENTAIGANA LETTER TE-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc75"},110710:{"value":"1B076","name":"HENTAIGANA LETTER TE-9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc76"},110711:{"value":"1B077","name":"HENTAIGANA LETTER TO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc77"},110712:{"value":"1B078","name":"HENTAIGANA LETTER TO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc78"},110713:{"value":"1B079","name":"HENTAIGANA LETTER TO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc79"},110714:{"value":"1B07A","name":"HENTAIGANA LETTER TO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc7a"},110715:{"value":"1B07B","name":"HENTAIGANA LETTER TO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc7b"},110716:{"value":"1B07C","name":"HENTAIGANA LETTER TO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc7c"},110717:{"value":"1B07D","name":"HENTAIGANA LETTER TO-RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc7d"},110718:{"value":"1B07E","name":"HENTAIGANA LETTER NA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc7e"},110719:{"value":"1B07F","name":"HENTAIGANA LETTER NA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc7f"},110720:{"value":"1B080","name":"HENTAIGANA LETTER NA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc80"},110721:{"value":"1B081","name":"HENTAIGANA LETTER NA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc81"},110722:{"value":"1B082","name":"HENTAIGANA LETTER NA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc82"},110723:{"value":"1B083","name":"HENTAIGANA LETTER NA-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc83"},110724:{"value":"1B084","name":"HENTAIGANA LETTER NA-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc84"},110725:{"value":"1B085","name":"HENTAIGANA LETTER NA-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc85"},110726:{"value":"1B086","name":"HENTAIGANA LETTER NA-9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc86"},110727:{"value":"1B087","name":"HENTAIGANA LETTER NI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc87"},110728:{"value":"1B088","name":"HENTAIGANA LETTER NI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc88"},110729:{"value":"1B089","name":"HENTAIGANA LETTER NI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc89"},110730:{"value":"1B08A","name":"HENTAIGANA LETTER NI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc8a"},110731:{"value":"1B08B","name":"HENTAIGANA LETTER NI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc8b"},110732:{"value":"1B08C","name":"HENTAIGANA LETTER NI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc8c"},110733:{"value":"1B08D","name":"HENTAIGANA LETTER NI-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc8d"},110734:{"value":"1B08E","name":"HENTAIGANA LETTER NI-TE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc8e"},110735:{"value":"1B08F","name":"HENTAIGANA LETTER NU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc8f"},110736:{"value":"1B090","name":"HENTAIGANA LETTER NU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc90"},110737:{"value":"1B091","name":"HENTAIGANA LETTER NU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc91"},110738:{"value":"1B092","name":"HENTAIGANA LETTER NE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc92"},110739:{"value":"1B093","name":"HENTAIGANA LETTER NE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc93"},110740:{"value":"1B094","name":"HENTAIGANA LETTER NE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc94"},110741:{"value":"1B095","name":"HENTAIGANA LETTER NE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc95"},110742:{"value":"1B096","name":"HENTAIGANA LETTER NE-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc96"},110743:{"value":"1B097","name":"HENTAIGANA LETTER NE-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc97"},110744:{"value":"1B098","name":"HENTAIGANA LETTER NE-KO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc98"},110745:{"value":"1B099","name":"HENTAIGANA LETTER NO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc99"},110746:{"value":"1B09A","name":"HENTAIGANA LETTER NO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc9a"},110747:{"value":"1B09B","name":"HENTAIGANA LETTER NO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc9b"},110748:{"value":"1B09C","name":"HENTAIGANA LETTER NO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc9c"},110749:{"value":"1B09D","name":"HENTAIGANA LETTER NO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc9d"},110750:{"value":"1B09E","name":"HENTAIGANA LETTER HA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc9e"},110751:{"value":"1B09F","name":"HENTAIGANA LETTER HA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udc9f"},110752:{"value":"1B0A0","name":"HENTAIGANA LETTER HA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca0"},110753:{"value":"1B0A1","name":"HENTAIGANA LETTER HA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca1"},110754:{"value":"1B0A2","name":"HENTAIGANA LETTER HA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca2"},110755:{"value":"1B0A3","name":"HENTAIGANA LETTER HA-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca3"},110756:{"value":"1B0A4","name":"HENTAIGANA LETTER HA-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca4"},110757:{"value":"1B0A5","name":"HENTAIGANA LETTER HA-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca5"},110758:{"value":"1B0A6","name":"HENTAIGANA LETTER HA-9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca6"},110759:{"value":"1B0A7","name":"HENTAIGANA LETTER HA-10","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca7"},110760:{"value":"1B0A8","name":"HENTAIGANA LETTER HA-11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca8"},110761:{"value":"1B0A9","name":"HENTAIGANA LETTER HI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udca9"},110762:{"value":"1B0AA","name":"HENTAIGANA LETTER HI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcaa"},110763:{"value":"1B0AB","name":"HENTAIGANA LETTER HI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcab"},110764:{"value":"1B0AC","name":"HENTAIGANA LETTER HI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcac"},110765:{"value":"1B0AD","name":"HENTAIGANA LETTER HI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcad"},110766:{"value":"1B0AE","name":"HENTAIGANA LETTER HI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcae"},110767:{"value":"1B0AF","name":"HENTAIGANA LETTER HI-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcaf"},110768:{"value":"1B0B0","name":"HENTAIGANA LETTER HU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb0"},110769:{"value":"1B0B1","name":"HENTAIGANA LETTER HU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb1"},110770:{"value":"1B0B2","name":"HENTAIGANA LETTER HU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb2"},110771:{"value":"1B0B3","name":"HENTAIGANA LETTER HE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb3"},110772:{"value":"1B0B4","name":"HENTAIGANA LETTER HE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb4"},110773:{"value":"1B0B5","name":"HENTAIGANA LETTER HE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb5"},110774:{"value":"1B0B6","name":"HENTAIGANA LETTER HE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb6"},110775:{"value":"1B0B7","name":"HENTAIGANA LETTER HE-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb7"},110776:{"value":"1B0B8","name":"HENTAIGANA LETTER HE-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb8"},110777:{"value":"1B0B9","name":"HENTAIGANA LETTER HE-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcb9"},110778:{"value":"1B0BA","name":"HENTAIGANA LETTER HO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcba"},110779:{"value":"1B0BB","name":"HENTAIGANA LETTER HO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcbb"},110780:{"value":"1B0BC","name":"HENTAIGANA LETTER HO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcbc"},110781:{"value":"1B0BD","name":"HENTAIGANA LETTER HO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcbd"},110782:{"value":"1B0BE","name":"HENTAIGANA LETTER HO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcbe"},110783:{"value":"1B0BF","name":"HENTAIGANA LETTER HO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcbf"},110784:{"value":"1B0C0","name":"HENTAIGANA LETTER HO-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc0"},110785:{"value":"1B0C1","name":"HENTAIGANA LETTER HO-8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc1"},110786:{"value":"1B0C2","name":"HENTAIGANA LETTER MA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc2"},110787:{"value":"1B0C3","name":"HENTAIGANA LETTER MA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc3"},110788:{"value":"1B0C4","name":"HENTAIGANA LETTER MA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc4"},110789:{"value":"1B0C5","name":"HENTAIGANA LETTER MA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc5"},110790:{"value":"1B0C6","name":"HENTAIGANA LETTER MA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc6"},110791:{"value":"1B0C7","name":"HENTAIGANA LETTER MA-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc7"},110792:{"value":"1B0C8","name":"HENTAIGANA LETTER MA-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc8"},110793:{"value":"1B0C9","name":"HENTAIGANA LETTER MI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcc9"},110794:{"value":"1B0CA","name":"HENTAIGANA LETTER MI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcca"},110795:{"value":"1B0CB","name":"HENTAIGANA LETTER MI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udccb"},110796:{"value":"1B0CC","name":"HENTAIGANA LETTER MI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udccc"},110797:{"value":"1B0CD","name":"HENTAIGANA LETTER MI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udccd"},110798:{"value":"1B0CE","name":"HENTAIGANA LETTER MI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcce"},110799:{"value":"1B0CF","name":"HENTAIGANA LETTER MI-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udccf"},110800:{"value":"1B0D0","name":"HENTAIGANA LETTER MU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd0"},110801:{"value":"1B0D1","name":"HENTAIGANA LETTER MU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd1"},110802:{"value":"1B0D2","name":"HENTAIGANA LETTER MU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd2"},110803:{"value":"1B0D3","name":"HENTAIGANA LETTER MU-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd3"},110804:{"value":"1B0D4","name":"HENTAIGANA LETTER ME-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd4"},110805:{"value":"1B0D5","name":"HENTAIGANA LETTER ME-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd5"},110806:{"value":"1B0D6","name":"HENTAIGANA LETTER ME-MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd6"},110807:{"value":"1B0D7","name":"HENTAIGANA LETTER MO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd7"},110808:{"value":"1B0D8","name":"HENTAIGANA LETTER MO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd8"},110809:{"value":"1B0D9","name":"HENTAIGANA LETTER MO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcd9"},110810:{"value":"1B0DA","name":"HENTAIGANA LETTER MO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcda"},110811:{"value":"1B0DB","name":"HENTAIGANA LETTER MO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcdb"},110812:{"value":"1B0DC","name":"HENTAIGANA LETTER MO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcdc"},110813:{"value":"1B0DD","name":"HENTAIGANA LETTER YA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcdd"},110814:{"value":"1B0DE","name":"HENTAIGANA LETTER YA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcde"},110815:{"value":"1B0DF","name":"HENTAIGANA LETTER YA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcdf"},110816:{"value":"1B0E0","name":"HENTAIGANA LETTER YA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce0"},110817:{"value":"1B0E1","name":"HENTAIGANA LETTER YA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce1"},110818:{"value":"1B0E2","name":"HENTAIGANA LETTER YA-YO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce2"},110819:{"value":"1B0E3","name":"HENTAIGANA LETTER YU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce3"},110820:{"value":"1B0E4","name":"HENTAIGANA LETTER YU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce4"},110821:{"value":"1B0E5","name":"HENTAIGANA LETTER YU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce5"},110822:{"value":"1B0E6","name":"HENTAIGANA LETTER YU-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce6"},110823:{"value":"1B0E7","name":"HENTAIGANA LETTER YO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce7"},110824:{"value":"1B0E8","name":"HENTAIGANA LETTER YO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce8"},110825:{"value":"1B0E9","name":"HENTAIGANA LETTER YO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udce9"},110826:{"value":"1B0EA","name":"HENTAIGANA LETTER YO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcea"},110827:{"value":"1B0EB","name":"HENTAIGANA LETTER YO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udceb"},110828:{"value":"1B0EC","name":"HENTAIGANA LETTER YO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcec"},110829:{"value":"1B0ED","name":"HENTAIGANA LETTER RA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udced"},110830:{"value":"1B0EE","name":"HENTAIGANA LETTER RA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcee"},110831:{"value":"1B0EF","name":"HENTAIGANA LETTER RA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcef"},110832:{"value":"1B0F0","name":"HENTAIGANA LETTER RA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf0"},110833:{"value":"1B0F1","name":"HENTAIGANA LETTER RI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf1"},110834:{"value":"1B0F2","name":"HENTAIGANA LETTER RI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf2"},110835:{"value":"1B0F3","name":"HENTAIGANA LETTER RI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf3"},110836:{"value":"1B0F4","name":"HENTAIGANA LETTER RI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf4"},110837:{"value":"1B0F5","name":"HENTAIGANA LETTER RI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf5"},110838:{"value":"1B0F6","name":"HENTAIGANA LETTER RI-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf6"},110839:{"value":"1B0F7","name":"HENTAIGANA LETTER RI-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf7"},110840:{"value":"1B0F8","name":"HENTAIGANA LETTER RU-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf8"},110841:{"value":"1B0F9","name":"HENTAIGANA LETTER RU-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcf9"},110842:{"value":"1B0FA","name":"HENTAIGANA LETTER RU-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcfa"},110843:{"value":"1B0FB","name":"HENTAIGANA LETTER RU-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcfb"},110844:{"value":"1B0FC","name":"HENTAIGANA LETTER RU-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcfc"},110845:{"value":"1B0FD","name":"HENTAIGANA LETTER RU-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcfd"},110846:{"value":"1B0FE","name":"HENTAIGANA LETTER RE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcfe"},110847:{"value":"1B0FF","name":"HENTAIGANA LETTER RE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udcff"},110848:{"value":"1B100","name":"HENTAIGANA LETTER RE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd00"},110849:{"value":"1B101","name":"HENTAIGANA LETTER RE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd01"},110850:{"value":"1B102","name":"HENTAIGANA LETTER RO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd02"},110851:{"value":"1B103","name":"HENTAIGANA LETTER RO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd03"},110852:{"value":"1B104","name":"HENTAIGANA LETTER RO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd04"},110853:{"value":"1B105","name":"HENTAIGANA LETTER RO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd05"},110854:{"value":"1B106","name":"HENTAIGANA LETTER RO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd06"},110855:{"value":"1B107","name":"HENTAIGANA LETTER RO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd07"},110856:{"value":"1B108","name":"HENTAIGANA LETTER WA-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd08"},110857:{"value":"1B109","name":"HENTAIGANA LETTER WA-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd09"},110858:{"value":"1B10A","name":"HENTAIGANA LETTER WA-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd0a"},110859:{"value":"1B10B","name":"HENTAIGANA LETTER WA-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd0b"},110860:{"value":"1B10C","name":"HENTAIGANA LETTER WA-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd0c"},110861:{"value":"1B10D","name":"HENTAIGANA LETTER WI-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd0d"},110862:{"value":"1B10E","name":"HENTAIGANA LETTER WI-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd0e"},110863:{"value":"1B10F","name":"HENTAIGANA LETTER WI-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd0f"},110864:{"value":"1B110","name":"HENTAIGANA LETTER WI-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd10"},110865:{"value":"1B111","name":"HENTAIGANA LETTER WI-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd11"},110866:{"value":"1B112","name":"HENTAIGANA LETTER WE-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd12"},110867:{"value":"1B113","name":"HENTAIGANA LETTER WE-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd13"},110868:{"value":"1B114","name":"HENTAIGANA LETTER WE-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd14"},110869:{"value":"1B115","name":"HENTAIGANA LETTER WE-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd15"},110870:{"value":"1B116","name":"HENTAIGANA LETTER WO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd16"},110871:{"value":"1B117","name":"HENTAIGANA LETTER WO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd17"},110872:{"value":"1B118","name":"HENTAIGANA LETTER WO-3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd18"},110873:{"value":"1B119","name":"HENTAIGANA LETTER WO-4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd19"},110874:{"value":"1B11A","name":"HENTAIGANA LETTER WO-5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd1a"},110875:{"value":"1B11B","name":"HENTAIGANA LETTER WO-6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd1b"},110876:{"value":"1B11C","name":"HENTAIGANA LETTER WO-7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd1c"},110877:{"value":"1B11D","name":"HENTAIGANA LETTER N-MU-MO-1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd1d"},110878:{"value":"1B11E","name":"HENTAIGANA LETTER N-MU-MO-2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd1e"},110879:{"value":"1B11F","name":"HIRAGANA LETTER ARCHAIC WU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd1f"},110880:{"value":"1B120","name":"KATAKANA LETTER ARCHAIC YI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd20"},110881:{"value":"1B121","name":"KATAKANA LETTER ARCHAIC YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd21"},110882:{"value":"1B122","name":"KATAKANA LETTER ARCHAIC WU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd22"},110928:{"value":"1B150","name":"HIRAGANA LETTER SMALL WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd50"},110929:{"value":"1B151","name":"HIRAGANA LETTER SMALL WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd51"},110930:{"value":"1B152","name":"HIRAGANA LETTER SMALL WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd52"},110948:{"value":"1B164","name":"KATAKANA LETTER SMALL WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd64"},110949:{"value":"1B165","name":"KATAKANA LETTER SMALL WE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd65"},110950:{"value":"1B166","name":"KATAKANA LETTER SMALL WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd66"},110951:{"value":"1B167","name":"KATAKANA LETTER SMALL N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd67"},110960:{"value":"1B170","name":"NUSHU CHARACTER-1B170","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd70"},110961:{"value":"1B171","name":"NUSHU CHARACTER-1B171","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd71"},110962:{"value":"1B172","name":"NUSHU CHARACTER-1B172","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd72"},110963:{"value":"1B173","name":"NUSHU CHARACTER-1B173","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd73"},110964:{"value":"1B174","name":"NUSHU CHARACTER-1B174","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd74"},110965:{"value":"1B175","name":"NUSHU CHARACTER-1B175","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd75"},110966:{"value":"1B176","name":"NUSHU CHARACTER-1B176","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd76"},110967:{"value":"1B177","name":"NUSHU CHARACTER-1B177","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd77"},110968:{"value":"1B178","name":"NUSHU CHARACTER-1B178","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd78"},110969:{"value":"1B179","name":"NUSHU CHARACTER-1B179","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd79"},110970:{"value":"1B17A","name":"NUSHU CHARACTER-1B17A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd7a"},110971:{"value":"1B17B","name":"NUSHU CHARACTER-1B17B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd7b"},110972:{"value":"1B17C","name":"NUSHU CHARACTER-1B17C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd7c"},110973:{"value":"1B17D","name":"NUSHU CHARACTER-1B17D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd7d"},110974:{"value":"1B17E","name":"NUSHU CHARACTER-1B17E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd7e"},110975:{"value":"1B17F","name":"NUSHU CHARACTER-1B17F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd7f"},110976:{"value":"1B180","name":"NUSHU CHARACTER-1B180","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd80"},110977:{"value":"1B181","name":"NUSHU CHARACTER-1B181","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd81"},110978:{"value":"1B182","name":"NUSHU CHARACTER-1B182","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd82"},110979:{"value":"1B183","name":"NUSHU CHARACTER-1B183","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd83"},110980:{"value":"1B184","name":"NUSHU CHARACTER-1B184","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd84"},110981:{"value":"1B185","name":"NUSHU CHARACTER-1B185","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd85"},110982:{"value":"1B186","name":"NUSHU CHARACTER-1B186","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd86"},110983:{"value":"1B187","name":"NUSHU CHARACTER-1B187","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd87"},110984:{"value":"1B188","name":"NUSHU CHARACTER-1B188","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd88"},110985:{"value":"1B189","name":"NUSHU CHARACTER-1B189","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd89"},110986:{"value":"1B18A","name":"NUSHU CHARACTER-1B18A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd8a"},110987:{"value":"1B18B","name":"NUSHU CHARACTER-1B18B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd8b"},110988:{"value":"1B18C","name":"NUSHU CHARACTER-1B18C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd8c"},110989:{"value":"1B18D","name":"NUSHU CHARACTER-1B18D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd8d"},110990:{"value":"1B18E","name":"NUSHU CHARACTER-1B18E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd8e"},110991:{"value":"1B18F","name":"NUSHU CHARACTER-1B18F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd8f"},110992:{"value":"1B190","name":"NUSHU CHARACTER-1B190","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd90"},110993:{"value":"1B191","name":"NUSHU CHARACTER-1B191","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd91"},110994:{"value":"1B192","name":"NUSHU CHARACTER-1B192","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd92"},110995:{"value":"1B193","name":"NUSHU CHARACTER-1B193","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd93"},110996:{"value":"1B194","name":"NUSHU CHARACTER-1B194","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd94"},110997:{"value":"1B195","name":"NUSHU CHARACTER-1B195","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd95"},110998:{"value":"1B196","name":"NUSHU CHARACTER-1B196","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd96"},110999:{"value":"1B197","name":"NUSHU CHARACTER-1B197","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd97"},111000:{"value":"1B198","name":"NUSHU CHARACTER-1B198","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd98"},111001:{"value":"1B199","name":"NUSHU CHARACTER-1B199","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd99"},111002:{"value":"1B19A","name":"NUSHU CHARACTER-1B19A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd9a"},111003:{"value":"1B19B","name":"NUSHU CHARACTER-1B19B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd9b"},111004:{"value":"1B19C","name":"NUSHU CHARACTER-1B19C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd9c"},111005:{"value":"1B19D","name":"NUSHU CHARACTER-1B19D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd9d"},111006:{"value":"1B19E","name":"NUSHU CHARACTER-1B19E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd9e"},111007:{"value":"1B19F","name":"NUSHU CHARACTER-1B19F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udd9f"},111008:{"value":"1B1A0","name":"NUSHU CHARACTER-1B1A0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda0"},111009:{"value":"1B1A1","name":"NUSHU CHARACTER-1B1A1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda1"},111010:{"value":"1B1A2","name":"NUSHU CHARACTER-1B1A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda2"},111011:{"value":"1B1A3","name":"NUSHU CHARACTER-1B1A3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda3"},111012:{"value":"1B1A4","name":"NUSHU CHARACTER-1B1A4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda4"},111013:{"value":"1B1A5","name":"NUSHU CHARACTER-1B1A5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda5"},111014:{"value":"1B1A6","name":"NUSHU CHARACTER-1B1A6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda6"},111015:{"value":"1B1A7","name":"NUSHU CHARACTER-1B1A7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda7"},111016:{"value":"1B1A8","name":"NUSHU CHARACTER-1B1A8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda8"},111017:{"value":"1B1A9","name":"NUSHU CHARACTER-1B1A9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udda9"},111018:{"value":"1B1AA","name":"NUSHU CHARACTER-1B1AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddaa"},111019:{"value":"1B1AB","name":"NUSHU CHARACTER-1B1AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddab"},111020:{"value":"1B1AC","name":"NUSHU CHARACTER-1B1AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddac"},111021:{"value":"1B1AD","name":"NUSHU CHARACTER-1B1AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddad"},111022:{"value":"1B1AE","name":"NUSHU CHARACTER-1B1AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddae"},111023:{"value":"1B1AF","name":"NUSHU CHARACTER-1B1AF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddaf"},111024:{"value":"1B1B0","name":"NUSHU CHARACTER-1B1B0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb0"},111025:{"value":"1B1B1","name":"NUSHU CHARACTER-1B1B1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb1"},111026:{"value":"1B1B2","name":"NUSHU CHARACTER-1B1B2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb2"},111027:{"value":"1B1B3","name":"NUSHU CHARACTER-1B1B3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb3"},111028:{"value":"1B1B4","name":"NUSHU CHARACTER-1B1B4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb4"},111029:{"value":"1B1B5","name":"NUSHU CHARACTER-1B1B5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb5"},111030:{"value":"1B1B6","name":"NUSHU CHARACTER-1B1B6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb6"},111031:{"value":"1B1B7","name":"NUSHU CHARACTER-1B1B7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb7"},111032:{"value":"1B1B8","name":"NUSHU CHARACTER-1B1B8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb8"},111033:{"value":"1B1B9","name":"NUSHU CHARACTER-1B1B9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddb9"},111034:{"value":"1B1BA","name":"NUSHU CHARACTER-1B1BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddba"},111035:{"value":"1B1BB","name":"NUSHU CHARACTER-1B1BB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddbb"},111036:{"value":"1B1BC","name":"NUSHU CHARACTER-1B1BC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddbc"},111037:{"value":"1B1BD","name":"NUSHU CHARACTER-1B1BD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddbd"},111038:{"value":"1B1BE","name":"NUSHU CHARACTER-1B1BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddbe"},111039:{"value":"1B1BF","name":"NUSHU CHARACTER-1B1BF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddbf"},111040:{"value":"1B1C0","name":"NUSHU CHARACTER-1B1C0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc0"},111041:{"value":"1B1C1","name":"NUSHU CHARACTER-1B1C1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc1"},111042:{"value":"1B1C2","name":"NUSHU CHARACTER-1B1C2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc2"},111043:{"value":"1B1C3","name":"NUSHU CHARACTER-1B1C3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc3"},111044:{"value":"1B1C4","name":"NUSHU CHARACTER-1B1C4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc4"},111045:{"value":"1B1C5","name":"NUSHU CHARACTER-1B1C5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc5"},111046:{"value":"1B1C6","name":"NUSHU CHARACTER-1B1C6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc6"},111047:{"value":"1B1C7","name":"NUSHU CHARACTER-1B1C7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc7"},111048:{"value":"1B1C8","name":"NUSHU CHARACTER-1B1C8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc8"},111049:{"value":"1B1C9","name":"NUSHU CHARACTER-1B1C9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddc9"},111050:{"value":"1B1CA","name":"NUSHU CHARACTER-1B1CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddca"},111051:{"value":"1B1CB","name":"NUSHU CHARACTER-1B1CB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddcb"},111052:{"value":"1B1CC","name":"NUSHU CHARACTER-1B1CC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddcc"},111053:{"value":"1B1CD","name":"NUSHU CHARACTER-1B1CD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddcd"},111054:{"value":"1B1CE","name":"NUSHU CHARACTER-1B1CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddce"},111055:{"value":"1B1CF","name":"NUSHU CHARACTER-1B1CF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddcf"},111056:{"value":"1B1D0","name":"NUSHU CHARACTER-1B1D0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd0"},111057:{"value":"1B1D1","name":"NUSHU CHARACTER-1B1D1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd1"},111058:{"value":"1B1D2","name":"NUSHU CHARACTER-1B1D2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd2"},111059:{"value":"1B1D3","name":"NUSHU CHARACTER-1B1D3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd3"},111060:{"value":"1B1D4","name":"NUSHU CHARACTER-1B1D4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd4"},111061:{"value":"1B1D5","name":"NUSHU CHARACTER-1B1D5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd5"},111062:{"value":"1B1D6","name":"NUSHU CHARACTER-1B1D6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd6"},111063:{"value":"1B1D7","name":"NUSHU CHARACTER-1B1D7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd7"},111064:{"value":"1B1D8","name":"NUSHU CHARACTER-1B1D8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd8"},111065:{"value":"1B1D9","name":"NUSHU CHARACTER-1B1D9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddd9"},111066:{"value":"1B1DA","name":"NUSHU CHARACTER-1B1DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddda"},111067:{"value":"1B1DB","name":"NUSHU CHARACTER-1B1DB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udddb"},111068:{"value":"1B1DC","name":"NUSHU CHARACTER-1B1DC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udddc"},111069:{"value":"1B1DD","name":"NUSHU CHARACTER-1B1DD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udddd"},111070:{"value":"1B1DE","name":"NUSHU CHARACTER-1B1DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddde"},111071:{"value":"1B1DF","name":"NUSHU CHARACTER-1B1DF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udddf"},111072:{"value":"1B1E0","name":"NUSHU CHARACTER-1B1E0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde0"},111073:{"value":"1B1E1","name":"NUSHU CHARACTER-1B1E1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde1"},111074:{"value":"1B1E2","name":"NUSHU CHARACTER-1B1E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde2"},111075:{"value":"1B1E3","name":"NUSHU CHARACTER-1B1E3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde3"},111076:{"value":"1B1E4","name":"NUSHU CHARACTER-1B1E4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde4"},111077:{"value":"1B1E5","name":"NUSHU CHARACTER-1B1E5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde5"},111078:{"value":"1B1E6","name":"NUSHU CHARACTER-1B1E6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde6"},111079:{"value":"1B1E7","name":"NUSHU CHARACTER-1B1E7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde7"},111080:{"value":"1B1E8","name":"NUSHU CHARACTER-1B1E8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde8"},111081:{"value":"1B1E9","name":"NUSHU CHARACTER-1B1E9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udde9"},111082:{"value":"1B1EA","name":"NUSHU CHARACTER-1B1EA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddea"},111083:{"value":"1B1EB","name":"NUSHU CHARACTER-1B1EB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddeb"},111084:{"value":"1B1EC","name":"NUSHU CHARACTER-1B1EC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddec"},111085:{"value":"1B1ED","name":"NUSHU CHARACTER-1B1ED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udded"},111086:{"value":"1B1EE","name":"NUSHU CHARACTER-1B1EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddee"},111087:{"value":"1B1EF","name":"NUSHU CHARACTER-1B1EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddef"},111088:{"value":"1B1F0","name":"NUSHU CHARACTER-1B1F0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf0"},111089:{"value":"1B1F1","name":"NUSHU CHARACTER-1B1F1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf1"},111090:{"value":"1B1F2","name":"NUSHU CHARACTER-1B1F2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf2"},111091:{"value":"1B1F3","name":"NUSHU CHARACTER-1B1F3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf3"},111092:{"value":"1B1F4","name":"NUSHU CHARACTER-1B1F4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf4"},111093:{"value":"1B1F5","name":"NUSHU CHARACTER-1B1F5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf5"},111094:{"value":"1B1F6","name":"NUSHU CHARACTER-1B1F6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf6"},111095:{"value":"1B1F7","name":"NUSHU CHARACTER-1B1F7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf7"},111096:{"value":"1B1F8","name":"NUSHU CHARACTER-1B1F8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf8"},111097:{"value":"1B1F9","name":"NUSHU CHARACTER-1B1F9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddf9"},111098:{"value":"1B1FA","name":"NUSHU CHARACTER-1B1FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddfa"},111099:{"value":"1B1FB","name":"NUSHU CHARACTER-1B1FB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddfb"},111100:{"value":"1B1FC","name":"NUSHU CHARACTER-1B1FC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddfc"},111101:{"value":"1B1FD","name":"NUSHU CHARACTER-1B1FD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddfd"},111102:{"value":"1B1FE","name":"NUSHU CHARACTER-1B1FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddfe"},111103:{"value":"1B1FF","name":"NUSHU CHARACTER-1B1FF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uddff"},111104:{"value":"1B200","name":"NUSHU CHARACTER-1B200","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude00"},111105:{"value":"1B201","name":"NUSHU CHARACTER-1B201","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude01"},111106:{"value":"1B202","name":"NUSHU CHARACTER-1B202","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude02"},111107:{"value":"1B203","name":"NUSHU CHARACTER-1B203","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude03"},111108:{"value":"1B204","name":"NUSHU CHARACTER-1B204","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude04"},111109:{"value":"1B205","name":"NUSHU CHARACTER-1B205","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude05"},111110:{"value":"1B206","name":"NUSHU CHARACTER-1B206","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude06"},111111:{"value":"1B207","name":"NUSHU CHARACTER-1B207","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude07"},111112:{"value":"1B208","name":"NUSHU CHARACTER-1B208","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude08"},111113:{"value":"1B209","name":"NUSHU CHARACTER-1B209","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude09"},111114:{"value":"1B20A","name":"NUSHU CHARACTER-1B20A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude0a"},111115:{"value":"1B20B","name":"NUSHU CHARACTER-1B20B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude0b"},111116:{"value":"1B20C","name":"NUSHU CHARACTER-1B20C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude0c"},111117:{"value":"1B20D","name":"NUSHU CHARACTER-1B20D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude0d"},111118:{"value":"1B20E","name":"NUSHU CHARACTER-1B20E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude0e"},111119:{"value":"1B20F","name":"NUSHU CHARACTER-1B20F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude0f"},111120:{"value":"1B210","name":"NUSHU CHARACTER-1B210","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude10"},111121:{"value":"1B211","name":"NUSHU CHARACTER-1B211","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude11"},111122:{"value":"1B212","name":"NUSHU CHARACTER-1B212","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude12"},111123:{"value":"1B213","name":"NUSHU CHARACTER-1B213","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude13"},111124:{"value":"1B214","name":"NUSHU CHARACTER-1B214","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude14"},111125:{"value":"1B215","name":"NUSHU CHARACTER-1B215","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude15"},111126:{"value":"1B216","name":"NUSHU CHARACTER-1B216","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude16"},111127:{"value":"1B217","name":"NUSHU CHARACTER-1B217","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude17"},111128:{"value":"1B218","name":"NUSHU CHARACTER-1B218","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude18"},111129:{"value":"1B219","name":"NUSHU CHARACTER-1B219","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude19"},111130:{"value":"1B21A","name":"NUSHU CHARACTER-1B21A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude1a"},111131:{"value":"1B21B","name":"NUSHU CHARACTER-1B21B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude1b"},111132:{"value":"1B21C","name":"NUSHU CHARACTER-1B21C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude1c"},111133:{"value":"1B21D","name":"NUSHU CHARACTER-1B21D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude1d"},111134:{"value":"1B21E","name":"NUSHU CHARACTER-1B21E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude1e"},111135:{"value":"1B21F","name":"NUSHU CHARACTER-1B21F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude1f"},111136:{"value":"1B220","name":"NUSHU CHARACTER-1B220","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude20"},111137:{"value":"1B221","name":"NUSHU CHARACTER-1B221","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude21"},111138:{"value":"1B222","name":"NUSHU CHARACTER-1B222","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude22"},111139:{"value":"1B223","name":"NUSHU CHARACTER-1B223","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude23"},111140:{"value":"1B224","name":"NUSHU CHARACTER-1B224","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude24"},111141:{"value":"1B225","name":"NUSHU CHARACTER-1B225","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude25"},111142:{"value":"1B226","name":"NUSHU CHARACTER-1B226","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude26"},111143:{"value":"1B227","name":"NUSHU CHARACTER-1B227","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude27"},111144:{"value":"1B228","name":"NUSHU CHARACTER-1B228","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude28"},111145:{"value":"1B229","name":"NUSHU CHARACTER-1B229","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude29"},111146:{"value":"1B22A","name":"NUSHU CHARACTER-1B22A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude2a"},111147:{"value":"1B22B","name":"NUSHU CHARACTER-1B22B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude2b"},111148:{"value":"1B22C","name":"NUSHU CHARACTER-1B22C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude2c"},111149:{"value":"1B22D","name":"NUSHU CHARACTER-1B22D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude2d"},111150:{"value":"1B22E","name":"NUSHU CHARACTER-1B22E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude2e"},111151:{"value":"1B22F","name":"NUSHU CHARACTER-1B22F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude2f"},111152:{"value":"1B230","name":"NUSHU CHARACTER-1B230","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude30"},111153:{"value":"1B231","name":"NUSHU CHARACTER-1B231","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude31"},111154:{"value":"1B232","name":"NUSHU CHARACTER-1B232","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude32"},111155:{"value":"1B233","name":"NUSHU CHARACTER-1B233","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude33"},111156:{"value":"1B234","name":"NUSHU CHARACTER-1B234","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude34"},111157:{"value":"1B235","name":"NUSHU CHARACTER-1B235","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude35"},111158:{"value":"1B236","name":"NUSHU CHARACTER-1B236","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude36"},111159:{"value":"1B237","name":"NUSHU CHARACTER-1B237","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude37"},111160:{"value":"1B238","name":"NUSHU CHARACTER-1B238","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude38"},111161:{"value":"1B239","name":"NUSHU CHARACTER-1B239","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude39"},111162:{"value":"1B23A","name":"NUSHU CHARACTER-1B23A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude3a"},111163:{"value":"1B23B","name":"NUSHU CHARACTER-1B23B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude3b"},111164:{"value":"1B23C","name":"NUSHU CHARACTER-1B23C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude3c"},111165:{"value":"1B23D","name":"NUSHU CHARACTER-1B23D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude3d"},111166:{"value":"1B23E","name":"NUSHU CHARACTER-1B23E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude3e"},111167:{"value":"1B23F","name":"NUSHU CHARACTER-1B23F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude3f"},111168:{"value":"1B240","name":"NUSHU CHARACTER-1B240","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude40"},111169:{"value":"1B241","name":"NUSHU CHARACTER-1B241","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude41"},111170:{"value":"1B242","name":"NUSHU CHARACTER-1B242","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude42"},111171:{"value":"1B243","name":"NUSHU CHARACTER-1B243","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude43"},111172:{"value":"1B244","name":"NUSHU CHARACTER-1B244","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude44"},111173:{"value":"1B245","name":"NUSHU CHARACTER-1B245","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude45"},111174:{"value":"1B246","name":"NUSHU CHARACTER-1B246","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude46"},111175:{"value":"1B247","name":"NUSHU CHARACTER-1B247","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude47"},111176:{"value":"1B248","name":"NUSHU CHARACTER-1B248","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude48"},111177:{"value":"1B249","name":"NUSHU CHARACTER-1B249","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude49"},111178:{"value":"1B24A","name":"NUSHU CHARACTER-1B24A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude4a"},111179:{"value":"1B24B","name":"NUSHU CHARACTER-1B24B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude4b"},111180:{"value":"1B24C","name":"NUSHU CHARACTER-1B24C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude4c"},111181:{"value":"1B24D","name":"NUSHU CHARACTER-1B24D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude4d"},111182:{"value":"1B24E","name":"NUSHU CHARACTER-1B24E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude4e"},111183:{"value":"1B24F","name":"NUSHU CHARACTER-1B24F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude4f"},111184:{"value":"1B250","name":"NUSHU CHARACTER-1B250","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude50"},111185:{"value":"1B251","name":"NUSHU CHARACTER-1B251","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude51"},111186:{"value":"1B252","name":"NUSHU CHARACTER-1B252","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude52"},111187:{"value":"1B253","name":"NUSHU CHARACTER-1B253","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude53"},111188:{"value":"1B254","name":"NUSHU CHARACTER-1B254","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude54"},111189:{"value":"1B255","name":"NUSHU CHARACTER-1B255","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude55"},111190:{"value":"1B256","name":"NUSHU CHARACTER-1B256","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude56"},111191:{"value":"1B257","name":"NUSHU CHARACTER-1B257","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude57"},111192:{"value":"1B258","name":"NUSHU CHARACTER-1B258","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude58"},111193:{"value":"1B259","name":"NUSHU CHARACTER-1B259","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude59"},111194:{"value":"1B25A","name":"NUSHU CHARACTER-1B25A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude5a"},111195:{"value":"1B25B","name":"NUSHU CHARACTER-1B25B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude5b"},111196:{"value":"1B25C","name":"NUSHU CHARACTER-1B25C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude5c"},111197:{"value":"1B25D","name":"NUSHU CHARACTER-1B25D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude5d"},111198:{"value":"1B25E","name":"NUSHU CHARACTER-1B25E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude5e"},111199:{"value":"1B25F","name":"NUSHU CHARACTER-1B25F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude5f"},111200:{"value":"1B260","name":"NUSHU CHARACTER-1B260","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude60"},111201:{"value":"1B261","name":"NUSHU CHARACTER-1B261","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude61"},111202:{"value":"1B262","name":"NUSHU CHARACTER-1B262","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude62"},111203:{"value":"1B263","name":"NUSHU CHARACTER-1B263","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude63"},111204:{"value":"1B264","name":"NUSHU CHARACTER-1B264","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude64"},111205:{"value":"1B265","name":"NUSHU CHARACTER-1B265","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude65"},111206:{"value":"1B266","name":"NUSHU CHARACTER-1B266","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude66"},111207:{"value":"1B267","name":"NUSHU CHARACTER-1B267","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude67"},111208:{"value":"1B268","name":"NUSHU CHARACTER-1B268","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude68"},111209:{"value":"1B269","name":"NUSHU CHARACTER-1B269","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude69"},111210:{"value":"1B26A","name":"NUSHU CHARACTER-1B26A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude6a"},111211:{"value":"1B26B","name":"NUSHU CHARACTER-1B26B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude6b"},111212:{"value":"1B26C","name":"NUSHU CHARACTER-1B26C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude6c"},111213:{"value":"1B26D","name":"NUSHU CHARACTER-1B26D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude6d"},111214:{"value":"1B26E","name":"NUSHU CHARACTER-1B26E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude6e"},111215:{"value":"1B26F","name":"NUSHU CHARACTER-1B26F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude6f"},111216:{"value":"1B270","name":"NUSHU CHARACTER-1B270","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude70"},111217:{"value":"1B271","name":"NUSHU CHARACTER-1B271","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude71"},111218:{"value":"1B272","name":"NUSHU CHARACTER-1B272","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude72"},111219:{"value":"1B273","name":"NUSHU CHARACTER-1B273","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude73"},111220:{"value":"1B274","name":"NUSHU CHARACTER-1B274","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude74"},111221:{"value":"1B275","name":"NUSHU CHARACTER-1B275","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude75"},111222:{"value":"1B276","name":"NUSHU CHARACTER-1B276","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude76"},111223:{"value":"1B277","name":"NUSHU CHARACTER-1B277","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude77"},111224:{"value":"1B278","name":"NUSHU CHARACTER-1B278","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude78"},111225:{"value":"1B279","name":"NUSHU CHARACTER-1B279","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude79"},111226:{"value":"1B27A","name":"NUSHU CHARACTER-1B27A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude7a"},111227:{"value":"1B27B","name":"NUSHU CHARACTER-1B27B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude7b"},111228:{"value":"1B27C","name":"NUSHU CHARACTER-1B27C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude7c"},111229:{"value":"1B27D","name":"NUSHU CHARACTER-1B27D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude7d"},111230:{"value":"1B27E","name":"NUSHU CHARACTER-1B27E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude7e"},111231:{"value":"1B27F","name":"NUSHU CHARACTER-1B27F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude7f"},111232:{"value":"1B280","name":"NUSHU CHARACTER-1B280","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude80"},111233:{"value":"1B281","name":"NUSHU CHARACTER-1B281","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude81"},111234:{"value":"1B282","name":"NUSHU CHARACTER-1B282","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude82"},111235:{"value":"1B283","name":"NUSHU CHARACTER-1B283","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude83"},111236:{"value":"1B284","name":"NUSHU CHARACTER-1B284","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude84"},111237:{"value":"1B285","name":"NUSHU CHARACTER-1B285","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude85"},111238:{"value":"1B286","name":"NUSHU CHARACTER-1B286","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude86"},111239:{"value":"1B287","name":"NUSHU CHARACTER-1B287","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude87"},111240:{"value":"1B288","name":"NUSHU CHARACTER-1B288","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude88"},111241:{"value":"1B289","name":"NUSHU CHARACTER-1B289","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude89"},111242:{"value":"1B28A","name":"NUSHU CHARACTER-1B28A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude8a"},111243:{"value":"1B28B","name":"NUSHU CHARACTER-1B28B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude8b"},111244:{"value":"1B28C","name":"NUSHU CHARACTER-1B28C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude8c"},111245:{"value":"1B28D","name":"NUSHU CHARACTER-1B28D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude8d"},111246:{"value":"1B28E","name":"NUSHU CHARACTER-1B28E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude8e"},111247:{"value":"1B28F","name":"NUSHU CHARACTER-1B28F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude8f"},111248:{"value":"1B290","name":"NUSHU CHARACTER-1B290","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude90"},111249:{"value":"1B291","name":"NUSHU CHARACTER-1B291","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude91"},111250:{"value":"1B292","name":"NUSHU CHARACTER-1B292","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude92"},111251:{"value":"1B293","name":"NUSHU CHARACTER-1B293","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude93"},111252:{"value":"1B294","name":"NUSHU CHARACTER-1B294","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude94"},111253:{"value":"1B295","name":"NUSHU CHARACTER-1B295","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude95"},111254:{"value":"1B296","name":"NUSHU CHARACTER-1B296","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude96"},111255:{"value":"1B297","name":"NUSHU CHARACTER-1B297","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude97"},111256:{"value":"1B298","name":"NUSHU CHARACTER-1B298","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude98"},111257:{"value":"1B299","name":"NUSHU CHARACTER-1B299","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude99"},111258:{"value":"1B29A","name":"NUSHU CHARACTER-1B29A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude9a"},111259:{"value":"1B29B","name":"NUSHU CHARACTER-1B29B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude9b"},111260:{"value":"1B29C","name":"NUSHU CHARACTER-1B29C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude9c"},111261:{"value":"1B29D","name":"NUSHU CHARACTER-1B29D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude9d"},111262:{"value":"1B29E","name":"NUSHU CHARACTER-1B29E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude9e"},111263:{"value":"1B29F","name":"NUSHU CHARACTER-1B29F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\ude9f"},111264:{"value":"1B2A0","name":"NUSHU CHARACTER-1B2A0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea0"},111265:{"value":"1B2A1","name":"NUSHU CHARACTER-1B2A1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea1"},111266:{"value":"1B2A2","name":"NUSHU CHARACTER-1B2A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea2"},111267:{"value":"1B2A3","name":"NUSHU CHARACTER-1B2A3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea3"},111268:{"value":"1B2A4","name":"NUSHU CHARACTER-1B2A4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea4"},111269:{"value":"1B2A5","name":"NUSHU CHARACTER-1B2A5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea5"},111270:{"value":"1B2A6","name":"NUSHU CHARACTER-1B2A6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea6"},111271:{"value":"1B2A7","name":"NUSHU CHARACTER-1B2A7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea7"},111272:{"value":"1B2A8","name":"NUSHU CHARACTER-1B2A8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea8"},111273:{"value":"1B2A9","name":"NUSHU CHARACTER-1B2A9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udea9"},111274:{"value":"1B2AA","name":"NUSHU CHARACTER-1B2AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeaa"},111275:{"value":"1B2AB","name":"NUSHU CHARACTER-1B2AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeab"},111276:{"value":"1B2AC","name":"NUSHU CHARACTER-1B2AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeac"},111277:{"value":"1B2AD","name":"NUSHU CHARACTER-1B2AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udead"},111278:{"value":"1B2AE","name":"NUSHU CHARACTER-1B2AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeae"},111279:{"value":"1B2AF","name":"NUSHU CHARACTER-1B2AF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeaf"},111280:{"value":"1B2B0","name":"NUSHU CHARACTER-1B2B0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb0"},111281:{"value":"1B2B1","name":"NUSHU CHARACTER-1B2B1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb1"},111282:{"value":"1B2B2","name":"NUSHU CHARACTER-1B2B2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb2"},111283:{"value":"1B2B3","name":"NUSHU CHARACTER-1B2B3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb3"},111284:{"value":"1B2B4","name":"NUSHU CHARACTER-1B2B4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb4"},111285:{"value":"1B2B5","name":"NUSHU CHARACTER-1B2B5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb5"},111286:{"value":"1B2B6","name":"NUSHU CHARACTER-1B2B6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb6"},111287:{"value":"1B2B7","name":"NUSHU CHARACTER-1B2B7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb7"},111288:{"value":"1B2B8","name":"NUSHU CHARACTER-1B2B8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb8"},111289:{"value":"1B2B9","name":"NUSHU CHARACTER-1B2B9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeb9"},111290:{"value":"1B2BA","name":"NUSHU CHARACTER-1B2BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeba"},111291:{"value":"1B2BB","name":"NUSHU CHARACTER-1B2BB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udebb"},111292:{"value":"1B2BC","name":"NUSHU CHARACTER-1B2BC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udebc"},111293:{"value":"1B2BD","name":"NUSHU CHARACTER-1B2BD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udebd"},111294:{"value":"1B2BE","name":"NUSHU CHARACTER-1B2BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udebe"},111295:{"value":"1B2BF","name":"NUSHU CHARACTER-1B2BF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udebf"},111296:{"value":"1B2C0","name":"NUSHU CHARACTER-1B2C0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec0"},111297:{"value":"1B2C1","name":"NUSHU CHARACTER-1B2C1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec1"},111298:{"value":"1B2C2","name":"NUSHU CHARACTER-1B2C2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec2"},111299:{"value":"1B2C3","name":"NUSHU CHARACTER-1B2C3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec3"},111300:{"value":"1B2C4","name":"NUSHU CHARACTER-1B2C4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec4"},111301:{"value":"1B2C5","name":"NUSHU CHARACTER-1B2C5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec5"},111302:{"value":"1B2C6","name":"NUSHU CHARACTER-1B2C6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec6"},111303:{"value":"1B2C7","name":"NUSHU CHARACTER-1B2C7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec7"},111304:{"value":"1B2C8","name":"NUSHU CHARACTER-1B2C8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec8"},111305:{"value":"1B2C9","name":"NUSHU CHARACTER-1B2C9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udec9"},111306:{"value":"1B2CA","name":"NUSHU CHARACTER-1B2CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeca"},111307:{"value":"1B2CB","name":"NUSHU CHARACTER-1B2CB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udecb"},111308:{"value":"1B2CC","name":"NUSHU CHARACTER-1B2CC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udecc"},111309:{"value":"1B2CD","name":"NUSHU CHARACTER-1B2CD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udecd"},111310:{"value":"1B2CE","name":"NUSHU CHARACTER-1B2CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udece"},111311:{"value":"1B2CF","name":"NUSHU CHARACTER-1B2CF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udecf"},111312:{"value":"1B2D0","name":"NUSHU CHARACTER-1B2D0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded0"},111313:{"value":"1B2D1","name":"NUSHU CHARACTER-1B2D1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded1"},111314:{"value":"1B2D2","name":"NUSHU CHARACTER-1B2D2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded2"},111315:{"value":"1B2D3","name":"NUSHU CHARACTER-1B2D3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded3"},111316:{"value":"1B2D4","name":"NUSHU CHARACTER-1B2D4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded4"},111317:{"value":"1B2D5","name":"NUSHU CHARACTER-1B2D5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded5"},111318:{"value":"1B2D6","name":"NUSHU CHARACTER-1B2D6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded6"},111319:{"value":"1B2D7","name":"NUSHU CHARACTER-1B2D7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded7"},111320:{"value":"1B2D8","name":"NUSHU CHARACTER-1B2D8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded8"},111321:{"value":"1B2D9","name":"NUSHU CHARACTER-1B2D9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\uded9"},111322:{"value":"1B2DA","name":"NUSHU CHARACTER-1B2DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeda"},111323:{"value":"1B2DB","name":"NUSHU CHARACTER-1B2DB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udedb"},111324:{"value":"1B2DC","name":"NUSHU CHARACTER-1B2DC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udedc"},111325:{"value":"1B2DD","name":"NUSHU CHARACTER-1B2DD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udedd"},111326:{"value":"1B2DE","name":"NUSHU CHARACTER-1B2DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udede"},111327:{"value":"1B2DF","name":"NUSHU CHARACTER-1B2DF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udedf"},111328:{"value":"1B2E0","name":"NUSHU CHARACTER-1B2E0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee0"},111329:{"value":"1B2E1","name":"NUSHU CHARACTER-1B2E1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee1"},111330:{"value":"1B2E2","name":"NUSHU CHARACTER-1B2E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee2"},111331:{"value":"1B2E3","name":"NUSHU CHARACTER-1B2E3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee3"},111332:{"value":"1B2E4","name":"NUSHU CHARACTER-1B2E4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee4"},111333:{"value":"1B2E5","name":"NUSHU CHARACTER-1B2E5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee5"},111334:{"value":"1B2E6","name":"NUSHU CHARACTER-1B2E6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee6"},111335:{"value":"1B2E7","name":"NUSHU CHARACTER-1B2E7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee7"},111336:{"value":"1B2E8","name":"NUSHU CHARACTER-1B2E8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee8"},111337:{"value":"1B2E9","name":"NUSHU CHARACTER-1B2E9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udee9"},111338:{"value":"1B2EA","name":"NUSHU CHARACTER-1B2EA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeea"},111339:{"value":"1B2EB","name":"NUSHU CHARACTER-1B2EB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeeb"},111340:{"value":"1B2EC","name":"NUSHU CHARACTER-1B2EC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeec"},111341:{"value":"1B2ED","name":"NUSHU CHARACTER-1B2ED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeed"},111342:{"value":"1B2EE","name":"NUSHU CHARACTER-1B2EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeee"},111343:{"value":"1B2EF","name":"NUSHU CHARACTER-1B2EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udeef"},111344:{"value":"1B2F0","name":"NUSHU CHARACTER-1B2F0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef0"},111345:{"value":"1B2F1","name":"NUSHU CHARACTER-1B2F1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef1"},111346:{"value":"1B2F2","name":"NUSHU CHARACTER-1B2F2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef2"},111347:{"value":"1B2F3","name":"NUSHU CHARACTER-1B2F3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef3"},111348:{"value":"1B2F4","name":"NUSHU CHARACTER-1B2F4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef4"},111349:{"value":"1B2F5","name":"NUSHU CHARACTER-1B2F5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef5"},111350:{"value":"1B2F6","name":"NUSHU CHARACTER-1B2F6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef6"},111351:{"value":"1B2F7","name":"NUSHU CHARACTER-1B2F7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef7"},111352:{"value":"1B2F8","name":"NUSHU CHARACTER-1B2F8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef8"},111353:{"value":"1B2F9","name":"NUSHU CHARACTER-1B2F9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udef9"},111354:{"value":"1B2FA","name":"NUSHU CHARACTER-1B2FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udefa"},111355:{"value":"1B2FB","name":"NUSHU CHARACTER-1B2FB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82c\udefb"},113664:{"value":"1BC00","name":"DUPLOYAN LETTER H","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc00"},113665:{"value":"1BC01","name":"DUPLOYAN LETTER X","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc01"},113666:{"value":"1BC02","name":"DUPLOYAN LETTER P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc02"},113667:{"value":"1BC03","name":"DUPLOYAN LETTER T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc03"},113668:{"value":"1BC04","name":"DUPLOYAN LETTER F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc04"},113669:{"value":"1BC05","name":"DUPLOYAN LETTER K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc05"},113670:{"value":"1BC06","name":"DUPLOYAN LETTER L","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc06"},113671:{"value":"1BC07","name":"DUPLOYAN LETTER B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc07"},113672:{"value":"1BC08","name":"DUPLOYAN LETTER D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc08"},113673:{"value":"1BC09","name":"DUPLOYAN LETTER V","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc09"},113674:{"value":"1BC0A","name":"DUPLOYAN LETTER G","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc0a"},113675:{"value":"1BC0B","name":"DUPLOYAN LETTER R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc0b"},113676:{"value":"1BC0C","name":"DUPLOYAN LETTER P N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc0c"},113677:{"value":"1BC0D","name":"DUPLOYAN LETTER D S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc0d"},113678:{"value":"1BC0E","name":"DUPLOYAN LETTER F N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc0e"},113679:{"value":"1BC0F","name":"DUPLOYAN LETTER K M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc0f"},113680:{"value":"1BC10","name":"DUPLOYAN LETTER R S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc10"},113681:{"value":"1BC11","name":"DUPLOYAN LETTER TH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc11"},113682:{"value":"1BC12","name":"DUPLOYAN LETTER SLOAN DH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc12"},113683:{"value":"1BC13","name":"DUPLOYAN LETTER DH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc13"},113684:{"value":"1BC14","name":"DUPLOYAN LETTER KK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc14"},113685:{"value":"1BC15","name":"DUPLOYAN LETTER SLOAN J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc15"},113686:{"value":"1BC16","name":"DUPLOYAN LETTER HL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc16"},113687:{"value":"1BC17","name":"DUPLOYAN LETTER LH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc17"},113688:{"value":"1BC18","name":"DUPLOYAN LETTER RH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc18"},113689:{"value":"1BC19","name":"DUPLOYAN LETTER M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc19"},113690:{"value":"1BC1A","name":"DUPLOYAN LETTER N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc1a"},113691:{"value":"1BC1B","name":"DUPLOYAN LETTER J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc1b"},113692:{"value":"1BC1C","name":"DUPLOYAN LETTER S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc1c"},113693:{"value":"1BC1D","name":"DUPLOYAN LETTER M N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc1d"},113694:{"value":"1BC1E","name":"DUPLOYAN LETTER N M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc1e"},113695:{"value":"1BC1F","name":"DUPLOYAN LETTER J M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc1f"},113696:{"value":"1BC20","name":"DUPLOYAN LETTER S J","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc20"},113697:{"value":"1BC21","name":"DUPLOYAN LETTER M WITH DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc21"},113698:{"value":"1BC22","name":"DUPLOYAN LETTER N WITH DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc22"},113699:{"value":"1BC23","name":"DUPLOYAN LETTER J WITH DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc23"},113700:{"value":"1BC24","name":"DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc24"},113701:{"value":"1BC25","name":"DUPLOYAN LETTER S WITH DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc25"},113702:{"value":"1BC26","name":"DUPLOYAN LETTER S WITH DOT BELOW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc26"},113703:{"value":"1BC27","name":"DUPLOYAN LETTER M S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc27"},113704:{"value":"1BC28","name":"DUPLOYAN LETTER N S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc28"},113705:{"value":"1BC29","name":"DUPLOYAN LETTER J S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc29"},113706:{"value":"1BC2A","name":"DUPLOYAN LETTER S S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc2a"},113707:{"value":"1BC2B","name":"DUPLOYAN LETTER M N S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc2b"},113708:{"value":"1BC2C","name":"DUPLOYAN LETTER N M S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc2c"},113709:{"value":"1BC2D","name":"DUPLOYAN LETTER J M S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc2d"},113710:{"value":"1BC2E","name":"DUPLOYAN LETTER S J S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc2e"},113711:{"value":"1BC2F","name":"DUPLOYAN LETTER J S WITH DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc2f"},113712:{"value":"1BC30","name":"DUPLOYAN LETTER J N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc30"},113713:{"value":"1BC31","name":"DUPLOYAN LETTER J N S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc31"},113714:{"value":"1BC32","name":"DUPLOYAN LETTER S T","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc32"},113715:{"value":"1BC33","name":"DUPLOYAN LETTER S T R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc33"},113716:{"value":"1BC34","name":"DUPLOYAN LETTER S P","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc34"},113717:{"value":"1BC35","name":"DUPLOYAN LETTER S P R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc35"},113718:{"value":"1BC36","name":"DUPLOYAN LETTER T S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc36"},113719:{"value":"1BC37","name":"DUPLOYAN LETTER T R S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc37"},113720:{"value":"1BC38","name":"DUPLOYAN LETTER W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc38"},113721:{"value":"1BC39","name":"DUPLOYAN LETTER WH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc39"},113722:{"value":"1BC3A","name":"DUPLOYAN LETTER W R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc3a"},113723:{"value":"1BC3B","name":"DUPLOYAN LETTER S N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc3b"},113724:{"value":"1BC3C","name":"DUPLOYAN LETTER S M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc3c"},113725:{"value":"1BC3D","name":"DUPLOYAN LETTER K R S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc3d"},113726:{"value":"1BC3E","name":"DUPLOYAN LETTER G R S","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc3e"},113727:{"value":"1BC3F","name":"DUPLOYAN LETTER S K","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc3f"},113728:{"value":"1BC40","name":"DUPLOYAN LETTER S K R","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc40"},113729:{"value":"1BC41","name":"DUPLOYAN LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc41"},113730:{"value":"1BC42","name":"DUPLOYAN LETTER SLOAN OW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc42"},113731:{"value":"1BC43","name":"DUPLOYAN LETTER OA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc43"},113732:{"value":"1BC44","name":"DUPLOYAN LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc44"},113733:{"value":"1BC45","name":"DUPLOYAN LETTER AOU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc45"},113734:{"value":"1BC46","name":"DUPLOYAN LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc46"},113735:{"value":"1BC47","name":"DUPLOYAN LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc47"},113736:{"value":"1BC48","name":"DUPLOYAN LETTER IE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc48"},113737:{"value":"1BC49","name":"DUPLOYAN LETTER SHORT I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc49"},113738:{"value":"1BC4A","name":"DUPLOYAN LETTER UI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc4a"},113739:{"value":"1BC4B","name":"DUPLOYAN LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc4b"},113740:{"value":"1BC4C","name":"DUPLOYAN LETTER SLOAN EH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc4c"},113741:{"value":"1BC4D","name":"DUPLOYAN LETTER ROMANIAN I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc4d"},113742:{"value":"1BC4E","name":"DUPLOYAN LETTER SLOAN EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc4e"},113743:{"value":"1BC4F","name":"DUPLOYAN LETTER LONG I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc4f"},113744:{"value":"1BC50","name":"DUPLOYAN LETTER YE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc50"},113745:{"value":"1BC51","name":"DUPLOYAN LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc51"},113746:{"value":"1BC52","name":"DUPLOYAN LETTER EU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc52"},113747:{"value":"1BC53","name":"DUPLOYAN LETTER XW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc53"},113748:{"value":"1BC54","name":"DUPLOYAN LETTER U N","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc54"},113749:{"value":"1BC55","name":"DUPLOYAN LETTER LONG U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc55"},113750:{"value":"1BC56","name":"DUPLOYAN LETTER ROMANIAN U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc56"},113751:{"value":"1BC57","name":"DUPLOYAN LETTER UH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc57"},113752:{"value":"1BC58","name":"DUPLOYAN LETTER SLOAN U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc58"},113753:{"value":"1BC59","name":"DUPLOYAN LETTER OOH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc59"},113754:{"value":"1BC5A","name":"DUPLOYAN LETTER OW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc5a"},113755:{"value":"1BC5B","name":"DUPLOYAN LETTER OU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc5b"},113756:{"value":"1BC5C","name":"DUPLOYAN LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc5c"},113757:{"value":"1BC5D","name":"DUPLOYAN LETTER WO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc5d"},113758:{"value":"1BC5E","name":"DUPLOYAN LETTER WI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc5e"},113759:{"value":"1BC5F","name":"DUPLOYAN LETTER WEI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc5f"},113760:{"value":"1BC60","name":"DUPLOYAN LETTER WOW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc60"},113761:{"value":"1BC61","name":"DUPLOYAN LETTER NASAL U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc61"},113762:{"value":"1BC62","name":"DUPLOYAN LETTER NASAL O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc62"},113763:{"value":"1BC63","name":"DUPLOYAN LETTER NASAL I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc63"},113764:{"value":"1BC64","name":"DUPLOYAN LETTER NASAL A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc64"},113765:{"value":"1BC65","name":"DUPLOYAN LETTER PERNIN AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc65"},113766:{"value":"1BC66","name":"DUPLOYAN LETTER PERNIN AM","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc66"},113767:{"value":"1BC67","name":"DUPLOYAN LETTER SLOAN EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc67"},113768:{"value":"1BC68","name":"DUPLOYAN LETTER SLOAN AN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc68"},113769:{"value":"1BC69","name":"DUPLOYAN LETTER SLOAN ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc69"},113770:{"value":"1BC6A","name":"DUPLOYAN LETTER VOCALIC M","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc6a"},113776:{"value":"1BC70","name":"DUPLOYAN AFFIX LEFT HORIZONTAL SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc70"},113777:{"value":"1BC71","name":"DUPLOYAN AFFIX MID HORIZONTAL SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc71"},113778:{"value":"1BC72","name":"DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc72"},113779:{"value":"1BC73","name":"DUPLOYAN AFFIX LOW VERTICAL SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc73"},113780:{"value":"1BC74","name":"DUPLOYAN AFFIX MID VERTICAL SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc74"},113781:{"value":"1BC75","name":"DUPLOYAN AFFIX HIGH VERTICAL SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc75"},113782:{"value":"1BC76","name":"DUPLOYAN AFFIX ATTACHED SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc76"},113783:{"value":"1BC77","name":"DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc77"},113784:{"value":"1BC78","name":"DUPLOYAN AFFIX ATTACHED TANGENT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc78"},113785:{"value":"1BC79","name":"DUPLOYAN AFFIX ATTACHED TAIL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc79"},113786:{"value":"1BC7A","name":"DUPLOYAN AFFIX ATTACHED E HOOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc7a"},113787:{"value":"1BC7B","name":"DUPLOYAN AFFIX ATTACHED I HOOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc7b"},113788:{"value":"1BC7C","name":"DUPLOYAN AFFIX ATTACHED TANGENT HOOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc7c"},113792:{"value":"1BC80","name":"DUPLOYAN AFFIX HIGH ACUTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc80"},113793:{"value":"1BC81","name":"DUPLOYAN AFFIX HIGH TIGHT ACUTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc81"},113794:{"value":"1BC82","name":"DUPLOYAN AFFIX HIGH GRAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc82"},113795:{"value":"1BC83","name":"DUPLOYAN AFFIX HIGH LONG GRAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc83"},113796:{"value":"1BC84","name":"DUPLOYAN AFFIX HIGH DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc84"},113797:{"value":"1BC85","name":"DUPLOYAN AFFIX HIGH CIRCLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc85"},113798:{"value":"1BC86","name":"DUPLOYAN AFFIX HIGH LINE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc86"},113799:{"value":"1BC87","name":"DUPLOYAN AFFIX HIGH WAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc87"},113800:{"value":"1BC88","name":"DUPLOYAN AFFIX HIGH VERTICAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc88"},113808:{"value":"1BC90","name":"DUPLOYAN AFFIX LOW ACUTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc90"},113809:{"value":"1BC91","name":"DUPLOYAN AFFIX LOW TIGHT ACUTE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc91"},113810:{"value":"1BC92","name":"DUPLOYAN AFFIX LOW GRAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc92"},113811:{"value":"1BC93","name":"DUPLOYAN AFFIX LOW LONG GRAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc93"},113812:{"value":"1BC94","name":"DUPLOYAN AFFIX LOW DOT","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc94"},113813:{"value":"1BC95","name":"DUPLOYAN AFFIX LOW CIRCLE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc95"},113814:{"value":"1BC96","name":"DUPLOYAN AFFIX LOW LINE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc96"},113815:{"value":"1BC97","name":"DUPLOYAN AFFIX LOW WAVE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc97"},113816:{"value":"1BC98","name":"DUPLOYAN AFFIX LOW VERTICAL","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc98"},113817:{"value":"1BC99","name":"DUPLOYAN AFFIX LOW ARROW","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc99"},122634:{"value":"1DF0A","name":"LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud837\udf0a"},123136:{"value":"1E100","name":"NYIAKENG PUACHUE HMONG LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd00"},123137:{"value":"1E101","name":"NYIAKENG PUACHUE HMONG LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd01"},123138:{"value":"1E102","name":"NYIAKENG PUACHUE HMONG LETTER NTA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd02"},123139:{"value":"1E103","name":"NYIAKENG PUACHUE HMONG LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd03"},123140:{"value":"1E104","name":"NYIAKENG PUACHUE HMONG LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd04"},123141:{"value":"1E105","name":"NYIAKENG PUACHUE HMONG LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd05"},123142:{"value":"1E106","name":"NYIAKENG PUACHUE HMONG LETTER XA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd06"},123143:{"value":"1E107","name":"NYIAKENG PUACHUE HMONG LETTER NKA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd07"},123144:{"value":"1E108","name":"NYIAKENG PUACHUE HMONG LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd08"},123145:{"value":"1E109","name":"NYIAKENG PUACHUE HMONG LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd09"},123146:{"value":"1E10A","name":"NYIAKENG PUACHUE HMONG LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd0a"},123147:{"value":"1E10B","name":"NYIAKENG PUACHUE HMONG LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd0b"},123148:{"value":"1E10C","name":"NYIAKENG PUACHUE HMONG LETTER NCA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd0c"},123149:{"value":"1E10D","name":"NYIAKENG PUACHUE HMONG LETTER NTSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd0d"},123150:{"value":"1E10E","name":"NYIAKENG PUACHUE HMONG LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd0e"},123151:{"value":"1E10F","name":"NYIAKENG PUACHUE HMONG LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd0f"},123152:{"value":"1E110","name":"NYIAKENG PUACHUE HMONG LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd10"},123153:{"value":"1E111","name":"NYIAKENG PUACHUE HMONG LETTER NRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd11"},123154:{"value":"1E112","name":"NYIAKENG PUACHUE HMONG LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd12"},123155:{"value":"1E113","name":"NYIAKENG PUACHUE HMONG LETTER NTXA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd13"},123156:{"value":"1E114","name":"NYIAKENG PUACHUE HMONG LETTER TXA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd14"},123157:{"value":"1E115","name":"NYIAKENG PUACHUE HMONG LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd15"},123158:{"value":"1E116","name":"NYIAKENG PUACHUE HMONG LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd16"},123159:{"value":"1E117","name":"NYIAKENG PUACHUE HMONG LETTER QA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd17"},123160:{"value":"1E118","name":"NYIAKENG PUACHUE HMONG LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd18"},123161:{"value":"1E119","name":"NYIAKENG PUACHUE HMONG LETTER NQA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd19"},123162:{"value":"1E11A","name":"NYIAKENG PUACHUE HMONG LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd1a"},123163:{"value":"1E11B","name":"NYIAKENG PUACHUE HMONG LETTER XYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd1b"},123164:{"value":"1E11C","name":"NYIAKENG PUACHUE HMONG LETTER NPA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd1c"},123165:{"value":"1E11D","name":"NYIAKENG PUACHUE HMONG LETTER DLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd1d"},123166:{"value":"1E11E","name":"NYIAKENG PUACHUE HMONG LETTER NPLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd1e"},123167:{"value":"1E11F","name":"NYIAKENG PUACHUE HMONG LETTER HAH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd1f"},123168:{"value":"1E120","name":"NYIAKENG PUACHUE HMONG LETTER MLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd20"},123169:{"value":"1E121","name":"NYIAKENG PUACHUE HMONG LETTER PLA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd21"},123170:{"value":"1E122","name":"NYIAKENG PUACHUE HMONG LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd22"},123171:{"value":"1E123","name":"NYIAKENG PUACHUE HMONG LETTER RRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd23"},123172:{"value":"1E124","name":"NYIAKENG PUACHUE HMONG LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd24"},123173:{"value":"1E125","name":"NYIAKENG PUACHUE HMONG LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd25"},123174:{"value":"1E126","name":"NYIAKENG PUACHUE HMONG LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd26"},123175:{"value":"1E127","name":"NYIAKENG PUACHUE HMONG LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd27"},123176:{"value":"1E128","name":"NYIAKENG PUACHUE HMONG LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd28"},123177:{"value":"1E129","name":"NYIAKENG PUACHUE HMONG LETTER OO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd29"},123178:{"value":"1E12A","name":"NYIAKENG PUACHUE HMONG LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd2a"},123179:{"value":"1E12B","name":"NYIAKENG PUACHUE HMONG LETTER EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd2b"},123180:{"value":"1E12C","name":"NYIAKENG PUACHUE HMONG LETTER W","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd2c"},123214:{"value":"1E14E","name":"NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd4e"},123536:{"value":"1E290","name":"TOTO LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude90"},123537:{"value":"1E291","name":"TOTO LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude91"},123538:{"value":"1E292","name":"TOTO LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude92"},123539:{"value":"1E293","name":"TOTO LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude93"},123540:{"value":"1E294","name":"TOTO LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude94"},123541:{"value":"1E295","name":"TOTO LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude95"},123542:{"value":"1E296","name":"TOTO LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude96"},123543:{"value":"1E297","name":"TOTO LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude97"},123544:{"value":"1E298","name":"TOTO LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude98"},123545:{"value":"1E299","name":"TOTO LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude99"},123546:{"value":"1E29A","name":"TOTO LETTER CHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude9a"},123547:{"value":"1E29B","name":"TOTO LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude9b"},123548:{"value":"1E29C","name":"TOTO LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude9c"},123549:{"value":"1E29D","name":"TOTO LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude9d"},123550:{"value":"1E29E","name":"TOTO LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude9e"},123551:{"value":"1E29F","name":"TOTO LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\ude9f"},123552:{"value":"1E2A0","name":"TOTO LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea0"},123553:{"value":"1E2A1","name":"TOTO LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea1"},123554:{"value":"1E2A2","name":"TOTO LETTER BREATHY I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea2"},123555:{"value":"1E2A3","name":"TOTO LETTER IU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea3"},123556:{"value":"1E2A4","name":"TOTO LETTER BREATHY IU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea4"},123557:{"value":"1E2A5","name":"TOTO LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea5"},123558:{"value":"1E2A6","name":"TOTO LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea6"},123559:{"value":"1E2A7","name":"TOTO LETTER BREATHY E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea7"},123560:{"value":"1E2A8","name":"TOTO LETTER EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea8"},123561:{"value":"1E2A9","name":"TOTO LETTER BREATHY EO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udea9"},123562:{"value":"1E2AA","name":"TOTO LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeaa"},123563:{"value":"1E2AB","name":"TOTO LETTER AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeab"},123564:{"value":"1E2AC","name":"TOTO LETTER BREATHY AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeac"},123565:{"value":"1E2AD","name":"TOTO LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udead"},123584:{"value":"1E2C0","name":"WANCHO LETTER AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec0"},123585:{"value":"1E2C1","name":"WANCHO LETTER A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec1"},123586:{"value":"1E2C2","name":"WANCHO LETTER BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec2"},123587:{"value":"1E2C3","name":"WANCHO LETTER CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec3"},123588:{"value":"1E2C4","name":"WANCHO LETTER DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec4"},123589:{"value":"1E2C5","name":"WANCHO LETTER GA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec5"},123590:{"value":"1E2C6","name":"WANCHO LETTER YA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec6"},123591:{"value":"1E2C7","name":"WANCHO LETTER PHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec7"},123592:{"value":"1E2C8","name":"WANCHO LETTER LA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec8"},123593:{"value":"1E2C9","name":"WANCHO LETTER NA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udec9"},123594:{"value":"1E2CA","name":"WANCHO LETTER PA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeca"},123595:{"value":"1E2CB","name":"WANCHO LETTER TA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udecb"},123596:{"value":"1E2CC","name":"WANCHO LETTER THA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udecc"},123597:{"value":"1E2CD","name":"WANCHO LETTER FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udecd"},123598:{"value":"1E2CE","name":"WANCHO LETTER SA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udece"},123599:{"value":"1E2CF","name":"WANCHO LETTER SHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udecf"},123600:{"value":"1E2D0","name":"WANCHO LETTER JA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded0"},123601:{"value":"1E2D1","name":"WANCHO LETTER ZA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded1"},123602:{"value":"1E2D2","name":"WANCHO LETTER WA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded2"},123603:{"value":"1E2D3","name":"WANCHO LETTER VA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded3"},123604:{"value":"1E2D4","name":"WANCHO LETTER KA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded4"},123605:{"value":"1E2D5","name":"WANCHO LETTER O","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded5"},123606:{"value":"1E2D6","name":"WANCHO LETTER AU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded6"},123607:{"value":"1E2D7","name":"WANCHO LETTER RA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded7"},123608:{"value":"1E2D8","name":"WANCHO LETTER MA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded8"},123609:{"value":"1E2D9","name":"WANCHO LETTER KHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\uded9"},123610:{"value":"1E2DA","name":"WANCHO LETTER HA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeda"},123611:{"value":"1E2DB","name":"WANCHO LETTER E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udedb"},123612:{"value":"1E2DC","name":"WANCHO LETTER I","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udedc"},123613:{"value":"1E2DD","name":"WANCHO LETTER NGA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udedd"},123614:{"value":"1E2DE","name":"WANCHO LETTER U","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udede"},123615:{"value":"1E2DF","name":"WANCHO LETTER LLHA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udedf"},123616:{"value":"1E2E0","name":"WANCHO LETTER TSA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee0"},123617:{"value":"1E2E1","name":"WANCHO LETTER TRA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee1"},123618:{"value":"1E2E2","name":"WANCHO LETTER ONG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee2"},123619:{"value":"1E2E3","name":"WANCHO LETTER AANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee3"},123620:{"value":"1E2E4","name":"WANCHO LETTER ANG","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee4"},123621:{"value":"1E2E5","name":"WANCHO LETTER ING","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee5"},123622:{"value":"1E2E6","name":"WANCHO LETTER ON","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee6"},123623:{"value":"1E2E7","name":"WANCHO LETTER EN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee7"},123624:{"value":"1E2E8","name":"WANCHO LETTER AAN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee8"},123625:{"value":"1E2E9","name":"WANCHO LETTER NYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udee9"},123626:{"value":"1E2EA","name":"WANCHO LETTER UEN","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeea"},123627:{"value":"1E2EB","name":"WANCHO LETTER YIH","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeeb"},124896:{"value":"1E7E0","name":"ETHIOPIC SYLLABLE HHYA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe0"},124897:{"value":"1E7E1","name":"ETHIOPIC SYLLABLE HHYU","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe1"},124898:{"value":"1E7E2","name":"ETHIOPIC SYLLABLE HHYI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe2"},124899:{"value":"1E7E3","name":"ETHIOPIC SYLLABLE HHYAA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe3"},124900:{"value":"1E7E4","name":"ETHIOPIC SYLLABLE HHYEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe4"},124901:{"value":"1E7E5","name":"ETHIOPIC SYLLABLE HHYE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe5"},124902:{"value":"1E7E6","name":"ETHIOPIC SYLLABLE HHYO","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe6"},124904:{"value":"1E7E8","name":"ETHIOPIC SYLLABLE GURAGE HHWA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe8"},124905:{"value":"1E7E9","name":"ETHIOPIC SYLLABLE HHWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfe9"},124906:{"value":"1E7EA","name":"ETHIOPIC SYLLABLE HHWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfea"},124907:{"value":"1E7EB","name":"ETHIOPIC SYLLABLE HHWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfeb"},124909:{"value":"1E7ED","name":"ETHIOPIC SYLLABLE GURAGE MWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfed"},124910:{"value":"1E7EE","name":"ETHIOPIC SYLLABLE GURAGE MWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udfee"},124912:{"value":"1E7F0","name":"ETHIOPIC SYLLABLE GURAGE QWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff0"},124913:{"value":"1E7F1","name":"ETHIOPIC SYLLABLE GURAGE QWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff1"},124914:{"value":"1E7F2","name":"ETHIOPIC SYLLABLE GURAGE QWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff2"},124915:{"value":"1E7F3","name":"ETHIOPIC SYLLABLE GURAGE BWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff3"},124916:{"value":"1E7F4","name":"ETHIOPIC SYLLABLE GURAGE BWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff4"},124917:{"value":"1E7F5","name":"ETHIOPIC SYLLABLE GURAGE KWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff5"},124918:{"value":"1E7F6","name":"ETHIOPIC SYLLABLE GURAGE KWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff6"},124919:{"value":"1E7F7","name":"ETHIOPIC SYLLABLE GURAGE KWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff7"},124920:{"value":"1E7F8","name":"ETHIOPIC SYLLABLE GURAGE GWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff8"},124921:{"value":"1E7F9","name":"ETHIOPIC SYLLABLE GURAGE GWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udff9"},124922:{"value":"1E7FA","name":"ETHIOPIC SYLLABLE GURAGE GWE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udffa"},124923:{"value":"1E7FB","name":"ETHIOPIC SYLLABLE GURAGE FWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udffb"},124924:{"value":"1E7FC","name":"ETHIOPIC SYLLABLE GURAGE FWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udffc"},124925:{"value":"1E7FD","name":"ETHIOPIC SYLLABLE GURAGE PWI","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udffd"},124926:{"value":"1E7FE","name":"ETHIOPIC SYLLABLE GURAGE PWEE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud839\udffe"},124928:{"value":"1E800","name":"MENDE KIKAKUI SYLLABLE M001 KI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc00"},124929:{"value":"1E801","name":"MENDE KIKAKUI SYLLABLE M002 KA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc01"},124930:{"value":"1E802","name":"MENDE KIKAKUI SYLLABLE M003 KU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc02"},124931:{"value":"1E803","name":"MENDE KIKAKUI SYLLABLE M065 KEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc03"},124932:{"value":"1E804","name":"MENDE KIKAKUI SYLLABLE M095 KE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc04"},124933:{"value":"1E805","name":"MENDE KIKAKUI SYLLABLE M076 KOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc05"},124934:{"value":"1E806","name":"MENDE KIKAKUI SYLLABLE M048 KO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc06"},124935:{"value":"1E807","name":"MENDE KIKAKUI SYLLABLE M179 KUA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc07"},124936:{"value":"1E808","name":"MENDE KIKAKUI SYLLABLE M004 WI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc08"},124937:{"value":"1E809","name":"MENDE KIKAKUI SYLLABLE M005 WA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc09"},124938:{"value":"1E80A","name":"MENDE KIKAKUI SYLLABLE M006 WU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc0a"},124939:{"value":"1E80B","name":"MENDE KIKAKUI SYLLABLE M126 WEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc0b"},124940:{"value":"1E80C","name":"MENDE KIKAKUI SYLLABLE M118 WE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc0c"},124941:{"value":"1E80D","name":"MENDE KIKAKUI SYLLABLE M114 WOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc0d"},124942:{"value":"1E80E","name":"MENDE KIKAKUI SYLLABLE M045 WO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc0e"},124943:{"value":"1E80F","name":"MENDE KIKAKUI SYLLABLE M194 WUI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc0f"},124944:{"value":"1E810","name":"MENDE KIKAKUI SYLLABLE M143 WEI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc10"},124945:{"value":"1E811","name":"MENDE KIKAKUI SYLLABLE M061 WVI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc11"},124946:{"value":"1E812","name":"MENDE KIKAKUI SYLLABLE M049 WVA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc12"},124947:{"value":"1E813","name":"MENDE KIKAKUI SYLLABLE M139 WVE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc13"},124948:{"value":"1E814","name":"MENDE KIKAKUI SYLLABLE M007 MIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc14"},124949:{"value":"1E815","name":"MENDE KIKAKUI SYLLABLE M008 MAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc15"},124950:{"value":"1E816","name":"MENDE KIKAKUI SYLLABLE M009 MUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc16"},124951:{"value":"1E817","name":"MENDE KIKAKUI SYLLABLE M059 MEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc17"},124952:{"value":"1E818","name":"MENDE KIKAKUI SYLLABLE M094 MON","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc18"},124953:{"value":"1E819","name":"MENDE KIKAKUI SYLLABLE M154 MUAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc19"},124954:{"value":"1E81A","name":"MENDE KIKAKUI SYLLABLE M189 MUEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc1a"},124955:{"value":"1E81B","name":"MENDE KIKAKUI SYLLABLE M010 BI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc1b"},124956:{"value":"1E81C","name":"MENDE KIKAKUI SYLLABLE M011 BA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc1c"},124957:{"value":"1E81D","name":"MENDE KIKAKUI SYLLABLE M012 BU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc1d"},124958:{"value":"1E81E","name":"MENDE KIKAKUI SYLLABLE M150 BEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc1e"},124959:{"value":"1E81F","name":"MENDE KIKAKUI SYLLABLE M097 BE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc1f"},124960:{"value":"1E820","name":"MENDE KIKAKUI SYLLABLE M103 BOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc20"},124961:{"value":"1E821","name":"MENDE KIKAKUI SYLLABLE M138 BO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc21"},124962:{"value":"1E822","name":"MENDE KIKAKUI SYLLABLE M013 I","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc22"},124963:{"value":"1E823","name":"MENDE KIKAKUI SYLLABLE M014 A","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc23"},124964:{"value":"1E824","name":"MENDE KIKAKUI SYLLABLE M015 U","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc24"},124965:{"value":"1E825","name":"MENDE KIKAKUI SYLLABLE M163 EE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc25"},124966:{"value":"1E826","name":"MENDE KIKAKUI SYLLABLE M100 E","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc26"},124967:{"value":"1E827","name":"MENDE KIKAKUI SYLLABLE M165 OO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc27"},124968:{"value":"1E828","name":"MENDE KIKAKUI SYLLABLE M147 O","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc28"},124969:{"value":"1E829","name":"MENDE KIKAKUI SYLLABLE M137 EI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc29"},124970:{"value":"1E82A","name":"MENDE KIKAKUI SYLLABLE M131 IN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc2a"},124971:{"value":"1E82B","name":"MENDE KIKAKUI SYLLABLE M135 IN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc2b"},124972:{"value":"1E82C","name":"MENDE KIKAKUI SYLLABLE M195 AN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc2c"},124973:{"value":"1E82D","name":"MENDE KIKAKUI SYLLABLE M178 EN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc2d"},124974:{"value":"1E82E","name":"MENDE KIKAKUI SYLLABLE M019 SI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc2e"},124975:{"value":"1E82F","name":"MENDE KIKAKUI SYLLABLE M020 SA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc2f"},124976:{"value":"1E830","name":"MENDE KIKAKUI SYLLABLE M021 SU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc30"},124977:{"value":"1E831","name":"MENDE KIKAKUI SYLLABLE M162 SEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc31"},124978:{"value":"1E832","name":"MENDE KIKAKUI SYLLABLE M116 SE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc32"},124979:{"value":"1E833","name":"MENDE KIKAKUI SYLLABLE M136 SOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc33"},124980:{"value":"1E834","name":"MENDE KIKAKUI SYLLABLE M079 SO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc34"},124981:{"value":"1E835","name":"MENDE KIKAKUI SYLLABLE M196 SIA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc35"},124982:{"value":"1E836","name":"MENDE KIKAKUI SYLLABLE M025 LI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc36"},124983:{"value":"1E837","name":"MENDE KIKAKUI SYLLABLE M026 LA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc37"},124984:{"value":"1E838","name":"MENDE KIKAKUI SYLLABLE M027 LU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc38"},124985:{"value":"1E839","name":"MENDE KIKAKUI SYLLABLE M084 LEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc39"},124986:{"value":"1E83A","name":"MENDE KIKAKUI SYLLABLE M073 LE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc3a"},124987:{"value":"1E83B","name":"MENDE KIKAKUI SYLLABLE M054 LOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc3b"},124988:{"value":"1E83C","name":"MENDE KIKAKUI SYLLABLE M153 LO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc3c"},124989:{"value":"1E83D","name":"MENDE KIKAKUI SYLLABLE M110 LONG LE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc3d"},124990:{"value":"1E83E","name":"MENDE KIKAKUI SYLLABLE M016 DI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc3e"},124991:{"value":"1E83F","name":"MENDE KIKAKUI SYLLABLE M017 DA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc3f"},124992:{"value":"1E840","name":"MENDE KIKAKUI SYLLABLE M018 DU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc40"},124993:{"value":"1E841","name":"MENDE KIKAKUI SYLLABLE M089 DEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc41"},124994:{"value":"1E842","name":"MENDE KIKAKUI SYLLABLE M180 DOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc42"},124995:{"value":"1E843","name":"MENDE KIKAKUI SYLLABLE M181 DO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc43"},124996:{"value":"1E844","name":"MENDE KIKAKUI SYLLABLE M022 TI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc44"},124997:{"value":"1E845","name":"MENDE KIKAKUI SYLLABLE M023 TA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc45"},124998:{"value":"1E846","name":"MENDE KIKAKUI SYLLABLE M024 TU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc46"},124999:{"value":"1E847","name":"MENDE KIKAKUI SYLLABLE M091 TEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc47"},125000:{"value":"1E848","name":"MENDE KIKAKUI SYLLABLE M055 TE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc48"},125001:{"value":"1E849","name":"MENDE KIKAKUI SYLLABLE M104 TOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc49"},125002:{"value":"1E84A","name":"MENDE KIKAKUI SYLLABLE M069 TO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc4a"},125003:{"value":"1E84B","name":"MENDE KIKAKUI SYLLABLE M028 JI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc4b"},125004:{"value":"1E84C","name":"MENDE KIKAKUI SYLLABLE M029 JA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc4c"},125005:{"value":"1E84D","name":"MENDE KIKAKUI SYLLABLE M030 JU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc4d"},125006:{"value":"1E84E","name":"MENDE KIKAKUI SYLLABLE M157 JEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc4e"},125007:{"value":"1E84F","name":"MENDE KIKAKUI SYLLABLE M113 JE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc4f"},125008:{"value":"1E850","name":"MENDE KIKAKUI SYLLABLE M160 JOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc50"},125009:{"value":"1E851","name":"MENDE KIKAKUI SYLLABLE M063 JO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc51"},125010:{"value":"1E852","name":"MENDE KIKAKUI SYLLABLE M175 LONG JO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc52"},125011:{"value":"1E853","name":"MENDE KIKAKUI SYLLABLE M031 YI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc53"},125012:{"value":"1E854","name":"MENDE KIKAKUI SYLLABLE M032 YA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc54"},125013:{"value":"1E855","name":"MENDE KIKAKUI SYLLABLE M033 YU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc55"},125014:{"value":"1E856","name":"MENDE KIKAKUI SYLLABLE M109 YEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc56"},125015:{"value":"1E857","name":"MENDE KIKAKUI SYLLABLE M080 YE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc57"},125016:{"value":"1E858","name":"MENDE KIKAKUI SYLLABLE M141 YOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc58"},125017:{"value":"1E859","name":"MENDE KIKAKUI SYLLABLE M121 YO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc59"},125018:{"value":"1E85A","name":"MENDE KIKAKUI SYLLABLE M034 FI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc5a"},125019:{"value":"1E85B","name":"MENDE KIKAKUI SYLLABLE M035 FA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc5b"},125020:{"value":"1E85C","name":"MENDE KIKAKUI SYLLABLE M036 FU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc5c"},125021:{"value":"1E85D","name":"MENDE KIKAKUI SYLLABLE M078 FEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc5d"},125022:{"value":"1E85E","name":"MENDE KIKAKUI SYLLABLE M075 FE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc5e"},125023:{"value":"1E85F","name":"MENDE KIKAKUI SYLLABLE M133 FOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc5f"},125024:{"value":"1E860","name":"MENDE KIKAKUI SYLLABLE M088 FO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc60"},125025:{"value":"1E861","name":"MENDE KIKAKUI SYLLABLE M197 FUA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc61"},125026:{"value":"1E862","name":"MENDE KIKAKUI SYLLABLE M101 FAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc62"},125027:{"value":"1E863","name":"MENDE KIKAKUI SYLLABLE M037 NIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc63"},125028:{"value":"1E864","name":"MENDE KIKAKUI SYLLABLE M038 NAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc64"},125029:{"value":"1E865","name":"MENDE KIKAKUI SYLLABLE M039 NUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc65"},125030:{"value":"1E866","name":"MENDE KIKAKUI SYLLABLE M117 NEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc66"},125031:{"value":"1E867","name":"MENDE KIKAKUI SYLLABLE M169 NON","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc67"},125032:{"value":"1E868","name":"MENDE KIKAKUI SYLLABLE M176 HI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc68"},125033:{"value":"1E869","name":"MENDE KIKAKUI SYLLABLE M041 HA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc69"},125034:{"value":"1E86A","name":"MENDE KIKAKUI SYLLABLE M186 HU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc6a"},125035:{"value":"1E86B","name":"MENDE KIKAKUI SYLLABLE M040 HEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc6b"},125036:{"value":"1E86C","name":"MENDE KIKAKUI SYLLABLE M096 HE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc6c"},125037:{"value":"1E86D","name":"MENDE KIKAKUI SYLLABLE M042 HOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc6d"},125038:{"value":"1E86E","name":"MENDE KIKAKUI SYLLABLE M140 HO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc6e"},125039:{"value":"1E86F","name":"MENDE KIKAKUI SYLLABLE M083 HEEI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc6f"},125040:{"value":"1E870","name":"MENDE KIKAKUI SYLLABLE M128 HOOU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc70"},125041:{"value":"1E871","name":"MENDE KIKAKUI SYLLABLE M053 HIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc71"},125042:{"value":"1E872","name":"MENDE KIKAKUI SYLLABLE M130 HAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc72"},125043:{"value":"1E873","name":"MENDE KIKAKUI SYLLABLE M087 HUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc73"},125044:{"value":"1E874","name":"MENDE KIKAKUI SYLLABLE M052 HEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc74"},125045:{"value":"1E875","name":"MENDE KIKAKUI SYLLABLE M193 HON","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc75"},125046:{"value":"1E876","name":"MENDE KIKAKUI SYLLABLE M046 HUAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc76"},125047:{"value":"1E877","name":"MENDE KIKAKUI SYLLABLE M090 NGGI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc77"},125048:{"value":"1E878","name":"MENDE KIKAKUI SYLLABLE M043 NGGA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc78"},125049:{"value":"1E879","name":"MENDE KIKAKUI SYLLABLE M082 NGGU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc79"},125050:{"value":"1E87A","name":"MENDE KIKAKUI SYLLABLE M115 NGGEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc7a"},125051:{"value":"1E87B","name":"MENDE KIKAKUI SYLLABLE M146 NGGE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc7b"},125052:{"value":"1E87C","name":"MENDE KIKAKUI SYLLABLE M156 NGGOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc7c"},125053:{"value":"1E87D","name":"MENDE KIKAKUI SYLLABLE M120 NGGO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc7d"},125054:{"value":"1E87E","name":"MENDE KIKAKUI SYLLABLE M159 NGGAA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc7e"},125055:{"value":"1E87F","name":"MENDE KIKAKUI SYLLABLE M127 NGGUA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc7f"},125056:{"value":"1E880","name":"MENDE KIKAKUI SYLLABLE M086 LONG NGGE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc80"},125057:{"value":"1E881","name":"MENDE KIKAKUI SYLLABLE M106 LONG NGGOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc81"},125058:{"value":"1E882","name":"MENDE KIKAKUI SYLLABLE M183 LONG NGGO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc82"},125059:{"value":"1E883","name":"MENDE KIKAKUI SYLLABLE M155 GI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc83"},125060:{"value":"1E884","name":"MENDE KIKAKUI SYLLABLE M111 GA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc84"},125061:{"value":"1E885","name":"MENDE KIKAKUI SYLLABLE M168 GU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc85"},125062:{"value":"1E886","name":"MENDE KIKAKUI SYLLABLE M190 GEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc86"},125063:{"value":"1E887","name":"MENDE KIKAKUI SYLLABLE M166 GUEI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc87"},125064:{"value":"1E888","name":"MENDE KIKAKUI SYLLABLE M167 GUAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc88"},125065:{"value":"1E889","name":"MENDE KIKAKUI SYLLABLE M184 NGEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc89"},125066:{"value":"1E88A","name":"MENDE KIKAKUI SYLLABLE M057 NGON","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc8a"},125067:{"value":"1E88B","name":"MENDE KIKAKUI SYLLABLE M177 NGUAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc8b"},125068:{"value":"1E88C","name":"MENDE KIKAKUI SYLLABLE M068 PI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc8c"},125069:{"value":"1E88D","name":"MENDE KIKAKUI SYLLABLE M099 PA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc8d"},125070:{"value":"1E88E","name":"MENDE KIKAKUI SYLLABLE M050 PU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc8e"},125071:{"value":"1E88F","name":"MENDE KIKAKUI SYLLABLE M081 PEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc8f"},125072:{"value":"1E890","name":"MENDE KIKAKUI SYLLABLE M051 PE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc90"},125073:{"value":"1E891","name":"MENDE KIKAKUI SYLLABLE M102 POO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc91"},125074:{"value":"1E892","name":"MENDE KIKAKUI SYLLABLE M066 PO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc92"},125075:{"value":"1E893","name":"MENDE KIKAKUI SYLLABLE M145 MBI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc93"},125076:{"value":"1E894","name":"MENDE KIKAKUI SYLLABLE M062 MBA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc94"},125077:{"value":"1E895","name":"MENDE KIKAKUI SYLLABLE M122 MBU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc95"},125078:{"value":"1E896","name":"MENDE KIKAKUI SYLLABLE M047 MBEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc96"},125079:{"value":"1E897","name":"MENDE KIKAKUI SYLLABLE M188 MBEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc97"},125080:{"value":"1E898","name":"MENDE KIKAKUI SYLLABLE M072 MBE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc98"},125081:{"value":"1E899","name":"MENDE KIKAKUI SYLLABLE M172 MBOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc99"},125082:{"value":"1E89A","name":"MENDE KIKAKUI SYLLABLE M174 MBO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc9a"},125083:{"value":"1E89B","name":"MENDE KIKAKUI SYLLABLE M187 MBUU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc9b"},125084:{"value":"1E89C","name":"MENDE KIKAKUI SYLLABLE M161 LONG MBE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc9c"},125085:{"value":"1E89D","name":"MENDE KIKAKUI SYLLABLE M105 LONG MBOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc9d"},125086:{"value":"1E89E","name":"MENDE KIKAKUI SYLLABLE M142 LONG MBO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc9e"},125087:{"value":"1E89F","name":"MENDE KIKAKUI SYLLABLE M132 KPI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udc9f"},125088:{"value":"1E8A0","name":"MENDE KIKAKUI SYLLABLE M092 KPA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca0"},125089:{"value":"1E8A1","name":"MENDE KIKAKUI SYLLABLE M074 KPU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca1"},125090:{"value":"1E8A2","name":"MENDE KIKAKUI SYLLABLE M044 KPEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca2"},125091:{"value":"1E8A3","name":"MENDE KIKAKUI SYLLABLE M108 KPE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca3"},125092:{"value":"1E8A4","name":"MENDE KIKAKUI SYLLABLE M112 KPOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca4"},125093:{"value":"1E8A5","name":"MENDE KIKAKUI SYLLABLE M158 KPO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca5"},125094:{"value":"1E8A6","name":"MENDE KIKAKUI SYLLABLE M124 GBI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca6"},125095:{"value":"1E8A7","name":"MENDE KIKAKUI SYLLABLE M056 GBA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca7"},125096:{"value":"1E8A8","name":"MENDE KIKAKUI SYLLABLE M148 GBU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca8"},125097:{"value":"1E8A9","name":"MENDE KIKAKUI SYLLABLE M093 GBEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udca9"},125098:{"value":"1E8AA","name":"MENDE KIKAKUI SYLLABLE M107 GBE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcaa"},125099:{"value":"1E8AB","name":"MENDE KIKAKUI SYLLABLE M071 GBOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcab"},125100:{"value":"1E8AC","name":"MENDE KIKAKUI SYLLABLE M070 GBO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcac"},125101:{"value":"1E8AD","name":"MENDE KIKAKUI SYLLABLE M171 RA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcad"},125102:{"value":"1E8AE","name":"MENDE KIKAKUI SYLLABLE M123 NDI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcae"},125103:{"value":"1E8AF","name":"MENDE KIKAKUI SYLLABLE M129 NDA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcaf"},125104:{"value":"1E8B0","name":"MENDE KIKAKUI SYLLABLE M125 NDU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb0"},125105:{"value":"1E8B1","name":"MENDE KIKAKUI SYLLABLE M191 NDEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb1"},125106:{"value":"1E8B2","name":"MENDE KIKAKUI SYLLABLE M119 NDE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb2"},125107:{"value":"1E8B3","name":"MENDE KIKAKUI SYLLABLE M067 NDOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb3"},125108:{"value":"1E8B4","name":"MENDE KIKAKUI SYLLABLE M064 NDO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb4"},125109:{"value":"1E8B5","name":"MENDE KIKAKUI SYLLABLE M152 NJA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb5"},125110:{"value":"1E8B6","name":"MENDE KIKAKUI SYLLABLE M192 NJU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb6"},125111:{"value":"1E8B7","name":"MENDE KIKAKUI SYLLABLE M149 NJEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb7"},125112:{"value":"1E8B8","name":"MENDE KIKAKUI SYLLABLE M134 NJOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb8"},125113:{"value":"1E8B9","name":"MENDE KIKAKUI SYLLABLE M182 VI","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcb9"},125114:{"value":"1E8BA","name":"MENDE KIKAKUI SYLLABLE M185 VA","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcba"},125115:{"value":"1E8BB","name":"MENDE KIKAKUI SYLLABLE M151 VU","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcbb"},125116:{"value":"1E8BC","name":"MENDE KIKAKUI SYLLABLE M173 VEE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcbc"},125117:{"value":"1E8BD","name":"MENDE KIKAKUI SYLLABLE M085 VE","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcbd"},125118:{"value":"1E8BE","name":"MENDE KIKAKUI SYLLABLE M144 VOO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcbe"},125119:{"value":"1E8BF","name":"MENDE KIKAKUI SYLLABLE M077 VO","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcbf"},125120:{"value":"1E8C0","name":"MENDE KIKAKUI SYLLABLE M164 NYIN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc0"},125121:{"value":"1E8C1","name":"MENDE KIKAKUI SYLLABLE M058 NYAN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc1"},125122:{"value":"1E8C2","name":"MENDE KIKAKUI SYLLABLE M170 NYUN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc2"},125123:{"value":"1E8C3","name":"MENDE KIKAKUI SYLLABLE M098 NYEN","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc3"},125124:{"value":"1E8C4","name":"MENDE KIKAKUI SYLLABLE M060 NYON","category":"Lo","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc4"},126464:{"value":"1EE00","name":"ARABIC MATHEMATICAL ALEF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude00"},126465:{"value":"1EE01","name":"ARABIC MATHEMATICAL BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude01"},126466:{"value":"1EE02","name":"ARABIC MATHEMATICAL JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude02"},126467:{"value":"1EE03","name":"ARABIC MATHEMATICAL DAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude03"},126469:{"value":"1EE05","name":"ARABIC MATHEMATICAL WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude05"},126470:{"value":"1EE06","name":"ARABIC MATHEMATICAL ZAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude06"},126471:{"value":"1EE07","name":"ARABIC MATHEMATICAL HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude07"},126472:{"value":"1EE08","name":"ARABIC MATHEMATICAL TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude08"},126473:{"value":"1EE09","name":"ARABIC MATHEMATICAL YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude09"},126474:{"value":"1EE0A","name":"ARABIC MATHEMATICAL KAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude0a"},126475:{"value":"1EE0B","name":"ARABIC MATHEMATICAL LAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude0b"},126476:{"value":"1EE0C","name":"ARABIC MATHEMATICAL MEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude0c"},126477:{"value":"1EE0D","name":"ARABIC MATHEMATICAL NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude0d"},126478:{"value":"1EE0E","name":"ARABIC MATHEMATICAL SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude0e"},126479:{"value":"1EE0F","name":"ARABIC MATHEMATICAL AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude0f"},126480:{"value":"1EE10","name":"ARABIC MATHEMATICAL FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude10"},126481:{"value":"1EE11","name":"ARABIC MATHEMATICAL SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude11"},126482:{"value":"1EE12","name":"ARABIC MATHEMATICAL QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude12"},126483:{"value":"1EE13","name":"ARABIC MATHEMATICAL REH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude13"},126484:{"value":"1EE14","name":"ARABIC MATHEMATICAL SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude14"},126485:{"value":"1EE15","name":"ARABIC MATHEMATICAL TEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude15"},126486:{"value":"1EE16","name":"ARABIC MATHEMATICAL THEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude16"},126487:{"value":"1EE17","name":"ARABIC MATHEMATICAL KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude17"},126488:{"value":"1EE18","name":"ARABIC MATHEMATICAL THAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0630","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude18"},126489:{"value":"1EE19","name":"ARABIC MATHEMATICAL DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude19"},126490:{"value":"1EE1A","name":"ARABIC MATHEMATICAL ZAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude1a"},126491:{"value":"1EE1B","name":"ARABIC MATHEMATICAL GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude1b"},126492:{"value":"1EE1C","name":"ARABIC MATHEMATICAL DOTLESS BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 066E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude1c"},126493:{"value":"1EE1D","name":"ARABIC MATHEMATICAL DOTLESS NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude1d"},126494:{"value":"1EE1E","name":"ARABIC MATHEMATICAL DOTLESS FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude1e"},126495:{"value":"1EE1F","name":"ARABIC MATHEMATICAL DOTLESS QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 066F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude1f"},126497:{"value":"1EE21","name":"ARABIC MATHEMATICAL INITIAL BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude21"},126498:{"value":"1EE22","name":"ARABIC MATHEMATICAL INITIAL JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude22"},126500:{"value":"1EE24","name":"ARABIC MATHEMATICAL INITIAL HEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude24"},126503:{"value":"1EE27","name":"ARABIC MATHEMATICAL INITIAL HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude27"},126505:{"value":"1EE29","name":"ARABIC MATHEMATICAL INITIAL YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude29"},126506:{"value":"1EE2A","name":"ARABIC MATHEMATICAL INITIAL KAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude2a"},126507:{"value":"1EE2B","name":"ARABIC MATHEMATICAL INITIAL LAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude2b"},126508:{"value":"1EE2C","name":"ARABIC MATHEMATICAL INITIAL MEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude2c"},126509:{"value":"1EE2D","name":"ARABIC MATHEMATICAL INITIAL NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude2d"},126510:{"value":"1EE2E","name":"ARABIC MATHEMATICAL INITIAL SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude2e"},126511:{"value":"1EE2F","name":"ARABIC MATHEMATICAL INITIAL AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude2f"},126512:{"value":"1EE30","name":"ARABIC MATHEMATICAL INITIAL FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude30"},126513:{"value":"1EE31","name":"ARABIC MATHEMATICAL INITIAL SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude31"},126514:{"value":"1EE32","name":"ARABIC MATHEMATICAL INITIAL QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude32"},126516:{"value":"1EE34","name":"ARABIC MATHEMATICAL INITIAL SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude34"},126517:{"value":"1EE35","name":"ARABIC MATHEMATICAL INITIAL TEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude35"},126518:{"value":"1EE36","name":"ARABIC MATHEMATICAL INITIAL THEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude36"},126519:{"value":"1EE37","name":"ARABIC MATHEMATICAL INITIAL KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude37"},126521:{"value":"1EE39","name":"ARABIC MATHEMATICAL INITIAL DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude39"},126523:{"value":"1EE3B","name":"ARABIC MATHEMATICAL INITIAL GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude3b"},126530:{"value":"1EE42","name":"ARABIC MATHEMATICAL TAILED JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude42"},126535:{"value":"1EE47","name":"ARABIC MATHEMATICAL TAILED HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude47"},126537:{"value":"1EE49","name":"ARABIC MATHEMATICAL TAILED YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude49"},126539:{"value":"1EE4B","name":"ARABIC MATHEMATICAL TAILED LAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude4b"},126541:{"value":"1EE4D","name":"ARABIC MATHEMATICAL TAILED NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude4d"},126542:{"value":"1EE4E","name":"ARABIC MATHEMATICAL TAILED SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude4e"},126543:{"value":"1EE4F","name":"ARABIC MATHEMATICAL TAILED AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude4f"},126545:{"value":"1EE51","name":"ARABIC MATHEMATICAL TAILED SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude51"},126546:{"value":"1EE52","name":"ARABIC MATHEMATICAL TAILED QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude52"},126548:{"value":"1EE54","name":"ARABIC MATHEMATICAL TAILED SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude54"},126551:{"value":"1EE57","name":"ARABIC MATHEMATICAL TAILED KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude57"},126553:{"value":"1EE59","name":"ARABIC MATHEMATICAL TAILED DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude59"},126555:{"value":"1EE5B","name":"ARABIC MATHEMATICAL TAILED GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude5b"},126557:{"value":"1EE5D","name":"ARABIC MATHEMATICAL TAILED DOTLESS NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude5d"},126559:{"value":"1EE5F","name":"ARABIC MATHEMATICAL TAILED DOTLESS QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 066F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude5f"},126561:{"value":"1EE61","name":"ARABIC MATHEMATICAL STRETCHED BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude61"},126562:{"value":"1EE62","name":"ARABIC MATHEMATICAL STRETCHED JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude62"},126564:{"value":"1EE64","name":"ARABIC MATHEMATICAL STRETCHED HEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude64"},126567:{"value":"1EE67","name":"ARABIC MATHEMATICAL STRETCHED HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude67"},126568:{"value":"1EE68","name":"ARABIC MATHEMATICAL STRETCHED TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude68"},126569:{"value":"1EE69","name":"ARABIC MATHEMATICAL STRETCHED YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude69"},126570:{"value":"1EE6A","name":"ARABIC MATHEMATICAL STRETCHED KAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0643","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude6a"},126572:{"value":"1EE6C","name":"ARABIC MATHEMATICAL STRETCHED MEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude6c"},126573:{"value":"1EE6D","name":"ARABIC MATHEMATICAL STRETCHED NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude6d"},126574:{"value":"1EE6E","name":"ARABIC MATHEMATICAL STRETCHED SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude6e"},126575:{"value":"1EE6F","name":"ARABIC MATHEMATICAL STRETCHED AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude6f"},126576:{"value":"1EE70","name":"ARABIC MATHEMATICAL STRETCHED FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude70"},126577:{"value":"1EE71","name":"ARABIC MATHEMATICAL STRETCHED SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude71"},126578:{"value":"1EE72","name":"ARABIC MATHEMATICAL STRETCHED QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude72"},126580:{"value":"1EE74","name":"ARABIC MATHEMATICAL STRETCHED SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude74"},126581:{"value":"1EE75","name":"ARABIC MATHEMATICAL STRETCHED TEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude75"},126582:{"value":"1EE76","name":"ARABIC MATHEMATICAL STRETCHED THEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude76"},126583:{"value":"1EE77","name":"ARABIC MATHEMATICAL STRETCHED KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude77"},126585:{"value":"1EE79","name":"ARABIC MATHEMATICAL STRETCHED DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude79"},126586:{"value":"1EE7A","name":"ARABIC MATHEMATICAL STRETCHED ZAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude7a"},126587:{"value":"1EE7B","name":"ARABIC MATHEMATICAL STRETCHED GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude7b"},126588:{"value":"1EE7C","name":"ARABIC MATHEMATICAL STRETCHED DOTLESS BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 066E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude7c"},126590:{"value":"1EE7E","name":"ARABIC MATHEMATICAL STRETCHED DOTLESS FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 06A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude7e"},126592:{"value":"1EE80","name":"ARABIC MATHEMATICAL LOOPED ALEF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0627","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude80"},126593:{"value":"1EE81","name":"ARABIC MATHEMATICAL LOOPED BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude81"},126594:{"value":"1EE82","name":"ARABIC MATHEMATICAL LOOPED JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude82"},126595:{"value":"1EE83","name":"ARABIC MATHEMATICAL LOOPED DAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude83"},126596:{"value":"1EE84","name":"ARABIC MATHEMATICAL LOOPED HEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0647","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude84"},126597:{"value":"1EE85","name":"ARABIC MATHEMATICAL LOOPED WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude85"},126598:{"value":"1EE86","name":"ARABIC MATHEMATICAL LOOPED ZAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude86"},126599:{"value":"1EE87","name":"ARABIC MATHEMATICAL LOOPED HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude87"},126600:{"value":"1EE88","name":"ARABIC MATHEMATICAL LOOPED TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude88"},126601:{"value":"1EE89","name":"ARABIC MATHEMATICAL LOOPED YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude89"},126603:{"value":"1EE8B","name":"ARABIC MATHEMATICAL LOOPED LAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude8b"},126604:{"value":"1EE8C","name":"ARABIC MATHEMATICAL LOOPED MEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude8c"},126605:{"value":"1EE8D","name":"ARABIC MATHEMATICAL LOOPED NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude8d"},126606:{"value":"1EE8E","name":"ARABIC MATHEMATICAL LOOPED SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude8e"},126607:{"value":"1EE8F","name":"ARABIC MATHEMATICAL LOOPED AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude8f"},126608:{"value":"1EE90","name":"ARABIC MATHEMATICAL LOOPED FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude90"},126609:{"value":"1EE91","name":"ARABIC MATHEMATICAL LOOPED SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude91"},126610:{"value":"1EE92","name":"ARABIC MATHEMATICAL LOOPED QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude92"},126611:{"value":"1EE93","name":"ARABIC MATHEMATICAL LOOPED REH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude93"},126612:{"value":"1EE94","name":"ARABIC MATHEMATICAL LOOPED SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude94"},126613:{"value":"1EE95","name":"ARABIC MATHEMATICAL LOOPED TEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude95"},126614:{"value":"1EE96","name":"ARABIC MATHEMATICAL LOOPED THEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude96"},126615:{"value":"1EE97","name":"ARABIC MATHEMATICAL LOOPED KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude97"},126616:{"value":"1EE98","name":"ARABIC MATHEMATICAL LOOPED THAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0630","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude98"},126617:{"value":"1EE99","name":"ARABIC MATHEMATICAL LOOPED DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude99"},126618:{"value":"1EE9A","name":"ARABIC MATHEMATICAL LOOPED ZAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude9a"},126619:{"value":"1EE9B","name":"ARABIC MATHEMATICAL LOOPED GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\ude9b"},126625:{"value":"1EEA1","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK BEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0628","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea1"},126626:{"value":"1EEA2","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea2"},126627:{"value":"1EEA3","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK DAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea3"},126629:{"value":"1EEA5","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK WAW","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0648","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea5"},126630:{"value":"1EEA6","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0632","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea6"},126631:{"value":"1EEA7","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK HAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea7"},126632:{"value":"1EEA8","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK TAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0637","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea8"},126633:{"value":"1EEA9","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK YEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 064A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udea9"},126635:{"value":"1EEAB","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK LAM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeab"},126636:{"value":"1EEAC","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0645","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeac"},126637:{"value":"1EEAD","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK NOON","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0646","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udead"},126638:{"value":"1EEAE","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0633","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeae"},126639:{"value":"1EEAF","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK AIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0639","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeaf"},126640:{"value":"1EEB0","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK FEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0641","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb0"},126641:{"value":"1EEB1","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK SAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb1"},126642:{"value":"1EEB2","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK QAF","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0642","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb2"},126643:{"value":"1EEB3","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK REH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0631","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb3"},126644:{"value":"1EEB4","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0634","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb4"},126645:{"value":"1EEB5","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK TEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb5"},126646:{"value":"1EEB6","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK THEH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb6"},126647:{"value":"1EEB7","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 062E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb7"},126648:{"value":"1EEB8","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK THAL","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0630","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb8"},126649:{"value":"1EEB9","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK DAD","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0636","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeb9"},126650:{"value":"1EEBA","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 0638","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udeba"},126651:{"value":"1EEBB","name":"ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN","category":"Lo","class":"0","bidirectional_category":"AL","mapping":" 063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udebb"},131072:{"value":"20000","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud840\udc00"},173791:{"value":"2A6DF","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud869\udedf"},173824:{"value":"2A700","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud869\udf00"},177976:{"value":"2B738","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud86d\udf38"},177984:{"value":"2B740","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud86d\udf40"},178205:{"value":"2B81D","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud86e\udc1d"},178208:{"value":"2B820","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud86e\udc20"},183969:{"value":"2CEA1","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud873\udea1"},183984:{"value":"2CEB0","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud873\udeb0"},191456:{"value":"2EBE0","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87a\udfe0"},194560:{"value":"2F800","name":"CJK COMPATIBILITY IDEOGRAPH-2F800","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E3D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc00"},194561:{"value":"2F801","name":"CJK COMPATIBILITY IDEOGRAPH-2F801","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E38","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc01"},194562:{"value":"2F802","name":"CJK COMPATIBILITY IDEOGRAPH-2F802","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4E41","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc02"},194563:{"value":"2F803","name":"CJK COMPATIBILITY IDEOGRAPH-2F803","category":"Lo","class":"0","bidirectional_category":"L","mapping":"20122","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc03"},194564:{"value":"2F804","name":"CJK COMPATIBILITY IDEOGRAPH-2F804","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4F60","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc04"},194565:{"value":"2F805","name":"CJK COMPATIBILITY IDEOGRAPH-2F805","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4FAE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc05"},194566:{"value":"2F806","name":"CJK COMPATIBILITY IDEOGRAPH-2F806","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4FBB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc06"},194567:{"value":"2F807","name":"CJK COMPATIBILITY IDEOGRAPH-2F807","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5002","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc07"},194568:{"value":"2F808","name":"CJK COMPATIBILITY IDEOGRAPH-2F808","category":"Lo","class":"0","bidirectional_category":"L","mapping":"507A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc08"},194569:{"value":"2F809","name":"CJK COMPATIBILITY IDEOGRAPH-2F809","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc09"},194570:{"value":"2F80A","name":"CJK COMPATIBILITY IDEOGRAPH-2F80A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"50E7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc0a"},194571:{"value":"2F80B","name":"CJK COMPATIBILITY IDEOGRAPH-2F80B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"50CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc0b"},194572:{"value":"2F80C","name":"CJK COMPATIBILITY IDEOGRAPH-2F80C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"349E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc0c"},194573:{"value":"2F80D","name":"CJK COMPATIBILITY IDEOGRAPH-2F80D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2063A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc0d"},194574:{"value":"2F80E","name":"CJK COMPATIBILITY IDEOGRAPH-2F80E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"514D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc0e"},194575:{"value":"2F80F","name":"CJK COMPATIBILITY IDEOGRAPH-2F80F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5154","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc0f"},194576:{"value":"2F810","name":"CJK COMPATIBILITY IDEOGRAPH-2F810","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5164","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc10"},194577:{"value":"2F811","name":"CJK COMPATIBILITY IDEOGRAPH-2F811","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5177","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc11"},194578:{"value":"2F812","name":"CJK COMPATIBILITY IDEOGRAPH-2F812","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2051C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc12"},194579:{"value":"2F813","name":"CJK COMPATIBILITY IDEOGRAPH-2F813","category":"Lo","class":"0","bidirectional_category":"L","mapping":"34B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc13"},194580:{"value":"2F814","name":"CJK COMPATIBILITY IDEOGRAPH-2F814","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5167","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc14"},194581:{"value":"2F815","name":"CJK COMPATIBILITY IDEOGRAPH-2F815","category":"Lo","class":"0","bidirectional_category":"L","mapping":"518D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc15"},194582:{"value":"2F816","name":"CJK COMPATIBILITY IDEOGRAPH-2F816","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2054B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc16"},194583:{"value":"2F817","name":"CJK COMPATIBILITY IDEOGRAPH-2F817","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5197","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc17"},194584:{"value":"2F818","name":"CJK COMPATIBILITY IDEOGRAPH-2F818","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc18"},194585:{"value":"2F819","name":"CJK COMPATIBILITY IDEOGRAPH-2F819","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4ECC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc19"},194586:{"value":"2F81A","name":"CJK COMPATIBILITY IDEOGRAPH-2F81A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc1a"},194587:{"value":"2F81B","name":"CJK COMPATIBILITY IDEOGRAPH-2F81B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc1b"},194588:{"value":"2F81C","name":"CJK COMPATIBILITY IDEOGRAPH-2F81C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"291DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc1c"},194589:{"value":"2F81D","name":"CJK COMPATIBILITY IDEOGRAPH-2F81D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"51F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc1d"},194590:{"value":"2F81E","name":"CJK COMPATIBILITY IDEOGRAPH-2F81E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5203","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc1e"},194591:{"value":"2F81F","name":"CJK COMPATIBILITY IDEOGRAPH-2F81F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"34DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc1f"},194592:{"value":"2F820","name":"CJK COMPATIBILITY IDEOGRAPH-2F820","category":"Lo","class":"0","bidirectional_category":"L","mapping":"523B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc20"},194593:{"value":"2F821","name":"CJK COMPATIBILITY IDEOGRAPH-2F821","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5246","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc21"},194594:{"value":"2F822","name":"CJK COMPATIBILITY IDEOGRAPH-2F822","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5272","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc22"},194595:{"value":"2F823","name":"CJK COMPATIBILITY IDEOGRAPH-2F823","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5277","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc23"},194596:{"value":"2F824","name":"CJK COMPATIBILITY IDEOGRAPH-2F824","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3515","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc24"},194597:{"value":"2F825","name":"CJK COMPATIBILITY IDEOGRAPH-2F825","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc25"},194598:{"value":"2F826","name":"CJK COMPATIBILITY IDEOGRAPH-2F826","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc26"},194599:{"value":"2F827","name":"CJK COMPATIBILITY IDEOGRAPH-2F827","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52E4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc27"},194600:{"value":"2F828","name":"CJK COMPATIBILITY IDEOGRAPH-2F828","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52FA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc28"},194601:{"value":"2F829","name":"CJK COMPATIBILITY IDEOGRAPH-2F829","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5305","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc29"},194602:{"value":"2F82A","name":"CJK COMPATIBILITY IDEOGRAPH-2F82A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc2a"},194603:{"value":"2F82B","name":"CJK COMPATIBILITY IDEOGRAPH-2F82B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5317","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc2b"},194604:{"value":"2F82C","name":"CJK COMPATIBILITY IDEOGRAPH-2F82C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5349","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc2c"},194605:{"value":"2F82D","name":"CJK COMPATIBILITY IDEOGRAPH-2F82D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5351","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc2d"},194606:{"value":"2F82E","name":"CJK COMPATIBILITY IDEOGRAPH-2F82E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"535A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc2e"},194607:{"value":"2F82F","name":"CJK COMPATIBILITY IDEOGRAPH-2F82F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5373","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc2f"},194608:{"value":"2F830","name":"CJK COMPATIBILITY IDEOGRAPH-2F830","category":"Lo","class":"0","bidirectional_category":"L","mapping":"537D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc30"},194609:{"value":"2F831","name":"CJK COMPATIBILITY IDEOGRAPH-2F831","category":"Lo","class":"0","bidirectional_category":"L","mapping":"537F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc31"},194610:{"value":"2F832","name":"CJK COMPATIBILITY IDEOGRAPH-2F832","category":"Lo","class":"0","bidirectional_category":"L","mapping":"537F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc32"},194611:{"value":"2F833","name":"CJK COMPATIBILITY IDEOGRAPH-2F833","category":"Lo","class":"0","bidirectional_category":"L","mapping":"537F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc33"},194612:{"value":"2F834","name":"CJK COMPATIBILITY IDEOGRAPH-2F834","category":"Lo","class":"0","bidirectional_category":"L","mapping":"20A2C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc34"},194613:{"value":"2F835","name":"CJK COMPATIBILITY IDEOGRAPH-2F835","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc35"},194614:{"value":"2F836","name":"CJK COMPATIBILITY IDEOGRAPH-2F836","category":"Lo","class":"0","bidirectional_category":"L","mapping":"53CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc36"},194615:{"value":"2F837","name":"CJK COMPATIBILITY IDEOGRAPH-2F837","category":"Lo","class":"0","bidirectional_category":"L","mapping":"53DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc37"},194616:{"value":"2F838","name":"CJK COMPATIBILITY IDEOGRAPH-2F838","category":"Lo","class":"0","bidirectional_category":"L","mapping":"20B63","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc38"},194617:{"value":"2F839","name":"CJK COMPATIBILITY IDEOGRAPH-2F839","category":"Lo","class":"0","bidirectional_category":"L","mapping":"53EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc39"},194618:{"value":"2F83A","name":"CJK COMPATIBILITY IDEOGRAPH-2F83A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"53F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc3a"},194619:{"value":"2F83B","name":"CJK COMPATIBILITY IDEOGRAPH-2F83B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5406","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc3b"},194620:{"value":"2F83C","name":"CJK COMPATIBILITY IDEOGRAPH-2F83C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"549E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc3c"},194621:{"value":"2F83D","name":"CJK COMPATIBILITY IDEOGRAPH-2F83D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5438","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc3d"},194622:{"value":"2F83E","name":"CJK COMPATIBILITY IDEOGRAPH-2F83E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5448","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc3e"},194623:{"value":"2F83F","name":"CJK COMPATIBILITY IDEOGRAPH-2F83F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5468","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc3f"},194624:{"value":"2F840","name":"CJK COMPATIBILITY IDEOGRAPH-2F840","category":"Lo","class":"0","bidirectional_category":"L","mapping":"54A2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc40"},194625:{"value":"2F841","name":"CJK COMPATIBILITY IDEOGRAPH-2F841","category":"Lo","class":"0","bidirectional_category":"L","mapping":"54F6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc41"},194626:{"value":"2F842","name":"CJK COMPATIBILITY IDEOGRAPH-2F842","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5510","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc42"},194627:{"value":"2F843","name":"CJK COMPATIBILITY IDEOGRAPH-2F843","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5553","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc43"},194628:{"value":"2F844","name":"CJK COMPATIBILITY IDEOGRAPH-2F844","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5563","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc44"},194629:{"value":"2F845","name":"CJK COMPATIBILITY IDEOGRAPH-2F845","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5584","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc45"},194630:{"value":"2F846","name":"CJK COMPATIBILITY IDEOGRAPH-2F846","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5584","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc46"},194631:{"value":"2F847","name":"CJK COMPATIBILITY IDEOGRAPH-2F847","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5599","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc47"},194632:{"value":"2F848","name":"CJK COMPATIBILITY IDEOGRAPH-2F848","category":"Lo","class":"0","bidirectional_category":"L","mapping":"55AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc48"},194633:{"value":"2F849","name":"CJK COMPATIBILITY IDEOGRAPH-2F849","category":"Lo","class":"0","bidirectional_category":"L","mapping":"55B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc49"},194634:{"value":"2F84A","name":"CJK COMPATIBILITY IDEOGRAPH-2F84A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"55C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc4a"},194635:{"value":"2F84B","name":"CJK COMPATIBILITY IDEOGRAPH-2F84B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5716","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc4b"},194636:{"value":"2F84C","name":"CJK COMPATIBILITY IDEOGRAPH-2F84C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5606","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc4c"},194637:{"value":"2F84D","name":"CJK COMPATIBILITY IDEOGRAPH-2F84D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5717","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc4d"},194638:{"value":"2F84E","name":"CJK COMPATIBILITY IDEOGRAPH-2F84E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5651","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc4e"},194639:{"value":"2F84F","name":"CJK COMPATIBILITY IDEOGRAPH-2F84F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5674","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc4f"},194640:{"value":"2F850","name":"CJK COMPATIBILITY IDEOGRAPH-2F850","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc50"},194641:{"value":"2F851","name":"CJK COMPATIBILITY IDEOGRAPH-2F851","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58EE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc51"},194642:{"value":"2F852","name":"CJK COMPATIBILITY IDEOGRAPH-2F852","category":"Lo","class":"0","bidirectional_category":"L","mapping":"57CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc52"},194643:{"value":"2F853","name":"CJK COMPATIBILITY IDEOGRAPH-2F853","category":"Lo","class":"0","bidirectional_category":"L","mapping":"57F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc53"},194644:{"value":"2F854","name":"CJK COMPATIBILITY IDEOGRAPH-2F854","category":"Lo","class":"0","bidirectional_category":"L","mapping":"580D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc54"},194645:{"value":"2F855","name":"CJK COMPATIBILITY IDEOGRAPH-2F855","category":"Lo","class":"0","bidirectional_category":"L","mapping":"578B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc55"},194646:{"value":"2F856","name":"CJK COMPATIBILITY IDEOGRAPH-2F856","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5832","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc56"},194647:{"value":"2F857","name":"CJK COMPATIBILITY IDEOGRAPH-2F857","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5831","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc57"},194648:{"value":"2F858","name":"CJK COMPATIBILITY IDEOGRAPH-2F858","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc58"},194649:{"value":"2F859","name":"CJK COMPATIBILITY IDEOGRAPH-2F859","category":"Lo","class":"0","bidirectional_category":"L","mapping":"214E4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc59"},194650:{"value":"2F85A","name":"CJK COMPATIBILITY IDEOGRAPH-2F85A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc5a"},194651:{"value":"2F85B","name":"CJK COMPATIBILITY IDEOGRAPH-2F85B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"58F7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc5b"},194652:{"value":"2F85C","name":"CJK COMPATIBILITY IDEOGRAPH-2F85C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5906","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc5c"},194653:{"value":"2F85D","name":"CJK COMPATIBILITY IDEOGRAPH-2F85D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"591A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc5d"},194654:{"value":"2F85E","name":"CJK COMPATIBILITY IDEOGRAPH-2F85E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5922","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc5e"},194655:{"value":"2F85F","name":"CJK COMPATIBILITY IDEOGRAPH-2F85F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5962","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc5f"},194656:{"value":"2F860","name":"CJK COMPATIBILITY IDEOGRAPH-2F860","category":"Lo","class":"0","bidirectional_category":"L","mapping":"216A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc60"},194657:{"value":"2F861","name":"CJK COMPATIBILITY IDEOGRAPH-2F861","category":"Lo","class":"0","bidirectional_category":"L","mapping":"216EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc61"},194658:{"value":"2F862","name":"CJK COMPATIBILITY IDEOGRAPH-2F862","category":"Lo","class":"0","bidirectional_category":"L","mapping":"59EC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc62"},194659:{"value":"2F863","name":"CJK COMPATIBILITY IDEOGRAPH-2F863","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5A1B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc63"},194660:{"value":"2F864","name":"CJK COMPATIBILITY IDEOGRAPH-2F864","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5A27","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc64"},194661:{"value":"2F865","name":"CJK COMPATIBILITY IDEOGRAPH-2F865","category":"Lo","class":"0","bidirectional_category":"L","mapping":"59D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc65"},194662:{"value":"2F866","name":"CJK COMPATIBILITY IDEOGRAPH-2F866","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5A66","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc66"},194663:{"value":"2F867","name":"CJK COMPATIBILITY IDEOGRAPH-2F867","category":"Lo","class":"0","bidirectional_category":"L","mapping":"36EE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc67"},194664:{"value":"2F868","name":"CJK COMPATIBILITY IDEOGRAPH-2F868","category":"Lo","class":"0","bidirectional_category":"L","mapping":"36FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc68"},194665:{"value":"2F869","name":"CJK COMPATIBILITY IDEOGRAPH-2F869","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5B08","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc69"},194666:{"value":"2F86A","name":"CJK COMPATIBILITY IDEOGRAPH-2F86A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5B3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc6a"},194667:{"value":"2F86B","name":"CJK COMPATIBILITY IDEOGRAPH-2F86B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5B3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc6b"},194668:{"value":"2F86C","name":"CJK COMPATIBILITY IDEOGRAPH-2F86C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"219C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc6c"},194669:{"value":"2F86D","name":"CJK COMPATIBILITY IDEOGRAPH-2F86D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BC3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc6d"},194670:{"value":"2F86E","name":"CJK COMPATIBILITY IDEOGRAPH-2F86E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BD8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc6e"},194671:{"value":"2F86F","name":"CJK COMPATIBILITY IDEOGRAPH-2F86F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BE7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc6f"},194672:{"value":"2F870","name":"CJK COMPATIBILITY IDEOGRAPH-2F870","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BF3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc70"},194673:{"value":"2F871","name":"CJK COMPATIBILITY IDEOGRAPH-2F871","category":"Lo","class":"0","bidirectional_category":"L","mapping":"21B18","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc71"},194674:{"value":"2F872","name":"CJK COMPATIBILITY IDEOGRAPH-2F872","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5BFF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc72"},194675:{"value":"2F873","name":"CJK COMPATIBILITY IDEOGRAPH-2F873","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C06","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc73"},194676:{"value":"2F874","name":"CJK COMPATIBILITY IDEOGRAPH-2F874","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F53","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc74"},194677:{"value":"2F875","name":"CJK COMPATIBILITY IDEOGRAPH-2F875","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc75"},194678:{"value":"2F876","name":"CJK COMPATIBILITY IDEOGRAPH-2F876","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3781","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc76"},194679:{"value":"2F877","name":"CJK COMPATIBILITY IDEOGRAPH-2F877","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C60","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc77"},194680:{"value":"2F878","name":"CJK COMPATIBILITY IDEOGRAPH-2F878","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc78"},194681:{"value":"2F879","name":"CJK COMPATIBILITY IDEOGRAPH-2F879","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5CC0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc79"},194682:{"value":"2F87A","name":"CJK COMPATIBILITY IDEOGRAPH-2F87A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5C8D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc7a"},194683:{"value":"2F87B","name":"CJK COMPATIBILITY IDEOGRAPH-2F87B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"21DE4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc7b"},194684:{"value":"2F87C","name":"CJK COMPATIBILITY IDEOGRAPH-2F87C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5D43","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc7c"},194685:{"value":"2F87D","name":"CJK COMPATIBILITY IDEOGRAPH-2F87D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"21DE6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc7d"},194686:{"value":"2F87E","name":"CJK COMPATIBILITY IDEOGRAPH-2F87E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5D6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc7e"},194687:{"value":"2F87F","name":"CJK COMPATIBILITY IDEOGRAPH-2F87F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5D6B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc7f"},194688:{"value":"2F880","name":"CJK COMPATIBILITY IDEOGRAPH-2F880","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5D7C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc80"},194689:{"value":"2F881","name":"CJK COMPATIBILITY IDEOGRAPH-2F881","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5DE1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc81"},194690:{"value":"2F882","name":"CJK COMPATIBILITY IDEOGRAPH-2F882","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5DE2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc82"},194691:{"value":"2F883","name":"CJK COMPATIBILITY IDEOGRAPH-2F883","category":"Lo","class":"0","bidirectional_category":"L","mapping":"382F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc83"},194692:{"value":"2F884","name":"CJK COMPATIBILITY IDEOGRAPH-2F884","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5DFD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc84"},194693:{"value":"2F885","name":"CJK COMPATIBILITY IDEOGRAPH-2F885","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5E28","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc85"},194694:{"value":"2F886","name":"CJK COMPATIBILITY IDEOGRAPH-2F886","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5E3D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc86"},194695:{"value":"2F887","name":"CJK COMPATIBILITY IDEOGRAPH-2F887","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5E69","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc87"},194696:{"value":"2F888","name":"CJK COMPATIBILITY IDEOGRAPH-2F888","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3862","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc88"},194697:{"value":"2F889","name":"CJK COMPATIBILITY IDEOGRAPH-2F889","category":"Lo","class":"0","bidirectional_category":"L","mapping":"22183","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc89"},194698:{"value":"2F88A","name":"CJK COMPATIBILITY IDEOGRAPH-2F88A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"387C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc8a"},194699:{"value":"2F88B","name":"CJK COMPATIBILITY IDEOGRAPH-2F88B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EB0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc8b"},194700:{"value":"2F88C","name":"CJK COMPATIBILITY IDEOGRAPH-2F88C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EB3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc8c"},194701:{"value":"2F88D","name":"CJK COMPATIBILITY IDEOGRAPH-2F88D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EB6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc8d"},194702:{"value":"2F88E","name":"CJK COMPATIBILITY IDEOGRAPH-2F88E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5ECA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc8e"},194703:{"value":"2F88F","name":"CJK COMPATIBILITY IDEOGRAPH-2F88F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2A392","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc8f"},194704:{"value":"2F890","name":"CJK COMPATIBILITY IDEOGRAPH-2F890","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5EFE","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc90"},194705:{"value":"2F891","name":"CJK COMPATIBILITY IDEOGRAPH-2F891","category":"Lo","class":"0","bidirectional_category":"L","mapping":"22331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc91"},194706:{"value":"2F892","name":"CJK COMPATIBILITY IDEOGRAPH-2F892","category":"Lo","class":"0","bidirectional_category":"L","mapping":"22331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc92"},194707:{"value":"2F893","name":"CJK COMPATIBILITY IDEOGRAPH-2F893","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8201","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc93"},194708:{"value":"2F894","name":"CJK COMPATIBILITY IDEOGRAPH-2F894","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc94"},194709:{"value":"2F895","name":"CJK COMPATIBILITY IDEOGRAPH-2F895","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc95"},194710:{"value":"2F896","name":"CJK COMPATIBILITY IDEOGRAPH-2F896","category":"Lo","class":"0","bidirectional_category":"L","mapping":"38C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc96"},194711:{"value":"2F897","name":"CJK COMPATIBILITY IDEOGRAPH-2F897","category":"Lo","class":"0","bidirectional_category":"L","mapping":"232B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc97"},194712:{"value":"2F898","name":"CJK COMPATIBILITY IDEOGRAPH-2F898","category":"Lo","class":"0","bidirectional_category":"L","mapping":"261DA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc98"},194713:{"value":"2F899","name":"CJK COMPATIBILITY IDEOGRAPH-2F899","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F62","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc99"},194714:{"value":"2F89A","name":"CJK COMPATIBILITY IDEOGRAPH-2F89A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F6B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc9a"},194715:{"value":"2F89B","name":"CJK COMPATIBILITY IDEOGRAPH-2F89B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"38E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc9b"},194716:{"value":"2F89C","name":"CJK COMPATIBILITY IDEOGRAPH-2F89C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5F9A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc9c"},194717:{"value":"2F89D","name":"CJK COMPATIBILITY IDEOGRAPH-2F89D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5FCD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc9d"},194718:{"value":"2F89E","name":"CJK COMPATIBILITY IDEOGRAPH-2F89E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5FD7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc9e"},194719:{"value":"2F89F","name":"CJK COMPATIBILITY IDEOGRAPH-2F89F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5FF9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udc9f"},194720:{"value":"2F8A0","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6081","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca0"},194721:{"value":"2F8A1","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"393A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca1"},194722:{"value":"2F8A2","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"391C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca2"},194723:{"value":"2F8A3","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6094","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca3"},194724:{"value":"2F8A4","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"226D4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca4"},194725:{"value":"2F8A5","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"60C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca5"},194726:{"value":"2F8A6","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6148","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca6"},194727:{"value":"2F8A7","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"614C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca7"},194728:{"value":"2F8A8","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"614E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca8"},194729:{"value":"2F8A9","name":"CJK COMPATIBILITY IDEOGRAPH-2F8A9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"614C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udca9"},194730:{"value":"2F8AA","name":"CJK COMPATIBILITY IDEOGRAPH-2F8AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"617A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcaa"},194731:{"value":"2F8AB","name":"CJK COMPATIBILITY IDEOGRAPH-2F8AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"618E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcab"},194732:{"value":"2F8AC","name":"CJK COMPATIBILITY IDEOGRAPH-2F8AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcac"},194733:{"value":"2F8AD","name":"CJK COMPATIBILITY IDEOGRAPH-2F8AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcad"},194734:{"value":"2F8AE","name":"CJK COMPATIBILITY IDEOGRAPH-2F8AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcae"},194735:{"value":"2F8AF","name":"CJK COMPATIBILITY IDEOGRAPH-2F8AF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcaf"},194736:{"value":"2F8B0","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb0"},194737:{"value":"2F8B1","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"61F6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb1"},194738:{"value":"2F8B2","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6210","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb2"},194739:{"value":"2F8B3","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"621B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb3"},194740:{"value":"2F8B4","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"625D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb4"},194741:{"value":"2F8B5","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb5"},194742:{"value":"2F8B6","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62D4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb6"},194743:{"value":"2F8B7","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6350","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb7"},194744:{"value":"2F8B8","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"22B0C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb8"},194745:{"value":"2F8B9","name":"CJK COMPATIBILITY IDEOGRAPH-2F8B9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"633D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcb9"},194746:{"value":"2F8BA","name":"CJK COMPATIBILITY IDEOGRAPH-2F8BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"62FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcba"},194747:{"value":"2F8BB","name":"CJK COMPATIBILITY IDEOGRAPH-2F8BB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6368","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcbb"},194748:{"value":"2F8BC","name":"CJK COMPATIBILITY IDEOGRAPH-2F8BC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6383","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcbc"},194749:{"value":"2F8BD","name":"CJK COMPATIBILITY IDEOGRAPH-2F8BD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"63E4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcbd"},194750:{"value":"2F8BE","name":"CJK COMPATIBILITY IDEOGRAPH-2F8BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"22BF1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcbe"},194751:{"value":"2F8BF","name":"CJK COMPATIBILITY IDEOGRAPH-2F8BF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6422","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcbf"},194752:{"value":"2F8C0","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"63C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc0"},194753:{"value":"2F8C1","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"63A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc1"},194754:{"value":"2F8C2","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3A2E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc2"},194755:{"value":"2F8C3","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6469","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc3"},194756:{"value":"2F8C4","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"647E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc4"},194757:{"value":"2F8C5","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"649D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc5"},194758:{"value":"2F8C6","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6477","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc6"},194759:{"value":"2F8C7","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3A6C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc7"},194760:{"value":"2F8C8","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"654F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc8"},194761:{"value":"2F8C9","name":"CJK COMPATIBILITY IDEOGRAPH-2F8C9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"656C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcc9"},194762:{"value":"2F8CA","name":"CJK COMPATIBILITY IDEOGRAPH-2F8CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2300A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcca"},194763:{"value":"2F8CB","name":"CJK COMPATIBILITY IDEOGRAPH-2F8CB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"65E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udccb"},194764:{"value":"2F8CC","name":"CJK COMPATIBILITY IDEOGRAPH-2F8CC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"66F8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udccc"},194765:{"value":"2F8CD","name":"CJK COMPATIBILITY IDEOGRAPH-2F8CD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6649","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udccd"},194766:{"value":"2F8CE","name":"CJK COMPATIBILITY IDEOGRAPH-2F8CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3B19","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcce"},194767:{"value":"2F8CF","name":"CJK COMPATIBILITY IDEOGRAPH-2F8CF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6691","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udccf"},194768:{"value":"2F8D0","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3B08","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd0"},194769:{"value":"2F8D1","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3AE4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd1"},194770:{"value":"2F8D2","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5192","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd2"},194771:{"value":"2F8D3","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5195","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd3"},194772:{"value":"2F8D4","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6700","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd4"},194773:{"value":"2F8D5","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"669C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd5"},194774:{"value":"2F8D6","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"80AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd6"},194775:{"value":"2F8D7","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"43D9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd7"},194776:{"value":"2F8D8","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6717","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd8"},194777:{"value":"2F8D9","name":"CJK COMPATIBILITY IDEOGRAPH-2F8D9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"671B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcd9"},194778:{"value":"2F8DA","name":"CJK COMPATIBILITY IDEOGRAPH-2F8DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6721","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcda"},194779:{"value":"2F8DB","name":"CJK COMPATIBILITY IDEOGRAPH-2F8DB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"675E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcdb"},194780:{"value":"2F8DC","name":"CJK COMPATIBILITY IDEOGRAPH-2F8DC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6753","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcdc"},194781:{"value":"2F8DD","name":"CJK COMPATIBILITY IDEOGRAPH-2F8DD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"233C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcdd"},194782:{"value":"2F8DE","name":"CJK COMPATIBILITY IDEOGRAPH-2F8DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3B49","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcde"},194783:{"value":"2F8DF","name":"CJK COMPATIBILITY IDEOGRAPH-2F8DF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"67FA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcdf"},194784:{"value":"2F8E0","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6785","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce0"},194785:{"value":"2F8E1","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6852","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce1"},194786:{"value":"2F8E2","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6885","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce2"},194787:{"value":"2F8E3","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2346D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce3"},194788:{"value":"2F8E4","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"688E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce4"},194789:{"value":"2F8E5","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"681F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce5"},194790:{"value":"2F8E6","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6914","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce6"},194791:{"value":"2F8E7","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3B9D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce7"},194792:{"value":"2F8E8","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6942","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce8"},194793:{"value":"2F8E9","name":"CJK COMPATIBILITY IDEOGRAPH-2F8E9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"69A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udce9"},194794:{"value":"2F8EA","name":"CJK COMPATIBILITY IDEOGRAPH-2F8EA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"69EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcea"},194795:{"value":"2F8EB","name":"CJK COMPATIBILITY IDEOGRAPH-2F8EB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6AA8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udceb"},194796:{"value":"2F8EC","name":"CJK COMPATIBILITY IDEOGRAPH-2F8EC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"236A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcec"},194797:{"value":"2F8ED","name":"CJK COMPATIBILITY IDEOGRAPH-2F8ED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6ADB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udced"},194798:{"value":"2F8EE","name":"CJK COMPATIBILITY IDEOGRAPH-2F8EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3C18","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcee"},194799:{"value":"2F8EF","name":"CJK COMPATIBILITY IDEOGRAPH-2F8EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B21","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcef"},194800:{"value":"2F8F0","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"238A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf0"},194801:{"value":"2F8F1","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B54","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf1"},194802:{"value":"2F8F2","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3C4E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf2"},194803:{"value":"2F8F3","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B72","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf3"},194804:{"value":"2F8F4","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6B9F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf4"},194805:{"value":"2F8F5","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6BBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf5"},194806:{"value":"2F8F6","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6BBB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf6"},194807:{"value":"2F8F7","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23A8D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf7"},194808:{"value":"2F8F8","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"21D0B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf8"},194809:{"value":"2F8F9","name":"CJK COMPATIBILITY IDEOGRAPH-2F8F9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23AFA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcf9"},194810:{"value":"2F8FA","name":"CJK COMPATIBILITY IDEOGRAPH-2F8FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6C4E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcfa"},194811:{"value":"2F8FB","name":"CJK COMPATIBILITY IDEOGRAPH-2F8FB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23CBC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcfb"},194812:{"value":"2F8FC","name":"CJK COMPATIBILITY IDEOGRAPH-2F8FC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6CBF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcfc"},194813:{"value":"2F8FD","name":"CJK COMPATIBILITY IDEOGRAPH-2F8FD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6CCD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcfd"},194814:{"value":"2F8FE","name":"CJK COMPATIBILITY IDEOGRAPH-2F8FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6C67","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcfe"},194815:{"value":"2F8FF","name":"CJK COMPATIBILITY IDEOGRAPH-2F8FF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D16","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udcff"},194816:{"value":"2F900","name":"CJK COMPATIBILITY IDEOGRAPH-2F900","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd00"},194817:{"value":"2F901","name":"CJK COMPATIBILITY IDEOGRAPH-2F901","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D77","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd01"},194818:{"value":"2F902","name":"CJK COMPATIBILITY IDEOGRAPH-2F902","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D41","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd02"},194819:{"value":"2F903","name":"CJK COMPATIBILITY IDEOGRAPH-2F903","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D69","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd03"},194820:{"value":"2F904","name":"CJK COMPATIBILITY IDEOGRAPH-2F904","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D78","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd04"},194821:{"value":"2F905","name":"CJK COMPATIBILITY IDEOGRAPH-2F905","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D85","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd05"},194822:{"value":"2F906","name":"CJK COMPATIBILITY IDEOGRAPH-2F906","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23D1E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd06"},194823:{"value":"2F907","name":"CJK COMPATIBILITY IDEOGRAPH-2F907","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6D34","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd07"},194824:{"value":"2F908","name":"CJK COMPATIBILITY IDEOGRAPH-2F908","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6E2F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd08"},194825:{"value":"2F909","name":"CJK COMPATIBILITY IDEOGRAPH-2F909","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6E6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd09"},194826:{"value":"2F90A","name":"CJK COMPATIBILITY IDEOGRAPH-2F90A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3D33","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd0a"},194827:{"value":"2F90B","name":"CJK COMPATIBILITY IDEOGRAPH-2F90B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6ECB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd0b"},194828:{"value":"2F90C","name":"CJK COMPATIBILITY IDEOGRAPH-2F90C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6EC7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd0c"},194829:{"value":"2F90D","name":"CJK COMPATIBILITY IDEOGRAPH-2F90D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23ED1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd0d"},194830:{"value":"2F90E","name":"CJK COMPATIBILITY IDEOGRAPH-2F90E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6DF9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd0e"},194831:{"value":"2F90F","name":"CJK COMPATIBILITY IDEOGRAPH-2F90F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6F6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd0f"},194832:{"value":"2F910","name":"CJK COMPATIBILITY IDEOGRAPH-2F910","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23F5E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd10"},194833:{"value":"2F911","name":"CJK COMPATIBILITY IDEOGRAPH-2F911","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23F8E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd11"},194834:{"value":"2F912","name":"CJK COMPATIBILITY IDEOGRAPH-2F912","category":"Lo","class":"0","bidirectional_category":"L","mapping":"6FC6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd12"},194835:{"value":"2F913","name":"CJK COMPATIBILITY IDEOGRAPH-2F913","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7039","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd13"},194836:{"value":"2F914","name":"CJK COMPATIBILITY IDEOGRAPH-2F914","category":"Lo","class":"0","bidirectional_category":"L","mapping":"701E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd14"},194837:{"value":"2F915","name":"CJK COMPATIBILITY IDEOGRAPH-2F915","category":"Lo","class":"0","bidirectional_category":"L","mapping":"701B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd15"},194838:{"value":"2F916","name":"CJK COMPATIBILITY IDEOGRAPH-2F916","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3D96","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd16"},194839:{"value":"2F917","name":"CJK COMPATIBILITY IDEOGRAPH-2F917","category":"Lo","class":"0","bidirectional_category":"L","mapping":"704A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd17"},194840:{"value":"2F918","name":"CJK COMPATIBILITY IDEOGRAPH-2F918","category":"Lo","class":"0","bidirectional_category":"L","mapping":"707D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd18"},194841:{"value":"2F919","name":"CJK COMPATIBILITY IDEOGRAPH-2F919","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd19"},194842:{"value":"2F91A","name":"CJK COMPATIBILITY IDEOGRAPH-2F91A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"70AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd1a"},194843:{"value":"2F91B","name":"CJK COMPATIBILITY IDEOGRAPH-2F91B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"20525","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd1b"},194844:{"value":"2F91C","name":"CJK COMPATIBILITY IDEOGRAPH-2F91C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7145","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd1c"},194845:{"value":"2F91D","name":"CJK COMPATIBILITY IDEOGRAPH-2F91D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24263","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd1d"},194846:{"value":"2F91E","name":"CJK COMPATIBILITY IDEOGRAPH-2F91E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"719C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd1e"},194847:{"value":"2F91F","name":"CJK COMPATIBILITY IDEOGRAPH-2F91F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"243AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd1f"},194848:{"value":"2F920","name":"CJK COMPATIBILITY IDEOGRAPH-2F920","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7228","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd20"},194849:{"value":"2F921","name":"CJK COMPATIBILITY IDEOGRAPH-2F921","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7235","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd21"},194850:{"value":"2F922","name":"CJK COMPATIBILITY IDEOGRAPH-2F922","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7250","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd22"},194851:{"value":"2F923","name":"CJK COMPATIBILITY IDEOGRAPH-2F923","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24608","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd23"},194852:{"value":"2F924","name":"CJK COMPATIBILITY IDEOGRAPH-2F924","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7280","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd24"},194853:{"value":"2F925","name":"CJK COMPATIBILITY IDEOGRAPH-2F925","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7295","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd25"},194854:{"value":"2F926","name":"CJK COMPATIBILITY IDEOGRAPH-2F926","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24735","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd26"},194855:{"value":"2F927","name":"CJK COMPATIBILITY IDEOGRAPH-2F927","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24814","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd27"},194856:{"value":"2F928","name":"CJK COMPATIBILITY IDEOGRAPH-2F928","category":"Lo","class":"0","bidirectional_category":"L","mapping":"737A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd28"},194857:{"value":"2F929","name":"CJK COMPATIBILITY IDEOGRAPH-2F929","category":"Lo","class":"0","bidirectional_category":"L","mapping":"738B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd29"},194858:{"value":"2F92A","name":"CJK COMPATIBILITY IDEOGRAPH-2F92A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3EAC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd2a"},194859:{"value":"2F92B","name":"CJK COMPATIBILITY IDEOGRAPH-2F92B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"73A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd2b"},194860:{"value":"2F92C","name":"CJK COMPATIBILITY IDEOGRAPH-2F92C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3EB8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd2c"},194861:{"value":"2F92D","name":"CJK COMPATIBILITY IDEOGRAPH-2F92D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3EB8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd2d"},194862:{"value":"2F92E","name":"CJK COMPATIBILITY IDEOGRAPH-2F92E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7447","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd2e"},194863:{"value":"2F92F","name":"CJK COMPATIBILITY IDEOGRAPH-2F92F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"745C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd2f"},194864:{"value":"2F930","name":"CJK COMPATIBILITY IDEOGRAPH-2F930","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7471","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd30"},194865:{"value":"2F931","name":"CJK COMPATIBILITY IDEOGRAPH-2F931","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7485","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd31"},194866:{"value":"2F932","name":"CJK COMPATIBILITY IDEOGRAPH-2F932","category":"Lo","class":"0","bidirectional_category":"L","mapping":"74CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd32"},194867:{"value":"2F933","name":"CJK COMPATIBILITY IDEOGRAPH-2F933","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3F1B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd33"},194868:{"value":"2F934","name":"CJK COMPATIBILITY IDEOGRAPH-2F934","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7524","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd34"},194869:{"value":"2F935","name":"CJK COMPATIBILITY IDEOGRAPH-2F935","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24C36","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd35"},194870:{"value":"2F936","name":"CJK COMPATIBILITY IDEOGRAPH-2F936","category":"Lo","class":"0","bidirectional_category":"L","mapping":"753E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd36"},194871:{"value":"2F937","name":"CJK COMPATIBILITY IDEOGRAPH-2F937","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24C92","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd37"},194872:{"value":"2F938","name":"CJK COMPATIBILITY IDEOGRAPH-2F938","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7570","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd38"},194873:{"value":"2F939","name":"CJK COMPATIBILITY IDEOGRAPH-2F939","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2219F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd39"},194874:{"value":"2F93A","name":"CJK COMPATIBILITY IDEOGRAPH-2F93A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7610","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd3a"},194875:{"value":"2F93B","name":"CJK COMPATIBILITY IDEOGRAPH-2F93B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24FA1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd3b"},194876:{"value":"2F93C","name":"CJK COMPATIBILITY IDEOGRAPH-2F93C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"24FB8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd3c"},194877:{"value":"2F93D","name":"CJK COMPATIBILITY IDEOGRAPH-2F93D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd3d"},194878:{"value":"2F93E","name":"CJK COMPATIBILITY IDEOGRAPH-2F93E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"3FFC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd3e"},194879:{"value":"2F93F","name":"CJK COMPATIBILITY IDEOGRAPH-2F93F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4008","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd3f"},194880:{"value":"2F940","name":"CJK COMPATIBILITY IDEOGRAPH-2F940","category":"Lo","class":"0","bidirectional_category":"L","mapping":"76F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd40"},194881:{"value":"2F941","name":"CJK COMPATIBILITY IDEOGRAPH-2F941","category":"Lo","class":"0","bidirectional_category":"L","mapping":"250F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd41"},194882:{"value":"2F942","name":"CJK COMPATIBILITY IDEOGRAPH-2F942","category":"Lo","class":"0","bidirectional_category":"L","mapping":"250F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd42"},194883:{"value":"2F943","name":"CJK COMPATIBILITY IDEOGRAPH-2F943","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25119","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd43"},194884:{"value":"2F944","name":"CJK COMPATIBILITY IDEOGRAPH-2F944","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25133","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd44"},194885:{"value":"2F945","name":"CJK COMPATIBILITY IDEOGRAPH-2F945","category":"Lo","class":"0","bidirectional_category":"L","mapping":"771E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd45"},194886:{"value":"2F946","name":"CJK COMPATIBILITY IDEOGRAPH-2F946","category":"Lo","class":"0","bidirectional_category":"L","mapping":"771F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd46"},194887:{"value":"2F947","name":"CJK COMPATIBILITY IDEOGRAPH-2F947","category":"Lo","class":"0","bidirectional_category":"L","mapping":"771F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd47"},194888:{"value":"2F948","name":"CJK COMPATIBILITY IDEOGRAPH-2F948","category":"Lo","class":"0","bidirectional_category":"L","mapping":"774A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd48"},194889:{"value":"2F949","name":"CJK COMPATIBILITY IDEOGRAPH-2F949","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4039","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd49"},194890:{"value":"2F94A","name":"CJK COMPATIBILITY IDEOGRAPH-2F94A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"778B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd4a"},194891:{"value":"2F94B","name":"CJK COMPATIBILITY IDEOGRAPH-2F94B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd4b"},194892:{"value":"2F94C","name":"CJK COMPATIBILITY IDEOGRAPH-2F94C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4096","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd4c"},194893:{"value":"2F94D","name":"CJK COMPATIBILITY IDEOGRAPH-2F94D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2541D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd4d"},194894:{"value":"2F94E","name":"CJK COMPATIBILITY IDEOGRAPH-2F94E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"784E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd4e"},194895:{"value":"2F94F","name":"CJK COMPATIBILITY IDEOGRAPH-2F94F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"788C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd4f"},194896:{"value":"2F950","name":"CJK COMPATIBILITY IDEOGRAPH-2F950","category":"Lo","class":"0","bidirectional_category":"L","mapping":"78CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd50"},194897:{"value":"2F951","name":"CJK COMPATIBILITY IDEOGRAPH-2F951","category":"Lo","class":"0","bidirectional_category":"L","mapping":"40E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd51"},194898:{"value":"2F952","name":"CJK COMPATIBILITY IDEOGRAPH-2F952","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25626","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd52"},194899:{"value":"2F953","name":"CJK COMPATIBILITY IDEOGRAPH-2F953","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7956","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd53"},194900:{"value":"2F954","name":"CJK COMPATIBILITY IDEOGRAPH-2F954","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2569A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd54"},194901:{"value":"2F955","name":"CJK COMPATIBILITY IDEOGRAPH-2F955","category":"Lo","class":"0","bidirectional_category":"L","mapping":"256C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd55"},194902:{"value":"2F956","name":"CJK COMPATIBILITY IDEOGRAPH-2F956","category":"Lo","class":"0","bidirectional_category":"L","mapping":"798F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd56"},194903:{"value":"2F957","name":"CJK COMPATIBILITY IDEOGRAPH-2F957","category":"Lo","class":"0","bidirectional_category":"L","mapping":"79EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd57"},194904:{"value":"2F958","name":"CJK COMPATIBILITY IDEOGRAPH-2F958","category":"Lo","class":"0","bidirectional_category":"L","mapping":"412F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd58"},194905:{"value":"2F959","name":"CJK COMPATIBILITY IDEOGRAPH-2F959","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7A40","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd59"},194906:{"value":"2F95A","name":"CJK COMPATIBILITY IDEOGRAPH-2F95A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7A4A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd5a"},194907:{"value":"2F95B","name":"CJK COMPATIBILITY IDEOGRAPH-2F95B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7A4F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd5b"},194908:{"value":"2F95C","name":"CJK COMPATIBILITY IDEOGRAPH-2F95C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2597C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd5c"},194909:{"value":"2F95D","name":"CJK COMPATIBILITY IDEOGRAPH-2F95D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25AA7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd5d"},194910:{"value":"2F95E","name":"CJK COMPATIBILITY IDEOGRAPH-2F95E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25AA7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd5e"},194911:{"value":"2F95F","name":"CJK COMPATIBILITY IDEOGRAPH-2F95F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7AEE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd5f"},194912:{"value":"2F960","name":"CJK COMPATIBILITY IDEOGRAPH-2F960","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4202","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd60"},194913:{"value":"2F961","name":"CJK COMPATIBILITY IDEOGRAPH-2F961","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25BAB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd61"},194914:{"value":"2F962","name":"CJK COMPATIBILITY IDEOGRAPH-2F962","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7BC6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd62"},194915:{"value":"2F963","name":"CJK COMPATIBILITY IDEOGRAPH-2F963","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7BC9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd63"},194916:{"value":"2F964","name":"CJK COMPATIBILITY IDEOGRAPH-2F964","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4227","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd64"},194917:{"value":"2F965","name":"CJK COMPATIBILITY IDEOGRAPH-2F965","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25C80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd65"},194918:{"value":"2F966","name":"CJK COMPATIBILITY IDEOGRAPH-2F966","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7CD2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd66"},194919:{"value":"2F967","name":"CJK COMPATIBILITY IDEOGRAPH-2F967","category":"Lo","class":"0","bidirectional_category":"L","mapping":"42A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd67"},194920:{"value":"2F968","name":"CJK COMPATIBILITY IDEOGRAPH-2F968","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7CE8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd68"},194921:{"value":"2F969","name":"CJK COMPATIBILITY IDEOGRAPH-2F969","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7CE3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd69"},194922:{"value":"2F96A","name":"CJK COMPATIBILITY IDEOGRAPH-2F96A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7D00","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd6a"},194923:{"value":"2F96B","name":"CJK COMPATIBILITY IDEOGRAPH-2F96B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"25F86","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd6b"},194924:{"value":"2F96C","name":"CJK COMPATIBILITY IDEOGRAPH-2F96C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7D63","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd6c"},194925:{"value":"2F96D","name":"CJK COMPATIBILITY IDEOGRAPH-2F96D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd6d"},194926:{"value":"2F96E","name":"CJK COMPATIBILITY IDEOGRAPH-2F96E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7DC7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd6e"},194927:{"value":"2F96F","name":"CJK COMPATIBILITY IDEOGRAPH-2F96F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7E02","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd6f"},194928:{"value":"2F970","name":"CJK COMPATIBILITY IDEOGRAPH-2F970","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7E45","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd70"},194929:{"value":"2F971","name":"CJK COMPATIBILITY IDEOGRAPH-2F971","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4334","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd71"},194930:{"value":"2F972","name":"CJK COMPATIBILITY IDEOGRAPH-2F972","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26228","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd72"},194931:{"value":"2F973","name":"CJK COMPATIBILITY IDEOGRAPH-2F973","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26247","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd73"},194932:{"value":"2F974","name":"CJK COMPATIBILITY IDEOGRAPH-2F974","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4359","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd74"},194933:{"value":"2F975","name":"CJK COMPATIBILITY IDEOGRAPH-2F975","category":"Lo","class":"0","bidirectional_category":"L","mapping":"262D9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd75"},194934:{"value":"2F976","name":"CJK COMPATIBILITY IDEOGRAPH-2F976","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F7A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd76"},194935:{"value":"2F977","name":"CJK COMPATIBILITY IDEOGRAPH-2F977","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2633E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd77"},194936:{"value":"2F978","name":"CJK COMPATIBILITY IDEOGRAPH-2F978","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7F95","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd78"},194937:{"value":"2F979","name":"CJK COMPATIBILITY IDEOGRAPH-2F979","category":"Lo","class":"0","bidirectional_category":"L","mapping":"7FFA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd79"},194938:{"value":"2F97A","name":"CJK COMPATIBILITY IDEOGRAPH-2F97A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8005","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd7a"},194939:{"value":"2F97B","name":"CJK COMPATIBILITY IDEOGRAPH-2F97B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"264DA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd7b"},194940:{"value":"2F97C","name":"CJK COMPATIBILITY IDEOGRAPH-2F97C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26523","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd7c"},194941:{"value":"2F97D","name":"CJK COMPATIBILITY IDEOGRAPH-2F97D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8060","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd7d"},194942:{"value":"2F97E","name":"CJK COMPATIBILITY IDEOGRAPH-2F97E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"265A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd7e"},194943:{"value":"2F97F","name":"CJK COMPATIBILITY IDEOGRAPH-2F97F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd7f"},194944:{"value":"2F980","name":"CJK COMPATIBILITY IDEOGRAPH-2F980","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2335F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd80"},194945:{"value":"2F981","name":"CJK COMPATIBILITY IDEOGRAPH-2F981","category":"Lo","class":"0","bidirectional_category":"L","mapping":"43D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd81"},194946:{"value":"2F982","name":"CJK COMPATIBILITY IDEOGRAPH-2F982","category":"Lo","class":"0","bidirectional_category":"L","mapping":"80B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd82"},194947:{"value":"2F983","name":"CJK COMPATIBILITY IDEOGRAPH-2F983","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8103","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd83"},194948:{"value":"2F984","name":"CJK COMPATIBILITY IDEOGRAPH-2F984","category":"Lo","class":"0","bidirectional_category":"L","mapping":"440B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd84"},194949:{"value":"2F985","name":"CJK COMPATIBILITY IDEOGRAPH-2F985","category":"Lo","class":"0","bidirectional_category":"L","mapping":"813E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd85"},194950:{"value":"2F986","name":"CJK COMPATIBILITY IDEOGRAPH-2F986","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5AB5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd86"},194951:{"value":"2F987","name":"CJK COMPATIBILITY IDEOGRAPH-2F987","category":"Lo","class":"0","bidirectional_category":"L","mapping":"267A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd87"},194952:{"value":"2F988","name":"CJK COMPATIBILITY IDEOGRAPH-2F988","category":"Lo","class":"0","bidirectional_category":"L","mapping":"267B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd88"},194953:{"value":"2F989","name":"CJK COMPATIBILITY IDEOGRAPH-2F989","category":"Lo","class":"0","bidirectional_category":"L","mapping":"23393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd89"},194954:{"value":"2F98A","name":"CJK COMPATIBILITY IDEOGRAPH-2F98A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2339C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd8a"},194955:{"value":"2F98B","name":"CJK COMPATIBILITY IDEOGRAPH-2F98B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8201","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd8b"},194956:{"value":"2F98C","name":"CJK COMPATIBILITY IDEOGRAPH-2F98C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8204","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd8c"},194957:{"value":"2F98D","name":"CJK COMPATIBILITY IDEOGRAPH-2F98D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F9E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd8d"},194958:{"value":"2F98E","name":"CJK COMPATIBILITY IDEOGRAPH-2F98E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"446B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd8e"},194959:{"value":"2F98F","name":"CJK COMPATIBILITY IDEOGRAPH-2F98F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8291","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd8f"},194960:{"value":"2F990","name":"CJK COMPATIBILITY IDEOGRAPH-2F990","category":"Lo","class":"0","bidirectional_category":"L","mapping":"828B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd90"},194961:{"value":"2F991","name":"CJK COMPATIBILITY IDEOGRAPH-2F991","category":"Lo","class":"0","bidirectional_category":"L","mapping":"829D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd91"},194962:{"value":"2F992","name":"CJK COMPATIBILITY IDEOGRAPH-2F992","category":"Lo","class":"0","bidirectional_category":"L","mapping":"52B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd92"},194963:{"value":"2F993","name":"CJK COMPATIBILITY IDEOGRAPH-2F993","category":"Lo","class":"0","bidirectional_category":"L","mapping":"82B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd93"},194964:{"value":"2F994","name":"CJK COMPATIBILITY IDEOGRAPH-2F994","category":"Lo","class":"0","bidirectional_category":"L","mapping":"82B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd94"},194965:{"value":"2F995","name":"CJK COMPATIBILITY IDEOGRAPH-2F995","category":"Lo","class":"0","bidirectional_category":"L","mapping":"82BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd95"},194966:{"value":"2F996","name":"CJK COMPATIBILITY IDEOGRAPH-2F996","category":"Lo","class":"0","bidirectional_category":"L","mapping":"82E6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd96"},194967:{"value":"2F997","name":"CJK COMPATIBILITY IDEOGRAPH-2F997","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26B3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd97"},194968:{"value":"2F998","name":"CJK COMPATIBILITY IDEOGRAPH-2F998","category":"Lo","class":"0","bidirectional_category":"L","mapping":"82E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd98"},194969:{"value":"2F999","name":"CJK COMPATIBILITY IDEOGRAPH-2F999","category":"Lo","class":"0","bidirectional_category":"L","mapping":"831D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd99"},194970:{"value":"2F99A","name":"CJK COMPATIBILITY IDEOGRAPH-2F99A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8363","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd9a"},194971:{"value":"2F99B","name":"CJK COMPATIBILITY IDEOGRAPH-2F99B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd9b"},194972:{"value":"2F99C","name":"CJK COMPATIBILITY IDEOGRAPH-2F99C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd9c"},194973:{"value":"2F99D","name":"CJK COMPATIBILITY IDEOGRAPH-2F99D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd9d"},194974:{"value":"2F99E","name":"CJK COMPATIBILITY IDEOGRAPH-2F99E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83E7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd9e"},194975:{"value":"2F99F","name":"CJK COMPATIBILITY IDEOGRAPH-2F99F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8457","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udd9f"},194976:{"value":"2F9A0","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8353","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda0"},194977:{"value":"2F9A1","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda1"},194978:{"value":"2F9A2","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda2"},194979:{"value":"2F9A3","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"83DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda3"},194980:{"value":"2F9A4","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26C36","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda4"},194981:{"value":"2F9A5","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26D6B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda5"},194982:{"value":"2F9A6","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26CD5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda6"},194983:{"value":"2F9A7","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"452B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda7"},194984:{"value":"2F9A8","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"84F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda8"},194985:{"value":"2F9A9","name":"CJK COMPATIBILITY IDEOGRAPH-2F9A9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"84F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udda9"},194986:{"value":"2F9AA","name":"CJK COMPATIBILITY IDEOGRAPH-2F9AA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8516","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddaa"},194987:{"value":"2F9AB","name":"CJK COMPATIBILITY IDEOGRAPH-2F9AB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"273CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddab"},194988:{"value":"2F9AC","name":"CJK COMPATIBILITY IDEOGRAPH-2F9AC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8564","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddac"},194989:{"value":"2F9AD","name":"CJK COMPATIBILITY IDEOGRAPH-2F9AD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26F2C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddad"},194990:{"value":"2F9AE","name":"CJK COMPATIBILITY IDEOGRAPH-2F9AE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"455D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddae"},194991:{"value":"2F9AF","name":"CJK COMPATIBILITY IDEOGRAPH-2F9AF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4561","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddaf"},194992:{"value":"2F9B0","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"26FB1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb0"},194993:{"value":"2F9B1","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"270D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb1"},194994:{"value":"2F9B2","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"456B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb2"},194995:{"value":"2F9B3","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8650","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb3"},194996:{"value":"2F9B4","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"865C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb4"},194997:{"value":"2F9B5","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8667","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb5"},194998:{"value":"2F9B6","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8669","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb6"},194999:{"value":"2F9B7","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"86A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb7"},195000:{"value":"2F9B8","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8688","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb8"},195001:{"value":"2F9B9","name":"CJK COMPATIBILITY IDEOGRAPH-2F9B9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"870E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddb9"},195002:{"value":"2F9BA","name":"CJK COMPATIBILITY IDEOGRAPH-2F9BA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"86E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddba"},195003:{"value":"2F9BB","name":"CJK COMPATIBILITY IDEOGRAPH-2F9BB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8779","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddbb"},195004:{"value":"2F9BC","name":"CJK COMPATIBILITY IDEOGRAPH-2F9BC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8728","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddbc"},195005:{"value":"2F9BD","name":"CJK COMPATIBILITY IDEOGRAPH-2F9BD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"876B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddbd"},195006:{"value":"2F9BE","name":"CJK COMPATIBILITY IDEOGRAPH-2F9BE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8786","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddbe"},195007:{"value":"2F9BF","name":"CJK COMPATIBILITY IDEOGRAPH-2F9BF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"45D7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddbf"},195008:{"value":"2F9C0","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"87E1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc0"},195009:{"value":"2F9C1","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8801","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc1"},195010:{"value":"2F9C2","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"45F9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc2"},195011:{"value":"2F9C3","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8860","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc3"},195012:{"value":"2F9C4","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8863","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc4"},195013:{"value":"2F9C5","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"27667","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc5"},195014:{"value":"2F9C6","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88D7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc6"},195015:{"value":"2F9C7","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc7"},195016:{"value":"2F9C8","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4635","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc8"},195017:{"value":"2F9C9","name":"CJK COMPATIBILITY IDEOGRAPH-2F9C9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"88FA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddc9"},195018:{"value":"2F9CA","name":"CJK COMPATIBILITY IDEOGRAPH-2F9CA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"34BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddca"},195019:{"value":"2F9CB","name":"CJK COMPATIBILITY IDEOGRAPH-2F9CB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"278AE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddcb"},195020:{"value":"2F9CC","name":"CJK COMPATIBILITY IDEOGRAPH-2F9CC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"27966","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddcc"},195021:{"value":"2F9CD","name":"CJK COMPATIBILITY IDEOGRAPH-2F9CD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"46BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddcd"},195022:{"value":"2F9CE","name":"CJK COMPATIBILITY IDEOGRAPH-2F9CE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"46C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddce"},195023:{"value":"2F9CF","name":"CJK COMPATIBILITY IDEOGRAPH-2F9CF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AA0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddcf"},195024:{"value":"2F9D0","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8AED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd0"},195025:{"value":"2F9D1","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8B8A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd1"},195026:{"value":"2F9D2","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8C55","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd2"},195027:{"value":"2F9D3","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"27CA8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd3"},195028:{"value":"2F9D4","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8CAB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd4"},195029:{"value":"2F9D5","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8CC1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd5"},195030:{"value":"2F9D6","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8D1B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd6"},195031:{"value":"2F9D7","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8D77","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd7"},195032:{"value":"2F9D8","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"27F2F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd8"},195033:{"value":"2F9D9","name":"CJK COMPATIBILITY IDEOGRAPH-2F9D9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"20804","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddd9"},195034:{"value":"2F9DA","name":"CJK COMPATIBILITY IDEOGRAPH-2F9DA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8DCB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddda"},195035:{"value":"2F9DB","name":"CJK COMPATIBILITY IDEOGRAPH-2F9DB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8DBC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udddb"},195036:{"value":"2F9DC","name":"CJK COMPATIBILITY IDEOGRAPH-2F9DC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8DF0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udddc"},195037:{"value":"2F9DD","name":"CJK COMPATIBILITY IDEOGRAPH-2F9DD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"208DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udddd"},195038:{"value":"2F9DE","name":"CJK COMPATIBILITY IDEOGRAPH-2F9DE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8ED4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddde"},195039:{"value":"2F9DF","name":"CJK COMPATIBILITY IDEOGRAPH-2F9DF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"8F38","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udddf"},195040:{"value":"2F9E0","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"285D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde0"},195041:{"value":"2F9E1","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"285ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde1"},195042:{"value":"2F9E2","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9094","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde2"},195043:{"value":"2F9E3","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"90F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde3"},195044:{"value":"2F9E4","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9111","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde4"},195045:{"value":"2F9E5","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2872E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde5"},195046:{"value":"2F9E6","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"911B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde6"},195047:{"value":"2F9E7","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9238","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde7"},195048:{"value":"2F9E8","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"92D7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde8"},195049:{"value":"2F9E9","name":"CJK COMPATIBILITY IDEOGRAPH-2F9E9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"92D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udde9"},195050:{"value":"2F9EA","name":"CJK COMPATIBILITY IDEOGRAPH-2F9EA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"927C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddea"},195051:{"value":"2F9EB","name":"CJK COMPATIBILITY IDEOGRAPH-2F9EB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"93F9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddeb"},195052:{"value":"2F9EC","name":"CJK COMPATIBILITY IDEOGRAPH-2F9EC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9415","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddec"},195053:{"value":"2F9ED","name":"CJK COMPATIBILITY IDEOGRAPH-2F9ED","category":"Lo","class":"0","bidirectional_category":"L","mapping":"28BFA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\udded"},195054:{"value":"2F9EE","name":"CJK COMPATIBILITY IDEOGRAPH-2F9EE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"958B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddee"},195055:{"value":"2F9EF","name":"CJK COMPATIBILITY IDEOGRAPH-2F9EF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4995","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddef"},195056:{"value":"2F9F0","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F0","category":"Lo","class":"0","bidirectional_category":"L","mapping":"95B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf0"},195057:{"value":"2F9F1","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F1","category":"Lo","class":"0","bidirectional_category":"L","mapping":"28D77","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf1"},195058:{"value":"2F9F2","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F2","category":"Lo","class":"0","bidirectional_category":"L","mapping":"49E6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf2"},195059:{"value":"2F9F3","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F3","category":"Lo","class":"0","bidirectional_category":"L","mapping":"96C3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf3"},195060:{"value":"2F9F4","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F4","category":"Lo","class":"0","bidirectional_category":"L","mapping":"5DB2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf4"},195061:{"value":"2F9F5","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F5","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9723","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf5"},195062:{"value":"2F9F6","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F6","category":"Lo","class":"0","bidirectional_category":"L","mapping":"29145","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf6"},195063:{"value":"2F9F7","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F7","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2921A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf7"},195064:{"value":"2F9F8","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F8","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4A6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf8"},195065:{"value":"2F9F9","name":"CJK COMPATIBILITY IDEOGRAPH-2F9F9","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4A76","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddf9"},195066:{"value":"2F9FA","name":"CJK COMPATIBILITY IDEOGRAPH-2F9FA","category":"Lo","class":"0","bidirectional_category":"L","mapping":"97E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddfa"},195067:{"value":"2F9FB","name":"CJK COMPATIBILITY IDEOGRAPH-2F9FB","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2940A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddfb"},195068:{"value":"2F9FC","name":"CJK COMPATIBILITY IDEOGRAPH-2F9FC","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4AB2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddfc"},195069:{"value":"2F9FD","name":"CJK COMPATIBILITY IDEOGRAPH-2F9FD","category":"Lo","class":"0","bidirectional_category":"L","mapping":"29496","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddfd"},195070:{"value":"2F9FE","name":"CJK COMPATIBILITY IDEOGRAPH-2F9FE","category":"Lo","class":"0","bidirectional_category":"L","mapping":"980B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddfe"},195071:{"value":"2F9FF","name":"CJK COMPATIBILITY IDEOGRAPH-2F9FF","category":"Lo","class":"0","bidirectional_category":"L","mapping":"980B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\uddff"},195072:{"value":"2FA00","name":"CJK COMPATIBILITY IDEOGRAPH-2FA00","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9829","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude00"},195073:{"value":"2FA01","name":"CJK COMPATIBILITY IDEOGRAPH-2FA01","category":"Lo","class":"0","bidirectional_category":"L","mapping":"295B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude01"},195074:{"value":"2FA02","name":"CJK COMPATIBILITY IDEOGRAPH-2FA02","category":"Lo","class":"0","bidirectional_category":"L","mapping":"98E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude02"},195075:{"value":"2FA03","name":"CJK COMPATIBILITY IDEOGRAPH-2FA03","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4B33","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude03"},195076:{"value":"2FA04","name":"CJK COMPATIBILITY IDEOGRAPH-2FA04","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9929","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude04"},195077:{"value":"2FA05","name":"CJK COMPATIBILITY IDEOGRAPH-2FA05","category":"Lo","class":"0","bidirectional_category":"L","mapping":"99A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude05"},195078:{"value":"2FA06","name":"CJK COMPATIBILITY IDEOGRAPH-2FA06","category":"Lo","class":"0","bidirectional_category":"L","mapping":"99C2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude06"},195079:{"value":"2FA07","name":"CJK COMPATIBILITY IDEOGRAPH-2FA07","category":"Lo","class":"0","bidirectional_category":"L","mapping":"99FE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude07"},195080:{"value":"2FA08","name":"CJK COMPATIBILITY IDEOGRAPH-2FA08","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4BCE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude08"},195081:{"value":"2FA09","name":"CJK COMPATIBILITY IDEOGRAPH-2FA09","category":"Lo","class":"0","bidirectional_category":"L","mapping":"29B30","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude09"},195082:{"value":"2FA0A","name":"CJK COMPATIBILITY IDEOGRAPH-2FA0A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9B12","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude0a"},195083:{"value":"2FA0B","name":"CJK COMPATIBILITY IDEOGRAPH-2FA0B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9C40","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude0b"},195084:{"value":"2FA0C","name":"CJK COMPATIBILITY IDEOGRAPH-2FA0C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9CFD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude0c"},195085:{"value":"2FA0D","name":"CJK COMPATIBILITY IDEOGRAPH-2FA0D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4CCE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude0d"},195086:{"value":"2FA0E","name":"CJK COMPATIBILITY IDEOGRAPH-2FA0E","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4CED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude0e"},195087:{"value":"2FA0F","name":"CJK COMPATIBILITY IDEOGRAPH-2FA0F","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9D67","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude0f"},195088:{"value":"2FA10","name":"CJK COMPATIBILITY IDEOGRAPH-2FA10","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2A0CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude10"},195089:{"value":"2FA11","name":"CJK COMPATIBILITY IDEOGRAPH-2FA11","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4CF8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude11"},195090:{"value":"2FA12","name":"CJK COMPATIBILITY IDEOGRAPH-2FA12","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2A105","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude12"},195091:{"value":"2FA13","name":"CJK COMPATIBILITY IDEOGRAPH-2FA13","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2A20E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude13"},195092:{"value":"2FA14","name":"CJK COMPATIBILITY IDEOGRAPH-2FA14","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2A291","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude14"},195093:{"value":"2FA15","name":"CJK COMPATIBILITY IDEOGRAPH-2FA15","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9EBB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude15"},195094:{"value":"2FA16","name":"CJK COMPATIBILITY IDEOGRAPH-2FA16","category":"Lo","class":"0","bidirectional_category":"L","mapping":"4D56","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude16"},195095:{"value":"2FA17","name":"CJK COMPATIBILITY IDEOGRAPH-2FA17","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9EF9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude17"},195096:{"value":"2FA18","name":"CJK COMPATIBILITY IDEOGRAPH-2FA18","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9EFE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude18"},195097:{"value":"2FA19","name":"CJK COMPATIBILITY IDEOGRAPH-2FA19","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F05","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude19"},195098:{"value":"2FA1A","name":"CJK COMPATIBILITY IDEOGRAPH-2FA1A","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F0F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude1a"},195099:{"value":"2FA1B","name":"CJK COMPATIBILITY IDEOGRAPH-2FA1B","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F16","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude1b"},195100:{"value":"2FA1C","name":"CJK COMPATIBILITY IDEOGRAPH-2FA1C","category":"Lo","class":"0","bidirectional_category":"L","mapping":"9F3B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude1c"},195101:{"value":"2FA1D","name":"CJK COMPATIBILITY IDEOGRAPH-2FA1D","category":"Lo","class":"0","bidirectional_category":"L","mapping":"2A600","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud87e\ude1d"},196608:{"value":"30000","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud880\udc00"},201546:{"value":"3134A","name":"","category":"Lo","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud884\udf4a"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Lt.js b/node_modules/unicode/category/Lt.js new file mode 100644 index 000000000..67b2b2ec5 --- /dev/null +++ b/node_modules/unicode/category/Lt.js @@ -0,0 +1 @@ +module.exports={453:{"value":"01C5","name":"LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON","category":"Lt","class":"0","bidirectional_category":"L","mapping":" 0044 017E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER CAPITAL D SMALL Z HACEK","comment":"","uppercase_mapping":"01C4","lowercase_mapping":"01C6","titlecase_mapping":"01C5","symbol":"\u01C5"},456:{"value":"01C8","name":"LATIN CAPITAL LETTER L WITH SMALL LETTER J","category":"Lt","class":"0","bidirectional_category":"L","mapping":" 004C 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER CAPITAL L SMALL J","comment":"","uppercase_mapping":"01C7","lowercase_mapping":"01C9","titlecase_mapping":"01C8","symbol":"\u01C8"},459:{"value":"01CB","name":"LATIN CAPITAL LETTER N WITH SMALL LETTER J","category":"Lt","class":"0","bidirectional_category":"L","mapping":" 004E 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER CAPITAL N SMALL J","comment":"","uppercase_mapping":"01CA","lowercase_mapping":"01CC","titlecase_mapping":"01CB","symbol":"\u01CB"},498:{"value":"01F2","name":"LATIN CAPITAL LETTER D WITH SMALL LETTER Z","category":"Lt","class":"0","bidirectional_category":"L","mapping":" 0044 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"01F1","lowercase_mapping":"01F3","titlecase_mapping":"01F2","symbol":"\u01F2"},8072:{"value":"1F88","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F08 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F80","titlecase_mapping":"","symbol":"\u1F88"},8073:{"value":"1F89","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F09 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F81","titlecase_mapping":"","symbol":"\u1F89"},8074:{"value":"1F8A","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F0A 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F82","titlecase_mapping":"","symbol":"\u1F8A"},8075:{"value":"1F8B","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F0B 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F83","titlecase_mapping":"","symbol":"\u1F8B"},8076:{"value":"1F8C","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F0C 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F84","titlecase_mapping":"","symbol":"\u1F8C"},8077:{"value":"1F8D","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F0D 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F85","titlecase_mapping":"","symbol":"\u1F8D"},8078:{"value":"1F8E","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F0E 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F86","titlecase_mapping":"","symbol":"\u1F8E"},8079:{"value":"1F8F","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F0F 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F87","titlecase_mapping":"","symbol":"\u1F8F"},8088:{"value":"1F98","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F28 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F90","titlecase_mapping":"","symbol":"\u1F98"},8089:{"value":"1F99","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F29 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F91","titlecase_mapping":"","symbol":"\u1F99"},8090:{"value":"1F9A","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F2A 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F92","titlecase_mapping":"","symbol":"\u1F9A"},8091:{"value":"1F9B","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F2B 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F93","titlecase_mapping":"","symbol":"\u1F9B"},8092:{"value":"1F9C","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F2C 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F94","titlecase_mapping":"","symbol":"\u1F9C"},8093:{"value":"1F9D","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F2D 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F95","titlecase_mapping":"","symbol":"\u1F9D"},8094:{"value":"1F9E","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F2E 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F96","titlecase_mapping":"","symbol":"\u1F9E"},8095:{"value":"1F9F","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F2F 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F97","titlecase_mapping":"","symbol":"\u1F9F"},8104:{"value":"1FA8","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F68 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA0","titlecase_mapping":"","symbol":"\u1FA8"},8105:{"value":"1FA9","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F69 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA1","titlecase_mapping":"","symbol":"\u1FA9"},8106:{"value":"1FAA","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F6A 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA2","titlecase_mapping":"","symbol":"\u1FAA"},8107:{"value":"1FAB","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F6B 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA3","titlecase_mapping":"","symbol":"\u1FAB"},8108:{"value":"1FAC","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F6C 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA4","titlecase_mapping":"","symbol":"\u1FAC"},8109:{"value":"1FAD","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F6D 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA5","titlecase_mapping":"","symbol":"\u1FAD"},8110:{"value":"1FAE","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F6E 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA6","titlecase_mapping":"","symbol":"\u1FAE"},8111:{"value":"1FAF","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"1F6F 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FA7","titlecase_mapping":"","symbol":"\u1FAF"},8124:{"value":"1FBC","name":"GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"0391 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FB3","titlecase_mapping":"","symbol":"\u1FBC"},8140:{"value":"1FCC","name":"GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"0397 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FC3","titlecase_mapping":"","symbol":"\u1FCC"},8188:{"value":"1FFC","name":"GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI","category":"Lt","class":"0","bidirectional_category":"L","mapping":"03A9 0345","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FF3","titlecase_mapping":"","symbol":"\u1FFC"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Lu.js b/node_modules/unicode/category/Lu.js new file mode 100644 index 000000000..f0f1f2bff --- /dev/null +++ b/node_modules/unicode/category/Lu.js @@ -0,0 +1 @@ +module.exports={65:{"value":"0041","name":"LATIN CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0061","titlecase_mapping":"","symbol":"\x41"},66:{"value":"0042","name":"LATIN CAPITAL LETTER B","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0062","titlecase_mapping":"","symbol":"\x42"},67:{"value":"0043","name":"LATIN CAPITAL LETTER C","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0063","titlecase_mapping":"","symbol":"\x43"},68:{"value":"0044","name":"LATIN CAPITAL LETTER D","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0064","titlecase_mapping":"","symbol":"\x44"},69:{"value":"0045","name":"LATIN CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0065","titlecase_mapping":"","symbol":"\x45"},70:{"value":"0046","name":"LATIN CAPITAL LETTER F","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0066","titlecase_mapping":"","symbol":"\x46"},71:{"value":"0047","name":"LATIN CAPITAL LETTER G","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0067","titlecase_mapping":"","symbol":"\x47"},72:{"value":"0048","name":"LATIN CAPITAL LETTER H","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0068","titlecase_mapping":"","symbol":"\x48"},73:{"value":"0049","name":"LATIN CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0069","titlecase_mapping":"","symbol":"\x49"},74:{"value":"004A","name":"LATIN CAPITAL LETTER J","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"006A","titlecase_mapping":"","symbol":"\x4A"},75:{"value":"004B","name":"LATIN CAPITAL LETTER K","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"006B","titlecase_mapping":"","symbol":"\x4B"},76:{"value":"004C","name":"LATIN CAPITAL LETTER L","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"006C","titlecase_mapping":"","symbol":"\x4C"},77:{"value":"004D","name":"LATIN CAPITAL LETTER M","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"006D","titlecase_mapping":"","symbol":"\x4D"},78:{"value":"004E","name":"LATIN CAPITAL LETTER N","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"006E","titlecase_mapping":"","symbol":"\x4E"},79:{"value":"004F","name":"LATIN CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"006F","titlecase_mapping":"","symbol":"\x4F"},80:{"value":"0050","name":"LATIN CAPITAL LETTER P","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0070","titlecase_mapping":"","symbol":"\x50"},81:{"value":"0051","name":"LATIN CAPITAL LETTER Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0071","titlecase_mapping":"","symbol":"\x51"},82:{"value":"0052","name":"LATIN CAPITAL LETTER R","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0072","titlecase_mapping":"","symbol":"\x52"},83:{"value":"0053","name":"LATIN CAPITAL LETTER S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0073","titlecase_mapping":"","symbol":"\x53"},84:{"value":"0054","name":"LATIN CAPITAL LETTER T","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0074","titlecase_mapping":"","symbol":"\x54"},85:{"value":"0055","name":"LATIN CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0075","titlecase_mapping":"","symbol":"\x55"},86:{"value":"0056","name":"LATIN CAPITAL LETTER V","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0076","titlecase_mapping":"","symbol":"\x56"},87:{"value":"0057","name":"LATIN CAPITAL LETTER W","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0077","titlecase_mapping":"","symbol":"\x57"},88:{"value":"0058","name":"LATIN CAPITAL LETTER X","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0078","titlecase_mapping":"","symbol":"\x58"},89:{"value":"0059","name":"LATIN CAPITAL LETTER Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0079","titlecase_mapping":"","symbol":"\x59"},90:{"value":"005A","name":"LATIN CAPITAL LETTER Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"007A","titlecase_mapping":"","symbol":"\x5A"},192:{"value":"00C0","name":"LATIN CAPITAL LETTER A WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"00E0","titlecase_mapping":"","symbol":"\xC0"},193:{"value":"00C1","name":"LATIN CAPITAL LETTER A WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"00E1","titlecase_mapping":"","symbol":"\xC1"},194:{"value":"00C2","name":"LATIN CAPITAL LETTER A WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"00E2","titlecase_mapping":"","symbol":"\xC2"},195:{"value":"00C3","name":"LATIN CAPITAL LETTER A WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"00E3","titlecase_mapping":"","symbol":"\xC3"},196:{"value":"00C4","name":"LATIN CAPITAL LETTER A WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"00E4","titlecase_mapping":"","symbol":"\xC4"},197:{"value":"00C5","name":"LATIN CAPITAL LETTER A WITH RING ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A RING","comment":"","uppercase_mapping":"","lowercase_mapping":"00E5","titlecase_mapping":"","symbol":"\xC5"},198:{"value":"00C6","name":"LATIN CAPITAL LETTER AE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A E","comment":"","uppercase_mapping":"","lowercase_mapping":"00E6","titlecase_mapping":"","symbol":"\xC6"},199:{"value":"00C7","name":"LATIN CAPITAL LETTER C WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0043 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER C CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"00E7","titlecase_mapping":"","symbol":"\xC7"},200:{"value":"00C8","name":"LATIN CAPITAL LETTER E WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"00E8","titlecase_mapping":"","symbol":"\xC8"},201:{"value":"00C9","name":"LATIN CAPITAL LETTER E WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"00E9","titlecase_mapping":"","symbol":"\xC9"},202:{"value":"00CA","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"00EA","titlecase_mapping":"","symbol":"\xCA"},203:{"value":"00CB","name":"LATIN CAPITAL LETTER E WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"00EB","titlecase_mapping":"","symbol":"\xCB"},204:{"value":"00CC","name":"LATIN CAPITAL LETTER I WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"00EC","titlecase_mapping":"","symbol":"\xCC"},205:{"value":"00CD","name":"LATIN CAPITAL LETTER I WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"00ED","titlecase_mapping":"","symbol":"\xCD"},206:{"value":"00CE","name":"LATIN CAPITAL LETTER I WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"00EE","titlecase_mapping":"","symbol":"\xCE"},207:{"value":"00CF","name":"LATIN CAPITAL LETTER I WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"00EF","titlecase_mapping":"","symbol":"\xCF"},208:{"value":"00D0","name":"LATIN CAPITAL LETTER ETH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"00F0","titlecase_mapping":"","symbol":"\xD0"},209:{"value":"00D1","name":"LATIN CAPITAL LETTER N WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER N TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"00F1","titlecase_mapping":"","symbol":"\xD1"},210:{"value":"00D2","name":"LATIN CAPITAL LETTER O WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"00F2","titlecase_mapping":"","symbol":"\xD2"},211:{"value":"00D3","name":"LATIN CAPITAL LETTER O WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"00F3","titlecase_mapping":"","symbol":"\xD3"},212:{"value":"00D4","name":"LATIN CAPITAL LETTER O WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"00F4","titlecase_mapping":"","symbol":"\xD4"},213:{"value":"00D5","name":"LATIN CAPITAL LETTER O WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"00F5","titlecase_mapping":"","symbol":"\xD5"},214:{"value":"00D6","name":"LATIN CAPITAL LETTER O WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"00F6","titlecase_mapping":"","symbol":"\xD6"},216:{"value":"00D8","name":"LATIN CAPITAL LETTER O WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O SLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"00F8","titlecase_mapping":"","symbol":"\xD8"},217:{"value":"00D9","name":"LATIN CAPITAL LETTER U WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"00F9","titlecase_mapping":"","symbol":"\xD9"},218:{"value":"00DA","name":"LATIN CAPITAL LETTER U WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"00FA","titlecase_mapping":"","symbol":"\xDA"},219:{"value":"00DB","name":"LATIN CAPITAL LETTER U WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"00FB","titlecase_mapping":"","symbol":"\xDB"},220:{"value":"00DC","name":"LATIN CAPITAL LETTER U WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"00FC","titlecase_mapping":"","symbol":"\xDC"},221:{"value":"00DD","name":"LATIN CAPITAL LETTER Y WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Y ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"00FD","titlecase_mapping":"","symbol":"\xDD"},222:{"value":"00DE","name":"LATIN CAPITAL LETTER THORN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"00FE","titlecase_mapping":"","symbol":"\xDE"},256:{"value":"0100","name":"LATIN CAPITAL LETTER A WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"0101","titlecase_mapping":"","symbol":"\u0100"},258:{"value":"0102","name":"LATIN CAPITAL LETTER A WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"0103","titlecase_mapping":"","symbol":"\u0102"},260:{"value":"0104","name":"LATIN CAPITAL LETTER A WITH OGONEK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0105","titlecase_mapping":"","symbol":"\u0104"},262:{"value":"0106","name":"LATIN CAPITAL LETTER C WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0043 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER C ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"0107","titlecase_mapping":"","symbol":"\u0106"},264:{"value":"0108","name":"LATIN CAPITAL LETTER C WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0043 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER C CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"0109","titlecase_mapping":"","symbol":"\u0108"},266:{"value":"010A","name":"LATIN CAPITAL LETTER C WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0043 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER C DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"010B","titlecase_mapping":"","symbol":"\u010A"},268:{"value":"010C","name":"LATIN CAPITAL LETTER C WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0043 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER C HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"010D","titlecase_mapping":"","symbol":"\u010C"},270:{"value":"010E","name":"LATIN CAPITAL LETTER D WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0044 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER D HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"010F","titlecase_mapping":"","symbol":"\u010E"},272:{"value":"0110","name":"LATIN CAPITAL LETTER D WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER D BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"0111","titlecase_mapping":"","symbol":"\u0110"},274:{"value":"0112","name":"LATIN CAPITAL LETTER E WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"0113","titlecase_mapping":"","symbol":"\u0112"},276:{"value":"0114","name":"LATIN CAPITAL LETTER E WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"0115","titlecase_mapping":"","symbol":"\u0114"},278:{"value":"0116","name":"LATIN CAPITAL LETTER E WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"0117","titlecase_mapping":"","symbol":"\u0116"},280:{"value":"0118","name":"LATIN CAPITAL LETTER E WITH OGONEK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0119","titlecase_mapping":"","symbol":"\u0118"},282:{"value":"011A","name":"LATIN CAPITAL LETTER E WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER E HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"011B","titlecase_mapping":"","symbol":"\u011A"},284:{"value":"011C","name":"LATIN CAPITAL LETTER G WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"011D","titlecase_mapping":"","symbol":"\u011C"},286:{"value":"011E","name":"LATIN CAPITAL LETTER G WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"011F","titlecase_mapping":"","symbol":"\u011E"},288:{"value":"0120","name":"LATIN CAPITAL LETTER G WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"0121","titlecase_mapping":"","symbol":"\u0120"},290:{"value":"0122","name":"LATIN CAPITAL LETTER G WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"0123","titlecase_mapping":"","symbol":"\u0122"},292:{"value":"0124","name":"LATIN CAPITAL LETTER H WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER H CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"0125","titlecase_mapping":"","symbol":"\u0124"},294:{"value":"0126","name":"LATIN CAPITAL LETTER H WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER H BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"0127","titlecase_mapping":"","symbol":"\u0126"},296:{"value":"0128","name":"LATIN CAPITAL LETTER I WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"0129","titlecase_mapping":"","symbol":"\u0128"},298:{"value":"012A","name":"LATIN CAPITAL LETTER I WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"012B","titlecase_mapping":"","symbol":"\u012A"},300:{"value":"012C","name":"LATIN CAPITAL LETTER I WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"012D","titlecase_mapping":"","symbol":"\u012C"},302:{"value":"012E","name":"LATIN CAPITAL LETTER I WITH OGONEK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"012F","titlecase_mapping":"","symbol":"\u012E"},304:{"value":"0130","name":"LATIN CAPITAL LETTER I WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"0069","titlecase_mapping":"","symbol":"\u0130"},306:{"value":"0132","name":"LATIN CAPITAL LIGATURE IJ","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I J","comment":"","uppercase_mapping":"","lowercase_mapping":"0133","titlecase_mapping":"","symbol":"\u0132"},308:{"value":"0134","name":"LATIN CAPITAL LETTER J WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004A 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER J CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"0135","titlecase_mapping":"","symbol":"\u0134"},310:{"value":"0136","name":"LATIN CAPITAL LETTER K WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004B 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER K CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"0137","titlecase_mapping":"","symbol":"\u0136"},313:{"value":"0139","name":"LATIN CAPITAL LETTER L WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004C 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER L ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"013A","titlecase_mapping":"","symbol":"\u0139"},315:{"value":"013B","name":"LATIN CAPITAL LETTER L WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004C 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER L CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"013C","titlecase_mapping":"","symbol":"\u013B"},317:{"value":"013D","name":"LATIN CAPITAL LETTER L WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004C 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER L HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"013E","titlecase_mapping":"","symbol":"\u013D"},319:{"value":"013F","name":"LATIN CAPITAL LETTER L WITH MIDDLE DOT","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C 00B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0140","titlecase_mapping":"","symbol":"\u013F"},321:{"value":"0141","name":"LATIN CAPITAL LETTER L WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER L SLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"0142","titlecase_mapping":"","symbol":"\u0141"},323:{"value":"0143","name":"LATIN CAPITAL LETTER N WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER N ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"0144","titlecase_mapping":"","symbol":"\u0143"},325:{"value":"0145","name":"LATIN CAPITAL LETTER N WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER N CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"0146","titlecase_mapping":"","symbol":"\u0145"},327:{"value":"0147","name":"LATIN CAPITAL LETTER N WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER N HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0148","titlecase_mapping":"","symbol":"\u0147"},330:{"value":"014A","name":"LATIN CAPITAL LETTER ENG","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"014B","titlecase_mapping":"","symbol":"\u014A"},332:{"value":"014C","name":"LATIN CAPITAL LETTER O WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"014D","titlecase_mapping":"","symbol":"\u014C"},334:{"value":"014E","name":"LATIN CAPITAL LETTER O WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"014F","titlecase_mapping":"","symbol":"\u014E"},336:{"value":"0150","name":"LATIN CAPITAL LETTER O WITH DOUBLE ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O DOUBLE ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"0151","titlecase_mapping":"","symbol":"\u0150"},338:{"value":"0152","name":"LATIN CAPITAL LIGATURE OE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O E","comment":"","uppercase_mapping":"","lowercase_mapping":"0153","titlecase_mapping":"","symbol":"\u0152"},340:{"value":"0154","name":"LATIN CAPITAL LETTER R WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER R ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"0155","titlecase_mapping":"","symbol":"\u0154"},342:{"value":"0156","name":"LATIN CAPITAL LETTER R WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER R CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"0157","titlecase_mapping":"","symbol":"\u0156"},344:{"value":"0158","name":"LATIN CAPITAL LETTER R WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER R HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0159","titlecase_mapping":"","symbol":"\u0158"},346:{"value":"015A","name":"LATIN CAPITAL LETTER S WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER S ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"015B","titlecase_mapping":"","symbol":"\u015A"},348:{"value":"015C","name":"LATIN CAPITAL LETTER S WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER S CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"015D","titlecase_mapping":"","symbol":"\u015C"},350:{"value":"015E","name":"LATIN CAPITAL LETTER S WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER S CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"015F","titlecase_mapping":"","symbol":"\u015E"},352:{"value":"0160","name":"LATIN CAPITAL LETTER S WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER S HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0161","titlecase_mapping":"","symbol":"\u0160"},354:{"value":"0162","name":"LATIN CAPITAL LETTER T WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER T CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"0163","titlecase_mapping":"","symbol":"\u0162"},356:{"value":"0164","name":"LATIN CAPITAL LETTER T WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER T HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0165","titlecase_mapping":"","symbol":"\u0164"},358:{"value":"0166","name":"LATIN CAPITAL LETTER T WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER T BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"0167","titlecase_mapping":"","symbol":"\u0166"},360:{"value":"0168","name":"LATIN CAPITAL LETTER U WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"0169","titlecase_mapping":"","symbol":"\u0168"},362:{"value":"016A","name":"LATIN CAPITAL LETTER U WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"016B","titlecase_mapping":"","symbol":"\u016A"},364:{"value":"016C","name":"LATIN CAPITAL LETTER U WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"016D","titlecase_mapping":"","symbol":"\u016C"},366:{"value":"016E","name":"LATIN CAPITAL LETTER U WITH RING ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U RING","comment":"","uppercase_mapping":"","lowercase_mapping":"016F","titlecase_mapping":"","symbol":"\u016E"},368:{"value":"0170","name":"LATIN CAPITAL LETTER U WITH DOUBLE ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U DOUBLE ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"0171","titlecase_mapping":"","symbol":"\u0170"},370:{"value":"0172","name":"LATIN CAPITAL LETTER U WITH OGONEK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"0173","titlecase_mapping":"","symbol":"\u0172"},372:{"value":"0174","name":"LATIN CAPITAL LETTER W WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0057 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER W CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"0175","titlecase_mapping":"","symbol":"\u0174"},374:{"value":"0176","name":"LATIN CAPITAL LETTER Y WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Y CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"0177","titlecase_mapping":"","symbol":"\u0176"},376:{"value":"0178","name":"LATIN CAPITAL LETTER Y WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Y DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"00FF","titlecase_mapping":"","symbol":"\u0178"},377:{"value":"0179","name":"LATIN CAPITAL LETTER Z WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"005A 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Z ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"017A","titlecase_mapping":"","symbol":"\u0179"},379:{"value":"017B","name":"LATIN CAPITAL LETTER Z WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"005A 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Z DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"017C","titlecase_mapping":"","symbol":"\u017B"},381:{"value":"017D","name":"LATIN CAPITAL LETTER Z WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"005A 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Z HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"017E","titlecase_mapping":"","symbol":"\u017D"},385:{"value":"0181","name":"LATIN CAPITAL LETTER B WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER B HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0253","titlecase_mapping":"","symbol":"\u0181"},386:{"value":"0182","name":"LATIN CAPITAL LETTER B WITH TOPBAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER B TOPBAR","comment":"","uppercase_mapping":"","lowercase_mapping":"0183","titlecase_mapping":"","symbol":"\u0182"},388:{"value":"0184","name":"LATIN CAPITAL LETTER TONE SIX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0185","titlecase_mapping":"","symbol":"\u0184"},390:{"value":"0186","name":"LATIN CAPITAL LETTER OPEN O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0254","titlecase_mapping":"","symbol":"\u0186"},391:{"value":"0187","name":"LATIN CAPITAL LETTER C WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER C HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0188","titlecase_mapping":"","symbol":"\u0187"},393:{"value":"0189","name":"LATIN CAPITAL LETTER AFRICAN D","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0256","titlecase_mapping":"","symbol":"\u0189"},394:{"value":"018A","name":"LATIN CAPITAL LETTER D WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER D HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0257","titlecase_mapping":"","symbol":"\u018A"},395:{"value":"018B","name":"LATIN CAPITAL LETTER D WITH TOPBAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER D TOPBAR","comment":"","uppercase_mapping":"","lowercase_mapping":"018C","titlecase_mapping":"","symbol":"\u018B"},398:{"value":"018E","name":"LATIN CAPITAL LETTER REVERSED E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER TURNED E","comment":"","uppercase_mapping":"","lowercase_mapping":"01DD","titlecase_mapping":"","symbol":"\u018E"},399:{"value":"018F","name":"LATIN CAPITAL LETTER SCHWA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0259","titlecase_mapping":"","symbol":"\u018F"},400:{"value":"0190","name":"LATIN CAPITAL LETTER OPEN E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER EPSILON","comment":"","uppercase_mapping":"","lowercase_mapping":"025B","titlecase_mapping":"","symbol":"\u0190"},401:{"value":"0191","name":"LATIN CAPITAL LETTER F WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER F HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0192","titlecase_mapping":"","symbol":"\u0191"},403:{"value":"0193","name":"LATIN CAPITAL LETTER G WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0260","titlecase_mapping":"","symbol":"\u0193"},404:{"value":"0194","name":"LATIN CAPITAL LETTER GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0263","titlecase_mapping":"","symbol":"\u0194"},406:{"value":"0196","name":"LATIN CAPITAL LETTER IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0269","titlecase_mapping":"","symbol":"\u0196"},407:{"value":"0197","name":"LATIN CAPITAL LETTER I WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER BARRED I","comment":"","uppercase_mapping":"","lowercase_mapping":"0268","titlecase_mapping":"","symbol":"\u0197"},408:{"value":"0198","name":"LATIN CAPITAL LETTER K WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER K HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0199","titlecase_mapping":"","symbol":"\u0198"},412:{"value":"019C","name":"LATIN CAPITAL LETTER TURNED M","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"026F","titlecase_mapping":"","symbol":"\u019C"},413:{"value":"019D","name":"LATIN CAPITAL LETTER N WITH LEFT HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER N HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0272","titlecase_mapping":"","symbol":"\u019D"},415:{"value":"019F","name":"LATIN CAPITAL LETTER O WITH MIDDLE TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER BARRED O","comment":"","uppercase_mapping":"","lowercase_mapping":"0275","titlecase_mapping":"","symbol":"\u019F"},416:{"value":"01A0","name":"LATIN CAPITAL LETTER O WITH HORN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 031B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O HORN","comment":"","uppercase_mapping":"","lowercase_mapping":"01A1","titlecase_mapping":"","symbol":"\u01A0"},418:{"value":"01A2","name":"LATIN CAPITAL LETTER OI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O I","comment":"","uppercase_mapping":"","lowercase_mapping":"01A3","titlecase_mapping":"","symbol":"\u01A2"},420:{"value":"01A4","name":"LATIN CAPITAL LETTER P WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER P HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"01A5","titlecase_mapping":"","symbol":"\u01A4"},422:{"value":"01A6","name":"LATIN LETTER YR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN LETTER Y R","comment":"","uppercase_mapping":"","lowercase_mapping":"0280","titlecase_mapping":"","symbol":"\u01A6"},423:{"value":"01A7","name":"LATIN CAPITAL LETTER TONE TWO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01A8","titlecase_mapping":"","symbol":"\u01A7"},425:{"value":"01A9","name":"LATIN CAPITAL LETTER ESH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0283","titlecase_mapping":"","symbol":"\u01A9"},428:{"value":"01AC","name":"LATIN CAPITAL LETTER T WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER T HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"01AD","titlecase_mapping":"","symbol":"\u01AC"},430:{"value":"01AE","name":"LATIN CAPITAL LETTER T WITH RETROFLEX HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER T RETROFLEX HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0288","titlecase_mapping":"","symbol":"\u01AE"},431:{"value":"01AF","name":"LATIN CAPITAL LETTER U WITH HORN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 031B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U HORN","comment":"","uppercase_mapping":"","lowercase_mapping":"01B0","titlecase_mapping":"","symbol":"\u01AF"},433:{"value":"01B1","name":"LATIN CAPITAL LETTER UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"028A","titlecase_mapping":"","symbol":"\u01B1"},434:{"value":"01B2","name":"LATIN CAPITAL LETTER V WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER SCRIPT V","comment":"","uppercase_mapping":"","lowercase_mapping":"028B","titlecase_mapping":"","symbol":"\u01B2"},435:{"value":"01B3","name":"LATIN CAPITAL LETTER Y WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Y HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"01B4","titlecase_mapping":"","symbol":"\u01B3"},437:{"value":"01B5","name":"LATIN CAPITAL LETTER Z WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER Z BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"01B6","titlecase_mapping":"","symbol":"\u01B5"},439:{"value":"01B7","name":"LATIN CAPITAL LETTER EZH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER YOGH","comment":"","uppercase_mapping":"","lowercase_mapping":"0292","titlecase_mapping":"","symbol":"\u01B7"},440:{"value":"01B8","name":"LATIN CAPITAL LETTER EZH REVERSED","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER REVERSED YOGH","comment":"","uppercase_mapping":"","lowercase_mapping":"01B9","titlecase_mapping":"","symbol":"\u01B8"},444:{"value":"01BC","name":"LATIN CAPITAL LETTER TONE FIVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01BD","titlecase_mapping":"","symbol":"\u01BC"},452:{"value":"01C4","name":"LATIN CAPITAL LETTER DZ WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044 017D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER D Z HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01C6","titlecase_mapping":"01C5","symbol":"\u01C4"},455:{"value":"01C7","name":"LATIN CAPITAL LETTER LJ","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER L J","comment":"","uppercase_mapping":"","lowercase_mapping":"01C9","titlecase_mapping":"01C8","symbol":"\u01C7"},458:{"value":"01CA","name":"LATIN CAPITAL LETTER NJ","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER N J","comment":"","uppercase_mapping":"","lowercase_mapping":"01CC","titlecase_mapping":"01CB","symbol":"\u01CA"},461:{"value":"01CD","name":"LATIN CAPITAL LETTER A WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01CE","titlecase_mapping":"","symbol":"\u01CD"},463:{"value":"01CF","name":"LATIN CAPITAL LETTER I WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER I HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01D0","titlecase_mapping":"","symbol":"\u01CF"},465:{"value":"01D1","name":"LATIN CAPITAL LETTER O WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01D2","titlecase_mapping":"","symbol":"\u01D1"},467:{"value":"01D3","name":"LATIN CAPITAL LETTER U WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01D4","titlecase_mapping":"","symbol":"\u01D3"},469:{"value":"01D5","name":"LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00DC 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U DIAERESIS MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"01D6","titlecase_mapping":"","symbol":"\u01D5"},471:{"value":"01D7","name":"LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00DC 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U DIAERESIS ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"01D8","titlecase_mapping":"","symbol":"\u01D7"},473:{"value":"01D9","name":"LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00DC 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U DIAERESIS HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01DA","titlecase_mapping":"","symbol":"\u01D9"},475:{"value":"01DB","name":"LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00DC 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER U DIAERESIS GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"01DC","titlecase_mapping":"","symbol":"\u01DB"},478:{"value":"01DE","name":"LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C4 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A DIAERESIS MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"01DF","titlecase_mapping":"","symbol":"\u01DE"},480:{"value":"01E0","name":"LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0226 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A DOT MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"01E1","titlecase_mapping":"","symbol":"\u01E0"},482:{"value":"01E2","name":"LATIN CAPITAL LETTER AE WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C6 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER A E MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"01E3","titlecase_mapping":"","symbol":"\u01E2"},484:{"value":"01E4","name":"LATIN CAPITAL LETTER G WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"01E5","titlecase_mapping":"","symbol":"\u01E4"},486:{"value":"01E6","name":"LATIN CAPITAL LETTER G WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER G HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01E7","titlecase_mapping":"","symbol":"\u01E6"},488:{"value":"01E8","name":"LATIN CAPITAL LETTER K WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004B 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER K HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01E9","titlecase_mapping":"","symbol":"\u01E8"},490:{"value":"01EA","name":"LATIN CAPITAL LETTER O WITH OGONEK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01EB","titlecase_mapping":"","symbol":"\u01EA"},492:{"value":"01EC","name":"LATIN CAPITAL LETTER O WITH OGONEK AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01EA 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER O OGONEK MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"01ED","titlecase_mapping":"","symbol":"\u01EC"},494:{"value":"01EE","name":"LATIN CAPITAL LETTER EZH WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01B7 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LATIN CAPITAL LETTER YOGH HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"01EF","titlecase_mapping":"","symbol":"\u01EE"},497:{"value":"01F1","name":"LATIN CAPITAL LETTER DZ","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01F3","titlecase_mapping":"01F2","symbol":"\u01F1"},500:{"value":"01F4","name":"LATIN CAPITAL LETTER G WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01F5","titlecase_mapping":"","symbol":"\u01F4"},502:{"value":"01F6","name":"LATIN CAPITAL LETTER HWAIR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0195","titlecase_mapping":"","symbol":"\u01F6"},503:{"value":"01F7","name":"LATIN CAPITAL LETTER WYNN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01BF","titlecase_mapping":"","symbol":"\u01F7"},504:{"value":"01F8","name":"LATIN CAPITAL LETTER N WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01F9","titlecase_mapping":"","symbol":"\u01F8"},506:{"value":"01FA","name":"LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01FB","titlecase_mapping":"","symbol":"\u01FA"},508:{"value":"01FC","name":"LATIN CAPITAL LETTER AE WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C6 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01FD","titlecase_mapping":"","symbol":"\u01FC"},510:{"value":"01FE","name":"LATIN CAPITAL LETTER O WITH STROKE AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D8 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"01FF","titlecase_mapping":"","symbol":"\u01FE"},512:{"value":"0200","name":"LATIN CAPITAL LETTER A WITH DOUBLE GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0201","titlecase_mapping":"","symbol":"\u0200"},514:{"value":"0202","name":"LATIN CAPITAL LETTER A WITH INVERTED BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0203","titlecase_mapping":"","symbol":"\u0202"},516:{"value":"0204","name":"LATIN CAPITAL LETTER E WITH DOUBLE GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0205","titlecase_mapping":"","symbol":"\u0204"},518:{"value":"0206","name":"LATIN CAPITAL LETTER E WITH INVERTED BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0207","titlecase_mapping":"","symbol":"\u0206"},520:{"value":"0208","name":"LATIN CAPITAL LETTER I WITH DOUBLE GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0209","titlecase_mapping":"","symbol":"\u0208"},522:{"value":"020A","name":"LATIN CAPITAL LETTER I WITH INVERTED BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"020B","titlecase_mapping":"","symbol":"\u020A"},524:{"value":"020C","name":"LATIN CAPITAL LETTER O WITH DOUBLE GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"020D","titlecase_mapping":"","symbol":"\u020C"},526:{"value":"020E","name":"LATIN CAPITAL LETTER O WITH INVERTED BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"020F","titlecase_mapping":"","symbol":"\u020E"},528:{"value":"0210","name":"LATIN CAPITAL LETTER R WITH DOUBLE GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0211","titlecase_mapping":"","symbol":"\u0210"},530:{"value":"0212","name":"LATIN CAPITAL LETTER R WITH INVERTED BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0213","titlecase_mapping":"","symbol":"\u0212"},532:{"value":"0214","name":"LATIN CAPITAL LETTER U WITH DOUBLE GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0215","titlecase_mapping":"","symbol":"\u0214"},534:{"value":"0216","name":"LATIN CAPITAL LETTER U WITH INVERTED BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0311","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0217","titlecase_mapping":"","symbol":"\u0216"},536:{"value":"0218","name":"LATIN CAPITAL LETTER S WITH COMMA BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 0326","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0219","titlecase_mapping":"","symbol":"\u0218"},538:{"value":"021A","name":"LATIN CAPITAL LETTER T WITH COMMA BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 0326","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"021B","titlecase_mapping":"","symbol":"\u021A"},540:{"value":"021C","name":"LATIN CAPITAL LETTER YOGH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"021D","titlecase_mapping":"","symbol":"\u021C"},542:{"value":"021E","name":"LATIN CAPITAL LETTER H WITH CARON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 030C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"021F","titlecase_mapping":"","symbol":"\u021E"},544:{"value":"0220","name":"LATIN CAPITAL LETTER N WITH LONG RIGHT LEG","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"019E","titlecase_mapping":"","symbol":"\u0220"},546:{"value":"0222","name":"LATIN CAPITAL LETTER OU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0223","titlecase_mapping":"","symbol":"\u0222"},548:{"value":"0224","name":"LATIN CAPITAL LETTER Z WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0225","titlecase_mapping":"","symbol":"\u0224"},550:{"value":"0226","name":"LATIN CAPITAL LETTER A WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0227","titlecase_mapping":"","symbol":"\u0226"},552:{"value":"0228","name":"LATIN CAPITAL LETTER E WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0229","titlecase_mapping":"","symbol":"\u0228"},554:{"value":"022A","name":"LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D6 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"022B","titlecase_mapping":"","symbol":"\u022A"},556:{"value":"022C","name":"LATIN CAPITAL LETTER O WITH TILDE AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D5 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"022D","titlecase_mapping":"","symbol":"\u022C"},558:{"value":"022E","name":"LATIN CAPITAL LETTER O WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"022F","titlecase_mapping":"","symbol":"\u022E"},560:{"value":"0230","name":"LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"022E 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0231","titlecase_mapping":"","symbol":"\u0230"},562:{"value":"0232","name":"LATIN CAPITAL LETTER Y WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0233","titlecase_mapping":"","symbol":"\u0232"},570:{"value":"023A","name":"LATIN CAPITAL LETTER A WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C65","titlecase_mapping":"","symbol":"\u023A"},571:{"value":"023B","name":"LATIN CAPITAL LETTER C WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"023C","titlecase_mapping":"","symbol":"\u023B"},573:{"value":"023D","name":"LATIN CAPITAL LETTER L WITH BAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"019A","titlecase_mapping":"","symbol":"\u023D"},574:{"value":"023E","name":"LATIN CAPITAL LETTER T WITH DIAGONAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C66","titlecase_mapping":"","symbol":"\u023E"},577:{"value":"0241","name":"LATIN CAPITAL LETTER GLOTTAL STOP","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0242","titlecase_mapping":"","symbol":"\u0241"},579:{"value":"0243","name":"LATIN CAPITAL LETTER B WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0180","titlecase_mapping":"","symbol":"\u0243"},580:{"value":"0244","name":"LATIN CAPITAL LETTER U BAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0289","titlecase_mapping":"","symbol":"\u0244"},581:{"value":"0245","name":"LATIN CAPITAL LETTER TURNED V","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"028C","titlecase_mapping":"","symbol":"\u0245"},582:{"value":"0246","name":"LATIN CAPITAL LETTER E WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0247","titlecase_mapping":"","symbol":"\u0246"},584:{"value":"0248","name":"LATIN CAPITAL LETTER J WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0249","titlecase_mapping":"","symbol":"\u0248"},586:{"value":"024A","name":"LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"024B","titlecase_mapping":"","symbol":"\u024A"},588:{"value":"024C","name":"LATIN CAPITAL LETTER R WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"024D","titlecase_mapping":"","symbol":"\u024C"},590:{"value":"024E","name":"LATIN CAPITAL LETTER Y WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"024F","titlecase_mapping":"","symbol":"\u024E"},880:{"value":"0370","name":"GREEK CAPITAL LETTER HETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0371","titlecase_mapping":"","symbol":"\u0370"},882:{"value":"0372","name":"GREEK CAPITAL LETTER ARCHAIC SAMPI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0373","titlecase_mapping":"","symbol":"\u0372"},886:{"value":"0376","name":"GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0377","titlecase_mapping":"","symbol":"\u0376"},895:{"value":"037F","name":"GREEK CAPITAL LETTER YOT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03F3","titlecase_mapping":"","symbol":"\u037F"},902:{"value":"0386","name":"GREEK CAPITAL LETTER ALPHA WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0391 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER ALPHA TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03AC","titlecase_mapping":"","symbol":"\u0386"},904:{"value":"0388","name":"GREEK CAPITAL LETTER EPSILON WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0395 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER EPSILON TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03AD","titlecase_mapping":"","symbol":"\u0388"},905:{"value":"0389","name":"GREEK CAPITAL LETTER ETA WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0397 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER ETA TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03AE","titlecase_mapping":"","symbol":"\u0389"},906:{"value":"038A","name":"GREEK CAPITAL LETTER IOTA WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER IOTA TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03AF","titlecase_mapping":"","symbol":"\u038A"},908:{"value":"038C","name":"GREEK CAPITAL LETTER OMICRON WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"039F 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER OMICRON TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03CC","titlecase_mapping":"","symbol":"\u038C"},910:{"value":"038E","name":"GREEK CAPITAL LETTER UPSILON WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER UPSILON TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03CD","titlecase_mapping":"","symbol":"\u038E"},911:{"value":"038F","name":"GREEK CAPITAL LETTER OMEGA WITH TONOS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A9 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER OMEGA TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"03CE","titlecase_mapping":"","symbol":"\u038F"},913:{"value":"0391","name":"GREEK CAPITAL LETTER ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B1","titlecase_mapping":"","symbol":"\u0391"},914:{"value":"0392","name":"GREEK CAPITAL LETTER BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B2","titlecase_mapping":"","symbol":"\u0392"},915:{"value":"0393","name":"GREEK CAPITAL LETTER GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B3","titlecase_mapping":"","symbol":"\u0393"},916:{"value":"0394","name":"GREEK CAPITAL LETTER DELTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B4","titlecase_mapping":"","symbol":"\u0394"},917:{"value":"0395","name":"GREEK CAPITAL LETTER EPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B5","titlecase_mapping":"","symbol":"\u0395"},918:{"value":"0396","name":"GREEK CAPITAL LETTER ZETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B6","titlecase_mapping":"","symbol":"\u0396"},919:{"value":"0397","name":"GREEK CAPITAL LETTER ETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B7","titlecase_mapping":"","symbol":"\u0397"},920:{"value":"0398","name":"GREEK CAPITAL LETTER THETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B8","titlecase_mapping":"","symbol":"\u0398"},921:{"value":"0399","name":"GREEK CAPITAL LETTER IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B9","titlecase_mapping":"","symbol":"\u0399"},922:{"value":"039A","name":"GREEK CAPITAL LETTER KAPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03BA","titlecase_mapping":"","symbol":"\u039A"},923:{"value":"039B","name":"GREEK CAPITAL LETTER LAMDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER LAMBDA","comment":"","uppercase_mapping":"","lowercase_mapping":"03BB","titlecase_mapping":"","symbol":"\u039B"},924:{"value":"039C","name":"GREEK CAPITAL LETTER MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03BC","titlecase_mapping":"","symbol":"\u039C"},925:{"value":"039D","name":"GREEK CAPITAL LETTER NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03BD","titlecase_mapping":"","symbol":"\u039D"},926:{"value":"039E","name":"GREEK CAPITAL LETTER XI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03BE","titlecase_mapping":"","symbol":"\u039E"},927:{"value":"039F","name":"GREEK CAPITAL LETTER OMICRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03BF","titlecase_mapping":"","symbol":"\u039F"},928:{"value":"03A0","name":"GREEK CAPITAL LETTER PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C0","titlecase_mapping":"","symbol":"\u03A0"},929:{"value":"03A1","name":"GREEK CAPITAL LETTER RHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C1","titlecase_mapping":"","symbol":"\u03A1"},931:{"value":"03A3","name":"GREEK CAPITAL LETTER SIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C3","titlecase_mapping":"","symbol":"\u03A3"},932:{"value":"03A4","name":"GREEK CAPITAL LETTER TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C4","titlecase_mapping":"","symbol":"\u03A4"},933:{"value":"03A5","name":"GREEK CAPITAL LETTER UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C5","titlecase_mapping":"","symbol":"\u03A5"},934:{"value":"03A6","name":"GREEK CAPITAL LETTER PHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C6","titlecase_mapping":"","symbol":"\u03A6"},935:{"value":"03A7","name":"GREEK CAPITAL LETTER CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C7","titlecase_mapping":"","symbol":"\u03A7"},936:{"value":"03A8","name":"GREEK CAPITAL LETTER PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C8","titlecase_mapping":"","symbol":"\u03A8"},937:{"value":"03A9","name":"GREEK CAPITAL LETTER OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03C9","titlecase_mapping":"","symbol":"\u03A9"},938:{"value":"03AA","name":"GREEK CAPITAL LETTER IOTA WITH DIALYTIKA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER IOTA DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"03CA","titlecase_mapping":"","symbol":"\u03AA"},939:{"value":"03AB","name":"GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A5 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER UPSILON DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"03CB","titlecase_mapping":"","symbol":"\u03AB"},975:{"value":"03CF","name":"GREEK CAPITAL KAI SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03D7","titlecase_mapping":"","symbol":"\u03CF"},978:{"value":"03D2","name":"GREEK UPSILON WITH HOOK SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER UPSILON HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u03D2"},979:{"value":"03D3","name":"GREEK UPSILON WITH ACUTE AND HOOK SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03D2 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER UPSILON HOOK TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u03D3"},980:{"value":"03D4","name":"GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03D2 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u03D4"},984:{"value":"03D8","name":"GREEK LETTER ARCHAIC KOPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03D9","titlecase_mapping":"","symbol":"\u03D8"},986:{"value":"03DA","name":"GREEK LETTER STIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER STIGMA","comment":"","uppercase_mapping":"","lowercase_mapping":"03DB","titlecase_mapping":"","symbol":"\u03DA"},988:{"value":"03DC","name":"GREEK LETTER DIGAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER DIGAMMA","comment":"","uppercase_mapping":"","lowercase_mapping":"03DD","titlecase_mapping":"","symbol":"\u03DC"},990:{"value":"03DE","name":"GREEK LETTER KOPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER KOPPA","comment":"","uppercase_mapping":"","lowercase_mapping":"03DF","titlecase_mapping":"","symbol":"\u03DE"},992:{"value":"03E0","name":"GREEK LETTER SAMPI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER SAMPI","comment":"","uppercase_mapping":"","lowercase_mapping":"03E1","titlecase_mapping":"","symbol":"\u03E0"},994:{"value":"03E2","name":"COPTIC CAPITAL LETTER SHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER SHEI","comment":"","uppercase_mapping":"","lowercase_mapping":"03E3","titlecase_mapping":"","symbol":"\u03E2"},996:{"value":"03E4","name":"COPTIC CAPITAL LETTER FEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER FEI","comment":"","uppercase_mapping":"","lowercase_mapping":"03E5","titlecase_mapping":"","symbol":"\u03E4"},998:{"value":"03E6","name":"COPTIC CAPITAL LETTER KHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER KHEI","comment":"","uppercase_mapping":"","lowercase_mapping":"03E7","titlecase_mapping":"","symbol":"\u03E6"},1000:{"value":"03E8","name":"COPTIC CAPITAL LETTER HORI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER HORI","comment":"","uppercase_mapping":"","lowercase_mapping":"03E9","titlecase_mapping":"","symbol":"\u03E8"},1002:{"value":"03EA","name":"COPTIC CAPITAL LETTER GANGIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER GANGIA","comment":"","uppercase_mapping":"","lowercase_mapping":"03EB","titlecase_mapping":"","symbol":"\u03EA"},1004:{"value":"03EC","name":"COPTIC CAPITAL LETTER SHIMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER SHIMA","comment":"","uppercase_mapping":"","lowercase_mapping":"03ED","titlecase_mapping":"","symbol":"\u03EC"},1006:{"value":"03EE","name":"COPTIC CAPITAL LETTER DEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK CAPITAL LETTER DEI","comment":"","uppercase_mapping":"","lowercase_mapping":"03EF","titlecase_mapping":"","symbol":"\u03EE"},1012:{"value":"03F4","name":"GREEK CAPITAL THETA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0398","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03B8","titlecase_mapping":"","symbol":"\u03F4"},1015:{"value":"03F7","name":"GREEK CAPITAL LETTER SHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03F8","titlecase_mapping":"","symbol":"\u03F7"},1017:{"value":"03F9","name":"GREEK CAPITAL LUNATE SIGMA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03F2","titlecase_mapping":"","symbol":"\u03F9"},1018:{"value":"03FA","name":"GREEK CAPITAL LETTER SAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"03FB","titlecase_mapping":"","symbol":"\u03FA"},1021:{"value":"03FD","name":"GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"037B","titlecase_mapping":"","symbol":"\u03FD"},1022:{"value":"03FE","name":"GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"037C","titlecase_mapping":"","symbol":"\u03FE"},1023:{"value":"03FF","name":"GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"037D","titlecase_mapping":"","symbol":"\u03FF"},1024:{"value":"0400","name":"CYRILLIC CAPITAL LETTER IE WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0415 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0450","titlecase_mapping":"","symbol":"\u0400"},1025:{"value":"0401","name":"CYRILLIC CAPITAL LETTER IO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0415 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0451","titlecase_mapping":"","symbol":"\u0401"},1026:{"value":"0402","name":"CYRILLIC CAPITAL LETTER DJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0452","titlecase_mapping":"","symbol":"\u0402"},1027:{"value":"0403","name":"CYRILLIC CAPITAL LETTER GJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0413 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0453","titlecase_mapping":"","symbol":"\u0403"},1028:{"value":"0404","name":"CYRILLIC CAPITAL LETTER UKRAINIAN IE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER E","comment":"","uppercase_mapping":"","lowercase_mapping":"0454","titlecase_mapping":"","symbol":"\u0404"},1029:{"value":"0405","name":"CYRILLIC CAPITAL LETTER DZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0455","titlecase_mapping":"","symbol":"\u0405"},1030:{"value":"0406","name":"CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER I","comment":"","uppercase_mapping":"","lowercase_mapping":"0456","titlecase_mapping":"","symbol":"\u0406"},1031:{"value":"0407","name":"CYRILLIC CAPITAL LETTER YI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0406 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0457","titlecase_mapping":"","symbol":"\u0407"},1032:{"value":"0408","name":"CYRILLIC CAPITAL LETTER JE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0458","titlecase_mapping":"","symbol":"\u0408"},1033:{"value":"0409","name":"CYRILLIC CAPITAL LETTER LJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0459","titlecase_mapping":"","symbol":"\u0409"},1034:{"value":"040A","name":"CYRILLIC CAPITAL LETTER NJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"045A","titlecase_mapping":"","symbol":"\u040A"},1035:{"value":"040B","name":"CYRILLIC CAPITAL LETTER TSHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"045B","titlecase_mapping":"","symbol":"\u040B"},1036:{"value":"040C","name":"CYRILLIC CAPITAL LETTER KJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"041A 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"045C","titlecase_mapping":"","symbol":"\u040C"},1037:{"value":"040D","name":"CYRILLIC CAPITAL LETTER I WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0418 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"045D","titlecase_mapping":"","symbol":"\u040D"},1038:{"value":"040E","name":"CYRILLIC CAPITAL LETTER SHORT U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0423 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"045E","titlecase_mapping":"","symbol":"\u040E"},1039:{"value":"040F","name":"CYRILLIC CAPITAL LETTER DZHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"045F","titlecase_mapping":"","symbol":"\u040F"},1040:{"value":"0410","name":"CYRILLIC CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0430","titlecase_mapping":"","symbol":"\u0410"},1041:{"value":"0411","name":"CYRILLIC CAPITAL LETTER BE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0431","titlecase_mapping":"","symbol":"\u0411"},1042:{"value":"0412","name":"CYRILLIC CAPITAL LETTER VE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0432","titlecase_mapping":"","symbol":"\u0412"},1043:{"value":"0413","name":"CYRILLIC CAPITAL LETTER GHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER GE","comment":"","uppercase_mapping":"","lowercase_mapping":"0433","titlecase_mapping":"","symbol":"\u0413"},1044:{"value":"0414","name":"CYRILLIC CAPITAL LETTER DE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0434","titlecase_mapping":"","symbol":"\u0414"},1045:{"value":"0415","name":"CYRILLIC CAPITAL LETTER IE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0435","titlecase_mapping":"","symbol":"\u0415"},1046:{"value":"0416","name":"CYRILLIC CAPITAL LETTER ZHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0436","titlecase_mapping":"","symbol":"\u0416"},1047:{"value":"0417","name":"CYRILLIC CAPITAL LETTER ZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0437","titlecase_mapping":"","symbol":"\u0417"},1048:{"value":"0418","name":"CYRILLIC CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER II","comment":"","uppercase_mapping":"","lowercase_mapping":"0438","titlecase_mapping":"","symbol":"\u0418"},1049:{"value":"0419","name":"CYRILLIC CAPITAL LETTER SHORT I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0418 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER SHORT II","comment":"","uppercase_mapping":"","lowercase_mapping":"0439","titlecase_mapping":"","symbol":"\u0419"},1050:{"value":"041A","name":"CYRILLIC CAPITAL LETTER KA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"043A","titlecase_mapping":"","symbol":"\u041A"},1051:{"value":"041B","name":"CYRILLIC CAPITAL LETTER EL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"043B","titlecase_mapping":"","symbol":"\u041B"},1052:{"value":"041C","name":"CYRILLIC CAPITAL LETTER EM","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"043C","titlecase_mapping":"","symbol":"\u041C"},1053:{"value":"041D","name":"CYRILLIC CAPITAL LETTER EN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"043D","titlecase_mapping":"","symbol":"\u041D"},1054:{"value":"041E","name":"CYRILLIC CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"043E","titlecase_mapping":"","symbol":"\u041E"},1055:{"value":"041F","name":"CYRILLIC CAPITAL LETTER PE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"043F","titlecase_mapping":"","symbol":"\u041F"},1056:{"value":"0420","name":"CYRILLIC CAPITAL LETTER ER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0440","titlecase_mapping":"","symbol":"\u0420"},1057:{"value":"0421","name":"CYRILLIC CAPITAL LETTER ES","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0441","titlecase_mapping":"","symbol":"\u0421"},1058:{"value":"0422","name":"CYRILLIC CAPITAL LETTER TE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0442","titlecase_mapping":"","symbol":"\u0422"},1059:{"value":"0423","name":"CYRILLIC CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0443","titlecase_mapping":"","symbol":"\u0423"},1060:{"value":"0424","name":"CYRILLIC CAPITAL LETTER EF","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0444","titlecase_mapping":"","symbol":"\u0424"},1061:{"value":"0425","name":"CYRILLIC CAPITAL LETTER HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER KHA","comment":"","uppercase_mapping":"","lowercase_mapping":"0445","titlecase_mapping":"","symbol":"\u0425"},1062:{"value":"0426","name":"CYRILLIC CAPITAL LETTER TSE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0446","titlecase_mapping":"","symbol":"\u0426"},1063:{"value":"0427","name":"CYRILLIC CAPITAL LETTER CHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0447","titlecase_mapping":"","symbol":"\u0427"},1064:{"value":"0428","name":"CYRILLIC CAPITAL LETTER SHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0448","titlecase_mapping":"","symbol":"\u0428"},1065:{"value":"0429","name":"CYRILLIC CAPITAL LETTER SHCHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0449","titlecase_mapping":"","symbol":"\u0429"},1066:{"value":"042A","name":"CYRILLIC CAPITAL LETTER HARD SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"044A","titlecase_mapping":"","symbol":"\u042A"},1067:{"value":"042B","name":"CYRILLIC CAPITAL LETTER YERU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER YERI","comment":"","uppercase_mapping":"","lowercase_mapping":"044B","titlecase_mapping":"","symbol":"\u042B"},1068:{"value":"042C","name":"CYRILLIC CAPITAL LETTER SOFT SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"044C","titlecase_mapping":"","symbol":"\u042C"},1069:{"value":"042D","name":"CYRILLIC CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER REVERSED E","comment":"","uppercase_mapping":"","lowercase_mapping":"044D","titlecase_mapping":"","symbol":"\u042D"},1070:{"value":"042E","name":"CYRILLIC CAPITAL LETTER YU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER IU","comment":"","uppercase_mapping":"","lowercase_mapping":"044E","titlecase_mapping":"","symbol":"\u042E"},1071:{"value":"042F","name":"CYRILLIC CAPITAL LETTER YA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER IA","comment":"","uppercase_mapping":"","lowercase_mapping":"044F","titlecase_mapping":"","symbol":"\u042F"},1120:{"value":"0460","name":"CYRILLIC CAPITAL LETTER OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0461","titlecase_mapping":"","symbol":"\u0460"},1122:{"value":"0462","name":"CYRILLIC CAPITAL LETTER YAT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0463","titlecase_mapping":"","symbol":"\u0462"},1124:{"value":"0464","name":"CYRILLIC CAPITAL LETTER IOTIFIED E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0465","titlecase_mapping":"","symbol":"\u0464"},1126:{"value":"0466","name":"CYRILLIC CAPITAL LETTER LITTLE YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0467","titlecase_mapping":"","symbol":"\u0466"},1128:{"value":"0468","name":"CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0469","titlecase_mapping":"","symbol":"\u0468"},1130:{"value":"046A","name":"CYRILLIC CAPITAL LETTER BIG YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"046B","titlecase_mapping":"","symbol":"\u046A"},1132:{"value":"046C","name":"CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"046D","titlecase_mapping":"","symbol":"\u046C"},1134:{"value":"046E","name":"CYRILLIC CAPITAL LETTER KSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"046F","titlecase_mapping":"","symbol":"\u046E"},1136:{"value":"0470","name":"CYRILLIC CAPITAL LETTER PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0471","titlecase_mapping":"","symbol":"\u0470"},1138:{"value":"0472","name":"CYRILLIC CAPITAL LETTER FITA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0473","titlecase_mapping":"","symbol":"\u0472"},1140:{"value":"0474","name":"CYRILLIC CAPITAL LETTER IZHITSA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0475","titlecase_mapping":"","symbol":"\u0474"},1142:{"value":"0476","name":"CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0474 030F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"0477","titlecase_mapping":"","symbol":"\u0476"},1144:{"value":"0478","name":"CYRILLIC CAPITAL LETTER UK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER UK DIGRAPH","comment":"","uppercase_mapping":"","lowercase_mapping":"0479","titlecase_mapping":"","symbol":"\u0478"},1146:{"value":"047A","name":"CYRILLIC CAPITAL LETTER ROUND OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"047B","titlecase_mapping":"","symbol":"\u047A"},1148:{"value":"047C","name":"CYRILLIC CAPITAL LETTER OMEGA WITH TITLO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER OMEGA TITLO","comment":"","uppercase_mapping":"","lowercase_mapping":"047D","titlecase_mapping":"","symbol":"\u047C"},1150:{"value":"047E","name":"CYRILLIC CAPITAL LETTER OT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"047F","titlecase_mapping":"","symbol":"\u047E"},1152:{"value":"0480","name":"CYRILLIC CAPITAL LETTER KOPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0481","titlecase_mapping":"","symbol":"\u0480"},1162:{"value":"048A","name":"CYRILLIC CAPITAL LETTER SHORT I WITH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"048B","titlecase_mapping":"","symbol":"\u048A"},1164:{"value":"048C","name":"CYRILLIC CAPITAL LETTER SEMISOFT SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"048D","titlecase_mapping":"","symbol":"\u048C"},1166:{"value":"048E","name":"CYRILLIC CAPITAL LETTER ER WITH TICK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"048F","titlecase_mapping":"","symbol":"\u048E"},1168:{"value":"0490","name":"CYRILLIC CAPITAL LETTER GHE WITH UPTURN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER GE WITH UPTURN","comment":"","uppercase_mapping":"","lowercase_mapping":"0491","titlecase_mapping":"","symbol":"\u0490"},1170:{"value":"0492","name":"CYRILLIC CAPITAL LETTER GHE WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER GE BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"0493","titlecase_mapping":"","symbol":"\u0492"},1172:{"value":"0494","name":"CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER GE HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"0495","titlecase_mapping":"","symbol":"\u0494"},1174:{"value":"0496","name":"CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"0497","titlecase_mapping":"","symbol":"\u0496"},1176:{"value":"0498","name":"CYRILLIC CAPITAL LETTER ZE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER ZE CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"0499","titlecase_mapping":"","symbol":"\u0498"},1178:{"value":"049A","name":"CYRILLIC CAPITAL LETTER KA WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"049B","titlecase_mapping":"","symbol":"\u049A"},1180:{"value":"049C","name":"CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER KA VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"049D","titlecase_mapping":"","symbol":"\u049C"},1182:{"value":"049E","name":"CYRILLIC CAPITAL LETTER KA WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER KA BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"049F","titlecase_mapping":"","symbol":"\u049E"},1184:{"value":"04A0","name":"CYRILLIC CAPITAL LETTER BASHKIR KA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER REVERSED GE KA","comment":"","uppercase_mapping":"","lowercase_mapping":"04A1","titlecase_mapping":"","symbol":"\u04A0"},1186:{"value":"04A2","name":"CYRILLIC CAPITAL LETTER EN WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"04A3","titlecase_mapping":"","symbol":"\u04A2"},1188:{"value":"04A4","name":"CYRILLIC CAPITAL LIGATURE EN GHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER EN GE","comment":"","uppercase_mapping":"","lowercase_mapping":"04A5","titlecase_mapping":"","symbol":"\u04A4"},1190:{"value":"04A6","name":"CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER PE HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"04A7","titlecase_mapping":"","symbol":"\u04A6"},1192:{"value":"04A8","name":"CYRILLIC CAPITAL LETTER ABKHASIAN HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER O HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"04A9","titlecase_mapping":"","symbol":"\u04A8"},1194:{"value":"04AA","name":"CYRILLIC CAPITAL LETTER ES WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER ES CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"04AB","titlecase_mapping":"","symbol":"\u04AA"},1196:{"value":"04AC","name":"CYRILLIC CAPITAL LETTER TE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"04AD","titlecase_mapping":"","symbol":"\u04AC"},1198:{"value":"04AE","name":"CYRILLIC CAPITAL LETTER STRAIGHT U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04AF","titlecase_mapping":"","symbol":"\u04AE"},1200:{"value":"04B0","name":"CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER STRAIGHT U BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"04B1","titlecase_mapping":"","symbol":"\u04B0"},1202:{"value":"04B2","name":"CYRILLIC CAPITAL LETTER HA WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"04B3","titlecase_mapping":"","symbol":"\u04B2"},1204:{"value":"04B4","name":"CYRILLIC CAPITAL LIGATURE TE TSE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER TE TSE","comment":"","uppercase_mapping":"","lowercase_mapping":"04B5","titlecase_mapping":"","symbol":"\u04B4"},1206:{"value":"04B6","name":"CYRILLIC CAPITAL LETTER CHE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"04B7","titlecase_mapping":"","symbol":"\u04B6"},1208:{"value":"04B8","name":"CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER CHE VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"04B9","titlecase_mapping":"","symbol":"\u04B8"},1210:{"value":"04BA","name":"CYRILLIC CAPITAL LETTER SHHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER H","comment":"","uppercase_mapping":"","lowercase_mapping":"04BB","titlecase_mapping":"","symbol":"\u04BA"},1212:{"value":"04BC","name":"CYRILLIC CAPITAL LETTER ABKHASIAN CHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER IE HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"04BD","titlecase_mapping":"","symbol":"\u04BC"},1214:{"value":"04BE","name":"CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER IE HOOK OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"04BF","titlecase_mapping":"","symbol":"\u04BE"},1216:{"value":"04C0","name":"CYRILLIC LETTER PALOCHKA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC LETTER I","comment":"","uppercase_mapping":"","lowercase_mapping":"04CF","titlecase_mapping":"","symbol":"\u04C0"},1217:{"value":"04C1","name":"CYRILLIC CAPITAL LETTER ZHE WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0416 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER SHORT ZHE","comment":"","uppercase_mapping":"","lowercase_mapping":"04C2","titlecase_mapping":"","symbol":"\u04C1"},1219:{"value":"04C3","name":"CYRILLIC CAPITAL LETTER KA WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER KA HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"04C4","titlecase_mapping":"","symbol":"\u04C3"},1221:{"value":"04C5","name":"CYRILLIC CAPITAL LETTER EL WITH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04C6","titlecase_mapping":"","symbol":"\u04C5"},1223:{"value":"04C7","name":"CYRILLIC CAPITAL LETTER EN WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER EN HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"04C8","titlecase_mapping":"","symbol":"\u04C7"},1225:{"value":"04C9","name":"CYRILLIC CAPITAL LETTER EN WITH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04CA","titlecase_mapping":"","symbol":"\u04C9"},1227:{"value":"04CB","name":"CYRILLIC CAPITAL LETTER KHAKASSIAN CHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER","comment":"","uppercase_mapping":"","lowercase_mapping":"04CC","titlecase_mapping":"","symbol":"\u04CB"},1229:{"value":"04CD","name":"CYRILLIC CAPITAL LETTER EM WITH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04CE","titlecase_mapping":"","symbol":"\u04CD"},1232:{"value":"04D0","name":"CYRILLIC CAPITAL LETTER A WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0410 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04D1","titlecase_mapping":"","symbol":"\u04D0"},1234:{"value":"04D2","name":"CYRILLIC CAPITAL LETTER A WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0410 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04D3","titlecase_mapping":"","symbol":"\u04D2"},1236:{"value":"04D4","name":"CYRILLIC CAPITAL LIGATURE A IE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04D5","titlecase_mapping":"","symbol":"\u04D4"},1238:{"value":"04D6","name":"CYRILLIC CAPITAL LETTER IE WITH BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0415 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04D7","titlecase_mapping":"","symbol":"\u04D6"},1240:{"value":"04D8","name":"CYRILLIC CAPITAL LETTER SCHWA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04D9","titlecase_mapping":"","symbol":"\u04D8"},1242:{"value":"04DA","name":"CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"04D8 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04DB","titlecase_mapping":"","symbol":"\u04DA"},1244:{"value":"04DC","name":"CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0416 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04DD","titlecase_mapping":"","symbol":"\u04DC"},1246:{"value":"04DE","name":"CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0417 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04DF","titlecase_mapping":"","symbol":"\u04DE"},1248:{"value":"04E0","name":"CYRILLIC CAPITAL LETTER ABKHASIAN DZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04E1","titlecase_mapping":"","symbol":"\u04E0"},1250:{"value":"04E2","name":"CYRILLIC CAPITAL LETTER I WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0418 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04E3","titlecase_mapping":"","symbol":"\u04E2"},1252:{"value":"04E4","name":"CYRILLIC CAPITAL LETTER I WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0418 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04E5","titlecase_mapping":"","symbol":"\u04E4"},1254:{"value":"04E6","name":"CYRILLIC CAPITAL LETTER O WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"041E 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04E7","titlecase_mapping":"","symbol":"\u04E6"},1256:{"value":"04E8","name":"CYRILLIC CAPITAL LETTER BARRED O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04E9","titlecase_mapping":"","symbol":"\u04E8"},1258:{"value":"04EA","name":"CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"04E8 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04EB","titlecase_mapping":"","symbol":"\u04EA"},1260:{"value":"04EC","name":"CYRILLIC CAPITAL LETTER E WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"042D 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04ED","titlecase_mapping":"","symbol":"\u04EC"},1262:{"value":"04EE","name":"CYRILLIC CAPITAL LETTER U WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0423 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04EF","titlecase_mapping":"","symbol":"\u04EE"},1264:{"value":"04F0","name":"CYRILLIC CAPITAL LETTER U WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0423 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04F1","titlecase_mapping":"","symbol":"\u04F0"},1266:{"value":"04F2","name":"CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0423 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04F3","titlecase_mapping":"","symbol":"\u04F2"},1268:{"value":"04F4","name":"CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0427 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04F5","titlecase_mapping":"","symbol":"\u04F4"},1270:{"value":"04F6","name":"CYRILLIC CAPITAL LETTER GHE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04F7","titlecase_mapping":"","symbol":"\u04F6"},1272:{"value":"04F8","name":"CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"042B 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04F9","titlecase_mapping":"","symbol":"\u04F8"},1274:{"value":"04FA","name":"CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04FB","titlecase_mapping":"","symbol":"\u04FA"},1276:{"value":"04FC","name":"CYRILLIC CAPITAL LETTER HA WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04FD","titlecase_mapping":"","symbol":"\u04FC"},1278:{"value":"04FE","name":"CYRILLIC CAPITAL LETTER HA WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"04FF","titlecase_mapping":"","symbol":"\u04FE"},1280:{"value":"0500","name":"CYRILLIC CAPITAL LETTER KOMI DE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0501","titlecase_mapping":"","symbol":"\u0500"},1282:{"value":"0502","name":"CYRILLIC CAPITAL LETTER KOMI DJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0503","titlecase_mapping":"","symbol":"\u0502"},1284:{"value":"0504","name":"CYRILLIC CAPITAL LETTER KOMI ZJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0505","titlecase_mapping":"","symbol":"\u0504"},1286:{"value":"0506","name":"CYRILLIC CAPITAL LETTER KOMI DZJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0507","titlecase_mapping":"","symbol":"\u0506"},1288:{"value":"0508","name":"CYRILLIC CAPITAL LETTER KOMI LJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0509","titlecase_mapping":"","symbol":"\u0508"},1290:{"value":"050A","name":"CYRILLIC CAPITAL LETTER KOMI NJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"050B","titlecase_mapping":"","symbol":"\u050A"},1292:{"value":"050C","name":"CYRILLIC CAPITAL LETTER KOMI SJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"050D","titlecase_mapping":"","symbol":"\u050C"},1294:{"value":"050E","name":"CYRILLIC CAPITAL LETTER KOMI TJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"050F","titlecase_mapping":"","symbol":"\u050E"},1296:{"value":"0510","name":"CYRILLIC CAPITAL LETTER REVERSED ZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0511","titlecase_mapping":"","symbol":"\u0510"},1298:{"value":"0512","name":"CYRILLIC CAPITAL LETTER EL WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0513","titlecase_mapping":"","symbol":"\u0512"},1300:{"value":"0514","name":"CYRILLIC CAPITAL LETTER LHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0515","titlecase_mapping":"","symbol":"\u0514"},1302:{"value":"0516","name":"CYRILLIC CAPITAL LETTER RHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0517","titlecase_mapping":"","symbol":"\u0516"},1304:{"value":"0518","name":"CYRILLIC CAPITAL LETTER YAE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0519","titlecase_mapping":"","symbol":"\u0518"},1306:{"value":"051A","name":"CYRILLIC CAPITAL LETTER QA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"051B","titlecase_mapping":"","symbol":"\u051A"},1308:{"value":"051C","name":"CYRILLIC CAPITAL LETTER WE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"051D","titlecase_mapping":"","symbol":"\u051C"},1310:{"value":"051E","name":"CYRILLIC CAPITAL LETTER ALEUT KA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"051F","titlecase_mapping":"","symbol":"\u051E"},1312:{"value":"0520","name":"CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0521","titlecase_mapping":"","symbol":"\u0520"},1314:{"value":"0522","name":"CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0523","titlecase_mapping":"","symbol":"\u0522"},1316:{"value":"0524","name":"CYRILLIC CAPITAL LETTER PE WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0525","titlecase_mapping":"","symbol":"\u0524"},1318:{"value":"0526","name":"CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0527","titlecase_mapping":"","symbol":"\u0526"},1320:{"value":"0528","name":"CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0529","titlecase_mapping":"","symbol":"\u0528"},1322:{"value":"052A","name":"CYRILLIC CAPITAL LETTER DZZHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"052B","titlecase_mapping":"","symbol":"\u052A"},1324:{"value":"052C","name":"CYRILLIC CAPITAL LETTER DCHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"052D","titlecase_mapping":"","symbol":"\u052C"},1326:{"value":"052E","name":"CYRILLIC CAPITAL LETTER EL WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"052F","titlecase_mapping":"","symbol":"\u052E"},1329:{"value":"0531","name":"ARMENIAN CAPITAL LETTER AYB","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0561","titlecase_mapping":"","symbol":"\u0531"},1330:{"value":"0532","name":"ARMENIAN CAPITAL LETTER BEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0562","titlecase_mapping":"","symbol":"\u0532"},1331:{"value":"0533","name":"ARMENIAN CAPITAL LETTER GIM","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0563","titlecase_mapping":"","symbol":"\u0533"},1332:{"value":"0534","name":"ARMENIAN CAPITAL LETTER DA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0564","titlecase_mapping":"","symbol":"\u0534"},1333:{"value":"0535","name":"ARMENIAN CAPITAL LETTER ECH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0565","titlecase_mapping":"","symbol":"\u0535"},1334:{"value":"0536","name":"ARMENIAN CAPITAL LETTER ZA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0566","titlecase_mapping":"","symbol":"\u0536"},1335:{"value":"0537","name":"ARMENIAN CAPITAL LETTER EH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0567","titlecase_mapping":"","symbol":"\u0537"},1336:{"value":"0538","name":"ARMENIAN CAPITAL LETTER ET","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0568","titlecase_mapping":"","symbol":"\u0538"},1337:{"value":"0539","name":"ARMENIAN CAPITAL LETTER TO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0569","titlecase_mapping":"","symbol":"\u0539"},1338:{"value":"053A","name":"ARMENIAN CAPITAL LETTER ZHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"056A","titlecase_mapping":"","symbol":"\u053A"},1339:{"value":"053B","name":"ARMENIAN CAPITAL LETTER INI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"056B","titlecase_mapping":"","symbol":"\u053B"},1340:{"value":"053C","name":"ARMENIAN CAPITAL LETTER LIWN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"056C","titlecase_mapping":"","symbol":"\u053C"},1341:{"value":"053D","name":"ARMENIAN CAPITAL LETTER XEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"056D","titlecase_mapping":"","symbol":"\u053D"},1342:{"value":"053E","name":"ARMENIAN CAPITAL LETTER CA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"056E","titlecase_mapping":"","symbol":"\u053E"},1343:{"value":"053F","name":"ARMENIAN CAPITAL LETTER KEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"056F","titlecase_mapping":"","symbol":"\u053F"},1344:{"value":"0540","name":"ARMENIAN CAPITAL LETTER HO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0570","titlecase_mapping":"","symbol":"\u0540"},1345:{"value":"0541","name":"ARMENIAN CAPITAL LETTER JA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0571","titlecase_mapping":"","symbol":"\u0541"},1346:{"value":"0542","name":"ARMENIAN CAPITAL LETTER GHAD","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARMENIAN CAPITAL LETTER LAD","comment":"","uppercase_mapping":"","lowercase_mapping":"0572","titlecase_mapping":"","symbol":"\u0542"},1347:{"value":"0543","name":"ARMENIAN CAPITAL LETTER CHEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0573","titlecase_mapping":"","symbol":"\u0543"},1348:{"value":"0544","name":"ARMENIAN CAPITAL LETTER MEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0574","titlecase_mapping":"","symbol":"\u0544"},1349:{"value":"0545","name":"ARMENIAN CAPITAL LETTER YI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0575","titlecase_mapping":"","symbol":"\u0545"},1350:{"value":"0546","name":"ARMENIAN CAPITAL LETTER NOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0576","titlecase_mapping":"","symbol":"\u0546"},1351:{"value":"0547","name":"ARMENIAN CAPITAL LETTER SHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0577","titlecase_mapping":"","symbol":"\u0547"},1352:{"value":"0548","name":"ARMENIAN CAPITAL LETTER VO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0578","titlecase_mapping":"","symbol":"\u0548"},1353:{"value":"0549","name":"ARMENIAN CAPITAL LETTER CHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0579","titlecase_mapping":"","symbol":"\u0549"},1354:{"value":"054A","name":"ARMENIAN CAPITAL LETTER PEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"057A","titlecase_mapping":"","symbol":"\u054A"},1355:{"value":"054B","name":"ARMENIAN CAPITAL LETTER JHEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"057B","titlecase_mapping":"","symbol":"\u054B"},1356:{"value":"054C","name":"ARMENIAN CAPITAL LETTER RA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"057C","titlecase_mapping":"","symbol":"\u054C"},1357:{"value":"054D","name":"ARMENIAN CAPITAL LETTER SEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"057D","titlecase_mapping":"","symbol":"\u054D"},1358:{"value":"054E","name":"ARMENIAN CAPITAL LETTER VEW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"057E","titlecase_mapping":"","symbol":"\u054E"},1359:{"value":"054F","name":"ARMENIAN CAPITAL LETTER TIWN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"057F","titlecase_mapping":"","symbol":"\u054F"},1360:{"value":"0550","name":"ARMENIAN CAPITAL LETTER REH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0580","titlecase_mapping":"","symbol":"\u0550"},1361:{"value":"0551","name":"ARMENIAN CAPITAL LETTER CO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0581","titlecase_mapping":"","symbol":"\u0551"},1362:{"value":"0552","name":"ARMENIAN CAPITAL LETTER YIWN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0582","titlecase_mapping":"","symbol":"\u0552"},1363:{"value":"0553","name":"ARMENIAN CAPITAL LETTER PIWR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0583","titlecase_mapping":"","symbol":"\u0553"},1364:{"value":"0554","name":"ARMENIAN CAPITAL LETTER KEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0584","titlecase_mapping":"","symbol":"\u0554"},1365:{"value":"0555","name":"ARMENIAN CAPITAL LETTER OH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0585","titlecase_mapping":"","symbol":"\u0555"},1366:{"value":"0556","name":"ARMENIAN CAPITAL LETTER FEH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0586","titlecase_mapping":"","symbol":"\u0556"},4256:{"value":"10A0","name":"GEORGIAN CAPITAL LETTER AN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D00","titlecase_mapping":"","symbol":"\u10A0"},4257:{"value":"10A1","name":"GEORGIAN CAPITAL LETTER BAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D01","titlecase_mapping":"","symbol":"\u10A1"},4258:{"value":"10A2","name":"GEORGIAN CAPITAL LETTER GAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D02","titlecase_mapping":"","symbol":"\u10A2"},4259:{"value":"10A3","name":"GEORGIAN CAPITAL LETTER DON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D03","titlecase_mapping":"","symbol":"\u10A3"},4260:{"value":"10A4","name":"GEORGIAN CAPITAL LETTER EN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D04","titlecase_mapping":"","symbol":"\u10A4"},4261:{"value":"10A5","name":"GEORGIAN CAPITAL LETTER VIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D05","titlecase_mapping":"","symbol":"\u10A5"},4262:{"value":"10A6","name":"GEORGIAN CAPITAL LETTER ZEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D06","titlecase_mapping":"","symbol":"\u10A6"},4263:{"value":"10A7","name":"GEORGIAN CAPITAL LETTER TAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D07","titlecase_mapping":"","symbol":"\u10A7"},4264:{"value":"10A8","name":"GEORGIAN CAPITAL LETTER IN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D08","titlecase_mapping":"","symbol":"\u10A8"},4265:{"value":"10A9","name":"GEORGIAN CAPITAL LETTER KAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D09","titlecase_mapping":"","symbol":"\u10A9"},4266:{"value":"10AA","name":"GEORGIAN CAPITAL LETTER LAS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D0A","titlecase_mapping":"","symbol":"\u10AA"},4267:{"value":"10AB","name":"GEORGIAN CAPITAL LETTER MAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D0B","titlecase_mapping":"","symbol":"\u10AB"},4268:{"value":"10AC","name":"GEORGIAN CAPITAL LETTER NAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D0C","titlecase_mapping":"","symbol":"\u10AC"},4269:{"value":"10AD","name":"GEORGIAN CAPITAL LETTER ON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D0D","titlecase_mapping":"","symbol":"\u10AD"},4270:{"value":"10AE","name":"GEORGIAN CAPITAL LETTER PAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D0E","titlecase_mapping":"","symbol":"\u10AE"},4271:{"value":"10AF","name":"GEORGIAN CAPITAL LETTER ZHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D0F","titlecase_mapping":"","symbol":"\u10AF"},4272:{"value":"10B0","name":"GEORGIAN CAPITAL LETTER RAE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D10","titlecase_mapping":"","symbol":"\u10B0"},4273:{"value":"10B1","name":"GEORGIAN CAPITAL LETTER SAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D11","titlecase_mapping":"","symbol":"\u10B1"},4274:{"value":"10B2","name":"GEORGIAN CAPITAL LETTER TAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D12","titlecase_mapping":"","symbol":"\u10B2"},4275:{"value":"10B3","name":"GEORGIAN CAPITAL LETTER UN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D13","titlecase_mapping":"","symbol":"\u10B3"},4276:{"value":"10B4","name":"GEORGIAN CAPITAL LETTER PHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D14","titlecase_mapping":"","symbol":"\u10B4"},4277:{"value":"10B5","name":"GEORGIAN CAPITAL LETTER KHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D15","titlecase_mapping":"","symbol":"\u10B5"},4278:{"value":"10B6","name":"GEORGIAN CAPITAL LETTER GHAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D16","titlecase_mapping":"","symbol":"\u10B6"},4279:{"value":"10B7","name":"GEORGIAN CAPITAL LETTER QAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D17","titlecase_mapping":"","symbol":"\u10B7"},4280:{"value":"10B8","name":"GEORGIAN CAPITAL LETTER SHIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D18","titlecase_mapping":"","symbol":"\u10B8"},4281:{"value":"10B9","name":"GEORGIAN CAPITAL LETTER CHIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D19","titlecase_mapping":"","symbol":"\u10B9"},4282:{"value":"10BA","name":"GEORGIAN CAPITAL LETTER CAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D1A","titlecase_mapping":"","symbol":"\u10BA"},4283:{"value":"10BB","name":"GEORGIAN CAPITAL LETTER JIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D1B","titlecase_mapping":"","symbol":"\u10BB"},4284:{"value":"10BC","name":"GEORGIAN CAPITAL LETTER CIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D1C","titlecase_mapping":"","symbol":"\u10BC"},4285:{"value":"10BD","name":"GEORGIAN CAPITAL LETTER CHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D1D","titlecase_mapping":"","symbol":"\u10BD"},4286:{"value":"10BE","name":"GEORGIAN CAPITAL LETTER XAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D1E","titlecase_mapping":"","symbol":"\u10BE"},4287:{"value":"10BF","name":"GEORGIAN CAPITAL LETTER JHAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D1F","titlecase_mapping":"","symbol":"\u10BF"},4288:{"value":"10C0","name":"GEORGIAN CAPITAL LETTER HAE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D20","titlecase_mapping":"","symbol":"\u10C0"},4289:{"value":"10C1","name":"GEORGIAN CAPITAL LETTER HE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D21","titlecase_mapping":"","symbol":"\u10C1"},4290:{"value":"10C2","name":"GEORGIAN CAPITAL LETTER HIE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D22","titlecase_mapping":"","symbol":"\u10C2"},4291:{"value":"10C3","name":"GEORGIAN CAPITAL LETTER WE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D23","titlecase_mapping":"","symbol":"\u10C3"},4292:{"value":"10C4","name":"GEORGIAN CAPITAL LETTER HAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D24","titlecase_mapping":"","symbol":"\u10C4"},4293:{"value":"10C5","name":"GEORGIAN CAPITAL LETTER HOE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D25","titlecase_mapping":"","symbol":"\u10C5"},4295:{"value":"10C7","name":"GEORGIAN CAPITAL LETTER YN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D27","titlecase_mapping":"","symbol":"\u10C7"},4301:{"value":"10CD","name":"GEORGIAN CAPITAL LETTER AEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2D2D","titlecase_mapping":"","symbol":"\u10CD"},5024:{"value":"13A0","name":"CHEROKEE LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB70","titlecase_mapping":"","symbol":"\u13A0"},5025:{"value":"13A1","name":"CHEROKEE LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB71","titlecase_mapping":"","symbol":"\u13A1"},5026:{"value":"13A2","name":"CHEROKEE LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB72","titlecase_mapping":"","symbol":"\u13A2"},5027:{"value":"13A3","name":"CHEROKEE LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB73","titlecase_mapping":"","symbol":"\u13A3"},5028:{"value":"13A4","name":"CHEROKEE LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB74","titlecase_mapping":"","symbol":"\u13A4"},5029:{"value":"13A5","name":"CHEROKEE LETTER V","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB75","titlecase_mapping":"","symbol":"\u13A5"},5030:{"value":"13A6","name":"CHEROKEE LETTER GA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB76","titlecase_mapping":"","symbol":"\u13A6"},5031:{"value":"13A7","name":"CHEROKEE LETTER KA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB77","titlecase_mapping":"","symbol":"\u13A7"},5032:{"value":"13A8","name":"CHEROKEE LETTER GE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB78","titlecase_mapping":"","symbol":"\u13A8"},5033:{"value":"13A9","name":"CHEROKEE LETTER GI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB79","titlecase_mapping":"","symbol":"\u13A9"},5034:{"value":"13AA","name":"CHEROKEE LETTER GO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB7A","titlecase_mapping":"","symbol":"\u13AA"},5035:{"value":"13AB","name":"CHEROKEE LETTER GU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB7B","titlecase_mapping":"","symbol":"\u13AB"},5036:{"value":"13AC","name":"CHEROKEE LETTER GV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB7C","titlecase_mapping":"","symbol":"\u13AC"},5037:{"value":"13AD","name":"CHEROKEE LETTER HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB7D","titlecase_mapping":"","symbol":"\u13AD"},5038:{"value":"13AE","name":"CHEROKEE LETTER HE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB7E","titlecase_mapping":"","symbol":"\u13AE"},5039:{"value":"13AF","name":"CHEROKEE LETTER HI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB7F","titlecase_mapping":"","symbol":"\u13AF"},5040:{"value":"13B0","name":"CHEROKEE LETTER HO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB80","titlecase_mapping":"","symbol":"\u13B0"},5041:{"value":"13B1","name":"CHEROKEE LETTER HU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB81","titlecase_mapping":"","symbol":"\u13B1"},5042:{"value":"13B2","name":"CHEROKEE LETTER HV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB82","titlecase_mapping":"","symbol":"\u13B2"},5043:{"value":"13B3","name":"CHEROKEE LETTER LA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB83","titlecase_mapping":"","symbol":"\u13B3"},5044:{"value":"13B4","name":"CHEROKEE LETTER LE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB84","titlecase_mapping":"","symbol":"\u13B4"},5045:{"value":"13B5","name":"CHEROKEE LETTER LI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB85","titlecase_mapping":"","symbol":"\u13B5"},5046:{"value":"13B6","name":"CHEROKEE LETTER LO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB86","titlecase_mapping":"","symbol":"\u13B6"},5047:{"value":"13B7","name":"CHEROKEE LETTER LU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB87","titlecase_mapping":"","symbol":"\u13B7"},5048:{"value":"13B8","name":"CHEROKEE LETTER LV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB88","titlecase_mapping":"","symbol":"\u13B8"},5049:{"value":"13B9","name":"CHEROKEE LETTER MA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB89","titlecase_mapping":"","symbol":"\u13B9"},5050:{"value":"13BA","name":"CHEROKEE LETTER ME","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB8A","titlecase_mapping":"","symbol":"\u13BA"},5051:{"value":"13BB","name":"CHEROKEE LETTER MI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB8B","titlecase_mapping":"","symbol":"\u13BB"},5052:{"value":"13BC","name":"CHEROKEE LETTER MO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB8C","titlecase_mapping":"","symbol":"\u13BC"},5053:{"value":"13BD","name":"CHEROKEE LETTER MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB8D","titlecase_mapping":"","symbol":"\u13BD"},5054:{"value":"13BE","name":"CHEROKEE LETTER NA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB8E","titlecase_mapping":"","symbol":"\u13BE"},5055:{"value":"13BF","name":"CHEROKEE LETTER HNA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB8F","titlecase_mapping":"","symbol":"\u13BF"},5056:{"value":"13C0","name":"CHEROKEE LETTER NAH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB90","titlecase_mapping":"","symbol":"\u13C0"},5057:{"value":"13C1","name":"CHEROKEE LETTER NE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB91","titlecase_mapping":"","symbol":"\u13C1"},5058:{"value":"13C2","name":"CHEROKEE LETTER NI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB92","titlecase_mapping":"","symbol":"\u13C2"},5059:{"value":"13C3","name":"CHEROKEE LETTER NO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB93","titlecase_mapping":"","symbol":"\u13C3"},5060:{"value":"13C4","name":"CHEROKEE LETTER NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB94","titlecase_mapping":"","symbol":"\u13C4"},5061:{"value":"13C5","name":"CHEROKEE LETTER NV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB95","titlecase_mapping":"","symbol":"\u13C5"},5062:{"value":"13C6","name":"CHEROKEE LETTER QUA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB96","titlecase_mapping":"","symbol":"\u13C6"},5063:{"value":"13C7","name":"CHEROKEE LETTER QUE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB97","titlecase_mapping":"","symbol":"\u13C7"},5064:{"value":"13C8","name":"CHEROKEE LETTER QUI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB98","titlecase_mapping":"","symbol":"\u13C8"},5065:{"value":"13C9","name":"CHEROKEE LETTER QUO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB99","titlecase_mapping":"","symbol":"\u13C9"},5066:{"value":"13CA","name":"CHEROKEE LETTER QUU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB9A","titlecase_mapping":"","symbol":"\u13CA"},5067:{"value":"13CB","name":"CHEROKEE LETTER QUV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB9B","titlecase_mapping":"","symbol":"\u13CB"},5068:{"value":"13CC","name":"CHEROKEE LETTER SA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB9C","titlecase_mapping":"","symbol":"\u13CC"},5069:{"value":"13CD","name":"CHEROKEE LETTER S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB9D","titlecase_mapping":"","symbol":"\u13CD"},5070:{"value":"13CE","name":"CHEROKEE LETTER SE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB9E","titlecase_mapping":"","symbol":"\u13CE"},5071:{"value":"13CF","name":"CHEROKEE LETTER SI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB9F","titlecase_mapping":"","symbol":"\u13CF"},5072:{"value":"13D0","name":"CHEROKEE LETTER SO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA0","titlecase_mapping":"","symbol":"\u13D0"},5073:{"value":"13D1","name":"CHEROKEE LETTER SU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA1","titlecase_mapping":"","symbol":"\u13D1"},5074:{"value":"13D2","name":"CHEROKEE LETTER SV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA2","titlecase_mapping":"","symbol":"\u13D2"},5075:{"value":"13D3","name":"CHEROKEE LETTER DA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA3","titlecase_mapping":"","symbol":"\u13D3"},5076:{"value":"13D4","name":"CHEROKEE LETTER TA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA4","titlecase_mapping":"","symbol":"\u13D4"},5077:{"value":"13D5","name":"CHEROKEE LETTER DE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA5","titlecase_mapping":"","symbol":"\u13D5"},5078:{"value":"13D6","name":"CHEROKEE LETTER TE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA6","titlecase_mapping":"","symbol":"\u13D6"},5079:{"value":"13D7","name":"CHEROKEE LETTER DI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA7","titlecase_mapping":"","symbol":"\u13D7"},5080:{"value":"13D8","name":"CHEROKEE LETTER TI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA8","titlecase_mapping":"","symbol":"\u13D8"},5081:{"value":"13D9","name":"CHEROKEE LETTER DO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABA9","titlecase_mapping":"","symbol":"\u13D9"},5082:{"value":"13DA","name":"CHEROKEE LETTER DU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABAA","titlecase_mapping":"","symbol":"\u13DA"},5083:{"value":"13DB","name":"CHEROKEE LETTER DV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABAB","titlecase_mapping":"","symbol":"\u13DB"},5084:{"value":"13DC","name":"CHEROKEE LETTER DLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABAC","titlecase_mapping":"","symbol":"\u13DC"},5085:{"value":"13DD","name":"CHEROKEE LETTER TLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABAD","titlecase_mapping":"","symbol":"\u13DD"},5086:{"value":"13DE","name":"CHEROKEE LETTER TLE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABAE","titlecase_mapping":"","symbol":"\u13DE"},5087:{"value":"13DF","name":"CHEROKEE LETTER TLI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABAF","titlecase_mapping":"","symbol":"\u13DF"},5088:{"value":"13E0","name":"CHEROKEE LETTER TLO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB0","titlecase_mapping":"","symbol":"\u13E0"},5089:{"value":"13E1","name":"CHEROKEE LETTER TLU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB1","titlecase_mapping":"","symbol":"\u13E1"},5090:{"value":"13E2","name":"CHEROKEE LETTER TLV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB2","titlecase_mapping":"","symbol":"\u13E2"},5091:{"value":"13E3","name":"CHEROKEE LETTER TSA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB3","titlecase_mapping":"","symbol":"\u13E3"},5092:{"value":"13E4","name":"CHEROKEE LETTER TSE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB4","titlecase_mapping":"","symbol":"\u13E4"},5093:{"value":"13E5","name":"CHEROKEE LETTER TSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB5","titlecase_mapping":"","symbol":"\u13E5"},5094:{"value":"13E6","name":"CHEROKEE LETTER TSO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB6","titlecase_mapping":"","symbol":"\u13E6"},5095:{"value":"13E7","name":"CHEROKEE LETTER TSU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB7","titlecase_mapping":"","symbol":"\u13E7"},5096:{"value":"13E8","name":"CHEROKEE LETTER TSV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB8","titlecase_mapping":"","symbol":"\u13E8"},5097:{"value":"13E9","name":"CHEROKEE LETTER WA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABB9","titlecase_mapping":"","symbol":"\u13E9"},5098:{"value":"13EA","name":"CHEROKEE LETTER WE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABBA","titlecase_mapping":"","symbol":"\u13EA"},5099:{"value":"13EB","name":"CHEROKEE LETTER WI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABBB","titlecase_mapping":"","symbol":"\u13EB"},5100:{"value":"13EC","name":"CHEROKEE LETTER WO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABBC","titlecase_mapping":"","symbol":"\u13EC"},5101:{"value":"13ED","name":"CHEROKEE LETTER WU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABBD","titlecase_mapping":"","symbol":"\u13ED"},5102:{"value":"13EE","name":"CHEROKEE LETTER WV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABBE","titlecase_mapping":"","symbol":"\u13EE"},5103:{"value":"13EF","name":"CHEROKEE LETTER YA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"ABBF","titlecase_mapping":"","symbol":"\u13EF"},5104:{"value":"13F0","name":"CHEROKEE LETTER YE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"13F8","titlecase_mapping":"","symbol":"\u13F0"},5105:{"value":"13F1","name":"CHEROKEE LETTER YI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"13F9","titlecase_mapping":"","symbol":"\u13F1"},5106:{"value":"13F2","name":"CHEROKEE LETTER YO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"13FA","titlecase_mapping":"","symbol":"\u13F2"},5107:{"value":"13F3","name":"CHEROKEE LETTER YU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"13FB","titlecase_mapping":"","symbol":"\u13F3"},5108:{"value":"13F4","name":"CHEROKEE LETTER YV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"13FC","titlecase_mapping":"","symbol":"\u13F4"},5109:{"value":"13F5","name":"CHEROKEE LETTER MV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"13FD","titlecase_mapping":"","symbol":"\u13F5"},7312:{"value":"1C90","name":"GEORGIAN MTAVRULI CAPITAL LETTER AN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D0","titlecase_mapping":"","symbol":"\u1C90"},7313:{"value":"1C91","name":"GEORGIAN MTAVRULI CAPITAL LETTER BAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D1","titlecase_mapping":"","symbol":"\u1C91"},7314:{"value":"1C92","name":"GEORGIAN MTAVRULI CAPITAL LETTER GAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D2","titlecase_mapping":"","symbol":"\u1C92"},7315:{"value":"1C93","name":"GEORGIAN MTAVRULI CAPITAL LETTER DON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D3","titlecase_mapping":"","symbol":"\u1C93"},7316:{"value":"1C94","name":"GEORGIAN MTAVRULI CAPITAL LETTER EN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D4","titlecase_mapping":"","symbol":"\u1C94"},7317:{"value":"1C95","name":"GEORGIAN MTAVRULI CAPITAL LETTER VIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D5","titlecase_mapping":"","symbol":"\u1C95"},7318:{"value":"1C96","name":"GEORGIAN MTAVRULI CAPITAL LETTER ZEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D6","titlecase_mapping":"","symbol":"\u1C96"},7319:{"value":"1C97","name":"GEORGIAN MTAVRULI CAPITAL LETTER TAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D7","titlecase_mapping":"","symbol":"\u1C97"},7320:{"value":"1C98","name":"GEORGIAN MTAVRULI CAPITAL LETTER IN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D8","titlecase_mapping":"","symbol":"\u1C98"},7321:{"value":"1C99","name":"GEORGIAN MTAVRULI CAPITAL LETTER KAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10D9","titlecase_mapping":"","symbol":"\u1C99"},7322:{"value":"1C9A","name":"GEORGIAN MTAVRULI CAPITAL LETTER LAS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10DA","titlecase_mapping":"","symbol":"\u1C9A"},7323:{"value":"1C9B","name":"GEORGIAN MTAVRULI CAPITAL LETTER MAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10DB","titlecase_mapping":"","symbol":"\u1C9B"},7324:{"value":"1C9C","name":"GEORGIAN MTAVRULI CAPITAL LETTER NAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10DC","titlecase_mapping":"","symbol":"\u1C9C"},7325:{"value":"1C9D","name":"GEORGIAN MTAVRULI CAPITAL LETTER ON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10DD","titlecase_mapping":"","symbol":"\u1C9D"},7326:{"value":"1C9E","name":"GEORGIAN MTAVRULI CAPITAL LETTER PAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10DE","titlecase_mapping":"","symbol":"\u1C9E"},7327:{"value":"1C9F","name":"GEORGIAN MTAVRULI CAPITAL LETTER ZHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10DF","titlecase_mapping":"","symbol":"\u1C9F"},7328:{"value":"1CA0","name":"GEORGIAN MTAVRULI CAPITAL LETTER RAE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E0","titlecase_mapping":"","symbol":"\u1CA0"},7329:{"value":"1CA1","name":"GEORGIAN MTAVRULI CAPITAL LETTER SAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E1","titlecase_mapping":"","symbol":"\u1CA1"},7330:{"value":"1CA2","name":"GEORGIAN MTAVRULI CAPITAL LETTER TAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E2","titlecase_mapping":"","symbol":"\u1CA2"},7331:{"value":"1CA3","name":"GEORGIAN MTAVRULI CAPITAL LETTER UN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E3","titlecase_mapping":"","symbol":"\u1CA3"},7332:{"value":"1CA4","name":"GEORGIAN MTAVRULI CAPITAL LETTER PHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E4","titlecase_mapping":"","symbol":"\u1CA4"},7333:{"value":"1CA5","name":"GEORGIAN MTAVRULI CAPITAL LETTER KHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E5","titlecase_mapping":"","symbol":"\u1CA5"},7334:{"value":"1CA6","name":"GEORGIAN MTAVRULI CAPITAL LETTER GHAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E6","titlecase_mapping":"","symbol":"\u1CA6"},7335:{"value":"1CA7","name":"GEORGIAN MTAVRULI CAPITAL LETTER QAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E7","titlecase_mapping":"","symbol":"\u1CA7"},7336:{"value":"1CA8","name":"GEORGIAN MTAVRULI CAPITAL LETTER SHIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E8","titlecase_mapping":"","symbol":"\u1CA8"},7337:{"value":"1CA9","name":"GEORGIAN MTAVRULI CAPITAL LETTER CHIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10E9","titlecase_mapping":"","symbol":"\u1CA9"},7338:{"value":"1CAA","name":"GEORGIAN MTAVRULI CAPITAL LETTER CAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10EA","titlecase_mapping":"","symbol":"\u1CAA"},7339:{"value":"1CAB","name":"GEORGIAN MTAVRULI CAPITAL LETTER JIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10EB","titlecase_mapping":"","symbol":"\u1CAB"},7340:{"value":"1CAC","name":"GEORGIAN MTAVRULI CAPITAL LETTER CIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10EC","titlecase_mapping":"","symbol":"\u1CAC"},7341:{"value":"1CAD","name":"GEORGIAN MTAVRULI CAPITAL LETTER CHAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10ED","titlecase_mapping":"","symbol":"\u1CAD"},7342:{"value":"1CAE","name":"GEORGIAN MTAVRULI CAPITAL LETTER XAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10EE","titlecase_mapping":"","symbol":"\u1CAE"},7343:{"value":"1CAF","name":"GEORGIAN MTAVRULI CAPITAL LETTER JHAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10EF","titlecase_mapping":"","symbol":"\u1CAF"},7344:{"value":"1CB0","name":"GEORGIAN MTAVRULI CAPITAL LETTER HAE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F0","titlecase_mapping":"","symbol":"\u1CB0"},7345:{"value":"1CB1","name":"GEORGIAN MTAVRULI CAPITAL LETTER HE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F1","titlecase_mapping":"","symbol":"\u1CB1"},7346:{"value":"1CB2","name":"GEORGIAN MTAVRULI CAPITAL LETTER HIE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F2","titlecase_mapping":"","symbol":"\u1CB2"},7347:{"value":"1CB3","name":"GEORGIAN MTAVRULI CAPITAL LETTER WE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F3","titlecase_mapping":"","symbol":"\u1CB3"},7348:{"value":"1CB4","name":"GEORGIAN MTAVRULI CAPITAL LETTER HAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F4","titlecase_mapping":"","symbol":"\u1CB4"},7349:{"value":"1CB5","name":"GEORGIAN MTAVRULI CAPITAL LETTER HOE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F5","titlecase_mapping":"","symbol":"\u1CB5"},7350:{"value":"1CB6","name":"GEORGIAN MTAVRULI CAPITAL LETTER FI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F6","titlecase_mapping":"","symbol":"\u1CB6"},7351:{"value":"1CB7","name":"GEORGIAN MTAVRULI CAPITAL LETTER YN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F7","titlecase_mapping":"","symbol":"\u1CB7"},7352:{"value":"1CB8","name":"GEORGIAN MTAVRULI CAPITAL LETTER ELIFI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F8","titlecase_mapping":"","symbol":"\u1CB8"},7353:{"value":"1CB9","name":"GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10F9","titlecase_mapping":"","symbol":"\u1CB9"},7354:{"value":"1CBA","name":"GEORGIAN MTAVRULI CAPITAL LETTER AIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10FA","titlecase_mapping":"","symbol":"\u1CBA"},7357:{"value":"1CBD","name":"GEORGIAN MTAVRULI CAPITAL LETTER AEN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10FD","titlecase_mapping":"","symbol":"\u1CBD"},7358:{"value":"1CBE","name":"GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10FE","titlecase_mapping":"","symbol":"\u1CBE"},7359:{"value":"1CBF","name":"GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10FF","titlecase_mapping":"","symbol":"\u1CBF"},7680:{"value":"1E00","name":"LATIN CAPITAL LETTER A WITH RING BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0325","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E01","titlecase_mapping":"","symbol":"\u1E00"},7682:{"value":"1E02","name":"LATIN CAPITAL LETTER B WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0042 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E03","titlecase_mapping":"","symbol":"\u1E02"},7684:{"value":"1E04","name":"LATIN CAPITAL LETTER B WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0042 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E05","titlecase_mapping":"","symbol":"\u1E04"},7686:{"value":"1E06","name":"LATIN CAPITAL LETTER B WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0042 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E07","titlecase_mapping":"","symbol":"\u1E06"},7688:{"value":"1E08","name":"LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C7 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E09","titlecase_mapping":"","symbol":"\u1E08"},7690:{"value":"1E0A","name":"LATIN CAPITAL LETTER D WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0044 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E0B","titlecase_mapping":"","symbol":"\u1E0A"},7692:{"value":"1E0C","name":"LATIN CAPITAL LETTER D WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0044 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E0D","titlecase_mapping":"","symbol":"\u1E0C"},7694:{"value":"1E0E","name":"LATIN CAPITAL LETTER D WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0044 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E0F","titlecase_mapping":"","symbol":"\u1E0E"},7696:{"value":"1E10","name":"LATIN CAPITAL LETTER D WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0044 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E11","titlecase_mapping":"","symbol":"\u1E10"},7698:{"value":"1E12","name":"LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0044 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E13","titlecase_mapping":"","symbol":"\u1E12"},7700:{"value":"1E14","name":"LATIN CAPITAL LETTER E WITH MACRON AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0112 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E15","titlecase_mapping":"","symbol":"\u1E14"},7702:{"value":"1E16","name":"LATIN CAPITAL LETTER E WITH MACRON AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0112 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E17","titlecase_mapping":"","symbol":"\u1E16"},7704:{"value":"1E18","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E19","titlecase_mapping":"","symbol":"\u1E18"},7706:{"value":"1E1A","name":"LATIN CAPITAL LETTER E WITH TILDE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0330","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E1B","titlecase_mapping":"","symbol":"\u1E1A"},7708:{"value":"1E1C","name":"LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0228 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E1D","titlecase_mapping":"","symbol":"\u1E1C"},7710:{"value":"1E1E","name":"LATIN CAPITAL LETTER F WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0046 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E1F","titlecase_mapping":"","symbol":"\u1E1E"},7712:{"value":"1E20","name":"LATIN CAPITAL LETTER G WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0047 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E21","titlecase_mapping":"","symbol":"\u1E20"},7714:{"value":"1E22","name":"LATIN CAPITAL LETTER H WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E23","titlecase_mapping":"","symbol":"\u1E22"},7716:{"value":"1E24","name":"LATIN CAPITAL LETTER H WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E25","titlecase_mapping":"","symbol":"\u1E24"},7718:{"value":"1E26","name":"LATIN CAPITAL LETTER H WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E27","titlecase_mapping":"","symbol":"\u1E26"},7720:{"value":"1E28","name":"LATIN CAPITAL LETTER H WITH CEDILLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E29","titlecase_mapping":"","symbol":"\u1E28"},7722:{"value":"1E2A","name":"LATIN CAPITAL LETTER H WITH BREVE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0048 032E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E2B","titlecase_mapping":"","symbol":"\u1E2A"},7724:{"value":"1E2C","name":"LATIN CAPITAL LETTER I WITH TILDE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0330","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E2D","titlecase_mapping":"","symbol":"\u1E2C"},7726:{"value":"1E2E","name":"LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00CF 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E2F","titlecase_mapping":"","symbol":"\u1E2E"},7728:{"value":"1E30","name":"LATIN CAPITAL LETTER K WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004B 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E31","titlecase_mapping":"","symbol":"\u1E30"},7730:{"value":"1E32","name":"LATIN CAPITAL LETTER K WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004B 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E33","titlecase_mapping":"","symbol":"\u1E32"},7732:{"value":"1E34","name":"LATIN CAPITAL LETTER K WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004B 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E35","titlecase_mapping":"","symbol":"\u1E34"},7734:{"value":"1E36","name":"LATIN CAPITAL LETTER L WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004C 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E37","titlecase_mapping":"","symbol":"\u1E36"},7736:{"value":"1E38","name":"LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1E36 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E39","titlecase_mapping":"","symbol":"\u1E38"},7738:{"value":"1E3A","name":"LATIN CAPITAL LETTER L WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004C 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E3B","titlecase_mapping":"","symbol":"\u1E3A"},7740:{"value":"1E3C","name":"LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004C 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E3D","titlecase_mapping":"","symbol":"\u1E3C"},7742:{"value":"1E3E","name":"LATIN CAPITAL LETTER M WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004D 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E3F","titlecase_mapping":"","symbol":"\u1E3E"},7744:{"value":"1E40","name":"LATIN CAPITAL LETTER M WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004D 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E41","titlecase_mapping":"","symbol":"\u1E40"},7746:{"value":"1E42","name":"LATIN CAPITAL LETTER M WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004D 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E43","titlecase_mapping":"","symbol":"\u1E42"},7748:{"value":"1E44","name":"LATIN CAPITAL LETTER N WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E45","titlecase_mapping":"","symbol":"\u1E44"},7750:{"value":"1E46","name":"LATIN CAPITAL LETTER N WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E47","titlecase_mapping":"","symbol":"\u1E46"},7752:{"value":"1E48","name":"LATIN CAPITAL LETTER N WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E49","titlecase_mapping":"","symbol":"\u1E48"},7754:{"value":"1E4A","name":"LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004E 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E4B","titlecase_mapping":"","symbol":"\u1E4A"},7756:{"value":"1E4C","name":"LATIN CAPITAL LETTER O WITH TILDE AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D5 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E4D","titlecase_mapping":"","symbol":"\u1E4C"},7758:{"value":"1E4E","name":"LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D5 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E4F","titlecase_mapping":"","symbol":"\u1E4E"},7760:{"value":"1E50","name":"LATIN CAPITAL LETTER O WITH MACRON AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"014C 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E51","titlecase_mapping":"","symbol":"\u1E50"},7762:{"value":"1E52","name":"LATIN CAPITAL LETTER O WITH MACRON AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"014C 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E53","titlecase_mapping":"","symbol":"\u1E52"},7764:{"value":"1E54","name":"LATIN CAPITAL LETTER P WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0050 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E55","titlecase_mapping":"","symbol":"\u1E54"},7766:{"value":"1E56","name":"LATIN CAPITAL LETTER P WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0050 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E57","titlecase_mapping":"","symbol":"\u1E56"},7768:{"value":"1E58","name":"LATIN CAPITAL LETTER R WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E59","titlecase_mapping":"","symbol":"\u1E58"},7770:{"value":"1E5A","name":"LATIN CAPITAL LETTER R WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E5B","titlecase_mapping":"","symbol":"\u1E5A"},7772:{"value":"1E5C","name":"LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1E5A 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E5D","titlecase_mapping":"","symbol":"\u1E5C"},7774:{"value":"1E5E","name":"LATIN CAPITAL LETTER R WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0052 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E5F","titlecase_mapping":"","symbol":"\u1E5E"},7776:{"value":"1E60","name":"LATIN CAPITAL LETTER S WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E61","titlecase_mapping":"","symbol":"\u1E60"},7778:{"value":"1E62","name":"LATIN CAPITAL LETTER S WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0053 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E63","titlecase_mapping":"","symbol":"\u1E62"},7780:{"value":"1E64","name":"LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"015A 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E65","titlecase_mapping":"","symbol":"\u1E64"},7782:{"value":"1E66","name":"LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0160 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E67","titlecase_mapping":"","symbol":"\u1E66"},7784:{"value":"1E68","name":"LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1E62 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E69","titlecase_mapping":"","symbol":"\u1E68"},7786:{"value":"1E6A","name":"LATIN CAPITAL LETTER T WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E6B","titlecase_mapping":"","symbol":"\u1E6A"},7788:{"value":"1E6C","name":"LATIN CAPITAL LETTER T WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E6D","titlecase_mapping":"","symbol":"\u1E6C"},7790:{"value":"1E6E","name":"LATIN CAPITAL LETTER T WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E6F","titlecase_mapping":"","symbol":"\u1E6E"},7792:{"value":"1E70","name":"LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0054 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E71","titlecase_mapping":"","symbol":"\u1E70"},7794:{"value":"1E72","name":"LATIN CAPITAL LETTER U WITH DIAERESIS BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0324","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E73","titlecase_mapping":"","symbol":"\u1E72"},7796:{"value":"1E74","name":"LATIN CAPITAL LETTER U WITH TILDE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0330","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E75","titlecase_mapping":"","symbol":"\u1E74"},7798:{"value":"1E76","name":"LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 032D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E77","titlecase_mapping":"","symbol":"\u1E76"},7800:{"value":"1E78","name":"LATIN CAPITAL LETTER U WITH TILDE AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0168 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E79","titlecase_mapping":"","symbol":"\u1E78"},7802:{"value":"1E7A","name":"LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"016A 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E7B","titlecase_mapping":"","symbol":"\u1E7A"},7804:{"value":"1E7C","name":"LATIN CAPITAL LETTER V WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0056 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E7D","titlecase_mapping":"","symbol":"\u1E7C"},7806:{"value":"1E7E","name":"LATIN CAPITAL LETTER V WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0056 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E7F","titlecase_mapping":"","symbol":"\u1E7E"},7808:{"value":"1E80","name":"LATIN CAPITAL LETTER W WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0057 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E81","titlecase_mapping":"","symbol":"\u1E80"},7810:{"value":"1E82","name":"LATIN CAPITAL LETTER W WITH ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0057 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E83","titlecase_mapping":"","symbol":"\u1E82"},7812:{"value":"1E84","name":"LATIN CAPITAL LETTER W WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0057 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E85","titlecase_mapping":"","symbol":"\u1E84"},7814:{"value":"1E86","name":"LATIN CAPITAL LETTER W WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0057 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E87","titlecase_mapping":"","symbol":"\u1E86"},7816:{"value":"1E88","name":"LATIN CAPITAL LETTER W WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0057 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E89","titlecase_mapping":"","symbol":"\u1E88"},7818:{"value":"1E8A","name":"LATIN CAPITAL LETTER X WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0058 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E8B","titlecase_mapping":"","symbol":"\u1E8A"},7820:{"value":"1E8C","name":"LATIN CAPITAL LETTER X WITH DIAERESIS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0058 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E8D","titlecase_mapping":"","symbol":"\u1E8C"},7822:{"value":"1E8E","name":"LATIN CAPITAL LETTER Y WITH DOT ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E8F","titlecase_mapping":"","symbol":"\u1E8E"},7824:{"value":"1E90","name":"LATIN CAPITAL LETTER Z WITH CIRCUMFLEX","category":"Lu","class":"0","bidirectional_category":"L","mapping":"005A 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E91","titlecase_mapping":"","symbol":"\u1E90"},7826:{"value":"1E92","name":"LATIN CAPITAL LETTER Z WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"005A 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93","titlecase_mapping":"","symbol":"\u1E92"},7828:{"value":"1E94","name":"LATIN CAPITAL LETTER Z WITH LINE BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"005A 0331","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E95","titlecase_mapping":"","symbol":"\u1E94"},7838:{"value":"1E9E","name":"LATIN CAPITAL LETTER SHARP S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"00DF","titlecase_mapping":"","symbol":"\u1E9E"},7840:{"value":"1EA0","name":"LATIN CAPITAL LETTER A WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EA1","titlecase_mapping":"","symbol":"\u1EA0"},7842:{"value":"1EA2","name":"LATIN CAPITAL LETTER A WITH HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0041 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EA3","titlecase_mapping":"","symbol":"\u1EA2"},7844:{"value":"1EA4","name":"LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C2 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EA5","titlecase_mapping":"","symbol":"\u1EA4"},7846:{"value":"1EA6","name":"LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C2 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EA7","titlecase_mapping":"","symbol":"\u1EA6"},7848:{"value":"1EA8","name":"LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C2 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EA9","titlecase_mapping":"","symbol":"\u1EA8"},7850:{"value":"1EAA","name":"LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C2 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EAB","titlecase_mapping":"","symbol":"\u1EAA"},7852:{"value":"1EAC","name":"LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1EA0 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EAD","titlecase_mapping":"","symbol":"\u1EAC"},7854:{"value":"1EAE","name":"LATIN CAPITAL LETTER A WITH BREVE AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0102 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EAF","titlecase_mapping":"","symbol":"\u1EAE"},7856:{"value":"1EB0","name":"LATIN CAPITAL LETTER A WITH BREVE AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0102 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EB1","titlecase_mapping":"","symbol":"\u1EB0"},7858:{"value":"1EB2","name":"LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0102 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EB3","titlecase_mapping":"","symbol":"\u1EB2"},7860:{"value":"1EB4","name":"LATIN CAPITAL LETTER A WITH BREVE AND TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0102 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EB5","titlecase_mapping":"","symbol":"\u1EB4"},7862:{"value":"1EB6","name":"LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1EA0 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EB7","titlecase_mapping":"","symbol":"\u1EB6"},7864:{"value":"1EB8","name":"LATIN CAPITAL LETTER E WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EB9","titlecase_mapping":"","symbol":"\u1EB8"},7866:{"value":"1EBA","name":"LATIN CAPITAL LETTER E WITH HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EBB","titlecase_mapping":"","symbol":"\u1EBA"},7868:{"value":"1EBC","name":"LATIN CAPITAL LETTER E WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0045 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EBD","titlecase_mapping":"","symbol":"\u1EBC"},7870:{"value":"1EBE","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00CA 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EBF","titlecase_mapping":"","symbol":"\u1EBE"},7872:{"value":"1EC0","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00CA 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EC1","titlecase_mapping":"","symbol":"\u1EC0"},7874:{"value":"1EC2","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00CA 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EC3","titlecase_mapping":"","symbol":"\u1EC2"},7876:{"value":"1EC4","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00CA 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EC5","titlecase_mapping":"","symbol":"\u1EC4"},7878:{"value":"1EC6","name":"LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1EB8 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EC7","titlecase_mapping":"","symbol":"\u1EC6"},7880:{"value":"1EC8","name":"LATIN CAPITAL LETTER I WITH HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EC9","titlecase_mapping":"","symbol":"\u1EC8"},7882:{"value":"1ECA","name":"LATIN CAPITAL LETTER I WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0049 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ECB","titlecase_mapping":"","symbol":"\u1ECA"},7884:{"value":"1ECC","name":"LATIN CAPITAL LETTER O WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ECD","titlecase_mapping":"","symbol":"\u1ECC"},7886:{"value":"1ECE","name":"LATIN CAPITAL LETTER O WITH HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004F 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ECF","titlecase_mapping":"","symbol":"\u1ECE"},7888:{"value":"1ED0","name":"LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D4 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ED1","titlecase_mapping":"","symbol":"\u1ED0"},7890:{"value":"1ED2","name":"LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D4 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ED3","titlecase_mapping":"","symbol":"\u1ED2"},7892:{"value":"1ED4","name":"LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D4 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ED5","titlecase_mapping":"","symbol":"\u1ED4"},7894:{"value":"1ED6","name":"LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00D4 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ED7","titlecase_mapping":"","symbol":"\u1ED6"},7896:{"value":"1ED8","name":"LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1ECC 0302","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1ED9","titlecase_mapping":"","symbol":"\u1ED8"},7898:{"value":"1EDA","name":"LATIN CAPITAL LETTER O WITH HORN AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01A0 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EDB","titlecase_mapping":"","symbol":"\u1EDA"},7900:{"value":"1EDC","name":"LATIN CAPITAL LETTER O WITH HORN AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01A0 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EDD","titlecase_mapping":"","symbol":"\u1EDC"},7902:{"value":"1EDE","name":"LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01A0 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EDF","titlecase_mapping":"","symbol":"\u1EDE"},7904:{"value":"1EE0","name":"LATIN CAPITAL LETTER O WITH HORN AND TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01A0 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EE1","titlecase_mapping":"","symbol":"\u1EE0"},7906:{"value":"1EE2","name":"LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01A0 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EE3","titlecase_mapping":"","symbol":"\u1EE2"},7908:{"value":"1EE4","name":"LATIN CAPITAL LETTER U WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EE5","titlecase_mapping":"","symbol":"\u1EE4"},7910:{"value":"1EE6","name":"LATIN CAPITAL LETTER U WITH HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0055 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EE7","titlecase_mapping":"","symbol":"\u1EE6"},7912:{"value":"1EE8","name":"LATIN CAPITAL LETTER U WITH HORN AND ACUTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01AF 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EE9","titlecase_mapping":"","symbol":"\u1EE8"},7914:{"value":"1EEA","name":"LATIN CAPITAL LETTER U WITH HORN AND GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01AF 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EEB","titlecase_mapping":"","symbol":"\u1EEA"},7916:{"value":"1EEC","name":"LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01AF 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EED","titlecase_mapping":"","symbol":"\u1EEC"},7918:{"value":"1EEE","name":"LATIN CAPITAL LETTER U WITH HORN AND TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01AF 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EEF","titlecase_mapping":"","symbol":"\u1EEE"},7920:{"value":"1EF0","name":"LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"01AF 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EF1","titlecase_mapping":"","symbol":"\u1EF0"},7922:{"value":"1EF2","name":"LATIN CAPITAL LETTER Y WITH GRAVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EF3","titlecase_mapping":"","symbol":"\u1EF2"},7924:{"value":"1EF4","name":"LATIN CAPITAL LETTER Y WITH DOT BELOW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0323","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EF5","titlecase_mapping":"","symbol":"\u1EF4"},7926:{"value":"1EF6","name":"LATIN CAPITAL LETTER Y WITH HOOK ABOVE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0309","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EF7","titlecase_mapping":"","symbol":"\u1EF6"},7928:{"value":"1EF8","name":"LATIN CAPITAL LETTER Y WITH TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0059 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EF9","titlecase_mapping":"","symbol":"\u1EF8"},7930:{"value":"1EFA","name":"LATIN CAPITAL LETTER MIDDLE-WELSH LL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EFB","titlecase_mapping":"","symbol":"\u1EFA"},7932:{"value":"1EFC","name":"LATIN CAPITAL LETTER MIDDLE-WELSH V","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EFD","titlecase_mapping":"","symbol":"\u1EFC"},7934:{"value":"1EFE","name":"LATIN CAPITAL LETTER Y WITH LOOP","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1EFF","titlecase_mapping":"","symbol":"\u1EFE"},7944:{"value":"1F08","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0391 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F00","titlecase_mapping":"","symbol":"\u1F08"},7945:{"value":"1F09","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0391 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F01","titlecase_mapping":"","symbol":"\u1F09"},7946:{"value":"1F0A","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F08 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F02","titlecase_mapping":"","symbol":"\u1F0A"},7947:{"value":"1F0B","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F09 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F03","titlecase_mapping":"","symbol":"\u1F0B"},7948:{"value":"1F0C","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F08 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F04","titlecase_mapping":"","symbol":"\u1F0C"},7949:{"value":"1F0D","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F09 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F05","titlecase_mapping":"","symbol":"\u1F0D"},7950:{"value":"1F0E","name":"GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F08 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F06","titlecase_mapping":"","symbol":"\u1F0E"},7951:{"value":"1F0F","name":"GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F09 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F07","titlecase_mapping":"","symbol":"\u1F0F"},7960:{"value":"1F18","name":"GREEK CAPITAL LETTER EPSILON WITH PSILI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0395 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F10","titlecase_mapping":"","symbol":"\u1F18"},7961:{"value":"1F19","name":"GREEK CAPITAL LETTER EPSILON WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0395 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F11","titlecase_mapping":"","symbol":"\u1F19"},7962:{"value":"1F1A","name":"GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F18 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F12","titlecase_mapping":"","symbol":"\u1F1A"},7963:{"value":"1F1B","name":"GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F19 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F13","titlecase_mapping":"","symbol":"\u1F1B"},7964:{"value":"1F1C","name":"GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F18 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F14","titlecase_mapping":"","symbol":"\u1F1C"},7965:{"value":"1F1D","name":"GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F19 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F15","titlecase_mapping":"","symbol":"\u1F1D"},7976:{"value":"1F28","name":"GREEK CAPITAL LETTER ETA WITH PSILI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0397 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F20","titlecase_mapping":"","symbol":"\u1F28"},7977:{"value":"1F29","name":"GREEK CAPITAL LETTER ETA WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0397 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F21","titlecase_mapping":"","symbol":"\u1F29"},7978:{"value":"1F2A","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F28 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F22","titlecase_mapping":"","symbol":"\u1F2A"},7979:{"value":"1F2B","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F29 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F23","titlecase_mapping":"","symbol":"\u1F2B"},7980:{"value":"1F2C","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F28 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F24","titlecase_mapping":"","symbol":"\u1F2C"},7981:{"value":"1F2D","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F29 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F25","titlecase_mapping":"","symbol":"\u1F2D"},7982:{"value":"1F2E","name":"GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F28 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F26","titlecase_mapping":"","symbol":"\u1F2E"},7983:{"value":"1F2F","name":"GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F29 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F27","titlecase_mapping":"","symbol":"\u1F2F"},7992:{"value":"1F38","name":"GREEK CAPITAL LETTER IOTA WITH PSILI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F30","titlecase_mapping":"","symbol":"\u1F38"},7993:{"value":"1F39","name":"GREEK CAPITAL LETTER IOTA WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F31","titlecase_mapping":"","symbol":"\u1F39"},7994:{"value":"1F3A","name":"GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F38 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F32","titlecase_mapping":"","symbol":"\u1F3A"},7995:{"value":"1F3B","name":"GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F39 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F33","titlecase_mapping":"","symbol":"\u1F3B"},7996:{"value":"1F3C","name":"GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F38 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F34","titlecase_mapping":"","symbol":"\u1F3C"},7997:{"value":"1F3D","name":"GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F39 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F35","titlecase_mapping":"","symbol":"\u1F3D"},7998:{"value":"1F3E","name":"GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F38 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F36","titlecase_mapping":"","symbol":"\u1F3E"},7999:{"value":"1F3F","name":"GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F39 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F37","titlecase_mapping":"","symbol":"\u1F3F"},8008:{"value":"1F48","name":"GREEK CAPITAL LETTER OMICRON WITH PSILI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"039F 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F40","titlecase_mapping":"","symbol":"\u1F48"},8009:{"value":"1F49","name":"GREEK CAPITAL LETTER OMICRON WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"039F 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F41","titlecase_mapping":"","symbol":"\u1F49"},8010:{"value":"1F4A","name":"GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F48 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F42","titlecase_mapping":"","symbol":"\u1F4A"},8011:{"value":"1F4B","name":"GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F49 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F43","titlecase_mapping":"","symbol":"\u1F4B"},8012:{"value":"1F4C","name":"GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F48 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F44","titlecase_mapping":"","symbol":"\u1F4C"},8013:{"value":"1F4D","name":"GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F49 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F45","titlecase_mapping":"","symbol":"\u1F4D"},8025:{"value":"1F59","name":"GREEK CAPITAL LETTER UPSILON WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A5 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F51","titlecase_mapping":"","symbol":"\u1F59"},8027:{"value":"1F5B","name":"GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F59 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F53","titlecase_mapping":"","symbol":"\u1F5B"},8029:{"value":"1F5D","name":"GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F59 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F55","titlecase_mapping":"","symbol":"\u1F5D"},8031:{"value":"1F5F","name":"GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F59 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F57","titlecase_mapping":"","symbol":"\u1F5F"},8040:{"value":"1F68","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A9 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F60","titlecase_mapping":"","symbol":"\u1F68"},8041:{"value":"1F69","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A9 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F61","titlecase_mapping":"","symbol":"\u1F69"},8042:{"value":"1F6A","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F68 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F62","titlecase_mapping":"","symbol":"\u1F6A"},8043:{"value":"1F6B","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F69 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F63","titlecase_mapping":"","symbol":"\u1F6B"},8044:{"value":"1F6C","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F68 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F64","titlecase_mapping":"","symbol":"\u1F6C"},8045:{"value":"1F6D","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F69 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F65","titlecase_mapping":"","symbol":"\u1F6D"},8046:{"value":"1F6E","name":"GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F68 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F66","titlecase_mapping":"","symbol":"\u1F6E"},8047:{"value":"1F6F","name":"GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"1F69 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F67","titlecase_mapping":"","symbol":"\u1F6F"},8120:{"value":"1FB8","name":"GREEK CAPITAL LETTER ALPHA WITH VRACHY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0391 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FB0","titlecase_mapping":"","symbol":"\u1FB8"},8121:{"value":"1FB9","name":"GREEK CAPITAL LETTER ALPHA WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0391 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FB1","titlecase_mapping":"","symbol":"\u1FB9"},8122:{"value":"1FBA","name":"GREEK CAPITAL LETTER ALPHA WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0391 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F70","titlecase_mapping":"","symbol":"\u1FBA"},8123:{"value":"1FBB","name":"GREEK CAPITAL LETTER ALPHA WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0386","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F71","titlecase_mapping":"","symbol":"\u1FBB"},8136:{"value":"1FC8","name":"GREEK CAPITAL LETTER EPSILON WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0395 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F72","titlecase_mapping":"","symbol":"\u1FC8"},8137:{"value":"1FC9","name":"GREEK CAPITAL LETTER EPSILON WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0388","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F73","titlecase_mapping":"","symbol":"\u1FC9"},8138:{"value":"1FCA","name":"GREEK CAPITAL LETTER ETA WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0397 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F74","titlecase_mapping":"","symbol":"\u1FCA"},8139:{"value":"1FCB","name":"GREEK CAPITAL LETTER ETA WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0389","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F75","titlecase_mapping":"","symbol":"\u1FCB"},8152:{"value":"1FD8","name":"GREEK CAPITAL LETTER IOTA WITH VRACHY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FD0","titlecase_mapping":"","symbol":"\u1FD8"},8153:{"value":"1FD9","name":"GREEK CAPITAL LETTER IOTA WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FD1","titlecase_mapping":"","symbol":"\u1FD9"},8154:{"value":"1FDA","name":"GREEK CAPITAL LETTER IOTA WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"0399 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F76","titlecase_mapping":"","symbol":"\u1FDA"},8155:{"value":"1FDB","name":"GREEK CAPITAL LETTER IOTA WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"038A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F77","titlecase_mapping":"","symbol":"\u1FDB"},8168:{"value":"1FE8","name":"GREEK CAPITAL LETTER UPSILON WITH VRACHY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A5 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FE0","titlecase_mapping":"","symbol":"\u1FE8"},8169:{"value":"1FE9","name":"GREEK CAPITAL LETTER UPSILON WITH MACRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A5 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FE1","titlecase_mapping":"","symbol":"\u1FE9"},8170:{"value":"1FEA","name":"GREEK CAPITAL LETTER UPSILON WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A5 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F7A","titlecase_mapping":"","symbol":"\u1FEA"},8171:{"value":"1FEB","name":"GREEK CAPITAL LETTER UPSILON WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"038E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F7B","titlecase_mapping":"","symbol":"\u1FEB"},8172:{"value":"1FEC","name":"GREEK CAPITAL LETTER RHO WITH DASIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A1 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1FE5","titlecase_mapping":"","symbol":"\u1FEC"},8184:{"value":"1FF8","name":"GREEK CAPITAL LETTER OMICRON WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"039F 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F78","titlecase_mapping":"","symbol":"\u1FF8"},8185:{"value":"1FF9","name":"GREEK CAPITAL LETTER OMICRON WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"038C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F79","titlecase_mapping":"","symbol":"\u1FF9"},8186:{"value":"1FFA","name":"GREEK CAPITAL LETTER OMEGA WITH VARIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A9 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F7C","titlecase_mapping":"","symbol":"\u1FFA"},8187:{"value":"1FFB","name":"GREEK CAPITAL LETTER OMEGA WITH OXIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"038F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1F7D","titlecase_mapping":"","symbol":"\u1FFB"},8450:{"value":"2102","name":"DOUBLE-STRUCK CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK C","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2102"},8455:{"value":"2107","name":"EULER CONSTANT","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0190","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"EULERS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2107"},8459:{"value":"210B","name":"SCRIPT CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT H","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u210B"},8460:{"value":"210C","name":"BLACK-LETTER CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-LETTER H","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u210C"},8461:{"value":"210D","name":"DOUBLE-STRUCK CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK H","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u210D"},8464:{"value":"2110","name":"SCRIPT CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT I","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2110"},8465:{"value":"2111","name":"BLACK-LETTER CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-LETTER I","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2111"},8466:{"value":"2112","name":"SCRIPT CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT L","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2112"},8469:{"value":"2115","name":"DOUBLE-STRUCK CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK N","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2115"},8473:{"value":"2119","name":"DOUBLE-STRUCK CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK P","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2119"},8474:{"value":"211A","name":"DOUBLE-STRUCK CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK Q","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u211A"},8475:{"value":"211B","name":"SCRIPT CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT R","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u211B"},8476:{"value":"211C","name":"BLACK-LETTER CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-LETTER R","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u211C"},8477:{"value":"211D","name":"DOUBLE-STRUCK CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK R","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u211D"},8484:{"value":"2124","name":"DOUBLE-STRUCK CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE-STRUCK Z","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2124"},8486:{"value":"2126","name":"OHM SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OHM","comment":"","uppercase_mapping":"","lowercase_mapping":"03C9","titlecase_mapping":"","symbol":"\u2126"},8488:{"value":"2128","name":"BLACK-LETTER CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-LETTER Z","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2128"},8490:{"value":"212A","name":"KELVIN SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEGREES KELVIN","comment":"","uppercase_mapping":"","lowercase_mapping":"006B","titlecase_mapping":"","symbol":"\u212A"},8491:{"value":"212B","name":"ANGSTROM SIGN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"00C5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ANGSTROM UNIT","comment":"","uppercase_mapping":"","lowercase_mapping":"00E5","titlecase_mapping":"","symbol":"\u212B"},8492:{"value":"212C","name":"SCRIPT CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT B","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u212C"},8493:{"value":"212D","name":"BLACK-LETTER CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-LETTER C","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u212D"},8496:{"value":"2130","name":"SCRIPT CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT E","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2130"},8497:{"value":"2131","name":"SCRIPT CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT F","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2131"},8498:{"value":"2132","name":"TURNED CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TURNED F","comment":"","uppercase_mapping":"","lowercase_mapping":"214E","titlecase_mapping":"","symbol":"\u2132"},8499:{"value":"2133","name":"SCRIPT CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT M","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2133"},8510:{"value":"213E","name":"DOUBLE-STRUCK CAPITAL GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u213E"},8511:{"value":"213F","name":"DOUBLE-STRUCK CAPITAL PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u213F"},8517:{"value":"2145","name":"DOUBLE-STRUCK ITALIC CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2145"},8579:{"value":"2183","name":"ROMAN NUMERAL REVERSED ONE HUNDRED","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2184","titlecase_mapping":"","symbol":"\u2183"},11264:{"value":"2C00","name":"GLAGOLITIC CAPITAL LETTER AZU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C30","titlecase_mapping":"","symbol":"\u2C00"},11265:{"value":"2C01","name":"GLAGOLITIC CAPITAL LETTER BUKY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C31","titlecase_mapping":"","symbol":"\u2C01"},11266:{"value":"2C02","name":"GLAGOLITIC CAPITAL LETTER VEDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C32","titlecase_mapping":"","symbol":"\u2C02"},11267:{"value":"2C03","name":"GLAGOLITIC CAPITAL LETTER GLAGOLI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C33","titlecase_mapping":"","symbol":"\u2C03"},11268:{"value":"2C04","name":"GLAGOLITIC CAPITAL LETTER DOBRO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C34","titlecase_mapping":"","symbol":"\u2C04"},11269:{"value":"2C05","name":"GLAGOLITIC CAPITAL LETTER YESTU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C35","titlecase_mapping":"","symbol":"\u2C05"},11270:{"value":"2C06","name":"GLAGOLITIC CAPITAL LETTER ZHIVETE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C36","titlecase_mapping":"","symbol":"\u2C06"},11271:{"value":"2C07","name":"GLAGOLITIC CAPITAL LETTER DZELO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C37","titlecase_mapping":"","symbol":"\u2C07"},11272:{"value":"2C08","name":"GLAGOLITIC CAPITAL LETTER ZEMLJA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C38","titlecase_mapping":"","symbol":"\u2C08"},11273:{"value":"2C09","name":"GLAGOLITIC CAPITAL LETTER IZHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C39","titlecase_mapping":"","symbol":"\u2C09"},11274:{"value":"2C0A","name":"GLAGOLITIC CAPITAL LETTER INITIAL IZHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C3A","titlecase_mapping":"","symbol":"\u2C0A"},11275:{"value":"2C0B","name":"GLAGOLITIC CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C3B","titlecase_mapping":"","symbol":"\u2C0B"},11276:{"value":"2C0C","name":"GLAGOLITIC CAPITAL LETTER DJERVI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C3C","titlecase_mapping":"","symbol":"\u2C0C"},11277:{"value":"2C0D","name":"GLAGOLITIC CAPITAL LETTER KAKO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C3D","titlecase_mapping":"","symbol":"\u2C0D"},11278:{"value":"2C0E","name":"GLAGOLITIC CAPITAL LETTER LJUDIJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C3E","titlecase_mapping":"","symbol":"\u2C0E"},11279:{"value":"2C0F","name":"GLAGOLITIC CAPITAL LETTER MYSLITE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C3F","titlecase_mapping":"","symbol":"\u2C0F"},11280:{"value":"2C10","name":"GLAGOLITIC CAPITAL LETTER NASHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C40","titlecase_mapping":"","symbol":"\u2C10"},11281:{"value":"2C11","name":"GLAGOLITIC CAPITAL LETTER ONU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C41","titlecase_mapping":"","symbol":"\u2C11"},11282:{"value":"2C12","name":"GLAGOLITIC CAPITAL LETTER POKOJI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C42","titlecase_mapping":"","symbol":"\u2C12"},11283:{"value":"2C13","name":"GLAGOLITIC CAPITAL LETTER RITSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C43","titlecase_mapping":"","symbol":"\u2C13"},11284:{"value":"2C14","name":"GLAGOLITIC CAPITAL LETTER SLOVO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C44","titlecase_mapping":"","symbol":"\u2C14"},11285:{"value":"2C15","name":"GLAGOLITIC CAPITAL LETTER TVRIDO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C45","titlecase_mapping":"","symbol":"\u2C15"},11286:{"value":"2C16","name":"GLAGOLITIC CAPITAL LETTER UKU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C46","titlecase_mapping":"","symbol":"\u2C16"},11287:{"value":"2C17","name":"GLAGOLITIC CAPITAL LETTER FRITU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C47","titlecase_mapping":"","symbol":"\u2C17"},11288:{"value":"2C18","name":"GLAGOLITIC CAPITAL LETTER HERU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C48","titlecase_mapping":"","symbol":"\u2C18"},11289:{"value":"2C19","name":"GLAGOLITIC CAPITAL LETTER OTU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C49","titlecase_mapping":"","symbol":"\u2C19"},11290:{"value":"2C1A","name":"GLAGOLITIC CAPITAL LETTER PE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C4A","titlecase_mapping":"","symbol":"\u2C1A"},11291:{"value":"2C1B","name":"GLAGOLITIC CAPITAL LETTER SHTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C4B","titlecase_mapping":"","symbol":"\u2C1B"},11292:{"value":"2C1C","name":"GLAGOLITIC CAPITAL LETTER TSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C4C","titlecase_mapping":"","symbol":"\u2C1C"},11293:{"value":"2C1D","name":"GLAGOLITIC CAPITAL LETTER CHRIVI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C4D","titlecase_mapping":"","symbol":"\u2C1D"},11294:{"value":"2C1E","name":"GLAGOLITIC CAPITAL LETTER SHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C4E","titlecase_mapping":"","symbol":"\u2C1E"},11295:{"value":"2C1F","name":"GLAGOLITIC CAPITAL LETTER YERU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C4F","titlecase_mapping":"","symbol":"\u2C1F"},11296:{"value":"2C20","name":"GLAGOLITIC CAPITAL LETTER YERI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C50","titlecase_mapping":"","symbol":"\u2C20"},11297:{"value":"2C21","name":"GLAGOLITIC CAPITAL LETTER YATI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C51","titlecase_mapping":"","symbol":"\u2C21"},11298:{"value":"2C22","name":"GLAGOLITIC CAPITAL LETTER SPIDERY HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C52","titlecase_mapping":"","symbol":"\u2C22"},11299:{"value":"2C23","name":"GLAGOLITIC CAPITAL LETTER YU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C53","titlecase_mapping":"","symbol":"\u2C23"},11300:{"value":"2C24","name":"GLAGOLITIC CAPITAL LETTER SMALL YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C54","titlecase_mapping":"","symbol":"\u2C24"},11301:{"value":"2C25","name":"GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C55","titlecase_mapping":"","symbol":"\u2C25"},11302:{"value":"2C26","name":"GLAGOLITIC CAPITAL LETTER YO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C56","titlecase_mapping":"","symbol":"\u2C26"},11303:{"value":"2C27","name":"GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C57","titlecase_mapping":"","symbol":"\u2C27"},11304:{"value":"2C28","name":"GLAGOLITIC CAPITAL LETTER BIG YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C58","titlecase_mapping":"","symbol":"\u2C28"},11305:{"value":"2C29","name":"GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C59","titlecase_mapping":"","symbol":"\u2C29"},11306:{"value":"2C2A","name":"GLAGOLITIC CAPITAL LETTER FITA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C5A","titlecase_mapping":"","symbol":"\u2C2A"},11307:{"value":"2C2B","name":"GLAGOLITIC CAPITAL LETTER IZHITSA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C5B","titlecase_mapping":"","symbol":"\u2C2B"},11308:{"value":"2C2C","name":"GLAGOLITIC CAPITAL LETTER SHTAPIC","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C5C","titlecase_mapping":"","symbol":"\u2C2C"},11309:{"value":"2C2D","name":"GLAGOLITIC CAPITAL LETTER TROKUTASTI A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C5D","titlecase_mapping":"","symbol":"\u2C2D"},11310:{"value":"2C2E","name":"GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C5E","titlecase_mapping":"","symbol":"\u2C2E"},11311:{"value":"2C2F","name":"GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C5F","titlecase_mapping":"","symbol":"\u2C2F"},11360:{"value":"2C60","name":"LATIN CAPITAL LETTER L WITH DOUBLE BAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C61","titlecase_mapping":"","symbol":"\u2C60"},11362:{"value":"2C62","name":"LATIN CAPITAL LETTER L WITH MIDDLE TILDE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"026B","titlecase_mapping":"","symbol":"\u2C62"},11363:{"value":"2C63","name":"LATIN CAPITAL LETTER P WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1D7D","titlecase_mapping":"","symbol":"\u2C63"},11364:{"value":"2C64","name":"LATIN CAPITAL LETTER R WITH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"027D","titlecase_mapping":"","symbol":"\u2C64"},11367:{"value":"2C67","name":"LATIN CAPITAL LETTER H WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C68","titlecase_mapping":"","symbol":"\u2C67"},11369:{"value":"2C69","name":"LATIN CAPITAL LETTER K WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C6A","titlecase_mapping":"","symbol":"\u2C69"},11371:{"value":"2C6B","name":"LATIN CAPITAL LETTER Z WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C6C","titlecase_mapping":"","symbol":"\u2C6B"},11373:{"value":"2C6D","name":"LATIN CAPITAL LETTER ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0251","titlecase_mapping":"","symbol":"\u2C6D"},11374:{"value":"2C6E","name":"LATIN CAPITAL LETTER M WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0271","titlecase_mapping":"","symbol":"\u2C6E"},11375:{"value":"2C6F","name":"LATIN CAPITAL LETTER TURNED A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0250","titlecase_mapping":"","symbol":"\u2C6F"},11376:{"value":"2C70","name":"LATIN CAPITAL LETTER TURNED ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0252","titlecase_mapping":"","symbol":"\u2C70"},11378:{"value":"2C72","name":"LATIN CAPITAL LETTER W WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C73","titlecase_mapping":"","symbol":"\u2C72"},11381:{"value":"2C75","name":"LATIN CAPITAL LETTER HALF H","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C76","titlecase_mapping":"","symbol":"\u2C75"},11390:{"value":"2C7E","name":"LATIN CAPITAL LETTER S WITH SWASH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"023F","titlecase_mapping":"","symbol":"\u2C7E"},11391:{"value":"2C7F","name":"LATIN CAPITAL LETTER Z WITH SWASH TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0240","titlecase_mapping":"","symbol":"\u2C7F"},11392:{"value":"2C80","name":"COPTIC CAPITAL LETTER ALFA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C81","titlecase_mapping":"","symbol":"\u2C80"},11394:{"value":"2C82","name":"COPTIC CAPITAL LETTER VIDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C83","titlecase_mapping":"","symbol":"\u2C82"},11396:{"value":"2C84","name":"COPTIC CAPITAL LETTER GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C85","titlecase_mapping":"","symbol":"\u2C84"},11398:{"value":"2C86","name":"COPTIC CAPITAL LETTER DALDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C87","titlecase_mapping":"","symbol":"\u2C86"},11400:{"value":"2C88","name":"COPTIC CAPITAL LETTER EIE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C89","titlecase_mapping":"","symbol":"\u2C88"},11402:{"value":"2C8A","name":"COPTIC CAPITAL LETTER SOU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C8B","titlecase_mapping":"","symbol":"\u2C8A"},11404:{"value":"2C8C","name":"COPTIC CAPITAL LETTER ZATA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C8D","titlecase_mapping":"","symbol":"\u2C8C"},11406:{"value":"2C8E","name":"COPTIC CAPITAL LETTER HATE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C8F","titlecase_mapping":"","symbol":"\u2C8E"},11408:{"value":"2C90","name":"COPTIC CAPITAL LETTER THETHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C91","titlecase_mapping":"","symbol":"\u2C90"},11410:{"value":"2C92","name":"COPTIC CAPITAL LETTER IAUDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C93","titlecase_mapping":"","symbol":"\u2C92"},11412:{"value":"2C94","name":"COPTIC CAPITAL LETTER KAPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C95","titlecase_mapping":"","symbol":"\u2C94"},11414:{"value":"2C96","name":"COPTIC CAPITAL LETTER LAULA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C97","titlecase_mapping":"","symbol":"\u2C96"},11416:{"value":"2C98","name":"COPTIC CAPITAL LETTER MI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C99","titlecase_mapping":"","symbol":"\u2C98"},11418:{"value":"2C9A","name":"COPTIC CAPITAL LETTER NI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C9B","titlecase_mapping":"","symbol":"\u2C9A"},11420:{"value":"2C9C","name":"COPTIC CAPITAL LETTER KSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C9D","titlecase_mapping":"","symbol":"\u2C9C"},11422:{"value":"2C9E","name":"COPTIC CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2C9F","titlecase_mapping":"","symbol":"\u2C9E"},11424:{"value":"2CA0","name":"COPTIC CAPITAL LETTER PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CA1","titlecase_mapping":"","symbol":"\u2CA0"},11426:{"value":"2CA2","name":"COPTIC CAPITAL LETTER RO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CA3","titlecase_mapping":"","symbol":"\u2CA2"},11428:{"value":"2CA4","name":"COPTIC CAPITAL LETTER SIMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CA5","titlecase_mapping":"","symbol":"\u2CA4"},11430:{"value":"2CA6","name":"COPTIC CAPITAL LETTER TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CA7","titlecase_mapping":"","symbol":"\u2CA6"},11432:{"value":"2CA8","name":"COPTIC CAPITAL LETTER UA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CA9","titlecase_mapping":"","symbol":"\u2CA8"},11434:{"value":"2CAA","name":"COPTIC CAPITAL LETTER FI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CAB","titlecase_mapping":"","symbol":"\u2CAA"},11436:{"value":"2CAC","name":"COPTIC CAPITAL LETTER KHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CAD","titlecase_mapping":"","symbol":"\u2CAC"},11438:{"value":"2CAE","name":"COPTIC CAPITAL LETTER PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CAF","titlecase_mapping":"","symbol":"\u2CAE"},11440:{"value":"2CB0","name":"COPTIC CAPITAL LETTER OOU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CB1","titlecase_mapping":"","symbol":"\u2CB0"},11442:{"value":"2CB2","name":"COPTIC CAPITAL LETTER DIALECT-P ALEF","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CB3","titlecase_mapping":"","symbol":"\u2CB2"},11444:{"value":"2CB4","name":"COPTIC CAPITAL LETTER OLD COPTIC AIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CB5","titlecase_mapping":"","symbol":"\u2CB4"},11446:{"value":"2CB6","name":"COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CB7","titlecase_mapping":"","symbol":"\u2CB6"},11448:{"value":"2CB8","name":"COPTIC CAPITAL LETTER DIALECT-P KAPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CB9","titlecase_mapping":"","symbol":"\u2CB8"},11450:{"value":"2CBA","name":"COPTIC CAPITAL LETTER DIALECT-P NI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CBB","titlecase_mapping":"","symbol":"\u2CBA"},11452:{"value":"2CBC","name":"COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CBD","titlecase_mapping":"","symbol":"\u2CBC"},11454:{"value":"2CBE","name":"COPTIC CAPITAL LETTER OLD COPTIC OOU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CBF","titlecase_mapping":"","symbol":"\u2CBE"},11456:{"value":"2CC0","name":"COPTIC CAPITAL LETTER SAMPI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CC1","titlecase_mapping":"","symbol":"\u2CC0"},11458:{"value":"2CC2","name":"COPTIC CAPITAL LETTER CROSSED SHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CC3","titlecase_mapping":"","symbol":"\u2CC2"},11460:{"value":"2CC4","name":"COPTIC CAPITAL LETTER OLD COPTIC SHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CC5","titlecase_mapping":"","symbol":"\u2CC4"},11462:{"value":"2CC6","name":"COPTIC CAPITAL LETTER OLD COPTIC ESH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CC7","titlecase_mapping":"","symbol":"\u2CC6"},11464:{"value":"2CC8","name":"COPTIC CAPITAL LETTER AKHMIMIC KHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CC9","titlecase_mapping":"","symbol":"\u2CC8"},11466:{"value":"2CCA","name":"COPTIC CAPITAL LETTER DIALECT-P HORI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CCB","titlecase_mapping":"","symbol":"\u2CCA"},11468:{"value":"2CCC","name":"COPTIC CAPITAL LETTER OLD COPTIC HORI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CCD","titlecase_mapping":"","symbol":"\u2CCC"},11470:{"value":"2CCE","name":"COPTIC CAPITAL LETTER OLD COPTIC HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CCF","titlecase_mapping":"","symbol":"\u2CCE"},11472:{"value":"2CD0","name":"COPTIC CAPITAL LETTER L-SHAPED HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CD1","titlecase_mapping":"","symbol":"\u2CD0"},11474:{"value":"2CD2","name":"COPTIC CAPITAL LETTER OLD COPTIC HEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CD3","titlecase_mapping":"","symbol":"\u2CD2"},11476:{"value":"2CD4","name":"COPTIC CAPITAL LETTER OLD COPTIC HAT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CD5","titlecase_mapping":"","symbol":"\u2CD4"},11478:{"value":"2CD6","name":"COPTIC CAPITAL LETTER OLD COPTIC GANGIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CD7","titlecase_mapping":"","symbol":"\u2CD6"},11480:{"value":"2CD8","name":"COPTIC CAPITAL LETTER OLD COPTIC DJA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CD9","titlecase_mapping":"","symbol":"\u2CD8"},11482:{"value":"2CDA","name":"COPTIC CAPITAL LETTER OLD COPTIC SHIMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CDB","titlecase_mapping":"","symbol":"\u2CDA"},11484:{"value":"2CDC","name":"COPTIC CAPITAL LETTER OLD NUBIAN SHIMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CDD","titlecase_mapping":"","symbol":"\u2CDC"},11486:{"value":"2CDE","name":"COPTIC CAPITAL LETTER OLD NUBIAN NGI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CDF","titlecase_mapping":"","symbol":"\u2CDE"},11488:{"value":"2CE0","name":"COPTIC CAPITAL LETTER OLD NUBIAN NYI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CE1","titlecase_mapping":"","symbol":"\u2CE0"},11490:{"value":"2CE2","name":"COPTIC CAPITAL LETTER OLD NUBIAN WAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CE3","titlecase_mapping":"","symbol":"\u2CE2"},11499:{"value":"2CEB","name":"COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CEC","titlecase_mapping":"","symbol":"\u2CEB"},11501:{"value":"2CED","name":"COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CEE","titlecase_mapping":"","symbol":"\u2CED"},11506:{"value":"2CF2","name":"COPTIC CAPITAL LETTER BOHAIRIC KHEI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2CF3","titlecase_mapping":"","symbol":"\u2CF2"},42560:{"value":"A640","name":"CYRILLIC CAPITAL LETTER ZEMLYA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A641","titlecase_mapping":"","symbol":"\uA640"},42562:{"value":"A642","name":"CYRILLIC CAPITAL LETTER DZELO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A643","titlecase_mapping":"","symbol":"\uA642"},42564:{"value":"A644","name":"CYRILLIC CAPITAL LETTER REVERSED DZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A645","titlecase_mapping":"","symbol":"\uA644"},42566:{"value":"A646","name":"CYRILLIC CAPITAL LETTER IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A647","titlecase_mapping":"","symbol":"\uA646"},42568:{"value":"A648","name":"CYRILLIC CAPITAL LETTER DJERV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A649","titlecase_mapping":"","symbol":"\uA648"},42570:{"value":"A64A","name":"CYRILLIC CAPITAL LETTER MONOGRAPH UK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A64B","titlecase_mapping":"","symbol":"\uA64A"},42572:{"value":"A64C","name":"CYRILLIC CAPITAL LETTER BROAD OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A64D","titlecase_mapping":"","symbol":"\uA64C"},42574:{"value":"A64E","name":"CYRILLIC CAPITAL LETTER NEUTRAL YER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A64F","titlecase_mapping":"","symbol":"\uA64E"},42576:{"value":"A650","name":"CYRILLIC CAPITAL LETTER YERU WITH BACK YER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A651","titlecase_mapping":"","symbol":"\uA650"},42578:{"value":"A652","name":"CYRILLIC CAPITAL LETTER IOTIFIED YAT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A653","titlecase_mapping":"","symbol":"\uA652"},42580:{"value":"A654","name":"CYRILLIC CAPITAL LETTER REVERSED YU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A655","titlecase_mapping":"","symbol":"\uA654"},42582:{"value":"A656","name":"CYRILLIC CAPITAL LETTER IOTIFIED A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A657","titlecase_mapping":"","symbol":"\uA656"},42584:{"value":"A658","name":"CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A659","titlecase_mapping":"","symbol":"\uA658"},42586:{"value":"A65A","name":"CYRILLIC CAPITAL LETTER BLENDED YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A65B","titlecase_mapping":"","symbol":"\uA65A"},42588:{"value":"A65C","name":"CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A65D","titlecase_mapping":"","symbol":"\uA65C"},42590:{"value":"A65E","name":"CYRILLIC CAPITAL LETTER YN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A65F","titlecase_mapping":"","symbol":"\uA65E"},42592:{"value":"A660","name":"CYRILLIC CAPITAL LETTER REVERSED TSE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A661","titlecase_mapping":"","symbol":"\uA660"},42594:{"value":"A662","name":"CYRILLIC CAPITAL LETTER SOFT DE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A663","titlecase_mapping":"","symbol":"\uA662"},42596:{"value":"A664","name":"CYRILLIC CAPITAL LETTER SOFT EL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A665","titlecase_mapping":"","symbol":"\uA664"},42598:{"value":"A666","name":"CYRILLIC CAPITAL LETTER SOFT EM","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A667","titlecase_mapping":"","symbol":"\uA666"},42600:{"value":"A668","name":"CYRILLIC CAPITAL LETTER MONOCULAR O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A669","titlecase_mapping":"","symbol":"\uA668"},42602:{"value":"A66A","name":"CYRILLIC CAPITAL LETTER BINOCULAR O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A66B","titlecase_mapping":"","symbol":"\uA66A"},42604:{"value":"A66C","name":"CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A66D","titlecase_mapping":"","symbol":"\uA66C"},42624:{"value":"A680","name":"CYRILLIC CAPITAL LETTER DWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A681","titlecase_mapping":"","symbol":"\uA680"},42626:{"value":"A682","name":"CYRILLIC CAPITAL LETTER DZWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A683","titlecase_mapping":"","symbol":"\uA682"},42628:{"value":"A684","name":"CYRILLIC CAPITAL LETTER ZHWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A685","titlecase_mapping":"","symbol":"\uA684"},42630:{"value":"A686","name":"CYRILLIC CAPITAL LETTER CCHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A687","titlecase_mapping":"","symbol":"\uA686"},42632:{"value":"A688","name":"CYRILLIC CAPITAL LETTER DZZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A689","titlecase_mapping":"","symbol":"\uA688"},42634:{"value":"A68A","name":"CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A68B","titlecase_mapping":"","symbol":"\uA68A"},42636:{"value":"A68C","name":"CYRILLIC CAPITAL LETTER TWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A68D","titlecase_mapping":"","symbol":"\uA68C"},42638:{"value":"A68E","name":"CYRILLIC CAPITAL LETTER TSWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A68F","titlecase_mapping":"","symbol":"\uA68E"},42640:{"value":"A690","name":"CYRILLIC CAPITAL LETTER TSSE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A691","titlecase_mapping":"","symbol":"\uA690"},42642:{"value":"A692","name":"CYRILLIC CAPITAL LETTER TCHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A693","titlecase_mapping":"","symbol":"\uA692"},42644:{"value":"A694","name":"CYRILLIC CAPITAL LETTER HWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A695","titlecase_mapping":"","symbol":"\uA694"},42646:{"value":"A696","name":"CYRILLIC CAPITAL LETTER SHWE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A697","titlecase_mapping":"","symbol":"\uA696"},42648:{"value":"A698","name":"CYRILLIC CAPITAL LETTER DOUBLE O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A699","titlecase_mapping":"","symbol":"\uA698"},42650:{"value":"A69A","name":"CYRILLIC CAPITAL LETTER CROSSED O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A69B","titlecase_mapping":"","symbol":"\uA69A"},42786:{"value":"A722","name":"LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A723","titlecase_mapping":"","symbol":"\uA722"},42788:{"value":"A724","name":"LATIN CAPITAL LETTER EGYPTOLOGICAL AIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A725","titlecase_mapping":"","symbol":"\uA724"},42790:{"value":"A726","name":"LATIN CAPITAL LETTER HENG","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A727","titlecase_mapping":"","symbol":"\uA726"},42792:{"value":"A728","name":"LATIN CAPITAL LETTER TZ","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A729","titlecase_mapping":"","symbol":"\uA728"},42794:{"value":"A72A","name":"LATIN CAPITAL LETTER TRESILLO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A72B","titlecase_mapping":"","symbol":"\uA72A"},42796:{"value":"A72C","name":"LATIN CAPITAL LETTER CUATRILLO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A72D","titlecase_mapping":"","symbol":"\uA72C"},42798:{"value":"A72E","name":"LATIN CAPITAL LETTER CUATRILLO WITH COMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A72F","titlecase_mapping":"","symbol":"\uA72E"},42802:{"value":"A732","name":"LATIN CAPITAL LETTER AA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A733","titlecase_mapping":"","symbol":"\uA732"},42804:{"value":"A734","name":"LATIN CAPITAL LETTER AO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A735","titlecase_mapping":"","symbol":"\uA734"},42806:{"value":"A736","name":"LATIN CAPITAL LETTER AU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A737","titlecase_mapping":"","symbol":"\uA736"},42808:{"value":"A738","name":"LATIN CAPITAL LETTER AV","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A739","titlecase_mapping":"","symbol":"\uA738"},42810:{"value":"A73A","name":"LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A73B","titlecase_mapping":"","symbol":"\uA73A"},42812:{"value":"A73C","name":"LATIN CAPITAL LETTER AY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A73D","titlecase_mapping":"","symbol":"\uA73C"},42814:{"value":"A73E","name":"LATIN CAPITAL LETTER REVERSED C WITH DOT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A73F","titlecase_mapping":"","symbol":"\uA73E"},42816:{"value":"A740","name":"LATIN CAPITAL LETTER K WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A741","titlecase_mapping":"","symbol":"\uA740"},42818:{"value":"A742","name":"LATIN CAPITAL LETTER K WITH DIAGONAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A743","titlecase_mapping":"","symbol":"\uA742"},42820:{"value":"A744","name":"LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A745","titlecase_mapping":"","symbol":"\uA744"},42822:{"value":"A746","name":"LATIN CAPITAL LETTER BROKEN L","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A747","titlecase_mapping":"","symbol":"\uA746"},42824:{"value":"A748","name":"LATIN CAPITAL LETTER L WITH HIGH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A749","titlecase_mapping":"","symbol":"\uA748"},42826:{"value":"A74A","name":"LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A74B","titlecase_mapping":"","symbol":"\uA74A"},42828:{"value":"A74C","name":"LATIN CAPITAL LETTER O WITH LOOP","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A74D","titlecase_mapping":"","symbol":"\uA74C"},42830:{"value":"A74E","name":"LATIN CAPITAL LETTER OO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A74F","titlecase_mapping":"","symbol":"\uA74E"},42832:{"value":"A750","name":"LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A751","titlecase_mapping":"","symbol":"\uA750"},42834:{"value":"A752","name":"LATIN CAPITAL LETTER P WITH FLOURISH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A753","titlecase_mapping":"","symbol":"\uA752"},42836:{"value":"A754","name":"LATIN CAPITAL LETTER P WITH SQUIRREL TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A755","titlecase_mapping":"","symbol":"\uA754"},42838:{"value":"A756","name":"LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A757","titlecase_mapping":"","symbol":"\uA756"},42840:{"value":"A758","name":"LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A759","titlecase_mapping":"","symbol":"\uA758"},42842:{"value":"A75A","name":"LATIN CAPITAL LETTER R ROTUNDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A75B","titlecase_mapping":"","symbol":"\uA75A"},42844:{"value":"A75C","name":"LATIN CAPITAL LETTER RUM ROTUNDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A75D","titlecase_mapping":"","symbol":"\uA75C"},42846:{"value":"A75E","name":"LATIN CAPITAL LETTER V WITH DIAGONAL STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A75F","titlecase_mapping":"","symbol":"\uA75E"},42848:{"value":"A760","name":"LATIN CAPITAL LETTER VY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A761","titlecase_mapping":"","symbol":"\uA760"},42850:{"value":"A762","name":"LATIN CAPITAL LETTER VISIGOTHIC Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A763","titlecase_mapping":"","symbol":"\uA762"},42852:{"value":"A764","name":"LATIN CAPITAL LETTER THORN WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A765","titlecase_mapping":"","symbol":"\uA764"},42854:{"value":"A766","name":"LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A767","titlecase_mapping":"","symbol":"\uA766"},42856:{"value":"A768","name":"LATIN CAPITAL LETTER VEND","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A769","titlecase_mapping":"","symbol":"\uA768"},42858:{"value":"A76A","name":"LATIN CAPITAL LETTER ET","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A76B","titlecase_mapping":"","symbol":"\uA76A"},42860:{"value":"A76C","name":"LATIN CAPITAL LETTER IS","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A76D","titlecase_mapping":"","symbol":"\uA76C"},42862:{"value":"A76E","name":"LATIN CAPITAL LETTER CON","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A76F","titlecase_mapping":"","symbol":"\uA76E"},42873:{"value":"A779","name":"LATIN CAPITAL LETTER INSULAR D","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A77A","titlecase_mapping":"","symbol":"\uA779"},42875:{"value":"A77B","name":"LATIN CAPITAL LETTER INSULAR F","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A77C","titlecase_mapping":"","symbol":"\uA77B"},42877:{"value":"A77D","name":"LATIN CAPITAL LETTER INSULAR G","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1D79","titlecase_mapping":"","symbol":"\uA77D"},42878:{"value":"A77E","name":"LATIN CAPITAL LETTER TURNED INSULAR G","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A77F","titlecase_mapping":"","symbol":"\uA77E"},42880:{"value":"A780","name":"LATIN CAPITAL LETTER TURNED L","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A781","titlecase_mapping":"","symbol":"\uA780"},42882:{"value":"A782","name":"LATIN CAPITAL LETTER INSULAR R","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A783","titlecase_mapping":"","symbol":"\uA782"},42884:{"value":"A784","name":"LATIN CAPITAL LETTER INSULAR S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A785","titlecase_mapping":"","symbol":"\uA784"},42886:{"value":"A786","name":"LATIN CAPITAL LETTER INSULAR T","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A787","titlecase_mapping":"","symbol":"\uA786"},42891:{"value":"A78B","name":"LATIN CAPITAL LETTER SALTILLO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A78C","titlecase_mapping":"","symbol":"\uA78B"},42893:{"value":"A78D","name":"LATIN CAPITAL LETTER TURNED H","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0265","titlecase_mapping":"","symbol":"\uA78D"},42896:{"value":"A790","name":"LATIN CAPITAL LETTER N WITH DESCENDER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A791","titlecase_mapping":"","symbol":"\uA790"},42898:{"value":"A792","name":"LATIN CAPITAL LETTER C WITH BAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A793","titlecase_mapping":"","symbol":"\uA792"},42902:{"value":"A796","name":"LATIN CAPITAL LETTER B WITH FLOURISH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A797","titlecase_mapping":"","symbol":"\uA796"},42904:{"value":"A798","name":"LATIN CAPITAL LETTER F WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A799","titlecase_mapping":"","symbol":"\uA798"},42906:{"value":"A79A","name":"LATIN CAPITAL LETTER VOLAPUK AE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A79B","titlecase_mapping":"","symbol":"\uA79A"},42908:{"value":"A79C","name":"LATIN CAPITAL LETTER VOLAPUK OE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A79D","titlecase_mapping":"","symbol":"\uA79C"},42910:{"value":"A79E","name":"LATIN CAPITAL LETTER VOLAPUK UE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A79F","titlecase_mapping":"","symbol":"\uA79E"},42912:{"value":"A7A0","name":"LATIN CAPITAL LETTER G WITH OBLIQUE STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7A1","titlecase_mapping":"","symbol":"\uA7A0"},42914:{"value":"A7A2","name":"LATIN CAPITAL LETTER K WITH OBLIQUE STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7A3","titlecase_mapping":"","symbol":"\uA7A2"},42916:{"value":"A7A4","name":"LATIN CAPITAL LETTER N WITH OBLIQUE STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7A5","titlecase_mapping":"","symbol":"\uA7A4"},42918:{"value":"A7A6","name":"LATIN CAPITAL LETTER R WITH OBLIQUE STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7A7","titlecase_mapping":"","symbol":"\uA7A6"},42920:{"value":"A7A8","name":"LATIN CAPITAL LETTER S WITH OBLIQUE STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7A9","titlecase_mapping":"","symbol":"\uA7A8"},42922:{"value":"A7AA","name":"LATIN CAPITAL LETTER H WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0266","titlecase_mapping":"","symbol":"\uA7AA"},42923:{"value":"A7AB","name":"LATIN CAPITAL LETTER REVERSED OPEN E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"025C","titlecase_mapping":"","symbol":"\uA7AB"},42924:{"value":"A7AC","name":"LATIN CAPITAL LETTER SCRIPT G","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0261","titlecase_mapping":"","symbol":"\uA7AC"},42925:{"value":"A7AD","name":"LATIN CAPITAL LETTER L WITH BELT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"026C","titlecase_mapping":"","symbol":"\uA7AD"},42926:{"value":"A7AE","name":"LATIN CAPITAL LETTER SMALL CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"026A","titlecase_mapping":"","symbol":"\uA7AE"},42928:{"value":"A7B0","name":"LATIN CAPITAL LETTER TURNED K","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"029E","titlecase_mapping":"","symbol":"\uA7B0"},42929:{"value":"A7B1","name":"LATIN CAPITAL LETTER TURNED T","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0287","titlecase_mapping":"","symbol":"\uA7B1"},42930:{"value":"A7B2","name":"LATIN CAPITAL LETTER J WITH CROSSED-TAIL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"029D","titlecase_mapping":"","symbol":"\uA7B2"},42931:{"value":"A7B3","name":"LATIN CAPITAL LETTER CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"AB53","titlecase_mapping":"","symbol":"\uA7B3"},42932:{"value":"A7B4","name":"LATIN CAPITAL LETTER BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7B5","titlecase_mapping":"","symbol":"\uA7B4"},42934:{"value":"A7B6","name":"LATIN CAPITAL LETTER OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7B7","titlecase_mapping":"","symbol":"\uA7B6"},42936:{"value":"A7B8","name":"LATIN CAPITAL LETTER U WITH STROKE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7B9","titlecase_mapping":"","symbol":"\uA7B8"},42938:{"value":"A7BA","name":"LATIN CAPITAL LETTER GLOTTAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7BB","titlecase_mapping":"","symbol":"\uA7BA"},42940:{"value":"A7BC","name":"LATIN CAPITAL LETTER GLOTTAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7BD","titlecase_mapping":"","symbol":"\uA7BC"},42942:{"value":"A7BE","name":"LATIN CAPITAL LETTER GLOTTAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7BF","titlecase_mapping":"","symbol":"\uA7BE"},42944:{"value":"A7C0","name":"LATIN CAPITAL LETTER OLD POLISH O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7C1","titlecase_mapping":"","symbol":"\uA7C0"},42946:{"value":"A7C2","name":"LATIN CAPITAL LETTER ANGLICANA W","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7C3","titlecase_mapping":"","symbol":"\uA7C2"},42948:{"value":"A7C4","name":"LATIN CAPITAL LETTER C WITH PALATAL HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A794","titlecase_mapping":"","symbol":"\uA7C4"},42949:{"value":"A7C5","name":"LATIN CAPITAL LETTER S WITH HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"0282","titlecase_mapping":"","symbol":"\uA7C5"},42950:{"value":"A7C6","name":"LATIN CAPITAL LETTER Z WITH PALATAL HOOK","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1D8E","titlecase_mapping":"","symbol":"\uA7C6"},42951:{"value":"A7C7","name":"LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7C8","titlecase_mapping":"","symbol":"\uA7C7"},42953:{"value":"A7C9","name":"LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7CA","titlecase_mapping":"","symbol":"\uA7C9"},42960:{"value":"A7D0","name":"LATIN CAPITAL LETTER CLOSED INSULAR G","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7D1","titlecase_mapping":"","symbol":"\uA7D0"},42966:{"value":"A7D6","name":"LATIN CAPITAL LETTER MIDDLE SCOTS S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7D7","titlecase_mapping":"","symbol":"\uA7D6"},42968:{"value":"A7D8","name":"LATIN CAPITAL LETTER SIGMOID S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7D9","titlecase_mapping":"","symbol":"\uA7D8"},42997:{"value":"A7F5","name":"LATIN CAPITAL LETTER REVERSED HALF H","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"A7F6","titlecase_mapping":"","symbol":"\uA7F5"},65313:{"value":"FF21","name":"FULLWIDTH LATIN CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF41","titlecase_mapping":"","symbol":"\uFF21"},65314:{"value":"FF22","name":"FULLWIDTH LATIN CAPITAL LETTER B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF42","titlecase_mapping":"","symbol":"\uFF22"},65315:{"value":"FF23","name":"FULLWIDTH LATIN CAPITAL LETTER C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF43","titlecase_mapping":"","symbol":"\uFF23"},65316:{"value":"FF24","name":"FULLWIDTH LATIN CAPITAL LETTER D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF44","titlecase_mapping":"","symbol":"\uFF24"},65317:{"value":"FF25","name":"FULLWIDTH LATIN CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF45","titlecase_mapping":"","symbol":"\uFF25"},65318:{"value":"FF26","name":"FULLWIDTH LATIN CAPITAL LETTER F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF46","titlecase_mapping":"","symbol":"\uFF26"},65319:{"value":"FF27","name":"FULLWIDTH LATIN CAPITAL LETTER G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF47","titlecase_mapping":"","symbol":"\uFF27"},65320:{"value":"FF28","name":"FULLWIDTH LATIN CAPITAL LETTER H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF48","titlecase_mapping":"","symbol":"\uFF28"},65321:{"value":"FF29","name":"FULLWIDTH LATIN CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF49","titlecase_mapping":"","symbol":"\uFF29"},65322:{"value":"FF2A","name":"FULLWIDTH LATIN CAPITAL LETTER J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF4A","titlecase_mapping":"","symbol":"\uFF2A"},65323:{"value":"FF2B","name":"FULLWIDTH LATIN CAPITAL LETTER K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF4B","titlecase_mapping":"","symbol":"\uFF2B"},65324:{"value":"FF2C","name":"FULLWIDTH LATIN CAPITAL LETTER L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF4C","titlecase_mapping":"","symbol":"\uFF2C"},65325:{"value":"FF2D","name":"FULLWIDTH LATIN CAPITAL LETTER M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF4D","titlecase_mapping":"","symbol":"\uFF2D"},65326:{"value":"FF2E","name":"FULLWIDTH LATIN CAPITAL LETTER N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF4E","titlecase_mapping":"","symbol":"\uFF2E"},65327:{"value":"FF2F","name":"FULLWIDTH LATIN CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF4F","titlecase_mapping":"","symbol":"\uFF2F"},65328:{"value":"FF30","name":"FULLWIDTH LATIN CAPITAL LETTER P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF50","titlecase_mapping":"","symbol":"\uFF30"},65329:{"value":"FF31","name":"FULLWIDTH LATIN CAPITAL LETTER Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF51","titlecase_mapping":"","symbol":"\uFF31"},65330:{"value":"FF32","name":"FULLWIDTH LATIN CAPITAL LETTER R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF52","titlecase_mapping":"","symbol":"\uFF32"},65331:{"value":"FF33","name":"FULLWIDTH LATIN CAPITAL LETTER S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF53","titlecase_mapping":"","symbol":"\uFF33"},65332:{"value":"FF34","name":"FULLWIDTH LATIN CAPITAL LETTER T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF54","titlecase_mapping":"","symbol":"\uFF34"},65333:{"value":"FF35","name":"FULLWIDTH LATIN CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF55","titlecase_mapping":"","symbol":"\uFF35"},65334:{"value":"FF36","name":"FULLWIDTH LATIN CAPITAL LETTER V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF56","titlecase_mapping":"","symbol":"\uFF36"},65335:{"value":"FF37","name":"FULLWIDTH LATIN CAPITAL LETTER W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF57","titlecase_mapping":"","symbol":"\uFF37"},65336:{"value":"FF38","name":"FULLWIDTH LATIN CAPITAL LETTER X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF58","titlecase_mapping":"","symbol":"\uFF38"},65337:{"value":"FF39","name":"FULLWIDTH LATIN CAPITAL LETTER Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF59","titlecase_mapping":"","symbol":"\uFF39"},65338:{"value":"FF3A","name":"FULLWIDTH LATIN CAPITAL LETTER Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"FF5A","titlecase_mapping":"","symbol":"\uFF3A"},66560:{"value":"10400","name":"DESERET CAPITAL LETTER LONG I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10428","titlecase_mapping":"","symbol":"\ud801\udc00"},66561:{"value":"10401","name":"DESERET CAPITAL LETTER LONG E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10429","titlecase_mapping":"","symbol":"\ud801\udc01"},66562:{"value":"10402","name":"DESERET CAPITAL LETTER LONG A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1042A","titlecase_mapping":"","symbol":"\ud801\udc02"},66563:{"value":"10403","name":"DESERET CAPITAL LETTER LONG AH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1042B","titlecase_mapping":"","symbol":"\ud801\udc03"},66564:{"value":"10404","name":"DESERET CAPITAL LETTER LONG O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1042C","titlecase_mapping":"","symbol":"\ud801\udc04"},66565:{"value":"10405","name":"DESERET CAPITAL LETTER LONG OO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1042D","titlecase_mapping":"","symbol":"\ud801\udc05"},66566:{"value":"10406","name":"DESERET CAPITAL LETTER SHORT I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1042E","titlecase_mapping":"","symbol":"\ud801\udc06"},66567:{"value":"10407","name":"DESERET CAPITAL LETTER SHORT E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1042F","titlecase_mapping":"","symbol":"\ud801\udc07"},66568:{"value":"10408","name":"DESERET CAPITAL LETTER SHORT A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10430","titlecase_mapping":"","symbol":"\ud801\udc08"},66569:{"value":"10409","name":"DESERET CAPITAL LETTER SHORT AH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10431","titlecase_mapping":"","symbol":"\ud801\udc09"},66570:{"value":"1040A","name":"DESERET CAPITAL LETTER SHORT O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10432","titlecase_mapping":"","symbol":"\ud801\udc0a"},66571:{"value":"1040B","name":"DESERET CAPITAL LETTER SHORT OO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10433","titlecase_mapping":"","symbol":"\ud801\udc0b"},66572:{"value":"1040C","name":"DESERET CAPITAL LETTER AY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10434","titlecase_mapping":"","symbol":"\ud801\udc0c"},66573:{"value":"1040D","name":"DESERET CAPITAL LETTER OW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10435","titlecase_mapping":"","symbol":"\ud801\udc0d"},66574:{"value":"1040E","name":"DESERET CAPITAL LETTER WU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10436","titlecase_mapping":"","symbol":"\ud801\udc0e"},66575:{"value":"1040F","name":"DESERET CAPITAL LETTER YEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10437","titlecase_mapping":"","symbol":"\ud801\udc0f"},66576:{"value":"10410","name":"DESERET CAPITAL LETTER H","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10438","titlecase_mapping":"","symbol":"\ud801\udc10"},66577:{"value":"10411","name":"DESERET CAPITAL LETTER PEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10439","titlecase_mapping":"","symbol":"\ud801\udc11"},66578:{"value":"10412","name":"DESERET CAPITAL LETTER BEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1043A","titlecase_mapping":"","symbol":"\ud801\udc12"},66579:{"value":"10413","name":"DESERET CAPITAL LETTER TEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1043B","titlecase_mapping":"","symbol":"\ud801\udc13"},66580:{"value":"10414","name":"DESERET CAPITAL LETTER DEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1043C","titlecase_mapping":"","symbol":"\ud801\udc14"},66581:{"value":"10415","name":"DESERET CAPITAL LETTER CHEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1043D","titlecase_mapping":"","symbol":"\ud801\udc15"},66582:{"value":"10416","name":"DESERET CAPITAL LETTER JEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1043E","titlecase_mapping":"","symbol":"\ud801\udc16"},66583:{"value":"10417","name":"DESERET CAPITAL LETTER KAY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1043F","titlecase_mapping":"","symbol":"\ud801\udc17"},66584:{"value":"10418","name":"DESERET CAPITAL LETTER GAY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10440","titlecase_mapping":"","symbol":"\ud801\udc18"},66585:{"value":"10419","name":"DESERET CAPITAL LETTER EF","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10441","titlecase_mapping":"","symbol":"\ud801\udc19"},66586:{"value":"1041A","name":"DESERET CAPITAL LETTER VEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10442","titlecase_mapping":"","symbol":"\ud801\udc1a"},66587:{"value":"1041B","name":"DESERET CAPITAL LETTER ETH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10443","titlecase_mapping":"","symbol":"\ud801\udc1b"},66588:{"value":"1041C","name":"DESERET CAPITAL LETTER THEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10444","titlecase_mapping":"","symbol":"\ud801\udc1c"},66589:{"value":"1041D","name":"DESERET CAPITAL LETTER ES","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10445","titlecase_mapping":"","symbol":"\ud801\udc1d"},66590:{"value":"1041E","name":"DESERET CAPITAL LETTER ZEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10446","titlecase_mapping":"","symbol":"\ud801\udc1e"},66591:{"value":"1041F","name":"DESERET CAPITAL LETTER ESH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10447","titlecase_mapping":"","symbol":"\ud801\udc1f"},66592:{"value":"10420","name":"DESERET CAPITAL LETTER ZHEE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10448","titlecase_mapping":"","symbol":"\ud801\udc20"},66593:{"value":"10421","name":"DESERET CAPITAL LETTER ER","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10449","titlecase_mapping":"","symbol":"\ud801\udc21"},66594:{"value":"10422","name":"DESERET CAPITAL LETTER EL","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1044A","titlecase_mapping":"","symbol":"\ud801\udc22"},66595:{"value":"10423","name":"DESERET CAPITAL LETTER EM","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1044B","titlecase_mapping":"","symbol":"\ud801\udc23"},66596:{"value":"10424","name":"DESERET CAPITAL LETTER EN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1044C","titlecase_mapping":"","symbol":"\ud801\udc24"},66597:{"value":"10425","name":"DESERET CAPITAL LETTER ENG","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1044D","titlecase_mapping":"","symbol":"\ud801\udc25"},66598:{"value":"10426","name":"DESERET CAPITAL LETTER OI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1044E","titlecase_mapping":"","symbol":"\ud801\udc26"},66599:{"value":"10427","name":"DESERET CAPITAL LETTER EW","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1044F","titlecase_mapping":"","symbol":"\ud801\udc27"},66736:{"value":"104B0","name":"OSAGE CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104D8","titlecase_mapping":"","symbol":"\ud801\udcb0"},66737:{"value":"104B1","name":"OSAGE CAPITAL LETTER AI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104D9","titlecase_mapping":"","symbol":"\ud801\udcb1"},66738:{"value":"104B2","name":"OSAGE CAPITAL LETTER AIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104DA","titlecase_mapping":"","symbol":"\ud801\udcb2"},66739:{"value":"104B3","name":"OSAGE CAPITAL LETTER AH","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104DB","titlecase_mapping":"","symbol":"\ud801\udcb3"},66740:{"value":"104B4","name":"OSAGE CAPITAL LETTER BRA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104DC","titlecase_mapping":"","symbol":"\ud801\udcb4"},66741:{"value":"104B5","name":"OSAGE CAPITAL LETTER CHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104DD","titlecase_mapping":"","symbol":"\ud801\udcb5"},66742:{"value":"104B6","name":"OSAGE CAPITAL LETTER EHCHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104DE","titlecase_mapping":"","symbol":"\ud801\udcb6"},66743:{"value":"104B7","name":"OSAGE CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104DF","titlecase_mapping":"","symbol":"\ud801\udcb7"},66744:{"value":"104B8","name":"OSAGE CAPITAL LETTER EIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E0","titlecase_mapping":"","symbol":"\ud801\udcb8"},66745:{"value":"104B9","name":"OSAGE CAPITAL LETTER HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E1","titlecase_mapping":"","symbol":"\ud801\udcb9"},66746:{"value":"104BA","name":"OSAGE CAPITAL LETTER HYA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E2","titlecase_mapping":"","symbol":"\ud801\udcba"},66747:{"value":"104BB","name":"OSAGE CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E3","titlecase_mapping":"","symbol":"\ud801\udcbb"},66748:{"value":"104BC","name":"OSAGE CAPITAL LETTER KA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E4","titlecase_mapping":"","symbol":"\ud801\udcbc"},66749:{"value":"104BD","name":"OSAGE CAPITAL LETTER EHKA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E5","titlecase_mapping":"","symbol":"\ud801\udcbd"},66750:{"value":"104BE","name":"OSAGE CAPITAL LETTER KYA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E6","titlecase_mapping":"","symbol":"\ud801\udcbe"},66751:{"value":"104BF","name":"OSAGE CAPITAL LETTER LA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E7","titlecase_mapping":"","symbol":"\ud801\udcbf"},66752:{"value":"104C0","name":"OSAGE CAPITAL LETTER MA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E8","titlecase_mapping":"","symbol":"\ud801\udcc0"},66753:{"value":"104C1","name":"OSAGE CAPITAL LETTER NA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104E9","titlecase_mapping":"","symbol":"\ud801\udcc1"},66754:{"value":"104C2","name":"OSAGE CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104EA","titlecase_mapping":"","symbol":"\ud801\udcc2"},66755:{"value":"104C3","name":"OSAGE CAPITAL LETTER OIN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104EB","titlecase_mapping":"","symbol":"\ud801\udcc3"},66756:{"value":"104C4","name":"OSAGE CAPITAL LETTER PA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104EC","titlecase_mapping":"","symbol":"\ud801\udcc4"},66757:{"value":"104C5","name":"OSAGE CAPITAL LETTER EHPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104ED","titlecase_mapping":"","symbol":"\ud801\udcc5"},66758:{"value":"104C6","name":"OSAGE CAPITAL LETTER SA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104EE","titlecase_mapping":"","symbol":"\ud801\udcc6"},66759:{"value":"104C7","name":"OSAGE CAPITAL LETTER SHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104EF","titlecase_mapping":"","symbol":"\ud801\udcc7"},66760:{"value":"104C8","name":"OSAGE CAPITAL LETTER TA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F0","titlecase_mapping":"","symbol":"\ud801\udcc8"},66761:{"value":"104C9","name":"OSAGE CAPITAL LETTER EHTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F1","titlecase_mapping":"","symbol":"\ud801\udcc9"},66762:{"value":"104CA","name":"OSAGE CAPITAL LETTER TSA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F2","titlecase_mapping":"","symbol":"\ud801\udcca"},66763:{"value":"104CB","name":"OSAGE CAPITAL LETTER EHTSA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F3","titlecase_mapping":"","symbol":"\ud801\udccb"},66764:{"value":"104CC","name":"OSAGE CAPITAL LETTER TSHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F4","titlecase_mapping":"","symbol":"\ud801\udccc"},66765:{"value":"104CD","name":"OSAGE CAPITAL LETTER DHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F5","titlecase_mapping":"","symbol":"\ud801\udccd"},66766:{"value":"104CE","name":"OSAGE CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F6","titlecase_mapping":"","symbol":"\ud801\udcce"},66767:{"value":"104CF","name":"OSAGE CAPITAL LETTER WA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F7","titlecase_mapping":"","symbol":"\ud801\udccf"},66768:{"value":"104D0","name":"OSAGE CAPITAL LETTER KHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F8","titlecase_mapping":"","symbol":"\ud801\udcd0"},66769:{"value":"104D1","name":"OSAGE CAPITAL LETTER GHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104F9","titlecase_mapping":"","symbol":"\ud801\udcd1"},66770:{"value":"104D2","name":"OSAGE CAPITAL LETTER ZA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104FA","titlecase_mapping":"","symbol":"\ud801\udcd2"},66771:{"value":"104D3","name":"OSAGE CAPITAL LETTER ZHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"104FB","titlecase_mapping":"","symbol":"\ud801\udcd3"},66928:{"value":"10570","name":"VITHKUQI CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10597","titlecase_mapping":"","symbol":"\ud801\udd70"},66929:{"value":"10571","name":"VITHKUQI CAPITAL LETTER BBE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10598","titlecase_mapping":"","symbol":"\ud801\udd71"},66930:{"value":"10572","name":"VITHKUQI CAPITAL LETTER BE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10599","titlecase_mapping":"","symbol":"\ud801\udd72"},66931:{"value":"10573","name":"VITHKUQI CAPITAL LETTER CE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1059A","titlecase_mapping":"","symbol":"\ud801\udd73"},66932:{"value":"10574","name":"VITHKUQI CAPITAL LETTER CHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1059B","titlecase_mapping":"","symbol":"\ud801\udd74"},66933:{"value":"10575","name":"VITHKUQI CAPITAL LETTER DE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1059C","titlecase_mapping":"","symbol":"\ud801\udd75"},66934:{"value":"10576","name":"VITHKUQI CAPITAL LETTER DHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1059D","titlecase_mapping":"","symbol":"\ud801\udd76"},66935:{"value":"10577","name":"VITHKUQI CAPITAL LETTER EI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1059E","titlecase_mapping":"","symbol":"\ud801\udd77"},66936:{"value":"10578","name":"VITHKUQI CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1059F","titlecase_mapping":"","symbol":"\ud801\udd78"},66937:{"value":"10579","name":"VITHKUQI CAPITAL LETTER FE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A0","titlecase_mapping":"","symbol":"\ud801\udd79"},66938:{"value":"1057A","name":"VITHKUQI CAPITAL LETTER GA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A1","titlecase_mapping":"","symbol":"\ud801\udd7a"},66940:{"value":"1057C","name":"VITHKUQI CAPITAL LETTER HA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A3","titlecase_mapping":"","symbol":"\ud801\udd7c"},66941:{"value":"1057D","name":"VITHKUQI CAPITAL LETTER HHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A4","titlecase_mapping":"","symbol":"\ud801\udd7d"},66942:{"value":"1057E","name":"VITHKUQI CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A5","titlecase_mapping":"","symbol":"\ud801\udd7e"},66943:{"value":"1057F","name":"VITHKUQI CAPITAL LETTER IJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A6","titlecase_mapping":"","symbol":"\ud801\udd7f"},66944:{"value":"10580","name":"VITHKUQI CAPITAL LETTER JE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A7","titlecase_mapping":"","symbol":"\ud801\udd80"},66945:{"value":"10581","name":"VITHKUQI CAPITAL LETTER KA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A8","titlecase_mapping":"","symbol":"\ud801\udd81"},66946:{"value":"10582","name":"VITHKUQI CAPITAL LETTER LA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105A9","titlecase_mapping":"","symbol":"\ud801\udd82"},66947:{"value":"10583","name":"VITHKUQI CAPITAL LETTER LLA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105AA","titlecase_mapping":"","symbol":"\ud801\udd83"},66948:{"value":"10584","name":"VITHKUQI CAPITAL LETTER ME","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105AB","titlecase_mapping":"","symbol":"\ud801\udd84"},66949:{"value":"10585","name":"VITHKUQI CAPITAL LETTER NE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105AC","titlecase_mapping":"","symbol":"\ud801\udd85"},66950:{"value":"10586","name":"VITHKUQI CAPITAL LETTER NJE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105AD","titlecase_mapping":"","symbol":"\ud801\udd86"},66951:{"value":"10587","name":"VITHKUQI CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105AE","titlecase_mapping":"","symbol":"\ud801\udd87"},66952:{"value":"10588","name":"VITHKUQI CAPITAL LETTER PE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105AF","titlecase_mapping":"","symbol":"\ud801\udd88"},66953:{"value":"10589","name":"VITHKUQI CAPITAL LETTER QA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B0","titlecase_mapping":"","symbol":"\ud801\udd89"},66954:{"value":"1058A","name":"VITHKUQI CAPITAL LETTER RE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B1","titlecase_mapping":"","symbol":"\ud801\udd8a"},66956:{"value":"1058C","name":"VITHKUQI CAPITAL LETTER SE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B3","titlecase_mapping":"","symbol":"\ud801\udd8c"},66957:{"value":"1058D","name":"VITHKUQI CAPITAL LETTER SHE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B4","titlecase_mapping":"","symbol":"\ud801\udd8d"},66958:{"value":"1058E","name":"VITHKUQI CAPITAL LETTER TE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B5","titlecase_mapping":"","symbol":"\ud801\udd8e"},66959:{"value":"1058F","name":"VITHKUQI CAPITAL LETTER THE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B6","titlecase_mapping":"","symbol":"\ud801\udd8f"},66960:{"value":"10590","name":"VITHKUQI CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B7","titlecase_mapping":"","symbol":"\ud801\udd90"},66961:{"value":"10591","name":"VITHKUQI CAPITAL LETTER VE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B8","titlecase_mapping":"","symbol":"\ud801\udd91"},66962:{"value":"10592","name":"VITHKUQI CAPITAL LETTER XE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105B9","titlecase_mapping":"","symbol":"\ud801\udd92"},66964:{"value":"10594","name":"VITHKUQI CAPITAL LETTER Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105BB","titlecase_mapping":"","symbol":"\ud801\udd94"},66965:{"value":"10595","name":"VITHKUQI CAPITAL LETTER ZE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"105BC","titlecase_mapping":"","symbol":"\ud801\udd95"},68736:{"value":"10C80","name":"OLD HUNGARIAN CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC0","titlecase_mapping":"","symbol":"\ud803\udc80"},68737:{"value":"10C81","name":"OLD HUNGARIAN CAPITAL LETTER AA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC1","titlecase_mapping":"","symbol":"\ud803\udc81"},68738:{"value":"10C82","name":"OLD HUNGARIAN CAPITAL LETTER EB","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC2","titlecase_mapping":"","symbol":"\ud803\udc82"},68739:{"value":"10C83","name":"OLD HUNGARIAN CAPITAL LETTER AMB","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC3","titlecase_mapping":"","symbol":"\ud803\udc83"},68740:{"value":"10C84","name":"OLD HUNGARIAN CAPITAL LETTER EC","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC4","titlecase_mapping":"","symbol":"\ud803\udc84"},68741:{"value":"10C85","name":"OLD HUNGARIAN CAPITAL LETTER ENC","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC5","titlecase_mapping":"","symbol":"\ud803\udc85"},68742:{"value":"10C86","name":"OLD HUNGARIAN CAPITAL LETTER ECS","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC6","titlecase_mapping":"","symbol":"\ud803\udc86"},68743:{"value":"10C87","name":"OLD HUNGARIAN CAPITAL LETTER ED","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC7","titlecase_mapping":"","symbol":"\ud803\udc87"},68744:{"value":"10C88","name":"OLD HUNGARIAN CAPITAL LETTER AND","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC8","titlecase_mapping":"","symbol":"\ud803\udc88"},68745:{"value":"10C89","name":"OLD HUNGARIAN CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CC9","titlecase_mapping":"","symbol":"\ud803\udc89"},68746:{"value":"10C8A","name":"OLD HUNGARIAN CAPITAL LETTER CLOSE E","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CCA","titlecase_mapping":"","symbol":"\ud803\udc8a"},68747:{"value":"10C8B","name":"OLD HUNGARIAN CAPITAL LETTER EE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CCB","titlecase_mapping":"","symbol":"\ud803\udc8b"},68748:{"value":"10C8C","name":"OLD HUNGARIAN CAPITAL LETTER EF","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CCC","titlecase_mapping":"","symbol":"\ud803\udc8c"},68749:{"value":"10C8D","name":"OLD HUNGARIAN CAPITAL LETTER EG","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CCD","titlecase_mapping":"","symbol":"\ud803\udc8d"},68750:{"value":"10C8E","name":"OLD HUNGARIAN CAPITAL LETTER EGY","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CCE","titlecase_mapping":"","symbol":"\ud803\udc8e"},68751:{"value":"10C8F","name":"OLD HUNGARIAN CAPITAL LETTER EH","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CCF","titlecase_mapping":"","symbol":"\ud803\udc8f"},68752:{"value":"10C90","name":"OLD HUNGARIAN CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD0","titlecase_mapping":"","symbol":"\ud803\udc90"},68753:{"value":"10C91","name":"OLD HUNGARIAN CAPITAL LETTER II","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD1","titlecase_mapping":"","symbol":"\ud803\udc91"},68754:{"value":"10C92","name":"OLD HUNGARIAN CAPITAL LETTER EJ","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD2","titlecase_mapping":"","symbol":"\ud803\udc92"},68755:{"value":"10C93","name":"OLD HUNGARIAN CAPITAL LETTER EK","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD3","titlecase_mapping":"","symbol":"\ud803\udc93"},68756:{"value":"10C94","name":"OLD HUNGARIAN CAPITAL LETTER AK","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD4","titlecase_mapping":"","symbol":"\ud803\udc94"},68757:{"value":"10C95","name":"OLD HUNGARIAN CAPITAL LETTER UNK","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD5","titlecase_mapping":"","symbol":"\ud803\udc95"},68758:{"value":"10C96","name":"OLD HUNGARIAN CAPITAL LETTER EL","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD6","titlecase_mapping":"","symbol":"\ud803\udc96"},68759:{"value":"10C97","name":"OLD HUNGARIAN CAPITAL LETTER ELY","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD7","titlecase_mapping":"","symbol":"\ud803\udc97"},68760:{"value":"10C98","name":"OLD HUNGARIAN CAPITAL LETTER EM","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD8","titlecase_mapping":"","symbol":"\ud803\udc98"},68761:{"value":"10C99","name":"OLD HUNGARIAN CAPITAL LETTER EN","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CD9","titlecase_mapping":"","symbol":"\ud803\udc99"},68762:{"value":"10C9A","name":"OLD HUNGARIAN CAPITAL LETTER ENY","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CDA","titlecase_mapping":"","symbol":"\ud803\udc9a"},68763:{"value":"10C9B","name":"OLD HUNGARIAN CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CDB","titlecase_mapping":"","symbol":"\ud803\udc9b"},68764:{"value":"10C9C","name":"OLD HUNGARIAN CAPITAL LETTER OO","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CDC","titlecase_mapping":"","symbol":"\ud803\udc9c"},68765:{"value":"10C9D","name":"OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CDD","titlecase_mapping":"","symbol":"\ud803\udc9d"},68766:{"value":"10C9E","name":"OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CDE","titlecase_mapping":"","symbol":"\ud803\udc9e"},68767:{"value":"10C9F","name":"OLD HUNGARIAN CAPITAL LETTER OEE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CDF","titlecase_mapping":"","symbol":"\ud803\udc9f"},68768:{"value":"10CA0","name":"OLD HUNGARIAN CAPITAL LETTER EP","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE0","titlecase_mapping":"","symbol":"\ud803\udca0"},68769:{"value":"10CA1","name":"OLD HUNGARIAN CAPITAL LETTER EMP","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE1","titlecase_mapping":"","symbol":"\ud803\udca1"},68770:{"value":"10CA2","name":"OLD HUNGARIAN CAPITAL LETTER ER","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE2","titlecase_mapping":"","symbol":"\ud803\udca2"},68771:{"value":"10CA3","name":"OLD HUNGARIAN CAPITAL LETTER SHORT ER","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE3","titlecase_mapping":"","symbol":"\ud803\udca3"},68772:{"value":"10CA4","name":"OLD HUNGARIAN CAPITAL LETTER ES","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE4","titlecase_mapping":"","symbol":"\ud803\udca4"},68773:{"value":"10CA5","name":"OLD HUNGARIAN CAPITAL LETTER ESZ","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE5","titlecase_mapping":"","symbol":"\ud803\udca5"},68774:{"value":"10CA6","name":"OLD HUNGARIAN CAPITAL LETTER ET","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE6","titlecase_mapping":"","symbol":"\ud803\udca6"},68775:{"value":"10CA7","name":"OLD HUNGARIAN CAPITAL LETTER ENT","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE7","titlecase_mapping":"","symbol":"\ud803\udca7"},68776:{"value":"10CA8","name":"OLD HUNGARIAN CAPITAL LETTER ETY","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE8","titlecase_mapping":"","symbol":"\ud803\udca8"},68777:{"value":"10CA9","name":"OLD HUNGARIAN CAPITAL LETTER ECH","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CE9","titlecase_mapping":"","symbol":"\ud803\udca9"},68778:{"value":"10CAA","name":"OLD HUNGARIAN CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CEA","titlecase_mapping":"","symbol":"\ud803\udcaa"},68779:{"value":"10CAB","name":"OLD HUNGARIAN CAPITAL LETTER UU","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CEB","titlecase_mapping":"","symbol":"\ud803\udcab"},68780:{"value":"10CAC","name":"OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CEC","titlecase_mapping":"","symbol":"\ud803\udcac"},68781:{"value":"10CAD","name":"OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CED","titlecase_mapping":"","symbol":"\ud803\udcad"},68782:{"value":"10CAE","name":"OLD HUNGARIAN CAPITAL LETTER EV","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CEE","titlecase_mapping":"","symbol":"\ud803\udcae"},68783:{"value":"10CAF","name":"OLD HUNGARIAN CAPITAL LETTER EZ","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CEF","titlecase_mapping":"","symbol":"\ud803\udcaf"},68784:{"value":"10CB0","name":"OLD HUNGARIAN CAPITAL LETTER EZS","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CF0","titlecase_mapping":"","symbol":"\ud803\udcb0"},68785:{"value":"10CB1","name":"OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CF1","titlecase_mapping":"","symbol":"\ud803\udcb1"},68786:{"value":"10CB2","name":"OLD HUNGARIAN CAPITAL LETTER US","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"10CF2","titlecase_mapping":"","symbol":"\ud803\udcb2"},71840:{"value":"118A0","name":"WARANG CITI CAPITAL LETTER NGAA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C0","titlecase_mapping":"","symbol":"\ud806\udca0"},71841:{"value":"118A1","name":"WARANG CITI CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C1","titlecase_mapping":"","symbol":"\ud806\udca1"},71842:{"value":"118A2","name":"WARANG CITI CAPITAL LETTER WI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C2","titlecase_mapping":"","symbol":"\ud806\udca2"},71843:{"value":"118A3","name":"WARANG CITI CAPITAL LETTER YU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C3","titlecase_mapping":"","symbol":"\ud806\udca3"},71844:{"value":"118A4","name":"WARANG CITI CAPITAL LETTER YA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C4","titlecase_mapping":"","symbol":"\ud806\udca4"},71845:{"value":"118A5","name":"WARANG CITI CAPITAL LETTER YO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C5","titlecase_mapping":"","symbol":"\ud806\udca5"},71846:{"value":"118A6","name":"WARANG CITI CAPITAL LETTER II","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C6","titlecase_mapping":"","symbol":"\ud806\udca6"},71847:{"value":"118A7","name":"WARANG CITI CAPITAL LETTER UU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C7","titlecase_mapping":"","symbol":"\ud806\udca7"},71848:{"value":"118A8","name":"WARANG CITI CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C8","titlecase_mapping":"","symbol":"\ud806\udca8"},71849:{"value":"118A9","name":"WARANG CITI CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118C9","titlecase_mapping":"","symbol":"\ud806\udca9"},71850:{"value":"118AA","name":"WARANG CITI CAPITAL LETTER ANG","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118CA","titlecase_mapping":"","symbol":"\ud806\udcaa"},71851:{"value":"118AB","name":"WARANG CITI CAPITAL LETTER GA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118CB","titlecase_mapping":"","symbol":"\ud806\udcab"},71852:{"value":"118AC","name":"WARANG CITI CAPITAL LETTER KO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118CC","titlecase_mapping":"","symbol":"\ud806\udcac"},71853:{"value":"118AD","name":"WARANG CITI CAPITAL LETTER ENY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118CD","titlecase_mapping":"","symbol":"\ud806\udcad"},71854:{"value":"118AE","name":"WARANG CITI CAPITAL LETTER YUJ","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118CE","titlecase_mapping":"","symbol":"\ud806\udcae"},71855:{"value":"118AF","name":"WARANG CITI CAPITAL LETTER UC","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118CF","titlecase_mapping":"","symbol":"\ud806\udcaf"},71856:{"value":"118B0","name":"WARANG CITI CAPITAL LETTER ENN","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D0","titlecase_mapping":"","symbol":"\ud806\udcb0"},71857:{"value":"118B1","name":"WARANG CITI CAPITAL LETTER ODD","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D1","titlecase_mapping":"","symbol":"\ud806\udcb1"},71858:{"value":"118B2","name":"WARANG CITI CAPITAL LETTER TTE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D2","titlecase_mapping":"","symbol":"\ud806\udcb2"},71859:{"value":"118B3","name":"WARANG CITI CAPITAL LETTER NUNG","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D3","titlecase_mapping":"","symbol":"\ud806\udcb3"},71860:{"value":"118B4","name":"WARANG CITI CAPITAL LETTER DA","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D4","titlecase_mapping":"","symbol":"\ud806\udcb4"},71861:{"value":"118B5","name":"WARANG CITI CAPITAL LETTER AT","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D5","titlecase_mapping":"","symbol":"\ud806\udcb5"},71862:{"value":"118B6","name":"WARANG CITI CAPITAL LETTER AM","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D6","titlecase_mapping":"","symbol":"\ud806\udcb6"},71863:{"value":"118B7","name":"WARANG CITI CAPITAL LETTER BU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D7","titlecase_mapping":"","symbol":"\ud806\udcb7"},71864:{"value":"118B8","name":"WARANG CITI CAPITAL LETTER PU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D8","titlecase_mapping":"","symbol":"\ud806\udcb8"},71865:{"value":"118B9","name":"WARANG CITI CAPITAL LETTER HIYO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118D9","titlecase_mapping":"","symbol":"\ud806\udcb9"},71866:{"value":"118BA","name":"WARANG CITI CAPITAL LETTER HOLO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118DA","titlecase_mapping":"","symbol":"\ud806\udcba"},71867:{"value":"118BB","name":"WARANG CITI CAPITAL LETTER HORR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118DB","titlecase_mapping":"","symbol":"\ud806\udcbb"},71868:{"value":"118BC","name":"WARANG CITI CAPITAL LETTER HAR","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118DC","titlecase_mapping":"","symbol":"\ud806\udcbc"},71869:{"value":"118BD","name":"WARANG CITI CAPITAL LETTER SSUU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118DD","titlecase_mapping":"","symbol":"\ud806\udcbd"},71870:{"value":"118BE","name":"WARANG CITI CAPITAL LETTER SII","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118DE","titlecase_mapping":"","symbol":"\ud806\udcbe"},71871:{"value":"118BF","name":"WARANG CITI CAPITAL LETTER VIYO","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"118DF","titlecase_mapping":"","symbol":"\ud806\udcbf"},93760:{"value":"16E40","name":"MEDEFAIDRIN CAPITAL LETTER M","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E60","titlecase_mapping":"","symbol":"\ud81b\ude40"},93761:{"value":"16E41","name":"MEDEFAIDRIN CAPITAL LETTER S","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E61","titlecase_mapping":"","symbol":"\ud81b\ude41"},93762:{"value":"16E42","name":"MEDEFAIDRIN CAPITAL LETTER V","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E62","titlecase_mapping":"","symbol":"\ud81b\ude42"},93763:{"value":"16E43","name":"MEDEFAIDRIN CAPITAL LETTER W","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E63","titlecase_mapping":"","symbol":"\ud81b\ude43"},93764:{"value":"16E44","name":"MEDEFAIDRIN CAPITAL LETTER ATIU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E64","titlecase_mapping":"","symbol":"\ud81b\ude44"},93765:{"value":"16E45","name":"MEDEFAIDRIN CAPITAL LETTER Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E65","titlecase_mapping":"","symbol":"\ud81b\ude45"},93766:{"value":"16E46","name":"MEDEFAIDRIN CAPITAL LETTER KP","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E66","titlecase_mapping":"","symbol":"\ud81b\ude46"},93767:{"value":"16E47","name":"MEDEFAIDRIN CAPITAL LETTER P","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E67","titlecase_mapping":"","symbol":"\ud81b\ude47"},93768:{"value":"16E48","name":"MEDEFAIDRIN CAPITAL LETTER T","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E68","titlecase_mapping":"","symbol":"\ud81b\ude48"},93769:{"value":"16E49","name":"MEDEFAIDRIN CAPITAL LETTER G","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E69","titlecase_mapping":"","symbol":"\ud81b\ude49"},93770:{"value":"16E4A","name":"MEDEFAIDRIN CAPITAL LETTER F","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E6A","titlecase_mapping":"","symbol":"\ud81b\ude4a"},93771:{"value":"16E4B","name":"MEDEFAIDRIN CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E6B","titlecase_mapping":"","symbol":"\ud81b\ude4b"},93772:{"value":"16E4C","name":"MEDEFAIDRIN CAPITAL LETTER K","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E6C","titlecase_mapping":"","symbol":"\ud81b\ude4c"},93773:{"value":"16E4D","name":"MEDEFAIDRIN CAPITAL LETTER A","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E6D","titlecase_mapping":"","symbol":"\ud81b\ude4d"},93774:{"value":"16E4E","name":"MEDEFAIDRIN CAPITAL LETTER J","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E6E","titlecase_mapping":"","symbol":"\ud81b\ude4e"},93775:{"value":"16E4F","name":"MEDEFAIDRIN CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E6F","titlecase_mapping":"","symbol":"\ud81b\ude4f"},93776:{"value":"16E50","name":"MEDEFAIDRIN CAPITAL LETTER B","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E70","titlecase_mapping":"","symbol":"\ud81b\ude50"},93777:{"value":"16E51","name":"MEDEFAIDRIN CAPITAL LETTER C","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E71","titlecase_mapping":"","symbol":"\ud81b\ude51"},93778:{"value":"16E52","name":"MEDEFAIDRIN CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E72","titlecase_mapping":"","symbol":"\ud81b\ude52"},93779:{"value":"16E53","name":"MEDEFAIDRIN CAPITAL LETTER YU","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E73","titlecase_mapping":"","symbol":"\ud81b\ude53"},93780:{"value":"16E54","name":"MEDEFAIDRIN CAPITAL LETTER L","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E74","titlecase_mapping":"","symbol":"\ud81b\ude54"},93781:{"value":"16E55","name":"MEDEFAIDRIN CAPITAL LETTER Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E75","titlecase_mapping":"","symbol":"\ud81b\ude55"},93782:{"value":"16E56","name":"MEDEFAIDRIN CAPITAL LETTER HP","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E76","titlecase_mapping":"","symbol":"\ud81b\ude56"},93783:{"value":"16E57","name":"MEDEFAIDRIN CAPITAL LETTER NY","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E77","titlecase_mapping":"","symbol":"\ud81b\ude57"},93784:{"value":"16E58","name":"MEDEFAIDRIN CAPITAL LETTER X","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E78","titlecase_mapping":"","symbol":"\ud81b\ude58"},93785:{"value":"16E59","name":"MEDEFAIDRIN CAPITAL LETTER D","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E79","titlecase_mapping":"","symbol":"\ud81b\ude59"},93786:{"value":"16E5A","name":"MEDEFAIDRIN CAPITAL LETTER OE","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E7A","titlecase_mapping":"","symbol":"\ud81b\ude5a"},93787:{"value":"16E5B","name":"MEDEFAIDRIN CAPITAL LETTER N","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E7B","titlecase_mapping":"","symbol":"\ud81b\ude5b"},93788:{"value":"16E5C","name":"MEDEFAIDRIN CAPITAL LETTER R","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E7C","titlecase_mapping":"","symbol":"\ud81b\ude5c"},93789:{"value":"16E5D","name":"MEDEFAIDRIN CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E7D","titlecase_mapping":"","symbol":"\ud81b\ude5d"},93790:{"value":"16E5E","name":"MEDEFAIDRIN CAPITAL LETTER AI","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E7E","titlecase_mapping":"","symbol":"\ud81b\ude5e"},93791:{"value":"16E5F","name":"MEDEFAIDRIN CAPITAL LETTER Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"16E7F","titlecase_mapping":"","symbol":"\ud81b\ude5f"},119808:{"value":"1D400","name":"MATHEMATICAL BOLD CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc00"},119809:{"value":"1D401","name":"MATHEMATICAL BOLD CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc01"},119810:{"value":"1D402","name":"MATHEMATICAL BOLD CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc02"},119811:{"value":"1D403","name":"MATHEMATICAL BOLD CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc03"},119812:{"value":"1D404","name":"MATHEMATICAL BOLD CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc04"},119813:{"value":"1D405","name":"MATHEMATICAL BOLD CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc05"},119814:{"value":"1D406","name":"MATHEMATICAL BOLD CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc06"},119815:{"value":"1D407","name":"MATHEMATICAL BOLD CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc07"},119816:{"value":"1D408","name":"MATHEMATICAL BOLD CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc08"},119817:{"value":"1D409","name":"MATHEMATICAL BOLD CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc09"},119818:{"value":"1D40A","name":"MATHEMATICAL BOLD CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc0a"},119819:{"value":"1D40B","name":"MATHEMATICAL BOLD CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc0b"},119820:{"value":"1D40C","name":"MATHEMATICAL BOLD CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc0c"},119821:{"value":"1D40D","name":"MATHEMATICAL BOLD CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc0d"},119822:{"value":"1D40E","name":"MATHEMATICAL BOLD CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc0e"},119823:{"value":"1D40F","name":"MATHEMATICAL BOLD CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc0f"},119824:{"value":"1D410","name":"MATHEMATICAL BOLD CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc10"},119825:{"value":"1D411","name":"MATHEMATICAL BOLD CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc11"},119826:{"value":"1D412","name":"MATHEMATICAL BOLD CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc12"},119827:{"value":"1D413","name":"MATHEMATICAL BOLD CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc13"},119828:{"value":"1D414","name":"MATHEMATICAL BOLD CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc14"},119829:{"value":"1D415","name":"MATHEMATICAL BOLD CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc15"},119830:{"value":"1D416","name":"MATHEMATICAL BOLD CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc16"},119831:{"value":"1D417","name":"MATHEMATICAL BOLD CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc17"},119832:{"value":"1D418","name":"MATHEMATICAL BOLD CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc18"},119833:{"value":"1D419","name":"MATHEMATICAL BOLD CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc19"},119860:{"value":"1D434","name":"MATHEMATICAL ITALIC CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc34"},119861:{"value":"1D435","name":"MATHEMATICAL ITALIC CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc35"},119862:{"value":"1D436","name":"MATHEMATICAL ITALIC CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc36"},119863:{"value":"1D437","name":"MATHEMATICAL ITALIC CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc37"},119864:{"value":"1D438","name":"MATHEMATICAL ITALIC CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc38"},119865:{"value":"1D439","name":"MATHEMATICAL ITALIC CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc39"},119866:{"value":"1D43A","name":"MATHEMATICAL ITALIC CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc3a"},119867:{"value":"1D43B","name":"MATHEMATICAL ITALIC CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc3b"},119868:{"value":"1D43C","name":"MATHEMATICAL ITALIC CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc3c"},119869:{"value":"1D43D","name":"MATHEMATICAL ITALIC CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc3d"},119870:{"value":"1D43E","name":"MATHEMATICAL ITALIC CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc3e"},119871:{"value":"1D43F","name":"MATHEMATICAL ITALIC CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc3f"},119872:{"value":"1D440","name":"MATHEMATICAL ITALIC CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc40"},119873:{"value":"1D441","name":"MATHEMATICAL ITALIC CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc41"},119874:{"value":"1D442","name":"MATHEMATICAL ITALIC CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc42"},119875:{"value":"1D443","name":"MATHEMATICAL ITALIC CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc43"},119876:{"value":"1D444","name":"MATHEMATICAL ITALIC CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc44"},119877:{"value":"1D445","name":"MATHEMATICAL ITALIC CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc45"},119878:{"value":"1D446","name":"MATHEMATICAL ITALIC CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc46"},119879:{"value":"1D447","name":"MATHEMATICAL ITALIC CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc47"},119880:{"value":"1D448","name":"MATHEMATICAL ITALIC CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc48"},119881:{"value":"1D449","name":"MATHEMATICAL ITALIC CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc49"},119882:{"value":"1D44A","name":"MATHEMATICAL ITALIC CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc4a"},119883:{"value":"1D44B","name":"MATHEMATICAL ITALIC CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc4b"},119884:{"value":"1D44C","name":"MATHEMATICAL ITALIC CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc4c"},119885:{"value":"1D44D","name":"MATHEMATICAL ITALIC CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc4d"},119912:{"value":"1D468","name":"MATHEMATICAL BOLD ITALIC CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc68"},119913:{"value":"1D469","name":"MATHEMATICAL BOLD ITALIC CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc69"},119914:{"value":"1D46A","name":"MATHEMATICAL BOLD ITALIC CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc6a"},119915:{"value":"1D46B","name":"MATHEMATICAL BOLD ITALIC CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc6b"},119916:{"value":"1D46C","name":"MATHEMATICAL BOLD ITALIC CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc6c"},119917:{"value":"1D46D","name":"MATHEMATICAL BOLD ITALIC CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc6d"},119918:{"value":"1D46E","name":"MATHEMATICAL BOLD ITALIC CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc6e"},119919:{"value":"1D46F","name":"MATHEMATICAL BOLD ITALIC CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc6f"},119920:{"value":"1D470","name":"MATHEMATICAL BOLD ITALIC CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc70"},119921:{"value":"1D471","name":"MATHEMATICAL BOLD ITALIC CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc71"},119922:{"value":"1D472","name":"MATHEMATICAL BOLD ITALIC CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc72"},119923:{"value":"1D473","name":"MATHEMATICAL BOLD ITALIC CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc73"},119924:{"value":"1D474","name":"MATHEMATICAL BOLD ITALIC CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc74"},119925:{"value":"1D475","name":"MATHEMATICAL BOLD ITALIC CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc75"},119926:{"value":"1D476","name":"MATHEMATICAL BOLD ITALIC CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc76"},119927:{"value":"1D477","name":"MATHEMATICAL BOLD ITALIC CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc77"},119928:{"value":"1D478","name":"MATHEMATICAL BOLD ITALIC CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc78"},119929:{"value":"1D479","name":"MATHEMATICAL BOLD ITALIC CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc79"},119930:{"value":"1D47A","name":"MATHEMATICAL BOLD ITALIC CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc7a"},119931:{"value":"1D47B","name":"MATHEMATICAL BOLD ITALIC CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc7b"},119932:{"value":"1D47C","name":"MATHEMATICAL BOLD ITALIC CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc7c"},119933:{"value":"1D47D","name":"MATHEMATICAL BOLD ITALIC CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc7d"},119934:{"value":"1D47E","name":"MATHEMATICAL BOLD ITALIC CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc7e"},119935:{"value":"1D47F","name":"MATHEMATICAL BOLD ITALIC CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc7f"},119936:{"value":"1D480","name":"MATHEMATICAL BOLD ITALIC CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc80"},119937:{"value":"1D481","name":"MATHEMATICAL BOLD ITALIC CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc81"},119964:{"value":"1D49C","name":"MATHEMATICAL SCRIPT CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc9c"},119966:{"value":"1D49E","name":"MATHEMATICAL SCRIPT CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc9e"},119967:{"value":"1D49F","name":"MATHEMATICAL SCRIPT CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udc9f"},119970:{"value":"1D4A2","name":"MATHEMATICAL SCRIPT CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udca2"},119973:{"value":"1D4A5","name":"MATHEMATICAL SCRIPT CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udca5"},119974:{"value":"1D4A6","name":"MATHEMATICAL SCRIPT CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udca6"},119977:{"value":"1D4A9","name":"MATHEMATICAL SCRIPT CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udca9"},119978:{"value":"1D4AA","name":"MATHEMATICAL SCRIPT CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcaa"},119979:{"value":"1D4AB","name":"MATHEMATICAL SCRIPT CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcab"},119980:{"value":"1D4AC","name":"MATHEMATICAL SCRIPT CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcac"},119982:{"value":"1D4AE","name":"MATHEMATICAL SCRIPT CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcae"},119983:{"value":"1D4AF","name":"MATHEMATICAL SCRIPT CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcaf"},119984:{"value":"1D4B0","name":"MATHEMATICAL SCRIPT CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb0"},119985:{"value":"1D4B1","name":"MATHEMATICAL SCRIPT CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb1"},119986:{"value":"1D4B2","name":"MATHEMATICAL SCRIPT CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb2"},119987:{"value":"1D4B3","name":"MATHEMATICAL SCRIPT CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb3"},119988:{"value":"1D4B4","name":"MATHEMATICAL SCRIPT CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb4"},119989:{"value":"1D4B5","name":"MATHEMATICAL SCRIPT CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcb5"},120016:{"value":"1D4D0","name":"MATHEMATICAL BOLD SCRIPT CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd0"},120017:{"value":"1D4D1","name":"MATHEMATICAL BOLD SCRIPT CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd1"},120018:{"value":"1D4D2","name":"MATHEMATICAL BOLD SCRIPT CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd2"},120019:{"value":"1D4D3","name":"MATHEMATICAL BOLD SCRIPT CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd3"},120020:{"value":"1D4D4","name":"MATHEMATICAL BOLD SCRIPT CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd4"},120021:{"value":"1D4D5","name":"MATHEMATICAL BOLD SCRIPT CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd5"},120022:{"value":"1D4D6","name":"MATHEMATICAL BOLD SCRIPT CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd6"},120023:{"value":"1D4D7","name":"MATHEMATICAL BOLD SCRIPT CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd7"},120024:{"value":"1D4D8","name":"MATHEMATICAL BOLD SCRIPT CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd8"},120025:{"value":"1D4D9","name":"MATHEMATICAL BOLD SCRIPT CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcd9"},120026:{"value":"1D4DA","name":"MATHEMATICAL BOLD SCRIPT CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcda"},120027:{"value":"1D4DB","name":"MATHEMATICAL BOLD SCRIPT CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcdb"},120028:{"value":"1D4DC","name":"MATHEMATICAL BOLD SCRIPT CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcdc"},120029:{"value":"1D4DD","name":"MATHEMATICAL BOLD SCRIPT CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcdd"},120030:{"value":"1D4DE","name":"MATHEMATICAL BOLD SCRIPT CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcde"},120031:{"value":"1D4DF","name":"MATHEMATICAL BOLD SCRIPT CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udcdf"},120032:{"value":"1D4E0","name":"MATHEMATICAL BOLD SCRIPT CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce0"},120033:{"value":"1D4E1","name":"MATHEMATICAL BOLD SCRIPT CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce1"},120034:{"value":"1D4E2","name":"MATHEMATICAL BOLD SCRIPT CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce2"},120035:{"value":"1D4E3","name":"MATHEMATICAL BOLD SCRIPT CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce3"},120036:{"value":"1D4E4","name":"MATHEMATICAL BOLD SCRIPT CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce4"},120037:{"value":"1D4E5","name":"MATHEMATICAL BOLD SCRIPT CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce5"},120038:{"value":"1D4E6","name":"MATHEMATICAL BOLD SCRIPT CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce6"},120039:{"value":"1D4E7","name":"MATHEMATICAL BOLD SCRIPT CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce7"},120040:{"value":"1D4E8","name":"MATHEMATICAL BOLD SCRIPT CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce8"},120041:{"value":"1D4E9","name":"MATHEMATICAL BOLD SCRIPT CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udce9"},120068:{"value":"1D504","name":"MATHEMATICAL FRAKTUR CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd04"},120069:{"value":"1D505","name":"MATHEMATICAL FRAKTUR CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd05"},120071:{"value":"1D507","name":"MATHEMATICAL FRAKTUR CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd07"},120072:{"value":"1D508","name":"MATHEMATICAL FRAKTUR CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd08"},120073:{"value":"1D509","name":"MATHEMATICAL FRAKTUR CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd09"},120074:{"value":"1D50A","name":"MATHEMATICAL FRAKTUR CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd0a"},120077:{"value":"1D50D","name":"MATHEMATICAL FRAKTUR CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd0d"},120078:{"value":"1D50E","name":"MATHEMATICAL FRAKTUR CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd0e"},120079:{"value":"1D50F","name":"MATHEMATICAL FRAKTUR CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd0f"},120080:{"value":"1D510","name":"MATHEMATICAL FRAKTUR CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd10"},120081:{"value":"1D511","name":"MATHEMATICAL FRAKTUR CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd11"},120082:{"value":"1D512","name":"MATHEMATICAL FRAKTUR CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd12"},120083:{"value":"1D513","name":"MATHEMATICAL FRAKTUR CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd13"},120084:{"value":"1D514","name":"MATHEMATICAL FRAKTUR CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd14"},120086:{"value":"1D516","name":"MATHEMATICAL FRAKTUR CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd16"},120087:{"value":"1D517","name":"MATHEMATICAL FRAKTUR CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd17"},120088:{"value":"1D518","name":"MATHEMATICAL FRAKTUR CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd18"},120089:{"value":"1D519","name":"MATHEMATICAL FRAKTUR CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd19"},120090:{"value":"1D51A","name":"MATHEMATICAL FRAKTUR CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd1a"},120091:{"value":"1D51B","name":"MATHEMATICAL FRAKTUR CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd1b"},120092:{"value":"1D51C","name":"MATHEMATICAL FRAKTUR CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd1c"},120120:{"value":"1D538","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd38"},120121:{"value":"1D539","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd39"},120123:{"value":"1D53B","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd3b"},120124:{"value":"1D53C","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd3c"},120125:{"value":"1D53D","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd3d"},120126:{"value":"1D53E","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd3e"},120128:{"value":"1D540","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd40"},120129:{"value":"1D541","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd41"},120130:{"value":"1D542","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd42"},120131:{"value":"1D543","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd43"},120132:{"value":"1D544","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd44"},120134:{"value":"1D546","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd46"},120138:{"value":"1D54A","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd4a"},120139:{"value":"1D54B","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd4b"},120140:{"value":"1D54C","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd4c"},120141:{"value":"1D54D","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd4d"},120142:{"value":"1D54E","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd4e"},120143:{"value":"1D54F","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd4f"},120144:{"value":"1D550","name":"MATHEMATICAL DOUBLE-STRUCK CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd50"},120172:{"value":"1D56C","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd6c"},120173:{"value":"1D56D","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd6d"},120174:{"value":"1D56E","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd6e"},120175:{"value":"1D56F","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd6f"},120176:{"value":"1D570","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd70"},120177:{"value":"1D571","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd71"},120178:{"value":"1D572","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd72"},120179:{"value":"1D573","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd73"},120180:{"value":"1D574","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd74"},120181:{"value":"1D575","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd75"},120182:{"value":"1D576","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd76"},120183:{"value":"1D577","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd77"},120184:{"value":"1D578","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd78"},120185:{"value":"1D579","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd79"},120186:{"value":"1D57A","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd7a"},120187:{"value":"1D57B","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd7b"},120188:{"value":"1D57C","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd7c"},120189:{"value":"1D57D","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd7d"},120190:{"value":"1D57E","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd7e"},120191:{"value":"1D57F","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd7f"},120192:{"value":"1D580","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd80"},120193:{"value":"1D581","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd81"},120194:{"value":"1D582","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd82"},120195:{"value":"1D583","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd83"},120196:{"value":"1D584","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd84"},120197:{"value":"1D585","name":"MATHEMATICAL BOLD FRAKTUR CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udd85"},120224:{"value":"1D5A0","name":"MATHEMATICAL SANS-SERIF CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda0"},120225:{"value":"1D5A1","name":"MATHEMATICAL SANS-SERIF CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda1"},120226:{"value":"1D5A2","name":"MATHEMATICAL SANS-SERIF CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda2"},120227:{"value":"1D5A3","name":"MATHEMATICAL SANS-SERIF CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda3"},120228:{"value":"1D5A4","name":"MATHEMATICAL SANS-SERIF CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda4"},120229:{"value":"1D5A5","name":"MATHEMATICAL SANS-SERIF CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda5"},120230:{"value":"1D5A6","name":"MATHEMATICAL SANS-SERIF CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda6"},120231:{"value":"1D5A7","name":"MATHEMATICAL SANS-SERIF CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda7"},120232:{"value":"1D5A8","name":"MATHEMATICAL SANS-SERIF CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda8"},120233:{"value":"1D5A9","name":"MATHEMATICAL SANS-SERIF CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udda9"},120234:{"value":"1D5AA","name":"MATHEMATICAL SANS-SERIF CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddaa"},120235:{"value":"1D5AB","name":"MATHEMATICAL SANS-SERIF CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddab"},120236:{"value":"1D5AC","name":"MATHEMATICAL SANS-SERIF CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddac"},120237:{"value":"1D5AD","name":"MATHEMATICAL SANS-SERIF CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddad"},120238:{"value":"1D5AE","name":"MATHEMATICAL SANS-SERIF CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddae"},120239:{"value":"1D5AF","name":"MATHEMATICAL SANS-SERIF CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddaf"},120240:{"value":"1D5B0","name":"MATHEMATICAL SANS-SERIF CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb0"},120241:{"value":"1D5B1","name":"MATHEMATICAL SANS-SERIF CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb1"},120242:{"value":"1D5B2","name":"MATHEMATICAL SANS-SERIF CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb2"},120243:{"value":"1D5B3","name":"MATHEMATICAL SANS-SERIF CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb3"},120244:{"value":"1D5B4","name":"MATHEMATICAL SANS-SERIF CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb4"},120245:{"value":"1D5B5","name":"MATHEMATICAL SANS-SERIF CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb5"},120246:{"value":"1D5B6","name":"MATHEMATICAL SANS-SERIF CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb6"},120247:{"value":"1D5B7","name":"MATHEMATICAL SANS-SERIF CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb7"},120248:{"value":"1D5B8","name":"MATHEMATICAL SANS-SERIF CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb8"},120249:{"value":"1D5B9","name":"MATHEMATICAL SANS-SERIF CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddb9"},120276:{"value":"1D5D4","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd4"},120277:{"value":"1D5D5","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd5"},120278:{"value":"1D5D6","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd6"},120279:{"value":"1D5D7","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd7"},120280:{"value":"1D5D8","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd8"},120281:{"value":"1D5D9","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddd9"},120282:{"value":"1D5DA","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddda"},120283:{"value":"1D5DB","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udddb"},120284:{"value":"1D5DC","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udddc"},120285:{"value":"1D5DD","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udddd"},120286:{"value":"1D5DE","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddde"},120287:{"value":"1D5DF","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udddf"},120288:{"value":"1D5E0","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde0"},120289:{"value":"1D5E1","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde1"},120290:{"value":"1D5E2","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde2"},120291:{"value":"1D5E3","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde3"},120292:{"value":"1D5E4","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde4"},120293:{"value":"1D5E5","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde5"},120294:{"value":"1D5E6","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde6"},120295:{"value":"1D5E7","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde7"},120296:{"value":"1D5E8","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde8"},120297:{"value":"1D5E9","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udde9"},120298:{"value":"1D5EA","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddea"},120299:{"value":"1D5EB","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddeb"},120300:{"value":"1D5EC","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\uddec"},120301:{"value":"1D5ED","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udded"},120328:{"value":"1D608","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude08"},120329:{"value":"1D609","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude09"},120330:{"value":"1D60A","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude0a"},120331:{"value":"1D60B","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude0b"},120332:{"value":"1D60C","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude0c"},120333:{"value":"1D60D","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude0d"},120334:{"value":"1D60E","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude0e"},120335:{"value":"1D60F","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude0f"},120336:{"value":"1D610","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude10"},120337:{"value":"1D611","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude11"},120338:{"value":"1D612","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude12"},120339:{"value":"1D613","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude13"},120340:{"value":"1D614","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude14"},120341:{"value":"1D615","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude15"},120342:{"value":"1D616","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude16"},120343:{"value":"1D617","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude17"},120344:{"value":"1D618","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude18"},120345:{"value":"1D619","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude19"},120346:{"value":"1D61A","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude1a"},120347:{"value":"1D61B","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude1b"},120348:{"value":"1D61C","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude1c"},120349:{"value":"1D61D","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude1d"},120350:{"value":"1D61E","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude1e"},120351:{"value":"1D61F","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude1f"},120352:{"value":"1D620","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude20"},120353:{"value":"1D621","name":"MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude21"},120380:{"value":"1D63C","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude3c"},120381:{"value":"1D63D","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude3d"},120382:{"value":"1D63E","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude3e"},120383:{"value":"1D63F","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude3f"},120384:{"value":"1D640","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude40"},120385:{"value":"1D641","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude41"},120386:{"value":"1D642","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude42"},120387:{"value":"1D643","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude43"},120388:{"value":"1D644","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude44"},120389:{"value":"1D645","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude45"},120390:{"value":"1D646","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude46"},120391:{"value":"1D647","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude47"},120392:{"value":"1D648","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude48"},120393:{"value":"1D649","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude49"},120394:{"value":"1D64A","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude4a"},120395:{"value":"1D64B","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude4b"},120396:{"value":"1D64C","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude4c"},120397:{"value":"1D64D","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude4d"},120398:{"value":"1D64E","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude4e"},120399:{"value":"1D64F","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude4f"},120400:{"value":"1D650","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude50"},120401:{"value":"1D651","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude51"},120402:{"value":"1D652","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude52"},120403:{"value":"1D653","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude53"},120404:{"value":"1D654","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude54"},120405:{"value":"1D655","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude55"},120432:{"value":"1D670","name":"MATHEMATICAL MONOSPACE CAPITAL A","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude70"},120433:{"value":"1D671","name":"MATHEMATICAL MONOSPACE CAPITAL B","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude71"},120434:{"value":"1D672","name":"MATHEMATICAL MONOSPACE CAPITAL C","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude72"},120435:{"value":"1D673","name":"MATHEMATICAL MONOSPACE CAPITAL D","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude73"},120436:{"value":"1D674","name":"MATHEMATICAL MONOSPACE CAPITAL E","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude74"},120437:{"value":"1D675","name":"MATHEMATICAL MONOSPACE CAPITAL F","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude75"},120438:{"value":"1D676","name":"MATHEMATICAL MONOSPACE CAPITAL G","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude76"},120439:{"value":"1D677","name":"MATHEMATICAL MONOSPACE CAPITAL H","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude77"},120440:{"value":"1D678","name":"MATHEMATICAL MONOSPACE CAPITAL I","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude78"},120441:{"value":"1D679","name":"MATHEMATICAL MONOSPACE CAPITAL J","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude79"},120442:{"value":"1D67A","name":"MATHEMATICAL MONOSPACE CAPITAL K","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude7a"},120443:{"value":"1D67B","name":"MATHEMATICAL MONOSPACE CAPITAL L","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude7b"},120444:{"value":"1D67C","name":"MATHEMATICAL MONOSPACE CAPITAL M","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude7c"},120445:{"value":"1D67D","name":"MATHEMATICAL MONOSPACE CAPITAL N","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude7d"},120446:{"value":"1D67E","name":"MATHEMATICAL MONOSPACE CAPITAL O","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude7e"},120447:{"value":"1D67F","name":"MATHEMATICAL MONOSPACE CAPITAL P","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude7f"},120448:{"value":"1D680","name":"MATHEMATICAL MONOSPACE CAPITAL Q","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude80"},120449:{"value":"1D681","name":"MATHEMATICAL MONOSPACE CAPITAL R","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude81"},120450:{"value":"1D682","name":"MATHEMATICAL MONOSPACE CAPITAL S","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude82"},120451:{"value":"1D683","name":"MATHEMATICAL MONOSPACE CAPITAL T","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude83"},120452:{"value":"1D684","name":"MATHEMATICAL MONOSPACE CAPITAL U","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude84"},120453:{"value":"1D685","name":"MATHEMATICAL MONOSPACE CAPITAL V","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude85"},120454:{"value":"1D686","name":"MATHEMATICAL MONOSPACE CAPITAL W","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude86"},120455:{"value":"1D687","name":"MATHEMATICAL MONOSPACE CAPITAL X","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude87"},120456:{"value":"1D688","name":"MATHEMATICAL MONOSPACE CAPITAL Y","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude88"},120457:{"value":"1D689","name":"MATHEMATICAL MONOSPACE CAPITAL Z","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\ude89"},120488:{"value":"1D6A8","name":"MATHEMATICAL BOLD CAPITAL ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0391","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea8"},120489:{"value":"1D6A9","name":"MATHEMATICAL BOLD CAPITAL BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0392","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udea9"},120490:{"value":"1D6AA","name":"MATHEMATICAL BOLD CAPITAL GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeaa"},120491:{"value":"1D6AB","name":"MATHEMATICAL BOLD CAPITAL DELTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0394","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeab"},120492:{"value":"1D6AC","name":"MATHEMATICAL BOLD CAPITAL EPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0395","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeac"},120493:{"value":"1D6AD","name":"MATHEMATICAL BOLD CAPITAL ZETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0396","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udead"},120494:{"value":"1D6AE","name":"MATHEMATICAL BOLD CAPITAL ETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0397","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeae"},120495:{"value":"1D6AF","name":"MATHEMATICAL BOLD CAPITAL THETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0398","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeaf"},120496:{"value":"1D6B0","name":"MATHEMATICAL BOLD CAPITAL IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0399","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb0"},120497:{"value":"1D6B1","name":"MATHEMATICAL BOLD CAPITAL KAPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb1"},120498:{"value":"1D6B2","name":"MATHEMATICAL BOLD CAPITAL LAMDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb2"},120499:{"value":"1D6B3","name":"MATHEMATICAL BOLD CAPITAL MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb3"},120500:{"value":"1D6B4","name":"MATHEMATICAL BOLD CAPITAL NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb4"},120501:{"value":"1D6B5","name":"MATHEMATICAL BOLD CAPITAL XI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb5"},120502:{"value":"1D6B6","name":"MATHEMATICAL BOLD CAPITAL OMICRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb6"},120503:{"value":"1D6B7","name":"MATHEMATICAL BOLD CAPITAL PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb7"},120504:{"value":"1D6B8","name":"MATHEMATICAL BOLD CAPITAL RHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb8"},120505:{"value":"1D6B9","name":"MATHEMATICAL BOLD CAPITAL THETA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeb9"},120506:{"value":"1D6BA","name":"MATHEMATICAL BOLD CAPITAL SIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeba"},120507:{"value":"1D6BB","name":"MATHEMATICAL BOLD CAPITAL TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udebb"},120508:{"value":"1D6BC","name":"MATHEMATICAL BOLD CAPITAL UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udebc"},120509:{"value":"1D6BD","name":"MATHEMATICAL BOLD CAPITAL PHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udebd"},120510:{"value":"1D6BE","name":"MATHEMATICAL BOLD CAPITAL CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udebe"},120511:{"value":"1D6BF","name":"MATHEMATICAL BOLD CAPITAL PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udebf"},120512:{"value":"1D6C0","name":"MATHEMATICAL BOLD CAPITAL OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec0"},120546:{"value":"1D6E2","name":"MATHEMATICAL ITALIC CAPITAL ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0391","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee2"},120547:{"value":"1D6E3","name":"MATHEMATICAL ITALIC CAPITAL BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0392","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee3"},120548:{"value":"1D6E4","name":"MATHEMATICAL ITALIC CAPITAL GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee4"},120549:{"value":"1D6E5","name":"MATHEMATICAL ITALIC CAPITAL DELTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0394","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee5"},120550:{"value":"1D6E6","name":"MATHEMATICAL ITALIC CAPITAL EPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0395","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee6"},120551:{"value":"1D6E7","name":"MATHEMATICAL ITALIC CAPITAL ZETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0396","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee7"},120552:{"value":"1D6E8","name":"MATHEMATICAL ITALIC CAPITAL ETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0397","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee8"},120553:{"value":"1D6E9","name":"MATHEMATICAL ITALIC CAPITAL THETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0398","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udee9"},120554:{"value":"1D6EA","name":"MATHEMATICAL ITALIC CAPITAL IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0399","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeea"},120555:{"value":"1D6EB","name":"MATHEMATICAL ITALIC CAPITAL KAPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeeb"},120556:{"value":"1D6EC","name":"MATHEMATICAL ITALIC CAPITAL LAMDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeec"},120557:{"value":"1D6ED","name":"MATHEMATICAL ITALIC CAPITAL MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeed"},120558:{"value":"1D6EE","name":"MATHEMATICAL ITALIC CAPITAL NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeee"},120559:{"value":"1D6EF","name":"MATHEMATICAL ITALIC CAPITAL XI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udeef"},120560:{"value":"1D6F0","name":"MATHEMATICAL ITALIC CAPITAL OMICRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef0"},120561:{"value":"1D6F1","name":"MATHEMATICAL ITALIC CAPITAL PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef1"},120562:{"value":"1D6F2","name":"MATHEMATICAL ITALIC CAPITAL RHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef2"},120563:{"value":"1D6F3","name":"MATHEMATICAL ITALIC CAPITAL THETA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef3"},120564:{"value":"1D6F4","name":"MATHEMATICAL ITALIC CAPITAL SIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef4"},120565:{"value":"1D6F5","name":"MATHEMATICAL ITALIC CAPITAL TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef5"},120566:{"value":"1D6F6","name":"MATHEMATICAL ITALIC CAPITAL UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef6"},120567:{"value":"1D6F7","name":"MATHEMATICAL ITALIC CAPITAL PHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef7"},120568:{"value":"1D6F8","name":"MATHEMATICAL ITALIC CAPITAL CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef8"},120569:{"value":"1D6F9","name":"MATHEMATICAL ITALIC CAPITAL PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udef9"},120570:{"value":"1D6FA","name":"MATHEMATICAL ITALIC CAPITAL OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udefa"},120604:{"value":"1D71C","name":"MATHEMATICAL BOLD ITALIC CAPITAL ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0391","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf1c"},120605:{"value":"1D71D","name":"MATHEMATICAL BOLD ITALIC CAPITAL BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0392","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf1d"},120606:{"value":"1D71E","name":"MATHEMATICAL BOLD ITALIC CAPITAL GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf1e"},120607:{"value":"1D71F","name":"MATHEMATICAL BOLD ITALIC CAPITAL DELTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0394","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf1f"},120608:{"value":"1D720","name":"MATHEMATICAL BOLD ITALIC CAPITAL EPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0395","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf20"},120609:{"value":"1D721","name":"MATHEMATICAL BOLD ITALIC CAPITAL ZETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0396","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf21"},120610:{"value":"1D722","name":"MATHEMATICAL BOLD ITALIC CAPITAL ETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0397","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf22"},120611:{"value":"1D723","name":"MATHEMATICAL BOLD ITALIC CAPITAL THETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0398","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf23"},120612:{"value":"1D724","name":"MATHEMATICAL BOLD ITALIC CAPITAL IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0399","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf24"},120613:{"value":"1D725","name":"MATHEMATICAL BOLD ITALIC CAPITAL KAPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf25"},120614:{"value":"1D726","name":"MATHEMATICAL BOLD ITALIC CAPITAL LAMDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf26"},120615:{"value":"1D727","name":"MATHEMATICAL BOLD ITALIC CAPITAL MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf27"},120616:{"value":"1D728","name":"MATHEMATICAL BOLD ITALIC CAPITAL NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf28"},120617:{"value":"1D729","name":"MATHEMATICAL BOLD ITALIC CAPITAL XI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf29"},120618:{"value":"1D72A","name":"MATHEMATICAL BOLD ITALIC CAPITAL OMICRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf2a"},120619:{"value":"1D72B","name":"MATHEMATICAL BOLD ITALIC CAPITAL PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf2b"},120620:{"value":"1D72C","name":"MATHEMATICAL BOLD ITALIC CAPITAL RHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf2c"},120621:{"value":"1D72D","name":"MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf2d"},120622:{"value":"1D72E","name":"MATHEMATICAL BOLD ITALIC CAPITAL SIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf2e"},120623:{"value":"1D72F","name":"MATHEMATICAL BOLD ITALIC CAPITAL TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf2f"},120624:{"value":"1D730","name":"MATHEMATICAL BOLD ITALIC CAPITAL UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf30"},120625:{"value":"1D731","name":"MATHEMATICAL BOLD ITALIC CAPITAL PHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf31"},120626:{"value":"1D732","name":"MATHEMATICAL BOLD ITALIC CAPITAL CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf32"},120627:{"value":"1D733","name":"MATHEMATICAL BOLD ITALIC CAPITAL PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf33"},120628:{"value":"1D734","name":"MATHEMATICAL BOLD ITALIC CAPITAL OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf34"},120662:{"value":"1D756","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0391","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf56"},120663:{"value":"1D757","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0392","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf57"},120664:{"value":"1D758","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf58"},120665:{"value":"1D759","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0394","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf59"},120666:{"value":"1D75A","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0395","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf5a"},120667:{"value":"1D75B","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0396","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf5b"},120668:{"value":"1D75C","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0397","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf5c"},120669:{"value":"1D75D","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0398","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf5d"},120670:{"value":"1D75E","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0399","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf5e"},120671:{"value":"1D75F","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf5f"},120672:{"value":"1D760","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf60"},120673:{"value":"1D761","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf61"},120674:{"value":"1D762","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf62"},120675:{"value":"1D763","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL XI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf63"},120676:{"value":"1D764","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf64"},120677:{"value":"1D765","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf65"},120678:{"value":"1D766","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf66"},120679:{"value":"1D767","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf67"},120680:{"value":"1D768","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf68"},120681:{"value":"1D769","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf69"},120682:{"value":"1D76A","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf6a"},120683:{"value":"1D76B","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf6b"},120684:{"value":"1D76C","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf6c"},120685:{"value":"1D76D","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf6d"},120686:{"value":"1D76E","name":"MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf6e"},120720:{"value":"1D790","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0391","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf90"},120721:{"value":"1D791","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0392","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf91"},120722:{"value":"1D792","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0393","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf92"},120723:{"value":"1D793","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0394","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf93"},120724:{"value":"1D794","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0395","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf94"},120725:{"value":"1D795","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0396","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf95"},120726:{"value":"1D796","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0397","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf96"},120727:{"value":"1D797","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0398","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf97"},120728:{"value":"1D798","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 0399","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf98"},120729:{"value":"1D799","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf99"},120730:{"value":"1D79A","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf9a"},120731:{"value":"1D79B","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf9b"},120732:{"value":"1D79C","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf9c"},120733:{"value":"1D79D","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf9d"},120734:{"value":"1D79E","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 039F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf9e"},120735:{"value":"1D79F","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf9f"},120736:{"value":"1D7A0","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa0"},120737:{"value":"1D7A1","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03F4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa1"},120738:{"value":"1D7A2","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa2"},120739:{"value":"1D7A3","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa3"},120740:{"value":"1D7A4","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa4"},120741:{"value":"1D7A5","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa5"},120742:{"value":"1D7A6","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa6"},120743:{"value":"1D7A7","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa7"},120744:{"value":"1D7A8","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa8"},120778:{"value":"1D7CA","name":"MATHEMATICAL BOLD CAPITAL DIGAMMA","category":"Lu","class":"0","bidirectional_category":"L","mapping":" 03DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfca"},125184:{"value":"1E900","name":"ADLAM CAPITAL LETTER ALIF","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E922","titlecase_mapping":"","symbol":"\ud83a\udd00"},125185:{"value":"1E901","name":"ADLAM CAPITAL LETTER DAALI","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E923","titlecase_mapping":"","symbol":"\ud83a\udd01"},125186:{"value":"1E902","name":"ADLAM CAPITAL LETTER LAAM","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E924","titlecase_mapping":"","symbol":"\ud83a\udd02"},125187:{"value":"1E903","name":"ADLAM CAPITAL LETTER MIIM","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E925","titlecase_mapping":"","symbol":"\ud83a\udd03"},125188:{"value":"1E904","name":"ADLAM CAPITAL LETTER BA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E926","titlecase_mapping":"","symbol":"\ud83a\udd04"},125189:{"value":"1E905","name":"ADLAM CAPITAL LETTER SINNYIIYHE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E927","titlecase_mapping":"","symbol":"\ud83a\udd05"},125190:{"value":"1E906","name":"ADLAM CAPITAL LETTER PE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E928","titlecase_mapping":"","symbol":"\ud83a\udd06"},125191:{"value":"1E907","name":"ADLAM CAPITAL LETTER BHE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E929","titlecase_mapping":"","symbol":"\ud83a\udd07"},125192:{"value":"1E908","name":"ADLAM CAPITAL LETTER RA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E92A","titlecase_mapping":"","symbol":"\ud83a\udd08"},125193:{"value":"1E909","name":"ADLAM CAPITAL LETTER E","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E92B","titlecase_mapping":"","symbol":"\ud83a\udd09"},125194:{"value":"1E90A","name":"ADLAM CAPITAL LETTER FA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E92C","titlecase_mapping":"","symbol":"\ud83a\udd0a"},125195:{"value":"1E90B","name":"ADLAM CAPITAL LETTER I","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E92D","titlecase_mapping":"","symbol":"\ud83a\udd0b"},125196:{"value":"1E90C","name":"ADLAM CAPITAL LETTER O","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E92E","titlecase_mapping":"","symbol":"\ud83a\udd0c"},125197:{"value":"1E90D","name":"ADLAM CAPITAL LETTER DHA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E92F","titlecase_mapping":"","symbol":"\ud83a\udd0d"},125198:{"value":"1E90E","name":"ADLAM CAPITAL LETTER YHE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E930","titlecase_mapping":"","symbol":"\ud83a\udd0e"},125199:{"value":"1E90F","name":"ADLAM CAPITAL LETTER WAW","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E931","titlecase_mapping":"","symbol":"\ud83a\udd0f"},125200:{"value":"1E910","name":"ADLAM CAPITAL LETTER NUN","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E932","titlecase_mapping":"","symbol":"\ud83a\udd10"},125201:{"value":"1E911","name":"ADLAM CAPITAL LETTER KAF","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E933","titlecase_mapping":"","symbol":"\ud83a\udd11"},125202:{"value":"1E912","name":"ADLAM CAPITAL LETTER YA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E934","titlecase_mapping":"","symbol":"\ud83a\udd12"},125203:{"value":"1E913","name":"ADLAM CAPITAL LETTER U","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E935","titlecase_mapping":"","symbol":"\ud83a\udd13"},125204:{"value":"1E914","name":"ADLAM CAPITAL LETTER JIIM","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E936","titlecase_mapping":"","symbol":"\ud83a\udd14"},125205:{"value":"1E915","name":"ADLAM CAPITAL LETTER CHI","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E937","titlecase_mapping":"","symbol":"\ud83a\udd15"},125206:{"value":"1E916","name":"ADLAM CAPITAL LETTER HA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E938","titlecase_mapping":"","symbol":"\ud83a\udd16"},125207:{"value":"1E917","name":"ADLAM CAPITAL LETTER QAAF","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E939","titlecase_mapping":"","symbol":"\ud83a\udd17"},125208:{"value":"1E918","name":"ADLAM CAPITAL LETTER GA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93A","titlecase_mapping":"","symbol":"\ud83a\udd18"},125209:{"value":"1E919","name":"ADLAM CAPITAL LETTER NYA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93B","titlecase_mapping":"","symbol":"\ud83a\udd19"},125210:{"value":"1E91A","name":"ADLAM CAPITAL LETTER TU","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93C","titlecase_mapping":"","symbol":"\ud83a\udd1a"},125211:{"value":"1E91B","name":"ADLAM CAPITAL LETTER NHA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93D","titlecase_mapping":"","symbol":"\ud83a\udd1b"},125212:{"value":"1E91C","name":"ADLAM CAPITAL LETTER VA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93E","titlecase_mapping":"","symbol":"\ud83a\udd1c"},125213:{"value":"1E91D","name":"ADLAM CAPITAL LETTER KHA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E93F","titlecase_mapping":"","symbol":"\ud83a\udd1d"},125214:{"value":"1E91E","name":"ADLAM CAPITAL LETTER GBE","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E940","titlecase_mapping":"","symbol":"\ud83a\udd1e"},125215:{"value":"1E91F","name":"ADLAM CAPITAL LETTER ZAL","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E941","titlecase_mapping":"","symbol":"\ud83a\udd1f"},125216:{"value":"1E920","name":"ADLAM CAPITAL LETTER KPO","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E942","titlecase_mapping":"","symbol":"\ud83a\udd20"},125217:{"value":"1E921","name":"ADLAM CAPITAL LETTER SHA","category":"Lu","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"1E943","titlecase_mapping":"","symbol":"\ud83a\udd21"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Mc.js b/node_modules/unicode/category/Mc.js new file mode 100644 index 000000000..528c64ffb --- /dev/null +++ b/node_modules/unicode/category/Mc.js @@ -0,0 +1 @@ +module.exports={2307:{"value":"0903","name":"DEVANAGARI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0903"},2363:{"value":"093B","name":"DEVANAGARI VOWEL SIGN OOE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u093B"},2366:{"value":"093E","name":"DEVANAGARI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u093E"},2367:{"value":"093F","name":"DEVANAGARI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u093F"},2368:{"value":"0940","name":"DEVANAGARI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0940"},2377:{"value":"0949","name":"DEVANAGARI VOWEL SIGN CANDRA O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0949"},2378:{"value":"094A","name":"DEVANAGARI VOWEL SIGN SHORT O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u094A"},2379:{"value":"094B","name":"DEVANAGARI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u094B"},2380:{"value":"094C","name":"DEVANAGARI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u094C"},2382:{"value":"094E","name":"DEVANAGARI VOWEL SIGN PRISHTHAMATRA E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u094E"},2383:{"value":"094F","name":"DEVANAGARI VOWEL SIGN AW","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u094F"},2434:{"value":"0982","name":"BENGALI SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0982"},2435:{"value":"0983","name":"BENGALI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0983"},2494:{"value":"09BE","name":"BENGALI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09BE"},2495:{"value":"09BF","name":"BENGALI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09BF"},2496:{"value":"09C0","name":"BENGALI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C0"},2503:{"value":"09C7","name":"BENGALI VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C7"},2504:{"value":"09C8","name":"BENGALI VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C8"},2507:{"value":"09CB","name":"BENGALI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"09C7 09BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09CB"},2508:{"value":"09CC","name":"BENGALI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"09C7 09D7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09CC"},2519:{"value":"09D7","name":"BENGALI AU LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09D7"},2563:{"value":"0A03","name":"GURMUKHI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A03"},2622:{"value":"0A3E","name":"GURMUKHI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A3E"},2623:{"value":"0A3F","name":"GURMUKHI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A3F"},2624:{"value":"0A40","name":"GURMUKHI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A40"},2691:{"value":"0A83","name":"GUJARATI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A83"},2750:{"value":"0ABE","name":"GUJARATI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ABE"},2751:{"value":"0ABF","name":"GUJARATI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ABF"},2752:{"value":"0AC0","name":"GUJARATI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC0"},2761:{"value":"0AC9","name":"GUJARATI VOWEL SIGN CANDRA O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC9"},2763:{"value":"0ACB","name":"GUJARATI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ACB"},2764:{"value":"0ACC","name":"GUJARATI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ACC"},2818:{"value":"0B02","name":"ORIYA SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B02"},2819:{"value":"0B03","name":"ORIYA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B03"},2878:{"value":"0B3E","name":"ORIYA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B3E"},2880:{"value":"0B40","name":"ORIYA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B40"},2887:{"value":"0B47","name":"ORIYA VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B47"},2888:{"value":"0B48","name":"ORIYA VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0B47 0B56","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B48"},2891:{"value":"0B4B","name":"ORIYA VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0B47 0B3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B4B"},2892:{"value":"0B4C","name":"ORIYA VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0B47 0B57","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B4C"},2903:{"value":"0B57","name":"ORIYA AU LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B57"},3006:{"value":"0BBE","name":"TAMIL VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BBE"},3007:{"value":"0BBF","name":"TAMIL VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BBF"},3009:{"value":"0BC1","name":"TAMIL VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BC1"},3010:{"value":"0BC2","name":"TAMIL VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BC2"},3014:{"value":"0BC6","name":"TAMIL VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BC6"},3015:{"value":"0BC7","name":"TAMIL VOWEL SIGN EE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BC7"},3016:{"value":"0BC8","name":"TAMIL VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BC8"},3018:{"value":"0BCA","name":"TAMIL VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0BC6 0BBE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BCA"},3019:{"value":"0BCB","name":"TAMIL VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0BC7 0BBE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BCB"},3020:{"value":"0BCC","name":"TAMIL VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0BC6 0BD7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BCC"},3031:{"value":"0BD7","name":"TAMIL AU LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BD7"},3073:{"value":"0C01","name":"TELUGU SIGN CANDRABINDU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C01"},3074:{"value":"0C02","name":"TELUGU SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C02"},3075:{"value":"0C03","name":"TELUGU SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C03"},3137:{"value":"0C41","name":"TELUGU VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C41"},3138:{"value":"0C42","name":"TELUGU VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C42"},3139:{"value":"0C43","name":"TELUGU VOWEL SIGN VOCALIC R","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C43"},3140:{"value":"0C44","name":"TELUGU VOWEL SIGN VOCALIC RR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C44"},3202:{"value":"0C82","name":"KANNADA SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C82"},3203:{"value":"0C83","name":"KANNADA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C83"},3262:{"value":"0CBE","name":"KANNADA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CBE"},3264:{"value":"0CC0","name":"KANNADA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0CBF 0CD5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC0"},3265:{"value":"0CC1","name":"KANNADA VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC1"},3266:{"value":"0CC2","name":"KANNADA VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC2"},3267:{"value":"0CC3","name":"KANNADA VOWEL SIGN VOCALIC R","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC3"},3268:{"value":"0CC4","name":"KANNADA VOWEL SIGN VOCALIC RR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC4"},3271:{"value":"0CC7","name":"KANNADA VOWEL SIGN EE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0CC6 0CD5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC7"},3272:{"value":"0CC8","name":"KANNADA VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0CC6 0CD6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC8"},3274:{"value":"0CCA","name":"KANNADA VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0CC6 0CC2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CCA"},3275:{"value":"0CCB","name":"KANNADA VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0CCA 0CD5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CCB"},3285:{"value":"0CD5","name":"KANNADA LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CD5"},3286:{"value":"0CD6","name":"KANNADA AI LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CD6"},3330:{"value":"0D02","name":"MALAYALAM SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D02"},3331:{"value":"0D03","name":"MALAYALAM SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D03"},3390:{"value":"0D3E","name":"MALAYALAM VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D3E"},3391:{"value":"0D3F","name":"MALAYALAM VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D3F"},3392:{"value":"0D40","name":"MALAYALAM VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D40"},3398:{"value":"0D46","name":"MALAYALAM VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D46"},3399:{"value":"0D47","name":"MALAYALAM VOWEL SIGN EE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D47"},3400:{"value":"0D48","name":"MALAYALAM VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D48"},3402:{"value":"0D4A","name":"MALAYALAM VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0D46 0D3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D4A"},3403:{"value":"0D4B","name":"MALAYALAM VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0D47 0D3E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D4B"},3404:{"value":"0D4C","name":"MALAYALAM VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0D46 0D57","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D4C"},3415:{"value":"0D57","name":"MALAYALAM AU LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D57"},3458:{"value":"0D82","name":"SINHALA SIGN ANUSVARAYA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D82"},3459:{"value":"0D83","name":"SINHALA SIGN VISARGAYA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D83"},3535:{"value":"0DCF","name":"SINHALA VOWEL SIGN AELA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DCF"},3536:{"value":"0DD0","name":"SINHALA VOWEL SIGN KETTI AEDA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD0"},3537:{"value":"0DD1","name":"SINHALA VOWEL SIGN DIGA AEDA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD1"},3544:{"value":"0DD8","name":"SINHALA VOWEL SIGN GAETTA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD8"},3545:{"value":"0DD9","name":"SINHALA VOWEL SIGN KOMBUVA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD9"},3546:{"value":"0DDA","name":"SINHALA VOWEL SIGN DIGA KOMBUVA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0DD9 0DCA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DDA"},3547:{"value":"0DDB","name":"SINHALA VOWEL SIGN KOMBU DEKA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DDB"},3548:{"value":"0DDC","name":"SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0DD9 0DCF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DDC"},3549:{"value":"0DDD","name":"SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0DDC 0DCA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DDD"},3550:{"value":"0DDE","name":"SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"0DD9 0DDF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DDE"},3551:{"value":"0DDF","name":"SINHALA VOWEL SIGN GAYANUKITTA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DDF"},3570:{"value":"0DF2","name":"SINHALA VOWEL SIGN DIGA GAETTA-PILLA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DF2"},3571:{"value":"0DF3","name":"SINHALA VOWEL SIGN DIGA GAYANUKITTA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DF3"},3902:{"value":"0F3E","name":"TIBETAN SIGN YAR TSHES","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F3E"},3903:{"value":"0F3F","name":"TIBETAN SIGN MAR TSHES","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F3F"},3967:{"value":"0F7F","name":"TIBETAN SIGN RNAM BCAD","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN VISARGA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F7F"},4139:{"value":"102B","name":"MYANMAR VOWEL SIGN TALL AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u102B"},4140:{"value":"102C","name":"MYANMAR VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u102C"},4145:{"value":"1031","name":"MYANMAR VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1031"},4152:{"value":"1038","name":"MYANMAR SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1038"},4155:{"value":"103B","name":"MYANMAR CONSONANT SIGN MEDIAL YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u103B"},4156:{"value":"103C","name":"MYANMAR CONSONANT SIGN MEDIAL RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u103C"},4182:{"value":"1056","name":"MYANMAR VOWEL SIGN VOCALIC R","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1056"},4183:{"value":"1057","name":"MYANMAR VOWEL SIGN VOCALIC RR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1057"},4194:{"value":"1062","name":"MYANMAR VOWEL SIGN SGAW KAREN EU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1062"},4195:{"value":"1063","name":"MYANMAR TONE MARK SGAW KAREN HATHI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1063"},4196:{"value":"1064","name":"MYANMAR TONE MARK SGAW KAREN KE PHO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1064"},4199:{"value":"1067","name":"MYANMAR VOWEL SIGN WESTERN PWO KAREN EU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1067"},4200:{"value":"1068","name":"MYANMAR VOWEL SIGN WESTERN PWO KAREN UE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1068"},4201:{"value":"1069","name":"MYANMAR SIGN WESTERN PWO KAREN TONE-1","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1069"},4202:{"value":"106A","name":"MYANMAR SIGN WESTERN PWO KAREN TONE-2","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u106A"},4203:{"value":"106B","name":"MYANMAR SIGN WESTERN PWO KAREN TONE-3","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u106B"},4204:{"value":"106C","name":"MYANMAR SIGN WESTERN PWO KAREN TONE-4","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u106C"},4205:{"value":"106D","name":"MYANMAR SIGN WESTERN PWO KAREN TONE-5","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u106D"},4227:{"value":"1083","name":"MYANMAR VOWEL SIGN SHAN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1083"},4228:{"value":"1084","name":"MYANMAR VOWEL SIGN SHAN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1084"},4231:{"value":"1087","name":"MYANMAR SIGN SHAN TONE-2","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1087"},4232:{"value":"1088","name":"MYANMAR SIGN SHAN TONE-3","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1088"},4233:{"value":"1089","name":"MYANMAR SIGN SHAN TONE-5","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1089"},4234:{"value":"108A","name":"MYANMAR SIGN SHAN TONE-6","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u108A"},4235:{"value":"108B","name":"MYANMAR SIGN SHAN COUNCIL TONE-2","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u108B"},4236:{"value":"108C","name":"MYANMAR SIGN SHAN COUNCIL TONE-3","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u108C"},4239:{"value":"108F","name":"MYANMAR SIGN RUMAI PALAUNG TONE-5","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u108F"},4250:{"value":"109A","name":"MYANMAR SIGN KHAMTI TONE-1","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u109A"},4251:{"value":"109B","name":"MYANMAR SIGN KHAMTI TONE-3","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u109B"},4252:{"value":"109C","name":"MYANMAR VOWEL SIGN AITON A","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u109C"},5909:{"value":"1715","name":"TAGALOG SIGN PAMUDPOD","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1715"},5940:{"value":"1734","name":"HANUNOO SIGN PAMUDPOD","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1734"},6070:{"value":"17B6","name":"KHMER VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B6"},6078:{"value":"17BE","name":"KHMER VOWEL SIGN OE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17BE"},6079:{"value":"17BF","name":"KHMER VOWEL SIGN YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17BF"},6080:{"value":"17C0","name":"KHMER VOWEL SIGN IE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C0"},6081:{"value":"17C1","name":"KHMER VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C1"},6082:{"value":"17C2","name":"KHMER VOWEL SIGN AE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C2"},6083:{"value":"17C3","name":"KHMER VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C3"},6084:{"value":"17C4","name":"KHMER VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C4"},6085:{"value":"17C5","name":"KHMER VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C5"},6087:{"value":"17C7","name":"KHMER SIGN REAHMUK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C7"},6088:{"value":"17C8","name":"KHMER SIGN YUUKALEAPINTU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C8"},6435:{"value":"1923","name":"LIMBU VOWEL SIGN EE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1923"},6436:{"value":"1924","name":"LIMBU VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1924"},6437:{"value":"1925","name":"LIMBU VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1925"},6438:{"value":"1926","name":"LIMBU VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1926"},6441:{"value":"1929","name":"LIMBU SUBJOINED LETTER YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1929"},6442:{"value":"192A","name":"LIMBU SUBJOINED LETTER RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u192A"},6443:{"value":"192B","name":"LIMBU SUBJOINED LETTER WA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u192B"},6448:{"value":"1930","name":"LIMBU SMALL LETTER KA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1930"},6449:{"value":"1931","name":"LIMBU SMALL LETTER NGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1931"},6451:{"value":"1933","name":"LIMBU SMALL LETTER TA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1933"},6452:{"value":"1934","name":"LIMBU SMALL LETTER NA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1934"},6453:{"value":"1935","name":"LIMBU SMALL LETTER PA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1935"},6454:{"value":"1936","name":"LIMBU SMALL LETTER MA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1936"},6455:{"value":"1937","name":"LIMBU SMALL LETTER RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1937"},6456:{"value":"1938","name":"LIMBU SMALL LETTER LA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1938"},6681:{"value":"1A19","name":"BUGINESE VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A19"},6682:{"value":"1A1A","name":"BUGINESE VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A1A"},6741:{"value":"1A55","name":"TAI THAM CONSONANT SIGN MEDIAL RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A55"},6743:{"value":"1A57","name":"TAI THAM CONSONANT SIGN LA TANG LAI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A57"},6753:{"value":"1A61","name":"TAI THAM VOWEL SIGN A","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A61"},6755:{"value":"1A63","name":"TAI THAM VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A63"},6756:{"value":"1A64","name":"TAI THAM VOWEL SIGN TALL AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A64"},6765:{"value":"1A6D","name":"TAI THAM VOWEL SIGN OY","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A6D"},6766:{"value":"1A6E","name":"TAI THAM VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A6E"},6767:{"value":"1A6F","name":"TAI THAM VOWEL SIGN AE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A6F"},6768:{"value":"1A70","name":"TAI THAM VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A70"},6769:{"value":"1A71","name":"TAI THAM VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A71"},6770:{"value":"1A72","name":"TAI THAM VOWEL SIGN THAM AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A72"},6916:{"value":"1B04","name":"BALINESE SIGN BISAH","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B04"},6965:{"value":"1B35","name":"BALINESE VOWEL SIGN TEDUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B35"},6971:{"value":"1B3B","name":"BALINESE VOWEL SIGN RA REPA TEDUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"1B3A 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B3B"},6973:{"value":"1B3D","name":"BALINESE VOWEL SIGN LA LENGA TEDUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"1B3C 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B3D"},6974:{"value":"1B3E","name":"BALINESE VOWEL SIGN TALING","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B3E"},6975:{"value":"1B3F","name":"BALINESE VOWEL SIGN TALING REPA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B3F"},6976:{"value":"1B40","name":"BALINESE VOWEL SIGN TALING TEDUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"1B3E 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B40"},6977:{"value":"1B41","name":"BALINESE VOWEL SIGN TALING REPA TEDUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"1B3F 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B41"},6979:{"value":"1B43","name":"BALINESE VOWEL SIGN PEPET TEDUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"1B42 1B35","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B43"},6980:{"value":"1B44","name":"BALINESE ADEG ADEG","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B44"},7042:{"value":"1B82","name":"SUNDANESE SIGN PANGWISAD","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B82"},7073:{"value":"1BA1","name":"SUNDANESE CONSONANT SIGN PAMINGKAL","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA1"},7078:{"value":"1BA6","name":"SUNDANESE VOWEL SIGN PANAELAENG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA6"},7079:{"value":"1BA7","name":"SUNDANESE VOWEL SIGN PANOLONG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA7"},7082:{"value":"1BAA","name":"SUNDANESE SIGN PAMAAEH","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BAA"},7143:{"value":"1BE7","name":"BATAK VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE7"},7146:{"value":"1BEA","name":"BATAK VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BEA"},7147:{"value":"1BEB","name":"BATAK VOWEL SIGN KARO I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BEB"},7148:{"value":"1BEC","name":"BATAK VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BEC"},7150:{"value":"1BEE","name":"BATAK VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BEE"},7154:{"value":"1BF2","name":"BATAK PANGOLAT","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BF2"},7155:{"value":"1BF3","name":"BATAK PANONGONAN","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BF3"},7204:{"value":"1C24","name":"LEPCHA SUBJOINED LETTER YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C24"},7205:{"value":"1C25","name":"LEPCHA SUBJOINED LETTER RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C25"},7206:{"value":"1C26","name":"LEPCHA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C26"},7207:{"value":"1C27","name":"LEPCHA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C27"},7208:{"value":"1C28","name":"LEPCHA VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C28"},7209:{"value":"1C29","name":"LEPCHA VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C29"},7210:{"value":"1C2A","name":"LEPCHA VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C2A"},7211:{"value":"1C2B","name":"LEPCHA VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C2B"},7220:{"value":"1C34","name":"LEPCHA CONSONANT SIGN NYIN-DO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C34"},7221:{"value":"1C35","name":"LEPCHA CONSONANT SIGN KANG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C35"},7393:{"value":"1CE1","name":"VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE1"},7415:{"value":"1CF7","name":"VEDIC SIGN ATIKRAMA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF7"},12334:{"value":"302E","name":"HANGUL SINGLE DOT TONE MARK","category":"Mc","class":"224","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u302E"},12335:{"value":"302F","name":"HANGUL DOUBLE DOT TONE MARK","category":"Mc","class":"224","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u302F"},43043:{"value":"A823","name":"SYLOTI NAGRI VOWEL SIGN A","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA823"},43044:{"value":"A824","name":"SYLOTI NAGRI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA824"},43047:{"value":"A827","name":"SYLOTI NAGRI VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA827"},43136:{"value":"A880","name":"SAURASHTRA SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA880"},43137:{"value":"A881","name":"SAURASHTRA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA881"},43188:{"value":"A8B4","name":"SAURASHTRA CONSONANT SIGN HAARU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B4"},43189:{"value":"A8B5","name":"SAURASHTRA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B5"},43190:{"value":"A8B6","name":"SAURASHTRA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B6"},43191:{"value":"A8B7","name":"SAURASHTRA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B7"},43192:{"value":"A8B8","name":"SAURASHTRA VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B8"},43193:{"value":"A8B9","name":"SAURASHTRA VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8B9"},43194:{"value":"A8BA","name":"SAURASHTRA VOWEL SIGN VOCALIC R","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8BA"},43195:{"value":"A8BB","name":"SAURASHTRA VOWEL SIGN VOCALIC RR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8BB"},43196:{"value":"A8BC","name":"SAURASHTRA VOWEL SIGN VOCALIC L","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8BC"},43197:{"value":"A8BD","name":"SAURASHTRA VOWEL SIGN VOCALIC LL","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8BD"},43198:{"value":"A8BE","name":"SAURASHTRA VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8BE"},43199:{"value":"A8BF","name":"SAURASHTRA VOWEL SIGN EE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8BF"},43200:{"value":"A8C0","name":"SAURASHTRA VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8C0"},43201:{"value":"A8C1","name":"SAURASHTRA VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8C1"},43202:{"value":"A8C2","name":"SAURASHTRA VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8C2"},43203:{"value":"A8C3","name":"SAURASHTRA VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8C3"},43346:{"value":"A952","name":"REJANG CONSONANT SIGN H","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA952"},43347:{"value":"A953","name":"REJANG VIRAMA","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA953"},43395:{"value":"A983","name":"JAVANESE SIGN WIGNYAN","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA983"},43444:{"value":"A9B4","name":"JAVANESE VOWEL SIGN TARUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B4"},43445:{"value":"A9B5","name":"JAVANESE VOWEL SIGN TOLONG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B5"},43450:{"value":"A9BA","name":"JAVANESE VOWEL SIGN TALING","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9BA"},43451:{"value":"A9BB","name":"JAVANESE VOWEL SIGN DIRGA MURE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9BB"},43454:{"value":"A9BE","name":"JAVANESE CONSONANT SIGN PENGKAL","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9BE"},43455:{"value":"A9BF","name":"JAVANESE CONSONANT SIGN CAKRA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9BF"},43456:{"value":"A9C0","name":"JAVANESE PANGKON","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C0"},43567:{"value":"AA2F","name":"CHAM VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA2F"},43568:{"value":"AA30","name":"CHAM VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA30"},43571:{"value":"AA33","name":"CHAM CONSONANT SIGN YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA33"},43572:{"value":"AA34","name":"CHAM CONSONANT SIGN RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA34"},43597:{"value":"AA4D","name":"CHAM CONSONANT SIGN FINAL H","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA4D"},43643:{"value":"AA7B","name":"MYANMAR SIGN PAO KAREN TONE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA7B"},43645:{"value":"AA7D","name":"MYANMAR SIGN TAI LAING TONE-5","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA7D"},43755:{"value":"AAEB","name":"MEETEI MAYEK VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAEB"},43758:{"value":"AAEE","name":"MEETEI MAYEK VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAEE"},43759:{"value":"AAEF","name":"MEETEI MAYEK VOWEL SIGN AAU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAEF"},43765:{"value":"AAF5","name":"MEETEI MAYEK VOWEL SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF5"},44003:{"value":"ABE3","name":"MEETEI MAYEK VOWEL SIGN ONAP","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE3"},44004:{"value":"ABE4","name":"MEETEI MAYEK VOWEL SIGN INAP","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE4"},44006:{"value":"ABE6","name":"MEETEI MAYEK VOWEL SIGN YENAP","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE6"},44007:{"value":"ABE7","name":"MEETEI MAYEK VOWEL SIGN SOUNAP","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE7"},44009:{"value":"ABE9","name":"MEETEI MAYEK VOWEL SIGN CHEINAP","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE9"},44010:{"value":"ABEA","name":"MEETEI MAYEK VOWEL SIGN NUNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABEA"},44012:{"value":"ABEC","name":"MEETEI MAYEK LUM IYEK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABEC"},69632:{"value":"11000","name":"BRAHMI SIGN CANDRABINDU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc00"},69634:{"value":"11002","name":"BRAHMI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc02"},69762:{"value":"11082","name":"KAITHI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc82"},69808:{"value":"110B0","name":"KAITHI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb0"},69809:{"value":"110B1","name":"KAITHI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb1"},69810:{"value":"110B2","name":"KAITHI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb2"},69815:{"value":"110B7","name":"KAITHI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb7"},69816:{"value":"110B8","name":"KAITHI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb8"},69932:{"value":"1112C","name":"CHAKMA VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd2c"},69957:{"value":"11145","name":"CHAKMA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd45"},69958:{"value":"11146","name":"CHAKMA VOWEL SIGN EI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd46"},70018:{"value":"11182","name":"SHARADA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd82"},70067:{"value":"111B3","name":"SHARADA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb3"},70068:{"value":"111B4","name":"SHARADA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb4"},70069:{"value":"111B5","name":"SHARADA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb5"},70079:{"value":"111BF","name":"SHARADA VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddbf"},70080:{"value":"111C0","name":"SHARADA SIGN VIRAMA","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc0"},70094:{"value":"111CE","name":"SHARADA VOWEL SIGN PRISHTHAMATRA E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddce"},70188:{"value":"1122C","name":"KHOJKI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude2c"},70189:{"value":"1122D","name":"KHOJKI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude2d"},70190:{"value":"1122E","name":"KHOJKI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude2e"},70194:{"value":"11232","name":"KHOJKI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude32"},70195:{"value":"11233","name":"KHOJKI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude33"},70197:{"value":"11235","name":"KHOJKI SIGN VIRAMA","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude35"},70368:{"value":"112E0","name":"KHUDAWADI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee0"},70369:{"value":"112E1","name":"KHUDAWADI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee1"},70370:{"value":"112E2","name":"KHUDAWADI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee2"},70402:{"value":"11302","name":"GRANTHA SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf02"},70403:{"value":"11303","name":"GRANTHA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf03"},70462:{"value":"1133E","name":"GRANTHA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf3e"},70463:{"value":"1133F","name":"GRANTHA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf3f"},70465:{"value":"11341","name":"GRANTHA VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf41"},70466:{"value":"11342","name":"GRANTHA VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf42"},70467:{"value":"11343","name":"GRANTHA VOWEL SIGN VOCALIC R","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf43"},70468:{"value":"11344","name":"GRANTHA VOWEL SIGN VOCALIC RR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf44"},70471:{"value":"11347","name":"GRANTHA VOWEL SIGN EE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf47"},70472:{"value":"11348","name":"GRANTHA VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf48"},70475:{"value":"1134B","name":"GRANTHA VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"11347 1133E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf4b"},70476:{"value":"1134C","name":"GRANTHA VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"11347 11357","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf4c"},70477:{"value":"1134D","name":"GRANTHA SIGN VIRAMA","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf4d"},70487:{"value":"11357","name":"GRANTHA AU LENGTH MARK","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf57"},70498:{"value":"11362","name":"GRANTHA VOWEL SIGN VOCALIC L","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf62"},70499:{"value":"11363","name":"GRANTHA VOWEL SIGN VOCALIC LL","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf63"},70709:{"value":"11435","name":"NEWA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc35"},70710:{"value":"11436","name":"NEWA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc36"},70711:{"value":"11437","name":"NEWA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc37"},70720:{"value":"11440","name":"NEWA VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc40"},70721:{"value":"11441","name":"NEWA VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc41"},70725:{"value":"11445","name":"NEWA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc45"},70832:{"value":"114B0","name":"TIRHUTA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb0"},70833:{"value":"114B1","name":"TIRHUTA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb1"},70834:{"value":"114B2","name":"TIRHUTA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb2"},70841:{"value":"114B9","name":"TIRHUTA VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb9"},70843:{"value":"114BB","name":"TIRHUTA VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"114B9 114BA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcbb"},70844:{"value":"114BC","name":"TIRHUTA VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"114B9 114B0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcbc"},70845:{"value":"114BD","name":"TIRHUTA VOWEL SIGN SHORT O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcbd"},70846:{"value":"114BE","name":"TIRHUTA VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"114B9 114BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcbe"},70849:{"value":"114C1","name":"TIRHUTA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc1"},71087:{"value":"115AF","name":"SIDDHAM VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddaf"},71088:{"value":"115B0","name":"SIDDHAM VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb0"},71089:{"value":"115B1","name":"SIDDHAM VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb1"},71096:{"value":"115B8","name":"SIDDHAM VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb8"},71097:{"value":"115B9","name":"SIDDHAM VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb9"},71098:{"value":"115BA","name":"SIDDHAM VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"115B8 115AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddba"},71099:{"value":"115BB","name":"SIDDHAM VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"115B9 115AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddbb"},71102:{"value":"115BE","name":"SIDDHAM SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddbe"},71216:{"value":"11630","name":"MODI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude30"},71217:{"value":"11631","name":"MODI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude31"},71218:{"value":"11632","name":"MODI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude32"},71227:{"value":"1163B","name":"MODI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude3b"},71228:{"value":"1163C","name":"MODI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude3c"},71230:{"value":"1163E","name":"MODI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude3e"},71340:{"value":"116AC","name":"TAKRI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeac"},71342:{"value":"116AE","name":"TAKRI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeae"},71343:{"value":"116AF","name":"TAKRI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeaf"},71350:{"value":"116B6","name":"TAKRI SIGN VIRAMA","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb6"},71456:{"value":"11720","name":"AHOM VOWEL SIGN A","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf20"},71457:{"value":"11721","name":"AHOM VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf21"},71462:{"value":"11726","name":"AHOM VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf26"},71724:{"value":"1182C","name":"DOGRA VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc2c"},71725:{"value":"1182D","name":"DOGRA VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc2d"},71726:{"value":"1182E","name":"DOGRA VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc2e"},71736:{"value":"11838","name":"DOGRA SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc38"},71984:{"value":"11930","name":"DIVES AKURU VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd30"},71985:{"value":"11931","name":"DIVES AKURU VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd31"},71986:{"value":"11932","name":"DIVES AKURU VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd32"},71987:{"value":"11933","name":"DIVES AKURU VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd33"},71988:{"value":"11934","name":"DIVES AKURU VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd34"},71989:{"value":"11935","name":"DIVES AKURU VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd35"},71991:{"value":"11937","name":"DIVES AKURU VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd37"},71992:{"value":"11938","name":"DIVES AKURU VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"11935 11930","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd38"},71997:{"value":"1193D","name":"DIVES AKURU SIGN HALANTA","category":"Mc","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd3d"},72000:{"value":"11940","name":"DIVES AKURU MEDIAL YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd40"},72002:{"value":"11942","name":"DIVES AKURU MEDIAL RA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd42"},72145:{"value":"119D1","name":"NANDINAGARI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd1"},72146:{"value":"119D2","name":"NANDINAGARI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd2"},72147:{"value":"119D3","name":"NANDINAGARI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd3"},72156:{"value":"119DC","name":"NANDINAGARI VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udddc"},72157:{"value":"119DD","name":"NANDINAGARI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udddd"},72158:{"value":"119DE","name":"NANDINAGARI SIGN ANUSVARA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddde"},72159:{"value":"119DF","name":"NANDINAGARI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udddf"},72164:{"value":"119E4","name":"NANDINAGARI VOWEL SIGN PRISHTHAMATRA E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udde4"},72249:{"value":"11A39","name":"ZANABAZAR SQUARE SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude39"},72279:{"value":"11A57","name":"SOYOMBO VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude57"},72280:{"value":"11A58","name":"SOYOMBO VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude58"},72343:{"value":"11A97","name":"SOYOMBO SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude97"},72751:{"value":"11C2F","name":"BHAIKSUKI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc2f"},72766:{"value":"11C3E","name":"BHAIKSUKI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc3e"},72873:{"value":"11CA9","name":"MARCHEN SUBJOINED LETTER YA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca9"},72881:{"value":"11CB1","name":"MARCHEN VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb1"},72884:{"value":"11CB4","name":"MARCHEN VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb4"},73098:{"value":"11D8A","name":"GUNJALA GONDI VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd8a"},73099:{"value":"11D8B","name":"GUNJALA GONDI VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd8b"},73100:{"value":"11D8C","name":"GUNJALA GONDI VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd8c"},73101:{"value":"11D8D","name":"GUNJALA GONDI VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd8d"},73102:{"value":"11D8E","name":"GUNJALA GONDI VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd8e"},73107:{"value":"11D93","name":"GUNJALA GONDI VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd93"},73108:{"value":"11D94","name":"GUNJALA GONDI VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd94"},73110:{"value":"11D96","name":"GUNJALA GONDI SIGN VISARGA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd96"},73461:{"value":"11EF5","name":"MAKASAR VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef5"},73462:{"value":"11EF6","name":"MAKASAR VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef6"},94033:{"value":"16F51","name":"MIAO SIGN ASPIRATION","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf51"},94034:{"value":"16F52","name":"MIAO SIGN REFORMED VOICING","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf52"},94035:{"value":"16F53","name":"MIAO SIGN REFORMED ASPIRATION","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf53"},94036:{"value":"16F54","name":"MIAO VOWEL SIGN A","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf54"},94037:{"value":"16F55","name":"MIAO VOWEL SIGN AA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf55"},94038:{"value":"16F56","name":"MIAO VOWEL SIGN AHH","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf56"},94039:{"value":"16F57","name":"MIAO VOWEL SIGN AN","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf57"},94040:{"value":"16F58","name":"MIAO VOWEL SIGN ANG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf58"},94041:{"value":"16F59","name":"MIAO VOWEL SIGN O","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf59"},94042:{"value":"16F5A","name":"MIAO VOWEL SIGN OO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf5a"},94043:{"value":"16F5B","name":"MIAO VOWEL SIGN WO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf5b"},94044:{"value":"16F5C","name":"MIAO VOWEL SIGN W","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf5c"},94045:{"value":"16F5D","name":"MIAO VOWEL SIGN E","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf5d"},94046:{"value":"16F5E","name":"MIAO VOWEL SIGN EN","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf5e"},94047:{"value":"16F5F","name":"MIAO VOWEL SIGN ENG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf5f"},94048:{"value":"16F60","name":"MIAO VOWEL SIGN OEY","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf60"},94049:{"value":"16F61","name":"MIAO VOWEL SIGN I","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf61"},94050:{"value":"16F62","name":"MIAO VOWEL SIGN IA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf62"},94051:{"value":"16F63","name":"MIAO VOWEL SIGN IAN","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf63"},94052:{"value":"16F64","name":"MIAO VOWEL SIGN IANG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf64"},94053:{"value":"16F65","name":"MIAO VOWEL SIGN IO","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf65"},94054:{"value":"16F66","name":"MIAO VOWEL SIGN IE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf66"},94055:{"value":"16F67","name":"MIAO VOWEL SIGN II","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf67"},94056:{"value":"16F68","name":"MIAO VOWEL SIGN IU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf68"},94057:{"value":"16F69","name":"MIAO VOWEL SIGN ING","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf69"},94058:{"value":"16F6A","name":"MIAO VOWEL SIGN U","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf6a"},94059:{"value":"16F6B","name":"MIAO VOWEL SIGN UA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf6b"},94060:{"value":"16F6C","name":"MIAO VOWEL SIGN UAN","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf6c"},94061:{"value":"16F6D","name":"MIAO VOWEL SIGN UANG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf6d"},94062:{"value":"16F6E","name":"MIAO VOWEL SIGN UU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf6e"},94063:{"value":"16F6F","name":"MIAO VOWEL SIGN UEI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf6f"},94064:{"value":"16F70","name":"MIAO VOWEL SIGN UNG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf70"},94065:{"value":"16F71","name":"MIAO VOWEL SIGN Y","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf71"},94066:{"value":"16F72","name":"MIAO VOWEL SIGN YI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf72"},94067:{"value":"16F73","name":"MIAO VOWEL SIGN AE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf73"},94068:{"value":"16F74","name":"MIAO VOWEL SIGN AEE","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf74"},94069:{"value":"16F75","name":"MIAO VOWEL SIGN ERR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf75"},94070:{"value":"16F76","name":"MIAO VOWEL SIGN ROUNDED ERR","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf76"},94071:{"value":"16F77","name":"MIAO VOWEL SIGN ER","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf77"},94072:{"value":"16F78","name":"MIAO VOWEL SIGN ROUNDED ER","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf78"},94073:{"value":"16F79","name":"MIAO VOWEL SIGN AI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf79"},94074:{"value":"16F7A","name":"MIAO VOWEL SIGN EI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf7a"},94075:{"value":"16F7B","name":"MIAO VOWEL SIGN AU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf7b"},94076:{"value":"16F7C","name":"MIAO VOWEL SIGN OU","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf7c"},94077:{"value":"16F7D","name":"MIAO VOWEL SIGN N","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf7d"},94078:{"value":"16F7E","name":"MIAO VOWEL SIGN NG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf7e"},94079:{"value":"16F7F","name":"MIAO VOWEL SIGN UOG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf7f"},94080:{"value":"16F80","name":"MIAO VOWEL SIGN YUI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf80"},94081:{"value":"16F81","name":"MIAO VOWEL SIGN OG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf81"},94082:{"value":"16F82","name":"MIAO VOWEL SIGN OER","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf82"},94083:{"value":"16F83","name":"MIAO VOWEL SIGN VW","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf83"},94084:{"value":"16F84","name":"MIAO VOWEL SIGN IG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf84"},94085:{"value":"16F85","name":"MIAO VOWEL SIGN EA","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf85"},94086:{"value":"16F86","name":"MIAO VOWEL SIGN IONG","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf86"},94087:{"value":"16F87","name":"MIAO VOWEL SIGN UI","category":"Mc","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf87"},94192:{"value":"16FF0","name":"VIETNAMESE ALTERNATE READING MARK CA","category":"Mc","class":"6","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udff0"},94193:{"value":"16FF1","name":"VIETNAMESE ALTERNATE READING MARK NHAY","category":"Mc","class":"6","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udff1"},119141:{"value":"1D165","name":"MUSICAL SYMBOL COMBINING STEM","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd65"},119142:{"value":"1D166","name":"MUSICAL SYMBOL COMBINING SPRECHGESANG STEM","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd66"},119149:{"value":"1D16D","name":"MUSICAL SYMBOL COMBINING AUGMENTATION DOT","category":"Mc","class":"226","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd6d"},119150:{"value":"1D16E","name":"MUSICAL SYMBOL COMBINING FLAG-1","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd6e"},119151:{"value":"1D16F","name":"MUSICAL SYMBOL COMBINING FLAG-2","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd6f"},119152:{"value":"1D170","name":"MUSICAL SYMBOL COMBINING FLAG-3","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd70"},119153:{"value":"1D171","name":"MUSICAL SYMBOL COMBINING FLAG-4","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd71"},119154:{"value":"1D172","name":"MUSICAL SYMBOL COMBINING FLAG-5","category":"Mc","class":"216","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd72"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Me.js b/node_modules/unicode/category/Me.js new file mode 100644 index 000000000..835dd2c1e --- /dev/null +++ b/node_modules/unicode/category/Me.js @@ -0,0 +1 @@ +module.exports={1160:{"value":"0488","name":"COMBINING CYRILLIC HUNDRED THOUSANDS SIGN","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0488"},1161:{"value":"0489","name":"COMBINING CYRILLIC MILLIONS SIGN","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0489"},6846:{"value":"1ABE","name":"COMBINING PARENTHESES OVERLAY","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ABE"},8413:{"value":"20DD","name":"COMBINING ENCLOSING CIRCLE","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ENCLOSING CIRCLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20DD"},8414:{"value":"20DE","name":"COMBINING ENCLOSING SQUARE","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ENCLOSING SQUARE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20DE"},8415:{"value":"20DF","name":"COMBINING ENCLOSING DIAMOND","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ENCLOSING DIAMOND","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20DF"},8416:{"value":"20E0","name":"COMBINING ENCLOSING CIRCLE BACKSLASH","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ENCLOSING CIRCLE SLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E0"},8418:{"value":"20E2","name":"COMBINING ENCLOSING SCREEN","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E2"},8419:{"value":"20E3","name":"COMBINING ENCLOSING KEYCAP","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E3"},8420:{"value":"20E4","name":"COMBINING ENCLOSING UPWARD POINTING TRIANGLE","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E4"},42608:{"value":"A670","name":"COMBINING CYRILLIC TEN MILLIONS SIGN","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA670"},42609:{"value":"A671","name":"COMBINING CYRILLIC HUNDRED MILLIONS SIGN","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA671"},42610:{"value":"A672","name":"COMBINING CYRILLIC THOUSAND MILLIONS SIGN","category":"Me","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA672"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Mn.js b/node_modules/unicode/category/Mn.js new file mode 100644 index 000000000..731429ca5 --- /dev/null +++ b/node_modules/unicode/category/Mn.js @@ -0,0 +1 @@ +module.exports={768:{"value":"0300","name":"COMBINING GRAVE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0300"},769:{"value":"0301","name":"COMBINING ACUTE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0301"},770:{"value":"0302","name":"COMBINING CIRCUMFLEX ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0302"},771:{"value":"0303","name":"COMBINING TILDE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0303"},772:{"value":"0304","name":"COMBINING MACRON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0304"},773:{"value":"0305","name":"COMBINING OVERLINE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0305"},774:{"value":"0306","name":"COMBINING BREVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0306"},775:{"value":"0307","name":"COMBINING DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOT ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0307"},776:{"value":"0308","name":"COMBINING DIAERESIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0308"},777:{"value":"0309","name":"COMBINING HOOK ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING HOOK ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0309"},778:{"value":"030A","name":"COMBINING RING ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RING ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u030A"},779:{"value":"030B","name":"COMBINING DOUBLE ACUTE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOUBLE ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u030B"},780:{"value":"030C","name":"COMBINING CARON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING HACEK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u030C"},781:{"value":"030D","name":"COMBINING VERTICAL LINE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING VERTICAL LINE ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u030D"},782:{"value":"030E","name":"COMBINING DOUBLE VERTICAL LINE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOUBLE VERTICAL LINE ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u030E"},783:{"value":"030F","name":"COMBINING DOUBLE GRAVE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOUBLE GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u030F"},784:{"value":"0310","name":"COMBINING CANDRABINDU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING CANDRABINDU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0310"},785:{"value":"0311","name":"COMBINING INVERTED BREVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING INVERTED BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0311"},786:{"value":"0312","name":"COMBINING TURNED COMMA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING TURNED COMMA ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0312"},787:{"value":"0313","name":"COMBINING COMMA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING COMMA ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0313"},788:{"value":"0314","name":"COMBINING REVERSED COMMA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING REVERSED COMMA ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0314"},789:{"value":"0315","name":"COMBINING COMMA ABOVE RIGHT","category":"Mn","class":"232","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING COMMA ABOVE RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0315"},790:{"value":"0316","name":"COMBINING GRAVE ACCENT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING GRAVE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0316"},791:{"value":"0317","name":"COMBINING ACUTE ACCENT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING ACUTE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0317"},792:{"value":"0318","name":"COMBINING LEFT TACK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LEFT TACK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0318"},793:{"value":"0319","name":"COMBINING RIGHT TACK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RIGHT TACK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0319"},794:{"value":"031A","name":"COMBINING LEFT ANGLE ABOVE","category":"Mn","class":"232","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LEFT ANGLE ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u031A"},795:{"value":"031B","name":"COMBINING HORN","category":"Mn","class":"216","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING HORN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u031B"},796:{"value":"031C","name":"COMBINING LEFT HALF RING BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LEFT HALF RING BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u031C"},797:{"value":"031D","name":"COMBINING UP TACK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING UP TACK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u031D"},798:{"value":"031E","name":"COMBINING DOWN TACK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOWN TACK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u031E"},799:{"value":"031F","name":"COMBINING PLUS SIGN BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING PLUS SIGN BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u031F"},800:{"value":"0320","name":"COMBINING MINUS SIGN BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING MINUS SIGN BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0320"},801:{"value":"0321","name":"COMBINING PALATALIZED HOOK BELOW","category":"Mn","class":"202","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING PALATALIZED HOOK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0321"},802:{"value":"0322","name":"COMBINING RETROFLEX HOOK BELOW","category":"Mn","class":"202","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RETROFLEX HOOK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0322"},803:{"value":"0323","name":"COMBINING DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOT BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0323"},804:{"value":"0324","name":"COMBINING DIAERESIS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOUBLE DOT BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0324"},805:{"value":"0325","name":"COMBINING RING BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RING BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0325"},806:{"value":"0326","name":"COMBINING COMMA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING COMMA BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0326"},807:{"value":"0327","name":"COMBINING CEDILLA","category":"Mn","class":"202","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0327"},808:{"value":"0328","name":"COMBINING OGONEK","category":"Mn","class":"202","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0328"},809:{"value":"0329","name":"COMBINING VERTICAL LINE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING VERTICAL LINE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0329"},810:{"value":"032A","name":"COMBINING BRIDGE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING BRIDGE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u032A"},811:{"value":"032B","name":"COMBINING INVERTED DOUBLE ARCH BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING INVERTED DOUBLE ARCH BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u032B"},812:{"value":"032C","name":"COMBINING CARON BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING HACEK BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u032C"},813:{"value":"032D","name":"COMBINING CIRCUMFLEX ACCENT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING CIRCUMFLEX BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u032D"},814:{"value":"032E","name":"COMBINING BREVE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING BREVE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u032E"},815:{"value":"032F","name":"COMBINING INVERTED BREVE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING INVERTED BREVE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u032F"},816:{"value":"0330","name":"COMBINING TILDE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING TILDE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0330"},817:{"value":"0331","name":"COMBINING MACRON BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING MACRON BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0331"},818:{"value":"0332","name":"COMBINING LOW LINE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0332"},819:{"value":"0333","name":"COMBINING DOUBLE LOW LINE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOUBLE UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0333"},820:{"value":"0334","name":"COMBINING TILDE OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING TILDE OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0334"},821:{"value":"0335","name":"COMBINING SHORT STROKE OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING SHORT BAR OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0335"},822:{"value":"0336","name":"COMBINING LONG STROKE OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LONG BAR OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0336"},823:{"value":"0337","name":"COMBINING SHORT SOLIDUS OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING SHORT SLASH OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0337"},824:{"value":"0338","name":"COMBINING LONG SOLIDUS OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LONG SLASH OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0338"},825:{"value":"0339","name":"COMBINING RIGHT HALF RING BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RIGHT HALF RING BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0339"},826:{"value":"033A","name":"COMBINING INVERTED BRIDGE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING INVERTED BRIDGE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u033A"},827:{"value":"033B","name":"COMBINING SQUARE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING SQUARE BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u033B"},828:{"value":"033C","name":"COMBINING SEAGULL BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING SEAGULL BELOW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u033C"},829:{"value":"033D","name":"COMBINING X ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING X ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u033D"},830:{"value":"033E","name":"COMBINING VERTICAL TILDE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING VERTICAL TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u033E"},831:{"value":"033F","name":"COMBINING DOUBLE OVERLINE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING DOUBLE OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u033F"},832:{"value":"0340","name":"COMBINING GRAVE TONE MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING GRAVE TONE MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0340"},833:{"value":"0341","name":"COMBINING ACUTE TONE MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING ACUTE TONE MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0341"},834:{"value":"0342","name":"COMBINING GREEK PERISPOMENI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0342"},835:{"value":"0343","name":"COMBINING GREEK KORONIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0343"},836:{"value":"0344","name":"COMBINING GREEK DIALYTIKA TONOS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"0308 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK NON-SPACING DIAERESIS TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0344"},837:{"value":"0345","name":"COMBINING GREEK YPOGEGRAMMENI","category":"Mn","class":"240","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK NON-SPACING IOTA BELOW","comment":"","uppercase_mapping":"0399","lowercase_mapping":"","titlecase_mapping":"0399","symbol":"\u0345"},838:{"value":"0346","name":"COMBINING BRIDGE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0346"},839:{"value":"0347","name":"COMBINING EQUALS SIGN BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0347"},840:{"value":"0348","name":"COMBINING DOUBLE VERTICAL LINE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0348"},841:{"value":"0349","name":"COMBINING LEFT ANGLE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0349"},842:{"value":"034A","name":"COMBINING NOT TILDE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u034A"},843:{"value":"034B","name":"COMBINING HOMOTHETIC ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u034B"},844:{"value":"034C","name":"COMBINING ALMOST EQUAL TO ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u034C"},845:{"value":"034D","name":"COMBINING LEFT RIGHT ARROW BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u034D"},846:{"value":"034E","name":"COMBINING UPWARDS ARROW BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u034E"},847:{"value":"034F","name":"COMBINING GRAPHEME JOINER","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u034F"},848:{"value":"0350","name":"COMBINING RIGHT ARROWHEAD ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0350"},849:{"value":"0351","name":"COMBINING LEFT HALF RING ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0351"},850:{"value":"0352","name":"COMBINING FERMATA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0352"},851:{"value":"0353","name":"COMBINING X BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0353"},852:{"value":"0354","name":"COMBINING LEFT ARROWHEAD BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0354"},853:{"value":"0355","name":"COMBINING RIGHT ARROWHEAD BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0355"},854:{"value":"0356","name":"COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0356"},855:{"value":"0357","name":"COMBINING RIGHT HALF RING ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0357"},856:{"value":"0358","name":"COMBINING DOT ABOVE RIGHT","category":"Mn","class":"232","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0358"},857:{"value":"0359","name":"COMBINING ASTERISK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0359"},858:{"value":"035A","name":"COMBINING DOUBLE RING BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u035A"},859:{"value":"035B","name":"COMBINING ZIGZAG ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u035B"},860:{"value":"035C","name":"COMBINING DOUBLE BREVE BELOW","category":"Mn","class":"233","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u035C"},861:{"value":"035D","name":"COMBINING DOUBLE BREVE","category":"Mn","class":"234","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u035D"},862:{"value":"035E","name":"COMBINING DOUBLE MACRON","category":"Mn","class":"234","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u035E"},863:{"value":"035F","name":"COMBINING DOUBLE MACRON BELOW","category":"Mn","class":"233","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u035F"},864:{"value":"0360","name":"COMBINING DOUBLE TILDE","category":"Mn","class":"234","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0360"},865:{"value":"0361","name":"COMBINING DOUBLE INVERTED BREVE","category":"Mn","class":"234","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0361"},866:{"value":"0362","name":"COMBINING DOUBLE RIGHTWARDS ARROW BELOW","category":"Mn","class":"233","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0362"},867:{"value":"0363","name":"COMBINING LATIN SMALL LETTER A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0363"},868:{"value":"0364","name":"COMBINING LATIN SMALL LETTER E","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0364"},869:{"value":"0365","name":"COMBINING LATIN SMALL LETTER I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0365"},870:{"value":"0366","name":"COMBINING LATIN SMALL LETTER O","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0366"},871:{"value":"0367","name":"COMBINING LATIN SMALL LETTER U","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0367"},872:{"value":"0368","name":"COMBINING LATIN SMALL LETTER C","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0368"},873:{"value":"0369","name":"COMBINING LATIN SMALL LETTER D","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0369"},874:{"value":"036A","name":"COMBINING LATIN SMALL LETTER H","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u036A"},875:{"value":"036B","name":"COMBINING LATIN SMALL LETTER M","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u036B"},876:{"value":"036C","name":"COMBINING LATIN SMALL LETTER R","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u036C"},877:{"value":"036D","name":"COMBINING LATIN SMALL LETTER T","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u036D"},878:{"value":"036E","name":"COMBINING LATIN SMALL LETTER V","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u036E"},879:{"value":"036F","name":"COMBINING LATIN SMALL LETTER X","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u036F"},1155:{"value":"0483","name":"COMBINING CYRILLIC TITLO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC NON-SPACING TITLO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0483"},1156:{"value":"0484","name":"COMBINING CYRILLIC PALATALIZATION","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC NON-SPACING PALATALIZATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0484"},1157:{"value":"0485","name":"COMBINING CYRILLIC DASIA PNEUMATA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC NON-SPACING DASIA PNEUMATA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0485"},1158:{"value":"0486","name":"COMBINING CYRILLIC PSILI PNEUMATA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CYRILLIC NON-SPACING PSILI PNEUMATA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0486"},1159:{"value":"0487","name":"COMBINING CYRILLIC POKRYTIE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0487"},1425:{"value":"0591","name":"HEBREW ACCENT ETNAHTA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0591"},1426:{"value":"0592","name":"HEBREW ACCENT SEGOL","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0592"},1427:{"value":"0593","name":"HEBREW ACCENT SHALSHELET","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0593"},1428:{"value":"0594","name":"HEBREW ACCENT ZAQEF QATAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0594"},1429:{"value":"0595","name":"HEBREW ACCENT ZAQEF GADOL","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0595"},1430:{"value":"0596","name":"HEBREW ACCENT TIPEHA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0596"},1431:{"value":"0597","name":"HEBREW ACCENT REVIA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0597"},1432:{"value":"0598","name":"HEBREW ACCENT ZARQA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0598"},1433:{"value":"0599","name":"HEBREW ACCENT PASHTA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0599"},1434:{"value":"059A","name":"HEBREW ACCENT YETIV","category":"Mn","class":"222","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u059A"},1435:{"value":"059B","name":"HEBREW ACCENT TEVIR","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u059B"},1436:{"value":"059C","name":"HEBREW ACCENT GERESH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u059C"},1437:{"value":"059D","name":"HEBREW ACCENT GERESH MUQDAM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u059D"},1438:{"value":"059E","name":"HEBREW ACCENT GERSHAYIM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u059E"},1439:{"value":"059F","name":"HEBREW ACCENT QARNEY PARA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u059F"},1440:{"value":"05A0","name":"HEBREW ACCENT TELISHA GEDOLA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A0"},1441:{"value":"05A1","name":"HEBREW ACCENT PAZER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A1"},1442:{"value":"05A2","name":"HEBREW ACCENT ATNAH HAFUKH","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A2"},1443:{"value":"05A3","name":"HEBREW ACCENT MUNAH","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A3"},1444:{"value":"05A4","name":"HEBREW ACCENT MAHAPAKH","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A4"},1445:{"value":"05A5","name":"HEBREW ACCENT MERKHA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A5"},1446:{"value":"05A6","name":"HEBREW ACCENT MERKHA KEFULA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A6"},1447:{"value":"05A7","name":"HEBREW ACCENT DARGA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A7"},1448:{"value":"05A8","name":"HEBREW ACCENT QADMA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A8"},1449:{"value":"05A9","name":"HEBREW ACCENT TELISHA QETANA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05A9"},1450:{"value":"05AA","name":"HEBREW ACCENT YERAH BEN YOMO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05AA"},1451:{"value":"05AB","name":"HEBREW ACCENT OLE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05AB"},1452:{"value":"05AC","name":"HEBREW ACCENT ILUY","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05AC"},1453:{"value":"05AD","name":"HEBREW ACCENT DEHI","category":"Mn","class":"222","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05AD"},1454:{"value":"05AE","name":"HEBREW ACCENT ZINOR","category":"Mn","class":"228","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05AE"},1455:{"value":"05AF","name":"HEBREW MARK MASORA CIRCLE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05AF"},1456:{"value":"05B0","name":"HEBREW POINT SHEVA","category":"Mn","class":"10","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B0"},1457:{"value":"05B1","name":"HEBREW POINT HATAF SEGOL","category":"Mn","class":"11","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B1"},1458:{"value":"05B2","name":"HEBREW POINT HATAF PATAH","category":"Mn","class":"12","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B2"},1459:{"value":"05B3","name":"HEBREW POINT HATAF QAMATS","category":"Mn","class":"13","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B3"},1460:{"value":"05B4","name":"HEBREW POINT HIRIQ","category":"Mn","class":"14","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B4"},1461:{"value":"05B5","name":"HEBREW POINT TSERE","category":"Mn","class":"15","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B5"},1462:{"value":"05B6","name":"HEBREW POINT SEGOL","category":"Mn","class":"16","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B6"},1463:{"value":"05B7","name":"HEBREW POINT PATAH","category":"Mn","class":"17","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B7"},1464:{"value":"05B8","name":"HEBREW POINT QAMATS","category":"Mn","class":"18","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B8"},1465:{"value":"05B9","name":"HEBREW POINT HOLAM","category":"Mn","class":"19","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05B9"},1466:{"value":"05BA","name":"HEBREW POINT HOLAM HASER FOR VAV","category":"Mn","class":"19","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05BA"},1467:{"value":"05BB","name":"HEBREW POINT QUBUTS","category":"Mn","class":"20","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05BB"},1468:{"value":"05BC","name":"HEBREW POINT DAGESH OR MAPIQ","category":"Mn","class":"21","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEBREW POINT DAGESH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05BC"},1469:{"value":"05BD","name":"HEBREW POINT METEG","category":"Mn","class":"22","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05BD"},1471:{"value":"05BF","name":"HEBREW POINT RAFE","category":"Mn","class":"23","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05BF"},1473:{"value":"05C1","name":"HEBREW POINT SHIN DOT","category":"Mn","class":"24","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C1"},1474:{"value":"05C2","name":"HEBREW POINT SIN DOT","category":"Mn","class":"25","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C2"},1476:{"value":"05C4","name":"HEBREW MARK UPPER DOT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C4"},1477:{"value":"05C5","name":"HEBREW MARK LOWER DOT","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C5"},1479:{"value":"05C7","name":"HEBREW POINT QAMATS QATAN","category":"Mn","class":"18","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C7"},1552:{"value":"0610","name":"ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0610"},1553:{"value":"0611","name":"ARABIC SIGN ALAYHE ASSALLAM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0611"},1554:{"value":"0612","name":"ARABIC SIGN RAHMATULLAH ALAYHE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0612"},1555:{"value":"0613","name":"ARABIC SIGN RADI ALLAHOU ANHU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0613"},1556:{"value":"0614","name":"ARABIC SIGN TAKHALLUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0614"},1557:{"value":"0615","name":"ARABIC SMALL HIGH TAH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0615"},1558:{"value":"0616","name":"ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0616"},1559:{"value":"0617","name":"ARABIC SMALL HIGH ZAIN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0617"},1560:{"value":"0618","name":"ARABIC SMALL FATHA","category":"Mn","class":"30","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0618"},1561:{"value":"0619","name":"ARABIC SMALL DAMMA","category":"Mn","class":"31","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0619"},1562:{"value":"061A","name":"ARABIC SMALL KASRA","category":"Mn","class":"32","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u061A"},1611:{"value":"064B","name":"ARABIC FATHATAN","category":"Mn","class":"27","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u064B"},1612:{"value":"064C","name":"ARABIC DAMMATAN","category":"Mn","class":"28","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u064C"},1613:{"value":"064D","name":"ARABIC KASRATAN","category":"Mn","class":"29","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u064D"},1614:{"value":"064E","name":"ARABIC FATHA","category":"Mn","class":"30","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC FATHAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u064E"},1615:{"value":"064F","name":"ARABIC DAMMA","category":"Mn","class":"31","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC DAMMAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u064F"},1616:{"value":"0650","name":"ARABIC KASRA","category":"Mn","class":"32","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC KASRAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0650"},1617:{"value":"0651","name":"ARABIC SHADDA","category":"Mn","class":"33","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC SHADDAH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0651"},1618:{"value":"0652","name":"ARABIC SUKUN","category":"Mn","class":"34","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0652"},1619:{"value":"0653","name":"ARABIC MADDAH ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0653"},1620:{"value":"0654","name":"ARABIC HAMZA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0654"},1621:{"value":"0655","name":"ARABIC HAMZA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0655"},1622:{"value":"0656","name":"ARABIC SUBSCRIPT ALEF","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0656"},1623:{"value":"0657","name":"ARABIC INVERTED DAMMA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0657"},1624:{"value":"0658","name":"ARABIC MARK NOON GHUNNA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0658"},1625:{"value":"0659","name":"ARABIC ZWARAKAY","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0659"},1626:{"value":"065A","name":"ARABIC VOWEL SIGN SMALL V ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u065A"},1627:{"value":"065B","name":"ARABIC VOWEL SIGN INVERTED SMALL V ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u065B"},1628:{"value":"065C","name":"ARABIC VOWEL SIGN DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u065C"},1629:{"value":"065D","name":"ARABIC REVERSED DAMMA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u065D"},1630:{"value":"065E","name":"ARABIC FATHA WITH TWO DOTS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u065E"},1631:{"value":"065F","name":"ARABIC WAVY HAMZA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u065F"},1648:{"value":"0670","name":"ARABIC LETTER SUPERSCRIPT ALEF","category":"Mn","class":"35","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC ALEF ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0670"},1750:{"value":"06D6","name":"ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D6"},1751:{"value":"06D7","name":"ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D7"},1752:{"value":"06D8","name":"ARABIC SMALL HIGH MEEM INITIAL FORM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D8"},1753:{"value":"06D9","name":"ARABIC SMALL HIGH LAM ALEF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D9"},1754:{"value":"06DA","name":"ARABIC SMALL HIGH JEEM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06DA"},1755:{"value":"06DB","name":"ARABIC SMALL HIGH THREE DOTS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06DB"},1756:{"value":"06DC","name":"ARABIC SMALL HIGH SEEN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06DC"},1759:{"value":"06DF","name":"ARABIC SMALL HIGH ROUNDED ZERO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06DF"},1760:{"value":"06E0","name":"ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E0"},1761:{"value":"06E1","name":"ARABIC SMALL HIGH DOTLESS HEAD OF KHAH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E1"},1762:{"value":"06E2","name":"ARABIC SMALL HIGH MEEM ISOLATED FORM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E2"},1763:{"value":"06E3","name":"ARABIC SMALL LOW SEEN","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E3"},1764:{"value":"06E4","name":"ARABIC SMALL HIGH MADDA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E4"},1767:{"value":"06E7","name":"ARABIC SMALL HIGH YEH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E7"},1768:{"value":"06E8","name":"ARABIC SMALL HIGH NOON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E8"},1770:{"value":"06EA","name":"ARABIC EMPTY CENTRE LOW STOP","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06EA"},1771:{"value":"06EB","name":"ARABIC EMPTY CENTRE HIGH STOP","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06EB"},1772:{"value":"06EC","name":"ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06EC"},1773:{"value":"06ED","name":"ARABIC SMALL LOW MEEM","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06ED"},1809:{"value":"0711","name":"SYRIAC LETTER SUPERSCRIPT ALAPH","category":"Mn","class":"36","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0711"},1840:{"value":"0730","name":"SYRIAC PTHAHA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0730"},1841:{"value":"0731","name":"SYRIAC PTHAHA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0731"},1842:{"value":"0732","name":"SYRIAC PTHAHA DOTTED","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0732"},1843:{"value":"0733","name":"SYRIAC ZQAPHA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0733"},1844:{"value":"0734","name":"SYRIAC ZQAPHA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0734"},1845:{"value":"0735","name":"SYRIAC ZQAPHA DOTTED","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0735"},1846:{"value":"0736","name":"SYRIAC RBASA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0736"},1847:{"value":"0737","name":"SYRIAC RBASA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0737"},1848:{"value":"0738","name":"SYRIAC DOTTED ZLAMA HORIZONTAL","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0738"},1849:{"value":"0739","name":"SYRIAC DOTTED ZLAMA ANGULAR","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0739"},1850:{"value":"073A","name":"SYRIAC HBASA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u073A"},1851:{"value":"073B","name":"SYRIAC HBASA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u073B"},1852:{"value":"073C","name":"SYRIAC HBASA-ESASA DOTTED","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u073C"},1853:{"value":"073D","name":"SYRIAC ESASA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u073D"},1854:{"value":"073E","name":"SYRIAC ESASA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u073E"},1855:{"value":"073F","name":"SYRIAC RWAHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u073F"},1856:{"value":"0740","name":"SYRIAC FEMININE DOT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0740"},1857:{"value":"0741","name":"SYRIAC QUSHSHAYA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0741"},1858:{"value":"0742","name":"SYRIAC RUKKAKHA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0742"},1859:{"value":"0743","name":"SYRIAC TWO VERTICAL DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0743"},1860:{"value":"0744","name":"SYRIAC TWO VERTICAL DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0744"},1861:{"value":"0745","name":"SYRIAC THREE DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0745"},1862:{"value":"0746","name":"SYRIAC THREE DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0746"},1863:{"value":"0747","name":"SYRIAC OBLIQUE LINE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0747"},1864:{"value":"0748","name":"SYRIAC OBLIQUE LINE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0748"},1865:{"value":"0749","name":"SYRIAC MUSIC","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0749"},1866:{"value":"074A","name":"SYRIAC BARREKH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u074A"},1958:{"value":"07A6","name":"THAANA ABAFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A6"},1959:{"value":"07A7","name":"THAANA AABAAFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A7"},1960:{"value":"07A8","name":"THAANA IBIFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A8"},1961:{"value":"07A9","name":"THAANA EEBEEFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07A9"},1962:{"value":"07AA","name":"THAANA UBUFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07AA"},1963:{"value":"07AB","name":"THAANA OOBOOFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07AB"},1964:{"value":"07AC","name":"THAANA EBEFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07AC"},1965:{"value":"07AD","name":"THAANA EYBEYFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07AD"},1966:{"value":"07AE","name":"THAANA OBOFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07AE"},1967:{"value":"07AF","name":"THAANA OABOAFILI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07AF"},1968:{"value":"07B0","name":"THAANA SUKUN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07B0"},2027:{"value":"07EB","name":"NKO COMBINING SHORT HIGH TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07EB"},2028:{"value":"07EC","name":"NKO COMBINING SHORT LOW TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07EC"},2029:{"value":"07ED","name":"NKO COMBINING SHORT RISING TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07ED"},2030:{"value":"07EE","name":"NKO COMBINING LONG DESCENDING TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07EE"},2031:{"value":"07EF","name":"NKO COMBINING LONG HIGH TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07EF"},2032:{"value":"07F0","name":"NKO COMBINING LONG LOW TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F0"},2033:{"value":"07F1","name":"NKO COMBINING LONG RISING TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F1"},2034:{"value":"07F2","name":"NKO COMBINING NASALIZATION MARK","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F2"},2035:{"value":"07F3","name":"NKO COMBINING DOUBLE DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F3"},2045:{"value":"07FD","name":"NKO DANTAYALAN","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07FD"},2070:{"value":"0816","name":"SAMARITAN MARK IN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0816"},2071:{"value":"0817","name":"SAMARITAN MARK IN-ALAF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0817"},2072:{"value":"0818","name":"SAMARITAN MARK OCCLUSION","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0818"},2073:{"value":"0819","name":"SAMARITAN MARK DAGESH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0819"},2075:{"value":"081B","name":"SAMARITAN MARK EPENTHETIC YUT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u081B"},2076:{"value":"081C","name":"SAMARITAN VOWEL SIGN LONG E","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u081C"},2077:{"value":"081D","name":"SAMARITAN VOWEL SIGN E","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u081D"},2078:{"value":"081E","name":"SAMARITAN VOWEL SIGN OVERLONG AA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u081E"},2079:{"value":"081F","name":"SAMARITAN VOWEL SIGN LONG AA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u081F"},2080:{"value":"0820","name":"SAMARITAN VOWEL SIGN AA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0820"},2081:{"value":"0821","name":"SAMARITAN VOWEL SIGN OVERLONG A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0821"},2082:{"value":"0822","name":"SAMARITAN VOWEL SIGN LONG A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0822"},2083:{"value":"0823","name":"SAMARITAN VOWEL SIGN A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0823"},2085:{"value":"0825","name":"SAMARITAN VOWEL SIGN SHORT A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0825"},2086:{"value":"0826","name":"SAMARITAN VOWEL SIGN LONG U","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0826"},2087:{"value":"0827","name":"SAMARITAN VOWEL SIGN U","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0827"},2089:{"value":"0829","name":"SAMARITAN VOWEL SIGN LONG I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0829"},2090:{"value":"082A","name":"SAMARITAN VOWEL SIGN I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u082A"},2091:{"value":"082B","name":"SAMARITAN VOWEL SIGN O","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u082B"},2092:{"value":"082C","name":"SAMARITAN VOWEL SIGN SUKUN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u082C"},2093:{"value":"082D","name":"SAMARITAN MARK NEQUDAA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u082D"},2137:{"value":"0859","name":"MANDAIC AFFRICATION MARK","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0859"},2138:{"value":"085A","name":"MANDAIC VOCALIZATION MARK","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u085A"},2139:{"value":"085B","name":"MANDAIC GEMINATION MARK","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u085B"},2200:{"value":"0898","name":"ARABIC SMALL HIGH WORD AL-JUZ","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0898"},2201:{"value":"0899","name":"ARABIC SMALL LOW WORD ISHMAAM","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0899"},2202:{"value":"089A","name":"ARABIC SMALL LOW WORD IMAALA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u089A"},2203:{"value":"089B","name":"ARABIC SMALL LOW WORD TASHEEL","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u089B"},2204:{"value":"089C","name":"ARABIC MADDA WAAJIB","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u089C"},2205:{"value":"089D","name":"ARABIC SUPERSCRIPT ALEF MOKHASSAS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u089D"},2206:{"value":"089E","name":"ARABIC DOUBLED MADDA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u089E"},2207:{"value":"089F","name":"ARABIC HALF MADDA OVER MADDA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u089F"},2250:{"value":"08CA","name":"ARABIC SMALL HIGH FARSI YEH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08CA"},2251:{"value":"08CB","name":"ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08CB"},2252:{"value":"08CC","name":"ARABIC SMALL HIGH WORD SAH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08CC"},2253:{"value":"08CD","name":"ARABIC SMALL HIGH ZAH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08CD"},2254:{"value":"08CE","name":"ARABIC LARGE ROUND DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08CE"},2255:{"value":"08CF","name":"ARABIC LARGE ROUND DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08CF"},2256:{"value":"08D0","name":"ARABIC SUKUN BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D0"},2257:{"value":"08D1","name":"ARABIC LARGE CIRCLE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D1"},2258:{"value":"08D2","name":"ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D2"},2259:{"value":"08D3","name":"ARABIC SMALL LOW WAW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D3"},2260:{"value":"08D4","name":"ARABIC SMALL HIGH WORD AR-RUB","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D4"},2261:{"value":"08D5","name":"ARABIC SMALL HIGH SAD","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D5"},2262:{"value":"08D6","name":"ARABIC SMALL HIGH AIN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D6"},2263:{"value":"08D7","name":"ARABIC SMALL HIGH QAF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D7"},2264:{"value":"08D8","name":"ARABIC SMALL HIGH NOON WITH KASRA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D8"},2265:{"value":"08D9","name":"ARABIC SMALL LOW NOON WITH KASRA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08D9"},2266:{"value":"08DA","name":"ARABIC SMALL HIGH WORD ATH-THALATHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08DA"},2267:{"value":"08DB","name":"ARABIC SMALL HIGH WORD AS-SAJDA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08DB"},2268:{"value":"08DC","name":"ARABIC SMALL HIGH WORD AN-NISF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08DC"},2269:{"value":"08DD","name":"ARABIC SMALL HIGH WORD SAKTA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08DD"},2270:{"value":"08DE","name":"ARABIC SMALL HIGH WORD QIF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08DE"},2271:{"value":"08DF","name":"ARABIC SMALL HIGH WORD WAQFA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08DF"},2272:{"value":"08E0","name":"ARABIC SMALL HIGH FOOTNOTE MARKER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E0"},2273:{"value":"08E1","name":"ARABIC SMALL HIGH SIGN SAFHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E1"},2275:{"value":"08E3","name":"ARABIC TURNED DAMMA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E3"},2276:{"value":"08E4","name":"ARABIC CURLY FATHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E4"},2277:{"value":"08E5","name":"ARABIC CURLY DAMMA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E5"},2278:{"value":"08E6","name":"ARABIC CURLY KASRA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E6"},2279:{"value":"08E7","name":"ARABIC CURLY FATHATAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E7"},2280:{"value":"08E8","name":"ARABIC CURLY DAMMATAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E8"},2281:{"value":"08E9","name":"ARABIC CURLY KASRATAN","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08E9"},2282:{"value":"08EA","name":"ARABIC TONE ONE DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08EA"},2283:{"value":"08EB","name":"ARABIC TONE TWO DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08EB"},2284:{"value":"08EC","name":"ARABIC TONE LOOP ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08EC"},2285:{"value":"08ED","name":"ARABIC TONE ONE DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08ED"},2286:{"value":"08EE","name":"ARABIC TONE TWO DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08EE"},2287:{"value":"08EF","name":"ARABIC TONE LOOP BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08EF"},2288:{"value":"08F0","name":"ARABIC OPEN FATHATAN","category":"Mn","class":"27","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F0"},2289:{"value":"08F1","name":"ARABIC OPEN DAMMATAN","category":"Mn","class":"28","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F1"},2290:{"value":"08F2","name":"ARABIC OPEN KASRATAN","category":"Mn","class":"29","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F2"},2291:{"value":"08F3","name":"ARABIC SMALL HIGH WAW","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F3"},2292:{"value":"08F4","name":"ARABIC FATHA WITH RING","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F4"},2293:{"value":"08F5","name":"ARABIC FATHA WITH DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F5"},2294:{"value":"08F6","name":"ARABIC KASRA WITH DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F6"},2295:{"value":"08F7","name":"ARABIC LEFT ARROWHEAD ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F7"},2296:{"value":"08F8","name":"ARABIC RIGHT ARROWHEAD ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F8"},2297:{"value":"08F9","name":"ARABIC LEFT ARROWHEAD BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08F9"},2298:{"value":"08FA","name":"ARABIC RIGHT ARROWHEAD BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08FA"},2299:{"value":"08FB","name":"ARABIC DOUBLE RIGHT ARROWHEAD ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08FB"},2300:{"value":"08FC","name":"ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08FC"},2301:{"value":"08FD","name":"ARABIC RIGHT ARROWHEAD ABOVE WITH DOT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08FD"},2302:{"value":"08FE","name":"ARABIC DAMMA WITH DOT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08FE"},2303:{"value":"08FF","name":"ARABIC MARK SIDEWAYS NOON GHUNNA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u08FF"},2304:{"value":"0900","name":"DEVANAGARI SIGN INVERTED CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0900"},2305:{"value":"0901","name":"DEVANAGARI SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0901"},2306:{"value":"0902","name":"DEVANAGARI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0902"},2362:{"value":"093A","name":"DEVANAGARI VOWEL SIGN OE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u093A"},2364:{"value":"093C","name":"DEVANAGARI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u093C"},2369:{"value":"0941","name":"DEVANAGARI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0941"},2370:{"value":"0942","name":"DEVANAGARI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0942"},2371:{"value":"0943","name":"DEVANAGARI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0943"},2372:{"value":"0944","name":"DEVANAGARI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0944"},2373:{"value":"0945","name":"DEVANAGARI VOWEL SIGN CANDRA E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0945"},2374:{"value":"0946","name":"DEVANAGARI VOWEL SIGN SHORT E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0946"},2375:{"value":"0947","name":"DEVANAGARI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0947"},2376:{"value":"0948","name":"DEVANAGARI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0948"},2381:{"value":"094D","name":"DEVANAGARI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u094D"},2385:{"value":"0951","name":"DEVANAGARI STRESS SIGN UDATTA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0951"},2386:{"value":"0952","name":"DEVANAGARI STRESS SIGN ANUDATTA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0952"},2387:{"value":"0953","name":"DEVANAGARI GRAVE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0953"},2388:{"value":"0954","name":"DEVANAGARI ACUTE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0954"},2389:{"value":"0955","name":"DEVANAGARI VOWEL SIGN CANDRA LONG E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0955"},2390:{"value":"0956","name":"DEVANAGARI VOWEL SIGN UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0956"},2391:{"value":"0957","name":"DEVANAGARI VOWEL SIGN UUE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0957"},2402:{"value":"0962","name":"DEVANAGARI VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0962"},2403:{"value":"0963","name":"DEVANAGARI VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0963"},2433:{"value":"0981","name":"BENGALI SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0981"},2492:{"value":"09BC","name":"BENGALI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09BC"},2497:{"value":"09C1","name":"BENGALI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C1"},2498:{"value":"09C2","name":"BENGALI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C2"},2499:{"value":"09C3","name":"BENGALI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C3"},2500:{"value":"09C4","name":"BENGALI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09C4"},2509:{"value":"09CD","name":"BENGALI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09CD"},2530:{"value":"09E2","name":"BENGALI VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E2"},2531:{"value":"09E3","name":"BENGALI VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E3"},2558:{"value":"09FE","name":"BENGALI SANDHI MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09FE"},2561:{"value":"0A01","name":"GURMUKHI SIGN ADAK BINDI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A01"},2562:{"value":"0A02","name":"GURMUKHI SIGN BINDI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A02"},2620:{"value":"0A3C","name":"GURMUKHI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A3C"},2625:{"value":"0A41","name":"GURMUKHI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A41"},2626:{"value":"0A42","name":"GURMUKHI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A42"},2631:{"value":"0A47","name":"GURMUKHI VOWEL SIGN EE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A47"},2632:{"value":"0A48","name":"GURMUKHI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A48"},2635:{"value":"0A4B","name":"GURMUKHI VOWEL SIGN OO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A4B"},2636:{"value":"0A4C","name":"GURMUKHI VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A4C"},2637:{"value":"0A4D","name":"GURMUKHI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A4D"},2641:{"value":"0A51","name":"GURMUKHI SIGN UDAAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A51"},2672:{"value":"0A70","name":"GURMUKHI TIPPI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A70"},2673:{"value":"0A71","name":"GURMUKHI ADDAK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A71"},2677:{"value":"0A75","name":"GURMUKHI SIGN YAKASH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A75"},2689:{"value":"0A81","name":"GUJARATI SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A81"},2690:{"value":"0A82","name":"GUJARATI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A82"},2748:{"value":"0ABC","name":"GUJARATI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ABC"},2753:{"value":"0AC1","name":"GUJARATI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC1"},2754:{"value":"0AC2","name":"GUJARATI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC2"},2755:{"value":"0AC3","name":"GUJARATI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC3"},2756:{"value":"0AC4","name":"GUJARATI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC4"},2757:{"value":"0AC5","name":"GUJARATI VOWEL SIGN CANDRA E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC5"},2759:{"value":"0AC7","name":"GUJARATI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC7"},2760:{"value":"0AC8","name":"GUJARATI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AC8"},2765:{"value":"0ACD","name":"GUJARATI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ACD"},2786:{"value":"0AE2","name":"GUJARATI VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE2"},2787:{"value":"0AE3","name":"GUJARATI VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE3"},2810:{"value":"0AFA","name":"GUJARATI SIGN SUKUN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AFA"},2811:{"value":"0AFB","name":"GUJARATI SIGN SHADDA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AFB"},2812:{"value":"0AFC","name":"GUJARATI SIGN MADDAH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AFC"},2813:{"value":"0AFD","name":"GUJARATI SIGN THREE-DOT NUKTA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AFD"},2814:{"value":"0AFE","name":"GUJARATI SIGN CIRCLE NUKTA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AFE"},2815:{"value":"0AFF","name":"GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AFF"},2817:{"value":"0B01","name":"ORIYA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B01"},2876:{"value":"0B3C","name":"ORIYA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B3C"},2879:{"value":"0B3F","name":"ORIYA VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B3F"},2881:{"value":"0B41","name":"ORIYA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B41"},2882:{"value":"0B42","name":"ORIYA VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B42"},2883:{"value":"0B43","name":"ORIYA VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B43"},2884:{"value":"0B44","name":"ORIYA VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B44"},2893:{"value":"0B4D","name":"ORIYA SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B4D"},2901:{"value":"0B55","name":"ORIYA SIGN OVERLINE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B55"},2902:{"value":"0B56","name":"ORIYA AI LENGTH MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B56"},2914:{"value":"0B62","name":"ORIYA VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B62"},2915:{"value":"0B63","name":"ORIYA VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B63"},2946:{"value":"0B82","name":"TAMIL SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B82"},3008:{"value":"0BC0","name":"TAMIL VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BC0"},3021:{"value":"0BCD","name":"TAMIL SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BCD"},3072:{"value":"0C00","name":"TELUGU SIGN COMBINING CANDRABINDU ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C00"},3076:{"value":"0C04","name":"TELUGU SIGN COMBINING ANUSVARA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C04"},3132:{"value":"0C3C","name":"TELUGU SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C3C"},3134:{"value":"0C3E","name":"TELUGU VOWEL SIGN AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C3E"},3135:{"value":"0C3F","name":"TELUGU VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C3F"},3136:{"value":"0C40","name":"TELUGU VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C40"},3142:{"value":"0C46","name":"TELUGU VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C46"},3143:{"value":"0C47","name":"TELUGU VOWEL SIGN EE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C47"},3144:{"value":"0C48","name":"TELUGU VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0C46 0C56","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C48"},3146:{"value":"0C4A","name":"TELUGU VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C4A"},3147:{"value":"0C4B","name":"TELUGU VOWEL SIGN OO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C4B"},3148:{"value":"0C4C","name":"TELUGU VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C4C"},3149:{"value":"0C4D","name":"TELUGU SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C4D"},3157:{"value":"0C55","name":"TELUGU LENGTH MARK","category":"Mn","class":"84","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C55"},3158:{"value":"0C56","name":"TELUGU AI LENGTH MARK","category":"Mn","class":"91","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C56"},3170:{"value":"0C62","name":"TELUGU VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C62"},3171:{"value":"0C63","name":"TELUGU VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C63"},3201:{"value":"0C81","name":"KANNADA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C81"},3260:{"value":"0CBC","name":"KANNADA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CBC"},3263:{"value":"0CBF","name":"KANNADA VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CBF"},3270:{"value":"0CC6","name":"KANNADA VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CC6"},3276:{"value":"0CCC","name":"KANNADA VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CCC"},3277:{"value":"0CCD","name":"KANNADA SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CCD"},3298:{"value":"0CE2","name":"KANNADA VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE2"},3299:{"value":"0CE3","name":"KANNADA VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE3"},3328:{"value":"0D00","name":"MALAYALAM SIGN COMBINING ANUSVARA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D00"},3329:{"value":"0D01","name":"MALAYALAM SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D01"},3387:{"value":"0D3B","name":"MALAYALAM SIGN VERTICAL BAR VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D3B"},3388:{"value":"0D3C","name":"MALAYALAM SIGN CIRCULAR VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D3C"},3393:{"value":"0D41","name":"MALAYALAM VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D41"},3394:{"value":"0D42","name":"MALAYALAM VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D42"},3395:{"value":"0D43","name":"MALAYALAM VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D43"},3396:{"value":"0D44","name":"MALAYALAM VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D44"},3405:{"value":"0D4D","name":"MALAYALAM SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D4D"},3426:{"value":"0D62","name":"MALAYALAM VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D62"},3427:{"value":"0D63","name":"MALAYALAM VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D63"},3457:{"value":"0D81","name":"SINHALA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D81"},3530:{"value":"0DCA","name":"SINHALA SIGN AL-LAKUNA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DCA"},3538:{"value":"0DD2","name":"SINHALA VOWEL SIGN KETTI IS-PILLA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD2"},3539:{"value":"0DD3","name":"SINHALA VOWEL SIGN DIGA IS-PILLA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD3"},3540:{"value":"0DD4","name":"SINHALA VOWEL SIGN KETTI PAA-PILLA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD4"},3542:{"value":"0DD6","name":"SINHALA VOWEL SIGN DIGA PAA-PILLA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DD6"},3633:{"value":"0E31","name":"THAI CHARACTER MAI HAN-AKAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN MAI HAN-AKAT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E31"},3636:{"value":"0E34","name":"THAI CHARACTER SARA I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA I","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E34"},3637:{"value":"0E35","name":"THAI CHARACTER SARA II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA II","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E35"},3638:{"value":"0E36","name":"THAI CHARACTER SARA UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA UE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E36"},3639:{"value":"0E37","name":"THAI CHARACTER SARA UEE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA UEE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E37"},3640:{"value":"0E38","name":"THAI CHARACTER SARA U","category":"Mn","class":"103","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA U","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E38"},3641:{"value":"0E39","name":"THAI CHARACTER SARA UU","category":"Mn","class":"103","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN SARA UU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E39"},3642:{"value":"0E3A","name":"THAI CHARACTER PHINTHU","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN PHINTHU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E3A"},3655:{"value":"0E47","name":"THAI CHARACTER MAITAIKHU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI VOWEL SIGN MAI TAI KHU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E47"},3656:{"value":"0E48","name":"THAI CHARACTER MAI EK","category":"Mn","class":"107","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI TONE MAI EK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E48"},3657:{"value":"0E49","name":"THAI CHARACTER MAI THO","category":"Mn","class":"107","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI TONE MAI THO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E49"},3658:{"value":"0E4A","name":"THAI CHARACTER MAI TRI","category":"Mn","class":"107","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI TONE MAI TRI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E4A"},3659:{"value":"0E4B","name":"THAI CHARACTER MAI CHATTAWA","category":"Mn","class":"107","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI TONE MAI CHATTAWA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E4B"},3660:{"value":"0E4C","name":"THAI CHARACTER THANTHAKHAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI THANTHAKHAT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E4C"},3661:{"value":"0E4D","name":"THAI CHARACTER NIKHAHIT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI NIKKHAHIT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E4D"},3662:{"value":"0E4E","name":"THAI CHARACTER YAMAKKAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI YAMAKKAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E4E"},3761:{"value":"0EB1","name":"LAO VOWEL SIGN MAI KAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB1"},3764:{"value":"0EB4","name":"LAO VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB4"},3765:{"value":"0EB5","name":"LAO VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB5"},3766:{"value":"0EB6","name":"LAO VOWEL SIGN Y","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB6"},3767:{"value":"0EB7","name":"LAO VOWEL SIGN YY","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB7"},3768:{"value":"0EB8","name":"LAO VOWEL SIGN U","category":"Mn","class":"118","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB8"},3769:{"value":"0EB9","name":"LAO VOWEL SIGN UU","category":"Mn","class":"118","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EB9"},3770:{"value":"0EBA","name":"LAO SIGN PALI VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EBA"},3771:{"value":"0EBB","name":"LAO VOWEL SIGN MAI KON","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EBB"},3772:{"value":"0EBC","name":"LAO SEMIVOWEL SIGN LO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EBC"},3784:{"value":"0EC8","name":"LAO TONE MAI EK","category":"Mn","class":"122","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC8"},3785:{"value":"0EC9","name":"LAO TONE MAI THO","category":"Mn","class":"122","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0EC9"},3786:{"value":"0ECA","name":"LAO TONE MAI TI","category":"Mn","class":"122","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ECA"},3787:{"value":"0ECB","name":"LAO TONE MAI CATAWA","category":"Mn","class":"122","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ECB"},3788:{"value":"0ECC","name":"LAO CANCELLATION MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ECC"},3789:{"value":"0ECD","name":"LAO NIGGAHITA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ECD"},3864:{"value":"0F18","name":"TIBETAN ASTROLOGICAL SIGN -KHYUD PA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F18"},3865:{"value":"0F19","name":"TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F19"},3893:{"value":"0F35","name":"TIBETAN MARK NGAS BZUNG NYI ZLA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN HONORIFIC UNDER RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F35"},3895:{"value":"0F37","name":"TIBETAN MARK NGAS BZUNG SGOR RTAGS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN UNDER RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F37"},3897:{"value":"0F39","name":"TIBETAN MARK TSA -PHRU","category":"Mn","class":"216","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN LENITION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F39"},3953:{"value":"0F71","name":"TIBETAN VOWEL SIGN AA","category":"Mn","class":"129","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F71"},3954:{"value":"0F72","name":"TIBETAN VOWEL SIGN I","category":"Mn","class":"130","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F72"},3955:{"value":"0F73","name":"TIBETAN VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0F71 0F72","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F73"},3956:{"value":"0F74","name":"TIBETAN VOWEL SIGN U","category":"Mn","class":"132","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F74"},3957:{"value":"0F75","name":"TIBETAN VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0F71 0F74","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F75"},3958:{"value":"0F76","name":"TIBETAN VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0FB2 0F80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F76"},3959:{"value":"0F77","name":"TIBETAN VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":" 0FB2 0F81","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F77"},3960:{"value":"0F78","name":"TIBETAN VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0FB3 0F80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F78"},3961:{"value":"0F79","name":"TIBETAN VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":" 0FB3 0F81","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F79"},3962:{"value":"0F7A","name":"TIBETAN VOWEL SIGN E","category":"Mn","class":"130","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F7A"},3963:{"value":"0F7B","name":"TIBETAN VOWEL SIGN EE","category":"Mn","class":"130","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN VOWEL SIGN AI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F7B"},3964:{"value":"0F7C","name":"TIBETAN VOWEL SIGN O","category":"Mn","class":"130","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F7C"},3965:{"value":"0F7D","name":"TIBETAN VOWEL SIGN OO","category":"Mn","class":"130","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN VOWEL SIGN AU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F7D"},3966:{"value":"0F7E","name":"TIBETAN SIGN RJES SU NGA RO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN ANUSVARA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F7E"},3968:{"value":"0F80","name":"TIBETAN VOWEL SIGN REVERSED I","category":"Mn","class":"130","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN VOWEL SIGN SHORT I","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F80"},3969:{"value":"0F81","name":"TIBETAN VOWEL SIGN REVERSED II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0F71 0F80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F81"},3970:{"value":"0F82","name":"TIBETAN SIGN NYI ZLA NAA DA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN CANDRABINDU WITH ORNAMENT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F82"},3971:{"value":"0F83","name":"TIBETAN SIGN SNA LDAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN CANDRABINDU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F83"},3972:{"value":"0F84","name":"TIBETAN MARK HALANTA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN VIRAMA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F84"},3974:{"value":"0F86","name":"TIBETAN SIGN LCI RTAGS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F86"},3975:{"value":"0F87","name":"TIBETAN SIGN YANG RTAGS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F87"},3981:{"value":"0F8D","name":"TIBETAN SUBJOINED SIGN LCE TSA CAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F8D"},3982:{"value":"0F8E","name":"TIBETAN SUBJOINED SIGN MCHU CAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F8E"},3983:{"value":"0F8F","name":"TIBETAN SUBJOINED SIGN INVERTED MCHU CAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F8F"},3984:{"value":"0F90","name":"TIBETAN SUBJOINED LETTER KA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F90"},3985:{"value":"0F91","name":"TIBETAN SUBJOINED LETTER KHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F91"},3986:{"value":"0F92","name":"TIBETAN SUBJOINED LETTER GA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F92"},3987:{"value":"0F93","name":"TIBETAN SUBJOINED LETTER GHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0F92 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F93"},3988:{"value":"0F94","name":"TIBETAN SUBJOINED LETTER NGA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F94"},3989:{"value":"0F95","name":"TIBETAN SUBJOINED LETTER CA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F95"},3990:{"value":"0F96","name":"TIBETAN SUBJOINED LETTER CHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F96"},3991:{"value":"0F97","name":"TIBETAN SUBJOINED LETTER JA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F97"},3993:{"value":"0F99","name":"TIBETAN SUBJOINED LETTER NYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F99"},3994:{"value":"0F9A","name":"TIBETAN SUBJOINED LETTER TTA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F9A"},3995:{"value":"0F9B","name":"TIBETAN SUBJOINED LETTER TTHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F9B"},3996:{"value":"0F9C","name":"TIBETAN SUBJOINED LETTER DDA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F9C"},3997:{"value":"0F9D","name":"TIBETAN SUBJOINED LETTER DDHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0F9C 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F9D"},3998:{"value":"0F9E","name":"TIBETAN SUBJOINED LETTER NNA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F9E"},3999:{"value":"0F9F","name":"TIBETAN SUBJOINED LETTER TA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F9F"},4000:{"value":"0FA0","name":"TIBETAN SUBJOINED LETTER THA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA0"},4001:{"value":"0FA1","name":"TIBETAN SUBJOINED LETTER DA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA1"},4002:{"value":"0FA2","name":"TIBETAN SUBJOINED LETTER DHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0FA1 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA2"},4003:{"value":"0FA3","name":"TIBETAN SUBJOINED LETTER NA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA3"},4004:{"value":"0FA4","name":"TIBETAN SUBJOINED LETTER PA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA4"},4005:{"value":"0FA5","name":"TIBETAN SUBJOINED LETTER PHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA5"},4006:{"value":"0FA6","name":"TIBETAN SUBJOINED LETTER BA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA6"},4007:{"value":"0FA7","name":"TIBETAN SUBJOINED LETTER BHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0FA6 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA7"},4008:{"value":"0FA8","name":"TIBETAN SUBJOINED LETTER MA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA8"},4009:{"value":"0FA9","name":"TIBETAN SUBJOINED LETTER TSA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FA9"},4010:{"value":"0FAA","name":"TIBETAN SUBJOINED LETTER TSHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FAA"},4011:{"value":"0FAB","name":"TIBETAN SUBJOINED LETTER DZA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FAB"},4012:{"value":"0FAC","name":"TIBETAN SUBJOINED LETTER DZHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0FAB 0FB7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FAC"},4013:{"value":"0FAD","name":"TIBETAN SUBJOINED LETTER WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FAD"},4014:{"value":"0FAE","name":"TIBETAN SUBJOINED LETTER ZHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FAE"},4015:{"value":"0FAF","name":"TIBETAN SUBJOINED LETTER ZA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FAF"},4016:{"value":"0FB0","name":"TIBETAN SUBJOINED LETTER -A","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB0"},4017:{"value":"0FB1","name":"TIBETAN SUBJOINED LETTER YA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB1"},4018:{"value":"0FB2","name":"TIBETAN SUBJOINED LETTER RA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB2"},4019:{"value":"0FB3","name":"TIBETAN SUBJOINED LETTER LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB3"},4020:{"value":"0FB4","name":"TIBETAN SUBJOINED LETTER SHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB4"},4021:{"value":"0FB5","name":"TIBETAN SUBJOINED LETTER SSA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB5"},4022:{"value":"0FB6","name":"TIBETAN SUBJOINED LETTER SA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB6"},4023:{"value":"0FB7","name":"TIBETAN SUBJOINED LETTER HA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB7"},4024:{"value":"0FB8","name":"TIBETAN SUBJOINED LETTER A","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB8"},4025:{"value":"0FB9","name":"TIBETAN SUBJOINED LETTER KSSA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"0F90 0FB5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FB9"},4026:{"value":"0FBA","name":"TIBETAN SUBJOINED LETTER FIXED-FORM WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FBA"},4027:{"value":"0FBB","name":"TIBETAN SUBJOINED LETTER FIXED-FORM YA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FBB"},4028:{"value":"0FBC","name":"TIBETAN SUBJOINED LETTER FIXED-FORM RA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FBC"},4038:{"value":"0FC6","name":"TIBETAN SYMBOL PADMA GDAN","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC6"},4141:{"value":"102D","name":"MYANMAR VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u102D"},4142:{"value":"102E","name":"MYANMAR VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u102E"},4143:{"value":"102F","name":"MYANMAR VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u102F"},4144:{"value":"1030","name":"MYANMAR VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1030"},4146:{"value":"1032","name":"MYANMAR VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1032"},4147:{"value":"1033","name":"MYANMAR VOWEL SIGN MON II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1033"},4148:{"value":"1034","name":"MYANMAR VOWEL SIGN MON O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1034"},4149:{"value":"1035","name":"MYANMAR VOWEL SIGN E ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1035"},4150:{"value":"1036","name":"MYANMAR SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1036"},4151:{"value":"1037","name":"MYANMAR SIGN DOT BELOW","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1037"},4153:{"value":"1039","name":"MYANMAR SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1039"},4154:{"value":"103A","name":"MYANMAR SIGN ASAT","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u103A"},4157:{"value":"103D","name":"MYANMAR CONSONANT SIGN MEDIAL WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u103D"},4158:{"value":"103E","name":"MYANMAR CONSONANT SIGN MEDIAL HA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u103E"},4184:{"value":"1058","name":"MYANMAR VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1058"},4185:{"value":"1059","name":"MYANMAR VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1059"},4190:{"value":"105E","name":"MYANMAR CONSONANT SIGN MON MEDIAL NA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u105E"},4191:{"value":"105F","name":"MYANMAR CONSONANT SIGN MON MEDIAL MA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u105F"},4192:{"value":"1060","name":"MYANMAR CONSONANT SIGN MON MEDIAL LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1060"},4209:{"value":"1071","name":"MYANMAR VOWEL SIGN GEBA KAREN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1071"},4210:{"value":"1072","name":"MYANMAR VOWEL SIGN KAYAH OE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1072"},4211:{"value":"1073","name":"MYANMAR VOWEL SIGN KAYAH U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1073"},4212:{"value":"1074","name":"MYANMAR VOWEL SIGN KAYAH EE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1074"},4226:{"value":"1082","name":"MYANMAR CONSONANT SIGN SHAN MEDIAL WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1082"},4229:{"value":"1085","name":"MYANMAR VOWEL SIGN SHAN E ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1085"},4230:{"value":"1086","name":"MYANMAR VOWEL SIGN SHAN FINAL Y","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1086"},4237:{"value":"108D","name":"MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u108D"},4253:{"value":"109D","name":"MYANMAR VOWEL SIGN AITON AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u109D"},4957:{"value":"135D","name":"ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u135D"},4958:{"value":"135E","name":"ETHIOPIC COMBINING VOWEL LENGTH MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u135E"},4959:{"value":"135F","name":"ETHIOPIC COMBINING GEMINATION MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u135F"},5906:{"value":"1712","name":"TAGALOG VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1712"},5907:{"value":"1713","name":"TAGALOG VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1713"},5908:{"value":"1714","name":"TAGALOG SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1714"},5938:{"value":"1732","name":"HANUNOO VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1732"},5939:{"value":"1733","name":"HANUNOO VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1733"},5970:{"value":"1752","name":"BUHID VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1752"},5971:{"value":"1753","name":"BUHID VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1753"},6002:{"value":"1772","name":"TAGBANWA VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1772"},6003:{"value":"1773","name":"TAGBANWA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1773"},6068:{"value":"17B4","name":"KHMER VOWEL INHERENT AQ","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B4"},6069:{"value":"17B5","name":"KHMER VOWEL INHERENT AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B5"},6071:{"value":"17B7","name":"KHMER VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B7"},6072:{"value":"17B8","name":"KHMER VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B8"},6073:{"value":"17B9","name":"KHMER VOWEL SIGN Y","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17B9"},6074:{"value":"17BA","name":"KHMER VOWEL SIGN YY","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17BA"},6075:{"value":"17BB","name":"KHMER VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17BB"},6076:{"value":"17BC","name":"KHMER VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17BC"},6077:{"value":"17BD","name":"KHMER VOWEL SIGN UA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17BD"},6086:{"value":"17C6","name":"KHMER SIGN NIKAHIT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C6"},6089:{"value":"17C9","name":"KHMER SIGN MUUSIKATOAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17C9"},6090:{"value":"17CA","name":"KHMER SIGN TRIISAP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17CA"},6091:{"value":"17CB","name":"KHMER SIGN BANTOC","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17CB"},6092:{"value":"17CC","name":"KHMER SIGN ROBAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17CC"},6093:{"value":"17CD","name":"KHMER SIGN TOANDAKHIAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17CD"},6094:{"value":"17CE","name":"KHMER SIGN KAKABAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17CE"},6095:{"value":"17CF","name":"KHMER SIGN AHSDA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17CF"},6096:{"value":"17D0","name":"KHMER SIGN SAMYOK SANNYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D0"},6097:{"value":"17D1","name":"KHMER SIGN VIRIAM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D1"},6098:{"value":"17D2","name":"KHMER SIGN COENG","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D2"},6099:{"value":"17D3","name":"KHMER SIGN BATHAMASAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D3"},6109:{"value":"17DD","name":"KHMER SIGN ATTHACAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17DD"},6155:{"value":"180B","name":"MONGOLIAN FREE VARIATION SELECTOR ONE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u180B"},6156:{"value":"180C","name":"MONGOLIAN FREE VARIATION SELECTOR TWO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u180C"},6157:{"value":"180D","name":"MONGOLIAN FREE VARIATION SELECTOR THREE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u180D"},6159:{"value":"180F","name":"MONGOLIAN FREE VARIATION SELECTOR FOUR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u180F"},6277:{"value":"1885","name":"MONGOLIAN LETTER ALI GALI BALUDA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1885"},6278:{"value":"1886","name":"MONGOLIAN LETTER ALI GALI THREE BALUDA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1886"},6313:{"value":"18A9","name":"MONGOLIAN LETTER ALI GALI DAGALGA","category":"Mn","class":"228","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u18A9"},6432:{"value":"1920","name":"LIMBU VOWEL SIGN A","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1920"},6433:{"value":"1921","name":"LIMBU VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1921"},6434:{"value":"1922","name":"LIMBU VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1922"},6439:{"value":"1927","name":"LIMBU VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1927"},6440:{"value":"1928","name":"LIMBU VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1928"},6450:{"value":"1932","name":"LIMBU SMALL LETTER ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1932"},6457:{"value":"1939","name":"LIMBU SIGN MUKPHRENG","category":"Mn","class":"222","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1939"},6458:{"value":"193A","name":"LIMBU SIGN KEMPHRENG","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u193A"},6459:{"value":"193B","name":"LIMBU SIGN SA-I","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u193B"},6679:{"value":"1A17","name":"BUGINESE VOWEL SIGN I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A17"},6680:{"value":"1A18","name":"BUGINESE VOWEL SIGN U","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A18"},6683:{"value":"1A1B","name":"BUGINESE VOWEL SIGN AE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A1B"},6742:{"value":"1A56","name":"TAI THAM CONSONANT SIGN MEDIAL LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A56"},6744:{"value":"1A58","name":"TAI THAM SIGN MAI KANG LAI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A58"},6745:{"value":"1A59","name":"TAI THAM CONSONANT SIGN FINAL NGA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A59"},6746:{"value":"1A5A","name":"TAI THAM CONSONANT SIGN LOW PA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A5A"},6747:{"value":"1A5B","name":"TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A5B"},6748:{"value":"1A5C","name":"TAI THAM CONSONANT SIGN MA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A5C"},6749:{"value":"1A5D","name":"TAI THAM CONSONANT SIGN BA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A5D"},6750:{"value":"1A5E","name":"TAI THAM CONSONANT SIGN SA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A5E"},6752:{"value":"1A60","name":"TAI THAM SIGN SAKOT","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A60"},6754:{"value":"1A62","name":"TAI THAM VOWEL SIGN MAI SAT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A62"},6757:{"value":"1A65","name":"TAI THAM VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A65"},6758:{"value":"1A66","name":"TAI THAM VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A66"},6759:{"value":"1A67","name":"TAI THAM VOWEL SIGN UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A67"},6760:{"value":"1A68","name":"TAI THAM VOWEL SIGN UUE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A68"},6761:{"value":"1A69","name":"TAI THAM VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A69"},6762:{"value":"1A6A","name":"TAI THAM VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A6A"},6763:{"value":"1A6B","name":"TAI THAM VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A6B"},6764:{"value":"1A6C","name":"TAI THAM VOWEL SIGN OA BELOW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A6C"},6771:{"value":"1A73","name":"TAI THAM VOWEL SIGN OA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A73"},6772:{"value":"1A74","name":"TAI THAM SIGN MAI KANG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A74"},6773:{"value":"1A75","name":"TAI THAM SIGN TONE-1","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A75"},6774:{"value":"1A76","name":"TAI THAM SIGN TONE-2","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A76"},6775:{"value":"1A77","name":"TAI THAM SIGN KHUEN TONE-3","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A77"},6776:{"value":"1A78","name":"TAI THAM SIGN KHUEN TONE-4","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A78"},6777:{"value":"1A79","name":"TAI THAM SIGN KHUEN TONE-5","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A79"},6778:{"value":"1A7A","name":"TAI THAM SIGN RA HAAM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A7A"},6779:{"value":"1A7B","name":"TAI THAM SIGN MAI SAM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A7B"},6780:{"value":"1A7C","name":"TAI THAM SIGN KHUEN-LUE KARAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A7C"},6783:{"value":"1A7F","name":"TAI THAM COMBINING CRYPTOGRAMMIC DOT","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A7F"},6832:{"value":"1AB0","name":"COMBINING DOUBLED CIRCUMFLEX ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB0"},6833:{"value":"1AB1","name":"COMBINING DIAERESIS-RING","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB1"},6834:{"value":"1AB2","name":"COMBINING INFINITY","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB2"},6835:{"value":"1AB3","name":"COMBINING DOWNWARDS ARROW","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB3"},6836:{"value":"1AB4","name":"COMBINING TRIPLE DOT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB4"},6837:{"value":"1AB5","name":"COMBINING X-X BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB5"},6838:{"value":"1AB6","name":"COMBINING WIGGLY LINE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB6"},6839:{"value":"1AB7","name":"COMBINING OPEN MARK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB7"},6840:{"value":"1AB8","name":"COMBINING DOUBLE OPEN MARK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB8"},6841:{"value":"1AB9","name":"COMBINING LIGHT CENTRALIZATION STROKE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AB9"},6842:{"value":"1ABA","name":"COMBINING STRONG CENTRALIZATION STROKE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ABA"},6843:{"value":"1ABB","name":"COMBINING PARENTHESES ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ABB"},6844:{"value":"1ABC","name":"COMBINING DOUBLE PARENTHESES ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ABC"},6845:{"value":"1ABD","name":"COMBINING PARENTHESES BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ABD"},6847:{"value":"1ABF","name":"COMBINING LATIN SMALL LETTER W BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ABF"},6848:{"value":"1AC0","name":"COMBINING LATIN SMALL LETTER TURNED W BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC0"},6849:{"value":"1AC1","name":"COMBINING LEFT PARENTHESIS ABOVE LEFT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC1"},6850:{"value":"1AC2","name":"COMBINING RIGHT PARENTHESIS ABOVE RIGHT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC2"},6851:{"value":"1AC3","name":"COMBINING LEFT PARENTHESIS BELOW LEFT","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC3"},6852:{"value":"1AC4","name":"COMBINING RIGHT PARENTHESIS BELOW RIGHT","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC4"},6853:{"value":"1AC5","name":"COMBINING SQUARE BRACKETS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC5"},6854:{"value":"1AC6","name":"COMBINING NUMBER SIGN ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC6"},6855:{"value":"1AC7","name":"COMBINING INVERTED DOUBLE ARCH ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC7"},6856:{"value":"1AC8","name":"COMBINING PLUS SIGN ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC8"},6857:{"value":"1AC9","name":"COMBINING DOUBLE PLUS SIGN ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AC9"},6858:{"value":"1ACA","name":"COMBINING DOUBLE PLUS SIGN BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ACA"},6859:{"value":"1ACB","name":"COMBINING TRIPLE ACUTE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ACB"},6860:{"value":"1ACC","name":"COMBINING LATIN SMALL LETTER INSULAR G","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ACC"},6861:{"value":"1ACD","name":"COMBINING LATIN SMALL LETTER INSULAR R","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ACD"},6862:{"value":"1ACE","name":"COMBINING LATIN SMALL LETTER INSULAR T","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1ACE"},6912:{"value":"1B00","name":"BALINESE SIGN ULU RICEM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B00"},6913:{"value":"1B01","name":"BALINESE SIGN ULU CANDRA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B01"},6914:{"value":"1B02","name":"BALINESE SIGN CECEK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B02"},6915:{"value":"1B03","name":"BALINESE SIGN SURANG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B03"},6964:{"value":"1B34","name":"BALINESE SIGN REREKAN","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B34"},6966:{"value":"1B36","name":"BALINESE VOWEL SIGN ULU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B36"},6967:{"value":"1B37","name":"BALINESE VOWEL SIGN ULU SARI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B37"},6968:{"value":"1B38","name":"BALINESE VOWEL SIGN SUKU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B38"},6969:{"value":"1B39","name":"BALINESE VOWEL SIGN SUKU ILUT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B39"},6970:{"value":"1B3A","name":"BALINESE VOWEL SIGN RA REPA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B3A"},6972:{"value":"1B3C","name":"BALINESE VOWEL SIGN LA LENGA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B3C"},6978:{"value":"1B42","name":"BALINESE VOWEL SIGN PEPET","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B42"},7019:{"value":"1B6B","name":"BALINESE MUSICAL SYMBOL COMBINING TEGEH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B6B"},7020:{"value":"1B6C","name":"BALINESE MUSICAL SYMBOL COMBINING ENDEP","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B6C"},7021:{"value":"1B6D","name":"BALINESE MUSICAL SYMBOL COMBINING KEMPUL","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B6D"},7022:{"value":"1B6E","name":"BALINESE MUSICAL SYMBOL COMBINING KEMPLI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B6E"},7023:{"value":"1B6F","name":"BALINESE MUSICAL SYMBOL COMBINING JEGOGAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B6F"},7024:{"value":"1B70","name":"BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B70"},7025:{"value":"1B71","name":"BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B71"},7026:{"value":"1B72","name":"BALINESE MUSICAL SYMBOL COMBINING BENDE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B72"},7027:{"value":"1B73","name":"BALINESE MUSICAL SYMBOL COMBINING GONG","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B73"},7040:{"value":"1B80","name":"SUNDANESE SIGN PANYECEK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B80"},7041:{"value":"1B81","name":"SUNDANESE SIGN PANGLAYAR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B81"},7074:{"value":"1BA2","name":"SUNDANESE CONSONANT SIGN PANYAKRA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA2"},7075:{"value":"1BA3","name":"SUNDANESE CONSONANT SIGN PANYIKU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA3"},7076:{"value":"1BA4","name":"SUNDANESE VOWEL SIGN PANGHULU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA4"},7077:{"value":"1BA5","name":"SUNDANESE VOWEL SIGN PANYUKU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA5"},7080:{"value":"1BA8","name":"SUNDANESE VOWEL SIGN PAMEPET","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA8"},7081:{"value":"1BA9","name":"SUNDANESE VOWEL SIGN PANEULEUNG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BA9"},7083:{"value":"1BAB","name":"SUNDANESE SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BAB"},7084:{"value":"1BAC","name":"SUNDANESE CONSONANT SIGN PASANGAN MA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BAC"},7085:{"value":"1BAD","name":"SUNDANESE CONSONANT SIGN PASANGAN WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BAD"},7142:{"value":"1BE6","name":"BATAK SIGN TOMPI","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE6"},7144:{"value":"1BE8","name":"BATAK VOWEL SIGN PAKPAK E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE8"},7145:{"value":"1BE9","name":"BATAK VOWEL SIGN EE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BE9"},7149:{"value":"1BED","name":"BATAK VOWEL SIGN KARO O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BED"},7151:{"value":"1BEF","name":"BATAK VOWEL SIGN U FOR SIMALUNGUN SA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BEF"},7152:{"value":"1BF0","name":"BATAK CONSONANT SIGN NG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BF0"},7153:{"value":"1BF1","name":"BATAK CONSONANT SIGN H","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BF1"},7212:{"value":"1C2C","name":"LEPCHA VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C2C"},7213:{"value":"1C2D","name":"LEPCHA CONSONANT SIGN K","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C2D"},7214:{"value":"1C2E","name":"LEPCHA CONSONANT SIGN M","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C2E"},7215:{"value":"1C2F","name":"LEPCHA CONSONANT SIGN L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C2F"},7216:{"value":"1C30","name":"LEPCHA CONSONANT SIGN N","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C30"},7217:{"value":"1C31","name":"LEPCHA CONSONANT SIGN P","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C31"},7218:{"value":"1C32","name":"LEPCHA CONSONANT SIGN R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C32"},7219:{"value":"1C33","name":"LEPCHA CONSONANT SIGN T","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C33"},7222:{"value":"1C36","name":"LEPCHA SIGN RAN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C36"},7223:{"value":"1C37","name":"LEPCHA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C37"},7376:{"value":"1CD0","name":"VEDIC TONE KARSHANA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD0"},7377:{"value":"1CD1","name":"VEDIC TONE SHARA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD1"},7378:{"value":"1CD2","name":"VEDIC TONE PRENKHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD2"},7380:{"value":"1CD4","name":"VEDIC SIGN YAJURVEDIC MIDLINE SVARITA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD4"},7381:{"value":"1CD5","name":"VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD5"},7382:{"value":"1CD6","name":"VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD6"},7383:{"value":"1CD7","name":"VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD7"},7384:{"value":"1CD8","name":"VEDIC TONE CANDRA BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD8"},7385:{"value":"1CD9","name":"VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD9"},7386:{"value":"1CDA","name":"VEDIC TONE DOUBLE SVARITA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CDA"},7387:{"value":"1CDB","name":"VEDIC TONE TRIPLE SVARITA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CDB"},7388:{"value":"1CDC","name":"VEDIC TONE KATHAKA ANUDATTA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CDC"},7389:{"value":"1CDD","name":"VEDIC TONE DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CDD"},7390:{"value":"1CDE","name":"VEDIC TONE TWO DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CDE"},7391:{"value":"1CDF","name":"VEDIC TONE THREE DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CDF"},7392:{"value":"1CE0","name":"VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE0"},7394:{"value":"1CE2","name":"VEDIC SIGN VISARGA SVARITA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE2"},7395:{"value":"1CE3","name":"VEDIC SIGN VISARGA UDATTA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE3"},7396:{"value":"1CE4","name":"VEDIC SIGN REVERSED VISARGA UDATTA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE4"},7397:{"value":"1CE5","name":"VEDIC SIGN VISARGA ANUDATTA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE5"},7398:{"value":"1CE6","name":"VEDIC SIGN REVERSED VISARGA ANUDATTA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE6"},7399:{"value":"1CE7","name":"VEDIC SIGN VISARGA UDATTA WITH TAIL","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE7"},7400:{"value":"1CE8","name":"VEDIC SIGN VISARGA ANUDATTA WITH TAIL","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CE8"},7405:{"value":"1CED","name":"VEDIC SIGN TIRYAK","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CED"},7412:{"value":"1CF4","name":"VEDIC TONE CANDRA ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF4"},7416:{"value":"1CF8","name":"VEDIC TONE RING ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF8"},7417:{"value":"1CF9","name":"VEDIC TONE DOUBLE RING ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CF9"},7616:{"value":"1DC0","name":"COMBINING DOTTED GRAVE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC0"},7617:{"value":"1DC1","name":"COMBINING DOTTED ACUTE ACCENT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC1"},7618:{"value":"1DC2","name":"COMBINING SNAKE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC2"},7619:{"value":"1DC3","name":"COMBINING SUSPENSION MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC3"},7620:{"value":"1DC4","name":"COMBINING MACRON-ACUTE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC4"},7621:{"value":"1DC5","name":"COMBINING GRAVE-MACRON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC5"},7622:{"value":"1DC6","name":"COMBINING MACRON-GRAVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC6"},7623:{"value":"1DC7","name":"COMBINING ACUTE-MACRON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC7"},7624:{"value":"1DC8","name":"COMBINING GRAVE-ACUTE-GRAVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC8"},7625:{"value":"1DC9","name":"COMBINING ACUTE-GRAVE-ACUTE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DC9"},7626:{"value":"1DCA","name":"COMBINING LATIN SMALL LETTER R BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DCA"},7627:{"value":"1DCB","name":"COMBINING BREVE-MACRON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DCB"},7628:{"value":"1DCC","name":"COMBINING MACRON-BREVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DCC"},7629:{"value":"1DCD","name":"COMBINING DOUBLE CIRCUMFLEX ABOVE","category":"Mn","class":"234","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DCD"},7630:{"value":"1DCE","name":"COMBINING OGONEK ABOVE","category":"Mn","class":"214","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DCE"},7631:{"value":"1DCF","name":"COMBINING ZIGZAG BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DCF"},7632:{"value":"1DD0","name":"COMBINING IS BELOW","category":"Mn","class":"202","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD0"},7633:{"value":"1DD1","name":"COMBINING UR ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD1"},7634:{"value":"1DD2","name":"COMBINING US ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD2"},7635:{"value":"1DD3","name":"COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD3"},7636:{"value":"1DD4","name":"COMBINING LATIN SMALL LETTER AE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD4"},7637:{"value":"1DD5","name":"COMBINING LATIN SMALL LETTER AO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD5"},7638:{"value":"1DD6","name":"COMBINING LATIN SMALL LETTER AV","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD6"},7639:{"value":"1DD7","name":"COMBINING LATIN SMALL LETTER C CEDILLA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD7"},7640:{"value":"1DD8","name":"COMBINING LATIN SMALL LETTER INSULAR D","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD8"},7641:{"value":"1DD9","name":"COMBINING LATIN SMALL LETTER ETH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DD9"},7642:{"value":"1DDA","name":"COMBINING LATIN SMALL LETTER G","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DDA"},7643:{"value":"1DDB","name":"COMBINING LATIN LETTER SMALL CAPITAL G","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DDB"},7644:{"value":"1DDC","name":"COMBINING LATIN SMALL LETTER K","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DDC"},7645:{"value":"1DDD","name":"COMBINING LATIN SMALL LETTER L","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DDD"},7646:{"value":"1DDE","name":"COMBINING LATIN LETTER SMALL CAPITAL L","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DDE"},7647:{"value":"1DDF","name":"COMBINING LATIN LETTER SMALL CAPITAL M","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DDF"},7648:{"value":"1DE0","name":"COMBINING LATIN SMALL LETTER N","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE0"},7649:{"value":"1DE1","name":"COMBINING LATIN LETTER SMALL CAPITAL N","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE1"},7650:{"value":"1DE2","name":"COMBINING LATIN LETTER SMALL CAPITAL R","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE2"},7651:{"value":"1DE3","name":"COMBINING LATIN SMALL LETTER R ROTUNDA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE3"},7652:{"value":"1DE4","name":"COMBINING LATIN SMALL LETTER S","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE4"},7653:{"value":"1DE5","name":"COMBINING LATIN SMALL LETTER LONG S","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE5"},7654:{"value":"1DE6","name":"COMBINING LATIN SMALL LETTER Z","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE6"},7655:{"value":"1DE7","name":"COMBINING LATIN SMALL LETTER ALPHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE7"},7656:{"value":"1DE8","name":"COMBINING LATIN SMALL LETTER B","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE8"},7657:{"value":"1DE9","name":"COMBINING LATIN SMALL LETTER BETA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DE9"},7658:{"value":"1DEA","name":"COMBINING LATIN SMALL LETTER SCHWA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DEA"},7659:{"value":"1DEB","name":"COMBINING LATIN SMALL LETTER F","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DEB"},7660:{"value":"1DEC","name":"COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DEC"},7661:{"value":"1DED","name":"COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DED"},7662:{"value":"1DEE","name":"COMBINING LATIN SMALL LETTER P","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DEE"},7663:{"value":"1DEF","name":"COMBINING LATIN SMALL LETTER ESH","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DEF"},7664:{"value":"1DF0","name":"COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF0"},7665:{"value":"1DF1","name":"COMBINING LATIN SMALL LETTER W","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF1"},7666:{"value":"1DF2","name":"COMBINING LATIN SMALL LETTER A WITH DIAERESIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF2"},7667:{"value":"1DF3","name":"COMBINING LATIN SMALL LETTER O WITH DIAERESIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF3"},7668:{"value":"1DF4","name":"COMBINING LATIN SMALL LETTER U WITH DIAERESIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF4"},7669:{"value":"1DF5","name":"COMBINING UP TACK ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF5"},7670:{"value":"1DF6","name":"COMBINING KAVYKA ABOVE RIGHT","category":"Mn","class":"232","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF6"},7671:{"value":"1DF7","name":"COMBINING KAVYKA ABOVE LEFT","category":"Mn","class":"228","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF7"},7672:{"value":"1DF8","name":"COMBINING DOT ABOVE LEFT","category":"Mn","class":"228","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF8"},7673:{"value":"1DF9","name":"COMBINING WIDE INVERTED BRIDGE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DF9"},7674:{"value":"1DFA","name":"COMBINING DOT BELOW LEFT","category":"Mn","class":"218","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DFA"},7675:{"value":"1DFB","name":"COMBINING DELETION MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DFB"},7676:{"value":"1DFC","name":"COMBINING DOUBLE INVERTED BREVE BELOW","category":"Mn","class":"233","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DFC"},7677:{"value":"1DFD","name":"COMBINING ALMOST EQUAL TO BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DFD"},7678:{"value":"1DFE","name":"COMBINING LEFT ARROWHEAD ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DFE"},7679:{"value":"1DFF","name":"COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1DFF"},8400:{"value":"20D0","name":"COMBINING LEFT HARPOON ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LEFT HARPOON ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D0"},8401:{"value":"20D1","name":"COMBINING RIGHT HARPOON ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RIGHT HARPOON ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D1"},8402:{"value":"20D2","name":"COMBINING LONG VERTICAL LINE OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LONG VERTICAL BAR OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D2"},8403:{"value":"20D3","name":"COMBINING SHORT VERTICAL LINE OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING SHORT VERTICAL BAR OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D3"},8404:{"value":"20D4","name":"COMBINING ANTICLOCKWISE ARROW ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING ANTICLOCKWISE ARROW ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D4"},8405:{"value":"20D5","name":"COMBINING CLOCKWISE ARROW ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING CLOCKWISE ARROW ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D5"},8406:{"value":"20D6","name":"COMBINING LEFT ARROW ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LEFT ARROW ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D6"},8407:{"value":"20D7","name":"COMBINING RIGHT ARROW ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RIGHT ARROW ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D7"},8408:{"value":"20D8","name":"COMBINING RING OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING RING OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D8"},8409:{"value":"20D9","name":"COMBINING CLOCKWISE RING OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING CLOCKWISE RING OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20D9"},8410:{"value":"20DA","name":"COMBINING ANTICLOCKWISE RING OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING ANTICLOCKWISE RING OVERLAY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20DA"},8411:{"value":"20DB","name":"COMBINING THREE DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING THREE DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20DB"},8412:{"value":"20DC","name":"COMBINING FOUR DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING FOUR DOTS ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20DC"},8417:{"value":"20E1","name":"COMBINING LEFT RIGHT ARROW ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING LEFT RIGHT ARROW ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E1"},8421:{"value":"20E5","name":"COMBINING REVERSE SOLIDUS OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E5"},8422:{"value":"20E6","name":"COMBINING DOUBLE VERTICAL STROKE OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E6"},8423:{"value":"20E7","name":"COMBINING ANNUITY SYMBOL","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E7"},8424:{"value":"20E8","name":"COMBINING TRIPLE UNDERDOT","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E8"},8425:{"value":"20E9","name":"COMBINING WIDE BRIDGE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20E9"},8426:{"value":"20EA","name":"COMBINING LEFTWARDS ARROW OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20EA"},8427:{"value":"20EB","name":"COMBINING LONG DOUBLE SOLIDUS OVERLAY","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20EB"},8428:{"value":"20EC","name":"COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20EC"},8429:{"value":"20ED","name":"COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20ED"},8430:{"value":"20EE","name":"COMBINING LEFT ARROW BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20EE"},8431:{"value":"20EF","name":"COMBINING RIGHT ARROW BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20EF"},8432:{"value":"20F0","name":"COMBINING ASTERISK ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20F0"},11503:{"value":"2CEF","name":"COPTIC COMBINING NI ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CEF"},11504:{"value":"2CF0","name":"COPTIC COMBINING SPIRITUS ASPER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CF0"},11505:{"value":"2CF1","name":"COPTIC COMBINING SPIRITUS LENIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CF1"},11647:{"value":"2D7F","name":"TIFINAGH CONSONANT JOINER","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D7F"},11744:{"value":"2DE0","name":"COMBINING CYRILLIC LETTER BE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE0"},11745:{"value":"2DE1","name":"COMBINING CYRILLIC LETTER VE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE1"},11746:{"value":"2DE2","name":"COMBINING CYRILLIC LETTER GHE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE2"},11747:{"value":"2DE3","name":"COMBINING CYRILLIC LETTER DE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE3"},11748:{"value":"2DE4","name":"COMBINING CYRILLIC LETTER ZHE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE4"},11749:{"value":"2DE5","name":"COMBINING CYRILLIC LETTER ZE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE5"},11750:{"value":"2DE6","name":"COMBINING CYRILLIC LETTER KA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE6"},11751:{"value":"2DE7","name":"COMBINING CYRILLIC LETTER EL","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE7"},11752:{"value":"2DE8","name":"COMBINING CYRILLIC LETTER EM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE8"},11753:{"value":"2DE9","name":"COMBINING CYRILLIC LETTER EN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DE9"},11754:{"value":"2DEA","name":"COMBINING CYRILLIC LETTER O","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DEA"},11755:{"value":"2DEB","name":"COMBINING CYRILLIC LETTER PE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DEB"},11756:{"value":"2DEC","name":"COMBINING CYRILLIC LETTER ER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DEC"},11757:{"value":"2DED","name":"COMBINING CYRILLIC LETTER ES","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DED"},11758:{"value":"2DEE","name":"COMBINING CYRILLIC LETTER TE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DEE"},11759:{"value":"2DEF","name":"COMBINING CYRILLIC LETTER HA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DEF"},11760:{"value":"2DF0","name":"COMBINING CYRILLIC LETTER TSE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF0"},11761:{"value":"2DF1","name":"COMBINING CYRILLIC LETTER CHE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF1"},11762:{"value":"2DF2","name":"COMBINING CYRILLIC LETTER SHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF2"},11763:{"value":"2DF3","name":"COMBINING CYRILLIC LETTER SHCHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF3"},11764:{"value":"2DF4","name":"COMBINING CYRILLIC LETTER FITA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF4"},11765:{"value":"2DF5","name":"COMBINING CYRILLIC LETTER ES-TE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF5"},11766:{"value":"2DF6","name":"COMBINING CYRILLIC LETTER A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF6"},11767:{"value":"2DF7","name":"COMBINING CYRILLIC LETTER IE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF7"},11768:{"value":"2DF8","name":"COMBINING CYRILLIC LETTER DJERV","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF8"},11769:{"value":"2DF9","name":"COMBINING CYRILLIC LETTER MONOGRAPH UK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DF9"},11770:{"value":"2DFA","name":"COMBINING CYRILLIC LETTER YAT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DFA"},11771:{"value":"2DFB","name":"COMBINING CYRILLIC LETTER YU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DFB"},11772:{"value":"2DFC","name":"COMBINING CYRILLIC LETTER IOTIFIED A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DFC"},11773:{"value":"2DFD","name":"COMBINING CYRILLIC LETTER LITTLE YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DFD"},11774:{"value":"2DFE","name":"COMBINING CYRILLIC LETTER BIG YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DFE"},11775:{"value":"2DFF","name":"COMBINING CYRILLIC LETTER IOTIFIED BIG YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2DFF"},12330:{"value":"302A","name":"IDEOGRAPHIC LEVEL TONE MARK","category":"Mn","class":"218","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u302A"},12331:{"value":"302B","name":"IDEOGRAPHIC RISING TONE MARK","category":"Mn","class":"228","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u302B"},12332:{"value":"302C","name":"IDEOGRAPHIC DEPARTING TONE MARK","category":"Mn","class":"232","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u302C"},12333:{"value":"302D","name":"IDEOGRAPHIC ENTERING TONE MARK","category":"Mn","class":"222","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u302D"},12441:{"value":"3099","name":"COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK","category":"Mn","class":"8","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3099"},12442:{"value":"309A","name":"COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK","category":"Mn","class":"8","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u309A"},42607:{"value":"A66F","name":"COMBINING CYRILLIC VZMET","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA66F"},42612:{"value":"A674","name":"COMBINING CYRILLIC LETTER UKRAINIAN IE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA674"},42613:{"value":"A675","name":"COMBINING CYRILLIC LETTER I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA675"},42614:{"value":"A676","name":"COMBINING CYRILLIC LETTER YI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA676"},42615:{"value":"A677","name":"COMBINING CYRILLIC LETTER U","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA677"},42616:{"value":"A678","name":"COMBINING CYRILLIC LETTER HARD SIGN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA678"},42617:{"value":"A679","name":"COMBINING CYRILLIC LETTER YERU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA679"},42618:{"value":"A67A","name":"COMBINING CYRILLIC LETTER SOFT SIGN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA67A"},42619:{"value":"A67B","name":"COMBINING CYRILLIC LETTER OMEGA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA67B"},42620:{"value":"A67C","name":"COMBINING CYRILLIC KAVYKA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA67C"},42621:{"value":"A67D","name":"COMBINING CYRILLIC PAYEROK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA67D"},42654:{"value":"A69E","name":"COMBINING CYRILLIC LETTER EF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA69E"},42655:{"value":"A69F","name":"COMBINING CYRILLIC LETTER IOTIFIED E","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA69F"},42736:{"value":"A6F0","name":"BAMUM COMBINING MARK KOQNDON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F0"},42737:{"value":"A6F1","name":"BAMUM COMBINING MARK TUKWENTIS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F1"},43010:{"value":"A802","name":"SYLOTI NAGRI SIGN DVISVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA802"},43014:{"value":"A806","name":"SYLOTI NAGRI SIGN HASANTA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA806"},43019:{"value":"A80B","name":"SYLOTI NAGRI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA80B"},43045:{"value":"A825","name":"SYLOTI NAGRI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA825"},43046:{"value":"A826","name":"SYLOTI NAGRI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA826"},43052:{"value":"A82C","name":"SYLOTI NAGRI SIGN ALTERNATE HASANTA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA82C"},43204:{"value":"A8C4","name":"SAURASHTRA SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8C4"},43205:{"value":"A8C5","name":"SAURASHTRA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8C5"},43232:{"value":"A8E0","name":"COMBINING DEVANAGARI DIGIT ZERO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E0"},43233:{"value":"A8E1","name":"COMBINING DEVANAGARI DIGIT ONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E1"},43234:{"value":"A8E2","name":"COMBINING DEVANAGARI DIGIT TWO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E2"},43235:{"value":"A8E3","name":"COMBINING DEVANAGARI DIGIT THREE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E3"},43236:{"value":"A8E4","name":"COMBINING DEVANAGARI DIGIT FOUR","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E4"},43237:{"value":"A8E5","name":"COMBINING DEVANAGARI DIGIT FIVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E5"},43238:{"value":"A8E6","name":"COMBINING DEVANAGARI DIGIT SIX","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E6"},43239:{"value":"A8E7","name":"COMBINING DEVANAGARI DIGIT SEVEN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E7"},43240:{"value":"A8E8","name":"COMBINING DEVANAGARI DIGIT EIGHT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E8"},43241:{"value":"A8E9","name":"COMBINING DEVANAGARI DIGIT NINE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8E9"},43242:{"value":"A8EA","name":"COMBINING DEVANAGARI LETTER A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8EA"},43243:{"value":"A8EB","name":"COMBINING DEVANAGARI LETTER U","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8EB"},43244:{"value":"A8EC","name":"COMBINING DEVANAGARI LETTER KA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8EC"},43245:{"value":"A8ED","name":"COMBINING DEVANAGARI LETTER NA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8ED"},43246:{"value":"A8EE","name":"COMBINING DEVANAGARI LETTER PA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8EE"},43247:{"value":"A8EF","name":"COMBINING DEVANAGARI LETTER RA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8EF"},43248:{"value":"A8F0","name":"COMBINING DEVANAGARI LETTER VI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F0"},43249:{"value":"A8F1","name":"COMBINING DEVANAGARI SIGN AVAGRAHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F1"},43263:{"value":"A8FF","name":"DEVANAGARI VOWEL SIGN AY","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8FF"},43302:{"value":"A926","name":"KAYAH LI VOWEL UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA926"},43303:{"value":"A927","name":"KAYAH LI VOWEL E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA927"},43304:{"value":"A928","name":"KAYAH LI VOWEL U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA928"},43305:{"value":"A929","name":"KAYAH LI VOWEL EE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA929"},43306:{"value":"A92A","name":"KAYAH LI VOWEL O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA92A"},43307:{"value":"A92B","name":"KAYAH LI TONE PLOPHU","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA92B"},43308:{"value":"A92C","name":"KAYAH LI TONE CALYA","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA92C"},43309:{"value":"A92D","name":"KAYAH LI TONE CALYA PLOPHU","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA92D"},43335:{"value":"A947","name":"REJANG VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA947"},43336:{"value":"A948","name":"REJANG VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA948"},43337:{"value":"A949","name":"REJANG VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA949"},43338:{"value":"A94A","name":"REJANG VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA94A"},43339:{"value":"A94B","name":"REJANG VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA94B"},43340:{"value":"A94C","name":"REJANG VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA94C"},43341:{"value":"A94D","name":"REJANG VOWEL SIGN EU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA94D"},43342:{"value":"A94E","name":"REJANG VOWEL SIGN EA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA94E"},43343:{"value":"A94F","name":"REJANG CONSONANT SIGN NG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA94F"},43344:{"value":"A950","name":"REJANG CONSONANT SIGN N","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA950"},43345:{"value":"A951","name":"REJANG CONSONANT SIGN R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA951"},43392:{"value":"A980","name":"JAVANESE SIGN PANYANGGA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA980"},43393:{"value":"A981","name":"JAVANESE SIGN CECAK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA981"},43394:{"value":"A982","name":"JAVANESE SIGN LAYAR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA982"},43443:{"value":"A9B3","name":"JAVANESE SIGN CECAK TELU","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B3"},43446:{"value":"A9B6","name":"JAVANESE VOWEL SIGN WULU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B6"},43447:{"value":"A9B7","name":"JAVANESE VOWEL SIGN WULU MELIK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B7"},43448:{"value":"A9B8","name":"JAVANESE VOWEL SIGN SUKU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B8"},43449:{"value":"A9B9","name":"JAVANESE VOWEL SIGN SUKU MENDUT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9B9"},43452:{"value":"A9BC","name":"JAVANESE VOWEL SIGN PEPET","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9BC"},43453:{"value":"A9BD","name":"JAVANESE CONSONANT SIGN KERET","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9BD"},43493:{"value":"A9E5","name":"MYANMAR SIGN SHAN SAW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9E5"},43561:{"value":"AA29","name":"CHAM VOWEL SIGN AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA29"},43562:{"value":"AA2A","name":"CHAM VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA2A"},43563:{"value":"AA2B","name":"CHAM VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA2B"},43564:{"value":"AA2C","name":"CHAM VOWEL SIGN EI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA2C"},43565:{"value":"AA2D","name":"CHAM VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA2D"},43566:{"value":"AA2E","name":"CHAM VOWEL SIGN OE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA2E"},43569:{"value":"AA31","name":"CHAM VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA31"},43570:{"value":"AA32","name":"CHAM VOWEL SIGN UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA32"},43573:{"value":"AA35","name":"CHAM CONSONANT SIGN LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA35"},43574:{"value":"AA36","name":"CHAM CONSONANT SIGN WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA36"},43587:{"value":"AA43","name":"CHAM CONSONANT SIGN FINAL NG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA43"},43596:{"value":"AA4C","name":"CHAM CONSONANT SIGN FINAL M","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA4C"},43644:{"value":"AA7C","name":"MYANMAR SIGN TAI LAING TONE-2","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA7C"},43696:{"value":"AAB0","name":"TAI VIET MAI KANG","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB0"},43698:{"value":"AAB2","name":"TAI VIET VOWEL I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB2"},43699:{"value":"AAB3","name":"TAI VIET VOWEL UE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB3"},43700:{"value":"AAB4","name":"TAI VIET VOWEL U","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB4"},43703:{"value":"AAB7","name":"TAI VIET MAI KHIT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB7"},43704:{"value":"AAB8","name":"TAI VIET VOWEL IA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAB8"},43710:{"value":"AABE","name":"TAI VIET VOWEL AM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAABE"},43711:{"value":"AABF","name":"TAI VIET TONE MAI EK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAABF"},43713:{"value":"AAC1","name":"TAI VIET TONE MAI THO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAC1"},43756:{"value":"AAEC","name":"MEETEI MAYEK VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAEC"},43757:{"value":"AAED","name":"MEETEI MAYEK VOWEL SIGN AAI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAED"},43766:{"value":"AAF6","name":"MEETEI MAYEK VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF6"},44005:{"value":"ABE5","name":"MEETEI MAYEK VOWEL SIGN ANAP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE5"},44008:{"value":"ABE8","name":"MEETEI MAYEK VOWEL SIGN UNAP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABE8"},44013:{"value":"ABED","name":"MEETEI MAYEK APUN IYEK","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABED"},64286:{"value":"FB1E","name":"HEBREW POINT JUDEO-SPANISH VARIKA","category":"Mn","class":"26","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEBREW POINT VARIKA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB1E"},65024:{"value":"FE00","name":"VARIATION SELECTOR-1","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE00"},65025:{"value":"FE01","name":"VARIATION SELECTOR-2","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE01"},65026:{"value":"FE02","name":"VARIATION SELECTOR-3","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE02"},65027:{"value":"FE03","name":"VARIATION SELECTOR-4","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE03"},65028:{"value":"FE04","name":"VARIATION SELECTOR-5","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE04"},65029:{"value":"FE05","name":"VARIATION SELECTOR-6","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE05"},65030:{"value":"FE06","name":"VARIATION SELECTOR-7","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE06"},65031:{"value":"FE07","name":"VARIATION SELECTOR-8","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE07"},65032:{"value":"FE08","name":"VARIATION SELECTOR-9","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE08"},65033:{"value":"FE09","name":"VARIATION SELECTOR-10","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE09"},65034:{"value":"FE0A","name":"VARIATION SELECTOR-11","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE0A"},65035:{"value":"FE0B","name":"VARIATION SELECTOR-12","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE0B"},65036:{"value":"FE0C","name":"VARIATION SELECTOR-13","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE0C"},65037:{"value":"FE0D","name":"VARIATION SELECTOR-14","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE0D"},65038:{"value":"FE0E","name":"VARIATION SELECTOR-15","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE0E"},65039:{"value":"FE0F","name":"VARIATION SELECTOR-16","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE0F"},65056:{"value":"FE20","name":"COMBINING LIGATURE LEFT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE20"},65057:{"value":"FE21","name":"COMBINING LIGATURE RIGHT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE21"},65058:{"value":"FE22","name":"COMBINING DOUBLE TILDE LEFT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE22"},65059:{"value":"FE23","name":"COMBINING DOUBLE TILDE RIGHT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE23"},65060:{"value":"FE24","name":"COMBINING MACRON LEFT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE24"},65061:{"value":"FE25","name":"COMBINING MACRON RIGHT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE25"},65062:{"value":"FE26","name":"COMBINING CONJOINING MACRON","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE26"},65063:{"value":"FE27","name":"COMBINING LIGATURE LEFT HALF BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE27"},65064:{"value":"FE28","name":"COMBINING LIGATURE RIGHT HALF BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE28"},65065:{"value":"FE29","name":"COMBINING TILDE LEFT HALF BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE29"},65066:{"value":"FE2A","name":"COMBINING TILDE RIGHT HALF BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE2A"},65067:{"value":"FE2B","name":"COMBINING MACRON LEFT HALF BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE2B"},65068:{"value":"FE2C","name":"COMBINING MACRON RIGHT HALF BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE2C"},65069:{"value":"FE2D","name":"COMBINING CONJOINING MACRON BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE2D"},65070:{"value":"FE2E","name":"COMBINING CYRILLIC TITLO LEFT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE2E"},65071:{"value":"FE2F","name":"COMBINING CYRILLIC TITLO RIGHT HALF","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE2F"},66045:{"value":"101FD","name":"PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddfd"},66272:{"value":"102E0","name":"COPTIC EPACT THOUSANDS MARK","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee0"},66422:{"value":"10376","name":"COMBINING OLD PERMIC LETTER AN","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf76"},66423:{"value":"10377","name":"COMBINING OLD PERMIC LETTER DOI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf77"},66424:{"value":"10378","name":"COMBINING OLD PERMIC LETTER ZATA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf78"},66425:{"value":"10379","name":"COMBINING OLD PERMIC LETTER NENOE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf79"},66426:{"value":"1037A","name":"COMBINING OLD PERMIC LETTER SII","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf7a"},68097:{"value":"10A01","name":"KHAROSHTHI VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude01"},68098:{"value":"10A02","name":"KHAROSHTHI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude02"},68099:{"value":"10A03","name":"KHAROSHTHI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude03"},68101:{"value":"10A05","name":"KHAROSHTHI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude05"},68102:{"value":"10A06","name":"KHAROSHTHI VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude06"},68108:{"value":"10A0C","name":"KHAROSHTHI VOWEL LENGTH MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude0c"},68109:{"value":"10A0D","name":"KHAROSHTHI SIGN DOUBLE RING BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude0d"},68110:{"value":"10A0E","name":"KHAROSHTHI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude0e"},68111:{"value":"10A0F","name":"KHAROSHTHI SIGN VISARGA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude0f"},68152:{"value":"10A38","name":"KHAROSHTHI SIGN BAR ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude38"},68153:{"value":"10A39","name":"KHAROSHTHI SIGN CAUDA","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude39"},68154:{"value":"10A3A","name":"KHAROSHTHI SIGN DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude3a"},68159:{"value":"10A3F","name":"KHAROSHTHI VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude3f"},68325:{"value":"10AE5","name":"MANICHAEAN ABBREVIATION MARK ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee5"},68326:{"value":"10AE6","name":"MANICHAEAN ABBREVIATION MARK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udee6"},68900:{"value":"10D24","name":"HANIFI ROHINGYA SIGN HARBAHAY","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd24"},68901:{"value":"10D25","name":"HANIFI ROHINGYA SIGN TAHALA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd25"},68902:{"value":"10D26","name":"HANIFI ROHINGYA SIGN TANA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd26"},68903:{"value":"10D27","name":"HANIFI ROHINGYA SIGN TASSI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd27"},69291:{"value":"10EAB","name":"YEZIDI COMBINING HAMZA MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udeab"},69292:{"value":"10EAC","name":"YEZIDI COMBINING MADDA MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udeac"},69446:{"value":"10F46","name":"SOGDIAN COMBINING DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf46"},69447:{"value":"10F47","name":"SOGDIAN COMBINING TWO DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf47"},69448:{"value":"10F48","name":"SOGDIAN COMBINING DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf48"},69449:{"value":"10F49","name":"SOGDIAN COMBINING TWO DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf49"},69450:{"value":"10F4A","name":"SOGDIAN COMBINING CURVE ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf4a"},69451:{"value":"10F4B","name":"SOGDIAN COMBINING CURVE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf4b"},69452:{"value":"10F4C","name":"SOGDIAN COMBINING HOOK ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf4c"},69453:{"value":"10F4D","name":"SOGDIAN COMBINING HOOK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf4d"},69454:{"value":"10F4E","name":"SOGDIAN COMBINING LONG HOOK BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf4e"},69455:{"value":"10F4F","name":"SOGDIAN COMBINING RESH BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf4f"},69456:{"value":"10F50","name":"SOGDIAN COMBINING STROKE BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf50"},69506:{"value":"10F82","name":"OLD UYGHUR COMBINING DOT ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf82"},69507:{"value":"10F83","name":"OLD UYGHUR COMBINING DOT BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf83"},69508:{"value":"10F84","name":"OLD UYGHUR COMBINING TWO DOTS ABOVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf84"},69509:{"value":"10F85","name":"OLD UYGHUR COMBINING TWO DOTS BELOW","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf85"},69633:{"value":"11001","name":"BRAHMI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc01"},69688:{"value":"11038","name":"BRAHMI VOWEL SIGN AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc38"},69689:{"value":"11039","name":"BRAHMI VOWEL SIGN BHATTIPROLU AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc39"},69690:{"value":"1103A","name":"BRAHMI VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc3a"},69691:{"value":"1103B","name":"BRAHMI VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc3b"},69692:{"value":"1103C","name":"BRAHMI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc3c"},69693:{"value":"1103D","name":"BRAHMI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc3d"},69694:{"value":"1103E","name":"BRAHMI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc3e"},69695:{"value":"1103F","name":"BRAHMI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc3f"},69696:{"value":"11040","name":"BRAHMI VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc40"},69697:{"value":"11041","name":"BRAHMI VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc41"},69698:{"value":"11042","name":"BRAHMI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc42"},69699:{"value":"11043","name":"BRAHMI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc43"},69700:{"value":"11044","name":"BRAHMI VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc44"},69701:{"value":"11045","name":"BRAHMI VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc45"},69702:{"value":"11046","name":"BRAHMI VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc46"},69744:{"value":"11070","name":"BRAHMI SIGN OLD TAMIL VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc70"},69747:{"value":"11073","name":"BRAHMI VOWEL SIGN OLD TAMIL SHORT E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc73"},69748:{"value":"11074","name":"BRAHMI VOWEL SIGN OLD TAMIL SHORT O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc74"},69759:{"value":"1107F","name":"BRAHMI NUMBER JOINER","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc7f"},69760:{"value":"11080","name":"KAITHI SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc80"},69761:{"value":"11081","name":"KAITHI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc81"},69811:{"value":"110B3","name":"KAITHI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb3"},69812:{"value":"110B4","name":"KAITHI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb4"},69813:{"value":"110B5","name":"KAITHI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb5"},69814:{"value":"110B6","name":"KAITHI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb6"},69817:{"value":"110B9","name":"KAITHI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcb9"},69818:{"value":"110BA","name":"KAITHI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcba"},69826:{"value":"110C2","name":"KAITHI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcc2"},69888:{"value":"11100","name":"CHAKMA SIGN CANDRABINDU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd00"},69889:{"value":"11101","name":"CHAKMA SIGN ANUSVARA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd01"},69890:{"value":"11102","name":"CHAKMA SIGN VISARGA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd02"},69927:{"value":"11127","name":"CHAKMA VOWEL SIGN A","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd27"},69928:{"value":"11128","name":"CHAKMA VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd28"},69929:{"value":"11129","name":"CHAKMA VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd29"},69930:{"value":"1112A","name":"CHAKMA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd2a"},69931:{"value":"1112B","name":"CHAKMA VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd2b"},69933:{"value":"1112D","name":"CHAKMA VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd2d"},69934:{"value":"1112E","name":"CHAKMA VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"11131 11127","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd2e"},69935:{"value":"1112F","name":"CHAKMA VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"11132 11127","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd2f"},69936:{"value":"11130","name":"CHAKMA VOWEL SIGN OI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd30"},69937:{"value":"11131","name":"CHAKMA O MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd31"},69938:{"value":"11132","name":"CHAKMA AU MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd32"},69939:{"value":"11133","name":"CHAKMA VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd33"},69940:{"value":"11134","name":"CHAKMA MAAYYAA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd34"},70003:{"value":"11173","name":"MAHAJANI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd73"},70016:{"value":"11180","name":"SHARADA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd80"},70017:{"value":"11181","name":"SHARADA SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd81"},70070:{"value":"111B6","name":"SHARADA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb6"},70071:{"value":"111B7","name":"SHARADA VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb7"},70072:{"value":"111B8","name":"SHARADA VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb8"},70073:{"value":"111B9","name":"SHARADA VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddb9"},70074:{"value":"111BA","name":"SHARADA VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddba"},70075:{"value":"111BB","name":"SHARADA VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddbb"},70076:{"value":"111BC","name":"SHARADA VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddbc"},70077:{"value":"111BD","name":"SHARADA VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddbd"},70078:{"value":"111BE","name":"SHARADA VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddbe"},70089:{"value":"111C9","name":"SHARADA SANDHI MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc9"},70090:{"value":"111CA","name":"SHARADA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddca"},70091:{"value":"111CB","name":"SHARADA VOWEL MODIFIER MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddcb"},70092:{"value":"111CC","name":"SHARADA EXTRA SHORT VOWEL MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddcc"},70095:{"value":"111CF","name":"SHARADA SIGN INVERTED CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddcf"},70191:{"value":"1122F","name":"KHOJKI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude2f"},70192:{"value":"11230","name":"KHOJKI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude30"},70193:{"value":"11231","name":"KHOJKI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude31"},70196:{"value":"11234","name":"KHOJKI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude34"},70198:{"value":"11236","name":"KHOJKI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude36"},70199:{"value":"11237","name":"KHOJKI SIGN SHADDA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude37"},70206:{"value":"1123E","name":"KHOJKI SIGN SUKUN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude3e"},70367:{"value":"112DF","name":"KHUDAWADI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udedf"},70371:{"value":"112E3","name":"KHUDAWADI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee3"},70372:{"value":"112E4","name":"KHUDAWADI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee4"},70373:{"value":"112E5","name":"KHUDAWADI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee5"},70374:{"value":"112E6","name":"KHUDAWADI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee6"},70375:{"value":"112E7","name":"KHUDAWADI VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee7"},70376:{"value":"112E8","name":"KHUDAWADI VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee8"},70377:{"value":"112E9","name":"KHUDAWADI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udee9"},70378:{"value":"112EA","name":"KHUDAWADI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udeea"},70400:{"value":"11300","name":"GRANTHA SIGN COMBINING ANUSVARA ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf00"},70401:{"value":"11301","name":"GRANTHA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf01"},70459:{"value":"1133B","name":"COMBINING BINDU BELOW","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf3b"},70460:{"value":"1133C","name":"GRANTHA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf3c"},70464:{"value":"11340","name":"GRANTHA VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf40"},70502:{"value":"11366","name":"COMBINING GRANTHA DIGIT ZERO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf66"},70503:{"value":"11367","name":"COMBINING GRANTHA DIGIT ONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf67"},70504:{"value":"11368","name":"COMBINING GRANTHA DIGIT TWO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf68"},70505:{"value":"11369","name":"COMBINING GRANTHA DIGIT THREE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf69"},70506:{"value":"1136A","name":"COMBINING GRANTHA DIGIT FOUR","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf6a"},70507:{"value":"1136B","name":"COMBINING GRANTHA DIGIT FIVE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf6b"},70508:{"value":"1136C","name":"COMBINING GRANTHA DIGIT SIX","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf6c"},70512:{"value":"11370","name":"COMBINING GRANTHA LETTER A","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf70"},70513:{"value":"11371","name":"COMBINING GRANTHA LETTER KA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf71"},70514:{"value":"11372","name":"COMBINING GRANTHA LETTER NA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf72"},70515:{"value":"11373","name":"COMBINING GRANTHA LETTER VI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf73"},70516:{"value":"11374","name":"COMBINING GRANTHA LETTER PA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udf74"},70712:{"value":"11438","name":"NEWA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc38"},70713:{"value":"11439","name":"NEWA VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc39"},70714:{"value":"1143A","name":"NEWA VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc3a"},70715:{"value":"1143B","name":"NEWA VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc3b"},70716:{"value":"1143C","name":"NEWA VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc3c"},70717:{"value":"1143D","name":"NEWA VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc3d"},70718:{"value":"1143E","name":"NEWA VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc3e"},70719:{"value":"1143F","name":"NEWA VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc3f"},70722:{"value":"11442","name":"NEWA SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc42"},70723:{"value":"11443","name":"NEWA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc43"},70724:{"value":"11444","name":"NEWA SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc44"},70726:{"value":"11446","name":"NEWA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc46"},70750:{"value":"1145E","name":"NEWA SANDHI MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc5e"},70835:{"value":"114B3","name":"TIRHUTA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb3"},70836:{"value":"114B4","name":"TIRHUTA VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb4"},70837:{"value":"114B5","name":"TIRHUTA VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb5"},70838:{"value":"114B6","name":"TIRHUTA VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb6"},70839:{"value":"114B7","name":"TIRHUTA VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb7"},70840:{"value":"114B8","name":"TIRHUTA VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcb8"},70842:{"value":"114BA","name":"TIRHUTA VOWEL SIGN SHORT E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcba"},70847:{"value":"114BF","name":"TIRHUTA SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcbf"},70848:{"value":"114C0","name":"TIRHUTA SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc0"},70850:{"value":"114C2","name":"TIRHUTA SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc2"},70851:{"value":"114C3","name":"TIRHUTA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc3"},71090:{"value":"115B2","name":"SIDDHAM VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb2"},71091:{"value":"115B3","name":"SIDDHAM VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb3"},71092:{"value":"115B4","name":"SIDDHAM VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb4"},71093:{"value":"115B5","name":"SIDDHAM VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddb5"},71100:{"value":"115BC","name":"SIDDHAM SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddbc"},71101:{"value":"115BD","name":"SIDDHAM SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddbd"},71103:{"value":"115BF","name":"SIDDHAM SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddbf"},71104:{"value":"115C0","name":"SIDDHAM SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc0"},71132:{"value":"115DC","name":"SIDDHAM VOWEL SIGN ALTERNATE U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udddc"},71133:{"value":"115DD","name":"SIDDHAM VOWEL SIGN ALTERNATE UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udddd"},71219:{"value":"11633","name":"MODI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude33"},71220:{"value":"11634","name":"MODI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude34"},71221:{"value":"11635","name":"MODI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude35"},71222:{"value":"11636","name":"MODI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude36"},71223:{"value":"11637","name":"MODI VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude37"},71224:{"value":"11638","name":"MODI VOWEL SIGN VOCALIC LL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude38"},71225:{"value":"11639","name":"MODI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude39"},71226:{"value":"1163A","name":"MODI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude3a"},71229:{"value":"1163D","name":"MODI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude3d"},71231:{"value":"1163F","name":"MODI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude3f"},71232:{"value":"11640","name":"MODI SIGN ARDHACANDRA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude40"},71339:{"value":"116AB","name":"TAKRI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeab"},71341:{"value":"116AD","name":"TAKRI VOWEL SIGN AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udead"},71344:{"value":"116B0","name":"TAKRI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb0"},71345:{"value":"116B1","name":"TAKRI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb1"},71346:{"value":"116B2","name":"TAKRI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb2"},71347:{"value":"116B3","name":"TAKRI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb3"},71348:{"value":"116B4","name":"TAKRI VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb4"},71349:{"value":"116B5","name":"TAKRI VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb5"},71351:{"value":"116B7","name":"TAKRI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb7"},71453:{"value":"1171D","name":"AHOM CONSONANT SIGN MEDIAL LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf1d"},71454:{"value":"1171E","name":"AHOM CONSONANT SIGN MEDIAL RA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf1e"},71455:{"value":"1171F","name":"AHOM CONSONANT SIGN MEDIAL LIGATING RA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf1f"},71458:{"value":"11722","name":"AHOM VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf22"},71459:{"value":"11723","name":"AHOM VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf23"},71460:{"value":"11724","name":"AHOM VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf24"},71461:{"value":"11725","name":"AHOM VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf25"},71463:{"value":"11727","name":"AHOM VOWEL SIGN AW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf27"},71464:{"value":"11728","name":"AHOM VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf28"},71465:{"value":"11729","name":"AHOM VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf29"},71466:{"value":"1172A","name":"AHOM VOWEL SIGN AM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf2a"},71467:{"value":"1172B","name":"AHOM SIGN KILLER","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf2b"},71727:{"value":"1182F","name":"DOGRA VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc2f"},71728:{"value":"11830","name":"DOGRA VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc30"},71729:{"value":"11831","name":"DOGRA VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc31"},71730:{"value":"11832","name":"DOGRA VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc32"},71731:{"value":"11833","name":"DOGRA VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc33"},71732:{"value":"11834","name":"DOGRA VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc34"},71733:{"value":"11835","name":"DOGRA VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc35"},71734:{"value":"11836","name":"DOGRA VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc36"},71735:{"value":"11837","name":"DOGRA SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc37"},71737:{"value":"11839","name":"DOGRA SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc39"},71738:{"value":"1183A","name":"DOGRA SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc3a"},71995:{"value":"1193B","name":"DIVES AKURU SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd3b"},71996:{"value":"1193C","name":"DIVES AKURU SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd3c"},71998:{"value":"1193E","name":"DIVES AKURU VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd3e"},72003:{"value":"11943","name":"DIVES AKURU SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd43"},72148:{"value":"119D4","name":"NANDINAGARI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd4"},72149:{"value":"119D5","name":"NANDINAGARI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd5"},72150:{"value":"119D6","name":"NANDINAGARI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd6"},72151:{"value":"119D7","name":"NANDINAGARI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddd7"},72154:{"value":"119DA","name":"NANDINAGARI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\uddda"},72155:{"value":"119DB","name":"NANDINAGARI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udddb"},72160:{"value":"119E0","name":"NANDINAGARI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udde0"},72193:{"value":"11A01","name":"ZANABAZAR SQUARE VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude01"},72194:{"value":"11A02","name":"ZANABAZAR SQUARE VOWEL SIGN UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude02"},72195:{"value":"11A03","name":"ZANABAZAR SQUARE VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude03"},72196:{"value":"11A04","name":"ZANABAZAR SQUARE VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude04"},72197:{"value":"11A05","name":"ZANABAZAR SQUARE VOWEL SIGN OE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude05"},72198:{"value":"11A06","name":"ZANABAZAR SQUARE VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude06"},72199:{"value":"11A07","name":"ZANABAZAR SQUARE VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude07"},72200:{"value":"11A08","name":"ZANABAZAR SQUARE VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude08"},72201:{"value":"11A09","name":"ZANABAZAR SQUARE VOWEL SIGN REVERSED I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude09"},72202:{"value":"11A0A","name":"ZANABAZAR SQUARE VOWEL LENGTH MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude0a"},72243:{"value":"11A33","name":"ZANABAZAR SQUARE FINAL CONSONANT MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude33"},72244:{"value":"11A34","name":"ZANABAZAR SQUARE SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude34"},72245:{"value":"11A35","name":"ZANABAZAR SQUARE SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude35"},72246:{"value":"11A36","name":"ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude36"},72247:{"value":"11A37","name":"ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude37"},72248:{"value":"11A38","name":"ZANABAZAR SQUARE SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude38"},72251:{"value":"11A3B","name":"ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude3b"},72252:{"value":"11A3C","name":"ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude3c"},72253:{"value":"11A3D","name":"ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude3d"},72254:{"value":"11A3E","name":"ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude3e"},72263:{"value":"11A47","name":"ZANABAZAR SQUARE SUBJOINER","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude47"},72273:{"value":"11A51","name":"SOYOMBO VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude51"},72274:{"value":"11A52","name":"SOYOMBO VOWEL SIGN UE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude52"},72275:{"value":"11A53","name":"SOYOMBO VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude53"},72276:{"value":"11A54","name":"SOYOMBO VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude54"},72277:{"value":"11A55","name":"SOYOMBO VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude55"},72278:{"value":"11A56","name":"SOYOMBO VOWEL SIGN OE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude56"},72281:{"value":"11A59","name":"SOYOMBO VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude59"},72282:{"value":"11A5A","name":"SOYOMBO VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude5a"},72283:{"value":"11A5B","name":"SOYOMBO VOWEL LENGTH MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude5b"},72330:{"value":"11A8A","name":"SOYOMBO FINAL CONSONANT SIGN G","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude8a"},72331:{"value":"11A8B","name":"SOYOMBO FINAL CONSONANT SIGN K","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude8b"},72332:{"value":"11A8C","name":"SOYOMBO FINAL CONSONANT SIGN NG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude8c"},72333:{"value":"11A8D","name":"SOYOMBO FINAL CONSONANT SIGN D","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude8d"},72334:{"value":"11A8E","name":"SOYOMBO FINAL CONSONANT SIGN N","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude8e"},72335:{"value":"11A8F","name":"SOYOMBO FINAL CONSONANT SIGN B","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude8f"},72336:{"value":"11A90","name":"SOYOMBO FINAL CONSONANT SIGN M","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude90"},72337:{"value":"11A91","name":"SOYOMBO FINAL CONSONANT SIGN R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude91"},72338:{"value":"11A92","name":"SOYOMBO FINAL CONSONANT SIGN L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude92"},72339:{"value":"11A93","name":"SOYOMBO FINAL CONSONANT SIGN SH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude93"},72340:{"value":"11A94","name":"SOYOMBO FINAL CONSONANT SIGN S","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude94"},72341:{"value":"11A95","name":"SOYOMBO FINAL CONSONANT SIGN -A","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude95"},72342:{"value":"11A96","name":"SOYOMBO SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude96"},72344:{"value":"11A98","name":"SOYOMBO GEMINATION MARK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude98"},72345:{"value":"11A99","name":"SOYOMBO SUBJOINER","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude99"},72752:{"value":"11C30","name":"BHAIKSUKI VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc30"},72753:{"value":"11C31","name":"BHAIKSUKI VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc31"},72754:{"value":"11C32","name":"BHAIKSUKI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc32"},72755:{"value":"11C33","name":"BHAIKSUKI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc33"},72756:{"value":"11C34","name":"BHAIKSUKI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc34"},72757:{"value":"11C35","name":"BHAIKSUKI VOWEL SIGN VOCALIC RR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc35"},72758:{"value":"11C36","name":"BHAIKSUKI VOWEL SIGN VOCALIC L","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc36"},72760:{"value":"11C38","name":"BHAIKSUKI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc38"},72761:{"value":"11C39","name":"BHAIKSUKI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc39"},72762:{"value":"11C3A","name":"BHAIKSUKI VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc3a"},72763:{"value":"11C3B","name":"BHAIKSUKI VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc3b"},72764:{"value":"11C3C","name":"BHAIKSUKI SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc3c"},72765:{"value":"11C3D","name":"BHAIKSUKI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc3d"},72767:{"value":"11C3F","name":"BHAIKSUKI SIGN VIRAMA","category":"Mn","class":"9","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc3f"},72850:{"value":"11C92","name":"MARCHEN SUBJOINED LETTER KA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc92"},72851:{"value":"11C93","name":"MARCHEN SUBJOINED LETTER KHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc93"},72852:{"value":"11C94","name":"MARCHEN SUBJOINED LETTER GA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc94"},72853:{"value":"11C95","name":"MARCHEN SUBJOINED LETTER NGA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc95"},72854:{"value":"11C96","name":"MARCHEN SUBJOINED LETTER CA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc96"},72855:{"value":"11C97","name":"MARCHEN SUBJOINED LETTER CHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc97"},72856:{"value":"11C98","name":"MARCHEN SUBJOINED LETTER JA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc98"},72857:{"value":"11C99","name":"MARCHEN SUBJOINED LETTER NYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc99"},72858:{"value":"11C9A","name":"MARCHEN SUBJOINED LETTER TA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc9a"},72859:{"value":"11C9B","name":"MARCHEN SUBJOINED LETTER THA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc9b"},72860:{"value":"11C9C","name":"MARCHEN SUBJOINED LETTER DA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc9c"},72861:{"value":"11C9D","name":"MARCHEN SUBJOINED LETTER NA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc9d"},72862:{"value":"11C9E","name":"MARCHEN SUBJOINED LETTER PA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc9e"},72863:{"value":"11C9F","name":"MARCHEN SUBJOINED LETTER PHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc9f"},72864:{"value":"11CA0","name":"MARCHEN SUBJOINED LETTER BA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca0"},72865:{"value":"11CA1","name":"MARCHEN SUBJOINED LETTER MA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca1"},72866:{"value":"11CA2","name":"MARCHEN SUBJOINED LETTER TSA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca2"},72867:{"value":"11CA3","name":"MARCHEN SUBJOINED LETTER TSHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca3"},72868:{"value":"11CA4","name":"MARCHEN SUBJOINED LETTER DZA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca4"},72869:{"value":"11CA5","name":"MARCHEN SUBJOINED LETTER WA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca5"},72870:{"value":"11CA6","name":"MARCHEN SUBJOINED LETTER ZHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca6"},72871:{"value":"11CA7","name":"MARCHEN SUBJOINED LETTER ZA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udca7"},72874:{"value":"11CAA","name":"MARCHEN SUBJOINED LETTER RA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcaa"},72875:{"value":"11CAB","name":"MARCHEN SUBJOINED LETTER LA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcab"},72876:{"value":"11CAC","name":"MARCHEN SUBJOINED LETTER SHA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcac"},72877:{"value":"11CAD","name":"MARCHEN SUBJOINED LETTER SA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcad"},72878:{"value":"11CAE","name":"MARCHEN SUBJOINED LETTER HA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcae"},72879:{"value":"11CAF","name":"MARCHEN SUBJOINED LETTER A","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcaf"},72880:{"value":"11CB0","name":"MARCHEN VOWEL SIGN AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb0"},72882:{"value":"11CB2","name":"MARCHEN VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb2"},72883:{"value":"11CB3","name":"MARCHEN VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb3"},72885:{"value":"11CB5","name":"MARCHEN SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb5"},72886:{"value":"11CB6","name":"MARCHEN SIGN CANDRABINDU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udcb6"},73009:{"value":"11D31","name":"MASARAM GONDI VOWEL SIGN AA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd31"},73010:{"value":"11D32","name":"MASARAM GONDI VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd32"},73011:{"value":"11D33","name":"MASARAM GONDI VOWEL SIGN II","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd33"},73012:{"value":"11D34","name":"MASARAM GONDI VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd34"},73013:{"value":"11D35","name":"MASARAM GONDI VOWEL SIGN UU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd35"},73014:{"value":"11D36","name":"MASARAM GONDI VOWEL SIGN VOCALIC R","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd36"},73018:{"value":"11D3A","name":"MASARAM GONDI VOWEL SIGN E","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd3a"},73020:{"value":"11D3C","name":"MASARAM GONDI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd3c"},73021:{"value":"11D3D","name":"MASARAM GONDI VOWEL SIGN O","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd3d"},73023:{"value":"11D3F","name":"MASARAM GONDI VOWEL SIGN AU","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd3f"},73024:{"value":"11D40","name":"MASARAM GONDI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd40"},73025:{"value":"11D41","name":"MASARAM GONDI SIGN VISARGA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd41"},73026:{"value":"11D42","name":"MASARAM GONDI SIGN NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd42"},73027:{"value":"11D43","name":"MASARAM GONDI SIGN CANDRA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd43"},73028:{"value":"11D44","name":"MASARAM GONDI SIGN HALANTA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd44"},73029:{"value":"11D45","name":"MASARAM GONDI VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd45"},73031:{"value":"11D47","name":"MASARAM GONDI RA-KARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd47"},73104:{"value":"11D90","name":"GUNJALA GONDI VOWEL SIGN EE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd90"},73105:{"value":"11D91","name":"GUNJALA GONDI VOWEL SIGN AI","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd91"},73109:{"value":"11D95","name":"GUNJALA GONDI SIGN ANUSVARA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd95"},73111:{"value":"11D97","name":"GUNJALA GONDI VIRAMA","category":"Mn","class":"9","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd97"},73459:{"value":"11EF3","name":"MAKASAR VOWEL SIGN I","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef3"},73460:{"value":"11EF4","name":"MAKASAR VOWEL SIGN U","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef4"},92912:{"value":"16AF0","name":"BASSA VAH COMBINING HIGH TONE","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udef0"},92913:{"value":"16AF1","name":"BASSA VAH COMBINING LOW TONE","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udef1"},92914:{"value":"16AF2","name":"BASSA VAH COMBINING MID TONE","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udef2"},92915:{"value":"16AF3","name":"BASSA VAH COMBINING LOW-MID TONE","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udef3"},92916:{"value":"16AF4","name":"BASSA VAH COMBINING HIGH-LOW TONE","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udef4"},92976:{"value":"16B30","name":"PAHAWH HMONG MARK CIM TUB","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf30"},92977:{"value":"16B31","name":"PAHAWH HMONG MARK CIM SO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf31"},92978:{"value":"16B32","name":"PAHAWH HMONG MARK CIM KES","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf32"},92979:{"value":"16B33","name":"PAHAWH HMONG MARK CIM KHAV","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf33"},92980:{"value":"16B34","name":"PAHAWH HMONG MARK CIM SUAM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf34"},92981:{"value":"16B35","name":"PAHAWH HMONG MARK CIM HOM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf35"},92982:{"value":"16B36","name":"PAHAWH HMONG MARK CIM TAUM","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf36"},94031:{"value":"16F4F","name":"MIAO SIGN CONSONANT MODIFIER BAR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf4f"},94095:{"value":"16F8F","name":"MIAO TONE RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf8f"},94096:{"value":"16F90","name":"MIAO TONE TOP RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf90"},94097:{"value":"16F91","name":"MIAO TONE ABOVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf91"},94098:{"value":"16F92","name":"MIAO TONE BELOW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udf92"},94180:{"value":"16FE4","name":"KHITAN SMALL SCRIPT FILLER","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udfe4"},113821:{"value":"1BC9D","name":"DUPLOYAN THICK LETTER SELECTOR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc9d"},113822:{"value":"1BC9E","name":"DUPLOYAN DOUBLE MARK","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc9e"},118528:{"value":"1CF00","name":"ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf00"},118529:{"value":"1CF01","name":"ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf01"},118530:{"value":"1CF02","name":"ZNAMENNY COMBINING MARK TSATA ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf02"},118531:{"value":"1CF03","name":"ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf03"},118532:{"value":"1CF04","name":"ZNAMENNY COMBINING MARK NIZKO ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf04"},118533:{"value":"1CF05","name":"ZNAMENNY COMBINING MARK SREDNE ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf05"},118534:{"value":"1CF06","name":"ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf06"},118535:{"value":"1CF07","name":"ZNAMENNY COMBINING MARK POVYSHE ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf07"},118536:{"value":"1CF08","name":"ZNAMENNY COMBINING MARK VYSOKO ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf08"},118537:{"value":"1CF09","name":"ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf09"},118538:{"value":"1CF0A","name":"ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf0a"},118539:{"value":"1CF0B","name":"ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf0b"},118540:{"value":"1CF0C","name":"ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf0c"},118541:{"value":"1CF0D","name":"ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf0d"},118542:{"value":"1CF0E","name":"ZNAMENNY COMBINING MARK TSATA ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf0e"},118543:{"value":"1CF0F","name":"ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf0f"},118544:{"value":"1CF10","name":"ZNAMENNY COMBINING MARK NIZKO ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf10"},118545:{"value":"1CF11","name":"ZNAMENNY COMBINING MARK SREDNE ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf11"},118546:{"value":"1CF12","name":"ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf12"},118547:{"value":"1CF13","name":"ZNAMENNY COMBINING MARK POVYSHE ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf13"},118548:{"value":"1CF14","name":"ZNAMENNY COMBINING MARK VYSOKO ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf14"},118549:{"value":"1CF15","name":"ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf15"},118550:{"value":"1CF16","name":"ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf16"},118551:{"value":"1CF17","name":"ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf17"},118552:{"value":"1CF18","name":"ZNAMENNY COMBINING MARK TSATA S KRYZHEM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf18"},118553:{"value":"1CF19","name":"ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf19"},118554:{"value":"1CF1A","name":"ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf1a"},118555:{"value":"1CF1B","name":"ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf1b"},118556:{"value":"1CF1C","name":"ZNAMENNY COMBINING MARK POVYSHE STRANNO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf1c"},118557:{"value":"1CF1D","name":"ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf1d"},118558:{"value":"1CF1E","name":"ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf1e"},118559:{"value":"1CF1F","name":"ZNAMENNY COMBINING MARK GORAZDO VYSOKO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf1f"},118560:{"value":"1CF20","name":"ZNAMENNY COMBINING MARK ZELO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf20"},118561:{"value":"1CF21","name":"ZNAMENNY COMBINING MARK ON","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf21"},118562:{"value":"1CF22","name":"ZNAMENNY COMBINING MARK RAVNO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf22"},118563:{"value":"1CF23","name":"ZNAMENNY COMBINING MARK TIKHAYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf23"},118564:{"value":"1CF24","name":"ZNAMENNY COMBINING MARK BORZAYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf24"},118565:{"value":"1CF25","name":"ZNAMENNY COMBINING MARK UDARKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf25"},118566:{"value":"1CF26","name":"ZNAMENNY COMBINING MARK PODVERTKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf26"},118567:{"value":"1CF27","name":"ZNAMENNY COMBINING MARK LOMKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf27"},118568:{"value":"1CF28","name":"ZNAMENNY COMBINING MARK KUPNAYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf28"},118569:{"value":"1CF29","name":"ZNAMENNY COMBINING MARK KACHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf29"},118570:{"value":"1CF2A","name":"ZNAMENNY COMBINING MARK ZEVOK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf2a"},118571:{"value":"1CF2B","name":"ZNAMENNY COMBINING MARK SKOBA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf2b"},118572:{"value":"1CF2C","name":"ZNAMENNY COMBINING MARK RAZSEKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf2c"},118573:{"value":"1CF2D","name":"ZNAMENNY COMBINING MARK KRYZH ON LEFT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf2d"},118576:{"value":"1CF30","name":"ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf30"},118577:{"value":"1CF31","name":"ZNAMENNY COMBINING TONAL RANGE MARK SVETLO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf31"},118578:{"value":"1CF32","name":"ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf32"},118579:{"value":"1CF33","name":"ZNAMENNY COMBINING MARK ZADERZHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf33"},118580:{"value":"1CF34","name":"ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf34"},118581:{"value":"1CF35","name":"ZNAMENNY COMBINING MARK OTSECHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf35"},118582:{"value":"1CF36","name":"ZNAMENNY COMBINING MARK PODCHASHIE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf36"},118583:{"value":"1CF37","name":"ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf37"},118584:{"value":"1CF38","name":"ZNAMENNY COMBINING MARK CHASHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf38"},118585:{"value":"1CF39","name":"ZNAMENNY COMBINING MARK CHASHKA POLNAYA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf39"},118586:{"value":"1CF3A","name":"ZNAMENNY COMBINING MARK OBLACHKO","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf3a"},118587:{"value":"1CF3B","name":"ZNAMENNY COMBINING MARK SOROCHYA NOZHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf3b"},118588:{"value":"1CF3C","name":"ZNAMENNY COMBINING MARK TOCHKA","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf3c"},118589:{"value":"1CF3D","name":"ZNAMENNY COMBINING MARK DVOETOCHIE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf3d"},118590:{"value":"1CF3E","name":"ZNAMENNY COMBINING ATTACHING VERTICAL OMET","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf3e"},118591:{"value":"1CF3F","name":"ZNAMENNY COMBINING MARK CURVED OMET","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf3f"},118592:{"value":"1CF40","name":"ZNAMENNY COMBINING MARK KRYZH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf40"},118593:{"value":"1CF41","name":"ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf41"},118594:{"value":"1CF42","name":"ZNAMENNY PRIZNAK MODIFIER LEVEL-2","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf42"},118595:{"value":"1CF43","name":"ZNAMENNY PRIZNAK MODIFIER LEVEL-3","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf43"},118596:{"value":"1CF44","name":"ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf44"},118597:{"value":"1CF45","name":"ZNAMENNY PRIZNAK MODIFIER KRYZH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf45"},118598:{"value":"1CF46","name":"ZNAMENNY PRIZNAK MODIFIER ROG","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf46"},119143:{"value":"1D167","name":"MUSICAL SYMBOL COMBINING TREMOLO-1","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd67"},119144:{"value":"1D168","name":"MUSICAL SYMBOL COMBINING TREMOLO-2","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd68"},119145:{"value":"1D169","name":"MUSICAL SYMBOL COMBINING TREMOLO-3","category":"Mn","class":"1","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd69"},119163:{"value":"1D17B","name":"MUSICAL SYMBOL COMBINING ACCENT","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd7b"},119164:{"value":"1D17C","name":"MUSICAL SYMBOL COMBINING STACCATO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd7c"},119165:{"value":"1D17D","name":"MUSICAL SYMBOL COMBINING TENUTO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd7d"},119166:{"value":"1D17E","name":"MUSICAL SYMBOL COMBINING STACCATISSIMO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd7e"},119167:{"value":"1D17F","name":"MUSICAL SYMBOL COMBINING MARCATO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd7f"},119168:{"value":"1D180","name":"MUSICAL SYMBOL COMBINING MARCATO-STACCATO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd80"},119169:{"value":"1D181","name":"MUSICAL SYMBOL COMBINING ACCENT-STACCATO","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd81"},119170:{"value":"1D182","name":"MUSICAL SYMBOL COMBINING LOURE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd82"},119173:{"value":"1D185","name":"MUSICAL SYMBOL COMBINING DOIT","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd85"},119174:{"value":"1D186","name":"MUSICAL SYMBOL COMBINING RIP","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd86"},119175:{"value":"1D187","name":"MUSICAL SYMBOL COMBINING FLIP","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd87"},119176:{"value":"1D188","name":"MUSICAL SYMBOL COMBINING SMEAR","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd88"},119177:{"value":"1D189","name":"MUSICAL SYMBOL COMBINING BEND","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd89"},119178:{"value":"1D18A","name":"MUSICAL SYMBOL COMBINING DOUBLE TONGUE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd8a"},119179:{"value":"1D18B","name":"MUSICAL SYMBOL COMBINING TRIPLE TONGUE","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd8b"},119210:{"value":"1D1AA","name":"MUSICAL SYMBOL COMBINING DOWN BOW","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddaa"},119211:{"value":"1D1AB","name":"MUSICAL SYMBOL COMBINING UP BOW","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddab"},119212:{"value":"1D1AC","name":"MUSICAL SYMBOL COMBINING HARMONIC","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddac"},119213:{"value":"1D1AD","name":"MUSICAL SYMBOL COMBINING SNAP PIZZICATO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddad"},119362:{"value":"1D242","name":"COMBINING GREEK MUSICAL TRISEME","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude42"},119363:{"value":"1D243","name":"COMBINING GREEK MUSICAL TETRASEME","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude43"},119364:{"value":"1D244","name":"COMBINING GREEK MUSICAL PENTASEME","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude44"},121344:{"value":"1DA00","name":"SIGNWRITING HEAD RIM","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude00"},121345:{"value":"1DA01","name":"SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude01"},121346:{"value":"1DA02","name":"SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude02"},121347:{"value":"1DA03","name":"SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude03"},121348:{"value":"1DA04","name":"SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude04"},121349:{"value":"1DA05","name":"SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude05"},121350:{"value":"1DA06","name":"SIGNWRITING HEAD MOVEMENT CIRCLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude06"},121351:{"value":"1DA07","name":"SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude07"},121352:{"value":"1DA08","name":"SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude08"},121353:{"value":"1DA09","name":"SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude09"},121354:{"value":"1DA0A","name":"SIGNWRITING EYEBROWS STRAIGHT UP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude0a"},121355:{"value":"1DA0B","name":"SIGNWRITING EYEBROWS STRAIGHT NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude0b"},121356:{"value":"1DA0C","name":"SIGNWRITING EYEBROWS STRAIGHT DOWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude0c"},121357:{"value":"1DA0D","name":"SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude0d"},121358:{"value":"1DA0E","name":"SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude0e"},121359:{"value":"1DA0F","name":"SIGNWRITING DREAMY EYEBROWS UP NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude0f"},121360:{"value":"1DA10","name":"SIGNWRITING DREAMY EYEBROWS NEUTRAL UP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude10"},121361:{"value":"1DA11","name":"SIGNWRITING FOREHEAD NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude11"},121362:{"value":"1DA12","name":"SIGNWRITING FOREHEAD CONTACT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude12"},121363:{"value":"1DA13","name":"SIGNWRITING FOREHEAD WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude13"},121364:{"value":"1DA14","name":"SIGNWRITING EYES OPEN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude14"},121365:{"value":"1DA15","name":"SIGNWRITING EYES SQUEEZED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude15"},121366:{"value":"1DA16","name":"SIGNWRITING EYES CLOSED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude16"},121367:{"value":"1DA17","name":"SIGNWRITING EYE BLINK SINGLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude17"},121368:{"value":"1DA18","name":"SIGNWRITING EYE BLINK MULTIPLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude18"},121369:{"value":"1DA19","name":"SIGNWRITING EYES HALF OPEN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude19"},121370:{"value":"1DA1A","name":"SIGNWRITING EYES WIDE OPEN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude1a"},121371:{"value":"1DA1B","name":"SIGNWRITING EYES HALF CLOSED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude1b"},121372:{"value":"1DA1C","name":"SIGNWRITING EYES WIDENING MOVEMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude1c"},121373:{"value":"1DA1D","name":"SIGNWRITING EYE WINK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude1d"},121374:{"value":"1DA1E","name":"SIGNWRITING EYELASHES UP","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude1e"},121375:{"value":"1DA1F","name":"SIGNWRITING EYELASHES DOWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude1f"},121376:{"value":"1DA20","name":"SIGNWRITING EYELASHES FLUTTERING","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude20"},121377:{"value":"1DA21","name":"SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude21"},121378:{"value":"1DA22","name":"SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude22"},121379:{"value":"1DA23","name":"SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude23"},121380:{"value":"1DA24","name":"SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude24"},121381:{"value":"1DA25","name":"SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude25"},121382:{"value":"1DA26","name":"SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude26"},121383:{"value":"1DA27","name":"SIGNWRITING EYEGAZE-WALLPLANE CURVED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude27"},121384:{"value":"1DA28","name":"SIGNWRITING EYEGAZE-FLOORPLANE CURVED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude28"},121385:{"value":"1DA29","name":"SIGNWRITING EYEGAZE-WALLPLANE CIRCLING","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude29"},121386:{"value":"1DA2A","name":"SIGNWRITING CHEEKS PUFFED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude2a"},121387:{"value":"1DA2B","name":"SIGNWRITING CHEEKS NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude2b"},121388:{"value":"1DA2C","name":"SIGNWRITING CHEEKS SUCKED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude2c"},121389:{"value":"1DA2D","name":"SIGNWRITING TENSE CHEEKS HIGH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude2d"},121390:{"value":"1DA2E","name":"SIGNWRITING TENSE CHEEKS MIDDLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude2e"},121391:{"value":"1DA2F","name":"SIGNWRITING TENSE CHEEKS LOW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude2f"},121392:{"value":"1DA30","name":"SIGNWRITING EARS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude30"},121393:{"value":"1DA31","name":"SIGNWRITING NOSE NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude31"},121394:{"value":"1DA32","name":"SIGNWRITING NOSE CONTACT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude32"},121395:{"value":"1DA33","name":"SIGNWRITING NOSE WRINKLES","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude33"},121396:{"value":"1DA34","name":"SIGNWRITING NOSE WIGGLES","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude34"},121397:{"value":"1DA35","name":"SIGNWRITING AIR BLOWING OUT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude35"},121398:{"value":"1DA36","name":"SIGNWRITING AIR SUCKING IN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude36"},121403:{"value":"1DA3B","name":"SIGNWRITING MOUTH CLOSED NEUTRAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude3b"},121404:{"value":"1DA3C","name":"SIGNWRITING MOUTH CLOSED FORWARD","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude3c"},121405:{"value":"1DA3D","name":"SIGNWRITING MOUTH CLOSED CONTACT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude3d"},121406:{"value":"1DA3E","name":"SIGNWRITING MOUTH SMILE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude3e"},121407:{"value":"1DA3F","name":"SIGNWRITING MOUTH SMILE WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude3f"},121408:{"value":"1DA40","name":"SIGNWRITING MOUTH SMILE OPEN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude40"},121409:{"value":"1DA41","name":"SIGNWRITING MOUTH FROWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude41"},121410:{"value":"1DA42","name":"SIGNWRITING MOUTH FROWN WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude42"},121411:{"value":"1DA43","name":"SIGNWRITING MOUTH FROWN OPEN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude43"},121412:{"value":"1DA44","name":"SIGNWRITING MOUTH OPEN CIRCLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude44"},121413:{"value":"1DA45","name":"SIGNWRITING MOUTH OPEN FORWARD","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude45"},121414:{"value":"1DA46","name":"SIGNWRITING MOUTH OPEN WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude46"},121415:{"value":"1DA47","name":"SIGNWRITING MOUTH OPEN OVAL","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude47"},121416:{"value":"1DA48","name":"SIGNWRITING MOUTH OPEN OVAL WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude48"},121417:{"value":"1DA49","name":"SIGNWRITING MOUTH OPEN OVAL YAWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude49"},121418:{"value":"1DA4A","name":"SIGNWRITING MOUTH OPEN RECTANGLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude4a"},121419:{"value":"1DA4B","name":"SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude4b"},121420:{"value":"1DA4C","name":"SIGNWRITING MOUTH OPEN RECTANGLE YAWN","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude4c"},121421:{"value":"1DA4D","name":"SIGNWRITING MOUTH KISS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude4d"},121422:{"value":"1DA4E","name":"SIGNWRITING MOUTH KISS FORWARD","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude4e"},121423:{"value":"1DA4F","name":"SIGNWRITING MOUTH KISS WRINKLED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude4f"},121424:{"value":"1DA50","name":"SIGNWRITING MOUTH TENSE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude50"},121425:{"value":"1DA51","name":"SIGNWRITING MOUTH TENSE FORWARD","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude51"},121426:{"value":"1DA52","name":"SIGNWRITING MOUTH TENSE SUCKED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude52"},121427:{"value":"1DA53","name":"SIGNWRITING LIPS PRESSED TOGETHER","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude53"},121428:{"value":"1DA54","name":"SIGNWRITING LIP LOWER OVER UPPER","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude54"},121429:{"value":"1DA55","name":"SIGNWRITING LIP UPPER OVER LOWER","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude55"},121430:{"value":"1DA56","name":"SIGNWRITING MOUTH CORNERS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude56"},121431:{"value":"1DA57","name":"SIGNWRITING MOUTH WRINKLES SINGLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude57"},121432:{"value":"1DA58","name":"SIGNWRITING MOUTH WRINKLES DOUBLE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude58"},121433:{"value":"1DA59","name":"SIGNWRITING TONGUE STICKING OUT FAR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude59"},121434:{"value":"1DA5A","name":"SIGNWRITING TONGUE LICKING LIPS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude5a"},121435:{"value":"1DA5B","name":"SIGNWRITING TONGUE TIP BETWEEN LIPS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude5b"},121436:{"value":"1DA5C","name":"SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude5c"},121437:{"value":"1DA5D","name":"SIGNWRITING TONGUE INSIDE MOUTH RELAXED","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude5d"},121438:{"value":"1DA5E","name":"SIGNWRITING TONGUE MOVES AGAINST CHEEK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude5e"},121439:{"value":"1DA5F","name":"SIGNWRITING TONGUE CENTRE STICKING OUT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude5f"},121440:{"value":"1DA60","name":"SIGNWRITING TONGUE CENTRE INSIDE MOUTH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude60"},121441:{"value":"1DA61","name":"SIGNWRITING TEETH","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude61"},121442:{"value":"1DA62","name":"SIGNWRITING TEETH MOVEMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude62"},121443:{"value":"1DA63","name":"SIGNWRITING TEETH ON TONGUE","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude63"},121444:{"value":"1DA64","name":"SIGNWRITING TEETH ON TONGUE MOVEMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude64"},121445:{"value":"1DA65","name":"SIGNWRITING TEETH ON LIPS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude65"},121446:{"value":"1DA66","name":"SIGNWRITING TEETH ON LIPS MOVEMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude66"},121447:{"value":"1DA67","name":"SIGNWRITING TEETH BITE LIPS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude67"},121448:{"value":"1DA68","name":"SIGNWRITING MOVEMENT-WALLPLANE JAW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude68"},121449:{"value":"1DA69","name":"SIGNWRITING MOVEMENT-FLOORPLANE JAW","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude69"},121450:{"value":"1DA6A","name":"SIGNWRITING NECK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude6a"},121451:{"value":"1DA6B","name":"SIGNWRITING HAIR","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude6b"},121452:{"value":"1DA6C","name":"SIGNWRITING EXCITEMENT","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude6c"},121461:{"value":"1DA75","name":"SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude75"},121476:{"value":"1DA84","name":"SIGNWRITING LOCATION HEAD NECK","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude84"},121499:{"value":"1DA9B","name":"SIGNWRITING FILL MODIFIER-2","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude9b"},121500:{"value":"1DA9C","name":"SIGNWRITING FILL MODIFIER-3","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude9c"},121501:{"value":"1DA9D","name":"SIGNWRITING FILL MODIFIER-4","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude9d"},121502:{"value":"1DA9E","name":"SIGNWRITING FILL MODIFIER-5","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude9e"},121503:{"value":"1DA9F","name":"SIGNWRITING FILL MODIFIER-6","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude9f"},121505:{"value":"1DAA1","name":"SIGNWRITING ROTATION MODIFIER-2","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea1"},121506:{"value":"1DAA2","name":"SIGNWRITING ROTATION MODIFIER-3","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea2"},121507:{"value":"1DAA3","name":"SIGNWRITING ROTATION MODIFIER-4","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea3"},121508:{"value":"1DAA4","name":"SIGNWRITING ROTATION MODIFIER-5","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea4"},121509:{"value":"1DAA5","name":"SIGNWRITING ROTATION MODIFIER-6","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea5"},121510:{"value":"1DAA6","name":"SIGNWRITING ROTATION MODIFIER-7","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea6"},121511:{"value":"1DAA7","name":"SIGNWRITING ROTATION MODIFIER-8","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea7"},121512:{"value":"1DAA8","name":"SIGNWRITING ROTATION MODIFIER-9","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea8"},121513:{"value":"1DAA9","name":"SIGNWRITING ROTATION MODIFIER-10","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udea9"},121514:{"value":"1DAAA","name":"SIGNWRITING ROTATION MODIFIER-11","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udeaa"},121515:{"value":"1DAAB","name":"SIGNWRITING ROTATION MODIFIER-12","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udeab"},121516:{"value":"1DAAC","name":"SIGNWRITING ROTATION MODIFIER-13","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udeac"},121517:{"value":"1DAAD","name":"SIGNWRITING ROTATION MODIFIER-14","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udead"},121518:{"value":"1DAAE","name":"SIGNWRITING ROTATION MODIFIER-15","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udeae"},121519:{"value":"1DAAF","name":"SIGNWRITING ROTATION MODIFIER-16","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udeaf"},122880:{"value":"1E000","name":"COMBINING GLAGOLITIC LETTER AZU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc00"},122881:{"value":"1E001","name":"COMBINING GLAGOLITIC LETTER BUKY","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc01"},122882:{"value":"1E002","name":"COMBINING GLAGOLITIC LETTER VEDE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc02"},122883:{"value":"1E003","name":"COMBINING GLAGOLITIC LETTER GLAGOLI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc03"},122884:{"value":"1E004","name":"COMBINING GLAGOLITIC LETTER DOBRO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc04"},122885:{"value":"1E005","name":"COMBINING GLAGOLITIC LETTER YESTU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc05"},122886:{"value":"1E006","name":"COMBINING GLAGOLITIC LETTER ZHIVETE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc06"},122888:{"value":"1E008","name":"COMBINING GLAGOLITIC LETTER ZEMLJA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc08"},122889:{"value":"1E009","name":"COMBINING GLAGOLITIC LETTER IZHE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc09"},122890:{"value":"1E00A","name":"COMBINING GLAGOLITIC LETTER INITIAL IZHE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc0a"},122891:{"value":"1E00B","name":"COMBINING GLAGOLITIC LETTER I","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc0b"},122892:{"value":"1E00C","name":"COMBINING GLAGOLITIC LETTER DJERVI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc0c"},122893:{"value":"1E00D","name":"COMBINING GLAGOLITIC LETTER KAKO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc0d"},122894:{"value":"1E00E","name":"COMBINING GLAGOLITIC LETTER LJUDIJE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc0e"},122895:{"value":"1E00F","name":"COMBINING GLAGOLITIC LETTER MYSLITE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc0f"},122896:{"value":"1E010","name":"COMBINING GLAGOLITIC LETTER NASHI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc10"},122897:{"value":"1E011","name":"COMBINING GLAGOLITIC LETTER ONU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc11"},122898:{"value":"1E012","name":"COMBINING GLAGOLITIC LETTER POKOJI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc12"},122899:{"value":"1E013","name":"COMBINING GLAGOLITIC LETTER RITSI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc13"},122900:{"value":"1E014","name":"COMBINING GLAGOLITIC LETTER SLOVO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc14"},122901:{"value":"1E015","name":"COMBINING GLAGOLITIC LETTER TVRIDO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc15"},122902:{"value":"1E016","name":"COMBINING GLAGOLITIC LETTER UKU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc16"},122903:{"value":"1E017","name":"COMBINING GLAGOLITIC LETTER FRITU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc17"},122904:{"value":"1E018","name":"COMBINING GLAGOLITIC LETTER HERU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc18"},122907:{"value":"1E01B","name":"COMBINING GLAGOLITIC LETTER SHTA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc1b"},122908:{"value":"1E01C","name":"COMBINING GLAGOLITIC LETTER TSI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc1c"},122909:{"value":"1E01D","name":"COMBINING GLAGOLITIC LETTER CHRIVI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc1d"},122910:{"value":"1E01E","name":"COMBINING GLAGOLITIC LETTER SHA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc1e"},122911:{"value":"1E01F","name":"COMBINING GLAGOLITIC LETTER YERU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc1f"},122912:{"value":"1E020","name":"COMBINING GLAGOLITIC LETTER YERI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc20"},122913:{"value":"1E021","name":"COMBINING GLAGOLITIC LETTER YATI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc21"},122915:{"value":"1E023","name":"COMBINING GLAGOLITIC LETTER YU","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc23"},122916:{"value":"1E024","name":"COMBINING GLAGOLITIC LETTER SMALL YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc24"},122918:{"value":"1E026","name":"COMBINING GLAGOLITIC LETTER YO","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc26"},122919:{"value":"1E027","name":"COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc27"},122920:{"value":"1E028","name":"COMBINING GLAGOLITIC LETTER BIG YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc28"},122921:{"value":"1E029","name":"COMBINING GLAGOLITIC LETTER IOTATED BIG YUS","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc29"},122922:{"value":"1E02A","name":"COMBINING GLAGOLITIC LETTER FITA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udc2a"},123184:{"value":"1E130","name":"NYIAKENG PUACHUE HMONG TONE-B","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd30"},123185:{"value":"1E131","name":"NYIAKENG PUACHUE HMONG TONE-M","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd31"},123186:{"value":"1E132","name":"NYIAKENG PUACHUE HMONG TONE-J","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd32"},123187:{"value":"1E133","name":"NYIAKENG PUACHUE HMONG TONE-V","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd33"},123188:{"value":"1E134","name":"NYIAKENG PUACHUE HMONG TONE-S","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd34"},123189:{"value":"1E135","name":"NYIAKENG PUACHUE HMONG TONE-G","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd35"},123190:{"value":"1E136","name":"NYIAKENG PUACHUE HMONG TONE-D","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd36"},123566:{"value":"1E2AE","name":"TOTO SIGN RISING TONE","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeae"},123628:{"value":"1E2EC","name":"WANCHO TONE TUP","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeec"},123629:{"value":"1E2ED","name":"WANCHO TONE TUPNI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeed"},123630:{"value":"1E2EE","name":"WANCHO TONE KOI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeee"},123631:{"value":"1E2EF","name":"WANCHO TONE KOINI","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeef"},125136:{"value":"1E8D0","name":"MENDE KIKAKUI COMBINING NUMBER TEENS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd0"},125137:{"value":"1E8D1","name":"MENDE KIKAKUI COMBINING NUMBER TENS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd1"},125138:{"value":"1E8D2","name":"MENDE KIKAKUI COMBINING NUMBER HUNDREDS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd2"},125139:{"value":"1E8D3","name":"MENDE KIKAKUI COMBINING NUMBER THOUSANDS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd3"},125140:{"value":"1E8D4","name":"MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd4"},125141:{"value":"1E8D5","name":"MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd5"},125142:{"value":"1E8D6","name":"MENDE KIKAKUI COMBINING NUMBER MILLIONS","category":"Mn","class":"220","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcd6"},125252:{"value":"1E944","name":"ADLAM ALIF LENGTHENER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd44"},125253:{"value":"1E945","name":"ADLAM VOWEL LENGTHENER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd45"},125254:{"value":"1E946","name":"ADLAM GEMINATION MARK","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd46"},125255:{"value":"1E947","name":"ADLAM HAMZA","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd47"},125256:{"value":"1E948","name":"ADLAM CONSONANT MODIFIER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd48"},125257:{"value":"1E949","name":"ADLAM GEMINATE CONSONANT MODIFIER","category":"Mn","class":"230","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd49"},125258:{"value":"1E94A","name":"ADLAM NUKTA","category":"Mn","class":"7","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd4a"},917760:{"value":"E0100","name":"VARIATION SELECTOR-17","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd00"},917761:{"value":"E0101","name":"VARIATION SELECTOR-18","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd01"},917762:{"value":"E0102","name":"VARIATION SELECTOR-19","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd02"},917763:{"value":"E0103","name":"VARIATION SELECTOR-20","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd03"},917764:{"value":"E0104","name":"VARIATION SELECTOR-21","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd04"},917765:{"value":"E0105","name":"VARIATION SELECTOR-22","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd05"},917766:{"value":"E0106","name":"VARIATION SELECTOR-23","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd06"},917767:{"value":"E0107","name":"VARIATION SELECTOR-24","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd07"},917768:{"value":"E0108","name":"VARIATION SELECTOR-25","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd08"},917769:{"value":"E0109","name":"VARIATION SELECTOR-26","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd09"},917770:{"value":"E010A","name":"VARIATION SELECTOR-27","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd0a"},917771:{"value":"E010B","name":"VARIATION SELECTOR-28","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd0b"},917772:{"value":"E010C","name":"VARIATION SELECTOR-29","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd0c"},917773:{"value":"E010D","name":"VARIATION SELECTOR-30","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd0d"},917774:{"value":"E010E","name":"VARIATION SELECTOR-31","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd0e"},917775:{"value":"E010F","name":"VARIATION SELECTOR-32","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd0f"},917776:{"value":"E0110","name":"VARIATION SELECTOR-33","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd10"},917777:{"value":"E0111","name":"VARIATION SELECTOR-34","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd11"},917778:{"value":"E0112","name":"VARIATION SELECTOR-35","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd12"},917779:{"value":"E0113","name":"VARIATION SELECTOR-36","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd13"},917780:{"value":"E0114","name":"VARIATION SELECTOR-37","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd14"},917781:{"value":"E0115","name":"VARIATION SELECTOR-38","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd15"},917782:{"value":"E0116","name":"VARIATION SELECTOR-39","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd16"},917783:{"value":"E0117","name":"VARIATION SELECTOR-40","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd17"},917784:{"value":"E0118","name":"VARIATION SELECTOR-41","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd18"},917785:{"value":"E0119","name":"VARIATION SELECTOR-42","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd19"},917786:{"value":"E011A","name":"VARIATION SELECTOR-43","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd1a"},917787:{"value":"E011B","name":"VARIATION SELECTOR-44","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd1b"},917788:{"value":"E011C","name":"VARIATION SELECTOR-45","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd1c"},917789:{"value":"E011D","name":"VARIATION SELECTOR-46","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd1d"},917790:{"value":"E011E","name":"VARIATION SELECTOR-47","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd1e"},917791:{"value":"E011F","name":"VARIATION SELECTOR-48","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd1f"},917792:{"value":"E0120","name":"VARIATION SELECTOR-49","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd20"},917793:{"value":"E0121","name":"VARIATION SELECTOR-50","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd21"},917794:{"value":"E0122","name":"VARIATION SELECTOR-51","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd22"},917795:{"value":"E0123","name":"VARIATION SELECTOR-52","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd23"},917796:{"value":"E0124","name":"VARIATION SELECTOR-53","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd24"},917797:{"value":"E0125","name":"VARIATION SELECTOR-54","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd25"},917798:{"value":"E0126","name":"VARIATION SELECTOR-55","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd26"},917799:{"value":"E0127","name":"VARIATION SELECTOR-56","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd27"},917800:{"value":"E0128","name":"VARIATION SELECTOR-57","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd28"},917801:{"value":"E0129","name":"VARIATION SELECTOR-58","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd29"},917802:{"value":"E012A","name":"VARIATION SELECTOR-59","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd2a"},917803:{"value":"E012B","name":"VARIATION SELECTOR-60","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd2b"},917804:{"value":"E012C","name":"VARIATION SELECTOR-61","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd2c"},917805:{"value":"E012D","name":"VARIATION SELECTOR-62","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd2d"},917806:{"value":"E012E","name":"VARIATION SELECTOR-63","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd2e"},917807:{"value":"E012F","name":"VARIATION SELECTOR-64","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd2f"},917808:{"value":"E0130","name":"VARIATION SELECTOR-65","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd30"},917809:{"value":"E0131","name":"VARIATION SELECTOR-66","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd31"},917810:{"value":"E0132","name":"VARIATION SELECTOR-67","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd32"},917811:{"value":"E0133","name":"VARIATION SELECTOR-68","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd33"},917812:{"value":"E0134","name":"VARIATION SELECTOR-69","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd34"},917813:{"value":"E0135","name":"VARIATION SELECTOR-70","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd35"},917814:{"value":"E0136","name":"VARIATION SELECTOR-71","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd36"},917815:{"value":"E0137","name":"VARIATION SELECTOR-72","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd37"},917816:{"value":"E0138","name":"VARIATION SELECTOR-73","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd38"},917817:{"value":"E0139","name":"VARIATION SELECTOR-74","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd39"},917818:{"value":"E013A","name":"VARIATION SELECTOR-75","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd3a"},917819:{"value":"E013B","name":"VARIATION SELECTOR-76","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd3b"},917820:{"value":"E013C","name":"VARIATION SELECTOR-77","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd3c"},917821:{"value":"E013D","name":"VARIATION SELECTOR-78","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd3d"},917822:{"value":"E013E","name":"VARIATION SELECTOR-79","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd3e"},917823:{"value":"E013F","name":"VARIATION SELECTOR-80","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd3f"},917824:{"value":"E0140","name":"VARIATION SELECTOR-81","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd40"},917825:{"value":"E0141","name":"VARIATION SELECTOR-82","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd41"},917826:{"value":"E0142","name":"VARIATION SELECTOR-83","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd42"},917827:{"value":"E0143","name":"VARIATION SELECTOR-84","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd43"},917828:{"value":"E0144","name":"VARIATION SELECTOR-85","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd44"},917829:{"value":"E0145","name":"VARIATION SELECTOR-86","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd45"},917830:{"value":"E0146","name":"VARIATION SELECTOR-87","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd46"},917831:{"value":"E0147","name":"VARIATION SELECTOR-88","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd47"},917832:{"value":"E0148","name":"VARIATION SELECTOR-89","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd48"},917833:{"value":"E0149","name":"VARIATION SELECTOR-90","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd49"},917834:{"value":"E014A","name":"VARIATION SELECTOR-91","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd4a"},917835:{"value":"E014B","name":"VARIATION SELECTOR-92","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd4b"},917836:{"value":"E014C","name":"VARIATION SELECTOR-93","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd4c"},917837:{"value":"E014D","name":"VARIATION SELECTOR-94","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd4d"},917838:{"value":"E014E","name":"VARIATION SELECTOR-95","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd4e"},917839:{"value":"E014F","name":"VARIATION SELECTOR-96","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd4f"},917840:{"value":"E0150","name":"VARIATION SELECTOR-97","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd50"},917841:{"value":"E0151","name":"VARIATION SELECTOR-98","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd51"},917842:{"value":"E0152","name":"VARIATION SELECTOR-99","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd52"},917843:{"value":"E0153","name":"VARIATION SELECTOR-100","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd53"},917844:{"value":"E0154","name":"VARIATION SELECTOR-101","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd54"},917845:{"value":"E0155","name":"VARIATION SELECTOR-102","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd55"},917846:{"value":"E0156","name":"VARIATION SELECTOR-103","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd56"},917847:{"value":"E0157","name":"VARIATION SELECTOR-104","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd57"},917848:{"value":"E0158","name":"VARIATION SELECTOR-105","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd58"},917849:{"value":"E0159","name":"VARIATION SELECTOR-106","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd59"},917850:{"value":"E015A","name":"VARIATION SELECTOR-107","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd5a"},917851:{"value":"E015B","name":"VARIATION SELECTOR-108","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd5b"},917852:{"value":"E015C","name":"VARIATION SELECTOR-109","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd5c"},917853:{"value":"E015D","name":"VARIATION SELECTOR-110","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd5d"},917854:{"value":"E015E","name":"VARIATION SELECTOR-111","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd5e"},917855:{"value":"E015F","name":"VARIATION SELECTOR-112","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd5f"},917856:{"value":"E0160","name":"VARIATION SELECTOR-113","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd60"},917857:{"value":"E0161","name":"VARIATION SELECTOR-114","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd61"},917858:{"value":"E0162","name":"VARIATION SELECTOR-115","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd62"},917859:{"value":"E0163","name":"VARIATION SELECTOR-116","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd63"},917860:{"value":"E0164","name":"VARIATION SELECTOR-117","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd64"},917861:{"value":"E0165","name":"VARIATION SELECTOR-118","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd65"},917862:{"value":"E0166","name":"VARIATION SELECTOR-119","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd66"},917863:{"value":"E0167","name":"VARIATION SELECTOR-120","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd67"},917864:{"value":"E0168","name":"VARIATION SELECTOR-121","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd68"},917865:{"value":"E0169","name":"VARIATION SELECTOR-122","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd69"},917866:{"value":"E016A","name":"VARIATION SELECTOR-123","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd6a"},917867:{"value":"E016B","name":"VARIATION SELECTOR-124","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd6b"},917868:{"value":"E016C","name":"VARIATION SELECTOR-125","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd6c"},917869:{"value":"E016D","name":"VARIATION SELECTOR-126","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd6d"},917870:{"value":"E016E","name":"VARIATION SELECTOR-127","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd6e"},917871:{"value":"E016F","name":"VARIATION SELECTOR-128","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd6f"},917872:{"value":"E0170","name":"VARIATION SELECTOR-129","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd70"},917873:{"value":"E0171","name":"VARIATION SELECTOR-130","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd71"},917874:{"value":"E0172","name":"VARIATION SELECTOR-131","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd72"},917875:{"value":"E0173","name":"VARIATION SELECTOR-132","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd73"},917876:{"value":"E0174","name":"VARIATION SELECTOR-133","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd74"},917877:{"value":"E0175","name":"VARIATION SELECTOR-134","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd75"},917878:{"value":"E0176","name":"VARIATION SELECTOR-135","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd76"},917879:{"value":"E0177","name":"VARIATION SELECTOR-136","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd77"},917880:{"value":"E0178","name":"VARIATION SELECTOR-137","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd78"},917881:{"value":"E0179","name":"VARIATION SELECTOR-138","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd79"},917882:{"value":"E017A","name":"VARIATION SELECTOR-139","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd7a"},917883:{"value":"E017B","name":"VARIATION SELECTOR-140","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd7b"},917884:{"value":"E017C","name":"VARIATION SELECTOR-141","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd7c"},917885:{"value":"E017D","name":"VARIATION SELECTOR-142","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd7d"},917886:{"value":"E017E","name":"VARIATION SELECTOR-143","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd7e"},917887:{"value":"E017F","name":"VARIATION SELECTOR-144","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd7f"},917888:{"value":"E0180","name":"VARIATION SELECTOR-145","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd80"},917889:{"value":"E0181","name":"VARIATION SELECTOR-146","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd81"},917890:{"value":"E0182","name":"VARIATION SELECTOR-147","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd82"},917891:{"value":"E0183","name":"VARIATION SELECTOR-148","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd83"},917892:{"value":"E0184","name":"VARIATION SELECTOR-149","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd84"},917893:{"value":"E0185","name":"VARIATION SELECTOR-150","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd85"},917894:{"value":"E0186","name":"VARIATION SELECTOR-151","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd86"},917895:{"value":"E0187","name":"VARIATION SELECTOR-152","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd87"},917896:{"value":"E0188","name":"VARIATION SELECTOR-153","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd88"},917897:{"value":"E0189","name":"VARIATION SELECTOR-154","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd89"},917898:{"value":"E018A","name":"VARIATION SELECTOR-155","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd8a"},917899:{"value":"E018B","name":"VARIATION SELECTOR-156","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd8b"},917900:{"value":"E018C","name":"VARIATION SELECTOR-157","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd8c"},917901:{"value":"E018D","name":"VARIATION SELECTOR-158","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd8d"},917902:{"value":"E018E","name":"VARIATION SELECTOR-159","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd8e"},917903:{"value":"E018F","name":"VARIATION SELECTOR-160","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd8f"},917904:{"value":"E0190","name":"VARIATION SELECTOR-161","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd90"},917905:{"value":"E0191","name":"VARIATION SELECTOR-162","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd91"},917906:{"value":"E0192","name":"VARIATION SELECTOR-163","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd92"},917907:{"value":"E0193","name":"VARIATION SELECTOR-164","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd93"},917908:{"value":"E0194","name":"VARIATION SELECTOR-165","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd94"},917909:{"value":"E0195","name":"VARIATION SELECTOR-166","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd95"},917910:{"value":"E0196","name":"VARIATION SELECTOR-167","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd96"},917911:{"value":"E0197","name":"VARIATION SELECTOR-168","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd97"},917912:{"value":"E0198","name":"VARIATION SELECTOR-169","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd98"},917913:{"value":"E0199","name":"VARIATION SELECTOR-170","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd99"},917914:{"value":"E019A","name":"VARIATION SELECTOR-171","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd9a"},917915:{"value":"E019B","name":"VARIATION SELECTOR-172","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd9b"},917916:{"value":"E019C","name":"VARIATION SELECTOR-173","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd9c"},917917:{"value":"E019D","name":"VARIATION SELECTOR-174","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd9d"},917918:{"value":"E019E","name":"VARIATION SELECTOR-175","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd9e"},917919:{"value":"E019F","name":"VARIATION SELECTOR-176","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udd9f"},917920:{"value":"E01A0","name":"VARIATION SELECTOR-177","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda0"},917921:{"value":"E01A1","name":"VARIATION SELECTOR-178","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda1"},917922:{"value":"E01A2","name":"VARIATION SELECTOR-179","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda2"},917923:{"value":"E01A3","name":"VARIATION SELECTOR-180","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda3"},917924:{"value":"E01A4","name":"VARIATION SELECTOR-181","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda4"},917925:{"value":"E01A5","name":"VARIATION SELECTOR-182","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda5"},917926:{"value":"E01A6","name":"VARIATION SELECTOR-183","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda6"},917927:{"value":"E01A7","name":"VARIATION SELECTOR-184","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda7"},917928:{"value":"E01A8","name":"VARIATION SELECTOR-185","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda8"},917929:{"value":"E01A9","name":"VARIATION SELECTOR-186","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udda9"},917930:{"value":"E01AA","name":"VARIATION SELECTOR-187","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddaa"},917931:{"value":"E01AB","name":"VARIATION SELECTOR-188","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddab"},917932:{"value":"E01AC","name":"VARIATION SELECTOR-189","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddac"},917933:{"value":"E01AD","name":"VARIATION SELECTOR-190","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddad"},917934:{"value":"E01AE","name":"VARIATION SELECTOR-191","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddae"},917935:{"value":"E01AF","name":"VARIATION SELECTOR-192","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddaf"},917936:{"value":"E01B0","name":"VARIATION SELECTOR-193","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb0"},917937:{"value":"E01B1","name":"VARIATION SELECTOR-194","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb1"},917938:{"value":"E01B2","name":"VARIATION SELECTOR-195","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb2"},917939:{"value":"E01B3","name":"VARIATION SELECTOR-196","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb3"},917940:{"value":"E01B4","name":"VARIATION SELECTOR-197","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb4"},917941:{"value":"E01B5","name":"VARIATION SELECTOR-198","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb5"},917942:{"value":"E01B6","name":"VARIATION SELECTOR-199","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb6"},917943:{"value":"E01B7","name":"VARIATION SELECTOR-200","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb7"},917944:{"value":"E01B8","name":"VARIATION SELECTOR-201","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb8"},917945:{"value":"E01B9","name":"VARIATION SELECTOR-202","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddb9"},917946:{"value":"E01BA","name":"VARIATION SELECTOR-203","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddba"},917947:{"value":"E01BB","name":"VARIATION SELECTOR-204","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddbb"},917948:{"value":"E01BC","name":"VARIATION SELECTOR-205","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddbc"},917949:{"value":"E01BD","name":"VARIATION SELECTOR-206","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddbd"},917950:{"value":"E01BE","name":"VARIATION SELECTOR-207","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddbe"},917951:{"value":"E01BF","name":"VARIATION SELECTOR-208","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddbf"},917952:{"value":"E01C0","name":"VARIATION SELECTOR-209","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc0"},917953:{"value":"E01C1","name":"VARIATION SELECTOR-210","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc1"},917954:{"value":"E01C2","name":"VARIATION SELECTOR-211","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc2"},917955:{"value":"E01C3","name":"VARIATION SELECTOR-212","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc3"},917956:{"value":"E01C4","name":"VARIATION SELECTOR-213","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc4"},917957:{"value":"E01C5","name":"VARIATION SELECTOR-214","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc5"},917958:{"value":"E01C6","name":"VARIATION SELECTOR-215","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc6"},917959:{"value":"E01C7","name":"VARIATION SELECTOR-216","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc7"},917960:{"value":"E01C8","name":"VARIATION SELECTOR-217","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc8"},917961:{"value":"E01C9","name":"VARIATION SELECTOR-218","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddc9"},917962:{"value":"E01CA","name":"VARIATION SELECTOR-219","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddca"},917963:{"value":"E01CB","name":"VARIATION SELECTOR-220","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddcb"},917964:{"value":"E01CC","name":"VARIATION SELECTOR-221","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddcc"},917965:{"value":"E01CD","name":"VARIATION SELECTOR-222","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddcd"},917966:{"value":"E01CE","name":"VARIATION SELECTOR-223","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddce"},917967:{"value":"E01CF","name":"VARIATION SELECTOR-224","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddcf"},917968:{"value":"E01D0","name":"VARIATION SELECTOR-225","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd0"},917969:{"value":"E01D1","name":"VARIATION SELECTOR-226","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd1"},917970:{"value":"E01D2","name":"VARIATION SELECTOR-227","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd2"},917971:{"value":"E01D3","name":"VARIATION SELECTOR-228","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd3"},917972:{"value":"E01D4","name":"VARIATION SELECTOR-229","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd4"},917973:{"value":"E01D5","name":"VARIATION SELECTOR-230","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd5"},917974:{"value":"E01D6","name":"VARIATION SELECTOR-231","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd6"},917975:{"value":"E01D7","name":"VARIATION SELECTOR-232","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd7"},917976:{"value":"E01D8","name":"VARIATION SELECTOR-233","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd8"},917977:{"value":"E01D9","name":"VARIATION SELECTOR-234","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddd9"},917978:{"value":"E01DA","name":"VARIATION SELECTOR-235","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddda"},917979:{"value":"E01DB","name":"VARIATION SELECTOR-236","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udddb"},917980:{"value":"E01DC","name":"VARIATION SELECTOR-237","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udddc"},917981:{"value":"E01DD","name":"VARIATION SELECTOR-238","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udddd"},917982:{"value":"E01DE","name":"VARIATION SELECTOR-239","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddde"},917983:{"value":"E01DF","name":"VARIATION SELECTOR-240","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udddf"},917984:{"value":"E01E0","name":"VARIATION SELECTOR-241","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde0"},917985:{"value":"E01E1","name":"VARIATION SELECTOR-242","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde1"},917986:{"value":"E01E2","name":"VARIATION SELECTOR-243","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde2"},917987:{"value":"E01E3","name":"VARIATION SELECTOR-244","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde3"},917988:{"value":"E01E4","name":"VARIATION SELECTOR-245","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde4"},917989:{"value":"E01E5","name":"VARIATION SELECTOR-246","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde5"},917990:{"value":"E01E6","name":"VARIATION SELECTOR-247","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde6"},917991:{"value":"E01E7","name":"VARIATION SELECTOR-248","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde7"},917992:{"value":"E01E8","name":"VARIATION SELECTOR-249","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde8"},917993:{"value":"E01E9","name":"VARIATION SELECTOR-250","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udde9"},917994:{"value":"E01EA","name":"VARIATION SELECTOR-251","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddea"},917995:{"value":"E01EB","name":"VARIATION SELECTOR-252","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddeb"},917996:{"value":"E01EC","name":"VARIATION SELECTOR-253","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddec"},917997:{"value":"E01ED","name":"VARIATION SELECTOR-254","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\udded"},917998:{"value":"E01EE","name":"VARIATION SELECTOR-255","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddee"},917999:{"value":"E01EF","name":"VARIATION SELECTOR-256","category":"Mn","class":"0","bidirectional_category":"NSM","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\udb40\uddef"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Nd.js b/node_modules/unicode/category/Nd.js new file mode 100644 index 000000000..5312c1218 --- /dev/null +++ b/node_modules/unicode/category/Nd.js @@ -0,0 +1 @@ +module.exports={48:{"value":"0030","name":"DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x30"},49:{"value":"0031","name":"DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x31"},50:{"value":"0032","name":"DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x32"},51:{"value":"0033","name":"DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x33"},52:{"value":"0034","name":"DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x34"},53:{"value":"0035","name":"DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x35"},54:{"value":"0036","name":"DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x36"},55:{"value":"0037","name":"DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x37"},56:{"value":"0038","name":"DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x38"},57:{"value":"0039","name":"DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x39"},1632:{"value":"0660","name":"ARABIC-INDIC DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0660"},1633:{"value":"0661","name":"ARABIC-INDIC DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0661"},1634:{"value":"0662","name":"ARABIC-INDIC DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0662"},1635:{"value":"0663","name":"ARABIC-INDIC DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0663"},1636:{"value":"0664","name":"ARABIC-INDIC DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0664"},1637:{"value":"0665","name":"ARABIC-INDIC DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0665"},1638:{"value":"0666","name":"ARABIC-INDIC DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0666"},1639:{"value":"0667","name":"ARABIC-INDIC DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0667"},1640:{"value":"0668","name":"ARABIC-INDIC DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0668"},1641:{"value":"0669","name":"ARABIC-INDIC DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0669"},1776:{"value":"06F0","name":"EXTENDED ARABIC-INDIC DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT ZERO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F0"},1777:{"value":"06F1","name":"EXTENDED ARABIC-INDIC DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F1"},1778:{"value":"06F2","name":"EXTENDED ARABIC-INDIC DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F2"},1779:{"value":"06F3","name":"EXTENDED ARABIC-INDIC DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F3"},1780:{"value":"06F4","name":"EXTENDED ARABIC-INDIC DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F4"},1781:{"value":"06F5","name":"EXTENDED ARABIC-INDIC DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT FIVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F5"},1782:{"value":"06F6","name":"EXTENDED ARABIC-INDIC DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT SIX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F6"},1783:{"value":"06F7","name":"EXTENDED ARABIC-INDIC DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT SEVEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F7"},1784:{"value":"06F8","name":"EXTENDED ARABIC-INDIC DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT EIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F8"},1785:{"value":"06F9","name":"EXTENDED ARABIC-INDIC DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"EASTERN ARABIC-INDIC DIGIT NINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06F9"},1984:{"value":"07C0","name":"NKO DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C0"},1985:{"value":"07C1","name":"NKO DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C1"},1986:{"value":"07C2","name":"NKO DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C2"},1987:{"value":"07C3","name":"NKO DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C3"},1988:{"value":"07C4","name":"NKO DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C4"},1989:{"value":"07C5","name":"NKO DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C5"},1990:{"value":"07C6","name":"NKO DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C6"},1991:{"value":"07C7","name":"NKO DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C7"},1992:{"value":"07C8","name":"NKO DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C8"},1993:{"value":"07C9","name":"NKO DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07C9"},2406:{"value":"0966","name":"DEVANAGARI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0966"},2407:{"value":"0967","name":"DEVANAGARI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0967"},2408:{"value":"0968","name":"DEVANAGARI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0968"},2409:{"value":"0969","name":"DEVANAGARI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0969"},2410:{"value":"096A","name":"DEVANAGARI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u096A"},2411:{"value":"096B","name":"DEVANAGARI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u096B"},2412:{"value":"096C","name":"DEVANAGARI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u096C"},2413:{"value":"096D","name":"DEVANAGARI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u096D"},2414:{"value":"096E","name":"DEVANAGARI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u096E"},2415:{"value":"096F","name":"DEVANAGARI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u096F"},2534:{"value":"09E6","name":"BENGALI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E6"},2535:{"value":"09E7","name":"BENGALI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E7"},2536:{"value":"09E8","name":"BENGALI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E8"},2537:{"value":"09E9","name":"BENGALI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09E9"},2538:{"value":"09EA","name":"BENGALI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09EA"},2539:{"value":"09EB","name":"BENGALI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09EB"},2540:{"value":"09EC","name":"BENGALI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09EC"},2541:{"value":"09ED","name":"BENGALI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09ED"},2542:{"value":"09EE","name":"BENGALI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09EE"},2543:{"value":"09EF","name":"BENGALI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09EF"},2662:{"value":"0A66","name":"GURMUKHI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A66"},2663:{"value":"0A67","name":"GURMUKHI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A67"},2664:{"value":"0A68","name":"GURMUKHI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A68"},2665:{"value":"0A69","name":"GURMUKHI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A69"},2666:{"value":"0A6A","name":"GURMUKHI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A6A"},2667:{"value":"0A6B","name":"GURMUKHI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A6B"},2668:{"value":"0A6C","name":"GURMUKHI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A6C"},2669:{"value":"0A6D","name":"GURMUKHI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A6D"},2670:{"value":"0A6E","name":"GURMUKHI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A6E"},2671:{"value":"0A6F","name":"GURMUKHI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A6F"},2790:{"value":"0AE6","name":"GUJARATI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE6"},2791:{"value":"0AE7","name":"GUJARATI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE7"},2792:{"value":"0AE8","name":"GUJARATI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE8"},2793:{"value":"0AE9","name":"GUJARATI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AE9"},2794:{"value":"0AEA","name":"GUJARATI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AEA"},2795:{"value":"0AEB","name":"GUJARATI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AEB"},2796:{"value":"0AEC","name":"GUJARATI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AEC"},2797:{"value":"0AED","name":"GUJARATI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AED"},2798:{"value":"0AEE","name":"GUJARATI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AEE"},2799:{"value":"0AEF","name":"GUJARATI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AEF"},2918:{"value":"0B66","name":"ORIYA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B66"},2919:{"value":"0B67","name":"ORIYA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B67"},2920:{"value":"0B68","name":"ORIYA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B68"},2921:{"value":"0B69","name":"ORIYA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B69"},2922:{"value":"0B6A","name":"ORIYA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B6A"},2923:{"value":"0B6B","name":"ORIYA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B6B"},2924:{"value":"0B6C","name":"ORIYA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B6C"},2925:{"value":"0B6D","name":"ORIYA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B6D"},2926:{"value":"0B6E","name":"ORIYA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B6E"},2927:{"value":"0B6F","name":"ORIYA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B6F"},3046:{"value":"0BE6","name":"TAMIL DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BE6"},3047:{"value":"0BE7","name":"TAMIL DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BE7"},3048:{"value":"0BE8","name":"TAMIL DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BE8"},3049:{"value":"0BE9","name":"TAMIL DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BE9"},3050:{"value":"0BEA","name":"TAMIL DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BEA"},3051:{"value":"0BEB","name":"TAMIL DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BEB"},3052:{"value":"0BEC","name":"TAMIL DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BEC"},3053:{"value":"0BED","name":"TAMIL DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BED"},3054:{"value":"0BEE","name":"TAMIL DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BEE"},3055:{"value":"0BEF","name":"TAMIL DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BEF"},3174:{"value":"0C66","name":"TELUGU DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C66"},3175:{"value":"0C67","name":"TELUGU DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C67"},3176:{"value":"0C68","name":"TELUGU DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C68"},3177:{"value":"0C69","name":"TELUGU DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C69"},3178:{"value":"0C6A","name":"TELUGU DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C6A"},3179:{"value":"0C6B","name":"TELUGU DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C6B"},3180:{"value":"0C6C","name":"TELUGU DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C6C"},3181:{"value":"0C6D","name":"TELUGU DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C6D"},3182:{"value":"0C6E","name":"TELUGU DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C6E"},3183:{"value":"0C6F","name":"TELUGU DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C6F"},3302:{"value":"0CE6","name":"KANNADA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE6"},3303:{"value":"0CE7","name":"KANNADA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE7"},3304:{"value":"0CE8","name":"KANNADA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE8"},3305:{"value":"0CE9","name":"KANNADA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CE9"},3306:{"value":"0CEA","name":"KANNADA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CEA"},3307:{"value":"0CEB","name":"KANNADA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CEB"},3308:{"value":"0CEC","name":"KANNADA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CEC"},3309:{"value":"0CED","name":"KANNADA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CED"},3310:{"value":"0CEE","name":"KANNADA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CEE"},3311:{"value":"0CEF","name":"KANNADA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0CEF"},3430:{"value":"0D66","name":"MALAYALAM DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D66"},3431:{"value":"0D67","name":"MALAYALAM DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D67"},3432:{"value":"0D68","name":"MALAYALAM DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D68"},3433:{"value":"0D69","name":"MALAYALAM DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D69"},3434:{"value":"0D6A","name":"MALAYALAM DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D6A"},3435:{"value":"0D6B","name":"MALAYALAM DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D6B"},3436:{"value":"0D6C","name":"MALAYALAM DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D6C"},3437:{"value":"0D6D","name":"MALAYALAM DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D6D"},3438:{"value":"0D6E","name":"MALAYALAM DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D6E"},3439:{"value":"0D6F","name":"MALAYALAM DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D6F"},3558:{"value":"0DE6","name":"SINHALA LITH DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DE6"},3559:{"value":"0DE7","name":"SINHALA LITH DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DE7"},3560:{"value":"0DE8","name":"SINHALA LITH DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DE8"},3561:{"value":"0DE9","name":"SINHALA LITH DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DE9"},3562:{"value":"0DEA","name":"SINHALA LITH DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DEA"},3563:{"value":"0DEB","name":"SINHALA LITH DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DEB"},3564:{"value":"0DEC","name":"SINHALA LITH DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DEC"},3565:{"value":"0DED","name":"SINHALA LITH DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DED"},3566:{"value":"0DEE","name":"SINHALA LITH DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DEE"},3567:{"value":"0DEF","name":"SINHALA LITH DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DEF"},3664:{"value":"0E50","name":"THAI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E50"},3665:{"value":"0E51","name":"THAI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E51"},3666:{"value":"0E52","name":"THAI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E52"},3667:{"value":"0E53","name":"THAI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E53"},3668:{"value":"0E54","name":"THAI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E54"},3669:{"value":"0E55","name":"THAI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E55"},3670:{"value":"0E56","name":"THAI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E56"},3671:{"value":"0E57","name":"THAI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E57"},3672:{"value":"0E58","name":"THAI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E58"},3673:{"value":"0E59","name":"THAI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E59"},3792:{"value":"0ED0","name":"LAO DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED0"},3793:{"value":"0ED1","name":"LAO DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED1"},3794:{"value":"0ED2","name":"LAO DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED2"},3795:{"value":"0ED3","name":"LAO DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED3"},3796:{"value":"0ED4","name":"LAO DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED4"},3797:{"value":"0ED5","name":"LAO DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED5"},3798:{"value":"0ED6","name":"LAO DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED6"},3799:{"value":"0ED7","name":"LAO DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED7"},3800:{"value":"0ED8","name":"LAO DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED8"},3801:{"value":"0ED9","name":"LAO DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0ED9"},3872:{"value":"0F20","name":"TIBETAN DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F20"},3873:{"value":"0F21","name":"TIBETAN DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F21"},3874:{"value":"0F22","name":"TIBETAN DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F22"},3875:{"value":"0F23","name":"TIBETAN DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F23"},3876:{"value":"0F24","name":"TIBETAN DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F24"},3877:{"value":"0F25","name":"TIBETAN DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F25"},3878:{"value":"0F26","name":"TIBETAN DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F26"},3879:{"value":"0F27","name":"TIBETAN DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F27"},3880:{"value":"0F28","name":"TIBETAN DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F28"},3881:{"value":"0F29","name":"TIBETAN DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F29"},4160:{"value":"1040","name":"MYANMAR DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1040"},4161:{"value":"1041","name":"MYANMAR DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1041"},4162:{"value":"1042","name":"MYANMAR DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1042"},4163:{"value":"1043","name":"MYANMAR DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1043"},4164:{"value":"1044","name":"MYANMAR DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1044"},4165:{"value":"1045","name":"MYANMAR DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1045"},4166:{"value":"1046","name":"MYANMAR DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1046"},4167:{"value":"1047","name":"MYANMAR DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1047"},4168:{"value":"1048","name":"MYANMAR DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1048"},4169:{"value":"1049","name":"MYANMAR DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1049"},4240:{"value":"1090","name":"MYANMAR SHAN DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1090"},4241:{"value":"1091","name":"MYANMAR SHAN DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1091"},4242:{"value":"1092","name":"MYANMAR SHAN DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1092"},4243:{"value":"1093","name":"MYANMAR SHAN DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1093"},4244:{"value":"1094","name":"MYANMAR SHAN DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1094"},4245:{"value":"1095","name":"MYANMAR SHAN DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1095"},4246:{"value":"1096","name":"MYANMAR SHAN DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1096"},4247:{"value":"1097","name":"MYANMAR SHAN DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1097"},4248:{"value":"1098","name":"MYANMAR SHAN DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1098"},4249:{"value":"1099","name":"MYANMAR SHAN DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1099"},6112:{"value":"17E0","name":"KHMER DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E0"},6113:{"value":"17E1","name":"KHMER DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E1"},6114:{"value":"17E2","name":"KHMER DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E2"},6115:{"value":"17E3","name":"KHMER DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E3"},6116:{"value":"17E4","name":"KHMER DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E4"},6117:{"value":"17E5","name":"KHMER DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E5"},6118:{"value":"17E6","name":"KHMER DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E6"},6119:{"value":"17E7","name":"KHMER DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E7"},6120:{"value":"17E8","name":"KHMER DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E8"},6121:{"value":"17E9","name":"KHMER DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17E9"},6160:{"value":"1810","name":"MONGOLIAN DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1810"},6161:{"value":"1811","name":"MONGOLIAN DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1811"},6162:{"value":"1812","name":"MONGOLIAN DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1812"},6163:{"value":"1813","name":"MONGOLIAN DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1813"},6164:{"value":"1814","name":"MONGOLIAN DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1814"},6165:{"value":"1815","name":"MONGOLIAN DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1815"},6166:{"value":"1816","name":"MONGOLIAN DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1816"},6167:{"value":"1817","name":"MONGOLIAN DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1817"},6168:{"value":"1818","name":"MONGOLIAN DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1818"},6169:{"value":"1819","name":"MONGOLIAN DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1819"},6470:{"value":"1946","name":"LIMBU DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1946"},6471:{"value":"1947","name":"LIMBU DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1947"},6472:{"value":"1948","name":"LIMBU DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1948"},6473:{"value":"1949","name":"LIMBU DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1949"},6474:{"value":"194A","name":"LIMBU DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u194A"},6475:{"value":"194B","name":"LIMBU DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u194B"},6476:{"value":"194C","name":"LIMBU DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u194C"},6477:{"value":"194D","name":"LIMBU DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u194D"},6478:{"value":"194E","name":"LIMBU DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u194E"},6479:{"value":"194F","name":"LIMBU DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u194F"},6608:{"value":"19D0","name":"NEW TAI LUE DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D0"},6609:{"value":"19D1","name":"NEW TAI LUE DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D1"},6610:{"value":"19D2","name":"NEW TAI LUE DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D2"},6611:{"value":"19D3","name":"NEW TAI LUE DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D3"},6612:{"value":"19D4","name":"NEW TAI LUE DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D4"},6613:{"value":"19D5","name":"NEW TAI LUE DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D5"},6614:{"value":"19D6","name":"NEW TAI LUE DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D6"},6615:{"value":"19D7","name":"NEW TAI LUE DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D7"},6616:{"value":"19D8","name":"NEW TAI LUE DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D8"},6617:{"value":"19D9","name":"NEW TAI LUE DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19D9"},6784:{"value":"1A80","name":"TAI THAM HORA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A80"},6785:{"value":"1A81","name":"TAI THAM HORA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A81"},6786:{"value":"1A82","name":"TAI THAM HORA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A82"},6787:{"value":"1A83","name":"TAI THAM HORA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A83"},6788:{"value":"1A84","name":"TAI THAM HORA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A84"},6789:{"value":"1A85","name":"TAI THAM HORA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A85"},6790:{"value":"1A86","name":"TAI THAM HORA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A86"},6791:{"value":"1A87","name":"TAI THAM HORA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A87"},6792:{"value":"1A88","name":"TAI THAM HORA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A88"},6793:{"value":"1A89","name":"TAI THAM HORA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A89"},6800:{"value":"1A90","name":"TAI THAM THAM DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A90"},6801:{"value":"1A91","name":"TAI THAM THAM DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A91"},6802:{"value":"1A92","name":"TAI THAM THAM DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A92"},6803:{"value":"1A93","name":"TAI THAM THAM DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A93"},6804:{"value":"1A94","name":"TAI THAM THAM DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A94"},6805:{"value":"1A95","name":"TAI THAM THAM DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A95"},6806:{"value":"1A96","name":"TAI THAM THAM DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A96"},6807:{"value":"1A97","name":"TAI THAM THAM DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A97"},6808:{"value":"1A98","name":"TAI THAM THAM DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A98"},6809:{"value":"1A99","name":"TAI THAM THAM DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A99"},6992:{"value":"1B50","name":"BALINESE DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B50"},6993:{"value":"1B51","name":"BALINESE DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B51"},6994:{"value":"1B52","name":"BALINESE DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B52"},6995:{"value":"1B53","name":"BALINESE DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B53"},6996:{"value":"1B54","name":"BALINESE DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B54"},6997:{"value":"1B55","name":"BALINESE DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B55"},6998:{"value":"1B56","name":"BALINESE DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B56"},6999:{"value":"1B57","name":"BALINESE DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B57"},7000:{"value":"1B58","name":"BALINESE DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B58"},7001:{"value":"1B59","name":"BALINESE DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B59"},7088:{"value":"1BB0","name":"SUNDANESE DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB0"},7089:{"value":"1BB1","name":"SUNDANESE DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB1"},7090:{"value":"1BB2","name":"SUNDANESE DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB2"},7091:{"value":"1BB3","name":"SUNDANESE DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB3"},7092:{"value":"1BB4","name":"SUNDANESE DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB4"},7093:{"value":"1BB5","name":"SUNDANESE DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB5"},7094:{"value":"1BB6","name":"SUNDANESE DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB6"},7095:{"value":"1BB7","name":"SUNDANESE DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB7"},7096:{"value":"1BB8","name":"SUNDANESE DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB8"},7097:{"value":"1BB9","name":"SUNDANESE DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BB9"},7232:{"value":"1C40","name":"LEPCHA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C40"},7233:{"value":"1C41","name":"LEPCHA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C41"},7234:{"value":"1C42","name":"LEPCHA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C42"},7235:{"value":"1C43","name":"LEPCHA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C43"},7236:{"value":"1C44","name":"LEPCHA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C44"},7237:{"value":"1C45","name":"LEPCHA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C45"},7238:{"value":"1C46","name":"LEPCHA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C46"},7239:{"value":"1C47","name":"LEPCHA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C47"},7240:{"value":"1C48","name":"LEPCHA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C48"},7241:{"value":"1C49","name":"LEPCHA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C49"},7248:{"value":"1C50","name":"OL CHIKI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C50"},7249:{"value":"1C51","name":"OL CHIKI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C51"},7250:{"value":"1C52","name":"OL CHIKI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C52"},7251:{"value":"1C53","name":"OL CHIKI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C53"},7252:{"value":"1C54","name":"OL CHIKI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C54"},7253:{"value":"1C55","name":"OL CHIKI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C55"},7254:{"value":"1C56","name":"OL CHIKI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C56"},7255:{"value":"1C57","name":"OL CHIKI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C57"},7256:{"value":"1C58","name":"OL CHIKI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C58"},7257:{"value":"1C59","name":"OL CHIKI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C59"},42528:{"value":"A620","name":"VAI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA620"},42529:{"value":"A621","name":"VAI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA621"},42530:{"value":"A622","name":"VAI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA622"},42531:{"value":"A623","name":"VAI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA623"},42532:{"value":"A624","name":"VAI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA624"},42533:{"value":"A625","name":"VAI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA625"},42534:{"value":"A626","name":"VAI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA626"},42535:{"value":"A627","name":"VAI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA627"},42536:{"value":"A628","name":"VAI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA628"},42537:{"value":"A629","name":"VAI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA629"},43216:{"value":"A8D0","name":"SAURASHTRA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D0"},43217:{"value":"A8D1","name":"SAURASHTRA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D1"},43218:{"value":"A8D2","name":"SAURASHTRA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D2"},43219:{"value":"A8D3","name":"SAURASHTRA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D3"},43220:{"value":"A8D4","name":"SAURASHTRA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D4"},43221:{"value":"A8D5","name":"SAURASHTRA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D5"},43222:{"value":"A8D6","name":"SAURASHTRA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D6"},43223:{"value":"A8D7","name":"SAURASHTRA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D7"},43224:{"value":"A8D8","name":"SAURASHTRA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D8"},43225:{"value":"A8D9","name":"SAURASHTRA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8D9"},43264:{"value":"A900","name":"KAYAH LI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA900"},43265:{"value":"A901","name":"KAYAH LI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA901"},43266:{"value":"A902","name":"KAYAH LI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA902"},43267:{"value":"A903","name":"KAYAH LI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA903"},43268:{"value":"A904","name":"KAYAH LI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA904"},43269:{"value":"A905","name":"KAYAH LI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA905"},43270:{"value":"A906","name":"KAYAH LI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA906"},43271:{"value":"A907","name":"KAYAH LI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA907"},43272:{"value":"A908","name":"KAYAH LI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA908"},43273:{"value":"A909","name":"KAYAH LI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA909"},43472:{"value":"A9D0","name":"JAVANESE DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D0"},43473:{"value":"A9D1","name":"JAVANESE DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D1"},43474:{"value":"A9D2","name":"JAVANESE DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D2"},43475:{"value":"A9D3","name":"JAVANESE DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D3"},43476:{"value":"A9D4","name":"JAVANESE DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D4"},43477:{"value":"A9D5","name":"JAVANESE DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D5"},43478:{"value":"A9D6","name":"JAVANESE DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D6"},43479:{"value":"A9D7","name":"JAVANESE DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D7"},43480:{"value":"A9D8","name":"JAVANESE DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D8"},43481:{"value":"A9D9","name":"JAVANESE DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9D9"},43504:{"value":"A9F0","name":"MYANMAR TAI LAING DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F0"},43505:{"value":"A9F1","name":"MYANMAR TAI LAING DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F1"},43506:{"value":"A9F2","name":"MYANMAR TAI LAING DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F2"},43507:{"value":"A9F3","name":"MYANMAR TAI LAING DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F3"},43508:{"value":"A9F4","name":"MYANMAR TAI LAING DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F4"},43509:{"value":"A9F5","name":"MYANMAR TAI LAING DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F5"},43510:{"value":"A9F6","name":"MYANMAR TAI LAING DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F6"},43511:{"value":"A9F7","name":"MYANMAR TAI LAING DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F7"},43512:{"value":"A9F8","name":"MYANMAR TAI LAING DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F8"},43513:{"value":"A9F9","name":"MYANMAR TAI LAING DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9F9"},43600:{"value":"AA50","name":"CHAM DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA50"},43601:{"value":"AA51","name":"CHAM DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA51"},43602:{"value":"AA52","name":"CHAM DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA52"},43603:{"value":"AA53","name":"CHAM DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA53"},43604:{"value":"AA54","name":"CHAM DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA54"},43605:{"value":"AA55","name":"CHAM DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA55"},43606:{"value":"AA56","name":"CHAM DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA56"},43607:{"value":"AA57","name":"CHAM DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA57"},43608:{"value":"AA58","name":"CHAM DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA58"},43609:{"value":"AA59","name":"CHAM DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA59"},44016:{"value":"ABF0","name":"MEETEI MAYEK DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF0"},44017:{"value":"ABF1","name":"MEETEI MAYEK DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF1"},44018:{"value":"ABF2","name":"MEETEI MAYEK DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF2"},44019:{"value":"ABF3","name":"MEETEI MAYEK DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF3"},44020:{"value":"ABF4","name":"MEETEI MAYEK DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF4"},44021:{"value":"ABF5","name":"MEETEI MAYEK DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF5"},44022:{"value":"ABF6","name":"MEETEI MAYEK DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF6"},44023:{"value":"ABF7","name":"MEETEI MAYEK DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF7"},44024:{"value":"ABF8","name":"MEETEI MAYEK DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF8"},44025:{"value":"ABF9","name":"MEETEI MAYEK DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABF9"},65296:{"value":"FF10","name":"FULLWIDTH DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF10"},65297:{"value":"FF11","name":"FULLWIDTH DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF11"},65298:{"value":"FF12","name":"FULLWIDTH DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF12"},65299:{"value":"FF13","name":"FULLWIDTH DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF13"},65300:{"value":"FF14","name":"FULLWIDTH DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF14"},65301:{"value":"FF15","name":"FULLWIDTH DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF15"},65302:{"value":"FF16","name":"FULLWIDTH DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF16"},65303:{"value":"FF17","name":"FULLWIDTH DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF17"},65304:{"value":"FF18","name":"FULLWIDTH DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF18"},65305:{"value":"FF19","name":"FULLWIDTH DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF19"},66720:{"value":"104A0","name":"OSMANYA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca0"},66721:{"value":"104A1","name":"OSMANYA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca1"},66722:{"value":"104A2","name":"OSMANYA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca2"},66723:{"value":"104A3","name":"OSMANYA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca3"},66724:{"value":"104A4","name":"OSMANYA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca4"},66725:{"value":"104A5","name":"OSMANYA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca5"},66726:{"value":"104A6","name":"OSMANYA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca6"},66727:{"value":"104A7","name":"OSMANYA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca7"},66728:{"value":"104A8","name":"OSMANYA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca8"},66729:{"value":"104A9","name":"OSMANYA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udca9"},68912:{"value":"10D30","name":"HANIFI ROHINGYA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd30"},68913:{"value":"10D31","name":"HANIFI ROHINGYA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd31"},68914:{"value":"10D32","name":"HANIFI ROHINGYA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd32"},68915:{"value":"10D33","name":"HANIFI ROHINGYA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd33"},68916:{"value":"10D34","name":"HANIFI ROHINGYA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd34"},68917:{"value":"10D35","name":"HANIFI ROHINGYA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd35"},68918:{"value":"10D36","name":"HANIFI ROHINGYA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd36"},68919:{"value":"10D37","name":"HANIFI ROHINGYA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd37"},68920:{"value":"10D38","name":"HANIFI ROHINGYA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd38"},68921:{"value":"10D39","name":"HANIFI ROHINGYA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udd39"},69734:{"value":"11066","name":"BRAHMI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc66"},69735:{"value":"11067","name":"BRAHMI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc67"},69736:{"value":"11068","name":"BRAHMI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc68"},69737:{"value":"11069","name":"BRAHMI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc69"},69738:{"value":"1106A","name":"BRAHMI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc6a"},69739:{"value":"1106B","name":"BRAHMI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc6b"},69740:{"value":"1106C","name":"BRAHMI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc6c"},69741:{"value":"1106D","name":"BRAHMI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc6d"},69742:{"value":"1106E","name":"BRAHMI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc6e"},69743:{"value":"1106F","name":"BRAHMI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc6f"},69872:{"value":"110F0","name":"SORA SOMPENG DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf0"},69873:{"value":"110F1","name":"SORA SOMPENG DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf1"},69874:{"value":"110F2","name":"SORA SOMPENG DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf2"},69875:{"value":"110F3","name":"SORA SOMPENG DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf3"},69876:{"value":"110F4","name":"SORA SOMPENG DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf4"},69877:{"value":"110F5","name":"SORA SOMPENG DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf5"},69878:{"value":"110F6","name":"SORA SOMPENG DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf6"},69879:{"value":"110F7","name":"SORA SOMPENG DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf7"},69880:{"value":"110F8","name":"SORA SOMPENG DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf8"},69881:{"value":"110F9","name":"SORA SOMPENG DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcf9"},69942:{"value":"11136","name":"CHAKMA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd36"},69943:{"value":"11137","name":"CHAKMA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd37"},69944:{"value":"11138","name":"CHAKMA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd38"},69945:{"value":"11139","name":"CHAKMA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd39"},69946:{"value":"1113A","name":"CHAKMA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd3a"},69947:{"value":"1113B","name":"CHAKMA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd3b"},69948:{"value":"1113C","name":"CHAKMA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd3c"},69949:{"value":"1113D","name":"CHAKMA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd3d"},69950:{"value":"1113E","name":"CHAKMA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd3e"},69951:{"value":"1113F","name":"CHAKMA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd3f"},70096:{"value":"111D0","name":"SHARADA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd0"},70097:{"value":"111D1","name":"SHARADA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd1"},70098:{"value":"111D2","name":"SHARADA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd2"},70099:{"value":"111D3","name":"SHARADA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd3"},70100:{"value":"111D4","name":"SHARADA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd4"},70101:{"value":"111D5","name":"SHARADA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd5"},70102:{"value":"111D6","name":"SHARADA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd6"},70103:{"value":"111D7","name":"SHARADA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd7"},70104:{"value":"111D8","name":"SHARADA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd8"},70105:{"value":"111D9","name":"SHARADA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddd9"},70384:{"value":"112F0","name":"KHUDAWADI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef0"},70385:{"value":"112F1","name":"KHUDAWADI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef1"},70386:{"value":"112F2","name":"KHUDAWADI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef2"},70387:{"value":"112F3","name":"KHUDAWADI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef3"},70388:{"value":"112F4","name":"KHUDAWADI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef4"},70389:{"value":"112F5","name":"KHUDAWADI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef5"},70390:{"value":"112F6","name":"KHUDAWADI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef6"},70391:{"value":"112F7","name":"KHUDAWADI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef7"},70392:{"value":"112F8","name":"KHUDAWADI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef8"},70393:{"value":"112F9","name":"KHUDAWADI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udef9"},70736:{"value":"11450","name":"NEWA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc50"},70737:{"value":"11451","name":"NEWA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc51"},70738:{"value":"11452","name":"NEWA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc52"},70739:{"value":"11453","name":"NEWA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc53"},70740:{"value":"11454","name":"NEWA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc54"},70741:{"value":"11455","name":"NEWA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc55"},70742:{"value":"11456","name":"NEWA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc56"},70743:{"value":"11457","name":"NEWA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc57"},70744:{"value":"11458","name":"NEWA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc58"},70745:{"value":"11459","name":"NEWA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc59"},70864:{"value":"114D0","name":"TIRHUTA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd0"},70865:{"value":"114D1","name":"TIRHUTA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd1"},70866:{"value":"114D2","name":"TIRHUTA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd2"},70867:{"value":"114D3","name":"TIRHUTA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd3"},70868:{"value":"114D4","name":"TIRHUTA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd4"},70869:{"value":"114D5","name":"TIRHUTA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd5"},70870:{"value":"114D6","name":"TIRHUTA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd6"},70871:{"value":"114D7","name":"TIRHUTA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd7"},70872:{"value":"114D8","name":"TIRHUTA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd8"},70873:{"value":"114D9","name":"TIRHUTA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcd9"},71248:{"value":"11650","name":"MODI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude50"},71249:{"value":"11651","name":"MODI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude51"},71250:{"value":"11652","name":"MODI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude52"},71251:{"value":"11653","name":"MODI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude53"},71252:{"value":"11654","name":"MODI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude54"},71253:{"value":"11655","name":"MODI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude55"},71254:{"value":"11656","name":"MODI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude56"},71255:{"value":"11657","name":"MODI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude57"},71256:{"value":"11658","name":"MODI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude58"},71257:{"value":"11659","name":"MODI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude59"},71360:{"value":"116C0","name":"TAKRI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec0"},71361:{"value":"116C1","name":"TAKRI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec1"},71362:{"value":"116C2","name":"TAKRI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec2"},71363:{"value":"116C3","name":"TAKRI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec3"},71364:{"value":"116C4","name":"TAKRI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec4"},71365:{"value":"116C5","name":"TAKRI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec5"},71366:{"value":"116C6","name":"TAKRI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec6"},71367:{"value":"116C7","name":"TAKRI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec7"},71368:{"value":"116C8","name":"TAKRI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec8"},71369:{"value":"116C9","name":"TAKRI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udec9"},71472:{"value":"11730","name":"AHOM DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf30"},71473:{"value":"11731","name":"AHOM DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf31"},71474:{"value":"11732","name":"AHOM DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf32"},71475:{"value":"11733","name":"AHOM DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf33"},71476:{"value":"11734","name":"AHOM DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf34"},71477:{"value":"11735","name":"AHOM DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf35"},71478:{"value":"11736","name":"AHOM DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf36"},71479:{"value":"11737","name":"AHOM DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf37"},71480:{"value":"11738","name":"AHOM DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf38"},71481:{"value":"11739","name":"AHOM DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf39"},71904:{"value":"118E0","name":"WARANG CITI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce0"},71905:{"value":"118E1","name":"WARANG CITI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce1"},71906:{"value":"118E2","name":"WARANG CITI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce2"},71907:{"value":"118E3","name":"WARANG CITI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce3"},71908:{"value":"118E4","name":"WARANG CITI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce4"},71909:{"value":"118E5","name":"WARANG CITI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce5"},71910:{"value":"118E6","name":"WARANG CITI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce6"},71911:{"value":"118E7","name":"WARANG CITI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce7"},71912:{"value":"118E8","name":"WARANG CITI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce8"},71913:{"value":"118E9","name":"WARANG CITI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udce9"},72016:{"value":"11950","name":"DIVES AKURU DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd50"},72017:{"value":"11951","name":"DIVES AKURU DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd51"},72018:{"value":"11952","name":"DIVES AKURU DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd52"},72019:{"value":"11953","name":"DIVES AKURU DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd53"},72020:{"value":"11954","name":"DIVES AKURU DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd54"},72021:{"value":"11955","name":"DIVES AKURU DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd55"},72022:{"value":"11956","name":"DIVES AKURU DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd56"},72023:{"value":"11957","name":"DIVES AKURU DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd57"},72024:{"value":"11958","name":"DIVES AKURU DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd58"},72025:{"value":"11959","name":"DIVES AKURU DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd59"},72784:{"value":"11C50","name":"BHAIKSUKI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc50"},72785:{"value":"11C51","name":"BHAIKSUKI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc51"},72786:{"value":"11C52","name":"BHAIKSUKI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc52"},72787:{"value":"11C53","name":"BHAIKSUKI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc53"},72788:{"value":"11C54","name":"BHAIKSUKI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc54"},72789:{"value":"11C55","name":"BHAIKSUKI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc55"},72790:{"value":"11C56","name":"BHAIKSUKI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc56"},72791:{"value":"11C57","name":"BHAIKSUKI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc57"},72792:{"value":"11C58","name":"BHAIKSUKI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc58"},72793:{"value":"11C59","name":"BHAIKSUKI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc59"},73040:{"value":"11D50","name":"MASARAM GONDI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd50"},73041:{"value":"11D51","name":"MASARAM GONDI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd51"},73042:{"value":"11D52","name":"MASARAM GONDI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd52"},73043:{"value":"11D53","name":"MASARAM GONDI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd53"},73044:{"value":"11D54","name":"MASARAM GONDI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd54"},73045:{"value":"11D55","name":"MASARAM GONDI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd55"},73046:{"value":"11D56","name":"MASARAM GONDI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd56"},73047:{"value":"11D57","name":"MASARAM GONDI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd57"},73048:{"value":"11D58","name":"MASARAM GONDI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd58"},73049:{"value":"11D59","name":"MASARAM GONDI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udd59"},73120:{"value":"11DA0","name":"GUNJALA GONDI DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda0"},73121:{"value":"11DA1","name":"GUNJALA GONDI DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda1"},73122:{"value":"11DA2","name":"GUNJALA GONDI DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda2"},73123:{"value":"11DA3","name":"GUNJALA GONDI DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda3"},73124:{"value":"11DA4","name":"GUNJALA GONDI DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda4"},73125:{"value":"11DA5","name":"GUNJALA GONDI DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda5"},73126:{"value":"11DA6","name":"GUNJALA GONDI DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda6"},73127:{"value":"11DA7","name":"GUNJALA GONDI DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda7"},73128:{"value":"11DA8","name":"GUNJALA GONDI DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda8"},73129:{"value":"11DA9","name":"GUNJALA GONDI DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udda9"},92768:{"value":"16A60","name":"MRO DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude60"},92769:{"value":"16A61","name":"MRO DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude61"},92770:{"value":"16A62","name":"MRO DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude62"},92771:{"value":"16A63","name":"MRO DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude63"},92772:{"value":"16A64","name":"MRO DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude64"},92773:{"value":"16A65","name":"MRO DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude65"},92774:{"value":"16A66","name":"MRO DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude66"},92775:{"value":"16A67","name":"MRO DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude67"},92776:{"value":"16A68","name":"MRO DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude68"},92777:{"value":"16A69","name":"MRO DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude69"},92864:{"value":"16AC0","name":"TANGSA DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec0"},92865:{"value":"16AC1","name":"TANGSA DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec1"},92866:{"value":"16AC2","name":"TANGSA DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec2"},92867:{"value":"16AC3","name":"TANGSA DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec3"},92868:{"value":"16AC4","name":"TANGSA DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec4"},92869:{"value":"16AC5","name":"TANGSA DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec5"},92870:{"value":"16AC6","name":"TANGSA DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec6"},92871:{"value":"16AC7","name":"TANGSA DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec7"},92872:{"value":"16AC8","name":"TANGSA DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec8"},92873:{"value":"16AC9","name":"TANGSA DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udec9"},93008:{"value":"16B50","name":"PAHAWH HMONG DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf50"},93009:{"value":"16B51","name":"PAHAWH HMONG DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf51"},93010:{"value":"16B52","name":"PAHAWH HMONG DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf52"},93011:{"value":"16B53","name":"PAHAWH HMONG DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf53"},93012:{"value":"16B54","name":"PAHAWH HMONG DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf54"},93013:{"value":"16B55","name":"PAHAWH HMONG DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf55"},93014:{"value":"16B56","name":"PAHAWH HMONG DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf56"},93015:{"value":"16B57","name":"PAHAWH HMONG DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf57"},93016:{"value":"16B58","name":"PAHAWH HMONG DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf58"},93017:{"value":"16B59","name":"PAHAWH HMONG DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf59"},120782:{"value":"1D7CE","name":"MATHEMATICAL BOLD DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfce"},120783:{"value":"1D7CF","name":"MATHEMATICAL BOLD DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfcf"},120784:{"value":"1D7D0","name":"MATHEMATICAL BOLD DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd0"},120785:{"value":"1D7D1","name":"MATHEMATICAL BOLD DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd1"},120786:{"value":"1D7D2","name":"MATHEMATICAL BOLD DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd2"},120787:{"value":"1D7D3","name":"MATHEMATICAL BOLD DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd3"},120788:{"value":"1D7D4","name":"MATHEMATICAL BOLD DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd4"},120789:{"value":"1D7D5","name":"MATHEMATICAL BOLD DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd5"},120790:{"value":"1D7D6","name":"MATHEMATICAL BOLD DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd6"},120791:{"value":"1D7D7","name":"MATHEMATICAL BOLD DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd7"},120792:{"value":"1D7D8","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd8"},120793:{"value":"1D7D9","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfd9"},120794:{"value":"1D7DA","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfda"},120795:{"value":"1D7DB","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfdb"},120796:{"value":"1D7DC","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfdc"},120797:{"value":"1D7DD","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfdd"},120798:{"value":"1D7DE","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfde"},120799:{"value":"1D7DF","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfdf"},120800:{"value":"1D7E0","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe0"},120801:{"value":"1D7E1","name":"MATHEMATICAL DOUBLE-STRUCK DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe1"},120802:{"value":"1D7E2","name":"MATHEMATICAL SANS-SERIF DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe2"},120803:{"value":"1D7E3","name":"MATHEMATICAL SANS-SERIF DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe3"},120804:{"value":"1D7E4","name":"MATHEMATICAL SANS-SERIF DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe4"},120805:{"value":"1D7E5","name":"MATHEMATICAL SANS-SERIF DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe5"},120806:{"value":"1D7E6","name":"MATHEMATICAL SANS-SERIF DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe6"},120807:{"value":"1D7E7","name":"MATHEMATICAL SANS-SERIF DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe7"},120808:{"value":"1D7E8","name":"MATHEMATICAL SANS-SERIF DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe8"},120809:{"value":"1D7E9","name":"MATHEMATICAL SANS-SERIF DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfe9"},120810:{"value":"1D7EA","name":"MATHEMATICAL SANS-SERIF DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfea"},120811:{"value":"1D7EB","name":"MATHEMATICAL SANS-SERIF DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfeb"},120812:{"value":"1D7EC","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfec"},120813:{"value":"1D7ED","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfed"},120814:{"value":"1D7EE","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfee"},120815:{"value":"1D7EF","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfef"},120816:{"value":"1D7F0","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff0"},120817:{"value":"1D7F1","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff1"},120818:{"value":"1D7F2","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff2"},120819:{"value":"1D7F3","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff3"},120820:{"value":"1D7F4","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff4"},120821:{"value":"1D7F5","name":"MATHEMATICAL SANS-SERIF BOLD DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff5"},120822:{"value":"1D7F6","name":"MATHEMATICAL MONOSPACE DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff6"},120823:{"value":"1D7F7","name":"MATHEMATICAL MONOSPACE DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff7"},120824:{"value":"1D7F8","name":"MATHEMATICAL MONOSPACE DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff8"},120825:{"value":"1D7F9","name":"MATHEMATICAL MONOSPACE DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udff9"},120826:{"value":"1D7FA","name":"MATHEMATICAL MONOSPACE DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udffa"},120827:{"value":"1D7FB","name":"MATHEMATICAL MONOSPACE DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udffb"},120828:{"value":"1D7FC","name":"MATHEMATICAL MONOSPACE DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udffc"},120829:{"value":"1D7FD","name":"MATHEMATICAL MONOSPACE DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udffd"},120830:{"value":"1D7FE","name":"MATHEMATICAL MONOSPACE DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udffe"},120831:{"value":"1D7FF","name":"MATHEMATICAL MONOSPACE DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfff"},123200:{"value":"1E140","name":"NYIAKENG PUACHUE HMONG DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd40"},123201:{"value":"1E141","name":"NYIAKENG PUACHUE HMONG DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd41"},123202:{"value":"1E142","name":"NYIAKENG PUACHUE HMONG DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd42"},123203:{"value":"1E143","name":"NYIAKENG PUACHUE HMONG DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd43"},123204:{"value":"1E144","name":"NYIAKENG PUACHUE HMONG DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd44"},123205:{"value":"1E145","name":"NYIAKENG PUACHUE HMONG DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd45"},123206:{"value":"1E146","name":"NYIAKENG PUACHUE HMONG DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd46"},123207:{"value":"1E147","name":"NYIAKENG PUACHUE HMONG DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd47"},123208:{"value":"1E148","name":"NYIAKENG PUACHUE HMONG DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd48"},123209:{"value":"1E149","name":"NYIAKENG PUACHUE HMONG DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd49"},123632:{"value":"1E2F0","name":"WANCHO DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef0"},123633:{"value":"1E2F1","name":"WANCHO DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef1"},123634:{"value":"1E2F2","name":"WANCHO DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef2"},123635:{"value":"1E2F3","name":"WANCHO DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef3"},123636:{"value":"1E2F4","name":"WANCHO DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef4"},123637:{"value":"1E2F5","name":"WANCHO DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef5"},123638:{"value":"1E2F6","name":"WANCHO DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef6"},123639:{"value":"1E2F7","name":"WANCHO DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef7"},123640:{"value":"1E2F8","name":"WANCHO DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef8"},123641:{"value":"1E2F9","name":"WANCHO DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udef9"},125264:{"value":"1E950","name":"ADLAM DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd50"},125265:{"value":"1E951","name":"ADLAM DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd51"},125266:{"value":"1E952","name":"ADLAM DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd52"},125267:{"value":"1E953","name":"ADLAM DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd53"},125268:{"value":"1E954","name":"ADLAM DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd54"},125269:{"value":"1E955","name":"ADLAM DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd55"},125270:{"value":"1E956","name":"ADLAM DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd56"},125271:{"value":"1E957","name":"ADLAM DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd57"},125272:{"value":"1E958","name":"ADLAM DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd58"},125273:{"value":"1E959","name":"ADLAM DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd59"},130032:{"value":"1FBF0","name":"SEGMENTED DIGIT ZERO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"0","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff0"},130033:{"value":"1FBF1","name":"SEGMENTED DIGIT ONE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"1","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff1"},130034:{"value":"1FBF2","name":"SEGMENTED DIGIT TWO","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"2","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff2"},130035:{"value":"1FBF3","name":"SEGMENTED DIGIT THREE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"3","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff3"},130036:{"value":"1FBF4","name":"SEGMENTED DIGIT FOUR","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"4","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff4"},130037:{"value":"1FBF5","name":"SEGMENTED DIGIT FIVE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"5","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff5"},130038:{"value":"1FBF6","name":"SEGMENTED DIGIT SIX","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"6","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff6"},130039:{"value":"1FBF7","name":"SEGMENTED DIGIT SEVEN","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"7","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff7"},130040:{"value":"1FBF8","name":"SEGMENTED DIGIT EIGHT","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"8","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff8"},130041:{"value":"1FBF9","name":"SEGMENTED DIGIT NINE","category":"Nd","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"9","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udff9"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Nl.js b/node_modules/unicode/category/Nl.js new file mode 100644 index 000000000..e9507548e --- /dev/null +++ b/node_modules/unicode/category/Nl.js @@ -0,0 +1 @@ +module.exports={5870:{"value":"16EE","name":"RUNIC ARLAUG SYMBOL","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16EE"},5871:{"value":"16EF","name":"RUNIC TVIMADUR SYMBOL","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16EF"},5872:{"value":"16F0","name":"RUNIC BELGTHOR SYMBOL","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16F0"},8544:{"value":"2160","name":"ROMAN NUMERAL ONE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2170","titlecase_mapping":"","symbol":"\u2160"},8545:{"value":"2161","name":"ROMAN NUMERAL TWO","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0049 0049","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2171","titlecase_mapping":"","symbol":"\u2161"},8546:{"value":"2162","name":"ROMAN NUMERAL THREE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0049 0049 0049","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2172","titlecase_mapping":"","symbol":"\u2162"},8547:{"value":"2163","name":"ROMAN NUMERAL FOUR","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0049 0056","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2173","titlecase_mapping":"","symbol":"\u2163"},8548:{"value":"2164","name":"ROMAN NUMERAL FIVE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2174","titlecase_mapping":"","symbol":"\u2164"},8549:{"value":"2165","name":"ROMAN NUMERAL SIX","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0056 0049","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2175","titlecase_mapping":"","symbol":"\u2165"},8550:{"value":"2166","name":"ROMAN NUMERAL SEVEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0056 0049 0049","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2176","titlecase_mapping":"","symbol":"\u2166"},8551:{"value":"2167","name":"ROMAN NUMERAL EIGHT","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0056 0049 0049 0049","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2177","titlecase_mapping":"","symbol":"\u2167"},8552:{"value":"2168","name":"ROMAN NUMERAL NINE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0049 0058","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2178","titlecase_mapping":"","symbol":"\u2168"},8553:{"value":"2169","name":"ROMAN NUMERAL TEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"2179","titlecase_mapping":"","symbol":"\u2169"},8554:{"value":"216A","name":"ROMAN NUMERAL ELEVEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0058 0049","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"217A","titlecase_mapping":"","symbol":"\u216A"},8555:{"value":"216B","name":"ROMAN NUMERAL TWELVE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0058 0049 0049","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"217B","titlecase_mapping":"","symbol":"\u216B"},8556:{"value":"216C","name":"ROMAN NUMERAL FIFTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"217C","titlecase_mapping":"","symbol":"\u216C"},8557:{"value":"216D","name":"ROMAN NUMERAL ONE HUNDRED","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"217D","titlecase_mapping":"","symbol":"\u216D"},8558:{"value":"216E","name":"ROMAN NUMERAL FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"217E","titlecase_mapping":"","symbol":"\u216E"},8559:{"value":"216F","name":"ROMAN NUMERAL ONE THOUSAND","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"217F","titlecase_mapping":"","symbol":"\u216F"},8560:{"value":"2170","name":"SMALL ROMAN NUMERAL ONE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2160","lowercase_mapping":"","titlecase_mapping":"2160","symbol":"\u2170"},8561:{"value":"2171","name":"SMALL ROMAN NUMERAL TWO","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0069 0069","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2161","lowercase_mapping":"","titlecase_mapping":"2161","symbol":"\u2171"},8562:{"value":"2172","name":"SMALL ROMAN NUMERAL THREE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0069 0069 0069","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2162","lowercase_mapping":"","titlecase_mapping":"2162","symbol":"\u2172"},8563:{"value":"2173","name":"SMALL ROMAN NUMERAL FOUR","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0069 0076","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2163","lowercase_mapping":"","titlecase_mapping":"2163","symbol":"\u2173"},8564:{"value":"2174","name":"SMALL ROMAN NUMERAL FIVE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2164","lowercase_mapping":"","titlecase_mapping":"2164","symbol":"\u2174"},8565:{"value":"2175","name":"SMALL ROMAN NUMERAL SIX","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0076 0069","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2165","lowercase_mapping":"","titlecase_mapping":"2165","symbol":"\u2175"},8566:{"value":"2176","name":"SMALL ROMAN NUMERAL SEVEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0076 0069 0069","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2166","lowercase_mapping":"","titlecase_mapping":"2166","symbol":"\u2176"},8567:{"value":"2177","name":"SMALL ROMAN NUMERAL EIGHT","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0076 0069 0069 0069","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2167","lowercase_mapping":"","titlecase_mapping":"2167","symbol":"\u2177"},8568:{"value":"2178","name":"SMALL ROMAN NUMERAL NINE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0069 0078","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2168","lowercase_mapping":"","titlecase_mapping":"2168","symbol":"\u2178"},8569:{"value":"2179","name":"SMALL ROMAN NUMERAL TEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"2169","lowercase_mapping":"","titlecase_mapping":"2169","symbol":"\u2179"},8570:{"value":"217A","name":"SMALL ROMAN NUMERAL ELEVEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0078 0069","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"216A","lowercase_mapping":"","titlecase_mapping":"216A","symbol":"\u217A"},8571:{"value":"217B","name":"SMALL ROMAN NUMERAL TWELVE","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0078 0069 0069","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"216B","lowercase_mapping":"","titlecase_mapping":"216B","symbol":"\u217B"},8572:{"value":"217C","name":"SMALL ROMAN NUMERAL FIFTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"216C","lowercase_mapping":"","titlecase_mapping":"216C","symbol":"\u217C"},8573:{"value":"217D","name":"SMALL ROMAN NUMERAL ONE HUNDRED","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"216D","lowercase_mapping":"","titlecase_mapping":"216D","symbol":"\u217D"},8574:{"value":"217E","name":"SMALL ROMAN NUMERAL FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"216E","lowercase_mapping":"","titlecase_mapping":"216E","symbol":"\u217E"},8575:{"value":"217F","name":"SMALL ROMAN NUMERAL ONE THOUSAND","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"216F","lowercase_mapping":"","titlecase_mapping":"216F","symbol":"\u217F"},8576:{"value":"2180","name":"ROMAN NUMERAL ONE THOUSAND C D","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2180"},8577:{"value":"2181","name":"ROMAN NUMERAL FIVE THOUSAND","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2181"},8578:{"value":"2182","name":"ROMAN NUMERAL TEN THOUSAND","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2182"},8581:{"value":"2185","name":"ROMAN NUMERAL SIX LATE FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2185"},8582:{"value":"2186","name":"ROMAN NUMERAL FIFTY EARLY FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2186"},8583:{"value":"2187","name":"ROMAN NUMERAL FIFTY THOUSAND","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2187"},8584:{"value":"2188","name":"ROMAN NUMERAL ONE HUNDRED THOUSAND","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2188"},12295:{"value":"3007","name":"IDEOGRAPHIC NUMBER ZERO","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3007"},12321:{"value":"3021","name":"HANGZHOU NUMERAL ONE","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3021"},12322:{"value":"3022","name":"HANGZHOU NUMERAL TWO","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3022"},12323:{"value":"3023","name":"HANGZHOU NUMERAL THREE","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3023"},12324:{"value":"3024","name":"HANGZHOU NUMERAL FOUR","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3024"},12325:{"value":"3025","name":"HANGZHOU NUMERAL FIVE","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3025"},12326:{"value":"3026","name":"HANGZHOU NUMERAL SIX","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3026"},12327:{"value":"3027","name":"HANGZHOU NUMERAL SEVEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3027"},12328:{"value":"3028","name":"HANGZHOU NUMERAL EIGHT","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3028"},12329:{"value":"3029","name":"HANGZHOU NUMERAL NINE","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3029"},12344:{"value":"3038","name":"HANGZHOU NUMERAL TEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 5341","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3038"},12345:{"value":"3039","name":"HANGZHOU NUMERAL TWENTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 5344","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3039"},12346:{"value":"303A","name":"HANGZHOU NUMERAL THIRTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":" 5345","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u303A"},42726:{"value":"A6E6","name":"BAMUM LETTER MO","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E6"},42727:{"value":"A6E7","name":"BAMUM LETTER MBAA","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E7"},42728:{"value":"A6E8","name":"BAMUM LETTER TET","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E8"},42729:{"value":"A6E9","name":"BAMUM LETTER KPA","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6E9"},42730:{"value":"A6EA","name":"BAMUM LETTER TEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6EA"},42731:{"value":"A6EB","name":"BAMUM LETTER NTUU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6EB"},42732:{"value":"A6EC","name":"BAMUM LETTER SAMBA","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6EC"},42733:{"value":"A6ED","name":"BAMUM LETTER FAAMAE","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6ED"},42734:{"value":"A6EE","name":"BAMUM LETTER KOVUU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6EE"},42735:{"value":"A6EF","name":"BAMUM LETTER KOGHOM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6EF"},65856:{"value":"10140","name":"GREEK ACROPHONIC ATTIC ONE QUARTER","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd40"},65857:{"value":"10141","name":"GREEK ACROPHONIC ATTIC ONE HALF","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd41"},65858:{"value":"10142","name":"GREEK ACROPHONIC ATTIC ONE DRACHMA","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd42"},65859:{"value":"10143","name":"GREEK ACROPHONIC ATTIC FIVE","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd43"},65860:{"value":"10144","name":"GREEK ACROPHONIC ATTIC FIFTY","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd44"},65861:{"value":"10145","name":"GREEK ACROPHONIC ATTIC FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd45"},65862:{"value":"10146","name":"GREEK ACROPHONIC ATTIC FIVE THOUSAND","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd46"},65863:{"value":"10147","name":"GREEK ACROPHONIC ATTIC FIFTY THOUSAND","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd47"},65864:{"value":"10148","name":"GREEK ACROPHONIC ATTIC FIVE TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd48"},65865:{"value":"10149","name":"GREEK ACROPHONIC ATTIC TEN TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd49"},65866:{"value":"1014A","name":"GREEK ACROPHONIC ATTIC FIFTY TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd4a"},65867:{"value":"1014B","name":"GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd4b"},65868:{"value":"1014C","name":"GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd4c"},65869:{"value":"1014D","name":"GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd4d"},65870:{"value":"1014E","name":"GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd4e"},65871:{"value":"1014F","name":"GREEK ACROPHONIC ATTIC FIVE STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd4f"},65872:{"value":"10150","name":"GREEK ACROPHONIC ATTIC TEN STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd50"},65873:{"value":"10151","name":"GREEK ACROPHONIC ATTIC FIFTY STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd51"},65874:{"value":"10152","name":"GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd52"},65875:{"value":"10153","name":"GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd53"},65876:{"value":"10154","name":"GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd54"},65877:{"value":"10155","name":"GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd55"},65878:{"value":"10156","name":"GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd56"},65879:{"value":"10157","name":"GREEK ACROPHONIC ATTIC TEN MNAS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd57"},65880:{"value":"10158","name":"GREEK ACROPHONIC HERAEUM ONE PLETHRON","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd58"},65881:{"value":"10159","name":"GREEK ACROPHONIC THESPIAN ONE","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd59"},65882:{"value":"1015A","name":"GREEK ACROPHONIC HERMIONIAN ONE","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd5a"},65883:{"value":"1015B","name":"GREEK ACROPHONIC EPIDAUREAN TWO","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd5b"},65884:{"value":"1015C","name":"GREEK ACROPHONIC THESPIAN TWO","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd5c"},65885:{"value":"1015D","name":"GREEK ACROPHONIC CYRENAIC TWO DRACHMAS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd5d"},65886:{"value":"1015E","name":"GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd5e"},65887:{"value":"1015F","name":"GREEK ACROPHONIC TROEZENIAN FIVE","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd5f"},65888:{"value":"10160","name":"GREEK ACROPHONIC TROEZENIAN TEN","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd60"},65889:{"value":"10161","name":"GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd61"},65890:{"value":"10162","name":"GREEK ACROPHONIC HERMIONIAN TEN","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd62"},65891:{"value":"10163","name":"GREEK ACROPHONIC MESSENIAN TEN","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd63"},65892:{"value":"10164","name":"GREEK ACROPHONIC THESPIAN TEN","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd64"},65893:{"value":"10165","name":"GREEK ACROPHONIC THESPIAN THIRTY","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd65"},65894:{"value":"10166","name":"GREEK ACROPHONIC TROEZENIAN FIFTY","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd66"},65895:{"value":"10167","name":"GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd67"},65896:{"value":"10168","name":"GREEK ACROPHONIC HERMIONIAN FIFTY","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd68"},65897:{"value":"10169","name":"GREEK ACROPHONIC THESPIAN FIFTY","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd69"},65898:{"value":"1016A","name":"GREEK ACROPHONIC THESPIAN ONE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd6a"},65899:{"value":"1016B","name":"GREEK ACROPHONIC THESPIAN THREE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd6b"},65900:{"value":"1016C","name":"GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd6c"},65901:{"value":"1016D","name":"GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd6d"},65902:{"value":"1016E","name":"GREEK ACROPHONIC THESPIAN FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd6e"},65903:{"value":"1016F","name":"GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd6f"},65904:{"value":"10170","name":"GREEK ACROPHONIC NAXIAN FIVE HUNDRED","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd70"},65905:{"value":"10171","name":"GREEK ACROPHONIC THESPIAN ONE THOUSAND","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd71"},65906:{"value":"10172","name":"GREEK ACROPHONIC THESPIAN FIVE THOUSAND","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd72"},65907:{"value":"10173","name":"GREEK ACROPHONIC DELPHIC FIVE MNAS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd73"},65908:{"value":"10174","name":"GREEK ACROPHONIC STRATIAN FIFTY MNAS","category":"Nl","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd74"},66369:{"value":"10341","name":"GOTHIC LETTER NINETY","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf41"},66378:{"value":"1034A","name":"GOTHIC LETTER NINE HUNDRED","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf4a"},66513:{"value":"103D1","name":"OLD PERSIAN NUMBER ONE","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfd1"},66514:{"value":"103D2","name":"OLD PERSIAN NUMBER TWO","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfd2"},66515:{"value":"103D3","name":"OLD PERSIAN NUMBER TEN","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfd3"},66516:{"value":"103D4","name":"OLD PERSIAN NUMBER TWENTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfd4"},66517:{"value":"103D5","name":"OLD PERSIAN NUMBER HUNDRED","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfd5"},74752:{"value":"12400","name":"CUNEIFORM NUMERIC SIGN TWO ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc00"},74753:{"value":"12401","name":"CUNEIFORM NUMERIC SIGN THREE ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc01"},74754:{"value":"12402","name":"CUNEIFORM NUMERIC SIGN FOUR ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc02"},74755:{"value":"12403","name":"CUNEIFORM NUMERIC SIGN FIVE ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc03"},74756:{"value":"12404","name":"CUNEIFORM NUMERIC SIGN SIX ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc04"},74757:{"value":"12405","name":"CUNEIFORM NUMERIC SIGN SEVEN ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc05"},74758:{"value":"12406","name":"CUNEIFORM NUMERIC SIGN EIGHT ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc06"},74759:{"value":"12407","name":"CUNEIFORM NUMERIC SIGN NINE ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc07"},74760:{"value":"12408","name":"CUNEIFORM NUMERIC SIGN THREE DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc08"},74761:{"value":"12409","name":"CUNEIFORM NUMERIC SIGN FOUR DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc09"},74762:{"value":"1240A","name":"CUNEIFORM NUMERIC SIGN FIVE DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc0a"},74763:{"value":"1240B","name":"CUNEIFORM NUMERIC SIGN SIX DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc0b"},74764:{"value":"1240C","name":"CUNEIFORM NUMERIC SIGN SEVEN DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc0c"},74765:{"value":"1240D","name":"CUNEIFORM NUMERIC SIGN EIGHT DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc0d"},74766:{"value":"1240E","name":"CUNEIFORM NUMERIC SIGN NINE DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc0e"},74767:{"value":"1240F","name":"CUNEIFORM NUMERIC SIGN FOUR U","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc0f"},74768:{"value":"12410","name":"CUNEIFORM NUMERIC SIGN FIVE U","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc10"},74769:{"value":"12411","name":"CUNEIFORM NUMERIC SIGN SIX U","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc11"},74770:{"value":"12412","name":"CUNEIFORM NUMERIC SIGN SEVEN U","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc12"},74771:{"value":"12413","name":"CUNEIFORM NUMERIC SIGN EIGHT U","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc13"},74772:{"value":"12414","name":"CUNEIFORM NUMERIC SIGN NINE U","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc14"},74773:{"value":"12415","name":"CUNEIFORM NUMERIC SIGN ONE GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc15"},74774:{"value":"12416","name":"CUNEIFORM NUMERIC SIGN TWO GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc16"},74775:{"value":"12417","name":"CUNEIFORM NUMERIC SIGN THREE GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc17"},74776:{"value":"12418","name":"CUNEIFORM NUMERIC SIGN FOUR GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc18"},74777:{"value":"12419","name":"CUNEIFORM NUMERIC SIGN FIVE GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc19"},74778:{"value":"1241A","name":"CUNEIFORM NUMERIC SIGN SIX GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc1a"},74779:{"value":"1241B","name":"CUNEIFORM NUMERIC SIGN SEVEN GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc1b"},74780:{"value":"1241C","name":"CUNEIFORM NUMERIC SIGN EIGHT GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc1c"},74781:{"value":"1241D","name":"CUNEIFORM NUMERIC SIGN NINE GESH2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc1d"},74782:{"value":"1241E","name":"CUNEIFORM NUMERIC SIGN ONE GESHU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc1e"},74783:{"value":"1241F","name":"CUNEIFORM NUMERIC SIGN TWO GESHU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc1f"},74784:{"value":"12420","name":"CUNEIFORM NUMERIC SIGN THREE GESHU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc20"},74785:{"value":"12421","name":"CUNEIFORM NUMERIC SIGN FOUR GESHU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc21"},74786:{"value":"12422","name":"CUNEIFORM NUMERIC SIGN FIVE GESHU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc22"},74787:{"value":"12423","name":"CUNEIFORM NUMERIC SIGN TWO SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc23"},74788:{"value":"12424","name":"CUNEIFORM NUMERIC SIGN THREE SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc24"},74789:{"value":"12425","name":"CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc25"},74790:{"value":"12426","name":"CUNEIFORM NUMERIC SIGN FOUR SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc26"},74791:{"value":"12427","name":"CUNEIFORM NUMERIC SIGN FIVE SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc27"},74792:{"value":"12428","name":"CUNEIFORM NUMERIC SIGN SIX SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc28"},74793:{"value":"12429","name":"CUNEIFORM NUMERIC SIGN SEVEN SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc29"},74794:{"value":"1242A","name":"CUNEIFORM NUMERIC SIGN EIGHT SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc2a"},74795:{"value":"1242B","name":"CUNEIFORM NUMERIC SIGN NINE SHAR2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc2b"},74796:{"value":"1242C","name":"CUNEIFORM NUMERIC SIGN ONE SHARU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc2c"},74797:{"value":"1242D","name":"CUNEIFORM NUMERIC SIGN TWO SHARU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc2d"},74798:{"value":"1242E","name":"CUNEIFORM NUMERIC SIGN THREE SHARU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc2e"},74799:{"value":"1242F","name":"CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc2f"},74800:{"value":"12430","name":"CUNEIFORM NUMERIC SIGN FOUR SHARU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc30"},74801:{"value":"12431","name":"CUNEIFORM NUMERIC SIGN FIVE SHARU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc31"},74802:{"value":"12432","name":"CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"216000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc32"},74803:{"value":"12433","name":"CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"432000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc33"},74804:{"value":"12434","name":"CUNEIFORM NUMERIC SIGN ONE BURU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc34"},74805:{"value":"12435","name":"CUNEIFORM NUMERIC SIGN TWO BURU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc35"},74806:{"value":"12436","name":"CUNEIFORM NUMERIC SIGN THREE BURU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc36"},74807:{"value":"12437","name":"CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc37"},74808:{"value":"12438","name":"CUNEIFORM NUMERIC SIGN FOUR BURU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc38"},74809:{"value":"12439","name":"CUNEIFORM NUMERIC SIGN FIVE BURU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc39"},74810:{"value":"1243A","name":"CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc3a"},74811:{"value":"1243B","name":"CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc3b"},74812:{"value":"1243C","name":"CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc3c"},74813:{"value":"1243D","name":"CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc3d"},74814:{"value":"1243E","name":"CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc3e"},74815:{"value":"1243F","name":"CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc3f"},74816:{"value":"12440","name":"CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc40"},74817:{"value":"12441","name":"CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc41"},74818:{"value":"12442","name":"CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc42"},74819:{"value":"12443","name":"CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc43"},74820:{"value":"12444","name":"CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc44"},74821:{"value":"12445","name":"CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc45"},74822:{"value":"12446","name":"CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc46"},74823:{"value":"12447","name":"CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc47"},74824:{"value":"12448","name":"CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc48"},74825:{"value":"12449","name":"CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc49"},74826:{"value":"1244A","name":"CUNEIFORM NUMERIC SIGN TWO ASH TENU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc4a"},74827:{"value":"1244B","name":"CUNEIFORM NUMERIC SIGN THREE ASH TENU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc4b"},74828:{"value":"1244C","name":"CUNEIFORM NUMERIC SIGN FOUR ASH TENU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc4c"},74829:{"value":"1244D","name":"CUNEIFORM NUMERIC SIGN FIVE ASH TENU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc4d"},74830:{"value":"1244E","name":"CUNEIFORM NUMERIC SIGN SIX ASH TENU","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc4e"},74831:{"value":"1244F","name":"CUNEIFORM NUMERIC SIGN ONE BAN2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc4f"},74832:{"value":"12450","name":"CUNEIFORM NUMERIC SIGN TWO BAN2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc50"},74833:{"value":"12451","name":"CUNEIFORM NUMERIC SIGN THREE BAN2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc51"},74834:{"value":"12452","name":"CUNEIFORM NUMERIC SIGN FOUR BAN2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc52"},74835:{"value":"12453","name":"CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc53"},74836:{"value":"12454","name":"CUNEIFORM NUMERIC SIGN FIVE BAN2","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc54"},74837:{"value":"12455","name":"CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc55"},74838:{"value":"12456","name":"CUNEIFORM NUMERIC SIGN NIGIDAMIN","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc56"},74839:{"value":"12457","name":"CUNEIFORM NUMERIC SIGN NIGIDAESH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc57"},74840:{"value":"12458","name":"CUNEIFORM NUMERIC SIGN ONE ESHE3","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc58"},74841:{"value":"12459","name":"CUNEIFORM NUMERIC SIGN TWO ESHE3","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc59"},74842:{"value":"1245A","name":"CUNEIFORM NUMERIC SIGN ONE THIRD DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc5a"},74843:{"value":"1245B","name":"CUNEIFORM NUMERIC SIGN TWO THIRDS DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc5b"},74844:{"value":"1245C","name":"CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5/6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc5c"},74845:{"value":"1245D","name":"CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc5d"},74846:{"value":"1245E","name":"CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc5e"},74847:{"value":"1245F","name":"CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc5f"},74848:{"value":"12460","name":"CUNEIFORM NUMERIC SIGN ONE QUARTER ASH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc60"},74849:{"value":"12461","name":"CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc61"},74850:{"value":"12462","name":"CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc62"},74851:{"value":"12463","name":"CUNEIFORM NUMERIC SIGN ONE QUARTER GUR","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc63"},74852:{"value":"12464","name":"CUNEIFORM NUMERIC SIGN ONE HALF GUR","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc64"},74853:{"value":"12465","name":"CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc65"},74854:{"value":"12466","name":"CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc66"},74855:{"value":"12467","name":"CUNEIFORM NUMERIC SIGN ELAMITE FORTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc67"},74856:{"value":"12468","name":"CUNEIFORM NUMERIC SIGN ELAMITE FIFTY","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc68"},74857:{"value":"12469","name":"CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc69"},74858:{"value":"1246A","name":"CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc6a"},74859:{"value":"1246B","name":"CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc6b"},74860:{"value":"1246C","name":"CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc6c"},74861:{"value":"1246D","name":"CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc6d"},74862:{"value":"1246E","name":"CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM","category":"Nl","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc6e"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/No.js b/node_modules/unicode/category/No.js new file mode 100644 index 000000000..793ab38b2 --- /dev/null +++ b/node_modules/unicode/category/No.js @@ -0,0 +1 @@ +module.exports={178:{"value":"00B2","name":"SUPERSCRIPT TWO","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB2"},179:{"value":"00B3","name":"SUPERSCRIPT THREE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB3"},185:{"value":"00B9","name":"SUPERSCRIPT ONE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB9"},188:{"value":"00BC","name":"VULGAR FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0034","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"FRACTION ONE QUARTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xBC"},189:{"value":"00BD","name":"VULGAR FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0032","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"FRACTION ONE HALF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xBD"},190:{"value":"00BE","name":"VULGAR FRACTION THREE QUARTERS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 2044 0034","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"FRACTION THREE QUARTERS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xBE"},2548:{"value":"09F4","name":"BENGALI CURRENCY NUMERATOR ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F4"},2549:{"value":"09F5","name":"BENGALI CURRENCY NUMERATOR TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F5"},2550:{"value":"09F6","name":"BENGALI CURRENCY NUMERATOR THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F6"},2551:{"value":"09F7","name":"BENGALI CURRENCY NUMERATOR FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F7"},2552:{"value":"09F8","name":"BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F8"},2553:{"value":"09F9","name":"BENGALI CURRENCY DENOMINATOR SIXTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F9"},2930:{"value":"0B72","name":"ORIYA FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B72"},2931:{"value":"0B73","name":"ORIYA FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B73"},2932:{"value":"0B74","name":"ORIYA FRACTION THREE QUARTERS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B74"},2933:{"value":"0B75","name":"ORIYA FRACTION ONE SIXTEENTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B75"},2934:{"value":"0B76","name":"ORIYA FRACTION ONE EIGHTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B76"},2935:{"value":"0B77","name":"ORIYA FRACTION THREE SIXTEENTHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B77"},3056:{"value":"0BF0","name":"TAMIL NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF0"},3057:{"value":"0BF1","name":"TAMIL NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF1"},3058:{"value":"0BF2","name":"TAMIL NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF2"},3192:{"value":"0C78","name":"TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C78"},3193:{"value":"0C79","name":"TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C79"},3194:{"value":"0C7A","name":"TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C7A"},3195:{"value":"0C7B","name":"TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C7B"},3196:{"value":"0C7C","name":"TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C7C"},3197:{"value":"0C7D","name":"TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C7D"},3198:{"value":"0C7E","name":"TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C7E"},3416:{"value":"0D58","name":"MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/160","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D58"},3417:{"value":"0D59","name":"MALAYALAM FRACTION ONE FORTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D59"},3418:{"value":"0D5A","name":"MALAYALAM FRACTION THREE EIGHTIETHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D5A"},3419:{"value":"0D5B","name":"MALAYALAM FRACTION ONE TWENTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D5B"},3420:{"value":"0D5C","name":"MALAYALAM FRACTION ONE TENTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D5C"},3421:{"value":"0D5D","name":"MALAYALAM FRACTION THREE TWENTIETHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D5D"},3422:{"value":"0D5E","name":"MALAYALAM FRACTION ONE FIFTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D5E"},3440:{"value":"0D70","name":"MALAYALAM NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D70"},3441:{"value":"0D71","name":"MALAYALAM NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D71"},3442:{"value":"0D72","name":"MALAYALAM NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D72"},3443:{"value":"0D73","name":"MALAYALAM FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D73"},3444:{"value":"0D74","name":"MALAYALAM FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D74"},3445:{"value":"0D75","name":"MALAYALAM FRACTION THREE QUARTERS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D75"},3446:{"value":"0D76","name":"MALAYALAM FRACTION ONE SIXTEENTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D76"},3447:{"value":"0D77","name":"MALAYALAM FRACTION ONE EIGHTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D77"},3448:{"value":"0D78","name":"MALAYALAM FRACTION THREE SIXTEENTHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D78"},3882:{"value":"0F2A","name":"TIBETAN DIGIT HALF ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F2A"},3883:{"value":"0F2B","name":"TIBETAN DIGIT HALF TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F2B"},3884:{"value":"0F2C","name":"TIBETAN DIGIT HALF THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F2C"},3885:{"value":"0F2D","name":"TIBETAN DIGIT HALF FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F2D"},3886:{"value":"0F2E","name":"TIBETAN DIGIT HALF FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F2E"},3887:{"value":"0F2F","name":"TIBETAN DIGIT HALF SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"11/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F2F"},3888:{"value":"0F30","name":"TIBETAN DIGIT HALF SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"13/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F30"},3889:{"value":"0F31","name":"TIBETAN DIGIT HALF EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"15/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F31"},3890:{"value":"0F32","name":"TIBETAN DIGIT HALF NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"17/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F32"},3891:{"value":"0F33","name":"TIBETAN DIGIT HALF ZERO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"-1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F33"},4969:{"value":"1369","name":"ETHIOPIC DIGIT ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1369"},4970:{"value":"136A","name":"ETHIOPIC DIGIT TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u136A"},4971:{"value":"136B","name":"ETHIOPIC DIGIT THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u136B"},4972:{"value":"136C","name":"ETHIOPIC DIGIT FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u136C"},4973:{"value":"136D","name":"ETHIOPIC DIGIT FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u136D"},4974:{"value":"136E","name":"ETHIOPIC DIGIT SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u136E"},4975:{"value":"136F","name":"ETHIOPIC DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u136F"},4976:{"value":"1370","name":"ETHIOPIC DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1370"},4977:{"value":"1371","name":"ETHIOPIC DIGIT NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1371"},4978:{"value":"1372","name":"ETHIOPIC NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1372"},4979:{"value":"1373","name":"ETHIOPIC NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1373"},4980:{"value":"1374","name":"ETHIOPIC NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1374"},4981:{"value":"1375","name":"ETHIOPIC NUMBER FORTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1375"},4982:{"value":"1376","name":"ETHIOPIC NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1376"},4983:{"value":"1377","name":"ETHIOPIC NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1377"},4984:{"value":"1378","name":"ETHIOPIC NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1378"},4985:{"value":"1379","name":"ETHIOPIC NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1379"},4986:{"value":"137A","name":"ETHIOPIC NUMBER NINETY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u137A"},4987:{"value":"137B","name":"ETHIOPIC NUMBER HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u137B"},4988:{"value":"137C","name":"ETHIOPIC NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u137C"},6128:{"value":"17F0","name":"KHMER SYMBOL LEK ATTAK SON","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F0"},6129:{"value":"17F1","name":"KHMER SYMBOL LEK ATTAK MUOY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F1"},6130:{"value":"17F2","name":"KHMER SYMBOL LEK ATTAK PII","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F2"},6131:{"value":"17F3","name":"KHMER SYMBOL LEK ATTAK BEI","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F3"},6132:{"value":"17F4","name":"KHMER SYMBOL LEK ATTAK BUON","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F4"},6133:{"value":"17F5","name":"KHMER SYMBOL LEK ATTAK PRAM","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F5"},6134:{"value":"17F6","name":"KHMER SYMBOL LEK ATTAK PRAM-MUOY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F6"},6135:{"value":"17F7","name":"KHMER SYMBOL LEK ATTAK PRAM-PII","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F7"},6136:{"value":"17F8","name":"KHMER SYMBOL LEK ATTAK PRAM-BEI","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F8"},6137:{"value":"17F9","name":"KHMER SYMBOL LEK ATTAK PRAM-BUON","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17F9"},6618:{"value":"19DA","name":"NEW TAI LUE THAM DIGIT ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19DA"},8304:{"value":"2070","name":"SUPERSCRIPT ZERO","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT ZERO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2070"},8308:{"value":"2074","name":"SUPERSCRIPT FOUR","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2074"},8309:{"value":"2075","name":"SUPERSCRIPT FIVE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT FIVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2075"},8310:{"value":"2076","name":"SUPERSCRIPT SIX","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT SIX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2076"},8311:{"value":"2077","name":"SUPERSCRIPT SEVEN","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT SEVEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2077"},8312:{"value":"2078","name":"SUPERSCRIPT EIGHT","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT EIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2078"},8313:{"value":"2079","name":"SUPERSCRIPT NINE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"SUPERSCRIPT DIGIT NINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2079"},8320:{"value":"2080","name":"SUBSCRIPT ZERO","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0030","decimal_digit_value":"","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT ZERO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2080"},8321:{"value":"2081","name":"SUBSCRIPT ONE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2081"},8322:{"value":"2082","name":"SUBSCRIPT TWO","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0032","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2082"},8323:{"value":"2083","name":"SUBSCRIPT THREE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0033","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2083"},8324:{"value":"2084","name":"SUBSCRIPT FOUR","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0034","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2084"},8325:{"value":"2085","name":"SUBSCRIPT FIVE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0035","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT FIVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2085"},8326:{"value":"2086","name":"SUBSCRIPT SIX","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0036","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT SIX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2086"},8327:{"value":"2087","name":"SUBSCRIPT SEVEN","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0037","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT SEVEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2087"},8328:{"value":"2088","name":"SUBSCRIPT EIGHT","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0038","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT EIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2088"},8329:{"value":"2089","name":"SUBSCRIPT NINE","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0039","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"SUBSCRIPT DIGIT NINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2089"},8528:{"value":"2150","name":"VULGAR FRACTION ONE SEVENTH","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0037","decimal_digit_value":"","digit_value":"","numeric_value":"1/7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2150"},8529:{"value":"2151","name":"VULGAR FRACTION ONE NINTH","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0039","decimal_digit_value":"","digit_value":"","numeric_value":"1/9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2151"},8530:{"value":"2152","name":"VULGAR FRACTION ONE TENTH","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0031 0030","decimal_digit_value":"","digit_value":"","numeric_value":"1/10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2152"},8531:{"value":"2153","name":"VULGAR FRACTION ONE THIRD","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0033","decimal_digit_value":"","digit_value":"","numeric_value":"1/3","mirrored":"N","unicode_name":"FRACTION ONE THIRD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2153"},8532:{"value":"2154","name":"VULGAR FRACTION TWO THIRDS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 2044 0033","decimal_digit_value":"","digit_value":"","numeric_value":"2/3","mirrored":"N","unicode_name":"FRACTION TWO THIRDS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2154"},8533:{"value":"2155","name":"VULGAR FRACTION ONE FIFTH","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0035","decimal_digit_value":"","digit_value":"","numeric_value":"1/5","mirrored":"N","unicode_name":"FRACTION ONE FIFTH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2155"},8534:{"value":"2156","name":"VULGAR FRACTION TWO FIFTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 2044 0035","decimal_digit_value":"","digit_value":"","numeric_value":"2/5","mirrored":"N","unicode_name":"FRACTION TWO FIFTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2156"},8535:{"value":"2157","name":"VULGAR FRACTION THREE FIFTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 2044 0035","decimal_digit_value":"","digit_value":"","numeric_value":"3/5","mirrored":"N","unicode_name":"FRACTION THREE FIFTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2157"},8536:{"value":"2158","name":"VULGAR FRACTION FOUR FIFTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 2044 0035","decimal_digit_value":"","digit_value":"","numeric_value":"4/5","mirrored":"N","unicode_name":"FRACTION FOUR FIFTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2158"},8537:{"value":"2159","name":"VULGAR FRACTION ONE SIXTH","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0036","decimal_digit_value":"","digit_value":"","numeric_value":"1/6","mirrored":"N","unicode_name":"FRACTION ONE SIXTH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2159"},8538:{"value":"215A","name":"VULGAR FRACTION FIVE SIXTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0035 2044 0036","decimal_digit_value":"","digit_value":"","numeric_value":"5/6","mirrored":"N","unicode_name":"FRACTION FIVE SIXTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u215A"},8539:{"value":"215B","name":"VULGAR FRACTION ONE EIGHTH","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044 0038","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"FRACTION ONE EIGHTH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u215B"},8540:{"value":"215C","name":"VULGAR FRACTION THREE EIGHTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 2044 0038","decimal_digit_value":"","digit_value":"","numeric_value":"3/8","mirrored":"N","unicode_name":"FRACTION THREE EIGHTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u215C"},8541:{"value":"215D","name":"VULGAR FRACTION FIVE EIGHTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0035 2044 0038","decimal_digit_value":"","digit_value":"","numeric_value":"5/8","mirrored":"N","unicode_name":"FRACTION FIVE EIGHTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u215D"},8542:{"value":"215E","name":"VULGAR FRACTION SEVEN EIGHTHS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0037 2044 0038","decimal_digit_value":"","digit_value":"","numeric_value":"7/8","mirrored":"N","unicode_name":"FRACTION SEVEN EIGHTHS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u215E"},8543:{"value":"215F","name":"FRACTION NUMERATOR ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 2044","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u215F"},8585:{"value":"2189","name":"VULGAR FRACTION ZERO THIRDS","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0030 2044 0033","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2189"},9312:{"value":"2460","name":"CIRCLED DIGIT ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2460"},9313:{"value":"2461","name":"CIRCLED DIGIT TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2461"},9314:{"value":"2462","name":"CIRCLED DIGIT THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2462"},9315:{"value":"2463","name":"CIRCLED DIGIT FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2463"},9316:{"value":"2464","name":"CIRCLED DIGIT FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0035","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2464"},9317:{"value":"2465","name":"CIRCLED DIGIT SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0036","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2465"},9318:{"value":"2466","name":"CIRCLED DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0037","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2466"},9319:{"value":"2467","name":"CIRCLED DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0038","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2467"},9320:{"value":"2468","name":"CIRCLED DIGIT NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0039","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2468"},9321:{"value":"2469","name":"CIRCLED NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0030","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2469"},9322:{"value":"246A","name":"CIRCLED NUMBER ELEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0031","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u246A"},9323:{"value":"246B","name":"CIRCLED NUMBER TWELVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0032","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u246B"},9324:{"value":"246C","name":"CIRCLED NUMBER THIRTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0033","decimal_digit_value":"","digit_value":"","numeric_value":"13","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u246C"},9325:{"value":"246D","name":"CIRCLED NUMBER FOURTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0034","decimal_digit_value":"","digit_value":"","numeric_value":"14","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u246D"},9326:{"value":"246E","name":"CIRCLED NUMBER FIFTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0035","decimal_digit_value":"","digit_value":"","numeric_value":"15","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u246E"},9327:{"value":"246F","name":"CIRCLED NUMBER SIXTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0036","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u246F"},9328:{"value":"2470","name":"CIRCLED NUMBER SEVENTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0037","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2470"},9329:{"value":"2471","name":"CIRCLED NUMBER EIGHTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0038","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2471"},9330:{"value":"2472","name":"CIRCLED NUMBER NINETEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0031 0039","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2472"},9331:{"value":"2473","name":"CIRCLED NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0030","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2473"},9332:{"value":"2474","name":"PARENTHESIZED DIGIT ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0029","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2474"},9333:{"value":"2475","name":"PARENTHESIZED DIGIT TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0032 0029","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2475"},9334:{"value":"2476","name":"PARENTHESIZED DIGIT THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0033 0029","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2476"},9335:{"value":"2477","name":"PARENTHESIZED DIGIT FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0034 0029","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2477"},9336:{"value":"2478","name":"PARENTHESIZED DIGIT FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0035 0029","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2478"},9337:{"value":"2479","name":"PARENTHESIZED DIGIT SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0036 0029","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2479"},9338:{"value":"247A","name":"PARENTHESIZED DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0037 0029","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u247A"},9339:{"value":"247B","name":"PARENTHESIZED DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0038 0029","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u247B"},9340:{"value":"247C","name":"PARENTHESIZED DIGIT NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0039 0029","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u247C"},9341:{"value":"247D","name":"PARENTHESIZED NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0030 0029","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u247D"},9342:{"value":"247E","name":"PARENTHESIZED NUMBER ELEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0031 0029","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u247E"},9343:{"value":"247F","name":"PARENTHESIZED NUMBER TWELVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0032 0029","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u247F"},9344:{"value":"2480","name":"PARENTHESIZED NUMBER THIRTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0033 0029","decimal_digit_value":"","digit_value":"","numeric_value":"13","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2480"},9345:{"value":"2481","name":"PARENTHESIZED NUMBER FOURTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0034 0029","decimal_digit_value":"","digit_value":"","numeric_value":"14","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2481"},9346:{"value":"2482","name":"PARENTHESIZED NUMBER FIFTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0035 0029","decimal_digit_value":"","digit_value":"","numeric_value":"15","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2482"},9347:{"value":"2483","name":"PARENTHESIZED NUMBER SIXTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0036 0029","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2483"},9348:{"value":"2484","name":"PARENTHESIZED NUMBER SEVENTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0037 0029","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2484"},9349:{"value":"2485","name":"PARENTHESIZED NUMBER EIGHTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0038 0029","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2485"},9350:{"value":"2486","name":"PARENTHESIZED NUMBER NINETEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0031 0039 0029","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2486"},9351:{"value":"2487","name":"PARENTHESIZED NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0028 0032 0030 0029","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2487"},9352:{"value":"2488","name":"DIGIT ONE FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 002E","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"DIGIT ONE PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2488"},9353:{"value":"2489","name":"DIGIT TWO FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0032 002E","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"DIGIT TWO PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2489"},9354:{"value":"248A","name":"DIGIT THREE FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0033 002E","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"DIGIT THREE PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u248A"},9355:{"value":"248B","name":"DIGIT FOUR FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0034 002E","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"DIGIT FOUR PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u248B"},9356:{"value":"248C","name":"DIGIT FIVE FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0035 002E","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"DIGIT FIVE PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u248C"},9357:{"value":"248D","name":"DIGIT SIX FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0036 002E","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"DIGIT SIX PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u248D"},9358:{"value":"248E","name":"DIGIT SEVEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0037 002E","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"DIGIT SEVEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u248E"},9359:{"value":"248F","name":"DIGIT EIGHT FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0038 002E","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"DIGIT EIGHT PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u248F"},9360:{"value":"2490","name":"DIGIT NINE FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0039 002E","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"DIGIT NINE PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2490"},9361:{"value":"2491","name":"NUMBER TEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0030 002E","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"NUMBER TEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2491"},9362:{"value":"2492","name":"NUMBER ELEVEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0031 002E","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"NUMBER ELEVEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2492"},9363:{"value":"2493","name":"NUMBER TWELVE FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0032 002E","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"NUMBER TWELVE PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2493"},9364:{"value":"2494","name":"NUMBER THIRTEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0033 002E","decimal_digit_value":"","digit_value":"","numeric_value":"13","mirrored":"N","unicode_name":"NUMBER THIRTEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2494"},9365:{"value":"2495","name":"NUMBER FOURTEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0034 002E","decimal_digit_value":"","digit_value":"","numeric_value":"14","mirrored":"N","unicode_name":"NUMBER FOURTEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2495"},9366:{"value":"2496","name":"NUMBER FIFTEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0035 002E","decimal_digit_value":"","digit_value":"","numeric_value":"15","mirrored":"N","unicode_name":"NUMBER FIFTEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2496"},9367:{"value":"2497","name":"NUMBER SIXTEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0036 002E","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"NUMBER SIXTEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2497"},9368:{"value":"2498","name":"NUMBER SEVENTEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0037 002E","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"NUMBER SEVENTEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2498"},9369:{"value":"2499","name":"NUMBER EIGHTEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0038 002E","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"NUMBER EIGHTEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2499"},9370:{"value":"249A","name":"NUMBER NINETEEN FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 0039 002E","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"NUMBER NINETEEN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u249A"},9371:{"value":"249B","name":"NUMBER TWENTY FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0032 0030 002E","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"NUMBER TWENTY PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u249B"},9450:{"value":"24EA","name":"CIRCLED DIGIT ZERO","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0030","decimal_digit_value":"","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24EA"},9451:{"value":"24EB","name":"NEGATIVE CIRCLED NUMBER ELEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24EB"},9452:{"value":"24EC","name":"NEGATIVE CIRCLED NUMBER TWELVE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24EC"},9453:{"value":"24ED","name":"NEGATIVE CIRCLED NUMBER THIRTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"13","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24ED"},9454:{"value":"24EE","name":"NEGATIVE CIRCLED NUMBER FOURTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"14","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24EE"},9455:{"value":"24EF","name":"NEGATIVE CIRCLED NUMBER FIFTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"15","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24EF"},9456:{"value":"24F0","name":"NEGATIVE CIRCLED NUMBER SIXTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F0"},9457:{"value":"24F1","name":"NEGATIVE CIRCLED NUMBER SEVENTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F1"},9458:{"value":"24F2","name":"NEGATIVE CIRCLED NUMBER EIGHTEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F2"},9459:{"value":"24F3","name":"NEGATIVE CIRCLED NUMBER NINETEEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F3"},9460:{"value":"24F4","name":"NEGATIVE CIRCLED NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F4"},9461:{"value":"24F5","name":"DOUBLE CIRCLED DIGIT ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F5"},9462:{"value":"24F6","name":"DOUBLE CIRCLED DIGIT TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F6"},9463:{"value":"24F7","name":"DOUBLE CIRCLED DIGIT THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F7"},9464:{"value":"24F8","name":"DOUBLE CIRCLED DIGIT FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F8"},9465:{"value":"24F9","name":"DOUBLE CIRCLED DIGIT FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24F9"},9466:{"value":"24FA","name":"DOUBLE CIRCLED DIGIT SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24FA"},9467:{"value":"24FB","name":"DOUBLE CIRCLED DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24FB"},9468:{"value":"24FC","name":"DOUBLE CIRCLED DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24FC"},9469:{"value":"24FD","name":"DOUBLE CIRCLED DIGIT NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24FD"},9470:{"value":"24FE","name":"DOUBLE CIRCLED NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24FE"},9471:{"value":"24FF","name":"NEGATIVE CIRCLED DIGIT ZERO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24FF"},10102:{"value":"2776","name":"DINGBAT NEGATIVE CIRCLED DIGIT ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2776"},10103:{"value":"2777","name":"DINGBAT NEGATIVE CIRCLED DIGIT TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2777"},10104:{"value":"2778","name":"DINGBAT NEGATIVE CIRCLED DIGIT THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2778"},10105:{"value":"2779","name":"DINGBAT NEGATIVE CIRCLED DIGIT FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2779"},10106:{"value":"277A","name":"DINGBAT NEGATIVE CIRCLED DIGIT FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT FIVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u277A"},10107:{"value":"277B","name":"DINGBAT NEGATIVE CIRCLED DIGIT SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT SIX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u277B"},10108:{"value":"277C","name":"DINGBAT NEGATIVE CIRCLED DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT SEVEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u277C"},10109:{"value":"277D","name":"DINGBAT NEGATIVE CIRCLED DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT EIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u277D"},10110:{"value":"277E","name":"DINGBAT NEGATIVE CIRCLED DIGIT NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"INVERSE CIRCLED DIGIT NINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u277E"},10111:{"value":"277F","name":"DINGBAT NEGATIVE CIRCLED NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"INVERSE CIRCLED NUMBER TEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u277F"},10112:{"value":"2780","name":"DINGBAT CIRCLED SANS-SERIF DIGIT ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2780"},10113:{"value":"2781","name":"DINGBAT CIRCLED SANS-SERIF DIGIT TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2781"},10114:{"value":"2782","name":"DINGBAT CIRCLED SANS-SERIF DIGIT THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2782"},10115:{"value":"2783","name":"DINGBAT CIRCLED SANS-SERIF DIGIT FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2783"},10116:{"value":"2784","name":"DINGBAT CIRCLED SANS-SERIF DIGIT FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT FIVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2784"},10117:{"value":"2785","name":"DINGBAT CIRCLED SANS-SERIF DIGIT SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT SIX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2785"},10118:{"value":"2786","name":"DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT SEVEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2786"},10119:{"value":"2787","name":"DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT EIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2787"},10120:{"value":"2788","name":"DINGBAT CIRCLED SANS-SERIF DIGIT NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF DIGIT NINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2788"},10121:{"value":"2789","name":"DINGBAT CIRCLED SANS-SERIF NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"CIRCLED SANS-SERIF NUMBER TEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2789"},10122:{"value":"278A","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u278A"},10123:{"value":"278B","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u278B"},10124:{"value":"278C","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u278C"},10125:{"value":"278D","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u278D"},10126:{"value":"278E","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT FIVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u278E"},10127:{"value":"278F","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT SIX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u278F"},10128:{"value":"2790","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT SEVEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2790"},10129:{"value":"2791","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT EIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2791"},10130:{"value":"2792","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF DIGIT NINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2792"},10131:{"value":"2793","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"INVERSE CIRCLED SANS-SERIF NUMBER TEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2793"},11517:{"value":"2CFD","name":"COPTIC FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CFD"},12690:{"value":"3192","name":"IDEOGRAPHIC ANNOTATION ONE MARK","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E00","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"KAERITEN ITI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3192"},12691:{"value":"3193","name":"IDEOGRAPHIC ANNOTATION TWO MARK","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E8C","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"KAERITEN NI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3193"},12692:{"value":"3194","name":"IDEOGRAPHIC ANNOTATION THREE MARK","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E09","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"KAERITEN SAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3194"},12693:{"value":"3195","name":"IDEOGRAPHIC ANNOTATION FOUR MARK","category":"No","class":"0","bidirectional_category":"L","mapping":" 56DB","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"KAERITEN SI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3195"},12832:{"value":"3220","name":"PARENTHESIZED IDEOGRAPH ONE","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 4E00 0029","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3220"},12833:{"value":"3221","name":"PARENTHESIZED IDEOGRAPH TWO","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 4E8C 0029","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3221"},12834:{"value":"3222","name":"PARENTHESIZED IDEOGRAPH THREE","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 4E09 0029","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3222"},12835:{"value":"3223","name":"PARENTHESIZED IDEOGRAPH FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 56DB 0029","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3223"},12836:{"value":"3224","name":"PARENTHESIZED IDEOGRAPH FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 4E94 0029","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3224"},12837:{"value":"3225","name":"PARENTHESIZED IDEOGRAPH SIX","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 516D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3225"},12838:{"value":"3226","name":"PARENTHESIZED IDEOGRAPH SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 4E03 0029","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3226"},12839:{"value":"3227","name":"PARENTHESIZED IDEOGRAPH EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 516B 0029","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3227"},12840:{"value":"3228","name":"PARENTHESIZED IDEOGRAPH NINE","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 4E5D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3228"},12841:{"value":"3229","name":"PARENTHESIZED IDEOGRAPH TEN","category":"No","class":"0","bidirectional_category":"L","mapping":" 0028 5341 0029","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3229"},12872:{"value":"3248","name":"CIRCLED NUMBER TEN ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3248"},12873:{"value":"3249","name":"CIRCLED NUMBER TWENTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3249"},12874:{"value":"324A","name":"CIRCLED NUMBER THIRTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u324A"},12875:{"value":"324B","name":"CIRCLED NUMBER FORTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u324B"},12876:{"value":"324C","name":"CIRCLED NUMBER FIFTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u324C"},12877:{"value":"324D","name":"CIRCLED NUMBER SIXTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u324D"},12878:{"value":"324E","name":"CIRCLED NUMBER SEVENTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u324E"},12879:{"value":"324F","name":"CIRCLED NUMBER EIGHTY ON BLACK SQUARE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u324F"},12881:{"value":"3251","name":"CIRCLED NUMBER TWENTY ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0031","decimal_digit_value":"","digit_value":"","numeric_value":"21","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3251"},12882:{"value":"3252","name":"CIRCLED NUMBER TWENTY TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0032","decimal_digit_value":"","digit_value":"","numeric_value":"22","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3252"},12883:{"value":"3253","name":"CIRCLED NUMBER TWENTY THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0033","decimal_digit_value":"","digit_value":"","numeric_value":"23","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3253"},12884:{"value":"3254","name":"CIRCLED NUMBER TWENTY FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0034","decimal_digit_value":"","digit_value":"","numeric_value":"24","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3254"},12885:{"value":"3255","name":"CIRCLED NUMBER TWENTY FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0035","decimal_digit_value":"","digit_value":"","numeric_value":"25","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3255"},12886:{"value":"3256","name":"CIRCLED NUMBER TWENTY SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0036","decimal_digit_value":"","digit_value":"","numeric_value":"26","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3256"},12887:{"value":"3257","name":"CIRCLED NUMBER TWENTY SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0037","decimal_digit_value":"","digit_value":"","numeric_value":"27","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3257"},12888:{"value":"3258","name":"CIRCLED NUMBER TWENTY EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0038","decimal_digit_value":"","digit_value":"","numeric_value":"28","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3258"},12889:{"value":"3259","name":"CIRCLED NUMBER TWENTY NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0032 0039","decimal_digit_value":"","digit_value":"","numeric_value":"29","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3259"},12890:{"value":"325A","name":"CIRCLED NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0030","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u325A"},12891:{"value":"325B","name":"CIRCLED NUMBER THIRTY ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0031","decimal_digit_value":"","digit_value":"","numeric_value":"31","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u325B"},12892:{"value":"325C","name":"CIRCLED NUMBER THIRTY TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0032","decimal_digit_value":"","digit_value":"","numeric_value":"32","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u325C"},12893:{"value":"325D","name":"CIRCLED NUMBER THIRTY THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0033","decimal_digit_value":"","digit_value":"","numeric_value":"33","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u325D"},12894:{"value":"325E","name":"CIRCLED NUMBER THIRTY FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0034","decimal_digit_value":"","digit_value":"","numeric_value":"34","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u325E"},12895:{"value":"325F","name":"CIRCLED NUMBER THIRTY FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0035","decimal_digit_value":"","digit_value":"","numeric_value":"35","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u325F"},12928:{"value":"3280","name":"CIRCLED IDEOGRAPH ONE","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E00","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3280"},12929:{"value":"3281","name":"CIRCLED IDEOGRAPH TWO","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E8C","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3281"},12930:{"value":"3282","name":"CIRCLED IDEOGRAPH THREE","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E09","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3282"},12931:{"value":"3283","name":"CIRCLED IDEOGRAPH FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":" 56DB","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3283"},12932:{"value":"3284","name":"CIRCLED IDEOGRAPH FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E94","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3284"},12933:{"value":"3285","name":"CIRCLED IDEOGRAPH SIX","category":"No","class":"0","bidirectional_category":"L","mapping":" 516D","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3285"},12934:{"value":"3286","name":"CIRCLED IDEOGRAPH SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E03","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3286"},12935:{"value":"3287","name":"CIRCLED IDEOGRAPH EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":" 516B","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3287"},12936:{"value":"3288","name":"CIRCLED IDEOGRAPH NINE","category":"No","class":"0","bidirectional_category":"L","mapping":" 4E5D","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3288"},12937:{"value":"3289","name":"CIRCLED IDEOGRAPH TEN","category":"No","class":"0","bidirectional_category":"L","mapping":" 5341","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3289"},12977:{"value":"32B1","name":"CIRCLED NUMBER THIRTY SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0036","decimal_digit_value":"","digit_value":"","numeric_value":"36","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B1"},12978:{"value":"32B2","name":"CIRCLED NUMBER THIRTY SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0037","decimal_digit_value":"","digit_value":"","numeric_value":"37","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B2"},12979:{"value":"32B3","name":"CIRCLED NUMBER THIRTY EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0038","decimal_digit_value":"","digit_value":"","numeric_value":"38","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B3"},12980:{"value":"32B4","name":"CIRCLED NUMBER THIRTY NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0033 0039","decimal_digit_value":"","digit_value":"","numeric_value":"39","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B4"},12981:{"value":"32B5","name":"CIRCLED NUMBER FORTY","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0030","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B5"},12982:{"value":"32B6","name":"CIRCLED NUMBER FORTY ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0031","decimal_digit_value":"","digit_value":"","numeric_value":"41","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B6"},12983:{"value":"32B7","name":"CIRCLED NUMBER FORTY TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0032","decimal_digit_value":"","digit_value":"","numeric_value":"42","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B7"},12984:{"value":"32B8","name":"CIRCLED NUMBER FORTY THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0033","decimal_digit_value":"","digit_value":"","numeric_value":"43","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B8"},12985:{"value":"32B9","name":"CIRCLED NUMBER FORTY FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0034","decimal_digit_value":"","digit_value":"","numeric_value":"44","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B9"},12986:{"value":"32BA","name":"CIRCLED NUMBER FORTY FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0035","decimal_digit_value":"","digit_value":"","numeric_value":"45","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32BA"},12987:{"value":"32BB","name":"CIRCLED NUMBER FORTY SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0036","decimal_digit_value":"","digit_value":"","numeric_value":"46","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32BB"},12988:{"value":"32BC","name":"CIRCLED NUMBER FORTY SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0037","decimal_digit_value":"","digit_value":"","numeric_value":"47","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32BC"},12989:{"value":"32BD","name":"CIRCLED NUMBER FORTY EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0038","decimal_digit_value":"","digit_value":"","numeric_value":"48","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32BD"},12990:{"value":"32BE","name":"CIRCLED NUMBER FORTY NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0034 0039","decimal_digit_value":"","digit_value":"","numeric_value":"49","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32BE"},12991:{"value":"32BF","name":"CIRCLED NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"ON","mapping":" 0035 0030","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32BF"},43056:{"value":"A830","name":"NORTH INDIC FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA830"},43057:{"value":"A831","name":"NORTH INDIC FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA831"},43058:{"value":"A832","name":"NORTH INDIC FRACTION THREE QUARTERS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA832"},43059:{"value":"A833","name":"NORTH INDIC FRACTION ONE SIXTEENTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA833"},43060:{"value":"A834","name":"NORTH INDIC FRACTION ONE EIGHTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA834"},43061:{"value":"A835","name":"NORTH INDIC FRACTION THREE SIXTEENTHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA835"},65799:{"value":"10107","name":"AEGEAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd07"},65800:{"value":"10108","name":"AEGEAN NUMBER TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd08"},65801:{"value":"10109","name":"AEGEAN NUMBER THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd09"},65802:{"value":"1010A","name":"AEGEAN NUMBER FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd0a"},65803:{"value":"1010B","name":"AEGEAN NUMBER FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd0b"},65804:{"value":"1010C","name":"AEGEAN NUMBER SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd0c"},65805:{"value":"1010D","name":"AEGEAN NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd0d"},65806:{"value":"1010E","name":"AEGEAN NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd0e"},65807:{"value":"1010F","name":"AEGEAN NUMBER NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd0f"},65808:{"value":"10110","name":"AEGEAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd10"},65809:{"value":"10111","name":"AEGEAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd11"},65810:{"value":"10112","name":"AEGEAN NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd12"},65811:{"value":"10113","name":"AEGEAN NUMBER FORTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd13"},65812:{"value":"10114","name":"AEGEAN NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd14"},65813:{"value":"10115","name":"AEGEAN NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd15"},65814:{"value":"10116","name":"AEGEAN NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd16"},65815:{"value":"10117","name":"AEGEAN NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd17"},65816:{"value":"10118","name":"AEGEAN NUMBER NINETY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd18"},65817:{"value":"10119","name":"AEGEAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd19"},65818:{"value":"1011A","name":"AEGEAN NUMBER TWO HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd1a"},65819:{"value":"1011B","name":"AEGEAN NUMBER THREE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd1b"},65820:{"value":"1011C","name":"AEGEAN NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd1c"},65821:{"value":"1011D","name":"AEGEAN NUMBER FIVE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd1d"},65822:{"value":"1011E","name":"AEGEAN NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd1e"},65823:{"value":"1011F","name":"AEGEAN NUMBER SEVEN HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd1f"},65824:{"value":"10120","name":"AEGEAN NUMBER EIGHT HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd20"},65825:{"value":"10121","name":"AEGEAN NUMBER NINE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd21"},65826:{"value":"10122","name":"AEGEAN NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd22"},65827:{"value":"10123","name":"AEGEAN NUMBER TWO THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd23"},65828:{"value":"10124","name":"AEGEAN NUMBER THREE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd24"},65829:{"value":"10125","name":"AEGEAN NUMBER FOUR THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd25"},65830:{"value":"10126","name":"AEGEAN NUMBER FIVE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd26"},65831:{"value":"10127","name":"AEGEAN NUMBER SIX THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd27"},65832:{"value":"10128","name":"AEGEAN NUMBER SEVEN THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd28"},65833:{"value":"10129","name":"AEGEAN NUMBER EIGHT THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd29"},65834:{"value":"1012A","name":"AEGEAN NUMBER NINE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd2a"},65835:{"value":"1012B","name":"AEGEAN NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd2b"},65836:{"value":"1012C","name":"AEGEAN NUMBER TWENTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd2c"},65837:{"value":"1012D","name":"AEGEAN NUMBER THIRTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd2d"},65838:{"value":"1012E","name":"AEGEAN NUMBER FORTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd2e"},65839:{"value":"1012F","name":"AEGEAN NUMBER FIFTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd2f"},65840:{"value":"10130","name":"AEGEAN NUMBER SIXTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd30"},65841:{"value":"10131","name":"AEGEAN NUMBER SEVENTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd31"},65842:{"value":"10132","name":"AEGEAN NUMBER EIGHTY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd32"},65843:{"value":"10133","name":"AEGEAN NUMBER NINETY THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd33"},65909:{"value":"10175","name":"GREEK ONE HALF SIGN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd75"},65910:{"value":"10176","name":"GREEK ONE HALF SIGN ALTERNATE FORM","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd76"},65911:{"value":"10177","name":"GREEK TWO THIRDS SIGN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd77"},65912:{"value":"10178","name":"GREEK THREE QUARTERS SIGN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd78"},65930:{"value":"1018A","name":"GREEK ZERO SIGN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd8a"},65931:{"value":"1018B","name":"GREEK ONE QUARTER SIGN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd8b"},66273:{"value":"102E1","name":"COPTIC EPACT DIGIT ONE","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee1"},66274:{"value":"102E2","name":"COPTIC EPACT DIGIT TWO","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee2"},66275:{"value":"102E3","name":"COPTIC EPACT DIGIT THREE","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee3"},66276:{"value":"102E4","name":"COPTIC EPACT DIGIT FOUR","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee4"},66277:{"value":"102E5","name":"COPTIC EPACT DIGIT FIVE","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee5"},66278:{"value":"102E6","name":"COPTIC EPACT DIGIT SIX","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee6"},66279:{"value":"102E7","name":"COPTIC EPACT DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee7"},66280:{"value":"102E8","name":"COPTIC EPACT DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee8"},66281:{"value":"102E9","name":"COPTIC EPACT DIGIT NINE","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udee9"},66282:{"value":"102EA","name":"COPTIC EPACT NUMBER TEN","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeea"},66283:{"value":"102EB","name":"COPTIC EPACT NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeeb"},66284:{"value":"102EC","name":"COPTIC EPACT NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeec"},66285:{"value":"102ED","name":"COPTIC EPACT NUMBER FORTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeed"},66286:{"value":"102EE","name":"COPTIC EPACT NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeee"},66287:{"value":"102EF","name":"COPTIC EPACT NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udeef"},66288:{"value":"102F0","name":"COPTIC EPACT NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef0"},66289:{"value":"102F1","name":"COPTIC EPACT NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef1"},66290:{"value":"102F2","name":"COPTIC EPACT NUMBER NINETY","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef2"},66291:{"value":"102F3","name":"COPTIC EPACT NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef3"},66292:{"value":"102F4","name":"COPTIC EPACT NUMBER TWO HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef4"},66293:{"value":"102F5","name":"COPTIC EPACT NUMBER THREE HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef5"},66294:{"value":"102F6","name":"COPTIC EPACT NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef6"},66295:{"value":"102F7","name":"COPTIC EPACT NUMBER FIVE HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef7"},66296:{"value":"102F8","name":"COPTIC EPACT NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef8"},66297:{"value":"102F9","name":"COPTIC EPACT NUMBER SEVEN HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udef9"},66298:{"value":"102FA","name":"COPTIC EPACT NUMBER EIGHT HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udefa"},66299:{"value":"102FB","name":"COPTIC EPACT NUMBER NINE HUNDRED","category":"No","class":"0","bidirectional_category":"EN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udefb"},66336:{"value":"10320","name":"OLD ITALIC NUMERAL ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf20"},66337:{"value":"10321","name":"OLD ITALIC NUMERAL FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf21"},66338:{"value":"10322","name":"OLD ITALIC NUMERAL TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf22"},66339:{"value":"10323","name":"OLD ITALIC NUMERAL FIFTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf23"},67672:{"value":"10858","name":"IMPERIAL ARAMAIC NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc58"},67673:{"value":"10859","name":"IMPERIAL ARAMAIC NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc59"},67674:{"value":"1085A","name":"IMPERIAL ARAMAIC NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc5a"},67675:{"value":"1085B","name":"IMPERIAL ARAMAIC NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc5b"},67676:{"value":"1085C","name":"IMPERIAL ARAMAIC NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc5c"},67677:{"value":"1085D","name":"IMPERIAL ARAMAIC NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc5d"},67678:{"value":"1085E","name":"IMPERIAL ARAMAIC NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc5e"},67679:{"value":"1085F","name":"IMPERIAL ARAMAIC NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc5f"},67705:{"value":"10879","name":"PALMYRENE NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc79"},67706:{"value":"1087A","name":"PALMYRENE NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc7a"},67707:{"value":"1087B","name":"PALMYRENE NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc7b"},67708:{"value":"1087C","name":"PALMYRENE NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc7c"},67709:{"value":"1087D","name":"PALMYRENE NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc7d"},67710:{"value":"1087E","name":"PALMYRENE NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc7e"},67711:{"value":"1087F","name":"PALMYRENE NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc7f"},67751:{"value":"108A7","name":"NABATAEAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udca7"},67752:{"value":"108A8","name":"NABATAEAN NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udca8"},67753:{"value":"108A9","name":"NABATAEAN NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udca9"},67754:{"value":"108AA","name":"NABATAEAN NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcaa"},67755:{"value":"108AB","name":"NABATAEAN CRUCIFORM NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcab"},67756:{"value":"108AC","name":"NABATAEAN NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcac"},67757:{"value":"108AD","name":"NABATAEAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcad"},67758:{"value":"108AE","name":"NABATAEAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcae"},67759:{"value":"108AF","name":"NABATAEAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcaf"},67835:{"value":"108FB","name":"HATRAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcfb"},67836:{"value":"108FC","name":"HATRAN NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcfc"},67837:{"value":"108FD","name":"HATRAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcfd"},67838:{"value":"108FE","name":"HATRAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcfe"},67839:{"value":"108FF","name":"HATRAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udcff"},67862:{"value":"10916","name":"PHOENICIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd16"},67863:{"value":"10917","name":"PHOENICIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd17"},67864:{"value":"10918","name":"PHOENICIAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd18"},67865:{"value":"10919","name":"PHOENICIAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd19"},67866:{"value":"1091A","name":"PHOENICIAN NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd1a"},67867:{"value":"1091B","name":"PHOENICIAN NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd1b"},68028:{"value":"109BC","name":"MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"11/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddbc"},68029:{"value":"109BD","name":"MEROITIC CURSIVE FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddbd"},68032:{"value":"109C0","name":"MEROITIC CURSIVE NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc0"},68033:{"value":"109C1","name":"MEROITIC CURSIVE NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc1"},68034:{"value":"109C2","name":"MEROITIC CURSIVE NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc2"},68035:{"value":"109C3","name":"MEROITIC CURSIVE NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc3"},68036:{"value":"109C4","name":"MEROITIC CURSIVE NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc4"},68037:{"value":"109C5","name":"MEROITIC CURSIVE NUMBER SIX","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc5"},68038:{"value":"109C6","name":"MEROITIC CURSIVE NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc6"},68039:{"value":"109C7","name":"MEROITIC CURSIVE NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc7"},68040:{"value":"109C8","name":"MEROITIC CURSIVE NUMBER NINE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc8"},68041:{"value":"109C9","name":"MEROITIC CURSIVE NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddc9"},68042:{"value":"109CA","name":"MEROITIC CURSIVE NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddca"},68043:{"value":"109CB","name":"MEROITIC CURSIVE NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddcb"},68044:{"value":"109CC","name":"MEROITIC CURSIVE NUMBER FORTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddcc"},68045:{"value":"109CD","name":"MEROITIC CURSIVE NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddcd"},68046:{"value":"109CE","name":"MEROITIC CURSIVE NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddce"},68047:{"value":"109CF","name":"MEROITIC CURSIVE NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddcf"},68050:{"value":"109D2","name":"MEROITIC CURSIVE NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd2"},68051:{"value":"109D3","name":"MEROITIC CURSIVE NUMBER TWO HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd3"},68052:{"value":"109D4","name":"MEROITIC CURSIVE NUMBER THREE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd4"},68053:{"value":"109D5","name":"MEROITIC CURSIVE NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd5"},68054:{"value":"109D6","name":"MEROITIC CURSIVE NUMBER FIVE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd6"},68055:{"value":"109D7","name":"MEROITIC CURSIVE NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd7"},68056:{"value":"109D8","name":"MEROITIC CURSIVE NUMBER SEVEN HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd8"},68057:{"value":"109D9","name":"MEROITIC CURSIVE NUMBER EIGHT HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddd9"},68058:{"value":"109DA","name":"MEROITIC CURSIVE NUMBER NINE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddda"},68059:{"value":"109DB","name":"MEROITIC CURSIVE NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udddb"},68060:{"value":"109DC","name":"MEROITIC CURSIVE NUMBER TWO THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udddc"},68061:{"value":"109DD","name":"MEROITIC CURSIVE NUMBER THREE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udddd"},68062:{"value":"109DE","name":"MEROITIC CURSIVE NUMBER FOUR THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddde"},68063:{"value":"109DF","name":"MEROITIC CURSIVE NUMBER FIVE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udddf"},68064:{"value":"109E0","name":"MEROITIC CURSIVE NUMBER SIX THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde0"},68065:{"value":"109E1","name":"MEROITIC CURSIVE NUMBER SEVEN THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde1"},68066:{"value":"109E2","name":"MEROITIC CURSIVE NUMBER EIGHT THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde2"},68067:{"value":"109E3","name":"MEROITIC CURSIVE NUMBER NINE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde3"},68068:{"value":"109E4","name":"MEROITIC CURSIVE NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde4"},68069:{"value":"109E5","name":"MEROITIC CURSIVE NUMBER TWENTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde5"},68070:{"value":"109E6","name":"MEROITIC CURSIVE NUMBER THIRTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde6"},68071:{"value":"109E7","name":"MEROITIC CURSIVE NUMBER FORTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde7"},68072:{"value":"109E8","name":"MEROITIC CURSIVE NUMBER FIFTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde8"},68073:{"value":"109E9","name":"MEROITIC CURSIVE NUMBER SIXTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udde9"},68074:{"value":"109EA","name":"MEROITIC CURSIVE NUMBER SEVENTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddea"},68075:{"value":"109EB","name":"MEROITIC CURSIVE NUMBER EIGHTY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddeb"},68076:{"value":"109EC","name":"MEROITIC CURSIVE NUMBER NINETY THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddec"},68077:{"value":"109ED","name":"MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udded"},68078:{"value":"109EE","name":"MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddee"},68079:{"value":"109EF","name":"MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddef"},68080:{"value":"109F0","name":"MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf0"},68081:{"value":"109F1","name":"MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf1"},68082:{"value":"109F2","name":"MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf2"},68083:{"value":"109F3","name":"MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf3"},68084:{"value":"109F4","name":"MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf4"},68085:{"value":"109F5","name":"MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf5"},68086:{"value":"109F6","name":"MEROITIC CURSIVE FRACTION ONE TWELFTH","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf6"},68087:{"value":"109F7","name":"MEROITIC CURSIVE FRACTION TWO TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf7"},68088:{"value":"109F8","name":"MEROITIC CURSIVE FRACTION THREE TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf8"},68089:{"value":"109F9","name":"MEROITIC CURSIVE FRACTION FOUR TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddf9"},68090:{"value":"109FA","name":"MEROITIC CURSIVE FRACTION FIVE TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddfa"},68091:{"value":"109FB","name":"MEROITIC CURSIVE FRACTION SIX TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddfb"},68092:{"value":"109FC","name":"MEROITIC CURSIVE FRACTION SEVEN TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddfc"},68093:{"value":"109FD","name":"MEROITIC CURSIVE FRACTION EIGHT TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddfd"},68094:{"value":"109FE","name":"MEROITIC CURSIVE FRACTION NINE TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddfe"},68095:{"value":"109FF","name":"MEROITIC CURSIVE FRACTION TEN TWELFTHS","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10/12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\uddff"},68160:{"value":"10A40","name":"KHAROSHTHI DIGIT ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude40"},68161:{"value":"10A41","name":"KHAROSHTHI DIGIT TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude41"},68162:{"value":"10A42","name":"KHAROSHTHI DIGIT THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude42"},68163:{"value":"10A43","name":"KHAROSHTHI DIGIT FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude43"},68164:{"value":"10A44","name":"KHAROSHTHI NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude44"},68165:{"value":"10A45","name":"KHAROSHTHI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude45"},68166:{"value":"10A46","name":"KHAROSHTHI NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude46"},68167:{"value":"10A47","name":"KHAROSHTHI NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude47"},68168:{"value":"10A48","name":"KHAROSHTHI FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude48"},68221:{"value":"10A7D","name":"OLD SOUTH ARABIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude7d"},68222:{"value":"10A7E","name":"OLD SOUTH ARABIAN NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude7e"},68253:{"value":"10A9D","name":"OLD NORTH ARABIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude9d"},68254:{"value":"10A9E","name":"OLD NORTH ARABIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude9e"},68255:{"value":"10A9F","name":"OLD NORTH ARABIAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude9f"},68331:{"value":"10AEB","name":"MANICHAEAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeeb"},68332:{"value":"10AEC","name":"MANICHAEAN NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeec"},68333:{"value":"10AED","name":"MANICHAEAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeed"},68334:{"value":"10AEE","name":"MANICHAEAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeee"},68335:{"value":"10AEF","name":"MANICHAEAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udeef"},68440:{"value":"10B58","name":"INSCRIPTIONAL PARTHIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf58"},68441:{"value":"10B59","name":"INSCRIPTIONAL PARTHIAN NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf59"},68442:{"value":"10B5A","name":"INSCRIPTIONAL PARTHIAN NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf5a"},68443:{"value":"10B5B","name":"INSCRIPTIONAL PARTHIAN NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf5b"},68444:{"value":"10B5C","name":"INSCRIPTIONAL PARTHIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf5c"},68445:{"value":"10B5D","name":"INSCRIPTIONAL PARTHIAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf5d"},68446:{"value":"10B5E","name":"INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf5e"},68447:{"value":"10B5F","name":"INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf5f"},68472:{"value":"10B78","name":"INSCRIPTIONAL PAHLAVI NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf78"},68473:{"value":"10B79","name":"INSCRIPTIONAL PAHLAVI NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf79"},68474:{"value":"10B7A","name":"INSCRIPTIONAL PAHLAVI NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf7a"},68475:{"value":"10B7B","name":"INSCRIPTIONAL PAHLAVI NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf7b"},68476:{"value":"10B7C","name":"INSCRIPTIONAL PAHLAVI NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf7c"},68477:{"value":"10B7D","name":"INSCRIPTIONAL PAHLAVI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf7d"},68478:{"value":"10B7E","name":"INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf7e"},68479:{"value":"10B7F","name":"INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf7f"},68521:{"value":"10BA9","name":"PSALTER PAHLAVI NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfa9"},68522:{"value":"10BAA","name":"PSALTER PAHLAVI NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfaa"},68523:{"value":"10BAB","name":"PSALTER PAHLAVI NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfab"},68524:{"value":"10BAC","name":"PSALTER PAHLAVI NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfac"},68525:{"value":"10BAD","name":"PSALTER PAHLAVI NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfad"},68526:{"value":"10BAE","name":"PSALTER PAHLAVI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfae"},68527:{"value":"10BAF","name":"PSALTER PAHLAVI NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udfaf"},68858:{"value":"10CFA","name":"OLD HUNGARIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udcfa"},68859:{"value":"10CFB","name":"OLD HUNGARIAN NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udcfb"},68860:{"value":"10CFC","name":"OLD HUNGARIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udcfc"},68861:{"value":"10CFD","name":"OLD HUNGARIAN NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udcfd"},68862:{"value":"10CFE","name":"OLD HUNGARIAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udcfe"},68863:{"value":"10CFF","name":"OLD HUNGARIAN NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udcff"},69216:{"value":"10E60","name":"RUMI DIGIT ONE","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude60"},69217:{"value":"10E61","name":"RUMI DIGIT TWO","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude61"},69218:{"value":"10E62","name":"RUMI DIGIT THREE","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude62"},69219:{"value":"10E63","name":"RUMI DIGIT FOUR","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude63"},69220:{"value":"10E64","name":"RUMI DIGIT FIVE","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude64"},69221:{"value":"10E65","name":"RUMI DIGIT SIX","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude65"},69222:{"value":"10E66","name":"RUMI DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude66"},69223:{"value":"10E67","name":"RUMI DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude67"},69224:{"value":"10E68","name":"RUMI DIGIT NINE","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude68"},69225:{"value":"10E69","name":"RUMI NUMBER TEN","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude69"},69226:{"value":"10E6A","name":"RUMI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude6a"},69227:{"value":"10E6B","name":"RUMI NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude6b"},69228:{"value":"10E6C","name":"RUMI NUMBER FORTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude6c"},69229:{"value":"10E6D","name":"RUMI NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude6d"},69230:{"value":"10E6E","name":"RUMI NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude6e"},69231:{"value":"10E6F","name":"RUMI NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude6f"},69232:{"value":"10E70","name":"RUMI NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude70"},69233:{"value":"10E71","name":"RUMI NUMBER NINETY","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude71"},69234:{"value":"10E72","name":"RUMI NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude72"},69235:{"value":"10E73","name":"RUMI NUMBER TWO HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude73"},69236:{"value":"10E74","name":"RUMI NUMBER THREE HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude74"},69237:{"value":"10E75","name":"RUMI NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude75"},69238:{"value":"10E76","name":"RUMI NUMBER FIVE HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude76"},69239:{"value":"10E77","name":"RUMI NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude77"},69240:{"value":"10E78","name":"RUMI NUMBER SEVEN HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude78"},69241:{"value":"10E79","name":"RUMI NUMBER EIGHT HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude79"},69242:{"value":"10E7A","name":"RUMI NUMBER NINE HUNDRED","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude7a"},69243:{"value":"10E7B","name":"RUMI FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude7b"},69244:{"value":"10E7C","name":"RUMI FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude7c"},69245:{"value":"10E7D","name":"RUMI FRACTION ONE THIRD","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude7d"},69246:{"value":"10E7E","name":"RUMI FRACTION TWO THIRDS","category":"No","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2/3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\ude7e"},69405:{"value":"10F1D","name":"OLD SOGDIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf1d"},69406:{"value":"10F1E","name":"OLD SOGDIAN NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf1e"},69407:{"value":"10F1F","name":"OLD SOGDIAN NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf1f"},69408:{"value":"10F20","name":"OLD SOGDIAN NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf20"},69409:{"value":"10F21","name":"OLD SOGDIAN NUMBER FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf21"},69410:{"value":"10F22","name":"OLD SOGDIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf22"},69411:{"value":"10F23","name":"OLD SOGDIAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf23"},69412:{"value":"10F24","name":"OLD SOGDIAN NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf24"},69413:{"value":"10F25","name":"OLD SOGDIAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf25"},69414:{"value":"10F26","name":"OLD SOGDIAN FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf26"},69457:{"value":"10F51","name":"SOGDIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf51"},69458:{"value":"10F52","name":"SOGDIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf52"},69459:{"value":"10F53","name":"SOGDIAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf53"},69460:{"value":"10F54","name":"SOGDIAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf54"},69573:{"value":"10FC5","name":"CHORASMIAN NUMBER ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc5"},69574:{"value":"10FC6","name":"CHORASMIAN NUMBER TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc6"},69575:{"value":"10FC7","name":"CHORASMIAN NUMBER THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc7"},69576:{"value":"10FC8","name":"CHORASMIAN NUMBER FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc8"},69577:{"value":"10FC9","name":"CHORASMIAN NUMBER TEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfc9"},69578:{"value":"10FCA","name":"CHORASMIAN NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfca"},69579:{"value":"10FCB","name":"CHORASMIAN NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udfcb"},69714:{"value":"11052","name":"BRAHMI NUMBER ONE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc52"},69715:{"value":"11053","name":"BRAHMI NUMBER TWO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc53"},69716:{"value":"11054","name":"BRAHMI NUMBER THREE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc54"},69717:{"value":"11055","name":"BRAHMI NUMBER FOUR","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc55"},69718:{"value":"11056","name":"BRAHMI NUMBER FIVE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc56"},69719:{"value":"11057","name":"BRAHMI NUMBER SIX","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc57"},69720:{"value":"11058","name":"BRAHMI NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc58"},69721:{"value":"11059","name":"BRAHMI NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc59"},69722:{"value":"1105A","name":"BRAHMI NUMBER NINE","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc5a"},69723:{"value":"1105B","name":"BRAHMI NUMBER TEN","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc5b"},69724:{"value":"1105C","name":"BRAHMI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc5c"},69725:{"value":"1105D","name":"BRAHMI NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc5d"},69726:{"value":"1105E","name":"BRAHMI NUMBER FORTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc5e"},69727:{"value":"1105F","name":"BRAHMI NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc5f"},69728:{"value":"11060","name":"BRAHMI NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc60"},69729:{"value":"11061","name":"BRAHMI NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc61"},69730:{"value":"11062","name":"BRAHMI NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc62"},69731:{"value":"11063","name":"BRAHMI NUMBER NINETY","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc63"},69732:{"value":"11064","name":"BRAHMI NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc64"},69733:{"value":"11065","name":"BRAHMI NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc65"},70113:{"value":"111E1","name":"SINHALA ARCHAIC DIGIT ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde1"},70114:{"value":"111E2","name":"SINHALA ARCHAIC DIGIT TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde2"},70115:{"value":"111E3","name":"SINHALA ARCHAIC DIGIT THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde3"},70116:{"value":"111E4","name":"SINHALA ARCHAIC DIGIT FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde4"},70117:{"value":"111E5","name":"SINHALA ARCHAIC DIGIT FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde5"},70118:{"value":"111E6","name":"SINHALA ARCHAIC DIGIT SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde6"},70119:{"value":"111E7","name":"SINHALA ARCHAIC DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde7"},70120:{"value":"111E8","name":"SINHALA ARCHAIC DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde8"},70121:{"value":"111E9","name":"SINHALA ARCHAIC DIGIT NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udde9"},70122:{"value":"111EA","name":"SINHALA ARCHAIC NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddea"},70123:{"value":"111EB","name":"SINHALA ARCHAIC NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddeb"},70124:{"value":"111EC","name":"SINHALA ARCHAIC NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddec"},70125:{"value":"111ED","name":"SINHALA ARCHAIC NUMBER FORTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udded"},70126:{"value":"111EE","name":"SINHALA ARCHAIC NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddee"},70127:{"value":"111EF","name":"SINHALA ARCHAIC NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddef"},70128:{"value":"111F0","name":"SINHALA ARCHAIC NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddf0"},70129:{"value":"111F1","name":"SINHALA ARCHAIC NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddf1"},70130:{"value":"111F2","name":"SINHALA ARCHAIC NUMBER NINETY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddf2"},70131:{"value":"111F3","name":"SINHALA ARCHAIC NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddf3"},70132:{"value":"111F4","name":"SINHALA ARCHAIC NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddf4"},71482:{"value":"1173A","name":"AHOM NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf3a"},71483:{"value":"1173B","name":"AHOM NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf3b"},71914:{"value":"118EA","name":"WARANG CITI NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcea"},71915:{"value":"118EB","name":"WARANG CITI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udceb"},71916:{"value":"118EC","name":"WARANG CITI NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcec"},71917:{"value":"118ED","name":"WARANG CITI NUMBER FORTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udced"},71918:{"value":"118EE","name":"WARANG CITI NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcee"},71919:{"value":"118EF","name":"WARANG CITI NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcef"},71920:{"value":"118F0","name":"WARANG CITI NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcf0"},71921:{"value":"118F1","name":"WARANG CITI NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcf1"},71922:{"value":"118F2","name":"WARANG CITI NUMBER NINETY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udcf2"},72794:{"value":"11C5A","name":"BHAIKSUKI NUMBER ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc5a"},72795:{"value":"11C5B","name":"BHAIKSUKI NUMBER TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc5b"},72796:{"value":"11C5C","name":"BHAIKSUKI NUMBER THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc5c"},72797:{"value":"11C5D","name":"BHAIKSUKI NUMBER FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc5d"},72798:{"value":"11C5E","name":"BHAIKSUKI NUMBER FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc5e"},72799:{"value":"11C5F","name":"BHAIKSUKI NUMBER SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc5f"},72800:{"value":"11C60","name":"BHAIKSUKI NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc60"},72801:{"value":"11C61","name":"BHAIKSUKI NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc61"},72802:{"value":"11C62","name":"BHAIKSUKI NUMBER NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc62"},72803:{"value":"11C63","name":"BHAIKSUKI NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc63"},72804:{"value":"11C64","name":"BHAIKSUKI NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc64"},72805:{"value":"11C65","name":"BHAIKSUKI NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc65"},72806:{"value":"11C66","name":"BHAIKSUKI NUMBER FORTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc66"},72807:{"value":"11C67","name":"BHAIKSUKI NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc67"},72808:{"value":"11C68","name":"BHAIKSUKI NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc68"},72809:{"value":"11C69","name":"BHAIKSUKI NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc69"},72810:{"value":"11C6A","name":"BHAIKSUKI NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc6a"},72811:{"value":"11C6B","name":"BHAIKSUKI NUMBER NINETY","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc6b"},72812:{"value":"11C6C","name":"BHAIKSUKI HUNDREDS UNIT MARK","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc6c"},73664:{"value":"11FC0","name":"TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/320","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc0"},73665:{"value":"11FC1","name":"TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/160","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc1"},73666:{"value":"11FC2","name":"TAMIL FRACTION ONE EIGHTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc2"},73667:{"value":"11FC3","name":"TAMIL FRACTION ONE SIXTY-FOURTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/64","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc3"},73668:{"value":"11FC4","name":"TAMIL FRACTION ONE FORTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc4"},73669:{"value":"11FC5","name":"TAMIL FRACTION ONE THIRTY-SECOND","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/32","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc5"},73670:{"value":"11FC6","name":"TAMIL FRACTION THREE EIGHTIETHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc6"},73671:{"value":"11FC7","name":"TAMIL FRACTION THREE SIXTY-FOURTHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/64","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc7"},73672:{"value":"11FC8","name":"TAMIL FRACTION ONE TWENTIETH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc8"},73673:{"value":"11FC9","name":"TAMIL FRACTION ONE SIXTEENTH-1","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfc9"},73674:{"value":"11FCA","name":"TAMIL FRACTION ONE SIXTEENTH-2","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfca"},73675:{"value":"11FCB","name":"TAMIL FRACTION ONE TENTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfcb"},73676:{"value":"11FCC","name":"TAMIL FRACTION ONE EIGHTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfcc"},73677:{"value":"11FCD","name":"TAMIL FRACTION THREE TWENTIETHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfcd"},73678:{"value":"11FCE","name":"TAMIL FRACTION THREE SIXTEENTHS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfce"},73679:{"value":"11FCF","name":"TAMIL FRACTION ONE FIFTH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfcf"},73680:{"value":"11FD0","name":"TAMIL FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd0"},73681:{"value":"11FD1","name":"TAMIL FRACTION ONE HALF-1","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd1"},73682:{"value":"11FD2","name":"TAMIL FRACTION ONE HALF-2","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd2"},73683:{"value":"11FD3","name":"TAMIL FRACTION THREE QUARTERS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd3"},73684:{"value":"11FD4","name":"TAMIL FRACTION DOWNSCALING FACTOR KIIZH","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/320","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd4"},93019:{"value":"16B5B","name":"PAHAWH HMONG NUMBER TENS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf5b"},93020:{"value":"16B5C","name":"PAHAWH HMONG NUMBER HUNDREDS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf5c"},93021:{"value":"16B5D","name":"PAHAWH HMONG NUMBER TEN THOUSANDS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf5d"},93022:{"value":"16B5E","name":"PAHAWH HMONG NUMBER MILLIONS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf5e"},93023:{"value":"16B5F","name":"PAHAWH HMONG NUMBER HUNDRED MILLIONS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100000000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf5f"},93024:{"value":"16B60","name":"PAHAWH HMONG NUMBER TEN BILLIONS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000000000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf60"},93025:{"value":"16B61","name":"PAHAWH HMONG NUMBER TRILLIONS","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000000000000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf61"},93824:{"value":"16E80","name":"MEDEFAIDRIN DIGIT ZERO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude80"},93825:{"value":"16E81","name":"MEDEFAIDRIN DIGIT ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude81"},93826:{"value":"16E82","name":"MEDEFAIDRIN DIGIT TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude82"},93827:{"value":"16E83","name":"MEDEFAIDRIN DIGIT THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude83"},93828:{"value":"16E84","name":"MEDEFAIDRIN DIGIT FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude84"},93829:{"value":"16E85","name":"MEDEFAIDRIN DIGIT FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude85"},93830:{"value":"16E86","name":"MEDEFAIDRIN DIGIT SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude86"},93831:{"value":"16E87","name":"MEDEFAIDRIN DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude87"},93832:{"value":"16E88","name":"MEDEFAIDRIN DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude88"},93833:{"value":"16E89","name":"MEDEFAIDRIN DIGIT NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude89"},93834:{"value":"16E8A","name":"MEDEFAIDRIN NUMBER TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude8a"},93835:{"value":"16E8B","name":"MEDEFAIDRIN NUMBER ELEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude8b"},93836:{"value":"16E8C","name":"MEDEFAIDRIN NUMBER TWELVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude8c"},93837:{"value":"16E8D","name":"MEDEFAIDRIN NUMBER THIRTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"13","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude8d"},93838:{"value":"16E8E","name":"MEDEFAIDRIN NUMBER FOURTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"14","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude8e"},93839:{"value":"16E8F","name":"MEDEFAIDRIN NUMBER FIFTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"15","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude8f"},93840:{"value":"16E90","name":"MEDEFAIDRIN NUMBER SIXTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude90"},93841:{"value":"16E91","name":"MEDEFAIDRIN NUMBER SEVENTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude91"},93842:{"value":"16E92","name":"MEDEFAIDRIN NUMBER EIGHTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude92"},93843:{"value":"16E93","name":"MEDEFAIDRIN NUMBER NINETEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude93"},93844:{"value":"16E94","name":"MEDEFAIDRIN DIGIT ONE ALTERNATE FORM","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude94"},93845:{"value":"16E95","name":"MEDEFAIDRIN DIGIT TWO ALTERNATE FORM","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude95"},93846:{"value":"16E96","name":"MEDEFAIDRIN DIGIT THREE ALTERNATE FORM","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude96"},119520:{"value":"1D2E0","name":"MAYAN NUMERAL ZERO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee0"},119521:{"value":"1D2E1","name":"MAYAN NUMERAL ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee1"},119522:{"value":"1D2E2","name":"MAYAN NUMERAL TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee2"},119523:{"value":"1D2E3","name":"MAYAN NUMERAL THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee3"},119524:{"value":"1D2E4","name":"MAYAN NUMERAL FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee4"},119525:{"value":"1D2E5","name":"MAYAN NUMERAL FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee5"},119526:{"value":"1D2E6","name":"MAYAN NUMERAL SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee6"},119527:{"value":"1D2E7","name":"MAYAN NUMERAL SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee7"},119528:{"value":"1D2E8","name":"MAYAN NUMERAL EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee8"},119529:{"value":"1D2E9","name":"MAYAN NUMERAL NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udee9"},119530:{"value":"1D2EA","name":"MAYAN NUMERAL TEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udeea"},119531:{"value":"1D2EB","name":"MAYAN NUMERAL ELEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"11","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udeeb"},119532:{"value":"1D2EC","name":"MAYAN NUMERAL TWELVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"12","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udeec"},119533:{"value":"1D2ED","name":"MAYAN NUMERAL THIRTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"13","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udeed"},119534:{"value":"1D2EE","name":"MAYAN NUMERAL FOURTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"14","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udeee"},119535:{"value":"1D2EF","name":"MAYAN NUMERAL FIFTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"15","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udeef"},119536:{"value":"1D2F0","name":"MAYAN NUMERAL SIXTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"16","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udef0"},119537:{"value":"1D2F1","name":"MAYAN NUMERAL SEVENTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"17","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udef1"},119538:{"value":"1D2F2","name":"MAYAN NUMERAL EIGHTEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"18","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udef2"},119539:{"value":"1D2F3","name":"MAYAN NUMERAL NINETEEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"19","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udef3"},119648:{"value":"1D360","name":"COUNTING ROD UNIT DIGIT ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf60"},119649:{"value":"1D361","name":"COUNTING ROD UNIT DIGIT TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf61"},119650:{"value":"1D362","name":"COUNTING ROD UNIT DIGIT THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf62"},119651:{"value":"1D363","name":"COUNTING ROD UNIT DIGIT FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf63"},119652:{"value":"1D364","name":"COUNTING ROD UNIT DIGIT FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf64"},119653:{"value":"1D365","name":"COUNTING ROD UNIT DIGIT SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf65"},119654:{"value":"1D366","name":"COUNTING ROD UNIT DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf66"},119655:{"value":"1D367","name":"COUNTING ROD UNIT DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf67"},119656:{"value":"1D368","name":"COUNTING ROD UNIT DIGIT NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf68"},119657:{"value":"1D369","name":"COUNTING ROD TENS DIGIT ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf69"},119658:{"value":"1D36A","name":"COUNTING ROD TENS DIGIT TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf6a"},119659:{"value":"1D36B","name":"COUNTING ROD TENS DIGIT THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf6b"},119660:{"value":"1D36C","name":"COUNTING ROD TENS DIGIT FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf6c"},119661:{"value":"1D36D","name":"COUNTING ROD TENS DIGIT FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf6d"},119662:{"value":"1D36E","name":"COUNTING ROD TENS DIGIT SIX","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf6e"},119663:{"value":"1D36F","name":"COUNTING ROD TENS DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf6f"},119664:{"value":"1D370","name":"COUNTING ROD TENS DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf70"},119665:{"value":"1D371","name":"COUNTING ROD TENS DIGIT NINE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf71"},119666:{"value":"1D372","name":"IDEOGRAPHIC TALLY MARK ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf72"},119667:{"value":"1D373","name":"IDEOGRAPHIC TALLY MARK TWO","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf73"},119668:{"value":"1D374","name":"IDEOGRAPHIC TALLY MARK THREE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf74"},119669:{"value":"1D375","name":"IDEOGRAPHIC TALLY MARK FOUR","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf75"},119670:{"value":"1D376","name":"IDEOGRAPHIC TALLY MARK FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf76"},119671:{"value":"1D377","name":"TALLY MARK ONE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf77"},119672:{"value":"1D378","name":"TALLY MARK FIVE","category":"No","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf78"},125127:{"value":"1E8C7","name":"MENDE KIKAKUI DIGIT ONE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc7"},125128:{"value":"1E8C8","name":"MENDE KIKAKUI DIGIT TWO","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc8"},125129:{"value":"1E8C9","name":"MENDE KIKAKUI DIGIT THREE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcc9"},125130:{"value":"1E8CA","name":"MENDE KIKAKUI DIGIT FOUR","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcca"},125131:{"value":"1E8CB","name":"MENDE KIKAKUI DIGIT FIVE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udccb"},125132:{"value":"1E8CC","name":"MENDE KIKAKUI DIGIT SIX","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udccc"},125133:{"value":"1E8CD","name":"MENDE KIKAKUI DIGIT SEVEN","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udccd"},125134:{"value":"1E8CE","name":"MENDE KIKAKUI DIGIT EIGHT","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udcce"},125135:{"value":"1E8CF","name":"MENDE KIKAKUI DIGIT NINE","category":"No","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udccf"},126065:{"value":"1EC71","name":"INDIC SIYAQ NUMBER ONE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc71"},126066:{"value":"1EC72","name":"INDIC SIYAQ NUMBER TWO","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc72"},126067:{"value":"1EC73","name":"INDIC SIYAQ NUMBER THREE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc73"},126068:{"value":"1EC74","name":"INDIC SIYAQ NUMBER FOUR","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc74"},126069:{"value":"1EC75","name":"INDIC SIYAQ NUMBER FIVE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc75"},126070:{"value":"1EC76","name":"INDIC SIYAQ NUMBER SIX","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc76"},126071:{"value":"1EC77","name":"INDIC SIYAQ NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc77"},126072:{"value":"1EC78","name":"INDIC SIYAQ NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc78"},126073:{"value":"1EC79","name":"INDIC SIYAQ NUMBER NINE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc79"},126074:{"value":"1EC7A","name":"INDIC SIYAQ NUMBER TEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc7a"},126075:{"value":"1EC7B","name":"INDIC SIYAQ NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc7b"},126076:{"value":"1EC7C","name":"INDIC SIYAQ NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc7c"},126077:{"value":"1EC7D","name":"INDIC SIYAQ NUMBER FORTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc7d"},126078:{"value":"1EC7E","name":"INDIC SIYAQ NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc7e"},126079:{"value":"1EC7F","name":"INDIC SIYAQ NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc7f"},126080:{"value":"1EC80","name":"INDIC SIYAQ NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc80"},126081:{"value":"1EC81","name":"INDIC SIYAQ NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc81"},126082:{"value":"1EC82","name":"INDIC SIYAQ NUMBER NINETY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc82"},126083:{"value":"1EC83","name":"INDIC SIYAQ NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc83"},126084:{"value":"1EC84","name":"INDIC SIYAQ NUMBER TWO HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc84"},126085:{"value":"1EC85","name":"INDIC SIYAQ NUMBER THREE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc85"},126086:{"value":"1EC86","name":"INDIC SIYAQ NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc86"},126087:{"value":"1EC87","name":"INDIC SIYAQ NUMBER FIVE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc87"},126088:{"value":"1EC88","name":"INDIC SIYAQ NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc88"},126089:{"value":"1EC89","name":"INDIC SIYAQ NUMBER SEVEN HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc89"},126090:{"value":"1EC8A","name":"INDIC SIYAQ NUMBER EIGHT HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc8a"},126091:{"value":"1EC8B","name":"INDIC SIYAQ NUMBER NINE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc8b"},126092:{"value":"1EC8C","name":"INDIC SIYAQ NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc8c"},126093:{"value":"1EC8D","name":"INDIC SIYAQ NUMBER TWO THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc8d"},126094:{"value":"1EC8E","name":"INDIC SIYAQ NUMBER THREE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc8e"},126095:{"value":"1EC8F","name":"INDIC SIYAQ NUMBER FOUR THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc8f"},126096:{"value":"1EC90","name":"INDIC SIYAQ NUMBER FIVE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc90"},126097:{"value":"1EC91","name":"INDIC SIYAQ NUMBER SIX THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc91"},126098:{"value":"1EC92","name":"INDIC SIYAQ NUMBER SEVEN THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc92"},126099:{"value":"1EC93","name":"INDIC SIYAQ NUMBER EIGHT THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc93"},126100:{"value":"1EC94","name":"INDIC SIYAQ NUMBER NINE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc94"},126101:{"value":"1EC95","name":"INDIC SIYAQ NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc95"},126102:{"value":"1EC96","name":"INDIC SIYAQ NUMBER TWENTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc96"},126103:{"value":"1EC97","name":"INDIC SIYAQ NUMBER THIRTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc97"},126104:{"value":"1EC98","name":"INDIC SIYAQ NUMBER FORTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc98"},126105:{"value":"1EC99","name":"INDIC SIYAQ NUMBER FIFTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc99"},126106:{"value":"1EC9A","name":"INDIC SIYAQ NUMBER SIXTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc9a"},126107:{"value":"1EC9B","name":"INDIC SIYAQ NUMBER SEVENTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc9b"},126108:{"value":"1EC9C","name":"INDIC SIYAQ NUMBER EIGHTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc9c"},126109:{"value":"1EC9D","name":"INDIC SIYAQ NUMBER NINETY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc9d"},126110:{"value":"1EC9E","name":"INDIC SIYAQ NUMBER LAKH","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc9e"},126111:{"value":"1EC9F","name":"INDIC SIYAQ NUMBER LAKHAN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udc9f"},126112:{"value":"1ECA0","name":"INDIC SIYAQ LAKH MARK","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca0"},126113:{"value":"1ECA1","name":"INDIC SIYAQ NUMBER KAROR","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca1"},126114:{"value":"1ECA2","name":"INDIC SIYAQ NUMBER KARORAN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20000000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca2"},126115:{"value":"1ECA3","name":"INDIC SIYAQ NUMBER PREFIXED ONE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca3"},126116:{"value":"1ECA4","name":"INDIC SIYAQ NUMBER PREFIXED TWO","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca4"},126117:{"value":"1ECA5","name":"INDIC SIYAQ NUMBER PREFIXED THREE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca5"},126118:{"value":"1ECA6","name":"INDIC SIYAQ NUMBER PREFIXED FOUR","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca6"},126119:{"value":"1ECA7","name":"INDIC SIYAQ NUMBER PREFIXED FIVE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca7"},126120:{"value":"1ECA8","name":"INDIC SIYAQ NUMBER PREFIXED SIX","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca8"},126121:{"value":"1ECA9","name":"INDIC SIYAQ NUMBER PREFIXED SEVEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udca9"},126122:{"value":"1ECAA","name":"INDIC SIYAQ NUMBER PREFIXED EIGHT","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcaa"},126123:{"value":"1ECAB","name":"INDIC SIYAQ NUMBER PREFIXED NINE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcab"},126125:{"value":"1ECAD","name":"INDIC SIYAQ FRACTION ONE QUARTER","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcad"},126126:{"value":"1ECAE","name":"INDIC SIYAQ FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcae"},126127:{"value":"1ECAF","name":"INDIC SIYAQ FRACTION THREE QUARTERS","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3/4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcaf"},126129:{"value":"1ECB1","name":"INDIC SIYAQ NUMBER ALTERNATE ONE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcb1"},126130:{"value":"1ECB2","name":"INDIC SIYAQ NUMBER ALTERNATE TWO","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcb2"},126131:{"value":"1ECB3","name":"INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcb3"},126132:{"value":"1ECB4","name":"INDIC SIYAQ ALTERNATE LAKH MARK","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcb4"},126209:{"value":"1ED01","name":"OTTOMAN SIYAQ NUMBER ONE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd01"},126210:{"value":"1ED02","name":"OTTOMAN SIYAQ NUMBER TWO","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd02"},126211:{"value":"1ED03","name":"OTTOMAN SIYAQ NUMBER THREE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd03"},126212:{"value":"1ED04","name":"OTTOMAN SIYAQ NUMBER FOUR","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd04"},126213:{"value":"1ED05","name":"OTTOMAN SIYAQ NUMBER FIVE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd05"},126214:{"value":"1ED06","name":"OTTOMAN SIYAQ NUMBER SIX","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd06"},126215:{"value":"1ED07","name":"OTTOMAN SIYAQ NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd07"},126216:{"value":"1ED08","name":"OTTOMAN SIYAQ NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd08"},126217:{"value":"1ED09","name":"OTTOMAN SIYAQ NUMBER NINE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd09"},126218:{"value":"1ED0A","name":"OTTOMAN SIYAQ NUMBER TEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd0a"},126219:{"value":"1ED0B","name":"OTTOMAN SIYAQ NUMBER TWENTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd0b"},126220:{"value":"1ED0C","name":"OTTOMAN SIYAQ NUMBER THIRTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd0c"},126221:{"value":"1ED0D","name":"OTTOMAN SIYAQ NUMBER FORTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd0d"},126222:{"value":"1ED0E","name":"OTTOMAN SIYAQ NUMBER FIFTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd0e"},126223:{"value":"1ED0F","name":"OTTOMAN SIYAQ NUMBER SIXTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd0f"},126224:{"value":"1ED10","name":"OTTOMAN SIYAQ NUMBER SEVENTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd10"},126225:{"value":"1ED11","name":"OTTOMAN SIYAQ NUMBER EIGHTY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd11"},126226:{"value":"1ED12","name":"OTTOMAN SIYAQ NUMBER NINETY","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd12"},126227:{"value":"1ED13","name":"OTTOMAN SIYAQ NUMBER ONE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"100","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd13"},126228:{"value":"1ED14","name":"OTTOMAN SIYAQ NUMBER TWO HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"200","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd14"},126229:{"value":"1ED15","name":"OTTOMAN SIYAQ NUMBER THREE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"300","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd15"},126230:{"value":"1ED16","name":"OTTOMAN SIYAQ NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd16"},126231:{"value":"1ED17","name":"OTTOMAN SIYAQ NUMBER FIVE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"500","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd17"},126232:{"value":"1ED18","name":"OTTOMAN SIYAQ NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd18"},126233:{"value":"1ED19","name":"OTTOMAN SIYAQ NUMBER SEVEN HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"700","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd19"},126234:{"value":"1ED1A","name":"OTTOMAN SIYAQ NUMBER EIGHT HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"800","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd1a"},126235:{"value":"1ED1B","name":"OTTOMAN SIYAQ NUMBER NINE HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"900","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd1b"},126236:{"value":"1ED1C","name":"OTTOMAN SIYAQ NUMBER ONE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd1c"},126237:{"value":"1ED1D","name":"OTTOMAN SIYAQ NUMBER TWO THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd1d"},126238:{"value":"1ED1E","name":"OTTOMAN SIYAQ NUMBER THREE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd1e"},126239:{"value":"1ED1F","name":"OTTOMAN SIYAQ NUMBER FOUR THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd1f"},126240:{"value":"1ED20","name":"OTTOMAN SIYAQ NUMBER FIVE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd20"},126241:{"value":"1ED21","name":"OTTOMAN SIYAQ NUMBER SIX THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd21"},126242:{"value":"1ED22","name":"OTTOMAN SIYAQ NUMBER SEVEN THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd22"},126243:{"value":"1ED23","name":"OTTOMAN SIYAQ NUMBER EIGHT THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd23"},126244:{"value":"1ED24","name":"OTTOMAN SIYAQ NUMBER NINE THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd24"},126245:{"value":"1ED25","name":"OTTOMAN SIYAQ NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd25"},126246:{"value":"1ED26","name":"OTTOMAN SIYAQ NUMBER TWENTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"20000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd26"},126247:{"value":"1ED27","name":"OTTOMAN SIYAQ NUMBER THIRTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"30000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd27"},126248:{"value":"1ED28","name":"OTTOMAN SIYAQ NUMBER FORTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"40000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd28"},126249:{"value":"1ED29","name":"OTTOMAN SIYAQ NUMBER FIFTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"50000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd29"},126250:{"value":"1ED2A","name":"OTTOMAN SIYAQ NUMBER SIXTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"60000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd2a"},126251:{"value":"1ED2B","name":"OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"70000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd2b"},126252:{"value":"1ED2C","name":"OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"80000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd2c"},126253:{"value":"1ED2D","name":"OTTOMAN SIYAQ NUMBER NINETY THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"90000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd2d"},126255:{"value":"1ED2F","name":"OTTOMAN SIYAQ ALTERNATE NUMBER TWO","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd2f"},126256:{"value":"1ED30","name":"OTTOMAN SIYAQ ALTERNATE NUMBER THREE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd30"},126257:{"value":"1ED31","name":"OTTOMAN SIYAQ ALTERNATE NUMBER FOUR","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd31"},126258:{"value":"1ED32","name":"OTTOMAN SIYAQ ALTERNATE NUMBER FIVE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd32"},126259:{"value":"1ED33","name":"OTTOMAN SIYAQ ALTERNATE NUMBER SIX","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd33"},126260:{"value":"1ED34","name":"OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd34"},126261:{"value":"1ED35","name":"OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd35"},126262:{"value":"1ED36","name":"OTTOMAN SIYAQ ALTERNATE NUMBER NINE","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd36"},126263:{"value":"1ED37","name":"OTTOMAN SIYAQ ALTERNATE NUMBER TEN","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd37"},126264:{"value":"1ED38","name":"OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"400","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd38"},126265:{"value":"1ED39","name":"OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"600","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd39"},126266:{"value":"1ED3A","name":"OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"2000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd3a"},126267:{"value":"1ED3B","name":"OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"10000","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd3b"},126268:{"value":"1ED3C","name":"OTTOMAN SIYAQ FRACTION ONE HALF","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd3c"},126269:{"value":"1ED3D","name":"OTTOMAN SIYAQ FRACTION ONE SIXTH","category":"No","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"1/6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd3d"},127232:{"value":"1F100","name":"DIGIT ZERO FULL STOP","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0030 002E","decimal_digit_value":"","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd00"},127233:{"value":"1F101","name":"DIGIT ZERO COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0030 002C","decimal_digit_value":"","digit_value":"0","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd01"},127234:{"value":"1F102","name":"DIGIT ONE COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0031 002C","decimal_digit_value":"","digit_value":"1","numeric_value":"1","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd02"},127235:{"value":"1F103","name":"DIGIT TWO COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0032 002C","decimal_digit_value":"","digit_value":"2","numeric_value":"2","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd03"},127236:{"value":"1F104","name":"DIGIT THREE COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0033 002C","decimal_digit_value":"","digit_value":"3","numeric_value":"3","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd04"},127237:{"value":"1F105","name":"DIGIT FOUR COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0034 002C","decimal_digit_value":"","digit_value":"4","numeric_value":"4","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd05"},127238:{"value":"1F106","name":"DIGIT FIVE COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0035 002C","decimal_digit_value":"","digit_value":"5","numeric_value":"5","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd06"},127239:{"value":"1F107","name":"DIGIT SIX COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0036 002C","decimal_digit_value":"","digit_value":"6","numeric_value":"6","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd07"},127240:{"value":"1F108","name":"DIGIT SEVEN COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0037 002C","decimal_digit_value":"","digit_value":"7","numeric_value":"7","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd08"},127241:{"value":"1F109","name":"DIGIT EIGHT COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0038 002C","decimal_digit_value":"","digit_value":"8","numeric_value":"8","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd09"},127242:{"value":"1F10A","name":"DIGIT NINE COMMA","category":"No","class":"0","bidirectional_category":"EN","mapping":" 0039 002C","decimal_digit_value":"","digit_value":"9","numeric_value":"9","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd0a"},127243:{"value":"1F10B","name":"DINGBAT CIRCLED SANS-SERIF DIGIT ZERO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd0b"},127244:{"value":"1F10C","name":"DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO","category":"No","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"0","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd0c"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Pc.js b/node_modules/unicode/category/Pc.js new file mode 100644 index 000000000..acc841966 --- /dev/null +++ b/node_modules/unicode/category/Pc.js @@ -0,0 +1 @@ +module.exports={95:{"value":"005F","name":"LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x5F"},8255:{"value":"203F","name":"UNDERTIE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u203F"},8256:{"value":"2040","name":"CHARACTER TIE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2040"},8276:{"value":"2054","name":"INVERTED UNDERTIE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2054"},65075:{"value":"FE33","name":"PRESENTATION FORM FOR VERTICAL LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":" 005F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL SPACING UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE33"},65076:{"value":"FE34","name":"PRESENTATION FORM FOR VERTICAL WAVY LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":" 005F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE34"},65101:{"value":"FE4D","name":"DASHED LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":" 005F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DASHED UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE4D"},65102:{"value":"FE4E","name":"CENTRELINE LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":" 005F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING CENTERLINE UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE4E"},65103:{"value":"FE4F","name":"WAVY LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":" 005F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING WAVY UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE4F"},65343:{"value":"FF3F","name":"FULLWIDTH LOW LINE","category":"Pc","class":"0","bidirectional_category":"ON","mapping":" 005F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH SPACING UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF3F"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Pd.js b/node_modules/unicode/category/Pd.js new file mode 100644 index 000000000..f0bfb7b58 --- /dev/null +++ b/node_modules/unicode/category/Pd.js @@ -0,0 +1 @@ +module.exports={45:{"value":"002D","name":"HYPHEN-MINUS","category":"Pd","class":"0","bidirectional_category":"ES","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x2D"},1418:{"value":"058A","name":"ARMENIAN HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u058A"},1470:{"value":"05BE","name":"HEBREW PUNCTUATION MAQAF","category":"Pd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05BE"},5120:{"value":"1400","name":"CANADIAN SYLLABICS HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1400"},6150:{"value":"1806","name":"MONGOLIAN TODO SOFT HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1806"},8208:{"value":"2010","name":"HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2010"},8209:{"value":"2011","name":"NON-BREAKING HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":" 2010","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2011"},8210:{"value":"2012","name":"FIGURE DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2012"},8211:{"value":"2013","name":"EN DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2013"},8212:{"value":"2014","name":"EM DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2014"},8213:{"value":"2015","name":"HORIZONTAL BAR","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"QUOTATION DASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2015"},11799:{"value":"2E17","name":"DOUBLE OBLIQUE HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E17"},11802:{"value":"2E1A","name":"HYPHEN WITH DIAERESIS","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E1A"},11834:{"value":"2E3A","name":"TWO-EM DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E3A"},11835:{"value":"2E3B","name":"THREE-EM DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E3B"},11840:{"value":"2E40","name":"DOUBLE HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E40"},11869:{"value":"2E5D","name":"OBLIQUE HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E5D"},12316:{"value":"301C","name":"WAVE DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u301C"},12336:{"value":"3030","name":"WAVY DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3030"},12448:{"value":"30A0","name":"KATAKANA-HIRAGANA DOUBLE HYPHEN","category":"Pd","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30A0"},65073:{"value":"FE31","name":"PRESENTATION FORM FOR VERTICAL EM DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":" 2014","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL EM DASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE31"},65074:{"value":"FE32","name":"PRESENTATION FORM FOR VERTICAL EN DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":" 2013","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL EN DASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE32"},65112:{"value":"FE58","name":"SMALL EM DASH","category":"Pd","class":"0","bidirectional_category":"ON","mapping":" 2014","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE58"},65123:{"value":"FE63","name":"SMALL HYPHEN-MINUS","category":"Pd","class":"0","bidirectional_category":"ES","mapping":" 002D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE63"},65293:{"value":"FF0D","name":"FULLWIDTH HYPHEN-MINUS","category":"Pd","class":"0","bidirectional_category":"ES","mapping":" 002D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF0D"},69293:{"value":"10EAD","name":"YEZIDI HYPHENATION MARK","category":"Pd","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udead"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Pe.js b/node_modules/unicode/category/Pe.js new file mode 100644 index 000000000..ac7cd2491 --- /dev/null +++ b/node_modules/unicode/category/Pe.js @@ -0,0 +1 @@ +module.exports={41:{"value":"0029","name":"RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x29"},93:{"value":"005D","name":"RIGHT SQUARE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING SQUARE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x5D"},125:{"value":"007D","name":"RIGHT CURLY BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x7D"},3899:{"value":"0F3B","name":"TIBETAN MARK GUG RTAGS GYAS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F3B"},3901:{"value":"0F3D","name":"TIBETAN MARK ANG KHANG GYAS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"TIBETAN RIGHT BRACE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F3D"},5788:{"value":"169C","name":"OGHAM REVERSED FEATHER MARK","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u169C"},8262:{"value":"2046","name":"RIGHT SQUARE BRACKET WITH QUILL","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2046"},8318:{"value":"207E","name":"SUPERSCRIPT RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SUPERSCRIPT CLOSING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u207E"},8334:{"value":"208E","name":"SUBSCRIPT RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SUBSCRIPT CLOSING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u208E"},8969:{"value":"2309","name":"RIGHT CEILING","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2309"},8971:{"value":"230B","name":"RIGHT FLOOR","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u230B"},9002:{"value":"232A","name":"RIGHT-POINTING ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"3009","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"KET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u232A"},10089:{"value":"2769","name":"MEDIUM RIGHT PARENTHESIS ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2769"},10091:{"value":"276B","name":"MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u276B"},10093:{"value":"276D","name":"MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u276D"},10095:{"value":"276F","name":"HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u276F"},10097:{"value":"2771","name":"HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2771"},10099:{"value":"2773","name":"LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2773"},10101:{"value":"2775","name":"MEDIUM RIGHT CURLY BRACKET ORNAMENT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2775"},10182:{"value":"27C6","name":"RIGHT S-SHAPED BAG DELIMITER","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C6"},10215:{"value":"27E7","name":"MATHEMATICAL RIGHT WHITE SQUARE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E7"},10217:{"value":"27E9","name":"MATHEMATICAL RIGHT ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E9"},10219:{"value":"27EB","name":"MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27EB"},10221:{"value":"27ED","name":"MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27ED"},10223:{"value":"27EF","name":"MATHEMATICAL RIGHT FLATTENED PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27EF"},10628:{"value":"2984","name":"RIGHT WHITE CURLY BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2984"},10630:{"value":"2986","name":"RIGHT WHITE PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2986"},10632:{"value":"2988","name":"Z NOTATION RIGHT IMAGE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2988"},10634:{"value":"298A","name":"Z NOTATION RIGHT BINDING BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u298A"},10636:{"value":"298C","name":"RIGHT SQUARE BRACKET WITH UNDERBAR","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u298C"},10638:{"value":"298E","name":"RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u298E"},10640:{"value":"2990","name":"RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2990"},10642:{"value":"2992","name":"RIGHT ANGLE BRACKET WITH DOT","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2992"},10644:{"value":"2994","name":"RIGHT ARC GREATER-THAN BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2994"},10646:{"value":"2996","name":"DOUBLE RIGHT ARC LESS-THAN BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2996"},10648:{"value":"2998","name":"RIGHT BLACK TORTOISE SHELL BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2998"},10713:{"value":"29D9","name":"RIGHT WIGGLY FENCE","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D9"},10715:{"value":"29DB","name":"RIGHT DOUBLE WIGGLY FENCE","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29DB"},10749:{"value":"29FD","name":"RIGHT-POINTING CURVED ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29FD"},11811:{"value":"2E23","name":"TOP RIGHT HALF BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E23"},11813:{"value":"2E25","name":"BOTTOM RIGHT HALF BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E25"},11815:{"value":"2E27","name":"RIGHT SIDEWAYS U BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E27"},11817:{"value":"2E29","name":"RIGHT DOUBLE PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E29"},11862:{"value":"2E56","name":"RIGHT SQUARE BRACKET WITH STROKE","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E56"},11864:{"value":"2E58","name":"RIGHT SQUARE BRACKET WITH DOUBLE STROKE","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E58"},11866:{"value":"2E5A","name":"TOP HALF RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E5A"},11868:{"value":"2E5C","name":"BOTTOM HALF RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E5C"},12297:{"value":"3009","name":"RIGHT ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3009"},12299:{"value":"300B","name":"RIGHT DOUBLE ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING DOUBLE ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u300B"},12301:{"value":"300D","name":"RIGHT CORNER BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u300D"},12303:{"value":"300F","name":"RIGHT WHITE CORNER BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING WHITE CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u300F"},12305:{"value":"3011","name":"RIGHT BLACK LENTICULAR BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING BLACK LENTICULAR BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3011"},12309:{"value":"3015","name":"RIGHT TORTOISE SHELL BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3015"},12311:{"value":"3017","name":"RIGHT WHITE LENTICULAR BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING WHITE LENTICULAR BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3017"},12313:{"value":"3019","name":"RIGHT WHITE TORTOISE SHELL BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING WHITE TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3019"},12315:{"value":"301B","name":"RIGHT WHITE SQUARE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"CLOSING WHITE SQUARE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u301B"},12318:{"value":"301E","name":"DOUBLE PRIME QUOTATION MARK","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u301E"},12319:{"value":"301F","name":"LOW DOUBLE PRIME QUOTATION MARK","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u301F"},64830:{"value":"FD3E","name":"ORNATE LEFT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD3E"},65048:{"value":"FE18","name":"PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 3017","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE18"},65078:{"value":"FE36","name":"PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE36"},65080:{"value":"FE38","name":"PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 007D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE38"},65082:{"value":"FE3A","name":"PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE3A"},65084:{"value":"FE3C","name":"PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 3011","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE3C"},65086:{"value":"FE3E","name":"PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 300B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE3E"},65088:{"value":"FE40","name":"PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 3009","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE40"},65090:{"value":"FE42","name":"PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 300D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE42"},65092:{"value":"FE44","name":"PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 300F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE44"},65096:{"value":"FE48","name":"PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 005D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE48"},65114:{"value":"FE5A","name":"SMALL RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SMALL CLOSING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE5A"},65116:{"value":"FE5C","name":"SMALL RIGHT CURLY BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 007D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SMALL CLOSING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE5C"},65118:{"value":"FE5E","name":"SMALL RIGHT TORTOISE SHELL BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SMALL CLOSING TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE5E"},65289:{"value":"FF09","name":"FULLWIDTH RIGHT PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"FULLWIDTH CLOSING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF09"},65341:{"value":"FF3D","name":"FULLWIDTH RIGHT SQUARE BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 005D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"FULLWIDTH CLOSING SQUARE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF3D"},65373:{"value":"FF5D","name":"FULLWIDTH RIGHT CURLY BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 007D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"FULLWIDTH CLOSING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF5D"},65376:{"value":"FF60","name":"FULLWIDTH RIGHT WHITE PARENTHESIS","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 2986","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF60"},65379:{"value":"FF63","name":"HALFWIDTH RIGHT CORNER BRACKET","category":"Pe","class":"0","bidirectional_category":"ON","mapping":" 300D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"HALFWIDTH CLOSING CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF63"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Pf.js b/node_modules/unicode/category/Pf.js new file mode 100644 index 000000000..08544c224 --- /dev/null +++ b/node_modules/unicode/category/Pf.js @@ -0,0 +1 @@ +module.exports={187:{"value":"00BB","name":"RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"RIGHT POINTING GUILLEMET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xBB"},8217:{"value":"2019","name":"RIGHT SINGLE QUOTATION MARK","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SINGLE COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2019"},8221:{"value":"201D","name":"RIGHT DOUBLE QUOTATION MARK","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u201D"},8250:{"value":"203A","name":"SINGLE RIGHT-POINTING ANGLE QUOTATION MARK","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"RIGHT POINTING SINGLE GUILLEMET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u203A"},11779:{"value":"2E03","name":"RIGHT SUBSTITUTION BRACKET","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E03"},11781:{"value":"2E05","name":"RIGHT DOTTED SUBSTITUTION BRACKET","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E05"},11786:{"value":"2E0A","name":"RIGHT TRANSPOSITION BRACKET","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E0A"},11789:{"value":"2E0D","name":"RIGHT RAISED OMISSION BRACKET","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E0D"},11805:{"value":"2E1D","name":"RIGHT LOW PARAPHRASE BRACKET","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E1D"},11809:{"value":"2E21","name":"RIGHT VERTICAL BAR WITH QUILL","category":"Pf","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E21"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Pi.js b/node_modules/unicode/category/Pi.js new file mode 100644 index 000000000..0c42e1c2c --- /dev/null +++ b/node_modules/unicode/category/Pi.js @@ -0,0 +1 @@ +module.exports={171:{"value":"00AB","name":"LEFT-POINTING DOUBLE ANGLE QUOTATION MARK","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LEFT POINTING GUILLEMET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xAB"},8216:{"value":"2018","name":"LEFT SINGLE QUOTATION MARK","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SINGLE TURNED COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2018"},8219:{"value":"201B","name":"SINGLE HIGH-REVERSED-9 QUOTATION MARK","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SINGLE REVERSED COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u201B"},8220:{"value":"201C","name":"LEFT DOUBLE QUOTATION MARK","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE TURNED COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u201C"},8223:{"value":"201F","name":"DOUBLE HIGH-REVERSED-9 QUOTATION MARK","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE REVERSED COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u201F"},8249:{"value":"2039","name":"SINGLE LEFT-POINTING ANGLE QUOTATION MARK","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LEFT POINTING SINGLE GUILLEMET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2039"},11778:{"value":"2E02","name":"LEFT SUBSTITUTION BRACKET","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E02"},11780:{"value":"2E04","name":"LEFT DOTTED SUBSTITUTION BRACKET","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E04"},11785:{"value":"2E09","name":"LEFT TRANSPOSITION BRACKET","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E09"},11788:{"value":"2E0C","name":"LEFT RAISED OMISSION BRACKET","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E0C"},11804:{"value":"2E1C","name":"LEFT LOW PARAPHRASE BRACKET","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E1C"},11808:{"value":"2E20","name":"LEFT VERTICAL BAR WITH QUILL","category":"Pi","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E20"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Po.js b/node_modules/unicode/category/Po.js new file mode 100644 index 000000000..75d51347a --- /dev/null +++ b/node_modules/unicode/category/Po.js @@ -0,0 +1 @@ +module.exports={33:{"value":"0021","name":"EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x21"},34:{"value":"0022","name":"QUOTATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x22"},35:{"value":"0023","name":"NUMBER SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x23"},37:{"value":"0025","name":"PERCENT SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x25"},38:{"value":"0026","name":"AMPERSAND","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x26"},39:{"value":"0027","name":"APOSTROPHE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"APOSTROPHE-QUOTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x27"},42:{"value":"002A","name":"ASTERISK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x2A"},44:{"value":"002C","name":"COMMA","category":"Po","class":"0","bidirectional_category":"CS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x2C"},46:{"value":"002E","name":"FULL STOP","category":"Po","class":"0","bidirectional_category":"CS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x2E"},47:{"value":"002F","name":"SOLIDUS","category":"Po","class":"0","bidirectional_category":"CS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x2F"},58:{"value":"003A","name":"COLON","category":"Po","class":"0","bidirectional_category":"CS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x3A"},59:{"value":"003B","name":"SEMICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x3B"},63:{"value":"003F","name":"QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x3F"},64:{"value":"0040","name":"COMMERCIAL AT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x40"},92:{"value":"005C","name":"REVERSE SOLIDUS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BACKSLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x5C"},161:{"value":"00A1","name":"INVERTED EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA1"},167:{"value":"00A7","name":"SECTION SIGN","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA7"},182:{"value":"00B6","name":"PILCROW SIGN","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARAGRAPH SIGN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB6"},183:{"value":"00B7","name":"MIDDLE DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB7"},191:{"value":"00BF","name":"INVERTED QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xBF"},894:{"value":"037E","name":"GREEK QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"003B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u037E"},903:{"value":"0387","name":"GREEK ANO TELEIA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"00B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0387"},1370:{"value":"055A","name":"ARMENIAN APOSTROPHE","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARMENIAN MODIFIER LETTER RIGHT HALF RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u055A"},1371:{"value":"055B","name":"ARMENIAN EMPHASIS MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u055B"},1372:{"value":"055C","name":"ARMENIAN EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u055C"},1373:{"value":"055D","name":"ARMENIAN COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u055D"},1374:{"value":"055E","name":"ARMENIAN QUESTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u055E"},1375:{"value":"055F","name":"ARMENIAN ABBREVIATION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u055F"},1417:{"value":"0589","name":"ARMENIAN FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARMENIAN PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0589"},1472:{"value":"05C0","name":"HEBREW PUNCTUATION PASEQ","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEBREW POINT PASEQ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C0"},1475:{"value":"05C3","name":"HEBREW PUNCTUATION SOF PASUQ","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C3"},1478:{"value":"05C6","name":"HEBREW PUNCTUATION NUN HAFUKHA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05C6"},1523:{"value":"05F3","name":"HEBREW PUNCTUATION GERESH","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05F3"},1524:{"value":"05F4","name":"HEBREW PUNCTUATION GERSHAYIM","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u05F4"},1545:{"value":"0609","name":"ARABIC-INDIC PER MILLE SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0609"},1546:{"value":"060A","name":"ARABIC-INDIC PER TEN THOUSAND SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u060A"},1548:{"value":"060C","name":"ARABIC COMMA","category":"Po","class":"0","bidirectional_category":"CS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u060C"},1549:{"value":"060D","name":"ARABIC DATE SEPARATOR","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u060D"},1563:{"value":"061B","name":"ARABIC SEMICOLON","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u061B"},1565:{"value":"061D","name":"ARABIC END OF TEXT MARK","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u061D"},1566:{"value":"061E","name":"ARABIC TRIPLE DOT PUNCTUATION MARK","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u061E"},1567:{"value":"061F","name":"ARABIC QUESTION MARK","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u061F"},1642:{"value":"066A","name":"ARABIC PERCENT SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u066A"},1643:{"value":"066B","name":"ARABIC DECIMAL SEPARATOR","category":"Po","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u066B"},1644:{"value":"066C","name":"ARABIC THOUSANDS SEPARATOR","category":"Po","class":"0","bidirectional_category":"AN","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u066C"},1645:{"value":"066D","name":"ARABIC FIVE POINTED STAR","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u066D"},1748:{"value":"06D4","name":"ARABIC FULL STOP","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ARABIC PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06D4"},1792:{"value":"0700","name":"SYRIAC END OF PARAGRAPH","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0700"},1793:{"value":"0701","name":"SYRIAC SUPRALINEAR FULL STOP","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0701"},1794:{"value":"0702","name":"SYRIAC SUBLINEAR FULL STOP","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0702"},1795:{"value":"0703","name":"SYRIAC SUPRALINEAR COLON","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0703"},1796:{"value":"0704","name":"SYRIAC SUBLINEAR COLON","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0704"},1797:{"value":"0705","name":"SYRIAC HORIZONTAL COLON","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0705"},1798:{"value":"0706","name":"SYRIAC COLON SKEWED LEFT","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0706"},1799:{"value":"0707","name":"SYRIAC COLON SKEWED RIGHT","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0707"},1800:{"value":"0708","name":"SYRIAC SUPRALINEAR COLON SKEWED LEFT","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0708"},1801:{"value":"0709","name":"SYRIAC SUBLINEAR COLON SKEWED RIGHT","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0709"},1802:{"value":"070A","name":"SYRIAC CONTRACTION","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u070A"},1803:{"value":"070B","name":"SYRIAC HARKLEAN OBELUS","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u070B"},1804:{"value":"070C","name":"SYRIAC HARKLEAN METOBELUS","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u070C"},1805:{"value":"070D","name":"SYRIAC HARKLEAN ASTERISCUS","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u070D"},2039:{"value":"07F7","name":"NKO SYMBOL GBAKURUNEN","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F7"},2040:{"value":"07F8","name":"NKO COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F8"},2041:{"value":"07F9","name":"NKO EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F9"},2096:{"value":"0830","name":"SAMARITAN PUNCTUATION NEQUDAA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0830"},2097:{"value":"0831","name":"SAMARITAN PUNCTUATION AFSAAQ","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0831"},2098:{"value":"0832","name":"SAMARITAN PUNCTUATION ANGED","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0832"},2099:{"value":"0833","name":"SAMARITAN PUNCTUATION BAU","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0833"},2100:{"value":"0834","name":"SAMARITAN PUNCTUATION ATMAAU","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0834"},2101:{"value":"0835","name":"SAMARITAN PUNCTUATION SHIYYAALAA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0835"},2102:{"value":"0836","name":"SAMARITAN ABBREVIATION MARK","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0836"},2103:{"value":"0837","name":"SAMARITAN PUNCTUATION MELODIC QITSA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0837"},2104:{"value":"0838","name":"SAMARITAN PUNCTUATION ZIQAA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0838"},2105:{"value":"0839","name":"SAMARITAN PUNCTUATION QITSA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0839"},2106:{"value":"083A","name":"SAMARITAN PUNCTUATION ZAEF","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u083A"},2107:{"value":"083B","name":"SAMARITAN PUNCTUATION TURU","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u083B"},2108:{"value":"083C","name":"SAMARITAN PUNCTUATION ARKAANU","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u083C"},2109:{"value":"083D","name":"SAMARITAN PUNCTUATION SOF MASHFAAT","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u083D"},2110:{"value":"083E","name":"SAMARITAN PUNCTUATION ANNAAU","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u083E"},2142:{"value":"085E","name":"MANDAIC PUNCTUATION","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u085E"},2404:{"value":"0964","name":"DEVANAGARI DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0964"},2405:{"value":"0965","name":"DEVANAGARI DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0965"},2416:{"value":"0970","name":"DEVANAGARI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0970"},2557:{"value":"09FD","name":"BENGALI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09FD"},2678:{"value":"0A76","name":"GURMUKHI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0A76"},2800:{"value":"0AF0","name":"GUJARATI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AF0"},3191:{"value":"0C77","name":"TELUGU SIGN SIDDHAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C77"},3204:{"value":"0C84","name":"KANNADA SIGN SIDDHAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C84"},3572:{"value":"0DF4","name":"SINHALA PUNCTUATION KUNDDALIYA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0DF4"},3663:{"value":"0E4F","name":"THAI CHARACTER FONGMAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI FONGMAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E4F"},3674:{"value":"0E5A","name":"THAI CHARACTER ANGKHANKHU","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI ANGKHANKHU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E5A"},3675:{"value":"0E5B","name":"THAI CHARACTER KHOMUT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI KHOMUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E5B"},3844:{"value":"0F04","name":"TIBETAN MARK INITIAL YIG MGO MDUN MA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN SINGLE ORNAMENT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F04"},3845:{"value":"0F05","name":"TIBETAN MARK CLOSING YIG MGO SGAB MA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F05"},3846:{"value":"0F06","name":"TIBETAN MARK CARET YIG MGO PHUR SHAD MA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F06"},3847:{"value":"0F07","name":"TIBETAN MARK YIG MGO TSHEG SHAD MA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F07"},3848:{"value":"0F08","name":"TIBETAN MARK SBRUL SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN RGYANSHAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F08"},3849:{"value":"0F09","name":"TIBETAN MARK BSKUR YIG MGO","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F09"},3850:{"value":"0F0A","name":"TIBETAN MARK BKA- SHOG YIG MGO","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F0A"},3851:{"value":"0F0B","name":"TIBETAN MARK INTERSYLLABIC TSHEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN TSEG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F0B"},3852:{"value":"0F0C","name":"TIBETAN MARK DELIMITER TSHEG BSTAR","category":"Po","class":"0","bidirectional_category":"L","mapping":" 0F0B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F0C"},3853:{"value":"0F0D","name":"TIBETAN MARK SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN SHAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F0D"},3854:{"value":"0F0E","name":"TIBETAN MARK NYIS SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN DOUBLE SHAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F0E"},3855:{"value":"0F0F","name":"TIBETAN MARK TSHEG SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F0F"},3856:{"value":"0F10","name":"TIBETAN MARK NYIS TSHEG SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F10"},3857:{"value":"0F11","name":"TIBETAN MARK RIN CHEN SPUNGS SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN RINCHANPHUNGSHAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F11"},3858:{"value":"0F12","name":"TIBETAN MARK RGYA GRAM SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F12"},3860:{"value":"0F14","name":"TIBETAN MARK GTER TSHEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN COMMA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F14"},3973:{"value":"0F85","name":"TIBETAN MARK PALUTA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TIBETAN CHUCHENYIGE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F85"},4048:{"value":"0FD0","name":"TIBETAN MARK BSKA- SHOG GI MGO RGYAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD0"},4049:{"value":"0FD1","name":"TIBETAN MARK MNYAM YIG GI MGO RGYAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD1"},4050:{"value":"0FD2","name":"TIBETAN MARK NYIS TSHEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD2"},4051:{"value":"0FD3","name":"TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD3"},4052:{"value":"0FD4","name":"TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD4"},4057:{"value":"0FD9","name":"TIBETAN MARK LEADING MCHAN RTAGS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD9"},4058:{"value":"0FDA","name":"TIBETAN MARK TRAILING MCHAN RTAGS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FDA"},4170:{"value":"104A","name":"MYANMAR SIGN LITTLE SECTION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u104A"},4171:{"value":"104B","name":"MYANMAR SIGN SECTION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u104B"},4172:{"value":"104C","name":"MYANMAR SYMBOL LOCATIVE","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u104C"},4173:{"value":"104D","name":"MYANMAR SYMBOL COMPLETED","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u104D"},4174:{"value":"104E","name":"MYANMAR SYMBOL AFOREMENTIONED","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u104E"},4175:{"value":"104F","name":"MYANMAR SYMBOL GENITIVE","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u104F"},4347:{"value":"10FB","name":"GEORGIAN PARAGRAPH SEPARATOR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u10FB"},4960:{"value":"1360","name":"ETHIOPIC SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1360"},4961:{"value":"1361","name":"ETHIOPIC WORDSPACE","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1361"},4962:{"value":"1362","name":"ETHIOPIC FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1362"},4963:{"value":"1363","name":"ETHIOPIC COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1363"},4964:{"value":"1364","name":"ETHIOPIC SEMICOLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1364"},4965:{"value":"1365","name":"ETHIOPIC COLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1365"},4966:{"value":"1366","name":"ETHIOPIC PREFACE COLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1366"},4967:{"value":"1367","name":"ETHIOPIC QUESTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1367"},4968:{"value":"1368","name":"ETHIOPIC PARAGRAPH SEPARATOR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1368"},5742:{"value":"166E","name":"CANADIAN SYLLABICS FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u166E"},5867:{"value":"16EB","name":"RUNIC SINGLE PUNCTUATION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16EB"},5868:{"value":"16EC","name":"RUNIC MULTIPLE PUNCTUATION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16EC"},5869:{"value":"16ED","name":"RUNIC CROSS PUNCTUATION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u16ED"},5941:{"value":"1735","name":"PHILIPPINE SINGLE PUNCTUATION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1735"},5942:{"value":"1736","name":"PHILIPPINE DOUBLE PUNCTUATION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1736"},6100:{"value":"17D4","name":"KHMER SIGN KHAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D4"},6101:{"value":"17D5","name":"KHMER SIGN BARIYOOSAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D5"},6102:{"value":"17D6","name":"KHMER SIGN CAMNUC PII KUUH","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D6"},6104:{"value":"17D8","name":"KHMER SIGN BEYYAL","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D8"},6105:{"value":"17D9","name":"KHMER SIGN PHNAEK MUAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17D9"},6106:{"value":"17DA","name":"KHMER SIGN KOOMUUT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17DA"},6144:{"value":"1800","name":"MONGOLIAN BIRGA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1800"},6145:{"value":"1801","name":"MONGOLIAN ELLIPSIS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1801"},6146:{"value":"1802","name":"MONGOLIAN COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1802"},6147:{"value":"1803","name":"MONGOLIAN FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1803"},6148:{"value":"1804","name":"MONGOLIAN COLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1804"},6149:{"value":"1805","name":"MONGOLIAN FOUR DOTS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1805"},6151:{"value":"1807","name":"MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1807"},6152:{"value":"1808","name":"MONGOLIAN MANCHU COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1808"},6153:{"value":"1809","name":"MONGOLIAN MANCHU FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1809"},6154:{"value":"180A","name":"MONGOLIAN NIRUGU","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u180A"},6468:{"value":"1944","name":"LIMBU EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1944"},6469:{"value":"1945","name":"LIMBU QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1945"},6686:{"value":"1A1E","name":"BUGINESE PALLAWA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A1E"},6687:{"value":"1A1F","name":"BUGINESE END OF SECTION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1A1F"},6816:{"value":"1AA0","name":"TAI THAM SIGN WIANG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA0"},6817:{"value":"1AA1","name":"TAI THAM SIGN WIANGWAAK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA1"},6818:{"value":"1AA2","name":"TAI THAM SIGN SAWAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA2"},6819:{"value":"1AA3","name":"TAI THAM SIGN KEOW","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA3"},6820:{"value":"1AA4","name":"TAI THAM SIGN HOY","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA4"},6821:{"value":"1AA5","name":"TAI THAM SIGN DOKMAI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA5"},6822:{"value":"1AA6","name":"TAI THAM SIGN REVERSED ROTATED RANA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA6"},6824:{"value":"1AA8","name":"TAI THAM SIGN KAAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA8"},6825:{"value":"1AA9","name":"TAI THAM SIGN KAANKUU","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AA9"},6826:{"value":"1AAA","name":"TAI THAM SIGN SATKAAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AAA"},6827:{"value":"1AAB","name":"TAI THAM SIGN SATKAANKUU","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AAB"},6828:{"value":"1AAC","name":"TAI THAM SIGN HANG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AAC"},6829:{"value":"1AAD","name":"TAI THAM SIGN CAANG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1AAD"},7002:{"value":"1B5A","name":"BALINESE PANTI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B5A"},7003:{"value":"1B5B","name":"BALINESE PAMADA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B5B"},7004:{"value":"1B5C","name":"BALINESE WINDU","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B5C"},7005:{"value":"1B5D","name":"BALINESE CARIK PAMUNGKAH","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B5D"},7006:{"value":"1B5E","name":"BALINESE CARIK SIKI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B5E"},7007:{"value":"1B5F","name":"BALINESE CARIK PAREREN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B5F"},7008:{"value":"1B60","name":"BALINESE PAMENENG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B60"},7037:{"value":"1B7D","name":"BALINESE PANTI LANTANG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B7D"},7038:{"value":"1B7E","name":"BALINESE PAMADA LANTANG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B7E"},7164:{"value":"1BFC","name":"BATAK SYMBOL BINDU NA METEK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BFC"},7165:{"value":"1BFD","name":"BATAK SYMBOL BINDU PINARBORAS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BFD"},7166:{"value":"1BFE","name":"BATAK SYMBOL BINDU JUDUL","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BFE"},7167:{"value":"1BFF","name":"BATAK SYMBOL BINDU PANGOLAT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1BFF"},7227:{"value":"1C3B","name":"LEPCHA PUNCTUATION TA-ROL","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C3B"},7228:{"value":"1C3C","name":"LEPCHA PUNCTUATION NYET THYOOM TA-ROL","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C3C"},7229:{"value":"1C3D","name":"LEPCHA PUNCTUATION CER-WA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C3D"},7230:{"value":"1C3E","name":"LEPCHA PUNCTUATION TSHOOK CER-WA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C3E"},7231:{"value":"1C3F","name":"LEPCHA PUNCTUATION TSHOOK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C3F"},7294:{"value":"1C7E","name":"OL CHIKI PUNCTUATION MUCAAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C7E"},7295:{"value":"1C7F","name":"OL CHIKI PUNCTUATION DOUBLE MUCAAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1C7F"},7360:{"value":"1CC0","name":"SUNDANESE PUNCTUATION BINDU SURYA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC0"},7361:{"value":"1CC1","name":"SUNDANESE PUNCTUATION BINDU PANGLONG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC1"},7362:{"value":"1CC2","name":"SUNDANESE PUNCTUATION BINDU PURNAMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC2"},7363:{"value":"1CC3","name":"SUNDANESE PUNCTUATION BINDU CAKRA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC3"},7364:{"value":"1CC4","name":"SUNDANESE PUNCTUATION BINDU LEU SATANGA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC4"},7365:{"value":"1CC5","name":"SUNDANESE PUNCTUATION BINDU KA SATANGA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC5"},7366:{"value":"1CC6","name":"SUNDANESE PUNCTUATION BINDU DA SATANGA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC6"},7367:{"value":"1CC7","name":"SUNDANESE PUNCTUATION BINDU BA SATANGA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CC7"},7379:{"value":"1CD3","name":"VEDIC SIGN NIHSHVASA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1CD3"},8214:{"value":"2016","name":"DOUBLE VERTICAL LINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOUBLE VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2016"},8215:{"value":"2017","name":"DOUBLE LOW LINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0020 0333","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DOUBLE UNDERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2017"},8224:{"value":"2020","name":"DAGGER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2020"},8225:{"value":"2021","name":"DOUBLE DAGGER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2021"},8226:{"value":"2022","name":"BULLET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2022"},8227:{"value":"2023","name":"TRIANGULAR BULLET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2023"},8228:{"value":"2024","name":"ONE DOT LEADER","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2024"},8229:{"value":"2025","name":"TWO DOT LEADER","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 002E 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2025"},8230:{"value":"2026","name":"HORIZONTAL ELLIPSIS","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 002E 002E 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2026"},8231:{"value":"2027","name":"HYPHENATION POINT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2027"},8240:{"value":"2030","name":"PER MILLE SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2030"},8241:{"value":"2031","name":"PER TEN THOUSAND SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2031"},8242:{"value":"2032","name":"PRIME","category":"Po","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2032"},8243:{"value":"2033","name":"DOUBLE PRIME","category":"Po","class":"0","bidirectional_category":"ET","mapping":" 2032 2032","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2033"},8244:{"value":"2034","name":"TRIPLE PRIME","category":"Po","class":"0","bidirectional_category":"ET","mapping":" 2032 2032 2032","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2034"},8245:{"value":"2035","name":"REVERSED PRIME","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2035"},8246:{"value":"2036","name":"REVERSED DOUBLE PRIME","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 2035 2035","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2036"},8247:{"value":"2037","name":"REVERSED TRIPLE PRIME","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 2035 2035 2035","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2037"},8248:{"value":"2038","name":"CARET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2038"},8251:{"value":"203B","name":"REFERENCE MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u203B"},8252:{"value":"203C","name":"DOUBLE EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0021 0021","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u203C"},8253:{"value":"203D","name":"INTERROBANG","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u203D"},8254:{"value":"203E","name":"OVERLINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0020 0305","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u203E"},8257:{"value":"2041","name":"CARET INSERTION POINT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2041"},8258:{"value":"2042","name":"ASTERISM","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2042"},8259:{"value":"2043","name":"HYPHEN BULLET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2043"},8263:{"value":"2047","name":"DOUBLE QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003F 003F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2047"},8264:{"value":"2048","name":"QUESTION EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003F 0021","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2048"},8265:{"value":"2049","name":"EXCLAMATION QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0021 003F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2049"},8266:{"value":"204A","name":"TIRONIAN SIGN ET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u204A"},8267:{"value":"204B","name":"REVERSED PILCROW SIGN","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u204B"},8268:{"value":"204C","name":"BLACK LEFTWARDS BULLET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u204C"},8269:{"value":"204D","name":"BLACK RIGHTWARDS BULLET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u204D"},8270:{"value":"204E","name":"LOW ASTERISK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u204E"},8271:{"value":"204F","name":"REVERSED SEMICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u204F"},8272:{"value":"2050","name":"CLOSE UP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2050"},8273:{"value":"2051","name":"TWO ASTERISKS ALIGNED VERTICALLY","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2051"},8275:{"value":"2053","name":"SWUNG DASH","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2053"},8277:{"value":"2055","name":"FLOWER PUNCTUATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2055"},8278:{"value":"2056","name":"THREE DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2056"},8279:{"value":"2057","name":"QUADRUPLE PRIME","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 2032 2032 2032 2032","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2057"},8280:{"value":"2058","name":"FOUR DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2058"},8281:{"value":"2059","name":"FIVE DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2059"},8282:{"value":"205A","name":"TWO DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u205A"},8283:{"value":"205B","name":"FOUR DOT MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u205B"},8284:{"value":"205C","name":"DOTTED CROSS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u205C"},8285:{"value":"205D","name":"TRICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u205D"},8286:{"value":"205E","name":"VERTICAL FOUR DOTS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u205E"},11513:{"value":"2CF9","name":"COPTIC OLD NUBIAN FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CF9"},11514:{"value":"2CFA","name":"COPTIC OLD NUBIAN DIRECT QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CFA"},11515:{"value":"2CFB","name":"COPTIC OLD NUBIAN INDIRECT QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CFB"},11516:{"value":"2CFC","name":"COPTIC OLD NUBIAN VERSE DIVIDER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CFC"},11518:{"value":"2CFE","name":"COPTIC FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CFE"},11519:{"value":"2CFF","name":"COPTIC MORPHOLOGICAL DIVIDER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CFF"},11632:{"value":"2D70","name":"TIFINAGH SEPARATOR MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2D70"},11776:{"value":"2E00","name":"RIGHT ANGLE SUBSTITUTION MARKER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E00"},11777:{"value":"2E01","name":"RIGHT ANGLE DOTTED SUBSTITUTION MARKER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E01"},11782:{"value":"2E06","name":"RAISED INTERPOLATION MARKER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E06"},11783:{"value":"2E07","name":"RAISED DOTTED INTERPOLATION MARKER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E07"},11784:{"value":"2E08","name":"DOTTED TRANSPOSITION MARKER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E08"},11787:{"value":"2E0B","name":"RAISED SQUARE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E0B"},11790:{"value":"2E0E","name":"EDITORIAL CORONIS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E0E"},11791:{"value":"2E0F","name":"PARAGRAPHOS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E0F"},11792:{"value":"2E10","name":"FORKED PARAGRAPHOS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E10"},11793:{"value":"2E11","name":"REVERSED FORKED PARAGRAPHOS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E11"},11794:{"value":"2E12","name":"HYPODIASTOLE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E12"},11795:{"value":"2E13","name":"DOTTED OBELOS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E13"},11796:{"value":"2E14","name":"DOWNWARDS ANCORA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E14"},11797:{"value":"2E15","name":"UPWARDS ANCORA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E15"},11798:{"value":"2E16","name":"DOTTED RIGHT-POINTING ANGLE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E16"},11800:{"value":"2E18","name":"INVERTED INTERROBANG","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E18"},11801:{"value":"2E19","name":"PALM BRANCH","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E19"},11803:{"value":"2E1B","name":"TILDE WITH RING ABOVE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E1B"},11806:{"value":"2E1E","name":"TILDE WITH DOT ABOVE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E1E"},11807:{"value":"2E1F","name":"TILDE WITH DOT BELOW","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E1F"},11818:{"value":"2E2A","name":"TWO DOTS OVER ONE DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E2A"},11819:{"value":"2E2B","name":"ONE DOT OVER TWO DOTS PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E2B"},11820:{"value":"2E2C","name":"SQUARED FOUR DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E2C"},11821:{"value":"2E2D","name":"FIVE DOT MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E2D"},11822:{"value":"2E2E","name":"REVERSED QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E2E"},11824:{"value":"2E30","name":"RING POINT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E30"},11825:{"value":"2E31","name":"WORD SEPARATOR MIDDLE DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E31"},11826:{"value":"2E32","name":"TURNED COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E32"},11827:{"value":"2E33","name":"RAISED DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E33"},11828:{"value":"2E34","name":"RAISED COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E34"},11829:{"value":"2E35","name":"TURNED SEMICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E35"},11830:{"value":"2E36","name":"DAGGER WITH LEFT GUARD","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E36"},11831:{"value":"2E37","name":"DAGGER WITH RIGHT GUARD","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E37"},11832:{"value":"2E38","name":"TURNED DAGGER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E38"},11833:{"value":"2E39","name":"TOP HALF SECTION SIGN","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E39"},11836:{"value":"2E3C","name":"STENOGRAPHIC FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E3C"},11837:{"value":"2E3D","name":"VERTICAL SIX DOTS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E3D"},11838:{"value":"2E3E","name":"WIGGLY VERTICAL LINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E3E"},11839:{"value":"2E3F","name":"CAPITULUM","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E3F"},11841:{"value":"2E41","name":"REVERSED COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E41"},11843:{"value":"2E43","name":"DASH WITH LEFT UPTURN","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E43"},11844:{"value":"2E44","name":"DOUBLE SUSPENSION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E44"},11845:{"value":"2E45","name":"INVERTED LOW KAVYKA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E45"},11846:{"value":"2E46","name":"INVERTED LOW KAVYKA WITH KAVYKA ABOVE","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E46"},11847:{"value":"2E47","name":"LOW KAVYKA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E47"},11848:{"value":"2E48","name":"LOW KAVYKA WITH DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E48"},11849:{"value":"2E49","name":"DOUBLE STACKED COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E49"},11850:{"value":"2E4A","name":"DOTTED SOLIDUS","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E4A"},11851:{"value":"2E4B","name":"TRIPLE DAGGER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E4B"},11852:{"value":"2E4C","name":"MEDIEVAL COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E4C"},11853:{"value":"2E4D","name":"PARAGRAPHUS MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E4D"},11854:{"value":"2E4E","name":"PUNCTUS ELEVATUS MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E4E"},11855:{"value":"2E4F","name":"CORNISH VERSE DIVIDER","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E4F"},11858:{"value":"2E52","name":"TIRONIAN SIGN CAPITAL ET","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E52"},11859:{"value":"2E53","name":"MEDIEVAL EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E53"},11860:{"value":"2E54","name":"MEDIEVAL QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E54"},12289:{"value":"3001","name":"IDEOGRAPHIC COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3001"},12290:{"value":"3002","name":"IDEOGRAPHIC FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"IDEOGRAPHIC PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3002"},12291:{"value":"3003","name":"DITTO MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3003"},12349:{"value":"303D","name":"PART ALTERNATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u303D"},12539:{"value":"30FB","name":"KATAKANA MIDDLE DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u30FB"},42238:{"value":"A4FE","name":"LISU PUNCTUATION COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4FE"},42239:{"value":"A4FF","name":"LISU PUNCTUATION FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4FF"},42509:{"value":"A60D","name":"VAI COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA60D"},42510:{"value":"A60E","name":"VAI FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA60E"},42511:{"value":"A60F","name":"VAI QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA60F"},42611:{"value":"A673","name":"SLAVONIC ASTERISK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA673"},42622:{"value":"A67E","name":"CYRILLIC KAVYKA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA67E"},42738:{"value":"A6F2","name":"BAMUM NJAEMLI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F2"},42739:{"value":"A6F3","name":"BAMUM FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F3"},42740:{"value":"A6F4","name":"BAMUM COLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F4"},42741:{"value":"A6F5","name":"BAMUM COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F5"},42742:{"value":"A6F6","name":"BAMUM SEMICOLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F6"},42743:{"value":"A6F7","name":"BAMUM QUESTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA6F7"},43124:{"value":"A874","name":"PHAGS-PA SINGLE HEAD MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA874"},43125:{"value":"A875","name":"PHAGS-PA DOUBLE HEAD MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA875"},43126:{"value":"A876","name":"PHAGS-PA MARK SHAD","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA876"},43127:{"value":"A877","name":"PHAGS-PA MARK DOUBLE SHAD","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA877"},43214:{"value":"A8CE","name":"SAURASHTRA DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8CE"},43215:{"value":"A8CF","name":"SAURASHTRA DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8CF"},43256:{"value":"A8F8","name":"DEVANAGARI SIGN PUSHPIKA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F8"},43257:{"value":"A8F9","name":"DEVANAGARI GAP FILLER","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8F9"},43258:{"value":"A8FA","name":"DEVANAGARI CARET","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8FA"},43260:{"value":"A8FC","name":"DEVANAGARI SIGN SIDDHAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA8FC"},43310:{"value":"A92E","name":"KAYAH LI SIGN CWI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA92E"},43311:{"value":"A92F","name":"KAYAH LI SIGN SHYA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA92F"},43359:{"value":"A95F","name":"REJANG SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA95F"},43457:{"value":"A9C1","name":"JAVANESE LEFT RERENGGAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C1"},43458:{"value":"A9C2","name":"JAVANESE RIGHT RERENGGAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C2"},43459:{"value":"A9C3","name":"JAVANESE PADA ANDAP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C3"},43460:{"value":"A9C4","name":"JAVANESE PADA MADYA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C4"},43461:{"value":"A9C5","name":"JAVANESE PADA LUHUR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C5"},43462:{"value":"A9C6","name":"JAVANESE PADA WINDU","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C6"},43463:{"value":"A9C7","name":"JAVANESE PADA PANGKAT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C7"},43464:{"value":"A9C8","name":"JAVANESE PADA LINGSA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C8"},43465:{"value":"A9C9","name":"JAVANESE PADA LUNGSI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9C9"},43466:{"value":"A9CA","name":"JAVANESE PADA ADEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9CA"},43467:{"value":"A9CB","name":"JAVANESE PADA ADEG ADEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9CB"},43468:{"value":"A9CC","name":"JAVANESE PADA PISELEH","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9CC"},43469:{"value":"A9CD","name":"JAVANESE TURNED PADA PISELEH","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9CD"},43486:{"value":"A9DE","name":"JAVANESE PADA TIRTA TUMETES","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9DE"},43487:{"value":"A9DF","name":"JAVANESE PADA ISEN-ISEN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA9DF"},43612:{"value":"AA5C","name":"CHAM PUNCTUATION SPIRAL","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA5C"},43613:{"value":"AA5D","name":"CHAM PUNCTUATION DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA5D"},43614:{"value":"AA5E","name":"CHAM PUNCTUATION DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA5E"},43615:{"value":"AA5F","name":"CHAM PUNCTUATION TRIPLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA5F"},43742:{"value":"AADE","name":"TAI VIET SYMBOL HO HOI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAADE"},43743:{"value":"AADF","name":"TAI VIET SYMBOL KOI KOI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAADF"},43760:{"value":"AAF0","name":"MEETEI MAYEK CHEIKHAN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF0"},43761:{"value":"AAF1","name":"MEETEI MAYEK AHANG KHUDAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAAF1"},44011:{"value":"ABEB","name":"MEETEI MAYEK CHEIKHEI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uABEB"},65040:{"value":"FE10","name":"PRESENTATION FORM FOR VERTICAL COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 002C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE10"},65041:{"value":"FE11","name":"PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 3001","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE11"},65042:{"value":"FE12","name":"PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 3002","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE12"},65043:{"value":"FE13","name":"PRESENTATION FORM FOR VERTICAL COLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE13"},65044:{"value":"FE14","name":"PRESENTATION FORM FOR VERTICAL SEMICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE14"},65045:{"value":"FE15","name":"PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0021","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE15"},65046:{"value":"FE16","name":"PRESENTATION FORM FOR VERTICAL QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE16"},65049:{"value":"FE19","name":"PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 2026","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE19"},65072:{"value":"FE30","name":"PRESENTATION FORM FOR VERTICAL TWO DOT LEADER","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 2025","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL TWO DOT LEADER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE30"},65093:{"value":"FE45","name":"SESAME DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE45"},65094:{"value":"FE46","name":"WHITE SESAME DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE46"},65097:{"value":"FE49","name":"DASHED OVERLINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 203E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DASHED OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE49"},65098:{"value":"FE4A","name":"CENTRELINE OVERLINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 203E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING CENTERLINE OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE4A"},65099:{"value":"FE4B","name":"WAVY OVERLINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 203E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING WAVY OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE4B"},65100:{"value":"FE4C","name":"DOUBLE WAVY OVERLINE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 203E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DOUBLE WAVY OVERSCORE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE4C"},65104:{"value":"FE50","name":"SMALL COMMA","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 002C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE50"},65105:{"value":"FE51","name":"SMALL IDEOGRAPHIC COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 3001","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE51"},65106:{"value":"FE52","name":"SMALL FULL STOP","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SMALL PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE52"},65108:{"value":"FE54","name":"SMALL SEMICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE54"},65109:{"value":"FE55","name":"SMALL COLON","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 003A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE55"},65110:{"value":"FE56","name":"SMALL QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE56"},65111:{"value":"FE57","name":"SMALL EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0021","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE57"},65119:{"value":"FE5F","name":"SMALL NUMBER SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":" 0023","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE5F"},65120:{"value":"FE60","name":"SMALL AMPERSAND","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0026","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE60"},65121:{"value":"FE61","name":"SMALL ASTERISK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 002A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE61"},65128:{"value":"FE68","name":"SMALL REVERSE SOLIDUS","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 005C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SMALL BACKSLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE68"},65130:{"value":"FE6A","name":"SMALL PERCENT SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":" 0025","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE6A"},65131:{"value":"FE6B","name":"SMALL COMMERCIAL AT","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0040","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE6B"},65281:{"value":"FF01","name":"FULLWIDTH EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0021","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF01"},65282:{"value":"FF02","name":"FULLWIDTH QUOTATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0022","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF02"},65283:{"value":"FF03","name":"FULLWIDTH NUMBER SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":" 0023","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF03"},65285:{"value":"FF05","name":"FULLWIDTH PERCENT SIGN","category":"Po","class":"0","bidirectional_category":"ET","mapping":" 0025","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF05"},65286:{"value":"FF06","name":"FULLWIDTH AMPERSAND","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0026","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF06"},65287:{"value":"FF07","name":"FULLWIDTH APOSTROPHE","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0027","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF07"},65290:{"value":"FF0A","name":"FULLWIDTH ASTERISK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 002A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF0A"},65292:{"value":"FF0C","name":"FULLWIDTH COMMA","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 002C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF0C"},65294:{"value":"FF0E","name":"FULLWIDTH FULL STOP","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF0E"},65295:{"value":"FF0F","name":"FULLWIDTH SOLIDUS","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 002F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH SLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF0F"},65306:{"value":"FF1A","name":"FULLWIDTH COLON","category":"Po","class":"0","bidirectional_category":"CS","mapping":" 003A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF1A"},65307:{"value":"FF1B","name":"FULLWIDTH SEMICOLON","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF1B"},65311:{"value":"FF1F","name":"FULLWIDTH QUESTION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 003F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF1F"},65312:{"value":"FF20","name":"FULLWIDTH COMMERCIAL AT","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 0040","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF20"},65340:{"value":"FF3C","name":"FULLWIDTH REVERSE SOLIDUS","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 005C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH BACKSLASH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF3C"},65377:{"value":"FF61","name":"HALFWIDTH IDEOGRAPHIC FULL STOP","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 3002","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HALFWIDTH IDEOGRAPHIC PERIOD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF61"},65380:{"value":"FF64","name":"HALFWIDTH IDEOGRAPHIC COMMA","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 3001","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF64"},65381:{"value":"FF65","name":"HALFWIDTH KATAKANA MIDDLE DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":" 30FB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF65"},65792:{"value":"10100","name":"AEGEAN WORD SEPARATOR LINE","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd00"},65793:{"value":"10101","name":"AEGEAN WORD SEPARATOR DOT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd01"},65794:{"value":"10102","name":"AEGEAN CHECK MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd02"},66463:{"value":"1039F","name":"UGARITIC WORD DIVIDER","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udf9f"},66512:{"value":"103D0","name":"OLD PERSIAN WORD DIVIDER","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udfd0"},66927:{"value":"1056F","name":"CAUCASIAN ALBANIAN CITATION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud801\udd6f"},67671:{"value":"10857","name":"IMPERIAL ARAMAIC SECTION SIGN","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc57"},67871:{"value":"1091F","name":"PHOENICIAN WORD SEPARATOR","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd1f"},67903:{"value":"1093F","name":"LYDIAN TRIANGULAR MARK","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udd3f"},68176:{"value":"10A50","name":"KHAROSHTHI PUNCTUATION DOT","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude50"},68177:{"value":"10A51","name":"KHAROSHTHI PUNCTUATION SMALL CIRCLE","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude51"},68178:{"value":"10A52","name":"KHAROSHTHI PUNCTUATION CIRCLE","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude52"},68179:{"value":"10A53","name":"KHAROSHTHI PUNCTUATION CRESCENT BAR","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude53"},68180:{"value":"10A54","name":"KHAROSHTHI PUNCTUATION MANGALAM","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude54"},68181:{"value":"10A55","name":"KHAROSHTHI PUNCTUATION LOTUS","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude55"},68182:{"value":"10A56","name":"KHAROSHTHI PUNCTUATION DANDA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude56"},68183:{"value":"10A57","name":"KHAROSHTHI PUNCTUATION DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude57"},68184:{"value":"10A58","name":"KHAROSHTHI PUNCTUATION LINES","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude58"},68223:{"value":"10A7F","name":"OLD SOUTH ARABIAN NUMERIC INDICATOR","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\ude7f"},68336:{"value":"10AF0","name":"MANICHAEAN PUNCTUATION STAR","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef0"},68337:{"value":"10AF1","name":"MANICHAEAN PUNCTUATION FLEURON","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef1"},68338:{"value":"10AF2","name":"MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef2"},68339:{"value":"10AF3","name":"MANICHAEAN PUNCTUATION DOT WITHIN DOT","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef3"},68340:{"value":"10AF4","name":"MANICHAEAN PUNCTUATION DOT","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef4"},68341:{"value":"10AF5","name":"MANICHAEAN PUNCTUATION TWO DOTS","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef5"},68342:{"value":"10AF6","name":"MANICHAEAN PUNCTUATION LINE FILLER","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udef6"},68409:{"value":"10B39","name":"AVESTAN ABBREVIATION MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf39"},68410:{"value":"10B3A","name":"TINY TWO DOTS OVER ONE DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf3a"},68411:{"value":"10B3B","name":"SMALL TWO DOTS OVER ONE DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf3b"},68412:{"value":"10B3C","name":"LARGE TWO DOTS OVER ONE DOT PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf3c"},68413:{"value":"10B3D","name":"LARGE ONE DOT OVER TWO DOTS PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf3d"},68414:{"value":"10B3E","name":"LARGE TWO RINGS OVER ONE RING PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf3e"},68415:{"value":"10B3F","name":"LARGE ONE RING OVER TWO RINGS PUNCTUATION","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf3f"},68505:{"value":"10B99","name":"PSALTER PAHLAVI SECTION MARK","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf99"},68506:{"value":"10B9A","name":"PSALTER PAHLAVI TURNED SECTION MARK","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf9a"},68507:{"value":"10B9B","name":"PSALTER PAHLAVI FOUR DOTS WITH CROSS","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf9b"},68508:{"value":"10B9C","name":"PSALTER PAHLAVI FOUR DOTS WITH DOT","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udf9c"},69461:{"value":"10F55","name":"SOGDIAN PUNCTUATION TWO VERTICAL BARS","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf55"},69462:{"value":"10F56","name":"SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf56"},69463:{"value":"10F57","name":"SOGDIAN PUNCTUATION CIRCLE WITH DOT","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf57"},69464:{"value":"10F58","name":"SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf58"},69465:{"value":"10F59","name":"SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT","category":"Po","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf59"},69510:{"value":"10F86","name":"OLD UYGHUR PUNCTUATION BAR","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf86"},69511:{"value":"10F87","name":"OLD UYGHUR PUNCTUATION TWO BARS","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf87"},69512:{"value":"10F88","name":"OLD UYGHUR PUNCTUATION TWO DOTS","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf88"},69513:{"value":"10F89","name":"OLD UYGHUR PUNCTUATION FOUR DOTS","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud803\udf89"},69703:{"value":"11047","name":"BRAHMI DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc47"},69704:{"value":"11048","name":"BRAHMI DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc48"},69705:{"value":"11049","name":"BRAHMI PUNCTUATION DOT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc49"},69706:{"value":"1104A","name":"BRAHMI PUNCTUATION DOUBLE DOT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc4a"},69707:{"value":"1104B","name":"BRAHMI PUNCTUATION LINE","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc4b"},69708:{"value":"1104C","name":"BRAHMI PUNCTUATION CRESCENT BAR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc4c"},69709:{"value":"1104D","name":"BRAHMI PUNCTUATION LOTUS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udc4d"},69819:{"value":"110BB","name":"KAITHI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcbb"},69820:{"value":"110BC","name":"KAITHI ENUMERATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcbc"},69822:{"value":"110BE","name":"KAITHI SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcbe"},69823:{"value":"110BF","name":"KAITHI DOUBLE SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcbf"},69824:{"value":"110C0","name":"KAITHI DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcc0"},69825:{"value":"110C1","name":"KAITHI DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udcc1"},69952:{"value":"11140","name":"CHAKMA SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd40"},69953:{"value":"11141","name":"CHAKMA DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd41"},69954:{"value":"11142","name":"CHAKMA DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd42"},69955:{"value":"11143","name":"CHAKMA QUESTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd43"},70004:{"value":"11174","name":"MAHAJANI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd74"},70005:{"value":"11175","name":"MAHAJANI SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udd75"},70085:{"value":"111C5","name":"SHARADA DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc5"},70086:{"value":"111C6","name":"SHARADA DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc6"},70087:{"value":"111C7","name":"SHARADA ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc7"},70088:{"value":"111C8","name":"SHARADA SEPARATOR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddc8"},70093:{"value":"111CD","name":"SHARADA SUTRA MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddcd"},70107:{"value":"111DB","name":"SHARADA SIGN SIDDHAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udddb"},70109:{"value":"111DD","name":"SHARADA CONTINUATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udddd"},70110:{"value":"111DE","name":"SHARADA SECTION MARK-1","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\uddde"},70111:{"value":"111DF","name":"SHARADA SECTION MARK-2","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udddf"},70200:{"value":"11238","name":"KHOJKI DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude38"},70201:{"value":"11239","name":"KHOJKI DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude39"},70202:{"value":"1123A","name":"KHOJKI WORD SEPARATOR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude3a"},70203:{"value":"1123B","name":"KHOJKI SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude3b"},70204:{"value":"1123C","name":"KHOJKI DOUBLE SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude3c"},70205:{"value":"1123D","name":"KHOJKI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\ude3d"},70313:{"value":"112A9","name":"MULTANI SECTION MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud804\udea9"},70731:{"value":"1144B","name":"NEWA DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc4b"},70732:{"value":"1144C","name":"NEWA DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc4c"},70733:{"value":"1144D","name":"NEWA COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc4d"},70734:{"value":"1144E","name":"NEWA GAP FILLER","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc4e"},70735:{"value":"1144F","name":"NEWA ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc4f"},70746:{"value":"1145A","name":"NEWA DOUBLE COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc5a"},70747:{"value":"1145B","name":"NEWA PLACEHOLDER MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc5b"},70749:{"value":"1145D","name":"NEWA INSERTION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udc5d"},70854:{"value":"114C6","name":"TIRHUTA ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udcc6"},71105:{"value":"115C1","name":"SIDDHAM SIGN SIDDHAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc1"},71106:{"value":"115C2","name":"SIDDHAM DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc2"},71107:{"value":"115C3","name":"SIDDHAM DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc3"},71108:{"value":"115C4","name":"SIDDHAM SEPARATOR DOT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc4"},71109:{"value":"115C5","name":"SIDDHAM SEPARATOR BAR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc5"},71110:{"value":"115C6","name":"SIDDHAM REPETITION MARK-1","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc6"},71111:{"value":"115C7","name":"SIDDHAM REPETITION MARK-2","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc7"},71112:{"value":"115C8","name":"SIDDHAM REPETITION MARK-3","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc8"},71113:{"value":"115C9","name":"SIDDHAM END OF TEXT MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddc9"},71114:{"value":"115CA","name":"SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddca"},71115:{"value":"115CB","name":"SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddcb"},71116:{"value":"115CC","name":"SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddcc"},71117:{"value":"115CD","name":"SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddcd"},71118:{"value":"115CE","name":"SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddce"},71119:{"value":"115CF","name":"SIDDHAM SECTION MARK DOUBLE RING","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddcf"},71120:{"value":"115D0","name":"SIDDHAM SECTION MARK DOUBLE RING WITH RAYS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd0"},71121:{"value":"115D1","name":"SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd1"},71122:{"value":"115D2","name":"SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd2"},71123:{"value":"115D3","name":"SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd3"},71124:{"value":"115D4","name":"SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd4"},71125:{"value":"115D5","name":"SIDDHAM SECTION MARK WITH CIRCLES AND RAYS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd5"},71126:{"value":"115D6","name":"SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd6"},71127:{"value":"115D7","name":"SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\uddd7"},71233:{"value":"11641","name":"MODI DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude41"},71234:{"value":"11642","name":"MODI DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude42"},71235:{"value":"11643","name":"MODI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude43"},71264:{"value":"11660","name":"MONGOLIAN BIRGA WITH ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude60"},71265:{"value":"11661","name":"MONGOLIAN ROTATED BIRGA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude61"},71266:{"value":"11662","name":"MONGOLIAN DOUBLE BIRGA WITH ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude62"},71267:{"value":"11663","name":"MONGOLIAN TRIPLE BIRGA WITH ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude63"},71268:{"value":"11664","name":"MONGOLIAN BIRGA WITH DOUBLE ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude64"},71269:{"value":"11665","name":"MONGOLIAN ROTATED BIRGA WITH ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude65"},71270:{"value":"11666","name":"MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude66"},71271:{"value":"11667","name":"MONGOLIAN INVERTED BIRGA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude67"},71272:{"value":"11668","name":"MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude68"},71273:{"value":"11669","name":"MONGOLIAN SWIRL BIRGA","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude69"},71274:{"value":"1166A","name":"MONGOLIAN SWIRL BIRGA WITH ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude6a"},71275:{"value":"1166B","name":"MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude6b"},71276:{"value":"1166C","name":"MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\ude6c"},71353:{"value":"116B9","name":"TAKRI ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udeb9"},71484:{"value":"1173C","name":"AHOM SIGN SMALL SECTION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf3c"},71485:{"value":"1173D","name":"AHOM SIGN SECTION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf3d"},71486:{"value":"1173E","name":"AHOM SIGN RULAI","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf3e"},71739:{"value":"1183B","name":"DOGRA ABBREVIATION SIGN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udc3b"},72004:{"value":"11944","name":"DIVES AKURU DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd44"},72005:{"value":"11945","name":"DIVES AKURU GAP FILLER","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd45"},72006:{"value":"11946","name":"DIVES AKURU END OF TEXT MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udd46"},72162:{"value":"119E2","name":"NANDINAGARI SIGN SIDDHAM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udde2"},72255:{"value":"11A3F","name":"ZANABAZAR SQUARE INITIAL HEAD MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude3f"},72256:{"value":"11A40","name":"ZANABAZAR SQUARE CLOSING HEAD MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude40"},72257:{"value":"11A41","name":"ZANABAZAR SQUARE MARK TSHEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude41"},72258:{"value":"11A42","name":"ZANABAZAR SQUARE MARK SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude42"},72259:{"value":"11A43","name":"ZANABAZAR SQUARE MARK DOUBLE SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude43"},72260:{"value":"11A44","name":"ZANABAZAR SQUARE MARK LONG TSHEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude44"},72261:{"value":"11A45","name":"ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude45"},72262:{"value":"11A46","name":"ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude46"},72346:{"value":"11A9A","name":"SOYOMBO MARK TSHEG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude9a"},72347:{"value":"11A9B","name":"SOYOMBO MARK SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude9b"},72348:{"value":"11A9C","name":"SOYOMBO MARK DOUBLE SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude9c"},72350:{"value":"11A9E","name":"SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude9e"},72351:{"value":"11A9F","name":"SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\ude9f"},72352:{"value":"11AA0","name":"SOYOMBO HEAD MARK WITH MOON AND SUN","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udea0"},72353:{"value":"11AA1","name":"SOYOMBO TERMINAL MARK-1","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udea1"},72354:{"value":"11AA2","name":"SOYOMBO TERMINAL MARK-2","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud806\udea2"},72769:{"value":"11C41","name":"BHAIKSUKI DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc41"},72770:{"value":"11C42","name":"BHAIKSUKI DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc42"},72771:{"value":"11C43","name":"BHAIKSUKI WORD SEPARATOR","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc43"},72772:{"value":"11C44","name":"BHAIKSUKI GAP FILLER-1","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc44"},72773:{"value":"11C45","name":"BHAIKSUKI GAP FILLER-2","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc45"},72816:{"value":"11C70","name":"MARCHEN HEAD MARK","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc70"},72817:{"value":"11C71","name":"MARCHEN MARK SHAD","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udc71"},73463:{"value":"11EF7","name":"MAKASAR PASSIMBANG","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef7"},73464:{"value":"11EF8","name":"MAKASAR END OF SECTION","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udef8"},73727:{"value":"11FFF","name":"TAMIL PUNCTUATION END OF TEXT","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfff"},74864:{"value":"12470","name":"CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc70"},74865:{"value":"12471","name":"CUNEIFORM PUNCTUATION SIGN VERTICAL COLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc71"},74866:{"value":"12472","name":"CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc72"},74867:{"value":"12473","name":"CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc73"},74868:{"value":"12474","name":"CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud809\udc74"},77809:{"value":"12FF1","name":"CYPRO-MINOAN SIGN CM301","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udff1"},77810:{"value":"12FF2","name":"CYPRO-MINOAN SIGN CM302","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud80b\udff2"},92782:{"value":"16A6E","name":"MRO DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude6e"},92783:{"value":"16A6F","name":"MRO DOUBLE DANDA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\ude6f"},92917:{"value":"16AF5","name":"BASSA VAH FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udef5"},92983:{"value":"16B37","name":"PAHAWH HMONG SIGN VOS THOM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf37"},92984:{"value":"16B38","name":"PAHAWH HMONG SIGN VOS TSHAB CEEB","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf38"},92985:{"value":"16B39","name":"PAHAWH HMONG SIGN CIM CHEEM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf39"},92986:{"value":"16B3A","name":"PAHAWH HMONG SIGN VOS THIAB","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf3a"},92987:{"value":"16B3B","name":"PAHAWH HMONG SIGN VOS FEEM","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf3b"},92996:{"value":"16B44","name":"PAHAWH HMONG SIGN XAUS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf44"},93847:{"value":"16E97","name":"MEDEFAIDRIN COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude97"},93848:{"value":"16E98","name":"MEDEFAIDRIN FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude98"},93849:{"value":"16E99","name":"MEDEFAIDRIN SYMBOL AIVA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude99"},93850:{"value":"16E9A","name":"MEDEFAIDRIN EXCLAMATION OH","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\ude9a"},94178:{"value":"16FE2","name":"OLD CHINESE HOOK MARK","category":"Po","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81b\udfe2"},113823:{"value":"1BC9F","name":"DUPLOYAN PUNCTUATION CHINOOK FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc9f"},121479:{"value":"1DA87","name":"SIGNWRITING COMMA","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude87"},121480:{"value":"1DA88","name":"SIGNWRITING FULL STOP","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude88"},121481:{"value":"1DA89","name":"SIGNWRITING SEMICOLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude89"},121482:{"value":"1DA8A","name":"SIGNWRITING COLON","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude8a"},121483:{"value":"1DA8B","name":"SIGNWRITING PARENTHESIS","category":"Po","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude8b"},125278:{"value":"1E95E","name":"ADLAM INITIAL EXCLAMATION MARK","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd5e"},125279:{"value":"1E95F","name":"ADLAM INITIAL QUESTION MARK","category":"Po","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83a\udd5f"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Ps.js b/node_modules/unicode/category/Ps.js new file mode 100644 index 000000000..459b8152c --- /dev/null +++ b/node_modules/unicode/category/Ps.js @@ -0,0 +1 @@ +module.exports={40:{"value":"0028","name":"LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x28"},91:{"value":"005B","name":"LEFT SQUARE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING SQUARE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x5B"},123:{"value":"007B","name":"LEFT CURLY BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x7B"},3898:{"value":"0F3A","name":"TIBETAN MARK GUG RTAGS GYON","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F3A"},3900:{"value":"0F3C","name":"TIBETAN MARK ANG KHANG GYON","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"TIBETAN LEFT BRACE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F3C"},5787:{"value":"169B","name":"OGHAM FEATHER MARK","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u169B"},8218:{"value":"201A","name":"SINGLE LOW-9 QUOTATION MARK","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOW SINGLE COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u201A"},8222:{"value":"201E","name":"DOUBLE LOW-9 QUOTATION MARK","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOW DOUBLE COMMA QUOTATION MARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u201E"},8261:{"value":"2045","name":"LEFT SQUARE BRACKET WITH QUILL","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2045"},8317:{"value":"207D","name":"SUPERSCRIPT LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 0028","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SUPERSCRIPT OPENING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u207D"},8333:{"value":"208D","name":"SUBSCRIPT LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 0028","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SUBSCRIPT OPENING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u208D"},8968:{"value":"2308","name":"LEFT CEILING","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2308"},8970:{"value":"230A","name":"LEFT FLOOR","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u230A"},9001:{"value":"2329","name":"LEFT-POINTING ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"3008","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"BRA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2329"},10088:{"value":"2768","name":"MEDIUM LEFT PARENTHESIS ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2768"},10090:{"value":"276A","name":"MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u276A"},10092:{"value":"276C","name":"MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u276C"},10094:{"value":"276E","name":"HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u276E"},10096:{"value":"2770","name":"HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2770"},10098:{"value":"2772","name":"LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2772"},10100:{"value":"2774","name":"MEDIUM LEFT CURLY BRACKET ORNAMENT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2774"},10181:{"value":"27C5","name":"LEFT S-SHAPED BAG DELIMITER","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C5"},10214:{"value":"27E6","name":"MATHEMATICAL LEFT WHITE SQUARE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E6"},10216:{"value":"27E8","name":"MATHEMATICAL LEFT ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E8"},10218:{"value":"27EA","name":"MATHEMATICAL LEFT DOUBLE ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27EA"},10220:{"value":"27EC","name":"MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27EC"},10222:{"value":"27EE","name":"MATHEMATICAL LEFT FLATTENED PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27EE"},10627:{"value":"2983","name":"LEFT WHITE CURLY BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2983"},10629:{"value":"2985","name":"LEFT WHITE PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2985"},10631:{"value":"2987","name":"Z NOTATION LEFT IMAGE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2987"},10633:{"value":"2989","name":"Z NOTATION LEFT BINDING BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2989"},10635:{"value":"298B","name":"LEFT SQUARE BRACKET WITH UNDERBAR","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u298B"},10637:{"value":"298D","name":"LEFT SQUARE BRACKET WITH TICK IN TOP CORNER","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u298D"},10639:{"value":"298F","name":"LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u298F"},10641:{"value":"2991","name":"LEFT ANGLE BRACKET WITH DOT","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2991"},10643:{"value":"2993","name":"LEFT ARC LESS-THAN BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2993"},10645:{"value":"2995","name":"DOUBLE LEFT ARC GREATER-THAN BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2995"},10647:{"value":"2997","name":"LEFT BLACK TORTOISE SHELL BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2997"},10712:{"value":"29D8","name":"LEFT WIGGLY FENCE","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D8"},10714:{"value":"29DA","name":"LEFT DOUBLE WIGGLY FENCE","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29DA"},10748:{"value":"29FC","name":"LEFT-POINTING CURVED ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29FC"},11810:{"value":"2E22","name":"TOP LEFT HALF BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E22"},11812:{"value":"2E24","name":"BOTTOM LEFT HALF BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E24"},11814:{"value":"2E26","name":"LEFT SIDEWAYS U BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E26"},11816:{"value":"2E28","name":"LEFT DOUBLE PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E28"},11842:{"value":"2E42","name":"DOUBLE LOW-REVERSED-9 QUOTATION MARK","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E42"},11861:{"value":"2E55","name":"LEFT SQUARE BRACKET WITH STROKE","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E55"},11863:{"value":"2E57","name":"LEFT SQUARE BRACKET WITH DOUBLE STROKE","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E57"},11865:{"value":"2E59","name":"TOP HALF LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E59"},11867:{"value":"2E5B","name":"BOTTOM HALF LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E5B"},12296:{"value":"3008","name":"LEFT ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3008"},12298:{"value":"300A","name":"LEFT DOUBLE ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING DOUBLE ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u300A"},12300:{"value":"300C","name":"LEFT CORNER BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u300C"},12302:{"value":"300E","name":"LEFT WHITE CORNER BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING WHITE CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u300E"},12304:{"value":"3010","name":"LEFT BLACK LENTICULAR BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING BLACK LENTICULAR BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3010"},12308:{"value":"3014","name":"LEFT TORTOISE SHELL BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3014"},12310:{"value":"3016","name":"LEFT WHITE LENTICULAR BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING WHITE LENTICULAR BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3016"},12312:{"value":"3018","name":"LEFT WHITE TORTOISE SHELL BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING WHITE TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3018"},12314:{"value":"301A","name":"LEFT WHITE SQUARE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"OPENING WHITE SQUARE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u301A"},12317:{"value":"301D","name":"REVERSED DOUBLE PRIME QUOTATION MARK","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u301D"},64831:{"value":"FD3F","name":"ORNATE RIGHT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD3F"},65047:{"value":"FE17","name":"PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 3016","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE17"},65077:{"value":"FE35","name":"PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 0028","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE35"},65079:{"value":"FE37","name":"PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 007B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE37"},65081:{"value":"FE39","name":"PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 3014","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE39"},65083:{"value":"FE3B","name":"PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 3010","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE3B"},65085:{"value":"FE3D","name":"PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 300A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE3D"},65087:{"value":"FE3F","name":"PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 3008","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING ANGLE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE3F"},65089:{"value":"FE41","name":"PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 300C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE41"},65091:{"value":"FE43","name":"PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 300E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE43"},65095:{"value":"FE47","name":"PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 005B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE47"},65113:{"value":"FE59","name":"SMALL LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 0028","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SMALL OPENING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE59"},65115:{"value":"FE5B","name":"SMALL LEFT CURLY BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 007B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SMALL OPENING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE5B"},65117:{"value":"FE5D","name":"SMALL LEFT TORTOISE SHELL BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 3014","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SMALL OPENING TORTOISE SHELL BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE5D"},65288:{"value":"FF08","name":"FULLWIDTH LEFT PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 0028","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"FULLWIDTH OPENING PARENTHESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF08"},65339:{"value":"FF3B","name":"FULLWIDTH LEFT SQUARE BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 005B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"FULLWIDTH OPENING SQUARE BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF3B"},65371:{"value":"FF5B","name":"FULLWIDTH LEFT CURLY BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 007B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"FULLWIDTH OPENING CURLY BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF5B"},65375:{"value":"FF5F","name":"FULLWIDTH LEFT WHITE PARENTHESIS","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 2985","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF5F"},65378:{"value":"FF62","name":"HALFWIDTH LEFT CORNER BRACKET","category":"Ps","class":"0","bidirectional_category":"ON","mapping":" 300C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"HALFWIDTH OPENING CORNER BRACKET","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF62"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Sc.js b/node_modules/unicode/category/Sc.js new file mode 100644 index 000000000..025771080 --- /dev/null +++ b/node_modules/unicode/category/Sc.js @@ -0,0 +1 @@ +module.exports={36:{"value":"0024","name":"DOLLAR SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x24"},162:{"value":"00A2","name":"CENT SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA2"},163:{"value":"00A3","name":"POUND SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA3"},164:{"value":"00A4","name":"CURRENCY SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA4"},165:{"value":"00A5","name":"YEN SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA5"},1423:{"value":"058F","name":"ARMENIAN DRAM SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u058F"},1547:{"value":"060B","name":"AFGHANI SIGN","category":"Sc","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u060B"},2046:{"value":"07FE","name":"NKO DOROME SIGN","category":"Sc","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07FE"},2047:{"value":"07FF","name":"NKO TAMAN SIGN","category":"Sc","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07FF"},2546:{"value":"09F2","name":"BENGALI RUPEE MARK","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F2"},2547:{"value":"09F3","name":"BENGALI RUPEE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09F3"},2555:{"value":"09FB","name":"BENGALI GANDA MARK","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09FB"},2801:{"value":"0AF1","name":"GUJARATI RUPEE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0AF1"},3065:{"value":"0BF9","name":"TAMIL RUPEE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF9"},3647:{"value":"0E3F","name":"THAI CURRENCY SYMBOL BAHT","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THAI BAHT SIGN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0E3F"},6107:{"value":"17DB","name":"KHMER CURRENCY SYMBOL RIEL","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u17DB"},8352:{"value":"20A0","name":"EURO-CURRENCY SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A0"},8353:{"value":"20A1","name":"COLON SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A1"},8354:{"value":"20A2","name":"CRUZEIRO SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A2"},8355:{"value":"20A3","name":"FRENCH FRANC SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A3"},8356:{"value":"20A4","name":"LIRA SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A4"},8357:{"value":"20A5","name":"MILL SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A5"},8358:{"value":"20A6","name":"NAIRA SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A6"},8359:{"value":"20A7","name":"PESETA SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A7"},8360:{"value":"20A8","name":"RUPEE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 0052 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A8"},8361:{"value":"20A9","name":"WON SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20A9"},8362:{"value":"20AA","name":"NEW SHEQEL SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20AA"},8363:{"value":"20AB","name":"DONG SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20AB"},8364:{"value":"20AC","name":"EURO SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20AC"},8365:{"value":"20AD","name":"KIP SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20AD"},8366:{"value":"20AE","name":"TUGRIK SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20AE"},8367:{"value":"20AF","name":"DRACHMA SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20AF"},8368:{"value":"20B0","name":"GERMAN PENNY SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B0"},8369:{"value":"20B1","name":"PESO SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B1"},8370:{"value":"20B2","name":"GUARANI SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B2"},8371:{"value":"20B3","name":"AUSTRAL SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B3"},8372:{"value":"20B4","name":"HRYVNIA SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B4"},8373:{"value":"20B5","name":"CEDI SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B5"},8374:{"value":"20B6","name":"LIVRE TOURNOIS SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B6"},8375:{"value":"20B7","name":"SPESMILO SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B7"},8376:{"value":"20B8","name":"TENGE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B8"},8377:{"value":"20B9","name":"INDIAN RUPEE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20B9"},8378:{"value":"20BA","name":"TURKISH LIRA SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20BA"},8379:{"value":"20BB","name":"NORDIC MARK SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20BB"},8380:{"value":"20BC","name":"MANAT SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20BC"},8381:{"value":"20BD","name":"RUBLE SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20BD"},8382:{"value":"20BE","name":"LARI SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20BE"},8383:{"value":"20BF","name":"BITCOIN SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20BF"},8384:{"value":"20C0","name":"SOM SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u20C0"},43064:{"value":"A838","name":"NORTH INDIC RUPEE MARK","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA838"},65020:{"value":"FDFC","name":"RIAL SIGN","category":"Sc","class":"0","bidirectional_category":"AL","mapping":" 0631 06CC 0627 0644","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDFC"},65129:{"value":"FE69","name":"SMALL DOLLAR SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 0024","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE69"},65284:{"value":"FF04","name":"FULLWIDTH DOLLAR SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 0024","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF04"},65504:{"value":"FFE0","name":"FULLWIDTH CENT SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 00A2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE0"},65505:{"value":"FFE1","name":"FULLWIDTH POUND SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 00A3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE1"},65509:{"value":"FFE5","name":"FULLWIDTH YEN SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 00A5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE5"},65510:{"value":"FFE6","name":"FULLWIDTH WON SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":" 20A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE6"},73693:{"value":"11FDD","name":"TAMIL SIGN KAACU","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfdd"},73694:{"value":"11FDE","name":"TAMIL SIGN PANAM","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfde"},73695:{"value":"11FDF","name":"TAMIL SIGN PON","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfdf"},73696:{"value":"11FE0","name":"TAMIL SIGN VARAAKAN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe0"},123647:{"value":"1E2FF","name":"WANCHO NGUN SIGN","category":"Sc","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udeff"},126128:{"value":"1ECB0","name":"INDIC SIYAQ RUPEE MARK","category":"Sc","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcb0"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Sk.js b/node_modules/unicode/category/Sk.js new file mode 100644 index 000000000..796162117 --- /dev/null +++ b/node_modules/unicode/category/Sk.js @@ -0,0 +1 @@ +module.exports={94:{"value":"005E","name":"CIRCUMFLEX ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x5E"},96:{"value":"0060","name":"GRAVE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x60"},168:{"value":"00A8","name":"DIAERESIS","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0308","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DIAERESIS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA8"},175:{"value":"00AF","name":"MACRON","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0304","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xAF"},180:{"value":"00B4","name":"ACUTE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB4"},184:{"value":"00B8","name":"CEDILLA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0327","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING CEDILLA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB8"},706:{"value":"02C2","name":"MODIFIER LETTER LEFT ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C2"},707:{"value":"02C3","name":"MODIFIER LETTER RIGHT ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C3"},708:{"value":"02C4","name":"MODIFIER LETTER UP ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C4"},709:{"value":"02C5","name":"MODIFIER LETTER DOWN ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02C5"},722:{"value":"02D2","name":"MODIFIER LETTER CENTRED RIGHT HALF RING","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER CENTERED RIGHT HALF RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D2"},723:{"value":"02D3","name":"MODIFIER LETTER CENTRED LEFT HALF RING","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MODIFIER LETTER CENTERED LEFT HALF RING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D3"},724:{"value":"02D4","name":"MODIFIER LETTER UP TACK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D4"},725:{"value":"02D5","name":"MODIFIER LETTER DOWN TACK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D5"},726:{"value":"02D6","name":"MODIFIER LETTER PLUS SIGN","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D6"},727:{"value":"02D7","name":"MODIFIER LETTER MINUS SIGN","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D7"},728:{"value":"02D8","name":"BREVE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0306","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING BREVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D8"},729:{"value":"02D9","name":"DOT ABOVE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DOT ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02D9"},730:{"value":"02DA","name":"RING ABOVE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 030A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING RING ABOVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02DA"},731:{"value":"02DB","name":"OGONEK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0328","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING OGONEK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02DB"},732:{"value":"02DC","name":"SMALL TILDE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0303","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02DC"},733:{"value":"02DD","name":"DOUBLE ACUTE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 030B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SPACING DOUBLE ACUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02DD"},734:{"value":"02DE","name":"MODIFIER LETTER RHOTIC HOOK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02DE"},735:{"value":"02DF","name":"MODIFIER LETTER CROSS ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02DF"},741:{"value":"02E5","name":"MODIFIER LETTER EXTRA-HIGH TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E5"},742:{"value":"02E6","name":"MODIFIER LETTER HIGH TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E6"},743:{"value":"02E7","name":"MODIFIER LETTER MID TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E7"},744:{"value":"02E8","name":"MODIFIER LETTER LOW TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E8"},745:{"value":"02E9","name":"MODIFIER LETTER EXTRA-LOW TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02E9"},746:{"value":"02EA","name":"MODIFIER LETTER YIN DEPARTING TONE MARK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02EA"},747:{"value":"02EB","name":"MODIFIER LETTER YANG DEPARTING TONE MARK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02EB"},749:{"value":"02ED","name":"MODIFIER LETTER UNASPIRATED","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02ED"},751:{"value":"02EF","name":"MODIFIER LETTER LOW DOWN ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02EF"},752:{"value":"02F0","name":"MODIFIER LETTER LOW UP ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F0"},753:{"value":"02F1","name":"MODIFIER LETTER LOW LEFT ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F1"},754:{"value":"02F2","name":"MODIFIER LETTER LOW RIGHT ARROWHEAD","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F2"},755:{"value":"02F3","name":"MODIFIER LETTER LOW RING","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F3"},756:{"value":"02F4","name":"MODIFIER LETTER MIDDLE GRAVE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F4"},757:{"value":"02F5","name":"MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F5"},758:{"value":"02F6","name":"MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F6"},759:{"value":"02F7","name":"MODIFIER LETTER LOW TILDE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F7"},760:{"value":"02F8","name":"MODIFIER LETTER RAISED COLON","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F8"},761:{"value":"02F9","name":"MODIFIER LETTER BEGIN HIGH TONE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02F9"},762:{"value":"02FA","name":"MODIFIER LETTER END HIGH TONE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02FA"},763:{"value":"02FB","name":"MODIFIER LETTER BEGIN LOW TONE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02FB"},764:{"value":"02FC","name":"MODIFIER LETTER END LOW TONE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02FC"},765:{"value":"02FD","name":"MODIFIER LETTER SHELF","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02FD"},766:{"value":"02FE","name":"MODIFIER LETTER OPEN SHELF","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02FE"},767:{"value":"02FF","name":"MODIFIER LETTER LOW LEFT ARROW","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u02FF"},885:{"value":"0375","name":"GREEK LOWER NUMERAL SIGN","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0375"},900:{"value":"0384","name":"GREEK TONOS","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SPACING TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0384"},901:{"value":"0385","name":"GREEK DIALYTIKA TONOS","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"00A8 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GREEK SPACING DIAERESIS TONOS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0385"},2184:{"value":"0888","name":"ARABIC RAISED ROUND DOT","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0888"},8125:{"value":"1FBD","name":"GREEK KORONIS","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FBD"},8127:{"value":"1FBF","name":"GREEK PSILI","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0313","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FBF"},8128:{"value":"1FC0","name":"GREEK PERISPOMENI","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FC0"},8129:{"value":"1FC1","name":"GREEK DIALYTIKA AND PERISPOMENI","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"00A8 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FC1"},8141:{"value":"1FCD","name":"GREEK PSILI AND VARIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"1FBF 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FCD"},8142:{"value":"1FCE","name":"GREEK PSILI AND OXIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"1FBF 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FCE"},8143:{"value":"1FCF","name":"GREEK PSILI AND PERISPOMENI","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"1FBF 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FCF"},8157:{"value":"1FDD","name":"GREEK DASIA AND VARIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"1FFE 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FDD"},8158:{"value":"1FDE","name":"GREEK DASIA AND OXIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"1FFE 0301","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FDE"},8159:{"value":"1FDF","name":"GREEK DASIA AND PERISPOMENI","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"1FFE 0342","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FDF"},8173:{"value":"1FED","name":"GREEK DIALYTIKA AND VARIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"00A8 0300","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FED"},8174:{"value":"1FEE","name":"GREEK DIALYTIKA AND OXIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"0385","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FEE"},8175:{"value":"1FEF","name":"GREEK VARIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"0060","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FEF"},8189:{"value":"1FFD","name":"GREEK OXIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"00B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FFD"},8190:{"value":"1FFE","name":"GREEK DASIA","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 0314","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1FFE"},12443:{"value":"309B","name":"KATAKANA-HIRAGANA VOICED SOUND MARK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 3099","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u309B"},12444:{"value":"309C","name":"KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0020 309A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u309C"},42752:{"value":"A700","name":"MODIFIER LETTER CHINESE TONE YIN PING","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA700"},42753:{"value":"A701","name":"MODIFIER LETTER CHINESE TONE YANG PING","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA701"},42754:{"value":"A702","name":"MODIFIER LETTER CHINESE TONE YIN SHANG","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA702"},42755:{"value":"A703","name":"MODIFIER LETTER CHINESE TONE YANG SHANG","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA703"},42756:{"value":"A704","name":"MODIFIER LETTER CHINESE TONE YIN QU","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA704"},42757:{"value":"A705","name":"MODIFIER LETTER CHINESE TONE YANG QU","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA705"},42758:{"value":"A706","name":"MODIFIER LETTER CHINESE TONE YIN RU","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA706"},42759:{"value":"A707","name":"MODIFIER LETTER CHINESE TONE YANG RU","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA707"},42760:{"value":"A708","name":"MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA708"},42761:{"value":"A709","name":"MODIFIER LETTER HIGH DOTTED TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA709"},42762:{"value":"A70A","name":"MODIFIER LETTER MID DOTTED TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA70A"},42763:{"value":"A70B","name":"MODIFIER LETTER LOW DOTTED TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA70B"},42764:{"value":"A70C","name":"MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA70C"},42765:{"value":"A70D","name":"MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA70D"},42766:{"value":"A70E","name":"MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA70E"},42767:{"value":"A70F","name":"MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA70F"},42768:{"value":"A710","name":"MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA710"},42769:{"value":"A711","name":"MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA711"},42770:{"value":"A712","name":"MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA712"},42771:{"value":"A713","name":"MODIFIER LETTER HIGH LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA713"},42772:{"value":"A714","name":"MODIFIER LETTER MID LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA714"},42773:{"value":"A715","name":"MODIFIER LETTER LOW LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA715"},42774:{"value":"A716","name":"MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA716"},42784:{"value":"A720","name":"MODIFIER LETTER STRESS AND HIGH TONE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA720"},42785:{"value":"A721","name":"MODIFIER LETTER STRESS AND LOW TONE","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA721"},42889:{"value":"A789","name":"MODIFIER LETTER COLON","category":"Sk","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA789"},42890:{"value":"A78A","name":"MODIFIER LETTER SHORT EQUALS SIGN","category":"Sk","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA78A"},43867:{"value":"AB5B","name":"MODIFIER BREVE WITH INVERTED BREVE","category":"Sk","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB5B"},43882:{"value":"AB6A","name":"MODIFIER LETTER LEFT TACK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB6A"},43883:{"value":"AB6B","name":"MODIFIER LETTER RIGHT TACK","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAB6B"},64434:{"value":"FBB2","name":"ARABIC SYMBOL DOT ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB2"},64435:{"value":"FBB3","name":"ARABIC SYMBOL DOT BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB3"},64436:{"value":"FBB4","name":"ARABIC SYMBOL TWO DOTS ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB4"},64437:{"value":"FBB5","name":"ARABIC SYMBOL TWO DOTS BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB5"},64438:{"value":"FBB6","name":"ARABIC SYMBOL THREE DOTS ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB6"},64439:{"value":"FBB7","name":"ARABIC SYMBOL THREE DOTS BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB7"},64440:{"value":"FBB8","name":"ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB8"},64441:{"value":"FBB9","name":"ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBB9"},64442:{"value":"FBBA","name":"ARABIC SYMBOL FOUR DOTS ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBBA"},64443:{"value":"FBBB","name":"ARABIC SYMBOL FOUR DOTS BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBBB"},64444:{"value":"FBBC","name":"ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBBC"},64445:{"value":"FBBD","name":"ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBBD"},64446:{"value":"FBBE","name":"ARABIC SYMBOL TWO DOTS VERTICALLY BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBBE"},64447:{"value":"FBBF","name":"ARABIC SYMBOL RING","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBBF"},64448:{"value":"FBC0","name":"ARABIC SYMBOL SMALL TAH ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBC0"},64449:{"value":"FBC1","name":"ARABIC SYMBOL SMALL TAH BELOW","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBC1"},64450:{"value":"FBC2","name":"ARABIC SYMBOL WASLA ABOVE","category":"Sk","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFBC2"},65342:{"value":"FF3E","name":"FULLWIDTH CIRCUMFLEX ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 005E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH SPACING CIRCUMFLEX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF3E"},65344:{"value":"FF40","name":"FULLWIDTH GRAVE ACCENT","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 0060","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH SPACING GRAVE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF40"},65507:{"value":"FFE3","name":"FULLWIDTH MACRON","category":"Sk","class":"0","bidirectional_category":"ON","mapping":" 00AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH SPACING MACRON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE3"},127995:{"value":"1F3FB","name":"EMOJI MODIFIER FITZPATRICK TYPE-1-2","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udffb"},127996:{"value":"1F3FC","name":"EMOJI MODIFIER FITZPATRICK TYPE-3","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udffc"},127997:{"value":"1F3FD","name":"EMOJI MODIFIER FITZPATRICK TYPE-4","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udffd"},127998:{"value":"1F3FE","name":"EMOJI MODIFIER FITZPATRICK TYPE-5","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udffe"},127999:{"value":"1F3FF","name":"EMOJI MODIFIER FITZPATRICK TYPE-6","category":"Sk","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfff"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Sm.js b/node_modules/unicode/category/Sm.js new file mode 100644 index 000000000..6c9d72535 --- /dev/null +++ b/node_modules/unicode/category/Sm.js @@ -0,0 +1 @@ +module.exports={43:{"value":"002B","name":"PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x2B"},60:{"value":"003C","name":"LESS-THAN SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x3C"},61:{"value":"003D","name":"EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x3D"},62:{"value":"003E","name":"GREATER-THAN SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x3E"},124:{"value":"007C","name":"VERTICAL LINE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x7C"},126:{"value":"007E","name":"TILDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x7E"},172:{"value":"00AC","name":"NOT SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xAC"},177:{"value":"00B1","name":"PLUS-MINUS SIGN","category":"Sm","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PLUS-OR-MINUS SIGN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB1"},215:{"value":"00D7","name":"MULTIPLICATION SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xD7"},247:{"value":"00F7","name":"DIVISION SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xF7"},1014:{"value":"03F6","name":"GREEK REVERSED LUNATE EPSILON SYMBOL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u03F6"},1542:{"value":"0606","name":"ARABIC-INDIC CUBE ROOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0606"},1543:{"value":"0607","name":"ARABIC-INDIC FOURTH ROOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0607"},1544:{"value":"0608","name":"ARABIC RAY","category":"Sm","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0608"},8260:{"value":"2044","name":"FRACTION SLASH","category":"Sm","class":"0","bidirectional_category":"CS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2044"},8274:{"value":"2052","name":"COMMERCIAL MINUS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2052"},8314:{"value":"207A","name":"SUPERSCRIPT PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 002B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u207A"},8315:{"value":"207B","name":"SUPERSCRIPT MINUS","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 2212","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SUPERSCRIPT HYPHEN-MINUS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u207B"},8316:{"value":"207C","name":"SUPERSCRIPT EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u207C"},8330:{"value":"208A","name":"SUBSCRIPT PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 002B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u208A"},8331:{"value":"208B","name":"SUBSCRIPT MINUS","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 2212","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SUBSCRIPT HYPHEN-MINUS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u208B"},8332:{"value":"208C","name":"SUBSCRIPT EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u208C"},8472:{"value":"2118","name":"SCRIPT CAPITAL P","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SCRIPT P","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2118"},8512:{"value":"2140","name":"DOUBLE-STRUCK N-ARY SUMMATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2211","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2140"},8513:{"value":"2141","name":"TURNED SANS-SERIF CAPITAL G","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2141"},8514:{"value":"2142","name":"TURNED SANS-SERIF CAPITAL L","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2142"},8515:{"value":"2143","name":"REVERSED SANS-SERIF CAPITAL L","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2143"},8516:{"value":"2144","name":"TURNED SANS-SERIF CAPITAL Y","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2144"},8523:{"value":"214B","name":"TURNED AMPERSAND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u214B"},8592:{"value":"2190","name":"LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2190"},8593:{"value":"2191","name":"UPWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2191"},8594:{"value":"2192","name":"RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2192"},8595:{"value":"2193","name":"DOWNWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2193"},8596:{"value":"2194","name":"LEFT RIGHT ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2194"},8602:{"value":"219A","name":"LEFTWARDS ARROW WITH STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2190 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW WITH STROKE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u219A"},8603:{"value":"219B","name":"RIGHTWARDS ARROW WITH STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2192 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW WITH STROKE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u219B"},8608:{"value":"21A0","name":"RIGHTWARDS TWO HEADED ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT TWO HEADED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A0"},8611:{"value":"21A3","name":"RIGHTWARDS ARROW WITH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW WITH TAIL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A3"},8614:{"value":"21A6","name":"RIGHTWARDS ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW FROM BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A6"},8622:{"value":"21AE","name":"LEFT RIGHT ARROW WITH STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2194 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21AE"},8654:{"value":"21CE","name":"LEFT RIGHT DOUBLE ARROW WITH STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"21D4 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21CE"},8655:{"value":"21CF","name":"RIGHTWARDS DOUBLE ARROW WITH STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"21D2 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT DOUBLE ARROW WITH STROKE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21CF"},8658:{"value":"21D2","name":"RIGHTWARDS DOUBLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D2"},8660:{"value":"21D4","name":"LEFT RIGHT DOUBLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D4"},8692:{"value":"21F4","name":"RIGHT ARROW WITH SMALL CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F4"},8693:{"value":"21F5","name":"DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F5"},8694:{"value":"21F6","name":"THREE RIGHTWARDS ARROWS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F6"},8695:{"value":"21F7","name":"LEFTWARDS ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F7"},8696:{"value":"21F8","name":"RIGHTWARDS ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F8"},8697:{"value":"21F9","name":"LEFT RIGHT ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F9"},8698:{"value":"21FA","name":"LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21FA"},8699:{"value":"21FB","name":"RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21FB"},8700:{"value":"21FC","name":"LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21FC"},8701:{"value":"21FD","name":"LEFTWARDS OPEN-HEADED ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21FD"},8702:{"value":"21FE","name":"RIGHTWARDS OPEN-HEADED ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21FE"},8703:{"value":"21FF","name":"LEFT RIGHT OPEN-HEADED ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21FF"},8704:{"value":"2200","name":"FOR ALL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2200"},8705:{"value":"2201","name":"COMPLEMENT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2201"},8706:{"value":"2202","name":"PARTIAL DIFFERENTIAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2202"},8707:{"value":"2203","name":"THERE EXISTS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2203"},8708:{"value":"2204","name":"THERE DOES NOT EXIST","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2203 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2204"},8709:{"value":"2205","name":"EMPTY SET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2205"},8710:{"value":"2206","name":"INCREMENT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2206"},8711:{"value":"2207","name":"NABLA","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2207"},8712:{"value":"2208","name":"ELEMENT OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2208"},8713:{"value":"2209","name":"NOT AN ELEMENT OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2208 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2209"},8714:{"value":"220A","name":"SMALL ELEMENT OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u220A"},8715:{"value":"220B","name":"CONTAINS AS MEMBER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u220B"},8716:{"value":"220C","name":"DOES NOT CONTAIN AS MEMBER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"220B 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u220C"},8717:{"value":"220D","name":"SMALL CONTAINS AS MEMBER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u220D"},8718:{"value":"220E","name":"END OF PROOF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u220E"},8719:{"value":"220F","name":"N-ARY PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u220F"},8720:{"value":"2210","name":"N-ARY COPRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2210"},8721:{"value":"2211","name":"N-ARY SUMMATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2211"},8722:{"value":"2212","name":"MINUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2212"},8723:{"value":"2213","name":"MINUS-OR-PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2213"},8724:{"value":"2214","name":"DOT PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2214"},8725:{"value":"2215","name":"DIVISION SLASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2215"},8726:{"value":"2216","name":"SET MINUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2216"},8727:{"value":"2217","name":"ASTERISK OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2217"},8728:{"value":"2218","name":"RING OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2218"},8729:{"value":"2219","name":"BULLET OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2219"},8730:{"value":"221A","name":"SQUARE ROOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u221A"},8731:{"value":"221B","name":"CUBE ROOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u221B"},8732:{"value":"221C","name":"FOURTH ROOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u221C"},8733:{"value":"221D","name":"PROPORTIONAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u221D"},8734:{"value":"221E","name":"INFINITY","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u221E"},8735:{"value":"221F","name":"RIGHT ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u221F"},8736:{"value":"2220","name":"ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2220"},8737:{"value":"2221","name":"MEASURED ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2221"},8738:{"value":"2222","name":"SPHERICAL ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2222"},8739:{"value":"2223","name":"DIVIDES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2223"},8740:{"value":"2224","name":"DOES NOT DIVIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2223 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2224"},8741:{"value":"2225","name":"PARALLEL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2225"},8742:{"value":"2226","name":"NOT PARALLEL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2225 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2226"},8743:{"value":"2227","name":"LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2227"},8744:{"value":"2228","name":"LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2228"},8745:{"value":"2229","name":"INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2229"},8746:{"value":"222A","name":"UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u222A"},8747:{"value":"222B","name":"INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u222B"},8748:{"value":"222C","name":"DOUBLE INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 222B 222B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u222C"},8749:{"value":"222D","name":"TRIPLE INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 222B 222B 222B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u222D"},8750:{"value":"222E","name":"CONTOUR INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u222E"},8751:{"value":"222F","name":"SURFACE INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 222E 222E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u222F"},8752:{"value":"2230","name":"VOLUME INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 222E 222E 222E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2230"},8753:{"value":"2231","name":"CLOCKWISE INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2231"},8754:{"value":"2232","name":"CLOCKWISE CONTOUR INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2232"},8755:{"value":"2233","name":"ANTICLOCKWISE CONTOUR INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2233"},8756:{"value":"2234","name":"THEREFORE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2234"},8757:{"value":"2235","name":"BECAUSE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2235"},8758:{"value":"2236","name":"RATIO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2236"},8759:{"value":"2237","name":"PROPORTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2237"},8760:{"value":"2238","name":"DOT MINUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2238"},8761:{"value":"2239","name":"EXCESS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2239"},8762:{"value":"223A","name":"GEOMETRIC PROPORTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u223A"},8763:{"value":"223B","name":"HOMOTHETIC","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u223B"},8764:{"value":"223C","name":"TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u223C"},8765:{"value":"223D","name":"REVERSED TILDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u223D"},8766:{"value":"223E","name":"INVERTED LAZY S","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u223E"},8767:{"value":"223F","name":"SINE WAVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u223F"},8768:{"value":"2240","name":"WREATH PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2240"},8769:{"value":"2241","name":"NOT TILDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"223C 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2241"},8770:{"value":"2242","name":"MINUS TILDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2242"},8771:{"value":"2243","name":"ASYMPTOTICALLY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2243"},8772:{"value":"2244","name":"NOT ASYMPTOTICALLY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2243 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2244"},8773:{"value":"2245","name":"APPROXIMATELY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2245"},8774:{"value":"2246","name":"APPROXIMATELY BUT NOT ACTUALLY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2246"},8775:{"value":"2247","name":"NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2245 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2247"},8776:{"value":"2248","name":"ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2248"},8777:{"value":"2249","name":"NOT ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2248 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2249"},8778:{"value":"224A","name":"ALMOST EQUAL OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u224A"},8779:{"value":"224B","name":"TRIPLE TILDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u224B"},8780:{"value":"224C","name":"ALL EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u224C"},8781:{"value":"224D","name":"EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u224D"},8782:{"value":"224E","name":"GEOMETRICALLY EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u224E"},8783:{"value":"224F","name":"DIFFERENCE BETWEEN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u224F"},8784:{"value":"2250","name":"APPROACHES THE LIMIT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2250"},8785:{"value":"2251","name":"GEOMETRICALLY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2251"},8786:{"value":"2252","name":"APPROXIMATELY EQUAL TO OR THE IMAGE OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2252"},8787:{"value":"2253","name":"IMAGE OF OR APPROXIMATELY EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2253"},8788:{"value":"2254","name":"COLON EQUALS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"COLON EQUAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2254"},8789:{"value":"2255","name":"EQUALS COLON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"EQUAL COLON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2255"},8790:{"value":"2256","name":"RING IN EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2256"},8791:{"value":"2257","name":"RING EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2257"},8792:{"value":"2258","name":"CORRESPONDS TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2258"},8793:{"value":"2259","name":"ESTIMATES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2259"},8794:{"value":"225A","name":"EQUIANGULAR TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u225A"},8795:{"value":"225B","name":"STAR EQUALS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u225B"},8796:{"value":"225C","name":"DELTA EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u225C"},8797:{"value":"225D","name":"EQUAL TO BY DEFINITION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u225D"},8798:{"value":"225E","name":"MEASURED BY","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u225E"},8799:{"value":"225F","name":"QUESTIONED EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u225F"},8800:{"value":"2260","name":"NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"003D 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2260"},8801:{"value":"2261","name":"IDENTICAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2261"},8802:{"value":"2262","name":"NOT IDENTICAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2261 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2262"},8803:{"value":"2263","name":"STRICTLY EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2263"},8804:{"value":"2264","name":"LESS-THAN OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN OR EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2264"},8805:{"value":"2265","name":"GREATER-THAN OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN OR EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2265"},8806:{"value":"2266","name":"LESS-THAN OVER EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN OVER EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2266"},8807:{"value":"2267","name":"GREATER-THAN OVER EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN OVER EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2267"},8808:{"value":"2268","name":"LESS-THAN BUT NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN BUT NOT EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2268"},8809:{"value":"2269","name":"GREATER-THAN BUT NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN BUT NOT EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2269"},8810:{"value":"226A","name":"MUCH LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"MUCH LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u226A"},8811:{"value":"226B","name":"MUCH GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"MUCH GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u226B"},8812:{"value":"226C","name":"BETWEEN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u226C"},8813:{"value":"226D","name":"NOT EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"224D 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u226D"},8814:{"value":"226E","name":"NOT LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"003C 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NOT LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u226E"},8815:{"value":"226F","name":"NOT GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"003E 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NOT GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u226F"},8816:{"value":"2270","name":"NEITHER LESS-THAN NOR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2264 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NEITHER LESS THAN NOR EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2270"},8817:{"value":"2271","name":"NEITHER GREATER-THAN NOR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2265 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NEITHER GREATER THAN NOR EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2271"},8818:{"value":"2272","name":"LESS-THAN OR EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN OR EQUIVALENT TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2272"},8819:{"value":"2273","name":"GREATER-THAN OR EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN OR EQUIVALENT TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2273"},8820:{"value":"2274","name":"NEITHER LESS-THAN NOR EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2272 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NEITHER LESS THAN NOR EQUIVALENT TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2274"},8821:{"value":"2275","name":"NEITHER GREATER-THAN NOR EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2273 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NEITHER GREATER THAN NOR EQUIVALENT TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2275"},8822:{"value":"2276","name":"LESS-THAN OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN OR GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2276"},8823:{"value":"2277","name":"GREATER-THAN OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN OR LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2277"},8824:{"value":"2278","name":"NEITHER LESS-THAN NOR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2276 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NEITHER LESS THAN NOR GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2278"},8825:{"value":"2279","name":"NEITHER GREATER-THAN NOR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2277 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"NEITHER GREATER THAN NOR LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2279"},8826:{"value":"227A","name":"PRECEDES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u227A"},8827:{"value":"227B","name":"SUCCEEDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u227B"},8828:{"value":"227C","name":"PRECEDES OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u227C"},8829:{"value":"227D","name":"SUCCEEDS OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u227D"},8830:{"value":"227E","name":"PRECEDES OR EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u227E"},8831:{"value":"227F","name":"SUCCEEDS OR EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u227F"},8832:{"value":"2280","name":"DOES NOT PRECEDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"227A 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2280"},8833:{"value":"2281","name":"DOES NOT SUCCEED","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"227B 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2281"},8834:{"value":"2282","name":"SUBSET OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2282"},8835:{"value":"2283","name":"SUPERSET OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2283"},8836:{"value":"2284","name":"NOT A SUBSET OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2282 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2284"},8837:{"value":"2285","name":"NOT A SUPERSET OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2283 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2285"},8838:{"value":"2286","name":"SUBSET OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2286"},8839:{"value":"2287","name":"SUPERSET OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2287"},8840:{"value":"2288","name":"NEITHER A SUBSET OF NOR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2286 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2288"},8841:{"value":"2289","name":"NEITHER A SUPERSET OF NOR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2287 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2289"},8842:{"value":"228A","name":"SUBSET OF WITH NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SUBSET OF OR NOT EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u228A"},8843:{"value":"228B","name":"SUPERSET OF WITH NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"SUPERSET OF OR NOT EQUAL TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u228B"},8844:{"value":"228C","name":"MULTISET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u228C"},8845:{"value":"228D","name":"MULTISET MULTIPLICATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u228D"},8846:{"value":"228E","name":"MULTISET UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u228E"},8847:{"value":"228F","name":"SQUARE IMAGE OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u228F"},8848:{"value":"2290","name":"SQUARE ORIGINAL OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2290"},8849:{"value":"2291","name":"SQUARE IMAGE OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2291"},8850:{"value":"2292","name":"SQUARE ORIGINAL OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2292"},8851:{"value":"2293","name":"SQUARE CAP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2293"},8852:{"value":"2294","name":"SQUARE CUP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2294"},8853:{"value":"2295","name":"CIRCLED PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2295"},8854:{"value":"2296","name":"CIRCLED MINUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2296"},8855:{"value":"2297","name":"CIRCLED TIMES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2297"},8856:{"value":"2298","name":"CIRCLED DIVISION SLASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2298"},8857:{"value":"2299","name":"CIRCLED DOT OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2299"},8858:{"value":"229A","name":"CIRCLED RING OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u229A"},8859:{"value":"229B","name":"CIRCLED ASTERISK OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u229B"},8860:{"value":"229C","name":"CIRCLED EQUALS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u229C"},8861:{"value":"229D","name":"CIRCLED DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u229D"},8862:{"value":"229E","name":"SQUARED PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u229E"},8863:{"value":"229F","name":"SQUARED MINUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u229F"},8864:{"value":"22A0","name":"SQUARED TIMES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A0"},8865:{"value":"22A1","name":"SQUARED DOT OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A1"},8866:{"value":"22A2","name":"RIGHT TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A2"},8867:{"value":"22A3","name":"LEFT TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A3"},8868:{"value":"22A4","name":"DOWN TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A4"},8869:{"value":"22A5","name":"UP TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A5"},8870:{"value":"22A6","name":"ASSERTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A6"},8871:{"value":"22A7","name":"MODELS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A7"},8872:{"value":"22A8","name":"TRUE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A8"},8873:{"value":"22A9","name":"FORCES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22A9"},8874:{"value":"22AA","name":"TRIPLE VERTICAL BAR RIGHT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22AA"},8875:{"value":"22AB","name":"DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22AB"},8876:{"value":"22AC","name":"DOES NOT PROVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22A2 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22AC"},8877:{"value":"22AD","name":"NOT TRUE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22A8 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22AD"},8878:{"value":"22AE","name":"DOES NOT FORCE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22A9 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22AE"},8879:{"value":"22AF","name":"NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22AB 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22AF"},8880:{"value":"22B0","name":"PRECEDES UNDER RELATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B0"},8881:{"value":"22B1","name":"SUCCEEDS UNDER RELATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B1"},8882:{"value":"22B2","name":"NORMAL SUBGROUP OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B2"},8883:{"value":"22B3","name":"CONTAINS AS NORMAL SUBGROUP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B3"},8884:{"value":"22B4","name":"NORMAL SUBGROUP OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B4"},8885:{"value":"22B5","name":"CONTAINS AS NORMAL SUBGROUP OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B5"},8886:{"value":"22B6","name":"ORIGINAL OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B6"},8887:{"value":"22B7","name":"IMAGE OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B7"},8888:{"value":"22B8","name":"MULTIMAP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B8"},8889:{"value":"22B9","name":"HERMITIAN CONJUGATE MATRIX","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22B9"},8890:{"value":"22BA","name":"INTERCALATE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22BA"},8891:{"value":"22BB","name":"XOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22BB"},8892:{"value":"22BC","name":"NAND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22BC"},8893:{"value":"22BD","name":"NOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22BD"},8894:{"value":"22BE","name":"RIGHT ANGLE WITH ARC","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22BE"},8895:{"value":"22BF","name":"RIGHT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22BF"},8896:{"value":"22C0","name":"N-ARY LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C0"},8897:{"value":"22C1","name":"N-ARY LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C1"},8898:{"value":"22C2","name":"N-ARY INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C2"},8899:{"value":"22C3","name":"N-ARY UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C3"},8900:{"value":"22C4","name":"DIAMOND OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C4"},8901:{"value":"22C5","name":"DOT OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C5"},8902:{"value":"22C6","name":"STAR OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C6"},8903:{"value":"22C7","name":"DIVISION TIMES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C7"},8904:{"value":"22C8","name":"BOWTIE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C8"},8905:{"value":"22C9","name":"LEFT NORMAL FACTOR SEMIDIRECT PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22C9"},8906:{"value":"22CA","name":"RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22CA"},8907:{"value":"22CB","name":"LEFT SEMIDIRECT PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22CB"},8908:{"value":"22CC","name":"RIGHT SEMIDIRECT PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22CC"},8909:{"value":"22CD","name":"REVERSED TILDE EQUALS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22CD"},8910:{"value":"22CE","name":"CURLY LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22CE"},8911:{"value":"22CF","name":"CURLY LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22CF"},8912:{"value":"22D0","name":"DOUBLE SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D0"},8913:{"value":"22D1","name":"DOUBLE SUPERSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D1"},8914:{"value":"22D2","name":"DOUBLE INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D2"},8915:{"value":"22D3","name":"DOUBLE UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D3"},8916:{"value":"22D4","name":"PITCHFORK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D4"},8917:{"value":"22D5","name":"EQUAL AND PARALLEL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D5"},8918:{"value":"22D6","name":"LESS-THAN WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN WITH DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D6"},8919:{"value":"22D7","name":"GREATER-THAN WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN WITH DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D7"},8920:{"value":"22D8","name":"VERY MUCH LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"VERY MUCH LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D8"},8921:{"value":"22D9","name":"VERY MUCH GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"VERY MUCH GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22D9"},8922:{"value":"22DA","name":"LESS-THAN EQUAL TO OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN EQUAL TO OR GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22DA"},8923:{"value":"22DB","name":"GREATER-THAN EQUAL TO OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN EQUAL TO OR LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22DB"},8924:{"value":"22DC","name":"EQUAL TO OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"EQUAL TO OR LESS THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22DC"},8925:{"value":"22DD","name":"EQUAL TO OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"EQUAL TO OR GREATER THAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22DD"},8926:{"value":"22DE","name":"EQUAL TO OR PRECEDES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22DE"},8927:{"value":"22DF","name":"EQUAL TO OR SUCCEEDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22DF"},8928:{"value":"22E0","name":"DOES NOT PRECEDE OR EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"227C 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E0"},8929:{"value":"22E1","name":"DOES NOT SUCCEED OR EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"227D 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E1"},8930:{"value":"22E2","name":"NOT SQUARE IMAGE OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2291 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E2"},8931:{"value":"22E3","name":"NOT SQUARE ORIGINAL OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2292 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E3"},8932:{"value":"22E4","name":"SQUARE IMAGE OF OR NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E4"},8933:{"value":"22E5","name":"SQUARE ORIGINAL OF OR NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E5"},8934:{"value":"22E6","name":"LESS-THAN BUT NOT EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"LESS THAN BUT NOT EQUIVALENT TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E6"},8935:{"value":"22E7","name":"GREATER-THAN BUT NOT EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"GREATER THAN BUT NOT EQUIVALENT TO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E7"},8936:{"value":"22E8","name":"PRECEDES BUT NOT EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E8"},8937:{"value":"22E9","name":"SUCCEEDS BUT NOT EQUIVALENT TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22E9"},8938:{"value":"22EA","name":"NOT NORMAL SUBGROUP OF","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22B2 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22EA"},8939:{"value":"22EB","name":"DOES NOT CONTAIN AS NORMAL SUBGROUP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22B3 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22EB"},8940:{"value":"22EC","name":"NOT NORMAL SUBGROUP OF OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22B4 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22EC"},8941:{"value":"22ED","name":"DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"22B5 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22ED"},8942:{"value":"22EE","name":"VERTICAL ELLIPSIS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22EE"},8943:{"value":"22EF","name":"MIDLINE HORIZONTAL ELLIPSIS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22EF"},8944:{"value":"22F0","name":"UP RIGHT DIAGONAL ELLIPSIS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F0"},8945:{"value":"22F1","name":"DOWN RIGHT DIAGONAL ELLIPSIS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F1"},8946:{"value":"22F2","name":"ELEMENT OF WITH LONG HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F2"},8947:{"value":"22F3","name":"ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F3"},8948:{"value":"22F4","name":"SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F4"},8949:{"value":"22F5","name":"ELEMENT OF WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F5"},8950:{"value":"22F6","name":"ELEMENT OF WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F6"},8951:{"value":"22F7","name":"SMALL ELEMENT OF WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F7"},8952:{"value":"22F8","name":"ELEMENT OF WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F8"},8953:{"value":"22F9","name":"ELEMENT OF WITH TWO HORIZONTAL STROKES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22F9"},8954:{"value":"22FA","name":"CONTAINS WITH LONG HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22FA"},8955:{"value":"22FB","name":"CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22FB"},8956:{"value":"22FC","name":"SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22FC"},8957:{"value":"22FD","name":"CONTAINS WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22FD"},8958:{"value":"22FE","name":"SMALL CONTAINS WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22FE"},8959:{"value":"22FF","name":"Z NOTATION BAG MEMBERSHIP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u22FF"},8992:{"value":"2320","name":"TOP HALF INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2320"},8993:{"value":"2321","name":"BOTTOM HALF INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2321"},9084:{"value":"237C","name":"RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u237C"},9115:{"value":"239B","name":"LEFT PARENTHESIS UPPER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u239B"},9116:{"value":"239C","name":"LEFT PARENTHESIS EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u239C"},9117:{"value":"239D","name":"LEFT PARENTHESIS LOWER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u239D"},9118:{"value":"239E","name":"RIGHT PARENTHESIS UPPER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u239E"},9119:{"value":"239F","name":"RIGHT PARENTHESIS EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u239F"},9120:{"value":"23A0","name":"RIGHT PARENTHESIS LOWER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A0"},9121:{"value":"23A1","name":"LEFT SQUARE BRACKET UPPER CORNER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A1"},9122:{"value":"23A2","name":"LEFT SQUARE BRACKET EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A2"},9123:{"value":"23A3","name":"LEFT SQUARE BRACKET LOWER CORNER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A3"},9124:{"value":"23A4","name":"RIGHT SQUARE BRACKET UPPER CORNER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A4"},9125:{"value":"23A5","name":"RIGHT SQUARE BRACKET EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A5"},9126:{"value":"23A6","name":"RIGHT SQUARE BRACKET LOWER CORNER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A6"},9127:{"value":"23A7","name":"LEFT CURLY BRACKET UPPER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A7"},9128:{"value":"23A8","name":"LEFT CURLY BRACKET MIDDLE PIECE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A8"},9129:{"value":"23A9","name":"LEFT CURLY BRACKET LOWER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23A9"},9130:{"value":"23AA","name":"CURLY BRACKET EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23AA"},9131:{"value":"23AB","name":"RIGHT CURLY BRACKET UPPER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23AB"},9132:{"value":"23AC","name":"RIGHT CURLY BRACKET MIDDLE PIECE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23AC"},9133:{"value":"23AD","name":"RIGHT CURLY BRACKET LOWER HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23AD"},9134:{"value":"23AE","name":"INTEGRAL EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23AE"},9135:{"value":"23AF","name":"HORIZONTAL LINE EXTENSION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23AF"},9136:{"value":"23B0","name":"UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B0"},9137:{"value":"23B1","name":"UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B1"},9138:{"value":"23B2","name":"SUMMATION TOP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B2"},9139:{"value":"23B3","name":"SUMMATION BOTTOM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B3"},9180:{"value":"23DC","name":"TOP PARENTHESIS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23DC"},9181:{"value":"23DD","name":"BOTTOM PARENTHESIS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23DD"},9182:{"value":"23DE","name":"TOP CURLY BRACKET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23DE"},9183:{"value":"23DF","name":"BOTTOM CURLY BRACKET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23DF"},9184:{"value":"23E0","name":"TOP TORTOISE SHELL BRACKET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E0"},9185:{"value":"23E1","name":"BOTTOM TORTOISE SHELL BRACKET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E1"},9655:{"value":"25B7","name":"WHITE RIGHT-POINTING TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE RIGHT POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B7"},9665:{"value":"25C1","name":"WHITE LEFT-POINTING TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE LEFT POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C1"},9720:{"value":"25F8","name":"UPPER LEFT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F8"},9721:{"value":"25F9","name":"UPPER RIGHT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F9"},9722:{"value":"25FA","name":"LOWER LEFT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25FA"},9723:{"value":"25FB","name":"WHITE MEDIUM SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25FB"},9724:{"value":"25FC","name":"BLACK MEDIUM SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25FC"},9725:{"value":"25FD","name":"WHITE MEDIUM SMALL SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25FD"},9726:{"value":"25FE","name":"BLACK MEDIUM SMALL SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25FE"},9727:{"value":"25FF","name":"LOWER RIGHT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25FF"},9839:{"value":"266F","name":"MUSIC SHARP SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SHARP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u266F"},10176:{"value":"27C0","name":"THREE DIMENSIONAL ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C0"},10177:{"value":"27C1","name":"WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C1"},10178:{"value":"27C2","name":"PERPENDICULAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C2"},10179:{"value":"27C3","name":"OPEN SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C3"},10180:{"value":"27C4","name":"OPEN SUPERSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C4"},10183:{"value":"27C7","name":"OR WITH DOT INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C7"},10184:{"value":"27C8","name":"REVERSE SOLIDUS PRECEDING SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C8"},10185:{"value":"27C9","name":"SUPERSET PRECEDING SOLIDUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27C9"},10186:{"value":"27CA","name":"VERTICAL BAR WITH HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27CA"},10187:{"value":"27CB","name":"MATHEMATICAL RISING DIAGONAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27CB"},10188:{"value":"27CC","name":"LONG DIVISION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27CC"},10189:{"value":"27CD","name":"MATHEMATICAL FALLING DIAGONAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27CD"},10190:{"value":"27CE","name":"SQUARED LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27CE"},10191:{"value":"27CF","name":"SQUARED LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27CF"},10192:{"value":"27D0","name":"WHITE DIAMOND WITH CENTRED DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D0"},10193:{"value":"27D1","name":"AND WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D1"},10194:{"value":"27D2","name":"ELEMENT OF OPENING UPWARDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D2"},10195:{"value":"27D3","name":"LOWER RIGHT CORNER WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D3"},10196:{"value":"27D4","name":"UPPER LEFT CORNER WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D4"},10197:{"value":"27D5","name":"LEFT OUTER JOIN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D5"},10198:{"value":"27D6","name":"RIGHT OUTER JOIN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D6"},10199:{"value":"27D7","name":"FULL OUTER JOIN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D7"},10200:{"value":"27D8","name":"LARGE UP TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D8"},10201:{"value":"27D9","name":"LARGE DOWN TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27D9"},10202:{"value":"27DA","name":"LEFT AND RIGHT DOUBLE TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27DA"},10203:{"value":"27DB","name":"LEFT AND RIGHT TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27DB"},10204:{"value":"27DC","name":"LEFT MULTIMAP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27DC"},10205:{"value":"27DD","name":"LONG RIGHT TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27DD"},10206:{"value":"27DE","name":"LONG LEFT TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27DE"},10207:{"value":"27DF","name":"UP TACK WITH CIRCLE ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27DF"},10208:{"value":"27E0","name":"LOZENGE DIVIDED BY HORIZONTAL RULE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E0"},10209:{"value":"27E1","name":"WHITE CONCAVE-SIDED DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E1"},10210:{"value":"27E2","name":"WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E2"},10211:{"value":"27E3","name":"WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E3"},10212:{"value":"27E4","name":"WHITE SQUARE WITH LEFTWARDS TICK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E4"},10213:{"value":"27E5","name":"WHITE SQUARE WITH RIGHTWARDS TICK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27E5"},10224:{"value":"27F0","name":"UPWARDS QUADRUPLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F0"},10225:{"value":"27F1","name":"DOWNWARDS QUADRUPLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F1"},10226:{"value":"27F2","name":"ANTICLOCKWISE GAPPED CIRCLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F2"},10227:{"value":"27F3","name":"CLOCKWISE GAPPED CIRCLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F3"},10228:{"value":"27F4","name":"RIGHT ARROW WITH CIRCLED PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F4"},10229:{"value":"27F5","name":"LONG LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F5"},10230:{"value":"27F6","name":"LONG RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F6"},10231:{"value":"27F7","name":"LONG LEFT RIGHT ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F7"},10232:{"value":"27F8","name":"LONG LEFTWARDS DOUBLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F8"},10233:{"value":"27F9","name":"LONG RIGHTWARDS DOUBLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27F9"},10234:{"value":"27FA","name":"LONG LEFT RIGHT DOUBLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27FA"},10235:{"value":"27FB","name":"LONG LEFTWARDS ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27FB"},10236:{"value":"27FC","name":"LONG RIGHTWARDS ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27FC"},10237:{"value":"27FD","name":"LONG LEFTWARDS DOUBLE ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27FD"},10238:{"value":"27FE","name":"LONG RIGHTWARDS DOUBLE ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27FE"},10239:{"value":"27FF","name":"LONG RIGHTWARDS SQUIGGLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27FF"},10496:{"value":"2900","name":"RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2900"},10497:{"value":"2901","name":"RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2901"},10498:{"value":"2902","name":"LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2902"},10499:{"value":"2903","name":"RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2903"},10500:{"value":"2904","name":"LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2904"},10501:{"value":"2905","name":"RIGHTWARDS TWO-HEADED ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2905"},10502:{"value":"2906","name":"LEFTWARDS DOUBLE ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2906"},10503:{"value":"2907","name":"RIGHTWARDS DOUBLE ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2907"},10504:{"value":"2908","name":"DOWNWARDS ARROW WITH HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2908"},10505:{"value":"2909","name":"UPWARDS ARROW WITH HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2909"},10506:{"value":"290A","name":"UPWARDS TRIPLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u290A"},10507:{"value":"290B","name":"DOWNWARDS TRIPLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u290B"},10508:{"value":"290C","name":"LEFTWARDS DOUBLE DASH ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u290C"},10509:{"value":"290D","name":"RIGHTWARDS DOUBLE DASH ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u290D"},10510:{"value":"290E","name":"LEFTWARDS TRIPLE DASH ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u290E"},10511:{"value":"290F","name":"RIGHTWARDS TRIPLE DASH ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u290F"},10512:{"value":"2910","name":"RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2910"},10513:{"value":"2911","name":"RIGHTWARDS ARROW WITH DOTTED STEM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2911"},10514:{"value":"2912","name":"UPWARDS ARROW TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2912"},10515:{"value":"2913","name":"DOWNWARDS ARROW TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2913"},10516:{"value":"2914","name":"RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2914"},10517:{"value":"2915","name":"RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2915"},10518:{"value":"2916","name":"RIGHTWARDS TWO-HEADED ARROW WITH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2916"},10519:{"value":"2917","name":"RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2917"},10520:{"value":"2918","name":"RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2918"},10521:{"value":"2919","name":"LEFTWARDS ARROW-TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2919"},10522:{"value":"291A","name":"RIGHTWARDS ARROW-TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u291A"},10523:{"value":"291B","name":"LEFTWARDS DOUBLE ARROW-TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u291B"},10524:{"value":"291C","name":"RIGHTWARDS DOUBLE ARROW-TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u291C"},10525:{"value":"291D","name":"LEFTWARDS ARROW TO BLACK DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u291D"},10526:{"value":"291E","name":"RIGHTWARDS ARROW TO BLACK DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u291E"},10527:{"value":"291F","name":"LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u291F"},10528:{"value":"2920","name":"RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2920"},10529:{"value":"2921","name":"NORTH WEST AND SOUTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2921"},10530:{"value":"2922","name":"NORTH EAST AND SOUTH WEST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2922"},10531:{"value":"2923","name":"NORTH WEST ARROW WITH HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2923"},10532:{"value":"2924","name":"NORTH EAST ARROW WITH HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2924"},10533:{"value":"2925","name":"SOUTH EAST ARROW WITH HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2925"},10534:{"value":"2926","name":"SOUTH WEST ARROW WITH HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2926"},10535:{"value":"2927","name":"NORTH WEST ARROW AND NORTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2927"},10536:{"value":"2928","name":"NORTH EAST ARROW AND SOUTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2928"},10537:{"value":"2929","name":"SOUTH EAST ARROW AND SOUTH WEST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2929"},10538:{"value":"292A","name":"SOUTH WEST ARROW AND NORTH WEST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u292A"},10539:{"value":"292B","name":"RISING DIAGONAL CROSSING FALLING DIAGONAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u292B"},10540:{"value":"292C","name":"FALLING DIAGONAL CROSSING RISING DIAGONAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u292C"},10541:{"value":"292D","name":"SOUTH EAST ARROW CROSSING NORTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u292D"},10542:{"value":"292E","name":"NORTH EAST ARROW CROSSING SOUTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u292E"},10543:{"value":"292F","name":"FALLING DIAGONAL CROSSING NORTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u292F"},10544:{"value":"2930","name":"RISING DIAGONAL CROSSING SOUTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2930"},10545:{"value":"2931","name":"NORTH EAST ARROW CROSSING NORTH WEST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2931"},10546:{"value":"2932","name":"NORTH WEST ARROW CROSSING NORTH EAST ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2932"},10547:{"value":"2933","name":"WAVE ARROW POINTING DIRECTLY RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2933"},10548:{"value":"2934","name":"ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2934"},10549:{"value":"2935","name":"ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2935"},10550:{"value":"2936","name":"ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2936"},10551:{"value":"2937","name":"ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2937"},10552:{"value":"2938","name":"RIGHT-SIDE ARC CLOCKWISE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2938"},10553:{"value":"2939","name":"LEFT-SIDE ARC ANTICLOCKWISE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2939"},10554:{"value":"293A","name":"TOP ARC ANTICLOCKWISE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u293A"},10555:{"value":"293B","name":"BOTTOM ARC ANTICLOCKWISE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u293B"},10556:{"value":"293C","name":"TOP ARC CLOCKWISE ARROW WITH MINUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u293C"},10557:{"value":"293D","name":"TOP ARC ANTICLOCKWISE ARROW WITH PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u293D"},10558:{"value":"293E","name":"LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u293E"},10559:{"value":"293F","name":"LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u293F"},10560:{"value":"2940","name":"ANTICLOCKWISE CLOSED CIRCLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2940"},10561:{"value":"2941","name":"CLOCKWISE CLOSED CIRCLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2941"},10562:{"value":"2942","name":"RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2942"},10563:{"value":"2943","name":"LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2943"},10564:{"value":"2944","name":"SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2944"},10565:{"value":"2945","name":"RIGHTWARDS ARROW WITH PLUS BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2945"},10566:{"value":"2946","name":"LEFTWARDS ARROW WITH PLUS BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2946"},10567:{"value":"2947","name":"RIGHTWARDS ARROW THROUGH X","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2947"},10568:{"value":"2948","name":"LEFT RIGHT ARROW THROUGH SMALL CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2948"},10569:{"value":"2949","name":"UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2949"},10570:{"value":"294A","name":"LEFT BARB UP RIGHT BARB DOWN HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u294A"},10571:{"value":"294B","name":"LEFT BARB DOWN RIGHT BARB UP HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u294B"},10572:{"value":"294C","name":"UP BARB RIGHT DOWN BARB LEFT HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u294C"},10573:{"value":"294D","name":"UP BARB LEFT DOWN BARB RIGHT HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u294D"},10574:{"value":"294E","name":"LEFT BARB UP RIGHT BARB UP HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u294E"},10575:{"value":"294F","name":"UP BARB RIGHT DOWN BARB RIGHT HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u294F"},10576:{"value":"2950","name":"LEFT BARB DOWN RIGHT BARB DOWN HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2950"},10577:{"value":"2951","name":"UP BARB LEFT DOWN BARB LEFT HARPOON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2951"},10578:{"value":"2952","name":"LEFTWARDS HARPOON WITH BARB UP TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2952"},10579:{"value":"2953","name":"RIGHTWARDS HARPOON WITH BARB UP TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2953"},10580:{"value":"2954","name":"UPWARDS HARPOON WITH BARB RIGHT TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2954"},10581:{"value":"2955","name":"DOWNWARDS HARPOON WITH BARB RIGHT TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2955"},10582:{"value":"2956","name":"LEFTWARDS HARPOON WITH BARB DOWN TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2956"},10583:{"value":"2957","name":"RIGHTWARDS HARPOON WITH BARB DOWN TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2957"},10584:{"value":"2958","name":"UPWARDS HARPOON WITH BARB LEFT TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2958"},10585:{"value":"2959","name":"DOWNWARDS HARPOON WITH BARB LEFT TO BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2959"},10586:{"value":"295A","name":"LEFTWARDS HARPOON WITH BARB UP FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u295A"},10587:{"value":"295B","name":"RIGHTWARDS HARPOON WITH BARB UP FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u295B"},10588:{"value":"295C","name":"UPWARDS HARPOON WITH BARB RIGHT FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u295C"},10589:{"value":"295D","name":"DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u295D"},10590:{"value":"295E","name":"LEFTWARDS HARPOON WITH BARB DOWN FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u295E"},10591:{"value":"295F","name":"RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u295F"},10592:{"value":"2960","name":"UPWARDS HARPOON WITH BARB LEFT FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2960"},10593:{"value":"2961","name":"DOWNWARDS HARPOON WITH BARB LEFT FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2961"},10594:{"value":"2962","name":"LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2962"},10595:{"value":"2963","name":"UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2963"},10596:{"value":"2964","name":"RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2964"},10597:{"value":"2965","name":"DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2965"},10598:{"value":"2966","name":"LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2966"},10599:{"value":"2967","name":"LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2967"},10600:{"value":"2968","name":"RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2968"},10601:{"value":"2969","name":"RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2969"},10602:{"value":"296A","name":"LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u296A"},10603:{"value":"296B","name":"LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u296B"},10604:{"value":"296C","name":"RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u296C"},10605:{"value":"296D","name":"RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u296D"},10606:{"value":"296E","name":"UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u296E"},10607:{"value":"296F","name":"DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u296F"},10608:{"value":"2970","name":"RIGHT DOUBLE ARROW WITH ROUNDED HEAD","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2970"},10609:{"value":"2971","name":"EQUALS SIGN ABOVE RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2971"},10610:{"value":"2972","name":"TILDE OPERATOR ABOVE RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2972"},10611:{"value":"2973","name":"LEFTWARDS ARROW ABOVE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2973"},10612:{"value":"2974","name":"RIGHTWARDS ARROW ABOVE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2974"},10613:{"value":"2975","name":"RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2975"},10614:{"value":"2976","name":"LESS-THAN ABOVE LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2976"},10615:{"value":"2977","name":"LEFTWARDS ARROW THROUGH LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2977"},10616:{"value":"2978","name":"GREATER-THAN ABOVE RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2978"},10617:{"value":"2979","name":"SUBSET ABOVE RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2979"},10618:{"value":"297A","name":"LEFTWARDS ARROW THROUGH SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u297A"},10619:{"value":"297B","name":"SUPERSET ABOVE LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u297B"},10620:{"value":"297C","name":"LEFT FISH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u297C"},10621:{"value":"297D","name":"RIGHT FISH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u297D"},10622:{"value":"297E","name":"UP FISH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u297E"},10623:{"value":"297F","name":"DOWN FISH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u297F"},10624:{"value":"2980","name":"TRIPLE VERTICAL BAR DELIMITER","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2980"},10625:{"value":"2981","name":"Z NOTATION SPOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2981"},10626:{"value":"2982","name":"Z NOTATION TYPE COLON","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2982"},10649:{"value":"2999","name":"DOTTED FENCE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2999"},10650:{"value":"299A","name":"VERTICAL ZIGZAG LINE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u299A"},10651:{"value":"299B","name":"MEASURED ANGLE OPENING LEFT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u299B"},10652:{"value":"299C","name":"RIGHT ANGLE VARIANT WITH SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u299C"},10653:{"value":"299D","name":"MEASURED RIGHT ANGLE WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u299D"},10654:{"value":"299E","name":"ANGLE WITH S INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u299E"},10655:{"value":"299F","name":"ACUTE ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u299F"},10656:{"value":"29A0","name":"SPHERICAL ANGLE OPENING LEFT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A0"},10657:{"value":"29A1","name":"SPHERICAL ANGLE OPENING UP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A1"},10658:{"value":"29A2","name":"TURNED ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A2"},10659:{"value":"29A3","name":"REVERSED ANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A3"},10660:{"value":"29A4","name":"ANGLE WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A4"},10661:{"value":"29A5","name":"REVERSED ANGLE WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A5"},10662:{"value":"29A6","name":"OBLIQUE ANGLE OPENING UP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A6"},10663:{"value":"29A7","name":"OBLIQUE ANGLE OPENING DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A7"},10664:{"value":"29A8","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A8"},10665:{"value":"29A9","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29A9"},10666:{"value":"29AA","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29AA"},10667:{"value":"29AB","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29AB"},10668:{"value":"29AC","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29AC"},10669:{"value":"29AD","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29AD"},10670:{"value":"29AE","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29AE"},10671:{"value":"29AF","name":"MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29AF"},10672:{"value":"29B0","name":"REVERSED EMPTY SET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B0"},10673:{"value":"29B1","name":"EMPTY SET WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B1"},10674:{"value":"29B2","name":"EMPTY SET WITH SMALL CIRCLE ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B2"},10675:{"value":"29B3","name":"EMPTY SET WITH RIGHT ARROW ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B3"},10676:{"value":"29B4","name":"EMPTY SET WITH LEFT ARROW ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B4"},10677:{"value":"29B5","name":"CIRCLE WITH HORIZONTAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B5"},10678:{"value":"29B6","name":"CIRCLED VERTICAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B6"},10679:{"value":"29B7","name":"CIRCLED PARALLEL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B7"},10680:{"value":"29B8","name":"CIRCLED REVERSE SOLIDUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B8"},10681:{"value":"29B9","name":"CIRCLED PERPENDICULAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29B9"},10682:{"value":"29BA","name":"CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29BA"},10683:{"value":"29BB","name":"CIRCLE WITH SUPERIMPOSED X","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29BB"},10684:{"value":"29BC","name":"CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29BC"},10685:{"value":"29BD","name":"UP ARROW THROUGH CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29BD"},10686:{"value":"29BE","name":"CIRCLED WHITE BULLET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29BE"},10687:{"value":"29BF","name":"CIRCLED BULLET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29BF"},10688:{"value":"29C0","name":"CIRCLED LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C0"},10689:{"value":"29C1","name":"CIRCLED GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C1"},10690:{"value":"29C2","name":"CIRCLE WITH SMALL CIRCLE TO THE RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C2"},10691:{"value":"29C3","name":"CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C3"},10692:{"value":"29C4","name":"SQUARED RISING DIAGONAL SLASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C4"},10693:{"value":"29C5","name":"SQUARED FALLING DIAGONAL SLASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C5"},10694:{"value":"29C6","name":"SQUARED ASTERISK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C6"},10695:{"value":"29C7","name":"SQUARED SMALL CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C7"},10696:{"value":"29C8","name":"SQUARED SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C8"},10697:{"value":"29C9","name":"TWO JOINED SQUARES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29C9"},10698:{"value":"29CA","name":"TRIANGLE WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29CA"},10699:{"value":"29CB","name":"TRIANGLE WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29CB"},10700:{"value":"29CC","name":"S IN TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29CC"},10701:{"value":"29CD","name":"TRIANGLE WITH SERIFS AT BOTTOM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29CD"},10702:{"value":"29CE","name":"RIGHT TRIANGLE ABOVE LEFT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29CE"},10703:{"value":"29CF","name":"LEFT TRIANGLE BESIDE VERTICAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29CF"},10704:{"value":"29D0","name":"VERTICAL BAR BESIDE RIGHT TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D0"},10705:{"value":"29D1","name":"BOWTIE WITH LEFT HALF BLACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D1"},10706:{"value":"29D2","name":"BOWTIE WITH RIGHT HALF BLACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D2"},10707:{"value":"29D3","name":"BLACK BOWTIE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D3"},10708:{"value":"29D4","name":"TIMES WITH LEFT HALF BLACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D4"},10709:{"value":"29D5","name":"TIMES WITH RIGHT HALF BLACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D5"},10710:{"value":"29D6","name":"WHITE HOURGLASS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D6"},10711:{"value":"29D7","name":"BLACK HOURGLASS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29D7"},10716:{"value":"29DC","name":"INCOMPLETE INFINITY","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29DC"},10717:{"value":"29DD","name":"TIE OVER INFINITY","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29DD"},10718:{"value":"29DE","name":"INFINITY NEGATED WITH VERTICAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29DE"},10719:{"value":"29DF","name":"DOUBLE-ENDED MULTIMAP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29DF"},10720:{"value":"29E0","name":"SQUARE WITH CONTOURED OUTLINE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E0"},10721:{"value":"29E1","name":"INCREASES AS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E1"},10722:{"value":"29E2","name":"SHUFFLE PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E2"},10723:{"value":"29E3","name":"EQUALS SIGN AND SLANTED PARALLEL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E3"},10724:{"value":"29E4","name":"EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E4"},10725:{"value":"29E5","name":"IDENTICAL TO AND SLANTED PARALLEL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E5"},10726:{"value":"29E6","name":"GLEICH STARK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E6"},10727:{"value":"29E7","name":"THERMODYNAMIC","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E7"},10728:{"value":"29E8","name":"DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E8"},10729:{"value":"29E9","name":"DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29E9"},10730:{"value":"29EA","name":"BLACK DIAMOND WITH DOWN ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29EA"},10731:{"value":"29EB","name":"BLACK LOZENGE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29EB"},10732:{"value":"29EC","name":"WHITE CIRCLE WITH DOWN ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29EC"},10733:{"value":"29ED","name":"BLACK CIRCLE WITH DOWN ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29ED"},10734:{"value":"29EE","name":"ERROR-BARRED WHITE SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29EE"},10735:{"value":"29EF","name":"ERROR-BARRED BLACK SQUARE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29EF"},10736:{"value":"29F0","name":"ERROR-BARRED WHITE DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F0"},10737:{"value":"29F1","name":"ERROR-BARRED BLACK DIAMOND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F1"},10738:{"value":"29F2","name":"ERROR-BARRED WHITE CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F2"},10739:{"value":"29F3","name":"ERROR-BARRED BLACK CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F3"},10740:{"value":"29F4","name":"RULE-DELAYED","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F4"},10741:{"value":"29F5","name":"REVERSE SOLIDUS OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F5"},10742:{"value":"29F6","name":"SOLIDUS WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F6"},10743:{"value":"29F7","name":"REVERSE SOLIDUS WITH HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F7"},10744:{"value":"29F8","name":"BIG SOLIDUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F8"},10745:{"value":"29F9","name":"BIG REVERSE SOLIDUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29F9"},10746:{"value":"29FA","name":"DOUBLE PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29FA"},10747:{"value":"29FB","name":"TRIPLE PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29FB"},10750:{"value":"29FE","name":"TINY","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29FE"},10751:{"value":"29FF","name":"MINY","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u29FF"},10752:{"value":"2A00","name":"N-ARY CIRCLED DOT OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A00"},10753:{"value":"2A01","name":"N-ARY CIRCLED PLUS OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A01"},10754:{"value":"2A02","name":"N-ARY CIRCLED TIMES OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A02"},10755:{"value":"2A03","name":"N-ARY UNION OPERATOR WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A03"},10756:{"value":"2A04","name":"N-ARY UNION OPERATOR WITH PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A04"},10757:{"value":"2A05","name":"N-ARY SQUARE INTERSECTION OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A05"},10758:{"value":"2A06","name":"N-ARY SQUARE UNION OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A06"},10759:{"value":"2A07","name":"TWO LOGICAL AND OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A07"},10760:{"value":"2A08","name":"TWO LOGICAL OR OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A08"},10761:{"value":"2A09","name":"N-ARY TIMES OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A09"},10762:{"value":"2A0A","name":"MODULO TWO SUM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A0A"},10763:{"value":"2A0B","name":"SUMMATION WITH INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A0B"},10764:{"value":"2A0C","name":"QUADRUPLE INTEGRAL OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 222B 222B 222B 222B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A0C"},10765:{"value":"2A0D","name":"FINITE PART INTEGRAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A0D"},10766:{"value":"2A0E","name":"INTEGRAL WITH DOUBLE STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A0E"},10767:{"value":"2A0F","name":"INTEGRAL AVERAGE WITH SLASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A0F"},10768:{"value":"2A10","name":"CIRCULATION FUNCTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A10"},10769:{"value":"2A11","name":"ANTICLOCKWISE INTEGRATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A11"},10770:{"value":"2A12","name":"LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A12"},10771:{"value":"2A13","name":"LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A13"},10772:{"value":"2A14","name":"LINE INTEGRATION NOT INCLUDING THE POLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A14"},10773:{"value":"2A15","name":"INTEGRAL AROUND A POINT OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A15"},10774:{"value":"2A16","name":"QUATERNION INTEGRAL OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A16"},10775:{"value":"2A17","name":"INTEGRAL WITH LEFTWARDS ARROW WITH HOOK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A17"},10776:{"value":"2A18","name":"INTEGRAL WITH TIMES SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A18"},10777:{"value":"2A19","name":"INTEGRAL WITH INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A19"},10778:{"value":"2A1A","name":"INTEGRAL WITH UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A1A"},10779:{"value":"2A1B","name":"INTEGRAL WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A1B"},10780:{"value":"2A1C","name":"INTEGRAL WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A1C"},10781:{"value":"2A1D","name":"JOIN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A1D"},10782:{"value":"2A1E","name":"LARGE LEFT TRIANGLE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A1E"},10783:{"value":"2A1F","name":"Z NOTATION SCHEMA COMPOSITION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A1F"},10784:{"value":"2A20","name":"Z NOTATION SCHEMA PIPING","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A20"},10785:{"value":"2A21","name":"Z NOTATION SCHEMA PROJECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A21"},10786:{"value":"2A22","name":"PLUS SIGN WITH SMALL CIRCLE ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A22"},10787:{"value":"2A23","name":"PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A23"},10788:{"value":"2A24","name":"PLUS SIGN WITH TILDE ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A24"},10789:{"value":"2A25","name":"PLUS SIGN WITH DOT BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A25"},10790:{"value":"2A26","name":"PLUS SIGN WITH TILDE BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A26"},10791:{"value":"2A27","name":"PLUS SIGN WITH SUBSCRIPT TWO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A27"},10792:{"value":"2A28","name":"PLUS SIGN WITH BLACK TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A28"},10793:{"value":"2A29","name":"MINUS SIGN WITH COMMA ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A29"},10794:{"value":"2A2A","name":"MINUS SIGN WITH DOT BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A2A"},10795:{"value":"2A2B","name":"MINUS SIGN WITH FALLING DOTS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A2B"},10796:{"value":"2A2C","name":"MINUS SIGN WITH RISING DOTS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A2C"},10797:{"value":"2A2D","name":"PLUS SIGN IN LEFT HALF CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A2D"},10798:{"value":"2A2E","name":"PLUS SIGN IN RIGHT HALF CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A2E"},10799:{"value":"2A2F","name":"VECTOR OR CROSS PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A2F"},10800:{"value":"2A30","name":"MULTIPLICATION SIGN WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A30"},10801:{"value":"2A31","name":"MULTIPLICATION SIGN WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A31"},10802:{"value":"2A32","name":"SEMIDIRECT PRODUCT WITH BOTTOM CLOSED","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A32"},10803:{"value":"2A33","name":"SMASH PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A33"},10804:{"value":"2A34","name":"MULTIPLICATION SIGN IN LEFT HALF CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A34"},10805:{"value":"2A35","name":"MULTIPLICATION SIGN IN RIGHT HALF CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A35"},10806:{"value":"2A36","name":"CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A36"},10807:{"value":"2A37","name":"MULTIPLICATION SIGN IN DOUBLE CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A37"},10808:{"value":"2A38","name":"CIRCLED DIVISION SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A38"},10809:{"value":"2A39","name":"PLUS SIGN IN TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A39"},10810:{"value":"2A3A","name":"MINUS SIGN IN TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A3A"},10811:{"value":"2A3B","name":"MULTIPLICATION SIGN IN TRIANGLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A3B"},10812:{"value":"2A3C","name":"INTERIOR PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A3C"},10813:{"value":"2A3D","name":"RIGHTHAND INTERIOR PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A3D"},10814:{"value":"2A3E","name":"Z NOTATION RELATIONAL COMPOSITION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A3E"},10815:{"value":"2A3F","name":"AMALGAMATION OR COPRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A3F"},10816:{"value":"2A40","name":"INTERSECTION WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A40"},10817:{"value":"2A41","name":"UNION WITH MINUS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A41"},10818:{"value":"2A42","name":"UNION WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A42"},10819:{"value":"2A43","name":"INTERSECTION WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A43"},10820:{"value":"2A44","name":"INTERSECTION WITH LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A44"},10821:{"value":"2A45","name":"UNION WITH LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A45"},10822:{"value":"2A46","name":"UNION ABOVE INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A46"},10823:{"value":"2A47","name":"INTERSECTION ABOVE UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A47"},10824:{"value":"2A48","name":"UNION ABOVE BAR ABOVE INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A48"},10825:{"value":"2A49","name":"INTERSECTION ABOVE BAR ABOVE UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A49"},10826:{"value":"2A4A","name":"UNION BESIDE AND JOINED WITH UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A4A"},10827:{"value":"2A4B","name":"INTERSECTION BESIDE AND JOINED WITH INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A4B"},10828:{"value":"2A4C","name":"CLOSED UNION WITH SERIFS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A4C"},10829:{"value":"2A4D","name":"CLOSED INTERSECTION WITH SERIFS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A4D"},10830:{"value":"2A4E","name":"DOUBLE SQUARE INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A4E"},10831:{"value":"2A4F","name":"DOUBLE SQUARE UNION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A4F"},10832:{"value":"2A50","name":"CLOSED UNION WITH SERIFS AND SMASH PRODUCT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A50"},10833:{"value":"2A51","name":"LOGICAL AND WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A51"},10834:{"value":"2A52","name":"LOGICAL OR WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A52"},10835:{"value":"2A53","name":"DOUBLE LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A53"},10836:{"value":"2A54","name":"DOUBLE LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A54"},10837:{"value":"2A55","name":"TWO INTERSECTING LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A55"},10838:{"value":"2A56","name":"TWO INTERSECTING LOGICAL OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A56"},10839:{"value":"2A57","name":"SLOPING LARGE OR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A57"},10840:{"value":"2A58","name":"SLOPING LARGE AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A58"},10841:{"value":"2A59","name":"LOGICAL OR OVERLAPPING LOGICAL AND","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A59"},10842:{"value":"2A5A","name":"LOGICAL AND WITH MIDDLE STEM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A5A"},10843:{"value":"2A5B","name":"LOGICAL OR WITH MIDDLE STEM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A5B"},10844:{"value":"2A5C","name":"LOGICAL AND WITH HORIZONTAL DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A5C"},10845:{"value":"2A5D","name":"LOGICAL OR WITH HORIZONTAL DASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A5D"},10846:{"value":"2A5E","name":"LOGICAL AND WITH DOUBLE OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A5E"},10847:{"value":"2A5F","name":"LOGICAL AND WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A5F"},10848:{"value":"2A60","name":"LOGICAL AND WITH DOUBLE UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A60"},10849:{"value":"2A61","name":"SMALL VEE WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A61"},10850:{"value":"2A62","name":"LOGICAL OR WITH DOUBLE OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A62"},10851:{"value":"2A63","name":"LOGICAL OR WITH DOUBLE UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A63"},10852:{"value":"2A64","name":"Z NOTATION DOMAIN ANTIRESTRICTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A64"},10853:{"value":"2A65","name":"Z NOTATION RANGE ANTIRESTRICTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A65"},10854:{"value":"2A66","name":"EQUALS SIGN WITH DOT BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A66"},10855:{"value":"2A67","name":"IDENTICAL WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A67"},10856:{"value":"2A68","name":"TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A68"},10857:{"value":"2A69","name":"TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A69"},10858:{"value":"2A6A","name":"TILDE OPERATOR WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A6A"},10859:{"value":"2A6B","name":"TILDE OPERATOR WITH RISING DOTS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A6B"},10860:{"value":"2A6C","name":"SIMILAR MINUS SIMILAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A6C"},10861:{"value":"2A6D","name":"CONGRUENT WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A6D"},10862:{"value":"2A6E","name":"EQUALS WITH ASTERISK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A6E"},10863:{"value":"2A6F","name":"ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A6F"},10864:{"value":"2A70","name":"APPROXIMATELY EQUAL OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A70"},10865:{"value":"2A71","name":"EQUALS SIGN ABOVE PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A71"},10866:{"value":"2A72","name":"PLUS SIGN ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A72"},10867:{"value":"2A73","name":"EQUALS SIGN ABOVE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A73"},10868:{"value":"2A74","name":"DOUBLE COLON EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003A 003A 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A74"},10869:{"value":"2A75","name":"TWO CONSECUTIVE EQUALS SIGNS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003D 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A75"},10870:{"value":"2A76","name":"THREE CONSECUTIVE EQUALS SIGNS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003D 003D 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A76"},10871:{"value":"2A77","name":"EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A77"},10872:{"value":"2A78","name":"EQUIVALENT WITH FOUR DOTS ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A78"},10873:{"value":"2A79","name":"LESS-THAN WITH CIRCLE INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A79"},10874:{"value":"2A7A","name":"GREATER-THAN WITH CIRCLE INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A7A"},10875:{"value":"2A7B","name":"LESS-THAN WITH QUESTION MARK ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A7B"},10876:{"value":"2A7C","name":"GREATER-THAN WITH QUESTION MARK ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A7C"},10877:{"value":"2A7D","name":"LESS-THAN OR SLANTED EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A7D"},10878:{"value":"2A7E","name":"GREATER-THAN OR SLANTED EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A7E"},10879:{"value":"2A7F","name":"LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A7F"},10880:{"value":"2A80","name":"GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A80"},10881:{"value":"2A81","name":"LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A81"},10882:{"value":"2A82","name":"GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A82"},10883:{"value":"2A83","name":"LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A83"},10884:{"value":"2A84","name":"GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A84"},10885:{"value":"2A85","name":"LESS-THAN OR APPROXIMATE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A85"},10886:{"value":"2A86","name":"GREATER-THAN OR APPROXIMATE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A86"},10887:{"value":"2A87","name":"LESS-THAN AND SINGLE-LINE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A87"},10888:{"value":"2A88","name":"GREATER-THAN AND SINGLE-LINE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A88"},10889:{"value":"2A89","name":"LESS-THAN AND NOT APPROXIMATE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A89"},10890:{"value":"2A8A","name":"GREATER-THAN AND NOT APPROXIMATE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A8A"},10891:{"value":"2A8B","name":"LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A8B"},10892:{"value":"2A8C","name":"GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A8C"},10893:{"value":"2A8D","name":"LESS-THAN ABOVE SIMILAR OR EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A8D"},10894:{"value":"2A8E","name":"GREATER-THAN ABOVE SIMILAR OR EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A8E"},10895:{"value":"2A8F","name":"LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A8F"},10896:{"value":"2A90","name":"GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A90"},10897:{"value":"2A91","name":"LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A91"},10898:{"value":"2A92","name":"GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A92"},10899:{"value":"2A93","name":"LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A93"},10900:{"value":"2A94","name":"GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A94"},10901:{"value":"2A95","name":"SLANTED EQUAL TO OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A95"},10902:{"value":"2A96","name":"SLANTED EQUAL TO OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A96"},10903:{"value":"2A97","name":"SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A97"},10904:{"value":"2A98","name":"SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A98"},10905:{"value":"2A99","name":"DOUBLE-LINE EQUAL TO OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A99"},10906:{"value":"2A9A","name":"DOUBLE-LINE EQUAL TO OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A9A"},10907:{"value":"2A9B","name":"DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A9B"},10908:{"value":"2A9C","name":"DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A9C"},10909:{"value":"2A9D","name":"SIMILAR OR LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A9D"},10910:{"value":"2A9E","name":"SIMILAR OR GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A9E"},10911:{"value":"2A9F","name":"SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2A9F"},10912:{"value":"2AA0","name":"SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA0"},10913:{"value":"2AA1","name":"DOUBLE NESTED LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA1"},10914:{"value":"2AA2","name":"DOUBLE NESTED GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA2"},10915:{"value":"2AA3","name":"DOUBLE NESTED LESS-THAN WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA3"},10916:{"value":"2AA4","name":"GREATER-THAN OVERLAPPING LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA4"},10917:{"value":"2AA5","name":"GREATER-THAN BESIDE LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA5"},10918:{"value":"2AA6","name":"LESS-THAN CLOSED BY CURVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA6"},10919:{"value":"2AA7","name":"GREATER-THAN CLOSED BY CURVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA7"},10920:{"value":"2AA8","name":"LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA8"},10921:{"value":"2AA9","name":"GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AA9"},10922:{"value":"2AAA","name":"SMALLER THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AAA"},10923:{"value":"2AAB","name":"LARGER THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AAB"},10924:{"value":"2AAC","name":"SMALLER THAN OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AAC"},10925:{"value":"2AAD","name":"LARGER THAN OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AAD"},10926:{"value":"2AAE","name":"EQUALS SIGN WITH BUMPY ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AAE"},10927:{"value":"2AAF","name":"PRECEDES ABOVE SINGLE-LINE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AAF"},10928:{"value":"2AB0","name":"SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB0"},10929:{"value":"2AB1","name":"PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB1"},10930:{"value":"2AB2","name":"SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB2"},10931:{"value":"2AB3","name":"PRECEDES ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB3"},10932:{"value":"2AB4","name":"SUCCEEDS ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB4"},10933:{"value":"2AB5","name":"PRECEDES ABOVE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB5"},10934:{"value":"2AB6","name":"SUCCEEDS ABOVE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB6"},10935:{"value":"2AB7","name":"PRECEDES ABOVE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB7"},10936:{"value":"2AB8","name":"SUCCEEDS ABOVE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB8"},10937:{"value":"2AB9","name":"PRECEDES ABOVE NOT ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AB9"},10938:{"value":"2ABA","name":"SUCCEEDS ABOVE NOT ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ABA"},10939:{"value":"2ABB","name":"DOUBLE PRECEDES","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ABB"},10940:{"value":"2ABC","name":"DOUBLE SUCCEEDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ABC"},10941:{"value":"2ABD","name":"SUBSET WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ABD"},10942:{"value":"2ABE","name":"SUPERSET WITH DOT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ABE"},10943:{"value":"2ABF","name":"SUBSET WITH PLUS SIGN BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ABF"},10944:{"value":"2AC0","name":"SUPERSET WITH PLUS SIGN BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC0"},10945:{"value":"2AC1","name":"SUBSET WITH MULTIPLICATION SIGN BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC1"},10946:{"value":"2AC2","name":"SUPERSET WITH MULTIPLICATION SIGN BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC2"},10947:{"value":"2AC3","name":"SUBSET OF OR EQUAL TO WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC3"},10948:{"value":"2AC4","name":"SUPERSET OF OR EQUAL TO WITH DOT ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC4"},10949:{"value":"2AC5","name":"SUBSET OF ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC5"},10950:{"value":"2AC6","name":"SUPERSET OF ABOVE EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC6"},10951:{"value":"2AC7","name":"SUBSET OF ABOVE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC7"},10952:{"value":"2AC8","name":"SUPERSET OF ABOVE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC8"},10953:{"value":"2AC9","name":"SUBSET OF ABOVE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AC9"},10954:{"value":"2ACA","name":"SUPERSET OF ABOVE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ACA"},10955:{"value":"2ACB","name":"SUBSET OF ABOVE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ACB"},10956:{"value":"2ACC","name":"SUPERSET OF ABOVE NOT EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ACC"},10957:{"value":"2ACD","name":"SQUARE LEFT OPEN BOX OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ACD"},10958:{"value":"2ACE","name":"SQUARE RIGHT OPEN BOX OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ACE"},10959:{"value":"2ACF","name":"CLOSED SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ACF"},10960:{"value":"2AD0","name":"CLOSED SUPERSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD0"},10961:{"value":"2AD1","name":"CLOSED SUBSET OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD1"},10962:{"value":"2AD2","name":"CLOSED SUPERSET OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD2"},10963:{"value":"2AD3","name":"SUBSET ABOVE SUPERSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD3"},10964:{"value":"2AD4","name":"SUPERSET ABOVE SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD4"},10965:{"value":"2AD5","name":"SUBSET ABOVE SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD5"},10966:{"value":"2AD6","name":"SUPERSET ABOVE SUPERSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD6"},10967:{"value":"2AD7","name":"SUPERSET BESIDE SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD7"},10968:{"value":"2AD8","name":"SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD8"},10969:{"value":"2AD9","name":"ELEMENT OF OPENING DOWNWARDS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AD9"},10970:{"value":"2ADA","name":"PITCHFORK WITH TEE TOP","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ADA"},10971:{"value":"2ADB","name":"TRANSVERSAL INTERSECTION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ADB"},10972:{"value":"2ADC","name":"FORKING","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"2ADD 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ADC"},10973:{"value":"2ADD","name":"NONFORKING","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ADD"},10974:{"value":"2ADE","name":"SHORT LEFT TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ADE"},10975:{"value":"2ADF","name":"SHORT DOWN TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ADF"},10976:{"value":"2AE0","name":"SHORT UP TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE0"},10977:{"value":"2AE1","name":"PERPENDICULAR WITH S","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE1"},10978:{"value":"2AE2","name":"VERTICAL BAR TRIPLE RIGHT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE2"},10979:{"value":"2AE3","name":"DOUBLE VERTICAL BAR LEFT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE3"},10980:{"value":"2AE4","name":"VERTICAL BAR DOUBLE LEFT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE4"},10981:{"value":"2AE5","name":"DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE5"},10982:{"value":"2AE6","name":"LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE6"},10983:{"value":"2AE7","name":"SHORT DOWN TACK WITH OVERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE7"},10984:{"value":"2AE8","name":"SHORT UP TACK WITH UNDERBAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE8"},10985:{"value":"2AE9","name":"SHORT UP TACK ABOVE SHORT DOWN TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AE9"},10986:{"value":"2AEA","name":"DOUBLE DOWN TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AEA"},10987:{"value":"2AEB","name":"DOUBLE UP TACK","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AEB"},10988:{"value":"2AEC","name":"DOUBLE STROKE NOT SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AEC"},10989:{"value":"2AED","name":"REVERSED DOUBLE STROKE NOT SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AED"},10990:{"value":"2AEE","name":"DOES NOT DIVIDE WITH REVERSED NEGATION SLASH","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AEE"},10991:{"value":"2AEF","name":"VERTICAL LINE WITH CIRCLE ABOVE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AEF"},10992:{"value":"2AF0","name":"VERTICAL LINE WITH CIRCLE BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF0"},10993:{"value":"2AF1","name":"DOWN TACK WITH CIRCLE BELOW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF1"},10994:{"value":"2AF2","name":"PARALLEL WITH HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF2"},10995:{"value":"2AF3","name":"PARALLEL WITH TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF3"},10996:{"value":"2AF4","name":"TRIPLE VERTICAL BAR BINARY RELATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF4"},10997:{"value":"2AF5","name":"TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF5"},10998:{"value":"2AF6","name":"TRIPLE COLON OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF6"},10999:{"value":"2AF7","name":"TRIPLE NESTED LESS-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF7"},11000:{"value":"2AF8","name":"TRIPLE NESTED GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF8"},11001:{"value":"2AF9","name":"DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AF9"},11002:{"value":"2AFA","name":"DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AFA"},11003:{"value":"2AFB","name":"TRIPLE SOLIDUS BINARY RELATION","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AFB"},11004:{"value":"2AFC","name":"LARGE TRIPLE VERTICAL BAR OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AFC"},11005:{"value":"2AFD","name":"DOUBLE SOLIDUS OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AFD"},11006:{"value":"2AFE","name":"WHITE VERTICAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AFE"},11007:{"value":"2AFF","name":"N-ARY WHITE VERTICAL BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2AFF"},11056:{"value":"2B30","name":"LEFT ARROW WITH SMALL CIRCLE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B30"},11057:{"value":"2B31","name":"THREE LEFTWARDS ARROWS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B31"},11058:{"value":"2B32","name":"LEFT ARROW WITH CIRCLED PLUS","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B32"},11059:{"value":"2B33","name":"LONG LEFTWARDS SQUIGGLE ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B33"},11060:{"value":"2B34","name":"LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B34"},11061:{"value":"2B35","name":"LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B35"},11062:{"value":"2B36","name":"LEFTWARDS TWO-HEADED ARROW FROM BAR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B36"},11063:{"value":"2B37","name":"LEFTWARDS TWO-HEADED TRIPLE DASH ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B37"},11064:{"value":"2B38","name":"LEFTWARDS ARROW WITH DOTTED STEM","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B38"},11065:{"value":"2B39","name":"LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B39"},11066:{"value":"2B3A","name":"LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B3A"},11067:{"value":"2B3B","name":"LEFTWARDS TWO-HEADED ARROW WITH TAIL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B3B"},11068:{"value":"2B3C","name":"LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B3C"},11069:{"value":"2B3D","name":"LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B3D"},11070:{"value":"2B3E","name":"LEFTWARDS ARROW THROUGH X","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B3E"},11071:{"value":"2B3F","name":"WAVE ARROW POINTING DIRECTLY LEFT","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B3F"},11072:{"value":"2B40","name":"EQUALS SIGN ABOVE LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B40"},11073:{"value":"2B41","name":"REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B41"},11074:{"value":"2B42","name":"LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B42"},11075:{"value":"2B43","name":"RIGHTWARDS ARROW THROUGH GREATER-THAN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B43"},11076:{"value":"2B44","name":"RIGHTWARDS ARROW THROUGH SUPERSET","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B44"},11079:{"value":"2B47","name":"REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B47"},11080:{"value":"2B48","name":"RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B48"},11081:{"value":"2B49","name":"TILDE OPERATOR ABOVE LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B49"},11082:{"value":"2B4A","name":"LEFTWARDS ARROW ABOVE ALMOST EQUAL TO","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B4A"},11083:{"value":"2B4B","name":"LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B4B"},11084:{"value":"2B4C","name":"RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B4C"},64297:{"value":"FB29","name":"HEBREW LETTER ALTERNATIVE PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 002B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFB29"},65122:{"value":"FE62","name":"SMALL PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 002B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE62"},65124:{"value":"FE64","name":"SMALL LESS-THAN SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE64"},65125:{"value":"FE65","name":"SMALL GREATER-THAN SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE65"},65126:{"value":"FE66","name":"SMALL EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFE66"},65291:{"value":"FF0B","name":"FULLWIDTH PLUS SIGN","category":"Sm","class":"0","bidirectional_category":"ES","mapping":" 002B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF0B"},65308:{"value":"FF1C","name":"FULLWIDTH LESS-THAN SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF1C"},65309:{"value":"FF1D","name":"FULLWIDTH EQUALS SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF1D"},65310:{"value":"FF1E","name":"FULLWIDTH GREATER-THAN SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 003E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF1E"},65372:{"value":"FF5C","name":"FULLWIDTH VERTICAL LINE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 007C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF5C"},65374:{"value":"FF5E","name":"FULLWIDTH TILDE","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 007E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH SPACING TILDE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFF5E"},65506:{"value":"FFE2","name":"FULLWIDTH NOT SIGN","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 00AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE2"},65513:{"value":"FFE9","name":"HALFWIDTH LEFTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2190","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE9"},65514:{"value":"FFEA","name":"HALFWIDTH UPWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2191","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFEA"},65515:{"value":"FFEB","name":"HALFWIDTH RIGHTWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2192","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFEB"},65516:{"value":"FFEC","name":"HALFWIDTH DOWNWARDS ARROW","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2193","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFEC"},120513:{"value":"1D6C1","name":"MATHEMATICAL BOLD NABLA","category":"Sm","class":"0","bidirectional_category":"L","mapping":" 2207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udec1"},120539:{"value":"1D6DB","name":"MATHEMATICAL BOLD PARTIAL DIFFERENTIAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2202","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udedb"},120571:{"value":"1D6FB","name":"MATHEMATICAL ITALIC NABLA","category":"Sm","class":"0","bidirectional_category":"L","mapping":" 2207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udefb"},120597:{"value":"1D715","name":"MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2202","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf15"},120629:{"value":"1D735","name":"MATHEMATICAL BOLD ITALIC NABLA","category":"Sm","class":"0","bidirectional_category":"L","mapping":" 2207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf35"},120655:{"value":"1D74F","name":"MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2202","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf4f"},120687:{"value":"1D76F","name":"MATHEMATICAL SANS-SERIF BOLD NABLA","category":"Sm","class":"0","bidirectional_category":"L","mapping":" 2207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf6f"},120713:{"value":"1D789","name":"MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2202","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udf89"},120745:{"value":"1D7A9","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA","category":"Sm","class":"0","bidirectional_category":"L","mapping":" 2207","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfa9"},120771:{"value":"1D7C3","name":"MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":" 2202","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud835\udfc3"},126704:{"value":"1EEF0","name":"ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udef0"},126705:{"value":"1EEF1","name":"ARABIC MATHEMATICAL OPERATOR HAH WITH DAL","category":"Sm","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udef1"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/So.js b/node_modules/unicode/category/So.js new file mode 100644 index 000000000..357a940e2 --- /dev/null +++ b/node_modules/unicode/category/So.js @@ -0,0 +1 @@ +module.exports={166:{"value":"00A6","name":"BROKEN BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BROKEN VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA6"},169:{"value":"00A9","name":"COPYRIGHT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA9"},174:{"value":"00AE","name":"REGISTERED SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"REGISTERED TRADE MARK SIGN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xAE"},176:{"value":"00B0","name":"DEGREE SIGN","category":"So","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xB0"},1154:{"value":"0482","name":"CYRILLIC THOUSANDS SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0482"},1421:{"value":"058D","name":"RIGHT-FACING ARMENIAN ETERNITY SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u058D"},1422:{"value":"058E","name":"LEFT-FACING ARMENIAN ETERNITY SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u058E"},1550:{"value":"060E","name":"ARABIC POETIC VERSE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u060E"},1551:{"value":"060F","name":"ARABIC SIGN MISRA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u060F"},1758:{"value":"06DE","name":"ARABIC START OF RUB EL HIZB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06DE"},1769:{"value":"06E9","name":"ARABIC PLACE OF SAJDAH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06E9"},1789:{"value":"06FD","name":"ARABIC SIGN SINDHI AMPERSAND","category":"So","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06FD"},1790:{"value":"06FE","name":"ARABIC SIGN SINDHI POSTPOSITION MEN","category":"So","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u06FE"},2038:{"value":"07F6","name":"NKO SYMBOL OO DENNEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u07F6"},2554:{"value":"09FA","name":"BENGALI ISSHAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u09FA"},2928:{"value":"0B70","name":"ORIYA ISSHAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0B70"},3059:{"value":"0BF3","name":"TAMIL DAY SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF3"},3060:{"value":"0BF4","name":"TAMIL MONTH SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF4"},3061:{"value":"0BF5","name":"TAMIL YEAR SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF5"},3062:{"value":"0BF6","name":"TAMIL DEBIT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF6"},3063:{"value":"0BF7","name":"TAMIL CREDIT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF7"},3064:{"value":"0BF8","name":"TAMIL AS ABOVE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BF8"},3066:{"value":"0BFA","name":"TAMIL NUMBER SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0BFA"},3199:{"value":"0C7F","name":"TELUGU SIGN TUUMU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0C7F"},3407:{"value":"0D4F","name":"MALAYALAM SIGN PARA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D4F"},3449:{"value":"0D79","name":"MALAYALAM DATE MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0D79"},3841:{"value":"0F01","name":"TIBETAN MARK GTER YIG MGO TRUNCATED A","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F01"},3842:{"value":"0F02","name":"TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F02"},3843:{"value":"0F03","name":"TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F03"},3859:{"value":"0F13","name":"TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F13"},3861:{"value":"0F15","name":"TIBETAN LOGOTYPE SIGN CHAD RTAGS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F15"},3862:{"value":"0F16","name":"TIBETAN LOGOTYPE SIGN LHAG RTAGS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F16"},3863:{"value":"0F17","name":"TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F17"},3866:{"value":"0F1A","name":"TIBETAN SIGN RDEL DKAR GCIG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F1A"},3867:{"value":"0F1B","name":"TIBETAN SIGN RDEL DKAR GNYIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F1B"},3868:{"value":"0F1C","name":"TIBETAN SIGN RDEL DKAR GSUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F1C"},3869:{"value":"0F1D","name":"TIBETAN SIGN RDEL NAG GCIG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F1D"},3870:{"value":"0F1E","name":"TIBETAN SIGN RDEL NAG GNYIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F1E"},3871:{"value":"0F1F","name":"TIBETAN SIGN RDEL DKAR RDEL NAG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F1F"},3892:{"value":"0F34","name":"TIBETAN MARK BSDUS RTAGS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F34"},3894:{"value":"0F36","name":"TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F36"},3896:{"value":"0F38","name":"TIBETAN MARK CHE MGO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0F38"},4030:{"value":"0FBE","name":"TIBETAN KU RU KHA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FBE"},4031:{"value":"0FBF","name":"TIBETAN KU RU KHA BZHI MIG CAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FBF"},4032:{"value":"0FC0","name":"TIBETAN CANTILLATION SIGN HEAVY BEAT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC0"},4033:{"value":"0FC1","name":"TIBETAN CANTILLATION SIGN LIGHT BEAT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC1"},4034:{"value":"0FC2","name":"TIBETAN CANTILLATION SIGN CANG TE-U","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC2"},4035:{"value":"0FC3","name":"TIBETAN CANTILLATION SIGN SBUB -CHAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC3"},4036:{"value":"0FC4","name":"TIBETAN SYMBOL DRIL BU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC4"},4037:{"value":"0FC5","name":"TIBETAN SYMBOL RDO RJE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC5"},4039:{"value":"0FC7","name":"TIBETAN SYMBOL RDO RJE RGYA GRAM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC7"},4040:{"value":"0FC8","name":"TIBETAN SYMBOL PHUR PA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC8"},4041:{"value":"0FC9","name":"TIBETAN SYMBOL NOR BU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FC9"},4042:{"value":"0FCA","name":"TIBETAN SYMBOL NOR BU NYIS -KHYIL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FCA"},4043:{"value":"0FCB","name":"TIBETAN SYMBOL NOR BU GSUM -KHYIL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FCB"},4044:{"value":"0FCC","name":"TIBETAN SYMBOL NOR BU BZHI -KHYIL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FCC"},4046:{"value":"0FCE","name":"TIBETAN SIGN RDEL NAG RDEL DKAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FCE"},4047:{"value":"0FCF","name":"TIBETAN SIGN RDEL NAG GSUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FCF"},4053:{"value":"0FD5","name":"RIGHT-FACING SVASTI SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD5"},4054:{"value":"0FD6","name":"LEFT-FACING SVASTI SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD6"},4055:{"value":"0FD7","name":"RIGHT-FACING SVASTI SIGN WITH DOTS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD7"},4056:{"value":"0FD8","name":"LEFT-FACING SVASTI SIGN WITH DOTS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u0FD8"},4254:{"value":"109E","name":"MYANMAR SYMBOL SHAN ONE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u109E"},4255:{"value":"109F","name":"MYANMAR SYMBOL SHAN EXCLAMATION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u109F"},5008:{"value":"1390","name":"ETHIOPIC TONAL MARK YIZET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1390"},5009:{"value":"1391","name":"ETHIOPIC TONAL MARK DERET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1391"},5010:{"value":"1392","name":"ETHIOPIC TONAL MARK RIKRIK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1392"},5011:{"value":"1393","name":"ETHIOPIC TONAL MARK SHORT RIKRIK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1393"},5012:{"value":"1394","name":"ETHIOPIC TONAL MARK DIFAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1394"},5013:{"value":"1395","name":"ETHIOPIC TONAL MARK KENAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1395"},5014:{"value":"1396","name":"ETHIOPIC TONAL MARK CHIRET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1396"},5015:{"value":"1397","name":"ETHIOPIC TONAL MARK HIDET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1397"},5016:{"value":"1398","name":"ETHIOPIC TONAL MARK DERET-HIDET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1398"},5017:{"value":"1399","name":"ETHIOPIC TONAL MARK KURT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1399"},5741:{"value":"166D","name":"CANADIAN SYLLABICS CHI SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u166D"},6464:{"value":"1940","name":"LIMBU SIGN LOO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1940"},6622:{"value":"19DE","name":"NEW TAI LUE SIGN LAE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19DE"},6623:{"value":"19DF","name":"NEW TAI LUE SIGN LAEV","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19DF"},6624:{"value":"19E0","name":"KHMER SYMBOL PATHAMASAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E0"},6625:{"value":"19E1","name":"KHMER SYMBOL MUOY KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E1"},6626:{"value":"19E2","name":"KHMER SYMBOL PII KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E2"},6627:{"value":"19E3","name":"KHMER SYMBOL BEI KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E3"},6628:{"value":"19E4","name":"KHMER SYMBOL BUON KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E4"},6629:{"value":"19E5","name":"KHMER SYMBOL PRAM KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E5"},6630:{"value":"19E6","name":"KHMER SYMBOL PRAM-MUOY KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E6"},6631:{"value":"19E7","name":"KHMER SYMBOL PRAM-PII KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E7"},6632:{"value":"19E8","name":"KHMER SYMBOL PRAM-BEI KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E8"},6633:{"value":"19E9","name":"KHMER SYMBOL PRAM-BUON KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19E9"},6634:{"value":"19EA","name":"KHMER SYMBOL DAP KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19EA"},6635:{"value":"19EB","name":"KHMER SYMBOL DAP-MUOY KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19EB"},6636:{"value":"19EC","name":"KHMER SYMBOL DAP-PII KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19EC"},6637:{"value":"19ED","name":"KHMER SYMBOL DAP-BEI KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19ED"},6638:{"value":"19EE","name":"KHMER SYMBOL DAP-BUON KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19EE"},6639:{"value":"19EF","name":"KHMER SYMBOL DAP-PRAM KOET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19EF"},6640:{"value":"19F0","name":"KHMER SYMBOL TUTEYASAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F0"},6641:{"value":"19F1","name":"KHMER SYMBOL MUOY ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F1"},6642:{"value":"19F2","name":"KHMER SYMBOL PII ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F2"},6643:{"value":"19F3","name":"KHMER SYMBOL BEI ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F3"},6644:{"value":"19F4","name":"KHMER SYMBOL BUON ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F4"},6645:{"value":"19F5","name":"KHMER SYMBOL PRAM ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F5"},6646:{"value":"19F6","name":"KHMER SYMBOL PRAM-MUOY ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F6"},6647:{"value":"19F7","name":"KHMER SYMBOL PRAM-PII ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F7"},6648:{"value":"19F8","name":"KHMER SYMBOL PRAM-BEI ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F8"},6649:{"value":"19F9","name":"KHMER SYMBOL PRAM-BUON ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19F9"},6650:{"value":"19FA","name":"KHMER SYMBOL DAP ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19FA"},6651:{"value":"19FB","name":"KHMER SYMBOL DAP-MUOY ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19FB"},6652:{"value":"19FC","name":"KHMER SYMBOL DAP-PII ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19FC"},6653:{"value":"19FD","name":"KHMER SYMBOL DAP-BEI ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19FD"},6654:{"value":"19FE","name":"KHMER SYMBOL DAP-BUON ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19FE"},6655:{"value":"19FF","name":"KHMER SYMBOL DAP-PRAM ROC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u19FF"},7009:{"value":"1B61","name":"BALINESE MUSICAL SYMBOL DONG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B61"},7010:{"value":"1B62","name":"BALINESE MUSICAL SYMBOL DENG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B62"},7011:{"value":"1B63","name":"BALINESE MUSICAL SYMBOL DUNG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B63"},7012:{"value":"1B64","name":"BALINESE MUSICAL SYMBOL DANG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B64"},7013:{"value":"1B65","name":"BALINESE MUSICAL SYMBOL DANG SURANG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B65"},7014:{"value":"1B66","name":"BALINESE MUSICAL SYMBOL DING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B66"},7015:{"value":"1B67","name":"BALINESE MUSICAL SYMBOL DAENG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B67"},7016:{"value":"1B68","name":"BALINESE MUSICAL SYMBOL DEUNG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B68"},7017:{"value":"1B69","name":"BALINESE MUSICAL SYMBOL DAING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B69"},7018:{"value":"1B6A","name":"BALINESE MUSICAL SYMBOL DANG GEDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B6A"},7028:{"value":"1B74","name":"BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B74"},7029:{"value":"1B75","name":"BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B75"},7030:{"value":"1B76","name":"BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B76"},7031:{"value":"1B77","name":"BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B77"},7032:{"value":"1B78","name":"BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B78"},7033:{"value":"1B79","name":"BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B79"},7034:{"value":"1B7A","name":"BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B7A"},7035:{"value":"1B7B","name":"BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B7B"},7036:{"value":"1B7C","name":"BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1B7C"},8448:{"value":"2100","name":"ACCOUNT OF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0061 002F 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2100"},8449:{"value":"2101","name":"ADDRESSED TO THE SUBJECT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0061 002F 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2101"},8451:{"value":"2103","name":"DEGREE CELSIUS","category":"So","class":"0","bidirectional_category":"ON","mapping":" 00B0 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEGREES CENTIGRADE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2103"},8452:{"value":"2104","name":"CENTRE LINE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"C L SYMBOL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2104"},8453:{"value":"2105","name":"CARE OF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0063 002F 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2105"},8454:{"value":"2106","name":"CADA UNA","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0063 002F 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2106"},8456:{"value":"2108","name":"SCRUPLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2108"},8457:{"value":"2109","name":"DEGREE FAHRENHEIT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 00B0 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DEGREES FAHRENHEIT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2109"},8468:{"value":"2114","name":"L B BAR SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2114"},8470:{"value":"2116","name":"NUMERO SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 004E 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NUMERO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2116"},8471:{"value":"2117","name":"SOUND RECORDING COPYRIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2117"},8478:{"value":"211E","name":"PRESCRIPTION TAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u211E"},8479:{"value":"211F","name":"RESPONSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u211F"},8480:{"value":"2120","name":"SERVICE MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0053 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2120"},8481:{"value":"2121","name":"TELEPHONE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0054 0045 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"T E L SYMBOL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2121"},8482:{"value":"2122","name":"TRADE MARK SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0054 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TRADEMARK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2122"},8483:{"value":"2123","name":"VERSICLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2123"},8485:{"value":"2125","name":"OUNCE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OUNCE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2125"},8487:{"value":"2127","name":"INVERTED OHM SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"MHO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2127"},8489:{"value":"2129","name":"TURNED GREEK SMALL LETTER IOTA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2129"},8494:{"value":"212E","name":"ESTIMATED SYMBOL","category":"So","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u212E"},8506:{"value":"213A","name":"ROTATED CAPITAL Q","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u213A"},8507:{"value":"213B","name":"FACSIMILE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0046 0041 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u213B"},8522:{"value":"214A","name":"PROPERTY LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u214A"},8524:{"value":"214C","name":"PER SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u214C"},8525:{"value":"214D","name":"AKTIESELSKAB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u214D"},8527:{"value":"214F","name":"SYMBOL FOR SAMARITAN SOURCE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u214F"},8586:{"value":"218A","name":"TURNED DIGIT TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u218A"},8587:{"value":"218B","name":"TURNED DIGIT THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u218B"},8597:{"value":"2195","name":"UP DOWN ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2195"},8598:{"value":"2196","name":"NORTH WEST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UPPER LEFT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2196"},8599:{"value":"2197","name":"NORTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UPPER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2197"},8600:{"value":"2198","name":"SOUTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOWER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2198"},8601:{"value":"2199","name":"SOUTH WEST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOWER LEFT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2199"},8604:{"value":"219C","name":"LEFTWARDS WAVE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT WAVE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u219C"},8605:{"value":"219D","name":"RIGHTWARDS WAVE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT WAVE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u219D"},8606:{"value":"219E","name":"LEFTWARDS TWO HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT TWO HEADED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u219E"},8607:{"value":"219F","name":"UPWARDS TWO HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP TWO HEADED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u219F"},8609:{"value":"21A1","name":"DOWNWARDS TWO HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN TWO HEADED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A1"},8610:{"value":"21A2","name":"LEFTWARDS ARROW WITH TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW WITH TAIL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A2"},8612:{"value":"21A4","name":"LEFTWARDS ARROW FROM BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW FROM BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A4"},8613:{"value":"21A5","name":"UPWARDS ARROW FROM BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP ARROW FROM BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A5"},8615:{"value":"21A7","name":"DOWNWARDS ARROW FROM BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ARROW FROM BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A7"},8616:{"value":"21A8","name":"UP DOWN ARROW WITH BASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A8"},8617:{"value":"21A9","name":"LEFTWARDS ARROW WITH HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW WITH HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21A9"},8618:{"value":"21AA","name":"RIGHTWARDS ARROW WITH HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW WITH HOOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21AA"},8619:{"value":"21AB","name":"LEFTWARDS ARROW WITH LOOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW WITH LOOP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21AB"},8620:{"value":"21AC","name":"RIGHTWARDS ARROW WITH LOOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW WITH LOOP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21AC"},8621:{"value":"21AD","name":"LEFT RIGHT WAVE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21AD"},8623:{"value":"21AF","name":"DOWNWARDS ZIGZAG ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ZIGZAG ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21AF"},8624:{"value":"21B0","name":"UPWARDS ARROW WITH TIP LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP ARROW WITH TIP LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B0"},8625:{"value":"21B1","name":"UPWARDS ARROW WITH TIP RIGHTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP ARROW WITH TIP RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B1"},8626:{"value":"21B2","name":"DOWNWARDS ARROW WITH TIP LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ARROW WITH TIP LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B2"},8627:{"value":"21B3","name":"DOWNWARDS ARROW WITH TIP RIGHTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ARROW WITH TIP RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B3"},8628:{"value":"21B4","name":"RIGHTWARDS ARROW WITH CORNER DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW WITH CORNER DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B4"},8629:{"value":"21B5","name":"DOWNWARDS ARROW WITH CORNER LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ARROW WITH CORNER LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B5"},8630:{"value":"21B6","name":"ANTICLOCKWISE TOP SEMICIRCLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B6"},8631:{"value":"21B7","name":"CLOCKWISE TOP SEMICIRCLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B7"},8632:{"value":"21B8","name":"NORTH WEST ARROW TO LONG BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UPPER LEFT ARROW TO LONG BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B8"},8633:{"value":"21B9","name":"LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21B9"},8634:{"value":"21BA","name":"ANTICLOCKWISE OPEN CIRCLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21BA"},8635:{"value":"21BB","name":"CLOCKWISE OPEN CIRCLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21BB"},8636:{"value":"21BC","name":"LEFTWARDS HARPOON WITH BARB UPWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT HARPOON WITH BARB UP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21BC"},8637:{"value":"21BD","name":"LEFTWARDS HARPOON WITH BARB DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT HARPOON WITH BARB DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21BD"},8638:{"value":"21BE","name":"UPWARDS HARPOON WITH BARB RIGHTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP HARPOON WITH BARB RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21BE"},8639:{"value":"21BF","name":"UPWARDS HARPOON WITH BARB LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP HARPOON WITH BARB LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21BF"},8640:{"value":"21C0","name":"RIGHTWARDS HARPOON WITH BARB UPWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT HARPOON WITH BARB UP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C0"},8641:{"value":"21C1","name":"RIGHTWARDS HARPOON WITH BARB DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT HARPOON WITH BARB DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C1"},8642:{"value":"21C2","name":"DOWNWARDS HARPOON WITH BARB RIGHTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN HARPOON WITH BARB RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C2"},8643:{"value":"21C3","name":"DOWNWARDS HARPOON WITH BARB LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN HARPOON WITH BARB LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C3"},8644:{"value":"21C4","name":"RIGHTWARDS ARROW OVER LEFTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW OVER LEFT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C4"},8645:{"value":"21C5","name":"UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP ARROW LEFT OF DOWN ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C5"},8646:{"value":"21C6","name":"LEFTWARDS ARROW OVER RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW OVER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C6"},8647:{"value":"21C7","name":"LEFTWARDS PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT PAIRED ARROWS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C7"},8648:{"value":"21C8","name":"UPWARDS PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP PAIRED ARROWS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C8"},8649:{"value":"21C9","name":"RIGHTWARDS PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT PAIRED ARROWS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21C9"},8650:{"value":"21CA","name":"DOWNWARDS PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN PAIRED ARROWS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21CA"},8651:{"value":"21CB","name":"LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT HARPOON OVER RIGHT HARPOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21CB"},8652:{"value":"21CC","name":"RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT HARPOON OVER LEFT HARPOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21CC"},8653:{"value":"21CD","name":"LEFTWARDS DOUBLE ARROW WITH STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"21D0 0338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT DOUBLE ARROW WITH STROKE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21CD"},8656:{"value":"21D0","name":"LEFTWARDS DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D0"},8657:{"value":"21D1","name":"UPWARDS DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D1"},8659:{"value":"21D3","name":"DOWNWARDS DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D3"},8661:{"value":"21D5","name":"UP DOWN DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D5"},8662:{"value":"21D6","name":"NORTH WEST DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UPPER LEFT DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D6"},8663:{"value":"21D7","name":"NORTH EAST DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UPPER RIGHT DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D7"},8664:{"value":"21D8","name":"SOUTH EAST DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOWER RIGHT DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D8"},8665:{"value":"21D9","name":"SOUTH WEST DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOWER LEFT DOUBLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21D9"},8666:{"value":"21DA","name":"LEFTWARDS TRIPLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT TRIPLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21DA"},8667:{"value":"21DB","name":"RIGHTWARDS TRIPLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT TRIPLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21DB"},8668:{"value":"21DC","name":"LEFTWARDS SQUIGGLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT SQUIGGLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21DC"},8669:{"value":"21DD","name":"RIGHTWARDS SQUIGGLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT SQUIGGLE ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21DD"},8670:{"value":"21DE","name":"UPWARDS ARROW WITH DOUBLE STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP ARROW WITH DOUBLE STROKE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21DE"},8671:{"value":"21DF","name":"DOWNWARDS ARROW WITH DOUBLE STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN ARROW WITH DOUBLE STROKE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21DF"},8672:{"value":"21E0","name":"LEFTWARDS DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT DASHED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E0"},8673:{"value":"21E1","name":"UPWARDS DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP DASHED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E1"},8674:{"value":"21E2","name":"RIGHTWARDS DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT DASHED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E2"},8675:{"value":"21E3","name":"DOWNWARDS DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DOWN DASHED ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E3"},8676:{"value":"21E4","name":"LEFTWARDS ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT ARROW TO BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E4"},8677:{"value":"21E5","name":"RIGHTWARDS ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT ARROW TO BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E5"},8678:{"value":"21E6","name":"LEFTWARDS WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE LEFT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E6"},8679:{"value":"21E7","name":"UPWARDS WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE UP ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E7"},8680:{"value":"21E8","name":"RIGHTWARDS WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E8"},8681:{"value":"21E9","name":"DOWNWARDS WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE DOWN ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21E9"},8682:{"value":"21EA","name":"UPWARDS WHITE ARROW FROM BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE UP ARROW FROM BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21EA"},8683:{"value":"21EB","name":"UPWARDS WHITE ARROW ON PEDESTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21EB"},8684:{"value":"21EC","name":"UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21EC"},8685:{"value":"21ED","name":"UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21ED"},8686:{"value":"21EE","name":"UPWARDS WHITE DOUBLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21EE"},8687:{"value":"21EF","name":"UPWARDS WHITE DOUBLE ARROW ON PEDESTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21EF"},8688:{"value":"21F0","name":"RIGHTWARDS WHITE ARROW FROM WALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F0"},8689:{"value":"21F1","name":"NORTH WEST ARROW TO CORNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F1"},8690:{"value":"21F2","name":"SOUTH EAST ARROW TO CORNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F2"},8691:{"value":"21F3","name":"UP DOWN WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u21F3"},8960:{"value":"2300","name":"DIAMETER SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2300"},8961:{"value":"2301","name":"ELECTRIC ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2301"},8962:{"value":"2302","name":"HOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2302"},8963:{"value":"2303","name":"UP ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2303"},8964:{"value":"2304","name":"DOWN ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2304"},8965:{"value":"2305","name":"PROJECTIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2305"},8966:{"value":"2306","name":"PERSPECTIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2306"},8967:{"value":"2307","name":"WAVY LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2307"},8972:{"value":"230C","name":"BOTTOM RIGHT CROP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u230C"},8973:{"value":"230D","name":"BOTTOM LEFT CROP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u230D"},8974:{"value":"230E","name":"TOP RIGHT CROP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u230E"},8975:{"value":"230F","name":"TOP LEFT CROP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u230F"},8976:{"value":"2310","name":"REVERSED NOT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2310"},8977:{"value":"2311","name":"SQUARE LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2311"},8978:{"value":"2312","name":"ARC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2312"},8979:{"value":"2313","name":"SEGMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2313"},8980:{"value":"2314","name":"SECTOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2314"},8981:{"value":"2315","name":"TELEPHONE RECORDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2315"},8982:{"value":"2316","name":"POSITION INDICATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2316"},8983:{"value":"2317","name":"VIEWDATA SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2317"},8984:{"value":"2318","name":"PLACE OF INTEREST SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"COMMAND KEY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2318"},8985:{"value":"2319","name":"TURNED NOT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2319"},8986:{"value":"231A","name":"WATCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u231A"},8987:{"value":"231B","name":"HOURGLASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u231B"},8988:{"value":"231C","name":"TOP LEFT CORNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u231C"},8989:{"value":"231D","name":"TOP RIGHT CORNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u231D"},8990:{"value":"231E","name":"BOTTOM LEFT CORNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u231E"},8991:{"value":"231F","name":"BOTTOM RIGHT CORNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u231F"},8994:{"value":"2322","name":"FROWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2322"},8995:{"value":"2323","name":"SMILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2323"},8996:{"value":"2324","name":"UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"ENTER KEY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2324"},8997:{"value":"2325","name":"OPTION KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2325"},8998:{"value":"2326","name":"ERASE TO THE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DELETE TO THE RIGHT KEY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2326"},8999:{"value":"2327","name":"X IN A RECTANGLE BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CLEAR KEY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2327"},9000:{"value":"2328","name":"KEYBOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2328"},9003:{"value":"232B","name":"ERASE TO THE LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DELETE TO THE LEFT KEY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u232B"},9004:{"value":"232C","name":"BENZENE RING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u232C"},9005:{"value":"232D","name":"CYLINDRICITY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u232D"},9006:{"value":"232E","name":"ALL AROUND-PROFILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u232E"},9007:{"value":"232F","name":"SYMMETRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u232F"},9008:{"value":"2330","name":"TOTAL RUNOUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2330"},9009:{"value":"2331","name":"DIMENSION ORIGIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2331"},9010:{"value":"2332","name":"CONICAL TAPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2332"},9011:{"value":"2333","name":"SLOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2333"},9012:{"value":"2334","name":"COUNTERBORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2334"},9013:{"value":"2335","name":"COUNTERSINK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2335"},9014:{"value":"2336","name":"APL FUNCTIONAL SYMBOL I-BEAM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2336"},9015:{"value":"2337","name":"APL FUNCTIONAL SYMBOL SQUISH QUAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2337"},9016:{"value":"2338","name":"APL FUNCTIONAL SYMBOL QUAD EQUAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2338"},9017:{"value":"2339","name":"APL FUNCTIONAL SYMBOL QUAD DIVIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2339"},9018:{"value":"233A","name":"APL FUNCTIONAL SYMBOL QUAD DIAMOND","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u233A"},9019:{"value":"233B","name":"APL FUNCTIONAL SYMBOL QUAD JOT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u233B"},9020:{"value":"233C","name":"APL FUNCTIONAL SYMBOL QUAD CIRCLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u233C"},9021:{"value":"233D","name":"APL FUNCTIONAL SYMBOL CIRCLE STILE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u233D"},9022:{"value":"233E","name":"APL FUNCTIONAL SYMBOL CIRCLE JOT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u233E"},9023:{"value":"233F","name":"APL FUNCTIONAL SYMBOL SLASH BAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u233F"},9024:{"value":"2340","name":"APL FUNCTIONAL SYMBOL BACKSLASH BAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2340"},9025:{"value":"2341","name":"APL FUNCTIONAL SYMBOL QUAD SLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2341"},9026:{"value":"2342","name":"APL FUNCTIONAL SYMBOL QUAD BACKSLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2342"},9027:{"value":"2343","name":"APL FUNCTIONAL SYMBOL QUAD LESS-THAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2343"},9028:{"value":"2344","name":"APL FUNCTIONAL SYMBOL QUAD GREATER-THAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2344"},9029:{"value":"2345","name":"APL FUNCTIONAL SYMBOL LEFTWARDS VANE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2345"},9030:{"value":"2346","name":"APL FUNCTIONAL SYMBOL RIGHTWARDS VANE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2346"},9031:{"value":"2347","name":"APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2347"},9032:{"value":"2348","name":"APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2348"},9033:{"value":"2349","name":"APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2349"},9034:{"value":"234A","name":"APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u234A"},9035:{"value":"234B","name":"APL FUNCTIONAL SYMBOL DELTA STILE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u234B"},9036:{"value":"234C","name":"APL FUNCTIONAL SYMBOL QUAD DOWN CARET","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u234C"},9037:{"value":"234D","name":"APL FUNCTIONAL SYMBOL QUAD DELTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u234D"},9038:{"value":"234E","name":"APL FUNCTIONAL SYMBOL DOWN TACK JOT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u234E"},9039:{"value":"234F","name":"APL FUNCTIONAL SYMBOL UPWARDS VANE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u234F"},9040:{"value":"2350","name":"APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2350"},9041:{"value":"2351","name":"APL FUNCTIONAL SYMBOL UP TACK OVERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2351"},9042:{"value":"2352","name":"APL FUNCTIONAL SYMBOL DEL STILE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2352"},9043:{"value":"2353","name":"APL FUNCTIONAL SYMBOL QUAD UP CARET","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2353"},9044:{"value":"2354","name":"APL FUNCTIONAL SYMBOL QUAD DEL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2354"},9045:{"value":"2355","name":"APL FUNCTIONAL SYMBOL UP TACK JOT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2355"},9046:{"value":"2356","name":"APL FUNCTIONAL SYMBOL DOWNWARDS VANE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2356"},9047:{"value":"2357","name":"APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2357"},9048:{"value":"2358","name":"APL FUNCTIONAL SYMBOL QUOTE UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2358"},9049:{"value":"2359","name":"APL FUNCTIONAL SYMBOL DELTA UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2359"},9050:{"value":"235A","name":"APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u235A"},9051:{"value":"235B","name":"APL FUNCTIONAL SYMBOL JOT UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u235B"},9052:{"value":"235C","name":"APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u235C"},9053:{"value":"235D","name":"APL FUNCTIONAL SYMBOL UP SHOE JOT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u235D"},9054:{"value":"235E","name":"APL FUNCTIONAL SYMBOL QUOTE QUAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u235E"},9055:{"value":"235F","name":"APL FUNCTIONAL SYMBOL CIRCLE STAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u235F"},9056:{"value":"2360","name":"APL FUNCTIONAL SYMBOL QUAD COLON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2360"},9057:{"value":"2361","name":"APL FUNCTIONAL SYMBOL UP TACK DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2361"},9058:{"value":"2362","name":"APL FUNCTIONAL SYMBOL DEL DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2362"},9059:{"value":"2363","name":"APL FUNCTIONAL SYMBOL STAR DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2363"},9060:{"value":"2364","name":"APL FUNCTIONAL SYMBOL JOT DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2364"},9061:{"value":"2365","name":"APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2365"},9062:{"value":"2366","name":"APL FUNCTIONAL SYMBOL DOWN SHOE STILE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2366"},9063:{"value":"2367","name":"APL FUNCTIONAL SYMBOL LEFT SHOE STILE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2367"},9064:{"value":"2368","name":"APL FUNCTIONAL SYMBOL TILDE DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2368"},9065:{"value":"2369","name":"APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2369"},9066:{"value":"236A","name":"APL FUNCTIONAL SYMBOL COMMA BAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u236A"},9067:{"value":"236B","name":"APL FUNCTIONAL SYMBOL DEL TILDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u236B"},9068:{"value":"236C","name":"APL FUNCTIONAL SYMBOL ZILDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u236C"},9069:{"value":"236D","name":"APL FUNCTIONAL SYMBOL STILE TILDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u236D"},9070:{"value":"236E","name":"APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u236E"},9071:{"value":"236F","name":"APL FUNCTIONAL SYMBOL QUAD NOT EQUAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u236F"},9072:{"value":"2370","name":"APL FUNCTIONAL SYMBOL QUAD QUESTION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2370"},9073:{"value":"2371","name":"APL FUNCTIONAL SYMBOL DOWN CARET TILDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2371"},9074:{"value":"2372","name":"APL FUNCTIONAL SYMBOL UP CARET TILDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2372"},9075:{"value":"2373","name":"APL FUNCTIONAL SYMBOL IOTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2373"},9076:{"value":"2374","name":"APL FUNCTIONAL SYMBOL RHO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2374"},9077:{"value":"2375","name":"APL FUNCTIONAL SYMBOL OMEGA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2375"},9078:{"value":"2376","name":"APL FUNCTIONAL SYMBOL ALPHA UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2376"},9079:{"value":"2377","name":"APL FUNCTIONAL SYMBOL EPSILON UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2377"},9080:{"value":"2378","name":"APL FUNCTIONAL SYMBOL IOTA UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2378"},9081:{"value":"2379","name":"APL FUNCTIONAL SYMBOL OMEGA UNDERBAR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2379"},9082:{"value":"237A","name":"APL FUNCTIONAL SYMBOL ALPHA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u237A"},9083:{"value":"237B","name":"NOT CHECK MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u237B"},9085:{"value":"237D","name":"SHOULDERED OPEN BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u237D"},9086:{"value":"237E","name":"BELL SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u237E"},9087:{"value":"237F","name":"VERTICAL LINE WITH MIDDLE DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u237F"},9088:{"value":"2380","name":"INSERTION SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2380"},9089:{"value":"2381","name":"CONTINUOUS UNDERLINE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2381"},9090:{"value":"2382","name":"DISCONTINUOUS UNDERLINE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2382"},9091:{"value":"2383","name":"EMPHASIS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2383"},9092:{"value":"2384","name":"COMPOSITION SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2384"},9093:{"value":"2385","name":"WHITE SQUARE WITH CENTRE VERTICAL LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2385"},9094:{"value":"2386","name":"ENTER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2386"},9095:{"value":"2387","name":"ALTERNATIVE KEY SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2387"},9096:{"value":"2388","name":"HELM SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2388"},9097:{"value":"2389","name":"CIRCLED HORIZONTAL BAR WITH NOTCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2389"},9098:{"value":"238A","name":"CIRCLED TRIANGLE DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u238A"},9099:{"value":"238B","name":"BROKEN CIRCLE WITH NORTHWEST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u238B"},9100:{"value":"238C","name":"UNDO SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u238C"},9101:{"value":"238D","name":"MONOSTABLE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u238D"},9102:{"value":"238E","name":"HYSTERESIS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u238E"},9103:{"value":"238F","name":"OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u238F"},9104:{"value":"2390","name":"OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2390"},9105:{"value":"2391","name":"PASSIVE-PULL-DOWN-OUTPUT SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2391"},9106:{"value":"2392","name":"PASSIVE-PULL-UP-OUTPUT SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2392"},9107:{"value":"2393","name":"DIRECT CURRENT SYMBOL FORM TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2393"},9108:{"value":"2394","name":"SOFTWARE-FUNCTION SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2394"},9109:{"value":"2395","name":"APL FUNCTIONAL SYMBOL QUAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2395"},9110:{"value":"2396","name":"DECIMAL SEPARATOR KEY SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2396"},9111:{"value":"2397","name":"PREVIOUS PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2397"},9112:{"value":"2398","name":"NEXT PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2398"},9113:{"value":"2399","name":"PRINT SCREEN SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2399"},9114:{"value":"239A","name":"CLEAR SCREEN SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u239A"},9140:{"value":"23B4","name":"TOP SQUARE BRACKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B4"},9141:{"value":"23B5","name":"BOTTOM SQUARE BRACKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B5"},9142:{"value":"23B6","name":"BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B6"},9143:{"value":"23B7","name":"RADICAL SYMBOL BOTTOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B7"},9144:{"value":"23B8","name":"LEFT VERTICAL BOX LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B8"},9145:{"value":"23B9","name":"RIGHT VERTICAL BOX LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23B9"},9146:{"value":"23BA","name":"HORIZONTAL SCAN LINE-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23BA"},9147:{"value":"23BB","name":"HORIZONTAL SCAN LINE-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23BB"},9148:{"value":"23BC","name":"HORIZONTAL SCAN LINE-7","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23BC"},9149:{"value":"23BD","name":"HORIZONTAL SCAN LINE-9","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23BD"},9150:{"value":"23BE","name":"DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23BE"},9151:{"value":"23BF","name":"DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23BF"},9152:{"value":"23C0","name":"DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C0"},9153:{"value":"23C1","name":"DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C1"},9154:{"value":"23C2","name":"DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C2"},9155:{"value":"23C3","name":"DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C3"},9156:{"value":"23C4","name":"DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C4"},9157:{"value":"23C5","name":"DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C5"},9158:{"value":"23C6","name":"DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C6"},9159:{"value":"23C7","name":"DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C7"},9160:{"value":"23C8","name":"DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C8"},9161:{"value":"23C9","name":"DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23C9"},9162:{"value":"23CA","name":"DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23CA"},9163:{"value":"23CB","name":"DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23CB"},9164:{"value":"23CC","name":"DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23CC"},9165:{"value":"23CD","name":"SQUARE FOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23CD"},9166:{"value":"23CE","name":"RETURN SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23CE"},9167:{"value":"23CF","name":"EJECT SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23CF"},9168:{"value":"23D0","name":"VERTICAL LINE EXTENSION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D0"},9169:{"value":"23D1","name":"METRICAL BREVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D1"},9170:{"value":"23D2","name":"METRICAL LONG OVER SHORT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D2"},9171:{"value":"23D3","name":"METRICAL SHORT OVER LONG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D3"},9172:{"value":"23D4","name":"METRICAL LONG OVER TWO SHORTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D4"},9173:{"value":"23D5","name":"METRICAL TWO SHORTS OVER LONG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D5"},9174:{"value":"23D6","name":"METRICAL TWO SHORTS JOINED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D6"},9175:{"value":"23D7","name":"METRICAL TRISEME","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D7"},9176:{"value":"23D8","name":"METRICAL TETRASEME","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D8"},9177:{"value":"23D9","name":"METRICAL PENTASEME","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23D9"},9178:{"value":"23DA","name":"EARTH GROUND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23DA"},9179:{"value":"23DB","name":"FUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23DB"},9186:{"value":"23E2","name":"WHITE TRAPEZIUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E2"},9187:{"value":"23E3","name":"BENZENE RING WITH CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E3"},9188:{"value":"23E4","name":"STRAIGHTNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E4"},9189:{"value":"23E5","name":"FLATNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E5"},9190:{"value":"23E6","name":"AC CURRENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E6"},9191:{"value":"23E7","name":"ELECTRICAL INTERSECTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E7"},9192:{"value":"23E8","name":"DECIMAL EXPONENT SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E8"},9193:{"value":"23E9","name":"BLACK RIGHT-POINTING DOUBLE TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23E9"},9194:{"value":"23EA","name":"BLACK LEFT-POINTING DOUBLE TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23EA"},9195:{"value":"23EB","name":"BLACK UP-POINTING DOUBLE TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23EB"},9196:{"value":"23EC","name":"BLACK DOWN-POINTING DOUBLE TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23EC"},9197:{"value":"23ED","name":"BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23ED"},9198:{"value":"23EE","name":"BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23EE"},9199:{"value":"23EF","name":"BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23EF"},9200:{"value":"23F0","name":"ALARM CLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F0"},9201:{"value":"23F1","name":"STOPWATCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F1"},9202:{"value":"23F2","name":"TIMER CLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F2"},9203:{"value":"23F3","name":"HOURGLASS WITH FLOWING SAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F3"},9204:{"value":"23F4","name":"BLACK MEDIUM LEFT-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F4"},9205:{"value":"23F5","name":"BLACK MEDIUM RIGHT-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F5"},9206:{"value":"23F6","name":"BLACK MEDIUM UP-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F6"},9207:{"value":"23F7","name":"BLACK MEDIUM DOWN-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F7"},9208:{"value":"23F8","name":"DOUBLE VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F8"},9209:{"value":"23F9","name":"BLACK SQUARE FOR STOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23F9"},9210:{"value":"23FA","name":"BLACK CIRCLE FOR RECORD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23FA"},9211:{"value":"23FB","name":"POWER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23FB"},9212:{"value":"23FC","name":"POWER ON-OFF SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23FC"},9213:{"value":"23FD","name":"POWER ON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23FD"},9214:{"value":"23FE","name":"POWER SLEEP SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23FE"},9215:{"value":"23FF","name":"OBSERVER EYE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u23FF"},9216:{"value":"2400","name":"SYMBOL FOR NULL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR NULL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2400"},9217:{"value":"2401","name":"SYMBOL FOR START OF HEADING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR START OF HEADING","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2401"},9218:{"value":"2402","name":"SYMBOL FOR START OF TEXT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR START OF TEXT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2402"},9219:{"value":"2403","name":"SYMBOL FOR END OF TEXT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR END OF TEXT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2403"},9220:{"value":"2404","name":"SYMBOL FOR END OF TRANSMISSION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR END OF TRANSMISSION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2404"},9221:{"value":"2405","name":"SYMBOL FOR ENQUIRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR ENQUIRY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2405"},9222:{"value":"2406","name":"SYMBOL FOR ACKNOWLEDGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR ACKNOWLEDGE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2406"},9223:{"value":"2407","name":"SYMBOL FOR BELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR BELL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2407"},9224:{"value":"2408","name":"SYMBOL FOR BACKSPACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR BACKSPACE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2408"},9225:{"value":"2409","name":"SYMBOL FOR HORIZONTAL TABULATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR HORIZONTAL TABULATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2409"},9226:{"value":"240A","name":"SYMBOL FOR LINE FEED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR LINE FEED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u240A"},9227:{"value":"240B","name":"SYMBOL FOR VERTICAL TABULATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR VERTICAL TABULATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u240B"},9228:{"value":"240C","name":"SYMBOL FOR FORM FEED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR FORM FEED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u240C"},9229:{"value":"240D","name":"SYMBOL FOR CARRIAGE RETURN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR CARRIAGE RETURN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u240D"},9230:{"value":"240E","name":"SYMBOL FOR SHIFT OUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR SHIFT OUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u240E"},9231:{"value":"240F","name":"SYMBOL FOR SHIFT IN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR SHIFT IN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u240F"},9232:{"value":"2410","name":"SYMBOL FOR DATA LINK ESCAPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR DATA LINK ESCAPE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2410"},9233:{"value":"2411","name":"SYMBOL FOR DEVICE CONTROL ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR DEVICE CONTROL ONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2411"},9234:{"value":"2412","name":"SYMBOL FOR DEVICE CONTROL TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR DEVICE CONTROL TWO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2412"},9235:{"value":"2413","name":"SYMBOL FOR DEVICE CONTROL THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR DEVICE CONTROL THREE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2413"},9236:{"value":"2414","name":"SYMBOL FOR DEVICE CONTROL FOUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR DEVICE CONTROL FOUR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2414"},9237:{"value":"2415","name":"SYMBOL FOR NEGATIVE ACKNOWLEDGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR NEGATIVE ACKNOWLEDGE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2415"},9238:{"value":"2416","name":"SYMBOL FOR SYNCHRONOUS IDLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR SYNCHRONOUS IDLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2416"},9239:{"value":"2417","name":"SYMBOL FOR END OF TRANSMISSION BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR END OF TRANSMISSION BLOCK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2417"},9240:{"value":"2418","name":"SYMBOL FOR CANCEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR CANCEL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2418"},9241:{"value":"2419","name":"SYMBOL FOR END OF MEDIUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR END OF MEDIUM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2419"},9242:{"value":"241A","name":"SYMBOL FOR SUBSTITUTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR SUBSTITUTE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u241A"},9243:{"value":"241B","name":"SYMBOL FOR ESCAPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR ESCAPE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u241B"},9244:{"value":"241C","name":"SYMBOL FOR FILE SEPARATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR FILE SEPARATOR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u241C"},9245:{"value":"241D","name":"SYMBOL FOR GROUP SEPARATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR GROUP SEPARATOR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u241D"},9246:{"value":"241E","name":"SYMBOL FOR RECORD SEPARATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR RECORD SEPARATOR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u241E"},9247:{"value":"241F","name":"SYMBOL FOR UNIT SEPARATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR UNIT SEPARATOR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u241F"},9248:{"value":"2420","name":"SYMBOL FOR SPACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR SPACE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2420"},9249:{"value":"2421","name":"SYMBOL FOR DELETE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR DELETE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2421"},9250:{"value":"2422","name":"BLANK SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLANK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2422"},9251:{"value":"2423","name":"OPEN BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2423"},9252:{"value":"2424","name":"SYMBOL FOR NEWLINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"GRAPHIC FOR NEWLINE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2424"},9253:{"value":"2425","name":"SYMBOL FOR DELETE FORM TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2425"},9254:{"value":"2426","name":"SYMBOL FOR SUBSTITUTE FORM TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2426"},9280:{"value":"2440","name":"OCR HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2440"},9281:{"value":"2441","name":"OCR CHAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2441"},9282:{"value":"2442","name":"OCR FORK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2442"},9283:{"value":"2443","name":"OCR INVERTED FORK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2443"},9284:{"value":"2444","name":"OCR BELT BUCKLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2444"},9285:{"value":"2445","name":"OCR BOW TIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2445"},9286:{"value":"2446","name":"OCR BRANCH BANK IDENTIFICATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2446"},9287:{"value":"2447","name":"OCR AMOUNT OF CHECK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2447"},9288:{"value":"2448","name":"OCR DASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2448"},9289:{"value":"2449","name":"OCR CUSTOMER ACCOUNT NUMBER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2449"},9290:{"value":"244A","name":"OCR DOUBLE BACKSLASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u244A"},9372:{"value":"249C","name":"PARENTHESIZED LATIN SMALL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0061 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u249C"},9373:{"value":"249D","name":"PARENTHESIZED LATIN SMALL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0062 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u249D"},9374:{"value":"249E","name":"PARENTHESIZED LATIN SMALL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0063 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u249E"},9375:{"value":"249F","name":"PARENTHESIZED LATIN SMALL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0064 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u249F"},9376:{"value":"24A0","name":"PARENTHESIZED LATIN SMALL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0065 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A0"},9377:{"value":"24A1","name":"PARENTHESIZED LATIN SMALL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0066 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A1"},9378:{"value":"24A2","name":"PARENTHESIZED LATIN SMALL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0067 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A2"},9379:{"value":"24A3","name":"PARENTHESIZED LATIN SMALL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0068 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A3"},9380:{"value":"24A4","name":"PARENTHESIZED LATIN SMALL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0069 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A4"},9381:{"value":"24A5","name":"PARENTHESIZED LATIN SMALL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 006A 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A5"},9382:{"value":"24A6","name":"PARENTHESIZED LATIN SMALL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 006B 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A6"},9383:{"value":"24A7","name":"PARENTHESIZED LATIN SMALL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 006C 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A7"},9384:{"value":"24A8","name":"PARENTHESIZED LATIN SMALL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 006D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A8"},9385:{"value":"24A9","name":"PARENTHESIZED LATIN SMALL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 006E 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24A9"},9386:{"value":"24AA","name":"PARENTHESIZED LATIN SMALL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 006F 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24AA"},9387:{"value":"24AB","name":"PARENTHESIZED LATIN SMALL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0070 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24AB"},9388:{"value":"24AC","name":"PARENTHESIZED LATIN SMALL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0071 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24AC"},9389:{"value":"24AD","name":"PARENTHESIZED LATIN SMALL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0072 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24AD"},9390:{"value":"24AE","name":"PARENTHESIZED LATIN SMALL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0073 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24AE"},9391:{"value":"24AF","name":"PARENTHESIZED LATIN SMALL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0074 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24AF"},9392:{"value":"24B0","name":"PARENTHESIZED LATIN SMALL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0075 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24B0"},9393:{"value":"24B1","name":"PARENTHESIZED LATIN SMALL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0076 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24B1"},9394:{"value":"24B2","name":"PARENTHESIZED LATIN SMALL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0077 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24B2"},9395:{"value":"24B3","name":"PARENTHESIZED LATIN SMALL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0078 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24B3"},9396:{"value":"24B4","name":"PARENTHESIZED LATIN SMALL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0079 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24B4"},9397:{"value":"24B5","name":"PARENTHESIZED LATIN SMALL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 007A 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u24B5"},9398:{"value":"24B6","name":"CIRCLED LATIN CAPITAL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D0","titlecase_mapping":"","symbol":"\u24B6"},9399:{"value":"24B7","name":"CIRCLED LATIN CAPITAL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D1","titlecase_mapping":"","symbol":"\u24B7"},9400:{"value":"24B8","name":"CIRCLED LATIN CAPITAL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D2","titlecase_mapping":"","symbol":"\u24B8"},9401:{"value":"24B9","name":"CIRCLED LATIN CAPITAL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D3","titlecase_mapping":"","symbol":"\u24B9"},9402:{"value":"24BA","name":"CIRCLED LATIN CAPITAL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D4","titlecase_mapping":"","symbol":"\u24BA"},9403:{"value":"24BB","name":"CIRCLED LATIN CAPITAL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D5","titlecase_mapping":"","symbol":"\u24BB"},9404:{"value":"24BC","name":"CIRCLED LATIN CAPITAL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D6","titlecase_mapping":"","symbol":"\u24BC"},9405:{"value":"24BD","name":"CIRCLED LATIN CAPITAL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D7","titlecase_mapping":"","symbol":"\u24BD"},9406:{"value":"24BE","name":"CIRCLED LATIN CAPITAL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D8","titlecase_mapping":"","symbol":"\u24BE"},9407:{"value":"24BF","name":"CIRCLED LATIN CAPITAL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24D9","titlecase_mapping":"","symbol":"\u24BF"},9408:{"value":"24C0","name":"CIRCLED LATIN CAPITAL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24DA","titlecase_mapping":"","symbol":"\u24C0"},9409:{"value":"24C1","name":"CIRCLED LATIN CAPITAL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24DB","titlecase_mapping":"","symbol":"\u24C1"},9410:{"value":"24C2","name":"CIRCLED LATIN CAPITAL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24DC","titlecase_mapping":"","symbol":"\u24C2"},9411:{"value":"24C3","name":"CIRCLED LATIN CAPITAL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24DD","titlecase_mapping":"","symbol":"\u24C3"},9412:{"value":"24C4","name":"CIRCLED LATIN CAPITAL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24DE","titlecase_mapping":"","symbol":"\u24C4"},9413:{"value":"24C5","name":"CIRCLED LATIN CAPITAL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24DF","titlecase_mapping":"","symbol":"\u24C5"},9414:{"value":"24C6","name":"CIRCLED LATIN CAPITAL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E0","titlecase_mapping":"","symbol":"\u24C6"},9415:{"value":"24C7","name":"CIRCLED LATIN CAPITAL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E1","titlecase_mapping":"","symbol":"\u24C7"},9416:{"value":"24C8","name":"CIRCLED LATIN CAPITAL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E2","titlecase_mapping":"","symbol":"\u24C8"},9417:{"value":"24C9","name":"CIRCLED LATIN CAPITAL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E3","titlecase_mapping":"","symbol":"\u24C9"},9418:{"value":"24CA","name":"CIRCLED LATIN CAPITAL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E4","titlecase_mapping":"","symbol":"\u24CA"},9419:{"value":"24CB","name":"CIRCLED LATIN CAPITAL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E5","titlecase_mapping":"","symbol":"\u24CB"},9420:{"value":"24CC","name":"CIRCLED LATIN CAPITAL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E6","titlecase_mapping":"","symbol":"\u24CC"},9421:{"value":"24CD","name":"CIRCLED LATIN CAPITAL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E7","titlecase_mapping":"","symbol":"\u24CD"},9422:{"value":"24CE","name":"CIRCLED LATIN CAPITAL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E8","titlecase_mapping":"","symbol":"\u24CE"},9423:{"value":"24CF","name":"CIRCLED LATIN CAPITAL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"24E9","titlecase_mapping":"","symbol":"\u24CF"},9424:{"value":"24D0","name":"CIRCLED LATIN SMALL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24B6","lowercase_mapping":"","titlecase_mapping":"24B6","symbol":"\u24D0"},9425:{"value":"24D1","name":"CIRCLED LATIN SMALL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":" 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24B7","lowercase_mapping":"","titlecase_mapping":"24B7","symbol":"\u24D1"},9426:{"value":"24D2","name":"CIRCLED LATIN SMALL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24B8","lowercase_mapping":"","titlecase_mapping":"24B8","symbol":"\u24D2"},9427:{"value":"24D3","name":"CIRCLED LATIN SMALL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":" 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24B9","lowercase_mapping":"","titlecase_mapping":"24B9","symbol":"\u24D3"},9428:{"value":"24D4","name":"CIRCLED LATIN SMALL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":" 0065","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24BA","lowercase_mapping":"","titlecase_mapping":"24BA","symbol":"\u24D4"},9429:{"value":"24D5","name":"CIRCLED LATIN SMALL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":" 0066","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24BB","lowercase_mapping":"","titlecase_mapping":"24BB","symbol":"\u24D5"},9430:{"value":"24D6","name":"CIRCLED LATIN SMALL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":" 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24BC","lowercase_mapping":"","titlecase_mapping":"24BC","symbol":"\u24D6"},9431:{"value":"24D7","name":"CIRCLED LATIN SMALL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":" 0068","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24BD","lowercase_mapping":"","titlecase_mapping":"24BD","symbol":"\u24D7"},9432:{"value":"24D8","name":"CIRCLED LATIN SMALL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":" 0069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24BE","lowercase_mapping":"","titlecase_mapping":"24BE","symbol":"\u24D8"},9433:{"value":"24D9","name":"CIRCLED LATIN SMALL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":" 006A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24BF","lowercase_mapping":"","titlecase_mapping":"24BF","symbol":"\u24D9"},9434:{"value":"24DA","name":"CIRCLED LATIN SMALL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C0","lowercase_mapping":"","titlecase_mapping":"24C0","symbol":"\u24DA"},9435:{"value":"24DB","name":"CIRCLED LATIN SMALL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":" 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C1","lowercase_mapping":"","titlecase_mapping":"24C1","symbol":"\u24DB"},9436:{"value":"24DC","name":"CIRCLED LATIN SMALL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C2","lowercase_mapping":"","titlecase_mapping":"24C2","symbol":"\u24DC"},9437:{"value":"24DD","name":"CIRCLED LATIN SMALL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C3","lowercase_mapping":"","titlecase_mapping":"24C3","symbol":"\u24DD"},9438:{"value":"24DE","name":"CIRCLED LATIN SMALL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":" 006F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C4","lowercase_mapping":"","titlecase_mapping":"24C4","symbol":"\u24DE"},9439:{"value":"24DF","name":"CIRCLED LATIN SMALL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C5","lowercase_mapping":"","titlecase_mapping":"24C5","symbol":"\u24DF"},9440:{"value":"24E0","name":"CIRCLED LATIN SMALL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":" 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C6","lowercase_mapping":"","titlecase_mapping":"24C6","symbol":"\u24E0"},9441:{"value":"24E1","name":"CIRCLED LATIN SMALL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":" 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C7","lowercase_mapping":"","titlecase_mapping":"24C7","symbol":"\u24E1"},9442:{"value":"24E2","name":"CIRCLED LATIN SMALL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C8","lowercase_mapping":"","titlecase_mapping":"24C8","symbol":"\u24E2"},9443:{"value":"24E3","name":"CIRCLED LATIN SMALL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":" 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24C9","lowercase_mapping":"","titlecase_mapping":"24C9","symbol":"\u24E3"},9444:{"value":"24E4","name":"CIRCLED LATIN SMALL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":" 0075","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24CA","lowercase_mapping":"","titlecase_mapping":"24CA","symbol":"\u24E4"},9445:{"value":"24E5","name":"CIRCLED LATIN SMALL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":" 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24CB","lowercase_mapping":"","titlecase_mapping":"24CB","symbol":"\u24E5"},9446:{"value":"24E6","name":"CIRCLED LATIN SMALL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":" 0077","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24CC","lowercase_mapping":"","titlecase_mapping":"24CC","symbol":"\u24E6"},9447:{"value":"24E7","name":"CIRCLED LATIN SMALL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":" 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24CD","lowercase_mapping":"","titlecase_mapping":"24CD","symbol":"\u24E7"},9448:{"value":"24E8","name":"CIRCLED LATIN SMALL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":" 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24CE","lowercase_mapping":"","titlecase_mapping":"24CE","symbol":"\u24E8"},9449:{"value":"24E9","name":"CIRCLED LATIN SMALL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":" 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"24CF","lowercase_mapping":"","titlecase_mapping":"24CF","symbol":"\u24E9"},9472:{"value":"2500","name":"BOX DRAWINGS LIGHT HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2500"},9473:{"value":"2501","name":"BOX DRAWINGS HEAVY HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2501"},9474:{"value":"2502","name":"BOX DRAWINGS LIGHT VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2502"},9475:{"value":"2503","name":"BOX DRAWINGS HEAVY VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2503"},9476:{"value":"2504","name":"BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT TRIPLE DASH HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2504"},9477:{"value":"2505","name":"BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY TRIPLE DASH HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2505"},9478:{"value":"2506","name":"BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT TRIPLE DASH VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2506"},9479:{"value":"2507","name":"BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY TRIPLE DASH VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2507"},9480:{"value":"2508","name":"BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT QUADRUPLE DASH HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2508"},9481:{"value":"2509","name":"BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY QUADRUPLE DASH HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2509"},9482:{"value":"250A","name":"BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT QUADRUPLE DASH VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u250A"},9483:{"value":"250B","name":"BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY QUADRUPLE DASH VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u250B"},9484:{"value":"250C","name":"BOX DRAWINGS LIGHT DOWN AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DOWN AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u250C"},9485:{"value":"250D","name":"BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN LIGHT AND RIGHT HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u250D"},9486:{"value":"250E","name":"BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN HEAVY AND RIGHT LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u250E"},9487:{"value":"250F","name":"BOX DRAWINGS HEAVY DOWN AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY DOWN AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u250F"},9488:{"value":"2510","name":"BOX DRAWINGS LIGHT DOWN AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DOWN AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2510"},9489:{"value":"2511","name":"BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN LIGHT AND LEFT HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2511"},9490:{"value":"2512","name":"BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN HEAVY AND LEFT LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2512"},9491:{"value":"2513","name":"BOX DRAWINGS HEAVY DOWN AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY DOWN AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2513"},9492:{"value":"2514","name":"BOX DRAWINGS LIGHT UP AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT UP AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2514"},9493:{"value":"2515","name":"BOX DRAWINGS UP LIGHT AND RIGHT HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP LIGHT AND RIGHT HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2515"},9494:{"value":"2516","name":"BOX DRAWINGS UP HEAVY AND RIGHT LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP HEAVY AND RIGHT LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2516"},9495:{"value":"2517","name":"BOX DRAWINGS HEAVY UP AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY UP AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2517"},9496:{"value":"2518","name":"BOX DRAWINGS LIGHT UP AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT UP AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2518"},9497:{"value":"2519","name":"BOX DRAWINGS UP LIGHT AND LEFT HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP LIGHT AND LEFT HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2519"},9498:{"value":"251A","name":"BOX DRAWINGS UP HEAVY AND LEFT LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP HEAVY AND LEFT LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u251A"},9499:{"value":"251B","name":"BOX DRAWINGS HEAVY UP AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY UP AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u251B"},9500:{"value":"251C","name":"BOX DRAWINGS LIGHT VERTICAL AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT VERTICAL AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u251C"},9501:{"value":"251D","name":"BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL LIGHT AND RIGHT HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u251D"},9502:{"value":"251E","name":"BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP HEAVY AND RIGHT DOWN LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u251E"},9503:{"value":"251F","name":"BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN HEAVY AND RIGHT UP LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u251F"},9504:{"value":"2520","name":"BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL HEAVY AND RIGHT LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2520"},9505:{"value":"2521","name":"BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN LIGHT AND RIGHT UP HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2521"},9506:{"value":"2522","name":"BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP LIGHT AND RIGHT DOWN HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2522"},9507:{"value":"2523","name":"BOX DRAWINGS HEAVY VERTICAL AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY VERTICAL AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2523"},9508:{"value":"2524","name":"BOX DRAWINGS LIGHT VERTICAL AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT VERTICAL AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2524"},9509:{"value":"2525","name":"BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL LIGHT AND LEFT HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2525"},9510:{"value":"2526","name":"BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP HEAVY AND LEFT DOWN LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2526"},9511:{"value":"2527","name":"BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN HEAVY AND LEFT UP LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2527"},9512:{"value":"2528","name":"BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL HEAVY AND LEFT LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2528"},9513:{"value":"2529","name":"BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN LIGHT AND LEFT UP HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2529"},9514:{"value":"252A","name":"BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP LIGHT AND LEFT DOWN HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u252A"},9515:{"value":"252B","name":"BOX DRAWINGS HEAVY VERTICAL AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY VERTICAL AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u252B"},9516:{"value":"252C","name":"BOX DRAWINGS LIGHT DOWN AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DOWN AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u252C"},9517:{"value":"252D","name":"BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT HEAVY AND RIGHT DOWN LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u252D"},9518:{"value":"252E","name":"BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT HEAVY AND LEFT DOWN LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u252E"},9519:{"value":"252F","name":"BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN LIGHT AND HORIZONTAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u252F"},9520:{"value":"2530","name":"BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN HEAVY AND HORIZONTAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2530"},9521:{"value":"2531","name":"BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT LIGHT AND LEFT DOWN HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2531"},9522:{"value":"2532","name":"BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT LIGHT AND RIGHT DOWN HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2532"},9523:{"value":"2533","name":"BOX DRAWINGS HEAVY DOWN AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY DOWN AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2533"},9524:{"value":"2534","name":"BOX DRAWINGS LIGHT UP AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT UP AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2534"},9525:{"value":"2535","name":"BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT HEAVY AND RIGHT UP LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2535"},9526:{"value":"2536","name":"BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT HEAVY AND LEFT UP LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2536"},9527:{"value":"2537","name":"BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP LIGHT AND HORIZONTAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2537"},9528:{"value":"2538","name":"BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP HEAVY AND HORIZONTAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2538"},9529:{"value":"2539","name":"BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT LIGHT AND LEFT UP HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2539"},9530:{"value":"253A","name":"BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT LIGHT AND RIGHT UP HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u253A"},9531:{"value":"253B","name":"BOX DRAWINGS HEAVY UP AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY UP AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u253B"},9532:{"value":"253C","name":"BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT VERTICAL AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u253C"},9533:{"value":"253D","name":"BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u253D"},9534:{"value":"253E","name":"BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u253E"},9535:{"value":"253F","name":"BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u253F"},9536:{"value":"2540","name":"BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2540"},9537:{"value":"2541","name":"BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2541"},9538:{"value":"2542","name":"BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2542"},9539:{"value":"2543","name":"BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2543"},9540:{"value":"2544","name":"BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2544"},9541:{"value":"2545","name":"BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2545"},9542:{"value":"2546","name":"BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2546"},9543:{"value":"2547","name":"BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2547"},9544:{"value":"2548","name":"BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2548"},9545:{"value":"2549","name":"BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2549"},9546:{"value":"254A","name":"BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u254A"},9547:{"value":"254B","name":"BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY VERTICAL AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u254B"},9548:{"value":"254C","name":"BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DOUBLE DASH HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u254C"},9549:{"value":"254D","name":"BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY DOUBLE DASH HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u254D"},9550:{"value":"254E","name":"BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DOUBLE DASH VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u254E"},9551:{"value":"254F","name":"BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY DOUBLE DASH VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u254F"},9552:{"value":"2550","name":"BOX DRAWINGS DOUBLE HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2550"},9553:{"value":"2551","name":"BOX DRAWINGS DOUBLE VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE VERTICAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2551"},9554:{"value":"2552","name":"BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN SINGLE AND RIGHT DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2552"},9555:{"value":"2553","name":"BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN DOUBLE AND RIGHT SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2553"},9556:{"value":"2554","name":"BOX DRAWINGS DOUBLE DOWN AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE DOWN AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2554"},9557:{"value":"2555","name":"BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN SINGLE AND LEFT DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2555"},9558:{"value":"2556","name":"BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN DOUBLE AND LEFT SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2556"},9559:{"value":"2557","name":"BOX DRAWINGS DOUBLE DOWN AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE DOWN AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2557"},9560:{"value":"2558","name":"BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP SINGLE AND RIGHT DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2558"},9561:{"value":"2559","name":"BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP DOUBLE AND RIGHT SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2559"},9562:{"value":"255A","name":"BOX DRAWINGS DOUBLE UP AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE UP AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u255A"},9563:{"value":"255B","name":"BOX DRAWINGS UP SINGLE AND LEFT DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP SINGLE AND LEFT DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u255B"},9564:{"value":"255C","name":"BOX DRAWINGS UP DOUBLE AND LEFT SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP DOUBLE AND LEFT SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u255C"},9565:{"value":"255D","name":"BOX DRAWINGS DOUBLE UP AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE UP AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u255D"},9566:{"value":"255E","name":"BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL SINGLE AND RIGHT DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u255E"},9567:{"value":"255F","name":"BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL DOUBLE AND RIGHT SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u255F"},9568:{"value":"2560","name":"BOX DRAWINGS DOUBLE VERTICAL AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE VERTICAL AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2560"},9569:{"value":"2561","name":"BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL SINGLE AND LEFT DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2561"},9570:{"value":"2562","name":"BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL DOUBLE AND LEFT SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2562"},9571:{"value":"2563","name":"BOX DRAWINGS DOUBLE VERTICAL AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE VERTICAL AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2563"},9572:{"value":"2564","name":"BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN SINGLE AND HORIZONTAL DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2564"},9573:{"value":"2565","name":"BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOWN DOUBLE AND HORIZONTAL SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2565"},9574:{"value":"2566","name":"BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE DOWN AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2566"},9575:{"value":"2567","name":"BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP SINGLE AND HORIZONTAL DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2567"},9576:{"value":"2568","name":"BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS UP DOUBLE AND HORIZONTAL SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2568"},9577:{"value":"2569","name":"BOX DRAWINGS DOUBLE UP AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE UP AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2569"},9578:{"value":"256A","name":"BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u256A"},9579:{"value":"256B","name":"BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u256B"},9580:{"value":"256C","name":"BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS DOUBLE VERTICAL AND HORIZONTAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u256C"},9581:{"value":"256D","name":"BOX DRAWINGS LIGHT ARC DOWN AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT ARC DOWN AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u256D"},9582:{"value":"256E","name":"BOX DRAWINGS LIGHT ARC DOWN AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT ARC DOWN AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u256E"},9583:{"value":"256F","name":"BOX DRAWINGS LIGHT ARC UP AND LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT ARC UP AND LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u256F"},9584:{"value":"2570","name":"BOX DRAWINGS LIGHT ARC UP AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT ARC UP AND RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2570"},9585:{"value":"2571","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2571"},9586:{"value":"2572","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2572"},9587:{"value":"2573","name":"BOX DRAWINGS LIGHT DIAGONAL CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DIAGONAL CROSS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2573"},9588:{"value":"2574","name":"BOX DRAWINGS LIGHT LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2574"},9589:{"value":"2575","name":"BOX DRAWINGS LIGHT UP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT UP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2575"},9590:{"value":"2576","name":"BOX DRAWINGS LIGHT RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2576"},9591:{"value":"2577","name":"BOX DRAWINGS LIGHT DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2577"},9592:{"value":"2578","name":"BOX DRAWINGS HEAVY LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY LEFT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2578"},9593:{"value":"2579","name":"BOX DRAWINGS HEAVY UP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY UP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2579"},9594:{"value":"257A","name":"BOX DRAWINGS HEAVY RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u257A"},9595:{"value":"257B","name":"BOX DRAWINGS HEAVY DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u257B"},9596:{"value":"257C","name":"BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT LEFT AND HEAVY RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u257C"},9597:{"value":"257D","name":"BOX DRAWINGS LIGHT UP AND HEAVY DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS LIGHT UP AND HEAVY DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u257D"},9598:{"value":"257E","name":"BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY LEFT AND LIGHT RIGHT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u257E"},9599:{"value":"257F","name":"BOX DRAWINGS HEAVY UP AND LIGHT DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FORMS HEAVY UP AND LIGHT DOWN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u257F"},9600:{"value":"2580","name":"UPPER HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2580"},9601:{"value":"2581","name":"LOWER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2581"},9602:{"value":"2582","name":"LOWER ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2582"},9603:{"value":"2583","name":"LOWER THREE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2583"},9604:{"value":"2584","name":"LOWER HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2584"},9605:{"value":"2585","name":"LOWER FIVE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2585"},9606:{"value":"2586","name":"LOWER THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LOWER THREE QUARTER BLOCK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2586"},9607:{"value":"2587","name":"LOWER SEVEN EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2587"},9608:{"value":"2588","name":"FULL BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2588"},9609:{"value":"2589","name":"LEFT SEVEN EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2589"},9610:{"value":"258A","name":"LEFT THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT THREE QUARTER BLOCK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u258A"},9611:{"value":"258B","name":"LEFT FIVE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u258B"},9612:{"value":"258C","name":"LEFT HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u258C"},9613:{"value":"258D","name":"LEFT THREE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u258D"},9614:{"value":"258E","name":"LEFT ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u258E"},9615:{"value":"258F","name":"LEFT ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u258F"},9616:{"value":"2590","name":"RIGHT HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2590"},9617:{"value":"2591","name":"LIGHT SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2591"},9618:{"value":"2592","name":"MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2592"},9619:{"value":"2593","name":"DARK SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2593"},9620:{"value":"2594","name":"UPPER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2594"},9621:{"value":"2595","name":"RIGHT ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2595"},9622:{"value":"2596","name":"QUADRANT LOWER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2596"},9623:{"value":"2597","name":"QUADRANT LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2597"},9624:{"value":"2598","name":"QUADRANT UPPER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2598"},9625:{"value":"2599","name":"QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2599"},9626:{"value":"259A","name":"QUADRANT UPPER LEFT AND LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u259A"},9627:{"value":"259B","name":"QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u259B"},9628:{"value":"259C","name":"QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u259C"},9629:{"value":"259D","name":"QUADRANT UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u259D"},9630:{"value":"259E","name":"QUADRANT UPPER RIGHT AND LOWER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u259E"},9631:{"value":"259F","name":"QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u259F"},9632:{"value":"25A0","name":"BLACK SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A0"},9633:{"value":"25A1","name":"WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A1"},9634:{"value":"25A2","name":"WHITE SQUARE WITH ROUNDED CORNERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A2"},9635:{"value":"25A3","name":"WHITE SQUARE CONTAINING BLACK SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A3"},9636:{"value":"25A4","name":"SQUARE WITH HORIZONTAL FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A4"},9637:{"value":"25A5","name":"SQUARE WITH VERTICAL FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A5"},9638:{"value":"25A6","name":"SQUARE WITH ORTHOGONAL CROSSHATCH FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A6"},9639:{"value":"25A7","name":"SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A7"},9640:{"value":"25A8","name":"SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A8"},9641:{"value":"25A9","name":"SQUARE WITH DIAGONAL CROSSHATCH FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25A9"},9642:{"value":"25AA","name":"BLACK SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25AA"},9643:{"value":"25AB","name":"WHITE SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25AB"},9644:{"value":"25AC","name":"BLACK RECTANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25AC"},9645:{"value":"25AD","name":"WHITE RECTANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25AD"},9646:{"value":"25AE","name":"BLACK VERTICAL RECTANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25AE"},9647:{"value":"25AF","name":"WHITE VERTICAL RECTANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25AF"},9648:{"value":"25B0","name":"BLACK PARALLELOGRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B0"},9649:{"value":"25B1","name":"WHITE PARALLELOGRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B1"},9650:{"value":"25B2","name":"BLACK UP-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK UP POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B2"},9651:{"value":"25B3","name":"WHITE UP-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE UP POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B3"},9652:{"value":"25B4","name":"BLACK UP-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK UP POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B4"},9653:{"value":"25B5","name":"WHITE UP-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE UP POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B5"},9654:{"value":"25B6","name":"BLACK RIGHT-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK RIGHT POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B6"},9656:{"value":"25B8","name":"BLACK RIGHT-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK RIGHT POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B8"},9657:{"value":"25B9","name":"WHITE RIGHT-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE RIGHT POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25B9"},9658:{"value":"25BA","name":"BLACK RIGHT-POINTING POINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK RIGHT POINTING POINTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25BA"},9659:{"value":"25BB","name":"WHITE RIGHT-POINTING POINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE RIGHT POINTING POINTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25BB"},9660:{"value":"25BC","name":"BLACK DOWN-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK DOWN POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25BC"},9661:{"value":"25BD","name":"WHITE DOWN-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE DOWN POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25BD"},9662:{"value":"25BE","name":"BLACK DOWN-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK DOWN POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25BE"},9663:{"value":"25BF","name":"WHITE DOWN-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE DOWN POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25BF"},9664:{"value":"25C0","name":"BLACK LEFT-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK LEFT POINTING TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C0"},9666:{"value":"25C2","name":"BLACK LEFT-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK LEFT POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C2"},9667:{"value":"25C3","name":"WHITE LEFT-POINTING SMALL TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE LEFT POINTING SMALL TRIANGLE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C3"},9668:{"value":"25C4","name":"BLACK LEFT-POINTING POINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK LEFT POINTING POINTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C4"},9669:{"value":"25C5","name":"WHITE LEFT-POINTING POINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE LEFT POINTING POINTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C5"},9670:{"value":"25C6","name":"BLACK DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C6"},9671:{"value":"25C7","name":"WHITE DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C7"},9672:{"value":"25C8","name":"WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C8"},9673:{"value":"25C9","name":"FISHEYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25C9"},9674:{"value":"25CA","name":"LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25CA"},9675:{"value":"25CB","name":"WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25CB"},9676:{"value":"25CC","name":"DOTTED CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25CC"},9677:{"value":"25CD","name":"CIRCLE WITH VERTICAL FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25CD"},9678:{"value":"25CE","name":"BULLSEYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25CE"},9679:{"value":"25CF","name":"BLACK CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25CF"},9680:{"value":"25D0","name":"CIRCLE WITH LEFT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D0"},9681:{"value":"25D1","name":"CIRCLE WITH RIGHT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D1"},9682:{"value":"25D2","name":"CIRCLE WITH LOWER HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D2"},9683:{"value":"25D3","name":"CIRCLE WITH UPPER HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D3"},9684:{"value":"25D4","name":"CIRCLE WITH UPPER RIGHT QUADRANT BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D4"},9685:{"value":"25D5","name":"CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D5"},9686:{"value":"25D6","name":"LEFT HALF BLACK CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D6"},9687:{"value":"25D7","name":"RIGHT HALF BLACK CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D7"},9688:{"value":"25D8","name":"INVERSE BULLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D8"},9689:{"value":"25D9","name":"INVERSE WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25D9"},9690:{"value":"25DA","name":"UPPER HALF INVERSE WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25DA"},9691:{"value":"25DB","name":"LOWER HALF INVERSE WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25DB"},9692:{"value":"25DC","name":"UPPER LEFT QUADRANT CIRCULAR ARC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25DC"},9693:{"value":"25DD","name":"UPPER RIGHT QUADRANT CIRCULAR ARC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25DD"},9694:{"value":"25DE","name":"LOWER RIGHT QUADRANT CIRCULAR ARC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25DE"},9695:{"value":"25DF","name":"LOWER LEFT QUADRANT CIRCULAR ARC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25DF"},9696:{"value":"25E0","name":"UPPER HALF CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E0"},9697:{"value":"25E1","name":"LOWER HALF CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E1"},9698:{"value":"25E2","name":"BLACK LOWER RIGHT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E2"},9699:{"value":"25E3","name":"BLACK LOWER LEFT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E3"},9700:{"value":"25E4","name":"BLACK UPPER LEFT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E4"},9701:{"value":"25E5","name":"BLACK UPPER RIGHT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E5"},9702:{"value":"25E6","name":"WHITE BULLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E6"},9703:{"value":"25E7","name":"SQUARE WITH LEFT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E7"},9704:{"value":"25E8","name":"SQUARE WITH RIGHT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E8"},9705:{"value":"25E9","name":"SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25E9"},9706:{"value":"25EA","name":"SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25EA"},9707:{"value":"25EB","name":"WHITE SQUARE WITH VERTICAL BISECTING LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25EB"},9708:{"value":"25EC","name":"WHITE UP-POINTING TRIANGLE WITH DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE UP POINTING TRIANGLE WITH DOT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25EC"},9709:{"value":"25ED","name":"UP-POINTING TRIANGLE WITH LEFT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP POINTING TRIANGLE WITH LEFT HALF BLACK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25ED"},9710:{"value":"25EE","name":"UP-POINTING TRIANGLE WITH RIGHT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"UP POINTING TRIANGLE WITH RIGHT HALF BLACK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25EE"},9711:{"value":"25EF","name":"LARGE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25EF"},9712:{"value":"25F0","name":"WHITE SQUARE WITH UPPER LEFT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F0"},9713:{"value":"25F1","name":"WHITE SQUARE WITH LOWER LEFT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F1"},9714:{"value":"25F2","name":"WHITE SQUARE WITH LOWER RIGHT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F2"},9715:{"value":"25F3","name":"WHITE SQUARE WITH UPPER RIGHT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F3"},9716:{"value":"25F4","name":"WHITE CIRCLE WITH UPPER LEFT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F4"},9717:{"value":"25F5","name":"WHITE CIRCLE WITH LOWER LEFT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F5"},9718:{"value":"25F6","name":"WHITE CIRCLE WITH LOWER RIGHT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F6"},9719:{"value":"25F7","name":"WHITE CIRCLE WITH UPPER RIGHT QUADRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u25F7"},9728:{"value":"2600","name":"BLACK SUN WITH RAYS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2600"},9729:{"value":"2601","name":"CLOUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2601"},9730:{"value":"2602","name":"UMBRELLA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2602"},9731:{"value":"2603","name":"SNOWMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2603"},9732:{"value":"2604","name":"COMET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2604"},9733:{"value":"2605","name":"BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2605"},9734:{"value":"2606","name":"WHITE STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2606"},9735:{"value":"2607","name":"LIGHTNING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2607"},9736:{"value":"2608","name":"THUNDERSTORM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2608"},9737:{"value":"2609","name":"SUN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2609"},9738:{"value":"260A","name":"ASCENDING NODE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u260A"},9739:{"value":"260B","name":"DESCENDING NODE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u260B"},9740:{"value":"260C","name":"CONJUNCTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u260C"},9741:{"value":"260D","name":"OPPOSITION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u260D"},9742:{"value":"260E","name":"BLACK TELEPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u260E"},9743:{"value":"260F","name":"WHITE TELEPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u260F"},9744:{"value":"2610","name":"BALLOT BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2610"},9745:{"value":"2611","name":"BALLOT BOX WITH CHECK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2611"},9746:{"value":"2612","name":"BALLOT BOX WITH X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2612"},9747:{"value":"2613","name":"SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2613"},9748:{"value":"2614","name":"UMBRELLA WITH RAIN DROPS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2614"},9749:{"value":"2615","name":"HOT BEVERAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2615"},9750:{"value":"2616","name":"WHITE SHOGI PIECE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2616"},9751:{"value":"2617","name":"BLACK SHOGI PIECE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2617"},9752:{"value":"2618","name":"SHAMROCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2618"},9753:{"value":"2619","name":"REVERSED ROTATED FLORAL HEART BULLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2619"},9754:{"value":"261A","name":"BLACK LEFT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u261A"},9755:{"value":"261B","name":"BLACK RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u261B"},9756:{"value":"261C","name":"WHITE LEFT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u261C"},9757:{"value":"261D","name":"WHITE UP POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u261D"},9758:{"value":"261E","name":"WHITE RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u261E"},9759:{"value":"261F","name":"WHITE DOWN POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u261F"},9760:{"value":"2620","name":"SKULL AND CROSSBONES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2620"},9761:{"value":"2621","name":"CAUTION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2621"},9762:{"value":"2622","name":"RADIOACTIVE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2622"},9763:{"value":"2623","name":"BIOHAZARD SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2623"},9764:{"value":"2624","name":"CADUCEUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2624"},9765:{"value":"2625","name":"ANKH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2625"},9766:{"value":"2626","name":"ORTHODOX CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2626"},9767:{"value":"2627","name":"CHI RHO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2627"},9768:{"value":"2628","name":"CROSS OF LORRAINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2628"},9769:{"value":"2629","name":"CROSS OF JERUSALEM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2629"},9770:{"value":"262A","name":"STAR AND CRESCENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u262A"},9771:{"value":"262B","name":"FARSI SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SYMBOL OF IRAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u262B"},9772:{"value":"262C","name":"ADI SHAKTI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u262C"},9773:{"value":"262D","name":"HAMMER AND SICKLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u262D"},9774:{"value":"262E","name":"PEACE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u262E"},9775:{"value":"262F","name":"YIN YANG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u262F"},9776:{"value":"2630","name":"TRIGRAM FOR HEAVEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2630"},9777:{"value":"2631","name":"TRIGRAM FOR LAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2631"},9778:{"value":"2632","name":"TRIGRAM FOR FIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2632"},9779:{"value":"2633","name":"TRIGRAM FOR THUNDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2633"},9780:{"value":"2634","name":"TRIGRAM FOR WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2634"},9781:{"value":"2635","name":"TRIGRAM FOR WATER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2635"},9782:{"value":"2636","name":"TRIGRAM FOR MOUNTAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2636"},9783:{"value":"2637","name":"TRIGRAM FOR EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2637"},9784:{"value":"2638","name":"WHEEL OF DHARMA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2638"},9785:{"value":"2639","name":"WHITE FROWNING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2639"},9786:{"value":"263A","name":"WHITE SMILING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u263A"},9787:{"value":"263B","name":"BLACK SMILING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u263B"},9788:{"value":"263C","name":"WHITE SUN WITH RAYS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u263C"},9789:{"value":"263D","name":"FIRST QUARTER MOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u263D"},9790:{"value":"263E","name":"LAST QUARTER MOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u263E"},9791:{"value":"263F","name":"MERCURY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u263F"},9792:{"value":"2640","name":"FEMALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2640"},9793:{"value":"2641","name":"EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2641"},9794:{"value":"2642","name":"MALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2642"},9795:{"value":"2643","name":"JUPITER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2643"},9796:{"value":"2644","name":"SATURN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2644"},9797:{"value":"2645","name":"URANUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2645"},9798:{"value":"2646","name":"NEPTUNE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2646"},9799:{"value":"2647","name":"PLUTO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2647"},9800:{"value":"2648","name":"ARIES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2648"},9801:{"value":"2649","name":"TAURUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2649"},9802:{"value":"264A","name":"GEMINI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u264A"},9803:{"value":"264B","name":"CANCER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u264B"},9804:{"value":"264C","name":"LEO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u264C"},9805:{"value":"264D","name":"VIRGO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u264D"},9806:{"value":"264E","name":"LIBRA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u264E"},9807:{"value":"264F","name":"SCORPIUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u264F"},9808:{"value":"2650","name":"SAGITTARIUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2650"},9809:{"value":"2651","name":"CAPRICORN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2651"},9810:{"value":"2652","name":"AQUARIUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2652"},9811:{"value":"2653","name":"PISCES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2653"},9812:{"value":"2654","name":"WHITE CHESS KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2654"},9813:{"value":"2655","name":"WHITE CHESS QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2655"},9814:{"value":"2656","name":"WHITE CHESS ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2656"},9815:{"value":"2657","name":"WHITE CHESS BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2657"},9816:{"value":"2658","name":"WHITE CHESS KNIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2658"},9817:{"value":"2659","name":"WHITE CHESS PAWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2659"},9818:{"value":"265A","name":"BLACK CHESS KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u265A"},9819:{"value":"265B","name":"BLACK CHESS QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u265B"},9820:{"value":"265C","name":"BLACK CHESS ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u265C"},9821:{"value":"265D","name":"BLACK CHESS BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u265D"},9822:{"value":"265E","name":"BLACK CHESS KNIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u265E"},9823:{"value":"265F","name":"BLACK CHESS PAWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u265F"},9824:{"value":"2660","name":"BLACK SPADE SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2660"},9825:{"value":"2661","name":"WHITE HEART SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2661"},9826:{"value":"2662","name":"WHITE DIAMOND SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2662"},9827:{"value":"2663","name":"BLACK CLUB SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2663"},9828:{"value":"2664","name":"WHITE SPADE SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2664"},9829:{"value":"2665","name":"BLACK HEART SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2665"},9830:{"value":"2666","name":"BLACK DIAMOND SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2666"},9831:{"value":"2667","name":"WHITE CLUB SUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2667"},9832:{"value":"2668","name":"HOT SPRINGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2668"},9833:{"value":"2669","name":"QUARTER NOTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2669"},9834:{"value":"266A","name":"EIGHTH NOTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u266A"},9835:{"value":"266B","name":"BEAMED EIGHTH NOTES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BARRED EIGHTH NOTES","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u266B"},9836:{"value":"266C","name":"BEAMED SIXTEENTH NOTES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BARRED SIXTEENTH NOTES","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u266C"},9837:{"value":"266D","name":"MUSIC FLAT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FLAT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u266D"},9838:{"value":"266E","name":"MUSIC NATURAL SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NATURAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u266E"},9840:{"value":"2670","name":"WEST SYRIAC CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2670"},9841:{"value":"2671","name":"EAST SYRIAC CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2671"},9842:{"value":"2672","name":"UNIVERSAL RECYCLING SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2672"},9843:{"value":"2673","name":"RECYCLING SYMBOL FOR TYPE-1 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2673"},9844:{"value":"2674","name":"RECYCLING SYMBOL FOR TYPE-2 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2674"},9845:{"value":"2675","name":"RECYCLING SYMBOL FOR TYPE-3 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2675"},9846:{"value":"2676","name":"RECYCLING SYMBOL FOR TYPE-4 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2676"},9847:{"value":"2677","name":"RECYCLING SYMBOL FOR TYPE-5 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2677"},9848:{"value":"2678","name":"RECYCLING SYMBOL FOR TYPE-6 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2678"},9849:{"value":"2679","name":"RECYCLING SYMBOL FOR TYPE-7 PLASTICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2679"},9850:{"value":"267A","name":"RECYCLING SYMBOL FOR GENERIC MATERIALS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u267A"},9851:{"value":"267B","name":"BLACK UNIVERSAL RECYCLING SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u267B"},9852:{"value":"267C","name":"RECYCLED PAPER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u267C"},9853:{"value":"267D","name":"PARTIALLY-RECYCLED PAPER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u267D"},9854:{"value":"267E","name":"PERMANENT PAPER SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u267E"},9855:{"value":"267F","name":"WHEELCHAIR SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u267F"},9856:{"value":"2680","name":"DIE FACE-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2680"},9857:{"value":"2681","name":"DIE FACE-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2681"},9858:{"value":"2682","name":"DIE FACE-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2682"},9859:{"value":"2683","name":"DIE FACE-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2683"},9860:{"value":"2684","name":"DIE FACE-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2684"},9861:{"value":"2685","name":"DIE FACE-6","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2685"},9862:{"value":"2686","name":"WHITE CIRCLE WITH DOT RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2686"},9863:{"value":"2687","name":"WHITE CIRCLE WITH TWO DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2687"},9864:{"value":"2688","name":"BLACK CIRCLE WITH WHITE DOT RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2688"},9865:{"value":"2689","name":"BLACK CIRCLE WITH TWO WHITE DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2689"},9866:{"value":"268A","name":"MONOGRAM FOR YANG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u268A"},9867:{"value":"268B","name":"MONOGRAM FOR YIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u268B"},9868:{"value":"268C","name":"DIGRAM FOR GREATER YANG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u268C"},9869:{"value":"268D","name":"DIGRAM FOR LESSER YIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u268D"},9870:{"value":"268E","name":"DIGRAM FOR LESSER YANG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u268E"},9871:{"value":"268F","name":"DIGRAM FOR GREATER YIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u268F"},9872:{"value":"2690","name":"WHITE FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2690"},9873:{"value":"2691","name":"BLACK FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2691"},9874:{"value":"2692","name":"HAMMER AND PICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2692"},9875:{"value":"2693","name":"ANCHOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2693"},9876:{"value":"2694","name":"CROSSED SWORDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2694"},9877:{"value":"2695","name":"STAFF OF AESCULAPIUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2695"},9878:{"value":"2696","name":"SCALES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2696"},9879:{"value":"2697","name":"ALEMBIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2697"},9880:{"value":"2698","name":"FLOWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2698"},9881:{"value":"2699","name":"GEAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2699"},9882:{"value":"269A","name":"STAFF OF HERMES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u269A"},9883:{"value":"269B","name":"ATOM SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u269B"},9884:{"value":"269C","name":"FLEUR-DE-LIS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u269C"},9885:{"value":"269D","name":"OUTLINED WHITE STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u269D"},9886:{"value":"269E","name":"THREE LINES CONVERGING RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u269E"},9887:{"value":"269F","name":"THREE LINES CONVERGING LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u269F"},9888:{"value":"26A0","name":"WARNING SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A0"},9889:{"value":"26A1","name":"HIGH VOLTAGE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A1"},9890:{"value":"26A2","name":"DOUBLED FEMALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A2"},9891:{"value":"26A3","name":"DOUBLED MALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A3"},9892:{"value":"26A4","name":"INTERLOCKED FEMALE AND MALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A4"},9893:{"value":"26A5","name":"MALE AND FEMALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A5"},9894:{"value":"26A6","name":"MALE WITH STROKE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A6"},9895:{"value":"26A7","name":"MALE WITH STROKE AND MALE AND FEMALE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A7"},9896:{"value":"26A8","name":"VERTICAL MALE WITH STROKE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A8"},9897:{"value":"26A9","name":"HORIZONTAL MALE WITH STROKE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26A9"},9898:{"value":"26AA","name":"MEDIUM WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26AA"},9899:{"value":"26AB","name":"MEDIUM BLACK CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26AB"},9900:{"value":"26AC","name":"MEDIUM SMALL WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26AC"},9901:{"value":"26AD","name":"MARRIAGE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26AD"},9902:{"value":"26AE","name":"DIVORCE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26AE"},9903:{"value":"26AF","name":"UNMARRIED PARTNERSHIP SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26AF"},9904:{"value":"26B0","name":"COFFIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B0"},9905:{"value":"26B1","name":"FUNERAL URN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B1"},9906:{"value":"26B2","name":"NEUTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B2"},9907:{"value":"26B3","name":"CERES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B3"},9908:{"value":"26B4","name":"PALLAS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B4"},9909:{"value":"26B5","name":"JUNO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B5"},9910:{"value":"26B6","name":"VESTA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B6"},9911:{"value":"26B7","name":"CHIRON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B7"},9912:{"value":"26B8","name":"BLACK MOON LILITH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B8"},9913:{"value":"26B9","name":"SEXTILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26B9"},9914:{"value":"26BA","name":"SEMISEXTILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26BA"},9915:{"value":"26BB","name":"QUINCUNX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26BB"},9916:{"value":"26BC","name":"SESQUIQUADRATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26BC"},9917:{"value":"26BD","name":"SOCCER BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26BD"},9918:{"value":"26BE","name":"BASEBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26BE"},9919:{"value":"26BF","name":"SQUARED KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26BF"},9920:{"value":"26C0","name":"WHITE DRAUGHTS MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C0"},9921:{"value":"26C1","name":"WHITE DRAUGHTS KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C1"},9922:{"value":"26C2","name":"BLACK DRAUGHTS MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C2"},9923:{"value":"26C3","name":"BLACK DRAUGHTS KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C3"},9924:{"value":"26C4","name":"SNOWMAN WITHOUT SNOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C4"},9925:{"value":"26C5","name":"SUN BEHIND CLOUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C5"},9926:{"value":"26C6","name":"RAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C6"},9927:{"value":"26C7","name":"BLACK SNOWMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C7"},9928:{"value":"26C8","name":"THUNDER CLOUD AND RAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C8"},9929:{"value":"26C9","name":"TURNED WHITE SHOGI PIECE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26C9"},9930:{"value":"26CA","name":"TURNED BLACK SHOGI PIECE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26CA"},9931:{"value":"26CB","name":"WHITE DIAMOND IN SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26CB"},9932:{"value":"26CC","name":"CROSSING LANES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26CC"},9933:{"value":"26CD","name":"DISABLED CAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26CD"},9934:{"value":"26CE","name":"OPHIUCHUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26CE"},9935:{"value":"26CF","name":"PICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26CF"},9936:{"value":"26D0","name":"CAR SLIDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D0"},9937:{"value":"26D1","name":"HELMET WITH WHITE CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D1"},9938:{"value":"26D2","name":"CIRCLED CROSSING LANES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D2"},9939:{"value":"26D3","name":"CHAINS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D3"},9940:{"value":"26D4","name":"NO ENTRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D4"},9941:{"value":"26D5","name":"ALTERNATE ONE-WAY LEFT WAY TRAFFIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D5"},9942:{"value":"26D6","name":"BLACK TWO-WAY LEFT WAY TRAFFIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D6"},9943:{"value":"26D7","name":"WHITE TWO-WAY LEFT WAY TRAFFIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D7"},9944:{"value":"26D8","name":"BLACK LEFT LANE MERGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D8"},9945:{"value":"26D9","name":"WHITE LEFT LANE MERGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26D9"},9946:{"value":"26DA","name":"DRIVE SLOW SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26DA"},9947:{"value":"26DB","name":"HEAVY WHITE DOWN-POINTING TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26DB"},9948:{"value":"26DC","name":"LEFT CLOSED ENTRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26DC"},9949:{"value":"26DD","name":"SQUARED SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26DD"},9950:{"value":"26DE","name":"FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26DE"},9951:{"value":"26DF","name":"BLACK TRUCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26DF"},9952:{"value":"26E0","name":"RESTRICTED LEFT ENTRY-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E0"},9953:{"value":"26E1","name":"RESTRICTED LEFT ENTRY-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E1"},9954:{"value":"26E2","name":"ASTRONOMICAL SYMBOL FOR URANUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E2"},9955:{"value":"26E3","name":"HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E3"},9956:{"value":"26E4","name":"PENTAGRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E4"},9957:{"value":"26E5","name":"RIGHT-HANDED INTERLACED PENTAGRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E5"},9958:{"value":"26E6","name":"LEFT-HANDED INTERLACED PENTAGRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E6"},9959:{"value":"26E7","name":"INVERTED PENTAGRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E7"},9960:{"value":"26E8","name":"BLACK CROSS ON SHIELD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E8"},9961:{"value":"26E9","name":"SHINTO SHRINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26E9"},9962:{"value":"26EA","name":"CHURCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26EA"},9963:{"value":"26EB","name":"CASTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26EB"},9964:{"value":"26EC","name":"HISTORIC SITE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26EC"},9965:{"value":"26ED","name":"GEAR WITHOUT HUB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26ED"},9966:{"value":"26EE","name":"GEAR WITH HANDLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26EE"},9967:{"value":"26EF","name":"MAP SYMBOL FOR LIGHTHOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26EF"},9968:{"value":"26F0","name":"MOUNTAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F0"},9969:{"value":"26F1","name":"UMBRELLA ON GROUND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F1"},9970:{"value":"26F2","name":"FOUNTAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F2"},9971:{"value":"26F3","name":"FLAG IN HOLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F3"},9972:{"value":"26F4","name":"FERRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F4"},9973:{"value":"26F5","name":"SAILBOAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F5"},9974:{"value":"26F6","name":"SQUARE FOUR CORNERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F6"},9975:{"value":"26F7","name":"SKIER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F7"},9976:{"value":"26F8","name":"ICE SKATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F8"},9977:{"value":"26F9","name":"PERSON WITH BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26F9"},9978:{"value":"26FA","name":"TENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26FA"},9979:{"value":"26FB","name":"JAPANESE BANK SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26FB"},9980:{"value":"26FC","name":"HEADSTONE GRAVEYARD SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26FC"},9981:{"value":"26FD","name":"FUEL PUMP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26FD"},9982:{"value":"26FE","name":"CUP ON BLACK SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26FE"},9983:{"value":"26FF","name":"WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u26FF"},9984:{"value":"2700","name":"BLACK SAFETY SCISSORS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2700"},9985:{"value":"2701","name":"UPPER BLADE SCISSORS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2701"},9986:{"value":"2702","name":"BLACK SCISSORS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2702"},9987:{"value":"2703","name":"LOWER BLADE SCISSORS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2703"},9988:{"value":"2704","name":"WHITE SCISSORS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2704"},9989:{"value":"2705","name":"WHITE HEAVY CHECK MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2705"},9990:{"value":"2706","name":"TELEPHONE LOCATION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2706"},9991:{"value":"2707","name":"TAPE DRIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2707"},9992:{"value":"2708","name":"AIRPLANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2708"},9993:{"value":"2709","name":"ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2709"},9994:{"value":"270A","name":"RAISED FIST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u270A"},9995:{"value":"270B","name":"RAISED HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u270B"},9996:{"value":"270C","name":"VICTORY HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u270C"},9997:{"value":"270D","name":"WRITING HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u270D"},9998:{"value":"270E","name":"LOWER RIGHT PENCIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u270E"},9999:{"value":"270F","name":"PENCIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u270F"},10000:{"value":"2710","name":"UPPER RIGHT PENCIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2710"},10001:{"value":"2711","name":"WHITE NIB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2711"},10002:{"value":"2712","name":"BLACK NIB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2712"},10003:{"value":"2713","name":"CHECK MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2713"},10004:{"value":"2714","name":"HEAVY CHECK MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2714"},10005:{"value":"2715","name":"MULTIPLICATION X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2715"},10006:{"value":"2716","name":"HEAVY MULTIPLICATION X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2716"},10007:{"value":"2717","name":"BALLOT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2717"},10008:{"value":"2718","name":"HEAVY BALLOT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2718"},10009:{"value":"2719","name":"OUTLINED GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2719"},10010:{"value":"271A","name":"HEAVY GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u271A"},10011:{"value":"271B","name":"OPEN CENTRE CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OPEN CENTER CROSS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u271B"},10012:{"value":"271C","name":"HEAVY OPEN CENTRE CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY OPEN CENTER CROSS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u271C"},10013:{"value":"271D","name":"LATIN CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u271D"},10014:{"value":"271E","name":"SHADOWED WHITE LATIN CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u271E"},10015:{"value":"271F","name":"OUTLINED LATIN CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u271F"},10016:{"value":"2720","name":"MALTESE CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2720"},10017:{"value":"2721","name":"STAR OF DAVID","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2721"},10018:{"value":"2722","name":"FOUR TEARDROP-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2722"},10019:{"value":"2723","name":"FOUR BALLOON-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2723"},10020:{"value":"2724","name":"HEAVY FOUR BALLOON-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2724"},10021:{"value":"2725","name":"FOUR CLUB-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2725"},10022:{"value":"2726","name":"BLACK FOUR POINTED STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2726"},10023:{"value":"2727","name":"WHITE FOUR POINTED STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2727"},10024:{"value":"2728","name":"SPARKLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2728"},10025:{"value":"2729","name":"STRESS OUTLINED WHITE STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2729"},10026:{"value":"272A","name":"CIRCLED WHITE STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u272A"},10027:{"value":"272B","name":"OPEN CENTRE BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OPEN CENTER BLACK STAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u272B"},10028:{"value":"272C","name":"BLACK CENTRE WHITE STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK CENTER WHITE STAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u272C"},10029:{"value":"272D","name":"OUTLINED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u272D"},10030:{"value":"272E","name":"HEAVY OUTLINED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u272E"},10031:{"value":"272F","name":"PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u272F"},10032:{"value":"2730","name":"SHADOWED WHITE STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2730"},10033:{"value":"2731","name":"HEAVY ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2731"},10034:{"value":"2732","name":"OPEN CENTRE ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OPEN CENTER ASTERISK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2732"},10035:{"value":"2733","name":"EIGHT SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2733"},10036:{"value":"2734","name":"EIGHT POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2734"},10037:{"value":"2735","name":"EIGHT POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2735"},10038:{"value":"2736","name":"SIX POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2736"},10039:{"value":"2737","name":"EIGHT POINTED RECTILINEAR BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2737"},10040:{"value":"2738","name":"HEAVY EIGHT POINTED RECTILINEAR BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2738"},10041:{"value":"2739","name":"TWELVE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2739"},10042:{"value":"273A","name":"SIXTEEN POINTED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u273A"},10043:{"value":"273B","name":"TEARDROP-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u273B"},10044:{"value":"273C","name":"OPEN CENTRE TEARDROP-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OPEN CENTER TEARDROP-SPOKED ASTERISK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u273C"},10045:{"value":"273D","name":"HEAVY TEARDROP-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u273D"},10046:{"value":"273E","name":"SIX PETALLED BLACK AND WHITE FLORETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u273E"},10047:{"value":"273F","name":"BLACK FLORETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u273F"},10048:{"value":"2740","name":"WHITE FLORETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2740"},10049:{"value":"2741","name":"EIGHT PETALLED OUTLINED BLACK FLORETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2741"},10050:{"value":"2742","name":"CIRCLED OPEN CENTRE EIGHT POINTED STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED OPEN CENTER EIGHT POINTED STAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2742"},10051:{"value":"2743","name":"HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2743"},10052:{"value":"2744","name":"SNOWFLAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2744"},10053:{"value":"2745","name":"TIGHT TRIFOLIATE SNOWFLAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2745"},10054:{"value":"2746","name":"HEAVY CHEVRON SNOWFLAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2746"},10055:{"value":"2747","name":"SPARKLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2747"},10056:{"value":"2748","name":"HEAVY SPARKLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2748"},10057:{"value":"2749","name":"BALLOON-SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2749"},10058:{"value":"274A","name":"EIGHT TEARDROP-SPOKED PROPELLER ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u274A"},10059:{"value":"274B","name":"HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u274B"},10060:{"value":"274C","name":"CROSS MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u274C"},10061:{"value":"274D","name":"SHADOWED WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u274D"},10062:{"value":"274E","name":"NEGATIVE SQUARED CROSS MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u274E"},10063:{"value":"274F","name":"LOWER RIGHT DROP-SHADOWED WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u274F"},10064:{"value":"2750","name":"UPPER RIGHT DROP-SHADOWED WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2750"},10065:{"value":"2751","name":"LOWER RIGHT SHADOWED WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2751"},10066:{"value":"2752","name":"UPPER RIGHT SHADOWED WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2752"},10067:{"value":"2753","name":"BLACK QUESTION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2753"},10068:{"value":"2754","name":"WHITE QUESTION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2754"},10069:{"value":"2755","name":"WHITE EXCLAMATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2755"},10070:{"value":"2756","name":"BLACK DIAMOND MINUS WHITE X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2756"},10071:{"value":"2757","name":"HEAVY EXCLAMATION MARK SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2757"},10072:{"value":"2758","name":"LIGHT VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2758"},10073:{"value":"2759","name":"MEDIUM VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2759"},10074:{"value":"275A","name":"HEAVY VERTICAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u275A"},10075:{"value":"275B","name":"HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u275B"},10076:{"value":"275C","name":"HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u275C"},10077:{"value":"275D","name":"HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u275D"},10078:{"value":"275E","name":"HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u275E"},10079:{"value":"275F","name":"HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u275F"},10080:{"value":"2760","name":"HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2760"},10081:{"value":"2761","name":"CURVED STEM PARAGRAPH SIGN ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2761"},10082:{"value":"2762","name":"HEAVY EXCLAMATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2762"},10083:{"value":"2763","name":"HEAVY HEART EXCLAMATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2763"},10084:{"value":"2764","name":"HEAVY BLACK HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2764"},10085:{"value":"2765","name":"ROTATED HEAVY BLACK HEART BULLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2765"},10086:{"value":"2766","name":"FLORAL HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2766"},10087:{"value":"2767","name":"ROTATED FLORAL HEART BULLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2767"},10132:{"value":"2794","name":"HEAVY WIDE-HEADED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY WIDE-HEADED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2794"},10133:{"value":"2795","name":"HEAVY PLUS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2795"},10134:{"value":"2796","name":"HEAVY MINUS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2796"},10135:{"value":"2797","name":"HEAVY DIVISION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2797"},10136:{"value":"2798","name":"HEAVY SOUTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY LOWER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2798"},10137:{"value":"2799","name":"HEAVY RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2799"},10138:{"value":"279A","name":"HEAVY NORTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY UPPER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u279A"},10139:{"value":"279B","name":"DRAFTING POINT RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DRAFTING POINT RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u279B"},10140:{"value":"279C","name":"HEAVY ROUND-TIPPED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY ROUND-TIPPED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u279C"},10141:{"value":"279D","name":"TRIANGLE-HEADED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TRIANGLE-HEADED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u279D"},10142:{"value":"279E","name":"HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY TRIANGLE-HEADED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u279E"},10143:{"value":"279F","name":"DASHED TRIANGLE-HEADED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"DASHED TRIANGLE-HEADED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u279F"},10144:{"value":"27A0","name":"HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A0"},10145:{"value":"27A1","name":"BLACK RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A1"},10146:{"value":"27A2","name":"THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THREE-D TOP-LIGHTED RIGHT ARROWHEAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A2"},10147:{"value":"27A3","name":"THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A3"},10148:{"value":"27A4","name":"BLACK RIGHTWARDS ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK RIGHT ARROWHEAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A4"},10149:{"value":"27A5","name":"HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY BLACK CURVED DOWN AND RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A5"},10150:{"value":"27A6","name":"HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY BLACK CURVED UP AND RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A6"},10151:{"value":"27A7","name":"SQUAT BLACK RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUAT BLACK RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A7"},10152:{"value":"27A8","name":"HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY CONCAVE-POINTED BLACK RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A8"},10153:{"value":"27A9","name":"RIGHT-SHADED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"RIGHT-SHADED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27A9"},10154:{"value":"27AA","name":"LEFT-SHADED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"LEFT-SHADED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27AA"},10155:{"value":"27AB","name":"BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BACK-TILTED SHADOWED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27AB"},10156:{"value":"27AC","name":"FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FRONT-TILTED SHADOWED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27AC"},10157:{"value":"27AD","name":"HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27AD"},10158:{"value":"27AE","name":"HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27AE"},10159:{"value":"27AF","name":"NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27AF"},10160:{"value":"27B0","name":"CURLY LOOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B0"},10161:{"value":"27B1","name":"NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B1"},10162:{"value":"27B2","name":"CIRCLED HEAVY WHITE RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HEAVY WHITE RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B2"},10163:{"value":"27B3","name":"WHITE-FEATHERED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WHITE-FEATHERED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B3"},10164:{"value":"27B4","name":"BLACK-FEATHERED SOUTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-FEATHERED LOWER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B4"},10165:{"value":"27B5","name":"BLACK-FEATHERED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-FEATHERED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B5"},10166:{"value":"27B6","name":"BLACK-FEATHERED NORTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"BLACK-FEATHERED UPPER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B6"},10167:{"value":"27B7","name":"HEAVY BLACK-FEATHERED SOUTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY BLACK-FEATHERED LOWER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B7"},10168:{"value":"27B8","name":"HEAVY BLACK-FEATHERED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY BLACK-FEATHERED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B8"},10169:{"value":"27B9","name":"HEAVY BLACK-FEATHERED NORTH EAST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY BLACK-FEATHERED UPPER RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27B9"},10170:{"value":"27BA","name":"TEARDROP-BARBED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"TEARDROP-BARBED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27BA"},10171:{"value":"27BB","name":"HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY TEARDROP-SHANKED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27BB"},10172:{"value":"27BC","name":"WEDGE-TAILED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"WEDGE-TAILED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27BC"},10173:{"value":"27BD","name":"HEAVY WEDGE-TAILED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"HEAVY WEDGE-TAILED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27BD"},10174:{"value":"27BE","name":"OPEN-OUTLINED RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"OPEN-OUTLINED RIGHT ARROW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27BE"},10175:{"value":"27BF","name":"DOUBLE CURLY LOOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u27BF"},10240:{"value":"2800","name":"BRAILLE PATTERN BLANK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2800"},10241:{"value":"2801","name":"BRAILLE PATTERN DOTS-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2801"},10242:{"value":"2802","name":"BRAILLE PATTERN DOTS-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2802"},10243:{"value":"2803","name":"BRAILLE PATTERN DOTS-12","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2803"},10244:{"value":"2804","name":"BRAILLE PATTERN DOTS-3","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2804"},10245:{"value":"2805","name":"BRAILLE PATTERN DOTS-13","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2805"},10246:{"value":"2806","name":"BRAILLE PATTERN DOTS-23","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2806"},10247:{"value":"2807","name":"BRAILLE PATTERN DOTS-123","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2807"},10248:{"value":"2808","name":"BRAILLE PATTERN DOTS-4","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2808"},10249:{"value":"2809","name":"BRAILLE PATTERN DOTS-14","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2809"},10250:{"value":"280A","name":"BRAILLE PATTERN DOTS-24","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u280A"},10251:{"value":"280B","name":"BRAILLE PATTERN DOTS-124","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u280B"},10252:{"value":"280C","name":"BRAILLE PATTERN DOTS-34","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u280C"},10253:{"value":"280D","name":"BRAILLE PATTERN DOTS-134","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u280D"},10254:{"value":"280E","name":"BRAILLE PATTERN DOTS-234","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u280E"},10255:{"value":"280F","name":"BRAILLE PATTERN DOTS-1234","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u280F"},10256:{"value":"2810","name":"BRAILLE PATTERN DOTS-5","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2810"},10257:{"value":"2811","name":"BRAILLE PATTERN DOTS-15","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2811"},10258:{"value":"2812","name":"BRAILLE PATTERN DOTS-25","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2812"},10259:{"value":"2813","name":"BRAILLE PATTERN DOTS-125","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2813"},10260:{"value":"2814","name":"BRAILLE PATTERN DOTS-35","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2814"},10261:{"value":"2815","name":"BRAILLE PATTERN DOTS-135","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2815"},10262:{"value":"2816","name":"BRAILLE PATTERN DOTS-235","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2816"},10263:{"value":"2817","name":"BRAILLE PATTERN DOTS-1235","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2817"},10264:{"value":"2818","name":"BRAILLE PATTERN DOTS-45","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2818"},10265:{"value":"2819","name":"BRAILLE PATTERN DOTS-145","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2819"},10266:{"value":"281A","name":"BRAILLE PATTERN DOTS-245","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u281A"},10267:{"value":"281B","name":"BRAILLE PATTERN DOTS-1245","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u281B"},10268:{"value":"281C","name":"BRAILLE PATTERN DOTS-345","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u281C"},10269:{"value":"281D","name":"BRAILLE PATTERN DOTS-1345","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u281D"},10270:{"value":"281E","name":"BRAILLE PATTERN DOTS-2345","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u281E"},10271:{"value":"281F","name":"BRAILLE PATTERN DOTS-12345","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u281F"},10272:{"value":"2820","name":"BRAILLE PATTERN DOTS-6","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2820"},10273:{"value":"2821","name":"BRAILLE PATTERN DOTS-16","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2821"},10274:{"value":"2822","name":"BRAILLE PATTERN DOTS-26","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2822"},10275:{"value":"2823","name":"BRAILLE PATTERN DOTS-126","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2823"},10276:{"value":"2824","name":"BRAILLE PATTERN DOTS-36","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2824"},10277:{"value":"2825","name":"BRAILLE PATTERN DOTS-136","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2825"},10278:{"value":"2826","name":"BRAILLE PATTERN DOTS-236","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2826"},10279:{"value":"2827","name":"BRAILLE PATTERN DOTS-1236","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2827"},10280:{"value":"2828","name":"BRAILLE PATTERN DOTS-46","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2828"},10281:{"value":"2829","name":"BRAILLE PATTERN DOTS-146","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2829"},10282:{"value":"282A","name":"BRAILLE PATTERN DOTS-246","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u282A"},10283:{"value":"282B","name":"BRAILLE PATTERN DOTS-1246","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u282B"},10284:{"value":"282C","name":"BRAILLE PATTERN DOTS-346","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u282C"},10285:{"value":"282D","name":"BRAILLE PATTERN DOTS-1346","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u282D"},10286:{"value":"282E","name":"BRAILLE PATTERN DOTS-2346","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u282E"},10287:{"value":"282F","name":"BRAILLE PATTERN DOTS-12346","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u282F"},10288:{"value":"2830","name":"BRAILLE PATTERN DOTS-56","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2830"},10289:{"value":"2831","name":"BRAILLE PATTERN DOTS-156","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2831"},10290:{"value":"2832","name":"BRAILLE PATTERN DOTS-256","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2832"},10291:{"value":"2833","name":"BRAILLE PATTERN DOTS-1256","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2833"},10292:{"value":"2834","name":"BRAILLE PATTERN DOTS-356","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2834"},10293:{"value":"2835","name":"BRAILLE PATTERN DOTS-1356","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2835"},10294:{"value":"2836","name":"BRAILLE PATTERN DOTS-2356","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2836"},10295:{"value":"2837","name":"BRAILLE PATTERN DOTS-12356","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2837"},10296:{"value":"2838","name":"BRAILLE PATTERN DOTS-456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2838"},10297:{"value":"2839","name":"BRAILLE PATTERN DOTS-1456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2839"},10298:{"value":"283A","name":"BRAILLE PATTERN DOTS-2456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u283A"},10299:{"value":"283B","name":"BRAILLE PATTERN DOTS-12456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u283B"},10300:{"value":"283C","name":"BRAILLE PATTERN DOTS-3456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u283C"},10301:{"value":"283D","name":"BRAILLE PATTERN DOTS-13456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u283D"},10302:{"value":"283E","name":"BRAILLE PATTERN DOTS-23456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u283E"},10303:{"value":"283F","name":"BRAILLE PATTERN DOTS-123456","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u283F"},10304:{"value":"2840","name":"BRAILLE PATTERN DOTS-7","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2840"},10305:{"value":"2841","name":"BRAILLE PATTERN DOTS-17","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2841"},10306:{"value":"2842","name":"BRAILLE PATTERN DOTS-27","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2842"},10307:{"value":"2843","name":"BRAILLE PATTERN DOTS-127","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2843"},10308:{"value":"2844","name":"BRAILLE PATTERN DOTS-37","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2844"},10309:{"value":"2845","name":"BRAILLE PATTERN DOTS-137","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2845"},10310:{"value":"2846","name":"BRAILLE PATTERN DOTS-237","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2846"},10311:{"value":"2847","name":"BRAILLE PATTERN DOTS-1237","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2847"},10312:{"value":"2848","name":"BRAILLE PATTERN DOTS-47","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2848"},10313:{"value":"2849","name":"BRAILLE PATTERN DOTS-147","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2849"},10314:{"value":"284A","name":"BRAILLE PATTERN DOTS-247","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u284A"},10315:{"value":"284B","name":"BRAILLE PATTERN DOTS-1247","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u284B"},10316:{"value":"284C","name":"BRAILLE PATTERN DOTS-347","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u284C"},10317:{"value":"284D","name":"BRAILLE PATTERN DOTS-1347","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u284D"},10318:{"value":"284E","name":"BRAILLE PATTERN DOTS-2347","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u284E"},10319:{"value":"284F","name":"BRAILLE PATTERN DOTS-12347","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u284F"},10320:{"value":"2850","name":"BRAILLE PATTERN DOTS-57","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2850"},10321:{"value":"2851","name":"BRAILLE PATTERN DOTS-157","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2851"},10322:{"value":"2852","name":"BRAILLE PATTERN DOTS-257","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2852"},10323:{"value":"2853","name":"BRAILLE PATTERN DOTS-1257","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2853"},10324:{"value":"2854","name":"BRAILLE PATTERN DOTS-357","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2854"},10325:{"value":"2855","name":"BRAILLE PATTERN DOTS-1357","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2855"},10326:{"value":"2856","name":"BRAILLE PATTERN DOTS-2357","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2856"},10327:{"value":"2857","name":"BRAILLE PATTERN DOTS-12357","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2857"},10328:{"value":"2858","name":"BRAILLE PATTERN DOTS-457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2858"},10329:{"value":"2859","name":"BRAILLE PATTERN DOTS-1457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2859"},10330:{"value":"285A","name":"BRAILLE PATTERN DOTS-2457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u285A"},10331:{"value":"285B","name":"BRAILLE PATTERN DOTS-12457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u285B"},10332:{"value":"285C","name":"BRAILLE PATTERN DOTS-3457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u285C"},10333:{"value":"285D","name":"BRAILLE PATTERN DOTS-13457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u285D"},10334:{"value":"285E","name":"BRAILLE PATTERN DOTS-23457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u285E"},10335:{"value":"285F","name":"BRAILLE PATTERN DOTS-123457","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u285F"},10336:{"value":"2860","name":"BRAILLE PATTERN DOTS-67","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2860"},10337:{"value":"2861","name":"BRAILLE PATTERN DOTS-167","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2861"},10338:{"value":"2862","name":"BRAILLE PATTERN DOTS-267","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2862"},10339:{"value":"2863","name":"BRAILLE PATTERN DOTS-1267","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2863"},10340:{"value":"2864","name":"BRAILLE PATTERN DOTS-367","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2864"},10341:{"value":"2865","name":"BRAILLE PATTERN DOTS-1367","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2865"},10342:{"value":"2866","name":"BRAILLE PATTERN DOTS-2367","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2866"},10343:{"value":"2867","name":"BRAILLE PATTERN DOTS-12367","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2867"},10344:{"value":"2868","name":"BRAILLE PATTERN DOTS-467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2868"},10345:{"value":"2869","name":"BRAILLE PATTERN DOTS-1467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2869"},10346:{"value":"286A","name":"BRAILLE PATTERN DOTS-2467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u286A"},10347:{"value":"286B","name":"BRAILLE PATTERN DOTS-12467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u286B"},10348:{"value":"286C","name":"BRAILLE PATTERN DOTS-3467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u286C"},10349:{"value":"286D","name":"BRAILLE PATTERN DOTS-13467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u286D"},10350:{"value":"286E","name":"BRAILLE PATTERN DOTS-23467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u286E"},10351:{"value":"286F","name":"BRAILLE PATTERN DOTS-123467","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u286F"},10352:{"value":"2870","name":"BRAILLE PATTERN DOTS-567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2870"},10353:{"value":"2871","name":"BRAILLE PATTERN DOTS-1567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2871"},10354:{"value":"2872","name":"BRAILLE PATTERN DOTS-2567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2872"},10355:{"value":"2873","name":"BRAILLE PATTERN DOTS-12567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2873"},10356:{"value":"2874","name":"BRAILLE PATTERN DOTS-3567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2874"},10357:{"value":"2875","name":"BRAILLE PATTERN DOTS-13567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2875"},10358:{"value":"2876","name":"BRAILLE PATTERN DOTS-23567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2876"},10359:{"value":"2877","name":"BRAILLE PATTERN DOTS-123567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2877"},10360:{"value":"2878","name":"BRAILLE PATTERN DOTS-4567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2878"},10361:{"value":"2879","name":"BRAILLE PATTERN DOTS-14567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2879"},10362:{"value":"287A","name":"BRAILLE PATTERN DOTS-24567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u287A"},10363:{"value":"287B","name":"BRAILLE PATTERN DOTS-124567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u287B"},10364:{"value":"287C","name":"BRAILLE PATTERN DOTS-34567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u287C"},10365:{"value":"287D","name":"BRAILLE PATTERN DOTS-134567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u287D"},10366:{"value":"287E","name":"BRAILLE PATTERN DOTS-234567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u287E"},10367:{"value":"287F","name":"BRAILLE PATTERN DOTS-1234567","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u287F"},10368:{"value":"2880","name":"BRAILLE PATTERN DOTS-8","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2880"},10369:{"value":"2881","name":"BRAILLE PATTERN DOTS-18","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2881"},10370:{"value":"2882","name":"BRAILLE PATTERN DOTS-28","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2882"},10371:{"value":"2883","name":"BRAILLE PATTERN DOTS-128","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2883"},10372:{"value":"2884","name":"BRAILLE PATTERN DOTS-38","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2884"},10373:{"value":"2885","name":"BRAILLE PATTERN DOTS-138","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2885"},10374:{"value":"2886","name":"BRAILLE PATTERN DOTS-238","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2886"},10375:{"value":"2887","name":"BRAILLE PATTERN DOTS-1238","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2887"},10376:{"value":"2888","name":"BRAILLE PATTERN DOTS-48","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2888"},10377:{"value":"2889","name":"BRAILLE PATTERN DOTS-148","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2889"},10378:{"value":"288A","name":"BRAILLE PATTERN DOTS-248","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u288A"},10379:{"value":"288B","name":"BRAILLE PATTERN DOTS-1248","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u288B"},10380:{"value":"288C","name":"BRAILLE PATTERN DOTS-348","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u288C"},10381:{"value":"288D","name":"BRAILLE PATTERN DOTS-1348","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u288D"},10382:{"value":"288E","name":"BRAILLE PATTERN DOTS-2348","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u288E"},10383:{"value":"288F","name":"BRAILLE PATTERN DOTS-12348","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u288F"},10384:{"value":"2890","name":"BRAILLE PATTERN DOTS-58","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2890"},10385:{"value":"2891","name":"BRAILLE PATTERN DOTS-158","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2891"},10386:{"value":"2892","name":"BRAILLE PATTERN DOTS-258","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2892"},10387:{"value":"2893","name":"BRAILLE PATTERN DOTS-1258","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2893"},10388:{"value":"2894","name":"BRAILLE PATTERN DOTS-358","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2894"},10389:{"value":"2895","name":"BRAILLE PATTERN DOTS-1358","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2895"},10390:{"value":"2896","name":"BRAILLE PATTERN DOTS-2358","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2896"},10391:{"value":"2897","name":"BRAILLE PATTERN DOTS-12358","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2897"},10392:{"value":"2898","name":"BRAILLE PATTERN DOTS-458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2898"},10393:{"value":"2899","name":"BRAILLE PATTERN DOTS-1458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2899"},10394:{"value":"289A","name":"BRAILLE PATTERN DOTS-2458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u289A"},10395:{"value":"289B","name":"BRAILLE PATTERN DOTS-12458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u289B"},10396:{"value":"289C","name":"BRAILLE PATTERN DOTS-3458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u289C"},10397:{"value":"289D","name":"BRAILLE PATTERN DOTS-13458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u289D"},10398:{"value":"289E","name":"BRAILLE PATTERN DOTS-23458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u289E"},10399:{"value":"289F","name":"BRAILLE PATTERN DOTS-123458","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u289F"},10400:{"value":"28A0","name":"BRAILLE PATTERN DOTS-68","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A0"},10401:{"value":"28A1","name":"BRAILLE PATTERN DOTS-168","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A1"},10402:{"value":"28A2","name":"BRAILLE PATTERN DOTS-268","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A2"},10403:{"value":"28A3","name":"BRAILLE PATTERN DOTS-1268","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A3"},10404:{"value":"28A4","name":"BRAILLE PATTERN DOTS-368","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A4"},10405:{"value":"28A5","name":"BRAILLE PATTERN DOTS-1368","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A5"},10406:{"value":"28A6","name":"BRAILLE PATTERN DOTS-2368","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A6"},10407:{"value":"28A7","name":"BRAILLE PATTERN DOTS-12368","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A7"},10408:{"value":"28A8","name":"BRAILLE PATTERN DOTS-468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A8"},10409:{"value":"28A9","name":"BRAILLE PATTERN DOTS-1468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28A9"},10410:{"value":"28AA","name":"BRAILLE PATTERN DOTS-2468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28AA"},10411:{"value":"28AB","name":"BRAILLE PATTERN DOTS-12468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28AB"},10412:{"value":"28AC","name":"BRAILLE PATTERN DOTS-3468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28AC"},10413:{"value":"28AD","name":"BRAILLE PATTERN DOTS-13468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28AD"},10414:{"value":"28AE","name":"BRAILLE PATTERN DOTS-23468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28AE"},10415:{"value":"28AF","name":"BRAILLE PATTERN DOTS-123468","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28AF"},10416:{"value":"28B0","name":"BRAILLE PATTERN DOTS-568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B0"},10417:{"value":"28B1","name":"BRAILLE PATTERN DOTS-1568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B1"},10418:{"value":"28B2","name":"BRAILLE PATTERN DOTS-2568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B2"},10419:{"value":"28B3","name":"BRAILLE PATTERN DOTS-12568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B3"},10420:{"value":"28B4","name":"BRAILLE PATTERN DOTS-3568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B4"},10421:{"value":"28B5","name":"BRAILLE PATTERN DOTS-13568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B5"},10422:{"value":"28B6","name":"BRAILLE PATTERN DOTS-23568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B6"},10423:{"value":"28B7","name":"BRAILLE PATTERN DOTS-123568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B7"},10424:{"value":"28B8","name":"BRAILLE PATTERN DOTS-4568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B8"},10425:{"value":"28B9","name":"BRAILLE PATTERN DOTS-14568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28B9"},10426:{"value":"28BA","name":"BRAILLE PATTERN DOTS-24568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28BA"},10427:{"value":"28BB","name":"BRAILLE PATTERN DOTS-124568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28BB"},10428:{"value":"28BC","name":"BRAILLE PATTERN DOTS-34568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28BC"},10429:{"value":"28BD","name":"BRAILLE PATTERN DOTS-134568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28BD"},10430:{"value":"28BE","name":"BRAILLE PATTERN DOTS-234568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28BE"},10431:{"value":"28BF","name":"BRAILLE PATTERN DOTS-1234568","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28BF"},10432:{"value":"28C0","name":"BRAILLE PATTERN DOTS-78","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C0"},10433:{"value":"28C1","name":"BRAILLE PATTERN DOTS-178","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C1"},10434:{"value":"28C2","name":"BRAILLE PATTERN DOTS-278","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C2"},10435:{"value":"28C3","name":"BRAILLE PATTERN DOTS-1278","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C3"},10436:{"value":"28C4","name":"BRAILLE PATTERN DOTS-378","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C4"},10437:{"value":"28C5","name":"BRAILLE PATTERN DOTS-1378","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C5"},10438:{"value":"28C6","name":"BRAILLE PATTERN DOTS-2378","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C6"},10439:{"value":"28C7","name":"BRAILLE PATTERN DOTS-12378","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C7"},10440:{"value":"28C8","name":"BRAILLE PATTERN DOTS-478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C8"},10441:{"value":"28C9","name":"BRAILLE PATTERN DOTS-1478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28C9"},10442:{"value":"28CA","name":"BRAILLE PATTERN DOTS-2478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28CA"},10443:{"value":"28CB","name":"BRAILLE PATTERN DOTS-12478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28CB"},10444:{"value":"28CC","name":"BRAILLE PATTERN DOTS-3478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28CC"},10445:{"value":"28CD","name":"BRAILLE PATTERN DOTS-13478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28CD"},10446:{"value":"28CE","name":"BRAILLE PATTERN DOTS-23478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28CE"},10447:{"value":"28CF","name":"BRAILLE PATTERN DOTS-123478","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28CF"},10448:{"value":"28D0","name":"BRAILLE PATTERN DOTS-578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D0"},10449:{"value":"28D1","name":"BRAILLE PATTERN DOTS-1578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D1"},10450:{"value":"28D2","name":"BRAILLE PATTERN DOTS-2578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D2"},10451:{"value":"28D3","name":"BRAILLE PATTERN DOTS-12578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D3"},10452:{"value":"28D4","name":"BRAILLE PATTERN DOTS-3578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D4"},10453:{"value":"28D5","name":"BRAILLE PATTERN DOTS-13578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D5"},10454:{"value":"28D6","name":"BRAILLE PATTERN DOTS-23578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D6"},10455:{"value":"28D7","name":"BRAILLE PATTERN DOTS-123578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D7"},10456:{"value":"28D8","name":"BRAILLE PATTERN DOTS-4578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D8"},10457:{"value":"28D9","name":"BRAILLE PATTERN DOTS-14578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28D9"},10458:{"value":"28DA","name":"BRAILLE PATTERN DOTS-24578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28DA"},10459:{"value":"28DB","name":"BRAILLE PATTERN DOTS-124578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28DB"},10460:{"value":"28DC","name":"BRAILLE PATTERN DOTS-34578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28DC"},10461:{"value":"28DD","name":"BRAILLE PATTERN DOTS-134578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28DD"},10462:{"value":"28DE","name":"BRAILLE PATTERN DOTS-234578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28DE"},10463:{"value":"28DF","name":"BRAILLE PATTERN DOTS-1234578","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28DF"},10464:{"value":"28E0","name":"BRAILLE PATTERN DOTS-678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E0"},10465:{"value":"28E1","name":"BRAILLE PATTERN DOTS-1678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E1"},10466:{"value":"28E2","name":"BRAILLE PATTERN DOTS-2678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E2"},10467:{"value":"28E3","name":"BRAILLE PATTERN DOTS-12678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E3"},10468:{"value":"28E4","name":"BRAILLE PATTERN DOTS-3678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E4"},10469:{"value":"28E5","name":"BRAILLE PATTERN DOTS-13678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E5"},10470:{"value":"28E6","name":"BRAILLE PATTERN DOTS-23678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E6"},10471:{"value":"28E7","name":"BRAILLE PATTERN DOTS-123678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E7"},10472:{"value":"28E8","name":"BRAILLE PATTERN DOTS-4678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E8"},10473:{"value":"28E9","name":"BRAILLE PATTERN DOTS-14678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28E9"},10474:{"value":"28EA","name":"BRAILLE PATTERN DOTS-24678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28EA"},10475:{"value":"28EB","name":"BRAILLE PATTERN DOTS-124678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28EB"},10476:{"value":"28EC","name":"BRAILLE PATTERN DOTS-34678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28EC"},10477:{"value":"28ED","name":"BRAILLE PATTERN DOTS-134678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28ED"},10478:{"value":"28EE","name":"BRAILLE PATTERN DOTS-234678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28EE"},10479:{"value":"28EF","name":"BRAILLE PATTERN DOTS-1234678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28EF"},10480:{"value":"28F0","name":"BRAILLE PATTERN DOTS-5678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F0"},10481:{"value":"28F1","name":"BRAILLE PATTERN DOTS-15678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F1"},10482:{"value":"28F2","name":"BRAILLE PATTERN DOTS-25678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F2"},10483:{"value":"28F3","name":"BRAILLE PATTERN DOTS-125678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F3"},10484:{"value":"28F4","name":"BRAILLE PATTERN DOTS-35678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F4"},10485:{"value":"28F5","name":"BRAILLE PATTERN DOTS-135678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F5"},10486:{"value":"28F6","name":"BRAILLE PATTERN DOTS-235678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F6"},10487:{"value":"28F7","name":"BRAILLE PATTERN DOTS-1235678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F7"},10488:{"value":"28F8","name":"BRAILLE PATTERN DOTS-45678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F8"},10489:{"value":"28F9","name":"BRAILLE PATTERN DOTS-145678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28F9"},10490:{"value":"28FA","name":"BRAILLE PATTERN DOTS-245678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28FA"},10491:{"value":"28FB","name":"BRAILLE PATTERN DOTS-1245678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28FB"},10492:{"value":"28FC","name":"BRAILLE PATTERN DOTS-345678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28FC"},10493:{"value":"28FD","name":"BRAILLE PATTERN DOTS-1345678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28FD"},10494:{"value":"28FE","name":"BRAILLE PATTERN DOTS-2345678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28FE"},10495:{"value":"28FF","name":"BRAILLE PATTERN DOTS-12345678","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u28FF"},11008:{"value":"2B00","name":"NORTH EAST WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B00"},11009:{"value":"2B01","name":"NORTH WEST WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B01"},11010:{"value":"2B02","name":"SOUTH EAST WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B02"},11011:{"value":"2B03","name":"SOUTH WEST WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B03"},11012:{"value":"2B04","name":"LEFT RIGHT WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B04"},11013:{"value":"2B05","name":"LEFTWARDS BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B05"},11014:{"value":"2B06","name":"UPWARDS BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B06"},11015:{"value":"2B07","name":"DOWNWARDS BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B07"},11016:{"value":"2B08","name":"NORTH EAST BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B08"},11017:{"value":"2B09","name":"NORTH WEST BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B09"},11018:{"value":"2B0A","name":"SOUTH EAST BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B0A"},11019:{"value":"2B0B","name":"SOUTH WEST BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B0B"},11020:{"value":"2B0C","name":"LEFT RIGHT BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B0C"},11021:{"value":"2B0D","name":"UP DOWN BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B0D"},11022:{"value":"2B0E","name":"RIGHTWARDS ARROW WITH TIP DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B0E"},11023:{"value":"2B0F","name":"RIGHTWARDS ARROW WITH TIP UPWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B0F"},11024:{"value":"2B10","name":"LEFTWARDS ARROW WITH TIP DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B10"},11025:{"value":"2B11","name":"LEFTWARDS ARROW WITH TIP UPWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B11"},11026:{"value":"2B12","name":"SQUARE WITH TOP HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B12"},11027:{"value":"2B13","name":"SQUARE WITH BOTTOM HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B13"},11028:{"value":"2B14","name":"SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B14"},11029:{"value":"2B15","name":"SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B15"},11030:{"value":"2B16","name":"DIAMOND WITH LEFT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B16"},11031:{"value":"2B17","name":"DIAMOND WITH RIGHT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B17"},11032:{"value":"2B18","name":"DIAMOND WITH TOP HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B18"},11033:{"value":"2B19","name":"DIAMOND WITH BOTTOM HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B19"},11034:{"value":"2B1A","name":"DOTTED SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B1A"},11035:{"value":"2B1B","name":"BLACK LARGE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B1B"},11036:{"value":"2B1C","name":"WHITE LARGE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B1C"},11037:{"value":"2B1D","name":"BLACK VERY SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B1D"},11038:{"value":"2B1E","name":"WHITE VERY SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B1E"},11039:{"value":"2B1F","name":"BLACK PENTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B1F"},11040:{"value":"2B20","name":"WHITE PENTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B20"},11041:{"value":"2B21","name":"WHITE HEXAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B21"},11042:{"value":"2B22","name":"BLACK HEXAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B22"},11043:{"value":"2B23","name":"HORIZONTAL BLACK HEXAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B23"},11044:{"value":"2B24","name":"BLACK LARGE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B24"},11045:{"value":"2B25","name":"BLACK MEDIUM DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B25"},11046:{"value":"2B26","name":"WHITE MEDIUM DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B26"},11047:{"value":"2B27","name":"BLACK MEDIUM LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B27"},11048:{"value":"2B28","name":"WHITE MEDIUM LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B28"},11049:{"value":"2B29","name":"BLACK SMALL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B29"},11050:{"value":"2B2A","name":"BLACK SMALL LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B2A"},11051:{"value":"2B2B","name":"WHITE SMALL LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B2B"},11052:{"value":"2B2C","name":"BLACK HORIZONTAL ELLIPSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B2C"},11053:{"value":"2B2D","name":"WHITE HORIZONTAL ELLIPSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B2D"},11054:{"value":"2B2E","name":"BLACK VERTICAL ELLIPSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B2E"},11055:{"value":"2B2F","name":"WHITE VERTICAL ELLIPSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B2F"},11077:{"value":"2B45","name":"LEFTWARDS QUADRUPLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B45"},11078:{"value":"2B46","name":"RIGHTWARDS QUADRUPLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B46"},11085:{"value":"2B4D","name":"DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B4D"},11086:{"value":"2B4E","name":"SHORT SLANTED NORTH ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B4E"},11087:{"value":"2B4F","name":"SHORT BACKSLANTED SOUTH ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B4F"},11088:{"value":"2B50","name":"WHITE MEDIUM STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B50"},11089:{"value":"2B51","name":"BLACK SMALL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B51"},11090:{"value":"2B52","name":"WHITE SMALL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B52"},11091:{"value":"2B53","name":"BLACK RIGHT-POINTING PENTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B53"},11092:{"value":"2B54","name":"WHITE RIGHT-POINTING PENTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B54"},11093:{"value":"2B55","name":"HEAVY LARGE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B55"},11094:{"value":"2B56","name":"HEAVY OVAL WITH OVAL INSIDE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B56"},11095:{"value":"2B57","name":"HEAVY CIRCLE WITH CIRCLE INSIDE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B57"},11096:{"value":"2B58","name":"HEAVY CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B58"},11097:{"value":"2B59","name":"HEAVY CIRCLED SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B59"},11098:{"value":"2B5A","name":"SLANTED NORTH ARROW WITH HOOKED HEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B5A"},11099:{"value":"2B5B","name":"BACKSLANTED SOUTH ARROW WITH HOOKED TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B5B"},11100:{"value":"2B5C","name":"SLANTED NORTH ARROW WITH HORIZONTAL TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B5C"},11101:{"value":"2B5D","name":"BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B5D"},11102:{"value":"2B5E","name":"BENT ARROW POINTING DOWNWARDS THEN NORTH EAST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B5E"},11103:{"value":"2B5F","name":"SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B5F"},11104:{"value":"2B60","name":"LEFTWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B60"},11105:{"value":"2B61","name":"UPWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B61"},11106:{"value":"2B62","name":"RIGHTWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B62"},11107:{"value":"2B63","name":"DOWNWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B63"},11108:{"value":"2B64","name":"LEFT RIGHT TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B64"},11109:{"value":"2B65","name":"UP DOWN TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B65"},11110:{"value":"2B66","name":"NORTH WEST TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B66"},11111:{"value":"2B67","name":"NORTH EAST TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B67"},11112:{"value":"2B68","name":"SOUTH EAST TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B68"},11113:{"value":"2B69","name":"SOUTH WEST TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B69"},11114:{"value":"2B6A","name":"LEFTWARDS TRIANGLE-HEADED DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B6A"},11115:{"value":"2B6B","name":"UPWARDS TRIANGLE-HEADED DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B6B"},11116:{"value":"2B6C","name":"RIGHTWARDS TRIANGLE-HEADED DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B6C"},11117:{"value":"2B6D","name":"DOWNWARDS TRIANGLE-HEADED DASHED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B6D"},11118:{"value":"2B6E","name":"CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B6E"},11119:{"value":"2B6F","name":"ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B6F"},11120:{"value":"2B70","name":"LEFTWARDS TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B70"},11121:{"value":"2B71","name":"UPWARDS TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B71"},11122:{"value":"2B72","name":"RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B72"},11123:{"value":"2B73","name":"DOWNWARDS TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B73"},11126:{"value":"2B76","name":"NORTH WEST TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B76"},11127:{"value":"2B77","name":"NORTH EAST TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B77"},11128:{"value":"2B78","name":"SOUTH EAST TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B78"},11129:{"value":"2B79","name":"SOUTH WEST TRIANGLE-HEADED ARROW TO BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B79"},11130:{"value":"2B7A","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B7A"},11131:{"value":"2B7B","name":"UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B7B"},11132:{"value":"2B7C","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B7C"},11133:{"value":"2B7D","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B7D"},11134:{"value":"2B7E","name":"HORIZONTAL TAB KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B7E"},11135:{"value":"2B7F","name":"VERTICAL TAB KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B7F"},11136:{"value":"2B80","name":"LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B80"},11137:{"value":"2B81","name":"UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B81"},11138:{"value":"2B82","name":"RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B82"},11139:{"value":"2B83","name":"DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B83"},11140:{"value":"2B84","name":"LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B84"},11141:{"value":"2B85","name":"UPWARDS TRIANGLE-HEADED PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B85"},11142:{"value":"2B86","name":"RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B86"},11143:{"value":"2B87","name":"DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B87"},11144:{"value":"2B88","name":"LEFTWARDS BLACK CIRCLED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B88"},11145:{"value":"2B89","name":"UPWARDS BLACK CIRCLED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B89"},11146:{"value":"2B8A","name":"RIGHTWARDS BLACK CIRCLED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B8A"},11147:{"value":"2B8B","name":"DOWNWARDS BLACK CIRCLED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B8B"},11148:{"value":"2B8C","name":"ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B8C"},11149:{"value":"2B8D","name":"ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B8D"},11150:{"value":"2B8E","name":"ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B8E"},11151:{"value":"2B8F","name":"ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B8F"},11152:{"value":"2B90","name":"RETURN LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B90"},11153:{"value":"2B91","name":"RETURN RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B91"},11154:{"value":"2B92","name":"NEWLINE LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B92"},11155:{"value":"2B93","name":"NEWLINE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B93"},11156:{"value":"2B94","name":"FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B94"},11157:{"value":"2B95","name":"RIGHTWARDS BLACK ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B95"},11159:{"value":"2B97","name":"SYMBOL FOR TYPE A ELECTRONICS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B97"},11160:{"value":"2B98","name":"THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B98"},11161:{"value":"2B99","name":"THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B99"},11162:{"value":"2B9A","name":"THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B9A"},11163:{"value":"2B9B","name":"THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B9B"},11164:{"value":"2B9C","name":"BLACK LEFTWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B9C"},11165:{"value":"2B9D","name":"BLACK UPWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B9D"},11166:{"value":"2B9E","name":"BLACK RIGHTWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B9E"},11167:{"value":"2B9F","name":"BLACK DOWNWARDS EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2B9F"},11168:{"value":"2BA0","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA0"},11169:{"value":"2BA1","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA1"},11170:{"value":"2BA2","name":"UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA2"},11171:{"value":"2BA3","name":"UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA3"},11172:{"value":"2BA4","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA4"},11173:{"value":"2BA5","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA5"},11174:{"value":"2BA6","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA6"},11175:{"value":"2BA7","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA7"},11176:{"value":"2BA8","name":"BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA8"},11177:{"value":"2BA9","name":"BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BA9"},11178:{"value":"2BAA","name":"BLACK CURVED UPWARDS AND LEFTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BAA"},11179:{"value":"2BAB","name":"BLACK CURVED UPWARDS AND RIGHTWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BAB"},11180:{"value":"2BAC","name":"BLACK CURVED LEFTWARDS AND UPWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BAC"},11181:{"value":"2BAD","name":"BLACK CURVED RIGHTWARDS AND UPWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BAD"},11182:{"value":"2BAE","name":"BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BAE"},11183:{"value":"2BAF","name":"BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BAF"},11184:{"value":"2BB0","name":"RIBBON ARROW DOWN LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB0"},11185:{"value":"2BB1","name":"RIBBON ARROW DOWN RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB1"},11186:{"value":"2BB2","name":"RIBBON ARROW UP LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB2"},11187:{"value":"2BB3","name":"RIBBON ARROW UP RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB3"},11188:{"value":"2BB4","name":"RIBBON ARROW LEFT UP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB4"},11189:{"value":"2BB5","name":"RIBBON ARROW RIGHT UP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB5"},11190:{"value":"2BB6","name":"RIBBON ARROW LEFT DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB6"},11191:{"value":"2BB7","name":"RIBBON ARROW RIGHT DOWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB7"},11192:{"value":"2BB8","name":"UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB8"},11193:{"value":"2BB9","name":"UP ARROWHEAD IN A RECTANGLE BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BB9"},11194:{"value":"2BBA","name":"OVERLAPPING WHITE SQUARES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BBA"},11195:{"value":"2BBB","name":"OVERLAPPING WHITE AND BLACK SQUARES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BBB"},11196:{"value":"2BBC","name":"OVERLAPPING BLACK SQUARES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BBC"},11197:{"value":"2BBD","name":"BALLOT BOX WITH LIGHT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BBD"},11198:{"value":"2BBE","name":"CIRCLED X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BBE"},11199:{"value":"2BBF","name":"CIRCLED BOLD X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BBF"},11200:{"value":"2BC0","name":"BLACK SQUARE CENTRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC0"},11201:{"value":"2BC1","name":"BLACK DIAMOND CENTRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC1"},11202:{"value":"2BC2","name":"TURNED BLACK PENTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC2"},11203:{"value":"2BC3","name":"HORIZONTAL BLACK OCTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC3"},11204:{"value":"2BC4","name":"BLACK OCTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC4"},11205:{"value":"2BC5","name":"BLACK MEDIUM UP-POINTING TRIANGLE CENTRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC5"},11206:{"value":"2BC6","name":"BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC6"},11207:{"value":"2BC7","name":"BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC7"},11208:{"value":"2BC8","name":"BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC8"},11209:{"value":"2BC9","name":"NEPTUNE FORM TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BC9"},11210:{"value":"2BCA","name":"TOP HALF BLACK CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BCA"},11211:{"value":"2BCB","name":"BOTTOM HALF BLACK CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BCB"},11212:{"value":"2BCC","name":"LIGHT FOUR POINTED BLACK CUSP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BCC"},11213:{"value":"2BCD","name":"ROTATED LIGHT FOUR POINTED BLACK CUSP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BCD"},11214:{"value":"2BCE","name":"WHITE FOUR POINTED CUSP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BCE"},11215:{"value":"2BCF","name":"ROTATED WHITE FOUR POINTED CUSP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BCF"},11216:{"value":"2BD0","name":"SQUARE POSITION INDICATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD0"},11217:{"value":"2BD1","name":"UNCERTAINTY SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD1"},11218:{"value":"2BD2","name":"GROUP MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD2"},11219:{"value":"2BD3","name":"PLUTO FORM TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD3"},11220:{"value":"2BD4","name":"PLUTO FORM THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD4"},11221:{"value":"2BD5","name":"PLUTO FORM FOUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD5"},11222:{"value":"2BD6","name":"PLUTO FORM FIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD6"},11223:{"value":"2BD7","name":"TRANSPLUTO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD7"},11224:{"value":"2BD8","name":"PROSERPINA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD8"},11225:{"value":"2BD9","name":"ASTRAEA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BD9"},11226:{"value":"2BDA","name":"HYGIEA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BDA"},11227:{"value":"2BDB","name":"PHOLUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BDB"},11228:{"value":"2BDC","name":"NESSUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BDC"},11229:{"value":"2BDD","name":"WHITE MOON SELENA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BDD"},11230:{"value":"2BDE","name":"BLACK DIAMOND ON CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BDE"},11231:{"value":"2BDF","name":"TRUE LIGHT MOON ARTA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BDF"},11232:{"value":"2BE0","name":"CUPIDO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE0"},11233:{"value":"2BE1","name":"HADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE1"},11234:{"value":"2BE2","name":"ZEUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE2"},11235:{"value":"2BE3","name":"KRONOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE3"},11236:{"value":"2BE4","name":"APOLLON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE4"},11237:{"value":"2BE5","name":"ADMETOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE5"},11238:{"value":"2BE6","name":"VULCANUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE6"},11239:{"value":"2BE7","name":"POSEIDON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE7"},11240:{"value":"2BE8","name":"LEFT HALF BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE8"},11241:{"value":"2BE9","name":"RIGHT HALF BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BE9"},11242:{"value":"2BEA","name":"STAR WITH LEFT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BEA"},11243:{"value":"2BEB","name":"STAR WITH RIGHT HALF BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BEB"},11244:{"value":"2BEC","name":"LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BEC"},11245:{"value":"2BED","name":"UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BED"},11246:{"value":"2BEE","name":"RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BEE"},11247:{"value":"2BEF","name":"DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BEF"},11248:{"value":"2BF0","name":"ERIS FORM ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF0"},11249:{"value":"2BF1","name":"ERIS FORM TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF1"},11250:{"value":"2BF2","name":"SEDNA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF2"},11251:{"value":"2BF3","name":"RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF3"},11252:{"value":"2BF4","name":"RUSSIAN ASTROLOGICAL SYMBOL NOVILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF4"},11253:{"value":"2BF5","name":"RUSSIAN ASTROLOGICAL SYMBOL QUINTILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF5"},11254:{"value":"2BF6","name":"RUSSIAN ASTROLOGICAL SYMBOL BINOVILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF6"},11255:{"value":"2BF7","name":"RUSSIAN ASTROLOGICAL SYMBOL SENTAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF7"},11256:{"value":"2BF8","name":"RUSSIAN ASTROLOGICAL SYMBOL TREDECILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF8"},11257:{"value":"2BF9","name":"EQUALS SIGN WITH INFINITY BELOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BF9"},11258:{"value":"2BFA","name":"UNITED SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BFA"},11259:{"value":"2BFB","name":"SEPARATED SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BFB"},11260:{"value":"2BFC","name":"DOUBLED SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BFC"},11261:{"value":"2BFD","name":"PASSED SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BFD"},11262:{"value":"2BFE","name":"REVERSED RIGHT ANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"Y","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BFE"},11263:{"value":"2BFF","name":"HELLSCHREIBER PAUSE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2BFF"},11493:{"value":"2CE5","name":"COPTIC SYMBOL MI RO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CE5"},11494:{"value":"2CE6","name":"COPTIC SYMBOL PI RO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CE6"},11495:{"value":"2CE7","name":"COPTIC SYMBOL STAUROS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CE7"},11496:{"value":"2CE8","name":"COPTIC SYMBOL TAU RO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CE8"},11497:{"value":"2CE9","name":"COPTIC SYMBOL KHI RO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CE9"},11498:{"value":"2CEA","name":"COPTIC SYMBOL SHIMA SIMA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2CEA"},11856:{"value":"2E50","name":"CROSS PATTY WITH RIGHT CROSSBAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E50"},11857:{"value":"2E51","name":"CROSS PATTY WITH LEFT CROSSBAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E51"},11904:{"value":"2E80","name":"CJK RADICAL REPEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E80"},11905:{"value":"2E81","name":"CJK RADICAL CLIFF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E81"},11906:{"value":"2E82","name":"CJK RADICAL SECOND ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E82"},11907:{"value":"2E83","name":"CJK RADICAL SECOND TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E83"},11908:{"value":"2E84","name":"CJK RADICAL SECOND THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E84"},11909:{"value":"2E85","name":"CJK RADICAL PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E85"},11910:{"value":"2E86","name":"CJK RADICAL BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E86"},11911:{"value":"2E87","name":"CJK RADICAL TABLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E87"},11912:{"value":"2E88","name":"CJK RADICAL KNIFE ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E88"},11913:{"value":"2E89","name":"CJK RADICAL KNIFE TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E89"},11914:{"value":"2E8A","name":"CJK RADICAL DIVINATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E8A"},11915:{"value":"2E8B","name":"CJK RADICAL SEAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E8B"},11916:{"value":"2E8C","name":"CJK RADICAL SMALL ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E8C"},11917:{"value":"2E8D","name":"CJK RADICAL SMALL TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E8D"},11918:{"value":"2E8E","name":"CJK RADICAL LAME ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E8E"},11919:{"value":"2E8F","name":"CJK RADICAL LAME TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E8F"},11920:{"value":"2E90","name":"CJK RADICAL LAME THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E90"},11921:{"value":"2E91","name":"CJK RADICAL LAME FOUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E91"},11922:{"value":"2E92","name":"CJK RADICAL SNAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E92"},11923:{"value":"2E93","name":"CJK RADICAL THREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E93"},11924:{"value":"2E94","name":"CJK RADICAL SNOUT ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E94"},11925:{"value":"2E95","name":"CJK RADICAL SNOUT TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E95"},11926:{"value":"2E96","name":"CJK RADICAL HEART ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E96"},11927:{"value":"2E97","name":"CJK RADICAL HEART TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E97"},11928:{"value":"2E98","name":"CJK RADICAL HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E98"},11929:{"value":"2E99","name":"CJK RADICAL RAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E99"},11931:{"value":"2E9B","name":"CJK RADICAL CHOKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E9B"},11932:{"value":"2E9C","name":"CJK RADICAL SUN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E9C"},11933:{"value":"2E9D","name":"CJK RADICAL MOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E9D"},11934:{"value":"2E9E","name":"CJK RADICAL DEATH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E9E"},11935:{"value":"2E9F","name":"CJK RADICAL MOTHER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6BCD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2E9F"},11936:{"value":"2EA0","name":"CJK RADICAL CIVILIAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA0"},11937:{"value":"2EA1","name":"CJK RADICAL WATER ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA1"},11938:{"value":"2EA2","name":"CJK RADICAL WATER TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA2"},11939:{"value":"2EA3","name":"CJK RADICAL FIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA3"},11940:{"value":"2EA4","name":"CJK RADICAL PAW ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA4"},11941:{"value":"2EA5","name":"CJK RADICAL PAW TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA5"},11942:{"value":"2EA6","name":"CJK RADICAL SIMPLIFIED HALF TREE TRUNK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA6"},11943:{"value":"2EA7","name":"CJK RADICAL COW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA7"},11944:{"value":"2EA8","name":"CJK RADICAL DOG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA8"},11945:{"value":"2EA9","name":"CJK RADICAL JADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EA9"},11946:{"value":"2EAA","name":"CJK RADICAL BOLT OF CLOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EAA"},11947:{"value":"2EAB","name":"CJK RADICAL EYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EAB"},11948:{"value":"2EAC","name":"CJK RADICAL SPIRIT ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EAC"},11949:{"value":"2EAD","name":"CJK RADICAL SPIRIT TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EAD"},11950:{"value":"2EAE","name":"CJK RADICAL BAMBOO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EAE"},11951:{"value":"2EAF","name":"CJK RADICAL SILK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EAF"},11952:{"value":"2EB0","name":"CJK RADICAL C-SIMPLIFIED SILK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB0"},11953:{"value":"2EB1","name":"CJK RADICAL NET ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB1"},11954:{"value":"2EB2","name":"CJK RADICAL NET TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB2"},11955:{"value":"2EB3","name":"CJK RADICAL NET THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB3"},11956:{"value":"2EB4","name":"CJK RADICAL NET FOUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB4"},11957:{"value":"2EB5","name":"CJK RADICAL MESH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB5"},11958:{"value":"2EB6","name":"CJK RADICAL SHEEP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB6"},11959:{"value":"2EB7","name":"CJK RADICAL RAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB7"},11960:{"value":"2EB8","name":"CJK RADICAL EWE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB8"},11961:{"value":"2EB9","name":"CJK RADICAL OLD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EB9"},11962:{"value":"2EBA","name":"CJK RADICAL BRUSH ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EBA"},11963:{"value":"2EBB","name":"CJK RADICAL BRUSH TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EBB"},11964:{"value":"2EBC","name":"CJK RADICAL MEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EBC"},11965:{"value":"2EBD","name":"CJK RADICAL MORTAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EBD"},11966:{"value":"2EBE","name":"CJK RADICAL GRASS ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EBE"},11967:{"value":"2EBF","name":"CJK RADICAL GRASS TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EBF"},11968:{"value":"2EC0","name":"CJK RADICAL GRASS THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC0"},11969:{"value":"2EC1","name":"CJK RADICAL TIGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC1"},11970:{"value":"2EC2","name":"CJK RADICAL CLOTHES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC2"},11971:{"value":"2EC3","name":"CJK RADICAL WEST ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC3"},11972:{"value":"2EC4","name":"CJK RADICAL WEST TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC4"},11973:{"value":"2EC5","name":"CJK RADICAL C-SIMPLIFIED SEE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC5"},11974:{"value":"2EC6","name":"CJK RADICAL SIMPLIFIED HORN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC6"},11975:{"value":"2EC7","name":"CJK RADICAL HORN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC7"},11976:{"value":"2EC8","name":"CJK RADICAL C-SIMPLIFIED SPEECH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC8"},11977:{"value":"2EC9","name":"CJK RADICAL C-SIMPLIFIED SHELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EC9"},11978:{"value":"2ECA","name":"CJK RADICAL FOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ECA"},11979:{"value":"2ECB","name":"CJK RADICAL C-SIMPLIFIED CART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ECB"},11980:{"value":"2ECC","name":"CJK RADICAL SIMPLIFIED WALK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ECC"},11981:{"value":"2ECD","name":"CJK RADICAL WALK ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ECD"},11982:{"value":"2ECE","name":"CJK RADICAL WALK TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ECE"},11983:{"value":"2ECF","name":"CJK RADICAL CITY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ECF"},11984:{"value":"2ED0","name":"CJK RADICAL C-SIMPLIFIED GOLD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED0"},11985:{"value":"2ED1","name":"CJK RADICAL LONG ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED1"},11986:{"value":"2ED2","name":"CJK RADICAL LONG TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED2"},11987:{"value":"2ED3","name":"CJK RADICAL C-SIMPLIFIED LONG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED3"},11988:{"value":"2ED4","name":"CJK RADICAL C-SIMPLIFIED GATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED4"},11989:{"value":"2ED5","name":"CJK RADICAL MOUND ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED5"},11990:{"value":"2ED6","name":"CJK RADICAL MOUND TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED6"},11991:{"value":"2ED7","name":"CJK RADICAL RAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED7"},11992:{"value":"2ED8","name":"CJK RADICAL BLUE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED8"},11993:{"value":"2ED9","name":"CJK RADICAL C-SIMPLIFIED TANNED LEATHER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2ED9"},11994:{"value":"2EDA","name":"CJK RADICAL C-SIMPLIFIED LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EDA"},11995:{"value":"2EDB","name":"CJK RADICAL C-SIMPLIFIED WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EDB"},11996:{"value":"2EDC","name":"CJK RADICAL C-SIMPLIFIED FLY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EDC"},11997:{"value":"2EDD","name":"CJK RADICAL EAT ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EDD"},11998:{"value":"2EDE","name":"CJK RADICAL EAT TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EDE"},11999:{"value":"2EDF","name":"CJK RADICAL EAT THREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EDF"},12000:{"value":"2EE0","name":"CJK RADICAL C-SIMPLIFIED EAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE0"},12001:{"value":"2EE1","name":"CJK RADICAL HEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE1"},12002:{"value":"2EE2","name":"CJK RADICAL C-SIMPLIFIED HORSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE2"},12003:{"value":"2EE3","name":"CJK RADICAL BONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE3"},12004:{"value":"2EE4","name":"CJK RADICAL GHOST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE4"},12005:{"value":"2EE5","name":"CJK RADICAL C-SIMPLIFIED FISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE5"},12006:{"value":"2EE6","name":"CJK RADICAL C-SIMPLIFIED BIRD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE6"},12007:{"value":"2EE7","name":"CJK RADICAL C-SIMPLIFIED SALT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE7"},12008:{"value":"2EE8","name":"CJK RADICAL SIMPLIFIED WHEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE8"},12009:{"value":"2EE9","name":"CJK RADICAL SIMPLIFIED YELLOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EE9"},12010:{"value":"2EEA","name":"CJK RADICAL C-SIMPLIFIED FROG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EEA"},12011:{"value":"2EEB","name":"CJK RADICAL J-SIMPLIFIED EVEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EEB"},12012:{"value":"2EEC","name":"CJK RADICAL C-SIMPLIFIED EVEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EEC"},12013:{"value":"2EED","name":"CJK RADICAL J-SIMPLIFIED TOOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EED"},12014:{"value":"2EEE","name":"CJK RADICAL C-SIMPLIFIED TOOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EEE"},12015:{"value":"2EEF","name":"CJK RADICAL J-SIMPLIFIED DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EEF"},12016:{"value":"2EF0","name":"CJK RADICAL C-SIMPLIFIED DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EF0"},12017:{"value":"2EF1","name":"CJK RADICAL TURTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EF1"},12018:{"value":"2EF2","name":"CJK RADICAL J-SIMPLIFIED TURTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EF2"},12019:{"value":"2EF3","name":"CJK RADICAL C-SIMPLIFIED TURTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F9F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2EF3"},12032:{"value":"2F00","name":"KANGXI RADICAL ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E00","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F00"},12033:{"value":"2F01","name":"KANGXI RADICAL LINE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E28","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F01"},12034:{"value":"2F02","name":"KANGXI RADICAL DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E36","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F02"},12035:{"value":"2F03","name":"KANGXI RADICAL SLASH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E3F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F03"},12036:{"value":"2F04","name":"KANGXI RADICAL SECOND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E59","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F04"},12037:{"value":"2F05","name":"KANGXI RADICAL HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E85","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F05"},12038:{"value":"2F06","name":"KANGXI RADICAL TWO","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4E8C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F06"},12039:{"value":"2F07","name":"KANGXI RADICAL LID","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4EA0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F07"},12040:{"value":"2F08","name":"KANGXI RADICAL MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 4EBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F08"},12041:{"value":"2F09","name":"KANGXI RADICAL LEGS","category":"So","class":"0","bidirectional_category":"ON","mapping":" 513F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F09"},12042:{"value":"2F0A","name":"KANGXI RADICAL ENTER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5165","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F0A"},12043:{"value":"2F0B","name":"KANGXI RADICAL EIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 516B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F0B"},12044:{"value":"2F0C","name":"KANGXI RADICAL DOWN BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5182","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F0C"},12045:{"value":"2F0D","name":"KANGXI RADICAL COVER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5196","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F0D"},12046:{"value":"2F0E","name":"KANGXI RADICAL ICE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 51AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F0E"},12047:{"value":"2F0F","name":"KANGXI RADICAL TABLE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 51E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F0F"},12048:{"value":"2F10","name":"KANGXI RADICAL OPEN BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":" 51F5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F10"},12049:{"value":"2F11","name":"KANGXI RADICAL KNIFE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5200","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F11"},12050:{"value":"2F12","name":"KANGXI RADICAL POWER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 529B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F12"},12051:{"value":"2F13","name":"KANGXI RADICAL WRAP","category":"So","class":"0","bidirectional_category":"ON","mapping":" 52F9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F13"},12052:{"value":"2F14","name":"KANGXI RADICAL SPOON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5315","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F14"},12053:{"value":"2F15","name":"KANGXI RADICAL RIGHT OPEN BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":" 531A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F15"},12054:{"value":"2F16","name":"KANGXI RADICAL HIDING ENCLOSURE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5338","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F16"},12055:{"value":"2F17","name":"KANGXI RADICAL TEN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5341","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F17"},12056:{"value":"2F18","name":"KANGXI RADICAL DIVINATION","category":"So","class":"0","bidirectional_category":"ON","mapping":" 535C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F18"},12057:{"value":"2F19","name":"KANGXI RADICAL SEAL","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5369","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F19"},12058:{"value":"2F1A","name":"KANGXI RADICAL CLIFF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5382","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F1A"},12059:{"value":"2F1B","name":"KANGXI RADICAL PRIVATE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 53B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F1B"},12060:{"value":"2F1C","name":"KANGXI RADICAL AGAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 53C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F1C"},12061:{"value":"2F1D","name":"KANGXI RADICAL MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 53E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F1D"},12062:{"value":"2F1E","name":"KANGXI RADICAL ENCLOSURE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 56D7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F1E"},12063:{"value":"2F1F","name":"KANGXI RADICAL EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 571F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F1F"},12064:{"value":"2F20","name":"KANGXI RADICAL SCHOLAR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 58EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F20"},12065:{"value":"2F21","name":"KANGXI RADICAL GO","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5902","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F21"},12066:{"value":"2F22","name":"KANGXI RADICAL GO SLOWLY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 590A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F22"},12067:{"value":"2F23","name":"KANGXI RADICAL EVENING","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5915","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F23"},12068:{"value":"2F24","name":"KANGXI RADICAL BIG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5927","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F24"},12069:{"value":"2F25","name":"KANGXI RADICAL WOMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5973","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F25"},12070:{"value":"2F26","name":"KANGXI RADICAL CHILD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5B50","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F26"},12071:{"value":"2F27","name":"KANGXI RADICAL ROOF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5B80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F27"},12072:{"value":"2F28","name":"KANGXI RADICAL INCH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5BF8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F28"},12073:{"value":"2F29","name":"KANGXI RADICAL SMALL","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5C0F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F29"},12074:{"value":"2F2A","name":"KANGXI RADICAL LAME","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5C22","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F2A"},12075:{"value":"2F2B","name":"KANGXI RADICAL CORPSE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5C38","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F2B"},12076:{"value":"2F2C","name":"KANGXI RADICAL SPROUT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5C6E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F2C"},12077:{"value":"2F2D","name":"KANGXI RADICAL MOUNTAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5C71","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F2D"},12078:{"value":"2F2E","name":"KANGXI RADICAL RIVER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5DDB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F2E"},12079:{"value":"2F2F","name":"KANGXI RADICAL WORK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5DE5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F2F"},12080:{"value":"2F30","name":"KANGXI RADICAL ONESELF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5DF1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F30"},12081:{"value":"2F31","name":"KANGXI RADICAL TURBAN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5DFE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F31"},12082:{"value":"2F32","name":"KANGXI RADICAL DRY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5E72","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F32"},12083:{"value":"2F33","name":"KANGXI RADICAL SHORT THREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5E7A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F33"},12084:{"value":"2F34","name":"KANGXI RADICAL DOTTED CLIFF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5E7F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F34"},12085:{"value":"2F35","name":"KANGXI RADICAL LONG STRIDE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5EF4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F35"},12086:{"value":"2F36","name":"KANGXI RADICAL TWO HANDS","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5EFE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F36"},12087:{"value":"2F37","name":"KANGXI RADICAL SHOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5F0B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F37"},12088:{"value":"2F38","name":"KANGXI RADICAL BOW","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5F13","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F38"},12089:{"value":"2F39","name":"KANGXI RADICAL SNOUT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5F50","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F39"},12090:{"value":"2F3A","name":"KANGXI RADICAL BRISTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5F61","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F3A"},12091:{"value":"2F3B","name":"KANGXI RADICAL STEP","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5F73","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F3B"},12092:{"value":"2F3C","name":"KANGXI RADICAL HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":" 5FC3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F3C"},12093:{"value":"2F3D","name":"KANGXI RADICAL HALBERD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6208","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F3D"},12094:{"value":"2F3E","name":"KANGXI RADICAL DOOR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6236","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F3E"},12095:{"value":"2F3F","name":"KANGXI RADICAL HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 624B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F3F"},12096:{"value":"2F40","name":"KANGXI RADICAL BRANCH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 652F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F40"},12097:{"value":"2F41","name":"KANGXI RADICAL RAP","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6534","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F41"},12098:{"value":"2F42","name":"KANGXI RADICAL SCRIPT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6587","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F42"},12099:{"value":"2F43","name":"KANGXI RADICAL DIPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6597","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F43"},12100:{"value":"2F44","name":"KANGXI RADICAL AXE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 65A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F44"},12101:{"value":"2F45","name":"KANGXI RADICAL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 65B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F45"},12102:{"value":"2F46","name":"KANGXI RADICAL NOT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 65E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F46"},12103:{"value":"2F47","name":"KANGXI RADICAL SUN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F47"},12104:{"value":"2F48","name":"KANGXI RADICAL SAY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 66F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F48"},12105:{"value":"2F49","name":"KANGXI RADICAL MOON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F49"},12106:{"value":"2F4A","name":"KANGXI RADICAL TREE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6728","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F4A"},12107:{"value":"2F4B","name":"KANGXI RADICAL LACK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6B20","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F4B"},12108:{"value":"2F4C","name":"KANGXI RADICAL STOP","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6B62","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F4C"},12109:{"value":"2F4D","name":"KANGXI RADICAL DEATH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6B79","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F4D"},12110:{"value":"2F4E","name":"KANGXI RADICAL WEAPON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6BB3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F4E"},12111:{"value":"2F4F","name":"KANGXI RADICAL DO NOT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6BCB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F4F"},12112:{"value":"2F50","name":"KANGXI RADICAL COMPARE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6BD4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F50"},12113:{"value":"2F51","name":"KANGXI RADICAL FUR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6BDB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F51"},12114:{"value":"2F52","name":"KANGXI RADICAL CLAN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6C0F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F52"},12115:{"value":"2F53","name":"KANGXI RADICAL STEAM","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6C14","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F53"},12116:{"value":"2F54","name":"KANGXI RADICAL WATER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 6C34","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F54"},12117:{"value":"2F55","name":"KANGXI RADICAL FIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 706B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F55"},12118:{"value":"2F56","name":"KANGXI RADICAL CLAW","category":"So","class":"0","bidirectional_category":"ON","mapping":" 722A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F56"},12119:{"value":"2F57","name":"KANGXI RADICAL FATHER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7236","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F57"},12120:{"value":"2F58","name":"KANGXI RADICAL DOUBLE X","category":"So","class":"0","bidirectional_category":"ON","mapping":" 723B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F58"},12121:{"value":"2F59","name":"KANGXI RADICAL HALF TREE TRUNK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 723F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F59"},12122:{"value":"2F5A","name":"KANGXI RADICAL SLICE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7247","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F5A"},12123:{"value":"2F5B","name":"KANGXI RADICAL FANG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7259","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F5B"},12124:{"value":"2F5C","name":"KANGXI RADICAL COW","category":"So","class":"0","bidirectional_category":"ON","mapping":" 725B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F5C"},12125:{"value":"2F5D","name":"KANGXI RADICAL DOG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 72AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F5D"},12126:{"value":"2F5E","name":"KANGXI RADICAL PROFOUND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7384","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F5E"},12127:{"value":"2F5F","name":"KANGXI RADICAL JADE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7389","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F5F"},12128:{"value":"2F60","name":"KANGXI RADICAL MELON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 74DC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F60"},12129:{"value":"2F61","name":"KANGXI RADICAL TILE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 74E6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F61"},12130:{"value":"2F62","name":"KANGXI RADICAL SWEET","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7518","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F62"},12131:{"value":"2F63","name":"KANGXI RADICAL LIFE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 751F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F63"},12132:{"value":"2F64","name":"KANGXI RADICAL USE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7528","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F64"},12133:{"value":"2F65","name":"KANGXI RADICAL FIELD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7530","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F65"},12134:{"value":"2F66","name":"KANGXI RADICAL BOLT OF CLOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 758B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F66"},12135:{"value":"2F67","name":"KANGXI RADICAL SICKNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7592","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F67"},12136:{"value":"2F68","name":"KANGXI RADICAL DOTTED TENT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7676","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F68"},12137:{"value":"2F69","name":"KANGXI RADICAL WHITE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 767D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F69"},12138:{"value":"2F6A","name":"KANGXI RADICAL SKIN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 76AE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F6A"},12139:{"value":"2F6B","name":"KANGXI RADICAL DISH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 76BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F6B"},12140:{"value":"2F6C","name":"KANGXI RADICAL EYE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 76EE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F6C"},12141:{"value":"2F6D","name":"KANGXI RADICAL SPEAR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 77DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F6D"},12142:{"value":"2F6E","name":"KANGXI RADICAL ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":" 77E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F6E"},12143:{"value":"2F6F","name":"KANGXI RADICAL STONE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 77F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F6F"},12144:{"value":"2F70","name":"KANGXI RADICAL SPIRIT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 793A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F70"},12145:{"value":"2F71","name":"KANGXI RADICAL TRACK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 79B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F71"},12146:{"value":"2F72","name":"KANGXI RADICAL GRAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 79BE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F72"},12147:{"value":"2F73","name":"KANGXI RADICAL CAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7A74","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F73"},12148:{"value":"2F74","name":"KANGXI RADICAL STAND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7ACB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F74"},12149:{"value":"2F75","name":"KANGXI RADICAL BAMBOO","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7AF9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F75"},12150:{"value":"2F76","name":"KANGXI RADICAL RICE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7C73","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F76"},12151:{"value":"2F77","name":"KANGXI RADICAL SILK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7CF8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F77"},12152:{"value":"2F78","name":"KANGXI RADICAL JAR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7F36","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F78"},12153:{"value":"2F79","name":"KANGXI RADICAL NET","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7F51","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F79"},12154:{"value":"2F7A","name":"KANGXI RADICAL SHEEP","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7F8A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F7A"},12155:{"value":"2F7B","name":"KANGXI RADICAL FEATHER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 7FBD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F7B"},12156:{"value":"2F7C","name":"KANGXI RADICAL OLD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8001","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F7C"},12157:{"value":"2F7D","name":"KANGXI RADICAL AND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 800C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F7D"},12158:{"value":"2F7E","name":"KANGXI RADICAL PLOW","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8012","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F7E"},12159:{"value":"2F7F","name":"KANGXI RADICAL EAR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8033","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F7F"},12160:{"value":"2F80","name":"KANGXI RADICAL BRUSH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 807F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F80"},12161:{"value":"2F81","name":"KANGXI RADICAL MEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8089","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F81"},12162:{"value":"2F82","name":"KANGXI RADICAL MINISTER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 81E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F82"},12163:{"value":"2F83","name":"KANGXI RADICAL SELF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 81EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F83"},12164:{"value":"2F84","name":"KANGXI RADICAL ARRIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 81F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F84"},12165:{"value":"2F85","name":"KANGXI RADICAL MORTAR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 81FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F85"},12166:{"value":"2F86","name":"KANGXI RADICAL TONGUE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 820C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F86"},12167:{"value":"2F87","name":"KANGXI RADICAL OPPOSE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 821B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F87"},12168:{"value":"2F88","name":"KANGXI RADICAL BOAT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 821F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F88"},12169:{"value":"2F89","name":"KANGXI RADICAL STOPPING","category":"So","class":"0","bidirectional_category":"ON","mapping":" 826E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F89"},12170:{"value":"2F8A","name":"KANGXI RADICAL COLOR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8272","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F8A"},12171:{"value":"2F8B","name":"KANGXI RADICAL GRASS","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8278","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F8B"},12172:{"value":"2F8C","name":"KANGXI RADICAL TIGER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 864D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F8C"},12173:{"value":"2F8D","name":"KANGXI RADICAL INSECT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 866B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F8D"},12174:{"value":"2F8E","name":"KANGXI RADICAL BLOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8840","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F8E"},12175:{"value":"2F8F","name":"KANGXI RADICAL WALK ENCLOSURE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 884C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F8F"},12176:{"value":"2F90","name":"KANGXI RADICAL CLOTHES","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8863","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F90"},12177:{"value":"2F91","name":"KANGXI RADICAL WEST","category":"So","class":"0","bidirectional_category":"ON","mapping":" 897E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F91"},12178:{"value":"2F92","name":"KANGXI RADICAL SEE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 898B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F92"},12179:{"value":"2F93","name":"KANGXI RADICAL HORN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 89D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F93"},12180:{"value":"2F94","name":"KANGXI RADICAL SPEECH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8A00","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F94"},12181:{"value":"2F95","name":"KANGXI RADICAL VALLEY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8C37","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F95"},12182:{"value":"2F96","name":"KANGXI RADICAL BEAN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8C46","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F96"},12183:{"value":"2F97","name":"KANGXI RADICAL PIG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8C55","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F97"},12184:{"value":"2F98","name":"KANGXI RADICAL BADGER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8C78","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F98"},12185:{"value":"2F99","name":"KANGXI RADICAL SHELL","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8C9D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F99"},12186:{"value":"2F9A","name":"KANGXI RADICAL RED","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8D64","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F9A"},12187:{"value":"2F9B","name":"KANGXI RADICAL RUN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8D70","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F9B"},12188:{"value":"2F9C","name":"KANGXI RADICAL FOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8DB3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F9C"},12189:{"value":"2F9D","name":"KANGXI RADICAL BODY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8EAB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F9D"},12190:{"value":"2F9E","name":"KANGXI RADICAL CART","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8ECA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F9E"},12191:{"value":"2F9F","name":"KANGXI RADICAL BITTER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8F9B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2F9F"},12192:{"value":"2FA0","name":"KANGXI RADICAL MORNING","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8FB0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA0"},12193:{"value":"2FA1","name":"KANGXI RADICAL WALK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 8FB5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA1"},12194:{"value":"2FA2","name":"KANGXI RADICAL CITY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9091","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA2"},12195:{"value":"2FA3","name":"KANGXI RADICAL WINE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9149","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA3"},12196:{"value":"2FA4","name":"KANGXI RADICAL DISTINGUISH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 91C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA4"},12197:{"value":"2FA5","name":"KANGXI RADICAL VILLAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 91CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA5"},12198:{"value":"2FA6","name":"KANGXI RADICAL GOLD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 91D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA6"},12199:{"value":"2FA7","name":"KANGXI RADICAL LONG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9577","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA7"},12200:{"value":"2FA8","name":"KANGXI RADICAL GATE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9580","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA8"},12201:{"value":"2FA9","name":"KANGXI RADICAL MOUND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 961C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FA9"},12202:{"value":"2FAA","name":"KANGXI RADICAL SLAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 96B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FAA"},12203:{"value":"2FAB","name":"KANGXI RADICAL SHORT TAILED BIRD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 96B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FAB"},12204:{"value":"2FAC","name":"KANGXI RADICAL RAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 96E8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FAC"},12205:{"value":"2FAD","name":"KANGXI RADICAL BLUE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9751","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FAD"},12206:{"value":"2FAE","name":"KANGXI RADICAL WRONG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 975E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FAE"},12207:{"value":"2FAF","name":"KANGXI RADICAL FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9762","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FAF"},12208:{"value":"2FB0","name":"KANGXI RADICAL LEATHER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9769","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB0"},12209:{"value":"2FB1","name":"KANGXI RADICAL TANNED LEATHER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 97CB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB1"},12210:{"value":"2FB2","name":"KANGXI RADICAL LEEK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 97ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB2"},12211:{"value":"2FB3","name":"KANGXI RADICAL SOUND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 97F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB3"},12212:{"value":"2FB4","name":"KANGXI RADICAL LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9801","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB4"},12213:{"value":"2FB5","name":"KANGXI RADICAL WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":" 98A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB5"},12214:{"value":"2FB6","name":"KANGXI RADICAL FLY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 98DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB6"},12215:{"value":"2FB7","name":"KANGXI RADICAL EAT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 98DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB7"},12216:{"value":"2FB8","name":"KANGXI RADICAL HEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9996","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB8"},12217:{"value":"2FB9","name":"KANGXI RADICAL FRAGRANT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9999","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FB9"},12218:{"value":"2FBA","name":"KANGXI RADICAL HORSE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 99AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FBA"},12219:{"value":"2FBB","name":"KANGXI RADICAL BONE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9AA8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FBB"},12220:{"value":"2FBC","name":"KANGXI RADICAL TALL","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9AD8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FBC"},12221:{"value":"2FBD","name":"KANGXI RADICAL HAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9ADF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FBD"},12222:{"value":"2FBE","name":"KANGXI RADICAL FIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9B25","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FBE"},12223:{"value":"2FBF","name":"KANGXI RADICAL SACRIFICIAL WINE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9B2F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FBF"},12224:{"value":"2FC0","name":"KANGXI RADICAL CAULDRON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9B32","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC0"},12225:{"value":"2FC1","name":"KANGXI RADICAL GHOST","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9B3C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC1"},12226:{"value":"2FC2","name":"KANGXI RADICAL FISH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9B5A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC2"},12227:{"value":"2FC3","name":"KANGXI RADICAL BIRD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9CE5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC3"},12228:{"value":"2FC4","name":"KANGXI RADICAL SALT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9E75","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC4"},12229:{"value":"2FC5","name":"KANGXI RADICAL DEER","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9E7F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC5"},12230:{"value":"2FC6","name":"KANGXI RADICAL WHEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9EA5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC6"},12231:{"value":"2FC7","name":"KANGXI RADICAL HEMP","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9EBB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC7"},12232:{"value":"2FC8","name":"KANGXI RADICAL YELLOW","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9EC3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC8"},12233:{"value":"2FC9","name":"KANGXI RADICAL MILLET","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9ECD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FC9"},12234:{"value":"2FCA","name":"KANGXI RADICAL BLACK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9ED1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FCA"},12235:{"value":"2FCB","name":"KANGXI RADICAL EMBROIDERY","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9EF9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FCB"},12236:{"value":"2FCC","name":"KANGXI RADICAL FROG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9EFD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FCC"},12237:{"value":"2FCD","name":"KANGXI RADICAL TRIPOD","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F0E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FCD"},12238:{"value":"2FCE","name":"KANGXI RADICAL DRUM","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F13","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FCE"},12239:{"value":"2FCF","name":"KANGXI RADICAL RAT","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F20","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FCF"},12240:{"value":"2FD0","name":"KANGXI RADICAL NOSE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F3B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FD0"},12241:{"value":"2FD1","name":"KANGXI RADICAL EVEN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F4A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FD1"},12242:{"value":"2FD2","name":"KANGXI RADICAL TOOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F52","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FD2"},12243:{"value":"2FD3","name":"KANGXI RADICAL DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F8D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FD3"},12244:{"value":"2FD4","name":"KANGXI RADICAL TURTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9F9C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FD4"},12245:{"value":"2FD5","name":"KANGXI RADICAL FLUTE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 9FA0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FD5"},12272:{"value":"2FF0","name":"IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF0"},12273:{"value":"2FF1","name":"IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF1"},12274:{"value":"2FF2","name":"IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF2"},12275:{"value":"2FF3","name":"IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF3"},12276:{"value":"2FF4","name":"IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF4"},12277:{"value":"2FF5","name":"IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF5"},12278:{"value":"2FF6","name":"IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF6"},12279:{"value":"2FF7","name":"IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF7"},12280:{"value":"2FF8","name":"IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF8"},12281:{"value":"2FF9","name":"IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FF9"},12282:{"value":"2FFA","name":"IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FFA"},12283:{"value":"2FFB","name":"IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2FFB"},12292:{"value":"3004","name":"JAPANESE INDUSTRIAL STANDARD SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3004"},12306:{"value":"3012","name":"POSTAL MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3012"},12307:{"value":"3013","name":"GETA MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3013"},12320:{"value":"3020","name":"POSTAL MARK FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3020"},12342:{"value":"3036","name":"CIRCLED POSTAL MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":" 3012","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3036"},12343:{"value":"3037","name":"IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3037"},12350:{"value":"303E","name":"IDEOGRAPHIC VARIATION INDICATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u303E"},12351:{"value":"303F","name":"IDEOGRAPHIC HALF FILL SPACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u303F"},12688:{"value":"3190","name":"IDEOGRAPHIC ANNOTATION LINKING MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KANBUN TATETEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3190"},12689:{"value":"3191","name":"IDEOGRAPHIC ANNOTATION REVERSE MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN RE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3191"},12694:{"value":"3196","name":"IDEOGRAPHIC ANNOTATION TOP MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E0A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN ZYOU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3196"},12695:{"value":"3197","name":"IDEOGRAPHIC ANNOTATION MIDDLE MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E2D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN TYUU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3197"},12696:{"value":"3198","name":"IDEOGRAPHIC ANNOTATION BOTTOM MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E0B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN GE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3198"},12697:{"value":"3199","name":"IDEOGRAPHIC ANNOTATION FIRST MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 7532","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN KOU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3199"},12698:{"value":"319A","name":"IDEOGRAPHIC ANNOTATION SECOND MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E59","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN OTU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u319A"},12699:{"value":"319B","name":"IDEOGRAPHIC ANNOTATION THIRD MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E19","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN HEI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u319B"},12700:{"value":"319C","name":"IDEOGRAPHIC ANNOTATION FOURTH MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E01","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN TEI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u319C"},12701:{"value":"319D","name":"IDEOGRAPHIC ANNOTATION HEAVEN MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 5929","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN TEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u319D"},12702:{"value":"319E","name":"IDEOGRAPHIC ANNOTATION EARTH MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 5730","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN TI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u319E"},12703:{"value":"319F","name":"IDEOGRAPHIC ANNOTATION MAN MARK","category":"So","class":"0","bidirectional_category":"L","mapping":" 4EBA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"KAERITEN ZIN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u319F"},12736:{"value":"31C0","name":"CJK STROKE T","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C0"},12737:{"value":"31C1","name":"CJK STROKE WG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C1"},12738:{"value":"31C2","name":"CJK STROKE XG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C2"},12739:{"value":"31C3","name":"CJK STROKE BXG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C3"},12740:{"value":"31C4","name":"CJK STROKE SW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C4"},12741:{"value":"31C5","name":"CJK STROKE HZZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C5"},12742:{"value":"31C6","name":"CJK STROKE HZG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C6"},12743:{"value":"31C7","name":"CJK STROKE HP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C7"},12744:{"value":"31C8","name":"CJK STROKE HZWG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C8"},12745:{"value":"31C9","name":"CJK STROKE SZWG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31C9"},12746:{"value":"31CA","name":"CJK STROKE HZT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31CA"},12747:{"value":"31CB","name":"CJK STROKE HZZP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31CB"},12748:{"value":"31CC","name":"CJK STROKE HPWG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31CC"},12749:{"value":"31CD","name":"CJK STROKE HZW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31CD"},12750:{"value":"31CE","name":"CJK STROKE HZZZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31CE"},12751:{"value":"31CF","name":"CJK STROKE N","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31CF"},12752:{"value":"31D0","name":"CJK STROKE H","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D0"},12753:{"value":"31D1","name":"CJK STROKE S","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D1"},12754:{"value":"31D2","name":"CJK STROKE P","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D2"},12755:{"value":"31D3","name":"CJK STROKE SP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D3"},12756:{"value":"31D4","name":"CJK STROKE D","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D4"},12757:{"value":"31D5","name":"CJK STROKE HZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D5"},12758:{"value":"31D6","name":"CJK STROKE HG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D6"},12759:{"value":"31D7","name":"CJK STROKE SZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D7"},12760:{"value":"31D8","name":"CJK STROKE SWZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D8"},12761:{"value":"31D9","name":"CJK STROKE ST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31D9"},12762:{"value":"31DA","name":"CJK STROKE SG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31DA"},12763:{"value":"31DB","name":"CJK STROKE PD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31DB"},12764:{"value":"31DC","name":"CJK STROKE PZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31DC"},12765:{"value":"31DD","name":"CJK STROKE TN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31DD"},12766:{"value":"31DE","name":"CJK STROKE SZZ","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31DE"},12767:{"value":"31DF","name":"CJK STROKE SWG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31DF"},12768:{"value":"31E0","name":"CJK STROKE HXWG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31E0"},12769:{"value":"31E1","name":"CJK STROKE HZZZG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31E1"},12770:{"value":"31E2","name":"CJK STROKE PG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31E2"},12771:{"value":"31E3","name":"CJK STROKE Q","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u31E3"},12800:{"value":"3200","name":"PARENTHESIZED HANGUL KIYEOK","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1100 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3200"},12801:{"value":"3201","name":"PARENTHESIZED HANGUL NIEUN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1102 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3201"},12802:{"value":"3202","name":"PARENTHESIZED HANGUL TIKEUT","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1103 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3202"},12803:{"value":"3203","name":"PARENTHESIZED HANGUL RIEUL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1105 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL LIEUL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3203"},12804:{"value":"3204","name":"PARENTHESIZED HANGUL MIEUM","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1106 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3204"},12805:{"value":"3205","name":"PARENTHESIZED HANGUL PIEUP","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1107 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3205"},12806:{"value":"3206","name":"PARENTHESIZED HANGUL SIOS","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1109 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3206"},12807:{"value":"3207","name":"PARENTHESIZED HANGUL IEUNG","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110B 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3207"},12808:{"value":"3208","name":"PARENTHESIZED HANGUL CIEUC","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110C 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3208"},12809:{"value":"3209","name":"PARENTHESIZED HANGUL CHIEUCH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110E 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL CIEUC","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3209"},12810:{"value":"320A","name":"PARENTHESIZED HANGUL KHIEUKH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110F 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL KIYEOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u320A"},12811:{"value":"320B","name":"PARENTHESIZED HANGUL THIEUTH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1110 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u320B"},12812:{"value":"320C","name":"PARENTHESIZED HANGUL PHIEUPH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1111 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL PIEUP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u320C"},12813:{"value":"320D","name":"PARENTHESIZED HANGUL HIEUH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1112 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u320D"},12814:{"value":"320E","name":"PARENTHESIZED HANGUL KIYEOK A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1100 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL GA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u320E"},12815:{"value":"320F","name":"PARENTHESIZED HANGUL NIEUN A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1102 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL NA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u320F"},12816:{"value":"3210","name":"PARENTHESIZED HANGUL TIKEUT A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1103 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL DA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3210"},12817:{"value":"3211","name":"PARENTHESIZED HANGUL RIEUL A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1105 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL LA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3211"},12818:{"value":"3212","name":"PARENTHESIZED HANGUL MIEUM A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1106 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL MA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3212"},12819:{"value":"3213","name":"PARENTHESIZED HANGUL PIEUP A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1107 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL BA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3213"},12820:{"value":"3214","name":"PARENTHESIZED HANGUL SIOS A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1109 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL SA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3214"},12821:{"value":"3215","name":"PARENTHESIZED HANGUL IEUNG A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110B 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL A","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3215"},12822:{"value":"3216","name":"PARENTHESIZED HANGUL CIEUC A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110C 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL JA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3216"},12823:{"value":"3217","name":"PARENTHESIZED HANGUL CHIEUCH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110E 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL CA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3217"},12824:{"value":"3218","name":"PARENTHESIZED HANGUL KHIEUKH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110F 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL KA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3218"},12825:{"value":"3219","name":"PARENTHESIZED HANGUL THIEUTH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1110 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL TA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3219"},12826:{"value":"321A","name":"PARENTHESIZED HANGUL PHIEUPH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1111 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL PA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u321A"},12827:{"value":"321B","name":"PARENTHESIZED HANGUL HIEUH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 1112 1161 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u321B"},12828:{"value":"321C","name":"PARENTHESIZED HANGUL CIEUC U","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 110C 116E 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"PARENTHESIZED HANGUL JU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u321C"},12829:{"value":"321D","name":"PARENTHESIZED KOREAN CHARACTER OJEON","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0028 110B 1169 110C 1165 11AB 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u321D"},12830:{"value":"321E","name":"PARENTHESIZED KOREAN CHARACTER O HU","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0028 110B 1169 1112 116E 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u321E"},12842:{"value":"322A","name":"PARENTHESIZED IDEOGRAPH MOON","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 6708 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u322A"},12843:{"value":"322B","name":"PARENTHESIZED IDEOGRAPH FIRE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 706B 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u322B"},12844:{"value":"322C","name":"PARENTHESIZED IDEOGRAPH WATER","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 6C34 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u322C"},12845:{"value":"322D","name":"PARENTHESIZED IDEOGRAPH WOOD","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 6728 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u322D"},12846:{"value":"322E","name":"PARENTHESIZED IDEOGRAPH METAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 91D1 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u322E"},12847:{"value":"322F","name":"PARENTHESIZED IDEOGRAPH EARTH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 571F 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u322F"},12848:{"value":"3230","name":"PARENTHESIZED IDEOGRAPH SUN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 65E5 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3230"},12849:{"value":"3231","name":"PARENTHESIZED IDEOGRAPH STOCK","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 682A 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3231"},12850:{"value":"3232","name":"PARENTHESIZED IDEOGRAPH HAVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 6709 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3232"},12851:{"value":"3233","name":"PARENTHESIZED IDEOGRAPH SOCIETY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 793E 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3233"},12852:{"value":"3234","name":"PARENTHESIZED IDEOGRAPH NAME","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 540D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3234"},12853:{"value":"3235","name":"PARENTHESIZED IDEOGRAPH SPECIAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 7279 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3235"},12854:{"value":"3236","name":"PARENTHESIZED IDEOGRAPH FINANCIAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 8CA1 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3236"},12855:{"value":"3237","name":"PARENTHESIZED IDEOGRAPH CONGRATULATION","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 795D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3237"},12856:{"value":"3238","name":"PARENTHESIZED IDEOGRAPH LABOR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 52B4 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3238"},12857:{"value":"3239","name":"PARENTHESIZED IDEOGRAPH REPRESENT","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 4EE3 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3239"},12858:{"value":"323A","name":"PARENTHESIZED IDEOGRAPH CALL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 547C 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u323A"},12859:{"value":"323B","name":"PARENTHESIZED IDEOGRAPH STUDY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 5B66 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u323B"},12860:{"value":"323C","name":"PARENTHESIZED IDEOGRAPH SUPERVISE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 76E3 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u323C"},12861:{"value":"323D","name":"PARENTHESIZED IDEOGRAPH ENTERPRISE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 4F01 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u323D"},12862:{"value":"323E","name":"PARENTHESIZED IDEOGRAPH RESOURCE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 8CC7 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u323E"},12863:{"value":"323F","name":"PARENTHESIZED IDEOGRAPH ALLIANCE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 5354 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u323F"},12864:{"value":"3240","name":"PARENTHESIZED IDEOGRAPH FESTIVAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 796D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3240"},12865:{"value":"3241","name":"PARENTHESIZED IDEOGRAPH REST","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 4F11 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3241"},12866:{"value":"3242","name":"PARENTHESIZED IDEOGRAPH SELF","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 81EA 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3242"},12867:{"value":"3243","name":"PARENTHESIZED IDEOGRAPH REACH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 81F3 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3243"},12868:{"value":"3244","name":"CIRCLED IDEOGRAPH QUESTION","category":"So","class":"0","bidirectional_category":"L","mapping":" 554F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3244"},12869:{"value":"3245","name":"CIRCLED IDEOGRAPH KINDERGARTEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 5E7C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3245"},12870:{"value":"3246","name":"CIRCLED IDEOGRAPH SCHOOL","category":"So","class":"0","bidirectional_category":"L","mapping":" 6587","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3246"},12871:{"value":"3247","name":"CIRCLED IDEOGRAPH KOTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 7B8F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3247"},12880:{"value":"3250","name":"PARTNERSHIP SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0050 0054 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3250"},12896:{"value":"3260","name":"CIRCLED HANGUL KIYEOK","category":"So","class":"0","bidirectional_category":"L","mapping":" 1100","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL GIYEOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3260"},12897:{"value":"3261","name":"CIRCLED HANGUL NIEUN","category":"So","class":"0","bidirectional_category":"L","mapping":" 1102","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3261"},12898:{"value":"3262","name":"CIRCLED HANGUL TIKEUT","category":"So","class":"0","bidirectional_category":"L","mapping":" 1103","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL DIGEUD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3262"},12899:{"value":"3263","name":"CIRCLED HANGUL RIEUL","category":"So","class":"0","bidirectional_category":"L","mapping":" 1105","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL LIEUL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3263"},12900:{"value":"3264","name":"CIRCLED HANGUL MIEUM","category":"So","class":"0","bidirectional_category":"L","mapping":" 1106","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3264"},12901:{"value":"3265","name":"CIRCLED HANGUL PIEUP","category":"So","class":"0","bidirectional_category":"L","mapping":" 1107","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL BIEUB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3265"},12902:{"value":"3266","name":"CIRCLED HANGUL SIOS","category":"So","class":"0","bidirectional_category":"L","mapping":" 1109","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3266"},12903:{"value":"3267","name":"CIRCLED HANGUL IEUNG","category":"So","class":"0","bidirectional_category":"L","mapping":" 110B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3267"},12904:{"value":"3268","name":"CIRCLED HANGUL CIEUC","category":"So","class":"0","bidirectional_category":"L","mapping":" 110C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL JIEUJ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3268"},12905:{"value":"3269","name":"CIRCLED HANGUL CHIEUCH","category":"So","class":"0","bidirectional_category":"L","mapping":" 110E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL CIEUC","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3269"},12906:{"value":"326A","name":"CIRCLED HANGUL KHIEUKH","category":"So","class":"0","bidirectional_category":"L","mapping":" 110F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL KIYEOK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u326A"},12907:{"value":"326B","name":"CIRCLED HANGUL THIEUTH","category":"So","class":"0","bidirectional_category":"L","mapping":" 1110","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL TIEUT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u326B"},12908:{"value":"326C","name":"CIRCLED HANGUL PHIEUPH","category":"So","class":"0","bidirectional_category":"L","mapping":" 1111","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL PIEUP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u326C"},12909:{"value":"326D","name":"CIRCLED HANGUL HIEUH","category":"So","class":"0","bidirectional_category":"L","mapping":" 1112","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u326D"},12910:{"value":"326E","name":"CIRCLED HANGUL KIYEOK A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1100 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL GA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u326E"},12911:{"value":"326F","name":"CIRCLED HANGUL NIEUN A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1102 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL NA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u326F"},12912:{"value":"3270","name":"CIRCLED HANGUL TIKEUT A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1103 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL DA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3270"},12913:{"value":"3271","name":"CIRCLED HANGUL RIEUL A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1105 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL LA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3271"},12914:{"value":"3272","name":"CIRCLED HANGUL MIEUM A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1106 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL MA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3272"},12915:{"value":"3273","name":"CIRCLED HANGUL PIEUP A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1107 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL BA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3273"},12916:{"value":"3274","name":"CIRCLED HANGUL SIOS A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1109 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL SA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3274"},12917:{"value":"3275","name":"CIRCLED HANGUL IEUNG A","category":"So","class":"0","bidirectional_category":"L","mapping":" 110B 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL A","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3275"},12918:{"value":"3276","name":"CIRCLED HANGUL CIEUC A","category":"So","class":"0","bidirectional_category":"L","mapping":" 110C 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL JA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3276"},12919:{"value":"3277","name":"CIRCLED HANGUL CHIEUCH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 110E 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL CA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3277"},12920:{"value":"3278","name":"CIRCLED HANGUL KHIEUKH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 110F 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL KA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3278"},12921:{"value":"3279","name":"CIRCLED HANGUL THIEUTH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1110 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL TA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3279"},12922:{"value":"327A","name":"CIRCLED HANGUL PHIEUPH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1111 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL PA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u327A"},12923:{"value":"327B","name":"CIRCLED HANGUL HIEUH A","category":"So","class":"0","bidirectional_category":"L","mapping":" 1112 1161","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED HANGUL HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u327B"},12924:{"value":"327C","name":"CIRCLED KOREAN CHARACTER CHAMKO","category":"So","class":"0","bidirectional_category":"ON","mapping":" 110E 1161 11B7 1100 1169","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u327C"},12925:{"value":"327D","name":"CIRCLED KOREAN CHARACTER JUEUI","category":"So","class":"0","bidirectional_category":"ON","mapping":" 110C 116E 110B 1174","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u327D"},12926:{"value":"327E","name":"CIRCLED HANGUL IEUNG U","category":"So","class":"0","bidirectional_category":"ON","mapping":" 110B 116E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u327E"},12927:{"value":"327F","name":"KOREAN STANDARD SYMBOL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u327F"},12938:{"value":"328A","name":"CIRCLED IDEOGRAPH MOON","category":"So","class":"0","bidirectional_category":"L","mapping":" 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u328A"},12939:{"value":"328B","name":"CIRCLED IDEOGRAPH FIRE","category":"So","class":"0","bidirectional_category":"L","mapping":" 706B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u328B"},12940:{"value":"328C","name":"CIRCLED IDEOGRAPH WATER","category":"So","class":"0","bidirectional_category":"L","mapping":" 6C34","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u328C"},12941:{"value":"328D","name":"CIRCLED IDEOGRAPH WOOD","category":"So","class":"0","bidirectional_category":"L","mapping":" 6728","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u328D"},12942:{"value":"328E","name":"CIRCLED IDEOGRAPH METAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 91D1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u328E"},12943:{"value":"328F","name":"CIRCLED IDEOGRAPH EARTH","category":"So","class":"0","bidirectional_category":"L","mapping":" 571F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u328F"},12944:{"value":"3290","name":"CIRCLED IDEOGRAPH SUN","category":"So","class":"0","bidirectional_category":"L","mapping":" 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3290"},12945:{"value":"3291","name":"CIRCLED IDEOGRAPH STOCK","category":"So","class":"0","bidirectional_category":"L","mapping":" 682A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3291"},12946:{"value":"3292","name":"CIRCLED IDEOGRAPH HAVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 6709","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3292"},12947:{"value":"3293","name":"CIRCLED IDEOGRAPH SOCIETY","category":"So","class":"0","bidirectional_category":"L","mapping":" 793E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3293"},12948:{"value":"3294","name":"CIRCLED IDEOGRAPH NAME","category":"So","class":"0","bidirectional_category":"L","mapping":" 540D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3294"},12949:{"value":"3295","name":"CIRCLED IDEOGRAPH SPECIAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 7279","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3295"},12950:{"value":"3296","name":"CIRCLED IDEOGRAPH FINANCIAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 8CA1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3296"},12951:{"value":"3297","name":"CIRCLED IDEOGRAPH CONGRATULATION","category":"So","class":"0","bidirectional_category":"L","mapping":" 795D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3297"},12952:{"value":"3298","name":"CIRCLED IDEOGRAPH LABOR","category":"So","class":"0","bidirectional_category":"L","mapping":" 52B4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3298"},12953:{"value":"3299","name":"CIRCLED IDEOGRAPH SECRET","category":"So","class":"0","bidirectional_category":"L","mapping":" 79D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3299"},12954:{"value":"329A","name":"CIRCLED IDEOGRAPH MALE","category":"So","class":"0","bidirectional_category":"L","mapping":" 7537","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u329A"},12955:{"value":"329B","name":"CIRCLED IDEOGRAPH FEMALE","category":"So","class":"0","bidirectional_category":"L","mapping":" 5973","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u329B"},12956:{"value":"329C","name":"CIRCLED IDEOGRAPH SUITABLE","category":"So","class":"0","bidirectional_category":"L","mapping":" 9069","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u329C"},12957:{"value":"329D","name":"CIRCLED IDEOGRAPH EXCELLENT","category":"So","class":"0","bidirectional_category":"L","mapping":" 512A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u329D"},12958:{"value":"329E","name":"CIRCLED IDEOGRAPH PRINT","category":"So","class":"0","bidirectional_category":"L","mapping":" 5370","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u329E"},12959:{"value":"329F","name":"CIRCLED IDEOGRAPH ATTENTION","category":"So","class":"0","bidirectional_category":"L","mapping":" 6CE8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u329F"},12960:{"value":"32A0","name":"CIRCLED IDEOGRAPH ITEM","category":"So","class":"0","bidirectional_category":"L","mapping":" 9805","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A0"},12961:{"value":"32A1","name":"CIRCLED IDEOGRAPH REST","category":"So","class":"0","bidirectional_category":"L","mapping":" 4F11","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A1"},12962:{"value":"32A2","name":"CIRCLED IDEOGRAPH COPY","category":"So","class":"0","bidirectional_category":"L","mapping":" 5199","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A2"},12963:{"value":"32A3","name":"CIRCLED IDEOGRAPH CORRECT","category":"So","class":"0","bidirectional_category":"L","mapping":" 6B63","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A3"},12964:{"value":"32A4","name":"CIRCLED IDEOGRAPH HIGH","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E0A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A4"},12965:{"value":"32A5","name":"CIRCLED IDEOGRAPH CENTRE","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E2D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"CIRCLED IDEOGRAPH CENTER","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A5"},12966:{"value":"32A6","name":"CIRCLED IDEOGRAPH LOW","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E0B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A6"},12967:{"value":"32A7","name":"CIRCLED IDEOGRAPH LEFT","category":"So","class":"0","bidirectional_category":"L","mapping":" 5DE6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A7"},12968:{"value":"32A8","name":"CIRCLED IDEOGRAPH RIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":" 53F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A8"},12969:{"value":"32A9","name":"CIRCLED IDEOGRAPH MEDICINE","category":"So","class":"0","bidirectional_category":"L","mapping":" 533B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32A9"},12970:{"value":"32AA","name":"CIRCLED IDEOGRAPH RELIGION","category":"So","class":"0","bidirectional_category":"L","mapping":" 5B97","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32AA"},12971:{"value":"32AB","name":"CIRCLED IDEOGRAPH STUDY","category":"So","class":"0","bidirectional_category":"L","mapping":" 5B66","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32AB"},12972:{"value":"32AC","name":"CIRCLED IDEOGRAPH SUPERVISE","category":"So","class":"0","bidirectional_category":"L","mapping":" 76E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32AC"},12973:{"value":"32AD","name":"CIRCLED IDEOGRAPH ENTERPRISE","category":"So","class":"0","bidirectional_category":"L","mapping":" 4F01","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32AD"},12974:{"value":"32AE","name":"CIRCLED IDEOGRAPH RESOURCE","category":"So","class":"0","bidirectional_category":"L","mapping":" 8CC7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32AE"},12975:{"value":"32AF","name":"CIRCLED IDEOGRAPH ALLIANCE","category":"So","class":"0","bidirectional_category":"L","mapping":" 5354","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32AF"},12976:{"value":"32B0","name":"CIRCLED IDEOGRAPH NIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":" 591C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32B0"},12992:{"value":"32C0","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C0"},12993:{"value":"32C1","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C1"},12994:{"value":"32C2","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0033 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C2"},12995:{"value":"32C3","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0034 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C3"},12996:{"value":"32C4","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0035 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C4"},12997:{"value":"32C5","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0036 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C5"},12998:{"value":"32C6","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0037 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C6"},12999:{"value":"32C7","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST","category":"So","class":"0","bidirectional_category":"L","mapping":" 0038 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C7"},13000:{"value":"32C8","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER","category":"So","class":"0","bidirectional_category":"L","mapping":" 0039 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C8"},13001:{"value":"32C9","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0030 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32C9"},13002:{"value":"32CA","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0031 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32CA"},13003:{"value":"32CB","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0032 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32CB"},13004:{"value":"32CC","name":"SQUARE HG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0048 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32CC"},13005:{"value":"32CD","name":"SQUARE ERG","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0065 0072 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32CD"},13006:{"value":"32CE","name":"SQUARE EV","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0065 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32CE"},13007:{"value":"32CF","name":"LIMITED LIABILITY SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 004C 0054 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32CF"},13008:{"value":"32D0","name":"CIRCLED KATAKANA A","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D0"},13009:{"value":"32D1","name":"CIRCLED KATAKANA I","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D1"},13010:{"value":"32D2","name":"CIRCLED KATAKANA U","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D2"},13011:{"value":"32D3","name":"CIRCLED KATAKANA E","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D3"},13012:{"value":"32D4","name":"CIRCLED KATAKANA O","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D4"},13013:{"value":"32D5","name":"CIRCLED KATAKANA KA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D5"},13014:{"value":"32D6","name":"CIRCLED KATAKANA KI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D6"},13015:{"value":"32D7","name":"CIRCLED KATAKANA KU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D7"},13016:{"value":"32D8","name":"CIRCLED KATAKANA KE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D8"},13017:{"value":"32D9","name":"CIRCLED KATAKANA KO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32D9"},13018:{"value":"32DA","name":"CIRCLED KATAKANA SA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32DA"},13019:{"value":"32DB","name":"CIRCLED KATAKANA SI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32DB"},13020:{"value":"32DC","name":"CIRCLED KATAKANA SU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32DC"},13021:{"value":"32DD","name":"CIRCLED KATAKANA SE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30BB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32DD"},13022:{"value":"32DE","name":"CIRCLED KATAKANA SO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32DE"},13023:{"value":"32DF","name":"CIRCLED KATAKANA TA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32DF"},13024:{"value":"32E0","name":"CIRCLED KATAKANA TI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E0"},13025:{"value":"32E1","name":"CIRCLED KATAKANA TU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E1"},13026:{"value":"32E2","name":"CIRCLED KATAKANA TE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E2"},13027:{"value":"32E3","name":"CIRCLED KATAKANA TO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E3"},13028:{"value":"32E4","name":"CIRCLED KATAKANA NA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E4"},13029:{"value":"32E5","name":"CIRCLED KATAKANA NI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E5"},13030:{"value":"32E6","name":"CIRCLED KATAKANA NU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E6"},13031:{"value":"32E7","name":"CIRCLED KATAKANA NE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E7"},13032:{"value":"32E8","name":"CIRCLED KATAKANA NO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E8"},13033:{"value":"32E9","name":"CIRCLED KATAKANA HA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32E9"},13034:{"value":"32EA","name":"CIRCLED KATAKANA HI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32EA"},13035:{"value":"32EB","name":"CIRCLED KATAKANA HU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32EB"},13036:{"value":"32EC","name":"CIRCLED KATAKANA HE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32EC"},13037:{"value":"32ED","name":"CIRCLED KATAKANA HO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32ED"},13038:{"value":"32EE","name":"CIRCLED KATAKANA MA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32EE"},13039:{"value":"32EF","name":"CIRCLED KATAKANA MI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32EF"},13040:{"value":"32F0","name":"CIRCLED KATAKANA MU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F0"},13041:{"value":"32F1","name":"CIRCLED KATAKANA ME","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F1"},13042:{"value":"32F2","name":"CIRCLED KATAKANA MO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F2"},13043:{"value":"32F3","name":"CIRCLED KATAKANA YA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F3"},13044:{"value":"32F4","name":"CIRCLED KATAKANA YU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F4"},13045:{"value":"32F5","name":"CIRCLED KATAKANA YO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F5"},13046:{"value":"32F6","name":"CIRCLED KATAKANA RA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F6"},13047:{"value":"32F7","name":"CIRCLED KATAKANA RI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F7"},13048:{"value":"32F8","name":"CIRCLED KATAKANA RU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F8"},13049:{"value":"32F9","name":"CIRCLED KATAKANA RE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32F9"},13050:{"value":"32FA","name":"CIRCLED KATAKANA RO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32FA"},13051:{"value":"32FB","name":"CIRCLED KATAKANA WA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32FB"},13052:{"value":"32FC","name":"CIRCLED KATAKANA WI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32FC"},13053:{"value":"32FD","name":"CIRCLED KATAKANA WE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30F1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32FD"},13054:{"value":"32FE","name":"CIRCLED KATAKANA WO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30F2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32FE"},13055:{"value":"32FF","name":"SQUARE ERA NAME REIWA","category":"So","class":"0","bidirectional_category":"L","mapping":" 4EE4 548C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u32FF"},13056:{"value":"3300","name":"SQUARE APAATO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A2 30D1 30FC 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED APAATO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3300"},13057:{"value":"3301","name":"SQUARE ARUHUA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A2 30EB 30D5 30A1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED ARUHUA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3301"},13058:{"value":"3302","name":"SQUARE ANPEA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A2 30F3 30DA 30A2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED ANPEA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3302"},13059:{"value":"3303","name":"SQUARE AARU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A2 30FC 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED AARU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3303"},13060:{"value":"3304","name":"SQUARE ININGU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A4 30CB 30F3 30B0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED ININGU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3304"},13061:{"value":"3305","name":"SQUARE INTI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A4 30F3 30C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED INTI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3305"},13062:{"value":"3306","name":"SQUARE UON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A6 30A9 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED UON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3306"},13063:{"value":"3307","name":"SQUARE ESUKUUDO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A8 30B9 30AF 30FC 30C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED ESUKUUDO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3307"},13064:{"value":"3308","name":"SQUARE EEKAA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30A8 30FC 30AB 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED EEKAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3308"},13065:{"value":"3309","name":"SQUARE ONSU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AA 30F3 30B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED ONSU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3309"},13066:{"value":"330A","name":"SQUARE OOMU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AA 30FC 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED OOMU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u330A"},13067:{"value":"330B","name":"SQUARE KAIRI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AB 30A4 30EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KAIRI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u330B"},13068:{"value":"330C","name":"SQUARE KARATTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AB 30E9 30C3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KARATTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u330C"},13069:{"value":"330D","name":"SQUARE KARORII","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AB 30ED 30EA 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KARORII","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u330D"},13070:{"value":"330E","name":"SQUARE GARON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AC 30ED 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GARON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u330E"},13071:{"value":"330F","name":"SQUARE GANMA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AC 30F3 30DE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GANMA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u330F"},13072:{"value":"3310","name":"SQUARE GIGA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AE 30AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GIGA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3310"},13073:{"value":"3311","name":"SQUARE GINII","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AE 30CB 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GINII","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3311"},13074:{"value":"3312","name":"SQUARE KYURII","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AD 30E5 30EA 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KYURII","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3312"},13075:{"value":"3313","name":"SQUARE GIRUDAA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AE 30EB 30C0 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GIRUDAA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3313"},13076:{"value":"3314","name":"SQUARE KIRO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AD 30ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KIRO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3314"},13077:{"value":"3315","name":"SQUARE KIROGURAMU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AD 30ED 30B0 30E9 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KIROGURAMU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3315"},13078:{"value":"3316","name":"SQUARE KIROMEETORU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AD 30ED 30E1 30FC 30C8 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KIROMEETORU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3316"},13079:{"value":"3317","name":"SQUARE KIROWATTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AD 30ED 30EF 30C3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KIROWATTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3317"},13080:{"value":"3318","name":"SQUARE GURAMU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B0 30E9 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GURAMU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3318"},13081:{"value":"3319","name":"SQUARE GURAMUTON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B0 30E9 30E0 30C8 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GURAMUTON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3319"},13082:{"value":"331A","name":"SQUARE KURUZEIRO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AF 30EB 30BC 30A4 30ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KURUZEIRO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u331A"},13083:{"value":"331B","name":"SQUARE KUROONE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30AF 30ED 30FC 30CD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KUROONE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u331B"},13084:{"value":"331C","name":"SQUARE KEESU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B1 30FC 30B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KEESU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u331C"},13085:{"value":"331D","name":"SQUARE KORUNA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B3 30EB 30CA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KORUNA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u331D"},13086:{"value":"331E","name":"SQUARE KOOPO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B3 30FC 30DD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KOOPO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u331E"},13087:{"value":"331F","name":"SQUARE SAIKURU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B5 30A4 30AF 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SAIKURU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u331F"},13088:{"value":"3320","name":"SQUARE SANTIIMU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B5 30F3 30C1 30FC 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SANTIIMU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3320"},13089:{"value":"3321","name":"SQUARE SIRINGU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B7 30EA 30F3 30B0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SIRINGU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3321"},13090:{"value":"3322","name":"SQUARE SENTI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30BB 30F3 30C1","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SENTI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3322"},13091:{"value":"3323","name":"SQUARE SENTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30BB 30F3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SENTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3323"},13092:{"value":"3324","name":"SQUARE DAASU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C0 30FC 30B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED DAASU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3324"},13093:{"value":"3325","name":"SQUARE DESI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C7 30B7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED DESI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3325"},13094:{"value":"3326","name":"SQUARE DORU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C9 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED DORU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3326"},13095:{"value":"3327","name":"SQUARE TON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C8 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED TON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3327"},13096:{"value":"3328","name":"SQUARE NANO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CA 30CE","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NANO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3328"},13097:{"value":"3329","name":"SQUARE NOTTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CE 30C3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NOTTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3329"},13098:{"value":"332A","name":"SQUARE HAITU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30CF 30A4 30C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HAITU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u332A"},13099:{"value":"332B","name":"SQUARE PAASENTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D1 30FC 30BB 30F3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PAASENTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u332B"},13100:{"value":"332C","name":"SQUARE PAATU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D1 30FC 30C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PAATU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u332C"},13101:{"value":"332D","name":"SQUARE BAARERU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D0 30FC 30EC 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED BAARERU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u332D"},13102:{"value":"332E","name":"SQUARE PIASUTORU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D4 30A2 30B9 30C8 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PIASUTORU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u332E"},13103:{"value":"332F","name":"SQUARE PIKURU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D4 30AF 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PIKURU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u332F"},13104:{"value":"3330","name":"SQUARE PIKO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D4 30B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PIKO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3330"},13105:{"value":"3331","name":"SQUARE BIRU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D3 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED BIRU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3331"},13106:{"value":"3332","name":"SQUARE HUARADDO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D5 30A1 30E9 30C3 30C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HUARADDO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3332"},13107:{"value":"3333","name":"SQUARE HUIITO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D5 30A3 30FC 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HUIITO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3333"},13108:{"value":"3334","name":"SQUARE BUSSYERU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D6 30C3 30B7 30A7 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED BUSSYERU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3334"},13109:{"value":"3335","name":"SQUARE HURAN","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D5 30E9 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HURAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3335"},13110:{"value":"3336","name":"SQUARE HEKUTAARU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D8 30AF 30BF 30FC 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HEKUTAARU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3336"},13111:{"value":"3337","name":"SQUARE PESO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DA 30BD","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PESO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3337"},13112:{"value":"3338","name":"SQUARE PENIHI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DA 30CB 30D2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PENIHI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3338"},13113:{"value":"3339","name":"SQUARE HERUTU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D8 30EB 30C4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HERUTU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3339"},13114:{"value":"333A","name":"SQUARE PENSU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DA 30F3 30B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PENSU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u333A"},13115:{"value":"333B","name":"SQUARE PEEZI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DA 30FC 30B8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PEEZI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u333B"},13116:{"value":"333C","name":"SQUARE BEETA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30D9 30FC 30BF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED BEETA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u333C"},13117:{"value":"333D","name":"SQUARE POINTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DD 30A4 30F3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED POINTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u333D"},13118:{"value":"333E","name":"SQUARE BORUTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DC 30EB 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED BORUTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u333E"},13119:{"value":"333F","name":"SQUARE HON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DB 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u333F"},13120:{"value":"3340","name":"SQUARE PONDO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DD 30F3 30C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PONDO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3340"},13121:{"value":"3341","name":"SQUARE HOORU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DB 30FC 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HOORU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3341"},13122:{"value":"3342","name":"SQUARE HOON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DB 30FC 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HOON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3342"},13123:{"value":"3343","name":"SQUARE MAIKURO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DE 30A4 30AF 30ED","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MAIKURO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3343"},13124:{"value":"3344","name":"SQUARE MAIRU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DE 30A4 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MAIRU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3344"},13125:{"value":"3345","name":"SQUARE MAHHA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DE 30C3 30CF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MAHHA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3345"},13126:{"value":"3346","name":"SQUARE MARUKU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DE 30EB 30AF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MARUKU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3346"},13127:{"value":"3347","name":"SQUARE MANSYON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DE 30F3 30B7 30E7 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MANSYON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3347"},13128:{"value":"3348","name":"SQUARE MIKURON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DF 30AF 30ED 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MIKURON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3348"},13129:{"value":"3349","name":"SQUARE MIRI","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DF 30EA","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MIRI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3349"},13130:{"value":"334A","name":"SQUARE MIRIBAARU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30DF 30EA 30D0 30FC 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MIRIBAARU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u334A"},13131:{"value":"334B","name":"SQUARE MEGA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E1 30AC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MEGA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u334B"},13132:{"value":"334C","name":"SQUARE MEGATON","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E1 30AC 30C8 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MEGATON","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u334C"},13133:{"value":"334D","name":"SQUARE MEETORU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E1 30FC 30C8 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MEETORU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u334D"},13134:{"value":"334E","name":"SQUARE YAADO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E4 30FC 30C9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED YAADO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u334E"},13135:{"value":"334F","name":"SQUARE YAARU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E4 30FC 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED YAARU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u334F"},13136:{"value":"3350","name":"SQUARE YUAN","category":"So","class":"0","bidirectional_category":"L","mapping":" 30E6 30A2 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED YUAN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3350"},13137:{"value":"3351","name":"SQUARE RITTORU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EA 30C3 30C8 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RITTORU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3351"},13138:{"value":"3352","name":"SQUARE RIRA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EA 30E9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RIRA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3352"},13139:{"value":"3353","name":"SQUARE RUPII","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EB 30D4 30FC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RUPII","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3353"},13140:{"value":"3354","name":"SQUARE RUUBURU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EB 30FC 30D6 30EB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RUUBURU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3354"},13141:{"value":"3355","name":"SQUARE REMU","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EC 30E0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED REMU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3355"},13142:{"value":"3356","name":"SQUARE RENTOGEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EC 30F3 30C8 30B2 30F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RENTOGEN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3356"},13143:{"value":"3357","name":"SQUARE WATTO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30EF 30C3 30C8","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED WATTO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3357"},13144:{"value":"3358","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO","category":"So","class":"0","bidirectional_category":"L","mapping":" 0030 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3358"},13145:{"value":"3359","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3359"},13146:{"value":"335A","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u335A"},13147:{"value":"335B","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0033 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u335B"},13148:{"value":"335C","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0034 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u335C"},13149:{"value":"335D","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0035 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u335D"},13150:{"value":"335E","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX","category":"So","class":"0","bidirectional_category":"L","mapping":" 0036 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u335E"},13151:{"value":"335F","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0037 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u335F"},13152:{"value":"3360","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":" 0038 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3360"},13153:{"value":"3361","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0039 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3361"},13154:{"value":"3362","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0030 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3362"},13155:{"value":"3363","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0031 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3363"},13156:{"value":"3364","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0032 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3364"},13157:{"value":"3365","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0033 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3365"},13158:{"value":"3366","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0034 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3366"},13159:{"value":"3367","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0035 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3367"},13160:{"value":"3368","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0036 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3368"},13161:{"value":"3369","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0037 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3369"},13162:{"value":"336A","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0038 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u336A"},13163:{"value":"336B","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0039 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u336B"},13164:{"value":"336C","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0030 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u336C"},13165:{"value":"336D","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0031 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u336D"},13166:{"value":"336E","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0032 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u336E"},13167:{"value":"336F","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0033 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u336F"},13168:{"value":"3370","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0034 70B9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3370"},13169:{"value":"3371","name":"SQUARE HPA","category":"So","class":"0","bidirectional_category":"L","mapping":" 0068 0050 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3371"},13170:{"value":"3372","name":"SQUARE DA","category":"So","class":"0","bidirectional_category":"L","mapping":" 0064 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3372"},13171:{"value":"3373","name":"SQUARE AU","category":"So","class":"0","bidirectional_category":"L","mapping":" 0041 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3373"},13172:{"value":"3374","name":"SQUARE BAR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0062 0061 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3374"},13173:{"value":"3375","name":"SQUARE OV","category":"So","class":"0","bidirectional_category":"L","mapping":" 006F 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3375"},13174:{"value":"3376","name":"SQUARE PC","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3376"},13175:{"value":"3377","name":"SQUARE DM","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0064 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3377"},13176:{"value":"3378","name":"SQUARE DM SQUARED","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0064 006D 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3378"},13177:{"value":"3379","name":"SQUARE DM CUBED","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0064 006D 00B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3379"},13178:{"value":"337A","name":"SQUARE IU","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0049 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u337A"},13179:{"value":"337B","name":"SQUARE ERA NAME HEISEI","category":"So","class":"0","bidirectional_category":"L","mapping":" 5E73 6210","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED TWO IDEOGRAPHS ERA NAME HEISEI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u337B"},13180:{"value":"337C","name":"SQUARE ERA NAME SYOUWA","category":"So","class":"0","bidirectional_category":"L","mapping":" 662D 548C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u337C"},13181:{"value":"337D","name":"SQUARE ERA NAME TAISYOU","category":"So","class":"0","bidirectional_category":"L","mapping":" 5927 6B63","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u337D"},13182:{"value":"337E","name":"SQUARE ERA NAME MEIZI","category":"So","class":"0","bidirectional_category":"L","mapping":" 660E 6CBB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED TWO IDEOGRAPHS ERA NAME MEIZI","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u337E"},13183:{"value":"337F","name":"SQUARE CORPORATION","category":"So","class":"0","bidirectional_category":"L","mapping":" 682A 5F0F 4F1A 793E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED FOUR IDEOGRAPHS CORPORATION","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u337F"},13184:{"value":"3380","name":"SQUARE PA AMPS","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PA AMPS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3380"},13185:{"value":"3381","name":"SQUARE NA","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3381"},13186:{"value":"3382","name":"SQUARE MU A","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU A","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3382"},13187:{"value":"3383","name":"SQUARE MA","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3383"},13188:{"value":"3384","name":"SQUARE KA","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3384"},13189:{"value":"3385","name":"SQUARE KB","category":"So","class":"0","bidirectional_category":"L","mapping":" 004B 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3385"},13190:{"value":"3386","name":"SQUARE MB","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3386"},13191:{"value":"3387","name":"SQUARE GB","category":"So","class":"0","bidirectional_category":"L","mapping":" 0047 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3387"},13192:{"value":"3388","name":"SQUARE CAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063 0061 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3388"},13193:{"value":"3389","name":"SQUARE KCAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0063 0061 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KCAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3389"},13194:{"value":"338A","name":"SQUARE PF","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u338A"},13195:{"value":"338B","name":"SQUARE NF","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NF","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u338B"},13196:{"value":"338C","name":"SQUARE MU F","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU F","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u338C"},13197:{"value":"338D","name":"SQUARE MU G","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU G","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u338D"},13198:{"value":"338E","name":"SQUARE MG","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u338E"},13199:{"value":"338F","name":"SQUARE KG","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u338F"},13200:{"value":"3390","name":"SQUARE HZ","category":"So","class":"0","bidirectional_category":"L","mapping":" 0048 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HZ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3390"},13201:{"value":"3391","name":"SQUARE KHZ","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0048 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KHZ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3391"},13202:{"value":"3392","name":"SQUARE MHZ","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 0048 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MHZ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3392"},13203:{"value":"3393","name":"SQUARE GHZ","category":"So","class":"0","bidirectional_category":"L","mapping":" 0047 0048 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GHZ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3393"},13204:{"value":"3394","name":"SQUARE THZ","category":"So","class":"0","bidirectional_category":"L","mapping":" 0054 0048 007A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED THZ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3394"},13205:{"value":"3395","name":"SQUARE MU L","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 2113","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU L","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3395"},13206:{"value":"3396","name":"SQUARE ML","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 2113","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED ML","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3396"},13207:{"value":"3397","name":"SQUARE DL","category":"So","class":"0","bidirectional_category":"L","mapping":" 0064 2113","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED DL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3397"},13208:{"value":"3398","name":"SQUARE KL","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 2113","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3398"},13209:{"value":"3399","name":"SQUARE FM","category":"So","class":"0","bidirectional_category":"L","mapping":" 0066 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED FM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3399"},13210:{"value":"339A","name":"SQUARE NM","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u339A"},13211:{"value":"339B","name":"SQUARE MU M","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU M","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u339B"},13212:{"value":"339C","name":"SQUARE MM","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u339C"},13213:{"value":"339D","name":"SQUARE CM","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u339D"},13214:{"value":"339E","name":"SQUARE KM","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u339E"},13215:{"value":"339F","name":"SQUARE MM SQUARED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 006D 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MM SQUARED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u339F"},13216:{"value":"33A0","name":"SQUARE CM SQUARED","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063 006D 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CM SQUARED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A0"},13217:{"value":"33A1","name":"SQUARE M SQUARED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED M SQUARED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A1"},13218:{"value":"33A2","name":"SQUARE KM SQUARED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 006D 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KM SQUARED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A2"},13219:{"value":"33A3","name":"SQUARE MM CUBED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 006D 00B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MM CUBED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A3"},13220:{"value":"33A4","name":"SQUARE CM CUBED","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063 006D 00B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CM CUBED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A4"},13221:{"value":"33A5","name":"SQUARE M CUBED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 00B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED M CUBED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A5"},13222:{"value":"33A6","name":"SQUARE KM CUBED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 006D 00B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KM CUBED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A6"},13223:{"value":"33A7","name":"SQUARE M OVER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 2215 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED M OVER S","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A7"},13224:{"value":"33A8","name":"SQUARE M OVER S SQUARED","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 2215 0073 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED M OVER S SQUARED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A8"},13225:{"value":"33A9","name":"SQUARE PA","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33A9"},13226:{"value":"33AA","name":"SQUARE KPA","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0050 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KPA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33AA"},13227:{"value":"33AB","name":"SQUARE MPA","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 0050 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MPA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33AB"},13228:{"value":"33AC","name":"SQUARE GPA","category":"So","class":"0","bidirectional_category":"L","mapping":" 0047 0050 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GPA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33AC"},13229:{"value":"33AD","name":"SQUARE RAD","category":"So","class":"0","bidirectional_category":"L","mapping":" 0072 0061 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RAD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33AD"},13230:{"value":"33AE","name":"SQUARE RAD OVER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 0072 0061 0064 2215 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RAD OVER S","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33AE"},13231:{"value":"33AF","name":"SQUARE RAD OVER S SQUARED","category":"So","class":"0","bidirectional_category":"L","mapping":" 0072 0061 0064 2215 0073 00B2","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED RAD OVER S SQUARED","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33AF"},13232:{"value":"33B0","name":"SQUARE PS","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B0"},13233:{"value":"33B1","name":"SQUARE NS","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B1"},13234:{"value":"33B2","name":"SQUARE MU S","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU S","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B2"},13235:{"value":"33B3","name":"SQUARE MS","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0073","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MS","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B3"},13236:{"value":"33B4","name":"SQUARE PV","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PV","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B4"},13237:{"value":"33B5","name":"SQUARE NV","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NV","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B5"},13238:{"value":"33B6","name":"SQUARE MU V","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU V","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B6"},13239:{"value":"33B7","name":"SQUARE MV","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MV","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B7"},13240:{"value":"33B8","name":"SQUARE KV","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KV","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B8"},13241:{"value":"33B9","name":"SQUARE MV MEGA","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MV MEGA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33B9"},13242:{"value":"33BA","name":"SQUARE PW","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33BA"},13243:{"value":"33BB","name":"SQUARE NW","category":"So","class":"0","bidirectional_category":"L","mapping":" 006E 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED NW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33BB"},13244:{"value":"33BC","name":"SQUARE MU W","category":"So","class":"0","bidirectional_category":"L","mapping":" 03BC 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MU W","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33BC"},13245:{"value":"33BD","name":"SQUARE MW","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33BD"},13246:{"value":"33BE","name":"SQUARE KW","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KW","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33BE"},13247:{"value":"33BF","name":"SQUARE MW MEGA","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MW MEGA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33BF"},13248:{"value":"33C0","name":"SQUARE K OHM","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED K OHM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C0"},13249:{"value":"33C1","name":"SQUARE M OHM","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 03A9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED M OHM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C1"},13250:{"value":"33C2","name":"SQUARE AM","category":"So","class":"0","bidirectional_category":"L","mapping":" 0061 002E 006D 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED AM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C2"},13251:{"value":"33C3","name":"SQUARE BQ","category":"So","class":"0","bidirectional_category":"L","mapping":" 0042 0071","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED BQ","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C3"},13252:{"value":"33C4","name":"SQUARE CC","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063 0063","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CC","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C4"},13253:{"value":"33C5","name":"SQUARE CD","category":"So","class":"0","bidirectional_category":"L","mapping":" 0063 0064","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CD","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C5"},13254:{"value":"33C6","name":"SQUARE C OVER KG","category":"So","class":"0","bidirectional_category":"L","mapping":" 0043 2215 006B 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED C OVER KG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C6"},13255:{"value":"33C7","name":"SQUARE CO","category":"So","class":"0","bidirectional_category":"L","mapping":" 0043 006F 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED CO","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C7"},13256:{"value":"33C8","name":"SQUARE DB","category":"So","class":"0","bidirectional_category":"L","mapping":" 0064 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED DB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C8"},13257:{"value":"33C9","name":"SQUARE GY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0047 0079","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED GY","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33C9"},13258:{"value":"33CA","name":"SQUARE HA","category":"So","class":"0","bidirectional_category":"L","mapping":" 0068 0061","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HA","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33CA"},13259:{"value":"33CB","name":"SQUARE HP","category":"So","class":"0","bidirectional_category":"L","mapping":" 0048 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED HP","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33CB"},13260:{"value":"33CC","name":"SQUARE IN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0069 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED IN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33CC"},13261:{"value":"33CD","name":"SQUARE KK","category":"So","class":"0","bidirectional_category":"L","mapping":" 004B 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KK","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33CD"},13262:{"value":"33CE","name":"SQUARE KM CAPITAL","category":"So","class":"0","bidirectional_category":"L","mapping":" 004B 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KM CAPITAL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33CE"},13263:{"value":"33CF","name":"SQUARE KT","category":"So","class":"0","bidirectional_category":"L","mapping":" 006B 0074","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED KT","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33CF"},13264:{"value":"33D0","name":"SQUARE LM","category":"So","class":"0","bidirectional_category":"L","mapping":" 006C 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED LM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D0"},13265:{"value":"33D1","name":"SQUARE LN","category":"So","class":"0","bidirectional_category":"L","mapping":" 006C 006E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED LN","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D1"},13266:{"value":"33D2","name":"SQUARE LOG","category":"So","class":"0","bidirectional_category":"L","mapping":" 006C 006F 0067","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED LOG","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D2"},13267:{"value":"33D3","name":"SQUARE LX","category":"So","class":"0","bidirectional_category":"L","mapping":" 006C 0078","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED LX","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D3"},13268:{"value":"33D4","name":"SQUARE MB SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MB SMALL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D4"},13269:{"value":"33D5","name":"SQUARE MIL","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 0069 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MIL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D5"},13270:{"value":"33D6","name":"SQUARE MOL","category":"So","class":"0","bidirectional_category":"L","mapping":" 006D 006F 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED MOL","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D6"},13271:{"value":"33D7","name":"SQUARE PH","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PH","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D7"},13272:{"value":"33D8","name":"SQUARE PM","category":"So","class":"0","bidirectional_category":"L","mapping":" 0070 002E 006D 002E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D8"},13273:{"value":"33D9","name":"SQUARE PPM","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050 0050 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PPM","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33D9"},13274:{"value":"33DA","name":"SQUARE PR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED PR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33DA"},13275:{"value":"33DB","name":"SQUARE SR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0073 0072","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33DB"},13276:{"value":"33DC","name":"SQUARE SV","category":"So","class":"0","bidirectional_category":"L","mapping":" 0053 0076","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED SV","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33DC"},13277:{"value":"33DD","name":"SQUARE WB","category":"So","class":"0","bidirectional_category":"L","mapping":" 0057 0062","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"SQUARED WB","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33DD"},13278:{"value":"33DE","name":"SQUARE V OVER M","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0056 2215 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33DE"},13279:{"value":"33DF","name":"SQUARE A OVER M","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0041 2215 006D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33DF"},13280:{"value":"33E0","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E0"},13281:{"value":"33E1","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E1"},13282:{"value":"33E2","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0033 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E2"},13283:{"value":"33E3","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0034 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E3"},13284:{"value":"33E4","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0035 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E4"},13285:{"value":"33E5","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX","category":"So","class":"0","bidirectional_category":"L","mapping":" 0036 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E5"},13286:{"value":"33E6","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0037 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E6"},13287:{"value":"33E7","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":" 0038 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E7"},13288:{"value":"33E8","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0039 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E8"},13289:{"value":"33E9","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0030 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33E9"},13290:{"value":"33EA","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0031 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33EA"},13291:{"value":"33EB","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0032 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33EB"},13292:{"value":"33EC","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0033 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33EC"},13293:{"value":"33ED","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0034 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33ED"},13294:{"value":"33EE","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0035 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33EE"},13295:{"value":"33EF","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0036 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33EF"},13296:{"value":"33F0","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0037 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F0"},13297:{"value":"33F1","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0038 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F1"},13298:{"value":"33F2","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0031 0039 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F2"},13299:{"value":"33F3","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0030 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F3"},13300:{"value":"33F4","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0031 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F4"},13301:{"value":"33F5","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0032 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F5"},13302:{"value":"33F6","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0033 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F6"},13303:{"value":"33F7","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0034 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F7"},13304:{"value":"33F8","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0035 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F8"},13305:{"value":"33F9","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0036 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33F9"},13306:{"value":"33FA","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0037 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33FA"},13307:{"value":"33FB","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0038 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33FB"},13308:{"value":"33FC","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0032 0039 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33FC"},13309:{"value":"33FD","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY","category":"So","class":"0","bidirectional_category":"L","mapping":" 0033 0030 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33FD"},13310:{"value":"33FE","name":"IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE","category":"So","class":"0","bidirectional_category":"L","mapping":" 0033 0031 65E5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33FE"},13311:{"value":"33FF","name":"SQUARE GAL","category":"So","class":"0","bidirectional_category":"ON","mapping":" 0067 0061 006C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u33FF"},19904:{"value":"4DC0","name":"HEXAGRAM FOR THE CREATIVE HEAVEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC0"},19905:{"value":"4DC1","name":"HEXAGRAM FOR THE RECEPTIVE EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC1"},19906:{"value":"4DC2","name":"HEXAGRAM FOR DIFFICULTY AT THE BEGINNING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC2"},19907:{"value":"4DC3","name":"HEXAGRAM FOR YOUTHFUL FOLLY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC3"},19908:{"value":"4DC4","name":"HEXAGRAM FOR WAITING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC4"},19909:{"value":"4DC5","name":"HEXAGRAM FOR CONFLICT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC5"},19910:{"value":"4DC6","name":"HEXAGRAM FOR THE ARMY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC6"},19911:{"value":"4DC7","name":"HEXAGRAM FOR HOLDING TOGETHER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC7"},19912:{"value":"4DC8","name":"HEXAGRAM FOR SMALL TAMING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC8"},19913:{"value":"4DC9","name":"HEXAGRAM FOR TREADING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DC9"},19914:{"value":"4DCA","name":"HEXAGRAM FOR PEACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DCA"},19915:{"value":"4DCB","name":"HEXAGRAM FOR STANDSTILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DCB"},19916:{"value":"4DCC","name":"HEXAGRAM FOR FELLOWSHIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DCC"},19917:{"value":"4DCD","name":"HEXAGRAM FOR GREAT POSSESSION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DCD"},19918:{"value":"4DCE","name":"HEXAGRAM FOR MODESTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DCE"},19919:{"value":"4DCF","name":"HEXAGRAM FOR ENTHUSIASM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DCF"},19920:{"value":"4DD0","name":"HEXAGRAM FOR FOLLOWING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD0"},19921:{"value":"4DD1","name":"HEXAGRAM FOR WORK ON THE DECAYED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD1"},19922:{"value":"4DD2","name":"HEXAGRAM FOR APPROACH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD2"},19923:{"value":"4DD3","name":"HEXAGRAM FOR CONTEMPLATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD3"},19924:{"value":"4DD4","name":"HEXAGRAM FOR BITING THROUGH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD4"},19925:{"value":"4DD5","name":"HEXAGRAM FOR GRACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD5"},19926:{"value":"4DD6","name":"HEXAGRAM FOR SPLITTING APART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD6"},19927:{"value":"4DD7","name":"HEXAGRAM FOR RETURN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD7"},19928:{"value":"4DD8","name":"HEXAGRAM FOR INNOCENCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD8"},19929:{"value":"4DD9","name":"HEXAGRAM FOR GREAT TAMING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DD9"},19930:{"value":"4DDA","name":"HEXAGRAM FOR MOUTH CORNERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DDA"},19931:{"value":"4DDB","name":"HEXAGRAM FOR GREAT PREPONDERANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DDB"},19932:{"value":"4DDC","name":"HEXAGRAM FOR THE ABYSMAL WATER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DDC"},19933:{"value":"4DDD","name":"HEXAGRAM FOR THE CLINGING FIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DDD"},19934:{"value":"4DDE","name":"HEXAGRAM FOR INFLUENCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DDE"},19935:{"value":"4DDF","name":"HEXAGRAM FOR DURATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DDF"},19936:{"value":"4DE0","name":"HEXAGRAM FOR RETREAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE0"},19937:{"value":"4DE1","name":"HEXAGRAM FOR GREAT POWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE1"},19938:{"value":"4DE2","name":"HEXAGRAM FOR PROGRESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE2"},19939:{"value":"4DE3","name":"HEXAGRAM FOR DARKENING OF THE LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE3"},19940:{"value":"4DE4","name":"HEXAGRAM FOR THE FAMILY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE4"},19941:{"value":"4DE5","name":"HEXAGRAM FOR OPPOSITION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE5"},19942:{"value":"4DE6","name":"HEXAGRAM FOR OBSTRUCTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE6"},19943:{"value":"4DE7","name":"HEXAGRAM FOR DELIVERANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE7"},19944:{"value":"4DE8","name":"HEXAGRAM FOR DECREASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE8"},19945:{"value":"4DE9","name":"HEXAGRAM FOR INCREASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DE9"},19946:{"value":"4DEA","name":"HEXAGRAM FOR BREAKTHROUGH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DEA"},19947:{"value":"4DEB","name":"HEXAGRAM FOR COMING TO MEET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DEB"},19948:{"value":"4DEC","name":"HEXAGRAM FOR GATHERING TOGETHER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DEC"},19949:{"value":"4DED","name":"HEXAGRAM FOR PUSHING UPWARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DED"},19950:{"value":"4DEE","name":"HEXAGRAM FOR OPPRESSION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DEE"},19951:{"value":"4DEF","name":"HEXAGRAM FOR THE WELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DEF"},19952:{"value":"4DF0","name":"HEXAGRAM FOR REVOLUTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF0"},19953:{"value":"4DF1","name":"HEXAGRAM FOR THE CAULDRON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF1"},19954:{"value":"4DF2","name":"HEXAGRAM FOR THE AROUSING THUNDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF2"},19955:{"value":"4DF3","name":"HEXAGRAM FOR THE KEEPING STILL MOUNTAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF3"},19956:{"value":"4DF4","name":"HEXAGRAM FOR DEVELOPMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF4"},19957:{"value":"4DF5","name":"HEXAGRAM FOR THE MARRYING MAIDEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF5"},19958:{"value":"4DF6","name":"HEXAGRAM FOR ABUNDANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF6"},19959:{"value":"4DF7","name":"HEXAGRAM FOR THE WANDERER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF7"},19960:{"value":"4DF8","name":"HEXAGRAM FOR THE GENTLE WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF8"},19961:{"value":"4DF9","name":"HEXAGRAM FOR THE JOYOUS LAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DF9"},19962:{"value":"4DFA","name":"HEXAGRAM FOR DISPERSION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DFA"},19963:{"value":"4DFB","name":"HEXAGRAM FOR LIMITATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DFB"},19964:{"value":"4DFC","name":"HEXAGRAM FOR INNER TRUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DFC"},19965:{"value":"4DFD","name":"HEXAGRAM FOR SMALL PREPONDERANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DFD"},19966:{"value":"4DFE","name":"HEXAGRAM FOR AFTER COMPLETION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DFE"},19967:{"value":"4DFF","name":"HEXAGRAM FOR BEFORE COMPLETION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u4DFF"},42128:{"value":"A490","name":"YI RADICAL QOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA490"},42129:{"value":"A491","name":"YI RADICAL LI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA491"},42130:{"value":"A492","name":"YI RADICAL KIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA492"},42131:{"value":"A493","name":"YI RADICAL NYIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA493"},42132:{"value":"A494","name":"YI RADICAL CYP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA494"},42133:{"value":"A495","name":"YI RADICAL SSI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA495"},42134:{"value":"A496","name":"YI RADICAL GGOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA496"},42135:{"value":"A497","name":"YI RADICAL GEP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA497"},42136:{"value":"A498","name":"YI RADICAL MI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA498"},42137:{"value":"A499","name":"YI RADICAL HXIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA499"},42138:{"value":"A49A","name":"YI RADICAL LYR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA49A"},42139:{"value":"A49B","name":"YI RADICAL BBUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA49B"},42140:{"value":"A49C","name":"YI RADICAL MOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA49C"},42141:{"value":"A49D","name":"YI RADICAL YO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA49D"},42142:{"value":"A49E","name":"YI RADICAL PUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA49E"},42143:{"value":"A49F","name":"YI RADICAL HXUO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA49F"},42144:{"value":"A4A0","name":"YI RADICAL TAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A0"},42145:{"value":"A4A1","name":"YI RADICAL GA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A1"},42146:{"value":"A4A2","name":"YI RADICAL ZUP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A2"},42147:{"value":"A4A3","name":"YI RADICAL CYT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A3"},42148:{"value":"A4A4","name":"YI RADICAL DDUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A4"},42149:{"value":"A4A5","name":"YI RADICAL BUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A5"},42150:{"value":"A4A6","name":"YI RADICAL GGUO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A6"},42151:{"value":"A4A7","name":"YI RADICAL NYOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A7"},42152:{"value":"A4A8","name":"YI RADICAL TU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A8"},42153:{"value":"A4A9","name":"YI RADICAL OP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4A9"},42154:{"value":"A4AA","name":"YI RADICAL JJUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4AA"},42155:{"value":"A4AB","name":"YI RADICAL ZOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4AB"},42156:{"value":"A4AC","name":"YI RADICAL PYT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4AC"},42157:{"value":"A4AD","name":"YI RADICAL HMO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4AD"},42158:{"value":"A4AE","name":"YI RADICAL YIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4AE"},42159:{"value":"A4AF","name":"YI RADICAL VUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4AF"},42160:{"value":"A4B0","name":"YI RADICAL SHY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B0"},42161:{"value":"A4B1","name":"YI RADICAL VEP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B1"},42162:{"value":"A4B2","name":"YI RADICAL ZA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B2"},42163:{"value":"A4B3","name":"YI RADICAL JO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B3"},42164:{"value":"A4B4","name":"YI RADICAL NZUP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B4"},42165:{"value":"A4B5","name":"YI RADICAL JJY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B5"},42166:{"value":"A4B6","name":"YI RADICAL GOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B6"},42167:{"value":"A4B7","name":"YI RADICAL JJIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B7"},42168:{"value":"A4B8","name":"YI RADICAL WO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B8"},42169:{"value":"A4B9","name":"YI RADICAL DU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4B9"},42170:{"value":"A4BA","name":"YI RADICAL SHUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4BA"},42171:{"value":"A4BB","name":"YI RADICAL LIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4BB"},42172:{"value":"A4BC","name":"YI RADICAL CY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4BC"},42173:{"value":"A4BD","name":"YI RADICAL CUOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4BD"},42174:{"value":"A4BE","name":"YI RADICAL CIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4BE"},42175:{"value":"A4BF","name":"YI RADICAL HXOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4BF"},42176:{"value":"A4C0","name":"YI RADICAL SHAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C0"},42177:{"value":"A4C1","name":"YI RADICAL ZUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C1"},42178:{"value":"A4C2","name":"YI RADICAL SHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C2"},42179:{"value":"A4C3","name":"YI RADICAL CHE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C3"},42180:{"value":"A4C4","name":"YI RADICAL ZZIET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C4"},42181:{"value":"A4C5","name":"YI RADICAL NBIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C5"},42182:{"value":"A4C6","name":"YI RADICAL KE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA4C6"},43048:{"value":"A828","name":"SYLOTI NAGRI POETRY MARK-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA828"},43049:{"value":"A829","name":"SYLOTI NAGRI POETRY MARK-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA829"},43050:{"value":"A82A","name":"SYLOTI NAGRI POETRY MARK-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA82A"},43051:{"value":"A82B","name":"SYLOTI NAGRI POETRY MARK-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA82B"},43062:{"value":"A836","name":"NORTH INDIC QUARTER MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA836"},43063:{"value":"A837","name":"NORTH INDIC PLACEHOLDER MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA837"},43065:{"value":"A839","name":"NORTH INDIC QUANTITY MARK","category":"So","class":"0","bidirectional_category":"ET","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uA839"},43639:{"value":"AA77","name":"MYANMAR SYMBOL AITON EXCLAMATION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA77"},43640:{"value":"AA78","name":"MYANMAR SYMBOL AITON ONE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA78"},43641:{"value":"AA79","name":"MYANMAR SYMBOL AITON TWO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uAA79"},64832:{"value":"FD40","name":"ARABIC LIGATURE RAHIMAHU ALLAAH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD40"},64833:{"value":"FD41","name":"ARABIC LIGATURE RADI ALLAAHU ANH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD41"},64834:{"value":"FD42","name":"ARABIC LIGATURE RADI ALLAAHU ANHAA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD42"},64835:{"value":"FD43","name":"ARABIC LIGATURE RADI ALLAAHU ANHUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD43"},64836:{"value":"FD44","name":"ARABIC LIGATURE RADI ALLAAHU ANHUMAA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD44"},64837:{"value":"FD45","name":"ARABIC LIGATURE RADI ALLAAHU ANHUNNA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD45"},64838:{"value":"FD46","name":"ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD46"},64839:{"value":"FD47","name":"ARABIC LIGATURE ALAYHI AS-SALAAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD47"},64840:{"value":"FD48","name":"ARABIC LIGATURE ALAYHIM AS-SALAAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD48"},64841:{"value":"FD49","name":"ARABIC LIGATURE ALAYHIMAA AS-SALAAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD49"},64842:{"value":"FD4A","name":"ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD4A"},64843:{"value":"FD4B","name":"ARABIC LIGATURE QUDDISA SIRRAH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD4B"},64844:{"value":"FD4C","name":"ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD4C"},64845:{"value":"FD4D","name":"ARABIC LIGATURE ALAYHAA AS-SALAAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD4D"},64846:{"value":"FD4E","name":"ARABIC LIGATURE TABAARAKA WA-TAAALAA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD4E"},64847:{"value":"FD4F","name":"ARABIC LIGATURE RAHIMAHUM ALLAAH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFD4F"},64975:{"value":"FDCF","name":"ARABIC LIGATURE SALAAMUHU ALAYNAA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDCF"},65021:{"value":"FDFD","name":"ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDFD"},65022:{"value":"FDFE","name":"ARABIC LIGATURE SUBHAANAHU WA TAAALAA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDFE"},65023:{"value":"FDFF","name":"ARABIC LIGATURE AZZA WA JALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFDFF"},65508:{"value":"FFE4","name":"FULLWIDTH BROKEN BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":" 00A6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"FULLWIDTH BROKEN VERTICAL BAR","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE4"},65512:{"value":"FFE8","name":"HALFWIDTH FORMS LIGHT VERTICAL","category":"So","class":"0","bidirectional_category":"ON","mapping":" 2502","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFE8"},65517:{"value":"FFED","name":"HALFWIDTH BLACK SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 25A0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFED"},65518:{"value":"FFEE","name":"HALFWIDTH WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":" 25CB","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFEE"},65532:{"value":"FFFC","name":"OBJECT REPLACEMENT CHARACTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFFC"},65533:{"value":"FFFD","name":"REPLACEMENT CHARACTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\uFFFD"},65847:{"value":"10137","name":"AEGEAN WEIGHT BASE UNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd37"},65848:{"value":"10138","name":"AEGEAN WEIGHT FIRST SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd38"},65849:{"value":"10139","name":"AEGEAN WEIGHT SECOND SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd39"},65850:{"value":"1013A","name":"AEGEAN WEIGHT THIRD SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd3a"},65851:{"value":"1013B","name":"AEGEAN WEIGHT FOURTH SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd3b"},65852:{"value":"1013C","name":"AEGEAN DRY MEASURE FIRST SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd3c"},65853:{"value":"1013D","name":"AEGEAN LIQUID MEASURE FIRST SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd3d"},65854:{"value":"1013E","name":"AEGEAN MEASURE SECOND SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd3e"},65855:{"value":"1013F","name":"AEGEAN MEASURE THIRD SUBUNIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd3f"},65913:{"value":"10179","name":"GREEK YEAR SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd79"},65914:{"value":"1017A","name":"GREEK TALENT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd7a"},65915:{"value":"1017B","name":"GREEK DRACHMA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd7b"},65916:{"value":"1017C","name":"GREEK OBOL SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd7c"},65917:{"value":"1017D","name":"GREEK TWO OBOLS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd7d"},65918:{"value":"1017E","name":"GREEK THREE OBOLS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd7e"},65919:{"value":"1017F","name":"GREEK FOUR OBOLS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd7f"},65920:{"value":"10180","name":"GREEK FIVE OBOLS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd80"},65921:{"value":"10181","name":"GREEK METRETES SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd81"},65922:{"value":"10182","name":"GREEK KYATHOS BASE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd82"},65923:{"value":"10183","name":"GREEK LITRA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd83"},65924:{"value":"10184","name":"GREEK OUNKIA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd84"},65925:{"value":"10185","name":"GREEK XESTES SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd85"},65926:{"value":"10186","name":"GREEK ARTABE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd86"},65927:{"value":"10187","name":"GREEK AROURA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd87"},65928:{"value":"10188","name":"GREEK GRAMMA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd88"},65929:{"value":"10189","name":"GREEK TRYBLION BASE SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd89"},65932:{"value":"1018C","name":"GREEK SINUSOID SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd8c"},65933:{"value":"1018D","name":"GREEK INDICTION SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd8d"},65934:{"value":"1018E","name":"NOMISMA SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd8e"},65936:{"value":"10190","name":"ROMAN SEXTANS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd90"},65937:{"value":"10191","name":"ROMAN UNCIA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd91"},65938:{"value":"10192","name":"ROMAN SEMUNCIA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd92"},65939:{"value":"10193","name":"ROMAN SEXTULA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd93"},65940:{"value":"10194","name":"ROMAN DIMIDIA SEXTULA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd94"},65941:{"value":"10195","name":"ROMAN SILIQUA SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd95"},65942:{"value":"10196","name":"ROMAN DENARIUS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd96"},65943:{"value":"10197","name":"ROMAN QUINARIUS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd97"},65944:{"value":"10198","name":"ROMAN SESTERTIUS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd98"},65945:{"value":"10199","name":"ROMAN DUPONDIUS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd99"},65946:{"value":"1019A","name":"ROMAN AS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd9a"},65947:{"value":"1019B","name":"ROMAN CENTURIAL SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd9b"},65948:{"value":"1019C","name":"ASCIA SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udd9c"},65952:{"value":"101A0","name":"GREEK SYMBOL TAU RHO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udda0"},66000:{"value":"101D0","name":"PHAISTOS DISC SIGN PEDESTRIAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd0"},66001:{"value":"101D1","name":"PHAISTOS DISC SIGN PLUMED HEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd1"},66002:{"value":"101D2","name":"PHAISTOS DISC SIGN TATTOOED HEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd2"},66003:{"value":"101D3","name":"PHAISTOS DISC SIGN CAPTIVE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd3"},66004:{"value":"101D4","name":"PHAISTOS DISC SIGN CHILD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd4"},66005:{"value":"101D5","name":"PHAISTOS DISC SIGN WOMAN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd5"},66006:{"value":"101D6","name":"PHAISTOS DISC SIGN HELMET","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd6"},66007:{"value":"101D7","name":"PHAISTOS DISC SIGN GAUNTLET","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd7"},66008:{"value":"101D8","name":"PHAISTOS DISC SIGN TIARA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd8"},66009:{"value":"101D9","name":"PHAISTOS DISC SIGN ARROW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddd9"},66010:{"value":"101DA","name":"PHAISTOS DISC SIGN BOW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddda"},66011:{"value":"101DB","name":"PHAISTOS DISC SIGN SHIELD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udddb"},66012:{"value":"101DC","name":"PHAISTOS DISC SIGN CLUB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udddc"},66013:{"value":"101DD","name":"PHAISTOS DISC SIGN MANACLES","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udddd"},66014:{"value":"101DE","name":"PHAISTOS DISC SIGN MATTOCK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddde"},66015:{"value":"101DF","name":"PHAISTOS DISC SIGN SAW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udddf"},66016:{"value":"101E0","name":"PHAISTOS DISC SIGN LID","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde0"},66017:{"value":"101E1","name":"PHAISTOS DISC SIGN BOOMERANG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde1"},66018:{"value":"101E2","name":"PHAISTOS DISC SIGN CARPENTRY PLANE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde2"},66019:{"value":"101E3","name":"PHAISTOS DISC SIGN DOLIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde3"},66020:{"value":"101E4","name":"PHAISTOS DISC SIGN COMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde4"},66021:{"value":"101E5","name":"PHAISTOS DISC SIGN SLING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde5"},66022:{"value":"101E6","name":"PHAISTOS DISC SIGN COLUMN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde6"},66023:{"value":"101E7","name":"PHAISTOS DISC SIGN BEEHIVE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde7"},66024:{"value":"101E8","name":"PHAISTOS DISC SIGN SHIP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde8"},66025:{"value":"101E9","name":"PHAISTOS DISC SIGN HORN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udde9"},66026:{"value":"101EA","name":"PHAISTOS DISC SIGN HIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddea"},66027:{"value":"101EB","name":"PHAISTOS DISC SIGN BULLS LEG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddeb"},66028:{"value":"101EC","name":"PHAISTOS DISC SIGN CAT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddec"},66029:{"value":"101ED","name":"PHAISTOS DISC SIGN RAM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\udded"},66030:{"value":"101EE","name":"PHAISTOS DISC SIGN EAGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddee"},66031:{"value":"101EF","name":"PHAISTOS DISC SIGN DOVE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddef"},66032:{"value":"101F0","name":"PHAISTOS DISC SIGN TUNNY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf0"},66033:{"value":"101F1","name":"PHAISTOS DISC SIGN BEE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf1"},66034:{"value":"101F2","name":"PHAISTOS DISC SIGN PLANE TREE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf2"},66035:{"value":"101F3","name":"PHAISTOS DISC SIGN VINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf3"},66036:{"value":"101F4","name":"PHAISTOS DISC SIGN PAPYRUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf4"},66037:{"value":"101F5","name":"PHAISTOS DISC SIGN ROSETTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf5"},66038:{"value":"101F6","name":"PHAISTOS DISC SIGN LILY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf6"},66039:{"value":"101F7","name":"PHAISTOS DISC SIGN OX BACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf7"},66040:{"value":"101F8","name":"PHAISTOS DISC SIGN FLUTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf8"},66041:{"value":"101F9","name":"PHAISTOS DISC SIGN GRATER","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddf9"},66042:{"value":"101FA","name":"PHAISTOS DISC SIGN STRAINER","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddfa"},66043:{"value":"101FB","name":"PHAISTOS DISC SIGN SMALL AXE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddfb"},66044:{"value":"101FC","name":"PHAISTOS DISC SIGN WAVY BAND","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud800\uddfc"},67703:{"value":"10877","name":"PALMYRENE LEFT-POINTING FLEURON","category":"So","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc77"},67704:{"value":"10878","name":"PALMYRENE RIGHT-POINTING FLEURON","category":"So","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udc78"},68296:{"value":"10AC8","name":"MANICHAEAN SIGN UD","category":"So","class":"0","bidirectional_category":"R","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud802\udec8"},71487:{"value":"1173F","name":"AHOM SYMBOL VI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud805\udf3f"},73685:{"value":"11FD5","name":"TAMIL SIGN NEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd5"},73686:{"value":"11FD6","name":"TAMIL SIGN CEVITU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd6"},73687:{"value":"11FD7","name":"TAMIL SIGN AAZHAAKKU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd7"},73688:{"value":"11FD8","name":"TAMIL SIGN UZHAKKU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd8"},73689:{"value":"11FD9","name":"TAMIL SIGN MUUVUZHAKKU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfd9"},73690:{"value":"11FDA","name":"TAMIL SIGN KURUNI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfda"},73691:{"value":"11FDB","name":"TAMIL SIGN PATHAKKU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfdb"},73692:{"value":"11FDC","name":"TAMIL SIGN MUKKURUNI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfdc"},73697:{"value":"11FE1","name":"TAMIL SIGN PAARAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe1"},73698:{"value":"11FE2","name":"TAMIL SIGN KUZHI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe2"},73699:{"value":"11FE3","name":"TAMIL SIGN VELI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe3"},73700:{"value":"11FE4","name":"TAMIL WET CULTIVATION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe4"},73701:{"value":"11FE5","name":"TAMIL DRY CULTIVATION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe5"},73702:{"value":"11FE6","name":"TAMIL LAND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe6"},73703:{"value":"11FE7","name":"TAMIL SALT PAN SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe7"},73704:{"value":"11FE8","name":"TAMIL TRADITIONAL CREDIT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe8"},73705:{"value":"11FE9","name":"TAMIL TRADITIONAL NUMBER SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfe9"},73706:{"value":"11FEA","name":"TAMIL CURRENT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfea"},73707:{"value":"11FEB","name":"TAMIL AND ODD SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfeb"},73708:{"value":"11FEC","name":"TAMIL SPENT SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfec"},73709:{"value":"11FED","name":"TAMIL TOTAL SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfed"},73710:{"value":"11FEE","name":"TAMIL IN POSSESSION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfee"},73711:{"value":"11FEF","name":"TAMIL STARTING FROM SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udfef"},73712:{"value":"11FF0","name":"TAMIL SIGN MUTHALIYA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udff0"},73713:{"value":"11FF1","name":"TAMIL SIGN VAKAIYARAA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud807\udff1"},92988:{"value":"16B3C","name":"PAHAWH HMONG SIGN XYEEM NTXIV","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf3c"},92989:{"value":"16B3D","name":"PAHAWH HMONG SIGN XYEEM RHO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf3d"},92990:{"value":"16B3E","name":"PAHAWH HMONG SIGN XYEEM TOV","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf3e"},92991:{"value":"16B3F","name":"PAHAWH HMONG SIGN XYEEM FAIB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf3f"},92997:{"value":"16B45","name":"PAHAWH HMONG SIGN CIM TSOV ROG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud81a\udf45"},113820:{"value":"1BC9C","name":"DUPLOYAN SIGN O WITH CROSS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud82f\udc9c"},118608:{"value":"1CF50","name":"ZNAMENNY NEUME KRYUK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf50"},118609:{"value":"1CF51","name":"ZNAMENNY NEUME KRYUK TIKHY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf51"},118610:{"value":"1CF52","name":"ZNAMENNY NEUME PARAKLIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf52"},118611:{"value":"1CF53","name":"ZNAMENNY NEUME DVA V CHELNU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf53"},118612:{"value":"1CF54","name":"ZNAMENNY NEUME KLYUCH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf54"},118613:{"value":"1CF55","name":"ZNAMENNY NEUME ZANOZHEK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf55"},118614:{"value":"1CF56","name":"ZNAMENNY NEUME STOPITSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf56"},118615:{"value":"1CF57","name":"ZNAMENNY NEUME STOPITSA S OCHKOM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf57"},118616:{"value":"1CF58","name":"ZNAMENNY NEUME PEREVODKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf58"},118617:{"value":"1CF59","name":"ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf59"},118618:{"value":"1CF5A","name":"ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf5a"},118619:{"value":"1CF5B","name":"ZNAMENNY NEUME CHELYUSTKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf5b"},118620:{"value":"1CF5C","name":"ZNAMENNY NEUME PALKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf5c"},118621:{"value":"1CF5D","name":"ZNAMENNY NEUME ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf5d"},118622:{"value":"1CF5E","name":"ZNAMENNY NEUME GOLUBCHIK BORZY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf5e"},118623:{"value":"1CF5F","name":"ZNAMENNY NEUME GOLUBCHIK TIKHY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf5f"},118624:{"value":"1CF60","name":"ZNAMENNY NEUME GOLUBCHIK MRACHNY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf60"},118625:{"value":"1CF61","name":"ZNAMENNY NEUME GOLUBCHIK SVETLY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf61"},118626:{"value":"1CF62","name":"ZNAMENNY NEUME GOLUBCHIK TRESVETLY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf62"},118627:{"value":"1CF63","name":"ZNAMENNY NEUME VRAKHIYA PROSTAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf63"},118628:{"value":"1CF64","name":"ZNAMENNY NEUME VRAKHIYA MRACHNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf64"},118629:{"value":"1CF65","name":"ZNAMENNY NEUME VRAKHIYA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf65"},118630:{"value":"1CF66","name":"ZNAMENNY NEUME VRAKHIYA TRESVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf66"},118631:{"value":"1CF67","name":"ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf67"},118632:{"value":"1CF68","name":"ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf68"},118633:{"value":"1CF69","name":"ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf69"},118634:{"value":"1CF6A","name":"ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf6a"},118635:{"value":"1CF6B","name":"ZNAMENNY NEUME DOUBLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf6b"},118636:{"value":"1CF6C","name":"ZNAMENNY NEUME REVERSED CHELYUSTKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf6c"},118637:{"value":"1CF6D","name":"ZNAMENNY NEUME DERBITSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf6d"},118638:{"value":"1CF6E","name":"ZNAMENNY NEUME KHAMILO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf6e"},118639:{"value":"1CF6F","name":"ZNAMENNY NEUME CHASHKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf6f"},118640:{"value":"1CF70","name":"ZNAMENNY NEUME PODCHASHIE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf70"},118641:{"value":"1CF71","name":"ZNAMENNY NEUME SKAMEYTSA MRACHNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf71"},118642:{"value":"1CF72","name":"ZNAMENNY NEUME SKAMEYTSA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf72"},118643:{"value":"1CF73","name":"ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf73"},118644:{"value":"1CF74","name":"ZNAMENNY NEUME SKAMEYTSA TIKHAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf74"},118645:{"value":"1CF75","name":"ZNAMENNY NEUME DEMESTVENNY KLYUCH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf75"},118646:{"value":"1CF76","name":"ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf76"},118647:{"value":"1CF77","name":"ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf77"},118648:{"value":"1CF78","name":"ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf78"},118649:{"value":"1CF79","name":"ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf79"},118650:{"value":"1CF7A","name":"ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf7a"},118651:{"value":"1CF7B","name":"ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf7b"},118652:{"value":"1CF7C","name":"ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf7c"},118653:{"value":"1CF7D","name":"ZNAMENNY NEUME SLOZHITIE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf7d"},118654:{"value":"1CF7E","name":"ZNAMENNY NEUME SLOZHITIE S ZAPYATOY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf7e"},118655:{"value":"1CF7F","name":"ZNAMENNY NEUME SLOZHITIE ZAKRYTOE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf7f"},118656:{"value":"1CF80","name":"ZNAMENNY NEUME SLOZHITIE S KRYZHEM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf80"},118657:{"value":"1CF81","name":"ZNAMENNY NEUME KRYZH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf81"},118658:{"value":"1CF82","name":"ZNAMENNY NEUME ROG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf82"},118659:{"value":"1CF83","name":"ZNAMENNY NEUME FITA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf83"},118660:{"value":"1CF84","name":"ZNAMENNY NEUME KOBYLA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf84"},118661:{"value":"1CF85","name":"ZNAMENNY NEUME ZMEYTSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf85"},118662:{"value":"1CF86","name":"ZNAMENNY NEUME STATYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf86"},118663:{"value":"1CF87","name":"ZNAMENNY NEUME STATYA S ZAPYATOY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf87"},118664:{"value":"1CF88","name":"ZNAMENNY NEUME STATYA S KRYZHEM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf88"},118665:{"value":"1CF89","name":"ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf89"},118666:{"value":"1CF8A","name":"ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf8a"},118667:{"value":"1CF8B","name":"ZNAMENNY NEUME STATYA ZAKRYTAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf8b"},118668:{"value":"1CF8C","name":"ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf8c"},118669:{"value":"1CF8D","name":"ZNAMENNY NEUME STATYA S ROGOM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf8d"},118670:{"value":"1CF8E","name":"ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf8e"},118671:{"value":"1CF8F","name":"ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf8f"},118672:{"value":"1CF90","name":"ZNAMENNY NEUME POLKULIZMY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf90"},118673:{"value":"1CF91","name":"ZNAMENNY NEUME STATYA NEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf91"},118674:{"value":"1CF92","name":"ZNAMENNY NEUME STRELA PROSTAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf92"},118675:{"value":"1CF93","name":"ZNAMENNY NEUME STRELA MRACHNOTIKHAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf93"},118676:{"value":"1CF94","name":"ZNAMENNY NEUME STRELA KRYZHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf94"},118677:{"value":"1CF95","name":"ZNAMENNY NEUME STRELA POLUPOVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf95"},118678:{"value":"1CF96","name":"ZNAMENNY NEUME STRELA POVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf96"},118679:{"value":"1CF97","name":"ZNAMENNY NEUME STRELA NEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf97"},118680:{"value":"1CF98","name":"ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf98"},118681:{"value":"1CF99","name":"ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf99"},118682:{"value":"1CF9A","name":"ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf9a"},118683:{"value":"1CF9B","name":"ZNAMENNY NEUME STRELA DVOECHELNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf9b"},118684:{"value":"1CF9C","name":"ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf9c"},118685:{"value":"1CF9D","name":"ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf9d"},118686:{"value":"1CF9E","name":"ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf9e"},118687:{"value":"1CF9F","name":"ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udf9f"},118688:{"value":"1CFA0","name":"ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa0"},118689:{"value":"1CFA1","name":"ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa1"},118690:{"value":"1CFA2","name":"ZNAMENNY NEUME STRELA GROMNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa2"},118691:{"value":"1CFA3","name":"ZNAMENNY NEUME STRELA GROMOPOVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa3"},118692:{"value":"1CFA4","name":"ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa4"},118693:{"value":"1CFA5","name":"ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa5"},118694:{"value":"1CFA6","name":"ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa6"},118695:{"value":"1CFA7","name":"ZNAMENNY NEUME MECHIK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa7"},118696:{"value":"1CFA8","name":"ZNAMENNY NEUME MECHIK POVODNY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa8"},118697:{"value":"1CFA9","name":"ZNAMENNY NEUME MECHIK KLYUCHEVOY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfa9"},118698:{"value":"1CFAA","name":"ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfaa"},118699:{"value":"1CFAB","name":"ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfab"},118700:{"value":"1CFAC","name":"ZNAMENNY NEUME STRELA TRYASOGLASNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfac"},118701:{"value":"1CFAD","name":"ZNAMENNY NEUME STRELA TRYASOPOVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfad"},118702:{"value":"1CFAE","name":"ZNAMENNY NEUME STRELA TRYASOSTRELNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfae"},118703:{"value":"1CFAF","name":"ZNAMENNY NEUME OSOKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfaf"},118704:{"value":"1CFB0","name":"ZNAMENNY NEUME OSOKA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb0"},118705:{"value":"1CFB1","name":"ZNAMENNY NEUME OSOKA TRESVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb1"},118706:{"value":"1CFB2","name":"ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb2"},118707:{"value":"1CFB3","name":"ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb3"},118708:{"value":"1CFB4","name":"ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb4"},118709:{"value":"1CFB5","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb5"},118710:{"value":"1CFB6","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb6"},118711:{"value":"1CFB7","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb7"},118712:{"value":"1CFB8","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb8"},118713:{"value":"1CFB9","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfb9"},118714:{"value":"1CFBA","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfba"},118715:{"value":"1CFBB","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfbb"},118716:{"value":"1CFBC","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfbc"},118717:{"value":"1CFBD","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfbd"},118718:{"value":"1CFBE","name":"ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfbe"},118719:{"value":"1CFBF","name":"ZNAMENNY NEUME KUFISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfbf"},118720:{"value":"1CFC0","name":"ZNAMENNY NEUME OBLAKO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfc0"},118721:{"value":"1CFC1","name":"ZNAMENNY NEUME DUDA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfc1"},118722:{"value":"1CFC2","name":"ZNAMENNY NEUME NEMKA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfc2"},118723:{"value":"1CFC3","name":"ZNAMENNY NEUME PAUK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud833\udfc3"},118784:{"value":"1D000","name":"BYZANTINE MUSICAL SYMBOL PSILI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc00"},118785:{"value":"1D001","name":"BYZANTINE MUSICAL SYMBOL DASEIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc01"},118786:{"value":"1D002","name":"BYZANTINE MUSICAL SYMBOL PERISPOMENI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc02"},118787:{"value":"1D003","name":"BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc03"},118788:{"value":"1D004","name":"BYZANTINE MUSICAL SYMBOL OXEIA DIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc04"},118789:{"value":"1D005","name":"BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc05"},118790:{"value":"1D006","name":"BYZANTINE MUSICAL SYMBOL VAREIA DIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc06"},118791:{"value":"1D007","name":"BYZANTINE MUSICAL SYMBOL KATHISTI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc07"},118792:{"value":"1D008","name":"BYZANTINE MUSICAL SYMBOL SYRMATIKI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc08"},118793:{"value":"1D009","name":"BYZANTINE MUSICAL SYMBOL PARAKLITIKI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc09"},118794:{"value":"1D00A","name":"BYZANTINE MUSICAL SYMBOL YPOKRISIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc0a"},118795:{"value":"1D00B","name":"BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc0b"},118796:{"value":"1D00C","name":"BYZANTINE MUSICAL SYMBOL KREMASTI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc0c"},118797:{"value":"1D00D","name":"BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc0d"},118798:{"value":"1D00E","name":"BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc0e"},118799:{"value":"1D00F","name":"BYZANTINE MUSICAL SYMBOL TELEIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc0f"},118800:{"value":"1D010","name":"BYZANTINE MUSICAL SYMBOL KENTIMATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc10"},118801:{"value":"1D011","name":"BYZANTINE MUSICAL SYMBOL APOSTROFOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc11"},118802:{"value":"1D012","name":"BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc12"},118803:{"value":"1D013","name":"BYZANTINE MUSICAL SYMBOL SYNEVMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc13"},118804:{"value":"1D014","name":"BYZANTINE MUSICAL SYMBOL THITA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc14"},118805:{"value":"1D015","name":"BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc15"},118806:{"value":"1D016","name":"BYZANTINE MUSICAL SYMBOL GORGON ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc16"},118807:{"value":"1D017","name":"BYZANTINE MUSICAL SYMBOL PSILON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc17"},118808:{"value":"1D018","name":"BYZANTINE MUSICAL SYMBOL CHAMILON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc18"},118809:{"value":"1D019","name":"BYZANTINE MUSICAL SYMBOL VATHY","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc19"},118810:{"value":"1D01A","name":"BYZANTINE MUSICAL SYMBOL ISON ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc1a"},118811:{"value":"1D01B","name":"BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc1b"},118812:{"value":"1D01C","name":"BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc1c"},118813:{"value":"1D01D","name":"BYZANTINE MUSICAL SYMBOL SAXIMATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc1d"},118814:{"value":"1D01E","name":"BYZANTINE MUSICAL SYMBOL PARICHON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc1e"},118815:{"value":"1D01F","name":"BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc1f"},118816:{"value":"1D020","name":"BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc20"},118817:{"value":"1D021","name":"BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc21"},118818:{"value":"1D022","name":"BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc22"},118819:{"value":"1D023","name":"BYZANTINE MUSICAL SYMBOL APOTHEMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc23"},118820:{"value":"1D024","name":"BYZANTINE MUSICAL SYMBOL KLASMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc24"},118821:{"value":"1D025","name":"BYZANTINE MUSICAL SYMBOL REVMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc25"},118822:{"value":"1D026","name":"BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc26"},118823:{"value":"1D027","name":"BYZANTINE MUSICAL SYMBOL TINAGMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc27"},118824:{"value":"1D028","name":"BYZANTINE MUSICAL SYMBOL ANATRICHISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc28"},118825:{"value":"1D029","name":"BYZANTINE MUSICAL SYMBOL SEISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc29"},118826:{"value":"1D02A","name":"BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc2a"},118827:{"value":"1D02B","name":"BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc2b"},118828:{"value":"1D02C","name":"BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc2c"},118829:{"value":"1D02D","name":"BYZANTINE MUSICAL SYMBOL THEMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc2d"},118830:{"value":"1D02E","name":"BYZANTINE MUSICAL SYMBOL LEMOI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc2e"},118831:{"value":"1D02F","name":"BYZANTINE MUSICAL SYMBOL DYO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc2f"},118832:{"value":"1D030","name":"BYZANTINE MUSICAL SYMBOL TRIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc30"},118833:{"value":"1D031","name":"BYZANTINE MUSICAL SYMBOL TESSERA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc31"},118834:{"value":"1D032","name":"BYZANTINE MUSICAL SYMBOL KRATIMATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc32"},118835:{"value":"1D033","name":"BYZANTINE MUSICAL SYMBOL APESO EXO NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc33"},118836:{"value":"1D034","name":"BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc34"},118837:{"value":"1D035","name":"BYZANTINE MUSICAL SYMBOL IMIFTHORA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc35"},118838:{"value":"1D036","name":"BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc36"},118839:{"value":"1D037","name":"BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc37"},118840:{"value":"1D038","name":"BYZANTINE MUSICAL SYMBOL PELASTON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc38"},118841:{"value":"1D039","name":"BYZANTINE MUSICAL SYMBOL PSIFISTON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc39"},118842:{"value":"1D03A","name":"BYZANTINE MUSICAL SYMBOL KONTEVMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc3a"},118843:{"value":"1D03B","name":"BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc3b"},118844:{"value":"1D03C","name":"BYZANTINE MUSICAL SYMBOL RAPISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc3c"},118845:{"value":"1D03D","name":"BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc3d"},118846:{"value":"1D03E","name":"BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc3e"},118847:{"value":"1D03F","name":"BYZANTINE MUSICAL SYMBOL ICHADIN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc3f"},118848:{"value":"1D040","name":"BYZANTINE MUSICAL SYMBOL NANA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc40"},118849:{"value":"1D041","name":"BYZANTINE MUSICAL SYMBOL PETASMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc41"},118850:{"value":"1D042","name":"BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc42"},118851:{"value":"1D043","name":"BYZANTINE MUSICAL SYMBOL TROMIKON ALLO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc43"},118852:{"value":"1D044","name":"BYZANTINE MUSICAL SYMBOL STRAGGISMATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc44"},118853:{"value":"1D045","name":"BYZANTINE MUSICAL SYMBOL GRONTHISMATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc45"},118854:{"value":"1D046","name":"BYZANTINE MUSICAL SYMBOL ISON NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc46"},118855:{"value":"1D047","name":"BYZANTINE MUSICAL SYMBOL OLIGON NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc47"},118856:{"value":"1D048","name":"BYZANTINE MUSICAL SYMBOL OXEIA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc48"},118857:{"value":"1D049","name":"BYZANTINE MUSICAL SYMBOL PETASTI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc49"},118858:{"value":"1D04A","name":"BYZANTINE MUSICAL SYMBOL KOUFISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc4a"},118859:{"value":"1D04B","name":"BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc4b"},118860:{"value":"1D04C","name":"BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc4c"},118861:{"value":"1D04D","name":"BYZANTINE MUSICAL SYMBOL PELASTON NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc4d"},118862:{"value":"1D04E","name":"BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc4e"},118863:{"value":"1D04F","name":"BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc4f"},118864:{"value":"1D050","name":"BYZANTINE MUSICAL SYMBOL YPSILI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc50"},118865:{"value":"1D051","name":"BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc51"},118866:{"value":"1D052","name":"BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc52"},118867:{"value":"1D053","name":"BYZANTINE MUSICAL SYMBOL YPORROI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc53"},118868:{"value":"1D054","name":"BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc54"},118869:{"value":"1D055","name":"BYZANTINE MUSICAL SYMBOL ELAFRON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc55"},118870:{"value":"1D056","name":"BYZANTINE MUSICAL SYMBOL CHAMILI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc56"},118871:{"value":"1D057","name":"BYZANTINE MUSICAL SYMBOL MIKRON ISON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc57"},118872:{"value":"1D058","name":"BYZANTINE MUSICAL SYMBOL VAREIA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc58"},118873:{"value":"1D059","name":"BYZANTINE MUSICAL SYMBOL PIASMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc59"},118874:{"value":"1D05A","name":"BYZANTINE MUSICAL SYMBOL PSIFISTON NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc5a"},118875:{"value":"1D05B","name":"BYZANTINE MUSICAL SYMBOL OMALON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc5b"},118876:{"value":"1D05C","name":"BYZANTINE MUSICAL SYMBOL ANTIKENOMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc5c"},118877:{"value":"1D05D","name":"BYZANTINE MUSICAL SYMBOL LYGISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc5d"},118878:{"value":"1D05E","name":"BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc5e"},118879:{"value":"1D05F","name":"BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc5f"},118880:{"value":"1D060","name":"BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc60"},118881:{"value":"1D061","name":"BYZANTINE MUSICAL SYMBOL KYLISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc61"},118882:{"value":"1D062","name":"BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc62"},118883:{"value":"1D063","name":"BYZANTINE MUSICAL SYMBOL TROMIKON NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc63"},118884:{"value":"1D064","name":"BYZANTINE MUSICAL SYMBOL EKSTREPTON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc64"},118885:{"value":"1D065","name":"BYZANTINE MUSICAL SYMBOL SYNAGMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc65"},118886:{"value":"1D066","name":"BYZANTINE MUSICAL SYMBOL SYRMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc66"},118887:{"value":"1D067","name":"BYZANTINE MUSICAL SYMBOL CHOREVMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc67"},118888:{"value":"1D068","name":"BYZANTINE MUSICAL SYMBOL EPEGERMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc68"},118889:{"value":"1D069","name":"BYZANTINE MUSICAL SYMBOL SEISMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc69"},118890:{"value":"1D06A","name":"BYZANTINE MUSICAL SYMBOL XIRON KLASMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc6a"},118891:{"value":"1D06B","name":"BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc6b"},118892:{"value":"1D06C","name":"BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc6c"},118893:{"value":"1D06D","name":"BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc6d"},118894:{"value":"1D06E","name":"BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc6e"},118895:{"value":"1D06F","name":"BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc6f"},118896:{"value":"1D070","name":"BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc70"},118897:{"value":"1D071","name":"BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc71"},118898:{"value":"1D072","name":"BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc72"},118899:{"value":"1D073","name":"BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc73"},118900:{"value":"1D074","name":"BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc74"},118901:{"value":"1D075","name":"BYZANTINE MUSICAL SYMBOL OYRANISMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc75"},118902:{"value":"1D076","name":"BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc76"},118903:{"value":"1D077","name":"BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc77"},118904:{"value":"1D078","name":"BYZANTINE MUSICAL SYMBOL THEMA APLOUN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc78"},118905:{"value":"1D079","name":"BYZANTINE MUSICAL SYMBOL THES KAI APOTHES","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc79"},118906:{"value":"1D07A","name":"BYZANTINE MUSICAL SYMBOL KATAVASMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc7a"},118907:{"value":"1D07B","name":"BYZANTINE MUSICAL SYMBOL ENDOFONON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc7b"},118908:{"value":"1D07C","name":"BYZANTINE MUSICAL SYMBOL YFEN KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc7c"},118909:{"value":"1D07D","name":"BYZANTINE MUSICAL SYMBOL YFEN ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc7d"},118910:{"value":"1D07E","name":"BYZANTINE MUSICAL SYMBOL STAVROS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc7e"},118911:{"value":"1D07F","name":"BYZANTINE MUSICAL SYMBOL KLASMA ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc7f"},118912:{"value":"1D080","name":"BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc80"},118913:{"value":"1D081","name":"BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc81"},118914:{"value":"1D082","name":"BYZANTINE MUSICAL SYMBOL KRATIMA ALLO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc82"},118915:{"value":"1D083","name":"BYZANTINE MUSICAL SYMBOL KRATIMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc83"},118916:{"value":"1D084","name":"BYZANTINE MUSICAL SYMBOL APODERMA NEO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc84"},118917:{"value":"1D085","name":"BYZANTINE MUSICAL SYMBOL APLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc85"},118918:{"value":"1D086","name":"BYZANTINE MUSICAL SYMBOL DIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc86"},118919:{"value":"1D087","name":"BYZANTINE MUSICAL SYMBOL TRIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc87"},118920:{"value":"1D088","name":"BYZANTINE MUSICAL SYMBOL TETRAPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc88"},118921:{"value":"1D089","name":"BYZANTINE MUSICAL SYMBOL KORONIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc89"},118922:{"value":"1D08A","name":"BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc8a"},118923:{"value":"1D08B","name":"BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc8b"},118924:{"value":"1D08C","name":"BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc8c"},118925:{"value":"1D08D","name":"BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc8d"},118926:{"value":"1D08E","name":"BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc8e"},118927:{"value":"1D08F","name":"BYZANTINE MUSICAL SYMBOL GORGON NEO ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc8f"},118928:{"value":"1D090","name":"BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc90"},118929:{"value":"1D091","name":"BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc91"},118930:{"value":"1D092","name":"BYZANTINE MUSICAL SYMBOL DIGORGON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc92"},118931:{"value":"1D093","name":"BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc93"},118932:{"value":"1D094","name":"BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc94"},118933:{"value":"1D095","name":"BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc95"},118934:{"value":"1D096","name":"BYZANTINE MUSICAL SYMBOL TRIGORGON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc96"},118935:{"value":"1D097","name":"BYZANTINE MUSICAL SYMBOL ARGON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc97"},118936:{"value":"1D098","name":"BYZANTINE MUSICAL SYMBOL IMIDIARGON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc98"},118937:{"value":"1D099","name":"BYZANTINE MUSICAL SYMBOL DIARGON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc99"},118938:{"value":"1D09A","name":"BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc9a"},118939:{"value":"1D09B","name":"BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc9b"},118940:{"value":"1D09C","name":"BYZANTINE MUSICAL SYMBOL AGOGI ARGI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc9c"},118941:{"value":"1D09D","name":"BYZANTINE MUSICAL SYMBOL AGOGI METRIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc9d"},118942:{"value":"1D09E","name":"BYZANTINE MUSICAL SYMBOL AGOGI MESI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc9e"},118943:{"value":"1D09F","name":"BYZANTINE MUSICAL SYMBOL AGOGI GORGI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udc9f"},118944:{"value":"1D0A0","name":"BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca0"},118945:{"value":"1D0A1","name":"BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca1"},118946:{"value":"1D0A2","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca2"},118947:{"value":"1D0A3","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca3"},118948:{"value":"1D0A4","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca4"},118949:{"value":"1D0A5","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca5"},118950:{"value":"1D0A6","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca6"},118951:{"value":"1D0A7","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca7"},118952:{"value":"1D0A8","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca8"},118953:{"value":"1D0A9","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udca9"},118954:{"value":"1D0AA","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcaa"},118955:{"value":"1D0AB","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcab"},118956:{"value":"1D0AC","name":"BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcac"},118957:{"value":"1D0AD","name":"BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcad"},118958:{"value":"1D0AE","name":"BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcae"},118959:{"value":"1D0AF","name":"BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcaf"},118960:{"value":"1D0B0","name":"BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb0"},118961:{"value":"1D0B1","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb1"},118962:{"value":"1D0B2","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb2"},118963:{"value":"1D0B3","name":"BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb3"},118964:{"value":"1D0B4","name":"BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb4"},118965:{"value":"1D0B5","name":"BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb5"},118966:{"value":"1D0B6","name":"BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb6"},118967:{"value":"1D0B7","name":"BYZANTINE MUSICAL SYMBOL IMIFONON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb7"},118968:{"value":"1D0B8","name":"BYZANTINE MUSICAL SYMBOL IMIFTHORON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb8"},118969:{"value":"1D0B9","name":"BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcb9"},118970:{"value":"1D0BA","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcba"},118971:{"value":"1D0BB","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcbb"},118972:{"value":"1D0BC","name":"BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcbc"},118973:{"value":"1D0BD","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcbd"},118974:{"value":"1D0BE","name":"BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcbe"},118975:{"value":"1D0BF","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcbf"},118976:{"value":"1D0C0","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc0"},118977:{"value":"1D0C1","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc1"},118978:{"value":"1D0C2","name":"BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc2"},118979:{"value":"1D0C3","name":"BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc3"},118980:{"value":"1D0C4","name":"BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc4"},118981:{"value":"1D0C5","name":"BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc5"},118982:{"value":"1D0C6","name":"BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc6"},118983:{"value":"1D0C7","name":"BYZANTINE MUSICAL SYMBOL FTHORA NENANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc7"},118984:{"value":"1D0C8","name":"BYZANTINE MUSICAL SYMBOL CHROA ZYGOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc8"},118985:{"value":"1D0C9","name":"BYZANTINE MUSICAL SYMBOL CHROA KLITON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcc9"},118986:{"value":"1D0CA","name":"BYZANTINE MUSICAL SYMBOL CHROA SPATHI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcca"},118987:{"value":"1D0CB","name":"BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udccb"},118988:{"value":"1D0CC","name":"BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udccc"},118989:{"value":"1D0CD","name":"BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udccd"},118990:{"value":"1D0CE","name":"BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcce"},118991:{"value":"1D0CF","name":"BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udccf"},118992:{"value":"1D0D0","name":"BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd0"},118993:{"value":"1D0D1","name":"BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd1"},118994:{"value":"1D0D2","name":"BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd2"},118995:{"value":"1D0D3","name":"BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd3"},118996:{"value":"1D0D4","name":"BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd4"},118997:{"value":"1D0D5","name":"BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd5"},118998:{"value":"1D0D6","name":"BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd6"},118999:{"value":"1D0D7","name":"BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd7"},119000:{"value":"1D0D8","name":"BYZANTINE MUSICAL SYMBOL GENIKI DIESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd8"},119001:{"value":"1D0D9","name":"BYZANTINE MUSICAL SYMBOL GENIKI YFESIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcd9"},119002:{"value":"1D0DA","name":"BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcda"},119003:{"value":"1D0DB","name":"BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcdb"},119004:{"value":"1D0DC","name":"BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcdc"},119005:{"value":"1D0DD","name":"BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcdd"},119006:{"value":"1D0DE","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcde"},119007:{"value":"1D0DF","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcdf"},119008:{"value":"1D0E0","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce0"},119009:{"value":"1D0E1","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce1"},119010:{"value":"1D0E2","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce2"},119011:{"value":"1D0E3","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce3"},119012:{"value":"1D0E4","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce4"},119013:{"value":"1D0E5","name":"BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce5"},119014:{"value":"1D0E6","name":"BYZANTINE MUSICAL SYMBOL DIGRAMMA GG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce6"},119015:{"value":"1D0E7","name":"BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce7"},119016:{"value":"1D0E8","name":"BYZANTINE MUSICAL SYMBOL STIGMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce8"},119017:{"value":"1D0E9","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO PA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udce9"},119018:{"value":"1D0EA","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO VOU","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcea"},119019:{"value":"1D0EB","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO GA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udceb"},119020:{"value":"1D0EC","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO DI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcec"},119021:{"value":"1D0ED","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO KE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udced"},119022:{"value":"1D0EE","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO ZO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcee"},119023:{"value":"1D0EF","name":"BYZANTINE MUSICAL SYMBOL ARKTIKO NI","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcef"},119024:{"value":"1D0F0","name":"BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcf0"},119025:{"value":"1D0F1","name":"BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcf1"},119026:{"value":"1D0F2","name":"BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcf2"},119027:{"value":"1D0F3","name":"BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcf3"},119028:{"value":"1D0F4","name":"BYZANTINE MUSICAL SYMBOL KLASMA KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcf4"},119029:{"value":"1D0F5","name":"BYZANTINE MUSICAL SYMBOL GORGON NEO KATO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udcf5"},119040:{"value":"1D100","name":"MUSICAL SYMBOL SINGLE BARLINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd00"},119041:{"value":"1D101","name":"MUSICAL SYMBOL DOUBLE BARLINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd01"},119042:{"value":"1D102","name":"MUSICAL SYMBOL FINAL BARLINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd02"},119043:{"value":"1D103","name":"MUSICAL SYMBOL REVERSE FINAL BARLINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd03"},119044:{"value":"1D104","name":"MUSICAL SYMBOL DASHED BARLINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd04"},119045:{"value":"1D105","name":"MUSICAL SYMBOL SHORT BARLINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd05"},119046:{"value":"1D106","name":"MUSICAL SYMBOL LEFT REPEAT SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd06"},119047:{"value":"1D107","name":"MUSICAL SYMBOL RIGHT REPEAT SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd07"},119048:{"value":"1D108","name":"MUSICAL SYMBOL REPEAT DOTS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd08"},119049:{"value":"1D109","name":"MUSICAL SYMBOL DAL SEGNO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd09"},119050:{"value":"1D10A","name":"MUSICAL SYMBOL DA CAPO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd0a"},119051:{"value":"1D10B","name":"MUSICAL SYMBOL SEGNO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd0b"},119052:{"value":"1D10C","name":"MUSICAL SYMBOL CODA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd0c"},119053:{"value":"1D10D","name":"MUSICAL SYMBOL REPEATED FIGURE-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd0d"},119054:{"value":"1D10E","name":"MUSICAL SYMBOL REPEATED FIGURE-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd0e"},119055:{"value":"1D10F","name":"MUSICAL SYMBOL REPEATED FIGURE-3","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd0f"},119056:{"value":"1D110","name":"MUSICAL SYMBOL FERMATA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd10"},119057:{"value":"1D111","name":"MUSICAL SYMBOL FERMATA BELOW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd11"},119058:{"value":"1D112","name":"MUSICAL SYMBOL BREATH MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd12"},119059:{"value":"1D113","name":"MUSICAL SYMBOL CAESURA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd13"},119060:{"value":"1D114","name":"MUSICAL SYMBOL BRACE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd14"},119061:{"value":"1D115","name":"MUSICAL SYMBOL BRACKET","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd15"},119062:{"value":"1D116","name":"MUSICAL SYMBOL ONE-LINE STAFF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd16"},119063:{"value":"1D117","name":"MUSICAL SYMBOL TWO-LINE STAFF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd17"},119064:{"value":"1D118","name":"MUSICAL SYMBOL THREE-LINE STAFF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd18"},119065:{"value":"1D119","name":"MUSICAL SYMBOL FOUR-LINE STAFF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd19"},119066:{"value":"1D11A","name":"MUSICAL SYMBOL FIVE-LINE STAFF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd1a"},119067:{"value":"1D11B","name":"MUSICAL SYMBOL SIX-LINE STAFF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd1b"},119068:{"value":"1D11C","name":"MUSICAL SYMBOL SIX-STRING FRETBOARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd1c"},119069:{"value":"1D11D","name":"MUSICAL SYMBOL FOUR-STRING FRETBOARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd1d"},119070:{"value":"1D11E","name":"MUSICAL SYMBOL G CLEF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd1e"},119071:{"value":"1D11F","name":"MUSICAL SYMBOL G CLEF OTTAVA ALTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd1f"},119072:{"value":"1D120","name":"MUSICAL SYMBOL G CLEF OTTAVA BASSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd20"},119073:{"value":"1D121","name":"MUSICAL SYMBOL C CLEF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd21"},119074:{"value":"1D122","name":"MUSICAL SYMBOL F CLEF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd22"},119075:{"value":"1D123","name":"MUSICAL SYMBOL F CLEF OTTAVA ALTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd23"},119076:{"value":"1D124","name":"MUSICAL SYMBOL F CLEF OTTAVA BASSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd24"},119077:{"value":"1D125","name":"MUSICAL SYMBOL DRUM CLEF-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd25"},119078:{"value":"1D126","name":"MUSICAL SYMBOL DRUM CLEF-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd26"},119081:{"value":"1D129","name":"MUSICAL SYMBOL MULTIPLE MEASURE REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd29"},119082:{"value":"1D12A","name":"MUSICAL SYMBOL DOUBLE SHARP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd2a"},119083:{"value":"1D12B","name":"MUSICAL SYMBOL DOUBLE FLAT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd2b"},119084:{"value":"1D12C","name":"MUSICAL SYMBOL FLAT UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd2c"},119085:{"value":"1D12D","name":"MUSICAL SYMBOL FLAT DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd2d"},119086:{"value":"1D12E","name":"MUSICAL SYMBOL NATURAL UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd2e"},119087:{"value":"1D12F","name":"MUSICAL SYMBOL NATURAL DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd2f"},119088:{"value":"1D130","name":"MUSICAL SYMBOL SHARP UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd30"},119089:{"value":"1D131","name":"MUSICAL SYMBOL SHARP DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd31"},119090:{"value":"1D132","name":"MUSICAL SYMBOL QUARTER TONE SHARP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd32"},119091:{"value":"1D133","name":"MUSICAL SYMBOL QUARTER TONE FLAT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd33"},119092:{"value":"1D134","name":"MUSICAL SYMBOL COMMON TIME","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd34"},119093:{"value":"1D135","name":"MUSICAL SYMBOL CUT TIME","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd35"},119094:{"value":"1D136","name":"MUSICAL SYMBOL OTTAVA ALTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd36"},119095:{"value":"1D137","name":"MUSICAL SYMBOL OTTAVA BASSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd37"},119096:{"value":"1D138","name":"MUSICAL SYMBOL QUINDICESIMA ALTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd38"},119097:{"value":"1D139","name":"MUSICAL SYMBOL QUINDICESIMA BASSA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd39"},119098:{"value":"1D13A","name":"MUSICAL SYMBOL MULTI REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd3a"},119099:{"value":"1D13B","name":"MUSICAL SYMBOL WHOLE REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd3b"},119100:{"value":"1D13C","name":"MUSICAL SYMBOL HALF REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd3c"},119101:{"value":"1D13D","name":"MUSICAL SYMBOL QUARTER REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd3d"},119102:{"value":"1D13E","name":"MUSICAL SYMBOL EIGHTH REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd3e"},119103:{"value":"1D13F","name":"MUSICAL SYMBOL SIXTEENTH REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd3f"},119104:{"value":"1D140","name":"MUSICAL SYMBOL THIRTY-SECOND REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd40"},119105:{"value":"1D141","name":"MUSICAL SYMBOL SIXTY-FOURTH REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd41"},119106:{"value":"1D142","name":"MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd42"},119107:{"value":"1D143","name":"MUSICAL SYMBOL X NOTEHEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd43"},119108:{"value":"1D144","name":"MUSICAL SYMBOL PLUS NOTEHEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd44"},119109:{"value":"1D145","name":"MUSICAL SYMBOL CIRCLE X NOTEHEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd45"},119110:{"value":"1D146","name":"MUSICAL SYMBOL SQUARE NOTEHEAD WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd46"},119111:{"value":"1D147","name":"MUSICAL SYMBOL SQUARE NOTEHEAD BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd47"},119112:{"value":"1D148","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd48"},119113:{"value":"1D149","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd49"},119114:{"value":"1D14A","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd4a"},119115:{"value":"1D14B","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd4b"},119116:{"value":"1D14C","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd4c"},119117:{"value":"1D14D","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd4d"},119118:{"value":"1D14E","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd4e"},119119:{"value":"1D14F","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd4f"},119120:{"value":"1D150","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd50"},119121:{"value":"1D151","name":"MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd51"},119122:{"value":"1D152","name":"MUSICAL SYMBOL MOON NOTEHEAD WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd52"},119123:{"value":"1D153","name":"MUSICAL SYMBOL MOON NOTEHEAD BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd53"},119124:{"value":"1D154","name":"MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd54"},119125:{"value":"1D155","name":"MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd55"},119126:{"value":"1D156","name":"MUSICAL SYMBOL PARENTHESIS NOTEHEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd56"},119127:{"value":"1D157","name":"MUSICAL SYMBOL VOID NOTEHEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd57"},119128:{"value":"1D158","name":"MUSICAL SYMBOL NOTEHEAD BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd58"},119129:{"value":"1D159","name":"MUSICAL SYMBOL NULL NOTEHEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd59"},119130:{"value":"1D15A","name":"MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd5a"},119131:{"value":"1D15B","name":"MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd5b"},119132:{"value":"1D15C","name":"MUSICAL SYMBOL BREVE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd5c"},119133:{"value":"1D15D","name":"MUSICAL SYMBOL WHOLE NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd5d"},119134:{"value":"1D15E","name":"MUSICAL SYMBOL HALF NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D157 1D165","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd5e"},119135:{"value":"1D15F","name":"MUSICAL SYMBOL QUARTER NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D158 1D165","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd5f"},119136:{"value":"1D160","name":"MUSICAL SYMBOL EIGHTH NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D15F 1D16E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd60"},119137:{"value":"1D161","name":"MUSICAL SYMBOL SIXTEENTH NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D15F 1D16F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd61"},119138:{"value":"1D162","name":"MUSICAL SYMBOL THIRTY-SECOND NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D15F 1D170","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd62"},119139:{"value":"1D163","name":"MUSICAL SYMBOL SIXTY-FOURTH NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D15F 1D171","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd63"},119140:{"value":"1D164","name":"MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D15F 1D172","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd64"},119146:{"value":"1D16A","name":"MUSICAL SYMBOL FINGERED TREMOLO-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd6a"},119147:{"value":"1D16B","name":"MUSICAL SYMBOL FINGERED TREMOLO-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd6b"},119148:{"value":"1D16C","name":"MUSICAL SYMBOL FINGERED TREMOLO-3","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd6c"},119171:{"value":"1D183","name":"MUSICAL SYMBOL ARPEGGIATO UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd83"},119172:{"value":"1D184","name":"MUSICAL SYMBOL ARPEGGIATO DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd84"},119180:{"value":"1D18C","name":"MUSICAL SYMBOL RINFORZANDO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd8c"},119181:{"value":"1D18D","name":"MUSICAL SYMBOL SUBITO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd8d"},119182:{"value":"1D18E","name":"MUSICAL SYMBOL Z","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd8e"},119183:{"value":"1D18F","name":"MUSICAL SYMBOL PIANO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd8f"},119184:{"value":"1D190","name":"MUSICAL SYMBOL MEZZO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd90"},119185:{"value":"1D191","name":"MUSICAL SYMBOL FORTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd91"},119186:{"value":"1D192","name":"MUSICAL SYMBOL CRESCENDO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd92"},119187:{"value":"1D193","name":"MUSICAL SYMBOL DECRESCENDO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd93"},119188:{"value":"1D194","name":"MUSICAL SYMBOL GRACE NOTE SLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd94"},119189:{"value":"1D195","name":"MUSICAL SYMBOL GRACE NOTE NO SLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd95"},119190:{"value":"1D196","name":"MUSICAL SYMBOL TR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd96"},119191:{"value":"1D197","name":"MUSICAL SYMBOL TURN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd97"},119192:{"value":"1D198","name":"MUSICAL SYMBOL INVERTED TURN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd98"},119193:{"value":"1D199","name":"MUSICAL SYMBOL TURN SLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd99"},119194:{"value":"1D19A","name":"MUSICAL SYMBOL TURN UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd9a"},119195:{"value":"1D19B","name":"MUSICAL SYMBOL ORNAMENT STROKE-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd9b"},119196:{"value":"1D19C","name":"MUSICAL SYMBOL ORNAMENT STROKE-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd9c"},119197:{"value":"1D19D","name":"MUSICAL SYMBOL ORNAMENT STROKE-3","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd9d"},119198:{"value":"1D19E","name":"MUSICAL SYMBOL ORNAMENT STROKE-4","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd9e"},119199:{"value":"1D19F","name":"MUSICAL SYMBOL ORNAMENT STROKE-5","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udd9f"},119200:{"value":"1D1A0","name":"MUSICAL SYMBOL ORNAMENT STROKE-6","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda0"},119201:{"value":"1D1A1","name":"MUSICAL SYMBOL ORNAMENT STROKE-7","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda1"},119202:{"value":"1D1A2","name":"MUSICAL SYMBOL ORNAMENT STROKE-8","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda2"},119203:{"value":"1D1A3","name":"MUSICAL SYMBOL ORNAMENT STROKE-9","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda3"},119204:{"value":"1D1A4","name":"MUSICAL SYMBOL ORNAMENT STROKE-10","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda4"},119205:{"value":"1D1A5","name":"MUSICAL SYMBOL ORNAMENT STROKE-11","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda5"},119206:{"value":"1D1A6","name":"MUSICAL SYMBOL HAUPTSTIMME","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda6"},119207:{"value":"1D1A7","name":"MUSICAL SYMBOL NEBENSTIMME","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda7"},119208:{"value":"1D1A8","name":"MUSICAL SYMBOL END OF STIMME","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda8"},119209:{"value":"1D1A9","name":"MUSICAL SYMBOL DEGREE SLASH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udda9"},119214:{"value":"1D1AE","name":"MUSICAL SYMBOL PEDAL MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddae"},119215:{"value":"1D1AF","name":"MUSICAL SYMBOL PEDAL UP MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddaf"},119216:{"value":"1D1B0","name":"MUSICAL SYMBOL HALF PEDAL MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb0"},119217:{"value":"1D1B1","name":"MUSICAL SYMBOL GLISSANDO UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb1"},119218:{"value":"1D1B2","name":"MUSICAL SYMBOL GLISSANDO DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb2"},119219:{"value":"1D1B3","name":"MUSICAL SYMBOL WITH FINGERNAILS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb3"},119220:{"value":"1D1B4","name":"MUSICAL SYMBOL DAMP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb4"},119221:{"value":"1D1B5","name":"MUSICAL SYMBOL DAMP ALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb5"},119222:{"value":"1D1B6","name":"MUSICAL SYMBOL MAXIMA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb6"},119223:{"value":"1D1B7","name":"MUSICAL SYMBOL LONGA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb7"},119224:{"value":"1D1B8","name":"MUSICAL SYMBOL BREVIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb8"},119225:{"value":"1D1B9","name":"MUSICAL SYMBOL SEMIBREVIS WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddb9"},119226:{"value":"1D1BA","name":"MUSICAL SYMBOL SEMIBREVIS BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddba"},119227:{"value":"1D1BB","name":"MUSICAL SYMBOL MINIMA","category":"So","class":"0","bidirectional_category":"L","mapping":"1D1B9 1D165","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddbb"},119228:{"value":"1D1BC","name":"MUSICAL SYMBOL MINIMA BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"1D1BA 1D165","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddbc"},119229:{"value":"1D1BD","name":"MUSICAL SYMBOL SEMIMINIMA WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D1BB 1D16E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddbd"},119230:{"value":"1D1BE","name":"MUSICAL SYMBOL SEMIMINIMA BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"1D1BC 1D16E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddbe"},119231:{"value":"1D1BF","name":"MUSICAL SYMBOL FUSA WHITE","category":"So","class":"0","bidirectional_category":"L","mapping":"1D1BB 1D16F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddbf"},119232:{"value":"1D1C0","name":"MUSICAL SYMBOL FUSA BLACK","category":"So","class":"0","bidirectional_category":"L","mapping":"1D1BC 1D16F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc0"},119233:{"value":"1D1C1","name":"MUSICAL SYMBOL LONGA PERFECTA REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc1"},119234:{"value":"1D1C2","name":"MUSICAL SYMBOL LONGA IMPERFECTA REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc2"},119235:{"value":"1D1C3","name":"MUSICAL SYMBOL BREVIS REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc3"},119236:{"value":"1D1C4","name":"MUSICAL SYMBOL SEMIBREVIS REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc4"},119237:{"value":"1D1C5","name":"MUSICAL SYMBOL MINIMA REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc5"},119238:{"value":"1D1C6","name":"MUSICAL SYMBOL SEMIMINIMA REST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc6"},119239:{"value":"1D1C7","name":"MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc7"},119240:{"value":"1D1C8","name":"MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc8"},119241:{"value":"1D1C9","name":"MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddc9"},119242:{"value":"1D1CA","name":"MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddca"},119243:{"value":"1D1CB","name":"MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddcb"},119244:{"value":"1D1CC","name":"MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddcc"},119245:{"value":"1D1CD","name":"MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddcd"},119246:{"value":"1D1CE","name":"MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddce"},119247:{"value":"1D1CF","name":"MUSICAL SYMBOL CROIX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddcf"},119248:{"value":"1D1D0","name":"MUSICAL SYMBOL GREGORIAN C CLEF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd0"},119249:{"value":"1D1D1","name":"MUSICAL SYMBOL GREGORIAN F CLEF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd1"},119250:{"value":"1D1D2","name":"MUSICAL SYMBOL SQUARE B","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd2"},119251:{"value":"1D1D3","name":"MUSICAL SYMBOL VIRGA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd3"},119252:{"value":"1D1D4","name":"MUSICAL SYMBOL PODATUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd4"},119253:{"value":"1D1D5","name":"MUSICAL SYMBOL CLIVIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd5"},119254:{"value":"1D1D6","name":"MUSICAL SYMBOL SCANDICUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd6"},119255:{"value":"1D1D7","name":"MUSICAL SYMBOL CLIMACUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd7"},119256:{"value":"1D1D8","name":"MUSICAL SYMBOL TORCULUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd8"},119257:{"value":"1D1D9","name":"MUSICAL SYMBOL PORRECTUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddd9"},119258:{"value":"1D1DA","name":"MUSICAL SYMBOL PORRECTUS FLEXUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddda"},119259:{"value":"1D1DB","name":"MUSICAL SYMBOL SCANDICUS FLEXUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udddb"},119260:{"value":"1D1DC","name":"MUSICAL SYMBOL TORCULUS RESUPINUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udddc"},119261:{"value":"1D1DD","name":"MUSICAL SYMBOL PES SUBPUNCTIS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udddd"},119262:{"value":"1D1DE","name":"MUSICAL SYMBOL KIEVAN C CLEF","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddde"},119263:{"value":"1D1DF","name":"MUSICAL SYMBOL KIEVAN END OF PIECE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udddf"},119264:{"value":"1D1E0","name":"MUSICAL SYMBOL KIEVAN FINAL NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde0"},119265:{"value":"1D1E1","name":"MUSICAL SYMBOL KIEVAN RECITATIVE MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde1"},119266:{"value":"1D1E2","name":"MUSICAL SYMBOL KIEVAN WHOLE NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde2"},119267:{"value":"1D1E3","name":"MUSICAL SYMBOL KIEVAN HALF NOTE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde3"},119268:{"value":"1D1E4","name":"MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde4"},119269:{"value":"1D1E5","name":"MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde5"},119270:{"value":"1D1E6","name":"MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde6"},119271:{"value":"1D1E7","name":"MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde7"},119272:{"value":"1D1E8","name":"MUSICAL SYMBOL KIEVAN FLAT SIGN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde8"},119273:{"value":"1D1E9","name":"MUSICAL SYMBOL SORI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udde9"},119274:{"value":"1D1EA","name":"MUSICAL SYMBOL KORON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\uddea"},119296:{"value":"1D200","name":"GREEK VOCAL NOTATION SYMBOL-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude00"},119297:{"value":"1D201","name":"GREEK VOCAL NOTATION SYMBOL-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude01"},119298:{"value":"1D202","name":"GREEK VOCAL NOTATION SYMBOL-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude02"},119299:{"value":"1D203","name":"GREEK VOCAL NOTATION SYMBOL-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude03"},119300:{"value":"1D204","name":"GREEK VOCAL NOTATION SYMBOL-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude04"},119301:{"value":"1D205","name":"GREEK VOCAL NOTATION SYMBOL-6","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude05"},119302:{"value":"1D206","name":"GREEK VOCAL NOTATION SYMBOL-7","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude06"},119303:{"value":"1D207","name":"GREEK VOCAL NOTATION SYMBOL-8","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude07"},119304:{"value":"1D208","name":"GREEK VOCAL NOTATION SYMBOL-9","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude08"},119305:{"value":"1D209","name":"GREEK VOCAL NOTATION SYMBOL-10","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude09"},119306:{"value":"1D20A","name":"GREEK VOCAL NOTATION SYMBOL-11","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude0a"},119307:{"value":"1D20B","name":"GREEK VOCAL NOTATION SYMBOL-12","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude0b"},119308:{"value":"1D20C","name":"GREEK VOCAL NOTATION SYMBOL-13","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude0c"},119309:{"value":"1D20D","name":"GREEK VOCAL NOTATION SYMBOL-14","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude0d"},119310:{"value":"1D20E","name":"GREEK VOCAL NOTATION SYMBOL-15","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude0e"},119311:{"value":"1D20F","name":"GREEK VOCAL NOTATION SYMBOL-16","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude0f"},119312:{"value":"1D210","name":"GREEK VOCAL NOTATION SYMBOL-17","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude10"},119313:{"value":"1D211","name":"GREEK VOCAL NOTATION SYMBOL-18","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude11"},119314:{"value":"1D212","name":"GREEK VOCAL NOTATION SYMBOL-19","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude12"},119315:{"value":"1D213","name":"GREEK VOCAL NOTATION SYMBOL-20","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude13"},119316:{"value":"1D214","name":"GREEK VOCAL NOTATION SYMBOL-21","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude14"},119317:{"value":"1D215","name":"GREEK VOCAL NOTATION SYMBOL-22","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude15"},119318:{"value":"1D216","name":"GREEK VOCAL NOTATION SYMBOL-23","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude16"},119319:{"value":"1D217","name":"GREEK VOCAL NOTATION SYMBOL-24","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude17"},119320:{"value":"1D218","name":"GREEK VOCAL NOTATION SYMBOL-50","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude18"},119321:{"value":"1D219","name":"GREEK VOCAL NOTATION SYMBOL-51","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude19"},119322:{"value":"1D21A","name":"GREEK VOCAL NOTATION SYMBOL-52","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude1a"},119323:{"value":"1D21B","name":"GREEK VOCAL NOTATION SYMBOL-53","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude1b"},119324:{"value":"1D21C","name":"GREEK VOCAL NOTATION SYMBOL-54","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude1c"},119325:{"value":"1D21D","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude1d"},119326:{"value":"1D21E","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude1e"},119327:{"value":"1D21F","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude1f"},119328:{"value":"1D220","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude20"},119329:{"value":"1D221","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-7","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude21"},119330:{"value":"1D222","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-8","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude22"},119331:{"value":"1D223","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-11","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude23"},119332:{"value":"1D224","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-12","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude24"},119333:{"value":"1D225","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-13","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude25"},119334:{"value":"1D226","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-14","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude26"},119335:{"value":"1D227","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-17","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude27"},119336:{"value":"1D228","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-18","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude28"},119337:{"value":"1D229","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-19","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude29"},119338:{"value":"1D22A","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-23","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude2a"},119339:{"value":"1D22B","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-24","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude2b"},119340:{"value":"1D22C","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-25","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude2c"},119341:{"value":"1D22D","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-26","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude2d"},119342:{"value":"1D22E","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-27","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude2e"},119343:{"value":"1D22F","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-29","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude2f"},119344:{"value":"1D230","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-30","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude30"},119345:{"value":"1D231","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-32","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude31"},119346:{"value":"1D232","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-36","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude32"},119347:{"value":"1D233","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-37","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude33"},119348:{"value":"1D234","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-38","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude34"},119349:{"value":"1D235","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-39","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude35"},119350:{"value":"1D236","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-40","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude36"},119351:{"value":"1D237","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-42","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude37"},119352:{"value":"1D238","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-43","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude38"},119353:{"value":"1D239","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-45","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude39"},119354:{"value":"1D23A","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-47","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude3a"},119355:{"value":"1D23B","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-48","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude3b"},119356:{"value":"1D23C","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-49","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude3c"},119357:{"value":"1D23D","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-50","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude3d"},119358:{"value":"1D23E","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-51","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude3e"},119359:{"value":"1D23F","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-52","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude3f"},119360:{"value":"1D240","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-53","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude40"},119361:{"value":"1D241","name":"GREEK INSTRUMENTAL NOTATION SYMBOL-54","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude41"},119365:{"value":"1D245","name":"GREEK MUSICAL LEIMMA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\ude45"},119552:{"value":"1D300","name":"MONOGRAM FOR EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf00"},119553:{"value":"1D301","name":"DIGRAM FOR HEAVENLY EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf01"},119554:{"value":"1D302","name":"DIGRAM FOR HUMAN EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf02"},119555:{"value":"1D303","name":"DIGRAM FOR EARTHLY HEAVEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf03"},119556:{"value":"1D304","name":"DIGRAM FOR EARTHLY HUMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf04"},119557:{"value":"1D305","name":"DIGRAM FOR EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf05"},119558:{"value":"1D306","name":"TETRAGRAM FOR CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf06"},119559:{"value":"1D307","name":"TETRAGRAM FOR FULL CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf07"},119560:{"value":"1D308","name":"TETRAGRAM FOR MIRED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf08"},119561:{"value":"1D309","name":"TETRAGRAM FOR BARRIER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf09"},119562:{"value":"1D30A","name":"TETRAGRAM FOR KEEPING SMALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf0a"},119563:{"value":"1D30B","name":"TETRAGRAM FOR CONTRARIETY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf0b"},119564:{"value":"1D30C","name":"TETRAGRAM FOR ASCENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf0c"},119565:{"value":"1D30D","name":"TETRAGRAM FOR OPPOSITION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf0d"},119566:{"value":"1D30E","name":"TETRAGRAM FOR BRANCHING OUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf0e"},119567:{"value":"1D30F","name":"TETRAGRAM FOR DEFECTIVENESS OR DISTORTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf0f"},119568:{"value":"1D310","name":"TETRAGRAM FOR DIVERGENCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf10"},119569:{"value":"1D311","name":"TETRAGRAM FOR YOUTHFULNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf11"},119570:{"value":"1D312","name":"TETRAGRAM FOR INCREASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf12"},119571:{"value":"1D313","name":"TETRAGRAM FOR PENETRATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf13"},119572:{"value":"1D314","name":"TETRAGRAM FOR REACH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf14"},119573:{"value":"1D315","name":"TETRAGRAM FOR CONTACT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf15"},119574:{"value":"1D316","name":"TETRAGRAM FOR HOLDING BACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf16"},119575:{"value":"1D317","name":"TETRAGRAM FOR WAITING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf17"},119576:{"value":"1D318","name":"TETRAGRAM FOR FOLLOWING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf18"},119577:{"value":"1D319","name":"TETRAGRAM FOR ADVANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf19"},119578:{"value":"1D31A","name":"TETRAGRAM FOR RELEASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf1a"},119579:{"value":"1D31B","name":"TETRAGRAM FOR RESISTANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf1b"},119580:{"value":"1D31C","name":"TETRAGRAM FOR EASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf1c"},119581:{"value":"1D31D","name":"TETRAGRAM FOR JOY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf1d"},119582:{"value":"1D31E","name":"TETRAGRAM FOR CONTENTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf1e"},119583:{"value":"1D31F","name":"TETRAGRAM FOR ENDEAVOUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf1f"},119584:{"value":"1D320","name":"TETRAGRAM FOR DUTIES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf20"},119585:{"value":"1D321","name":"TETRAGRAM FOR CHANGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf21"},119586:{"value":"1D322","name":"TETRAGRAM FOR DECISIVENESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf22"},119587:{"value":"1D323","name":"TETRAGRAM FOR BOLD RESOLUTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf23"},119588:{"value":"1D324","name":"TETRAGRAM FOR PACKING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf24"},119589:{"value":"1D325","name":"TETRAGRAM FOR LEGION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf25"},119590:{"value":"1D326","name":"TETRAGRAM FOR CLOSENESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf26"},119591:{"value":"1D327","name":"TETRAGRAM FOR KINSHIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf27"},119592:{"value":"1D328","name":"TETRAGRAM FOR GATHERING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf28"},119593:{"value":"1D329","name":"TETRAGRAM FOR STRENGTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf29"},119594:{"value":"1D32A","name":"TETRAGRAM FOR PURITY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf2a"},119595:{"value":"1D32B","name":"TETRAGRAM FOR FULLNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf2b"},119596:{"value":"1D32C","name":"TETRAGRAM FOR RESIDENCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf2c"},119597:{"value":"1D32D","name":"TETRAGRAM FOR LAW OR MODEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf2d"},119598:{"value":"1D32E","name":"TETRAGRAM FOR RESPONSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf2e"},119599:{"value":"1D32F","name":"TETRAGRAM FOR GOING TO MEET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf2f"},119600:{"value":"1D330","name":"TETRAGRAM FOR ENCOUNTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf30"},119601:{"value":"1D331","name":"TETRAGRAM FOR STOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf31"},119602:{"value":"1D332","name":"TETRAGRAM FOR GREATNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf32"},119603:{"value":"1D333","name":"TETRAGRAM FOR ENLARGEMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf33"},119604:{"value":"1D334","name":"TETRAGRAM FOR PATTERN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf34"},119605:{"value":"1D335","name":"TETRAGRAM FOR RITUAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf35"},119606:{"value":"1D336","name":"TETRAGRAM FOR FLIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf36"},119607:{"value":"1D337","name":"TETRAGRAM FOR VASTNESS OR WASTING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf37"},119608:{"value":"1D338","name":"TETRAGRAM FOR CONSTANCY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf38"},119609:{"value":"1D339","name":"TETRAGRAM FOR MEASURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf39"},119610:{"value":"1D33A","name":"TETRAGRAM FOR ETERNITY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf3a"},119611:{"value":"1D33B","name":"TETRAGRAM FOR UNITY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf3b"},119612:{"value":"1D33C","name":"TETRAGRAM FOR DIMINISHMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf3c"},119613:{"value":"1D33D","name":"TETRAGRAM FOR CLOSED MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf3d"},119614:{"value":"1D33E","name":"TETRAGRAM FOR GUARDEDNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf3e"},119615:{"value":"1D33F","name":"TETRAGRAM FOR GATHERING IN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf3f"},119616:{"value":"1D340","name":"TETRAGRAM FOR MASSING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf40"},119617:{"value":"1D341","name":"TETRAGRAM FOR ACCUMULATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf41"},119618:{"value":"1D342","name":"TETRAGRAM FOR EMBELLISHMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf42"},119619:{"value":"1D343","name":"TETRAGRAM FOR DOUBT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf43"},119620:{"value":"1D344","name":"TETRAGRAM FOR WATCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf44"},119621:{"value":"1D345","name":"TETRAGRAM FOR SINKING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf45"},119622:{"value":"1D346","name":"TETRAGRAM FOR INNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf46"},119623:{"value":"1D347","name":"TETRAGRAM FOR DEPARTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf47"},119624:{"value":"1D348","name":"TETRAGRAM FOR DARKENING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf48"},119625:{"value":"1D349","name":"TETRAGRAM FOR DIMMING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf49"},119626:{"value":"1D34A","name":"TETRAGRAM FOR EXHAUSTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf4a"},119627:{"value":"1D34B","name":"TETRAGRAM FOR SEVERANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf4b"},119628:{"value":"1D34C","name":"TETRAGRAM FOR STOPPAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf4c"},119629:{"value":"1D34D","name":"TETRAGRAM FOR HARDNESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf4d"},119630:{"value":"1D34E","name":"TETRAGRAM FOR COMPLETION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf4e"},119631:{"value":"1D34F","name":"TETRAGRAM FOR CLOSURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf4f"},119632:{"value":"1D350","name":"TETRAGRAM FOR FAILURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf50"},119633:{"value":"1D351","name":"TETRAGRAM FOR AGGRAVATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf51"},119634:{"value":"1D352","name":"TETRAGRAM FOR COMPLIANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf52"},119635:{"value":"1D353","name":"TETRAGRAM FOR ON THE VERGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf53"},119636:{"value":"1D354","name":"TETRAGRAM FOR DIFFICULTIES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf54"},119637:{"value":"1D355","name":"TETRAGRAM FOR LABOURING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf55"},119638:{"value":"1D356","name":"TETRAGRAM FOR FOSTERING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud834\udf56"},120832:{"value":"1D800","name":"SIGNWRITING HAND-FIST INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc00"},120833:{"value":"1D801","name":"SIGNWRITING HAND-CIRCLE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc01"},120834:{"value":"1D802","name":"SIGNWRITING HAND-CUP INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc02"},120835:{"value":"1D803","name":"SIGNWRITING HAND-OVAL INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc03"},120836:{"value":"1D804","name":"SIGNWRITING HAND-HINGE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc04"},120837:{"value":"1D805","name":"SIGNWRITING HAND-ANGLE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc05"},120838:{"value":"1D806","name":"SIGNWRITING HAND-FIST INDEX BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc06"},120839:{"value":"1D807","name":"SIGNWRITING HAND-CIRCLE INDEX BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc07"},120840:{"value":"1D808","name":"SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc08"},120841:{"value":"1D809","name":"SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc09"},120842:{"value":"1D80A","name":"SIGNWRITING HAND-FIST INDEX CUPPED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc0a"},120843:{"value":"1D80B","name":"SIGNWRITING HAND-FIST INDEX HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc0b"},120844:{"value":"1D80C","name":"SIGNWRITING HAND-FIST INDEX HINGED LOW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc0c"},120845:{"value":"1D80D","name":"SIGNWRITING HAND-CIRCLE INDEX HINGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc0d"},120846:{"value":"1D80E","name":"SIGNWRITING HAND-FIST INDEX MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc0e"},120847:{"value":"1D80F","name":"SIGNWRITING HAND-CIRCLE INDEX MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc0f"},120848:{"value":"1D810","name":"SIGNWRITING HAND-FIST INDEX MIDDLE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc10"},120849:{"value":"1D811","name":"SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc11"},120850:{"value":"1D812","name":"SIGNWRITING HAND-FIST INDEX MIDDLE HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc12"},120851:{"value":"1D813","name":"SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc13"},120852:{"value":"1D814","name":"SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc14"},120853:{"value":"1D815","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc15"},120854:{"value":"1D816","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc16"},120855:{"value":"1D817","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc17"},120856:{"value":"1D818","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc18"},120857:{"value":"1D819","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc19"},120858:{"value":"1D81A","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc1a"},120859:{"value":"1D81B","name":"SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc1b"},120860:{"value":"1D81C","name":"SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc1c"},120861:{"value":"1D81D","name":"SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc1d"},120862:{"value":"1D81E","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc1e"},120863:{"value":"1D81F","name":"SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc1f"},120864:{"value":"1D820","name":"SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc20"},120865:{"value":"1D821","name":"SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc21"},120866:{"value":"1D822","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc22"},120867:{"value":"1D823","name":"SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc23"},120868:{"value":"1D824","name":"SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc24"},120869:{"value":"1D825","name":"SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc25"},120870:{"value":"1D826","name":"SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc26"},120871:{"value":"1D827","name":"SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc27"},120872:{"value":"1D828","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc28"},120873:{"value":"1D829","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc29"},120874:{"value":"1D82A","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc2a"},120875:{"value":"1D82B","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc2b"},120876:{"value":"1D82C","name":"SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc2c"},120877:{"value":"1D82D","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc2d"},120878:{"value":"1D82E","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc2e"},120879:{"value":"1D82F","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc2f"},120880:{"value":"1D830","name":"SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc30"},120881:{"value":"1D831","name":"SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc31"},120882:{"value":"1D832","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc32"},120883:{"value":"1D833","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc33"},120884:{"value":"1D834","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc34"},120885:{"value":"1D835","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc35"},120886:{"value":"1D836","name":"SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc36"},120887:{"value":"1D837","name":"SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc37"},120888:{"value":"1D838","name":"SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc38"},120889:{"value":"1D839","name":"SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc39"},120890:{"value":"1D83A","name":"SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc3a"},120891:{"value":"1D83B","name":"SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc3b"},120892:{"value":"1D83C","name":"SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc3c"},120893:{"value":"1D83D","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc3d"},120894:{"value":"1D83E","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc3e"},120895:{"value":"1D83F","name":"SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc3f"},120896:{"value":"1D840","name":"SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc40"},120897:{"value":"1D841","name":"SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc41"},120898:{"value":"1D842","name":"SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc42"},120899:{"value":"1D843","name":"SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc43"},120900:{"value":"1D844","name":"SIGNWRITING HAND-FLAT FOUR FINGERS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc44"},120901:{"value":"1D845","name":"SIGNWRITING HAND-FLAT FOUR FINGERS BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc45"},120902:{"value":"1D846","name":"SIGNWRITING HAND-FLAT FOUR FINGERS HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc46"},120903:{"value":"1D847","name":"SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc47"},120904:{"value":"1D848","name":"SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc48"},120905:{"value":"1D849","name":"SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc49"},120906:{"value":"1D84A","name":"SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc4a"},120907:{"value":"1D84B","name":"SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc4b"},120908:{"value":"1D84C","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc4c"},120909:{"value":"1D84D","name":"SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc4d"},120910:{"value":"1D84E","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc4e"},120911:{"value":"1D84F","name":"SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc4f"},120912:{"value":"1D850","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc50"},120913:{"value":"1D851","name":"SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc51"},120914:{"value":"1D852","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc52"},120915:{"value":"1D853","name":"SIGNWRITING HAND-CUP FIVE FINGERS SPREAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc53"},120916:{"value":"1D854","name":"SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc54"},120917:{"value":"1D855","name":"SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc55"},120918:{"value":"1D856","name":"SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc56"},120919:{"value":"1D857","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc57"},120920:{"value":"1D858","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc58"},120921:{"value":"1D859","name":"SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc59"},120922:{"value":"1D85A","name":"SIGNWRITING HAND-FLAT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc5a"},120923:{"value":"1D85B","name":"SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc5b"},120924:{"value":"1D85C","name":"SIGNWRITING HAND-FLAT HEEL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc5c"},120925:{"value":"1D85D","name":"SIGNWRITING HAND-FLAT THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc5d"},120926:{"value":"1D85E","name":"SIGNWRITING HAND-FLAT HEEL THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc5e"},120927:{"value":"1D85F","name":"SIGNWRITING HAND-FLAT THUMB BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc5f"},120928:{"value":"1D860","name":"SIGNWRITING HAND-FLAT THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc60"},120929:{"value":"1D861","name":"SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc61"},120930:{"value":"1D862","name":"SIGNWRITING HAND-FLAT SPLIT CENTRE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc62"},120931:{"value":"1D863","name":"SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc63"},120932:{"value":"1D864","name":"SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc64"},120933:{"value":"1D865","name":"SIGNWRITING HAND-FLAT SPLIT LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc65"},120934:{"value":"1D866","name":"SIGNWRITING HAND-CLAW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc66"},120935:{"value":"1D867","name":"SIGNWRITING HAND-CLAW THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc67"},120936:{"value":"1D868","name":"SIGNWRITING HAND-CLAW NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc68"},120937:{"value":"1D869","name":"SIGNWRITING HAND-CLAW THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc69"},120938:{"value":"1D86A","name":"SIGNWRITING HAND-HOOK CURLICUE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc6a"},120939:{"value":"1D86B","name":"SIGNWRITING HAND-HOOK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc6b"},120940:{"value":"1D86C","name":"SIGNWRITING HAND-CUP OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc6c"},120941:{"value":"1D86D","name":"SIGNWRITING HAND-CUP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc6d"},120942:{"value":"1D86E","name":"SIGNWRITING HAND-CUP OPEN THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc6e"},120943:{"value":"1D86F","name":"SIGNWRITING HAND-CUP THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc6f"},120944:{"value":"1D870","name":"SIGNWRITING HAND-CUP OPEN NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc70"},120945:{"value":"1D871","name":"SIGNWRITING HAND-CUP NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc71"},120946:{"value":"1D872","name":"SIGNWRITING HAND-CUP OPEN THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc72"},120947:{"value":"1D873","name":"SIGNWRITING HAND-CUP THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc73"},120948:{"value":"1D874","name":"SIGNWRITING HAND-CURLICUE OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc74"},120949:{"value":"1D875","name":"SIGNWRITING HAND-CURLICUE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc75"},120950:{"value":"1D876","name":"SIGNWRITING HAND-CIRCLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc76"},120951:{"value":"1D877","name":"SIGNWRITING HAND-OVAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc77"},120952:{"value":"1D878","name":"SIGNWRITING HAND-OVAL THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc78"},120953:{"value":"1D879","name":"SIGNWRITING HAND-OVAL NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc79"},120954:{"value":"1D87A","name":"SIGNWRITING HAND-OVAL THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc7a"},120955:{"value":"1D87B","name":"SIGNWRITING HAND-HINGE OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc7b"},120956:{"value":"1D87C","name":"SIGNWRITING HAND-HINGE OPEN THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc7c"},120957:{"value":"1D87D","name":"SIGNWRITING HAND-HINGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc7d"},120958:{"value":"1D87E","name":"SIGNWRITING HAND-HINGE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc7e"},120959:{"value":"1D87F","name":"SIGNWRITING HAND-HINGE OPEN THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc7f"},120960:{"value":"1D880","name":"SIGNWRITING HAND-HINGE THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc80"},120961:{"value":"1D881","name":"SIGNWRITING HAND-HINGE OPEN NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc81"},120962:{"value":"1D882","name":"SIGNWRITING HAND-HINGE NO THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc82"},120963:{"value":"1D883","name":"SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc83"},120964:{"value":"1D884","name":"SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc84"},120965:{"value":"1D885","name":"SIGNWRITING HAND-ANGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc85"},120966:{"value":"1D886","name":"SIGNWRITING HAND-FIST INDEX MIDDLE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc86"},120967:{"value":"1D887","name":"SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc87"},120968:{"value":"1D888","name":"SIGNWRITING HAND-HINGE INDEX MIDDLE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc88"},120969:{"value":"1D889","name":"SIGNWRITING HAND-ANGLE INDEX MIDDLE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc89"},120970:{"value":"1D88A","name":"SIGNWRITING HAND-HINGE LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc8a"},120971:{"value":"1D88B","name":"SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc8b"},120972:{"value":"1D88C","name":"SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc8c"},120973:{"value":"1D88D","name":"SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc8d"},120974:{"value":"1D88E","name":"SIGNWRITING HAND-FIST LITTLE DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc8e"},120975:{"value":"1D88F","name":"SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc8f"},120976:{"value":"1D890","name":"SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc90"},120977:{"value":"1D891","name":"SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc91"},120978:{"value":"1D892","name":"SIGNWRITING HAND-FIST LITTLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc92"},120979:{"value":"1D893","name":"SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc93"},120980:{"value":"1D894","name":"SIGNWRITING HAND-CIRCLE LITTLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc94"},120981:{"value":"1D895","name":"SIGNWRITING HAND-OVAL LITTLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc95"},120982:{"value":"1D896","name":"SIGNWRITING HAND-ANGLE LITTLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc96"},120983:{"value":"1D897","name":"SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc97"},120984:{"value":"1D898","name":"SIGNWRITING HAND-FIST LITTLE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc98"},120985:{"value":"1D899","name":"SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc99"},120986:{"value":"1D89A","name":"SIGNWRITING HAND-FIST LITTLE THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc9a"},120987:{"value":"1D89B","name":"SIGNWRITING HAND-HINGE LITTLE THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc9b"},120988:{"value":"1D89C","name":"SIGNWRITING HAND-FIST LITTLE INDEX THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc9c"},120989:{"value":"1D89D","name":"SIGNWRITING HAND-HINGE LITTLE INDEX THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc9d"},120990:{"value":"1D89E","name":"SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc9e"},120991:{"value":"1D89F","name":"SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udc9f"},120992:{"value":"1D8A0","name":"SIGNWRITING HAND-FIST LITTLE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca0"},120993:{"value":"1D8A1","name":"SIGNWRITING HAND-CIRCLE LITTLE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca1"},120994:{"value":"1D8A2","name":"SIGNWRITING HAND-HINGE LITTLE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca2"},120995:{"value":"1D8A3","name":"SIGNWRITING HAND-ANGLE LITTLE INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca3"},120996:{"value":"1D8A4","name":"SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca4"},120997:{"value":"1D8A5","name":"SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca5"},120998:{"value":"1D8A6","name":"SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca6"},120999:{"value":"1D8A7","name":"SIGNWRITING HAND-HINGE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca7"},121000:{"value":"1D8A8","name":"SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca8"},121001:{"value":"1D8A9","name":"SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udca9"},121002:{"value":"1D8AA","name":"SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcaa"},121003:{"value":"1D8AB","name":"SIGNWRITING HAND-FIST RING DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcab"},121004:{"value":"1D8AC","name":"SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcac"},121005:{"value":"1D8AD","name":"SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcad"},121006:{"value":"1D8AE","name":"SIGNWRITING HAND-FIST RING UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcae"},121007:{"value":"1D8AF","name":"SIGNWRITING HAND-FIST RING RAISED KNUCKLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcaf"},121008:{"value":"1D8B0","name":"SIGNWRITING HAND-FIST RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb0"},121009:{"value":"1D8B1","name":"SIGNWRITING HAND-CIRCLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb1"},121010:{"value":"1D8B2","name":"SIGNWRITING HAND-OVAL RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb2"},121011:{"value":"1D8B3","name":"SIGNWRITING HAND-ANGLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb3"},121012:{"value":"1D8B4","name":"SIGNWRITING HAND-FIST RING MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb4"},121013:{"value":"1D8B5","name":"SIGNWRITING HAND-FIST RING MIDDLE CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb5"},121014:{"value":"1D8B6","name":"SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb6"},121015:{"value":"1D8B7","name":"SIGNWRITING HAND-FIST RING INDEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb7"},121016:{"value":"1D8B8","name":"SIGNWRITING HAND-FIST RING THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb8"},121017:{"value":"1D8B9","name":"SIGNWRITING HAND-HOOK RING THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcb9"},121018:{"value":"1D8BA","name":"SIGNWRITING HAND-FIST INDEX RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcba"},121019:{"value":"1D8BB","name":"SIGNWRITING HAND-CIRCLE INDEX RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcbb"},121020:{"value":"1D8BC","name":"SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcbc"},121021:{"value":"1D8BD","name":"SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcbd"},121022:{"value":"1D8BE","name":"SIGNWRITING HAND-HOOK INDEX RING LITTLE IN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcbe"},121023:{"value":"1D8BF","name":"SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcbf"},121024:{"value":"1D8C0","name":"SIGNWRITING HAND-CUP INDEX RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc0"},121025:{"value":"1D8C1","name":"SIGNWRITING HAND-HINGE INDEX RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc1"},121026:{"value":"1D8C2","name":"SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc2"},121027:{"value":"1D8C3","name":"SIGNWRITING HAND-ANGLE INDEX RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc3"},121028:{"value":"1D8C4","name":"SIGNWRITING HAND-FIST MIDDLE DOWN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc4"},121029:{"value":"1D8C5","name":"SIGNWRITING HAND-HINGE MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc5"},121030:{"value":"1D8C6","name":"SIGNWRITING HAND-FIST MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc6"},121031:{"value":"1D8C7","name":"SIGNWRITING HAND-CIRCLE MIDDLE UP","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc7"},121032:{"value":"1D8C8","name":"SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc8"},121033:{"value":"1D8C9","name":"SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcc9"},121034:{"value":"1D8CA","name":"SIGNWRITING HAND-HOOK MIDDLE THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcca"},121035:{"value":"1D8CB","name":"SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udccb"},121036:{"value":"1D8CC","name":"SIGNWRITING HAND-FIST MIDDLE LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udccc"},121037:{"value":"1D8CD","name":"SIGNWRITING HAND-FIST MIDDLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udccd"},121038:{"value":"1D8CE","name":"SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcce"},121039:{"value":"1D8CF","name":"SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udccf"},121040:{"value":"1D8D0","name":"SIGNWRITING HAND-CUP MIDDLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd0"},121041:{"value":"1D8D1","name":"SIGNWRITING HAND-HINGE MIDDLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd1"},121042:{"value":"1D8D2","name":"SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd2"},121043:{"value":"1D8D3","name":"SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd3"},121044:{"value":"1D8D4","name":"SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd4"},121045:{"value":"1D8D5","name":"SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd5"},121046:{"value":"1D8D6","name":"SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd6"},121047:{"value":"1D8D7","name":"SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd7"},121048:{"value":"1D8D8","name":"SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd8"},121049:{"value":"1D8D9","name":"SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcd9"},121050:{"value":"1D8DA","name":"SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcda"},121051:{"value":"1D8DB","name":"SIGNWRITING HAND-HINGE INDEX HINGED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcdb"},121052:{"value":"1D8DC","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcdc"},121053:{"value":"1D8DD","name":"SIGNWRITING HAND-HINGE INDEX THUMB SIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcdd"},121054:{"value":"1D8DE","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcde"},121055:{"value":"1D8DF","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcdf"},121056:{"value":"1D8E0","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce0"},121057:{"value":"1D8E1","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce1"},121058:{"value":"1D8E2","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce2"},121059:{"value":"1D8E3","name":"SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce3"},121060:{"value":"1D8E4","name":"SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce4"},121061:{"value":"1D8E5","name":"SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce5"},121062:{"value":"1D8E6","name":"SIGNWRITING HAND-FIST INDEX THUMB HOOK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce6"},121063:{"value":"1D8E7","name":"SIGNWRITING HAND-FIST INDEX THUMB CURLICUE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce7"},121064:{"value":"1D8E8","name":"SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce8"},121065:{"value":"1D8E9","name":"SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udce9"},121066:{"value":"1D8EA","name":"SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcea"},121067:{"value":"1D8EB","name":"SIGNWRITING HAND-FIST INDEX THUMB CIRCLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udceb"},121068:{"value":"1D8EC","name":"SIGNWRITING HAND-CUP INDEX THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcec"},121069:{"value":"1D8ED","name":"SIGNWRITING HAND-CUP INDEX THUMB OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udced"},121070:{"value":"1D8EE","name":"SIGNWRITING HAND-HINGE INDEX THUMB OPEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcee"},121071:{"value":"1D8EF","name":"SIGNWRITING HAND-HINGE INDEX THUMB LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcef"},121072:{"value":"1D8F0","name":"SIGNWRITING HAND-HINGE INDEX THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf0"},121073:{"value":"1D8F1","name":"SIGNWRITING HAND-HINGE INDEX THUMB SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf1"},121074:{"value":"1D8F2","name":"SIGNWRITING HAND-ANGLE INDEX THUMB OUT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf2"},121075:{"value":"1D8F3","name":"SIGNWRITING HAND-ANGLE INDEX THUMB IN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf3"},121076:{"value":"1D8F4","name":"SIGNWRITING HAND-ANGLE INDEX THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf4"},121077:{"value":"1D8F5","name":"SIGNWRITING HAND-FIST THUMB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf5"},121078:{"value":"1D8F6","name":"SIGNWRITING HAND-FIST THUMB HEEL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf6"},121079:{"value":"1D8F7","name":"SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf7"},121080:{"value":"1D8F8","name":"SIGNWRITING HAND-FIST THUMB SIDE CONJOINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf8"},121081:{"value":"1D8F9","name":"SIGNWRITING HAND-FIST THUMB SIDE BENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcf9"},121082:{"value":"1D8FA","name":"SIGNWRITING HAND-FIST THUMB FORWARD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcfa"},121083:{"value":"1D8FB","name":"SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcfb"},121084:{"value":"1D8FC","name":"SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcfc"},121085:{"value":"1D8FD","name":"SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcfd"},121086:{"value":"1D8FE","name":"SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcfe"},121087:{"value":"1D8FF","name":"SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udcff"},121088:{"value":"1D900","name":"SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd00"},121089:{"value":"1D901","name":"SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd01"},121090:{"value":"1D902","name":"SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd02"},121091:{"value":"1D903","name":"SIGNWRITING HAND-FIST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd03"},121092:{"value":"1D904","name":"SIGNWRITING HAND-FIST HEEL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd04"},121093:{"value":"1D905","name":"SIGNWRITING TOUCH SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd05"},121094:{"value":"1D906","name":"SIGNWRITING TOUCH MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd06"},121095:{"value":"1D907","name":"SIGNWRITING TOUCH BETWEEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd07"},121096:{"value":"1D908","name":"SIGNWRITING GRASP SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd08"},121097:{"value":"1D909","name":"SIGNWRITING GRASP MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd09"},121098:{"value":"1D90A","name":"SIGNWRITING GRASP BETWEEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd0a"},121099:{"value":"1D90B","name":"SIGNWRITING STRIKE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd0b"},121100:{"value":"1D90C","name":"SIGNWRITING STRIKE MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd0c"},121101:{"value":"1D90D","name":"SIGNWRITING STRIKE BETWEEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd0d"},121102:{"value":"1D90E","name":"SIGNWRITING BRUSH SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd0e"},121103:{"value":"1D90F","name":"SIGNWRITING BRUSH MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd0f"},121104:{"value":"1D910","name":"SIGNWRITING BRUSH BETWEEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd10"},121105:{"value":"1D911","name":"SIGNWRITING RUB SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd11"},121106:{"value":"1D912","name":"SIGNWRITING RUB MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd12"},121107:{"value":"1D913","name":"SIGNWRITING RUB BETWEEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd13"},121108:{"value":"1D914","name":"SIGNWRITING SURFACE SYMBOLS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd14"},121109:{"value":"1D915","name":"SIGNWRITING SURFACE BETWEEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd15"},121110:{"value":"1D916","name":"SIGNWRITING SQUEEZE LARGE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd16"},121111:{"value":"1D917","name":"SIGNWRITING SQUEEZE SMALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd17"},121112:{"value":"1D918","name":"SIGNWRITING SQUEEZE LARGE MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd18"},121113:{"value":"1D919","name":"SIGNWRITING SQUEEZE SMALL MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd19"},121114:{"value":"1D91A","name":"SIGNWRITING SQUEEZE SEQUENTIAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd1a"},121115:{"value":"1D91B","name":"SIGNWRITING FLICK LARGE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd1b"},121116:{"value":"1D91C","name":"SIGNWRITING FLICK SMALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd1c"},121117:{"value":"1D91D","name":"SIGNWRITING FLICK LARGE MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd1d"},121118:{"value":"1D91E","name":"SIGNWRITING FLICK SMALL MULTIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd1e"},121119:{"value":"1D91F","name":"SIGNWRITING FLICK SEQUENTIAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd1f"},121120:{"value":"1D920","name":"SIGNWRITING SQUEEZE FLICK ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd20"},121121:{"value":"1D921","name":"SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd21"},121122:{"value":"1D922","name":"SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd22"},121123:{"value":"1D923","name":"SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd23"},121124:{"value":"1D924","name":"SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd24"},121125:{"value":"1D925","name":"SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd25"},121126:{"value":"1D926","name":"SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd26"},121127:{"value":"1D927","name":"SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd27"},121128:{"value":"1D928","name":"SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd28"},121129:{"value":"1D929","name":"SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd29"},121130:{"value":"1D92A","name":"SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd2a"},121131:{"value":"1D92B","name":"SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd2b"},121132:{"value":"1D92C","name":"SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd2c"},121133:{"value":"1D92D","name":"SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd2d"},121134:{"value":"1D92E","name":"SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd2e"},121135:{"value":"1D92F","name":"SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd2f"},121136:{"value":"1D930","name":"SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd30"},121137:{"value":"1D931","name":"SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd31"},121138:{"value":"1D932","name":"SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd32"},121139:{"value":"1D933","name":"SIGNWRITING MOVEMENT-WALLPLANE CROSS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd33"},121140:{"value":"1D934","name":"SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd34"},121141:{"value":"1D935","name":"SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd35"},121142:{"value":"1D936","name":"SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd36"},121143:{"value":"1D937","name":"SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd37"},121144:{"value":"1D938","name":"SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd38"},121145:{"value":"1D939","name":"SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd39"},121146:{"value":"1D93A","name":"SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd3a"},121147:{"value":"1D93B","name":"SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd3b"},121148:{"value":"1D93C","name":"SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd3c"},121149:{"value":"1D93D","name":"SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd3d"},121150:{"value":"1D93E","name":"SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd3e"},121151:{"value":"1D93F","name":"SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd3f"},121152:{"value":"1D940","name":"SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd40"},121153:{"value":"1D941","name":"SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd41"},121154:{"value":"1D942","name":"SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd42"},121155:{"value":"1D943","name":"SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd43"},121156:{"value":"1D944","name":"SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd44"},121157:{"value":"1D945","name":"SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd45"},121158:{"value":"1D946","name":"SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd46"},121159:{"value":"1D947","name":"SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd47"},121160:{"value":"1D948","name":"SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd48"},121161:{"value":"1D949","name":"SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd49"},121162:{"value":"1D94A","name":"SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd4a"},121163:{"value":"1D94B","name":"SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd4b"},121164:{"value":"1D94C","name":"SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd4c"},121165:{"value":"1D94D","name":"SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd4d"},121166:{"value":"1D94E","name":"SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd4e"},121167:{"value":"1D94F","name":"SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd4f"},121168:{"value":"1D950","name":"SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd50"},121169:{"value":"1D951","name":"SIGNWRITING TRAVEL-WALLPLANE SHAKING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd51"},121170:{"value":"1D952","name":"SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd52"},121171:{"value":"1D953","name":"SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd53"},121172:{"value":"1D954","name":"SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd54"},121173:{"value":"1D955","name":"SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd55"},121174:{"value":"1D956","name":"SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd56"},121175:{"value":"1D957","name":"SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd57"},121176:{"value":"1D958","name":"SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd58"},121177:{"value":"1D959","name":"SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd59"},121178:{"value":"1D95A","name":"SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd5a"},121179:{"value":"1D95B","name":"SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd5b"},121180:{"value":"1D95C","name":"SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd5c"},121181:{"value":"1D95D","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd5d"},121182:{"value":"1D95E","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd5e"},121183:{"value":"1D95F","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd5f"},121184:{"value":"1D960","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd60"},121185:{"value":"1D961","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd61"},121186:{"value":"1D962","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd62"},121187:{"value":"1D963","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd63"},121188:{"value":"1D964","name":"SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd64"},121189:{"value":"1D965","name":"SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd65"},121190:{"value":"1D966","name":"SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd66"},121191:{"value":"1D967","name":"SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd67"},121192:{"value":"1D968","name":"SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd68"},121193:{"value":"1D969","name":"SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd69"},121194:{"value":"1D96A","name":"SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd6a"},121195:{"value":"1D96B","name":"SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd6b"},121196:{"value":"1D96C","name":"SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd6c"},121197:{"value":"1D96D","name":"SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd6d"},121198:{"value":"1D96E","name":"SIGNWRITING MOVEMENT-FLOORPLANE CROSS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd6e"},121199:{"value":"1D96F","name":"SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd6f"},121200:{"value":"1D970","name":"SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd70"},121201:{"value":"1D971","name":"SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd71"},121202:{"value":"1D972","name":"SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd72"},121203:{"value":"1D973","name":"SIGNWRITING MOVEMENT-FLOORPLANE BEND","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd73"},121204:{"value":"1D974","name":"SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd74"},121205:{"value":"1D975","name":"SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd75"},121206:{"value":"1D976","name":"SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd76"},121207:{"value":"1D977","name":"SIGNWRITING MOVEMENT-FLOORPLANE CHECK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd77"},121208:{"value":"1D978","name":"SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd78"},121209:{"value":"1D979","name":"SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd79"},121210:{"value":"1D97A","name":"SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd7a"},121211:{"value":"1D97B","name":"SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd7b"},121212:{"value":"1D97C","name":"SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd7c"},121213:{"value":"1D97D","name":"SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd7d"},121214:{"value":"1D97E","name":"SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd7e"},121215:{"value":"1D97F","name":"SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd7f"},121216:{"value":"1D980","name":"SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd80"},121217:{"value":"1D981","name":"SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd81"},121218:{"value":"1D982","name":"SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd82"},121219:{"value":"1D983","name":"SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd83"},121220:{"value":"1D984","name":"SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd84"},121221:{"value":"1D985","name":"SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd85"},121222:{"value":"1D986","name":"SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd86"},121223:{"value":"1D987","name":"SIGNWRITING TRAVEL-FLOORPLANE SHAKING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd87"},121224:{"value":"1D988","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd88"},121225:{"value":"1D989","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd89"},121226:{"value":"1D98A","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd8a"},121227:{"value":"1D98B","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd8b"},121228:{"value":"1D98C","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd8c"},121229:{"value":"1D98D","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd8d"},121230:{"value":"1D98E","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd8e"},121231:{"value":"1D98F","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd8f"},121232:{"value":"1D990","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd90"},121233:{"value":"1D991","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd91"},121234:{"value":"1D992","name":"SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd92"},121235:{"value":"1D993","name":"SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd93"},121236:{"value":"1D994","name":"SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd94"},121237:{"value":"1D995","name":"SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd95"},121238:{"value":"1D996","name":"SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd96"},121239:{"value":"1D997","name":"SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd97"},121240:{"value":"1D998","name":"SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd98"},121241:{"value":"1D999","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd99"},121242:{"value":"1D99A","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd9a"},121243:{"value":"1D99B","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd9b"},121244:{"value":"1D99C","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd9c"},121245:{"value":"1D99D","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd9d"},121246:{"value":"1D99E","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd9e"},121247:{"value":"1D99F","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udd9f"},121248:{"value":"1D9A0","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda0"},121249:{"value":"1D9A1","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda1"},121250:{"value":"1D9A2","name":"SIGNWRITING ROTATION-WALLPLANE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda2"},121251:{"value":"1D9A3","name":"SIGNWRITING ROTATION-WALLPLANE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda3"},121252:{"value":"1D9A4","name":"SIGNWRITING ROTATION-WALLPLANE ALTERNATE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda4"},121253:{"value":"1D9A5","name":"SIGNWRITING MOVEMENT-WALLPLANE SHAKING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda5"},121254:{"value":"1D9A6","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda6"},121255:{"value":"1D9A7","name":"SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda7"},121256:{"value":"1D9A8","name":"SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda8"},121257:{"value":"1D9A9","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udda9"},121258:{"value":"1D9AA","name":"SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddaa"},121259:{"value":"1D9AB","name":"SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddab"},121260:{"value":"1D9AC","name":"SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddac"},121261:{"value":"1D9AD","name":"SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddad"},121262:{"value":"1D9AE","name":"SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddae"},121263:{"value":"1D9AF","name":"SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddaf"},121264:{"value":"1D9B0","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb0"},121265:{"value":"1D9B1","name":"SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb1"},121266:{"value":"1D9B2","name":"SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb2"},121267:{"value":"1D9B3","name":"SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb3"},121268:{"value":"1D9B4","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb4"},121269:{"value":"1D9B5","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb5"},121270:{"value":"1D9B6","name":"SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb6"},121271:{"value":"1D9B7","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb7"},121272:{"value":"1D9B8","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb8"},121273:{"value":"1D9B9","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddb9"},121274:{"value":"1D9BA","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddba"},121275:{"value":"1D9BB","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddbb"},121276:{"value":"1D9BC","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddbc"},121277:{"value":"1D9BD","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddbd"},121278:{"value":"1D9BE","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddbe"},121279:{"value":"1D9BF","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddbf"},121280:{"value":"1D9C0","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc0"},121281:{"value":"1D9C1","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc1"},121282:{"value":"1D9C2","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc2"},121283:{"value":"1D9C3","name":"SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc3"},121284:{"value":"1D9C4","name":"SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc4"},121285:{"value":"1D9C5","name":"SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc5"},121286:{"value":"1D9C6","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc6"},121287:{"value":"1D9C7","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc7"},121288:{"value":"1D9C8","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc8"},121289:{"value":"1D9C9","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddc9"},121290:{"value":"1D9CA","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddca"},121291:{"value":"1D9CB","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddcb"},121292:{"value":"1D9CC","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddcc"},121293:{"value":"1D9CD","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddcd"},121294:{"value":"1D9CE","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddce"},121295:{"value":"1D9CF","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddcf"},121296:{"value":"1D9D0","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd0"},121297:{"value":"1D9D1","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd1"},121298:{"value":"1D9D2","name":"SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd2"},121299:{"value":"1D9D3","name":"SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd3"},121300:{"value":"1D9D4","name":"SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd4"},121301:{"value":"1D9D5","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd5"},121302:{"value":"1D9D6","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd6"},121303:{"value":"1D9D7","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd7"},121304:{"value":"1D9D8","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd8"},121305:{"value":"1D9D9","name":"SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddd9"},121306:{"value":"1D9DA","name":"SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddda"},121307:{"value":"1D9DB","name":"SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udddb"},121308:{"value":"1D9DC","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udddc"},121309:{"value":"1D9DD","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udddd"},121310:{"value":"1D9DE","name":"SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddde"},121311:{"value":"1D9DF","name":"SIGNWRITING ROTATION-FLOORPLANE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udddf"},121312:{"value":"1D9E0","name":"SIGNWRITING ROTATION-FLOORPLANE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde0"},121313:{"value":"1D9E1","name":"SIGNWRITING ROTATION-FLOORPLANE ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde1"},121314:{"value":"1D9E2","name":"SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde2"},121315:{"value":"1D9E3","name":"SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde3"},121316:{"value":"1D9E4","name":"SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde4"},121317:{"value":"1D9E5","name":"SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde5"},121318:{"value":"1D9E6","name":"SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde6"},121319:{"value":"1D9E7","name":"SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde7"},121320:{"value":"1D9E8","name":"SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde8"},121321:{"value":"1D9E9","name":"SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udde9"},121322:{"value":"1D9EA","name":"SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddea"},121323:{"value":"1D9EB","name":"SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddeb"},121324:{"value":"1D9EC","name":"SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddec"},121325:{"value":"1D9ED","name":"SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\udded"},121326:{"value":"1D9EE","name":"SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddee"},121327:{"value":"1D9EF","name":"SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddef"},121328:{"value":"1D9F0","name":"SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf0"},121329:{"value":"1D9F1","name":"SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf1"},121330:{"value":"1D9F2","name":"SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf2"},121331:{"value":"1D9F3","name":"SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf3"},121332:{"value":"1D9F4","name":"SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf4"},121333:{"value":"1D9F5","name":"SIGNWRITING DYNAMIC ARROWHEAD SMALL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf5"},121334:{"value":"1D9F6","name":"SIGNWRITING DYNAMIC ARROWHEAD LARGE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf6"},121335:{"value":"1D9F7","name":"SIGNWRITING DYNAMIC FAST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf7"},121336:{"value":"1D9F8","name":"SIGNWRITING DYNAMIC SLOW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf8"},121337:{"value":"1D9F9","name":"SIGNWRITING DYNAMIC TENSE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddf9"},121338:{"value":"1D9FA","name":"SIGNWRITING DYNAMIC RELAXED","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddfa"},121339:{"value":"1D9FB","name":"SIGNWRITING DYNAMIC SIMULTANEOUS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddfb"},121340:{"value":"1D9FC","name":"SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddfc"},121341:{"value":"1D9FD","name":"SIGNWRITING DYNAMIC EVERY OTHER TIME","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddfd"},121342:{"value":"1D9FE","name":"SIGNWRITING DYNAMIC GRADUAL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddfe"},121343:{"value":"1D9FF","name":"SIGNWRITING HEAD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\uddff"},121399:{"value":"1DA37","name":"SIGNWRITING AIR BLOW SMALL ROTATIONS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude37"},121400:{"value":"1DA38","name":"SIGNWRITING AIR SUCK SMALL ROTATIONS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude38"},121401:{"value":"1DA39","name":"SIGNWRITING BREATH INHALE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude39"},121402:{"value":"1DA3A","name":"SIGNWRITING BREATH EXHALE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude3a"},121453:{"value":"1DA6D","name":"SIGNWRITING SHOULDER HIP SPINE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude6d"},121454:{"value":"1DA6E","name":"SIGNWRITING SHOULDER HIP POSITIONS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude6e"},121455:{"value":"1DA6F","name":"SIGNWRITING WALLPLANE SHOULDER HIP MOVE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude6f"},121456:{"value":"1DA70","name":"SIGNWRITING FLOORPLANE SHOULDER HIP MOVE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude70"},121457:{"value":"1DA71","name":"SIGNWRITING SHOULDER TILTING FROM WAIST","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude71"},121458:{"value":"1DA72","name":"SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude72"},121459:{"value":"1DA73","name":"SIGNWRITING TORSO-WALLPLANE CURVED BEND","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude73"},121460:{"value":"1DA74","name":"SIGNWRITING TORSO-FLOORPLANE TWISTING","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude74"},121462:{"value":"1DA76","name":"SIGNWRITING LIMB COMBINATION","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude76"},121463:{"value":"1DA77","name":"SIGNWRITING LIMB LENGTH-1","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude77"},121464:{"value":"1DA78","name":"SIGNWRITING LIMB LENGTH-2","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude78"},121465:{"value":"1DA79","name":"SIGNWRITING LIMB LENGTH-3","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude79"},121466:{"value":"1DA7A","name":"SIGNWRITING LIMB LENGTH-4","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude7a"},121467:{"value":"1DA7B","name":"SIGNWRITING LIMB LENGTH-5","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude7b"},121468:{"value":"1DA7C","name":"SIGNWRITING LIMB LENGTH-6","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude7c"},121469:{"value":"1DA7D","name":"SIGNWRITING LIMB LENGTH-7","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude7d"},121470:{"value":"1DA7E","name":"SIGNWRITING FINGER","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude7e"},121471:{"value":"1DA7F","name":"SIGNWRITING LOCATION-WALLPLANE SPACE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude7f"},121472:{"value":"1DA80","name":"SIGNWRITING LOCATION-FLOORPLANE SPACE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude80"},121473:{"value":"1DA81","name":"SIGNWRITING LOCATION HEIGHT","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude81"},121474:{"value":"1DA82","name":"SIGNWRITING LOCATION WIDTH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude82"},121475:{"value":"1DA83","name":"SIGNWRITING LOCATION DEPTH","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude83"},121477:{"value":"1DA85","name":"SIGNWRITING LOCATION TORSO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude85"},121478:{"value":"1DA86","name":"SIGNWRITING LOCATION LIMBS DIGITS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud836\ude86"},123215:{"value":"1E14F","name":"NYIAKENG PUACHUE HMONG CIRCLED CA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud838\udd4f"},126124:{"value":"1ECAC","name":"INDIC SIYAQ PLACEHOLDER","category":"So","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udcac"},126254:{"value":"1ED2E","name":"OTTOMAN SIYAQ MARRATAN","category":"So","class":"0","bidirectional_category":"AL","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83b\udd2e"},126976:{"value":"1F000","name":"MAHJONG TILE EAST WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc00"},126977:{"value":"1F001","name":"MAHJONG TILE SOUTH WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc01"},126978:{"value":"1F002","name":"MAHJONG TILE WEST WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc02"},126979:{"value":"1F003","name":"MAHJONG TILE NORTH WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc03"},126980:{"value":"1F004","name":"MAHJONG TILE RED DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc04"},126981:{"value":"1F005","name":"MAHJONG TILE GREEN DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc05"},126982:{"value":"1F006","name":"MAHJONG TILE WHITE DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc06"},126983:{"value":"1F007","name":"MAHJONG TILE ONE OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc07"},126984:{"value":"1F008","name":"MAHJONG TILE TWO OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc08"},126985:{"value":"1F009","name":"MAHJONG TILE THREE OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc09"},126986:{"value":"1F00A","name":"MAHJONG TILE FOUR OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc0a"},126987:{"value":"1F00B","name":"MAHJONG TILE FIVE OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc0b"},126988:{"value":"1F00C","name":"MAHJONG TILE SIX OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc0c"},126989:{"value":"1F00D","name":"MAHJONG TILE SEVEN OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc0d"},126990:{"value":"1F00E","name":"MAHJONG TILE EIGHT OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc0e"},126991:{"value":"1F00F","name":"MAHJONG TILE NINE OF CHARACTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc0f"},126992:{"value":"1F010","name":"MAHJONG TILE ONE OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc10"},126993:{"value":"1F011","name":"MAHJONG TILE TWO OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc11"},126994:{"value":"1F012","name":"MAHJONG TILE THREE OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc12"},126995:{"value":"1F013","name":"MAHJONG TILE FOUR OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc13"},126996:{"value":"1F014","name":"MAHJONG TILE FIVE OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc14"},126997:{"value":"1F015","name":"MAHJONG TILE SIX OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc15"},126998:{"value":"1F016","name":"MAHJONG TILE SEVEN OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc16"},126999:{"value":"1F017","name":"MAHJONG TILE EIGHT OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc17"},127000:{"value":"1F018","name":"MAHJONG TILE NINE OF BAMBOOS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc18"},127001:{"value":"1F019","name":"MAHJONG TILE ONE OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc19"},127002:{"value":"1F01A","name":"MAHJONG TILE TWO OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc1a"},127003:{"value":"1F01B","name":"MAHJONG TILE THREE OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc1b"},127004:{"value":"1F01C","name":"MAHJONG TILE FOUR OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc1c"},127005:{"value":"1F01D","name":"MAHJONG TILE FIVE OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc1d"},127006:{"value":"1F01E","name":"MAHJONG TILE SIX OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc1e"},127007:{"value":"1F01F","name":"MAHJONG TILE SEVEN OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc1f"},127008:{"value":"1F020","name":"MAHJONG TILE EIGHT OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc20"},127009:{"value":"1F021","name":"MAHJONG TILE NINE OF CIRCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc21"},127010:{"value":"1F022","name":"MAHJONG TILE PLUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc22"},127011:{"value":"1F023","name":"MAHJONG TILE ORCHID","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc23"},127012:{"value":"1F024","name":"MAHJONG TILE BAMBOO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc24"},127013:{"value":"1F025","name":"MAHJONG TILE CHRYSANTHEMUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc25"},127014:{"value":"1F026","name":"MAHJONG TILE SPRING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc26"},127015:{"value":"1F027","name":"MAHJONG TILE SUMMER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc27"},127016:{"value":"1F028","name":"MAHJONG TILE AUTUMN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc28"},127017:{"value":"1F029","name":"MAHJONG TILE WINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc29"},127018:{"value":"1F02A","name":"MAHJONG TILE JOKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc2a"},127019:{"value":"1F02B","name":"MAHJONG TILE BACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc2b"},127024:{"value":"1F030","name":"DOMINO TILE HORIZONTAL BACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc30"},127025:{"value":"1F031","name":"DOMINO TILE HORIZONTAL-00-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc31"},127026:{"value":"1F032","name":"DOMINO TILE HORIZONTAL-00-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc32"},127027:{"value":"1F033","name":"DOMINO TILE HORIZONTAL-00-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc33"},127028:{"value":"1F034","name":"DOMINO TILE HORIZONTAL-00-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc34"},127029:{"value":"1F035","name":"DOMINO TILE HORIZONTAL-00-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc35"},127030:{"value":"1F036","name":"DOMINO TILE HORIZONTAL-00-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc36"},127031:{"value":"1F037","name":"DOMINO TILE HORIZONTAL-00-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc37"},127032:{"value":"1F038","name":"DOMINO TILE HORIZONTAL-01-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc38"},127033:{"value":"1F039","name":"DOMINO TILE HORIZONTAL-01-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc39"},127034:{"value":"1F03A","name":"DOMINO TILE HORIZONTAL-01-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc3a"},127035:{"value":"1F03B","name":"DOMINO TILE HORIZONTAL-01-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc3b"},127036:{"value":"1F03C","name":"DOMINO TILE HORIZONTAL-01-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc3c"},127037:{"value":"1F03D","name":"DOMINO TILE HORIZONTAL-01-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc3d"},127038:{"value":"1F03E","name":"DOMINO TILE HORIZONTAL-01-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc3e"},127039:{"value":"1F03F","name":"DOMINO TILE HORIZONTAL-02-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc3f"},127040:{"value":"1F040","name":"DOMINO TILE HORIZONTAL-02-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc40"},127041:{"value":"1F041","name":"DOMINO TILE HORIZONTAL-02-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc41"},127042:{"value":"1F042","name":"DOMINO TILE HORIZONTAL-02-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc42"},127043:{"value":"1F043","name":"DOMINO TILE HORIZONTAL-02-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc43"},127044:{"value":"1F044","name":"DOMINO TILE HORIZONTAL-02-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc44"},127045:{"value":"1F045","name":"DOMINO TILE HORIZONTAL-02-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc45"},127046:{"value":"1F046","name":"DOMINO TILE HORIZONTAL-03-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc46"},127047:{"value":"1F047","name":"DOMINO TILE HORIZONTAL-03-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc47"},127048:{"value":"1F048","name":"DOMINO TILE HORIZONTAL-03-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc48"},127049:{"value":"1F049","name":"DOMINO TILE HORIZONTAL-03-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc49"},127050:{"value":"1F04A","name":"DOMINO TILE HORIZONTAL-03-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc4a"},127051:{"value":"1F04B","name":"DOMINO TILE HORIZONTAL-03-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc4b"},127052:{"value":"1F04C","name":"DOMINO TILE HORIZONTAL-03-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc4c"},127053:{"value":"1F04D","name":"DOMINO TILE HORIZONTAL-04-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc4d"},127054:{"value":"1F04E","name":"DOMINO TILE HORIZONTAL-04-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc4e"},127055:{"value":"1F04F","name":"DOMINO TILE HORIZONTAL-04-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc4f"},127056:{"value":"1F050","name":"DOMINO TILE HORIZONTAL-04-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc50"},127057:{"value":"1F051","name":"DOMINO TILE HORIZONTAL-04-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc51"},127058:{"value":"1F052","name":"DOMINO TILE HORIZONTAL-04-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc52"},127059:{"value":"1F053","name":"DOMINO TILE HORIZONTAL-04-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc53"},127060:{"value":"1F054","name":"DOMINO TILE HORIZONTAL-05-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc54"},127061:{"value":"1F055","name":"DOMINO TILE HORIZONTAL-05-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc55"},127062:{"value":"1F056","name":"DOMINO TILE HORIZONTAL-05-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc56"},127063:{"value":"1F057","name":"DOMINO TILE HORIZONTAL-05-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc57"},127064:{"value":"1F058","name":"DOMINO TILE HORIZONTAL-05-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc58"},127065:{"value":"1F059","name":"DOMINO TILE HORIZONTAL-05-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc59"},127066:{"value":"1F05A","name":"DOMINO TILE HORIZONTAL-05-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc5a"},127067:{"value":"1F05B","name":"DOMINO TILE HORIZONTAL-06-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc5b"},127068:{"value":"1F05C","name":"DOMINO TILE HORIZONTAL-06-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc5c"},127069:{"value":"1F05D","name":"DOMINO TILE HORIZONTAL-06-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc5d"},127070:{"value":"1F05E","name":"DOMINO TILE HORIZONTAL-06-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc5e"},127071:{"value":"1F05F","name":"DOMINO TILE HORIZONTAL-06-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc5f"},127072:{"value":"1F060","name":"DOMINO TILE HORIZONTAL-06-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc60"},127073:{"value":"1F061","name":"DOMINO TILE HORIZONTAL-06-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc61"},127074:{"value":"1F062","name":"DOMINO TILE VERTICAL BACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc62"},127075:{"value":"1F063","name":"DOMINO TILE VERTICAL-00-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc63"},127076:{"value":"1F064","name":"DOMINO TILE VERTICAL-00-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc64"},127077:{"value":"1F065","name":"DOMINO TILE VERTICAL-00-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc65"},127078:{"value":"1F066","name":"DOMINO TILE VERTICAL-00-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc66"},127079:{"value":"1F067","name":"DOMINO TILE VERTICAL-00-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc67"},127080:{"value":"1F068","name":"DOMINO TILE VERTICAL-00-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc68"},127081:{"value":"1F069","name":"DOMINO TILE VERTICAL-00-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc69"},127082:{"value":"1F06A","name":"DOMINO TILE VERTICAL-01-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc6a"},127083:{"value":"1F06B","name":"DOMINO TILE VERTICAL-01-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc6b"},127084:{"value":"1F06C","name":"DOMINO TILE VERTICAL-01-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc6c"},127085:{"value":"1F06D","name":"DOMINO TILE VERTICAL-01-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc6d"},127086:{"value":"1F06E","name":"DOMINO TILE VERTICAL-01-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc6e"},127087:{"value":"1F06F","name":"DOMINO TILE VERTICAL-01-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc6f"},127088:{"value":"1F070","name":"DOMINO TILE VERTICAL-01-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc70"},127089:{"value":"1F071","name":"DOMINO TILE VERTICAL-02-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc71"},127090:{"value":"1F072","name":"DOMINO TILE VERTICAL-02-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc72"},127091:{"value":"1F073","name":"DOMINO TILE VERTICAL-02-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc73"},127092:{"value":"1F074","name":"DOMINO TILE VERTICAL-02-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc74"},127093:{"value":"1F075","name":"DOMINO TILE VERTICAL-02-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc75"},127094:{"value":"1F076","name":"DOMINO TILE VERTICAL-02-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc76"},127095:{"value":"1F077","name":"DOMINO TILE VERTICAL-02-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc77"},127096:{"value":"1F078","name":"DOMINO TILE VERTICAL-03-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc78"},127097:{"value":"1F079","name":"DOMINO TILE VERTICAL-03-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc79"},127098:{"value":"1F07A","name":"DOMINO TILE VERTICAL-03-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc7a"},127099:{"value":"1F07B","name":"DOMINO TILE VERTICAL-03-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc7b"},127100:{"value":"1F07C","name":"DOMINO TILE VERTICAL-03-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc7c"},127101:{"value":"1F07D","name":"DOMINO TILE VERTICAL-03-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc7d"},127102:{"value":"1F07E","name":"DOMINO TILE VERTICAL-03-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc7e"},127103:{"value":"1F07F","name":"DOMINO TILE VERTICAL-04-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc7f"},127104:{"value":"1F080","name":"DOMINO TILE VERTICAL-04-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc80"},127105:{"value":"1F081","name":"DOMINO TILE VERTICAL-04-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc81"},127106:{"value":"1F082","name":"DOMINO TILE VERTICAL-04-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc82"},127107:{"value":"1F083","name":"DOMINO TILE VERTICAL-04-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc83"},127108:{"value":"1F084","name":"DOMINO TILE VERTICAL-04-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc84"},127109:{"value":"1F085","name":"DOMINO TILE VERTICAL-04-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc85"},127110:{"value":"1F086","name":"DOMINO TILE VERTICAL-05-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc86"},127111:{"value":"1F087","name":"DOMINO TILE VERTICAL-05-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc87"},127112:{"value":"1F088","name":"DOMINO TILE VERTICAL-05-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc88"},127113:{"value":"1F089","name":"DOMINO TILE VERTICAL-05-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc89"},127114:{"value":"1F08A","name":"DOMINO TILE VERTICAL-05-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc8a"},127115:{"value":"1F08B","name":"DOMINO TILE VERTICAL-05-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc8b"},127116:{"value":"1F08C","name":"DOMINO TILE VERTICAL-05-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc8c"},127117:{"value":"1F08D","name":"DOMINO TILE VERTICAL-06-00","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc8d"},127118:{"value":"1F08E","name":"DOMINO TILE VERTICAL-06-01","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc8e"},127119:{"value":"1F08F","name":"DOMINO TILE VERTICAL-06-02","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc8f"},127120:{"value":"1F090","name":"DOMINO TILE VERTICAL-06-03","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc90"},127121:{"value":"1F091","name":"DOMINO TILE VERTICAL-06-04","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc91"},127122:{"value":"1F092","name":"DOMINO TILE VERTICAL-06-05","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc92"},127123:{"value":"1F093","name":"DOMINO TILE VERTICAL-06-06","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udc93"},127136:{"value":"1F0A0","name":"PLAYING CARD BACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca0"},127137:{"value":"1F0A1","name":"PLAYING CARD ACE OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca1"},127138:{"value":"1F0A2","name":"PLAYING CARD TWO OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca2"},127139:{"value":"1F0A3","name":"PLAYING CARD THREE OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca3"},127140:{"value":"1F0A4","name":"PLAYING CARD FOUR OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca4"},127141:{"value":"1F0A5","name":"PLAYING CARD FIVE OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca5"},127142:{"value":"1F0A6","name":"PLAYING CARD SIX OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca6"},127143:{"value":"1F0A7","name":"PLAYING CARD SEVEN OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca7"},127144:{"value":"1F0A8","name":"PLAYING CARD EIGHT OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca8"},127145:{"value":"1F0A9","name":"PLAYING CARD NINE OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udca9"},127146:{"value":"1F0AA","name":"PLAYING CARD TEN OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcaa"},127147:{"value":"1F0AB","name":"PLAYING CARD JACK OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcab"},127148:{"value":"1F0AC","name":"PLAYING CARD KNIGHT OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcac"},127149:{"value":"1F0AD","name":"PLAYING CARD QUEEN OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcad"},127150:{"value":"1F0AE","name":"PLAYING CARD KING OF SPADES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcae"},127153:{"value":"1F0B1","name":"PLAYING CARD ACE OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb1"},127154:{"value":"1F0B2","name":"PLAYING CARD TWO OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb2"},127155:{"value":"1F0B3","name":"PLAYING CARD THREE OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb3"},127156:{"value":"1F0B4","name":"PLAYING CARD FOUR OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb4"},127157:{"value":"1F0B5","name":"PLAYING CARD FIVE OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb5"},127158:{"value":"1F0B6","name":"PLAYING CARD SIX OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb6"},127159:{"value":"1F0B7","name":"PLAYING CARD SEVEN OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb7"},127160:{"value":"1F0B8","name":"PLAYING CARD EIGHT OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb8"},127161:{"value":"1F0B9","name":"PLAYING CARD NINE OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcb9"},127162:{"value":"1F0BA","name":"PLAYING CARD TEN OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcba"},127163:{"value":"1F0BB","name":"PLAYING CARD JACK OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcbb"},127164:{"value":"1F0BC","name":"PLAYING CARD KNIGHT OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcbc"},127165:{"value":"1F0BD","name":"PLAYING CARD QUEEN OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcbd"},127166:{"value":"1F0BE","name":"PLAYING CARD KING OF HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcbe"},127167:{"value":"1F0BF","name":"PLAYING CARD RED JOKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcbf"},127169:{"value":"1F0C1","name":"PLAYING CARD ACE OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc1"},127170:{"value":"1F0C2","name":"PLAYING CARD TWO OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc2"},127171:{"value":"1F0C3","name":"PLAYING CARD THREE OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc3"},127172:{"value":"1F0C4","name":"PLAYING CARD FOUR OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc4"},127173:{"value":"1F0C5","name":"PLAYING CARD FIVE OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc5"},127174:{"value":"1F0C6","name":"PLAYING CARD SIX OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc6"},127175:{"value":"1F0C7","name":"PLAYING CARD SEVEN OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc7"},127176:{"value":"1F0C8","name":"PLAYING CARD EIGHT OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc8"},127177:{"value":"1F0C9","name":"PLAYING CARD NINE OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcc9"},127178:{"value":"1F0CA","name":"PLAYING CARD TEN OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcca"},127179:{"value":"1F0CB","name":"PLAYING CARD JACK OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udccb"},127180:{"value":"1F0CC","name":"PLAYING CARD KNIGHT OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udccc"},127181:{"value":"1F0CD","name":"PLAYING CARD QUEEN OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udccd"},127182:{"value":"1F0CE","name":"PLAYING CARD KING OF DIAMONDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcce"},127183:{"value":"1F0CF","name":"PLAYING CARD BLACK JOKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udccf"},127185:{"value":"1F0D1","name":"PLAYING CARD ACE OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd1"},127186:{"value":"1F0D2","name":"PLAYING CARD TWO OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd2"},127187:{"value":"1F0D3","name":"PLAYING CARD THREE OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd3"},127188:{"value":"1F0D4","name":"PLAYING CARD FOUR OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd4"},127189:{"value":"1F0D5","name":"PLAYING CARD FIVE OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd5"},127190:{"value":"1F0D6","name":"PLAYING CARD SIX OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd6"},127191:{"value":"1F0D7","name":"PLAYING CARD SEVEN OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd7"},127192:{"value":"1F0D8","name":"PLAYING CARD EIGHT OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd8"},127193:{"value":"1F0D9","name":"PLAYING CARD NINE OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcd9"},127194:{"value":"1F0DA","name":"PLAYING CARD TEN OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcda"},127195:{"value":"1F0DB","name":"PLAYING CARD JACK OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcdb"},127196:{"value":"1F0DC","name":"PLAYING CARD KNIGHT OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcdc"},127197:{"value":"1F0DD","name":"PLAYING CARD QUEEN OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcdd"},127198:{"value":"1F0DE","name":"PLAYING CARD KING OF CLUBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcde"},127199:{"value":"1F0DF","name":"PLAYING CARD WHITE JOKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcdf"},127200:{"value":"1F0E0","name":"PLAYING CARD FOOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce0"},127201:{"value":"1F0E1","name":"PLAYING CARD TRUMP-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce1"},127202:{"value":"1F0E2","name":"PLAYING CARD TRUMP-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce2"},127203:{"value":"1F0E3","name":"PLAYING CARD TRUMP-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce3"},127204:{"value":"1F0E4","name":"PLAYING CARD TRUMP-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce4"},127205:{"value":"1F0E5","name":"PLAYING CARD TRUMP-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce5"},127206:{"value":"1F0E6","name":"PLAYING CARD TRUMP-6","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce6"},127207:{"value":"1F0E7","name":"PLAYING CARD TRUMP-7","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce7"},127208:{"value":"1F0E8","name":"PLAYING CARD TRUMP-8","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce8"},127209:{"value":"1F0E9","name":"PLAYING CARD TRUMP-9","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udce9"},127210:{"value":"1F0EA","name":"PLAYING CARD TRUMP-10","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcea"},127211:{"value":"1F0EB","name":"PLAYING CARD TRUMP-11","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udceb"},127212:{"value":"1F0EC","name":"PLAYING CARD TRUMP-12","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcec"},127213:{"value":"1F0ED","name":"PLAYING CARD TRUMP-13","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udced"},127214:{"value":"1F0EE","name":"PLAYING CARD TRUMP-14","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcee"},127215:{"value":"1F0EF","name":"PLAYING CARD TRUMP-15","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcef"},127216:{"value":"1F0F0","name":"PLAYING CARD TRUMP-16","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcf0"},127217:{"value":"1F0F1","name":"PLAYING CARD TRUMP-17","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcf1"},127218:{"value":"1F0F2","name":"PLAYING CARD TRUMP-18","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcf2"},127219:{"value":"1F0F3","name":"PLAYING CARD TRUMP-19","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcf3"},127220:{"value":"1F0F4","name":"PLAYING CARD TRUMP-20","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcf4"},127221:{"value":"1F0F5","name":"PLAYING CARD TRUMP-21","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udcf5"},127245:{"value":"1F10D","name":"CIRCLED ZERO WITH SLASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd0d"},127246:{"value":"1F10E","name":"CIRCLED ANTICLOCKWISE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd0e"},127247:{"value":"1F10F","name":"CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd0f"},127248:{"value":"1F110","name":"PARENTHESIZED LATIN CAPITAL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0041 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd10"},127249:{"value":"1F111","name":"PARENTHESIZED LATIN CAPITAL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0042 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd11"},127250:{"value":"1F112","name":"PARENTHESIZED LATIN CAPITAL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0043 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd12"},127251:{"value":"1F113","name":"PARENTHESIZED LATIN CAPITAL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0044 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd13"},127252:{"value":"1F114","name":"PARENTHESIZED LATIN CAPITAL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0045 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd14"},127253:{"value":"1F115","name":"PARENTHESIZED LATIN CAPITAL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0046 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd15"},127254:{"value":"1F116","name":"PARENTHESIZED LATIN CAPITAL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0047 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd16"},127255:{"value":"1F117","name":"PARENTHESIZED LATIN CAPITAL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0048 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd17"},127256:{"value":"1F118","name":"PARENTHESIZED LATIN CAPITAL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0049 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd18"},127257:{"value":"1F119","name":"PARENTHESIZED LATIN CAPITAL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 004A 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd19"},127258:{"value":"1F11A","name":"PARENTHESIZED LATIN CAPITAL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 004B 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd1a"},127259:{"value":"1F11B","name":"PARENTHESIZED LATIN CAPITAL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 004C 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd1b"},127260:{"value":"1F11C","name":"PARENTHESIZED LATIN CAPITAL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 004D 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd1c"},127261:{"value":"1F11D","name":"PARENTHESIZED LATIN CAPITAL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 004E 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd1d"},127262:{"value":"1F11E","name":"PARENTHESIZED LATIN CAPITAL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 004F 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd1e"},127263:{"value":"1F11F","name":"PARENTHESIZED LATIN CAPITAL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0050 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd1f"},127264:{"value":"1F120","name":"PARENTHESIZED LATIN CAPITAL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0051 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd20"},127265:{"value":"1F121","name":"PARENTHESIZED LATIN CAPITAL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0052 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd21"},127266:{"value":"1F122","name":"PARENTHESIZED LATIN CAPITAL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0053 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd22"},127267:{"value":"1F123","name":"PARENTHESIZED LATIN CAPITAL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0054 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd23"},127268:{"value":"1F124","name":"PARENTHESIZED LATIN CAPITAL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0055 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd24"},127269:{"value":"1F125","name":"PARENTHESIZED LATIN CAPITAL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0056 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd25"},127270:{"value":"1F126","name":"PARENTHESIZED LATIN CAPITAL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0057 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd26"},127271:{"value":"1F127","name":"PARENTHESIZED LATIN CAPITAL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0058 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd27"},127272:{"value":"1F128","name":"PARENTHESIZED LATIN CAPITAL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 0059 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd28"},127273:{"value":"1F129","name":"PARENTHESIZED LATIN CAPITAL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":" 0028 005A 0029","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd29"},127274:{"value":"1F12A","name":"TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 0053 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd2a"},127275:{"value":"1F12B","name":"CIRCLED ITALIC LATIN CAPITAL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd2b"},127276:{"value":"1F12C","name":"CIRCLED ITALIC LATIN CAPITAL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd2c"},127277:{"value":"1F12D","name":"CIRCLED CD","category":"So","class":"0","bidirectional_category":"L","mapping":" 0043 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd2d"},127278:{"value":"1F12E","name":"CIRCLED WZ","category":"So","class":"0","bidirectional_category":"L","mapping":" 0057 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd2e"},127279:{"value":"1F12F","name":"COPYLEFT SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd2f"},127280:{"value":"1F130","name":"SQUARED LATIN CAPITAL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":" 0041","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd30"},127281:{"value":"1F131","name":"SQUARED LATIN CAPITAL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":" 0042","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd31"},127282:{"value":"1F132","name":"SQUARED LATIN CAPITAL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":" 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd32"},127283:{"value":"1F133","name":"SQUARED LATIN CAPITAL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":" 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd33"},127284:{"value":"1F134","name":"SQUARED LATIN CAPITAL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":" 0045","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd34"},127285:{"value":"1F135","name":"SQUARED LATIN CAPITAL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":" 0046","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd35"},127286:{"value":"1F136","name":"SQUARED LATIN CAPITAL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":" 0047","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd36"},127287:{"value":"1F137","name":"SQUARED LATIN CAPITAL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":" 0048","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd37"},127288:{"value":"1F138","name":"SQUARED LATIN CAPITAL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":" 0049","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd38"},127289:{"value":"1F139","name":"SQUARED LATIN CAPITAL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":" 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd39"},127290:{"value":"1F13A","name":"SQUARED LATIN CAPITAL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":" 004B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd3a"},127291:{"value":"1F13B","name":"SQUARED LATIN CAPITAL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":" 004C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd3b"},127292:{"value":"1F13C","name":"SQUARED LATIN CAPITAL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd3c"},127293:{"value":"1F13D","name":"SQUARED LATIN CAPITAL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":" 004E","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd3d"},127294:{"value":"1F13E","name":"SQUARED LATIN CAPITAL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":" 004F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd3e"},127295:{"value":"1F13F","name":"SQUARED LATIN CAPITAL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd3f"},127296:{"value":"1F140","name":"SQUARED LATIN CAPITAL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":" 0051","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd40"},127297:{"value":"1F141","name":"SQUARED LATIN CAPITAL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":" 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd41"},127298:{"value":"1F142","name":"SQUARED LATIN CAPITAL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":" 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd42"},127299:{"value":"1F143","name":"SQUARED LATIN CAPITAL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":" 0054","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd43"},127300:{"value":"1F144","name":"SQUARED LATIN CAPITAL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":" 0055","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd44"},127301:{"value":"1F145","name":"SQUARED LATIN CAPITAL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":" 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd45"},127302:{"value":"1F146","name":"SQUARED LATIN CAPITAL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":" 0057","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd46"},127303:{"value":"1F147","name":"SQUARED LATIN CAPITAL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":" 0058","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd47"},127304:{"value":"1F148","name":"SQUARED LATIN CAPITAL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":" 0059","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd48"},127305:{"value":"1F149","name":"SQUARED LATIN CAPITAL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":" 005A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd49"},127306:{"value":"1F14A","name":"SQUARED HV","category":"So","class":"0","bidirectional_category":"L","mapping":" 0048 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd4a"},127307:{"value":"1F14B","name":"SQUARED MV","category":"So","class":"0","bidirectional_category":"L","mapping":" 004D 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd4b"},127308:{"value":"1F14C","name":"SQUARED SD","category":"So","class":"0","bidirectional_category":"L","mapping":" 0053 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd4c"},127309:{"value":"1F14D","name":"SQUARED SS","category":"So","class":"0","bidirectional_category":"L","mapping":" 0053 0053","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd4d"},127310:{"value":"1F14E","name":"SQUARED PPV","category":"So","class":"0","bidirectional_category":"L","mapping":" 0050 0050 0056","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd4e"},127311:{"value":"1F14F","name":"SQUARED WC","category":"So","class":"0","bidirectional_category":"L","mapping":" 0057 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd4f"},127312:{"value":"1F150","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd50"},127313:{"value":"1F151","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd51"},127314:{"value":"1F152","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd52"},127315:{"value":"1F153","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd53"},127316:{"value":"1F154","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd54"},127317:{"value":"1F155","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd55"},127318:{"value":"1F156","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd56"},127319:{"value":"1F157","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd57"},127320:{"value":"1F158","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd58"},127321:{"value":"1F159","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd59"},127322:{"value":"1F15A","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd5a"},127323:{"value":"1F15B","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd5b"},127324:{"value":"1F15C","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd5c"},127325:{"value":"1F15D","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd5d"},127326:{"value":"1F15E","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd5e"},127327:{"value":"1F15F","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd5f"},127328:{"value":"1F160","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd60"},127329:{"value":"1F161","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd61"},127330:{"value":"1F162","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd62"},127331:{"value":"1F163","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd63"},127332:{"value":"1F164","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd64"},127333:{"value":"1F165","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd65"},127334:{"value":"1F166","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd66"},127335:{"value":"1F167","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd67"},127336:{"value":"1F168","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd68"},127337:{"value":"1F169","name":"NEGATIVE CIRCLED LATIN CAPITAL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd69"},127338:{"value":"1F16A","name":"RAISED MC SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 004D 0043","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd6a"},127339:{"value":"1F16B","name":"RAISED MD SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 004D 0044","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd6b"},127340:{"value":"1F16C","name":"RAISED MR SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":" 004D 0052","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd6c"},127341:{"value":"1F16D","name":"CIRCLED CC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd6d"},127342:{"value":"1F16E","name":"CIRCLED C WITH OVERLAID BACKSLASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd6e"},127343:{"value":"1F16F","name":"CIRCLED HUMAN FIGURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd6f"},127344:{"value":"1F170","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd70"},127345:{"value":"1F171","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd71"},127346:{"value":"1F172","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd72"},127347:{"value":"1F173","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd73"},127348:{"value":"1F174","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd74"},127349:{"value":"1F175","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd75"},127350:{"value":"1F176","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd76"},127351:{"value":"1F177","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd77"},127352:{"value":"1F178","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd78"},127353:{"value":"1F179","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd79"},127354:{"value":"1F17A","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd7a"},127355:{"value":"1F17B","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd7b"},127356:{"value":"1F17C","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd7c"},127357:{"value":"1F17D","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd7d"},127358:{"value":"1F17E","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd7e"},127359:{"value":"1F17F","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd7f"},127360:{"value":"1F180","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd80"},127361:{"value":"1F181","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd81"},127362:{"value":"1F182","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd82"},127363:{"value":"1F183","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd83"},127364:{"value":"1F184","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd84"},127365:{"value":"1F185","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd85"},127366:{"value":"1F186","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd86"},127367:{"value":"1F187","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd87"},127368:{"value":"1F188","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd88"},127369:{"value":"1F189","name":"NEGATIVE SQUARED LATIN CAPITAL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd89"},127370:{"value":"1F18A","name":"CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd8a"},127371:{"value":"1F18B","name":"NEGATIVE SQUARED IC","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd8b"},127372:{"value":"1F18C","name":"NEGATIVE SQUARED PA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd8c"},127373:{"value":"1F18D","name":"NEGATIVE SQUARED SA","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd8d"},127374:{"value":"1F18E","name":"NEGATIVE SQUARED AB","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd8e"},127375:{"value":"1F18F","name":"NEGATIVE SQUARED WC","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd8f"},127376:{"value":"1F190","name":"SQUARE DJ","category":"So","class":"0","bidirectional_category":"L","mapping":" 0044 004A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd90"},127377:{"value":"1F191","name":"SQUARED CL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd91"},127378:{"value":"1F192","name":"SQUARED COOL","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd92"},127379:{"value":"1F193","name":"SQUARED FREE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd93"},127380:{"value":"1F194","name":"SQUARED ID","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd94"},127381:{"value":"1F195","name":"SQUARED NEW","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd95"},127382:{"value":"1F196","name":"SQUARED NG","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd96"},127383:{"value":"1F197","name":"SQUARED OK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd97"},127384:{"value":"1F198","name":"SQUARED SOS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd98"},127385:{"value":"1F199","name":"SQUARED UP WITH EXCLAMATION MARK","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd99"},127386:{"value":"1F19A","name":"SQUARED VS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd9a"},127387:{"value":"1F19B","name":"SQUARED THREE D","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd9b"},127388:{"value":"1F19C","name":"SQUARED SECOND SCREEN","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd9c"},127389:{"value":"1F19D","name":"SQUARED TWO K","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd9d"},127390:{"value":"1F19E","name":"SQUARED FOUR K","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd9e"},127391:{"value":"1F19F","name":"SQUARED EIGHT K","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udd9f"},127392:{"value":"1F1A0","name":"SQUARED FIVE POINT ONE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda0"},127393:{"value":"1F1A1","name":"SQUARED SEVEN POINT ONE","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda1"},127394:{"value":"1F1A2","name":"SQUARED TWENTY-TWO POINT TWO","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda2"},127395:{"value":"1F1A3","name":"SQUARED SIXTY P","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda3"},127396:{"value":"1F1A4","name":"SQUARED ONE HUNDRED TWENTY P","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda4"},127397:{"value":"1F1A5","name":"SQUARED LATIN SMALL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda5"},127398:{"value":"1F1A6","name":"SQUARED HC","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda6"},127399:{"value":"1F1A7","name":"SQUARED HDR","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda7"},127400:{"value":"1F1A8","name":"SQUARED HI-RES","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda8"},127401:{"value":"1F1A9","name":"SQUARED LOSSLESS","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udda9"},127402:{"value":"1F1AA","name":"SQUARED SHV","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddaa"},127403:{"value":"1F1AB","name":"SQUARED UHD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddab"},127404:{"value":"1F1AC","name":"SQUARED VOD","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddac"},127405:{"value":"1F1AD","name":"MASK WORK SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddad"},127462:{"value":"1F1E6","name":"REGIONAL INDICATOR SYMBOL LETTER A","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udde6"},127463:{"value":"1F1E7","name":"REGIONAL INDICATOR SYMBOL LETTER B","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udde7"},127464:{"value":"1F1E8","name":"REGIONAL INDICATOR SYMBOL LETTER C","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udde8"},127465:{"value":"1F1E9","name":"REGIONAL INDICATOR SYMBOL LETTER D","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udde9"},127466:{"value":"1F1EA","name":"REGIONAL INDICATOR SYMBOL LETTER E","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddea"},127467:{"value":"1F1EB","name":"REGIONAL INDICATOR SYMBOL LETTER F","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddeb"},127468:{"value":"1F1EC","name":"REGIONAL INDICATOR SYMBOL LETTER G","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddec"},127469:{"value":"1F1ED","name":"REGIONAL INDICATOR SYMBOL LETTER H","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udded"},127470:{"value":"1F1EE","name":"REGIONAL INDICATOR SYMBOL LETTER I","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddee"},127471:{"value":"1F1EF","name":"REGIONAL INDICATOR SYMBOL LETTER J","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddef"},127472:{"value":"1F1F0","name":"REGIONAL INDICATOR SYMBOL LETTER K","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf0"},127473:{"value":"1F1F1","name":"REGIONAL INDICATOR SYMBOL LETTER L","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf1"},127474:{"value":"1F1F2","name":"REGIONAL INDICATOR SYMBOL LETTER M","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf2"},127475:{"value":"1F1F3","name":"REGIONAL INDICATOR SYMBOL LETTER N","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf3"},127476:{"value":"1F1F4","name":"REGIONAL INDICATOR SYMBOL LETTER O","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf4"},127477:{"value":"1F1F5","name":"REGIONAL INDICATOR SYMBOL LETTER P","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf5"},127478:{"value":"1F1F6","name":"REGIONAL INDICATOR SYMBOL LETTER Q","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf6"},127479:{"value":"1F1F7","name":"REGIONAL INDICATOR SYMBOL LETTER R","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf7"},127480:{"value":"1F1F8","name":"REGIONAL INDICATOR SYMBOL LETTER S","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf8"},127481:{"value":"1F1F9","name":"REGIONAL INDICATOR SYMBOL LETTER T","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddf9"},127482:{"value":"1F1FA","name":"REGIONAL INDICATOR SYMBOL LETTER U","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddfa"},127483:{"value":"1F1FB","name":"REGIONAL INDICATOR SYMBOL LETTER V","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddfb"},127484:{"value":"1F1FC","name":"REGIONAL INDICATOR SYMBOL LETTER W","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddfc"},127485:{"value":"1F1FD","name":"REGIONAL INDICATOR SYMBOL LETTER X","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddfd"},127486:{"value":"1F1FE","name":"REGIONAL INDICATOR SYMBOL LETTER Y","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddfe"},127487:{"value":"1F1FF","name":"REGIONAL INDICATOR SYMBOL LETTER Z","category":"So","class":"0","bidirectional_category":"L","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\uddff"},127488:{"value":"1F200","name":"SQUARE HIRAGANA HOKA","category":"So","class":"0","bidirectional_category":"L","mapping":" 307B 304B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude00"},127489:{"value":"1F201","name":"SQUARED KATAKANA KOKO","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B3 30B3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude01"},127490:{"value":"1F202","name":"SQUARED KATAKANA SA","category":"So","class":"0","bidirectional_category":"L","mapping":" 30B5","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude02"},127504:{"value":"1F210","name":"SQUARED CJK UNIFIED IDEOGRAPH-624B","category":"So","class":"0","bidirectional_category":"L","mapping":" 624B","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude10"},127505:{"value":"1F211","name":"SQUARED CJK UNIFIED IDEOGRAPH-5B57","category":"So","class":"0","bidirectional_category":"L","mapping":" 5B57","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude11"},127506:{"value":"1F212","name":"SQUARED CJK UNIFIED IDEOGRAPH-53CC","category":"So","class":"0","bidirectional_category":"L","mapping":" 53CC","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude12"},127507:{"value":"1F213","name":"SQUARED KATAKANA DE","category":"So","class":"0","bidirectional_category":"L","mapping":" 30C7","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude13"},127508:{"value":"1F214","name":"SQUARED CJK UNIFIED IDEOGRAPH-4E8C","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E8C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude14"},127509:{"value":"1F215","name":"SQUARED CJK UNIFIED IDEOGRAPH-591A","category":"So","class":"0","bidirectional_category":"L","mapping":" 591A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude15"},127510:{"value":"1F216","name":"SQUARED CJK UNIFIED IDEOGRAPH-89E3","category":"So","class":"0","bidirectional_category":"L","mapping":" 89E3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude16"},127511:{"value":"1F217","name":"SQUARED CJK UNIFIED IDEOGRAPH-5929","category":"So","class":"0","bidirectional_category":"L","mapping":" 5929","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude17"},127512:{"value":"1F218","name":"SQUARED CJK UNIFIED IDEOGRAPH-4EA4","category":"So","class":"0","bidirectional_category":"L","mapping":" 4EA4","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude18"},127513:{"value":"1F219","name":"SQUARED CJK UNIFIED IDEOGRAPH-6620","category":"So","class":"0","bidirectional_category":"L","mapping":" 6620","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude19"},127514:{"value":"1F21A","name":"SQUARED CJK UNIFIED IDEOGRAPH-7121","category":"So","class":"0","bidirectional_category":"L","mapping":" 7121","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude1a"},127515:{"value":"1F21B","name":"SQUARED CJK UNIFIED IDEOGRAPH-6599","category":"So","class":"0","bidirectional_category":"L","mapping":" 6599","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude1b"},127516:{"value":"1F21C","name":"SQUARED CJK UNIFIED IDEOGRAPH-524D","category":"So","class":"0","bidirectional_category":"L","mapping":" 524D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude1c"},127517:{"value":"1F21D","name":"SQUARED CJK UNIFIED IDEOGRAPH-5F8C","category":"So","class":"0","bidirectional_category":"L","mapping":" 5F8C","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude1d"},127518:{"value":"1F21E","name":"SQUARED CJK UNIFIED IDEOGRAPH-518D","category":"So","class":"0","bidirectional_category":"L","mapping":" 518D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude1e"},127519:{"value":"1F21F","name":"SQUARED CJK UNIFIED IDEOGRAPH-65B0","category":"So","class":"0","bidirectional_category":"L","mapping":" 65B0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude1f"},127520:{"value":"1F220","name":"SQUARED CJK UNIFIED IDEOGRAPH-521D","category":"So","class":"0","bidirectional_category":"L","mapping":" 521D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude20"},127521:{"value":"1F221","name":"SQUARED CJK UNIFIED IDEOGRAPH-7D42","category":"So","class":"0","bidirectional_category":"L","mapping":" 7D42","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude21"},127522:{"value":"1F222","name":"SQUARED CJK UNIFIED IDEOGRAPH-751F","category":"So","class":"0","bidirectional_category":"L","mapping":" 751F","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude22"},127523:{"value":"1F223","name":"SQUARED CJK UNIFIED IDEOGRAPH-8CA9","category":"So","class":"0","bidirectional_category":"L","mapping":" 8CA9","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude23"},127524:{"value":"1F224","name":"SQUARED CJK UNIFIED IDEOGRAPH-58F0","category":"So","class":"0","bidirectional_category":"L","mapping":" 58F0","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude24"},127525:{"value":"1F225","name":"SQUARED CJK UNIFIED IDEOGRAPH-5439","category":"So","class":"0","bidirectional_category":"L","mapping":" 5439","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude25"},127526:{"value":"1F226","name":"SQUARED CJK UNIFIED IDEOGRAPH-6F14","category":"So","class":"0","bidirectional_category":"L","mapping":" 6F14","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude26"},127527:{"value":"1F227","name":"SQUARED CJK UNIFIED IDEOGRAPH-6295","category":"So","class":"0","bidirectional_category":"L","mapping":" 6295","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude27"},127528:{"value":"1F228","name":"SQUARED CJK UNIFIED IDEOGRAPH-6355","category":"So","class":"0","bidirectional_category":"L","mapping":" 6355","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude28"},127529:{"value":"1F229","name":"SQUARED CJK UNIFIED IDEOGRAPH-4E00","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E00","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude29"},127530:{"value":"1F22A","name":"SQUARED CJK UNIFIED IDEOGRAPH-4E09","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E09","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude2a"},127531:{"value":"1F22B","name":"SQUARED CJK UNIFIED IDEOGRAPH-904A","category":"So","class":"0","bidirectional_category":"L","mapping":" 904A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude2b"},127532:{"value":"1F22C","name":"SQUARED CJK UNIFIED IDEOGRAPH-5DE6","category":"So","class":"0","bidirectional_category":"L","mapping":" 5DE6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude2c"},127533:{"value":"1F22D","name":"SQUARED CJK UNIFIED IDEOGRAPH-4E2D","category":"So","class":"0","bidirectional_category":"L","mapping":" 4E2D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude2d"},127534:{"value":"1F22E","name":"SQUARED CJK UNIFIED IDEOGRAPH-53F3","category":"So","class":"0","bidirectional_category":"L","mapping":" 53F3","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude2e"},127535:{"value":"1F22F","name":"SQUARED CJK UNIFIED IDEOGRAPH-6307","category":"So","class":"0","bidirectional_category":"L","mapping":" 6307","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude2f"},127536:{"value":"1F230","name":"SQUARED CJK UNIFIED IDEOGRAPH-8D70","category":"So","class":"0","bidirectional_category":"L","mapping":" 8D70","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude30"},127537:{"value":"1F231","name":"SQUARED CJK UNIFIED IDEOGRAPH-6253","category":"So","class":"0","bidirectional_category":"L","mapping":" 6253","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude31"},127538:{"value":"1F232","name":"SQUARED CJK UNIFIED IDEOGRAPH-7981","category":"So","class":"0","bidirectional_category":"L","mapping":" 7981","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude32"},127539:{"value":"1F233","name":"SQUARED CJK UNIFIED IDEOGRAPH-7A7A","category":"So","class":"0","bidirectional_category":"L","mapping":" 7A7A","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude33"},127540:{"value":"1F234","name":"SQUARED CJK UNIFIED IDEOGRAPH-5408","category":"So","class":"0","bidirectional_category":"L","mapping":" 5408","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude34"},127541:{"value":"1F235","name":"SQUARED CJK UNIFIED IDEOGRAPH-6E80","category":"So","class":"0","bidirectional_category":"L","mapping":" 6E80","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude35"},127542:{"value":"1F236","name":"SQUARED CJK UNIFIED IDEOGRAPH-6709","category":"So","class":"0","bidirectional_category":"L","mapping":" 6709","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude36"},127543:{"value":"1F237","name":"SQUARED CJK UNIFIED IDEOGRAPH-6708","category":"So","class":"0","bidirectional_category":"L","mapping":" 6708","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude37"},127544:{"value":"1F238","name":"SQUARED CJK UNIFIED IDEOGRAPH-7533","category":"So","class":"0","bidirectional_category":"L","mapping":" 7533","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude38"},127545:{"value":"1F239","name":"SQUARED CJK UNIFIED IDEOGRAPH-5272","category":"So","class":"0","bidirectional_category":"L","mapping":" 5272","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude39"},127546:{"value":"1F23A","name":"SQUARED CJK UNIFIED IDEOGRAPH-55B6","category":"So","class":"0","bidirectional_category":"L","mapping":" 55B6","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude3a"},127547:{"value":"1F23B","name":"SQUARED CJK UNIFIED IDEOGRAPH-914D","category":"So","class":"0","bidirectional_category":"L","mapping":" 914D","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude3b"},127552:{"value":"1F240","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 672C 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude40"},127553:{"value":"1F241","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 4E09 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude41"},127554:{"value":"1F242","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 4E8C 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude42"},127555:{"value":"1F243","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 5B89 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude43"},127556:{"value":"1F244","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 70B9 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude44"},127557:{"value":"1F245","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 6253 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude45"},127558:{"value":"1F246","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 76D7 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude46"},127559:{"value":"1F247","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 52DD 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude47"},127560:{"value":"1F248","name":"TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557","category":"So","class":"0","bidirectional_category":"L","mapping":" 3014 6557 3015","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude48"},127568:{"value":"1F250","name":"CIRCLED IDEOGRAPH ADVANTAGE","category":"So","class":"0","bidirectional_category":"L","mapping":" 5F97","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude50"},127569:{"value":"1F251","name":"CIRCLED IDEOGRAPH ACCEPT","category":"So","class":"0","bidirectional_category":"L","mapping":" 53EF","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude51"},127584:{"value":"1F260","name":"ROUNDED SYMBOL FOR FU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude60"},127585:{"value":"1F261","name":"ROUNDED SYMBOL FOR LU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude61"},127586:{"value":"1F262","name":"ROUNDED SYMBOL FOR SHOU","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude62"},127587:{"value":"1F263","name":"ROUNDED SYMBOL FOR XI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude63"},127588:{"value":"1F264","name":"ROUNDED SYMBOL FOR SHUANGXI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude64"},127589:{"value":"1F265","name":"ROUNDED SYMBOL FOR CAI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\ude65"},127744:{"value":"1F300","name":"CYCLONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf00"},127745:{"value":"1F301","name":"FOGGY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf01"},127746:{"value":"1F302","name":"CLOSED UMBRELLA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf02"},127747:{"value":"1F303","name":"NIGHT WITH STARS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf03"},127748:{"value":"1F304","name":"SUNRISE OVER MOUNTAINS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf04"},127749:{"value":"1F305","name":"SUNRISE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf05"},127750:{"value":"1F306","name":"CITYSCAPE AT DUSK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf06"},127751:{"value":"1F307","name":"SUNSET OVER BUILDINGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf07"},127752:{"value":"1F308","name":"RAINBOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf08"},127753:{"value":"1F309","name":"BRIDGE AT NIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf09"},127754:{"value":"1F30A","name":"WATER WAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf0a"},127755:{"value":"1F30B","name":"VOLCANO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf0b"},127756:{"value":"1F30C","name":"MILKY WAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf0c"},127757:{"value":"1F30D","name":"EARTH GLOBE EUROPE-AFRICA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf0d"},127758:{"value":"1F30E","name":"EARTH GLOBE AMERICAS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf0e"},127759:{"value":"1F30F","name":"EARTH GLOBE ASIA-AUSTRALIA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf0f"},127760:{"value":"1F310","name":"GLOBE WITH MERIDIANS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf10"},127761:{"value":"1F311","name":"NEW MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf11"},127762:{"value":"1F312","name":"WAXING CRESCENT MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf12"},127763:{"value":"1F313","name":"FIRST QUARTER MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf13"},127764:{"value":"1F314","name":"WAXING GIBBOUS MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf14"},127765:{"value":"1F315","name":"FULL MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf15"},127766:{"value":"1F316","name":"WANING GIBBOUS MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf16"},127767:{"value":"1F317","name":"LAST QUARTER MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf17"},127768:{"value":"1F318","name":"WANING CRESCENT MOON SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf18"},127769:{"value":"1F319","name":"CRESCENT MOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf19"},127770:{"value":"1F31A","name":"NEW MOON WITH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf1a"},127771:{"value":"1F31B","name":"FIRST QUARTER MOON WITH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf1b"},127772:{"value":"1F31C","name":"LAST QUARTER MOON WITH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf1c"},127773:{"value":"1F31D","name":"FULL MOON WITH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf1d"},127774:{"value":"1F31E","name":"SUN WITH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf1e"},127775:{"value":"1F31F","name":"GLOWING STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf1f"},127776:{"value":"1F320","name":"SHOOTING STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf20"},127777:{"value":"1F321","name":"THERMOMETER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf21"},127778:{"value":"1F322","name":"BLACK DROPLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf22"},127779:{"value":"1F323","name":"WHITE SUN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf23"},127780:{"value":"1F324","name":"WHITE SUN WITH SMALL CLOUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf24"},127781:{"value":"1F325","name":"WHITE SUN BEHIND CLOUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf25"},127782:{"value":"1F326","name":"WHITE SUN BEHIND CLOUD WITH RAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf26"},127783:{"value":"1F327","name":"CLOUD WITH RAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf27"},127784:{"value":"1F328","name":"CLOUD WITH SNOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf28"},127785:{"value":"1F329","name":"CLOUD WITH LIGHTNING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf29"},127786:{"value":"1F32A","name":"CLOUD WITH TORNADO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf2a"},127787:{"value":"1F32B","name":"FOG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf2b"},127788:{"value":"1F32C","name":"WIND BLOWING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf2c"},127789:{"value":"1F32D","name":"HOT DOG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf2d"},127790:{"value":"1F32E","name":"TACO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf2e"},127791:{"value":"1F32F","name":"BURRITO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf2f"},127792:{"value":"1F330","name":"CHESTNUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf30"},127793:{"value":"1F331","name":"SEEDLING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf31"},127794:{"value":"1F332","name":"EVERGREEN TREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf32"},127795:{"value":"1F333","name":"DECIDUOUS TREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf33"},127796:{"value":"1F334","name":"PALM TREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf34"},127797:{"value":"1F335","name":"CACTUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf35"},127798:{"value":"1F336","name":"HOT PEPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf36"},127799:{"value":"1F337","name":"TULIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf37"},127800:{"value":"1F338","name":"CHERRY BLOSSOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf38"},127801:{"value":"1F339","name":"ROSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf39"},127802:{"value":"1F33A","name":"HIBISCUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf3a"},127803:{"value":"1F33B","name":"SUNFLOWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf3b"},127804:{"value":"1F33C","name":"BLOSSOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf3c"},127805:{"value":"1F33D","name":"EAR OF MAIZE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf3d"},127806:{"value":"1F33E","name":"EAR OF RICE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf3e"},127807:{"value":"1F33F","name":"HERB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf3f"},127808:{"value":"1F340","name":"FOUR LEAF CLOVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf40"},127809:{"value":"1F341","name":"MAPLE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf41"},127810:{"value":"1F342","name":"FALLEN LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf42"},127811:{"value":"1F343","name":"LEAF FLUTTERING IN WIND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf43"},127812:{"value":"1F344","name":"MUSHROOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf44"},127813:{"value":"1F345","name":"TOMATO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf45"},127814:{"value":"1F346","name":"AUBERGINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf46"},127815:{"value":"1F347","name":"GRAPES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf47"},127816:{"value":"1F348","name":"MELON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf48"},127817:{"value":"1F349","name":"WATERMELON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf49"},127818:{"value":"1F34A","name":"TANGERINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf4a"},127819:{"value":"1F34B","name":"LEMON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf4b"},127820:{"value":"1F34C","name":"BANANA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf4c"},127821:{"value":"1F34D","name":"PINEAPPLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf4d"},127822:{"value":"1F34E","name":"RED APPLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf4e"},127823:{"value":"1F34F","name":"GREEN APPLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf4f"},127824:{"value":"1F350","name":"PEAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf50"},127825:{"value":"1F351","name":"PEACH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf51"},127826:{"value":"1F352","name":"CHERRIES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf52"},127827:{"value":"1F353","name":"STRAWBERRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf53"},127828:{"value":"1F354","name":"HAMBURGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf54"},127829:{"value":"1F355","name":"SLICE OF PIZZA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf55"},127830:{"value":"1F356","name":"MEAT ON BONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf56"},127831:{"value":"1F357","name":"POULTRY LEG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf57"},127832:{"value":"1F358","name":"RICE CRACKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf58"},127833:{"value":"1F359","name":"RICE BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf59"},127834:{"value":"1F35A","name":"COOKED RICE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf5a"},127835:{"value":"1F35B","name":"CURRY AND RICE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf5b"},127836:{"value":"1F35C","name":"STEAMING BOWL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf5c"},127837:{"value":"1F35D","name":"SPAGHETTI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf5d"},127838:{"value":"1F35E","name":"BREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf5e"},127839:{"value":"1F35F","name":"FRENCH FRIES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf5f"},127840:{"value":"1F360","name":"ROASTED SWEET POTATO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf60"},127841:{"value":"1F361","name":"DANGO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf61"},127842:{"value":"1F362","name":"ODEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf62"},127843:{"value":"1F363","name":"SUSHI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf63"},127844:{"value":"1F364","name":"FRIED SHRIMP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf64"},127845:{"value":"1F365","name":"FISH CAKE WITH SWIRL DESIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf65"},127846:{"value":"1F366","name":"SOFT ICE CREAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf66"},127847:{"value":"1F367","name":"SHAVED ICE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf67"},127848:{"value":"1F368","name":"ICE CREAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf68"},127849:{"value":"1F369","name":"DOUGHNUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf69"},127850:{"value":"1F36A","name":"COOKIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf6a"},127851:{"value":"1F36B","name":"CHOCOLATE BAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf6b"},127852:{"value":"1F36C","name":"CANDY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf6c"},127853:{"value":"1F36D","name":"LOLLIPOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf6d"},127854:{"value":"1F36E","name":"CUSTARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf6e"},127855:{"value":"1F36F","name":"HONEY POT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf6f"},127856:{"value":"1F370","name":"SHORTCAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf70"},127857:{"value":"1F371","name":"BENTO BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf71"},127858:{"value":"1F372","name":"POT OF FOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf72"},127859:{"value":"1F373","name":"COOKING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf73"},127860:{"value":"1F374","name":"FORK AND KNIFE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf74"},127861:{"value":"1F375","name":"TEACUP WITHOUT HANDLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf75"},127862:{"value":"1F376","name":"SAKE BOTTLE AND CUP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf76"},127863:{"value":"1F377","name":"WINE GLASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf77"},127864:{"value":"1F378","name":"COCKTAIL GLASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf78"},127865:{"value":"1F379","name":"TROPICAL DRINK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf79"},127866:{"value":"1F37A","name":"BEER MUG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf7a"},127867:{"value":"1F37B","name":"CLINKING BEER MUGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf7b"},127868:{"value":"1F37C","name":"BABY BOTTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf7c"},127869:{"value":"1F37D","name":"FORK AND KNIFE WITH PLATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf7d"},127870:{"value":"1F37E","name":"BOTTLE WITH POPPING CORK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf7e"},127871:{"value":"1F37F","name":"POPCORN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf7f"},127872:{"value":"1F380","name":"RIBBON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf80"},127873:{"value":"1F381","name":"WRAPPED PRESENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf81"},127874:{"value":"1F382","name":"BIRTHDAY CAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf82"},127875:{"value":"1F383","name":"JACK-O-LANTERN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf83"},127876:{"value":"1F384","name":"CHRISTMAS TREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf84"},127877:{"value":"1F385","name":"FATHER CHRISTMAS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf85"},127878:{"value":"1F386","name":"FIREWORKS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf86"},127879:{"value":"1F387","name":"FIREWORK SPARKLER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf87"},127880:{"value":"1F388","name":"BALLOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf88"},127881:{"value":"1F389","name":"PARTY POPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf89"},127882:{"value":"1F38A","name":"CONFETTI BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf8a"},127883:{"value":"1F38B","name":"TANABATA TREE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf8b"},127884:{"value":"1F38C","name":"CROSSED FLAGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf8c"},127885:{"value":"1F38D","name":"PINE DECORATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf8d"},127886:{"value":"1F38E","name":"JAPANESE DOLLS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf8e"},127887:{"value":"1F38F","name":"CARP STREAMER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf8f"},127888:{"value":"1F390","name":"WIND CHIME","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf90"},127889:{"value":"1F391","name":"MOON VIEWING CEREMONY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf91"},127890:{"value":"1F392","name":"SCHOOL SATCHEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf92"},127891:{"value":"1F393","name":"GRADUATION CAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf93"},127892:{"value":"1F394","name":"HEART WITH TIP ON THE LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf94"},127893:{"value":"1F395","name":"BOUQUET OF FLOWERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf95"},127894:{"value":"1F396","name":"MILITARY MEDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf96"},127895:{"value":"1F397","name":"REMINDER RIBBON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf97"},127896:{"value":"1F398","name":"MUSICAL KEYBOARD WITH JACKS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf98"},127897:{"value":"1F399","name":"STUDIO MICROPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf99"},127898:{"value":"1F39A","name":"LEVEL SLIDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf9a"},127899:{"value":"1F39B","name":"CONTROL KNOBS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf9b"},127900:{"value":"1F39C","name":"BEAMED ASCENDING MUSICAL NOTES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf9c"},127901:{"value":"1F39D","name":"BEAMED DESCENDING MUSICAL NOTES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf9d"},127902:{"value":"1F39E","name":"FILM FRAMES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf9e"},127903:{"value":"1F39F","name":"ADMISSION TICKETS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udf9f"},127904:{"value":"1F3A0","name":"CAROUSEL HORSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa0"},127905:{"value":"1F3A1","name":"FERRIS WHEEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa1"},127906:{"value":"1F3A2","name":"ROLLER COASTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa2"},127907:{"value":"1F3A3","name":"FISHING POLE AND FISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa3"},127908:{"value":"1F3A4","name":"MICROPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa4"},127909:{"value":"1F3A5","name":"MOVIE CAMERA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa5"},127910:{"value":"1F3A6","name":"CINEMA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa6"},127911:{"value":"1F3A7","name":"HEADPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa7"},127912:{"value":"1F3A8","name":"ARTIST PALETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa8"},127913:{"value":"1F3A9","name":"TOP HAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfa9"},127914:{"value":"1F3AA","name":"CIRCUS TENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfaa"},127915:{"value":"1F3AB","name":"TICKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfab"},127916:{"value":"1F3AC","name":"CLAPPER BOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfac"},127917:{"value":"1F3AD","name":"PERFORMING ARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfad"},127918:{"value":"1F3AE","name":"VIDEO GAME","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfae"},127919:{"value":"1F3AF","name":"DIRECT HIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfaf"},127920:{"value":"1F3B0","name":"SLOT MACHINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb0"},127921:{"value":"1F3B1","name":"BILLIARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb1"},127922:{"value":"1F3B2","name":"GAME DIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb2"},127923:{"value":"1F3B3","name":"BOWLING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb3"},127924:{"value":"1F3B4","name":"FLOWER PLAYING CARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb4"},127925:{"value":"1F3B5","name":"MUSICAL NOTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb5"},127926:{"value":"1F3B6","name":"MULTIPLE MUSICAL NOTES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb6"},127927:{"value":"1F3B7","name":"SAXOPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb7"},127928:{"value":"1F3B8","name":"GUITAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb8"},127929:{"value":"1F3B9","name":"MUSICAL KEYBOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfb9"},127930:{"value":"1F3BA","name":"TRUMPET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfba"},127931:{"value":"1F3BB","name":"VIOLIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfbb"},127932:{"value":"1F3BC","name":"MUSICAL SCORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfbc"},127933:{"value":"1F3BD","name":"RUNNING SHIRT WITH SASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfbd"},127934:{"value":"1F3BE","name":"TENNIS RACQUET AND BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfbe"},127935:{"value":"1F3BF","name":"SKI AND SKI BOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfbf"},127936:{"value":"1F3C0","name":"BASKETBALL AND HOOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc0"},127937:{"value":"1F3C1","name":"CHEQUERED FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc1"},127938:{"value":"1F3C2","name":"SNOWBOARDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc2"},127939:{"value":"1F3C3","name":"RUNNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc3"},127940:{"value":"1F3C4","name":"SURFER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc4"},127941:{"value":"1F3C5","name":"SPORTS MEDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc5"},127942:{"value":"1F3C6","name":"TROPHY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc6"},127943:{"value":"1F3C7","name":"HORSE RACING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc7"},127944:{"value":"1F3C8","name":"AMERICAN FOOTBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc8"},127945:{"value":"1F3C9","name":"RUGBY FOOTBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfc9"},127946:{"value":"1F3CA","name":"SWIMMER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfca"},127947:{"value":"1F3CB","name":"WEIGHT LIFTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfcb"},127948:{"value":"1F3CC","name":"GOLFER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfcc"},127949:{"value":"1F3CD","name":"RACING MOTORCYCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfcd"},127950:{"value":"1F3CE","name":"RACING CAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfce"},127951:{"value":"1F3CF","name":"CRICKET BAT AND BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfcf"},127952:{"value":"1F3D0","name":"VOLLEYBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd0"},127953:{"value":"1F3D1","name":"FIELD HOCKEY STICK AND BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd1"},127954:{"value":"1F3D2","name":"ICE HOCKEY STICK AND PUCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd2"},127955:{"value":"1F3D3","name":"TABLE TENNIS PADDLE AND BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd3"},127956:{"value":"1F3D4","name":"SNOW CAPPED MOUNTAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd4"},127957:{"value":"1F3D5","name":"CAMPING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd5"},127958:{"value":"1F3D6","name":"BEACH WITH UMBRELLA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd6"},127959:{"value":"1F3D7","name":"BUILDING CONSTRUCTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd7"},127960:{"value":"1F3D8","name":"HOUSE BUILDINGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd8"},127961:{"value":"1F3D9","name":"CITYSCAPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfd9"},127962:{"value":"1F3DA","name":"DERELICT HOUSE BUILDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfda"},127963:{"value":"1F3DB","name":"CLASSICAL BUILDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfdb"},127964:{"value":"1F3DC","name":"DESERT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfdc"},127965:{"value":"1F3DD","name":"DESERT ISLAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfdd"},127966:{"value":"1F3DE","name":"NATIONAL PARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfde"},127967:{"value":"1F3DF","name":"STADIUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfdf"},127968:{"value":"1F3E0","name":"HOUSE BUILDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe0"},127969:{"value":"1F3E1","name":"HOUSE WITH GARDEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe1"},127970:{"value":"1F3E2","name":"OFFICE BUILDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe2"},127971:{"value":"1F3E3","name":"JAPANESE POST OFFICE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe3"},127972:{"value":"1F3E4","name":"EUROPEAN POST OFFICE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe4"},127973:{"value":"1F3E5","name":"HOSPITAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe5"},127974:{"value":"1F3E6","name":"BANK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe6"},127975:{"value":"1F3E7","name":"AUTOMATED TELLER MACHINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe7"},127976:{"value":"1F3E8","name":"HOTEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe8"},127977:{"value":"1F3E9","name":"LOVE HOTEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfe9"},127978:{"value":"1F3EA","name":"CONVENIENCE STORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfea"},127979:{"value":"1F3EB","name":"SCHOOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfeb"},127980:{"value":"1F3EC","name":"DEPARTMENT STORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfec"},127981:{"value":"1F3ED","name":"FACTORY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfed"},127982:{"value":"1F3EE","name":"IZAKAYA LANTERN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfee"},127983:{"value":"1F3EF","name":"JAPANESE CASTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udfef"},127984:{"value":"1F3F0","name":"EUROPEAN CASTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff0"},127985:{"value":"1F3F1","name":"WHITE PENNANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff1"},127986:{"value":"1F3F2","name":"BLACK PENNANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff2"},127987:{"value":"1F3F3","name":"WAVING WHITE FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff3"},127988:{"value":"1F3F4","name":"WAVING BLACK FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff4"},127989:{"value":"1F3F5","name":"ROSETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff5"},127990:{"value":"1F3F6","name":"BLACK ROSETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff6"},127991:{"value":"1F3F7","name":"LABEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff7"},127992:{"value":"1F3F8","name":"BADMINTON RACQUET AND SHUTTLECOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff8"},127993:{"value":"1F3F9","name":"BOW AND ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udff9"},127994:{"value":"1F3FA","name":"AMPHORA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83c\udffa"},128000:{"value":"1F400","name":"RAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc00"},128001:{"value":"1F401","name":"MOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc01"},128002:{"value":"1F402","name":"OX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc02"},128003:{"value":"1F403","name":"WATER BUFFALO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc03"},128004:{"value":"1F404","name":"COW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc04"},128005:{"value":"1F405","name":"TIGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc05"},128006:{"value":"1F406","name":"LEOPARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc06"},128007:{"value":"1F407","name":"RABBIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc07"},128008:{"value":"1F408","name":"CAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc08"},128009:{"value":"1F409","name":"DRAGON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc09"},128010:{"value":"1F40A","name":"CROCODILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc0a"},128011:{"value":"1F40B","name":"WHALE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc0b"},128012:{"value":"1F40C","name":"SNAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc0c"},128013:{"value":"1F40D","name":"SNAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc0d"},128014:{"value":"1F40E","name":"HORSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc0e"},128015:{"value":"1F40F","name":"RAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc0f"},128016:{"value":"1F410","name":"GOAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc10"},128017:{"value":"1F411","name":"SHEEP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc11"},128018:{"value":"1F412","name":"MONKEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc12"},128019:{"value":"1F413","name":"ROOSTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc13"},128020:{"value":"1F414","name":"CHICKEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc14"},128021:{"value":"1F415","name":"DOG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc15"},128022:{"value":"1F416","name":"PIG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc16"},128023:{"value":"1F417","name":"BOAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc17"},128024:{"value":"1F418","name":"ELEPHANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc18"},128025:{"value":"1F419","name":"OCTOPUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc19"},128026:{"value":"1F41A","name":"SPIRAL SHELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc1a"},128027:{"value":"1F41B","name":"BUG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc1b"},128028:{"value":"1F41C","name":"ANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc1c"},128029:{"value":"1F41D","name":"HONEYBEE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc1d"},128030:{"value":"1F41E","name":"LADY BEETLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc1e"},128031:{"value":"1F41F","name":"FISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc1f"},128032:{"value":"1F420","name":"TROPICAL FISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc20"},128033:{"value":"1F421","name":"BLOWFISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc21"},128034:{"value":"1F422","name":"TURTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc22"},128035:{"value":"1F423","name":"HATCHING CHICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc23"},128036:{"value":"1F424","name":"BABY CHICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc24"},128037:{"value":"1F425","name":"FRONT-FACING BABY CHICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc25"},128038:{"value":"1F426","name":"BIRD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc26"},128039:{"value":"1F427","name":"PENGUIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc27"},128040:{"value":"1F428","name":"KOALA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc28"},128041:{"value":"1F429","name":"POODLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc29"},128042:{"value":"1F42A","name":"DROMEDARY CAMEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc2a"},128043:{"value":"1F42B","name":"BACTRIAN CAMEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc2b"},128044:{"value":"1F42C","name":"DOLPHIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc2c"},128045:{"value":"1F42D","name":"MOUSE FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc2d"},128046:{"value":"1F42E","name":"COW FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc2e"},128047:{"value":"1F42F","name":"TIGER FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc2f"},128048:{"value":"1F430","name":"RABBIT FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc30"},128049:{"value":"1F431","name":"CAT FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc31"},128050:{"value":"1F432","name":"DRAGON FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc32"},128051:{"value":"1F433","name":"SPOUTING WHALE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc33"},128052:{"value":"1F434","name":"HORSE FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc34"},128053:{"value":"1F435","name":"MONKEY FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc35"},128054:{"value":"1F436","name":"DOG FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc36"},128055:{"value":"1F437","name":"PIG FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc37"},128056:{"value":"1F438","name":"FROG FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc38"},128057:{"value":"1F439","name":"HAMSTER FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc39"},128058:{"value":"1F43A","name":"WOLF FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc3a"},128059:{"value":"1F43B","name":"BEAR FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc3b"},128060:{"value":"1F43C","name":"PANDA FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc3c"},128061:{"value":"1F43D","name":"PIG NOSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc3d"},128062:{"value":"1F43E","name":"PAW PRINTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc3e"},128063:{"value":"1F43F","name":"CHIPMUNK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc3f"},128064:{"value":"1F440","name":"EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc40"},128065:{"value":"1F441","name":"EYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc41"},128066:{"value":"1F442","name":"EAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc42"},128067:{"value":"1F443","name":"NOSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc43"},128068:{"value":"1F444","name":"MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc44"},128069:{"value":"1F445","name":"TONGUE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc45"},128070:{"value":"1F446","name":"WHITE UP POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc46"},128071:{"value":"1F447","name":"WHITE DOWN POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc47"},128072:{"value":"1F448","name":"WHITE LEFT POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc48"},128073:{"value":"1F449","name":"WHITE RIGHT POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc49"},128074:{"value":"1F44A","name":"FISTED HAND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc4a"},128075:{"value":"1F44B","name":"WAVING HAND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc4b"},128076:{"value":"1F44C","name":"OK HAND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc4c"},128077:{"value":"1F44D","name":"THUMBS UP SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc4d"},128078:{"value":"1F44E","name":"THUMBS DOWN SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc4e"},128079:{"value":"1F44F","name":"CLAPPING HANDS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc4f"},128080:{"value":"1F450","name":"OPEN HANDS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc50"},128081:{"value":"1F451","name":"CROWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc51"},128082:{"value":"1F452","name":"WOMANS HAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc52"},128083:{"value":"1F453","name":"EYEGLASSES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc53"},128084:{"value":"1F454","name":"NECKTIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc54"},128085:{"value":"1F455","name":"T-SHIRT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc55"},128086:{"value":"1F456","name":"JEANS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc56"},128087:{"value":"1F457","name":"DRESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc57"},128088:{"value":"1F458","name":"KIMONO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc58"},128089:{"value":"1F459","name":"BIKINI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc59"},128090:{"value":"1F45A","name":"WOMANS CLOTHES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc5a"},128091:{"value":"1F45B","name":"PURSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc5b"},128092:{"value":"1F45C","name":"HANDBAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc5c"},128093:{"value":"1F45D","name":"POUCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc5d"},128094:{"value":"1F45E","name":"MANS SHOE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc5e"},128095:{"value":"1F45F","name":"ATHLETIC SHOE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc5f"},128096:{"value":"1F460","name":"HIGH-HEELED SHOE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc60"},128097:{"value":"1F461","name":"WOMANS SANDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc61"},128098:{"value":"1F462","name":"WOMANS BOOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc62"},128099:{"value":"1F463","name":"FOOTPRINTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc63"},128100:{"value":"1F464","name":"BUST IN SILHOUETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc64"},128101:{"value":"1F465","name":"BUSTS IN SILHOUETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc65"},128102:{"value":"1F466","name":"BOY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc66"},128103:{"value":"1F467","name":"GIRL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc67"},128104:{"value":"1F468","name":"MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc68"},128105:{"value":"1F469","name":"WOMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc69"},128106:{"value":"1F46A","name":"FAMILY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc6a"},128107:{"value":"1F46B","name":"MAN AND WOMAN HOLDING HANDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc6b"},128108:{"value":"1F46C","name":"TWO MEN HOLDING HANDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc6c"},128109:{"value":"1F46D","name":"TWO WOMEN HOLDING HANDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc6d"},128110:{"value":"1F46E","name":"POLICE OFFICER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc6e"},128111:{"value":"1F46F","name":"WOMAN WITH BUNNY EARS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc6f"},128112:{"value":"1F470","name":"BRIDE WITH VEIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc70"},128113:{"value":"1F471","name":"PERSON WITH BLOND HAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc71"},128114:{"value":"1F472","name":"MAN WITH GUA PI MAO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc72"},128115:{"value":"1F473","name":"MAN WITH TURBAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc73"},128116:{"value":"1F474","name":"OLDER MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc74"},128117:{"value":"1F475","name":"OLDER WOMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc75"},128118:{"value":"1F476","name":"BABY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc76"},128119:{"value":"1F477","name":"CONSTRUCTION WORKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc77"},128120:{"value":"1F478","name":"PRINCESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc78"},128121:{"value":"1F479","name":"JAPANESE OGRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc79"},128122:{"value":"1F47A","name":"JAPANESE GOBLIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc7a"},128123:{"value":"1F47B","name":"GHOST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc7b"},128124:{"value":"1F47C","name":"BABY ANGEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc7c"},128125:{"value":"1F47D","name":"EXTRATERRESTRIAL ALIEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc7d"},128126:{"value":"1F47E","name":"ALIEN MONSTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc7e"},128127:{"value":"1F47F","name":"IMP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc7f"},128128:{"value":"1F480","name":"SKULL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc80"},128129:{"value":"1F481","name":"INFORMATION DESK PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc81"},128130:{"value":"1F482","name":"GUARDSMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc82"},128131:{"value":"1F483","name":"DANCER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc83"},128132:{"value":"1F484","name":"LIPSTICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc84"},128133:{"value":"1F485","name":"NAIL POLISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc85"},128134:{"value":"1F486","name":"FACE MASSAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc86"},128135:{"value":"1F487","name":"HAIRCUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc87"},128136:{"value":"1F488","name":"BARBER POLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc88"},128137:{"value":"1F489","name":"SYRINGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc89"},128138:{"value":"1F48A","name":"PILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc8a"},128139:{"value":"1F48B","name":"KISS MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc8b"},128140:{"value":"1F48C","name":"LOVE LETTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc8c"},128141:{"value":"1F48D","name":"RING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc8d"},128142:{"value":"1F48E","name":"GEM STONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc8e"},128143:{"value":"1F48F","name":"KISS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc8f"},128144:{"value":"1F490","name":"BOUQUET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc90"},128145:{"value":"1F491","name":"COUPLE WITH HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc91"},128146:{"value":"1F492","name":"WEDDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc92"},128147:{"value":"1F493","name":"BEATING HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc93"},128148:{"value":"1F494","name":"BROKEN HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc94"},128149:{"value":"1F495","name":"TWO HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc95"},128150:{"value":"1F496","name":"SPARKLING HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc96"},128151:{"value":"1F497","name":"GROWING HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc97"},128152:{"value":"1F498","name":"HEART WITH ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc98"},128153:{"value":"1F499","name":"BLUE HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc99"},128154:{"value":"1F49A","name":"GREEN HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc9a"},128155:{"value":"1F49B","name":"YELLOW HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc9b"},128156:{"value":"1F49C","name":"PURPLE HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc9c"},128157:{"value":"1F49D","name":"HEART WITH RIBBON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc9d"},128158:{"value":"1F49E","name":"REVOLVING HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc9e"},128159:{"value":"1F49F","name":"HEART DECORATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udc9f"},128160:{"value":"1F4A0","name":"DIAMOND SHAPE WITH A DOT INSIDE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca0"},128161:{"value":"1F4A1","name":"ELECTRIC LIGHT BULB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca1"},128162:{"value":"1F4A2","name":"ANGER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca2"},128163:{"value":"1F4A3","name":"BOMB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca3"},128164:{"value":"1F4A4","name":"SLEEPING SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca4"},128165:{"value":"1F4A5","name":"COLLISION SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca5"},128166:{"value":"1F4A6","name":"SPLASHING SWEAT SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca6"},128167:{"value":"1F4A7","name":"DROPLET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca7"},128168:{"value":"1F4A8","name":"DASH SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca8"},128169:{"value":"1F4A9","name":"PILE OF POO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udca9"},128170:{"value":"1F4AA","name":"FLEXED BICEPS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcaa"},128171:{"value":"1F4AB","name":"DIZZY SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcab"},128172:{"value":"1F4AC","name":"SPEECH BALLOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcac"},128173:{"value":"1F4AD","name":"THOUGHT BALLOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcad"},128174:{"value":"1F4AE","name":"WHITE FLOWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcae"},128175:{"value":"1F4AF","name":"HUNDRED POINTS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcaf"},128176:{"value":"1F4B0","name":"MONEY BAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb0"},128177:{"value":"1F4B1","name":"CURRENCY EXCHANGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb1"},128178:{"value":"1F4B2","name":"HEAVY DOLLAR SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb2"},128179:{"value":"1F4B3","name":"CREDIT CARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb3"},128180:{"value":"1F4B4","name":"BANKNOTE WITH YEN SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb4"},128181:{"value":"1F4B5","name":"BANKNOTE WITH DOLLAR SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb5"},128182:{"value":"1F4B6","name":"BANKNOTE WITH EURO SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb6"},128183:{"value":"1F4B7","name":"BANKNOTE WITH POUND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb7"},128184:{"value":"1F4B8","name":"MONEY WITH WINGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb8"},128185:{"value":"1F4B9","name":"CHART WITH UPWARDS TREND AND YEN SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcb9"},128186:{"value":"1F4BA","name":"SEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcba"},128187:{"value":"1F4BB","name":"PERSONAL COMPUTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcbb"},128188:{"value":"1F4BC","name":"BRIEFCASE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcbc"},128189:{"value":"1F4BD","name":"MINIDISC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcbd"},128190:{"value":"1F4BE","name":"FLOPPY DISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcbe"},128191:{"value":"1F4BF","name":"OPTICAL DISC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcbf"},128192:{"value":"1F4C0","name":"DVD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc0"},128193:{"value":"1F4C1","name":"FILE FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc1"},128194:{"value":"1F4C2","name":"OPEN FILE FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc2"},128195:{"value":"1F4C3","name":"PAGE WITH CURL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc3"},128196:{"value":"1F4C4","name":"PAGE FACING UP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc4"},128197:{"value":"1F4C5","name":"CALENDAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc5"},128198:{"value":"1F4C6","name":"TEAR-OFF CALENDAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc6"},128199:{"value":"1F4C7","name":"CARD INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc7"},128200:{"value":"1F4C8","name":"CHART WITH UPWARDS TREND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc8"},128201:{"value":"1F4C9","name":"CHART WITH DOWNWARDS TREND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcc9"},128202:{"value":"1F4CA","name":"BAR CHART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcca"},128203:{"value":"1F4CB","name":"CLIPBOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udccb"},128204:{"value":"1F4CC","name":"PUSHPIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udccc"},128205:{"value":"1F4CD","name":"ROUND PUSHPIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udccd"},128206:{"value":"1F4CE","name":"PAPERCLIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcce"},128207:{"value":"1F4CF","name":"STRAIGHT RULER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udccf"},128208:{"value":"1F4D0","name":"TRIANGULAR RULER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd0"},128209:{"value":"1F4D1","name":"BOOKMARK TABS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd1"},128210:{"value":"1F4D2","name":"LEDGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd2"},128211:{"value":"1F4D3","name":"NOTEBOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd3"},128212:{"value":"1F4D4","name":"NOTEBOOK WITH DECORATIVE COVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd4"},128213:{"value":"1F4D5","name":"CLOSED BOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd5"},128214:{"value":"1F4D6","name":"OPEN BOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd6"},128215:{"value":"1F4D7","name":"GREEN BOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd7"},128216:{"value":"1F4D8","name":"BLUE BOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd8"},128217:{"value":"1F4D9","name":"ORANGE BOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcd9"},128218:{"value":"1F4DA","name":"BOOKS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcda"},128219:{"value":"1F4DB","name":"NAME BADGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcdb"},128220:{"value":"1F4DC","name":"SCROLL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcdc"},128221:{"value":"1F4DD","name":"MEMO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcdd"},128222:{"value":"1F4DE","name":"TELEPHONE RECEIVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcde"},128223:{"value":"1F4DF","name":"PAGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcdf"},128224:{"value":"1F4E0","name":"FAX MACHINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce0"},128225:{"value":"1F4E1","name":"SATELLITE ANTENNA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce1"},128226:{"value":"1F4E2","name":"PUBLIC ADDRESS LOUDSPEAKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce2"},128227:{"value":"1F4E3","name":"CHEERING MEGAPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce3"},128228:{"value":"1F4E4","name":"OUTBOX TRAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce4"},128229:{"value":"1F4E5","name":"INBOX TRAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce5"},128230:{"value":"1F4E6","name":"PACKAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce6"},128231:{"value":"1F4E7","name":"E-MAIL SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce7"},128232:{"value":"1F4E8","name":"INCOMING ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce8"},128233:{"value":"1F4E9","name":"ENVELOPE WITH DOWNWARDS ARROW ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udce9"},128234:{"value":"1F4EA","name":"CLOSED MAILBOX WITH LOWERED FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcea"},128235:{"value":"1F4EB","name":"CLOSED MAILBOX WITH RAISED FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udceb"},128236:{"value":"1F4EC","name":"OPEN MAILBOX WITH RAISED FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcec"},128237:{"value":"1F4ED","name":"OPEN MAILBOX WITH LOWERED FLAG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udced"},128238:{"value":"1F4EE","name":"POSTBOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcee"},128239:{"value":"1F4EF","name":"POSTAL HORN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcef"},128240:{"value":"1F4F0","name":"NEWSPAPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf0"},128241:{"value":"1F4F1","name":"MOBILE PHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf1"},128242:{"value":"1F4F2","name":"MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf2"},128243:{"value":"1F4F3","name":"VIBRATION MODE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf3"},128244:{"value":"1F4F4","name":"MOBILE PHONE OFF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf4"},128245:{"value":"1F4F5","name":"NO MOBILE PHONES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf5"},128246:{"value":"1F4F6","name":"ANTENNA WITH BARS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf6"},128247:{"value":"1F4F7","name":"CAMERA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf7"},128248:{"value":"1F4F8","name":"CAMERA WITH FLASH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf8"},128249:{"value":"1F4F9","name":"VIDEO CAMERA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcf9"},128250:{"value":"1F4FA","name":"TELEVISION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcfa"},128251:{"value":"1F4FB","name":"RADIO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcfb"},128252:{"value":"1F4FC","name":"VIDEOCASSETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcfc"},128253:{"value":"1F4FD","name":"FILM PROJECTOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcfd"},128254:{"value":"1F4FE","name":"PORTABLE STEREO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcfe"},128255:{"value":"1F4FF","name":"PRAYER BEADS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udcff"},128256:{"value":"1F500","name":"TWISTED RIGHTWARDS ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd00"},128257:{"value":"1F501","name":"CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd01"},128258:{"value":"1F502","name":"CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd02"},128259:{"value":"1F503","name":"CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd03"},128260:{"value":"1F504","name":"ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd04"},128261:{"value":"1F505","name":"LOW BRIGHTNESS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd05"},128262:{"value":"1F506","name":"HIGH BRIGHTNESS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd06"},128263:{"value":"1F507","name":"SPEAKER WITH CANCELLATION STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd07"},128264:{"value":"1F508","name":"SPEAKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd08"},128265:{"value":"1F509","name":"SPEAKER WITH ONE SOUND WAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd09"},128266:{"value":"1F50A","name":"SPEAKER WITH THREE SOUND WAVES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd0a"},128267:{"value":"1F50B","name":"BATTERY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd0b"},128268:{"value":"1F50C","name":"ELECTRIC PLUG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd0c"},128269:{"value":"1F50D","name":"LEFT-POINTING MAGNIFYING GLASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd0d"},128270:{"value":"1F50E","name":"RIGHT-POINTING MAGNIFYING GLASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd0e"},128271:{"value":"1F50F","name":"LOCK WITH INK PEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd0f"},128272:{"value":"1F510","name":"CLOSED LOCK WITH KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd10"},128273:{"value":"1F511","name":"KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd11"},128274:{"value":"1F512","name":"LOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd12"},128275:{"value":"1F513","name":"OPEN LOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd13"},128276:{"value":"1F514","name":"BELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd14"},128277:{"value":"1F515","name":"BELL WITH CANCELLATION STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd15"},128278:{"value":"1F516","name":"BOOKMARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd16"},128279:{"value":"1F517","name":"LINK SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd17"},128280:{"value":"1F518","name":"RADIO BUTTON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd18"},128281:{"value":"1F519","name":"BACK WITH LEFTWARDS ARROW ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd19"},128282:{"value":"1F51A","name":"END WITH LEFTWARDS ARROW ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd1a"},128283:{"value":"1F51B","name":"ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd1b"},128284:{"value":"1F51C","name":"SOON WITH RIGHTWARDS ARROW ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd1c"},128285:{"value":"1F51D","name":"TOP WITH UPWARDS ARROW ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd1d"},128286:{"value":"1F51E","name":"NO ONE UNDER EIGHTEEN SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd1e"},128287:{"value":"1F51F","name":"KEYCAP TEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd1f"},128288:{"value":"1F520","name":"INPUT SYMBOL FOR LATIN CAPITAL LETTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd20"},128289:{"value":"1F521","name":"INPUT SYMBOL FOR LATIN SMALL LETTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd21"},128290:{"value":"1F522","name":"INPUT SYMBOL FOR NUMBERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd22"},128291:{"value":"1F523","name":"INPUT SYMBOL FOR SYMBOLS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd23"},128292:{"value":"1F524","name":"INPUT SYMBOL FOR LATIN LETTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd24"},128293:{"value":"1F525","name":"FIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd25"},128294:{"value":"1F526","name":"ELECTRIC TORCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd26"},128295:{"value":"1F527","name":"WRENCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd27"},128296:{"value":"1F528","name":"HAMMER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd28"},128297:{"value":"1F529","name":"NUT AND BOLT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd29"},128298:{"value":"1F52A","name":"HOCHO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd2a"},128299:{"value":"1F52B","name":"PISTOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd2b"},128300:{"value":"1F52C","name":"MICROSCOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd2c"},128301:{"value":"1F52D","name":"TELESCOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd2d"},128302:{"value":"1F52E","name":"CRYSTAL BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd2e"},128303:{"value":"1F52F","name":"SIX POINTED STAR WITH MIDDLE DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd2f"},128304:{"value":"1F530","name":"JAPANESE SYMBOL FOR BEGINNER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd30"},128305:{"value":"1F531","name":"TRIDENT EMBLEM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd31"},128306:{"value":"1F532","name":"BLACK SQUARE BUTTON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd32"},128307:{"value":"1F533","name":"WHITE SQUARE BUTTON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd33"},128308:{"value":"1F534","name":"LARGE RED CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd34"},128309:{"value":"1F535","name":"LARGE BLUE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd35"},128310:{"value":"1F536","name":"LARGE ORANGE DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd36"},128311:{"value":"1F537","name":"LARGE BLUE DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd37"},128312:{"value":"1F538","name":"SMALL ORANGE DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd38"},128313:{"value":"1F539","name":"SMALL BLUE DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd39"},128314:{"value":"1F53A","name":"UP-POINTING RED TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd3a"},128315:{"value":"1F53B","name":"DOWN-POINTING RED TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd3b"},128316:{"value":"1F53C","name":"UP-POINTING SMALL RED TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd3c"},128317:{"value":"1F53D","name":"DOWN-POINTING SMALL RED TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd3d"},128318:{"value":"1F53E","name":"LOWER RIGHT SHADOWED WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd3e"},128319:{"value":"1F53F","name":"UPPER RIGHT SHADOWED WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd3f"},128320:{"value":"1F540","name":"CIRCLED CROSS POMMEE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd40"},128321:{"value":"1F541","name":"CROSS POMMEE WITH HALF-CIRCLE BELOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd41"},128322:{"value":"1F542","name":"CROSS POMMEE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd42"},128323:{"value":"1F543","name":"NOTCHED LEFT SEMICIRCLE WITH THREE DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd43"},128324:{"value":"1F544","name":"NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd44"},128325:{"value":"1F545","name":"SYMBOL FOR MARKS CHAPTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd45"},128326:{"value":"1F546","name":"WHITE LATIN CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd46"},128327:{"value":"1F547","name":"HEAVY LATIN CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd47"},128328:{"value":"1F548","name":"CELTIC CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd48"},128329:{"value":"1F549","name":"OM SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd49"},128330:{"value":"1F54A","name":"DOVE OF PEACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd4a"},128331:{"value":"1F54B","name":"KAABA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd4b"},128332:{"value":"1F54C","name":"MOSQUE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd4c"},128333:{"value":"1F54D","name":"SYNAGOGUE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd4d"},128334:{"value":"1F54E","name":"MENORAH WITH NINE BRANCHES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd4e"},128335:{"value":"1F54F","name":"BOWL OF HYGIEIA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd4f"},128336:{"value":"1F550","name":"CLOCK FACE ONE OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd50"},128337:{"value":"1F551","name":"CLOCK FACE TWO OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd51"},128338:{"value":"1F552","name":"CLOCK FACE THREE OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd52"},128339:{"value":"1F553","name":"CLOCK FACE FOUR OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd53"},128340:{"value":"1F554","name":"CLOCK FACE FIVE OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd54"},128341:{"value":"1F555","name":"CLOCK FACE SIX OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd55"},128342:{"value":"1F556","name":"CLOCK FACE SEVEN OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd56"},128343:{"value":"1F557","name":"CLOCK FACE EIGHT OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd57"},128344:{"value":"1F558","name":"CLOCK FACE NINE OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd58"},128345:{"value":"1F559","name":"CLOCK FACE TEN OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd59"},128346:{"value":"1F55A","name":"CLOCK FACE ELEVEN OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd5a"},128347:{"value":"1F55B","name":"CLOCK FACE TWELVE OCLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd5b"},128348:{"value":"1F55C","name":"CLOCK FACE ONE-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd5c"},128349:{"value":"1F55D","name":"CLOCK FACE TWO-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd5d"},128350:{"value":"1F55E","name":"CLOCK FACE THREE-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd5e"},128351:{"value":"1F55F","name":"CLOCK FACE FOUR-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd5f"},128352:{"value":"1F560","name":"CLOCK FACE FIVE-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd60"},128353:{"value":"1F561","name":"CLOCK FACE SIX-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd61"},128354:{"value":"1F562","name":"CLOCK FACE SEVEN-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd62"},128355:{"value":"1F563","name":"CLOCK FACE EIGHT-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd63"},128356:{"value":"1F564","name":"CLOCK FACE NINE-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd64"},128357:{"value":"1F565","name":"CLOCK FACE TEN-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd65"},128358:{"value":"1F566","name":"CLOCK FACE ELEVEN-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd66"},128359:{"value":"1F567","name":"CLOCK FACE TWELVE-THIRTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd67"},128360:{"value":"1F568","name":"RIGHT SPEAKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd68"},128361:{"value":"1F569","name":"RIGHT SPEAKER WITH ONE SOUND WAVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd69"},128362:{"value":"1F56A","name":"RIGHT SPEAKER WITH THREE SOUND WAVES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd6a"},128363:{"value":"1F56B","name":"BULLHORN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd6b"},128364:{"value":"1F56C","name":"BULLHORN WITH SOUND WAVES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd6c"},128365:{"value":"1F56D","name":"RINGING BELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd6d"},128366:{"value":"1F56E","name":"BOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd6e"},128367:{"value":"1F56F","name":"CANDLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd6f"},128368:{"value":"1F570","name":"MANTELPIECE CLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd70"},128369:{"value":"1F571","name":"BLACK SKULL AND CROSSBONES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd71"},128370:{"value":"1F572","name":"NO PIRACY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd72"},128371:{"value":"1F573","name":"HOLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd73"},128372:{"value":"1F574","name":"MAN IN BUSINESS SUIT LEVITATING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd74"},128373:{"value":"1F575","name":"SLEUTH OR SPY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd75"},128374:{"value":"1F576","name":"DARK SUNGLASSES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd76"},128375:{"value":"1F577","name":"SPIDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd77"},128376:{"value":"1F578","name":"SPIDER WEB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd78"},128377:{"value":"1F579","name":"JOYSTICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd79"},128378:{"value":"1F57A","name":"MAN DANCING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd7a"},128379:{"value":"1F57B","name":"LEFT HAND TELEPHONE RECEIVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd7b"},128380:{"value":"1F57C","name":"TELEPHONE RECEIVER WITH PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd7c"},128381:{"value":"1F57D","name":"RIGHT HAND TELEPHONE RECEIVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd7d"},128382:{"value":"1F57E","name":"WHITE TOUCHTONE TELEPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd7e"},128383:{"value":"1F57F","name":"BLACK TOUCHTONE TELEPHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd7f"},128384:{"value":"1F580","name":"TELEPHONE ON TOP OF MODEM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd80"},128385:{"value":"1F581","name":"CLAMSHELL MOBILE PHONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd81"},128386:{"value":"1F582","name":"BACK OF ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd82"},128387:{"value":"1F583","name":"STAMPED ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd83"},128388:{"value":"1F584","name":"ENVELOPE WITH LIGHTNING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd84"},128389:{"value":"1F585","name":"FLYING ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd85"},128390:{"value":"1F586","name":"PEN OVER STAMPED ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd86"},128391:{"value":"1F587","name":"LINKED PAPERCLIPS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd87"},128392:{"value":"1F588","name":"BLACK PUSHPIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd88"},128393:{"value":"1F589","name":"LOWER LEFT PENCIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd89"},128394:{"value":"1F58A","name":"LOWER LEFT BALLPOINT PEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd8a"},128395:{"value":"1F58B","name":"LOWER LEFT FOUNTAIN PEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd8b"},128396:{"value":"1F58C","name":"LOWER LEFT PAINTBRUSH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd8c"},128397:{"value":"1F58D","name":"LOWER LEFT CRAYON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd8d"},128398:{"value":"1F58E","name":"LEFT WRITING HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd8e"},128399:{"value":"1F58F","name":"TURNED OK HAND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd8f"},128400:{"value":"1F590","name":"RAISED HAND WITH FINGERS SPLAYED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd90"},128401:{"value":"1F591","name":"REVERSED RAISED HAND WITH FINGERS SPLAYED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd91"},128402:{"value":"1F592","name":"REVERSED THUMBS UP SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd92"},128403:{"value":"1F593","name":"REVERSED THUMBS DOWN SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd93"},128404:{"value":"1F594","name":"REVERSED VICTORY HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd94"},128405:{"value":"1F595","name":"REVERSED HAND WITH MIDDLE FINGER EXTENDED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd95"},128406:{"value":"1F596","name":"RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd96"},128407:{"value":"1F597","name":"WHITE DOWN POINTING LEFT HAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd97"},128408:{"value":"1F598","name":"SIDEWAYS WHITE LEFT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd98"},128409:{"value":"1F599","name":"SIDEWAYS WHITE RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd99"},128410:{"value":"1F59A","name":"SIDEWAYS BLACK LEFT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd9a"},128411:{"value":"1F59B","name":"SIDEWAYS BLACK RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd9b"},128412:{"value":"1F59C","name":"BLACK LEFT POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd9c"},128413:{"value":"1F59D","name":"BLACK RIGHT POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd9d"},128414:{"value":"1F59E","name":"SIDEWAYS WHITE UP POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd9e"},128415:{"value":"1F59F","name":"SIDEWAYS WHITE DOWN POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udd9f"},128416:{"value":"1F5A0","name":"SIDEWAYS BLACK UP POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda0"},128417:{"value":"1F5A1","name":"SIDEWAYS BLACK DOWN POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda1"},128418:{"value":"1F5A2","name":"BLACK UP POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda2"},128419:{"value":"1F5A3","name":"BLACK DOWN POINTING BACKHAND INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda3"},128420:{"value":"1F5A4","name":"BLACK HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda4"},128421:{"value":"1F5A5","name":"DESKTOP COMPUTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda5"},128422:{"value":"1F5A6","name":"KEYBOARD AND MOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda6"},128423:{"value":"1F5A7","name":"THREE NETWORKED COMPUTERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda7"},128424:{"value":"1F5A8","name":"PRINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda8"},128425:{"value":"1F5A9","name":"POCKET CALCULATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udda9"},128426:{"value":"1F5AA","name":"BLACK HARD SHELL FLOPPY DISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddaa"},128427:{"value":"1F5AB","name":"WHITE HARD SHELL FLOPPY DISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddab"},128428:{"value":"1F5AC","name":"SOFT SHELL FLOPPY DISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddac"},128429:{"value":"1F5AD","name":"TAPE CARTRIDGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddad"},128430:{"value":"1F5AE","name":"WIRED KEYBOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddae"},128431:{"value":"1F5AF","name":"ONE BUTTON MOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddaf"},128432:{"value":"1F5B0","name":"TWO BUTTON MOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb0"},128433:{"value":"1F5B1","name":"THREE BUTTON MOUSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb1"},128434:{"value":"1F5B2","name":"TRACKBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb2"},128435:{"value":"1F5B3","name":"OLD PERSONAL COMPUTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb3"},128436:{"value":"1F5B4","name":"HARD DISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb4"},128437:{"value":"1F5B5","name":"SCREEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb5"},128438:{"value":"1F5B6","name":"PRINTER ICON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb6"},128439:{"value":"1F5B7","name":"FAX ICON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb7"},128440:{"value":"1F5B8","name":"OPTICAL DISC ICON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb8"},128441:{"value":"1F5B9","name":"DOCUMENT WITH TEXT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddb9"},128442:{"value":"1F5BA","name":"DOCUMENT WITH TEXT AND PICTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddba"},128443:{"value":"1F5BB","name":"DOCUMENT WITH PICTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddbb"},128444:{"value":"1F5BC","name":"FRAME WITH PICTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddbc"},128445:{"value":"1F5BD","name":"FRAME WITH TILES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddbd"},128446:{"value":"1F5BE","name":"FRAME WITH AN X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddbe"},128447:{"value":"1F5BF","name":"BLACK FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddbf"},128448:{"value":"1F5C0","name":"FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc0"},128449:{"value":"1F5C1","name":"OPEN FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc1"},128450:{"value":"1F5C2","name":"CARD INDEX DIVIDERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc2"},128451:{"value":"1F5C3","name":"CARD FILE BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc3"},128452:{"value":"1F5C4","name":"FILE CABINET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc4"},128453:{"value":"1F5C5","name":"EMPTY NOTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc5"},128454:{"value":"1F5C6","name":"EMPTY NOTE PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc6"},128455:{"value":"1F5C7","name":"EMPTY NOTE PAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc7"},128456:{"value":"1F5C8","name":"NOTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc8"},128457:{"value":"1F5C9","name":"NOTE PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddc9"},128458:{"value":"1F5CA","name":"NOTE PAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddca"},128459:{"value":"1F5CB","name":"EMPTY DOCUMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddcb"},128460:{"value":"1F5CC","name":"EMPTY PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddcc"},128461:{"value":"1F5CD","name":"EMPTY PAGES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddcd"},128462:{"value":"1F5CE","name":"DOCUMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddce"},128463:{"value":"1F5CF","name":"PAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddcf"},128464:{"value":"1F5D0","name":"PAGES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd0"},128465:{"value":"1F5D1","name":"WASTEBASKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd1"},128466:{"value":"1F5D2","name":"SPIRAL NOTE PAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd2"},128467:{"value":"1F5D3","name":"SPIRAL CALENDAR PAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd3"},128468:{"value":"1F5D4","name":"DESKTOP WINDOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd4"},128469:{"value":"1F5D5","name":"MINIMIZE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd5"},128470:{"value":"1F5D6","name":"MAXIMIZE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd6"},128471:{"value":"1F5D7","name":"OVERLAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd7"},128472:{"value":"1F5D8","name":"CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd8"},128473:{"value":"1F5D9","name":"CANCELLATION X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddd9"},128474:{"value":"1F5DA","name":"INCREASE FONT SIZE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddda"},128475:{"value":"1F5DB","name":"DECREASE FONT SIZE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udddb"},128476:{"value":"1F5DC","name":"COMPRESSION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udddc"},128477:{"value":"1F5DD","name":"OLD KEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udddd"},128478:{"value":"1F5DE","name":"ROLLED-UP NEWSPAPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddde"},128479:{"value":"1F5DF","name":"PAGE WITH CIRCLED TEXT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udddf"},128480:{"value":"1F5E0","name":"STOCK CHART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde0"},128481:{"value":"1F5E1","name":"DAGGER KNIFE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde1"},128482:{"value":"1F5E2","name":"LIPS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde2"},128483:{"value":"1F5E3","name":"SPEAKING HEAD IN SILHOUETTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde3"},128484:{"value":"1F5E4","name":"THREE RAYS ABOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde4"},128485:{"value":"1F5E5","name":"THREE RAYS BELOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde5"},128486:{"value":"1F5E6","name":"THREE RAYS LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde6"},128487:{"value":"1F5E7","name":"THREE RAYS RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde7"},128488:{"value":"1F5E8","name":"LEFT SPEECH BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde8"},128489:{"value":"1F5E9","name":"RIGHT SPEECH BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udde9"},128490:{"value":"1F5EA","name":"TWO SPEECH BUBBLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddea"},128491:{"value":"1F5EB","name":"THREE SPEECH BUBBLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddeb"},128492:{"value":"1F5EC","name":"LEFT THOUGHT BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddec"},128493:{"value":"1F5ED","name":"RIGHT THOUGHT BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udded"},128494:{"value":"1F5EE","name":"LEFT ANGER BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddee"},128495:{"value":"1F5EF","name":"RIGHT ANGER BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddef"},128496:{"value":"1F5F0","name":"MOOD BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf0"},128497:{"value":"1F5F1","name":"LIGHTNING MOOD BUBBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf1"},128498:{"value":"1F5F2","name":"LIGHTNING MOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf2"},128499:{"value":"1F5F3","name":"BALLOT BOX WITH BALLOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf3"},128500:{"value":"1F5F4","name":"BALLOT SCRIPT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf4"},128501:{"value":"1F5F5","name":"BALLOT BOX WITH SCRIPT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf5"},128502:{"value":"1F5F6","name":"BALLOT BOLD SCRIPT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf6"},128503:{"value":"1F5F7","name":"BALLOT BOX WITH BOLD SCRIPT X","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf7"},128504:{"value":"1F5F8","name":"LIGHT CHECK MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf8"},128505:{"value":"1F5F9","name":"BALLOT BOX WITH BOLD CHECK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddf9"},128506:{"value":"1F5FA","name":"WORLD MAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddfa"},128507:{"value":"1F5FB","name":"MOUNT FUJI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddfb"},128508:{"value":"1F5FC","name":"TOKYO TOWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddfc"},128509:{"value":"1F5FD","name":"STATUE OF LIBERTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddfd"},128510:{"value":"1F5FE","name":"SILHOUETTE OF JAPAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddfe"},128511:{"value":"1F5FF","name":"MOYAI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uddff"},128512:{"value":"1F600","name":"GRINNING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude00"},128513:{"value":"1F601","name":"GRINNING FACE WITH SMILING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude01"},128514:{"value":"1F602","name":"FACE WITH TEARS OF JOY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude02"},128515:{"value":"1F603","name":"SMILING FACE WITH OPEN MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude03"},128516:{"value":"1F604","name":"SMILING FACE WITH OPEN MOUTH AND SMILING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude04"},128517:{"value":"1F605","name":"SMILING FACE WITH OPEN MOUTH AND COLD SWEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude05"},128518:{"value":"1F606","name":"SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude06"},128519:{"value":"1F607","name":"SMILING FACE WITH HALO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude07"},128520:{"value":"1F608","name":"SMILING FACE WITH HORNS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude08"},128521:{"value":"1F609","name":"WINKING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude09"},128522:{"value":"1F60A","name":"SMILING FACE WITH SMILING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude0a"},128523:{"value":"1F60B","name":"FACE SAVOURING DELICIOUS FOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude0b"},128524:{"value":"1F60C","name":"RELIEVED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude0c"},128525:{"value":"1F60D","name":"SMILING FACE WITH HEART-SHAPED EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude0d"},128526:{"value":"1F60E","name":"SMILING FACE WITH SUNGLASSES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude0e"},128527:{"value":"1F60F","name":"SMIRKING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude0f"},128528:{"value":"1F610","name":"NEUTRAL FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude10"},128529:{"value":"1F611","name":"EXPRESSIONLESS FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude11"},128530:{"value":"1F612","name":"UNAMUSED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude12"},128531:{"value":"1F613","name":"FACE WITH COLD SWEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude13"},128532:{"value":"1F614","name":"PENSIVE FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude14"},128533:{"value":"1F615","name":"CONFUSED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude15"},128534:{"value":"1F616","name":"CONFOUNDED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude16"},128535:{"value":"1F617","name":"KISSING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude17"},128536:{"value":"1F618","name":"FACE THROWING A KISS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude18"},128537:{"value":"1F619","name":"KISSING FACE WITH SMILING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude19"},128538:{"value":"1F61A","name":"KISSING FACE WITH CLOSED EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude1a"},128539:{"value":"1F61B","name":"FACE WITH STUCK-OUT TONGUE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude1b"},128540:{"value":"1F61C","name":"FACE WITH STUCK-OUT TONGUE AND WINKING EYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude1c"},128541:{"value":"1F61D","name":"FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude1d"},128542:{"value":"1F61E","name":"DISAPPOINTED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude1e"},128543:{"value":"1F61F","name":"WORRIED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude1f"},128544:{"value":"1F620","name":"ANGRY FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude20"},128545:{"value":"1F621","name":"POUTING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude21"},128546:{"value":"1F622","name":"CRYING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude22"},128547:{"value":"1F623","name":"PERSEVERING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude23"},128548:{"value":"1F624","name":"FACE WITH LOOK OF TRIUMPH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude24"},128549:{"value":"1F625","name":"DISAPPOINTED BUT RELIEVED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude25"},128550:{"value":"1F626","name":"FROWNING FACE WITH OPEN MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude26"},128551:{"value":"1F627","name":"ANGUISHED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude27"},128552:{"value":"1F628","name":"FEARFUL FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude28"},128553:{"value":"1F629","name":"WEARY FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude29"},128554:{"value":"1F62A","name":"SLEEPY FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude2a"},128555:{"value":"1F62B","name":"TIRED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude2b"},128556:{"value":"1F62C","name":"GRIMACING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude2c"},128557:{"value":"1F62D","name":"LOUDLY CRYING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude2d"},128558:{"value":"1F62E","name":"FACE WITH OPEN MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude2e"},128559:{"value":"1F62F","name":"HUSHED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude2f"},128560:{"value":"1F630","name":"FACE WITH OPEN MOUTH AND COLD SWEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude30"},128561:{"value":"1F631","name":"FACE SCREAMING IN FEAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude31"},128562:{"value":"1F632","name":"ASTONISHED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude32"},128563:{"value":"1F633","name":"FLUSHED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude33"},128564:{"value":"1F634","name":"SLEEPING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude34"},128565:{"value":"1F635","name":"DIZZY FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude35"},128566:{"value":"1F636","name":"FACE WITHOUT MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude36"},128567:{"value":"1F637","name":"FACE WITH MEDICAL MASK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude37"},128568:{"value":"1F638","name":"GRINNING CAT FACE WITH SMILING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude38"},128569:{"value":"1F639","name":"CAT FACE WITH TEARS OF JOY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude39"},128570:{"value":"1F63A","name":"SMILING CAT FACE WITH OPEN MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude3a"},128571:{"value":"1F63B","name":"SMILING CAT FACE WITH HEART-SHAPED EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude3b"},128572:{"value":"1F63C","name":"CAT FACE WITH WRY SMILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude3c"},128573:{"value":"1F63D","name":"KISSING CAT FACE WITH CLOSED EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude3d"},128574:{"value":"1F63E","name":"POUTING CAT FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude3e"},128575:{"value":"1F63F","name":"CRYING CAT FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude3f"},128576:{"value":"1F640","name":"WEARY CAT FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude40"},128577:{"value":"1F641","name":"SLIGHTLY FROWNING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude41"},128578:{"value":"1F642","name":"SLIGHTLY SMILING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude42"},128579:{"value":"1F643","name":"UPSIDE-DOWN FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude43"},128580:{"value":"1F644","name":"FACE WITH ROLLING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude44"},128581:{"value":"1F645","name":"FACE WITH NO GOOD GESTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude45"},128582:{"value":"1F646","name":"FACE WITH OK GESTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude46"},128583:{"value":"1F647","name":"PERSON BOWING DEEPLY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude47"},128584:{"value":"1F648","name":"SEE-NO-EVIL MONKEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude48"},128585:{"value":"1F649","name":"HEAR-NO-EVIL MONKEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude49"},128586:{"value":"1F64A","name":"SPEAK-NO-EVIL MONKEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude4a"},128587:{"value":"1F64B","name":"HAPPY PERSON RAISING ONE HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude4b"},128588:{"value":"1F64C","name":"PERSON RAISING BOTH HANDS IN CELEBRATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude4c"},128589:{"value":"1F64D","name":"PERSON FROWNING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude4d"},128590:{"value":"1F64E","name":"PERSON WITH POUTING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude4e"},128591:{"value":"1F64F","name":"PERSON WITH FOLDED HANDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude4f"},128592:{"value":"1F650","name":"NORTH WEST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude50"},128593:{"value":"1F651","name":"SOUTH WEST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude51"},128594:{"value":"1F652","name":"NORTH EAST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude52"},128595:{"value":"1F653","name":"SOUTH EAST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude53"},128596:{"value":"1F654","name":"TURNED NORTH WEST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude54"},128597:{"value":"1F655","name":"TURNED SOUTH WEST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude55"},128598:{"value":"1F656","name":"TURNED NORTH EAST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude56"},128599:{"value":"1F657","name":"TURNED SOUTH EAST POINTING LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude57"},128600:{"value":"1F658","name":"NORTH WEST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude58"},128601:{"value":"1F659","name":"SOUTH WEST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude59"},128602:{"value":"1F65A","name":"NORTH EAST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude5a"},128603:{"value":"1F65B","name":"SOUTH EAST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude5b"},128604:{"value":"1F65C","name":"HEAVY NORTH WEST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude5c"},128605:{"value":"1F65D","name":"HEAVY SOUTH WEST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude5d"},128606:{"value":"1F65E","name":"HEAVY NORTH EAST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude5e"},128607:{"value":"1F65F","name":"HEAVY SOUTH EAST POINTING VINE LEAF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude5f"},128608:{"value":"1F660","name":"NORTH WEST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude60"},128609:{"value":"1F661","name":"SOUTH WEST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude61"},128610:{"value":"1F662","name":"NORTH EAST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude62"},128611:{"value":"1F663","name":"SOUTH EAST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude63"},128612:{"value":"1F664","name":"HEAVY NORTH WEST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude64"},128613:{"value":"1F665","name":"HEAVY SOUTH WEST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude65"},128614:{"value":"1F666","name":"HEAVY NORTH EAST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude66"},128615:{"value":"1F667","name":"HEAVY SOUTH EAST POINTING BUD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude67"},128616:{"value":"1F668","name":"HOLLOW QUILT SQUARE ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude68"},128617:{"value":"1F669","name":"HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude69"},128618:{"value":"1F66A","name":"SOLID QUILT SQUARE ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude6a"},128619:{"value":"1F66B","name":"SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude6b"},128620:{"value":"1F66C","name":"LEFTWARDS ROCKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude6c"},128621:{"value":"1F66D","name":"UPWARDS ROCKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude6d"},128622:{"value":"1F66E","name":"RIGHTWARDS ROCKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude6e"},128623:{"value":"1F66F","name":"DOWNWARDS ROCKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude6f"},128624:{"value":"1F670","name":"SCRIPT LIGATURE ET ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude70"},128625:{"value":"1F671","name":"HEAVY SCRIPT LIGATURE ET ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude71"},128626:{"value":"1F672","name":"LIGATURE OPEN ET ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude72"},128627:{"value":"1F673","name":"HEAVY LIGATURE OPEN ET ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude73"},128628:{"value":"1F674","name":"HEAVY AMPERSAND ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude74"},128629:{"value":"1F675","name":"SWASH AMPERSAND ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude75"},128630:{"value":"1F676","name":"SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude76"},128631:{"value":"1F677","name":"SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude77"},128632:{"value":"1F678","name":"SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude78"},128633:{"value":"1F679","name":"HEAVY INTERROBANG ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude79"},128634:{"value":"1F67A","name":"SANS-SERIF INTERROBANG ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude7a"},128635:{"value":"1F67B","name":"HEAVY SANS-SERIF INTERROBANG ORNAMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude7b"},128636:{"value":"1F67C","name":"VERY HEAVY SOLIDUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude7c"},128637:{"value":"1F67D","name":"VERY HEAVY REVERSE SOLIDUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude7d"},128638:{"value":"1F67E","name":"CHECKER BOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude7e"},128639:{"value":"1F67F","name":"REVERSE CHECKER BOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude7f"},128640:{"value":"1F680","name":"ROCKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude80"},128641:{"value":"1F681","name":"HELICOPTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude81"},128642:{"value":"1F682","name":"STEAM LOCOMOTIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude82"},128643:{"value":"1F683","name":"RAILWAY CAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude83"},128644:{"value":"1F684","name":"HIGH-SPEED TRAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude84"},128645:{"value":"1F685","name":"HIGH-SPEED TRAIN WITH BULLET NOSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude85"},128646:{"value":"1F686","name":"TRAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude86"},128647:{"value":"1F687","name":"METRO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude87"},128648:{"value":"1F688","name":"LIGHT RAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude88"},128649:{"value":"1F689","name":"STATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude89"},128650:{"value":"1F68A","name":"TRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude8a"},128651:{"value":"1F68B","name":"TRAM CAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude8b"},128652:{"value":"1F68C","name":"BUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude8c"},128653:{"value":"1F68D","name":"ONCOMING BUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude8d"},128654:{"value":"1F68E","name":"TROLLEYBUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude8e"},128655:{"value":"1F68F","name":"BUS STOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude8f"},128656:{"value":"1F690","name":"MINIBUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude90"},128657:{"value":"1F691","name":"AMBULANCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude91"},128658:{"value":"1F692","name":"FIRE ENGINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude92"},128659:{"value":"1F693","name":"POLICE CAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude93"},128660:{"value":"1F694","name":"ONCOMING POLICE CAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude94"},128661:{"value":"1F695","name":"TAXI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude95"},128662:{"value":"1F696","name":"ONCOMING TAXI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude96"},128663:{"value":"1F697","name":"AUTOMOBILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude97"},128664:{"value":"1F698","name":"ONCOMING AUTOMOBILE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude98"},128665:{"value":"1F699","name":"RECREATIONAL VEHICLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude99"},128666:{"value":"1F69A","name":"DELIVERY TRUCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude9a"},128667:{"value":"1F69B","name":"ARTICULATED LORRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude9b"},128668:{"value":"1F69C","name":"TRACTOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude9c"},128669:{"value":"1F69D","name":"MONORAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude9d"},128670:{"value":"1F69E","name":"MOUNTAIN RAILWAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude9e"},128671:{"value":"1F69F","name":"SUSPENSION RAILWAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\ude9f"},128672:{"value":"1F6A0","name":"MOUNTAIN CABLEWAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea0"},128673:{"value":"1F6A1","name":"AERIAL TRAMWAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea1"},128674:{"value":"1F6A2","name":"SHIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea2"},128675:{"value":"1F6A3","name":"ROWBOAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea3"},128676:{"value":"1F6A4","name":"SPEEDBOAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea4"},128677:{"value":"1F6A5","name":"HORIZONTAL TRAFFIC LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea5"},128678:{"value":"1F6A6","name":"VERTICAL TRAFFIC LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea6"},128679:{"value":"1F6A7","name":"CONSTRUCTION SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea7"},128680:{"value":"1F6A8","name":"POLICE CARS REVOLVING LIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea8"},128681:{"value":"1F6A9","name":"TRIANGULAR FLAG ON POST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udea9"},128682:{"value":"1F6AA","name":"DOOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeaa"},128683:{"value":"1F6AB","name":"NO ENTRY SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeab"},128684:{"value":"1F6AC","name":"SMOKING SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeac"},128685:{"value":"1F6AD","name":"NO SMOKING SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udead"},128686:{"value":"1F6AE","name":"PUT LITTER IN ITS PLACE SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeae"},128687:{"value":"1F6AF","name":"DO NOT LITTER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeaf"},128688:{"value":"1F6B0","name":"POTABLE WATER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb0"},128689:{"value":"1F6B1","name":"NON-POTABLE WATER SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb1"},128690:{"value":"1F6B2","name":"BICYCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb2"},128691:{"value":"1F6B3","name":"NO BICYCLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb3"},128692:{"value":"1F6B4","name":"BICYCLIST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb4"},128693:{"value":"1F6B5","name":"MOUNTAIN BICYCLIST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb5"},128694:{"value":"1F6B6","name":"PEDESTRIAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb6"},128695:{"value":"1F6B7","name":"NO PEDESTRIANS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb7"},128696:{"value":"1F6B8","name":"CHILDREN CROSSING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb8"},128697:{"value":"1F6B9","name":"MENS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeb9"},128698:{"value":"1F6BA","name":"WOMENS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeba"},128699:{"value":"1F6BB","name":"RESTROOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udebb"},128700:{"value":"1F6BC","name":"BABY SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udebc"},128701:{"value":"1F6BD","name":"TOILET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udebd"},128702:{"value":"1F6BE","name":"WATER CLOSET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udebe"},128703:{"value":"1F6BF","name":"SHOWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udebf"},128704:{"value":"1F6C0","name":"BATH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec0"},128705:{"value":"1F6C1","name":"BATHTUB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec1"},128706:{"value":"1F6C2","name":"PASSPORT CONTROL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec2"},128707:{"value":"1F6C3","name":"CUSTOMS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec3"},128708:{"value":"1F6C4","name":"BAGGAGE CLAIM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec4"},128709:{"value":"1F6C5","name":"LEFT LUGGAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec5"},128710:{"value":"1F6C6","name":"TRIANGLE WITH ROUNDED CORNERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec6"},128711:{"value":"1F6C7","name":"PROHIBITED SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec7"},128712:{"value":"1F6C8","name":"CIRCLED INFORMATION SOURCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec8"},128713:{"value":"1F6C9","name":"BOYS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udec9"},128714:{"value":"1F6CA","name":"GIRLS SYMBOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeca"},128715:{"value":"1F6CB","name":"COUCH AND LAMP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udecb"},128716:{"value":"1F6CC","name":"SLEEPING ACCOMMODATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udecc"},128717:{"value":"1F6CD","name":"SHOPPING BAGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udecd"},128718:{"value":"1F6CE","name":"BELLHOP BELL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udece"},128719:{"value":"1F6CF","name":"BED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udecf"},128720:{"value":"1F6D0","name":"PLACE OF WORSHIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded0"},128721:{"value":"1F6D1","name":"OCTAGONAL SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded1"},128722:{"value":"1F6D2","name":"SHOPPING TROLLEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded2"},128723:{"value":"1F6D3","name":"STUPA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded3"},128724:{"value":"1F6D4","name":"PAGODA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded4"},128725:{"value":"1F6D5","name":"HINDU TEMPLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded5"},128726:{"value":"1F6D6","name":"HUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded6"},128727:{"value":"1F6D7","name":"ELEVATOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\uded7"},128733:{"value":"1F6DD","name":"PLAYGROUND SLIDE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udedd"},128734:{"value":"1F6DE","name":"WHEEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udede"},128735:{"value":"1F6DF","name":"RING BUOY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udedf"},128736:{"value":"1F6E0","name":"HAMMER AND WRENCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee0"},128737:{"value":"1F6E1","name":"SHIELD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee1"},128738:{"value":"1F6E2","name":"OIL DRUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee2"},128739:{"value":"1F6E3","name":"MOTORWAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee3"},128740:{"value":"1F6E4","name":"RAILWAY TRACK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee4"},128741:{"value":"1F6E5","name":"MOTOR BOAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee5"},128742:{"value":"1F6E6","name":"UP-POINTING MILITARY AIRPLANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee6"},128743:{"value":"1F6E7","name":"UP-POINTING AIRPLANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee7"},128744:{"value":"1F6E8","name":"UP-POINTING SMALL AIRPLANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee8"},128745:{"value":"1F6E9","name":"SMALL AIRPLANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udee9"},128746:{"value":"1F6EA","name":"NORTHEAST-POINTING AIRPLANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeea"},128747:{"value":"1F6EB","name":"AIRPLANE DEPARTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeeb"},128748:{"value":"1F6EC","name":"AIRPLANE ARRIVING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udeec"},128752:{"value":"1F6F0","name":"SATELLITE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef0"},128753:{"value":"1F6F1","name":"ONCOMING FIRE ENGINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef1"},128754:{"value":"1F6F2","name":"DIESEL LOCOMOTIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef2"},128755:{"value":"1F6F3","name":"PASSENGER SHIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef3"},128756:{"value":"1F6F4","name":"SCOOTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef4"},128757:{"value":"1F6F5","name":"MOTOR SCOOTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef5"},128758:{"value":"1F6F6","name":"CANOE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef6"},128759:{"value":"1F6F7","name":"SLED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef7"},128760:{"value":"1F6F8","name":"FLYING SAUCER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef8"},128761:{"value":"1F6F9","name":"SKATEBOARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udef9"},128762:{"value":"1F6FA","name":"AUTO RICKSHAW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udefa"},128763:{"value":"1F6FB","name":"PICKUP TRUCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udefb"},128764:{"value":"1F6FC","name":"ROLLER SKATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udefc"},128768:{"value":"1F700","name":"ALCHEMICAL SYMBOL FOR QUINTESSENCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf00"},128769:{"value":"1F701","name":"ALCHEMICAL SYMBOL FOR AIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf01"},128770:{"value":"1F702","name":"ALCHEMICAL SYMBOL FOR FIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf02"},128771:{"value":"1F703","name":"ALCHEMICAL SYMBOL FOR EARTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf03"},128772:{"value":"1F704","name":"ALCHEMICAL SYMBOL FOR WATER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf04"},128773:{"value":"1F705","name":"ALCHEMICAL SYMBOL FOR AQUAFORTIS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf05"},128774:{"value":"1F706","name":"ALCHEMICAL SYMBOL FOR AQUA REGIA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf06"},128775:{"value":"1F707","name":"ALCHEMICAL SYMBOL FOR AQUA REGIA-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf07"},128776:{"value":"1F708","name":"ALCHEMICAL SYMBOL FOR AQUA VITAE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf08"},128777:{"value":"1F709","name":"ALCHEMICAL SYMBOL FOR AQUA VITAE-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf09"},128778:{"value":"1F70A","name":"ALCHEMICAL SYMBOL FOR VINEGAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf0a"},128779:{"value":"1F70B","name":"ALCHEMICAL SYMBOL FOR VINEGAR-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf0b"},128780:{"value":"1F70C","name":"ALCHEMICAL SYMBOL FOR VINEGAR-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf0c"},128781:{"value":"1F70D","name":"ALCHEMICAL SYMBOL FOR SULFUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf0d"},128782:{"value":"1F70E","name":"ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf0e"},128783:{"value":"1F70F","name":"ALCHEMICAL SYMBOL FOR BLACK SULFUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf0f"},128784:{"value":"1F710","name":"ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf10"},128785:{"value":"1F711","name":"ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf11"},128786:{"value":"1F712","name":"ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf12"},128787:{"value":"1F713","name":"ALCHEMICAL SYMBOL FOR CINNABAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf13"},128788:{"value":"1F714","name":"ALCHEMICAL SYMBOL FOR SALT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf14"},128789:{"value":"1F715","name":"ALCHEMICAL SYMBOL FOR NITRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf15"},128790:{"value":"1F716","name":"ALCHEMICAL SYMBOL FOR VITRIOL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf16"},128791:{"value":"1F717","name":"ALCHEMICAL SYMBOL FOR VITRIOL-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf17"},128792:{"value":"1F718","name":"ALCHEMICAL SYMBOL FOR ROCK SALT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf18"},128793:{"value":"1F719","name":"ALCHEMICAL SYMBOL FOR ROCK SALT-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf19"},128794:{"value":"1F71A","name":"ALCHEMICAL SYMBOL FOR GOLD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf1a"},128795:{"value":"1F71B","name":"ALCHEMICAL SYMBOL FOR SILVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf1b"},128796:{"value":"1F71C","name":"ALCHEMICAL SYMBOL FOR IRON ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf1c"},128797:{"value":"1F71D","name":"ALCHEMICAL SYMBOL FOR IRON ORE-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf1d"},128798:{"value":"1F71E","name":"ALCHEMICAL SYMBOL FOR CROCUS OF IRON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf1e"},128799:{"value":"1F71F","name":"ALCHEMICAL SYMBOL FOR REGULUS OF IRON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf1f"},128800:{"value":"1F720","name":"ALCHEMICAL SYMBOL FOR COPPER ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf20"},128801:{"value":"1F721","name":"ALCHEMICAL SYMBOL FOR IRON-COPPER ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf21"},128802:{"value":"1F722","name":"ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf22"},128803:{"value":"1F723","name":"ALCHEMICAL SYMBOL FOR CROCUS OF COPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf23"},128804:{"value":"1F724","name":"ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf24"},128805:{"value":"1F725","name":"ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf25"},128806:{"value":"1F726","name":"ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf26"},128807:{"value":"1F727","name":"ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf27"},128808:{"value":"1F728","name":"ALCHEMICAL SYMBOL FOR VERDIGRIS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf28"},128809:{"value":"1F729","name":"ALCHEMICAL SYMBOL FOR TIN ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf29"},128810:{"value":"1F72A","name":"ALCHEMICAL SYMBOL FOR LEAD ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf2a"},128811:{"value":"1F72B","name":"ALCHEMICAL SYMBOL FOR ANTIMONY ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf2b"},128812:{"value":"1F72C","name":"ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf2c"},128813:{"value":"1F72D","name":"ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf2d"},128814:{"value":"1F72E","name":"ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf2e"},128815:{"value":"1F72F","name":"ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf2f"},128816:{"value":"1F730","name":"ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf30"},128817:{"value":"1F731","name":"ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf31"},128818:{"value":"1F732","name":"ALCHEMICAL SYMBOL FOR REGULUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf32"},128819:{"value":"1F733","name":"ALCHEMICAL SYMBOL FOR REGULUS-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf33"},128820:{"value":"1F734","name":"ALCHEMICAL SYMBOL FOR REGULUS-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf34"},128821:{"value":"1F735","name":"ALCHEMICAL SYMBOL FOR REGULUS-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf35"},128822:{"value":"1F736","name":"ALCHEMICAL SYMBOL FOR ALKALI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf36"},128823:{"value":"1F737","name":"ALCHEMICAL SYMBOL FOR ALKALI-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf37"},128824:{"value":"1F738","name":"ALCHEMICAL SYMBOL FOR MARCASITE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf38"},128825:{"value":"1F739","name":"ALCHEMICAL SYMBOL FOR SAL-AMMONIAC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf39"},128826:{"value":"1F73A","name":"ALCHEMICAL SYMBOL FOR ARSENIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf3a"},128827:{"value":"1F73B","name":"ALCHEMICAL SYMBOL FOR REALGAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf3b"},128828:{"value":"1F73C","name":"ALCHEMICAL SYMBOL FOR REALGAR-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf3c"},128829:{"value":"1F73D","name":"ALCHEMICAL SYMBOL FOR AURIPIGMENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf3d"},128830:{"value":"1F73E","name":"ALCHEMICAL SYMBOL FOR BISMUTH ORE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf3e"},128831:{"value":"1F73F","name":"ALCHEMICAL SYMBOL FOR TARTAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf3f"},128832:{"value":"1F740","name":"ALCHEMICAL SYMBOL FOR TARTAR-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf40"},128833:{"value":"1F741","name":"ALCHEMICAL SYMBOL FOR QUICK LIME","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf41"},128834:{"value":"1F742","name":"ALCHEMICAL SYMBOL FOR BORAX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf42"},128835:{"value":"1F743","name":"ALCHEMICAL SYMBOL FOR BORAX-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf43"},128836:{"value":"1F744","name":"ALCHEMICAL SYMBOL FOR BORAX-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf44"},128837:{"value":"1F745","name":"ALCHEMICAL SYMBOL FOR ALUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf45"},128838:{"value":"1F746","name":"ALCHEMICAL SYMBOL FOR OIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf46"},128839:{"value":"1F747","name":"ALCHEMICAL SYMBOL FOR SPIRIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf47"},128840:{"value":"1F748","name":"ALCHEMICAL SYMBOL FOR TINCTURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf48"},128841:{"value":"1F749","name":"ALCHEMICAL SYMBOL FOR GUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf49"},128842:{"value":"1F74A","name":"ALCHEMICAL SYMBOL FOR WAX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf4a"},128843:{"value":"1F74B","name":"ALCHEMICAL SYMBOL FOR POWDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf4b"},128844:{"value":"1F74C","name":"ALCHEMICAL SYMBOL FOR CALX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf4c"},128845:{"value":"1F74D","name":"ALCHEMICAL SYMBOL FOR TUTTY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf4d"},128846:{"value":"1F74E","name":"ALCHEMICAL SYMBOL FOR CAPUT MORTUUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf4e"},128847:{"value":"1F74F","name":"ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf4f"},128848:{"value":"1F750","name":"ALCHEMICAL SYMBOL FOR CADUCEUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf50"},128849:{"value":"1F751","name":"ALCHEMICAL SYMBOL FOR TRIDENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf51"},128850:{"value":"1F752","name":"ALCHEMICAL SYMBOL FOR STARRED TRIDENT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf52"},128851:{"value":"1F753","name":"ALCHEMICAL SYMBOL FOR LODESTONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf53"},128852:{"value":"1F754","name":"ALCHEMICAL SYMBOL FOR SOAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf54"},128853:{"value":"1F755","name":"ALCHEMICAL SYMBOL FOR URINE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf55"},128854:{"value":"1F756","name":"ALCHEMICAL SYMBOL FOR HORSE DUNG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf56"},128855:{"value":"1F757","name":"ALCHEMICAL SYMBOL FOR ASHES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf57"},128856:{"value":"1F758","name":"ALCHEMICAL SYMBOL FOR POT ASHES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf58"},128857:{"value":"1F759","name":"ALCHEMICAL SYMBOL FOR BRICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf59"},128858:{"value":"1F75A","name":"ALCHEMICAL SYMBOL FOR POWDERED BRICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf5a"},128859:{"value":"1F75B","name":"ALCHEMICAL SYMBOL FOR AMALGAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf5b"},128860:{"value":"1F75C","name":"ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf5c"},128861:{"value":"1F75D","name":"ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf5d"},128862:{"value":"1F75E","name":"ALCHEMICAL SYMBOL FOR SUBLIMATION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf5e"},128863:{"value":"1F75F","name":"ALCHEMICAL SYMBOL FOR PRECIPITATE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf5f"},128864:{"value":"1F760","name":"ALCHEMICAL SYMBOL FOR DISTILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf60"},128865:{"value":"1F761","name":"ALCHEMICAL SYMBOL FOR DISSOLVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf61"},128866:{"value":"1F762","name":"ALCHEMICAL SYMBOL FOR DISSOLVE-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf62"},128867:{"value":"1F763","name":"ALCHEMICAL SYMBOL FOR PURIFY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf63"},128868:{"value":"1F764","name":"ALCHEMICAL SYMBOL FOR PUTREFACTION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf64"},128869:{"value":"1F765","name":"ALCHEMICAL SYMBOL FOR CRUCIBLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf65"},128870:{"value":"1F766","name":"ALCHEMICAL SYMBOL FOR CRUCIBLE-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf66"},128871:{"value":"1F767","name":"ALCHEMICAL SYMBOL FOR CRUCIBLE-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf67"},128872:{"value":"1F768","name":"ALCHEMICAL SYMBOL FOR CRUCIBLE-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf68"},128873:{"value":"1F769","name":"ALCHEMICAL SYMBOL FOR CRUCIBLE-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf69"},128874:{"value":"1F76A","name":"ALCHEMICAL SYMBOL FOR ALEMBIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf6a"},128875:{"value":"1F76B","name":"ALCHEMICAL SYMBOL FOR BATH OF MARY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf6b"},128876:{"value":"1F76C","name":"ALCHEMICAL SYMBOL FOR BATH OF VAPOURS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf6c"},128877:{"value":"1F76D","name":"ALCHEMICAL SYMBOL FOR RETORT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf6d"},128878:{"value":"1F76E","name":"ALCHEMICAL SYMBOL FOR HOUR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf6e"},128879:{"value":"1F76F","name":"ALCHEMICAL SYMBOL FOR NIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf6f"},128880:{"value":"1F770","name":"ALCHEMICAL SYMBOL FOR DAY-NIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf70"},128881:{"value":"1F771","name":"ALCHEMICAL SYMBOL FOR MONTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf71"},128882:{"value":"1F772","name":"ALCHEMICAL SYMBOL FOR HALF DRAM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf72"},128883:{"value":"1F773","name":"ALCHEMICAL SYMBOL FOR HALF OUNCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf73"},128896:{"value":"1F780","name":"BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf80"},128897:{"value":"1F781","name":"BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf81"},128898:{"value":"1F782","name":"BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf82"},128899:{"value":"1F783","name":"BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf83"},128900:{"value":"1F784","name":"BLACK SLIGHTLY SMALL CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf84"},128901:{"value":"1F785","name":"MEDIUM BOLD WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf85"},128902:{"value":"1F786","name":"BOLD WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf86"},128903:{"value":"1F787","name":"HEAVY WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf87"},128904:{"value":"1F788","name":"VERY HEAVY WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf88"},128905:{"value":"1F789","name":"EXTREMELY HEAVY WHITE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf89"},128906:{"value":"1F78A","name":"WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf8a"},128907:{"value":"1F78B","name":"ROUND TARGET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf8b"},128908:{"value":"1F78C","name":"BLACK TINY SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf8c"},128909:{"value":"1F78D","name":"BLACK SLIGHTLY SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf8d"},128910:{"value":"1F78E","name":"LIGHT WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf8e"},128911:{"value":"1F78F","name":"MEDIUM WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf8f"},128912:{"value":"1F790","name":"BOLD WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf90"},128913:{"value":"1F791","name":"HEAVY WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf91"},128914:{"value":"1F792","name":"VERY HEAVY WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf92"},128915:{"value":"1F793","name":"EXTREMELY HEAVY WHITE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf93"},128916:{"value":"1F794","name":"WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf94"},128917:{"value":"1F795","name":"WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf95"},128918:{"value":"1F796","name":"SQUARE TARGET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf96"},128919:{"value":"1F797","name":"BLACK TINY DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf97"},128920:{"value":"1F798","name":"BLACK VERY SMALL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf98"},128921:{"value":"1F799","name":"BLACK MEDIUM SMALL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf99"},128922:{"value":"1F79A","name":"WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf9a"},128923:{"value":"1F79B","name":"WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf9b"},128924:{"value":"1F79C","name":"DIAMOND TARGET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf9c"},128925:{"value":"1F79D","name":"BLACK TINY LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf9d"},128926:{"value":"1F79E","name":"BLACK VERY SMALL LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf9e"},128927:{"value":"1F79F","name":"BLACK MEDIUM SMALL LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udf9f"},128928:{"value":"1F7A0","name":"WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa0"},128929:{"value":"1F7A1","name":"THIN GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa1"},128930:{"value":"1F7A2","name":"LIGHT GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa2"},128931:{"value":"1F7A3","name":"MEDIUM GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa3"},128932:{"value":"1F7A4","name":"BOLD GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa4"},128933:{"value":"1F7A5","name":"VERY BOLD GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa5"},128934:{"value":"1F7A6","name":"VERY HEAVY GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa6"},128935:{"value":"1F7A7","name":"EXTREMELY HEAVY GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa7"},128936:{"value":"1F7A8","name":"THIN SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa8"},128937:{"value":"1F7A9","name":"LIGHT SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfa9"},128938:{"value":"1F7AA","name":"MEDIUM SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfaa"},128939:{"value":"1F7AB","name":"BOLD SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfab"},128940:{"value":"1F7AC","name":"HEAVY SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfac"},128941:{"value":"1F7AD","name":"VERY HEAVY SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfad"},128942:{"value":"1F7AE","name":"EXTREMELY HEAVY SALTIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfae"},128943:{"value":"1F7AF","name":"LIGHT FIVE SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfaf"},128944:{"value":"1F7B0","name":"MEDIUM FIVE SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb0"},128945:{"value":"1F7B1","name":"BOLD FIVE SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb1"},128946:{"value":"1F7B2","name":"HEAVY FIVE SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb2"},128947:{"value":"1F7B3","name":"VERY HEAVY FIVE SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb3"},128948:{"value":"1F7B4","name":"EXTREMELY HEAVY FIVE SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb4"},128949:{"value":"1F7B5","name":"LIGHT SIX SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb5"},128950:{"value":"1F7B6","name":"MEDIUM SIX SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb6"},128951:{"value":"1F7B7","name":"BOLD SIX SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb7"},128952:{"value":"1F7B8","name":"HEAVY SIX SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb8"},128953:{"value":"1F7B9","name":"VERY HEAVY SIX SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfb9"},128954:{"value":"1F7BA","name":"EXTREMELY HEAVY SIX SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfba"},128955:{"value":"1F7BB","name":"LIGHT EIGHT SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfbb"},128956:{"value":"1F7BC","name":"MEDIUM EIGHT SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfbc"},128957:{"value":"1F7BD","name":"BOLD EIGHT SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfbd"},128958:{"value":"1F7BE","name":"HEAVY EIGHT SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfbe"},128959:{"value":"1F7BF","name":"VERY HEAVY EIGHT SPOKED ASTERISK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfbf"},128960:{"value":"1F7C0","name":"LIGHT THREE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc0"},128961:{"value":"1F7C1","name":"MEDIUM THREE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc1"},128962:{"value":"1F7C2","name":"THREE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc2"},128963:{"value":"1F7C3","name":"MEDIUM THREE POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc3"},128964:{"value":"1F7C4","name":"LIGHT FOUR POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc4"},128965:{"value":"1F7C5","name":"MEDIUM FOUR POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc5"},128966:{"value":"1F7C6","name":"FOUR POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc6"},128967:{"value":"1F7C7","name":"MEDIUM FOUR POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc7"},128968:{"value":"1F7C8","name":"REVERSE LIGHT FOUR POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc8"},128969:{"value":"1F7C9","name":"LIGHT FIVE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfc9"},128970:{"value":"1F7CA","name":"HEAVY FIVE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfca"},128971:{"value":"1F7CB","name":"MEDIUM SIX POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfcb"},128972:{"value":"1F7CC","name":"HEAVY SIX POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfcc"},128973:{"value":"1F7CD","name":"SIX POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfcd"},128974:{"value":"1F7CE","name":"MEDIUM EIGHT POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfce"},128975:{"value":"1F7CF","name":"HEAVY EIGHT POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfcf"},128976:{"value":"1F7D0","name":"VERY HEAVY EIGHT POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd0"},128977:{"value":"1F7D1","name":"HEAVY EIGHT POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd1"},128978:{"value":"1F7D2","name":"LIGHT TWELVE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd2"},128979:{"value":"1F7D3","name":"HEAVY TWELVE POINTED BLACK STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd3"},128980:{"value":"1F7D4","name":"HEAVY TWELVE POINTED PINWHEEL STAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd4"},128981:{"value":"1F7D5","name":"CIRCLED TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd5"},128982:{"value":"1F7D6","name":"NEGATIVE CIRCLED TRIANGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd6"},128983:{"value":"1F7D7","name":"CIRCLED SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd7"},128984:{"value":"1F7D8","name":"NEGATIVE CIRCLED SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfd8"},128992:{"value":"1F7E0","name":"LARGE ORANGE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe0"},128993:{"value":"1F7E1","name":"LARGE YELLOW CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe1"},128994:{"value":"1F7E2","name":"LARGE GREEN CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe2"},128995:{"value":"1F7E3","name":"LARGE PURPLE CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe3"},128996:{"value":"1F7E4","name":"LARGE BROWN CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe4"},128997:{"value":"1F7E5","name":"LARGE RED SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe5"},128998:{"value":"1F7E6","name":"LARGE BLUE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe6"},128999:{"value":"1F7E7","name":"LARGE ORANGE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe7"},129000:{"value":"1F7E8","name":"LARGE YELLOW SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe8"},129001:{"value":"1F7E9","name":"LARGE GREEN SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfe9"},129002:{"value":"1F7EA","name":"LARGE PURPLE SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfea"},129003:{"value":"1F7EB","name":"LARGE BROWN SQUARE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udfeb"},129008:{"value":"1F7F0","name":"HEAVY EQUALS SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83d\udff0"},129024:{"value":"1F800","name":"LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc00"},129025:{"value":"1F801","name":"UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc01"},129026:{"value":"1F802","name":"RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc02"},129027:{"value":"1F803","name":"DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc03"},129028:{"value":"1F804","name":"LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc04"},129029:{"value":"1F805","name":"UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc05"},129030:{"value":"1F806","name":"RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc06"},129031:{"value":"1F807","name":"DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc07"},129032:{"value":"1F808","name":"LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc08"},129033:{"value":"1F809","name":"UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc09"},129034:{"value":"1F80A","name":"RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc0a"},129035:{"value":"1F80B","name":"DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc0b"},129040:{"value":"1F810","name":"LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc10"},129041:{"value":"1F811","name":"UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc11"},129042:{"value":"1F812","name":"RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc12"},129043:{"value":"1F813","name":"DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc13"},129044:{"value":"1F814","name":"LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc14"},129045:{"value":"1F815","name":"UPWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc15"},129046:{"value":"1F816","name":"RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc16"},129047:{"value":"1F817","name":"DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc17"},129048:{"value":"1F818","name":"HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc18"},129049:{"value":"1F819","name":"HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc19"},129050:{"value":"1F81A","name":"HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc1a"},129051:{"value":"1F81B","name":"HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc1b"},129052:{"value":"1F81C","name":"HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc1c"},129053:{"value":"1F81D","name":"HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc1d"},129054:{"value":"1F81E","name":"HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc1e"},129055:{"value":"1F81F","name":"HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc1f"},129056:{"value":"1F820","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc20"},129057:{"value":"1F821","name":"UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc21"},129058:{"value":"1F822","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc22"},129059:{"value":"1F823","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc23"},129060:{"value":"1F824","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc24"},129061:{"value":"1F825","name":"UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc25"},129062:{"value":"1F826","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc26"},129063:{"value":"1F827","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc27"},129064:{"value":"1F828","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc28"},129065:{"value":"1F829","name":"UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc29"},129066:{"value":"1F82A","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc2a"},129067:{"value":"1F82B","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc2b"},129068:{"value":"1F82C","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc2c"},129069:{"value":"1F82D","name":"UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc2d"},129070:{"value":"1F82E","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc2e"},129071:{"value":"1F82F","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc2f"},129072:{"value":"1F830","name":"LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc30"},129073:{"value":"1F831","name":"UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc31"},129074:{"value":"1F832","name":"RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc32"},129075:{"value":"1F833","name":"DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc33"},129076:{"value":"1F834","name":"LEFTWARDS FINGER-POST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc34"},129077:{"value":"1F835","name":"UPWARDS FINGER-POST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc35"},129078:{"value":"1F836","name":"RIGHTWARDS FINGER-POST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc36"},129079:{"value":"1F837","name":"DOWNWARDS FINGER-POST ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc37"},129080:{"value":"1F838","name":"LEFTWARDS SQUARED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc38"},129081:{"value":"1F839","name":"UPWARDS SQUARED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc39"},129082:{"value":"1F83A","name":"RIGHTWARDS SQUARED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc3a"},129083:{"value":"1F83B","name":"DOWNWARDS SQUARED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc3b"},129084:{"value":"1F83C","name":"LEFTWARDS COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc3c"},129085:{"value":"1F83D","name":"UPWARDS COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc3d"},129086:{"value":"1F83E","name":"RIGHTWARDS COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc3e"},129087:{"value":"1F83F","name":"DOWNWARDS COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc3f"},129088:{"value":"1F840","name":"LEFTWARDS HEAVY COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc40"},129089:{"value":"1F841","name":"UPWARDS HEAVY COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc41"},129090:{"value":"1F842","name":"RIGHTWARDS HEAVY COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc42"},129091:{"value":"1F843","name":"DOWNWARDS HEAVY COMPRESSED ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc43"},129092:{"value":"1F844","name":"LEFTWARDS HEAVY ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc44"},129093:{"value":"1F845","name":"UPWARDS HEAVY ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc45"},129094:{"value":"1F846","name":"RIGHTWARDS HEAVY ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc46"},129095:{"value":"1F847","name":"DOWNWARDS HEAVY ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc47"},129104:{"value":"1F850","name":"LEFTWARDS SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc50"},129105:{"value":"1F851","name":"UPWARDS SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc51"},129106:{"value":"1F852","name":"RIGHTWARDS SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc52"},129107:{"value":"1F853","name":"DOWNWARDS SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc53"},129108:{"value":"1F854","name":"NORTH WEST SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc54"},129109:{"value":"1F855","name":"NORTH EAST SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc55"},129110:{"value":"1F856","name":"SOUTH EAST SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc56"},129111:{"value":"1F857","name":"SOUTH WEST SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc57"},129112:{"value":"1F858","name":"LEFT RIGHT SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc58"},129113:{"value":"1F859","name":"UP DOWN SANS-SERIF ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc59"},129120:{"value":"1F860","name":"WIDE-HEADED LEFTWARDS LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc60"},129121:{"value":"1F861","name":"WIDE-HEADED UPWARDS LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc61"},129122:{"value":"1F862","name":"WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc62"},129123:{"value":"1F863","name":"WIDE-HEADED DOWNWARDS LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc63"},129124:{"value":"1F864","name":"WIDE-HEADED NORTH WEST LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc64"},129125:{"value":"1F865","name":"WIDE-HEADED NORTH EAST LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc65"},129126:{"value":"1F866","name":"WIDE-HEADED SOUTH EAST LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc66"},129127:{"value":"1F867","name":"WIDE-HEADED SOUTH WEST LIGHT BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc67"},129128:{"value":"1F868","name":"WIDE-HEADED LEFTWARDS BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc68"},129129:{"value":"1F869","name":"WIDE-HEADED UPWARDS BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc69"},129130:{"value":"1F86A","name":"WIDE-HEADED RIGHTWARDS BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc6a"},129131:{"value":"1F86B","name":"WIDE-HEADED DOWNWARDS BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc6b"},129132:{"value":"1F86C","name":"WIDE-HEADED NORTH WEST BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc6c"},129133:{"value":"1F86D","name":"WIDE-HEADED NORTH EAST BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc6d"},129134:{"value":"1F86E","name":"WIDE-HEADED SOUTH EAST BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc6e"},129135:{"value":"1F86F","name":"WIDE-HEADED SOUTH WEST BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc6f"},129136:{"value":"1F870","name":"WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc70"},129137:{"value":"1F871","name":"WIDE-HEADED UPWARDS MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc71"},129138:{"value":"1F872","name":"WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc72"},129139:{"value":"1F873","name":"WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc73"},129140:{"value":"1F874","name":"WIDE-HEADED NORTH WEST MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc74"},129141:{"value":"1F875","name":"WIDE-HEADED NORTH EAST MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc75"},129142:{"value":"1F876","name":"WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc76"},129143:{"value":"1F877","name":"WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc77"},129144:{"value":"1F878","name":"WIDE-HEADED LEFTWARDS HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc78"},129145:{"value":"1F879","name":"WIDE-HEADED UPWARDS HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc79"},129146:{"value":"1F87A","name":"WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc7a"},129147:{"value":"1F87B","name":"WIDE-HEADED DOWNWARDS HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc7b"},129148:{"value":"1F87C","name":"WIDE-HEADED NORTH WEST HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc7c"},129149:{"value":"1F87D","name":"WIDE-HEADED NORTH EAST HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc7d"},129150:{"value":"1F87E","name":"WIDE-HEADED SOUTH EAST HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc7e"},129151:{"value":"1F87F","name":"WIDE-HEADED SOUTH WEST HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc7f"},129152:{"value":"1F880","name":"WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc80"},129153:{"value":"1F881","name":"WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc81"},129154:{"value":"1F882","name":"WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc82"},129155:{"value":"1F883","name":"WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc83"},129156:{"value":"1F884","name":"WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc84"},129157:{"value":"1F885","name":"WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc85"},129158:{"value":"1F886","name":"WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc86"},129159:{"value":"1F887","name":"WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc87"},129168:{"value":"1F890","name":"LEFTWARDS TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc90"},129169:{"value":"1F891","name":"UPWARDS TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc91"},129170:{"value":"1F892","name":"RIGHTWARDS TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc92"},129171:{"value":"1F893","name":"DOWNWARDS TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc93"},129172:{"value":"1F894","name":"LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc94"},129173:{"value":"1F895","name":"UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc95"},129174:{"value":"1F896","name":"RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc96"},129175:{"value":"1F897","name":"DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc97"},129176:{"value":"1F898","name":"LEFTWARDS ARROW WITH NOTCHED TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc98"},129177:{"value":"1F899","name":"UPWARDS ARROW WITH NOTCHED TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc99"},129178:{"value":"1F89A","name":"RIGHTWARDS ARROW WITH NOTCHED TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc9a"},129179:{"value":"1F89B","name":"DOWNWARDS ARROW WITH NOTCHED TAIL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc9b"},129180:{"value":"1F89C","name":"HEAVY ARROW SHAFT WIDTH ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc9c"},129181:{"value":"1F89D","name":"HEAVY ARROW SHAFT WIDTH TWO THIRDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc9d"},129182:{"value":"1F89E","name":"HEAVY ARROW SHAFT WIDTH ONE HALF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc9e"},129183:{"value":"1F89F","name":"HEAVY ARROW SHAFT WIDTH ONE THIRD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udc9f"},129184:{"value":"1F8A0","name":"LEFTWARDS BOTTOM-SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca0"},129185:{"value":"1F8A1","name":"RIGHTWARDS BOTTOM SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca1"},129186:{"value":"1F8A2","name":"LEFTWARDS TOP SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca2"},129187:{"value":"1F8A3","name":"RIGHTWARDS TOP SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca3"},129188:{"value":"1F8A4","name":"LEFTWARDS LEFT-SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca4"},129189:{"value":"1F8A5","name":"RIGHTWARDS RIGHT-SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca5"},129190:{"value":"1F8A6","name":"LEFTWARDS RIGHT-SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca6"},129191:{"value":"1F8A7","name":"RIGHTWARDS LEFT-SHADED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca7"},129192:{"value":"1F8A8","name":"LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca8"},129193:{"value":"1F8A9","name":"RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udca9"},129194:{"value":"1F8AA","name":"LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udcaa"},129195:{"value":"1F8AB","name":"RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udcab"},129196:{"value":"1F8AC","name":"WHITE ARROW SHAFT WIDTH ONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udcac"},129197:{"value":"1F8AD","name":"WHITE ARROW SHAFT WIDTH TWO THIRDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udcad"},129200:{"value":"1F8B0","name":"ARROW POINTING UPWARDS THEN NORTH WEST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udcb0"},129201:{"value":"1F8B1","name":"ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udcb1"},129280:{"value":"1F900","name":"CIRCLED CROSS FORMEE WITH FOUR DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd00"},129281:{"value":"1F901","name":"CIRCLED CROSS FORMEE WITH TWO DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd01"},129282:{"value":"1F902","name":"CIRCLED CROSS FORMEE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd02"},129283:{"value":"1F903","name":"LEFT HALF CIRCLE WITH FOUR DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd03"},129284:{"value":"1F904","name":"LEFT HALF CIRCLE WITH THREE DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd04"},129285:{"value":"1F905","name":"LEFT HALF CIRCLE WITH TWO DOTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd05"},129286:{"value":"1F906","name":"LEFT HALF CIRCLE WITH DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd06"},129287:{"value":"1F907","name":"LEFT HALF CIRCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd07"},129288:{"value":"1F908","name":"DOWNWARD FACING HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd08"},129289:{"value":"1F909","name":"DOWNWARD FACING NOTCHED HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd09"},129290:{"value":"1F90A","name":"DOWNWARD FACING HOOK WITH DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd0a"},129291:{"value":"1F90B","name":"DOWNWARD FACING NOTCHED HOOK WITH DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd0b"},129292:{"value":"1F90C","name":"PINCHED FINGERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd0c"},129293:{"value":"1F90D","name":"WHITE HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd0d"},129294:{"value":"1F90E","name":"BROWN HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd0e"},129295:{"value":"1F90F","name":"PINCHING HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd0f"},129296:{"value":"1F910","name":"ZIPPER-MOUTH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd10"},129297:{"value":"1F911","name":"MONEY-MOUTH FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd11"},129298:{"value":"1F912","name":"FACE WITH THERMOMETER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd12"},129299:{"value":"1F913","name":"NERD FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd13"},129300:{"value":"1F914","name":"THINKING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd14"},129301:{"value":"1F915","name":"FACE WITH HEAD-BANDAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd15"},129302:{"value":"1F916","name":"ROBOT FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd16"},129303:{"value":"1F917","name":"HUGGING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd17"},129304:{"value":"1F918","name":"SIGN OF THE HORNS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd18"},129305:{"value":"1F919","name":"CALL ME HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd19"},129306:{"value":"1F91A","name":"RAISED BACK OF HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd1a"},129307:{"value":"1F91B","name":"LEFT-FACING FIST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd1b"},129308:{"value":"1F91C","name":"RIGHT-FACING FIST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd1c"},129309:{"value":"1F91D","name":"HANDSHAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd1d"},129310:{"value":"1F91E","name":"HAND WITH INDEX AND MIDDLE FINGERS CROSSED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd1e"},129311:{"value":"1F91F","name":"I LOVE YOU HAND SIGN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd1f"},129312:{"value":"1F920","name":"FACE WITH COWBOY HAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd20"},129313:{"value":"1F921","name":"CLOWN FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd21"},129314:{"value":"1F922","name":"NAUSEATED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd22"},129315:{"value":"1F923","name":"ROLLING ON THE FLOOR LAUGHING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd23"},129316:{"value":"1F924","name":"DROOLING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd24"},129317:{"value":"1F925","name":"LYING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd25"},129318:{"value":"1F926","name":"FACE PALM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd26"},129319:{"value":"1F927","name":"SNEEZING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd27"},129320:{"value":"1F928","name":"FACE WITH ONE EYEBROW RAISED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd28"},129321:{"value":"1F929","name":"GRINNING FACE WITH STAR EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd29"},129322:{"value":"1F92A","name":"GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd2a"},129323:{"value":"1F92B","name":"FACE WITH FINGER COVERING CLOSED LIPS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd2b"},129324:{"value":"1F92C","name":"SERIOUS FACE WITH SYMBOLS COVERING MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd2c"},129325:{"value":"1F92D","name":"SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd2d"},129326:{"value":"1F92E","name":"FACE WITH OPEN MOUTH VOMITING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd2e"},129327:{"value":"1F92F","name":"SHOCKED FACE WITH EXPLODING HEAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd2f"},129328:{"value":"1F930","name":"PREGNANT WOMAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd30"},129329:{"value":"1F931","name":"BREAST-FEEDING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd31"},129330:{"value":"1F932","name":"PALMS UP TOGETHER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd32"},129331:{"value":"1F933","name":"SELFIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd33"},129332:{"value":"1F934","name":"PRINCE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd34"},129333:{"value":"1F935","name":"MAN IN TUXEDO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd35"},129334:{"value":"1F936","name":"MOTHER CHRISTMAS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd36"},129335:{"value":"1F937","name":"SHRUG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd37"},129336:{"value":"1F938","name":"PERSON DOING CARTWHEEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd38"},129337:{"value":"1F939","name":"JUGGLING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd39"},129338:{"value":"1F93A","name":"FENCER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd3a"},129339:{"value":"1F93B","name":"MODERN PENTATHLON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd3b"},129340:{"value":"1F93C","name":"WRESTLERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd3c"},129341:{"value":"1F93D","name":"WATER POLO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd3d"},129342:{"value":"1F93E","name":"HANDBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd3e"},129343:{"value":"1F93F","name":"DIVING MASK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd3f"},129344:{"value":"1F940","name":"WILTED FLOWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd40"},129345:{"value":"1F941","name":"DRUM WITH DRUMSTICKS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd41"},129346:{"value":"1F942","name":"CLINKING GLASSES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd42"},129347:{"value":"1F943","name":"TUMBLER GLASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd43"},129348:{"value":"1F944","name":"SPOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd44"},129349:{"value":"1F945","name":"GOAL NET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd45"},129350:{"value":"1F946","name":"RIFLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd46"},129351:{"value":"1F947","name":"FIRST PLACE MEDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd47"},129352:{"value":"1F948","name":"SECOND PLACE MEDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd48"},129353:{"value":"1F949","name":"THIRD PLACE MEDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd49"},129354:{"value":"1F94A","name":"BOXING GLOVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd4a"},129355:{"value":"1F94B","name":"MARTIAL ARTS UNIFORM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd4b"},129356:{"value":"1F94C","name":"CURLING STONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd4c"},129357:{"value":"1F94D","name":"LACROSSE STICK AND BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd4d"},129358:{"value":"1F94E","name":"SOFTBALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd4e"},129359:{"value":"1F94F","name":"FLYING DISC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd4f"},129360:{"value":"1F950","name":"CROISSANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd50"},129361:{"value":"1F951","name":"AVOCADO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd51"},129362:{"value":"1F952","name":"CUCUMBER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd52"},129363:{"value":"1F953","name":"BACON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd53"},129364:{"value":"1F954","name":"POTATO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd54"},129365:{"value":"1F955","name":"CARROT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd55"},129366:{"value":"1F956","name":"BAGUETTE BREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd56"},129367:{"value":"1F957","name":"GREEN SALAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd57"},129368:{"value":"1F958","name":"SHALLOW PAN OF FOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd58"},129369:{"value":"1F959","name":"STUFFED FLATBREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd59"},129370:{"value":"1F95A","name":"EGG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd5a"},129371:{"value":"1F95B","name":"GLASS OF MILK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd5b"},129372:{"value":"1F95C","name":"PEANUTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd5c"},129373:{"value":"1F95D","name":"KIWIFRUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd5d"},129374:{"value":"1F95E","name":"PANCAKES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd5e"},129375:{"value":"1F95F","name":"DUMPLING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd5f"},129376:{"value":"1F960","name":"FORTUNE COOKIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd60"},129377:{"value":"1F961","name":"TAKEOUT BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd61"},129378:{"value":"1F962","name":"CHOPSTICKS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd62"},129379:{"value":"1F963","name":"BOWL WITH SPOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd63"},129380:{"value":"1F964","name":"CUP WITH STRAW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd64"},129381:{"value":"1F965","name":"COCONUT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd65"},129382:{"value":"1F966","name":"BROCCOLI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd66"},129383:{"value":"1F967","name":"PIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd67"},129384:{"value":"1F968","name":"PRETZEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd68"},129385:{"value":"1F969","name":"CUT OF MEAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd69"},129386:{"value":"1F96A","name":"SANDWICH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd6a"},129387:{"value":"1F96B","name":"CANNED FOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd6b"},129388:{"value":"1F96C","name":"LEAFY GREEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd6c"},129389:{"value":"1F96D","name":"MANGO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd6d"},129390:{"value":"1F96E","name":"MOON CAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd6e"},129391:{"value":"1F96F","name":"BAGEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd6f"},129392:{"value":"1F970","name":"SMILING FACE WITH SMILING EYES AND THREE HEARTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd70"},129393:{"value":"1F971","name":"YAWNING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd71"},129394:{"value":"1F972","name":"SMILING FACE WITH TEAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd72"},129395:{"value":"1F973","name":"FACE WITH PARTY HORN AND PARTY HAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd73"},129396:{"value":"1F974","name":"FACE WITH UNEVEN EYES AND WAVY MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd74"},129397:{"value":"1F975","name":"OVERHEATED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd75"},129398:{"value":"1F976","name":"FREEZING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd76"},129399:{"value":"1F977","name":"NINJA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd77"},129400:{"value":"1F978","name":"DISGUISED FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd78"},129401:{"value":"1F979","name":"FACE HOLDING BACK TEARS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd79"},129402:{"value":"1F97A","name":"FACE WITH PLEADING EYES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd7a"},129403:{"value":"1F97B","name":"SARI","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd7b"},129404:{"value":"1F97C","name":"LAB COAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd7c"},129405:{"value":"1F97D","name":"GOGGLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd7d"},129406:{"value":"1F97E","name":"HIKING BOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd7e"},129407:{"value":"1F97F","name":"FLAT SHOE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd7f"},129408:{"value":"1F980","name":"CRAB","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd80"},129409:{"value":"1F981","name":"LION FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd81"},129410:{"value":"1F982","name":"SCORPION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd82"},129411:{"value":"1F983","name":"TURKEY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd83"},129412:{"value":"1F984","name":"UNICORN FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd84"},129413:{"value":"1F985","name":"EAGLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd85"},129414:{"value":"1F986","name":"DUCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd86"},129415:{"value":"1F987","name":"BAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd87"},129416:{"value":"1F988","name":"SHARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd88"},129417:{"value":"1F989","name":"OWL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd89"},129418:{"value":"1F98A","name":"FOX FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd8a"},129419:{"value":"1F98B","name":"BUTTERFLY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd8b"},129420:{"value":"1F98C","name":"DEER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd8c"},129421:{"value":"1F98D","name":"GORILLA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd8d"},129422:{"value":"1F98E","name":"LIZARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd8e"},129423:{"value":"1F98F","name":"RHINOCEROS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd8f"},129424:{"value":"1F990","name":"SHRIMP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd90"},129425:{"value":"1F991","name":"SQUID","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd91"},129426:{"value":"1F992","name":"GIRAFFE FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd92"},129427:{"value":"1F993","name":"ZEBRA FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd93"},129428:{"value":"1F994","name":"HEDGEHOG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd94"},129429:{"value":"1F995","name":"SAUROPOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd95"},129430:{"value":"1F996","name":"T-REX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd96"},129431:{"value":"1F997","name":"CRICKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd97"},129432:{"value":"1F998","name":"KANGAROO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd98"},129433:{"value":"1F999","name":"LLAMA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd99"},129434:{"value":"1F99A","name":"PEACOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd9a"},129435:{"value":"1F99B","name":"HIPPOPOTAMUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd9b"},129436:{"value":"1F99C","name":"PARROT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd9c"},129437:{"value":"1F99D","name":"RACCOON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd9d"},129438:{"value":"1F99E","name":"LOBSTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd9e"},129439:{"value":"1F99F","name":"MOSQUITO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udd9f"},129440:{"value":"1F9A0","name":"MICROBE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda0"},129441:{"value":"1F9A1","name":"BADGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda1"},129442:{"value":"1F9A2","name":"SWAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda2"},129443:{"value":"1F9A3","name":"MAMMOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda3"},129444:{"value":"1F9A4","name":"DODO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda4"},129445:{"value":"1F9A5","name":"SLOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda5"},129446:{"value":"1F9A6","name":"OTTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda6"},129447:{"value":"1F9A7","name":"ORANGUTAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda7"},129448:{"value":"1F9A8","name":"SKUNK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda8"},129449:{"value":"1F9A9","name":"FLAMINGO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udda9"},129450:{"value":"1F9AA","name":"OYSTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddaa"},129451:{"value":"1F9AB","name":"BEAVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddab"},129452:{"value":"1F9AC","name":"BISON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddac"},129453:{"value":"1F9AD","name":"SEAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddad"},129454:{"value":"1F9AE","name":"GUIDE DOG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddae"},129455:{"value":"1F9AF","name":"PROBING CANE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddaf"},129456:{"value":"1F9B0","name":"EMOJI COMPONENT RED HAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb0"},129457:{"value":"1F9B1","name":"EMOJI COMPONENT CURLY HAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb1"},129458:{"value":"1F9B2","name":"EMOJI COMPONENT BALD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb2"},129459:{"value":"1F9B3","name":"EMOJI COMPONENT WHITE HAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb3"},129460:{"value":"1F9B4","name":"BONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb4"},129461:{"value":"1F9B5","name":"LEG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb5"},129462:{"value":"1F9B6","name":"FOOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb6"},129463:{"value":"1F9B7","name":"TOOTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb7"},129464:{"value":"1F9B8","name":"SUPERHERO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb8"},129465:{"value":"1F9B9","name":"SUPERVILLAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddb9"},129466:{"value":"1F9BA","name":"SAFETY VEST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddba"},129467:{"value":"1F9BB","name":"EAR WITH HEARING AID","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddbb"},129468:{"value":"1F9BC","name":"MOTORIZED WHEELCHAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddbc"},129469:{"value":"1F9BD","name":"MANUAL WHEELCHAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddbd"},129470:{"value":"1F9BE","name":"MECHANICAL ARM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddbe"},129471:{"value":"1F9BF","name":"MECHANICAL LEG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddbf"},129472:{"value":"1F9C0","name":"CHEESE WEDGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc0"},129473:{"value":"1F9C1","name":"CUPCAKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc1"},129474:{"value":"1F9C2","name":"SALT SHAKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc2"},129475:{"value":"1F9C3","name":"BEVERAGE BOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc3"},129476:{"value":"1F9C4","name":"GARLIC","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc4"},129477:{"value":"1F9C5","name":"ONION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc5"},129478:{"value":"1F9C6","name":"FALAFEL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc6"},129479:{"value":"1F9C7","name":"WAFFLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc7"},129480:{"value":"1F9C8","name":"BUTTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc8"},129481:{"value":"1F9C9","name":"MATE DRINK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddc9"},129482:{"value":"1F9CA","name":"ICE CUBE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddca"},129483:{"value":"1F9CB","name":"BUBBLE TEA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddcb"},129484:{"value":"1F9CC","name":"TROLL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddcc"},129485:{"value":"1F9CD","name":"STANDING PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddcd"},129486:{"value":"1F9CE","name":"KNEELING PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddce"},129487:{"value":"1F9CF","name":"DEAF PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddcf"},129488:{"value":"1F9D0","name":"FACE WITH MONOCLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd0"},129489:{"value":"1F9D1","name":"ADULT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd1"},129490:{"value":"1F9D2","name":"CHILD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd2"},129491:{"value":"1F9D3","name":"OLDER ADULT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd3"},129492:{"value":"1F9D4","name":"BEARDED PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd4"},129493:{"value":"1F9D5","name":"PERSON WITH HEADSCARF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd5"},129494:{"value":"1F9D6","name":"PERSON IN STEAMY ROOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd6"},129495:{"value":"1F9D7","name":"PERSON CLIMBING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd7"},129496:{"value":"1F9D8","name":"PERSON IN LOTUS POSITION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd8"},129497:{"value":"1F9D9","name":"MAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddd9"},129498:{"value":"1F9DA","name":"FAIRY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddda"},129499:{"value":"1F9DB","name":"VAMPIRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udddb"},129500:{"value":"1F9DC","name":"MERPERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udddc"},129501:{"value":"1F9DD","name":"ELF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udddd"},129502:{"value":"1F9DE","name":"GENIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddde"},129503:{"value":"1F9DF","name":"ZOMBIE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udddf"},129504:{"value":"1F9E0","name":"BRAIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde0"},129505:{"value":"1F9E1","name":"ORANGE HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde1"},129506:{"value":"1F9E2","name":"BILLED CAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde2"},129507:{"value":"1F9E3","name":"SCARF","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde3"},129508:{"value":"1F9E4","name":"GLOVES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde4"},129509:{"value":"1F9E5","name":"COAT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde5"},129510:{"value":"1F9E6","name":"SOCKS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde6"},129511:{"value":"1F9E7","name":"RED GIFT ENVELOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde7"},129512:{"value":"1F9E8","name":"FIRECRACKER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde8"},129513:{"value":"1F9E9","name":"JIGSAW PUZZLE PIECE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udde9"},129514:{"value":"1F9EA","name":"TEST TUBE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddea"},129515:{"value":"1F9EB","name":"PETRI DISH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddeb"},129516:{"value":"1F9EC","name":"DNA DOUBLE HELIX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddec"},129517:{"value":"1F9ED","name":"COMPASS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udded"},129518:{"value":"1F9EE","name":"ABACUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddee"},129519:{"value":"1F9EF","name":"FIRE EXTINGUISHER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddef"},129520:{"value":"1F9F0","name":"TOOLBOX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf0"},129521:{"value":"1F9F1","name":"BRICK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf1"},129522:{"value":"1F9F2","name":"MAGNET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf2"},129523:{"value":"1F9F3","name":"LUGGAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf3"},129524:{"value":"1F9F4","name":"LOTION BOTTLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf4"},129525:{"value":"1F9F5","name":"SPOOL OF THREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf5"},129526:{"value":"1F9F6","name":"BALL OF YARN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf6"},129527:{"value":"1F9F7","name":"SAFETY PIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf7"},129528:{"value":"1F9F8","name":"TEDDY BEAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf8"},129529:{"value":"1F9F9","name":"BROOM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddf9"},129530:{"value":"1F9FA","name":"BASKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddfa"},129531:{"value":"1F9FB","name":"ROLL OF PAPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddfb"},129532:{"value":"1F9FC","name":"BAR OF SOAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddfc"},129533:{"value":"1F9FD","name":"SPONGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddfd"},129534:{"value":"1F9FE","name":"RECEIPT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddfe"},129535:{"value":"1F9FF","name":"NAZAR AMULET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uddff"},129536:{"value":"1FA00","name":"NEUTRAL CHESS KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude00"},129537:{"value":"1FA01","name":"NEUTRAL CHESS QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude01"},129538:{"value":"1FA02","name":"NEUTRAL CHESS ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude02"},129539:{"value":"1FA03","name":"NEUTRAL CHESS BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude03"},129540:{"value":"1FA04","name":"NEUTRAL CHESS KNIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude04"},129541:{"value":"1FA05","name":"NEUTRAL CHESS PAWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude05"},129542:{"value":"1FA06","name":"WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude06"},129543:{"value":"1FA07","name":"BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude07"},129544:{"value":"1FA08","name":"NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude08"},129545:{"value":"1FA09","name":"WHITE CHESS KING ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude09"},129546:{"value":"1FA0A","name":"WHITE CHESS QUEEN ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude0a"},129547:{"value":"1FA0B","name":"WHITE CHESS ROOK ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude0b"},129548:{"value":"1FA0C","name":"WHITE CHESS BISHOP ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude0c"},129549:{"value":"1FA0D","name":"WHITE CHESS KNIGHT ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude0d"},129550:{"value":"1FA0E","name":"WHITE CHESS PAWN ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude0e"},129551:{"value":"1FA0F","name":"BLACK CHESS KING ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude0f"},129552:{"value":"1FA10","name":"BLACK CHESS QUEEN ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude10"},129553:{"value":"1FA11","name":"BLACK CHESS ROOK ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude11"},129554:{"value":"1FA12","name":"BLACK CHESS BISHOP ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude12"},129555:{"value":"1FA13","name":"BLACK CHESS KNIGHT ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude13"},129556:{"value":"1FA14","name":"BLACK CHESS PAWN ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude14"},129557:{"value":"1FA15","name":"NEUTRAL CHESS KING ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude15"},129558:{"value":"1FA16","name":"NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude16"},129559:{"value":"1FA17","name":"NEUTRAL CHESS ROOK ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude17"},129560:{"value":"1FA18","name":"NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude18"},129561:{"value":"1FA19","name":"NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude19"},129562:{"value":"1FA1A","name":"NEUTRAL CHESS PAWN ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude1a"},129563:{"value":"1FA1B","name":"WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude1b"},129564:{"value":"1FA1C","name":"BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude1c"},129565:{"value":"1FA1D","name":"NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude1d"},129566:{"value":"1FA1E","name":"WHITE CHESS TURNED KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude1e"},129567:{"value":"1FA1F","name":"WHITE CHESS TURNED QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude1f"},129568:{"value":"1FA20","name":"WHITE CHESS TURNED ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude20"},129569:{"value":"1FA21","name":"WHITE CHESS TURNED BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude21"},129570:{"value":"1FA22","name":"WHITE CHESS TURNED KNIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude22"},129571:{"value":"1FA23","name":"WHITE CHESS TURNED PAWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude23"},129572:{"value":"1FA24","name":"BLACK CHESS TURNED KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude24"},129573:{"value":"1FA25","name":"BLACK CHESS TURNED QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude25"},129574:{"value":"1FA26","name":"BLACK CHESS TURNED ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude26"},129575:{"value":"1FA27","name":"BLACK CHESS TURNED BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude27"},129576:{"value":"1FA28","name":"BLACK CHESS TURNED KNIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude28"},129577:{"value":"1FA29","name":"BLACK CHESS TURNED PAWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude29"},129578:{"value":"1FA2A","name":"NEUTRAL CHESS TURNED KING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude2a"},129579:{"value":"1FA2B","name":"NEUTRAL CHESS TURNED QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude2b"},129580:{"value":"1FA2C","name":"NEUTRAL CHESS TURNED ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude2c"},129581:{"value":"1FA2D","name":"NEUTRAL CHESS TURNED BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude2d"},129582:{"value":"1FA2E","name":"NEUTRAL CHESS TURNED KNIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude2e"},129583:{"value":"1FA2F","name":"NEUTRAL CHESS TURNED PAWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude2f"},129584:{"value":"1FA30","name":"WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude30"},129585:{"value":"1FA31","name":"BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude31"},129586:{"value":"1FA32","name":"NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude32"},129587:{"value":"1FA33","name":"WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude33"},129588:{"value":"1FA34","name":"WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude34"},129589:{"value":"1FA35","name":"WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude35"},129590:{"value":"1FA36","name":"WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude36"},129591:{"value":"1FA37","name":"WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude37"},129592:{"value":"1FA38","name":"WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude38"},129593:{"value":"1FA39","name":"BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude39"},129594:{"value":"1FA3A","name":"BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude3a"},129595:{"value":"1FA3B","name":"BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude3b"},129596:{"value":"1FA3C","name":"BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude3c"},129597:{"value":"1FA3D","name":"BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude3d"},129598:{"value":"1FA3E","name":"BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude3e"},129599:{"value":"1FA3F","name":"NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude3f"},129600:{"value":"1FA40","name":"NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude40"},129601:{"value":"1FA41","name":"NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude41"},129602:{"value":"1FA42","name":"NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude42"},129603:{"value":"1FA43","name":"NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude43"},129604:{"value":"1FA44","name":"NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude44"},129605:{"value":"1FA45","name":"WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude45"},129606:{"value":"1FA46","name":"BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude46"},129607:{"value":"1FA47","name":"NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude47"},129608:{"value":"1FA48","name":"WHITE CHESS EQUIHOPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude48"},129609:{"value":"1FA49","name":"BLACK CHESS EQUIHOPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude49"},129610:{"value":"1FA4A","name":"NEUTRAL CHESS EQUIHOPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude4a"},129611:{"value":"1FA4B","name":"WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude4b"},129612:{"value":"1FA4C","name":"BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude4c"},129613:{"value":"1FA4D","name":"NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude4d"},129614:{"value":"1FA4E","name":"WHITE CHESS KNIGHT-QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude4e"},129615:{"value":"1FA4F","name":"WHITE CHESS KNIGHT-ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude4f"},129616:{"value":"1FA50","name":"WHITE CHESS KNIGHT-BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude50"},129617:{"value":"1FA51","name":"BLACK CHESS KNIGHT-QUEEN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude51"},129618:{"value":"1FA52","name":"BLACK CHESS KNIGHT-ROOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude52"},129619:{"value":"1FA53","name":"BLACK CHESS KNIGHT-BISHOP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude53"},129632:{"value":"1FA60","name":"XIANGQI RED GENERAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude60"},129633:{"value":"1FA61","name":"XIANGQI RED MANDARIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude61"},129634:{"value":"1FA62","name":"XIANGQI RED ELEPHANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude62"},129635:{"value":"1FA63","name":"XIANGQI RED HORSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude63"},129636:{"value":"1FA64","name":"XIANGQI RED CHARIOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude64"},129637:{"value":"1FA65","name":"XIANGQI RED CANNON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude65"},129638:{"value":"1FA66","name":"XIANGQI RED SOLDIER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude66"},129639:{"value":"1FA67","name":"XIANGQI BLACK GENERAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude67"},129640:{"value":"1FA68","name":"XIANGQI BLACK MANDARIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude68"},129641:{"value":"1FA69","name":"XIANGQI BLACK ELEPHANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude69"},129642:{"value":"1FA6A","name":"XIANGQI BLACK HORSE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude6a"},129643:{"value":"1FA6B","name":"XIANGQI BLACK CHARIOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude6b"},129644:{"value":"1FA6C","name":"XIANGQI BLACK CANNON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude6c"},129645:{"value":"1FA6D","name":"XIANGQI BLACK SOLDIER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude6d"},129648:{"value":"1FA70","name":"BALLET SHOES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude70"},129649:{"value":"1FA71","name":"ONE-PIECE SWIMSUIT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude71"},129650:{"value":"1FA72","name":"BRIEFS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude72"},129651:{"value":"1FA73","name":"SHORTS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude73"},129652:{"value":"1FA74","name":"THONG SANDAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude74"},129656:{"value":"1FA78","name":"DROP OF BLOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude78"},129657:{"value":"1FA79","name":"ADHESIVE BANDAGE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude79"},129658:{"value":"1FA7A","name":"STETHOSCOPE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude7a"},129659:{"value":"1FA7B","name":"X-RAY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude7b"},129660:{"value":"1FA7C","name":"CRUTCH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude7c"},129664:{"value":"1FA80","name":"YO-YO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude80"},129665:{"value":"1FA81","name":"KITE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude81"},129666:{"value":"1FA82","name":"PARACHUTE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude82"},129667:{"value":"1FA83","name":"BOOMERANG","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude83"},129668:{"value":"1FA84","name":"MAGIC WAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude84"},129669:{"value":"1FA85","name":"PINATA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude85"},129670:{"value":"1FA86","name":"NESTING DOLLS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude86"},129680:{"value":"1FA90","name":"RINGED PLANET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude90"},129681:{"value":"1FA91","name":"CHAIR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude91"},129682:{"value":"1FA92","name":"RAZOR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude92"},129683:{"value":"1FA93","name":"AXE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude93"},129684:{"value":"1FA94","name":"DIYA LAMP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude94"},129685:{"value":"1FA95","name":"BANJO","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude95"},129686:{"value":"1FA96","name":"MILITARY HELMET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude96"},129687:{"value":"1FA97","name":"ACCORDION","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude97"},129688:{"value":"1FA98","name":"LONG DRUM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude98"},129689:{"value":"1FA99","name":"COIN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude99"},129690:{"value":"1FA9A","name":"CARPENTRY SAW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude9a"},129691:{"value":"1FA9B","name":"SCREWDRIVER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude9b"},129692:{"value":"1FA9C","name":"LADDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude9c"},129693:{"value":"1FA9D","name":"HOOK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude9d"},129694:{"value":"1FA9E","name":"MIRROR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude9e"},129695:{"value":"1FA9F","name":"WINDOW","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\ude9f"},129696:{"value":"1FAA0","name":"PLUNGER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea0"},129697:{"value":"1FAA1","name":"SEWING NEEDLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea1"},129698:{"value":"1FAA2","name":"KNOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea2"},129699:{"value":"1FAA3","name":"BUCKET","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea3"},129700:{"value":"1FAA4","name":"MOUSE TRAP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea4"},129701:{"value":"1FAA5","name":"TOOTHBRUSH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea5"},129702:{"value":"1FAA6","name":"HEADSTONE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea6"},129703:{"value":"1FAA7","name":"PLACARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea7"},129704:{"value":"1FAA8","name":"ROCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea8"},129705:{"value":"1FAA9","name":"MIRROR BALL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udea9"},129706:{"value":"1FAAA","name":"IDENTIFICATION CARD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeaa"},129707:{"value":"1FAAB","name":"LOW BATTERY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeab"},129708:{"value":"1FAAC","name":"HAMSA","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeac"},129712:{"value":"1FAB0","name":"FLY","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb0"},129713:{"value":"1FAB1","name":"WORM","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb1"},129714:{"value":"1FAB2","name":"BEETLE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb2"},129715:{"value":"1FAB3","name":"COCKROACH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb3"},129716:{"value":"1FAB4","name":"POTTED PLANT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb4"},129717:{"value":"1FAB5","name":"WOOD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb5"},129718:{"value":"1FAB6","name":"FEATHER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb6"},129719:{"value":"1FAB7","name":"LOTUS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb7"},129720:{"value":"1FAB8","name":"CORAL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb8"},129721:{"value":"1FAB9","name":"EMPTY NEST","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeb9"},129722:{"value":"1FABA","name":"NEST WITH EGGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udeba"},129728:{"value":"1FAC0","name":"ANATOMICAL HEART","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udec0"},129729:{"value":"1FAC1","name":"LUNGS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udec1"},129730:{"value":"1FAC2","name":"PEOPLE HUGGING","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udec2"},129731:{"value":"1FAC3","name":"PREGNANT MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udec3"},129732:{"value":"1FAC4","name":"PREGNANT PERSON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udec4"},129733:{"value":"1FAC5","name":"PERSON WITH CROWN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udec5"},129744:{"value":"1FAD0","name":"BLUEBERRIES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded0"},129745:{"value":"1FAD1","name":"BELL PEPPER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded1"},129746:{"value":"1FAD2","name":"OLIVE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded2"},129747:{"value":"1FAD3","name":"FLATBREAD","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded3"},129748:{"value":"1FAD4","name":"TAMALE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded4"},129749:{"value":"1FAD5","name":"FONDUE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded5"},129750:{"value":"1FAD6","name":"TEAPOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded6"},129751:{"value":"1FAD7","name":"POURING LIQUID","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded7"},129752:{"value":"1FAD8","name":"BEANS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded8"},129753:{"value":"1FAD9","name":"JAR","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\uded9"},129760:{"value":"1FAE0","name":"MELTING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee0"},129761:{"value":"1FAE1","name":"SALUTING FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee1"},129762:{"value":"1FAE2","name":"FACE WITH OPEN EYES AND HAND OVER MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee2"},129763:{"value":"1FAE3","name":"FACE WITH PEEKING EYE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee3"},129764:{"value":"1FAE4","name":"FACE WITH DIAGONAL MOUTH","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee4"},129765:{"value":"1FAE5","name":"DOTTED LINE FACE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee5"},129766:{"value":"1FAE6","name":"BITING LIP","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee6"},129767:{"value":"1FAE7","name":"BUBBLES","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udee7"},129776:{"value":"1FAF0","name":"HAND WITH INDEX FINGER AND THUMB CROSSED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef0"},129777:{"value":"1FAF1","name":"RIGHTWARDS HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef1"},129778:{"value":"1FAF2","name":"LEFTWARDS HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef2"},129779:{"value":"1FAF3","name":"PALM DOWN HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef3"},129780:{"value":"1FAF4","name":"PALM UP HAND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef4"},129781:{"value":"1FAF5","name":"INDEX POINTING AT THE VIEWER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef5"},129782:{"value":"1FAF6","name":"HEART HANDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udef6"},129792:{"value":"1FB00","name":"BLOCK SEXTANT-1","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf00"},129793:{"value":"1FB01","name":"BLOCK SEXTANT-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf01"},129794:{"value":"1FB02","name":"BLOCK SEXTANT-12","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf02"},129795:{"value":"1FB03","name":"BLOCK SEXTANT-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf03"},129796:{"value":"1FB04","name":"BLOCK SEXTANT-13","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf04"},129797:{"value":"1FB05","name":"BLOCK SEXTANT-23","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf05"},129798:{"value":"1FB06","name":"BLOCK SEXTANT-123","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf06"},129799:{"value":"1FB07","name":"BLOCK SEXTANT-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf07"},129800:{"value":"1FB08","name":"BLOCK SEXTANT-14","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf08"},129801:{"value":"1FB09","name":"BLOCK SEXTANT-24","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf09"},129802:{"value":"1FB0A","name":"BLOCK SEXTANT-124","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf0a"},129803:{"value":"1FB0B","name":"BLOCK SEXTANT-34","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf0b"},129804:{"value":"1FB0C","name":"BLOCK SEXTANT-134","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf0c"},129805:{"value":"1FB0D","name":"BLOCK SEXTANT-234","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf0d"},129806:{"value":"1FB0E","name":"BLOCK SEXTANT-1234","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf0e"},129807:{"value":"1FB0F","name":"BLOCK SEXTANT-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf0f"},129808:{"value":"1FB10","name":"BLOCK SEXTANT-15","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf10"},129809:{"value":"1FB11","name":"BLOCK SEXTANT-25","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf11"},129810:{"value":"1FB12","name":"BLOCK SEXTANT-125","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf12"},129811:{"value":"1FB13","name":"BLOCK SEXTANT-35","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf13"},129812:{"value":"1FB14","name":"BLOCK SEXTANT-235","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf14"},129813:{"value":"1FB15","name":"BLOCK SEXTANT-1235","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf15"},129814:{"value":"1FB16","name":"BLOCK SEXTANT-45","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf16"},129815:{"value":"1FB17","name":"BLOCK SEXTANT-145","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf17"},129816:{"value":"1FB18","name":"BLOCK SEXTANT-245","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf18"},129817:{"value":"1FB19","name":"BLOCK SEXTANT-1245","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf19"},129818:{"value":"1FB1A","name":"BLOCK SEXTANT-345","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf1a"},129819:{"value":"1FB1B","name":"BLOCK SEXTANT-1345","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf1b"},129820:{"value":"1FB1C","name":"BLOCK SEXTANT-2345","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf1c"},129821:{"value":"1FB1D","name":"BLOCK SEXTANT-12345","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf1d"},129822:{"value":"1FB1E","name":"BLOCK SEXTANT-6","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf1e"},129823:{"value":"1FB1F","name":"BLOCK SEXTANT-16","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf1f"},129824:{"value":"1FB20","name":"BLOCK SEXTANT-26","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf20"},129825:{"value":"1FB21","name":"BLOCK SEXTANT-126","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf21"},129826:{"value":"1FB22","name":"BLOCK SEXTANT-36","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf22"},129827:{"value":"1FB23","name":"BLOCK SEXTANT-136","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf23"},129828:{"value":"1FB24","name":"BLOCK SEXTANT-236","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf24"},129829:{"value":"1FB25","name":"BLOCK SEXTANT-1236","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf25"},129830:{"value":"1FB26","name":"BLOCK SEXTANT-46","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf26"},129831:{"value":"1FB27","name":"BLOCK SEXTANT-146","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf27"},129832:{"value":"1FB28","name":"BLOCK SEXTANT-1246","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf28"},129833:{"value":"1FB29","name":"BLOCK SEXTANT-346","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf29"},129834:{"value":"1FB2A","name":"BLOCK SEXTANT-1346","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf2a"},129835:{"value":"1FB2B","name":"BLOCK SEXTANT-2346","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf2b"},129836:{"value":"1FB2C","name":"BLOCK SEXTANT-12346","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf2c"},129837:{"value":"1FB2D","name":"BLOCK SEXTANT-56","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf2d"},129838:{"value":"1FB2E","name":"BLOCK SEXTANT-156","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf2e"},129839:{"value":"1FB2F","name":"BLOCK SEXTANT-256","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf2f"},129840:{"value":"1FB30","name":"BLOCK SEXTANT-1256","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf30"},129841:{"value":"1FB31","name":"BLOCK SEXTANT-356","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf31"},129842:{"value":"1FB32","name":"BLOCK SEXTANT-1356","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf32"},129843:{"value":"1FB33","name":"BLOCK SEXTANT-2356","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf33"},129844:{"value":"1FB34","name":"BLOCK SEXTANT-12356","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf34"},129845:{"value":"1FB35","name":"BLOCK SEXTANT-456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf35"},129846:{"value":"1FB36","name":"BLOCK SEXTANT-1456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf36"},129847:{"value":"1FB37","name":"BLOCK SEXTANT-2456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf37"},129848:{"value":"1FB38","name":"BLOCK SEXTANT-12456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf38"},129849:{"value":"1FB39","name":"BLOCK SEXTANT-3456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf39"},129850:{"value":"1FB3A","name":"BLOCK SEXTANT-13456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf3a"},129851:{"value":"1FB3B","name":"BLOCK SEXTANT-23456","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf3b"},129852:{"value":"1FB3C","name":"LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf3c"},129853:{"value":"1FB3D","name":"LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf3d"},129854:{"value":"1FB3E","name":"LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf3e"},129855:{"value":"1FB3F","name":"LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf3f"},129856:{"value":"1FB40","name":"LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf40"},129857:{"value":"1FB41","name":"LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf41"},129858:{"value":"1FB42","name":"LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf42"},129859:{"value":"1FB43","name":"LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf43"},129860:{"value":"1FB44","name":"LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf44"},129861:{"value":"1FB45","name":"LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf45"},129862:{"value":"1FB46","name":"LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf46"},129863:{"value":"1FB47","name":"LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf47"},129864:{"value":"1FB48","name":"LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf48"},129865:{"value":"1FB49","name":"LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf49"},129866:{"value":"1FB4A","name":"LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf4a"},129867:{"value":"1FB4B","name":"LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf4b"},129868:{"value":"1FB4C","name":"LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf4c"},129869:{"value":"1FB4D","name":"LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf4d"},129870:{"value":"1FB4E","name":"LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf4e"},129871:{"value":"1FB4F","name":"LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf4f"},129872:{"value":"1FB50","name":"LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf50"},129873:{"value":"1FB51","name":"LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf51"},129874:{"value":"1FB52","name":"UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf52"},129875:{"value":"1FB53","name":"UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf53"},129876:{"value":"1FB54","name":"UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf54"},129877:{"value":"1FB55","name":"UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf55"},129878:{"value":"1FB56","name":"UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf56"},129879:{"value":"1FB57","name":"UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf57"},129880:{"value":"1FB58","name":"UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf58"},129881:{"value":"1FB59","name":"UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf59"},129882:{"value":"1FB5A","name":"UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf5a"},129883:{"value":"1FB5B","name":"UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf5b"},129884:{"value":"1FB5C","name":"UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf5c"},129885:{"value":"1FB5D","name":"UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf5d"},129886:{"value":"1FB5E","name":"UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf5e"},129887:{"value":"1FB5F","name":"UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf5f"},129888:{"value":"1FB60","name":"UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf60"},129889:{"value":"1FB61","name":"UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf61"},129890:{"value":"1FB62","name":"UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf62"},129891:{"value":"1FB63","name":"UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf63"},129892:{"value":"1FB64","name":"UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf64"},129893:{"value":"1FB65","name":"UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf65"},129894:{"value":"1FB66","name":"UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf66"},129895:{"value":"1FB67","name":"UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf67"},129896:{"value":"1FB68","name":"UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf68"},129897:{"value":"1FB69","name":"LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf69"},129898:{"value":"1FB6A","name":"UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf6a"},129899:{"value":"1FB6B","name":"LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf6b"},129900:{"value":"1FB6C","name":"LEFT TRIANGULAR ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf6c"},129901:{"value":"1FB6D","name":"UPPER TRIANGULAR ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf6d"},129902:{"value":"1FB6E","name":"RIGHT TRIANGULAR ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf6e"},129903:{"value":"1FB6F","name":"LOWER TRIANGULAR ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf6f"},129904:{"value":"1FB70","name":"VERTICAL ONE EIGHTH BLOCK-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf70"},129905:{"value":"1FB71","name":"VERTICAL ONE EIGHTH BLOCK-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf71"},129906:{"value":"1FB72","name":"VERTICAL ONE EIGHTH BLOCK-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf72"},129907:{"value":"1FB73","name":"VERTICAL ONE EIGHTH BLOCK-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf73"},129908:{"value":"1FB74","name":"VERTICAL ONE EIGHTH BLOCK-6","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf74"},129909:{"value":"1FB75","name":"VERTICAL ONE EIGHTH BLOCK-7","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf75"},129910:{"value":"1FB76","name":"HORIZONTAL ONE EIGHTH BLOCK-2","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf76"},129911:{"value":"1FB77","name":"HORIZONTAL ONE EIGHTH BLOCK-3","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf77"},129912:{"value":"1FB78","name":"HORIZONTAL ONE EIGHTH BLOCK-4","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf78"},129913:{"value":"1FB79","name":"HORIZONTAL ONE EIGHTH BLOCK-5","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf79"},129914:{"value":"1FB7A","name":"HORIZONTAL ONE EIGHTH BLOCK-6","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf7a"},129915:{"value":"1FB7B","name":"HORIZONTAL ONE EIGHTH BLOCK-7","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf7b"},129916:{"value":"1FB7C","name":"LEFT AND LOWER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf7c"},129917:{"value":"1FB7D","name":"LEFT AND UPPER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf7d"},129918:{"value":"1FB7E","name":"RIGHT AND UPPER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf7e"},129919:{"value":"1FB7F","name":"RIGHT AND LOWER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf7f"},129920:{"value":"1FB80","name":"UPPER AND LOWER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf80"},129921:{"value":"1FB81","name":"HORIZONTAL ONE EIGHTH BLOCK-1358","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf81"},129922:{"value":"1FB82","name":"UPPER ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf82"},129923:{"value":"1FB83","name":"UPPER THREE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf83"},129924:{"value":"1FB84","name":"UPPER FIVE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf84"},129925:{"value":"1FB85","name":"UPPER THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf85"},129926:{"value":"1FB86","name":"UPPER SEVEN EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf86"},129927:{"value":"1FB87","name":"RIGHT ONE QUARTER BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf87"},129928:{"value":"1FB88","name":"RIGHT THREE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf88"},129929:{"value":"1FB89","name":"RIGHT FIVE EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf89"},129930:{"value":"1FB8A","name":"RIGHT THREE QUARTERS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf8a"},129931:{"value":"1FB8B","name":"RIGHT SEVEN EIGHTHS BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf8b"},129932:{"value":"1FB8C","name":"LEFT HALF MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf8c"},129933:{"value":"1FB8D","name":"RIGHT HALF MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf8d"},129934:{"value":"1FB8E","name":"UPPER HALF MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf8e"},129935:{"value":"1FB8F","name":"LOWER HALF MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf8f"},129936:{"value":"1FB90","name":"INVERSE MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf90"},129937:{"value":"1FB91","name":"UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf91"},129938:{"value":"1FB92","name":"UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf92"},129940:{"value":"1FB94","name":"LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf94"},129941:{"value":"1FB95","name":"CHECKER BOARD FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf95"},129942:{"value":"1FB96","name":"INVERSE CHECKER BOARD FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf96"},129943:{"value":"1FB97","name":"HEAVY HORIZONTAL FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf97"},129944:{"value":"1FB98","name":"UPPER LEFT TO LOWER RIGHT FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf98"},129945:{"value":"1FB99","name":"UPPER RIGHT TO LOWER LEFT FILL","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf99"},129946:{"value":"1FB9A","name":"UPPER AND LOWER TRIANGULAR HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf9a"},129947:{"value":"1FB9B","name":"LEFT AND RIGHT TRIANGULAR HALF BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf9b"},129948:{"value":"1FB9C","name":"UPPER LEFT TRIANGULAR MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf9c"},129949:{"value":"1FB9D","name":"UPPER RIGHT TRIANGULAR MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf9d"},129950:{"value":"1FB9E","name":"LOWER RIGHT TRIANGULAR MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf9e"},129951:{"value":"1FB9F","name":"LOWER LEFT TRIANGULAR MEDIUM SHADE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udf9f"},129952:{"value":"1FBA0","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa0"},129953:{"value":"1FBA1","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa1"},129954:{"value":"1FBA2","name":"BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa2"},129955:{"value":"1FBA3","name":"BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa3"},129956:{"value":"1FBA4","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa4"},129957:{"value":"1FBA5","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa5"},129958:{"value":"1FBA6","name":"BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa6"},129959:{"value":"1FBA7","name":"BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa7"},129960:{"value":"1FBA8","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa8"},129961:{"value":"1FBA9","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfa9"},129962:{"value":"1FBAA","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfaa"},129963:{"value":"1FBAB","name":"BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfab"},129964:{"value":"1FBAC","name":"BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfac"},129965:{"value":"1FBAD","name":"BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfad"},129966:{"value":"1FBAE","name":"BOX DRAWINGS LIGHT DIAGONAL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfae"},129967:{"value":"1FBAF","name":"BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfaf"},129968:{"value":"1FBB0","name":"ARROWHEAD-SHAPED POINTER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb0"},129969:{"value":"1FBB1","name":"INVERSE CHECK MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb1"},129970:{"value":"1FBB2","name":"LEFT HALF RUNNING MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb2"},129971:{"value":"1FBB3","name":"RIGHT HALF RUNNING MAN","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb3"},129972:{"value":"1FBB4","name":"INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb4"},129973:{"value":"1FBB5","name":"LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb5"},129974:{"value":"1FBB6","name":"RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb6"},129975:{"value":"1FBB7","name":"DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb7"},129976:{"value":"1FBB8","name":"UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb8"},129977:{"value":"1FBB9","name":"LEFT HALF FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfb9"},129978:{"value":"1FBBA","name":"RIGHT HALF FOLDER","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfba"},129979:{"value":"1FBBB","name":"VOIDED GREEK CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfbb"},129980:{"value":"1FBBC","name":"RIGHT OPEN SQUARED DOT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfbc"},129981:{"value":"1FBBD","name":"NEGATIVE DIAGONAL CROSS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfbd"},129982:{"value":"1FBBE","name":"NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfbe"},129983:{"value":"1FBBF","name":"NEGATIVE DIAGONAL DIAMOND","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfbf"},129984:{"value":"1FBC0","name":"WHITE HEAVY SALTIRE WITH ROUNDED CORNERS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc0"},129985:{"value":"1FBC1","name":"LEFT THIRD WHITE RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc1"},129986:{"value":"1FBC2","name":"MIDDLE THIRD WHITE RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc2"},129987:{"value":"1FBC3","name":"RIGHT THIRD WHITE RIGHT POINTING INDEX","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc3"},129988:{"value":"1FBC4","name":"NEGATIVE SQUARED QUESTION MARK","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc4"},129989:{"value":"1FBC5","name":"STICK FIGURE","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc5"},129990:{"value":"1FBC6","name":"STICK FIGURE WITH ARMS RAISED","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc6"},129991:{"value":"1FBC7","name":"STICK FIGURE LEANING LEFT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc7"},129992:{"value":"1FBC8","name":"STICK FIGURE LEANING RIGHT","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc8"},129993:{"value":"1FBC9","name":"STICK FIGURE WITH DRESS","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfc9"},129994:{"value":"1FBCA","name":"WHITE UP-POINTING CHEVRON","category":"So","class":"0","bidirectional_category":"ON","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\ud83e\udfca"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Zl.js b/node_modules/unicode/category/Zl.js new file mode 100644 index 000000000..55c2a9706 --- /dev/null +++ b/node_modules/unicode/category/Zl.js @@ -0,0 +1 @@ +module.exports={8232:{"value":"2028","name":"LINE SEPARATOR","category":"Zl","class":"0","bidirectional_category":"WS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2028"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Zp.js b/node_modules/unicode/category/Zp.js new file mode 100644 index 000000000..5009a9eb9 --- /dev/null +++ b/node_modules/unicode/category/Zp.js @@ -0,0 +1 @@ +module.exports={8233:{"value":"2029","name":"PARAGRAPH SEPARATOR","category":"Zp","class":"0","bidirectional_category":"B","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2029"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/Zs.js b/node_modules/unicode/category/Zs.js new file mode 100644 index 000000000..61596d6bc --- /dev/null +++ b/node_modules/unicode/category/Zs.js @@ -0,0 +1 @@ +module.exports={32:{"value":"0020","name":"SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\x20"},160:{"value":"00A0","name":"NO-BREAK SPACE","category":"Zs","class":"0","bidirectional_category":"CS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"NON-BREAKING SPACE","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\xA0"},5760:{"value":"1680","name":"OGHAM SPACE MARK","category":"Zs","class":"0","bidirectional_category":"WS","mapping":"","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u1680"},8192:{"value":"2000","name":"EN QUAD","category":"Zs","class":"0","bidirectional_category":"WS","mapping":"2002","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2000"},8193:{"value":"2001","name":"EM QUAD","category":"Zs","class":"0","bidirectional_category":"WS","mapping":"2003","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2001"},8194:{"value":"2002","name":"EN SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2002"},8195:{"value":"2003","name":"EM SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2003"},8196:{"value":"2004","name":"THREE-PER-EM SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2004"},8197:{"value":"2005","name":"FOUR-PER-EM SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2005"},8198:{"value":"2006","name":"SIX-PER-EM SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2006"},8199:{"value":"2007","name":"FIGURE SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2007"},8200:{"value":"2008","name":"PUNCTUATION SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2008"},8201:{"value":"2009","name":"THIN SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u2009"},8202:{"value":"200A","name":"HAIR SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u200A"},8239:{"value":"202F","name":"NARROW NO-BREAK SPACE","category":"Zs","class":"0","bidirectional_category":"CS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u202F"},8287:{"value":"205F","name":"MEDIUM MATHEMATICAL SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u205F"},12288:{"value":"3000","name":"IDEOGRAPHIC SPACE","category":"Zs","class":"0","bidirectional_category":"WS","mapping":" 0020","decimal_digit_value":"","digit_value":"","numeric_value":"","mirrored":"N","unicode_name":"","comment":"","uppercase_mapping":"","lowercase_mapping":"","titlecase_mapping":"","symbol":"\u3000"}}; \ No newline at end of file diff --git a/node_modules/unicode/category/index.js b/node_modules/unicode/category/index.js new file mode 100644 index 000000000..86793b302 --- /dev/null +++ b/node_modules/unicode/category/index.js @@ -0,0 +1,31 @@ +module.exports = { + Cc: require('./Cc'), + Zs: require('./Zs'), + Po: require('./Po'), + Sc: require('./Sc'), + Ps: require('./Ps'), + Pe: require('./Pe'), + Sm: require('./Sm'), + Pd: require('./Pd'), + Nd: require('./Nd'), + Lu: require('./Lu'), + Sk: require('./Sk'), + Pc: require('./Pc'), + Ll: require('./Ll'), + So: require('./So'), + Lo: require('./Lo'), + Pi: require('./Pi'), + Cf: require('./Cf'), + No: require('./No'), + Pf: require('./Pf'), + Lt: require('./Lt'), + Lm: require('./Lm'), + Mn: require('./Mn'), + Me: require('./Me'), + Mc: require('./Mc'), + Nl: require('./Nl'), + Zl: require('./Zl'), + Zp: require('./Zp'), + Cs: require('./Cs'), + Co: require('./Co') +}; \ No newline at end of file diff --git a/node_modules/unicode/generate.js b/node_modules/unicode/generate.js new file mode 100755 index 000000000..a85bc7b8d --- /dev/null +++ b/node_modules/unicode/generate.js @@ -0,0 +1,156 @@ +#!/usr/bin/env node +// + +var fs = require('fs'), + path = require('path'), + http = require('http'), + BufferStream = require('bufferstream'), + +// http://www.ksu.ru/eng/departments/ktk/test/perl/lib/unicode/UCDFF301.html +keys = ['value', 'name', 'category', 'class', + 'bidirectional_category', 'mapping', 'decimal_digit_value', 'digit_value', + 'numeric_value', 'mirrored', 'unicode_name', 'comment', 'uppercase_mapping', + 'lowercase_mapping', 'titlecase_mapping'], +systemfiles = [ + "UnicodeData.txt" +], + +refs = 0; + + +function zeroPadHex(text, finalLength) { + return ('0000' + text).slice(-1 * finalLength); +} + +function escape(charValue) { + var hexadecimal = charValue.replace(/^0*/, ''); // is already in hexadecimal + + if (hexadecimal.length <= 2) { + // shorthand: \x30 + return '\\x' + zeroPadHex(hexadecimal, 2); + } else if (hexadecimal.length <= 4) { + // BMP unicode: \u2602 + return '\\u' + zeroPadHex(hexadecimal, 4); + } else { + // Outside of BMP: \uD83D\uDE00 + var astralCodePoint = parseInt(hexadecimal, 16); + var highSurrogate = + Math.floor((astralCodePoint - 0x10000) / 0x400) + 0xd800; + var lowSurrogate = ((astralCodePoint - 0x10000) % 0x400) + 0xdc00; + var highSurrogateString = + '\\u' + zeroPadHex(highSurrogate.toString(16), 4); + var lowSurrogateString = + '\\u' + zeroPadHex(lowSurrogate.toString(16), 4); + return '' + highSurrogateString + '' + lowSurrogateString; + } +} + +function stringify(key, value) { + return key + ":" + JSON.stringify(value).replace(/\\\\(u|x)/g, "\\$1"); +} + +function create_index(categories, len) { + console.log("saving index.js …"); + var filename = path.join(__dirname, "category", "index.js"), + cat, contents = 'module.exports = {'; + for(var i = 0 ; i < len ; i++) { + cat = categories[i]; + contents += "\n " + cat + ": require('./" + cat + "')"; + if ((i + 1) !== len) contents += ','; + } + contents += '\n};'; + fs.writeFileSync(filename, contents, {encoding:'utf8'}); +} + +function newFile(name, callback) { + var filename = path.join(__dirname, "category", name + ".js"), + file = fs.createWriteStream(filename, {encoding:'utf8'}); + file.once('close', function () { + if (!--refs) { + console.log("done."); + callback(); + } + }); + refs++; + return file; +} + +function parser(callback) { + var data = {}, + buffer = new BufferStream({encoding:'utf8', size:'flexible'}), + resume = buffer.resume.bind(buffer); + + buffer.split('\n', function (line) { + var v, c, char = {}, + values = line.toString().split(';'); + for(var i = 0 ; i < 15 ; i++) + char[keys[i]] = values[i]; + v = parseInt(char.value, 16); + char.symbol = escape(char.value); + c = char.category; + if (!data[c]) { + data[c] = newFile(c, callback) + .on('drain', resume) + .once('open', function () { + console.log("saving data as %s.js …", c); + if (this.write('module.exports={' + stringify(v, char))) + buffer.resume(); + }); + buffer.pause(); + } else if (!data[c].write("," + stringify(v, char))) { + buffer.pause(); + } + }); + + + buffer.on('end', function () { + var cat, categories = Object.keys(data), + len = categories.length; + for(var i = 0 ; i < len ; i++) { + cat = categories[i]; + data[cat].end("};"); + } + create_index(categories, len); + }); + + buffer.on('error', function (err) { + if (typeof err === 'string') + err = new Error(err); + throw err; + }); + + return buffer; +} + +function read_file(success_cb, error_cb) { + var systemfile, sysfiles = systemfiles.slice(), + try_reading = function (success, error) { + systemfile = sysfiles.shift(); + if (!systemfile) return error_cb(); + console.log("try to read file %s …", systemfile); + fs.exists(systemfile, function (exists) { + if (!exists) { + console.error("%s not found.", systemfile); + return try_reading(success_cb, error_cb); + } + console.log("parsing …"); + fs.createReadStream(systemfile, {encoding:'utf8'}).pipe(parser(success_cb)); + }); + + }; + try_reading(success_cb, error_cb); +} + +// run +if (!module.parent) { // not required + read_file(process.exit, process.exit); +} else { + module.exports = { + escape:escape, + stringify:stringify, + newFile:newFile, + parser:parser, + read_file:read_file + }; +} + diff --git a/node_modules/unicode/package.json b/node_modules/unicode/package.json new file mode 100644 index 000000000..05285533e --- /dev/null +++ b/node_modules/unicode/package.json @@ -0,0 +1,30 @@ +{ + "name": "unicode", + "description": "unicode lookup table", + "version": "14.0.0", + "author": "dodo (https://github.com/dodo)", + "contributors": [ + "Mathias Bynens (http://mathiasbynens.be/)", + "Thomas Danecker ", + "Jacques Favreau" + ], + "homepage": "http://github.com/tdanecker/node-unicodetable", + "repository": { + "type": "git", + "url": "git://github.com/tdanecker/node-unicodetable.git" + }, + "engines": { + "node": ">= 0.8.x" + }, + "scripts": { + "download": "curl \"https://unicode.org/Public/14.0.0/ucd/UnicodeData.txt\" > UnicodeData.txt", + "generate": "node generate.js", + "test": "node test.js", + "np": "np" + }, + "devDependencies": { + "bufferstream": ">= 0.6.2", + "np": "2.13.1" + }, + "license": "MIT" +} diff --git a/node_modules/unicode/test.js b/node_modules/unicode/test.js new file mode 100644 index 000000000..bbdedafe9 --- /dev/null +++ b/node_modules/unicode/test.js @@ -0,0 +1,25 @@ +var path = require('path'); +var assert = require('assert'); +var categories = [ + "Cc Cf Co Cs", + "Ll Lm Lo Lt Lu", + "Mc Me Mn", + "Nd Nl No", + "Pc Pd Pe Pf Pi Po Ps", + "Sc Sk Sm So", + "Zl Zp Zs", +].join(' ').split(' '); + + +categories.forEach(function (cat) { + assert.doesNotThrow(function () { + process.stdout.write(" unicode/category/"+cat+"\r "); + // test if we can load it + require('./category/'+cat); + // clean up + delete require.cache[path.join(__dirname, 'category', cat+".js")]; + // ✓ + process.stdout.write("\x1B[32m✓\x1B[39m unicode/category/"+cat+"\n"); + }, function(err){if(err){console.error(err);return 1}}, "failed to load "+cat+".js"); +}); +console.log("done."); diff --git a/node_modules/urix/.jshintrc b/node_modules/urix/.jshintrc new file mode 100644 index 000000000..9d1a61836 --- /dev/null +++ b/node_modules/urix/.jshintrc @@ -0,0 +1,42 @@ +{ + "bitwise": true, + "camelcase": true, + "curly": false, + "eqeqeq": true, + "es3": false, + "forin": true, + "immed": false, + "indent": false, + "latedef": "nofunc", + "newcap": false, + "noarg": true, + "noempty": true, + "nonew": false, + "plusplus": false, + "quotmark": true, + "undef": true, + "unused": "vars", + "strict": false, + "trailing": true, + "maxparams": 5, + "maxdepth": false, + "maxstatements": false, + "maxcomplexity": false, + "maxlen": 100, + + "asi": true, + "expr": true, + "globalstrict": true, + "smarttabs": true, + "sub": true, + + "node": true, + "globals": { + "describe": false, + "it": false, + "before": false, + "beforeEach": false, + "after": false, + "afterEach": false + } +} diff --git a/node_modules/urix/LICENSE b/node_modules/urix/LICENSE new file mode 100644 index 000000000..0595be367 --- /dev/null +++ b/node_modules/urix/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Simon Lydell + +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. diff --git a/node_modules/urix/index.js b/node_modules/urix/index.js new file mode 100644 index 000000000..dc6ef2700 --- /dev/null +++ b/node_modules/urix/index.js @@ -0,0 +1,17 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var path = require("path") + +"use strict" + +function urix(aPath) { + if (path.sep === "\\") { + return aPath + .replace(/\\/g, "/") + .replace(/^[a-z]:\/?/i, "/") + } + return aPath +} + +module.exports = urix diff --git a/node_modules/urix/package.json b/node_modules/urix/package.json new file mode 100644 index 000000000..992e32959 --- /dev/null +++ b/node_modules/urix/package.json @@ -0,0 +1,25 @@ +{ + "name": "urix", + "version": "0.1.0", + "author": "Simon Lydell", + "license": "MIT", + "description": "Makes Windows-style paths more unix and URI friendly.", + "main": "index.js", + "repository": "lydell/urix", + "keywords": [ + "path", + "url", + "uri", + "unix", + "windows", + "backslash", + "slash" + ], + "scripts": { + "test": "jshint index.js test/ && mocha" + }, + "devDependencies": { + "mocha": "^1.17.1", + "jshint": "^2.4.4" + } +} diff --git a/node_modules/urix/readme.md b/node_modules/urix/readme.md new file mode 100644 index 000000000..b258b9863 --- /dev/null +++ b/node_modules/urix/readme.md @@ -0,0 +1,46 @@ +[![Build Status](https://travis-ci.org/lydell/urix.png?branch=master)](https://travis-ci.org/lydell/urix) + +Overview +======== + +Makes Windows-style paths more unix and URI friendly. Useful if you work with +paths that eventually will be used in URLs. + +```js +var urix = require("urix") + +// On Windows: +urix("c:\\users\\you\\foo") +// /users/you/foo + +// On unix-like systems: +urix("c:\\users\\you\\foo") +// c:\users\you\foo +``` + + +Installation +============ + +`npm install urix` + +```js +var urix = require("urix") +``` + + +Usage +===== + +### `urix(path)` ### + +On Windows, replaces all backslashes with slashes and uses a slash instead of a +drive letter and a colon for absolute paths. + +On unix-like systems it is a no-op. + + +License +======= + +[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/urix/test/index.js b/node_modules/urix/test/index.js new file mode 100644 index 000000000..5333f2463 --- /dev/null +++ b/node_modules/urix/test/index.js @@ -0,0 +1,43 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var path = require("path") +var assert = require("assert") +var urix = require("../") + +"use stict" + +function test(testPath, expected) { + path.sep = "\\" + assert.equal(urix(testPath), expected) + path.sep = "/" + assert.equal(urix(testPath), testPath) +} + +describe("urix", function() { + + it("is a function", function() { + assert.equal(typeof urix, "function") + }) + + + it("converts backslashes to slashes", function() { + test("a\\b\\c", "a/b/c") + test("\\a\\b\\c", "/a/b/c") + test("a/b\\c", "a/b/c") + test("\\\\a\\\\\\b///c", "//a///b///c") + }) + + + it("changes the drive letter to a slash", function() { + test("c:\\a", "/a") + test("C:\\a", "/a") + test("z:\\a", "/a") + test("c:a", "/a") + test("c:/a", "/a") + test("c:\\\\a", "//a") + test("c://a", "//a") + test("c:\\//a", "///a") + }) + +}) diff --git a/node_modules/uuid/AUTHORS b/node_modules/uuid/AUTHORS new file mode 100644 index 000000000..5a1052306 --- /dev/null +++ b/node_modules/uuid/AUTHORS @@ -0,0 +1,5 @@ +Robert Kieffer +Christoph Tavan +AJ ONeal +Vincent Voyer +Roman Shtylman diff --git a/node_modules/uuid/CHANGELOG.md b/node_modules/uuid/CHANGELOG.md new file mode 100644 index 000000000..f811b8a0c --- /dev/null +++ b/node_modules/uuid/CHANGELOG.md @@ -0,0 +1,119 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16) + + +### Features + +* rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) + +### [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) + + +## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) + + +### Bug Fixes + +* typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) + + + + +## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) + + +### Bug Fixes + +* fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) + + + + +# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) + + +### Bug Fixes + +* assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) +* fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) +* Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) +* mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) + +### Features + +* enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) + + + +## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) + + +### Bug Fixes + +* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + + + + +# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16) + + +### Bug Fixes + +* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) +* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + + +### Features + +* Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) + + +# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) + +### Bug Fixes + +* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) +* Fix typo (#178) +* Simple typo fix (#165) + +### Features +* v5 support in CLI (#197) +* V5 support (#188) + + +# 3.0.1 (2016-11-28) + +* split uuid versions into separate files + + +# 3.0.0 (2016-11-17) + +* remove .parse and .unparse + + +# 2.0.0 + +* Removed uuid.BufferClass + + +# 1.4.0 + +* Improved module context detection +* Removed public RNG functions + + +# 1.3.2 + +* Improve tests and handling of v1() options (Issue #24) +* Expose RNG option to allow for perf testing with different generators + + +# 1.3.0 + +* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! +* Support for node.js crypto API +* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md new file mode 100644 index 000000000..8c84e3986 --- /dev/null +++ b/node_modules/uuid/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010-2016 Robert Kieffer and other contributors + +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. diff --git a/node_modules/uuid/README.md b/node_modules/uuid/README.md new file mode 100644 index 000000000..1752e4751 --- /dev/null +++ b/node_modules/uuid/README.md @@ -0,0 +1,276 @@ + + +# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript +const uuidv1 = require('uuid/v1'); +uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' + +``` + +Version 3 (namespace): + +```javascript +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' + +``` + +Version 4 (random): + +```javascript +const uuidv4 = require('uuid/v4'); +uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' + +``` + +Version 5 (namespace): + +```javascript +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' + +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process. + +Example: Generate string UUID with fully-specified options + +```javascript +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' + +``` + +Example: In-place generation of two binary IDs + +```javascript +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // ⇨ + // [ + // 44, 94, 164, 192, 64, 103, + // 17, 233, 146, 52, 155, 29, + // 235, 77, 59, 125 + // ] +uuidv1(null, arr, 16); // ⇨ + // [ + // 44, 94, 164, 192, 64, 103, 17, 233, + // 146, 52, 155, 29, 235, 77, 59, 125, + // 44, 94, 164, 193, 64, 103, 17, 233, + // 146, 52, 155, 29, 235, 77, 59, 125 + // ] + +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' + +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' + +``` + +Example: Generate two IDs in a single buffer + +```javascript +const buffer = new Array(); +uuidv4(null, buffer, 0); // ⇨ + // [ + // 155, 29, 235, 77, 59, + // 125, 75, 173, 155, 221, + // 43, 13, 123, 61, 203, + // 109 + // ] +uuidv4(null, buffer, 16); // ⇨ + // [ + // 155, 29, 235, 77, 59, 125, 75, 173, + // 155, 221, 43, 13, 123, 61, 203, 109, + // 27, 157, 107, 205, 187, 253, 75, 45, + // 155, 93, 171, 141, 251, 189, 75, 237 + // ] + +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' + +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` + +---- +Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/uuid/bin/uuid b/node_modules/uuid/bin/uuid new file mode 100755 index 000000000..502626e60 --- /dev/null +++ b/node_modules/uuid/bin/uuid @@ -0,0 +1,65 @@ +#!/usr/bin/env node +var assert = require('assert'); + +function usage() { + console.log('Usage:'); + console.log(' uuid'); + console.log(' uuid v1'); + console.log(' uuid v3 '); + console.log(' uuid v4'); + console.log(' uuid v5 '); + console.log(' uuid --help'); + console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); +} + +var args = process.argv.slice(2); + +if (args.indexOf('--help') >= 0) { + usage(); + process.exit(0); +} +var version = args.shift() || 'v4'; + +switch (version) { + case 'v1': + var uuidV1 = require('../v1'); + console.log(uuidV1()); + break; + + case 'v3': + var uuidV3 = require('../v3'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v3 name not specified'); + assert(namespace != null, 'v3 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV3.URL; + if (namespace == 'DNS') namespace = uuidV3.DNS; + + console.log(uuidV3(name, namespace)); + break; + + case 'v4': + var uuidV4 = require('../v4'); + console.log(uuidV4()); + break; + + case 'v5': + var uuidV5 = require('../v5'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v5 name not specified'); + assert(namespace != null, 'v5 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV5.URL; + if (namespace == 'DNS') namespace = uuidV5.DNS; + + console.log(uuidV5(name, namespace)); + break; + + default: + usage(); + process.exit(1); +} diff --git a/node_modules/uuid/index.js b/node_modules/uuid/index.js new file mode 100644 index 000000000..e96791ab4 --- /dev/null +++ b/node_modules/uuid/index.js @@ -0,0 +1,8 @@ +var v1 = require('./v1'); +var v4 = require('./v4'); + +var uuid = v4; +uuid.v1 = v1; +uuid.v4 = v4; + +module.exports = uuid; diff --git a/node_modules/uuid/lib/bytesToUuid.js b/node_modules/uuid/lib/bytesToUuid.js new file mode 100644 index 000000000..24b60412a --- /dev/null +++ b/node_modules/uuid/lib/bytesToUuid.js @@ -0,0 +1,26 @@ +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); +} + +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([ + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]] + ]).join(''); +} + +module.exports = bytesToUuid; diff --git a/node_modules/uuid/lib/md5-browser.js b/node_modules/uuid/lib/md5-browser.js new file mode 100644 index 000000000..9b3b6c7ef --- /dev/null +++ b/node_modules/uuid/lib/md5-browser.js @@ -0,0 +1,216 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +'use strict'; + +function md5(bytes) { + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + return md5ToHexEncodedArray( + wordsToMd5( + bytesToWords(bytes) + , bytes.length * 8) + ); +} + + +/* +* Convert an array of little-endian words to an array of bytes +*/ +function md5ToHexEncodedArray(input) { + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; + + for (i = 0; i < length32; i += 8) { + x = (input[i >> 5] >>> (i % 32)) & 0xFF; + + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); + + output.push(hex); + } + return output; +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array bytes to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function bytesToWords(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); + } + + return output; +} + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/md5.js b/node_modules/uuid/lib/md5.js new file mode 100644 index 000000000..7044b872f --- /dev/null +++ b/node_modules/uuid/lib/md5.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function md5(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/rng-browser.js b/node_modules/uuid/lib/rng-browser.js new file mode 100644 index 000000000..6361fb814 --- /dev/null +++ b/node_modules/uuid/lib/rng-browser.js @@ -0,0 +1,34 @@ +// Unique ID creation requires a high quality random # generator. In the +// browser this is a little complicated due to unknown quality of Math.random() +// and inconsistent support for the `crypto` API. We do the best we can via +// feature-detection + +// getRandomValues needs to be invoked in a context where "this" is a Crypto +// implementation. Also, find the complete implementation of crypto on IE11. +var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || + (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); + +if (getRandomValues) { + // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto + var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef + + module.exports = function whatwgRNG() { + getRandomValues(rnds8); + return rnds8; + }; +} else { + // Math.random()-based (RNG) + // + // If all else fails, use Math.random(). It's fast, but is of unspecified + // quality. + var rnds = new Array(16); + + module.exports = function mathRNG() { + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) === 0) r = Math.random() * 0x100000000; + rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return rnds; + }; +} diff --git a/node_modules/uuid/lib/rng.js b/node_modules/uuid/lib/rng.js new file mode 100644 index 000000000..58f0dc9cf --- /dev/null +++ b/node_modules/uuid/lib/rng.js @@ -0,0 +1,8 @@ +// Unique ID creation requires a high quality random # generator. In node.js +// this is pretty straight-forward - we use the crypto API. + +var crypto = require('crypto'); + +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; diff --git a/node_modules/uuid/lib/sha1-browser.js b/node_modules/uuid/lib/sha1-browser.js new file mode 100644 index 000000000..5758ed75c --- /dev/null +++ b/node_modules/uuid/lib/sha1-browser.js @@ -0,0 +1,89 @@ +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +'use strict'; + +function f(s, x, y, z) { + switch (s) { + case 0: return (x & y) ^ (~x & z); + case 1: return x ^ y ^ z; + case 2: return (x & y) ^ (x & z) ^ (y & z); + case 3: return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return (x << n) | (x>>> (32 - n)); +} + +function sha1(bytes) { + var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + bytes.push(0x80); + + var l = bytes.length/4 + 2; + var N = Math.ceil(l/16); + var M = new Array(N); + + for (var i=0; i>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = (H[0] + a) >>> 0; + H[1] = (H[1] + b) >>> 0; + H[2] = (H[2] + c) >>> 0; + H[3] = (H[3] + d) >>> 0; + H[4] = (H[4] + e) >>> 0; + } + + return [ + H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, + H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, + H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, + H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, + H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff + ]; +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/sha1.js b/node_modules/uuid/lib/sha1.js new file mode 100644 index 000000000..0b54b2507 --- /dev/null +++ b/node_modules/uuid/lib/sha1.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function sha1(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('sha1').update(bytes).digest(); +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/v35.js b/node_modules/uuid/lib/v35.js new file mode 100644 index 000000000..8b066cc5e --- /dev/null +++ b/node_modules/uuid/lib/v35.js @@ -0,0 +1,57 @@ +var bytesToUuid = require('./bytesToUuid'); + +function uuidToBytes(uuid) { + // Note: We assume we're being passed a valid uuid string + var bytes = []; + uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { + bytes.push(parseInt(hex, 16)); + }); + + return bytes; +} + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + var bytes = new Array(str.length); + for (var i = 0; i < str.length; i++) { + bytes[i] = str.charCodeAt(i); + } + return bytes; +} + +module.exports = function(name, version, hashfunc) { + var generateUUID = function(value, namespace, buf, offset) { + var off = buf && offset || 0; + + if (typeof(value) == 'string') value = stringToBytes(value); + if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); + + if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); + if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); + + // Per 4.3 + var bytes = hashfunc(namespace.concat(value)); + bytes[6] = (bytes[6] & 0x0f) | version; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + if (buf) { + for (var idx = 0; idx < 16; ++idx) { + buf[off+idx] = bytes[idx]; + } + } + + return buf || bytesToUuid(bytes); + }; + + // Function#name is not settable on some platforms (#270) + try { + generateUUID.name = name; + } catch (err) { + } + + // Pre-defined namespaces, per Appendix C + generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + + return generateUUID; +}; diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json new file mode 100644 index 000000000..efc07b8f6 --- /dev/null +++ b/node_modules/uuid/package.json @@ -0,0 +1,49 @@ +{ + "name": "uuid", + "version": "3.4.0", + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "bin": { + "uuid": "./bin/uuid" + }, + "devDependencies": { + "@commitlint/cli": "~8.2.0", + "@commitlint/config-conventional": "~8.2.0", + "eslint": "~6.4.0", + "husky": "~3.0.5", + "mocha": "6.2.0", + "runmd": "1.2.1", + "standard-version": "7.0.0" + }, + "scripts": { + "lint": "eslint .", + "test": "npm run lint && mocha test/test.js", + "md": "runmd --watch --output=README.md README_js.md", + "release": "standard-version", + "prepare": "runmd --output=README.md README_js.md" + }, + "browser": { + "./lib/rng.js": "./lib/rng-browser.js", + "./lib/sha1.js": "./lib/sha1-browser.js", + "./lib/md5.js": "./lib/md5-browser.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/uuidjs/uuid.git" + }, + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + } +} diff --git a/node_modules/uuid/v1.js b/node_modules/uuid/v1.js new file mode 100644 index 000000000..8c245de43 --- /dev/null +++ b/node_modules/uuid/v1.js @@ -0,0 +1,109 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; +var _clockseq; + +// Previous uuid creation time +var _lastMSecs = 0; +var _lastNSecs = 0; + +// See https://github.com/uuidjs/uuid for API details +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + + // Time since last uuid creation (in msecs) + var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; + + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } + + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } + + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; + + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // `time_mid` + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; + + // `clock_seq_low` + b[i++] = clockseq & 0xff; + + // `node` + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf ? buf : bytesToUuid(b); +} + +module.exports = v1; diff --git a/node_modules/uuid/v3.js b/node_modules/uuid/v3.js new file mode 100644 index 000000000..ee7e14c0f --- /dev/null +++ b/node_modules/uuid/v3.js @@ -0,0 +1,4 @@ +var v35 = require('./lib/v35.js'); +var md5 = require('./lib/md5'); + +module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/node_modules/uuid/v4.js b/node_modules/uuid/v4.js new file mode 100644 index 000000000..1f07be1c5 --- /dev/null +++ b/node_modules/uuid/v4.js @@ -0,0 +1,29 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +function v4(options, buf, offset) { + var i = buf && offset || 0; + + if (typeof(options) == 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; + + var rnds = options.random || (options.rng || rng)(); + + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || bytesToUuid(rnds); +} + +module.exports = v4; diff --git a/node_modules/uuid/v5.js b/node_modules/uuid/v5.js new file mode 100644 index 000000000..4945baf38 --- /dev/null +++ b/node_modules/uuid/v5.js @@ -0,0 +1,3 @@ +var v35 = require('./lib/v35.js'); +var sha1 = require('./lib/sha1'); +module.exports = v35('v5', 0x50, sha1); diff --git a/node_modules/verror/.npmignore b/node_modules/verror/.npmignore new file mode 100644 index 000000000..f14aec804 --- /dev/null +++ b/node_modules/verror/.npmignore @@ -0,0 +1,9 @@ +.gitignore +.gitmodules +deps +examples +experiments +jsl.node.conf +Makefile +Makefile.targ +test diff --git a/node_modules/verror/CHANGES.md b/node_modules/verror/CHANGES.md new file mode 100644 index 000000000..bbb745a2f --- /dev/null +++ b/node_modules/verror/CHANGES.md @@ -0,0 +1,28 @@ +# Changelog + +## Not yet released + +None yet. + +## v1.10.0 + +* #49 want convenience functions for MultiErrors + +## v1.9.0 + +* #47 could use VError.hasCauseWithName() + +## v1.8.1 + +* #39 captureStackTrace lost when inheriting from WError + +## v1.8.0 + +* #23 Preserve original stack trace(s) + +## v1.7.0 + +* #10 better support for extra properties on Errors +* #11 make it easy to find causes of a particular kind +* #29 No documentation on how to Install this package +* #36 elide development-only files from npm package diff --git a/node_modules/verror/CONTRIBUTING.md b/node_modules/verror/CONTRIBUTING.md new file mode 100644 index 000000000..750cef8df --- /dev/null +++ b/node_modules/verror/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# Contributing + +This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new +changes. Anyone can submit changes. To get started, see the [cr.joyent.us user +guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). +This repo does not use GitHub pull requests. + +See the [Joyent Engineering +Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general +best practices expected in this repository. + +Contributions should be "make prepush" clean. The "prepush" target runs the +"check" target, which requires these separate tools: + +* https://github.com/davepacheco/jsstyle +* https://github.com/davepacheco/javascriptlint + +If you're changing something non-trivial or user-facing, you may want to submit +an issue first. diff --git a/node_modules/verror/LICENSE b/node_modules/verror/LICENSE new file mode 100644 index 000000000..82a5cb863 --- /dev/null +++ b/node_modules/verror/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2016, Joyent, Inc. All rights reserved. + +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 diff --git a/node_modules/verror/README.md b/node_modules/verror/README.md new file mode 100644 index 000000000..c1f0635ef --- /dev/null +++ b/node_modules/verror/README.md @@ -0,0 +1,528 @@ +# verror: rich JavaScript errors + +This module provides several classes in support of Joyent's [Best Practices for +Error Handling in Node.js](http://www.joyent.com/developers/node/design/errors). +If you find any of the behavior here confusing or surprising, check out that +document first. + +The error classes here support: + +* printf-style arguments for the message +* chains of causes +* properties to provide extra information about the error +* creating your own subclasses that support all of these + +The classes here are: + +* **VError**, for chaining errors while preserving each one's error message. + This is useful in servers and command-line utilities when you want to + propagate an error up a call stack, but allow various levels to add their own + context. See examples below. +* **WError**, for wrapping errors while hiding the lower-level messages from the + top-level error. This is useful for API endpoints where you don't want to + expose internal error messages, but you still want to preserve the error chain + for logging and debugging. +* **SError**, which is just like VError but interprets printf-style arguments + more strictly. +* **MultiError**, which is just an Error that encapsulates one or more other + errors. (This is used for parallel operations that return several errors.) + + +# Quick start + +First, install the package: + + npm install verror + +If nothing else, you can use VError as a drop-in replacement for the built-in +JavaScript Error class, with the addition of printf-style messages: + +```javascript +var err = new VError('missing file: "%s"', '/etc/passwd'); +console.log(err.message); +``` + +This prints: + + missing file: "/etc/passwd" + +You can also pass a `cause` argument, which is any other Error object: + +```javascript +var fs = require('fs'); +var filename = '/nonexistent'; +fs.stat(filename, function (err1) { + var err2 = new VError(err1, 'stat "%s"', filename); + console.error(err2.message); +}); +``` + +This prints out: + + stat "/nonexistent": ENOENT, stat '/nonexistent' + +which resembles how Unix programs typically report errors: + + $ sort /nonexistent + sort: open failed: /nonexistent: No such file or directory + +To match the Unixy feel, when you print out the error, just prepend the +program's name to the VError's `message`. Or just call +[node-cmdutil.fail(your_verror)](https://github.com/joyent/node-cmdutil), which +does this for you. + +You can get the next-level Error using `err.cause()`: + +```javascript +console.error(err2.cause().message); +``` + +prints: + + ENOENT, stat '/nonexistent' + +Of course, you can chain these as many times as you want, and it works with any +kind of Error: + +```javascript +var err1 = new Error('No such file or directory'); +var err2 = new VError(err1, 'failed to stat "%s"', '/junk'); +var err3 = new VError(err2, 'request failed'); +console.error(err3.message); +``` + +This prints: + + request failed: failed to stat "/junk": No such file or directory + +The idea is that each layer in the stack annotates the error with a description +of what it was doing. The end result is a message that explains what happened +at each level. + +You can also decorate Error objects with additional information so that callers +can not only handle each kind of error differently, but also construct their own +error messages (e.g., to localize them, format them, group them by type, and so +on). See the example below. + + +# Deeper dive + +The two main goals for VError are: + +* **Make it easy to construct clear, complete error messages intended for + people.** Clear error messages greatly improve both user experience and + debuggability, so we wanted to make it easy to build them. That's why the + constructor takes printf-style arguments. +* **Make it easy to construct objects with programmatically-accessible + metadata** (which we call _informational properties_). Instead of just saying + "connection refused while connecting to 192.168.1.2:80", you can add + properties like `"ip": "192.168.1.2"` and `"tcpPort": 80`. This can be used + for feeding into monitoring systems, analyzing large numbers of Errors (as + from a log file), or localizing error messages. + +To really make this useful, it also needs to be easy to compose Errors: +higher-level code should be able to augment the Errors reported by lower-level +code to provide a more complete description of what happened. Instead of saying +"connection refused", you can say "operation X failed: connection refused". +That's why VError supports `causes`. + +In order for all this to work, programmers need to know that it's generally safe +to wrap lower-level Errors with higher-level ones. If you have existing code +that handles Errors produced by a library, you should be able to wrap those +Errors with a VError to add information without breaking the error handling +code. There are two obvious ways that this could break such consumers: + +* The error's name might change. People typically use `name` to determine what + kind of Error they've got. To ensure compatibility, you can create VErrors + with custom names, but this approach isn't great because it prevents you from + representing complex failures. For this reason, VError provides + `findCauseByName`, which essentially asks: does this Error _or any of its + causes_ have this specific type? If error handling code uses + `findCauseByName`, then subsystems can construct very specific causal chains + for debuggability and still let people handle simple cases easily. There's an + example below. +* The error's properties might change. People often hang additional properties + off of Error objects. If we wrap an existing Error in a new Error, those + properties would be lost unless we copied them. But there are a variety of + both standard and non-standard Error properties that should _not_ be copied in + this way: most obviously `name`, `message`, and `stack`, but also `fileName`, + `lineNumber`, and a few others. Plus, it's useful for some Error subclasses + to have their own private properties -- and there'd be no way to know whether + these should be copied. For these reasons, VError first-classes these + information properties. You have to provide them in the constructor, you can + only fetch them with the `info()` function, and VError takes care of making + sure properties from causes wind up in the `info()` output. + +Let's put this all together with an example from the node-fast RPC library. +node-fast implements a simple RPC protocol for Node programs. There's a server +and client interface, and clients make RPC requests to servers. Let's say the +server fails with an UnauthorizedError with message "user 'bob' is not +authorized". The client wraps all server errors with a FastServerError. The +client also wraps all request errors with a FastRequestError that includes the +name of the RPC call being made. The result of this failed RPC might look like +this: + + name: FastRequestError + message: "request failed: server error: user 'bob' is not authorized" + rpcMsgid: + rpcMethod: GetObject + cause: + name: FastServerError + message: "server error: user 'bob' is not authorized" + cause: + name: UnauthorizedError + message: "user 'bob' is not authorized" + rpcUser: "bob" + +When the caller uses `VError.info()`, the information properties are collapsed +so that it looks like this: + + message: "request failed: server error: user 'bob' is not authorized" + rpcMsgid: + rpcMethod: GetObject + rpcUser: "bob" + +Taking this apart: + +* The error's message is a complete description of the problem. The caller can + report this directly to its caller, which can potentially make its way back to + an end user (if appropriate). It can also be logged. +* The caller can tell that the request failed on the server, rather than as a + result of a client problem (e.g., failure to serialize the request), a + transport problem (e.g., failure to connect to the server), or something else + (e.g., a timeout). They do this using `findCauseByName('FastServerError')` + rather than checking the `name` field directly. +* If the caller logs this error, the logs can be analyzed to aggregate + errors by cause, by RPC method name, by user, or whatever. Or the + error can be correlated with other events for the same rpcMsgid. +* It wasn't very hard for any part of the code to contribute to this Error. + Each part of the stack has just a few lines to provide exactly what it knows, + with very little boilerplate. + +It's not expected that you'd use these complex forms all the time. Despite +supporting the complex case above, you can still just do: + + new VError("my service isn't working"); + +for the simple cases. + + +# Reference: VError, WError, SError + +VError, WError, and SError are convenient drop-in replacements for `Error` that +support printf-style arguments, first-class causes, informational properties, +and other useful features. + + +## Constructors + +The VError constructor has several forms: + +```javascript +/* + * This is the most general form. You can specify any supported options + * (including "cause" and "info") this way. + */ +new VError(options, sprintf_args...) + +/* + * This is a useful shorthand when the only option you need is "cause". + */ +new VError(cause, sprintf_args...) + +/* + * This is a useful shorthand when you don't need any options at all. + */ +new VError(sprintf_args...) +``` + +All of these forms construct a new VError that behaves just like the built-in +JavaScript `Error` class, with some additional methods described below. + +In the first form, `options` is a plain object with any of the following +optional properties: + +Option name | Type | Meaning +---------------- | ---------------- | ------- +`name` | string | Describes what kind of error this is. This is intended for programmatic use to distinguish between different kinds of errors. Note that in modern versions of Node.js, this name is ignored in the `stack` property value, but callers can still use the `name` property to get at it. +`cause` | any Error object | Indicates that the new error was caused by `cause`. See `cause()` below. If unspecified, the cause will be `null`. +`strict` | boolean | If true, then `null` and `undefined` values in `sprintf_args` are passed through to `sprintf()`. Otherwise, these are replaced with the strings `'null'`, and '`undefined`', respectively. +`constructorOpt` | function | If specified, then the stack trace for this error ends at function `constructorOpt`. Functions called by `constructorOpt` will not show up in the stack. This is useful when this class is subclassed. +`info` | object | Specifies arbitrary informational properties that are available through the `VError.info(err)` static class method. See that method for details. + +The second form is equivalent to using the first form with the specified `cause` +as the error's cause. This form is distinguished from the first form because +the first argument is an Error. + +The third form is equivalent to using the first form with all default option +values. This form is distinguished from the other forms because the first +argument is not an object or an Error. + +The `WError` constructor is used exactly the same way as the `VError` +constructor. The `SError` constructor is also used the same way as the +`VError` constructor except that in all cases, the `strict` property is +overriden to `true. + + +## Public properties + +`VError`, `WError`, and `SError` all provide the same public properties as +JavaScript's built-in Error objects. + +Property name | Type | Meaning +------------- | ------ | ------- +`name` | string | Programmatically-usable name of the error. +`message` | string | Human-readable summary of the failure. Programmatically-accessible details are provided through `VError.info(err)` class method. +`stack` | string | Human-readable stack trace where the Error was constructed. + +For all of these classes, the printf-style arguments passed to the constructor +are processed with `sprintf()` to form a message. For `WError`, this becomes +the complete `message` property. For `SError` and `VError`, this message is +prepended to the message of the cause, if any (with a suitable separator), and +the result becomes the `message` property. + +The `stack` property is managed entirely by the underlying JavaScript +implementation. It's generally implemented using a getter function because +constructing the human-readable stack trace is somewhat expensive. + +## Class methods + +The following methods are defined on the `VError` class and as exported +functions on the `verror` module. They're defined this way rather than using +methods on VError instances so that they can be used on Errors not created with +`VError`. + +### `VError.cause(err)` + +The `cause()` function returns the next Error in the cause chain for `err`, or +`null` if there is no next error. See the `cause` argument to the constructor. +Errors can have arbitrarily long cause chains. You can walk the `cause` chain +by invoking `VError.cause(err)` on each subsequent return value. If `err` is +not a `VError`, the cause is `null`. + +### `VError.info(err)` + +Returns an object with all of the extra error information that's been associated +with this Error and all of its causes. These are the properties passed in using +the `info` option to the constructor. Properties not specified in the +constructor for this Error are implicitly inherited from this error's cause. + +These properties are intended to provide programmatically-accessible metadata +about the error. For an error that indicates a failure to resolve a DNS name, +informational properties might include the DNS name to be resolved, or even the +list of resolvers used to resolve it. The values of these properties should +generally be plain objects (i.e., consisting only of null, undefined, numbers, +booleans, strings, and objects and arrays containing only other plain objects). + +### `VError.fullStack(err)` + +Returns a string containing the full stack trace, with all nested errors recursively +reported as `'caused by:' + err.stack`. + +### `VError.findCauseByName(err, name)` + +The `findCauseByName()` function traverses the cause chain for `err`, looking +for an error whose `name` property matches the passed in `name` value. If no +match is found, `null` is returned. + +If all you want is to know _whether_ there's a cause (and you don't care what it +is), you can use `VError.hasCauseWithName(err, name)`. + +If a vanilla error or a non-VError error is passed in, then there is no cause +chain to traverse. In this scenario, the function will check the `name` +property of only `err`. + +### `VError.hasCauseWithName(err, name)` + +Returns true if and only if `VError.findCauseByName(err, name)` would return +a non-null value. This essentially determines whether `err` has any cause in +its cause chain that has name `name`. + +### `VError.errorFromList(errors)` + +Given an array of Error objects (possibly empty), return a single error +representing the whole collection of errors. If the list has: + +* 0 elements, returns `null` +* 1 element, returns the sole error +* more than 1 element, returns a MultiError referencing the whole list + +This is useful for cases where an operation may produce any number of errors, +and you ultimately want to implement the usual `callback(err)` pattern. You can +accumulate the errors in an array and then invoke +`callback(VError.errorFromList(errors))` when the operation is complete. + + +### `VError.errorForEach(err, func)` + +Convenience function for iterating an error that may itself be a MultiError. + +In all cases, `err` must be an Error. If `err` is a MultiError, then `func` is +invoked as `func(errorN)` for each of the underlying errors of the MultiError. +If `err` is any other kind of error, `func` is invoked once as `func(err)`. In +all cases, `func` is invoked synchronously. + +This is useful for cases where an operation may produce any number of warnings +that may be encapsulated with a MultiError -- but may not be. + +This function does not iterate an error's cause chain. + + +## Examples + +The "Demo" section above covers several basic cases. Here's a more advanced +case: + +```javascript +var err1 = new VError('something bad happened'); +/* ... */ +var err2 = new VError({ + 'name': 'ConnectionError', + 'cause': err1, + 'info': { + 'errno': 'ECONNREFUSED', + 'remote_ip': '127.0.0.1', + 'port': 215 + } +}, 'failed to connect to "%s:%d"', '127.0.0.1', 215); + +console.log(err2.message); +console.log(err2.name); +console.log(VError.info(err2)); +console.log(err2.stack); +``` + +This outputs: + + failed to connect to "127.0.0.1:215": something bad happened + ConnectionError + { errno: 'ECONNREFUSED', remote_ip: '127.0.0.1', port: 215 } + ConnectionError: failed to connect to "127.0.0.1:215": something bad happened + at Object. (/home/dap/node-verror/examples/info.js:5:12) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) + at node.js:935:3 + +Information properties are inherited up the cause chain, with values at the top +of the chain overriding same-named values lower in the chain. To continue that +example: + +```javascript +var err3 = new VError({ + 'name': 'RequestError', + 'cause': err2, + 'info': { + 'errno': 'EBADREQUEST' + } +}, 'request failed'); + +console.log(err3.message); +console.log(err3.name); +console.log(VError.info(err3)); +console.log(err3.stack); +``` + +This outputs: + + request failed: failed to connect to "127.0.0.1:215": something bad happened + RequestError + { errno: 'EBADREQUEST', remote_ip: '127.0.0.1', port: 215 } + RequestError: request failed: failed to connect to "127.0.0.1:215": something bad happened + at Object. (/home/dap/node-verror/examples/info.js:20:12) + at Module._compile (module.js:456:26) + at Object.Module._extensions..js (module.js:474:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Function.Module.runMain (module.js:497:10) + at startup (node.js:119:16) + at node.js:935:3 + +You can also print the complete stack trace of combined `Error`s by using +`VError.fullStack(err).` + +```javascript +var err1 = new VError('something bad happened'); +/* ... */ +var err2 = new VError(err1, 'something really bad happened here'); + +console.log(VError.fullStack(err2)); +``` + +This outputs: + + VError: something really bad happened here: something bad happened + at Object. (/home/dap/node-verror/examples/fullStack.js:5:12) + at Module._compile (module.js:409:26) + at Object.Module._extensions..js (module.js:416:10) + at Module.load (module.js:343:32) + at Function.Module._load (module.js:300:12) + at Function.Module.runMain (module.js:441:10) + at startup (node.js:139:18) + at node.js:968:3 + caused by: VError: something bad happened + at Object. (/home/dap/node-verror/examples/fullStack.js:3:12) + at Module._compile (module.js:409:26) + at Object.Module._extensions..js (module.js:416:10) + at Module.load (module.js:343:32) + at Function.Module._load (module.js:300:12) + at Function.Module.runMain (module.js:441:10) + at startup (node.js:139:18) + at node.js:968:3 + +`VError.fullStack` is also safe to use on regular `Error`s, so feel free to use +it whenever you need to extract the stack trace from an `Error`, regardless if +it's a `VError` or not. + +# Reference: MultiError + +MultiError is an Error class that represents a group of Errors. This is used +when you logically need to provide a single Error, but you want to preserve +information about multiple underying Errors. A common case is when you execute +several operations in parallel and some of them fail. + +MultiErrors are constructed as: + +```javascript +new MultiError(error_list) +``` + +`error_list` is an array of at least one `Error` object. + +The cause of the MultiError is the first error provided. None of the other +`VError` options are supported. The `message` for a MultiError consists the +`message` from the first error, prepended with a message indicating that there +were other errors. + +For example: + +```javascript +err = new MultiError([ + new Error('failed to resolve DNS name "abc.example.com"'), + new Error('failed to resolve DNS name "def.example.com"'), +]); + +console.error(err.message); +``` + +outputs: + + first of 2 errors: failed to resolve DNS name "abc.example.com" + +See the convenience function `VError.errorFromList`, which is sometimes simpler +to use than this constructor. + +## Public methods + + +### `errors()` + +Returns an array of the errors used to construct this MultiError. + + +# Contributing + +See separate [contribution guidelines](CONTRIBUTING.md). diff --git a/node_modules/verror/lib/verror.js b/node_modules/verror/lib/verror.js new file mode 100644 index 000000000..8663ddead --- /dev/null +++ b/node_modules/verror/lib/verror.js @@ -0,0 +1,451 @@ +/* + * verror.js: richer JavaScript errors + */ + +var mod_assertplus = require('assert-plus'); +var mod_util = require('util'); + +var mod_extsprintf = require('extsprintf'); +var mod_isError = require('core-util-is').isError; +var sprintf = mod_extsprintf.sprintf; + +/* + * Public interface + */ + +/* So you can 'var VError = require('verror')' */ +module.exports = VError; +/* For compatibility */ +VError.VError = VError; +/* Other exported classes */ +VError.SError = SError; +VError.WError = WError; +VError.MultiError = MultiError; + +/* + * Common function used to parse constructor arguments for VError, WError, and + * SError. Named arguments to this function: + * + * strict force strict interpretation of sprintf arguments, even + * if the options in "argv" don't say so + * + * argv error's constructor arguments, which are to be + * interpreted as described in README.md. For quick + * reference, "argv" has one of the following forms: + * + * [ sprintf_args... ] (argv[0] is a string) + * [ cause, sprintf_args... ] (argv[0] is an Error) + * [ options, sprintf_args... ] (argv[0] is an object) + * + * This function normalizes these forms, producing an object with the following + * properties: + * + * options equivalent to "options" in third form. This will never + * be a direct reference to what the caller passed in + * (i.e., it may be a shallow copy), so it can be freely + * modified. + * + * shortmessage result of sprintf(sprintf_args), taking options.strict + * into account as described in README.md. + */ +function parseConstructorArguments(args) +{ + var argv, options, sprintf_args, shortmessage, k; + + mod_assertplus.object(args, 'args'); + mod_assertplus.bool(args.strict, 'args.strict'); + mod_assertplus.array(args.argv, 'args.argv'); + argv = args.argv; + + /* + * First, figure out which form of invocation we've been given. + */ + if (argv.length === 0) { + options = {}; + sprintf_args = []; + } else if (mod_isError(argv[0])) { + options = { 'cause': argv[0] }; + sprintf_args = argv.slice(1); + } else if (typeof (argv[0]) === 'object') { + options = {}; + for (k in argv[0]) { + options[k] = argv[0][k]; + } + sprintf_args = argv.slice(1); + } else { + mod_assertplus.string(argv[0], + 'first argument to VError, SError, or WError ' + + 'constructor must be a string, object, or Error'); + options = {}; + sprintf_args = argv; + } + + /* + * Now construct the error's message. + * + * extsprintf (which we invoke here with our caller's arguments in order + * to construct this Error's message) is strict in its interpretation of + * values to be processed by the "%s" specifier. The value passed to + * extsprintf must actually be a string or something convertible to a + * String using .toString(). Passing other values (notably "null" and + * "undefined") is considered a programmer error. The assumption is + * that if you actually want to print the string "null" or "undefined", + * then that's easy to do that when you're calling extsprintf; on the + * other hand, if you did NOT want that (i.e., there's actually a bug + * where the program assumes some variable is non-null and tries to + * print it, which might happen when constructing a packet or file in + * some specific format), then it's better to stop immediately than + * produce bogus output. + * + * However, sometimes the bug is only in the code calling VError, and a + * programmer might prefer to have the error message contain "null" or + * "undefined" rather than have the bug in the error path crash the + * program (making the first bug harder to identify). For that reason, + * by default VError converts "null" or "undefined" arguments to their + * string representations and passes those to extsprintf. Programmers + * desiring the strict behavior can use the SError class or pass the + * "strict" option to the VError constructor. + */ + mod_assertplus.object(options); + if (!options.strict && !args.strict) { + sprintf_args = sprintf_args.map(function (a) { + return (a === null ? 'null' : + a === undefined ? 'undefined' : a); + }); + } + + if (sprintf_args.length === 0) { + shortmessage = ''; + } else { + shortmessage = sprintf.apply(null, sprintf_args); + } + + return ({ + 'options': options, + 'shortmessage': shortmessage + }); +} + +/* + * See README.md for reference documentation. + */ +function VError() +{ + var args, obj, parsed, cause, ctor, message, k; + + args = Array.prototype.slice.call(arguments, 0); + + /* + * This is a regrettable pattern, but JavaScript's built-in Error class + * is defined to work this way, so we allow the constructor to be called + * without "new". + */ + if (!(this instanceof VError)) { + obj = Object.create(VError.prototype); + VError.apply(obj, arguments); + return (obj); + } + + /* + * For convenience and backwards compatibility, we support several + * different calling forms. Normalize them here. + */ + parsed = parseConstructorArguments({ + 'argv': args, + 'strict': false + }); + + /* + * If we've been given a name, apply it now. + */ + if (parsed.options.name) { + mod_assertplus.string(parsed.options.name, + 'error\'s "name" must be a string'); + this.name = parsed.options.name; + } + + /* + * For debugging, we keep track of the original short message (attached + * this Error particularly) separately from the complete message (which + * includes the messages of our cause chain). + */ + this.jse_shortmsg = parsed.shortmessage; + message = parsed.shortmessage; + + /* + * If we've been given a cause, record a reference to it and update our + * message appropriately. + */ + cause = parsed.options.cause; + if (cause) { + mod_assertplus.ok(mod_isError(cause), 'cause is not an Error'); + this.jse_cause = cause; + + if (!parsed.options.skipCauseMessage) { + message += ': ' + cause.message; + } + } + + /* + * If we've been given an object with properties, shallow-copy that + * here. We don't want to use a deep copy in case there are non-plain + * objects here, but we don't want to use the original object in case + * the caller modifies it later. + */ + this.jse_info = {}; + if (parsed.options.info) { + for (k in parsed.options.info) { + this.jse_info[k] = parsed.options.info[k]; + } + } + + this.message = message; + Error.call(this, message); + + if (Error.captureStackTrace) { + ctor = parsed.options.constructorOpt || this.constructor; + Error.captureStackTrace(this, ctor); + } + + return (this); +} + +mod_util.inherits(VError, Error); +VError.prototype.name = 'VError'; + +VError.prototype.toString = function ve_toString() +{ + var str = (this.hasOwnProperty('name') && this.name || + this.constructor.name || this.constructor.prototype.name); + if (this.message) + str += ': ' + this.message; + + return (str); +}; + +/* + * This method is provided for compatibility. New callers should use + * VError.cause() instead. That method also uses the saner `null` return value + * when there is no cause. + */ +VError.prototype.cause = function ve_cause() +{ + var cause = VError.cause(this); + return (cause === null ? undefined : cause); +}; + +/* + * Static methods + * + * These class-level methods are provided so that callers can use them on + * instances of Errors that are not VErrors. New interfaces should be provided + * only using static methods to eliminate the class of programming mistake where + * people fail to check whether the Error object has the corresponding methods. + */ + +VError.cause = function (err) +{ + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + return (mod_isError(err.jse_cause) ? err.jse_cause : null); +}; + +VError.info = function (err) +{ + var rv, cause, k; + + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + cause = VError.cause(err); + if (cause !== null) { + rv = VError.info(cause); + } else { + rv = {}; + } + + if (typeof (err.jse_info) == 'object' && err.jse_info !== null) { + for (k in err.jse_info) { + rv[k] = err.jse_info[k]; + } + } + + return (rv); +}; + +VError.findCauseByName = function (err, name) +{ + var cause; + + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + mod_assertplus.string(name, 'name'); + mod_assertplus.ok(name.length > 0, 'name cannot be empty'); + + for (cause = err; cause !== null; cause = VError.cause(cause)) { + mod_assertplus.ok(mod_isError(cause)); + if (cause.name == name) { + return (cause); + } + } + + return (null); +}; + +VError.hasCauseWithName = function (err, name) +{ + return (VError.findCauseByName(err, name) !== null); +}; + +VError.fullStack = function (err) +{ + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + + var cause = VError.cause(err); + + if (cause) { + return (err.stack + '\ncaused by: ' + VError.fullStack(cause)); + } + + return (err.stack); +}; + +VError.errorFromList = function (errors) +{ + mod_assertplus.arrayOfObject(errors, 'errors'); + + if (errors.length === 0) { + return (null); + } + + errors.forEach(function (e) { + mod_assertplus.ok(mod_isError(e)); + }); + + if (errors.length == 1) { + return (errors[0]); + } + + return (new MultiError(errors)); +}; + +VError.errorForEach = function (err, func) +{ + mod_assertplus.ok(mod_isError(err), 'err must be an Error'); + mod_assertplus.func(func, 'func'); + + if (err instanceof MultiError) { + err.errors().forEach(function iterError(e) { func(e); }); + } else { + func(err); + } +}; + + +/* + * SError is like VError, but stricter about types. You cannot pass "null" or + * "undefined" as string arguments to the formatter. + */ +function SError() +{ + var args, obj, parsed, options; + + args = Array.prototype.slice.call(arguments, 0); + if (!(this instanceof SError)) { + obj = Object.create(SError.prototype); + SError.apply(obj, arguments); + return (obj); + } + + parsed = parseConstructorArguments({ + 'argv': args, + 'strict': true + }); + + options = parsed.options; + VError.call(this, options, '%s', parsed.shortmessage); + + return (this); +} + +/* + * We don't bother setting SError.prototype.name because once constructed, + * SErrors are just like VErrors. + */ +mod_util.inherits(SError, VError); + + +/* + * Represents a collection of errors for the purpose of consumers that generally + * only deal with one error. Callers can extract the individual errors + * contained in this object, but may also just treat it as a normal single + * error, in which case a summary message will be printed. + */ +function MultiError(errors) +{ + mod_assertplus.array(errors, 'list of errors'); + mod_assertplus.ok(errors.length > 0, 'must be at least one error'); + this.ase_errors = errors; + + VError.call(this, { + 'cause': errors[0] + }, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's'); +} + +mod_util.inherits(MultiError, VError); +MultiError.prototype.name = 'MultiError'; + +MultiError.prototype.errors = function me_errors() +{ + return (this.ase_errors.slice(0)); +}; + + +/* + * See README.md for reference details. + */ +function WError() +{ + var args, obj, parsed, options; + + args = Array.prototype.slice.call(arguments, 0); + if (!(this instanceof WError)) { + obj = Object.create(WError.prototype); + WError.apply(obj, args); + return (obj); + } + + parsed = parseConstructorArguments({ + 'argv': args, + 'strict': false + }); + + options = parsed.options; + options['skipCauseMessage'] = true; + VError.call(this, options, '%s', parsed.shortmessage); + + return (this); +} + +mod_util.inherits(WError, VError); +WError.prototype.name = 'WError'; + +WError.prototype.toString = function we_toString() +{ + var str = (this.hasOwnProperty('name') && this.name || + this.constructor.name || this.constructor.prototype.name); + if (this.message) + str += ': ' + this.message; + if (this.jse_cause && this.jse_cause.message) + str += '; caused by ' + this.jse_cause.toString(); + + return (str); +}; + +/* + * For purely historical reasons, WError's cause() function allows you to set + * the cause. + */ +WError.prototype.cause = function we_cause(c) +{ + if (mod_isError(c)) + this.jse_cause = c; + + return (this.jse_cause); +}; diff --git a/node_modules/verror/node_modules/assert-plus/AUTHORS b/node_modules/verror/node_modules/assert-plus/AUTHORS new file mode 100644 index 000000000..1923524fe --- /dev/null +++ b/node_modules/verror/node_modules/assert-plus/AUTHORS @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/node_modules/verror/node_modules/assert-plus/CHANGES.md b/node_modules/verror/node_modules/assert-plus/CHANGES.md new file mode 100644 index 000000000..57d92bfdb --- /dev/null +++ b/node_modules/verror/node_modules/assert-plus/CHANGES.md @@ -0,0 +1,14 @@ +# assert-plus Changelog + +## 1.0.0 + +- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input +- Add assert.finite check. Previous assert.number callers should use this if + they expect Infinity inputs to throw. + +## 0.2.0 + +- Fix `assert.object(null)` so it throws +- Fix optional/arrayOf exports for non-type-of asserts +- Add optiona/arrayOf exports for Stream/Date/Regex/uuid +- Add basic unit test coverage diff --git a/node_modules/verror/node_modules/assert-plus/README.md b/node_modules/verror/node_modules/assert-plus/README.md new file mode 100644 index 000000000..ec200d161 --- /dev/null +++ b/node_modules/verror/node_modules/assert-plus/README.md @@ -0,0 +1,162 @@ +# assert-plus + +This library is a super small wrapper over node's assert module that has two +things: (1) the ability to disable assertions with the environment variable +NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like +`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks +like this: + +```javascript + var assert = require('assert-plus'); + + function fooAccount(options, callback) { + assert.object(options, 'options'); + assert.number(options.id, 'options.id'); + assert.bool(options.isManager, 'options.isManager'); + assert.string(options.name, 'options.name'); + assert.arrayOfString(options.email, 'options.email'); + assert.func(callback, 'callback'); + + // Do stuff + callback(null, {}); + } +``` + +# API + +All methods that *aren't* part of node's core assert API are simply assumed to +take an argument, and then a string 'name' that's not a message; `AssertionError` +will be thrown if the assertion fails with a message like: + + AssertionError: foo (string) is required + at test (/home/mark/work/foo/foo.js:3:9) + at Object. (/home/mark/work/foo/foo.js:15:1) + at Module._compile (module.js:446:26) + at Object..js (module.js:464:10) + at Module.load (module.js:353:31) + at Function._load (module.js:311:12) + at Array.0 (module.js:484:10) + at EventEmitter._tickCallback (node.js:190:38) + +from: + +```javascript + function test(foo) { + assert.string(foo, 'foo'); + } +``` + +There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: + +```javascript + function test(foo) { + assert.arrayOfString(foo, 'foo'); + } +``` + +You can assert IFF an argument is not `undefined` (i.e., an optional arg): + +```javascript + assert.optionalString(foo, 'foo'); +``` + +Lastly, you can opt-out of assertion checking altogether by setting the +environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have +lots of assertions, and don't want to pay `typeof ()` taxes to v8 in +production. Be advised: The standard functions re-exported from `assert` are +also disabled in assert-plus if NDEBUG is specified. Using them directly from +the `assert` module avoids this behavior. + +The complete list of APIs is: + +* assert.array +* assert.bool +* assert.buffer +* assert.func +* assert.number +* assert.finite +* assert.object +* assert.string +* assert.stream +* assert.date +* assert.regexp +* assert.uuid +* assert.arrayOfArray +* assert.arrayOfBool +* assert.arrayOfBuffer +* assert.arrayOfFunc +* assert.arrayOfNumber +* assert.arrayOfFinite +* assert.arrayOfObject +* assert.arrayOfString +* assert.arrayOfStream +* assert.arrayOfDate +* assert.arrayOfRegexp +* assert.arrayOfUuid +* assert.optionalArray +* assert.optionalBool +* assert.optionalBuffer +* assert.optionalFunc +* assert.optionalNumber +* assert.optionalFinite +* assert.optionalObject +* assert.optionalString +* assert.optionalStream +* assert.optionalDate +* assert.optionalRegexp +* assert.optionalUuid +* assert.optionalArrayOfArray +* assert.optionalArrayOfBool +* assert.optionalArrayOfBuffer +* assert.optionalArrayOfFunc +* assert.optionalArrayOfNumber +* assert.optionalArrayOfFinite +* assert.optionalArrayOfObject +* assert.optionalArrayOfString +* assert.optionalArrayOfStream +* assert.optionalArrayOfDate +* assert.optionalArrayOfRegexp +* assert.optionalArrayOfUuid +* assert.AssertionError +* assert.fail +* assert.ok +* assert.equal +* assert.notEqual +* assert.deepEqual +* assert.notDeepEqual +* assert.strictEqual +* assert.notStrictEqual +* assert.throws +* assert.doesNotThrow +* assert.ifError + +# Installation + + npm install assert-plus + +## License + +The MIT License (MIT) +Copyright (c) 2012 Mark Cavage + +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. + +## Bugs + +See . diff --git a/node_modules/verror/node_modules/assert-plus/assert.js b/node_modules/verror/node_modules/assert-plus/assert.js new file mode 100644 index 000000000..26f944eec --- /dev/null +++ b/node_modules/verror/node_modules/assert-plus/assert.js @@ -0,0 +1,211 @@ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg); + } + }, + finite: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/node_modules/verror/node_modules/assert-plus/package.json b/node_modules/verror/node_modules/assert-plus/package.json new file mode 100644 index 000000000..40d6a5cd8 --- /dev/null +++ b/node_modules/verror/node_modules/assert-plus/package.json @@ -0,0 +1,23 @@ +{ + "author": "Mark Cavage ", + "name": "assert-plus", + "description": "Extra assertions on top of node's assert module", + "version": "1.0.0", + "license": "MIT", + "main": "./assert.js", + "devDependencies": { + "tape": "4.2.2", + "faucet": "0.0.1" + }, + "optionalDependencies": {}, + "scripts": { + "test": "./node_modules/.bin/tape tests/*.js | ./node_modules/.bin/faucet" + }, + "repository": { + "type": "git", + "url": "https://github.com/mcavage/node-assert-plus.git" + }, + "engines": { + "node": ">=0.8" + } +} diff --git a/node_modules/verror/package.json b/node_modules/verror/package.json new file mode 100644 index 000000000..79295c57a --- /dev/null +++ b/node_modules/verror/package.json @@ -0,0 +1,22 @@ +{ + "name": "verror", + "version": "1.10.0", + "description": "richer JavaScript errors", + "main": "./lib/verror.js", + "repository": { + "type": "git", + "url": "git://github.com/davepacheco/node-verror.git" + }, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": [ + "node >=0.6.0" + ], + "scripts": { + "test": "make test" + }, + "license": "MIT" +} diff --git a/node_modules/watchr/.npmignore b/node_modules/watchr/.npmignore new file mode 100755 index 000000000..27cabcbd1 --- /dev/null +++ b/node_modules/watchr/.npmignore @@ -0,0 +1,49 @@ +# 2016 June 6 +# https://github.com/bevry/base + +# Temp Files +**/.docpad.db +**/out.* +**/*.log +**/*.cpuprofile +**/*.heapsnapshot + +# Build Files +build/ +components/ +bower_components/ +node_modules/ + +# Private Files +.env + +# Documentation Files +docs/ +guides/ +BACKERS.md +CONTRIBUTING.md +HISTORY.md + +# Development Files +web/ +**/example* +**/test* +.editorconfig +.eslintrc* +.jshintrc +.jscrc +coffeelint* +.travis* +nakefile* +Cakefile +Makefile + +# Other Package Definitions +template.js +component.json +bower.json + +# ===================================== +# CUSTOM MODIFICATIONS + +# None diff --git a/node_modules/watchr/HISTORY.md b/node_modules/watchr/HISTORY.md new file mode 100644 index 000000000..ec697c3f6 --- /dev/null +++ b/node_modules/watchr/HISTORY.md @@ -0,0 +1,196 @@ +# History + +## v2.6.0 2016 July 15 +- Potentially fixed swapfiles breaking watching + - Thanks to [Josh Levine](https://github.com/jlevine22) for [pull request #76](https://github.com/bevry/watchr/pull/76) + +## v2.5.0 2016 July 15 +- Updated dependencies +- Updated engines to be node >=0.12 as to align with safefs v4 + - May still work with node 0.10, file a bug report if it doesn't + +## v2.4.13 2015 February 7 +- Updated dependencies + +## v2.4.12 2014 December 17 +- Fixed `previousStat` not existing sporadically on delete events + - Thanks to [Stuart Knightley](https://github.com/Stuk) for [pull request #61](https://github.com/bevry/watchr/pull/61) +- Updated dependencies + +## v2.4.11 2014 February 7 +- Fixed interval option not beeing passed on to child watchers (regression since v2.4.7) + - Thanks to [David Byrd](https://github.com/thebyrd) for [pull request #58](https://github.com/bevry/watchr/pull/58) + +## v2.4.10 2014 February 7 +- Fixed watchr emitting error events incorrectly (regression since v2.4.7) + - Thanks to [Aaron O'Mullan](https://github.com/AaronO) for [pull request #59](https://github.com/bevry/watchr/pull/59) + +## v2.4.9 2014 January 28 +- Fixed `"me" is undefined` errors (regression since v2.4.7) + +## v2.4.8 2013 December 30 +- You can now pass falsey values for`catchupDelay` to disable it + +## v2.4.7 2013 December 19 +- Fixed: [Text Editor swap files on saving can throw it off](https://github.com/bevry/watchr/issues/33) +- Fixed: [`ENOENT` errors are emitted when dead links a broken symlink is encountered](https://github.com/bevry/watchr/issues/42) +- Updated dependencies + +## v2.4.6 2013 November 18 +- Updated dependencies + +## v2.4.5 2013 November 17 +- Updated dependencies + +## v2.4.4 2013 October 10 +- Added the ability to turn off following links by setting `followLinks` to `false` + - Thanks to [Fredrik Noren](https://github.com/FredrikNoren) for [pull request #47](https://github.com/bevry/watchr/pull/47) +- Prefer accuracy over speed + - Use the watch method by default, but don't trust it at all, always double check everything + +## v2.4.3 2013 April 10 +- More work on swap file handling + +## v2.4.2 2013 April 10 +- File copies will now trigger events throughout the copy rather than just at the start of the copy + - Close [issue #35](https://github.com/bevry/watchr/issues/35) + +## v2.4.1 2013 April 10 +- Fixed bubblr events +- Fixed swap file detection + +## v2.4.0 2013 April 5 +- Updated dependencies + +## v2.3.10 2013 April 1 +- Updated dependencies + +## v2.3.9 2013 March 17 +- Made it so if `duplicateDelay` is falsey we will not do a duplicate check + +## v2.3.8 2013 March 17 +- Fix `Object # has no method 'emit'` error + - Thanks to [Casey Foster](https://github.com/caseywebdev) for [pull request #32](https://github.com/bevry/watchr/pull/32) + +## v2.3.7 2013 February 6 +- Changed the `preferredMethod` option into `preferredMethods` which accepts an array, defaults to `['watch','watchFile']` +- If the watch action fails at the eve level we will try again with the preferredMethods reversed + - This solves [issue #31](https://github.com/bevry/watchr/issues/31) where watching of large files would fail +- Changed the `interval` option to default to `5007` (recommended by node) instead of `100` as it was before + - The `watch` method provides us with immediate notification of changes without utilising polling, however the `watch` method fails for large amounts of files, in which case we will fall back to the `watchFile` method that will use this option, if the option is too small we will be constantly polling the large amount of files for changes using up all the CPU and memory, hence the change into a larger increment which has no CPU and memory impact. + +## v2.3.6 2013 February 6 +- Fixed fallback when preferredMethod is `watchFile` + +## v2.3.5 2013 February 6 +- Fixed uncaught exceptions when intialising watchers under certain circumstances + +## v2.3.4 2013 February 5 +- Better handling and detection of failed watching operations +- Better handling of duplicated events +- Watching is now an atomic operation + - If watching fails for a descendant, we will close everything related to that watch operation of the eve +- We now prefer the `watch` method over the `watchFile` method + - This offers great reliability and way less CPU and memory foot print + - If you still wish to prefer `watchFile`, then set the new configuration option `preferredMethod` to `watchFile` +- Closes [issue #30](https://github.com/bevry/watchr/issues/30) thanks to [Howard Tyson](https://github.com/tizzo) + +## v2.3.3 2013 January 8 +- Added `outputLog` option +- Added `ignorePaths` option + - Thanks to [Tane Piper](https://github.com/tanepiper) for [issue #24](https://github.com/bevry/watchr/issues/24) +- Now properly ignores hidden files + - Thanks to [Ting-yu (Joseph) Chiang](https://github.com/josephj) for [issue #25](https://github.com/bevry/watchr/issues/25) and [Julien M.](https://github.com/julienma) for [issue #28](https://github.com/bevry/watchr/issues/28) +- Added `Watcher::isIgnoredPath` method +- Added tests for ignored and hidden files + +## v2.3.2 2013 January 6 +- Fixed closing when a child path watcher doesn't exist + - Closes [pull request #26](https://github.com/bevry/watchr/pull/26) thanks to [Jason Als](https://github.com/jasonals) +- Added close tests + +## v2.3.1 2012 December 19 +- Fixed a bug with closing directories that have children + - Thanks to [Casey Foster](https://github.com/caseywebdev) for [issue #23](https://github.com/bevry/watchr/issues/23) + +## v2.3.0 2012 December 17 +- This is a backwards compatiblity break, however updating is easy, read the notes below. +- We've updated the events we emit to be: + - `log` for debugging, receives the arguments `logLevel ,args...` + - `watching` for when watching of the path has completed, receives the arguments `err, isWatching` + - `change` for listening to change events, receives the arguments `changeType, fullPath, currentStat, previousStat` + - `error` for gracefully listening to error events, receives the arguments `err` + - read the README to learn how to bind to these new events +- The `changeType` argument for change listeners has been changed for better clarity and consitency: + - `change` is now `update` + - `new` is now `create` + - `unlink` is now `delete` +- We've updated the return arguments for `require('watchr').watch` for better consitency: + - if you send the `paths` option, you will receive the arguments `err, results` where `results` is an array of watcher instances + - if you send the `path` option, you receive the arguments `err, watcherInstance` + +## v2.2.1 2012 December 16 +- Fixed sub directory scans ignoring our ignore patterns +- Updated dependencies + +## v2.2.0 2012 December 15 +- We now ignore common ignore patterns by default +- `ignorePatterns` configuration option renamed to `ignoreCommonPatterns` +- Added new `ignoreCustomPatterns` configuration option +- Updated dependencies + - [bal-util](https://github.com/balupton/bal-util) from 1.13.x to 1.15.x +- Closes [issue #22](https://github.com/bevry/watchr/issues/22) and [issue #21](https://github.com/bevry/watchr/issues/21) + - Thanks [Andrew Petersen](https://github.com/kirbysayshi), [Sascha Depold](https://github.com/sdepold), [Raynos](https://github.com/Raynos), and [Prajwalit](https://github.com/prajwalit) for your help! + +## v2.1.6 2012 November 6 +- Added missing `bin` configuration + - Fixes [#16](https://github.com/bevry/watchr/issues/16) thanks to [pull request #17](https://github.com/bevry/watchr/pull/17) by [Robson Roberto Souza Peixoto](https://github.com/robsonpeixoto) + +## v2.1.5 2012 September 29 +- Fixed completion callback not firing when trying to watch a path that doesn't exist + +## v2.1.4 2012 September 27 +- Fixed new listeners not being added for directories that have already been watched +- Fixed completion callbacks happening too soon +- Thanks to [pull request #14](https://github.com/bevry/watchr/pull/14) by [Casey Foster](https://github.com/caseywebdev) + +## v2.1.3 2012 August 10 +- Re-added markdown files to npm distribution as they are required for the npm website + +## v2.1.2 2012 July 7 +- Fixed spelling of `persistent` +- Explicitly set the defaults for the options `ignoreHiddenFiles` and `ignorePatterns` + +## v2.1.1 2012 July 7 +- Added support for `interval` and `persistant` options +- Improved unlink detection +- Optimised unlink handling + +## v2.1.0 2012 June 22 +- `watchr.watchr` changes + - now only accepts one argument which is an object + - added new `paths` property which is an array of multiple paths to watch + - will only watch paths that actually exist (before it use to throw an error) +- Fixed a few bugs +- Added support for node v0.7/v0.8 +- Moved tests from Mocha to [Joe](https://github.com/bevry/joe) + +## v2.0.3 2012 April 19 +- Fixed a bug with closing watchers +- Now requires pre-compiled code + +## v2.0.0 2012 April 19 +- Big rewrite +- Got rid of the delay +- Now always fires events +- Watcher instsances inherit from Node's EventEmitter +- Events for `change`, `unlink` and `new` + +## v1.0.0 2012 February 11 +- Better support for ignoring hidden files +- Improved documentation, readme +- Added `History.md` file +- Added unit tests using [Mocha](http://visionmedia.github.com/mocha/) + +## v0.1.0 2012 November 13 +- Initial working version diff --git a/node_modules/watchr/LICENSE.md b/node_modules/watchr/LICENSE.md new file mode 100644 index 000000000..aeac6b2a9 --- /dev/null +++ b/node_modules/watchr/LICENSE.md @@ -0,0 +1,24 @@ + + +

      License

      + +Unless stated otherwise all works are: + + + +and licensed under: + + + +

      MIT License

      + +
      +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.
      +
      + + diff --git a/node_modules/watchr/README.md b/node_modules/watchr/README.md new file mode 100644 index 000000000..08b9fd037 --- /dev/null +++ b/node_modules/watchr/README.md @@ -0,0 +1,215 @@ + + +

      watchr

      + + + + + + +Travis CI Build Status +NPM version +NPM downloads +Dependency Status +Dev Dependency Status +
      +Slack community badge +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + + + + + + +Better file system watching for Node.js + + + + + + +

      Install

      + +

      NPM

        +
      • Install: npm install --save watchr
      • +
      • Executable: watchr
      • +
      • Module: require('watchr')
      + +

      Editions

      + +

      This package is published with the following editions:

      + +
      • watchr/src/lib/getmac.coffee is Source + CoffeeScript + Require
      • +
      • watchr/es5/lib/getmac.js is CoffeeScript Compiled JavaScript + ES5 + Require
      + + + + +Watchr provides a normalised API the file watching APIs of different node versions, nested/recursive file and directory watching, and accurate detailed events for file/directory creations, updates, and deletions. + +You install it via `npm install watchr` and use it via `require('watchr').watch(config)`. Available configuration options are: + +- `path` a single path to watch +- `paths` an array of paths to watch +- `listener` a single change listener to fire when a change occurs +- `listeners` an array of listeners to fire when a change occurs, overloaded to accept the following values: + - `changeListener` a single change listener + - `[changeListener]` an array of change listeners + - `{eventName: eventListener}` an object keyed with the event names and valued with a single event listener + - `{eventName: [eventListener]}` an object keyed with the event names and valued with an array of event listeners +- `next` (optional, defaults to `null`) a completion callback to fire once the watchers have been setup, arguments are: + - when using the `path` configuration option: `err, watcherInstance` + - when using the `paths` configuration option: `err, [watcherInstance,...]` +- `stat` (optional, defaults to `null`) a file stat object to use for the path, instead of fetching a new one +- `interval` (optional, defaults to `5007`) for systems that poll to detect file changes, how often should it poll in millseconds +- `persistent` (optional, defaults to `true`) whether or not we should keep the node process alive for as long as files are still being watched +- `catchupDelay` (optional, defaults to `2000`) because swap files delete the original file, then rename a temporary file over-top of the original file, to ensure the change is reported correctly we must have a delay in place that waits until all change events for that file have finished, before starting the detection of what changed +- `preferredMethods` (optional, defaults to `['watch','watchFile']`) which order should we prefer our watching methods to be tried? +- `followLinks` (optional, defaults to `true`) follow symlinks, i.e. use stat rather than lstat +- `ignorePaths` (optional, defaults to `false`) an array of full paths to ignore +- `ignoreHiddenFiles` (optional, defaults to `false`) whether or not to ignored files which filename starts with a `.` +- `ignoreCommonPatterns` (optional, defaults to `true`) whether or not to ignore common undesirable file patterns (e.g. `.svn`, `.git`, `.DS_Store`, `thumbs.db`, etc) +- `ignoreCustomPatterns` (optional, defaults to `null`) any custom ignore patterns that you would also like to ignore along with the common patterns + +The following events are available to your via the listeners: + +- `log` for debugging, receives the arguments `logLevel ,args...` +- `error` for gracefully listening to error events, receives the arguments `err` + - you should always have an error listener, otherwise node.js's behavior is to throw the error and possibly crash your application, see [#40](https://github.com/bevry/watchr/issues/40) +- `watching` for when watching of the path has completed, receives the arguments `err, isWatching` +- `change` for listening to change events, receives the arguments `changeType, fullPath, currentStat, previousStat`, received arguments will be: + - for updated files: `'update', fullPath, currentStat, previousStat` + - for created files: `'create', fullPath, currentStat, null` + - for deleted files: `'delete', fullPath, null, previousStat` + + +To wrap it all together, it would look like this: + +``` javascript +// Require +var watchr = require('watchr') + +// Watch a directory or file +console.log('Watch our paths') +watchr.watch({ + paths: ['path1', 'path2', 'path3'], + listeners: { + log: function (logLevel) { + console.log('a log message occured:', arguments) + }, + error: function (err) { + console.log('an error occured:', err) + }, + watching: function (err, watcherInstance, isWatching){ + if (err) { + console.log("watching the path " + watcherInstance.path + " failed with error", err) + } else { + console.log("watching the path " + watcherInstance.path + " completed") + } + }, + change: function(changeType, filePath, fileCurrentStat, filePreviousStat){ + console.log('a change event occured:', arguments) + } + }, + next: function(err, watchers){ + if (err) { + return console.log("watching everything failed with error", err) + } else { + console.log('watching everything completed', watchers) + } + + // Close watchers after 60 seconds + setTimeout(function () { + console.log('Stop watching our paths') + for ( var i = 0; i < watchers.length; i++ ) { + watchers[i].close() + } + }, 60 * 1000) + } +}) +``` + +You can test the above code snippet by running the following: + +``` +npm install -g watchr +watchr +``` + + + + +

      History

      + +Discover the release history by heading on over to the HISTORY.md file. + + + + + + +

      Contribute

      + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      Backers

      + +

      Maintainers

      + +These amazing people are maintaining this project: + + + +

      Sponsors

      + +No sponsors yet! Will you be the first? + +Patreon donate button +Gratipay donate button +Flattr donate button +PayPal donate button +Bitcoin donate button +Wishlist browse button + +

      Contributors

      + +These amazing people have contributed code to this project: + + + +Discover how you can contribute by heading on over to the CONTRIBUTING.md file. + + + + + + +

      License

      + +Unless stated otherwise all works are: + + + +and licensed under: + + + + diff --git a/node_modules/watchr/bin/watchr b/node_modules/watchr/bin/watchr new file mode 100755 index 000000000..170da6026 --- /dev/null +++ b/node_modules/watchr/bin/watchr @@ -0,0 +1,42 @@ +#!/usr/bin/env node +// Require +var watchr = require('../es5/lib/watchr') + +// Watch a directory or file +console.log('Watch our paths') +watchr.watch({ + paths: [process.cwd()], + listeners: { + log: function (logLevel) { + console.log('a log message occured:', arguments) + }, + error: function (err) { + console.log('an error occured:', err) + }, + watching: function(err, watcherInstance, isWatching){ + if (err) { + console.log("watching the path " + watcherInstance.path + " failed with error", err) + } else { + console.log("watching the path " + watcherInstance.path + " completed") + } + }, + change: function (changeType, filePath, fileCurrentStat, filePreviousStat){ + console.log('a change event occured:', arguments) + } + }, + next: function (err, watchers) { + if (err) { + return console.log("watching everything failed with error", err) + } else { + console.log('watching everything completed', watchers) + } + + // Close watchers after 60 seconds + setTimeout(function(){ + console.log('Stop watching our paths') + for ( var i = 0; i < watchers.length; i++ ) { + watchers[i].close() + } + }, 60 * 1000) + } +}) diff --git a/node_modules/watchr/es5/lib/watchr-util.js b/node_modules/watchr/es5/lib/watchr-util.js new file mode 100644 index 000000000..3a25488e3 --- /dev/null +++ b/node_modules/watchr/es5/lib/watchr-util.js @@ -0,0 +1,94 @@ +// Generated by CoffeeScript 1.10.0 +var extendr, extractOpts, fsUtil, watchrUtil; + +extendr = require('extendr'); + +extractOpts = require('extract-opts'); + +fsUtil = require('safefs'); + +watchrUtil = { + statChanged: function(old, current) { + if ((old != null) !== (current != null)) { + return true; + } else if ((old != null) && (current != null)) { + old = extendr.dereferenceJSON(old); + current = extendr.dereferenceJSON(current); + if (old.atime != null) { + delete old.atime; + } + if (old.ctime != null) { + delete old.ctime; + } + if (current.atime != null) { + delete current.atime; + } + if (current.ctime != null) { + delete current.ctime; + } + if (JSON.stringify(old) !== JSON.stringify(current)) { + return true; + } else { + return false; + } + } else { + return false; + } + }, + watch: function(opts, next) { + var err, error, fswatcher, ref; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + if (fsUtil.watch == null) { + return next(null, false, 'watch'); + } + try { + fswatcher = fsUtil.watch(opts.path, opts.listener); + } catch (error) { + err = error; + return next(err, false, 'watch', fswatcher); + } + return next(null, true, 'watch', fswatcher); + }, + watchFile: function(opts, next) { + var err, error, ref; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + if (fsUtil.watchFile == null) { + return next(null, false, 'watchFile'); + } + try { + fsUtil.watchFile(opts.path, { + persistent: opts.persistent, + interval: opts.interval + }, opts.listener); + } catch (error) { + err = error; + return next(err, false, 'watchFile'); + } + return next(null, true, 'watchFile'); + }, + watchMethods: function(opts, next) { + var methodOne, methodTwo, ref; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + if (opts.methods == null) { + opts.methods = ['watch', 'watchFile']; + } + methodOne = watchrUtil[opts.methods[0]]; + methodTwo = watchrUtil[opts.methods[1]]; + methodOne(opts, function(errOne, success, method, fswatcher) { + if (success) { + return next(null, success, method, fswatcher); + } + return methodTwo(opts, function(errTwo, success, method, fswatcher) { + var errCombined; + if (success) { + return next(null, success, method, fswatcher); + } + errCombined = new Error("Both watch methods failed on " + opts.path + ":\n" + (errOne.stack.toString()) + "\n" + (errTwo.stack.toString())); + return next(errCombined, false, null, fswatcher); + }); + }); + return this; + } +}; + +module.exports = watchrUtil; diff --git a/node_modules/watchr/es5/lib/watchr.js b/node_modules/watchr/es5/lib/watchr.js new file mode 100644 index 000000000..2f28f287b --- /dev/null +++ b/node_modules/watchr/es5/lib/watchr.js @@ -0,0 +1,762 @@ +// Generated by CoffeeScript 1.10.0 +var EventEmitter, TaskGroup, Watcher, createWatcher, eachr, extendr, extractOpts, fsUtil, ignorefs, pathUtil, scandir, typeChecker, watch, watchers, watchersTotal, watchrUtil, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +pathUtil = require('path'); + +scandir = require('scandirectory'); + +fsUtil = require('safefs'); + +ignorefs = require('ignorefs'); + +extendr = require('extendr'); + +eachr = require('eachr'); + +extractOpts = require('extract-opts'); + +typeChecker = require('typechecker'); + +TaskGroup = require('taskgroup').TaskGroup; + +watchrUtil = require('./watchr-util'); + +EventEmitter = require('events').EventEmitter; + + +/* +Now to make watching files more convient and managed, we'll create a class which we can use to attach to each file. +It'll provide us with the API and abstraction we need to accomplish difficult things like recursion. +We'll also store a global store of all the watchers and their paths so we don't have multiple watchers going at the same time +for the same file - as that would be quite ineffecient. +Events: +- `log` for debugging, receives the arguments `logLevel ,args...` +- `error` for gracefully listening to error events, receives the arguments `err` +- `watching` for when watching of the path has completed, receives the arguments `err, watcherInstance, isWatching` +- `change` for listening to change events, receives the arguments `changeType, fullPath, currentStat, previousStat` + */ + +watchersTotal = 0; + +watchers = {}; + +Watcher = (function(superClass) { + extend(Watcher, superClass); + + Watcher.prototype.path = null; + + Watcher.prototype.stat = null; + + Watcher.prototype.fswatcher = null; + + Watcher.prototype.children = null; + + Watcher.prototype.state = 'pending'; + + Watcher.prototype.method = null; + + Watcher.prototype.config = { + path: null, + listener: null, + listeners: null, + stat: null, + outputLog: false, + interval: 5007, + persistent: true, + catchupDelay: 2 * 1000, + preferredMethods: null, + followLinks: true, + ignorePaths: false, + ignoreHiddenFiles: false, + ignoreCommonPatterns: true, + ignoreCustomPatterns: null + }; + + function Watcher(opts, next) { + this.listener = bind(this.listener, this); + this.bubbler = bind(this.bubbler, this); + this.bubble = bind(this.bubble, this); + this.getStat = bind(this.getStat, this); + this.isIgnoredPath = bind(this.isIgnoredPath, this); + this.log = bind(this.log, this); + var ref; + this.children = {}; + this.config = extendr.extend({}, this.config); + this.config.preferredMethods = ['watch', 'watchFile']; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + if (opts) { + this.setConfig(opts); + } + if (next) { + this.watch(next); + } + this; + } + + Watcher.prototype.setConfig = function(opts) { + extendr.extend(this.config, opts); + this.path = this.config.path; + if (this.config.stat) { + this.stat = this.config.stat; + this.isDirectory = this.stat.isDirectory(); + delete this.config.stat; + } + if (this.config.listener || this.config.listeners) { + this.removeAllListeners(); + if (this.config.listener) { + this.listen(this.config.listener); + delete this.config.listener; + } + if (this.config.listeners) { + this.listen(this.config.listeners); + delete this.config.listeners; + } + } + return this; + }; + + Watcher.prototype.log = function() { + var args, config, watchr; + args = 1 <= arguments.length ? slice.call(arguments, 0) : []; + watchr = this; + config = this.config; + if (config.outputLog === true) { + console.log.apply(console, args); + } + watchr.emit.apply(watchr, ['log'].concat(slice.call(args))); + return this; + }; + + Watcher.prototype.getIgnoredOptions = function(opts) { + var config, ref, ref1, ref2, ref3; + if (opts == null) { + opts = {}; + } + config = this.config; + return { + ignorePaths: (ref = opts.ignorePaths) != null ? ref : config.ignorePaths, + ignoreHiddenFiles: (ref1 = opts.ignoreHiddenFiles) != null ? ref1 : config.ignoreHiddenFiles, + ignoreCommonPatterns: (ref2 = opts.ignoreCommonPatterns) != null ? ref2 : config.ignoreCommonPatterns, + ignoreCustomPatterns: (ref3 = opts.ignoreCustomPatterns) != null ? ref3 : config.ignoreCustomPatterns + }; + }; + + Watcher.prototype.isIgnoredPath = function(path, opts) { + var ignore, watchr; + watchr = this; + ignore = ignorefs.isIgnoredPath(path, watchr.getIgnoredOptions(opts)); + watchr.log('debug', "ignore: " + path + " " + (ignore ? 'yes' : 'no')); + return ignore; + }; + + Watcher.prototype.getStat = function(next) { + var config, method, watchr; + watchr = this; + config = this.config; + method = config.followLinks ? 'stat' : 'lstat'; + fsUtil[method](watchr.path, next); + return this; + }; + + Watcher.prototype.isDirectory = function() { + var watchr; + watchr = this; + return watchr.stat.isDirectory(); + }; + + Watcher.prototype.bubble = function() { + var args, watchr; + args = 1 <= arguments.length ? slice.call(arguments, 0) : []; + watchr = this; + watchr.emit.apply(watchr, args); + return this; + }; + + Watcher.prototype.bubbler = function(eventName) { + var watchr; + watchr = this; + return function() { + var args; + args = 1 <= arguments.length ? slice.call(arguments, 0) : []; + return watchr.bubble.apply(watchr, [eventName].concat(slice.call(args))); + }; + }; + + + /* + Listen + Add listeners to our watcher instance. + Overloaded to also accept the following: + - `changeListener` a single change listener + - `[changeListener]` an array of change listeners + - `{eventName:eventListener}` an object keyed with the event names and valued with a single event listener + - `{eventName:[eventListener]}` an object keyed with the event names and valued with an array of event listeners + */ + + Watcher.prototype.listen = function(eventName, listener) { + var i, j, len, len1, listenerArray, listeners, watchr; + watchr = this; + if (listener == null) { + listeners = eventName; + if (typeChecker.isArray(listeners)) { + for (i = 0, len = listeners.length; i < len; i++) { + listener = listeners[i]; + watchr.listen('change', listener); + } + } else if (typeChecker.isPlainObject(listeners)) { + for (eventName in listeners) { + if (!hasProp.call(listeners, eventName)) continue; + listenerArray = listeners[eventName]; + if (typeChecker.isArray(listenerArray)) { + for (j = 0, len1 = listenerArray.length; j < len1; j++) { + listener = listenerArray[j]; + watchr.listen(eventName, listener); + } + } else { + watchr.listen(eventName, listenerArray); + } + } + } else { + watchr.listen('change', listeners); + } + } else { + watchr.removeListener(eventName, listener); + watchr.on(eventName, listener); + watchr.log('debug', "added a listener: on " + watchr.path + " for event " + eventName); + } + return this; + }; + + + /* + Listener + A change event has fired + + Things to note: + - watchFile method + - Arguments + - currentStat - the updated stat of the changed file + - Exists even for deleted/renamed files + - previousStat - the last old stat of the changed file + - Is accurate, however we already have this + - For renamed files, it will will fire on the directory and the file + - watch method + - Arguments + - eventName - either 'rename' or 'change' + - THIS VALUE IS ALWAYS UNRELIABLE AND CANNOT BE TRUSTED + - filename - child path of the file that was triggered + - This value can also be unrealiable at times + - Both methods + - For deleted and changed files, it will fire on the file + - For new files, it will fire on the directory + + Output arguments for your emitted event will be: + - for updated files the arguments will be: `'update', fullPath, currentStat, previousStat` + - for created files the arguments will be: `'create', fullPath, currentStat, null` + - for deleted files the arguments will be: `'delete', fullPath, null, previousStat` + + In the future we will add: + - for renamed files: 'rename', fullPath, currentStat, previousStat, newFullPath + - rename is possible as the stat.ino is the same for the delete and create + */ + + Watcher.prototype.listenerTasks = null; + + Watcher.prototype.listenerTimeout = null; + + Watcher.prototype.listener = function(opts, next) { + var config, currentStat, fileExists, previousStat, ref, tasks, watchr; + watchr = this; + config = this.config; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + currentStat = null; + fileExists = null; + previousStat = watchr.stat; + watchr.log('debug', "Watch triggered on: " + watchr.path); + if (watchr.listenerTimeout != null) { + clearTimeout(watchr.listenerTimeout); + } + watchr.listenerTimeout = setTimeout(function() { + var listenerTasks; + listenerTasks = watchr.listenerTasks; + watchr.listenerTasks = null; + watchr.listenerTimeout = null; + return listenerTasks.run(); + }, config.catchupDelay || 0); + if (watchr.listenerTasks != null) { + if (next) { + watchr.listenerTasks.done(next); + } + return this; + } + watchr.listenerTasks = tasks = new TaskGroup().done(function(err) { + watchr.listenersExecuting -= 1; + if (err) { + watchr.emit('error', err); + } + return typeof next === "function" ? next(err) : void 0; + }); + tasks.addTask(function(complete) { + watchr.log('debug', "Watch followed through on: " + watchr.path); + return fsUtil.exists(watchr.path, function(exists) { + fileExists = exists; + if (fileExists === false) { + watchr.log('debug', "Determined delete: " + watchr.path); + watchr.close('deleted'); + watchr.stat = null; + tasks.clearRemaining(); + return complete(); + } + return watchr.getStat(function(err, stat) { + if (err) { + return watchr.emit('error', err); + } + watchr.stat = currentStat = stat; + if (watchr.stat.birthtime !== previousStat.birthtime) { + return createWatcher(this, complete); + } else { + return complete(); + } + }); + }); + }); + tasks.addTask(function() { + if (watchrUtil.statChanged(previousStat, currentStat) === false) { + watchr.log('debug', "Determined same: " + watchr.path, previousStat, currentStat); + return tasks.clearRemaining(); + } + }); + tasks.addGroup(function(addGroup, addTask, complete) { + this.setConfig({ + concurrency: 0 + }); + if (watchr.isDirectory() === false) { + watchr.log('debug', "Determined update: " + watchr.path); + watchr.emit('change', 'update', watchr.path, currentStat, previousStat); + return complete(); + } + return fsUtil.readdir(watchr.path, function(err, newFileRelativePaths) { + if (err) { + return complete(err); + } + if (watchr.method === 'watch') { + eachr(watchr.children, function(childFileWatcher, childFileRelativePath) { + if (indexOf.call(newFileRelativePaths, childFileRelativePath) < 0) { + return; + } + if (!childFileWatcher) { + return; + } + tasks.addTask(function(complete) { + watchr.log('debug', "Forwarding extensive change detection to child: " + childFileRelativePath + " via: " + watchr.path); + return childFileWatcher.listener(null, complete); + }); + }); + } + eachr(watchr.children, function(childFileWatcher, childFileRelativePath) { + var childFileFullPath; + if (indexOf.call(newFileRelativePaths, childFileRelativePath) >= 0) { + return; + } + childFileFullPath = pathUtil.join(watchr.path, childFileRelativePath); + if (watchr.isIgnoredPath(childFileFullPath)) { + watchr.log('debug', "Ignored delete: " + childFileFullPath + " via: " + watchr.path); + return; + } + watchr.log('debug', "Determined delete: " + childFileFullPath + " via: " + watchr.path); + watchr.closeChild(childFileRelativePath, 'deleted'); + }); + eachr(newFileRelativePaths, function(childFileRelativePath) { + var childFileFullPath; + if (watchr.children[childFileRelativePath] != null) { + return; + } + watchr.children[childFileRelativePath] = false; + childFileFullPath = pathUtil.join(watchr.path, childFileRelativePath); + if (watchr.isIgnoredPath(childFileFullPath)) { + watchr.log('debug', "Ignored create: " + childFileFullPath + " via: " + watchr.path); + return; + } + addTask(function(complete) { + watchr.log('debug', "Determined create: " + childFileFullPath + " via: " + watchr.path); + return watchr.watchChild({ + fullPath: childFileFullPath, + relativePath: childFileRelativePath, + next: function(err, childFileWatcher) { + if (err) { + return complete(err); + } + watchr.emit('change', 'create', childFileFullPath, childFileWatcher.stat, null); + return complete(); + } + }); + }); + }); + return complete(); + }); + }); + return this; + }; + + + /* + Close + We will need something to close our listener for removed or renamed files + As renamed files are a bit difficult we will want to close and delete all the watchers for all our children too + Essentially it is a self-destruct + */ + + Watcher.prototype.close = function(reason) { + var childRelativePath, ref, watchr; + watchr = this; + if (watchr.state !== 'active') { + return this; + } + watchr.log('debug', "close: " + watchr.path); + ref = watchr.children; + for (childRelativePath in ref) { + if (!hasProp.call(ref, childRelativePath)) continue; + watchr.closeChild(childRelativePath, reason); + } + if (watchr.method === 'watchFile') { + fsUtil.unwatchFile(watchr.path); + } + if (watchr.fswatcher != null) { + watchr.fswatcher.close(); + watchr.fswatcher = null; + } + if (reason === 'deleted') { + watchr.state = 'deleted'; + watchr.emit('change', 'delete', watchr.path, null, watchr.stat); + } else if (reason === 'failure') { + watchr.state = 'closed'; + watchr.log('warn', "Failed to watch the path " + watchr.path); + } else { + watchr.state = 'closed'; + } + if (watchers[watchr.path] != null) { + delete watchers[watchr.path]; + watchersTotal--; + } + return this; + }; + + Watcher.prototype.closeChild = function(fileRelativePath, reason) { + var watcher, watchr; + watchr = this; + if (watchr.children[fileRelativePath] != null) { + watcher = watchr.children[fileRelativePath]; + if (watcher) { + watcher.close(reason); + } + delete watchr.children[fileRelativePath]; + } + return this; + }; + + + /* + Watch Child + Setup watching for a child + Bubble events of the child into our instance + Also instantiate the child with our instance's configuration where applicable + next(err, watchr) + */ + + Watcher.prototype.watchChild = function(opts, next) { + var config, ref, watchr; + watchr = this; + config = this.config; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + if (watchr.children[opts.relativePath]) { + if (typeof next === "function") { + next(null, watchr.children[opts.relativePath]); + } + } else { + watchr.children[opts.relativePath] = watch({ + path: opts.fullPath, + stat: opts.stat, + listeners: { + 'log': watchr.bubbler('log'), + 'change': function() { + var args, changeType, path; + args = 1 <= arguments.length ? slice.call(arguments, 0) : []; + changeType = args[0], path = args[1]; + if (changeType === 'delete' && path === opts.fullPath) { + watchr.closeChild(opts.relativePath, 'deleted'); + } + return watchr.bubble.apply(watchr, ['change'].concat(slice.call(args))); + }, + 'error': watchr.bubbler('error') + }, + next: next, + outputLog: config.outputLog, + interval: config.interval, + persistent: config.persistent, + catchupDelay: config.catchupDelay, + preferredMethods: config.preferredMethods, + ignorePaths: config.ignorePaths, + ignoreHiddenFiles: config.ignoreHiddenFiles, + ignoreCommonPatterns: config.ignoreCommonPatterns, + ignoreCustomPatterns: config.ignoreCustomPatterns, + followLinks: config.followLinks + }); + } + return watchr.children[opts.relativePath]; + }; + + + /* + Watch Children + next(err, watching) + */ + + Watcher.prototype.watchChildren = function(next) { + var config, watchr; + watchr = this; + config = this.config; + if (watchr.isDirectory()) { + scandir({ + path: watchr.path, + ignorePaths: config.ignorePaths, + ignoreHiddenFiles: config.ignoreHiddenFiles, + ignoreCommonPatterns: config.ignoreCommonPatterns, + ignoreCustomPatterns: config.ignoreCustomPatterns, + recurse: false, + next: function(err) { + var watching; + watching = !err; + return next(err, watching); + }, + action: function(fullPath, relativePath, nextFile) { + if (watchr.state !== 'active') { + return nextFile(null, true); + } + return watchr.watchChild({ + fullPath: fullPath, + relativePath: relativePath + }, function(err, watcher) { + return nextFile(err); + }); + } + }); + } else { + next(null, true); + } + return this; + }; + + + /* + Watch Self + next(err, watching) + */ + + Watcher.prototype.watchSelf = function(next) { + var config, watchr; + watchr = this; + config = this.config; + watchr.method = null; + watchrUtil.watchMethods({ + path: watchr.path, + methods: config.preferredMethods, + persistent: config.persistent, + interval: config.interval, + listener: function() { + return watchr.listener(); + }, + next: function(err, success, method, fswatcher) { + watchr.fswatcher = fswatcher; + if (err) { + watchr.emit('error', err); + } + if (!success) { + watchr.close('failure'); + return next(null, false); + } + watchr.method = method; + watchr.state = 'active'; + return next(null, true); + } + }); + return this; + }; + + + /* + Watch + Setup the native watching handlers for our path so we can receive updates on when things happen + If the next argument has been received, then add it is a once listener for the watching event + If we are already watching this path then let's start again (call close) + If we are a directory, let's recurse + If we are deleted, then don't error but return the isWatching argument of our completion callback as false + Once watching has completed for this directory and all children, then emit the watching event + next(err, watchr, watching) + */ + + Watcher.prototype.watch = function(next) { + var complete, config, watchr; + watchr = this; + config = this.config; + complete = function(err, watching) { + if (err == null) { + err = null; + } + if (watching == null) { + watching = true; + } + if (err || !watching) { + watchr.close(); + if (typeof next === "function") { + next(err, watchr, false); + } + return watchr.emit('watching', err, watchr, false); + } else { + if (typeof next === "function") { + next(null, watchr, true); + } + return watchr.emit('watching', null, watchr, true); + } + }; + if ((watchr.stat != null) === false) { + watchr.getStat(function(err, stat) { + if (err || !stat) { + return complete(err, false); + } + watchr.stat = stat; + return watchr.watch(next); + }); + return this; + } + watchr.close(); + watchr.log('debug', "watch: " + this.path); + watchr.watchSelf(function(err, watching) { + if (err || !watching) { + return complete(err, watching); + } + return watchr.watchChildren(function(err, watching) { + return complete(err, watching); + }); + }); + return this; + }; + + return Watcher; + +})(EventEmitter); + + +/* +Create Watcher +Checks to see if the path actually exists, if it doesn't then exit gracefully +If it does exist, then lets check our cache for an already existing watcher instance +If we have an already existing watching instance, then just add our listeners to that +If we don't, then create a watching instance +Fire the next callback once done +opts = {path, listener, listeners} +opts = watcher instance +next(err,watcherInstance) + */ + +createWatcher = function(opts, next) { + var attempt, ref, watcher; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + if (!fsUtil.existsSync(opts.path)) { + if (typeof next === "function") { + next(null, null); + } + return; + } + if (opts instanceof Watcher) { + opts.close(); + opts = extendr.extend({}, opts.config, { + listener: opts.listener, + listeners: opts.listeners + }); + } + if (watchers[opts.path] != null) { + watcher = watchers[opts.path]; + if (opts.listener) { + watcher.listen(opts.listener); + } + if (opts.listeners) { + watcher.listen(opts.listeners); + } + if (typeof next === "function") { + next(null, watcher); + } + } else { + attempt = 0; + watcher = new Watcher(opts, function(err) { + if (!err || attempt !== 0) { + return typeof next === "function" ? next(err, watcher) : void 0; + } + ++attempt; + watcher.log('debug', "Preferred method failed, trying methods in reverse order", err); + return watcher.setConfig({ + preferredMethods: watcher.config.preferredMethods.reverse() + }).watch(); + }); + watchers[opts.path] = watcher; + ++watchersTotal; + } + return watcher; +}; + + +/* +Watch +Provides an abstracted API that supports multiple paths +If you are passing in multiple paths then do not rely on the return result containing all of the watchers +you must rely on the result inside the completion callback instead +If you used the paths option, then your results will be an array of watcher instances, otherwise they will be a single watcher instance +next(err,results) + */ + +watch = function(opts, next) { + var paths, ref, result, tasks; + ref = extractOpts(opts, next), opts = ref[0], next = ref[1]; + result = []; + if (opts.paths) { + paths = opts.paths; + delete opts.paths; + if (typeChecker.isArray(paths)) { + tasks = new TaskGroup({ + concurrency: 0 + }).whenDone(function(err) { + return typeof next === "function" ? next(err, result) : void 0; + }); + paths.forEach(function(path) { + return tasks.addTask(function(complete) { + var localOpts, watcher; + localOpts = extendr.extend({}, opts, { + path: path + }); + watcher = createWatcher(localOpts, complete); + if (watcher) { + return result.push(watcher); + } + }); + }); + tasks.run(); + } else { + opts.path = paths; + result.push(createWatcher(opts, function(err) { + return typeof next === "function" ? next(err, result) : void 0; + })); + } + } else { + result = createWatcher(opts, next); + } + return result; +}; + +module.exports = { + watch: watch, + Watcher: Watcher +}; diff --git a/node_modules/watchr/package.json b/node_modules/watchr/package.json new file mode 100644 index 000000000..28844adf9 --- /dev/null +++ b/node_modules/watchr/package.json @@ -0,0 +1,123 @@ +{ + "name": "watchr", + "version": "2.6.0", + "description": "Better file system watching for Node.js", + "homepage": "https://github.com/bevry/watchr", + "license": "MIT", + "keywords": [ + "watching", + "watch", + "fswatcher", + "watchfile", + "fs" + ], + "badges": { + "list": [ + "travisci", + "npmversion", + "npmdownloads", + "daviddm", + "daviddmdev", + "---", + "slackin", + "patreon", + "gratipay", + "flattr", + "paypal", + "bitcoin", + "wishlist" + ], + "config": { + "patreonUsername": "bevry", + "gratipayUsername": "bevry", + "flattrUsername": "balupton", + "paypalURL": "https://bevry.me/paypal", + "bitcoinURL": "https://bevry.me/bitcoin", + "wishlistURL": "https://bevry.me/wishlist", + "slackinURL": "https://slack.bevry.me" + } + }, + "author": "2012+ Bevry Pty Ltd (http://bevry.me), 2011 Benjamin Lupton (http://balupton.com)", + "maintainers": [ + "Benjamin Lupton (http://balupton.com)" + ], + "contributors": [ + "Benjamin Lupton (http://balupton.com)", + "Aaron O'Mullan (http://www.gitbook.com)", + "Adam Sanderson (monkeyandcrow.com)", + "Casey Foster (http://ca.sey.me)", + "Fredrik Norén (https://github.com/FredrikNoren)", + "Robson Roberto Souza Peixoto (https://github.com/robsonpeixoto)", + "Stuart Knightley (http://stuartk.com/)", + "David Byrd (http://digitalocean.com)" + ], + "bugs": { + "url": "https://github.com/bevry/watchr/issues" + }, + "repository": { + "type": "git", + "url": "http://github.com/bevry/watchr.git" + }, + "engines": { + "node": ">=0.12" + }, + "editions": [ + { + "description": "Source + CoffeeScript + Require", + "entry": "src/lib/getmac.coffee", + "directory": "src", + "syntaxes": [ + "coffeescript", + "require" + ] + }, + { + "description": "CoffeeScript Compiled JavaScript + ES5 + Require", + "entry": "es5/lib/getmac.js", + "directory": "es5", + "syntaxes": [ + "javascript", + "es5", + "require" + ] + } + ], + "main": "es5/lib/watchr.js", + "bin": { + "watchr": "bin/watchr" + }, + "scripts": { + "setup": "npm install", + "compile": "npm run compile:coffeescript", + "compile:coffeescript": "coffee -bco ./es5 ./src", + "meta": "npm run meta:projectz", + "meta:projectz": "projectz compile", + "prepare": "npm run compile && npm run test && npm run meta", + "release": "npm run prepare && npm run release:publish && npm run release:tag && npm run release:push", + "release:publish": "npm publish", + "release:tag": "git tag v$npm_package_version -a", + "release:push": "git push origin master && git push origin --tags", + "pretest": "npm run test:coffeelint", + "test:coffeelint": "coffeelint ./src", + "test": "node --harmony ./es5/test/watchr-test.js" + }, + "dependencies": { + "scandirectory": "^2.5.0", + "typechecker": "^4.3.0", + "extendr": "^3.2.2", + "eachr": "^3.2.0", + "safefs": "^4.1.0", + "taskgroup": "^5.0.1", + "ignorefs": "^1.1.1", + "extract-opts": "^3.3.1" + }, + "devDependencies": { + "bal-util": "^2.5.1", + "coffee-script": "^1.10.0", + "coffeelint": "^1.15.7", + "joe": "^1.8.0", + "joe-reporter-console": "^1.2.1", + "projectz": "^1.1.6", + "rimraf": "^2.5.3" + } +} diff --git a/node_modules/watchr/src/lib/watchr-util.coffee b/node_modules/watchr/src/lib/watchr-util.coffee new file mode 100644 index 000000000..557e23cd9 --- /dev/null +++ b/node_modules/watchr/src/lib/watchr-util.coffee @@ -0,0 +1,109 @@ +# Import +extendr = require('extendr') +extractOpts = require('extract-opts') +fsUtil = require('safefs') + +# Define +watchrUtil = + # Stat Changed + statChanged: (old, current) -> + # Has the file been deleted or created? + if old? isnt current? + return true + + # Has the file contents changed? + else if old? and current? + old = extendr.dereferenceJSON(old) + current = extendr.dereferenceJSON(current) + + delete old.atime if old.atime? + delete old.ctime if old.ctime? + delete current.atime if current.atime? + delete current.ctime if current.ctime? + + # The files contents have actually changed + if JSON.stringify(old) isnt JSON.stringify(current) + return true + + # The files contents are the same + else + return false + + # The file still does not exist + else + return false + + # Try fsUtil.watch + # opts = {path, listener} + # next(err, success, 'watch', fswatcher) + watch: (opts, next) -> + # Prepare + [opts, next] = extractOpts(opts, next) + + # Check + return next(null, false, 'watch') unless fsUtil.watch? + + # Watch + try + fswatcher = fsUtil.watch(opts.path, opts.listener) + # must pass the listener here instead of doing fswatcher.on('change', opts.listener) + # as the latter is not supported on node 0.6 (only 0.8+) + catch err + return next(err, false, 'watch', fswatcher) + + # Apply + return next(null, true, 'watch', fswatcher) + + # Try fsUtil.watchFile + # opts = {path, persistent?, interval?, listener} + # next(err, success, 'watchFile') + watchFile: (opts, next) -> + # Prepare + [opts, next] = extractOpts(opts, next) + + # Check + return next(null, false, 'watchFile') unless fsUtil.watchFile? + + # Watch + try + fsUtil.watchFile(opts.path, {persistent: opts.persistent, interval: opts.interval}, opts.listener) + catch err + return next(err, false, 'watchFile') + + # Apply + return next(null, true, 'watchFile') + + # Try one watch method first, then try the other + # opts = {path, methods?, parsistent?, interval?, listener} + # next(err, success, method, fswatcher?) + watchMethods: (opts, next) -> + # Prepare + [opts, next] = extractOpts(opts, next) + + # Prepare + opts.methods ?= ['watch', 'watchFile'] + + # Preferences + methodOne = watchrUtil[opts.methods[0]] + methodTwo = watchrUtil[opts.methods[1]] + + # Try first + methodOne opts, (errOne, success, method, fswatcher) -> + # Move on if succeeded + return next(null, success, method, fswatcher) if success + # Otherwise... + + # Try second + methodTwo opts, (errTwo, success, method, fswatcher) -> + # Move on if succeeded + return next(null, success, method, fswatcher) if success + # Otherwise... + + # Log errors and fail + errCombined = new Error("Both watch methods failed on #{opts.path}:\n#{errOne.stack.toString()}\n#{errTwo.stack.toString()}") + return next(errCombined, false, null, fswatcher) + + # Chain + return @ + +module.exports = watchrUtil diff --git a/node_modules/watchr/src/lib/watchr.coffee b/node_modules/watchr/src/lib/watchr.coffee new file mode 100644 index 000000000..24626931d --- /dev/null +++ b/node_modules/watchr/src/lib/watchr.coffee @@ -0,0 +1,884 @@ +# Require the node.js path module +# This provides us with what we need to interact with file paths +pathUtil = require('path') + +# Require our helper modules +scandir = require('scandirectory') +fsUtil = require('safefs') +ignorefs = require('ignorefs') +extendr = require('extendr') +eachr = require('eachr') +extractOpts = require('extract-opts') +typeChecker = require('typechecker') +{TaskGroup} = require('taskgroup') +watchrUtil = require('./watchr-util') + +# Require the node.js event emitter +# This provides us with the event system that we use for binding and trigger events +{EventEmitter} = require('events') + +### +Now to make watching files more convient and managed, we'll create a class which we can use to attach to each file. +It'll provide us with the API and abstraction we need to accomplish difficult things like recursion. +We'll also store a global store of all the watchers and their paths so we don't have multiple watchers going at the same time +for the same file - as that would be quite ineffecient. +Events: +- `log` for debugging, receives the arguments `logLevel ,args...` +- `error` for gracefully listening to error events, receives the arguments `err` +- `watching` for when watching of the path has completed, receives the arguments `err, watcherInstance, isWatching` +- `change` for listening to change events, receives the arguments `changeType, fullPath, currentStat, previousStat` +### +watchersTotal = 0 +watchers = {} +class Watcher extends EventEmitter + # The path this class instance is attached to + path: null + + # Our stat object, it contains things like change times, size, and is it a directory + stat: null + + # The node.js file watcher instance, we have to open and close this, it is what notifies us of the events + fswatcher: null + + # The watchers for the children of this watcher will go here + # This is for when we are watching a directory, we will scan the directory and children go here + children: null # {} + + # We have to store the current state of the watcher and it is asynchronous (things can fire in any order) + # as such, we don't want to be doing particular things if this watcher is deactivated + # valid states are: pending, active, closed, deleted + state: 'pending' + + # The method we will use to watch the files + # Preferably we use watchFile, however we may need to use watch in case watchFile doesn't exist (e.g. windows) + method: null + + # Configuration + config: + # A single path to watch + path: null + + # Listener (optional, detaults to null) + # single change listener, forwaded to @listen + listener: null + + # Listeners (optional, defaults to null) + # multiple event listeners, forwarded to @listen + listeners: null + + # Stat (optional, defaults to `null`) + # a file stat object to use for the path, instead of fetching a new one + stat: null + + # Should we output log messages? + outputLog: false + + # Interval (optional, defaults to `5007`) + # for systems that poll to detect file changes, how often should it poll in millseconds + # if you are watching a lot of files, make this value larger otherwise you will have huge memory load + # only appliable to the `watchFile` watching method + interval: 5007 + + # Persistent (optional, defaults to `true`) + # whether or not we should keep the node process alive for as long as files are still being watched + # only appliable to the `watchFile` watching method + persistent: true + + # Catchup Delay (optional, defaults to `1000`) + # Because of swap files, the original file may be deleted, and then over-written with by moving a swap file in it's place + # Without a catchup delay, we would report the original file's deletion, and ignore the swap file changes + # With a catchup delay, we would wait until there is a pause in events, then scan for the correct changes + catchupDelay: 2*1000 + + # Preferred Methods (optional, defaults to `['watch','watchFile']`) + # In which order should use the watch methods when watching the file + preferredMethods: null + + # Follow symlinks, i.e. use stat rather than lstat. (optional, default to `true`) + followLinks: true + + # Ignore Paths (optional, defaults to `false`) + # array of paths that we should ignore + ignorePaths: false + + # Ignore Hidden Files (optional, defaults to `false`) + # whether or not to ignored files which filename starts with a `.` + ignoreHiddenFiles: false + + # Ignore Common Patterns (optional, defaults to `true`) + # whether or not to ignore common undesirable file patterns (e.g. `.svn`, `.git`, `.DS_Store`, `thumbs.db`, etc) + ignoreCommonPatterns: true + + # Ignore Custom PAtterns (optional, defaults to `null`) + # any custom ignore patterns that you would also like to ignore along with the common patterns + ignoreCustomPatterns: null + + + # Now it's time to construct our watcher + # We give it a path, and give it some events to use + # Then we get to work with watching it + constructor: (opts,next) -> + # Initialize our object variables for our instance + @children = {} + @config = extendr.extend({}, @config) + @config.preferredMethods = ['watch', 'watchFile'] + + # Extract options + [opts, next] = extractOpts(opts, next) + + # Setup our instance with the configuration + @setConfig(opts) if opts + + # Start the watch setup + @watch(next) if next + + # Chain + @ + + # Set our configuration + setConfig: (opts) -> + # Apply + extendr.extend(@config, opts) + + # Path + @path = @config.path + + # Stat + if @config.stat + @stat = @config.stat + @isDirectory = @stat.isDirectory() + delete @config.stat + + # Listeners + if @config.listener or @config.listeners + @removeAllListeners() + if @config.listener + @listen(@config.listener) + delete @config.listener + if @config.listeners + @listen(@config.listeners) + delete @config.listeners + + # Chain + @ + + # Log + log: (args...) => + # Prepare + watchr = @ + config = @config + + # Output the log? + console.log(args...) if config.outputLog is true + + # Emit the log + watchr.emit('log', args...) + + # Chain + @ + + # Get Ignored Options + getIgnoredOptions: (opts={}) -> + # Prepare + config = @config + + # Return the ignore options + return { + ignorePaths: opts.ignorePaths ? config.ignorePaths + ignoreHiddenFiles: opts.ignoreHiddenFiles ? config.ignoreHiddenFiles + ignoreCommonPatterns: opts.ignoreCommonPatterns ? config.ignoreCommonPatterns + ignoreCustomPatterns: opts.ignoreCustomPatterns ? config.ignoreCustomPatterns + } + + # Is Ignored Path + isIgnoredPath: (path,opts) => + # Prepare + watchr = @ + + # Ignore? + ignore = ignorefs.isIgnoredPath(path, watchr.getIgnoredOptions(opts)) + + # Log + watchr.log('debug', "ignore: #{path} #{if ignore then 'yes' else 'no'}") + + # Return + return ignore + + # Get the latest stat object + # next(err, stat) + getStat: (next) => + # Prepare + watchr = @ + config = @config + + # Figure out what stat method we want to use + method = if config.followLinks then 'stat' else 'lstat' + + # Fetch + fsUtil[method](watchr.path, next) + + # Chain + return @ + + # Is Directory + isDirectory: -> + # Prepare + watchr = @ + + # Return is directory + return watchr.stat.isDirectory() + + + # Before we start watching, we'll have to setup the functions our watcher will need + + # Bubble + # We need something to bubble events up from a child file all the way up the top + bubble: (args...) => + # Prepare + watchr = @ + + # Log + #watchr.log('debug',"bubble on #{@path} with the args:",args) + + # Trigger + watchr.emit(args...) + + # Chain + @ + + # Bubbler + # Setup a bubble wrapper + bubbler: (eventName) => + # Prepare + watchr = @ + + # Return bubbler + return (args...) -> watchr.bubble(eventName, args...) + + ### + Listen + Add listeners to our watcher instance. + Overloaded to also accept the following: + - `changeListener` a single change listener + - `[changeListener]` an array of change listeners + - `{eventName:eventListener}` an object keyed with the event names and valued with a single event listener + - `{eventName:[eventListener]}` an object keyed with the event names and valued with an array of event listeners + ### + listen: (eventName,listener) -> + # Prepare + watchr = @ + + # Check format + unless listener? + # Alias + listeners = eventName + + # Array of change listeners + if typeChecker.isArray(listeners) + for listener in listeners + watchr.listen('change', listener) + + # Object of event listeners + else if typeChecker.isPlainObject(listeners) + for own eventName,listenerArray of listeners + # Array of event listeners + if typeChecker.isArray(listenerArray) + for listener in listenerArray + watchr.listen(eventName, listener) + # Single event listener + else + watchr.listen(eventName, listenerArray) + + # Single change listener + else + watchr.listen('change', listeners) + else + # Listen + watchr.removeListener(eventName, listener) + watchr.on(eventName, listener) + watchr.log('debug', "added a listener: on #{watchr.path} for event #{eventName}") + + # Chain + @ + + ### + Listener + A change event has fired + + Things to note: + - watchFile method + - Arguments + - currentStat - the updated stat of the changed file + - Exists even for deleted/renamed files + - previousStat - the last old stat of the changed file + - Is accurate, however we already have this + - For renamed files, it will will fire on the directory and the file + - watch method + - Arguments + - eventName - either 'rename' or 'change' + - THIS VALUE IS ALWAYS UNRELIABLE AND CANNOT BE TRUSTED + - filename - child path of the file that was triggered + - This value can also be unrealiable at times + - Both methods + - For deleted and changed files, it will fire on the file + - For new files, it will fire on the directory + + Output arguments for your emitted event will be: + - for updated files the arguments will be: `'update', fullPath, currentStat, previousStat` + - for created files the arguments will be: `'create', fullPath, currentStat, null` + - for deleted files the arguments will be: `'delete', fullPath, null, previousStat` + + In the future we will add: + - for renamed files: 'rename', fullPath, currentStat, previousStat, newFullPath + - rename is possible as the stat.ino is the same for the delete and create + ### + listenerTasks: null + listenerTimeout: null + listener: (opts, next) => + # Prepare + watchr = @ + config = @config + [opts, next] = extractOpts(opts, next) + + # Prepare properties + currentStat = null + fileExists = null + previousStat = watchr.stat + + # Log + watchr.log('debug', "Watch triggered on: #{watchr.path}") + + # Delay the execution of the listener tasks, to once the change events have stopped firing + clearTimeout(watchr.listenerTimeout) if watchr.listenerTimeout? + watchr.listenerTimeout = setTimeout( + -> + listenerTasks = watchr.listenerTasks + watchr.listenerTasks = null + watchr.listenerTimeout = null + listenerTasks.run() + config.catchupDelay or 0 + ) + + # We are a subsequent listener, in which case, just listen to the first listener tasks + if watchr.listenerTasks? + watchr.listenerTasks.done(next) if next + return @ + + # Start the detection process + watchr.listenerTasks = tasks = new TaskGroup().done (err) -> + watchr.listenersExecuting -= 1 + watchr.emit('error', err) if err + return next?(err) + + # Check if the file still exists + tasks.addTask (complete) -> + # Log + watchr.log('debug', "Watch followed through on: #{watchr.path}") + + # Check if the file still exists + fsUtil.exists watchr.path, (exists) -> + # Apply local gobal property + fileExists = exists + + # If the file still exists, then update the stat + if fileExists is false + # Log + watchr.log('debug', "Determined delete: #{watchr.path}") + + # Apply + watchr.close('deleted') + watchr.stat = null + + # Clear the remaining tasks, as they are no longer needed + tasks.clearRemaining() + return complete() + + # Update the stat of the file + watchr.getStat (err, stat) -> + # Check + return watchr.emit('error', err) if err + + # Update + watchr.stat = currentStat = stat + + # If there is a new file at the same path as the old file, then recreate the watchr + if watchr.stat.birthtime isnt previousStat.birthtime + createWatcher(@, complete) + else + # Get on with it + return complete() + + # Check if the file has changed + tasks.addTask -> + # Check if it is the same + # as if it is, then nothing has changed, so ignore + if watchrUtil.statChanged(previousStat, currentStat) is false + watchr.log('debug', "Determined same: #{watchr.path}", previousStat, currentStat) + + # Clear the remaining tasks, as they are no longer needed + tasks.clearRemaining() + + # Check what has changed + tasks.addGroup (addGroup, addTask, complete) -> + # Set this sub group to execute in parallel + @setConfig(concurrency: 0) + + # So let's check if we are a directory + if watchr.isDirectory() is false + # If we are a file, lets simply emit the change event + watchr.log('debug', "Determined update: #{watchr.path}") + watchr.emit('change', 'update', watchr.path, currentStat, previousStat) + return complete() + + # We are a direcotry + # Chances are something actually happened to a child (rename or delete) + # and if we are the same, then we should scan our children to look for renames and deletes + fsUtil.readdir watchr.path, (err,newFileRelativePaths) -> + # Error? + return complete(err) if err + + # The watch method is fast, but not reliable, so let's be extra careful about change events + if watchr.method is 'watch' + eachr watchr.children, (childFileWatcher,childFileRelativePath) -> + # Skip if the file has been deleted + return unless childFileRelativePath in newFileRelativePaths + return unless childFileWatcher + tasks.addTask (complete) -> + watchr.log('debug', "Forwarding extensive change detection to child: #{childFileRelativePath} via: #{watchr.path}") + childFileWatcher.listener(null, complete) + return + + # Find deleted files + eachr watchr.children, (childFileWatcher,childFileRelativePath) -> + # Skip if the file still exists + return if childFileRelativePath in newFileRelativePaths + + # Fetch full path + childFileFullPath = pathUtil.join(watchr.path, childFileRelativePath) + + # Skip if ignored file + if watchr.isIgnoredPath(childFileFullPath) + watchr.log('debug', "Ignored delete: #{childFileFullPath} via: #{watchr.path}") + return + + # Emit the event and note the change + watchr.log('debug', "Determined delete: #{childFileFullPath} via: #{watchr.path}") + watchr.closeChild(childFileRelativePath, 'deleted') + return + + # Find new files + eachr newFileRelativePaths, (childFileRelativePath) -> + # Skip if we are already watching this file + return if watchr.children[childFileRelativePath]? + watchr.children[childFileRelativePath] = false # reserve this file + + # Fetch full path + childFileFullPath = pathUtil.join(watchr.path, childFileRelativePath) + + # Skip if ignored file + if watchr.isIgnoredPath(childFileFullPath) + watchr.log('debug', "Ignored create: #{childFileFullPath} via: #{watchr.path}") + return + + # Emit the event and note the change + addTask (complete) -> + watchr.log('debug', "Determined create: #{childFileFullPath} via: #{watchr.path}") + watchr.watchChild( + fullPath: childFileFullPath, + relativePath: childFileRelativePath, + next: (err, childFileWatcher) -> + return complete(err) if err + watchr.emit('change', 'create', childFileFullPath, childFileWatcher.stat, null) + return complete() + ) + return + + # Read the directory, finished adding tasks to the group + return complete() + + # Tasks are executed via the timeout thing earlier + + # Chain + @ + + ### + Close + We will need something to close our listener for removed or renamed files + As renamed files are a bit difficult we will want to close and delete all the watchers for all our children too + Essentially it is a self-destruct + ### + close: (reason) -> + # Prepare + watchr = @ + + # Nothing to do? Already closed? + return @ if watchr.state isnt 'active' + + # Close + watchr.log('debug', "close: #{watchr.path}") + + # Close our children + for own childRelativePath of watchr.children + watchr.closeChild(childRelativePath, reason) + + # Close watchFile listener + if watchr.method is 'watchFile' + fsUtil.unwatchFile(watchr.path) + + # Close watch listener + if watchr.fswatcher? + watchr.fswatcher.close() + watchr.fswatcher = null + + # Updated state + if reason is 'deleted' + watchr.state = 'deleted' + watchr.emit('change', 'delete', watchr.path, null, watchr.stat) + else if reason is 'failure' + watchr.state = 'closed' + watchr.log('warn', "Failed to watch the path #{watchr.path}") + else + watchr.state = 'closed' + + # Delete our watchers reference + if watchers[watchr.path]? + delete watchers[watchr.path] + watchersTotal-- + + # Chain + @ + + # Close a child + closeChild: (fileRelativePath,reason) -> + # Prepare + watchr = @ + + # Check + if watchr.children[fileRelativePath]? + watcher = watchr.children[fileRelativePath] + watcher.close(reason) if watcher # could be "fase" for reservation + delete watchr.children[fileRelativePath] + + # Chain + @ + + ### + Watch Child + Setup watching for a child + Bubble events of the child into our instance + Also instantiate the child with our instance's configuration where applicable + next(err, watchr) + ### + watchChild: (opts, next) -> + # Prepare + watchr = @ + config = @config + [opts, next] = extractOpts(opts, next) + + # Check if we are already watching + if watchr.children[opts.relativePath] + # Provide the existing watcher + next?(null, watchr.children[opts.relativePath]) + else + # Create a new watcher for the child + watchr.children[opts.relativePath] = watch( + # Custom + path: opts.fullPath + stat: opts.stat + listeners: + 'log': watchr.bubbler('log') + 'change': (args...) -> + [changeType, path] = args + if changeType is 'delete' and path is opts.fullPath + watchr.closeChild(opts.relativePath, 'deleted') + watchr.bubble('change', args...) + 'error': watchr.bubbler('error') + next: next + + # Inherit + outputLog: config.outputLog + interval: config.interval + persistent: config.persistent + catchupDelay: config.catchupDelay + preferredMethods: config.preferredMethods + ignorePaths: config.ignorePaths + ignoreHiddenFiles: config.ignoreHiddenFiles + ignoreCommonPatterns: config.ignoreCommonPatterns + ignoreCustomPatterns: config.ignoreCustomPatterns + followLinks: config.followLinks + ) + + # Return the watchr + return watchr.children[opts.relativePath] + + ### + Watch Children + next(err, watching) + ### + watchChildren: (next) -> + # Prepare + watchr = @ + config = @config + + # Cycle through the directory if necessary + if watchr.isDirectory() + scandir( + # Path + path: watchr.path + + # Options + ignorePaths: config.ignorePaths + ignoreHiddenFiles: config.ignoreHiddenFiles + ignoreCommonPatterns: config.ignoreCommonPatterns + ignoreCustomPatterns: config.ignoreCustomPatterns + recurse: false + + # Next + next: (err) -> + watching = !err + return next(err, watching) + + # File and Directory Actions + action: (fullPath,relativePath,nextFile) -> + # Check we are still releveant + if watchr.state isnt 'active' + return nextFile(null, true) # skip without error + + # Watch this child + watchr.watchChild {fullPath, relativePath}, (err,watcher) -> + return nextFile(err) + ) + + else + next(null, true) + + # Chain + @ + + ### + Watch Self + next(err, watching) + ### + watchSelf: (next) -> + # Prepare + watchr = @ + config = @config + + # Reset the method + watchr.method = null + + # Try the watch + watchrUtil.watchMethods( + path: watchr.path + methods: config.preferredMethods + persistent: config.persistent + interval: config.interval + listener: -> watchr.listener() + next: (err, success, method, fswatcher) -> + # Check + watchr.fswatcher = fswatcher + watchr.emit('error', err) if err + + # Error? + if !success + watchr.close('failure') + return next(null, false) + + # Apply + watchr.method = method + watchr.state = 'active' + + # Forward + return next(null, true) + ) + + # Chain + @ + + ### + Watch + Setup the native watching handlers for our path so we can receive updates on when things happen + If the next argument has been received, then add it is a once listener for the watching event + If we are already watching this path then let's start again (call close) + If we are a directory, let's recurse + If we are deleted, then don't error but return the isWatching argument of our completion callback as false + Once watching has completed for this directory and all children, then emit the watching event + next(err, watchr, watching) + ### + watch: (next) -> + # Prepare + watchr = @ + config = @config + + # Prepare + complete = (err, watching) -> + # Prepare + err ?= null + watching ?= true + + # Failure + if err or !watching + watchr.close() + next?(err, watchr, false) + watchr.emit('watching', err, watchr, false) + + # Success + else + next?(null, watchr, true) + watchr.emit('watching', null, watchr, true) + + # Ensure Stat + if watchr.stat? is false + # Fetch the stat + watchr.getStat (err, stat) -> + # Error + return complete(err, false) if err or !stat + + # Apply + watchr.stat = stat + + # Recurse + return watchr.watch(next) + + # Chain + return @ + + # Close our all watch listeners + watchr.close() + + # Log + watchr.log('debug', "watch: #{@path}") + + # Watch ourself + watchr.watchSelf (err, watching) -> + return complete(err, watching) if err or !watching + + # Watch the childrne + watchr.watchChildren (err, watching) -> + return complete(err, watching) + + # Chain + @ + + +### +Create Watcher +Checks to see if the path actually exists, if it doesn't then exit gracefully +If it does exist, then lets check our cache for an already existing watcher instance +If we have an already existing watching instance, then just add our listeners to that +If we don't, then create a watching instance +Fire the next callback once done +opts = {path, listener, listeners} +opts = watcher instance +next(err,watcherInstance) +### +createWatcher = (opts,next) -> + # Prepare + [opts, next] = extractOpts(opts, next) + + # Only create a watchr if the path exists + unless fsUtil.existsSync(opts.path) + next?(null, null) + return + + # Should we clone a watcher instance? + # By copying relevant configuration, closing the old watcher, and creating a new + if opts instanceof Watcher + opts.close() + opts = extendr.extend({}, opts.config, { + listener: opts.listener, + listeners: opts.listeners + }) + # continue to create a new, watchers[opts.path] should be deleted now due to opts.close + + # Use existing + if watchers[opts.path]? + # We do, so let's use that one instead + watcher = watchers[opts.path] + + # and add the new listeners if we have any + watcher.listen(opts.listener) if opts.listener + watcher.listen(opts.listeners) if opts.listeners + + # as we don't create a new watcher, we must fire the next callback ourselves + next?(null, watcher) + + # Create a new one + else + # We don't, so let's create a new one + attempt = 0 + watcher = new Watcher opts, (err) -> + # Continue if we passed + return next?(err, watcher) if !err or attempt isnt 0 + ++attempt + + # Log + watcher.log('debug', "Preferred method failed, trying methods in reverse order", err) + + # Otherwise try again with the other preferred method + watcher + .setConfig( + preferredMethods: watcher.config.preferredMethods.reverse() + ) + .watch() + + # Save the watcher + watchers[opts.path] = watcher + ++watchersTotal + + # Return + return watcher + + +### +Watch +Provides an abstracted API that supports multiple paths +If you are passing in multiple paths then do not rely on the return result containing all of the watchers +you must rely on the result inside the completion callback instead +If you used the paths option, then your results will be an array of watcher instances, otherwise they will be a single watcher instance +next(err,results) +### +watch = (opts,next) -> + # Prepare + [opts, next] = extractOpts(opts, next) + + # Prepare + result = [] + + # Check paths as that is handled by us + if opts.paths + # Extract it and delte it from the opts + paths = opts.paths + delete opts.paths + + # Check its format + if typeChecker.isArray(paths) + # Prepare + tasks = new TaskGroup(concurrency:0).whenDone (err) -> + next?(err, result) + paths.forEach (path) -> + tasks.addTask (complete) -> + localOpts = extendr.extend({}, opts, {path}) + watcher = createWatcher(localOpts,complete) + result.push(watcher) if watcher + tasks.run() + + # Paths is actually a single path + else + opts.path = paths + result.push createWatcher opts, (err) -> + next?(err, result) + + # Single path + else + result = createWatcher(opts, next) + + # Return + return result + +# Now let's provide node.js with our public API +# In other words, what the application that calls us has access to +module.exports = { + watch: watch + Watcher: Watcher +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..69b65165f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2283 @@ +{ + "name": "fasten-onprem", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "docker": "^1.0.0" + } + }, + "node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "optional": true, + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/ambi": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-3.2.0.tgz", + "integrity": "sha512-nj5sHLPFd7u2OLmHdFs4DHt3gK6edpNw35hTRIKyI/Vd2Th5e4io50rw1lhmCdUNO2Mm4/4FkHmv6shEANAWcw==", + "dependencies": { + "editions": "^2.1.0", + "typechecker": "^4.3.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "optional": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "optional": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "optional": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "optional": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "optional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "optional": true + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "optional": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "optional": true + }, + "node_modules/cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "dependencies": { + "boom": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/csextends": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/csextends/-/csextends-1.2.0.tgz", + "integrity": "sha512-S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashdash/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/docker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/docker/-/docker-1.0.0.tgz", + "integrity": "sha512-U66G/kvvsCTUh6VsZqnWgsoSG1KRu5jR473fn/64E6EU9cH65afCITx2qITmNPkr3IOehcn1wwXHmIvHYBlLgQ==", + "dependencies": { + "async": "^1.4.0", + "commander": "^2.9.0", + "css": "^2.2.1", + "dox": "^0.8.0", + "ejs": "^2.3.3", + "extend": "^3.0.0", + "highlight.js": "^9.3.0", + "less": "^2.5.1", + "markdown-it": "^6.0.1", + "mkdirp": "^0.5.1", + "repeating": "^2.0.1", + "strip-indent": "^2.0.0", + "toc": "^0.4.0", + "watchr": "^2.4.13" + }, + "bin": { + "docker": "docker", + "docker.js": "docker" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dox": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/dox/-/dox-0.8.1.tgz", + "integrity": "sha512-CJJCQS6XYJ2FQJox4ey7pUdaAjDusPLqGtfe3Jli4N+m2jBKrT9zwEsh2thV9W5d8F359AMWqkWk50CuH3r8dw==", + "dependencies": { + "commander": "~2.9.0", + "jsdoctypeparser": "^1.2.0", + "marked": "~0.3.5" + }, + "bin": { + "dox": "bin/dox" + } + }, + "node_modules/dox/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/eachr": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.3.0.tgz", + "integrity": "sha512-yKWuGwOE283CTgbEuvqXXusLH4VBXnY2nZbDkeWev+cpAXY6zCIADSPLdvfkAROc0t8S4l07U1fateCdEDuuvg==", + "dependencies": { + "editions": "^2.2.0", + "typechecker": "^4.9.0" + }, + "engines": { + "node": ">=0.10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "optional": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/editions": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz", + "integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==", + "dependencies": { + "errlop": "^2.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/errlop": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz", + "integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==", + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extendr": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/extendr/-/extendr-3.5.0.tgz", + "integrity": "sha512-7zpVbnnZy91J4k916ZGwpys56DEgJc/prTXDiqCYe/Mud5pqdVsSc9mG/U6sz3lQEvHs81i8Zi7whsFwifhZyw==", + "dependencies": { + "editions": "^2.2.0", + "typechecker": "^4.7.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + } + }, + "node_modules/extract-opts": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0.tgz", + "integrity": "sha512-M7Y+1cJDkzOWqvGH5F/V2qgkD6+uitW3NV9rQGl+pLSVuXZ4IDDQgxxMeLPKcWUyfypBWczIILiroSuhXG7Ytg==", + "dependencies": { + "eachr": "^3.2.0", + "editions": "^2.2.0", + "typechecker": "^4.9.0" + }, + "engines": { + "node": ">=0.10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/getpass/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + }, + "node_modules/har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ==", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw==", + "deprecated": "this library is no longer supported", + "optional": true, + "dependencies": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==", + "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "optional": true, + "dependencies": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "deprecated": "Support has ended for 9.x series. Upgrade to @latest", + "hasInstallScript": true, + "engines": { + "node": "*" + } + }, + "node_modules/hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==", + "optional": true, + "dependencies": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/ignorefs": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.4.1.tgz", + "integrity": "sha512-1whgvOsPWFZRNA/5OFhIk56C9Y39+/CYaRVNvsZZkLymacOSqqdSU53xk8CP3G2u5gz2PX6RLxqKPcsIpDriog==", + "dependencies": { + "editions": "^2.2.0", + "ignorepatterns": "^1.4.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ignorepatterns": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.4.0.tgz", + "integrity": "sha512-YPBIFRB25iZD0WiLxmToe80+QU+mZI+bUlEh3Ze/4gbhlXHdQFk0SwAFQtPOiBAoDv3FvhtSTDUCD9DKFsHTRA==", + "dependencies": { + "editions": "^2.2.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "optional": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "optional": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "optional": true + }, + "node_modules/jsdoctypeparser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "integrity": "sha512-osXm4Fr1o/Jc0YwUM7DHUliYtaunLQxh4ynZgtN02mTUN1VsNbMy75DFSkKRne8xE8jiGRV9NKVhYYYa8ZIHXQ==", + "dependencies": { + "lodash": "^3.7.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "optional": true + }, + "node_modules/json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "optional": true, + "dependencies": { + "jsonify": "^0.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "optional": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=0.12" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/linkify-it": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz", + "integrity": "sha512-eGHwtlABkp1NOJSiKUNqBf3SYAS5jPHtvRXPAgNaQwTqmkTahjtiLH9NtxdR5IOPhNvwNMN/diswSfZKzUkhGg==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==" + }, + "node_modules/markdown-it": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-6.1.1.tgz", + "integrity": "sha512-woFl7h/sqt9xRmiMweNuO7nu+w8Lz3SXsDlvE3TYeu1SdPqQ+VW4GZyaKP442Bq6XUN6V6IQjJTR93RDYG2mjw==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "~1.2.2", + "mdurl": "~1.0.1", + "uc.micro": "^1.0.1" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "optional": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==", + "optional": true + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "optional": true + }, + "node_modules/qs": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.1.tgz", + "integrity": "sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ==", + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "optional": true, + "dependencies": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/safefs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-4.2.0.tgz", + "integrity": "sha512-1amPBO92jw/hWS+gH/u7z7EL7YxaJ8WecBQl49tMQ6Y6EQfndxNNKwlPqDOcwpUetdmK6nKLoVdjybVScRwq5A==", + "dependencies": { + "editions": "^2.2.0", + "graceful-fs": "^4.2.3" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + } + }, + "node_modules/safeps": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/safeps/-/safeps-7.0.1.tgz", + "integrity": "sha512-aFREKZzceHZH3KZTwjhDI1oOOcyAEBcQHjImJS/Mmx+KC31EQCgwiPKfwhJLBX7R4Y5ioI2D/VEcQ6U6ya2MJw==", + "dependencies": { + "editions": "^1.3.3", + "extract-opts": "^3.3.1", + "safefs": "^4.1.0", + "taskgroup": "^5.0.0", + "typechecker": "^4.3.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/safeps/node_modules/editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "optional": true + }, + "node_modules/scandirectory": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz", + "integrity": "sha512-uT0CW8Z3YyoIQs2gXIZgR5miLkN/UNl+5IptQIq1YfD2NhFldikYlC3dkOE6MvF15OZMOxjg8yOjx5J/vIIPUA==", + "dependencies": { + "ignorefs": "^1.0.0", + "safefs": "^3.1.2", + "taskgroup": "^4.0.5" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/scandirectory/node_modules/ambi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz", + "integrity": "sha512-5nS0gYMPNgZz/UALDHMStcwO42youpIWBQVbI92vV5j0+2bMxv/iVqearrLu3/f0XaU6xVIbf3RRtDxOcHxSkw==", + "dependencies": { + "editions": "^1.1.1", + "typechecker": "^4.3.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/scandirectory/node_modules/editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/scandirectory/node_modules/safefs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz", + "integrity": "sha512-qqvuS8qslGUSgUKQbdsYIK8Qg0EAkykxlsdfy3jpBSnhtyPsee/8y4RLc5+3CD6TgazBmtT0ekoGicUTPzICdg==", + "dependencies": { + "graceful-fs": "*" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/scandirectory/node_modules/taskgroup": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz", + "integrity": "sha512-PD97E2OfwFH7SgeVRvR6K2c+NkKXZSwMMTdcM1t/3P+f70DUWbR81Qx7TF7dJj8dV631u4dhdBmhfDQjIZvGsg==", + "dependencies": { + "ambi": "^2.2.0", + "csextends": "^1.0.3" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slug": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/slug/-/slug-0.4.2.tgz", + "integrity": "sha512-HQRxdDjtXsKG1pw8rBXGRq9fdW2fS2xPaizvJ3MK89x9+V8U0Z8//meWzJUdFW52pFDGqkLfyX+Fij7lkRY6Kw==", + "dependencies": { + "unicode": ">= 0.3.1" + }, + "engines": { + "node": ">= 0.4.x" + } + }, + "node_modules/sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==", + "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "optional": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "optional": true + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/taskgroup": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-5.5.0.tgz", + "integrity": "sha512-YFkdc6HU+p3xO2lZ1MWdx7R7EbrLF/bpXv5k9635bTzdgOLNbmnsDg5alSpZost+PYMk40d6ZDAJHBHNHiiLvw==", + "dependencies": { + "ambi": "3.2.0", + "eachr": "^3.2.0", + "editions": "^2.2.0", + "extendr": "^3.5.0", + "safeps": "7.0.1", + "unbounded": "^1.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "type": "cooperative", + "url": "https://bevry.me/fund" + } + }, + "node_modules/toc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/toc/-/toc-0.4.0.tgz", + "integrity": "sha512-Z4MqUbtLQrbJLQQFLKK0g5tGmke0vqB8puHrXXgRfPyLJTcsn5ACy/uxVnMrg6wSWPoS2hvVpw6wSAFYAkAEVA==", + "dependencies": { + "entities": "~0.5.0", + "lodash": "~2.4.1", + "slug": "~0.4.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/toc/node_modules/entities": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-0.5.0.tgz", + "integrity": "sha512-T5XQtlzuW+PfeSsGp3uryfYQof820zYbnUnUDEkwUVIAfgYeixIN16c4jh8gs0SqJUTGLU0XD6QsvjEPbmdwzQ==" + }, + "node_modules/toc/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "optional": true + }, + "node_modules/typechecker": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.11.0.tgz", + "integrity": "sha512-lz39Mc/d1UBcF/uQFL5P8L+oWdIn/stvkUgHf0tPRW4aEwGGErewNXo2Nb6We2WslWifn00rhcHbbRWRcTGhuw==", + "dependencies": { + "editions": "^2.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/unbounded": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/unbounded/-/unbounded-1.3.0.tgz", + "integrity": "sha512-RWVCkvcoItljlNTz0iTdBQU6bDj+slVLNaWN7d6DXgH02FfYrz8ytcJ4OPW8b0HqmCehwufJHOIzjHWrQUXBvg==", + "dependencies": { + "editions": "^2.2.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/unicode": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/unicode/-/unicode-14.0.0.tgz", + "integrity": "sha512-BjinxTXkbm9Jomp/YBTMGusr4fxIG67fNGShHIRAL16Ur2GJTq2xvLi+sxuiJmInCmwqqev2BCFKyvbfp/yAkg==", + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "optional": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/watchr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.6.0.tgz", + "integrity": "sha512-eHqnPA71jn+lLf/c49mjXqQzzwKLmDdLZXiB53PtgBY8X75zqUWL2PmJWjJ45Bcy8PHOMDdVUCLEud36Lk5QZQ==", + "dependencies": { + "eachr": "^3.2.0", + "extendr": "^3.2.2", + "extract-opts": "^3.3.1", + "ignorefs": "^1.1.1", + "safefs": "^4.1.0", + "scandirectory": "^2.5.0", + "taskgroup": "^5.0.1", + "typechecker": "^4.3.0" + }, + "bin": { + "watchr": "bin/watchr" + }, + "engines": { + "node": ">=0.12" + } + } + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ambi": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-3.2.0.tgz", + "integrity": "sha512-nj5sHLPFd7u2OLmHdFs4DHt3gK6edpNw35hTRIKyI/Vd2Th5e4io50rw1lhmCdUNO2Mm4/4FkHmv6shEANAWcw==", + "requires": { + "editions": "^2.1.0", + "typechecker": "^4.3.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "optional": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "optional": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==", + "optional": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "optional": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==", + "optional": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "optional": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==", + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "optional": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "optional": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "optional": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==", + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, + "csextends": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/csextends/-/csextends-1.2.0.tgz", + "integrity": "sha512-S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg==" + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true + } + } + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "optional": true + }, + "docker": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/docker/-/docker-1.0.0.tgz", + "integrity": "sha512-U66G/kvvsCTUh6VsZqnWgsoSG1KRu5jR473fn/64E6EU9cH65afCITx2qITmNPkr3IOehcn1wwXHmIvHYBlLgQ==", + "requires": { + "async": "^1.4.0", + "commander": "^2.9.0", + "css": "^2.2.1", + "dox": "^0.8.0", + "ejs": "^2.3.3", + "extend": "^3.0.0", + "highlight.js": "^9.3.0", + "less": "^2.5.1", + "markdown-it": "^6.0.1", + "mkdirp": "^0.5.1", + "repeating": "^2.0.1", + "strip-indent": "^2.0.0", + "toc": "^0.4.0", + "watchr": "^2.4.13" + } + }, + "dox": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/dox/-/dox-0.8.1.tgz", + "integrity": "sha512-CJJCQS6XYJ2FQJox4ey7pUdaAjDusPLqGtfe3Jli4N+m2jBKrT9zwEsh2thV9W5d8F359AMWqkWk50CuH3r8dw==", + "requires": { + "commander": "~2.9.0", + "jsdoctypeparser": "^1.2.0", + "marked": "~0.3.5" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "eachr": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.3.0.tgz", + "integrity": "sha512-yKWuGwOE283CTgbEuvqXXusLH4VBXnY2nZbDkeWev+cpAXY6zCIADSPLdvfkAROc0t8S4l07U1fateCdEDuuvg==", + "requires": { + "editions": "^2.2.0", + "typechecker": "^4.9.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editions": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz", + "integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==", + "requires": { + "errlop": "^2.0.0", + "semver": "^6.3.0" + } + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "errlop": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz", + "integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extendr": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/extendr/-/extendr-3.5.0.tgz", + "integrity": "sha512-7zpVbnnZy91J4k916ZGwpys56DEgJc/prTXDiqCYe/Mud5pqdVsSc9mG/U6sz3lQEvHs81i8Zi7whsFwifhZyw==", + "requires": { + "editions": "^2.2.0", + "typechecker": "^4.7.0" + } + }, + "extract-opts": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0.tgz", + "integrity": "sha512-M7Y+1cJDkzOWqvGH5F/V2qgkD6+uitW3NV9rQGl+pLSVuXZ4IDDQgxxMeLPKcWUyfypBWczIILiroSuhXG7Ytg==", + "requires": { + "eachr": "^3.2.0", + "editions": "^2.2.0", + "typechecker": "^4.9.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "optional": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true + } + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ==", + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw==", + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==", + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==" + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==", + "optional": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==", + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "ignorefs": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.4.1.tgz", + "integrity": "sha512-1whgvOsPWFZRNA/5OFhIk56C9Y39+/CYaRVNvsZZkLymacOSqqdSU53xk8CP3G2u5gz2PX6RLxqKPcsIpDriog==", + "requires": { + "editions": "^2.2.0", + "ignorepatterns": "^1.4.0" + } + }, + "ignorepatterns": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.4.0.tgz", + "integrity": "sha512-YPBIFRB25iZD0WiLxmToe80+QU+mZI+bUlEh3Ze/4gbhlXHdQFk0SwAFQtPOiBAoDv3FvhtSTDUCD9DKFsHTRA==", + "requires": { + "editions": "^2.2.0" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "optional": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "optional": true + }, + "jsdoctypeparser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "integrity": "sha512-osXm4Fr1o/Jc0YwUM7DHUliYtaunLQxh4ynZgtN02mTUN1VsNbMy75DFSkKRne8xE8jiGRV9NKVhYYYa8ZIHXQ==", + "requires": { + "lodash": "^3.7.0" + } + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "optional": true, + "requires": { + "jsonify": "^0.0.1" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true + }, + "jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "optional": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true + } + } + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "optional": true + } + } + }, + "linkify-it": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz", + "integrity": "sha512-eGHwtlABkp1NOJSiKUNqBf3SYAS5jPHtvRXPAgNaQwTqmkTahjtiLH9NtxdR5IOPhNvwNMN/diswSfZKzUkhGg==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==" + }, + "markdown-it": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-6.1.1.tgz", + "integrity": "sha512-woFl7h/sqt9xRmiMweNuO7nu+w8Lz3SXsDlvE3TYeu1SdPqQ+VW4GZyaKP442Bq6XUN6V6IQjJTR93RDYG2mjw==", + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "~1.2.2", + "mdurl": "~1.0.1", + "uc.micro": "^1.0.1" + } + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "optional": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "optional": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==", + "optional": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==", + "optional": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "optional": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "optional": true + }, + "qs": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.1.tgz", + "integrity": "sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ==", + "optional": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw==", + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "optional": true + }, + "safefs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-4.2.0.tgz", + "integrity": "sha512-1amPBO92jw/hWS+gH/u7z7EL7YxaJ8WecBQl49tMQ6Y6EQfndxNNKwlPqDOcwpUetdmK6nKLoVdjybVScRwq5A==", + "requires": { + "editions": "^2.2.0", + "graceful-fs": "^4.2.3" + } + }, + "safeps": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/safeps/-/safeps-7.0.1.tgz", + "integrity": "sha512-aFREKZzceHZH3KZTwjhDI1oOOcyAEBcQHjImJS/Mmx+KC31EQCgwiPKfwhJLBX7R4Y5ioI2D/VEcQ6U6ya2MJw==", + "requires": { + "editions": "^1.3.3", + "extract-opts": "^3.3.1", + "safefs": "^4.1.0", + "taskgroup": "^5.0.0", + "typechecker": "^4.3.0" + }, + "dependencies": { + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" + } + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "optional": true + }, + "scandirectory": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz", + "integrity": "sha512-uT0CW8Z3YyoIQs2gXIZgR5miLkN/UNl+5IptQIq1YfD2NhFldikYlC3dkOE6MvF15OZMOxjg8yOjx5J/vIIPUA==", + "requires": { + "ignorefs": "^1.0.0", + "safefs": "^3.1.2", + "taskgroup": "^4.0.5" + }, + "dependencies": { + "ambi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz", + "integrity": "sha512-5nS0gYMPNgZz/UALDHMStcwO42youpIWBQVbI92vV5j0+2bMxv/iVqearrLu3/f0XaU6xVIbf3RRtDxOcHxSkw==", + "requires": { + "editions": "^1.1.1", + "typechecker": "^4.3.0" + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" + }, + "safefs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz", + "integrity": "sha512-qqvuS8qslGUSgUKQbdsYIK8Qg0EAkykxlsdfy3jpBSnhtyPsee/8y4RLc5+3CD6TgazBmtT0ekoGicUTPzICdg==", + "requires": { + "graceful-fs": "*" + } + }, + "taskgroup": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz", + "integrity": "sha512-PD97E2OfwFH7SgeVRvR6K2c+NkKXZSwMMTdcM1t/3P+f70DUWbR81Qx7TF7dJj8dV631u4dhdBmhfDQjIZvGsg==", + "requires": { + "ambi": "^2.2.0", + "csextends": "^1.0.3" + } + } + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "slug": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/slug/-/slug-0.4.2.tgz", + "integrity": "sha512-HQRxdDjtXsKG1pw8rBXGRq9fdW2fS2xPaizvJ3MK89x9+V8U0Z8//meWzJUdFW52pFDGqkLfyX+Fij7lkRY6Kw==", + "requires": { + "unicode": ">= 0.3.1" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==", + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true + } + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "optional": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==" + }, + "taskgroup": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-5.5.0.tgz", + "integrity": "sha512-YFkdc6HU+p3xO2lZ1MWdx7R7EbrLF/bpXv5k9635bTzdgOLNbmnsDg5alSpZost+PYMk40d6ZDAJHBHNHiiLvw==", + "requires": { + "ambi": "3.2.0", + "eachr": "^3.2.0", + "editions": "^2.2.0", + "extendr": "^3.5.0", + "safeps": "7.0.1", + "unbounded": "^1.2.0" + } + }, + "toc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/toc/-/toc-0.4.0.tgz", + "integrity": "sha512-Z4MqUbtLQrbJLQQFLKK0g5tGmke0vqB8puHrXXgRfPyLJTcsn5ACy/uxVnMrg6wSWPoS2hvVpw6wSAFYAkAEVA==", + "requires": { + "entities": "~0.5.0", + "lodash": "~2.4.1", + "slug": "~0.4.2" + }, + "dependencies": { + "entities": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-0.5.0.tgz", + "integrity": "sha512-T5XQtlzuW+PfeSsGp3uryfYQof820zYbnUnUDEkwUVIAfgYeixIN16c4jh8gs0SqJUTGLU0XD6QsvjEPbmdwzQ==" + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==" + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "optional": true + }, + "typechecker": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.11.0.tgz", + "integrity": "sha512-lz39Mc/d1UBcF/uQFL5P8L+oWdIn/stvkUgHf0tPRW4aEwGGErewNXo2Nb6We2WslWifn00rhcHbbRWRcTGhuw==", + "requires": { + "editions": "^2.2.0" + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "unbounded": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/unbounded/-/unbounded-1.3.0.tgz", + "integrity": "sha512-RWVCkvcoItljlNTz0iTdBQU6bDj+slVLNaWN7d6DXgH02FfYrz8ytcJ4OPW8b0HqmCehwufJHOIzjHWrQUXBvg==", + "requires": { + "editions": "^2.2.0" + } + }, + "unicode": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/unicode/-/unicode-14.0.0.tgz", + "integrity": "sha512-BjinxTXkbm9Jomp/YBTMGusr4fxIG67fNGShHIRAL16Ur2GJTq2xvLi+sxuiJmInCmwqqev2BCFKyvbfp/yAkg==" + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "optional": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "optional": true + } + } + }, + "watchr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.6.0.tgz", + "integrity": "sha512-eHqnPA71jn+lLf/c49mjXqQzzwKLmDdLZXiB53PtgBY8X75zqUWL2PmJWjJ45Bcy8PHOMDdVUCLEud36Lk5QZQ==", + "requires": { + "eachr": "^3.2.0", + "extendr": "^3.2.2", + "extract-opts": "^3.3.1", + "ignorefs": "^1.1.1", + "safefs": "^4.1.0", + "scandirectory": "^2.5.0", + "taskgroup": "^5.0.1", + "typechecker": "^4.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..e511fb3a8 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "docker": "^1.0.0" + } +}